@pstdio/workbench 0.4.0 → 0.6.0
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/README.md +66 -72
- package/dist/composition-resolver-types-CWykPyEK.js +241 -0
- package/dist/composition-resolver-types-CWykPyEK.js.map +1 -0
- package/dist/extensions.d.ts +359 -43
- package/dist/extensions.js +1595 -1044
- package/dist/extensions.js.map +1 -1
- package/dist/file-renderer-view-zpunbE4I.js +432 -0
- package/dist/file-renderer-view-zpunbE4I.js.map +1 -0
- package/dist/file-section-navigation-CfYqVObc.js +30 -0
- package/dist/file-section-navigation-CfYqVObc.js.map +1 -0
- package/dist/index.d.ts +287 -19
- package/dist/index.js +2323 -2011
- package/dist/index.js.map +1 -1
- package/dist/layout-types-DMoZz38-.js.map +1 -1
- package/dist/react.d.ts +157 -16
- package/dist/react.js +2675 -2736
- package/dist/react.js.map +1 -1
- package/dist/storage.d.ts +96 -2
- package/dist/storage.js +173 -115
- package/dist/storage.js.map +1 -1
- package/dist/testing.d.ts +146 -14
- package/dist/webview-runtime.js +1 -1
- package/dist/webview-runtime.js.map +1 -1
- package/dist/workbench-built-ins-BtgeB274.js +1171 -0
- package/dist/workbench-built-ins-BtgeB274.js.map +1 -0
- package/dist/workbench-menu-paths-Bb0ICxeG.js +20 -0
- package/dist/workbench-menu-paths-Bb0ICxeG.js.map +1 -0
- package/package.json +3 -3
- package/dist/context-key-service-W4QEfVdN.js +0 -1031
- package/dist/context-key-service-W4QEfVdN.js.map +0 -1
- package/dist/file-renderer-view-DrrhYnb_.js +0 -171
- package/dist/file-renderer-view-DrrhYnb_.js.map +0 -1
- package/dist/workbench-menu-paths-B_QJzcNU.js +0 -12
- package/dist/workbench-menu-paths-B_QJzcNU.js.map +0 -1
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sources":["../src/react/shared/use-workbench-store.ts","../src/react/breadcrumb/breadcrumb-view.tsx","../src/react/theme/workbench-theme-background.ts","../src/react/command-palette/command-palette-params.ts","../src/react/command-palette/palette-view.tsx","../src/react/command-palette/command-palette-resources.tsx","../src/react/command-palette/command-param-field.tsx","../src/react/command-palette/command-params-dialog.tsx","../src/react/command-palette/mode-palette.tsx","../src/react/region/panel-widget-open.ts","../src/react/command-palette/panel-widget-palette.tsx","../src/react/command-palette/resource-palette.tsx","../src/react/command-palette/theme-palette.tsx","../src/react/command-palette/command-palette.tsx","../src/react/focus/focus-region.tsx","../src/react/menus/menu-items.ts","../src/react/header/header-action-items.ts","../src/react/header/header-actions.tsx","../src/react/keep-alive/use-workbench-claim.ts","../src/react/keep-alive/workbench-keep-alive-layer.tsx","../src/react/keybindings/tanstack-hotkey-adapter.ts","../src/react/keybindings/workbench-keybinding-dispatcher.tsx","../src/react/renderers/tree/tree-actions.tsx","../src/react/menus/resource-actions.tsx","../src/react/notifications/notification-host.tsx","../src/react/shared/use-workbench-location-resource.ts","../src/react/region/widget-host.tsx","../src/react/region/region.tsx","../src/react/region/panel-add-menu.tsx","../src/react/region/region-tabs-visibility.ts","../src/react/region/region-tabs-visibility-hooks.ts","../src/react/region/region-tab.tsx","../src/react/region/sortable-region-tab-list.tsx","../src/react/region/region-tabs.tsx","../src/react/renderers/data-table/data-table-view-model.ts","../src/react/renderers/data-table/data-table-view.tsx","../src/react/renderers/settings/preference-schema-to-params.ts","../src/react/renderers/settings/preferences-form.tsx","../src/react/renderers/tree/tree-list-adapter.tsx","../src/react/renderers/tree/tree-view-body.tsx","../src/react/renderers/tree/tree-view-load.ts","../src/react/renderers/tree/tree-view-navigation.ts","../src/react/renderers/tree/use-tree-view-customization.ts","../src/react/renderers/tree/tree-view.tsx","../src/react/settings/use-settings-revision.ts","../src/react/settings/settings-surface-panel.tsx","../src/react/settings/settings-overlay.tsx","../src/react/settings/settings-resources.ts","../src/react/settings/settings-tree.ts","../src/react/settings/settings-module.tsx","../src/react/workbench/workbench-panel-state.ts","../src/react/panel-menu/panel-menu-sizing.ts","../src/react/panel-menu/panel-menu.tsx","../src/react/side-panel/side-panel.tsx","../src/react/terminal/workbench-terminal-panel.tsx","../src/react/terminal/terminal-module.tsx","../src/react/theme/use-workbench-theme-preferences.ts","../src/react/theme/workbench-theme-provider.tsx","../src/react/theme/workbench-theme-scope.tsx","../src/react/workbench/overlay-layer.tsx","../src/react/header/resource-actions.tsx","../src/react/header/workbench-nav-chrome.tsx","../src/react/renderers/controls/controls-view.tsx","../src/react/renderers/controls/install-controls-renderer.ts","../src/react/renderers/data-table/install-data-table-renderer.ts","../src/react/renderers/file/install-file-renderer.ts","../src/react/renderers/kanban/kanban-view-query.ts","../src/react/renderers/kanban/kanban-view-storage.ts","../src/react/renderers/kanban/kanban-view.tsx","../src/react/renderers/kanban/install-kanban-renderer.ts","../src/react/renderers/tree/install-tree-renderer.ts","../src/react/theme/use-workbench-file-icon-theme-preferences.ts","../src/react/workbench/use-workbench-region-content.ts","../src/react/workbench/header-bottom-border.tsx","../src/react/workbench/use-workbench-main-panels.ts","../src/react/workbench/workbench-secondary-panel.tsx","../src/react/workbench/workbench-body.tsx","../src/react/workbench/workbench-panels.tsx","../src/react/workbench/workbench-side-panel-layout.tsx","../src/react/workbench/workbench-side-panel-boundary.tsx","../src/react/workbench/workbench.tsx","../src/react/workbench/workbench-module-host.tsx"],"sourcesContent":["import { useStore } from \"zustand\";\nimport type { WorkbenchStore } from \"../../core\";\n\nexport const useWorkbenchStore = <TState, TSlice>(store: WorkbenchStore<TState>, selector: (state: TState) => TSlice) =>\n useStore(store, selector);\n","import { HStack, Text } from \"@chakra-ui/react\";\nimport { Breadcrumb, type SessionCompletionStatus, SessionIndicator } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchBreadcrumbItem, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchBreadcrumbViewProps {\n workbench: WorkbenchCore;\n}\n\nconst getSessionStatus = (item: WorkbenchBreadcrumbItem) =>\n typeof item.resource?.metadata?.status === \"string\"\n ? (item.resource.metadata.status as SessionCompletionStatus)\n : undefined;\n\nconst WorkbenchBreadcrumbIcon = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const status = getSessionStatus(item);\n\n if (item.indicator === \"session-status\" || item.resource?.kind === \"session\") {\n return <SessionIndicator status={status} boxSize=\"14px\" />;\n }\n\n if (!item.icon) return null;\n\n return (\n <Text as=\"span\" aria-hidden=\"true\" color=\"fg.muted\" display=\"inline-flex\" flexShrink={0}>\n <WorkbenchIcon name={item.icon} size={14} />\n </Text>\n );\n};\n\nconst WorkbenchBreadcrumbTitle = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const title = item.title as ReactNode;\n\n return (\n <HStack as=\"span\" gap=\"2xs\" minW=\"0\">\n <WorkbenchBreadcrumbIcon item={item} />\n <Text as=\"span\" minW=\"0\" maxW=\"15rem\" truncate>\n {title}\n </Text>\n </HStack>\n );\n};\n\nexport const buildWorkbenchBreadcrumbItems = (items: WorkbenchBreadcrumbItem[] | undefined) =>\n (items ?? []).map((item) => ({\n title: <WorkbenchBreadcrumbTitle item={item} />,\n url: item.url,\n onClick: item.onClick,\n }));\n\nexport const WorkbenchBreadcrumbView = (props: WorkbenchBreadcrumbViewProps) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n\n if (items.length === 0) return null;\n\n return (\n <Breadcrumb items={buildWorkbenchBreadcrumbItems(items)} separator=\"/\" separatorGap=\"xs\" display=\"flex\" h=\"full\" />\n );\n};\n","import type { WorkbenchRegion } from \"../../core\";\n\nconst chakraBackgrounds = {\n activityBar: \"var(--chakra-colors-bg-muted)\",\n sidenav: \"var(--chakra-colors-bg-subtle)\",\n main: \"var(--chakra-colors-bg)\",\n panel: \"var(--chakra-colors-bg-panel)\",\n statusBar: \"var(--chakra-colors-bg-subtle)\",\n} as const;\n\nconst vscodeColor = (token: string, fallback: string) =>\n `var(--chakra-colors-vscode-${token.replaceAll(\".\", \"-\")}, ${fallback})`;\n\nexport const workbenchBackgrounds = {\n activityBar: vscodeColor(\"activityBar.background\", vscodeColor(\"sideBar.background\", chakraBackgrounds.activityBar)),\n sidenav: vscodeColor(\"sideBar.background\", chakraBackgrounds.sidenav),\n main: vscodeColor(\"editor.background\", chakraBackgrounds.main),\n panel: vscodeColor(\"panel.background\", chakraBackgrounds.panel),\n statusBar: vscodeColor(\"statusBar.background\", vscodeColor(\"sideBar.background\", chakraBackgrounds.statusBar)),\n widget: vscodeColor(\"editorWidget.background\", vscodeColor(\"panel.background\", chakraBackgrounds.panel)),\n} as const;\n\nconst workbenchRegionBackgrounds = {\n nav: workbenchBackgrounds.main,\n activity: workbenchBackgrounds.activityBar,\n \"sidenav-header\": workbenchBackgrounds.sidenav,\n sidenav: workbenchBackgrounds.sidenav,\n \"main-header\": workbenchBackgrounds.main,\n \"main-left-menu\": workbenchBackgrounds.panel,\n main: workbenchBackgrounds.main,\n \"main-right-menu\": workbenchBackgrounds.panel,\n \"secondary-header\": workbenchBackgrounds.panel,\n \"secondary-left-menu\": workbenchBackgrounds.panel,\n secondary: workbenchBackgrounds.panel,\n \"secondary-right-menu\": workbenchBackgrounds.panel,\n status: workbenchBackgrounds.statusBar,\n overlay: workbenchBackgrounds.widget,\n \"side-header\": workbenchBackgrounds.widget,\n \"side-left-menu\": workbenchBackgrounds.widget,\n side: workbenchBackgrounds.widget,\n \"side-right-menu\": workbenchBackgrounds.widget,\n} as const satisfies Record<WorkbenchRegion, string>;\n\nexport const workbenchFocusBorder = vscodeColor(\"focusBorder\", \"var(--chakra-colors-color-palette-focus-ring)\");\n\nexport const workbenchCommandPaletteBackground = workbenchBackgrounds.widget;\n\nexport const getWorkbenchRegionBackground = (region: WorkbenchRegion) => workbenchRegionBackgrounds[region];\n","import type { CommandParamDescriptor, CommandParamSchema, WorkbenchCommandExecutionContext } from \"../../core\";\n\nexport type CommandParamValue = string | boolean | string[] | undefined;\n\nexport interface CommandParamEntry extends CommandParamDescriptor {\n key: string;\n label: string;\n}\n\nconst humanize = (value: string) => {\n const spaced = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .trim();\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringifyEditableValue = (value: unknown) => {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return JSON.stringify(value);\n};\n\nconst toIdentifierPrefix = (value: string) =>\n value\n .replace(/[^a-zA-Z0-9]+([a-zA-Z0-9])/g, (_match, char: string) => char.toUpperCase())\n .replace(/^[A-Z]/, (char) => char.toLowerCase());\n\nconst metadataString = (metadata: Record<string, unknown> | undefined, key: string) => {\n const value = metadata?.[key];\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") return String(value);\n return undefined;\n};\n\nconst resourceContextValue = (entry: CommandParamEntry, context: WorkbenchCommandExecutionContext | undefined) => {\n const resource = context?.resource;\n if (!resource) return undefined;\n\n const metadataValue = metadataString(resource.metadata, entry.key);\n if (metadataValue !== undefined) return metadataValue;\n\n if (entry.key === `${toIdentifierPrefix(resource.kind)}Id`) return resource.id ?? resource.uri;\n if (entry.type === \"resource\" && (!entry.resourceType || entry.resourceType === resource.kind)) return resource;\n return undefined;\n};\n\nconst dedupeOptions = (options: CommandParamDescriptor[\"options\"]) => {\n if (!options) return options;\n const seen = new Set<string>();\n return options.filter((option) => {\n if (seen.has(option.value)) return false;\n seen.add(option.value);\n return true;\n });\n};\n\nexport const hasCommandParameters = (params: CommandParamSchema | undefined) => Object.keys(params ?? {}).length > 0;\n\nexport const listCommandParamEntries = (params: CommandParamSchema | undefined): CommandParamEntry[] =>\n Object.entries(params ?? {}).map(([key, param]) => ({\n ...param,\n options: dedupeOptions(param.options),\n key,\n label: param.label ?? humanize(key),\n }));\n\nexport const buildCommandParamInitialValues = (\n params: CommandParamSchema | undefined,\n baseArgs?: unknown,\n context?: WorkbenchCommandExecutionContext,\n): Record<string, CommandParamValue> => {\n const base = isRecord(baseArgs) ? baseArgs : {};\n const values: Record<string, CommandParamValue> = {};\n\n for (const entry of listCommandParamEntries(params)) {\n const raw = Object.hasOwn(base, entry.key)\n ? base[entry.key]\n : (resourceContextValue(entry, context) ?? entry.defaultValue);\n if (entry.type === \"boolean\") {\n values[entry.key] = raw === undefined ? undefined : raw === true || raw === \"true\";\n continue;\n }\n if (entry.type === \"multi-select\") {\n values[entry.key] = Array.isArray(raw) ? raw.map(String) : [];\n continue;\n }\n values[entry.key] = stringifyEditableValue(raw);\n }\n\n return values;\n};\n\nconst isEmptyValue = (value: CommandParamValue) =>\n value === undefined || value === \"\" || (Array.isArray(value) && value.length === 0);\n\nconst parseJsonValue = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (typeof value !== \"string\") return value;\n try {\n return JSON.parse(value);\n } catch {\n throw new Error(`Invalid JSON for ${entry.label}`);\n }\n};\n\nconst normalizeValue = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (entry.type === \"number\") {\n const numberValue = Number(value);\n if (!Number.isFinite(numberValue)) throw new Error(`Invalid number for ${entry.label}`);\n return numberValue;\n }\n if (entry.type === \"boolean\") return value === true || value === \"true\";\n if (entry.type === \"json\" || entry.type === \"resource\" || entry.type === \"repo\" || entry.type === \"harness\") {\n return parseJsonValue(entry, value);\n }\n if (entry.type === \"multi-select\") return Array.isArray(value) ? value : String(value).split(\",\").filter(Boolean);\n return String(value ?? \"\");\n};\n\nexport const normalizeCommandParamValues = (\n params: CommandParamSchema | undefined,\n values: Record<string, CommandParamValue>,\n) => {\n const normalized: Record<string, unknown> = {};\n\n for (const entry of listCommandParamEntries(params)) {\n const value = values[entry.key];\n if (isEmptyValue(value)) {\n if (entry.required) throw new Error(`Missing required parameter: ${entry.label}`);\n continue;\n }\n normalized[entry.key] = normalizeValue(entry, value);\n }\n\n return normalized;\n};\n\nexport const mergeCommandParamArgs = (baseArgs: unknown, params: Record<string, unknown>) => ({\n ...(isRecord(baseArgs) ? baseArgs : {}),\n ...params,\n});\n","import type { PaletteMode } from \"@pstdio/ui\";\nimport { Search, Terminal } from \"lucide-react\";\nimport type { WorkbenchCommandPaletteView } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nexport const SEARCH_MODE_ID = \"search\";\nexport const COMMAND_MODE_ID = \"command\";\nexport const THEME_MODE_ID = \"theme\";\nexport const MODE_VIEW_ID = \"mode\";\n\nexport const workbenchPaletteModes: PaletteMode[] = [{ id: SEARCH_MODE_ID }, { id: COMMAND_MODE_ID, inputPrefix: \">\" }];\n\nexport const isThemePaletteView = (view: WorkbenchCommandPaletteView) => view === THEME_MODE_ID;\n\nexport const isModePaletteView = (view: WorkbenchCommandPaletteView) => view === MODE_VIEW_ID;\n\nexport const isPickerPaletteView = (view: WorkbenchCommandPaletteView) =>\n isThemePaletteView(view) || isModePaletteView(view);\n\nexport const getPaletteViewMode = (view: WorkbenchCommandPaletteView) => {\n if (isThemePaletteView(view)) return THEME_MODE_ID;\n if (isModePaletteView(view)) return MODE_VIEW_ID;\n\n return undefined;\n};\n\nexport const getPaletteViewModes = (view: WorkbenchCommandPaletteView) => {\n if (isPickerPaletteView(view)) return undefined;\n\n return workbenchPaletteModes;\n};\n\nexport const getPaletteInitialActiveIndex = (input: {\n view: WorkbenchCommandPaletteView;\n themeInitialActiveIndex: number;\n modeInitialActiveIndex: number;\n}) => {\n if (isThemePaletteView(input.view)) return input.themeInitialActiveIndex;\n if (isModePaletteView(input.view)) return input.modeInitialActiveIndex;\n\n return 0;\n};\n\nexport const getPaletteInputIcon = (input: { view: WorkbenchCommandPaletteView; mode: string | undefined }) => {\n if (isThemePaletteView(input.view)) return <WorkbenchIcon name=\"Palette\" size={16} />;\n if (isModePaletteView(input.view)) return <WorkbenchIcon name=\"PanelTop\" size={16} />;\n if (input.mode === COMMAND_MODE_ID) return <Terminal size={16} aria-hidden=\"true\" />;\n\n return <Search size={16} aria-hidden=\"true\" />;\n};\n\nexport const getPalettePlaceholder = (input: { view: WorkbenchCommandPaletteView; mode: string | undefined }) => {\n if (isThemePaletteView(input.view)) return \"Search themes\";\n if (isModePaletteView(input.view)) return \"Search modes\";\n if (input.mode === COMMAND_MODE_ID) return \"Run command\";\n\n return \"Search resources\";\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\n\nconst RESOURCE_QUERY_LIMIT = 25;\nconst RESOURCE_QUERY_DEBOUNCE_MS = 150;\n\ninterface UseWorkbenchCommandPaletteResourceEntriesInput {\n workbench: WorkbenchCore;\n query: string;\n open: boolean;\n onClose: () => void;\n}\n\n// Fetches extension-provided palette results for the live query (debounced) and maps\n// them to search-mode palette entries. Provider errors are isolated by the registry, so\n// one failing provider never blanks the palette.\nexport const useWorkbenchCommandPaletteResourceEntries = (input: UseWorkbenchCommandPaletteResourceEntriesInput) => {\n const { workbench, query, open, onClose } = input;\n const refreshToken = useWorkbenchStore(workbench.commandPaletteResources.store, (state) => state.refreshToken);\n const [entries, setEntries] = useState<PaletteEntry[]>([]);\n\n useEffect(() => {\n if (!open) {\n setEntries([]);\n return;\n }\n\n // Read so an explicit registry refresh (refreshToken bump) re-runs this query.\n void refreshToken;\n let cancelled = false;\n const handle = setTimeout(() => {\n void workbench.commandPaletteResources.queryProviders({ query, limit: RESOURCE_QUERY_LIMIT }).then((groups) => {\n if (cancelled) return;\n setEntries(\n groups.flatMap((group) =>\n group.results.map((result) => ({\n id: `workbench-command-palette-resource:${result.id}`,\n mode: SEARCH_MODE_ID,\n label: result.label,\n searchText: `${query} ${result.label} ${(result.keywords ?? []).join(\" \")}`.trim(),\n description: result.description,\n group: result.group ?? group.title,\n icon: result.icon ? <WorkbenchIcon name={result.icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(result.activate()).catch(() => undefined);\n },\n })),\n ),\n );\n });\n }, RESOURCE_QUERY_DEBOUNCE_MS);\n\n return () => {\n cancelled = true;\n clearTimeout(handle);\n };\n }, [workbench, query, open, refreshToken, onClose]);\n\n return entries;\n};\n","import { Button, HStack, Input, Menu, Stack, Text, Textarea } from \"@chakra-ui/react\";\nimport { Checkbox } from \"@pstdio/ui\";\nimport { ChevronDown, Circle, CircleDot } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCommandExecutionContext } from \"../../core\";\nimport type { CommandParamEntry, CommandParamValue } from \"./command-palette-params\";\n\nexport interface CommandParamFieldProps {\n entry: CommandParamEntry;\n value: CommandParamValue;\n context?: WorkbenchCommandExecutionContext;\n disabled: boolean;\n onChange: (value: CommandParamValue) => void;\n}\n\n// Lets the host supply field UI for param types the workbench cannot render on its\n// own (e.g. harness/repo selectors backed by host data). Returning a falsy value\n// defers to the built-in field for that entry.\nexport type CommandParamFieldRenderer = (props: CommandParamFieldProps) => ReactNode;\n\ntype BuiltInParamFieldProps = Omit<CommandParamFieldProps, \"context\">;\n\nconst getStringValue = (value: CommandParamValue) => (typeof value === \"string\" ? value : \"\");\n\nconst getStringArrayValue = (value: CommandParamValue) => (Array.isArray(value) ? value : []);\n\nconst FieldLabel = (props: { entry: CommandParamEntry }) => (\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/S/medium\">\n {props.entry.label}\n {props.entry.required ? \" *\" : \"\"}\n </Text>\n {props.entry.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\">\n {props.entry.description}\n </Text>\n ) : null}\n </Stack>\n);\n\nconst TextParamField = (props: BuiltInParamFieldProps) => (\n <Stack gap=\"2xs\">\n <FieldLabel entry={props.entry} />\n <Input\n size=\"sm\"\n value={getStringValue(props.value)}\n onChange={(event) => props.onChange(event.target.value)}\n disabled={props.disabled}\n />\n </Stack>\n);\n\nconst NumberParamField = (props: BuiltInParamFieldProps) => (\n <Stack gap=\"2xs\">\n <FieldLabel entry={props.entry} />\n <Input\n size=\"sm\"\n type=\"number\"\n inputMode=\"decimal\"\n value={getStringValue(props.value)}\n onChange={(event) => props.onChange(event.target.value)}\n disabled={props.disabled}\n />\n </Stack>\n);\n\nconst LongTextParamField = (props: BuiltInParamFieldProps) => (\n <Stack gap=\"2xs\">\n <FieldLabel entry={props.entry} />\n <Textarea\n size=\"sm\"\n minH=\"120px\"\n value={getStringValue(props.value)}\n onChange={(event) => props.onChange(event.target.value)}\n disabled={props.disabled}\n />\n </Stack>\n);\n\nconst SelectParamField = (props: BuiltInParamFieldProps) => {\n const value = getStringValue(props.value);\n const selectedLabel = props.entry.options?.find((option) => option.value === value)?.label ?? value;\n\n if (!props.entry.options?.length) return <TextParamField {...props} />;\n\n return (\n <Stack gap=\"2xs\">\n <FieldLabel entry={props.entry} />\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"sm\" variant=\"outline\" justifyContent=\"space-between\" disabled={props.disabled}>\n {selectedLabel || \"Select...\"}\n <ChevronDown size={14} aria-hidden=\"true\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {props.entry.options.map((option) => (\n <Menu.Item key={option.value} value={option.value} onClick={() => props.onChange(option.value)}>\n <HStack gap=\"2\" minW=\"0\">\n {value === option.value ? (\n <CircleDot size={14} aria-hidden=\"true\" />\n ) : (\n <Circle size={14} aria-hidden=\"true\" />\n )}\n <Text truncate>{option.label}</Text>\n </HStack>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Stack>\n );\n};\n\nconst MultiSelectParamField = (props: BuiltInParamFieldProps) => {\n const selected = getStringArrayValue(props.value);\n if (!props.entry.options?.length) return <JsonParamField {...props} />;\n\n const toggle = (optionValue: string, checked: boolean | \"indeterminate\") => {\n props.onChange(\n checked === true\n ? Array.from(new Set([...selected, optionValue]))\n : selected.filter((value) => value !== optionValue),\n );\n };\n\n return (\n <Stack gap=\"2xs\">\n <FieldLabel entry={props.entry} />\n <Stack gap=\"2xs\">\n {props.entry.options.map((option) => (\n <Checkbox\n key={option.value}\n size=\"sm\"\n checked={selected.includes(option.value)}\n disabled={props.disabled}\n onCheckedChange={(details) => toggle(option.value, details.checked)}\n >\n {option.label}\n </Checkbox>\n ))}\n </Stack>\n </Stack>\n );\n};\n\nconst BooleanParamField = (props: BuiltInParamFieldProps) => (\n <Stack gap=\"2xs\">\n <FieldLabel entry={props.entry} />\n <Checkbox\n size=\"sm\"\n checked={props.value === true}\n disabled={props.disabled}\n onCheckedChange={(details) => props.onChange(details.checked === true)}\n >\n Enabled\n </Checkbox>\n </Stack>\n);\n\nconst JsonParamField = (props: BuiltInParamFieldProps) => (\n <Stack gap=\"2xs\">\n <FieldLabel entry={props.entry} />\n <Textarea\n size=\"sm\"\n minH=\"88px\"\n fontFamily=\"mono\"\n value={getStringValue(props.value)}\n placeholder=\"JSON value\"\n onChange={(event) => props.onChange(event.target.value)}\n disabled={props.disabled}\n />\n </Stack>\n);\n\nexport const CommandParamField = (props: BuiltInParamFieldProps) => {\n if (props.entry.type === \"longtext\") return <LongTextParamField {...props} />;\n if (props.entry.type === \"number\") return <NumberParamField {...props} />;\n if (props.entry.type === \"boolean\") return <BooleanParamField {...props} />;\n if (props.entry.type === \"select\" || props.entry.type === \"template\") return <SelectParamField {...props} />;\n if (props.entry.type === \"multi-select\") return <MultiSelectParamField {...props} />;\n if (\n props.entry.type === \"json\" ||\n props.entry.type === \"resource\" ||\n props.entry.type === \"repo\" ||\n props.entry.type === \"harness\"\n )\n return <JsonParamField {...props} />;\n return <TextParamField {...props} />;\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@pstdio/ui\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport type { Command, RegisteredMenuItem, WorkbenchCommandExecutionContext } from \"../../core\";\nimport {\n buildCommandParamInitialValues,\n type CommandParamEntry,\n type CommandParamValue,\n listCommandParamEntries,\n mergeCommandParamArgs,\n normalizeCommandParamValues,\n} from \"./command-palette-params\";\nimport { CommandParamField, type CommandParamFieldRenderer } from \"./command-param-field\";\n\nexport interface CommandParamsRequest {\n record: { command: Pick<Command, \"id\" | \"label\" | \"description\" | \"params\"> };\n action?: RegisteredMenuItem;\n label: string;\n // Confirm-button label for the dialog (defaults to \"Run\").\n submitLabel?: string;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}\n\nexport type { CommandParamFieldProps, CommandParamFieldRenderer } from \"./command-param-field\";\n\ninterface CommandParamsDialogProps {\n request: CommandParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n onClose: () => void;\n onRun: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n }) => Promise<void>;\n}\n\nconst isFilled = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (entry.type === \"boolean\") return value !== undefined;\n if (Array.isArray(value)) return value.length > 0;\n return typeof value === \"string\" && value.length > 0;\n};\n\nexport const CommandParamsDialog = (props: CommandParamsDialogProps) => {\n const { request, renderParamField, onClose, onRun } = props;\n const [values, setValues] = useState<Record<string, CommandParamValue>>({});\n const [error, setError] = useState<string | undefined>();\n const [submitting, setSubmitting] = useState(false);\n const entries = listCommandParamEntries(request?.record.command.params);\n\n useEffect(() => {\n setValues(buildCommandParamInitialValues(request?.record.command.params, request?.args, request?.context));\n setError(undefined);\n setSubmitting(false);\n }, [request]);\n\n const close = () => {\n if (submitting) return;\n onClose();\n };\n\n const setValue = (key: string, value: CommandParamValue) => {\n setValues((current) => ({ ...current, [key]: value }));\n };\n\n const run = async () => {\n if (!request || submitting) return;\n setSubmitting(true);\n setError(undefined);\n try {\n const params = normalizeCommandParamValues(request.record.command.params, values);\n await onRun({\n commandId: request.record.command.id,\n args: mergeCommandParamArgs(request.args, params),\n context: request.context,\n label: request.label,\n });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : \"Command failed.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n const isValid = entries.every((entry) => !entry.required || isFilled(entry, values[entry.key]));\n\n return (\n <Dialog.Root\n open={request !== null}\n size=\"lg\"\n scrollBehavior=\"inside\"\n onOpenChange={(details) => !details.open && close()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content display=\"flex\" flexDirection=\"column\" maxH=\"calc(100% - 48px)\">\n <Dialog.Header>\n <Stack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"heading/M/semibold\">{request?.label ?? \"Run command\"}</Text>\n {request?.record.command.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\" truncate>\n {request.record.command.description}\n </Text>\n ) : null}\n </Stack>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body flex=\"1\" minH=\"0\" p=\"0\">\n <ScrollArea h=\"full\" contentProps={{ p: \"md\" }}>\n <Stack gap=\"md\">\n {entries.map((entry) => {\n const fieldProps = {\n entry,\n value: values[entry.key],\n disabled: submitting,\n onChange: (value: CommandParamValue) => setValue(entry.key, value),\n };\n const custom = renderParamField?.({ ...fieldProps, context: request?.context });\n return <Fragment key={entry.key}>{custom ?? <CommandParamField {...fieldProps} />}</Fragment>;\n })}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </ScrollArea>\n </Dialog.Body>\n <Dialog.Footer>\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!isValid} loading={submitting} onClick={() => void run()}>\n {request?.submitLabel ?? \"Run\"}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport type { WorkbenchCore, WorkbenchModeContribution } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { MODE_VIEW_ID } from \"./palette-view\";\n\nexport interface WorkbenchModePaletteEntry extends PaletteEntry {\n modeId: string;\n mode: typeof MODE_VIEW_ID;\n}\n\nconst getModeLabel = (mode: WorkbenchModeContribution) => mode.label ?? mode.id;\n\nexport const getModeEntryIndex = (activeModeId: string | undefined, modes: readonly WorkbenchModeContribution[]) => {\n const index = modes.findIndex((mode) => mode.id === activeModeId);\n\n return Math.max(index, 0);\n};\n\nexport const createWorkbenchModePaletteEntries = (input: { workbench: WorkbenchCore; onClose: () => void }) => {\n const { onClose, workbench } = input;\n const activeModeId = workbench.modes.getActiveModeId();\n\n return workbench.modes.listModes().map((mode): WorkbenchModePaletteEntry => {\n const label = getModeLabel(mode);\n\n return {\n id: `mode:${mode.id}`,\n modeId: mode.id,\n mode: MODE_VIEW_ID,\n label,\n searchText: `mode workbench ${mode.id} ${label}`,\n group: \"Modes\",\n icon: <WorkbenchIcon name=\"PanelTop\" />,\n isSelected: mode.id === activeModeId,\n onActivate: () => {\n workbench.modes.setActiveMode(mode.id);\n onClose();\n },\n };\n });\n};\n","import type { RegisteredWidgetContribution, ResourceRef, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\n\ninterface OpenPanelWidgetInput {\n workbench: WorkbenchCore;\n widget: RegisteredWidgetContribution;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n}\n\nexport const getPanelLabel = (region: WorkbenchPanelRegion) => {\n if (region === \"secondary\") return \"Secondary\";\n if (region === \"side\") return \"Side\";\n return \"Main\";\n};\n\nexport const openPanelWidget = (input: OpenPanelWidgetInput) => {\n const { region, resource, widget, workbench } = input;\n\n if (widget.openCommandId) {\n void workbench.commands.executeCommand(widget.openCommandId, undefined, {\n source: \"panel-add\",\n ...(resource ? { resource } : {}),\n });\n } else {\n const widgetResource = widget.resourceKinds?.length || widget.canOpen ? resource : undefined;\n workbench.layout.openPanel(widget.id, { region, resource: widgetResource });\n }\n\n if (region === \"secondary\") {\n workbench.panels.setOpen(\"secondary\", true);\n workbench.layout.setRegionVisible(\"secondary\", true);\n }\n if (region === \"side\" && workbench.sidePanel.getMode() === \"closed\") {\n workbench.sidePanel.setMode(\"attached\");\n }\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { listEligibleSubPanels, type WorkbenchCore, workbenchPanelRegions } from \"../../core\";\nimport { getPanelLabel, openPanelWidget } from \"../region/panel-widget-open\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { COMMAND_MODE_ID } from \"./palette-view\";\n\nexport const createWorkbenchPanelWidgetPaletteEntries = (input: { workbench: WorkbenchCore; onClose: () => void }) => {\n const { onClose, workbench } = input;\n const resource = workbench.getPrimaryResource();\n const widgets = workbench.layout.listWidgets();\n const layout = workbench.layout.getLayout();\n\n return workbenchPanelRegions.flatMap((region) =>\n listEligibleSubPanels({\n widgets,\n layout,\n region,\n resource,\n modeId: workbench.modes.getActiveModeId(),\n }).map((widget): PaletteEntry => {\n const panelLabel = getPanelLabel(region);\n const label = `Open ${widget.title} in ${panelLabel} Panel`;\n\n return {\n id: `workbench-panel:${region}:${widget.id}`,\n mode: COMMAND_MODE_ID,\n label,\n searchText: `${label} ${widget.id}`,\n group: \"Panels\",\n icon: widget.icon ? <WorkbenchIcon name={widget.icon} /> : undefined,\n onActivate: () => {\n onClose();\n openPanelWidget({ workbench, widget, region, resource });\n },\n };\n }),\n );\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport type { ResourceBrowseEntry, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\n\nexport interface WorkbenchResourcePaletteEntry extends PaletteEntry {\n resourceUri: string;\n mode: typeof SEARCH_MODE_ID;\n}\n\nconst createResourceEntry = (input: {\n workbench: WorkbenchCore;\n entry: ResourceBrowseEntry;\n onClose: () => void;\n}): WorkbenchResourcePaletteEntry => {\n const { entry, onClose, workbench } = input;\n const { resource } = entry;\n const label = entry.resource.label ?? entry.resource.uri;\n const kind = workbench.resources.getKind(resource.kind);\n const icon = resource.icon ?? kind?.icon;\n\n return {\n id: `workbench-resource:${resource.uri}`,\n resourceUri: resource.uri,\n mode: SEARCH_MODE_ID,\n label,\n searchText: entry.searchText ?? label,\n description: entry.description,\n group: entry.group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(\n entry.activate ? entry.activate(resource) : workbench.resources.openResource(resource, kind?.paletteOpenInput),\n ).catch(() => undefined);\n },\n };\n};\n\nexport const createWorkbenchResourcePaletteEntries = (input: {\n workbench: WorkbenchCore;\n query: string;\n onClose: () => void;\n}) => {\n const { onClose, query, workbench } = input;\n return workbench.resources.listResources(query).map((entry) => createResourceEntry({ workbench, entry, onClose }));\n};\n","import type { PaletteEntry, ThemePreference, ThemePreferenceOption } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nconst THEME_MODE_ID = \"theme\";\n\nexport interface WorkbenchThemePaletteEntry extends PaletteEntry {\n themePreference: ThemePreference;\n mode: typeof THEME_MODE_ID;\n}\n\nconst getThemeIconName = (preference: ThemePreference) => {\n if (preference === \"pstdio-light\") return \"Sun\";\n if (preference === \"pstdio-dark\") return \"Moon\";\n return \"Palette\";\n};\n\nconst getThemePreferenceLabel = (themePreference: ThemePreferenceOption) => themePreference.title ?? themePreference.id;\n\nexport const getThemePreferenceEntryIndex = (\n themePreference: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[],\n) => {\n const index = themePreferences.findIndex((preference) => preference.id === themePreference);\n\n return Math.max(index, 0);\n};\n\nconst THEME_GROUP_LABELS = { light: \"Light\", dark: \"Dark\" } as const;\n\n// Group entries by appearance mode (lights first) so cycling the picker stays\n// within one mode instead of flashing light/dark/light on every step.\nconst byModeThenLabel = (a: ThemePreferenceOption, b: ThemePreferenceOption) => {\n if (a.mode !== b.mode) return a.mode === \"light\" ? -1 : 1;\n return getThemePreferenceLabel(a).localeCompare(getThemePreferenceLabel(b));\n};\n\nexport const createWorkbenchThemePreferencePaletteEntries = (input: {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (themePreference: ThemePreference) => void;\n onClose: () => void;\n}) => {\n const { onClose, setThemePreference, themePreference, themePreferences } = input;\n\n return [...themePreferences].sort(byModeThenLabel).map((preference): WorkbenchThemePaletteEntry => {\n const label = getThemePreferenceLabel(preference);\n\n return {\n id: `theme:${preference.id}`,\n themePreference: preference.id,\n mode: THEME_MODE_ID,\n label,\n searchText: `theme color appearance ${preference.mode} ${preference.id} ${label}`,\n group: THEME_GROUP_LABELS[preference.mode],\n icon: <WorkbenchIcon name={getThemeIconName(preference.id)} />,\n isSelected: preference.id === themePreference,\n onActivate: () => {\n setThemePreference(preference.id);\n onClose();\n },\n };\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Palette, type PaletteEntry, PaletteShortcut, type ThemePreference, useThemePreference } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport {\n type Command,\n type KeybindingSequence,\n type MenuPath,\n type RegisteredCommand,\n type RegisteredMenuItem,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n workbenchCommandPaletteMenuPath,\n} from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchCommandPaletteBackground } from \"../theme/workbench-theme-background\";\nimport { hasCommandParameters } from \"./command-palette-params\";\nimport { useWorkbenchCommandPaletteResourceEntries } from \"./command-palette-resources\";\nimport {\n type CommandParamFieldRenderer,\n CommandParamsDialog,\n type CommandParamsRequest,\n} from \"./command-params-dialog\";\nimport { createWorkbenchModePaletteEntries, getModeEntryIndex } from \"./mode-palette\";\nimport {\n COMMAND_MODE_ID,\n getPaletteInitialActiveIndex,\n getPaletteInputIcon,\n getPalettePlaceholder,\n getPaletteViewMode,\n getPaletteViewModes,\n isPickerPaletteView,\n isThemePaletteView,\n} from \"./palette-view\";\nimport { createWorkbenchPanelWidgetPaletteEntries } from \"./panel-widget-palette\";\nimport { createWorkbenchResourcePaletteEntries } from \"./resource-palette\";\nimport {\n createWorkbenchThemePreferencePaletteEntries,\n getThemePreferenceEntryIndex,\n type WorkbenchThemePaletteEntry,\n} from \"./theme-palette\";\n\nexport type { WorkbenchResourcePaletteEntry } from \"./resource-palette\";\nexport { createWorkbenchResourcePaletteEntries };\n\ninterface WorkbenchCommandPaletteProps {\n workbench: WorkbenchCore;\n open: boolean;\n menuPath?: MenuPath;\n initialQuery?: string;\n renderParamField?: CommandParamFieldRenderer;\n onClose: () => void;\n}\n\nexport interface WorkbenchCommandPaletteEntry extends PaletteEntry {\n commandId: string;\n mode: typeof COMMAND_MODE_ID;\n}\n\ninterface WorkbenchThemePreviewState {\n baseTheme: ThemePreference;\n}\n\ninterface WorkbenchCommandPaletteRecord {\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n}\n\nconst rollbackThemePreview = (\n setThemePreference: (themePreference: ThemePreference) => void,\n themePreviewRef: { current: WorkbenchThemePreviewState | null },\n) => {\n const preview = themePreviewRef.current;\n themePreviewRef.current = null;\n if (preview) setThemePreference(preview.baseTheme);\n};\n\nconst getCommandSearchText = (command: Command, label: string) =>\n [label, command.id, command.description, command.category].filter(Boolean).join(\" \");\n\nconst createShortcutByCommandId = (workbench: WorkbenchCore) =>\n new Map(\n workbench.keybindings.listActiveKeybindings().map((keybinding) => [keybinding.commandId, keybinding.keybinding]),\n );\n\nconst getShortcut = (binding: KeybindingSequence | undefined): ReactNode =>\n binding ? <PaletteShortcut binding={binding} /> : undefined;\n\nconst getCommandErrorMessage = (error: unknown) => (error instanceof Error ? error.message : \"Command failed.\");\n\nconst commandExecutionContext = (workbench: WorkbenchCore): WorkbenchCommandExecutionContext | undefined => {\n const resource = workbench.getPrimaryResource();\n return resource ? { resource } : undefined;\n};\n\nconst executePaletteCommand = async (input: {\n workbench: WorkbenchCore;\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n}) => {\n const { args, commandId, context, label, workbench } = input;\n try {\n await workbench.commands.executeCommand(commandId, args, context);\n } catch (error) {\n workbench.notifications.show({ level: \"error\", title: `${label} failed`, message: getCommandErrorMessage(error) });\n }\n};\n\nconst createEntry = (input: {\n workbench: WorkbenchCore;\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n shortcutByCommandId: Map<string, KeybindingSequence>;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}): WorkbenchCommandPaletteEntry | null => {\n const { action, onClose, onRequestParams, record, workbench, shortcutByCommandId } = input;\n const args = action?.args;\n\n if (!workbench.commands.isCommandVisible(record.command.id, args)) return null;\n\n const label = action?.label ?? record.command.label;\n const icon = action?.icon ?? record.command.icon;\n const group = action?.group ?? record.command.category;\n\n return {\n id: `workbench-command:${record.command.id}`,\n commandId: record.command.id,\n mode: COMMAND_MODE_ID,\n label,\n searchText: getCommandSearchText(record.command, label),\n description: record.command.description,\n group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n shortcut: getShortcut(shortcutByCommandId.get(record.command.id)),\n onActivate: () => {\n const context = commandExecutionContext(workbench);\n onClose();\n if (hasCommandParameters(record.command.params) && onRequestParams) {\n onRequestParams({ record, action, label, args, context });\n return;\n }\n void executePaletteCommand({ workbench, commandId: record.command.id, args, context, label });\n },\n };\n};\n\nconst getRecordGroup = (item: WorkbenchCommandPaletteRecord) =>\n item.action?.group ?? item.record.command.category ?? \"\";\n\nconst getRecordOrder = (item: WorkbenchCommandPaletteRecord) => item.action?.order ?? 0;\n\nconst byCommandPaletteGroup = (left: WorkbenchCommandPaletteRecord, right: WorkbenchCommandPaletteRecord) => {\n const groupComparison = getRecordGroup(left).localeCompare(getRecordGroup(right));\n if (groupComparison !== 0) return groupComparison;\n\n return getRecordOrder(left) - getRecordOrder(right);\n};\n\nconst listCommandRecords = (workbench: WorkbenchCore, menuPath?: MenuPath) => {\n if (!menuPath) {\n return workbench.commands.listCommands().map((record) => ({ record, action: undefined }));\n }\n\n return workbench.layout\n .listMenuItems(menuPath)\n .filter((action) => workbench.context.matches(action.when))\n .map((action) => {\n const record = workbench.commands.getCommand(action.commandId);\n return record ? { record, action } : null;\n })\n .filter((item): item is { record: RegisteredCommand; action: RegisteredMenuItem } => item !== null);\n};\n\nexport const createWorkbenchCommandPaletteEntries = (input: {\n workbench: WorkbenchCore;\n menuPath?: MenuPath;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}) => {\n const { menuPath, onClose, onRequestParams, workbench } = input;\n const shortcutByCommandId = createShortcutByCommandId(workbench);\n\n return listCommandRecords(workbench, menuPath)\n .sort(byCommandPaletteGroup)\n .map(({ record, action }) =>\n createEntry({ workbench, record, action, shortcutByCommandId, onClose, onRequestParams }),\n )\n .filter((entry): entry is WorkbenchCommandPaletteEntry => entry !== null);\n};\n\nexport const WorkbenchCommandPalette = (props: WorkbenchCommandPaletteProps) => {\n const {\n workbench,\n open,\n menuPath = workbenchCommandPaletteMenuPath,\n initialQuery = \"\",\n renderParamField,\n onClose,\n } = props;\n const { themePreference, themePreferences, setThemePreference } = useThemePreference();\n const view = useWorkbenchStore(workbench.commandPalette.store, (state) => state.view);\n const themePreviewRef = useRef<WorkbenchThemePreviewState | null>(null);\n const paramsRequest = useWorkbenchStore(workbench.commandPalette.store, (state) => state.paramsRequest);\n const [liveQuery, setLiveQuery] = useState(initialQuery);\n const commandPaletteResourceEntries = useWorkbenchCommandPaletteResourceEntries({\n workbench,\n query: liveQuery,\n open,\n onClose,\n });\n\n const closePalette = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n onClose();\n };\n\n const exitPickerView = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n workbench.commandPalette.open({ view: \"main\" });\n };\n\n const commitThemePreview = () => {\n themePreviewRef.current = null;\n onClose();\n };\n\n const commandEntries = createWorkbenchCommandPaletteEntries({\n workbench,\n menuPath,\n onClose,\n onRequestParams: (request) => workbench.commandPalette.requestParams(request),\n });\n const resourceEntries = createWorkbenchResourcePaletteEntries({ workbench, query: initialQuery, onClose });\n const themeEntries = createWorkbenchThemePreferencePaletteEntries({\n themePreference,\n themePreferences,\n setThemePreference,\n onClose: commitThemePreview,\n });\n const modeEntries = createWorkbenchModePaletteEntries({ workbench, onClose });\n const panelWidgetEntries = createWorkbenchPanelWidgetPaletteEntries({ workbench, onClose });\n const entries = [\n ...resourceEntries,\n ...commandPaletteResourceEntries,\n ...commandEntries,\n ...panelWidgetEntries,\n ...themeEntries,\n ...modeEntries,\n ];\n const themeInitialActiveIndex = getThemePreferenceEntryIndex(themePreference, themePreferences);\n const modeInitialActiveIndex = getModeEntryIndex(workbench.modes.getActiveModeId(), workbench.modes.listModes());\n const isThemeView = isThemePaletteView(view);\n const initialActiveIndex = getPaletteInitialActiveIndex({\n view,\n themeInitialActiveIndex,\n modeInitialActiveIndex,\n });\n const activeViewMode = getPaletteViewMode(view);\n const activeViewModes = getPaletteViewModes(view);\n\n useEffect(() => {\n if (open) setLiveQuery(initialQuery);\n }, [initialQuery, open]);\n\n useEffect(() => {\n if (open && isThemeView) {\n if (!themePreviewRef.current) themePreviewRef.current = { baseTheme: themePreference };\n return;\n }\n\n rollbackThemePreview(setThemePreference, themePreviewRef);\n }, [isThemeView, open, setThemePreference, themePreference]);\n\n return (\n <>\n <Box\n display=\"contents\"\n css={{\n \"& [data-scope=dialog][data-part=backdrop], & [data-scope=dialog][data-part=positioner]\": {\n position: \"absolute\",\n inset: \"0\",\n },\n \"& [data-scope=dialog][data-part=positioner]\": {\n alignItems: \"center\",\n justifyContent: \"center\",\n h: \"full\",\n minH: \"0\",\n padding: \"md\",\n w: \"full\",\n },\n \"& [data-scope=dialog][data-part=content]\": { background: workbenchCommandPaletteBackground },\n }}\n >\n <Palette\n open={open}\n entries={entries}\n initialQuery={initialQuery}\n initialActiveIndex={initialActiveIndex}\n mode={activeViewMode}\n modes={activeViewModes}\n resetKey={`${view}:${initialQuery}`}\n inputIcon={({ mode }) => getPaletteInputIcon({ view, mode })}\n placeholder={({ mode }) => getPalettePlaceholder({ view, mode })}\n emptyLabel=\"No results found.\"\n onActiveEntryChange={(entry) => {\n if (!open || !isThemeView) return;\n const themeEntry = entry as WorkbenchThemePaletteEntry | null;\n if (!themeEntry?.themePreference || themeEntry.themePreference === themePreference) return;\n setThemePreference(themeEntry.themePreference);\n }}\n onQueryChange={setLiveQuery}\n onClose={closePalette}\n onEscape={(ctx) => {\n if (isPickerPaletteView(view)) {\n exitPickerView();\n return true;\n }\n\n if (ctx.query.length > 0) {\n ctx.setQuery(\"\");\n ctx.setActiveIndex(0);\n return true;\n }\n\n closePalette();\n return true;\n }}\n />\n </Box>\n <CommandParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n onClose={() => workbench.commandPalette.clearParams()}\n onRun={(input) => executePaletteCommand({ workbench, ...input })}\n />\n </>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport type { WorkbenchCore, WorkbenchFocusRegionId } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchFocusRegionProps extends BoxProps {\n workbench: WorkbenchCore;\n region: WorkbenchFocusRegionId;\n children: ReactNode;\n}\n\nexport const WorkbenchFocusRegion = (props: WorkbenchFocusRegionProps) => {\n const { workbench, region, children, ...boxProps } = props;\n const activeRegion = useWorkbenchStore(workbench.focus.store, (state) => state.activeRegion);\n const ref = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element || activeRegion !== region) return;\n if (element.contains(document.activeElement)) return;\n element.focus({ preventScroll: true });\n }, [activeRegion, region]);\n\n return (\n <Box\n ref={ref}\n tabIndex={-1}\n outline=\"none\"\n onFocusCapture={() => workbench.focus.setActiveRegion(region)}\n {...boxProps}\n >\n {children}\n </Box>\n );\n};\n","import type {\n ContextKeyValue,\n MenuPath,\n RegisteredCommand,\n RegisteredMenuItem,\n ResourceRef,\n WorkbenchCore,\n} from \"../../core\";\nimport {\n createWorkbenchResourceContextValues,\n matchesContextExpression,\n workbenchResourceIdContextKey,\n workbenchResourceKindContextKey,\n workbenchResourceMetadataContextKey,\n} from \"../../core\";\nimport { byContributionPriority } from \"../../core/shared/contributions/metadata\";\n\nexport interface WorkbenchMenuItem {\n id: string;\n commandId: string;\n label: string;\n description?: string;\n icon: string | undefined;\n iconSrc?: string;\n overflowLabel?: string;\n group: string | undefined;\n args: unknown;\n disabled: boolean;\n separatorBefore?: boolean;\n readOnly?: true;\n}\n\ninterface WorkbenchMenuItemState {\n itemsByPath: Record<string, RegisteredMenuItem[]>;\n commands: Record<string, RegisteredCommand>;\n contextValues: Record<string, ContextKeyValue>;\n}\n\nconst menuPathKey = (path: MenuPath) => path.join(\"/\");\n\ninterface WorkbenchMenuItemContext {\n resource?: ResourceRef | undefined;\n}\n\nconst workbenchResourceMetadataContextKeyPrefix = workbenchResourceMetadataContextKey(\"\");\n\nconst isWorkbenchResourceContextKey = (key: string) =>\n key === workbenchResourceKindContextKey ||\n key === workbenchResourceIdContextKey ||\n key.startsWith(workbenchResourceMetadataContextKeyPrefix);\n\nconst omitWorkbenchResourceContextValues = (values: Record<string, ContextKeyValue>) => {\n const result: Record<string, ContextKeyValue> = {};\n\n for (const [key, value] of Object.entries(values)) {\n if (!isWorkbenchResourceContextKey(key)) result[key] = value;\n }\n\n return result;\n};\n\nconst resolveContextValues = (state: WorkbenchMenuItemState, context: WorkbenchMenuItemContext | undefined) => {\n const baseContextValues = context ? omitWorkbenchResourceContextValues(state.contextValues) : state.contextValues;\n\n return {\n ...baseContextValues,\n ...createWorkbenchResourceContextValues(context?.resource),\n };\n};\n\nexport const listWorkbenchMenuItemsFromState = (\n state: WorkbenchMenuItemState,\n menuPath: MenuPath,\n context?: WorkbenchMenuItemContext,\n) => {\n const contextValues = resolveContextValues(state, context);\n\n return [...(state.itemsByPath[menuPathKey(menuPath)] ?? [])]\n .sort((left, right) => {\n const leftOrder = left.order ?? 0;\n const rightOrder = right.order ?? 0;\n return leftOrder - rightOrder || byContributionPriority(left, right);\n })\n .filter((action) => matchesContextExpression(contextValues, action.when))\n .map((action, index) => {\n const record = state.commands[action.commandId];\n if (!record) return null;\n\n const args = action.args;\n if (record.handler.isVisible?.(args) === false) return null;\n\n return {\n id: `${action.commandId}:${index}`,\n commandId: record.command.id,\n label: action.label ?? record.command.label,\n ...((action.description ?? record.command.description)\n ? { description: action.description ?? record.command.description }\n : {}),\n icon: action.icon ?? record.command.icon,\n ...(action.iconSrc ? { iconSrc: action.iconSrc } : {}),\n ...(action.overflowLabel ? { overflowLabel: action.overflowLabel } : {}),\n group: action.group,\n args,\n disabled: action.readOnly === true || record.handler.isEnabled?.(args) === false,\n ...(action.readOnly ? { readOnly: true } : {}),\n } satisfies WorkbenchMenuItem;\n })\n .filter((item): item is WorkbenchMenuItem => item !== null);\n};\n\nexport const listWorkbenchMenuItems = (\n workbench: WorkbenchCore,\n menuPath: MenuPath,\n context?: WorkbenchMenuItemContext,\n) =>\n listWorkbenchMenuItemsFromState(\n {\n itemsByPath: workbench.layout.menuStore.getState().itemsByPath,\n commands: workbench.commands.store.getState().commands,\n contextValues: workbench.context.store.getState().values,\n },\n menuPath,\n context,\n );\n","import type { WorkbenchMenuItem } from \"../menus/menu-items\";\n\nexport type WorkbenchHeaderOverflowItem = WorkbenchMenuItem & { separatorBefore?: boolean };\n\nexport interface WorkbenchHeaderActionGroups {\n inlineItems: WorkbenchMenuItem[];\n overflowItems: WorkbenchHeaderOverflowItem[];\n}\n\nconst isKernelAction = (item: WorkbenchMenuItem) => item.group === \"kernel\";\n\nconst isOverflowAction = (item: WorkbenchMenuItem) => item.group === \"overflow\" || isKernelAction(item);\n\nconst withLeadingSeparator = (items: WorkbenchMenuItem[], enabled: boolean) => {\n if (!enabled || items.length === 0) return items;\n\n const [first, ...rest] = items;\n if (!first) return rest;\n\n return [{ ...first, separatorBefore: true as const }, ...rest];\n};\n\nconst resolveOverflowItems = (items: WorkbenchMenuItem[]) => {\n const regularItems = items.filter((item) => !isKernelAction(item));\n const kernelItems = items.filter(isKernelAction);\n\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n\nexport const resolveWorkbenchHeaderActionGroups = (items: WorkbenchMenuItem[]) =>\n ({\n inlineItems: items.filter((item) => !isOverflowAction(item)),\n overflowItems: resolveOverflowItems(items.filter(isOverflowAction)),\n }) satisfies WorkbenchHeaderActionGroups;\n\nexport const resolveWorkbenchHeaderOverflowLabel = (items: WorkbenchMenuItem[]) =>\n items.find((item) => item.overflowLabel)?.overflowLabel ?? \"More header actions\";\n","import { Button, HStack, IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, Tooltip } from \"@pstdio/ui\";\nimport { Fragment } from \"react\";\nimport {\n getAnchorResource,\n type MenuPath,\n type ResourceRef,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n} from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport { listWorkbenchMenuItemsFromState, type WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { resolveWorkbenchHeaderActionGroups, resolveWorkbenchHeaderOverflowLabel } from \"./header-action-items\";\n\ninterface WorkbenchHeaderActionsProps {\n workbench: WorkbenchCore;\n menuPath: MenuPath;\n controlSize?: \"2xs\" | \"xs\";\n}\n\nconst commandExecutionContext = (resource: ResourceRef | undefined): WorkbenchCommandExecutionContext | undefined =>\n resource ? { resource } : undefined;\n\nconst WorkbenchInlineHeaderAction = (props: {\n item: WorkbenchMenuItem;\n onSelect: (item: WorkbenchMenuItem) => void;\n controlSize: \"2xs\" | \"xs\";\n}) => {\n const { controlSize, item, onSelect } = props;\n const onClick = () => onSelect(item);\n\n if (item.group === \"primary\" || !item.icon) {\n return (\n <Button\n key={item.id}\n size={controlSize}\n variant={item.group === \"primary\" ? \"primary\" : \"subtle\"}\n disabled={item.disabled}\n onClick={onClick}\n >\n {item.icon ? <WorkbenchIcon name={item.icon} size={14} /> : null}\n {item.label}\n </Button>\n );\n }\n\n return (\n <Tooltip key={item.id} content={item.label}>\n <IconButton size={controlSize} variant=\"ghost\" aria-label={item.label} disabled={item.disabled} onClick={onClick}>\n <WorkbenchIcon name={item.icon} size={16} />\n </IconButton>\n </Tooltip>\n );\n};\n\nexport const WorkbenchHeaderActions = (props: WorkbenchHeaderActionsProps) => {\n const { controlSize = \"xs\", menuPath, workbench } = props;\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const resource = useWorkbenchStore(workbench.layout.store, (state) => getAnchorResource(state.layout, \"primary\"));\n const items = listWorkbenchMenuItemsFromState({ itemsByPath, commands, contextValues }, menuPath, { resource });\n const { inlineItems, overflowItems } = resolveWorkbenchHeaderActionGroups(items);\n\n // Actions whose command declares parameters collect that input through the shared\n // command params dialog (opened via the command palette store) before running;\n // parameterless actions execute immediately.\n const onSelect = (item: WorkbenchMenuItem) => {\n const command = commands[item.commandId]?.command;\n const args = item.args;\n const context = commandExecutionContext(resource);\n if (command && hasCommandParameters(command.params)) {\n workbench.commandPalette.requestParams({ record: { command }, label: item.label, args, context });\n return;\n }\n void workbench.commands.executeCommand(item.commandId, args, context).catch(() => undefined);\n };\n\n if (items.length === 0) return null;\n\n return (\n <HStack flexShrink={0} gap=\"2xs\" minW=\"0\">\n {inlineItems.map((item) => (\n <WorkbenchInlineHeaderAction key={item.id} item={item} onSelect={onSelect} controlSize={controlSize} />\n ))}\n {overflowItems.length > 0 ? (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton\n size={controlSize}\n variant=\"ghost\"\n aria-label={resolveWorkbenchHeaderOverflowLabel(overflowItems)}\n >\n <WorkbenchIcon name=\"MoreHorizontal\" size={16} />\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"220px\" bg=\"bg\">\n {overflowItems.map((item) => (\n <Fragment key={item.id}>\n {item.separatorBefore ? <Menu.Separator /> : null}\n <Menu.Item value={item.id} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={item.id}\n label={item.label}\n icon={item.icon ? <WorkbenchIcon name={item.icon} size={16} /> : undefined}\n disabled={item.disabled}\n onActivate={() => onSelect(item)}\n />\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </HStack>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { WorkbenchPanelRenderInput } from \"../../core\";\n\n// Set by `WorkbenchKeepAliveLayer` for each kept-alive subtree. Reflects the\n// `WorkbenchPanelRenderInput` of the widget that currently has the host\n// claimed, or undefined when no widget is mounted against the renderer.\nexport const WorkbenchClaimContext = createContext<WorkbenchPanelRenderInput | undefined>(undefined);\n\nexport const useWorkbenchClaim = () => useContext(WorkbenchClaimContext);\n","import { Fragment, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchClaimContext } from \"./use-workbench-claim\";\n\ninterface WorkbenchKeepAliveLayerProps {\n workbench: WorkbenchCore;\n}\n\n// Renders every kept-alive renderer's subtree into its dedicated host element\n// exactly once. Hosts use `display: contents` and are moved between widget\n// slots via `renderers.claim`; React sees the subtree mounted once into a\n// stable host, so state survives the moves. The current widget's\n// `WorkbenchPanelRenderInput` is exposed to the subtree through\n// `useWorkbenchClaim()`.\nexport const WorkbenchKeepAliveLayer = (props: WorkbenchKeepAliveLayerProps) => {\n const { workbench } = props;\n const renderers = useWorkbenchStore(workbench.renderers.store, (state) => state.renderers);\n const hosts = useWorkbenchStore(workbench.renderers.store, (state) => state.hosts);\n const claims = useWorkbenchStore(workbench.renderers.store, (state) => state.claims);\n\n return (\n <Fragment>\n {Object.values(renderers).map((renderer) => {\n if (!renderer.keepAlive) return null;\n const host = hosts[renderer.id]?.host;\n if (!host) return null;\n return createPortal(\n <WorkbenchClaimContext.Provider value={claims[renderer.id]}>\n {renderer.render() as ReactNode}\n </WorkbenchClaimContext.Provider>,\n host,\n renderer.id,\n );\n })}\n </Fragment>\n );\n};\n","import { type UseHotkeyDefinition, useHotkeys } from \"@tanstack/react-hotkeys\";\nimport type { WorkbenchHotkeyRegistration } from \"./workbench-keybinding-dispatcher\";\n\nexport const useTanStackWorkbenchHotkeys = (registrations: WorkbenchHotkeyRegistration[]) => {\n const hotkeys: UseHotkeyDefinition[] = registrations.map((registration) => ({\n hotkey: registration.hotkey as UseHotkeyDefinition[\"hotkey\"],\n callback: (event) => {\n event.preventDefault();\n void registration.execute();\n },\n options: {\n enabled: registration.enabled,\n ignoreInputs: registration.ignoreInputs,\n preventDefault: true,\n stopPropagation: true,\n },\n }));\n\n useHotkeys(hotkeys, {\n ignoreInputs: true,\n preventDefault: true,\n stopPropagation: true,\n });\n};\n","import { getKeybindingSteps, type KeybindingSequence, type WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useTanStackWorkbenchHotkeys } from \"./tanstack-hotkey-adapter\";\n\nexport interface WorkbenchHotkeyRegistration {\n commandId: string;\n hotkey: KeybindingSequence;\n enabled: boolean;\n ignoreInputs: boolean;\n execute(): Promise<unknown>;\n}\n\nexport interface CreateWorkbenchHotkeyRegistrationsInput {\n workbench: WorkbenchCore;\n disabled?: boolean;\n commandIds?: readonly string[];\n}\n\nexport interface WorkbenchKeybindingDispatcherProps {\n workbench: WorkbenchCore;\n disabled?: boolean;\n commandIds?: readonly string[];\n}\n\nconst keyAliases: Record<string, string> = {\n alt: \"Alt\",\n cmd: \"Meta\",\n command: \"Meta\",\n ctrl: \"Control\",\n control: \"Control\",\n meta: \"Meta\",\n mod: \"Mod\",\n option: \"Alt\",\n shift: \"Shift\",\n};\n\nconst normalizeWorkbenchKeybindingStep = (keybinding: string) =>\n keybinding\n .split(\"+\")\n .map((part) => {\n const trimmed = part.trim();\n const alias = keyAliases[trimmed.toLowerCase()];\n if (alias) return alias;\n if (trimmed.length === 1) return trimmed.toUpperCase();\n return trimmed.slice(0, 1).toUpperCase() + trimmed.slice(1);\n })\n .join(\"+\");\n\nexport const normalizeWorkbenchKeybinding = (keybinding: KeybindingSequence): KeybindingSequence => {\n const steps = getKeybindingSteps(keybinding).map(normalizeWorkbenchKeybindingStep);\n return steps.length === 1 ? (steps[0] ?? \"\") : steps;\n};\n\nexport const createWorkbenchHotkeyRegistrations = (input: CreateWorkbenchHotkeyRegistrationsInput) => {\n const { workbench, disabled = false, commandIds } = input;\n const allowedCommandIds = commandIds ? new Set(commandIds) : undefined;\n\n return workbench.keybindings.listActiveKeybindings().flatMap((keybinding) => {\n if (allowedCommandIds && !allowedCommandIds.has(keybinding.commandId)) return [];\n const record = workbench.commands.getCommand(keybinding.commandId);\n if (!record) return [];\n\n const enabled =\n !disabled &&\n workbench.commands.isCommandVisible(record.command.id, keybinding.args) &&\n workbench.commands.isCommandEnabled(record.command.id, keybinding.args);\n\n return [\n {\n commandId: record.command.id,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled,\n ignoreInputs: true,\n execute: () => workbench.commands.executeCommand(record.command.id, keybinding.args),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n });\n};\n\nexport const WorkbenchKeybindingDispatcher = (props: WorkbenchKeybindingDispatcherProps) => {\n const { workbench, disabled, commandIds } = props;\n useWorkbenchStore(workbench.keybindings.store, (state) => state.keybindings);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n\n const registrations = createWorkbenchHotkeyRegistrations({ workbench, disabled, commandIds });\n useTanStackWorkbenchHotkeys(registrations);\n\n return null;\n};\n","import { Box, HStack, Text } from \"@chakra-ui/react\";\nimport { PaletteShortcut, type TreeListAction, type TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type {\n ContextKeyValue,\n KeybindingSequence,\n MenuPath,\n RegisteredCommand,\n TreeAction,\n WorkbenchCommandExecutionContext,\n WorkbenchCoreContributionContext,\n} from \"../../../core\";\nimport { createWorkbenchResourceContextValues, matchesContextExpression } from \"../../../core\";\nimport { hasCommandParameters } from \"../../command-palette/command-palette-params\";\nimport type { CommandParamsRequest } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\n\nexport interface TreeActionParamsRequest {\n request: CommandParamsRequest;\n run: (args: unknown) => Promise<void>;\n}\n\ninterface CreateTreeActionItemsInput {\n actions?: TreeAction[];\n workbench: WorkbenchCoreContributionContext;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\ninterface CreateTreeMenuItemsInput {\n workbench: WorkbenchCoreContributionContext;\n menuPath: MenuPath;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\ninterface CreateTreeContextMenuItemsInput {\n actions?: TreeAction[];\n menuPath?: MenuPath;\n workbench: WorkbenchCoreContributionContext;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\nconst commandContextValues = (\n workbench: WorkbenchCoreContributionContext,\n context: WorkbenchCommandExecutionContext | undefined,\n): Record<string, ContextKeyValue> => ({\n ...workbench.context.snapshot(),\n ...createWorkbenchResourceContextValues(context?.resource),\n});\n\nconst isRegisteredCommandVisible = (\n record: RegisteredCommand,\n args: unknown,\n contextValues: Record<string, ContextKeyValue>,\n) => {\n if (!matchesContextExpression(contextValues, record.command.when)) return false;\n return record.handler.isVisible?.(args) !== false;\n};\n\nconst executeTreeAction = async (input: {\n action: TreeAction;\n workbench: WorkbenchCoreContributionContext;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}) => {\n const { action, args, context, workbench } = input;\n const record = action.commandId ? workbench.commands.getCommand(action.commandId) : undefined;\n const resolvedArgs = args ?? action.args;\n await (record\n ? workbench.commands.executeCommand(record.command.id, resolvedArgs, context)\n : action.run?.(resolvedArgs));\n};\n\nconst runTreeAction = async (input: {\n action: TreeAction;\n workbench: WorkbenchCoreContributionContext;\n onCommandError?: (error: unknown) => void;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}) => {\n const { action, args, context, onCommandError, workbench } = input;\n try {\n await executeTreeAction({ action, args, context, workbench });\n } catch (error) {\n onCommandError?.(error);\n throw error;\n }\n};\n\nconst resolveTreeActionCommand = (workbench: WorkbenchCoreContributionContext, action: TreeAction) => {\n if (!action.commandId) return undefined;\n return workbench.commands.getCommand(action.commandId);\n};\n\nconst isTreeActionVisible = (\n workbench: WorkbenchCoreContributionContext,\n action: TreeAction,\n contextValues: Record<string, ContextKeyValue>,\n) => {\n if (!matchesContextExpression(contextValues, action.when)) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n if (action.commandId && !record) return false;\n\n return record ? isRegisteredCommandVisible(record, action.args, contextValues) : true;\n};\n\nconst isTreeActionEnabled = (workbench: WorkbenchCoreContributionContext, action: TreeAction) => {\n if (action.disabled) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n return record ? workbench.commands.isCommandEnabled(record.command.id, action.args) : true;\n};\n\nconst createMenuIcon = (input: { icon?: string; iconSrc?: string }) => {\n const { icon, iconSrc } = input;\n if (iconSrc) {\n return (\n <Box boxSize=\"16px\" bg=\"white\" borderRadius=\"4px\" p=\"1px\" display=\"grid\" placeItems=\"center\">\n <img\n src={iconSrc}\n alt=\"\"\n aria-hidden=\"true\"\n width={14}\n height={14}\n style={{ display: \"block\", width: \"100%\", height: \"100%\", objectFit: \"contain\" }}\n />\n </Box>\n );\n }\n\n return icon ? <WorkbenchIcon name={icon} /> : undefined;\n};\n\nconst createMenuEndContent = (input: { external?: boolean; binding?: KeybindingSequence }) => {\n const { binding, external } = input;\n if (external) return <WorkbenchIcon name=\"ArrowUpRight\" size={14} color=\"fg.muted\" />;\n if (binding) return <PaletteShortcut binding={binding} />;\n return undefined;\n};\n\nconst withLeadingSeparator = <T extends TreeListActionMenuItem>(items: T[], enabled: boolean) => {\n if (!enabled || items.length === 0) return items;\n const [first, ...rest] = items;\n return [{ ...first, separatorBefore: true }, ...rest];\n};\n\nconst isKernelMenuAction = (group: string | undefined) => group === \"kernel\";\n\nconst createTreeMenuItemGroups = (input: CreateTreeMenuItemsInput) => {\n const { context, menuPath, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listActiveKeybindings().map((k) => [k.commandId, k.keybinding]));\n const regularItems: TreeListActionMenuItem[] = [];\n const kernelItems: TreeListActionMenuItem[] = [];\n\n for (const [index, action] of workbench.layout.listMenuItems(menuPath).entries()) {\n if (!matchesContextExpression(contextValues, action.when)) continue;\n\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) continue;\n\n const args = action.args;\n if (!isRegisteredCommandVisible(record, args, contextValues)) continue;\n\n const icon = action.icon ?? record.command.icon;\n const binding = shortcuts.get(record.command.id);\n const readOnly = action.readOnly === true;\n const label = action.label ?? record.command.label;\n const requestParams =\n hasCommandParameters(record.command.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: record.command },\n label,\n args,\n context,\n },\n run: async (nextArgs) => {\n try {\n await workbench.commands.executeCommand(record.command.id, nextArgs, context);\n } catch (error) {\n onCommandError?.(error);\n throw error;\n }\n },\n })\n : undefined;\n const item = {\n id: `${action.commandId}:${index}`,\n label,\n commandId: action.sourceCommandId ?? record.command.id,\n description: action.description ?? record.command.description,\n icon: createMenuIcon({ icon, iconSrc: action.iconSrc }),\n endContent: createMenuEndContent({ external: action.external, binding }),\n disabled: readOnly || !workbench.commands.isCommandEnabled(record.command.id, args),\n readOnly,\n onAction: readOnly\n ? undefined\n : () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void workbench.commands\n .executeCommand(record.command.id, args, context)\n .catch((error) => onCommandError?.(error));\n },\n };\n\n if (isKernelMenuAction(action.group)) {\n kernelItems.push(item);\n } else {\n regularItems.push(item);\n }\n }\n\n return { regularItems, kernelItems };\n};\n\nexport const createTreeMenuItems = (input: CreateTreeMenuItemsInput) => {\n const { regularItems, kernelItems } = createTreeMenuItemGroups(input);\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n\nconst createTreeActionMenuItems = (input: CreateTreeContextMenuItemsInput) => {\n const { actions = [], context, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listActiveKeybindings().map((k) => [k.commandId, k.keybinding]));\n const items: TreeListActionMenuItem[] = [];\n\n for (const action of actions) {\n if (!isTreeActionVisible(workbench, action, contextValues)) continue;\n\n const record = resolveTreeActionCommand(workbench, action);\n const label = action.label ?? record?.command.label;\n if (!label) continue;\n\n const icon = action.icon ?? record?.command.icon;\n const disabled = !isTreeActionEnabled(workbench, action);\n const binding = action.commandId ? shortcuts.get(action.commandId) : undefined;\n const requestParams =\n hasCommandParameters(action.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: { id: action.commandId ?? action.id, label, params: action.params } },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => runTreeAction({ action, args, context, workbench, onCommandError }),\n })\n : undefined;\n items.push({\n id: action.id,\n label,\n commandId: record?.command.id ?? action.commandId,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n endContent: binding ? <PaletteShortcut binding={binding} /> : undefined,\n disabled,\n onAction: () => {\n if (disabled) return;\n if (requestParams) {\n requestParams();\n return;\n }\n void runTreeAction({ action, context, workbench, onCommandError }).catch(() => undefined);\n },\n });\n }\n\n return items;\n};\n\nexport const createTreeContextMenuItems = (input: CreateTreeContextMenuItemsInput) => {\n const actionItems = createTreeActionMenuItems(input);\n const { regularItems, kernelItems } = input.menuPath\n ? createTreeMenuItemGroups({ ...input, menuPath: input.menuPath })\n : { regularItems: [], kernelItems: [] };\n const visibleRegularItems = [...actionItems, ...regularItems];\n\n return [...visibleRegularItems, ...withLeadingSeparator(kernelItems, visibleRegularItems.length > 0)];\n};\n\nexport const createTreeActionItems = (input: CreateTreeActionItemsInput) => {\n const { actions = [], context, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listActiveKeybindings().map((k) => [k.commandId, k.keybinding]));\n const items: TreeListAction[] = [];\n\n for (const action of actions) {\n if (!isTreeActionVisible(workbench, action, contextValues) || !isTreeActionEnabled(workbench, action)) continue;\n\n const record = resolveTreeActionCommand(workbench, action);\n const label = action.label ?? record?.command.label;\n if (!label) continue;\n\n const icon = action.icon ?? record?.command.icon;\n const binding = action.commandId ? shortcuts.get(action.commandId) : undefined;\n const requestParams =\n hasCommandParameters(action.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: { id: action.commandId ?? action.id, label, params: action.params } },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => runTreeAction({ action, args, context, workbench, onCommandError }),\n })\n : undefined;\n items.push({\n id: action.id,\n label,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n tooltip: binding ? (\n <HStack gap=\"2\">\n <Text>{label}</Text>\n <PaletteShortcut binding={binding} />\n </HStack>\n ) : undefined,\n onAction: () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void runTreeAction({ action, context, workbench, onCommandError }).catch(() => undefined);\n },\n });\n }\n\n return items;\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport type { ResourceContextAction, TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type { ResourceRef, WorkbenchCoreContributionContext } from \"../../core\";\nimport { resourceContextMenuPath } from \"../../core\";\nimport { createTreeContextMenuItems } from \"../renderers/tree/tree-actions\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nconst toResourceContextAction = (item: TreeListActionMenuItem): ResourceContextAction => ({\n key: item.id,\n label: item.label,\n commandId: item.commandId,\n icon: typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"16px\" /> : item.icon,\n endContent: item.endContent,\n isDisabled: item.disabled,\n separatorBefore: item.separatorBefore,\n onClick: () => item.onAction?.(),\n});\n\nexport const createWorkbenchResourceActions = (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) =>\n createTreeContextMenuItems({\n menuPath: resourceContextMenuPath(resource.kind),\n workbench,\n context: { resource },\n onRequestParams: ({ request }) => workbench.commandPalette.requestParams(request),\n }).map(toResourceContextAction);\n\nexport const useWorkbenchResourceActionResolver = (workbench: WorkbenchCoreContributionContext) => {\n useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n\n return (resource: ResourceRef) => createWorkbenchResourceActions(workbench, resource);\n};\n","import type { ToastStatusChangeDetails } from \"@chakra-ui/react\";\nimport { toaster } from \"@pstdio/ui\";\nimport { useEffect, useRef } from \"react\";\nimport type { RegisteredWorkbenchNotification, WorkbenchCore, WorkbenchNotificationAction } from \"../../core\";\n\n// Bridges `workbench.notifications` into the shared `@pstdio/ui` toaster singleton.\n// The Workbench shell renders the viewport once alongside the rest of its chrome.\ninterface WorkbenchNotificationHostProps {\n workbench: WorkbenchCore;\n}\n\nconst executeNotificationAction = (input: { action: WorkbenchNotificationAction; workbench: WorkbenchCore }) => {\n const { action, workbench } = input;\n void workbench.commands.executeCommand(action.commandId, action.args).catch(() => undefined);\n};\n\nexport const WorkbenchNotificationHost = (props: WorkbenchNotificationHostProps) => {\n const { workbench } = props;\n const shownNotificationIds = useRef(new Set<string>());\n\n useEffect(() => {\n const showNotification = (notification: RegisteredWorkbenchNotification) => {\n const action = notification.actions?.[0];\n const toastAction = action\n ? {\n label: action.title,\n onClick: () => executeNotificationAction({ action, workbench }),\n }\n : undefined;\n const toastOptions = {\n id: notification.id,\n type: notification.level,\n title: notification.title,\n description: notification.message,\n action: toastAction,\n closable: true,\n onStatusChange: (details: ToastStatusChangeDetails) => {\n if (details.status === \"unmounted\") workbench.notifications.dismiss(notification.id);\n },\n };\n\n if (shownNotificationIds.current.has(notification.id)) {\n toaster.update(notification.id, toastOptions);\n return;\n }\n\n shownNotificationIds.current.add(notification.id);\n toaster.create(toastOptions);\n };\n\n for (const notification of workbench.notifications.listNotifications()) showNotification(notification);\n\n const subscription = workbench.notifications.subscribe((event) => {\n if (event.type === \"show\") {\n showNotification(event.notification);\n return;\n }\n\n shownNotificationIds.current.delete(event.id);\n toaster.dismiss(event.id);\n });\n\n return () => {\n subscription.dispose();\n for (const id of shownNotificationIds.current) toaster.dismiss(id);\n shownNotificationIds.current.clear();\n };\n }, [workbench]);\n\n return null;\n};\n","import type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport const useWorkbenchLocationResource = (workbench: WorkbenchCore) => {\n const activeLocationWidgetId = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.activeLocationWidgetId,\n );\n return activeLocationWidgetId ? workbench.getPrimaryResource() : undefined;\n};\n\nexport const useWorkbenchActiveModeId = (workbench: WorkbenchCore) =>\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n","import { Box, Center } from \"@chakra-ui/react\";\nimport { type ReactNode, useLayoutEffect, useRef } from \"react\";\nimport type {\n RegisteredPlaceholderContribution,\n RegisteredWidgetContribution,\n WorkbenchCore,\n WorkbenchPanelRenderInput,\n WorkbenchRendererRegistration,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchWidgetHostProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;\n}\n\nconst WorkbenchWidgetFallback = (props: { label: string }) => {\n const { label } = props;\n\n return (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n );\n};\n\nconst WorkbenchRenderedWidgetFrame = (props: { children: ReactNode }) => {\n const { children } = props;\n\n return (\n <Box flex=\"1\" minW=\"0\" minH=\"0\" w=\"full\" h=\"full\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n\ninterface WorkbenchKeepAliveSlotProps {\n workbench: WorkbenchCore;\n rendererId: string;\n workbenchInput: WorkbenchPanelRenderInput;\n}\n\n// Claims the renderer's persistent host into a stable slot div. The kept-alive\n// subtree itself lives in `WorkbenchKeepAliveLayer`; this just opens the door\n// for the host to be reparented into the widget's frame.\nconst WorkbenchKeepAliveSlot = (props: WorkbenchKeepAliveSlotProps) => {\n const { workbench, rendererId, workbenchInput } = props;\n const slotRef = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n const slot = slotRef.current;\n if (!slot) return;\n const disposable = workbench.renderers.claim(rendererId, slot, workbenchInput);\n return () => disposable.dispose();\n }, [workbench, rendererId, workbenchInput]);\n\n return <div ref={slotRef} style={{ display: \"contents\" }} data-workbench-keep-alive-slot={rendererId} />;\n};\n\nconst noopRefresh = () => undefined;\n\nconst renderWidgetBody = (renderer: WorkbenchRendererRegistration, workbenchInput: WorkbenchPanelRenderInput) => {\n if (renderer.keepAlive) {\n return (\n <WorkbenchKeepAliveSlot\n workbench={workbenchInput.workbench}\n rendererId={renderer.id}\n workbenchInput={workbenchInput}\n />\n );\n }\n return renderer.render(workbenchInput) as ReactNode;\n};\n\nexport const WorkbenchWidgetHost = (props: WorkbenchWidgetHostProps) => {\n const { workbench, placement } = props;\n const widget = props.widget ?? workbench.layout.getWidget(placement.contributionId);\n const refresh = noopRefresh;\n const renderer = useWorkbenchStore(workbench.renderers.store, (state) => state.renderers[widget?.rendererId ?? \"\"]);\n\n if (!widget) {\n return <WorkbenchWidgetFallback label=\"Widget contribution is no longer registered.\" />;\n }\n const panel = \"role\" in widget ? toPanelContribution(widget as RegisteredWidgetContribution) : widget;\n const instance = toPanelInstance(placement);\n\n return (\n // `flex: 1 0 auto` lets the host fill its region when the widget is short and\n // grow past it when the widget is tall, so the region's ScrollArea can scroll.\n <Box display=\"flex\" flex=\"1 0 auto\" minW=\"0\" minH=\"0\" w=\"full\" overflow=\"hidden\">\n {renderer ? (\n <WorkbenchRenderedWidgetFrame>\n {renderWidgetBody(renderer, { workbench, panel, instance, refresh })}\n </WorkbenchRenderedWidgetFrame>\n ) : (\n <WorkbenchWidgetFallback label={`No renderer registered for ${widget.rendererId}.`} />\n )}\n </Box>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@pstdio/ui\";\nimport type {\n RegisteredPlaceholderContribution,\n WorkbenchCore,\n WorkbenchPanelMenuRegion,\n WorkbenchRegion as WorkbenchRegionId,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n getWorkbenchPanelForMenuRegion,\n matchesWorkbenchLocationEligibility,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { getWorkbenchRegionBackground } from \"../theme/workbench-theme-background\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\ninterface WorkbenchRegionProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegionId;\n title?: string;\n pointerEvents?: \"auto\" | \"none\";\n transparent?: boolean;\n}\n\n// Header bars and the status bar lay their content out in a row, so they\n// scroll on the X axis; every other region scrolls vertically.\nconst horizontalScrollRegions = new Set<WorkbenchRegionId>([\n \"nav\",\n \"sidenav-header\",\n \"main-header\",\n \"secondary-header\",\n \"side-header\",\n \"status\",\n]);\n\nconst panelMenuRegionIds = new Set<WorkbenchRegionId>(\n Object.values(workbenchPanelMenuRegions).flatMap((regions) => Object.values(regions)),\n);\nconst sidePanelRegionIds = new Set<WorkbenchRegionId>([\"side\", \"side-header\", \"side-left-menu\", \"side-right-menu\"]);\n\n// A flex column at least as tall as the viewport lets a widget fill the region\n// (e.g. a tree with a pinned footer) while still growing and scrolling.\nconst verticalContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\", position: \"relative\" } as const;\n\n// Horizontal header regions need a definite content height so full-height\n// controls can stretch through the ScrollArea's content wrapper.\nconst horizontalContentProps = {\n display: \"flex\",\n alignItems: \"stretch\",\n h: \"full\",\n minH: \"100%\",\n position: \"relative\",\n} as const;\n\nconst getActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((placement) => placement.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveRenderedRegionPlacements = (\n widgets: WorkbenchWidgetPlacement[],\n activeWidgetId?: string,\n): WorkbenchWidgetPlacement[] => {\n const activePlacement = getActivePlacement(widgets, activeWidgetId);\n if (!activePlacement) return [];\n return widgets.filter(\n (placement) => placement.widgetId === activePlacement.widgetId || placement.mountStrategy === \"keep-mounted\",\n );\n};\n\nexport const resolveRegionPlacementRenderState = (\n placement: WorkbenchWidgetPlacement,\n activeWidgetId: string | undefined,\n) => {\n const active = placement.widgetId === activeWidgetId;\n return {\n active,\n display: \"flex\",\n pointerEvents: active ? \"auto\" : \"none\",\n position: active ? \"relative\" : \"absolute\",\n visibility: active ? \"visible\" : \"hidden\",\n } as const;\n};\n\nconst createPlaceholderPlacement = (placeholder: RegisteredPlaceholderContribution): WorkbenchWidgetPlacement => ({\n widgetId: placeholder.id,\n contributionId: placeholder.id,\n title: placeholder.title,\n closable: false,\n});\n\nexport const WorkbenchRegion = (props: WorkbenchRegionProps) => {\n const { workbench, region, title, pointerEvents = \"auto\", transparent = false } = props;\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const currentRegionState = layout.regions[region];\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const activeSubPanel = panelMenuRegionIds.has(region)\n ? getActiveWorkbenchSubPanel(\n layout,\n getWorkbenchPanelForMenuRegion(region as WorkbenchPanelMenuRegion),\n locationResource,\n { ignoreOwnerResourceUri: sidePanelRegionIds.has(region) },\n )\n : undefined;\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (sidePanelRegionIds.has(region)\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : matchesWorkbenchLocationEligibility(contribution, locationResource, modeId, placement)) &&\n matchesWorkbenchPanelMenuOwner(contribution, {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n })\n : false;\n }),\n };\n const globalActiveWidgetId = useWorkbenchStore(workbench.layout.store, (state) => state.layout.activeWidgetId);\n const activePlacement = getActivePlacement(regionState.widgets, regionState.activeWidgetId);\n const placeholder = activePlacement ? undefined : workbench.layout.getPlaceholder(region);\n const placement = activePlacement ?? (placeholder ? createPlaceholderPlacement(placeholder) : undefined);\n const renderedPlacements = activePlacement\n ? resolveRenderedRegionPlacements(regionState.widgets, activePlacement.widgetId)\n : [];\n\n if (!placement) return null;\n\n const scrollsHorizontally = horizontalScrollRegions.has(region);\n\n // Interacting with a region makes its active widget the globally-active one (so clicking\n // into the Side Panel session sets it global-active) without touching the primary anchor,\n // which only follows `main`. Placeholders are not real widgets, so only activate a real\n // placement that is not already active.\n const activateOnInteract = () => {\n if (activePlacement && activePlacement.widgetId !== globalActiveWidgetId) {\n workbench.layout.activatePanel(activePlacement.widgetId);\n }\n };\n\n return (\n <Flex\n as=\"section\"\n direction=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n bg={transparent ? \"transparent\" : getWorkbenchRegionBackground(region)}\n overflow=\"hidden\"\n pointerEvents={pointerEvents}\n aria-label={title ?? region}\n onPointerDown={activateOnInteract}\n onFocusCapture={activateOnInteract}\n >\n {/* The region owns scrolling: overflowing widget content scrolls here\n with the same narrow overlay scrollbar used across the workbench. */}\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n size=\"xs\"\n showVerticalScrollbar={!scrollsHorizontally}\n showHorizontalScrollbar={scrollsHorizontally}\n // Horizontal bars hold a single row that should stay vertically\n // centered; the ScrollArea otherwise top-aligns its flowing content.\n viewportProps={scrollsHorizontally ? { justifyContent: \"center\" } : undefined}\n // Vertical regions host a flex column so a widget can fill the region\n // (e.g. a tree with a pinned footer) yet still grow and scroll.\n contentProps={scrollsHorizontally ? horizontalContentProps : verticalContentProps}\n >\n {placeholder ? (\n <WorkbenchWidgetHost workbench={workbench} placement={placement} widget={placeholder} />\n ) : (\n renderedPlacements.map((renderedPlacement) => {\n const renderState = resolveRegionPlacementRenderState(renderedPlacement, activePlacement?.widgetId);\n\n return (\n <Box\n key={renderedPlacement.widgetId}\n display={renderState.display}\n flex={renderState.active ? \"1 0 auto\" : undefined}\n h={renderState.active ? undefined : \"full\"}\n inset={renderState.active ? undefined : \"0\"}\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n pointerEvents={renderState.pointerEvents}\n position={renderState.position}\n visibility={renderState.visibility}\n w=\"full\"\n >\n <WorkbenchWidgetHost workbench={workbench} placement={renderedPlacement} />\n </Box>\n );\n })\n )}\n </ScrollArea>\n </Flex>\n );\n};\n","import { IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { useRef } from \"react\";\nimport type { RegisteredWidgetContribution, ResourceRef, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { openPanelWidget } from \"./panel-widget-open\";\n\ninterface WorkbenchPanelAddMenuProps {\n workbench: WorkbenchCore;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n widgets: RegisteredWidgetContribution[];\n}\n\nexport const WorkbenchPanelAddMenu = (props: WorkbenchPanelAddMenuProps) => {\n const { region, resource, widgets, workbench } = props;\n const hydrating = useWorkbenchStore(workbench.history.store, (state) => state.hydrating);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const label = \"Add panel\";\n if (widgets.length === 0) return null;\n\n const trigger = (\n <IconButton\n ref={widgets.length > 1 ? triggerRef : undefined}\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={label}\n disabled={hydrating}\n flexShrink={0}\n onClick={\n widgets.length === 1 ? () => openPanelWidget({ workbench, widget: widgets[0], region, resource }) : undefined\n }\n >\n <WorkbenchIcon name=\"plus\" size={13} />\n </IconButton>\n );\n\n if (widgets.length === 1) return <Tooltip content={label}>{trigger}</Tooltip>;\n\n return (\n <Menu.Root positioning={{ placement: \"bottom-start\", getAnchorElement: () => triggerRef.current }}>\n <Tooltip content={label}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"17.5rem\" bg=\"bg\">\n {widgets.map((widget) => (\n <Menu.Item key={widget.id} value={`widget:${widget.id}`} disabled={hydrating} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={widget.title}\n icon={widget.icon ? <WorkbenchIcon name={widget.icon} size={14} /> : undefined}\n disabled={hydrating}\n onActivate={() => openPanelWidget({ workbench, widget, region, resource })}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import type { WorkbenchWidgetPlacement } from \"../../core\";\n\nexport const toTabKey = (regionId: string, placement: WorkbenchWidgetPlacement) =>\n `${regionId}:${placement.contributionId}`;\n\nexport const resolveDisplayedActiveWidgetId = (\n visiblePlacements: WorkbenchWidgetPlacement[],\n activeWidgetId: string | undefined,\n): string | undefined => {\n if (!activeWidgetId) return visiblePlacements[0]?.widgetId;\n const hasActive = visiblePlacements.some((placement) => placement.widgetId === activeWidgetId);\n if (hasActive) return activeWidgetId;\n return visiblePlacements[0]?.widgetId;\n};\n","import {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n getWorkbenchModePanelForRegion,\n isWorkbenchModePanelAvailable,\n listEligibleSubPanels,\n matchesWorkbenchPanelMenuOwner,\n matchesWorkbenchPanelPlacementLocation,\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion,\n type WorkbenchWidgetPlacement,\n workbenchPanelMenuRegions,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nconst isPlacementCloseable = (placement: WorkbenchWidgetPlacement) => placement.closable === true;\n\nconst isWorkbenchPanelRegion = (region: WorkbenchRegion): region is WorkbenchPanelRegion =>\n workbenchPanelRegions.some((panelRegion) => panelRegion === region);\n\nexport const shouldShowRegionTabs = (\n placements: WorkbenchWidgetPlacement[],\n options: { hasLeadingActions?: boolean; hasAddAction?: boolean } = {},\n) =>\n options.hasAddAction === true ||\n options.hasLeadingActions === true ||\n placements.length > 0 ||\n placements.some(isPlacementCloseable);\n\ninterface WorkbenchPanelHeaderVisibility {\n hasOpenSubPanels?: boolean;\n hasEligibleSubPanels?: boolean;\n hasPanelMenus?: boolean;\n hasHeaderActions?: boolean;\n}\n\nexport const shouldShowPanelHeader = (input: WorkbenchPanelHeaderVisibility) =>\n input.hasOpenSubPanels === true ||\n input.hasEligibleSubPanels === true ||\n input.hasPanelMenus === true ||\n input.hasHeaderActions === true;\n\nconst isSubPanelPlacement = (workbench: WorkbenchCore, placement: WorkbenchWidgetPlacement) =>\n (placement.role ?? workbench.layout.getWidget(placement.contributionId)?.role) === \"sub-panel\";\n\nexport const isPlacementEligibleForRegion = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n placement: WorkbenchWidgetPlacement,\n resource = workbench.getPrimaryResource(),\n modeId = workbench.modes.getActiveModeId(),\n) => {\n const widget = workbench.layout.getWidget(placement.contributionId);\n return widget\n ? matchesWorkbenchPanelPlacementLocation(widget, resource, modeId, placement, {\n ignoreResourceLocation: region === \"side\",\n })\n : false;\n};\n\nexport const useWorkbenchPanelHeaderVisible = (workbench: WorkbenchCore, region: WorkbenchPanelRegion) => {\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n if (!isWorkbenchModePanelAvailable(modeId ? workbench.modes.getMode(modeId) : undefined, region)) return false;\n const activeSubPanel = getActiveWorkbenchSubPanel(layoutState.layout, region, resource, {\n ignoreOwnerResourceUri: region === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layoutState.layout);\n const openSubPanels = layoutState.layout.regions[region].widgets.filter(\n (placement) =>\n isSubPanelPlacement(workbench, placement) &&\n isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n const hasMultipleLocations =\n region === \"main\" &&\n layoutState.layout.regions.main.widgets.filter(\n (placement) => (placement.role ?? workbench.layout.getWidget(placement.contributionId)?.role) === \"location\",\n ).length > 1;\n const eligibleSubPanels = listEligibleSubPanels({\n widgets: Object.values(layoutState.widgets),\n layout: layoutState.layout,\n region,\n resource,\n modeId,\n });\n const menuRegions = workbenchPanelMenuRegions[region];\n const hasPanelMenus = [menuRegions.left, menuRegions.right].some(\n (menuRegion) =>\n layoutState.layout.regions[menuRegion].widgets.some(\n (placement) =>\n isPlacementEligibleForRegion(workbench, region, placement, resource, modeId) &&\n matchesWorkbenchPanelMenuOwner(layoutState.widgets[placement.contributionId], {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n }),\n ) || Boolean(workbench.layout.getPlaceholder(menuRegion)),\n );\n const hasHeaderActions =\n listWorkbenchMenuItemsFromState({ itemsByPath, commands, contextValues }, workbenchRegionTabLeadingMenuPath(region))\n .length > 0;\n\n return shouldShowPanelHeader({\n hasOpenSubPanels: openSubPanels.length > 0 || hasMultipleLocations,\n hasEligibleSubPanels: eligibleSubPanels.length > 0,\n hasPanelMenus,\n hasHeaderActions,\n });\n};\n\nexport const useWorkbenchRegionTabsVisible = (workbench: WorkbenchCore, region: WorkbenchRegion) => {\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const modePanel = getWorkbenchModePanelForRegion(region);\n if (modePanel && !isWorkbenchModePanelAvailable(modeId ? workbench.modes.getMode(modeId) : undefined, modePanel)) {\n return false;\n }\n const placements = layoutState.layout.regions[region].widgets.filter(\n (placement) =>\n isSubPanelPlacement(workbench, placement) &&\n isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n const locationTabs =\n region === \"main\"\n ? layoutState.layout.regions.main.widgets.filter(\n (placement) => (placement.role ?? workbench.layout.getWidget(placement.contributionId)?.role) === \"location\",\n )\n : [];\n const leadingItems = listWorkbenchMenuItemsFromState(\n { itemsByPath, commands, contextValues },\n workbenchRegionTabLeadingMenuPath(region),\n );\n\n return shouldShowRegionTabs(locationTabs.length > 1 ? [...locationTabs, ...placements] : placements, {\n hasLeadingActions: leadingItems.length > 0,\n hasAddAction:\n isWorkbenchPanelRegion(region) &&\n listEligibleSubPanels({\n widgets: Object.values(layoutState.widgets),\n layout: layoutState.layout,\n region,\n resource,\n modeId,\n }).length > 0,\n });\n};\n","import { CloseButton, Menu, Portal, Tabs, Text } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { ListRow } from \"@pstdio/ui\";\nimport { type KeyboardEvent, type MouseEvent as ReactMouseEvent, type ReactNode, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchRegionTabProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId: string | undefined;\n disabled?: boolean;\n nextWidgetId?: string;\n previousWidgetId?: string;\n sortable?: boolean;\n}\n\nconst noopRefresh = () => undefined;\n\nconst WorkbenchTabRenderer = (props: {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n rendererId: string;\n}) => {\n const { placement, rendererId, workbench } = props;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const renderer = useWorkbenchStore(workbench.renderers.store, (state) => state.renderers[rendererId]);\n\n if (!widget || !renderer || renderer.keepAlive) return null;\n return renderer.render({\n workbench,\n panel: toPanelContribution(widget),\n instance: toPanelInstance(placement),\n refresh: noopRefresh,\n }) as ReactNode;\n};\n\nconst useRegionTabBehavior = (input: WorkbenchRegionTabProps) => {\n const { disabled = false, nextWidgetId, placement, previousWidgetId, sortable = false, workbench } = input;\n const customMenuRendererId = placement.tab?.customMenuRendererId;\n const isPreview = placement.tabRetention === \"preview\";\n const hasCustomMenu = Boolean(customMenuRendererId);\n const hasContextMenu = isPreview;\n const sortableState = useSortable({ id: placement.widgetId, disabled: disabled || !sortable });\n const [openMenu, setOpenMenu] = useState<\"custom\" | \"context\">();\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const openTabMenu = (menu: \"custom\" | \"context\", event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n const rect = event.currentTarget.getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n setOpenMenu(menu);\n };\n const openCustomMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (hasCustomMenu && !disabled) openTabMenu(\"custom\", event);\n };\n const openContextMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (hasContextMenu && !disabled) openTabMenu(\"context\", event);\n };\n const setMenuOpen = (menu: \"custom\" | \"context\", open: boolean) => {\n setOpenMenu((current) => (open ? menu : current === menu ? undefined : current));\n };\n const reorderWithKeyboard = (event: KeyboardEvent<HTMLElement>) => {\n if (!sortable || disabled || !event.altKey) return;\n if (event.key === \"ArrowLeft\" && previousWidgetId) {\n event.preventDefault();\n workbench.layout.reorderPanel(placement.widgetId, { beforeWidgetId: previousWidgetId });\n }\n if (event.key === \"ArrowRight\" && nextWidgetId) {\n event.preventDefault();\n workbench.layout.reorderPanel(placement.widgetId, { afterWidgetId: nextWidgetId });\n }\n };\n return {\n anchor,\n customMenuRendererId,\n hasCustomMenu,\n hasContextMenu,\n isPreview,\n openContextMenu,\n openCustomMenu,\n openMenu,\n reorderWithKeyboard,\n setMenuOpen,\n sortableState,\n };\n};\n\nconst WorkbenchRegionTabMenuSurface = (props: {\n anchor: { x: number; y: number; width: number; height: number };\n children: ReactNode;\n label: string;\n open: boolean;\n setMenuOpen(open: boolean): void;\n}) => {\n const { anchor, children, label, open, setMenuOpen } = props;\n return (\n <Menu.Root\n open={open}\n onOpenChange={(details) => setMenuOpen(details.open)}\n positioning={{ placement: \"bottom-start\", getAnchorRect: () => anchor, offset: { mainAxis: 0 } }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"18.75rem\" bg=\"bg\">\n {children}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\nconst WorkbenchRegionTabContextMenu = (props: {\n anchor: { x: number; y: number; width: number; height: number };\n label: string;\n open: boolean;\n placement: WorkbenchWidgetPlacement;\n setMenuOpen(open: boolean): void;\n workbench: WorkbenchCore;\n}) => {\n const { anchor, label, open, placement, setMenuOpen, workbench } = props;\n return (\n <WorkbenchRegionTabMenuSurface\n anchor={anchor}\n label={`${label} context menu`}\n open={open}\n setMenuOpen={setMenuOpen}\n >\n <Menu.Item value=\"keep-open\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id=\"keep-open\"\n label=\"Keep Open\"\n icon={<WorkbenchIcon name=\"pin\" size={14} />}\n onActivate={() =>\n workbench.layout.updatePanel(placement.widgetId, {\n strategy: { kind: \"activate-or-open\" },\n })\n }\n />\n </Menu.Item>\n </WorkbenchRegionTabMenuSurface>\n );\n};\n\nconst WorkbenchRegionTabLabel = (props: {\n contentRendererId?: string;\n icon?: string;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { contentRendererId, icon, label, placement, workbench } = props;\n if (contentRendererId) {\n return <WorkbenchTabRenderer workbench={workbench} placement={placement} rendererId={contentRendererId} />;\n }\n return (\n <>\n {icon ? <WorkbenchIcon name={icon} size={12} flexShrink={0} color=\"fg.muted\" /> : null}\n <Text as=\"span\" minW=\"0\" truncate>\n {label}\n </Text>\n </>\n );\n};\n\nconst WorkbenchRegionTabCloseButton = (props: {\n disabled: boolean;\n isActive: boolean;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { disabled, isActive, label, placement, workbench } = props;\n if (placement.closable !== true) return null;\n return (\n <CloseButton\n as=\"span\"\n role=\"button\"\n aria-label={`Close ${label}`}\n aria-disabled={disabled}\n size=\"2xs\"\n boxSize=\"1rem\"\n minW=\"1rem\"\n p=\"0\"\n borderRadius=\"2xs\"\n flexShrink={0}\n me=\"-1\"\n opacity={isActive ? \"1\" : \"0\"}\n pointerEvents={isActive ? \"auto\" : \"none\"}\n color=\"fg.muted\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _hover={{ bg: \"transparent\", color: \"fg\" }}\n _active={{ bg: \"transparent\" }}\n transition=\"opacity 120ms ease\"\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n if (disabled) return;\n workbench.layout.closePanel(placement.widgetId);\n }}\n />\n );\n};\n\nconst WorkbenchRegionTabMenus = (props: {\n behavior: ReturnType<typeof useRegionTabBehavior>;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { behavior, label, placement, workbench } = props;\n return (\n <>\n {behavior.customMenuRendererId ? (\n <WorkbenchRegionTabMenuSurface\n anchor={behavior.anchor}\n label={`${label} menu`}\n open={behavior.openMenu === \"custom\"}\n setMenuOpen={(open) => behavior.setMenuOpen(\"custom\", open)}\n >\n <WorkbenchTabRenderer\n workbench={workbench}\n placement={placement}\n rendererId={behavior.customMenuRendererId}\n />\n </WorkbenchRegionTabMenuSurface>\n ) : null}\n {behavior.hasContextMenu ? (\n <WorkbenchRegionTabContextMenu\n anchor={behavior.anchor}\n label={label}\n open={behavior.openMenu === \"context\"}\n placement={placement}\n setMenuOpen={(open) => behavior.setMenuOpen(\"context\", open)}\n workbench={workbench}\n />\n ) : null}\n </>\n );\n};\n\nexport const WorkbenchRegionTab = (props: WorkbenchRegionTabProps) => {\n const { activeWidgetId, disabled = false, placement, sortable = false, workbench } = props;\n const isActive = placement.widgetId === activeWidgetId;\n const label = placement.title ?? placement.contributionId;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const icon =\n placement.resource?.icon ??\n (placement.resource ? workbench.resources.getKind(placement.resource.kind)?.icon : undefined) ??\n widget?.icon;\n const contentRendererId = placement.tab?.contentRendererId;\n const behavior = useRegionTabBehavior(props);\n const { isDragging, listeners, setNodeRef, transform, transition } = behavior.sortableState;\n const menuOpen =\n (behavior.openMenu === \"custom\" && behavior.hasCustomMenu) ||\n (behavior.openMenu === \"context\" && behavior.hasContextMenu);\n return (\n <>\n <Tabs.Trigger\n ref={setNodeRef}\n value={placement.widgetId}\n maxW=\"12rem\"\n minW=\"0\"\n flexShrink={0}\n title={label}\n disabled={disabled}\n className=\"group\"\n aria-haspopup={behavior.hasCustomMenu || behavior.hasContextMenu ? \"menu\" : undefined}\n aria-expanded={behavior.hasCustomMenu || behavior.hasContextMenu ? menuOpen : undefined}\n aria-keyshortcuts={sortable ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined}\n fontStyle={behavior.isPreview ? \"italic\" : undefined}\n opacity={isDragging ? \"0.5\" : undefined}\n transform={CSS.Transform.toString(transform)}\n transition={transition}\n {...listeners}\n onKeyDown={behavior.reorderWithKeyboard}\n onContextMenu={behavior.hasContextMenu ? behavior.openContextMenu : undefined}\n onClick={behavior.hasCustomMenu && isActive && !disabled ? behavior.openCustomMenu : undefined}\n >\n <WorkbenchRegionTabLabel\n contentRendererId={contentRendererId}\n icon={icon}\n label={label}\n placement={placement}\n workbench={workbench}\n />\n <WorkbenchRegionTabCloseButton\n disabled={disabled}\n isActive={isActive}\n label={label}\n placement={placement}\n workbench={workbench}\n />\n </Tabs.Trigger>\n <WorkbenchRegionTabMenus behavior={behavior} label={label} placement={placement} workbench={workbench} />\n </>\n );\n};\n","import { Tabs } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { horizontalListSortingStrategy, SortableContext } from \"@dnd-kit/sortable\";\nimport type { ReactNode } from \"react\";\nimport type {\n RegisteredWidgetContribution,\n ResourceRef,\n WorkbenchCore,\n WorkbenchPanelRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { WorkbenchRegionTab } from \"./region-tab\";\n\ninterface SortableRegionTabListProps {\n activeWidgetId?: string;\n disabled: boolean;\n leadingActions: ReactNode;\n panelRegion?: WorkbenchPanelRegion;\n placements: WorkbenchWidgetPlacement[];\n resource?: ResourceRef;\n eligibleSubPanels: RegisteredWidgetContribution[];\n workbench: WorkbenchCore;\n}\n\nexport const SortableRegionTabList = (props: SortableRegionTabListProps) => {\n const { activeWidgetId, disabled, eligibleSubPanels, leadingActions, panelRegion, placements, resource, workbench } =\n props;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n const reorderable = placements.filter(\n (placement) => placement.role === \"sub-panel\" && placement.tabRetention !== \"preview\",\n );\n const reorderWidget = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const activeIndex = placements.findIndex((placement) => placement.widgetId === active.id);\n const overIndex = placements.findIndex((placement) => placement.widgetId === over.id);\n const source = placements[activeIndex];\n const target = placements[overIndex];\n if (\n source?.role !== \"sub-panel\" ||\n source.tabRetention === \"preview\" ||\n target?.role !== \"sub-panel\" ||\n target.tabRetention === \"preview\"\n ) {\n return;\n }\n workbench.layout.reorderPanel(\n String(active.id),\n activeIndex < overIndex ? { afterWidgetId: target.widgetId } : { beforeWidgetId: target.widgetId },\n );\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={reorderWidget}>\n <SortableContext\n items={placements.map((placement) => placement.widgetId)}\n strategy={horizontalListSortingStrategy}\n >\n <Tabs.List h=\"full\" minH=\"0\" minW=\"max-content\" alignItems=\"center\" gap=\"2xs\" justifyContent=\"flex-start\">\n {placements.map((placement) => {\n const reorderableIndex = reorderable.findIndex((candidate) => candidate.widgetId === placement.widgetId);\n return (\n <WorkbenchRegionTab\n key={placement.widgetId}\n workbench={workbench}\n placement={placement}\n activeWidgetId={activeWidgetId}\n disabled={disabled}\n sortable={reorderableIndex >= 0}\n previousWidgetId={reorderable[reorderableIndex - 1]?.widgetId}\n nextWidgetId={reorderable[reorderableIndex + 1]?.widgetId}\n />\n );\n })}\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n widgets={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </Tabs.List>\n </SortableContext>\n </DndContext>\n );\n};\n","import { HStack, IconButton, Menu, Portal, Tabs } from \"@chakra-ui/react\";\nimport {\n buildTabVisibilityMenuActions,\n filterVisibleTabs,\n ListRow,\n PANEL_HEADER_CONTROL_SIZE,\n PANEL_HEADER_TAB_SIZE,\n ScrollArea,\n Tooltip,\n useTabVisibilityStore,\n} from \"@pstdio/ui\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport {\n listEligibleSubPanels,\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion as WorkbenchRegionId,\n type WorkbenchWidgetPlacement,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport type { WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { resolveDisplayedActiveWidgetId, toTabKey } from \"./region-tabs-visibility\";\nimport { isPlacementEligibleForRegion, shouldShowRegionTabs } from \"./region-tabs-visibility-hooks\";\nimport { SortableRegionTabList } from \"./sortable-region-tab-list\";\n\nexport {\n shouldShowPanelHeader,\n shouldShowRegionTabs,\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n} from \"./region-tabs-visibility-hooks\";\n\ninterface WorkbenchRegionTabsProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegionId;\n visibilityStorageKey?: string;\n}\n\nconst isWorkbenchPanelRegion = (region: WorkbenchRegionId): region is WorkbenchPanelRegion =>\n workbenchPanelRegions.some((panelRegion) => panelRegion === region);\n\nexport const WorkbenchRegionTabs = (props: WorkbenchRegionTabsProps) => {\n const { workbench, region, visibilityStorageKey } = props;\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const historyHydrating = useWorkbenchStore(workbench.history.store, (state) => state.hydrating);\n const regionState = layoutState.layout.regions[region];\n const registeredWidgets = layoutState.widgets;\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const subPanelPlacements = regionState.widgets.filter(\n (placement) =>\n (placement.role ?? workbench.layout.getWidget(placement.contributionId)?.role) === \"sub-panel\" &&\n isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n // Visibility is on by default; the host can override the storage key. When no key is supplied, fall\n // back to the region id so persistence has a sensible default.\n const visibilityKey = visibilityStorageKey ?? region;\n const tabStore = useTabVisibilityStore(visibilityKey, (state) => state);\n const tabOverrides = tabStore.tabOverrides;\n const getKey = (placement: WorkbenchWidgetPlacement) => toTabKey(region, placement);\n const visibleSubPanels = filterVisibleTabs(subPanelPlacements, tabOverrides, getKey);\n const visibleSubPanelIds = new Set(visibleSubPanels.map((placement) => placement.widgetId));\n const locationPanels =\n region === \"main\"\n ? regionState.widgets.filter(\n (placement) => (placement.role ?? workbench.layout.getWidget(placement.contributionId)?.role) === \"location\",\n )\n : [];\n const visiblePlacements =\n locationPanels.length + visibleSubPanels.length > 1\n ? regionState.widgets.filter(\n (placement) =>\n locationPanels.some((location) => location.widgetId === placement.widgetId) ||\n visibleSubPanelIds.has(placement.widgetId),\n )\n : visibleSubPanels;\n const [viewport, setViewport] = useState<HTMLDivElement | null>(null);\n const [menuOpen, setMenuOpen] = useState(false);\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0 });\n\n const resolvePlacementIcon = (placement: WorkbenchWidgetPlacement) => {\n const iconName =\n placement.resource?.icon ??\n (placement.resource ? workbench.resources.getKind(placement.resource.kind)?.icon : undefined);\n return iconName ? <WorkbenchIcon name={iconName} size={14} /> : undefined;\n };\n\n const menuActions = buildTabVisibilityMenuActions(\n subPanelPlacements,\n tabOverrides,\n {\n onToggleTab: (key, hiddenByDefault) => tabStore.toggleTab(key, hiddenByDefault),\n onResetAll: () => tabStore.reset(),\n },\n getKey,\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n resolvePlacementIcon,\n );\n const hasVisibilityMenu = menuActions.length > 0;\n const leadingItems = listWorkbenchMenuItemsFromState(\n { itemsByPath, commands, contextValues },\n workbenchRegionTabLeadingMenuPath(region),\n );\n const panelRegion = isWorkbenchPanelRegion(region) ? region : undefined;\n const eligibleSubPanels = panelRegion\n ? listEligibleSubPanels({\n widgets: Object.values(registeredWidgets),\n layout: layoutState.layout,\n region: panelRegion,\n resource,\n modeId,\n })\n : [];\n const hasAddAction = eligibleSubPanels.length > 0;\n const showTabs = shouldShowRegionTabs(visiblePlacements, {\n hasLeadingActions: leadingItems.length > 0,\n hasAddAction,\n });\n\n const openVisibilityMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasVisibilityMenu) return;\n\n event.preventDefault();\n const target = event.target instanceof Element ? event.target.closest('[role=\"tab\"]') : undefined;\n const rect = (target ?? event.currentTarget).getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n setMenuOpen(true);\n };\n\n // Translate vertical wheel into horizontal scrolling so the tab strip scrolls\n // with a plain mouse wheel — no modifier key required.\n useEffect(() => {\n if (!viewport) return;\n\n const onWheel = (event: WheelEvent) => {\n if (event.deltaY === 0 || viewport.scrollWidth <= viewport.clientWidth) return;\n viewport.scrollLeft += event.deltaY;\n event.preventDefault();\n };\n\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewport]);\n\n if (!showTabs) return null;\n\n const activeWidgetId = resolveDisplayedActiveWidgetId(visiblePlacements, regionState.activeWidgetId);\n const onSelectLeadingItem = (item: WorkbenchMenuItem) => {\n const command = commands[item.commandId]?.command;\n if (command && hasCommandParameters(command.params)) {\n workbench.commandPalette.requestParams({ record: { command }, label: item.label, args: item.args });\n return;\n }\n void workbench.commands.executeCommand(item.commandId, item.args).catch(() => undefined);\n };\n\n const leadingActions = leadingItems.map((item) => (\n <Tooltip key={item.id} content={item.label}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={item.label}\n disabled={historyHydrating || item.disabled}\n flexShrink={0}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n onSelectLeadingItem(item);\n }}\n >\n <WorkbenchIcon name={item.icon ?? \"plus\"} size={14} />\n </IconButton>\n </Tooltip>\n ));\n\n if (visiblePlacements.length === 0) {\n return (\n <HStack flex=\"1 1 auto\" h=\"full\" minW=\"0\" gap=\"2xs\">\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n widgets={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </HStack>\n );\n }\n\n return (\n <Tabs.Root\n value={activeWidgetId}\n onValueChange={(details) => {\n if (historyHydrating) return;\n const placement = visiblePlacements.find((candidate) => candidate.widgetId === details.value);\n if (placement?.role === \"location\") {\n workbench.layout.setRegionActiveWidget(region, placement.widgetId);\n return;\n }\n workbench.layout.activatePanel(details.value);\n }}\n variant=\"subtle\"\n colorPalette=\"gray\"\n justify=\"start\"\n size={PANEL_HEADER_TAB_SIZE}\n alignSelf=\"stretch\"\n flex=\"1 1 auto\"\n maxW=\"full\"\n minW=\"0\"\n h=\"full\"\n position=\"relative\"\n zIndex=\"1\"\n onContextMenu={hasVisibilityMenu ? openVisibilityMenu : undefined}\n >\n {/* Overflowing tabs scroll horizontally; the overlay scrollbar adds no\n height so the active tab still meets the header's bottom edge. */}\n <ScrollArea\n viewportRef={setViewport}\n size=\"xs\"\n h=\"full\"\n w=\"max-content\"\n maxW=\"full\"\n minW=\"0\"\n showVerticalScrollbar={false}\n showHorizontalScrollbar\n contentProps={{ h: \"full\" }}\n >\n {/* Chakra's size=\"sm\" list sets a 36px min-height that overflows the 2rem header and\n makes the horizontal-only viewport scroll vertically; minH=\"0\" lets h=\"full\" win. */}\n <SortableRegionTabList\n workbench={workbench}\n placements={visiblePlacements}\n activeWidgetId={activeWidgetId}\n disabled={historyHydrating}\n panelRegion={panelRegion}\n resource={resource}\n eligibleSubPanels={eligibleSubPanels}\n leadingActions={leadingActions}\n />\n </ScrollArea>\n {hasVisibilityMenu ? (\n <Menu.Root\n open={menuOpen}\n onOpenChange={(details) => setMenuOpen(details.open)}\n positioning={{\n placement: \"bottom-start\",\n getAnchorRect: () => anchor,\n offset: { mainAxis: 0 },\n }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"220px\" bg=\"bg\">\n {menuActions.map((action) => (\n <Menu.Item key={action.key} value={action.key} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </Tabs.Root>\n );\n};\n","import type { DataTableSelectionAction, RowData } from \"@pstdio/ui/data-table\";\nimport type { ReactNode } from \"react\";\nimport type {\n DataTableRendererColumn,\n DataTableRendererQueryResult,\n DataTableRendererRow,\n DataTableRendererSelectionAction,\n WorkbenchPanelInstance,\n} from \"../../../core\";\n\nexport const resolveDataTableRendererColumns = (\n result: DataTableRendererQueryResult,\n contributionColumns?: DataTableRendererColumn[],\n) => {\n if (result.columns) return result.columns;\n if (contributionColumns) return contributionColumns;\n const firstRow = result.rows[0];\n return firstRow ? Object.keys(firstRow.values).map((id): DataTableRendererColumn => ({ id })) : [];\n};\n\nexport const buildDataTableRendererData = (rows: DataTableRendererRow[], columns: DataTableRendererColumn[]) => {\n const rowByData = new WeakMap<Record<string, unknown>, DataTableRendererRow>();\n const data = rows.map((row) => {\n const values = Object.fromEntries(columns.map((column) => [column.id, row.values[column.id]]));\n rowByData.set(values, row);\n return values;\n });\n return { data, rowByData };\n};\n\nexport const resolveDataTableRendererSelectionActions = (\n actions: DataTableRendererSelectionAction[],\n rowByData: WeakMap<RowData, DataTableRendererRow>,\n): DataTableSelectionAction[] =>\n actions.map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const rows = data.flatMap((row) => {\n const rendererRow = rowByData.get(row);\n return rendererRow ? [rendererRow] : [];\n });\n void action.run(rows);\n },\n }));\n\nexport const resolveDataTableRendererStorageKey = (rendererId: string, placement: WorkbenchPanelInstance) => {\n const resourceKey = placement.resource?.uri ?? placement.resource?.id ?? \"unscoped\";\n return `pstdio:workbench:dataTableRenderer:${rendererId}:${placement.instanceId}:${resourceKey}`;\n};\n","import { Box, Stack, Text } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@pstdio/ui\";\nimport {\n DataTable,\n type DataTableColumnRenderer,\n type DataTableColumnStat,\n type DataTableRowAction,\n type RowData,\n} from \"@pstdio/ui/data-table\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n DataTableRendererQueryResult,\n RegisteredDataTableRendererContribution,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport {\n buildDataTableRendererData,\n resolveDataTableRendererColumns,\n resolveDataTableRendererSelectionActions,\n resolveDataTableRendererStorageKey,\n} from \"./data-table-view-model\";\n\ninterface WorkbenchDataTableViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredDataTableRendererContribution;\n placement: WorkbenchPanelInstance;\n}\n\nconst initialResult: DataTableRendererQueryResult = { rows: [] };\n\nexport const WorkbenchDataTableView = (props: WorkbenchDataTableViewProps) => {\n const { workbench, contribution, placement } = props;\n const [result, setResult] = useState(initialResult);\n const [loading, setLoading] = useState(true);\n const requestRef = useRef(0);\n\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve(\n contribution.executeQuery({ resource: placement.resource, modeId: workbench.modes.getActiveModeId() }),\n ).then((next) => {\n if (cancelled || requestRef.current !== requestId) return;\n setResult(next);\n setLoading(false);\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = workbench.renderers.onDidRefreshDataTableRenderer((event) => {\n if (event.dataTableRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [contribution, placement.resource, workbench]);\n\n const columns = resolveDataTableRendererColumns(result, contribution.columns);\n const model = useMemo(() => buildDataTableRendererData(result.rows, columns), [columns, result.rows]);\n const labels = Object.fromEntries(\n columns.filter((column) => column.label).map((column) => [column.id, column.label!]),\n );\n const descriptions = Object.fromEntries(\n columns.filter((column) => column.description).map((column) => [column.id, column.description!]),\n );\n const icons = Object.fromEntries(\n columns.filter((column) => column.icon).map((column) => [column.id, column.icon as ReactNode]),\n );\n const stats = Object.fromEntries(\n columns.filter((column) => column.stat).map((column) => [column.id, column.stat as DataTableColumnStat]),\n );\n const renderers = Object.fromEntries(\n columns\n .filter((column) => column.renderer)\n .map((column) => [column.id, column.renderer as DataTableColumnRenderer]),\n );\n const rowActions: DataTableRowAction[] = (contribution.rowActions ?? []).map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const row = model.rowByData.get(data);\n if (row) void action.run(row);\n },\n }));\n const selectionActions = resolveDataTableRendererSelectionActions(\n contribution.selectionActions ?? [],\n model.rowByData,\n );\n const openRow = (data: RowData) => {\n const row = model.rowByData.get(data);\n if (!row) return;\n if (contribution.onRowClick) return contribution.onRowClick(row);\n if (row.resource) void workbench.resources.openResource(row.resource, { replaceActive: true });\n };\n\n if (loading) {\n return (\n <Box p=\"md\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n Loading…\n </Text>\n </Box>\n );\n }\n\n if (result.rows.length === 0) {\n return (\n <EmptyState h=\"full\" title={contribution.emptyTitle ?? \"No rows\"} description={contribution.emptyDescription} />\n );\n }\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTable\n data={model.data}\n getRowId={(data) => model.rowByData.get(data)?.id ?? \"\"}\n toolbarStorageKey={resolveDataTableRendererStorageKey(contribution.id, placement)}\n compactHeaders={labels}\n columnDescriptions={descriptions}\n columnIcons={icons}\n hiddenColumns={columns.filter((column) => column.hidden).map((column) => column.id)}\n columnStats={stats}\n columnRenderers={renderers}\n initialPageSize={contribution.initialPageSize}\n pageSizeOptions={contribution.pageSizeOptions}\n selectionMode={contribution.selectionMode}\n selectionActions={selectionActions}\n rowActions={rowActions}\n onRowClick={openRow}\n isRowInteractive={(data) => {\n const row = model.rowByData.get(data);\n return Boolean(row && (row.resource || contribution.onRowClick));\n }}\n fullWidth\n />\n </Stack>\n );\n};\n","import type { ParamEditorProps } from \"@pstdio/ui\";\nimport type { PreferencePropertySchema, PreferenceValue } from \"../../../core\";\n\n// `@pstdio/ui` does not export the Param union by name, so derive it from the\n// editor props — this keeps the mapper honest about what the editor accepts.\ntype Param = NonNullable<ParamEditorProps[\"params\"]>[number];\ntype ParamValue = Parameters<NonNullable<ParamEditorProps[\"onChange\"]>>[1];\n\nexport interface PreferenceParamEntry {\n name: string;\n schema: PreferencePropertySchema;\n label?: string;\n /** Current value; falls back to the schema default when omitted. */\n value?: PreferenceValue;\n}\n\n// Booleans have no dedicated param-editor control, so they render as a two-option\n// selection. Array/object schemas without an enum have no editor at all and are skipped.\nconst BOOLEAN_OPTIONS = [\n { id: \"true\", name: \"On\" },\n { id: \"false\", name: \"Off\" },\n];\n\nconst humanize = (value: string) => {\n const segment = value.split(\".\").at(-1) ?? value;\n const spaced = segment.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/[-_]/g, \" \");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n};\n\nconst toOptions = (values: PreferenceValue[]) =>\n values.map((value) => ({ id: String(value), name: humanize(String(value)) }));\n\nconst toParam = (entry: PreferenceParamEntry): Param | undefined => {\n const { name, schema } = entry;\n const label = entry.label ?? humanize(name);\n const description = schema.description;\n const current = entry.value ?? schema.default;\n const base = { id: name, name: label, description };\n\n if (schema.type === \"number\") {\n return { ...base, type: \"number\", defaultValue: Number(current ?? 0) };\n }\n\n if (schema.type === \"boolean\") {\n return { ...base, type: \"selection\", defaultValue: String(Boolean(current)), options: BOOLEAN_OPTIONS };\n }\n\n if (schema.type === \"string\") {\n if (schema.enum) {\n return { ...base, type: \"selection\", defaultValue: String(current ?? \"\"), options: toOptions(schema.enum) };\n }\n return { ...base, type: \"text\", defaultValue: String(current ?? \"\"), singleLine: true };\n }\n\n if (schema.type === \"array\" && schema.enum) {\n const defaultValue = Array.isArray(current) ? current.map(String) : [];\n return { ...base, type: \"selection\", multiSelect: true, defaultValue, options: toOptions(schema.enum) };\n }\n\n return undefined;\n};\n\nexport const preferenceSchemaToParams = (entries: PreferenceParamEntry[]) =>\n entries.map(toParam).filter((param): param is Param => param !== undefined);\n\nexport const paramValueToPreference = (schema: PreferencePropertySchema, value: ParamValue): PreferenceValue => {\n if (schema.type === \"boolean\") return value === \"true\";\n if (schema.type === \"number\") return Number(value);\n if (schema.type === \"array\") return Array.isArray(value) ? value.map(String) : [];\n return String(value);\n};\n","import { Button, HStack, Stack } from \"@chakra-ui/react\";\nimport { ParamEditor, type ParamEditorProps } from \"@pstdio/ui\";\nimport { useState } from \"react\";\nimport type { PreferenceRegistry, PreferenceScope } from \"../../../core\";\nimport {\n type PreferenceParamEntry,\n paramValueToPreference,\n preferenceSchemaToParams,\n} from \"./preference-schema-to-params\";\n\ntype ParamValue = Parameters<NonNullable<ParamEditorProps[\"onChange\"]>>[1];\n\nexport interface WorkbenchPreferencesFormProps {\n preferences: PreferenceRegistry;\n /** Preference names to edit; an object form overrides the displayed label. */\n names: (string | { name: string; label?: string })[];\n /** Resolves the scopeId for a preference's scope (e.g. \"project\" -> active project id). */\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n /** \"live\" persists on change (default); \"apply\" stages edits behind Save/Discard. */\n mode?: \"live\" | \"apply\";\n}\n\nconst toName = (entry: string | { name: string; label?: string }) =>\n typeof entry === \"string\" ? { name: entry } : entry;\n\n// Renders a param editor auto-generated from the registered preference schema. The\n// form is generic: it knows only about preference names + scope, never the domain.\nexport const WorkbenchPreferencesForm = (props: WorkbenchPreferencesFormProps) => {\n const { preferences, names, resolveScopeId, mode = \"live\" } = props;\n const [staged, setStaged] = useState<Record<string, ParamValue>>({});\n const [formKey, setFormKey] = useState(0);\n\n const scopeRef = (scope: PreferenceScope) => ({ scope, scopeId: resolveScopeId?.(scope) });\n\n const entries: PreferenceParamEntry[] = [];\n for (const candidate of names) {\n const { name, label } = toName(candidate);\n const schema = preferences.getSchema(name);\n if (!schema) continue;\n entries.push({ name, label, schema, value: preferences.getValue(name, scopeRef(schema.scope)) });\n }\n\n const params = preferenceSchemaToParams(entries);\n const schemaByName = new Map(entries.map((entry) => [entry.name, entry.schema]));\n\n const persist = (name: string, value: ParamValue) => {\n const schema = schemaByName.get(name);\n if (!schema) return;\n preferences.setValue(name, paramValueToPreference(schema, value), scopeRef(schema.scope));\n };\n\n const handleChange = (id: string, value: ParamValue) => {\n if (mode === \"apply\") {\n setStaged((current) => ({ ...current, [id]: value }));\n return;\n }\n persist(id, value);\n };\n\n const save = () => {\n for (const [name, value] of Object.entries(staged)) persist(name, value);\n setStaged({});\n setFormKey((key) => key + 1);\n };\n\n const discard = () => {\n setStaged({});\n setFormKey((key) => key + 1);\n };\n\n const hasStaged = Object.keys(staged).length > 0;\n\n return (\n <Stack gap=\"md\" maxW=\"640px\">\n <ParamEditor key={formKey} params={params} onChange={handleChange} fullWidth />\n {mode === \"apply\" && (\n <HStack gap=\"sm\">\n <Button size=\"sm\" onClick={save} disabled={!hasStaged}>\n Save\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={discard} disabled={!hasStaged}>\n Discard\n </Button>\n </HStack>\n )}\n </Stack>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { PaletteShortcut, Tooltip, type TreeListNode, type TreeListSection } from \"@pstdio/ui\";\nimport { DiffBubble } from \"@pstdio/ui/diff\";\nimport type { ReactNode } from \"react\";\nimport {\n getWorkbenchSelectionResourceUris,\n type ResourceRef,\n resourceContextMenuPath,\n type TreeNode,\n type TreeViewSection,\n type WorkbenchCore,\n} from \"../../../core\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { createTreeActionItems, createTreeContextMenuItems, type TreeActionParamsRequest } from \"./tree-actions\";\n\ninterface TreeNodeRenderContext {\n workbench: WorkbenchCore;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n suppressContextMenus?: boolean;\n}\n\nexport const resolveTreeListActiveNodeId = (activeNodeId: string | null | undefined, selectedNodeId?: string) => {\n if (!activeNodeId) return selectedNodeId;\n return activeNodeId;\n};\n\ninterface ResolveTreeListSelectionInput {\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n activeNodeId?: string | null;\n activeResource?: ResourceRef;\n selectedNodeId?: string;\n}\n\nconst activeNodeIds = (ids: string[]) => {\n const uniqueIds = [...new Set(ids)];\n if (uniqueIds.length === 0) return undefined;\n return uniqueIds.length === 1 ? uniqueIds[0] : uniqueIds;\n};\n\nconst resolveTreeNodeResourceUri = (node: TreeNode) => {\n if (node.resource) return node.resource.uri;\n if (node.target?.kind === \"resource\") return node.target.resource.uri;\n return undefined;\n};\n\nconst listTreeNodes = (nodes: TreeNode[], childrenByNodeId: Record<string, TreeNode[]>): TreeNode[] =>\n nodes.flatMap((node) => [\n node,\n ...listTreeNodes([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], childrenByNodeId),\n ]);\n\nconst listSectionNodes = (sections: TreeViewSection[], childrenByNodeId: Record<string, TreeNode[]>) =>\n sections.flatMap((section) => listTreeNodes(section.nodes, childrenByNodeId));\n\nconst resolveActiveResourceNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n resourceUris: string[],\n) => {\n const nodes = listSectionNodes(sections, childrenByNodeId);\n\n for (const resourceUri of resourceUris) {\n const matches = nodes\n .filter((node) => node.id === resourceUri || resolveTreeNodeResourceUri(node) === resourceUri)\n .map((node) => node.id);\n if (matches.length > 0) return activeNodeIds(matches);\n }\n\n return undefined;\n};\n\nconst findSectionNode = (sections: TreeViewSection[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>) =>\n listSectionNodes(sections, childrenByNodeId).find((node) => node.id === nodeId);\n\nexport const resolveTreeListSelection = (input: ResolveTreeListSelectionInput) => {\n const { sections, childrenByNodeId, activeNodeId, activeResource, selectedNodeId } = input;\n if (activeNodeId) return activeNodeId;\n\n const activeResourceUris = getWorkbenchSelectionResourceUris(activeResource);\n const activeResourceNodeId = resolveActiveResourceNodeIds(sections, childrenByNodeId, activeResourceUris);\n if (activeResourceNodeId) return activeResourceNodeId;\n\n if (!selectedNodeId) return undefined;\n const selectedNode = findSectionNode(sections, selectedNodeId, childrenByNodeId);\n const selectedResourceUri = selectedNode ? resolveTreeNodeResourceUri(selectedNode) : undefined;\n if (activeResourceUris.length > 0 && selectedResourceUri) return undefined;\n\n return selectedNodeId;\n};\n\nconst canVirtualizeTreeNode = (node: TreeListNode) => node.isContainer !== true && (node.children ?? []).length === 0;\n\nexport const canVirtualizeTreeSections = (sections: TreeListSection[]) =>\n sections.every((section) => section.nodes.every(canVirtualizeTreeNode));\n\nconst findNode = (nodes: TreeNode[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>): TreeNode | null => {\n for (const node of nodes) {\n if (node.id === nodeId) return node;\n const child = findNode([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], nodeId, childrenByNodeId);\n if (child) return child;\n }\n\n return null;\n};\n\nexport const findNodeInSections = (\n sections: TreeViewSection[],\n nodeId: string,\n childrenByNodeId: Record<string, TreeNode[]>,\n) => {\n for (const section of sections) {\n const node = findNode(section.nodes, nodeId, childrenByNodeId);\n if (node) return node;\n }\n\n return null;\n};\n\nconst wrapTreeNodeIcon = (icon: ReactNode, iconTooltip: string | undefined) => {\n if (!iconTooltip) return icon;\n\n return (\n <Tooltip content={iconTooltip} openDelay={300}>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" justifyContent=\"center\">\n {icon}\n </Box>\n </Tooltip>\n );\n};\n\nconst resolveTreeNodeIcon = (node: TreeNode): ReactNode | undefined => {\n let icon: ReactNode | undefined;\n if (node.iconElement !== undefined) {\n icon = node.iconElement as ReactNode;\n } else if (node.icon) {\n icon = <WorkbenchIcon name={node.icon} />;\n }\n\n return icon === undefined ? undefined : wrapTreeNodeIcon(icon, node.iconTooltip);\n};\n\nconst resolveTreeNodeNavigationIntent = (node: TreeNode) => {\n if (node.target) return { id: \"target\", payload: node.target };\n if (node.resource) return { id: \"resource\", payload: node.resource };\n return undefined;\n};\n\nconst resolveTreeNodeResource = (node: TreeNode): ResourceRef | undefined => {\n if (node.resource) return node.resource;\n if (node.target?.kind === \"resource\") return node.target.resource;\n return undefined;\n};\n\nconst renderShortcutEndContent = (binding: string | string[] | undefined) => {\n if (!binding) return undefined;\n\n return (\n <Box\n opacity=\"0\"\n pointerEvents=\"none\"\n display=\"inline-flex\"\n alignItems=\"center\"\n transition=\"opacity 120ms ease\"\n _groupHover={{ opacity: \"1\" }}\n >\n <PaletteShortcut binding={binding} />\n </Box>\n );\n};\n\nconst resolveTreeNodeEndContent = (\n node: TreeNode,\n resource: ResourceRef | undefined,\n binding: string | string[] | undefined,\n) => {\n if (node.endContent !== undefined) return node.endContent as ReactNode;\n\n const shortcut = renderShortcutEndContent(binding);\n if (shortcut) return shortcut;\n\n const additions = resource?.metadata?.diffAdditions;\n const deletions = resource?.metadata?.diffDeletions;\n if (resource?.kind !== \"workspace\" || typeof additions !== \"number\" || typeof deletions !== \"number\") {\n return undefined;\n }\n\n return <DiffBubble additions={additions} deletions={deletions} variant=\"ghost\" size=\"small\" />;\n};\n\nconst toTreeListSectionEmptyNode = (section: TreeViewSection): TreeListNode | undefined => {\n if (!section.emptyState || section.nodes.length > 0) return undefined;\n return {\n id: `${section.id}:empty`,\n label: section.emptyState.title,\n description: section.emptyState.description,\n icon: section.emptyState.icon ? <WorkbenchIcon name={section.emptyState.icon} /> : undefined,\n disabled: true,\n rowVariant: \"empty-state\",\n };\n};\n\nconst toTreeListNode = (\n node: TreeNode,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const navigationIntent = resolveTreeNodeNavigationIntent(node);\n const resource = resolveTreeNodeResource(node);\n const commandContext = resource ? { resource } : undefined;\n const contextMenuItems = createTreeContextMenuItems({\n actions: node.contextMenuActions,\n menuPath: node.contextMenuPath ?? node.menuPath ?? (resource ? resourceContextMenuPath(resource.kind) : undefined),\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n });\n const menuItems = node.menuPath && contextMenuItems.length > 0 ? contextMenuItems : undefined;\n const shortcuts = new Map(\n context.workbench.keybindings.listActiveKeybindings().map((k) => [k.commandId, k.keybinding]),\n );\n const binding = node.commandId ? shortcuts.get(node.commandId) : undefined;\n\n const treeNode: TreeListNode = {\n id: node.id,\n label: node.label,\n description: node.description,\n icon: resolveTreeNodeIcon(node),\n iconColor: node.iconColor,\n disabled: node.disabled,\n rowVariant: node.rowVariant,\n canHide: node.canHide,\n canReorder: node.canReorder,\n hiddenByDefault: node.hiddenByDefault,\n actions: createTreeActionItems({\n actions: node.actions,\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n endContent: resolveTreeNodeEndContent(node, resource, binding),\n menuItems,\n contextMenuItems: !context.suppressContextMenus && contextMenuItems.length > 0 ? contextMenuItems : undefined,\n ...(node.menuPlacement ? { menuPlacement: node.menuPlacement } : {}),\n isContainer: node.collapsible,\n isNavigable: Boolean(navigationIntent),\n navigationIntent,\n children: [...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])].map((child) =>\n toTreeListNode(child, childrenByNodeId, context),\n ),\n } as TreeListNode;\n\n return treeNode;\n};\n\nexport const toTreeListSection = (\n section: TreeViewSection,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const emptyNode = toTreeListSectionEmptyNode(section);\n\n return {\n id: section.id,\n label: section.label,\n actions: createTreeActionItems({\n actions: section.actions,\n workbench: context.workbench,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n collapsible: section.collapsible,\n canHide: section.canHide,\n canReorder: section.canReorder,\n hiddenByDefault: section.hiddenByDefault,\n nodes: emptyNode ? [emptyNode] : section.nodes.map((node) => toTreeListNode(node, childrenByNodeId, context)),\n };\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState, type ResourceContextAction, TreeList, type TreeListSection } from \"@pstdio/ui\";\nimport type { RefObject } from \"react\";\nimport { canVirtualizeTreeSections } from \"./tree-list-adapter\";\n\nconst TREE_SKELETON_WIDTHS = [\"70%\", \"50%\", \"82%\", \"60%\", \"44%\", \"76%\"];\n\nconst TreeViewSkeleton = () => (\n <Stack gap=\"sm\" px=\"sm\" py=\"xs\" aria-hidden>\n {TREE_SKELETON_WIDTHS.map((width, index) => (\n <Skeleton key={`${width}-${index}`} height=\"4\" width={width} borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\ninterface TreeViewBodyProps {\n loading: boolean;\n moduleLoading?: boolean;\n sections: TreeListSection[];\n backgroundContextActions?: ResourceContextAction[];\n draggable?: boolean;\n customizationAvailable?: boolean;\n activeNodeId: string | string[] | undefined;\n expandedNodeIds: string[];\n expandedSectionIds: string[];\n scrollRef: RefObject<HTMLDivElement | null>;\n onToggleSection: (sectionId: string) => void;\n onToggleNode: (nodeId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n onNavigate: (event: Parameters<NonNullable<Parameters<typeof TreeList>[0][\"onNavigate\"]>>[0]) => void;\n}\n\nexport const TreeViewBody = (props: TreeViewBodyProps) => {\n const {\n loading,\n moduleLoading,\n sections,\n backgroundContextActions,\n draggable,\n customizationAvailable,\n activeNodeId,\n expandedNodeIds,\n expandedSectionIds,\n scrollRef,\n onToggleSection,\n onToggleNode,\n onReorderSections,\n onReorderNodes,\n onNavigate,\n } = props;\n\n if (loading) return null;\n if (moduleLoading) return <TreeViewSkeleton />;\n\n // Keep an empty-but-customizable tree right-clickable so a fully-hidden tree\n // can still be restored from the back-of-tree menu.\n if (sections.length === 0 && (backgroundContextActions?.length ?? 0) === 0 && !customizationAvailable) {\n return <EmptyState minH=\"12rem\" title=\"No tree items\" />;\n }\n\n return (\n <TreeList\n sections={sections}\n backgroundContextActions={backgroundContextActions}\n draggable={draggable}\n expandedNodeIds={expandedNodeIds}\n expandedSectionIds={expandedSectionIds}\n activeNodeId={activeNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n virtualize={canVirtualizeTreeSections(sections)}\n scrollRef={scrollRef}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onReorderSections={onReorderSections}\n onReorderNodes={onReorderNodes}\n onNavigate={onNavigate}\n />\n );\n};\n","import type { TreeContext, TreeNode, TreeRendererRegistry, TreeViewSection } from \"../../../core\";\n\nconst isUnregisteredTreeError = (trees: TreeRendererRegistry, treeId: string, error: unknown) =>\n error instanceof Error &&\n error.message === `Tree renderer not registered: ${treeId}` &&\n !trees.getTreeRenderer(treeId);\n\nexport interface LoadedTreeData {\n header: TreeNode[];\n body: TreeViewSection[];\n footer: TreeNode[];\n}\n\n// A tree reloads whenever the open resource changes (e.g. selecting a different\n// sidenav item) or a refresh fires. Only show the loading state before a tree has\n// produced any content; reloads keep the current content so the sidenav never\n// blanks between selections.\nexport const shouldShowTreeLoading = (loadedTreeId: string | null, treeViewId: string) => loadedTreeId !== treeViewId;\n\nexport const expandDefaultTreeSections = (trees: TreeRendererRegistry, treeId: string) => {\n const tree = trees.getTreeRenderer(treeId);\n if (!tree) return;\n for (const sectionId of tree.defaultExpandedSectionIds ?? []) {\n trees.setSectionExpanded(treeId, sectionId, true);\n }\n};\n\nexport const loadTreeData = async (\n trees: TreeRendererRegistry,\n treeId: string,\n ctx: TreeContext = {},\n): Promise<LoadedTreeData | null> => {\n if (!trees.getTreeRenderer(treeId)) return null;\n\n try {\n const [header, body, footer] = await Promise.all([\n trees.getHeader(treeId, ctx),\n trees.getBody(treeId, ctx),\n trees.getFooter(treeId, ctx),\n ]);\n return { header, body, footer };\n } catch (error) {\n if (isUnregisteredTreeError(trees, treeId, error)) return null;\n throw error;\n }\n};\n","import type { NavigationTarget } from \"../../../core\";\n\nexport const shouldSelectTreeNodeForNavigationTarget = (target: NavigationTarget) => {\n const items = target.kind === \"compound\" ? target.targets : [target];\n return items.some((item) => item.kind !== \"command\");\n};\n","import {\n applyTreeListOrder,\n buildTreeVisibilityMenuActions,\n filterVisibleNodes,\n filterVisibleSections,\n type ResourceContextAction,\n resolveVisibility,\n type TreeListActionMenuItem,\n type TreeListNode,\n type TreeListSection,\n useTreeListOrderStore,\n useTreeListVisibilityStore,\n type VisibilityOverride,\n} from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\n\ninterface TreeViewRegions {\n headerNodes: TreeListNode[];\n sections: TreeListSection[];\n footerNodes: TreeListNode[];\n}\n\ninterface TreeViewCustomization {\n // Header rows with hidden entries removed — what the header region renders.\n visibleHeaderNodes: TreeListNode[];\n // Sections with hidden categories removed — what the tree body renders.\n visibleSections: TreeListSection[];\n // Footer rows with hidden entries removed — what the footer region renders.\n visibleFooterNodes: TreeListNode[];\n // Back-of-tree right-click menu: header rows, body categories, and footer rows that opt in.\n backgroundContextActions: ResourceContextAction[];\n customizationRevision: string;\n onReorderHeaderNodes: (nextNodeIds: string[]) => void;\n onReorderSections: (nextSectionIds: string[]) => void;\n onReorderNodes: (sectionId: string, nextNodeIds: string[]) => void;\n onReorderFooterNodes: (nextNodeIds: string[]) => void;\n}\n\ninterface VisibilityToggleIcons {\n visibleIcon: ReactNode;\n hiddenIcon: ReactNode;\n resetIcon?: ReactNode;\n}\n\ninterface NodeVisibilityActions {\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n}\n\ninterface TreeViewCustomizationOptions {\n suppressNodeContextMenus?: boolean;\n}\n\nconst HEADER_SECTION_ID = \"__header__\";\nconst FOOTER_SECTION_ID = \"__footer__\";\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nconst isCustomizableNode = (node: TreeListNode) => node.canHide === true || node.hiddenByDefault === true;\n\nconst visibilityContextIcon = (effective: VisibilityOverride, icons: VisibilityToggleIcons) =>\n effective === \"shown\" ? icons.hiddenIcon : icons.visibleIcon;\n\nconst buildNodeVisibilityContextMenuItem = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n): TreeListActionMenuItem | undefined => {\n if (!isCustomizableNode(node)) return undefined;\n\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n const label = toStringLabel(node.label, node.id);\n const existingItems = node.contextMenuItems ?? [];\n\n return {\n id: `tree-visibility:${node.id}`,\n label: effective === \"shown\" ? `Hide ${label}` : `Show ${label}`,\n icon: visibilityContextIcon(effective, icons),\n ...(existingItems.length > 0 ? { separatorBefore: true } : {}),\n onAction: () => actions.onToggleNode(node.id, hiddenByDefault),\n };\n};\n\nexport const addRegionNodeVisibilityContextMenuItems = (\n nodes: TreeListNode[],\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n enabled = true,\n) => {\n if (!enabled) return nodes;\n let changed = false;\n const next = nodes.map((node) => {\n const item = buildNodeVisibilityContextMenuItem(node, nodeOverrides, actions, icons);\n if (!item) return node;\n\n changed = true;\n return { ...node, contextMenuItems: [...(node.contextMenuItems ?? []), item] };\n });\n\n return changed ? next : nodes;\n};\n\n// Wires the generic @pstdio/ui visibility primitives onto a single tree host. Visibility is\n// persisted per `storageKey`, so each tree view customizes independently. The menu is built from\n// the unfiltered regions so hidden entries stay listed (eye-off) and can be brought back —\n// covering header rows, body categories, and footer rows (never individual body items).\nexport const useTreeViewCustomization = (\n storageKey: string,\n regions: TreeViewRegions,\n icons: VisibilityToggleIcons,\n options: TreeViewCustomizationOptions = {},\n): TreeViewCustomization => {\n const sectionOverrides = useTreeListVisibilityStore(storageKey, (state) => state.sectionOverrides);\n const nodeOverrides = useTreeListVisibilityStore(storageKey, (state) => state.nodeOverrides);\n const toggleSection = useTreeListVisibilityStore(storageKey, (state) => state.toggleSection);\n const toggleNode = useTreeListVisibilityStore(storageKey, (state) => state.toggleNode);\n const resetVisibility = useTreeListVisibilityStore(storageKey, (state) => state.reset);\n const sectionOrder = useTreeListOrderStore(storageKey, (state) => state.sectionOrder);\n const nodeOrderBySection = useTreeListOrderStore(storageKey, (state) => state.nodeOrderBySection);\n const setSectionOrder = useTreeListOrderStore(storageKey, (state) => state.setSectionOrder);\n const setNodeOrder = useTreeListOrderStore(storageKey, (state) => state.setNodeOrder);\n const resetOrder = useTreeListOrderStore(storageKey, (state) => state.reset);\n const visibilityActions = {\n onToggleSection: toggleSection,\n onToggleNode: toggleNode,\n onResetAll: () => {\n resetVisibility();\n resetOrder();\n },\n };\n\n const orderedSections = applyTreeListOrder(regions.sections, sectionOrder, nodeOrderBySection);\n const orderedHeaderNodes =\n applyTreeListOrder(\n [{ id: HEADER_SECTION_ID, canReorder: false, nodes: regions.headerNodes }],\n [],\n nodeOrderBySection,\n )[0]?.nodes ?? [];\n const orderedFooterNodes =\n applyTreeListOrder(\n [{ id: FOOTER_SECTION_ID, canReorder: false, nodes: regions.footerNodes }],\n [],\n nodeOrderBySection,\n )[0]?.nodes ?? [];\n const includeNodeContextMenus = options.suppressNodeContextMenus !== true;\n\n const headerNodes = addRegionNodeVisibilityContextMenuItems(\n orderedHeaderNodes,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const footerNodes = addRegionNodeVisibilityContextMenuItems(\n orderedFooterNodes,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const visibleHeaderNodes = filterVisibleNodes(headerNodes, nodeOverrides);\n const visibleSections = filterVisibleSections(orderedSections, sectionOverrides, nodeOverrides);\n const visibleFooterNodes = filterVisibleNodes(footerNodes, nodeOverrides);\n const backgroundContextActions = buildTreeVisibilityMenuActions(\n { headerNodes: orderedHeaderNodes, sections: orderedSections, footerNodes: orderedFooterNodes },\n sectionOverrides,\n nodeOverrides,\n visibilityActions,\n icons,\n );\n\n const customizationRevision = JSON.stringify({\n header: orderedHeaderNodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n main: orderedSections.map((section) => [\n section.id,\n toStringLabel(section.label, section.id),\n section.nodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n ]),\n footer: orderedFooterNodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n sectionOverrides,\n nodeOverrides,\n sectionOrder,\n nodeOrderBySection,\n });\n\n return {\n visibleHeaderNodes,\n visibleSections,\n visibleFooterNodes,\n backgroundContextActions,\n customizationRevision,\n onReorderHeaderNodes: (nextNodeIds) => setNodeOrder(HEADER_SECTION_ID, nextNodeIds),\n onReorderSections: setSectionOrder,\n onReorderNodes: setNodeOrder,\n onReorderFooterNodes: (nextNodeIds) => setNodeOrder(FOOTER_SECTION_ID, nextNodeIds),\n };\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea, TreeList } from \"@pstdio/ui\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type {\n NavigationTarget,\n ResourceRef,\n TreeNode,\n TreeRendererState,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getAnchorResource } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { CommandParamsDialog } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../../theme/workbench-theme-background\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\nimport { findNodeInSections, resolveTreeListSelection, toTreeListSection } from \"./tree-list-adapter\";\nimport { TreeViewBody } from \"./tree-view-body\";\nimport { expandDefaultTreeSections, loadTreeData, shouldShowTreeLoading } from \"./tree-view-load\";\nimport { shouldSelectTreeNodeForNavigationTarget } from \"./tree-view-navigation\";\nimport { useTreeViewCustomization } from \"./use-tree-view-customization\";\n\ninterface WorkbenchTreeViewProps {\n workbench: WorkbenchCore;\n treeViewId: string;\n activeNodeId?: string | null;\n resource?: ResourceRef;\n viewId?: string;\n renderParamField?: CommandParamFieldRenderer;\n onOpenResourceError?: (error: unknown) => void;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\nconst EMPTY_TREE_STATE: TreeRendererState = { expandedNodeIds: [], expandedSectionIds: [] };\n\nconst HEADER_SECTION_ID = \"__header__\";\nconst FOOTER_SECTION_ID = \"__footer__\";\n\n// Header and footer rows are flat node lists; wrap them in a single unlabeled section so they\n// reuse the same TreeList adapter/rendering as the body (and mirror each other exactly).\nconst regionSection = (id: string, nodes: TreeNode[]): TreeViewSection => ({ id, nodes, canReorder: false });\n\ntype WorkbenchLayoutState = ReturnType<WorkbenchCore[\"layout\"][\"getLayout\"]>;\n\nconst resolveActivePlacement = (\n widgets: WorkbenchLayoutState[\"regions\"][\"overlay\"][\"widgets\"],\n activeWidgetId: string | undefined,\n) => widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nconst resolveTreeActiveResource = (layout: WorkbenchLayoutState) =>\n resolveActivePlacement(layout.regions.overlay.widgets, layout.regions.overlay.activeWidgetId)?.resource ??\n getAnchorResource(layout, \"primary\");\n\nconst useSidenavContextActions = (\n actions: ResourceContextAction[],\n revision: string,\n onChange: ((actions: ResourceContextAction[]) => void) | undefined,\n) => {\n const actionsRef = useRef(actions);\n actionsRef.current = actions;\n\n useEffect(() => {\n void revision;\n onChange?.(actionsRef.current);\n }, [revision, onChange]);\n\n useEffect(\n () => () => {\n onChange?.([]);\n },\n [onChange],\n );\n};\n\ninterface TreeParamsDialogProps {\n request: TreeActionParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n onClose: () => void;\n}\n\nconst TreeParamsDialog = (props: TreeParamsDialogProps) => {\n const { request, renderParamField, onClose } = props;\n return (\n <CommandParamsDialog\n request={request?.request ?? null}\n renderParamField={renderParamField}\n onClose={onClose}\n onRun={async ({ args }) => {\n await request?.run(args);\n }}\n />\n );\n};\n\ninterface TreeNavigationContext {\n workbench: WorkbenchCore;\n treeViewId: string;\n onOpenResourceError?: (error: unknown) => void;\n}\n\nconst navigateTreeNode = (\n context: TreeNavigationContext,\n nodeId: string,\n intent: { id?: string; payload?: unknown } | undefined,\n) => {\n if (intent?.id === \"target\") {\n const target = intent.payload as NavigationTarget;\n if (shouldSelectTreeNodeForNavigationTarget(target)) {\n context.workbench.renderers.setSelectedNode(context.treeViewId, nodeId);\n }\n void context.workbench.navigation.openTarget(target).catch(context.onOpenResourceError);\n return;\n }\n\n if (intent?.id !== \"resource\" || !intent.payload || typeof intent.payload !== \"object\") return;\n context.workbench.renderers.setSelectedNode(context.treeViewId, nodeId);\n void context.workbench.resources\n .openResource(intent.payload as ResourceRef, { replaceActive: true })\n .catch(context.onOpenResourceError);\n};\n\nconst useTreeData = (workbench: WorkbenchCore, treeViewId: string, resource?: ResourceRef, viewId?: string) => {\n const [header, setHeader] = useState<TreeNode[]>([]);\n const [body, setBody] = useState<TreeViewSection[]>([]);\n const [footer, setFooter] = useState<TreeNode[]>([]);\n const [childrenByNodeId, setChildrenByNodeId] = useState<Record<string, TreeNode[]>>({});\n const [loading, setLoading] = useState(true);\n const loadedTreeIdRef = useRef<string | null>(null);\n const loadRevisionRef = useRef(0);\n\n useEffect(() => {\n let cancelled = false;\n expandDefaultTreeSections(workbench.renderers, treeViewId);\n\n const loadTree = () => {\n const loadRevision = ++loadRevisionRef.current;\n if (shouldShowTreeLoading(loadedTreeIdRef.current, treeViewId)) setLoading(true);\n void loadTreeData(workbench.renderers, treeViewId, { resource, viewId }).then((data) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n loadedTreeIdRef.current = treeViewId;\n setHeader(data?.header ?? []);\n setBody(data?.body ?? []);\n setFooter(data?.footer ?? []);\n setChildrenByNodeId({});\n setLoading(false);\n });\n };\n\n loadTree();\n const disposable = workbench.renderers.onDidRefresh((event) => {\n if (event.treeId === treeViewId) loadTree();\n });\n return () => {\n cancelled = true;\n disposable.dispose();\n };\n }, [resource, viewId, workbench, treeViewId]);\n\n return { body, childrenByNodeId, footer, header, loading, setChildrenByNodeId };\n};\n\nexport const WorkbenchTreeView = (props: WorkbenchTreeViewProps) => {\n const {\n workbench,\n treeViewId,\n activeNodeId,\n resource,\n viewId,\n renderParamField,\n onOpenResourceError,\n onSidenavContextActionsChange,\n } = props;\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const treeRenderer = workbench.renderers.getTreeRenderer(treeViewId);\n const treeState =\n useWorkbenchStore(workbench.renderers.treeStore, (state) => state.statesByTreeId[treeViewId]) ?? EMPTY_TREE_STATE;\n const activeResource = useWorkbenchStore(workbench.layout.store, (state) => resolveTreeActiveResource(state.layout));\n const { body, childrenByNodeId, footer, header, loading, setChildrenByNodeId } = useTreeData(\n workbench,\n treeViewId,\n resource,\n viewId,\n );\n const [paramsRequest, setParamsRequest] = useState<TreeActionParamsRequest | null>(null);\n\n const adapterContext = {\n workbench,\n onCommandError: onOpenResourceError,\n onRequestParams: setParamsRequest,\n suppressContextMenus: Boolean(onSidenavContextActionsChange),\n };\n const rawSections = body.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawHeaderSection =\n header.length > 0\n ? toTreeListSection(regionSection(HEADER_SECTION_ID, header), childrenByNodeId, adapterContext)\n : undefined;\n const rawFooterSection =\n footer.length > 0\n ? toTreeListSection(regionSection(FOOTER_SECTION_ID, footer), childrenByNodeId, adapterContext)\n : undefined;\n const {\n visibleHeaderNodes,\n visibleSections,\n visibleFooterNodes,\n backgroundContextActions,\n customizationRevision,\n onReorderHeaderNodes,\n onReorderSections,\n onReorderNodes,\n onReorderFooterNodes,\n } = useTreeViewCustomization(\n treeViewId,\n {\n headerNodes: rawHeaderSection?.nodes ?? [],\n sections: rawSections,\n footerNodes: rawFooterSection?.nodes ?? [],\n },\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n { suppressNodeContextMenus: Boolean(onSidenavContextActionsChange) },\n );\n useSidenavContextActions(backgroundContextActions, customizationRevision, onSidenavContextActionsChange);\n if (!treeRenderer) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Tree renderer is no longer registered.\n </Text>\n );\n }\n\n const toggleNode = (nodeId: string) => {\n const node =\n findNodeInSections(body, nodeId, childrenByNodeId) ??\n findNodeInSections(\n [regionSection(HEADER_SECTION_ID, header), regionSection(FOOTER_SECTION_ID, footer)],\n nodeId,\n childrenByNodeId,\n );\n if (!node) return;\n\n const expanded = treeState.expandedNodeIds.includes(nodeId);\n\n workbench.renderers.setNodeExpanded(treeViewId, nodeId, !expanded);\n\n if (expanded || childrenByNodeId[nodeId]) return;\n if (node.children) return;\n\n void workbench.renderers.getChildren(treeViewId, node, { resource, viewId }).then((children) => {\n setChildrenByNodeId((current) => ({ ...current, [nodeId]: children }));\n });\n };\n\n const toggleSection = (sectionId: string) => {\n const expanded = treeState.expandedSectionIds.includes(sectionId);\n\n workbench.renderers.setSectionExpanded(treeViewId, sectionId, !expanded);\n };\n\n const navigationContext = { workbench, treeViewId, onOpenResourceError };\n\n const headerSections =\n rawHeaderSection && visibleHeaderNodes.length > 0 ? [{ ...rawHeaderSection, nodes: visibleHeaderNodes }] : [];\n const footerSections =\n rawFooterSection && visibleFooterNodes.length > 0 ? [{ ...rawFooterSection, nodes: visibleFooterNodes }] : [];\n const bodyActiveNodeId = resolveTreeListSelection({\n sections: body,\n childrenByNodeId,\n activeNodeId,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n const regionActiveNodeId = resolveTreeListSelection({\n sections: [regionSection(HEADER_SECTION_ID, header), regionSection(FOOTER_SECTION_ID, footer)],\n childrenByNodeId,\n activeNodeId,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n\n return (\n <Flex as=\"section\" direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" aria-label={treeRenderer.title}>\n {!loading && headerSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={headerSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={regionActiveNodeId}\n rowVariant=\"compact\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderNodes={(_sectionId, nextNodeIds) => onReorderHeaderNodes(nextNodeIds)}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n w=\"full\"\n viewportRef={scrollRef}\n viewportProps={{\n display: \"block\",\n style: { overflowX: \"hidden\" },\n }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n <TreeViewBody\n loading={loading}\n moduleLoading={treeState.loading}\n sections={visibleSections}\n backgroundContextActions={onSidenavContextActionsChange ? undefined : backgroundContextActions}\n draggable={Boolean(onSidenavContextActionsChange)}\n customizationAvailable={Boolean(onSidenavContextActionsChange)}\n activeNodeId={bodyActiveNodeId}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n scrollRef={scrollRef}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={onReorderSections}\n onReorderNodes={onReorderNodes}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Box>\n </ScrollArea>\n {!loading && footerSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={footerSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={regionActiveNodeId}\n rowVariant=\"compact\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderNodes={(_sectionId, nextNodeIds) => onReorderFooterNodes(nextNodeIds)}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n onClose={() => setParamsRequest(null)}\n />\n </Flex>\n );\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { SettingsRegistry } from \"../../core\";\n\nexport const useSettingsRevision = (settings: SettingsRegistry) =>\n useSyncExternalStore(\n (listener) => settings.store.subscribe(() => listener()),\n () => settings.store.getState().revision,\n () => settings.store.getState().revision,\n );\n","import { Box, Flex, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { EmptyState, ScrollArea } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport type { CollectionSettingsPanel, PreferenceScope, SettingsRegistry, WorkbenchPanelRenderInput } from \"../../core\";\nimport { WorkbenchPreferencesForm } from \"../renderers/settings/preferences-form\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\n\nexport interface SettingsSurfacePanelProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\n\nconst Centered = (props: { children: ReactNode }) => (\n <Flex h=\"full\" minH=\"0\" align=\"center\" justify=\"center\" p=\"lg\">\n {props.children}\n </Flex>\n);\n\nconst ScrollableSettingsContent = (props: { children: ReactNode }) => (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ h: \"full\", minH: \"full\" }}>\n <Box h=\"full\" minH=\"full\">\n {props.children}\n </Box>\n </ScrollArea>\n);\n\n// Resolves a collection item by id (items() may be async) and renders the\n// contributor-supplied editor. The framework never knows what the item is.\nconst CollectionItemView = (props: {\n panel: CollectionSettingsPanel;\n itemId: string;\n input: WorkbenchPanelRenderInput;\n}) => {\n const { panel, itemId, input } = props;\n const [state, setState] = useState<{ status: \"loading\" | \"ready\" | \"missing\"; item?: unknown }>({\n status: \"loading\",\n });\n\n useEffect(() => {\n let alive = true;\n setState({ status: \"loading\" });\n Promise.resolve(panel.items()).then((items) => {\n if (!alive) return;\n const item = items.find((candidate) => panel.itemId(candidate) === itemId);\n setState(item === undefined ? { status: \"missing\" } : { status: \"ready\", item });\n });\n return () => {\n alive = false;\n };\n }, [panel, itemId]);\n\n if (state.status === \"loading\")\n return (\n <Centered>\n <Spinner size=\"sm\" />\n </Centered>\n );\n if (state.status === \"missing\")\n return (\n <Centered>\n <EmptyState title=\"Item not found\" />\n </Centered>\n );\n return <ScrollableSettingsContent>{panel.renderItem(state.item, input) as ReactNode}</ScrollableSettingsContent>;\n};\n\n// The single main-region renderer for the settings surface. Dispatches the open\n// resource to a schema form, a custom view, or a collection item editor.\nexport const SettingsSurfacePanel = (props: SettingsSurfacePanelProps) => {\n const { input, settings, resolveScopeId } = props;\n const revision = useSettingsRevision(settings);\n const resource = input.instance.resource;\n const panelId = typeof resource?.metadata?.panelId === \"string\" ? resource.metadata.panelId : undefined;\n const itemId = typeof resource?.metadata?.itemId === \"string\" ? resource.metadata.itemId : undefined;\n const panel = panelId ? settings.getPanel(panelId) : undefined;\n\n if (!panel) {\n return (\n <Centered>\n <EmptyState title=\"Select a settings entry\" description=\"Pick an item from the settings sidenav.\" />\n </Centered>\n );\n }\n\n if (panel.kind === \"custom\")\n return <ScrollableSettingsContent>{panel.render(input) as ReactNode}</ScrollableSettingsContent>;\n\n if (panel.kind === \"collection\") {\n if (!itemId)\n return (\n <Centered>\n <EmptyState title={panel.title} />\n </Centered>\n );\n return (\n <CollectionItemView key={`${resource?.uri ?? itemId}:${revision}`} panel={panel} itemId={itemId} input={input} />\n );\n }\n\n return (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ p: \"lg\", display: \"flex\", flexDirection: \"column\", gap: \"md\" }}>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M/semibold\">{panel.title}</Text>\n {panel.description && (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" maxW=\"640px\">\n {panel.description}\n </Text>\n )}\n </Stack>\n <WorkbenchPreferencesForm\n preferences={input.workbench.preferences}\n names={panel.preferences}\n resolveScopeId={resolveScopeId}\n mode={panel.save ?? \"live\"}\n />\n </ScrollArea>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { PreferenceScope, SettingsRegistry, WorkbenchPanelRenderInput } from \"../../core\";\nimport { WorkbenchTreeView } from \"../renderers/tree/tree-view\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\n\nexport interface SettingsOverlayProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n navTreeId: string;\n title: string;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\n\n// The settings surface rendered inside the overlay dialog: a full-height\n// resizable nav on the left and the dispatching panel on the right. Nav clicks\n// route through openResource, which re-opens this singleton overlay with the new\n// resource — selection stays resource-driven and the dialog never closes\n// mid-navigation.\nexport const SettingsOverlay = (props: SettingsOverlayProps) => {\n const { input, settings, navTreeId, resolveScopeId } = props;\n useSettingsRevision(settings);\n const resource = input.instance.resource;\n\n const nav = (\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg=\"bg.subtle\">\n <WorkbenchTreeView\n workbench={input.workbench}\n treeViewId={navTreeId}\n resource={resource}\n activeNodeId={resource?.uri}\n />\n </Box>\n );\n\n const content = (\n <Box flex=\"1\" h=\"full\" minH=\"0\" minW=\"0\">\n <SettingsSurfacePanel input={input} settings={settings} resolveScopeId={resolveScopeId} />\n </Box>\n );\n\n return (\n <ResizableSplitLayout\n position=\"absolute\"\n inset=\"0\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"left\"\n resizablePanel={nav}\n contentPanel={content}\n defaultSizePx={260}\n minSizePx={220}\n maxSizePx={420}\n contentMinSizePx={360}\n collapsible={false}\n resizeLabel=\"Resize settings navigation\"\n showResizeSeparator\n />\n );\n};\n","import type { ResourceRef, SettingsScope } from \"../../core\";\n\nexport const SETTINGS_RESOURCE_KIND = \"workbench-settings\";\n\nexport const settingsPanelResource = (panel: { id: string; title: string; icon?: string }): ResourceRef => ({\n kind: SETTINGS_RESOURCE_KIND,\n uri: `${SETTINGS_RESOURCE_KIND}://panel/${panel.id}`,\n id: panel.id,\n label: panel.title,\n icon: panel.icon,\n metadata: { panelId: panel.id },\n});\n\nexport const settingsItemResource = (\n panelId: string,\n item: { id: string; label: string; icon?: string },\n): ResourceRef => ({\n kind: SETTINGS_RESOURCE_KIND,\n uri: `${SETTINGS_RESOURCE_KIND}://item/${panelId}/${item.id}`,\n id: `${panelId}::${item.id}`,\n label: item.label,\n icon: item.icon,\n metadata: { panelId, itemId: item.id },\n});\n\n// Project-scoped entries stay hidden until a project scope id is available; global\n// entries are always visible. Mirrors the old dashboards' projectless behavior.\nexport const isSettingsScopeVisible = (scope: SettingsScope | undefined, hasProjectScope: boolean) =>\n (scope ?? \"project\") !== \"project\" || hasProjectScope;\n","import type {\n CollectionSettingsPanel,\n RegisteredSettingsPanel,\n SettingsAction,\n SettingsRegistry,\n TreeAction,\n TreeNode,\n TreeViewSection,\n} from \"../../core\";\nimport { isSettingsScopeVisible, settingsItemResource, settingsPanelResource } from \"./settings-resources\";\n\nexport const FALLBACK_SECTION_ID = \"settings\";\n\nconst toTreeActions = (actions: SettingsAction[] | undefined): TreeAction[] | undefined =>\n actions?.map((action) => ({ id: action.id, label: action.label, icon: action.icon, run: action.run }));\n\nconst collectionItemNode = (panel: CollectionSettingsPanel, item: unknown): TreeNode => {\n const id = panel.itemId(item);\n const label = panel.itemLabel(item);\n const icon = panel.itemIcon?.(item);\n const resource = settingsItemResource(panel.id, { id, label, icon });\n return { id: resource.uri, label, icon, resource };\n};\n\nconst orderGroupKeys = (keys: string[], order: string[] | undefined) => {\n const indexOf = (key: string) => {\n const index = order?.indexOf(key) ?? -1;\n return index === -1 ? Number.POSITIVE_INFINITY : index;\n };\n return [...keys].sort((left, right) => indexOf(left) - indexOf(right));\n};\n\nconst collectionChildren = async (panel: CollectionSettingsPanel): Promise<TreeNode[]> => {\n const items = await Promise.resolve(panel.items()).catch(() => []);\n if (!panel.groupBy) return items.map((item) => collectionItemNode(panel, item));\n\n const groupBy = panel.groupBy;\n const byKey = new Map<string, unknown[]>();\n for (const item of items) {\n const key = groupBy.key(item);\n const list = byKey.get(key) ?? [];\n list.push(item);\n byKey.set(key, list);\n }\n\n return orderGroupKeys([...byKey.keys()], groupBy.order).map((key) => ({\n id: `${panel.id}:group:${key}`,\n label: groupBy.label(key),\n icon: groupBy.icon?.(key),\n collapsible: true,\n children: (byKey.get(key) ?? []).map((item) => collectionItemNode(panel, item)),\n }));\n};\n\nconst panelToNode = async (panel: RegisteredSettingsPanel): Promise<TreeNode> => {\n if (panel.kind === \"collection\") {\n return {\n id: `settings-collection:${panel.id}`,\n label: panel.title,\n icon: panel.icon,\n collapsible: true,\n actions: toTreeActions(panel.actions),\n children: await collectionChildren(panel),\n };\n }\n\n const resource = settingsPanelResource(panel);\n return { id: resource.uri, label: panel.title, icon: panel.icon, resource };\n};\n\nexport interface BuildSettingsTreeInput {\n settings: SettingsRegistry;\n hasProjectScope: boolean;\n}\n\n// Derives the settings navigation tree from the registry: one section per registered\n// section (headerless when titleless), schema/custom panels as leaves, and collection\n// panels expanded into per-item nodes (optionally grouped). Scope gates project entries.\nexport const buildSettingsTreeBody = async (input: BuildSettingsTreeInput): Promise<TreeViewSection[]> => {\n const { settings, hasProjectScope } = input;\n const sections = settings.listSections();\n const sectionsById = new Map(sections.map((section) => [section.id, section]));\n const panels = settings.listPanels().filter((panel) => isSettingsScopeVisible(panel.scope, hasProjectScope));\n\n const bySection = new Map<string, RegisteredSettingsPanel[]>();\n for (const panel of panels) {\n const sectionId = panel.section && sectionsById.has(panel.section) ? panel.section : FALLBACK_SECTION_ID;\n const list = bySection.get(sectionId) ?? [];\n list.push(panel);\n bySection.set(sectionId, list);\n }\n\n const renderOrder = sections.map((section) => section.id);\n if (bySection.has(FALLBACK_SECTION_ID) && !sectionsById.has(FALLBACK_SECTION_ID)) {\n renderOrder.push(FALLBACK_SECTION_ID);\n }\n\n const result: TreeViewSection[] = [];\n for (const sectionId of renderOrder) {\n const section = sectionsById.get(sectionId);\n // Sections are containers — only hide one that is *explicitly* project-scoped.\n // No-scope sections fall through and are dropped below if they have no content.\n if (section?.scope === \"project\" && !hasProjectScope) continue;\n\n const sectionPanels = bySection.get(sectionId) ?? [];\n const actions = toTreeActions(section?.actions);\n if (sectionPanels.length === 0 && !actions) continue;\n\n const nodes: TreeNode[] = [];\n for (const panel of sectionPanels) nodes.push(await panelToNode(panel));\n result.push({ id: sectionId, label: section?.title, actions, nodes });\n }\n\n return result;\n};\n","import { type PreferenceScope, standardResourceIcons, type WorkbenchModuleContribution } from \"../../core\";\nimport { SettingsOverlay } from \"./settings-overlay\";\nimport { isSettingsScopeVisible, SETTINGS_RESOURCE_KIND, settingsPanelResource } from \"./settings-resources\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { buildSettingsTreeBody, FALLBACK_SECTION_ID } from \"./settings-tree\";\n\nexport interface WorkbenchSettingsModuleOptions {\n /** Maps a preference scope (e.g. \"project\") to its scope id; project entries hide until this resolves. */\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n /** Heading shown at the top of the settings overlay. */\n title?: string;\n}\n\n// The single overlay widget that hosts the whole settings surface. Exported so a\n// host can open settings directly (e.g. ctx.layout.openPanel(...)) or assert it\n// in tests — but hosts normally just open a settings resource and let the presenter\n// below place it here.\nexport const WORKBENCH_SETTINGS_WIDGET_ID = \"workbench.settings\";\nexport const WORKBENCH_SETTINGS_NAV_WIDGET_ID = \"workbench.settings.nav\";\nexport const WORKBENCH_SETTINGS_PANEL_WIDGET_ID = \"workbench.settings.panel\";\n\n// Built-in command to open settings at the first visible panel. Always registered\n// by the surface, so it is available in the command palette without host wiring;\n// hosts only add a curated menu item pointing at this id if they want one.\nexport const WORKBENCH_SETTINGS_OPEN_COMMAND_ID = \"workbench.settings.open\";\n\nconst WIDGET_ID = WORKBENCH_SETTINGS_WIDGET_ID;\nconst RENDERER_ID = \"workbench.settings.renderer\";\nconst PANEL_RENDERER_ID = \"workbench.settings.panel.renderer\";\nconst NAV_TREE_ID = \"workbench.settings.navigation\";\n\n// The unified Settings surface: a full-window modal overlay containing a nav tree\n// (derived from `ctx.settings`) and a dispatching panel, plus a resource presenter\n// that pops the overlay. Contributors only call ctx.settings.registerSection/\n// registerPanel — this renders and wires everything; hosts add no mode or presenter.\nexport const createWorkbenchSettingsModule = (\n options: WorkbenchSettingsModuleOptions = {},\n): WorkbenchModuleContribution => {\n const title = options.title ?? \"Settings\";\n const hasProjectScope = () => options.resolveScopeId?.(\"project\") !== undefined;\n\n return {\n id: \"workbench.settings.surface\",\n activate(ctx) {\n ctx.renderers.registerTreeRenderer({\n id: NAV_TREE_ID,\n title,\n // Settings sections read as a single scannable list, so every section starts expanded.\n defaultExpandedSectionIds: [...ctx.settings.listSections().map((section) => section.id), FALLBACK_SECTION_ID],\n getBody: () => buildSettingsTreeBody({ settings: ctx.settings, hasProjectScope: hasProjectScope() }),\n getChildren: () => [],\n });\n\n ctx.layout.registerPanel({\n closable: false,\n id: WORKBENCH_SETTINGS_NAV_WIDGET_ID,\n title: `${title} navigation`,\n region: \"sidenav\",\n singleton: true,\n rendererId: NAV_TREE_ID,\n });\n\n ctx.layout.registerPanel({\n closable: false,\n id: WORKBENCH_SETTINGS_PANEL_WIDGET_ID,\n title,\n region: \"main\",\n singleton: true,\n rendererId: PANEL_RENDERER_ID,\n });\n ctx.renderers.registerRenderer({\n id: PANEL_RENDERER_ID,\n render: (input) => (\n <SettingsSurfacePanel input={input} settings={ctx.settings} resolveScopeId={options.resolveScopeId} />\n ),\n });\n\n ctx.layout.registerPanel({\n id: WIDGET_ID,\n title,\n region: \"overlay\",\n singleton: true,\n closable: true,\n rendererId: RENDERER_ID,\n config: { size: \"xl\", scrollBehavior: \"inside\", contentHeight: \"80vh\" },\n });\n ctx.renderers.registerRenderer({\n id: RENDERER_ID,\n render: (input) => (\n <SettingsOverlay\n input={input}\n settings={ctx.settings}\n navTreeId={NAV_TREE_ID}\n title={title}\n resolveScopeId={options.resolveScopeId}\n />\n ),\n });\n\n ctx.resources.registerKind({\n kind: SETTINGS_RESOURCE_KIND,\n label: \"Settings\",\n icon: standardResourceIcons.settings,\n });\n ctx.resources.registerPresenter({\n id: \"workbench.settings.presenter\",\n canOpen: (resource) => resource.kind === SETTINGS_RESOURCE_KIND,\n open: (resource) => ctx.layout.openPanel(WIDGET_ID, { resource, title: resource.label }),\n });\n\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n label: \"Open settings\",\n category: \"Settings\",\n icon: standardResourceIcons.settings,\n },\n {\n execute: () => {\n const panel = ctx.settings\n .listPanels()\n .find((entry) => isSettingsScopeVisible(entry.scope, hasProjectScope()));\n if (!panel) return undefined;\n return ctx.resources.openResource(settingsPanelResource(panel), { replaceActive: true });\n },\n },\n );\n\n // Keep the tree in sync as contributions register/unregister.\n return { dispose: ctx.settings.store.subscribe(() => ctx.renderers.refresh(NAV_TREE_ID)) };\n },\n };\n};\n","import type { WorkbenchCore, WorkbenchPanelMenuRegion, WorkbenchRegion } from \"../../core\";\n\n// Panel regions the workbench chrome can collapse and reveal.\nexport type WorkbenchPanelRegionId = \"sidenav\" | \"secondary\" | WorkbenchPanelMenuRegion;\n\nexport const resolvePanelCollapsible = (workbench: WorkbenchCore, ...regions: WorkbenchRegion[]) =>\n regions.every((region) => workbench.layout.getRegionCollapsible(region));\n\n// Opening or closing a panel is two writes kept in lockstep: the panels\n// controller owns the open flag, the layout model owns region visibility.\nexport const setWorkbenchPanelOpen = (workbench: WorkbenchCore, region: WorkbenchPanelRegionId, open: boolean) => {\n workbench.panels.setOpen(region, open);\n workbench.layout.setRegionVisible(region, open);\n};\n","interface CanAttachWorkbenchPanelMenuInput {\n panelWidth: number;\n targetMenuMinSize: number;\n attachedMenuMinSizes: readonly number[];\n}\n\nexport const PANEL_CONTENT_MIN_SIZE_PX = 120;\nexport const PANEL_MENU_RESIZE_HANDLE_SIZE_PX = 4;\nexport const PANEL_MENU_COLLAPSE_THRESHOLD_PX = 480;\n\nexport const shouldCollapseWorkbenchPanelMenus = (panelWidth: number) =>\n panelWidth > 0 && panelWidth <= PANEL_MENU_COLLAPSE_THRESHOLD_PX;\n\nexport const canAttachWorkbenchPanelMenu = (input: CanAttachWorkbenchPanelMenuInput) => {\n const menuMinSizes = [...input.attachedMenuMinSizes, input.targetMenuMinSize];\n const requiredWidth =\n PANEL_CONTENT_MIN_SIZE_PX +\n menuMinSizes.reduce((total, size) => total + size, 0) +\n menuMinSizes.length * PANEL_MENU_RESIZE_HANDLE_SIZE_PX;\n\n return input.panelWidth >= requiredWidth;\n};\n","import { Box, HStack, IconButton, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { AttachedMenu, Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout, Tooltip } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n matchesWorkbenchLocationEligibility,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelMenuRegion,\n type WorkbenchPanelMenuSide,\n type WorkbenchPanelRegion,\n type WorkbenchRegionSize,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { resolvePanelCollapsible } from \"../workbench/workbench-panel-state\";\nimport {\n canAttachWorkbenchPanelMenu,\n PANEL_CONTENT_MIN_SIZE_PX,\n PANEL_MENU_RESIZE_HANDLE_SIZE_PX,\n shouldCollapseWorkbenchPanelMenus,\n} from \"./panel-menu-sizing\";\n\nconst PANEL_MENU_SIZE = { defaultPx: 280, minPx: 144, maxPx: 320 };\n\nconst panelLabels: Record<WorkbenchPanelRegion, string> = {\n main: \"Main\",\n secondary: \"Secondary\",\n side: \"Side\",\n};\n\nconst resolveRegionSize = (regionSize: WorkbenchRegionSize | undefined) => ({\n defaultPx: regionSize?.defaultPx ?? PANEL_MENU_SIZE.defaultPx,\n minPx: regionSize?.minPx ?? PANEL_MENU_SIZE.minPx,\n maxPx: regionSize ? regionSize.maxPx : PANEL_MENU_SIZE.maxPx,\n});\n\nexport const getWorkbenchPanelMenuLabel = (panel: WorkbenchPanelRegion, side: WorkbenchPanelMenuSide) =>\n `${panelLabels[panel]} ${side} menu`;\n\ninterface WorkbenchPanelMenuView {\n region: WorkbenchPanelMenuRegion;\n side: WorkbenchPanelMenuSide;\n label: string;\n title: string;\n icon: string;\n has: boolean;\n collapsed: boolean;\n responsiveCollapsed: boolean;\n collapsible: boolean;\n size: ReturnType<typeof resolveRegionSize>;\n onOpen: () => void;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nconst useWorkbenchPanelMenu = (\n workbench: WorkbenchCore,\n panel: WorkbenchPanelRegion,\n side: WorkbenchPanelMenuSide,\n responsiveCollapsed = false,\n): WorkbenchPanelMenuView => {\n const region = workbenchPanelMenuRegions[panel][side];\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const currentRegionState = layout.regions[region];\n const activeSubPanel = getActiveWorkbenchSubPanel(layout, panel, locationResource, {\n ignoreOwnerResourceUri: panel === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (panel === \"side\"\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : matchesWorkbenchLocationEligibility(contribution, locationResource, modeId, placement)) &&\n matchesWorkbenchPanelMenuOwner(contribution, {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n })\n : false;\n }),\n };\n const activePlacement =\n regionState.widgets.find((placement) => placement.widgetId === regionState.activeWidgetId) ??\n regionState.widgets[0];\n const widget = activePlacement ? registeredWidgets[activePlacement.contributionId] : undefined;\n const collapsible = useWorkbenchStore(workbench.layout.store, () => resolvePanelCollapsible(workbench, region));\n const panelStateKey = activePlacement ? `panel-menu:${activePlacement.widgetId}` : region;\n const open = useWorkbenchStore(workbench.panels.store, (state) => state.openByRegionId[panelStateKey] ?? true);\n\n return {\n region,\n side,\n label: getWorkbenchPanelMenuLabel(panel, side),\n title: widget?.title ?? getWorkbenchPanelMenuLabel(panel, side),\n icon: widget?.icon ?? (side === \"left\" ? \"PanelLeft\" : \"PanelRight\"),\n has: regionState.widgets.length > 0 || Boolean(workbench.layout.getPlaceholder(region)),\n collapsed: (!open || responsiveCollapsed) && collapsible,\n responsiveCollapsed,\n collapsible,\n size: resolveRegionSize(workbench.layout.getRegionSize(region)),\n onOpen: () => workbench.panels.setOpen(panelStateKey, true),\n onCollapsedChange: (collapsed) => {\n if (!collapsed || collapsible) workbench.panels.setOpen(panelStateKey, !collapsed);\n },\n };\n};\n\nconst WorkbenchPanelMenu = (props: { workbench: WorkbenchCore; view: WorkbenchPanelMenuView }) => {\n const { view, workbench } = props;\n const panel = view.region.split(\"-\")[0] as WorkbenchPanelRegion;\n const background = panel === \"side\" ? workbenchBackgrounds.widget : workbenchBackgrounds.panel;\n\n return (\n <AttachedMenu\n data-workbench-panel-menu={`${panel}-${view.side}`}\n data-workbench-region={view.region}\n bg={background}\n >\n <WorkbenchRegion workbench={workbench} region={view.region} title={view.label} transparent />\n </AttachedMenu>\n );\n};\n\nconst addPanelMenu = (input: { content: ReactNode; view: WorkbenchPanelMenuView; workbench: WorkbenchCore }) => {\n const { content, view, workbench } = input;\n if (!view.has) return content;\n\n return (\n <ResizableSplitLayout\n minH=\"0\"\n minW=\"0\"\n resizableSide={view.side}\n resizablePanel={<WorkbenchPanelMenu workbench={workbench} view={view} />}\n contentPanel={content}\n collapsed={view.collapsed}\n collapsible={view.collapsible}\n defaultSizePx={view.size.defaultPx}\n minSizePx={view.size.minPx}\n maxSizePx={view.size.maxPx}\n contentMinSizePx={PANEL_CONTENT_MIN_SIZE_PX}\n resizeHandleSizePx={PANEL_MENU_RESIZE_HANDLE_SIZE_PX}\n resizeLabel={`Resize ${view.label}`}\n showResizeSeparator\n onSizeChange={(width) => workbench.layout.setRegionSize(view.region, width)}\n onCollapsedChange={view.onCollapsedChange}\n />\n );\n};\n\nexport const WorkbenchPanelMenuLayout = (props: {\n workbench: WorkbenchCore;\n panel: WorkbenchPanelRegion;\n children: ReactNode;\n}) => {\n const { children, panel, workbench } = props;\n const panelWidth = useWorkbenchPanelWidth(panel);\n const responsiveCollapsed = shouldCollapseWorkbenchPanelMenus(panelWidth);\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\", responsiveCollapsed);\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\", responsiveCollapsed);\n const withRight = addPanelMenu({ content: children, view: right, workbench });\n return addPanelMenu({ content: withRight, view: left, workbench });\n};\n\nconst useWorkbenchPanelWidth = (panel: WorkbenchPanelRegion) => {\n const [width, setWidth] = useState(0);\n\n useEffect(() => {\n const element = document.querySelector<HTMLElement>(`[data-workbench-panel=\"${panel}\"]`);\n if (!element) return;\n\n const measure = () => setWidth(element.clientWidth);\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [panel]);\n\n return width;\n};\n\ninterface WorkbenchPanelMenuOpenerProps {\n view: WorkbenchPanelMenuView;\n workbench: WorkbenchCore;\n canAttach: boolean;\n}\n\nconst WorkbenchPanelMenuOpener = (props: WorkbenchPanelMenuOpenerProps) => {\n const { canAttach, view, workbench } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n return (\n <Menu.Root\n positioning={{ placement: \"bottom-start\", offset: { mainAxis: 0 }, getAnchorElement: () => triggerRef.current }}\n onExitComplete={() => triggerRef.current?.focus()}\n >\n <Tooltip content={view.title}>\n <Menu.Trigger asChild>\n <IconButton\n ref={triggerRef}\n variant=\"ghost\"\n size={PANEL_HEADER_CONTROL_SIZE}\n aria-label={`Open ${view.label}`}\n flexShrink={0}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeftOpen\" : \"PanelRightOpen\"} size={14} />\n </IconButton>\n </Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n aria-label={`${view.label} controls`}\n data-workbench-panel-menu-controls={view.region}\n boxShadow=\"none\"\n display=\"flex\"\n flexDirection=\"column\"\n h=\"64\"\n maxW=\"64\"\n minW=\"64\"\n overflow=\"hidden\"\n p=\"0\"\n w=\"64\"\n >\n <Header variant=\"narrow\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" flexShrink={0} gap=\"xs\">\n <WorkbenchIcon name={view.icon} size={14} />\n <Text flex=\"1\" minW=\"0\" textStyle=\"label/S/medium\" truncate>\n {view.title}\n </Text>\n <Tooltip content={canAttach ? `Attach ${view.label}` : \"Panel is too narrow to attach this menu\"}>\n <Box as=\"span\" display=\"inline-flex\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label={`Attach ${view.label}`}\n disabled={!canAttach}\n onClick={view.onOpen}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeft\" : \"PanelRight\"} size={14} />\n </IconButton>\n </Box>\n </Tooltip>\n </Header>\n <Box flex=\"1\" minH=\"0\" minW=\"0\">\n <WorkbenchRegion workbench={workbench} region={view.region} title={view.label} transparent />\n </Box>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\nexport const WorkbenchPanelMenuOpeners = (props: { workbench: WorkbenchCore; panel: WorkbenchPanelRegion }) => {\n const { panel, workbench } = props;\n const panelWidth = useWorkbenchPanelWidth(panel);\n const responsiveCollapsed = shouldCollapseWorkbenchPanelMenus(panelWidth);\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\", responsiveCollapsed);\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\", responsiveCollapsed);\n const views = [left, right];\n const closedMenus = [left, right].filter((view) => view.has && view.collapsed);\n\n if (closedMenus.length === 0) return null;\n\n return (\n <HStack flexShrink={0} gap=\"2xs\" minW=\"0\">\n {closedMenus.map((view) => {\n const attachedMenuMinSizes = views\n .filter((candidate) => candidate.has && !candidate.collapsed)\n .map((candidate) => candidate.size.minPx);\n const canAttach =\n !view.responsiveCollapsed &&\n canAttachWorkbenchPanelMenu({\n panelWidth,\n targetMenuMinSize: view.size.minPx,\n attachedMenuMinSizes,\n });\n\n return <WorkbenchPanelMenuOpener key={view.region} view={view} workbench={workbench} canAttach={canAttach} />;\n })}\n </HStack>\n );\n};\n","import { Box, Flex, IconButton, Text } from \"@chakra-ui/react\";\nimport { AttachedPanel, BubbleButton, BubblePanel, Header, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { MessageCircle, Minimize2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\n\ninterface WorkbenchSidePanelProps {\n workbench: WorkbenchCore;\n contentSlotRef: (node: HTMLDivElement | null) => void;\n bottomOffset?: string;\n header?: ReactNode;\n}\n\nconst floatingPanelBottom = (bottomOffset: string | undefined) =>\n bottomOffset ? `calc(${bottomOffset} + 0.75rem)` : \"3\";\n\nconst launcherBottom = (bottomOffset: string | undefined) => (bottomOffset ? `calc(${bottomOffset} + 1.5rem)` : \"6\");\n\nconst WorkbenchSidePanelTitle = () => (\n <Box flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n Side Panel\n </Text>\n </Box>\n);\n\ninterface WorkbenchSidePanelHeaderProps {\n header?: ReactNode;\n}\n\nconst WorkbenchSidePanelHeader = (props: WorkbenchSidePanelHeaderProps) => {\n const { header } = props;\n\n return header ?? <WorkbenchSidePanelTitle />;\n};\n\nexport const WorkbenchAttachedSidePanel = (props: WorkbenchSidePanelProps) => {\n const { workbench, contentSlotRef, header } = props;\n\n return (\n <WorkbenchFocusRegion workbench={workbench} region=\"side\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <AttachedPanel\n data-testid=\"workbench-side-panel-attached\"\n data-workbench-panel=\"side\"\n data-workbench-region=\"side\"\n width=\"full\"\n minWidth=\"0\"\n bg={workbenchBackgrounds.widget}\n header={\n <Header data-workbench-panel-header=\"side\" variant=\"main\" flexShrink={0} gap=\"sm\">\n <WorkbenchSidePanelHeader header={header} />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"side\" />\n <Tooltip content=\"Float Side Panel\">\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label=\"Float Side Panel\"\n onClick={() => workbench.sidePanel.setMode(\"floating\")}\n >\n <Minimize2 size={16} />\n </IconButton>\n </Tooltip>\n </Header>\n }\n >\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"side\">\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </WorkbenchPanelMenuLayout>\n </AttachedPanel>\n </WorkbenchFocusRegion>\n );\n};\n\nexport const WorkbenchFloatingSidePanel = (props: WorkbenchSidePanelProps) => {\n const { workbench, contentSlotRef, bottomOffset, header } = props;\n const mode = workbench.sidePanel.getMode();\n\n if (mode === \"attached\") return null;\n\n if (mode === \"closed\") {\n return (\n <BubbleButton\n aria-label=\"Open Side Panel\"\n containerProps={{ bottom: launcherBottom(bottomOffset) }}\n tooltip=\"Open Side Panel\"\n onClick={() => workbench.sidePanel.setMode(\"floating\")}\n >\n <MessageCircle size={20} strokeWidth={2} />\n </BubbleButton>\n );\n }\n\n return (\n <BubblePanel\n isOpen\n aria-label=\"Side Panel\"\n testId=\"workbench-side-panel-floating\"\n closeLabel=\"Close Side Panel\"\n containerProps={{ bottom: floatingPanelBottom(bottomOffset), bg: workbenchBackgrounds.widget }}\n popOutLabel=\"Reattach Side Panel\"\n onClose={() => workbench.sidePanel.setMode(\"closed\")}\n onPopOut={() => workbench.sidePanel.setMode(\"attached\")}\n menu={<WorkbenchSidePanelHeader header={header} />}\n >\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </BubblePanel>\n );\n};\n","import { Box, Center, Text } from \"@chakra-ui/react\";\nimport { useThemePreference } from \"@pstdio/ui\";\nimport { Terminal, type TerminalBridge } from \"@pstdio/ui/terminal\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ResourceRef, WorkbenchCore, WorkbenchPanelInstance, WorkbenchTerminalController } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface ControllerTerminalBridgeOptions {\n getResource?: () => ResourceRef | undefined;\n getTitle?: () => string | undefined;\n}\n\nconst workspacePathFromResource = (resource: ResourceRef | undefined) => {\n const workspacePath = resource?.metadata?.workspacePath;\n return typeof workspacePath === \"string\" && workspacePath.length > 0 ? workspacePath : undefined;\n};\n\nconst withTerminalRequestDefaults = (\n request: Parameters<TerminalBridge[\"openSession\"]>[0],\n resource: ResourceRef | undefined,\n) => {\n const cwd = workspacePathFromResource(resource);\n return cwd && !request.cwd ? { ...request, cwd } : request;\n};\n\n// Adapts the core terminal controller to the renderer-side `TerminalBridge`\n// contract. Sessions opened by the panel land in the same controller registry\n// the `terminal.session` webview capability uses, so host UI and extension\n// webviews always see one session registry.\nexport const createControllerTerminalBridge = (\n terminal: WorkbenchTerminalController,\n options: ControllerTerminalBridgeOptions = {},\n): TerminalBridge => ({\n async openSession(request) {\n const { sessionId } = await terminal.open({\n request: withTerminalRequestDefaults(request, options.getResource?.()),\n title: options.getTitle?.(),\n });\n return {\n id: sessionId,\n write: (data) => terminal.write({ sessionId, data }),\n resize: (cols, rows) => terminal.resize({ sessionId, cols, rows }),\n kill: (signal) => terminal.kill({ sessionId, signal }),\n onData: (handler) => terminal.subscribe(sessionId, { onData: handler }),\n onExit: (handler) => terminal.subscribe(sessionId, { onExit: handler }),\n onError: (handler) => terminal.subscribe(sessionId, { onError: handler }),\n };\n },\n});\n\ninterface WorkbenchTerminalPanelProps {\n placement: WorkbenchPanelInstance;\n workbench: WorkbenchCore;\n}\n\n/**\n * Body of the host-owned terminal panel. Chrome (tab, title, close action,\n * resize) comes from the workbench `secondary` region; this component only mounts\n * the terminal bound to the workbench terminal controller. Collapsing the panel\n * keeps the terminal mounted. Closing its tab unmounts the terminal and kills\n * its session (close = kill).\n */\nexport const WorkbenchTerminalPanel = (props: WorkbenchTerminalPanelProps) => {\n const { placement, workbench } = props;\n const { themePreference } = useThemePreference();\n const placementRef = useRef(placement);\n placementRef.current = placement;\n const [bridge] = useState(() =>\n createControllerTerminalBridge(workbench.terminal, {\n getResource: () => placementRef.current.resource,\n getTitle: () => placementRef.current.title,\n }),\n );\n const [sessionId, setSessionId] = useState<string>();\n // The controller tracks the session's foreground process name; mirror it onto\n // the tab so terminals read like VSCode (e.g. `zsh`, `opencode`).\n const processTitle = useWorkbenchStore(workbench.terminal.store, (state) =>\n sessionId ? state.sessionsById[sessionId]?.title : undefined,\n );\n const active = useWorkbenchStore(workbench.layout.store, (state) => {\n const region = state.layout.regions.secondary;\n return (region.activeWidgetId ?? region.widgets[0]?.widgetId) === placement.instanceId;\n });\n\n useEffect(() => {\n if (!sessionId || !processTitle) return;\n workbench.layout.updatePanel(placement.instanceId, { title: processTitle });\n }, [sessionId, processTitle, placement.instanceId, workbench.layout]);\n\n if (!workbench.terminal.isAvailable()) {\n return (\n <Center h=\"full\" px=\"md\">\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n Terminal sessions are not available in this workbench host.\n </Text>\n </Center>\n );\n }\n\n return (\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Terminal\n bridge={bridge}\n theme={/dark/i.test(themePreference) ? \"dark\" : \"light\"}\n autoFocus={active}\n onSessionOpen={setSessionId}\n />\n </Box>\n );\n};\n","import type { WorkbenchCoreContributionContext, WorkbenchModuleContribution } from \"../../core\";\nimport { WorkbenchTerminalPanel } from \"./workbench-terminal-panel\";\n\n// The host-owned terminal panel in the workbench `secondary` (bottom) region.\n// Exported so hosts can open or assert it directly.\nexport const WORKBENCH_TERMINAL_WIDGET_ID = \"workbench.terminal\";\n\n// Built-in command to open (or focus) the terminal panel. Registered by the\n// surface module so it is available in the command palette without host wiring.\nexport const WORKBENCH_TERMINAL_OPEN_COMMAND_ID = \"workbench.terminal.open\";\n\nconst RENDERER_ID = \"workbench.terminal.renderer\";\nconst LAUNCHER_RENDERER_ID = \"workbench.terminal.launcher.renderer\";\nconst TERMINAL_PANEL_SIZE = { defaultPx: 240, minPx: 128 };\ntype OpenWorkbenchTerminalInput = NonNullable<Parameters<WorkbenchCoreContributionContext[\"layout\"][\"openWidget\"]>[1]>;\ntype OpenWorkbenchTerminalOptions = OpenWorkbenchTerminalInput & {\n reveal?: boolean;\n};\ntype TerminalResource = OpenWorkbenchTerminalOptions[\"resource\"];\n\nexport const WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID = \"workbench.terminal.launcher\";\n\nconst ensureTerminalLauncher = (ctx: WorkbenchCoreContributionContext) => {\n const existing = ctx.layout\n .getLayout()\n .regions.secondary.widgets.find((placement) => placement.contributionId === WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID);\n if (existing) return existing;\n\n return ctx.layout.openPanel(WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID, {\n hiddenByDefault: true,\n pinned: true,\n title: \"Terminal\",\n });\n};\n\nconst terminalTitlePattern = /^Terminal (\\d+)$/;\nconst nextTerminalIndexes = new WeakMap<WorkbenchCoreContributionContext[\"layout\"][\"store\"], number>();\n\nconst getInitialTerminalIndex = (ctx: WorkbenchCoreContributionContext) => {\n const terminalPlacements = ctx.layout\n .getLayout()\n .regions.secondary.widgets.filter((placement) => placement.contributionId === WORKBENCH_TERMINAL_WIDGET_ID);\n const titleIndexes = terminalPlacements\n .map((placement) => terminalTitlePattern.exec(placement.title ?? \"\")?.[1])\n .filter((index): index is string => index !== undefined)\n .map((index) => Number.parseInt(index, 10));\n return Math.max(terminalPlacements.length, ...titleIndexes) + 1;\n};\n\nconst getNextTerminalTitle = (ctx: WorkbenchCoreContributionContext) => {\n const nextIndex = Math.max(nextTerminalIndexes.get(ctx.layout.store) ?? 1, getInitialTerminalIndex(ctx));\n nextTerminalIndexes.set(ctx.layout.store, nextIndex + 1);\n return `Terminal ${nextIndex}`;\n};\n\nconst hasWorkspacePath = (resource: TerminalResource) =>\n typeof resource?.metadata?.workspacePath === \"string\" && resource.metadata.workspacePath.length > 0;\n\nconst getTerminalResource = (ctx: WorkbenchCoreContributionContext, resource: TerminalResource) => {\n const activeResource = ctx.getActiveResource();\n const primaryResource = ctx.getPrimaryResource();\n return (\n (hasWorkspacePath(resource) ? resource : undefined) ??\n (hasWorkspacePath(activeResource) ? activeResource : undefined) ??\n (hasWorkspacePath(primaryResource) ? primaryResource : undefined) ??\n resource ??\n primaryResource\n );\n};\n\n// Opens a new terminal placement, revealing the bottom region if it is collapsed.\nexport const openWorkbenchTerminal = (\n ctx: WorkbenchCoreContributionContext,\n input: OpenWorkbenchTerminalOptions = {},\n) => {\n const { reveal = true, ...openInput } = input;\n const resource = getTerminalResource(ctx, openInput.resource);\n ensureTerminalLauncher(ctx);\n const placement = ctx.layout.openPanel(WORKBENCH_TERMINAL_WIDGET_ID, {\n ...openInput,\n resource,\n title: openInput.title ?? getNextTerminalTitle(ctx),\n });\n if (reveal) {\n ctx.layout.setRegionVisible(\"secondary\", true);\n ctx.panels.setOpen(\"secondary\", true);\n }\n return placement;\n};\n\n/**\n * Host-owned terminal surface: tabbed placements in the `secondary` region whose\n * chrome, focus, lifecycle, and styling belong to the workbench. Sessions are\n * owned by `workbench.terminal` (the same registry the `terminal.session`\n * webview capability uses); the host injects a session opener via\n * `workbench.terminal.setSessionOpener(...)`. Closing a tab kills its session;\n * disposing the controller kills every live session.\n */\nexport const createWorkbenchTerminalModule = (): WorkbenchModuleContribution => ({\n id: \"workbench.terminal.surface\",\n activate(ctx) {\n const disposables = [\n ctx.layout.registerPanel({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n title: \"Terminal\",\n region: \"secondary\",\n singleton: false,\n reuse: \"none\",\n closable: true,\n mountStrategy: \"keep-mounted\",\n rendererId: RENDERER_ID,\n openCommandId: WORKBENCH_TERMINAL_OPEN_COMMAND_ID,\n eligibleLocations: {},\n regionSize: TERMINAL_PANEL_SIZE,\n }),\n ctx.renderers.registerRenderer({\n id: RENDERER_ID,\n render: (input) => <WorkbenchTerminalPanel placement={input.instance} workbench={input.workbench} />,\n }),\n ctx.renderers.registerRenderer({ id: LAUNCHER_RENDERER_ID, render: () => null }),\n ctx.layout.registerPanel({\n id: WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID,\n title: \"Terminal\",\n region: \"secondary\",\n singleton: true,\n closable: false,\n hiddenByDefault: true,\n rendererId: LAUNCHER_RENDERER_ID,\n regionSize: TERMINAL_PANEL_SIZE,\n }),\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID,\n label: \"Open terminal\",\n category: \"Terminal\",\n icon: \"SquareTerminal\",\n },\n { execute: (_args, context) => openWorkbenchTerminal(ctx, { resource: context?.resource }) },\n ),\n ];\n\n ensureTerminalLauncher(ctx);\n return disposables;\n },\n});\n","import { defaultThemePreferences } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\n// The theme set a workbench offers: the built-in workbench themes plus whatever\n// is registered in `workbench.themes` (e.g. extension-contributed themes). The\n// list shrinks when a contribution is disposed, so the theme picker only ever\n// lists themes whose owner is still active.\nexport const useWorkbenchThemePreferences = (workbench: WorkbenchCore) => {\n const contributed = useWorkbenchStore(workbench.themes.store, (state) => state.themes);\n return [...defaultThemePreferences, ...contributed];\n};\n","import {\n ChakraProvider,\n type FileIconThemePreferenceOption,\n FileIconThemePreferenceProvider,\n psTheme,\n type ThemePreference,\n type ThemePreferenceOption,\n ThemePreferenceProvider,\n} from \"@pstdio/ui\";\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ninterface WorkbenchThemeProviderProps {\n children: ReactNode;\n initialThemePreference?: ThemePreference;\n themePreferences?: readonly ThemePreferenceOption[];\n fileIconThemePreferences?: readonly FileIconThemePreferenceOption[];\n}\n\nconst WorkbenchThemeProviderContext = createContext(false);\n\nexport const WorkbenchThemeProvider = (props: WorkbenchThemeProviderProps) => {\n const { children, initialThemePreference, themePreferences, fileIconThemePreferences } = props;\n const hasWorkbenchThemeProvider = useContext(WorkbenchThemeProviderContext);\n\n if (hasWorkbenchThemeProvider) return children;\n\n return (\n <WorkbenchThemeProviderContext value>\n <ThemePreferenceProvider initialPreference={initialThemePreference} themePreferences={themePreferences}>\n <FileIconThemePreferenceProvider themePreferences={fileIconThemePreferences}>\n <ChakraProvider value={psTheme}>{children}</ChakraProvider>\n </FileIconThemePreferenceProvider>\n </ThemePreferenceProvider>\n </WorkbenchThemeProviderContext>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface WorkbenchThemeScopeProps extends Omit<BoxProps, \"children\"> {\n children: ReactNode;\n}\n\nexport const WorkbenchThemeScope = (props: WorkbenchThemeScopeProps) => {\n const { children, ...boxProps } = props;\n\n return <Box {...boxProps}>{children}</Box>;\n};\n","import { Center, Dialog, Portal } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport interface WorkbenchOverlayWidgetConfig {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"cover\" | \"full\";\n placement?: \"center\" | \"top\" | \"bottom\";\n scrollBehavior?: \"inside\" | \"outside\";\n closeOnEscape?: boolean;\n closeOnInteractOutside?: boolean;\n modal?: boolean;\n preventScroll?: boolean;\n trapFocus?: boolean;\n motionPreset?: \"scale\" | \"slide-in-bottom\" | \"slide-in-top\" | \"slide-in-left\" | \"slide-in-right\" | \"none\";\n role?: \"dialog\" | \"alertdialog\";\n contentHeight?: string;\n contentMaxHeight?: string;\n contentMinHeight?: string;\n closeTriggerTop?: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst booleanValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"boolean\" ? value : undefined;\n};\n\nconst resolveOverlayConfig = (config: unknown): WorkbenchOverlayWidgetConfig => {\n if (!isRecord(config)) return {};\n\n const overlayConfig: WorkbenchOverlayWidgetConfig = {};\n const size = stringValue(config, \"size\");\n const placement = stringValue(config, \"placement\");\n const scrollBehavior = stringValue(config, \"scrollBehavior\");\n const closeOnEscape = booleanValue(config, \"closeOnEscape\");\n const closeOnInteractOutside = booleanValue(config, \"closeOnInteractOutside\");\n const modal = booleanValue(config, \"modal\");\n const preventScroll = booleanValue(config, \"preventScroll\");\n const trapFocus = booleanValue(config, \"trapFocus\");\n const motionPreset = stringValue(config, \"motionPreset\");\n const role = stringValue(config, \"role\");\n const contentHeight = stringValue(config, \"contentHeight\");\n const contentMaxHeight = stringValue(config, \"contentMaxHeight\");\n const contentMinHeight = stringValue(config, \"contentMinHeight\");\n const closeTriggerTop = stringValue(config, \"closeTriggerTop\");\n\n if (size) overlayConfig.size = size as WorkbenchOverlayWidgetConfig[\"size\"];\n if (placement) overlayConfig.placement = placement as WorkbenchOverlayWidgetConfig[\"placement\"];\n if (scrollBehavior) overlayConfig.scrollBehavior = scrollBehavior as WorkbenchOverlayWidgetConfig[\"scrollBehavior\"];\n if (closeOnEscape !== undefined) overlayConfig.closeOnEscape = closeOnEscape;\n if (closeOnInteractOutside !== undefined) overlayConfig.closeOnInteractOutside = closeOnInteractOutside;\n if (modal !== undefined) overlayConfig.modal = modal;\n if (preventScroll !== undefined) overlayConfig.preventScroll = preventScroll;\n if (trapFocus !== undefined) overlayConfig.trapFocus = trapFocus;\n if (motionPreset) overlayConfig.motionPreset = motionPreset as WorkbenchOverlayWidgetConfig[\"motionPreset\"];\n if (role) overlayConfig.role = role as WorkbenchOverlayWidgetConfig[\"role\"];\n if (contentHeight) overlayConfig.contentHeight = contentHeight;\n if (contentMaxHeight) overlayConfig.contentMaxHeight = contentMaxHeight;\n if (contentMinHeight) overlayConfig.contentMinHeight = contentMinHeight;\n if (closeTriggerTop) overlayConfig.closeTriggerTop = closeTriggerTop;\n return overlayConfig;\n};\n\nexport const resolveOverlayDialogConfig = (placement: Pick<WorkbenchWidgetPlacement, \"closable\">, config: unknown) => {\n const closeable = placement.closable === true;\n const overlayConfig = resolveOverlayConfig(config);\n\n return {\n size: \"xl\",\n scrollBehavior: \"inside\",\n modal: true,\n preventScroll: true,\n trapFocus: true,\n ...overlayConfig,\n closeOnEscape: closeable && (overlayConfig.closeOnEscape ?? true),\n closeOnInteractOutside: closeable && (overlayConfig.closeOnInteractOutside ?? true),\n } satisfies WorkbenchOverlayWidgetConfig;\n};\n\nconst resolveActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveOverlayDialogRenderState = (\n activePlacement: WorkbenchWidgetPlacement | undefined,\n exitingPlacement: WorkbenchWidgetPlacement | undefined,\n) => {\n if (activePlacement) return { open: true, placement: activePlacement };\n if (exitingPlacement) return { open: false, placement: exitingPlacement };\n return undefined;\n};\n\nconst WorkbenchOverlayFallback = (props: { label: string }) => (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={props.label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n);\n\ninterface WorkbenchOverlayLayerProps {\n workbench: WorkbenchCore;\n}\n\nexport const WorkbenchOverlayLayer = (props: WorkbenchOverlayLayerProps) => {\n const { workbench } = props;\n const overlayRegion = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.overlay);\n const renderers = useWorkbenchStore(workbench.renderers.store, (state) => state.renderers);\n const [exitingPlacement, setExitingPlacement] = useState<WorkbenchWidgetPlacement | undefined>();\n\n const activePlacement = resolveActivePlacement(overlayRegion.widgets, overlayRegion.activeWidgetId);\n const renderState = resolveOverlayDialogRenderState(activePlacement, exitingPlacement);\n\n useEffect(() => {\n if (activePlacement) setExitingPlacement(undefined);\n }, [activePlacement]);\n\n if (!renderState) return null;\n\n const { open, placement } = renderState;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const overlayConfig = resolveOverlayDialogConfig(placement, widget?.config);\n const { contentHeight, contentMaxHeight, contentMinHeight, closeTriggerTop, ...dialogRootConfig } = overlayConfig;\n const renderer = widget ? renderers[widget.rendererId] : undefined;\n const canCloseOverlay = open && placement.closable === true;\n const closeLabel = placement.title ?? widget?.title ?? \"overlay\";\n\n // Overlay widgets are full-screen dialogs — keep-alive doesn't apply here.\n // Reject keep-alive renderers explicitly so the misconfiguration surfaces\n // instead of silently rendering nothing into the dialog.\n if (widget && renderer?.keepAlive) {\n throw new Error(\n `Widget ${widget.id} uses keep-alive renderer ${renderer.id} in the overlay region; overlay widgets cannot reuse keep-alive hosts.`,\n );\n }\n\n const body =\n widget && renderer ? (\n (renderer.render({\n workbench,\n panel: toPanelContribution(widget),\n instance: toPanelInstance(placement),\n refresh: () => undefined,\n }) as ReactNode)\n ) : (\n <WorkbenchOverlayFallback\n label={\n widget ? `No renderer registered for ${widget.rendererId}.` : \"Widget contribution is no longer registered.\"\n }\n />\n );\n\n const handleOpenChange = (details: { open: boolean }) => {\n if (!details.open && canCloseOverlay) {\n setExitingPlacement(placement);\n workbench.layout.closePanel(placement.widgetId);\n }\n };\n\n const handleExitComplete = () => {\n setExitingPlacement((current) => (current?.widgetId === placement.widgetId ? undefined : current));\n };\n\n return (\n <Dialog.Root {...dialogRootConfig} open={open} onExitComplete={handleExitComplete} onOpenChange={handleOpenChange}>\n <Portal>\n <Dialog.Backdrop position=\"fixed\" inset=\"0\" />\n <Dialog.Positioner position=\"fixed\" inset=\"0\" overflow=\"auto\">\n <Dialog.Content\n position=\"relative\"\n overflow=\"hidden\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n h={contentHeight}\n maxH={contentMaxHeight}\n minH={contentMinHeight}\n >\n {body}\n {canCloseOverlay ? (\n <Dialog.CloseTrigger\n aria-label={`Close ${closeLabel}`}\n alignItems=\"center\"\n borderRadius=\"sm\"\n color=\"fg.muted\"\n cursor=\"pointer\"\n display=\"inline-flex\"\n h=\"5\"\n insetEnd=\"1\"\n justifyContent=\"center\"\n position=\"absolute\"\n top={closeTriggerTop ?? \"1\"}\n w=\"5\"\n zIndex=\"1\"\n _hover={{ bg: \"bg.subtle\", color: \"fg\" }}\n >\n <WorkbenchIcon name=\"x\" size={16} />\n </Dialog.CloseTrigger>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n};\n","import { IconButton } from \"@chakra-ui/react\";\nimport { ResourceActionMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport const WorkbenchBreadcrumbResourceActions = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n const resolveActions = useWorkbenchResourceActionResolver(workbench);\n const resource = items.at(-1)?.resource;\n const actions = resource ? resolveActions(resource) : [];\n\n if (!resource || actions.length === 0) return null;\n\n const label = resource.label ?? resource.id ?? resource.kind;\n\n return (\n <ResourceActionMenu actions={actions} positioning={{ placement: \"bottom-start\" }}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={`Actions for ${label}`}\n data-workbench-breadcrumb-resource-actions=\"\"\n >\n <WorkbenchIcon name=\"ChevronDown\" size={14} />\n </IconButton>\n </ResourceActionMenu>\n );\n};\n","import { Box, HStack, IconButton } from \"@chakra-ui/react\";\nimport { Header, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { workbenchTopHeaderLeadingMenuPath, workbenchTopHeaderTrailingMenuPath } from \"../../core\";\nimport { WorkbenchBreadcrumbView } from \"../breadcrumb/breadcrumb-view\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderActions } from \"./header-actions\";\nimport { WorkbenchBreadcrumbResourceActions } from \"./resource-actions\";\n\nexport interface WorkbenchNavRegionControl {\n id: \"sidenav\" | \"secondary\" | \"side\";\n label: string;\n icon: \"PanelLeft\" | \"PanelBottom\" | \"PanelRight\";\n open: boolean;\n onToggle: () => void;\n}\n\ninterface WorkbenchNavChromeProps {\n workbench: WorkbenchCore;\n hasNav: boolean;\n regionControls: WorkbenchNavRegionControl[];\n}\n\nconst WorkbenchRegionControl = (props: { control: WorkbenchNavRegionControl }) => {\n const { control } = props;\n\n return (\n <Tooltip content={control.label}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={control.label}\n aria-pressed={control.open}\n onClick={control.onToggle}\n >\n <WorkbenchIcon name={control.icon} size={14} />\n </IconButton>\n </Tooltip>\n );\n};\n\ninterface WorkbenchNavigationControlsProps {\n workbench: WorkbenchCore;\n regionControls: WorkbenchNavRegionControl[];\n}\n\nconst WorkbenchNavigationControls = (props: WorkbenchNavigationControlsProps) => {\n const { workbench, regionControls } = props;\n const history = useWorkbenchStore(workbench.history.store, (state) => state);\n const canNavigateBack = history.cursor > 0;\n const canNavigateForward = history.cursor >= 0 && history.cursor < history.entries.length - 1;\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\n {regionControls.map((control) => (\n <WorkbenchRegionControl key={control.id} control={control} />\n ))}\n <Tooltip content=\"Navigate back\">\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Navigate back\"\n disabled={!canNavigateBack}\n onClick={() => workbench.history.goBack()}\n >\n <WorkbenchIcon name=\"ArrowLeft\" size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Navigate forward\">\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Navigate forward\"\n disabled={!canNavigateForward}\n onClick={() => workbench.history.goForward()}\n >\n <WorkbenchIcon name=\"ArrowRight\" size={14} />\n </IconButton>\n </Tooltip>\n </HStack>\n );\n};\n\nconst WorkbenchRegionControls = (props: { controls: WorkbenchNavRegionControl[] }) => {\n const { controls } = props;\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\n {controls.map((control) => (\n <WorkbenchRegionControl key={control.id} control={control} />\n ))}\n </HStack>\n );\n};\n\nexport const WorkbenchNavChrome = (props: WorkbenchNavChromeProps) => {\n const { workbench, hasNav, regionControls } = props;\n const sidenavControls = regionControls.filter((control) => control.id === \"sidenav\");\n const trailingRegionControls = regionControls.filter((control) => control.id !== \"sidenav\");\n\n return (\n <Header\n data-workbench-region=\"nav\"\n variant=\"main\"\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderLeadingMenuPath} />\n <WorkbenchNavigationControls workbench={workbench} regionControls={sidenavControls} />\n <Box h=\"full\" minW=\"0\" maxW=\"60%\" overflow=\"hidden\">\n {hasNav ? (\n <WorkbenchRegion workbench={workbench} region=\"nav\" title=\"Nav Chrome\" />\n ) : (\n <WorkbenchBreadcrumbView workbench={workbench} />\n )}\n </Box>\n <HStack data-workbench-breadcrumb-action-slot=\"\" flexShrink={0} gap=\"2xs\" h=\"6\" justifyContent=\"center\" minW=\"6\">\n <WorkbenchBreadcrumbResourceActions workbench={workbench} />\n </HStack>\n <Box flex=\"1\" minW=\"0\" />\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderTrailingMenuPath} />\n <WorkbenchRegionControls controls={trailingRegionControls} />\n </Header>\n );\n};\n","import { Box, Button, Flex, Stack, Text } from \"@chakra-ui/react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap, ResourceRefValue } from \"@pstdio/ui\";\nimport { ParamEditor, ScrollArea } from \"@pstdio/ui\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { RegisteredControlsRendererContribution, WorkbenchCore, WorkbenchPanelInstance } from \"../../../core\";\n\n// A resource param chip carries a serializable ref; open it as a workbench tab so\n// links (e.g. a ticket's parent/dependency) navigate like the old webview did.\nconst openResourceRef = (workbench: WorkbenchCore, ref: ResourceRefValue) => {\n void workbench.resources\n .openResource(\n {\n kind: ref.type,\n uri: `pstdio://extension-resource/${encodeURIComponent(ref.type)}/${encodeURIComponent(ref.id)}`,\n id: ref.id,\n label: ref.label,\n },\n { replaceActive: true },\n )\n .catch(() => undefined);\n};\n\ninterface WorkbenchControlsViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredControlsRendererContribution;\n placement: WorkbenchPanelInstance;\n}\n\ninterface ControlsViewState {\n params: Param[];\n groups: InputGroup[];\n values: ParamValueMap;\n readOnly: boolean;\n loading: boolean;\n}\n\nconst initialState: ControlsViewState = { params: [], groups: [], values: {}, readOnly: false, loading: true };\n\nexport const WorkbenchControlsView = (props: WorkbenchControlsViewProps) => {\n const { workbench, contribution, placement } = props;\n const resource = placement.resource;\n const [state, setState] = useState<ControlsViewState>(initialState);\n const requestRef = useRef(0);\n\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve(contribution.executeQuery(resource)).then((result) => {\n if (cancelled || requestRef.current !== requestId) return;\n const values = { ...(contribution.defaultValues ?? {}), ...(result.values ?? {}) } as ParamValueMap;\n setState({\n params: (result.params ?? []) as Param[],\n groups: (result.groups ?? []) as InputGroup[],\n values,\n readOnly: Boolean(result.readOnly),\n loading: false,\n });\n });\n };\n runQuery();\n\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = workbench.renderers.onDidRefreshControlsRenderer((event) => {\n if (event.controlsRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [contribution, resource, workbench]);\n\n const readOnly = state.readOnly || (!contribution.updateValue && !contribution.apply);\n const hasControls = state.params.length > 0 || state.groups.length > 0;\n const showFooter = !readOnly && (Boolean(contribution.apply) || Boolean(contribution.reset));\n\n const handleChange = (id: string, value: ParamValue) => {\n setState((prev) => {\n const values = { ...prev.values, [id]: value };\n if (contribution.updateValue) void contribution.updateValue({ controlId: id, value, values, resource });\n return { ...prev, values };\n });\n };\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\">\n {state.loading ? (\n <Box p=\"md\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n Loading…\n </Text>\n </Box>\n ) : hasControls ? (\n <ParamEditor\n variant=\"small\"\n params={state.params}\n groups={state.groups}\n defaultValues={state.values}\n readOnly={readOnly}\n onChange={handleChange}\n onOpenResource={(ref) => openResourceRef(workbench, ref)}\n />\n ) : (\n <Box p=\"md\">\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {contribution.emptyTitle || \"No controls\"}\n </Text>\n {contribution.emptyDescription ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mt=\"2xs\">\n {contribution.emptyDescription}\n </Text>\n ) : null}\n </Box>\n )}\n </ScrollArea>\n {showFooter ? (\n <Flex borderTopWidth=\"1px\" borderColor=\"border.muted\" px=\"sm\" py=\"xs\" gap=\"xs\" justifyContent=\"flex-end\">\n {contribution.reset ? (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={() => {\n void contribution.reset?.({ resource });\n }}\n >\n Reset\n </Button>\n ) : null}\n {contribution.apply ? (\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => {\n void contribution.apply?.({ values: state.values, resource });\n }}\n >\n Apply\n </Button>\n ) : null}\n </Flex>\n ) : null}\n </Stack>\n );\n};\n","import { createElement } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport { WorkbenchControlsView } from \"./controls-view\";\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchControlsRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n workbench.renderers.setControlsRendererImplementation(({ workbench: scope, instance, controlsRendererId }) => {\n const contribution = scope.renderers.getControlsRenderer(controlsRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchControlsView, { workbench: scope, contribution, placement: instance });\n });\n};\n","import { createElement } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport { WorkbenchDataTableView } from \"./data-table-view\";\n\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchDataTableRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n workbench.renderers.setDataTableRendererImplementation(({ workbench: scope, instance, dataTableRendererId }) => {\n const contribution = scope.renderers.getDataTableRenderer(dataTableRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchDataTableView, { workbench: scope, contribution, placement: instance });\n });\n};\n","import { preloadCodeEditor } from \"@pstdio/ui/diff\";\nimport { createElement, lazy, Suspense } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\n\nconst loadWorkbenchFileRendererView = () =>\n import(\"./file-renderer-view\").then((module) => ({\n default: module.WorkbenchFileRendererView,\n }));\n\nconst WorkbenchFileRendererView = lazy(loadWorkbenchFileRendererView);\n\nif (typeof document !== \"undefined\") void preloadCodeEditor();\n\nexport const createWorkbenchFileRendererInstaller = (preloadView: () => void) => {\n // Track per-core installation so repeated <Workbench> renders are idempotent.\n const installed = new WeakSet<WorkbenchCore>();\n\n return (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n preloadView();\n workbench.renderers.setFileRendererImplementation(({ workbench: scope, instance, fileRendererId }) => {\n const contribution = scope.renderers.getFileRenderer(fileRendererId);\n if (!contribution) return null;\n return createElement(\n Suspense,\n { fallback: null },\n createElement(WorkbenchFileRendererView, { workbench: scope, contribution, placement: instance }),\n );\n });\n };\n};\n\nexport const installWorkbenchFileRenderer = createWorkbenchFileRendererInstaller(() => {\n if (typeof window !== \"undefined\") void preloadCodeEditor();\n void loadWorkbenchFileRendererView();\n});\n","export const createKanbanViewQuerySequencer = () => {\n let latestQueryId = 0;\n\n return {\n next: () => {\n latestQueryId += 1;\n return latestQueryId;\n },\n isLatest: (queryId: number) => queryId === latestQueryId,\n };\n};\n\nexport const executeKanbanViewQuery = async <TRow>(executeQuery: () => Promise<TRow[]> | TRow[]) => {\n try {\n return await executeQuery();\n } catch {\n return [];\n }\n};\n","import type { WorkbenchPanelInstance } from \"../../../core\";\n\nconst resolveProjectScope = (placement: WorkbenchPanelInstance) => {\n const metadata = placement.resource?.metadata;\n const projectId = metadata?.projectId;\n if (typeof projectId === \"string\") return projectId;\n\n const favoriteScope = metadata?.favoriteScope;\n if (!favoriteScope || typeof favoriteScope !== \"object\" || Array.isArray(favoriteScope)) return undefined;\n\n const scope = favoriteScope as { scope?: unknown; projectId?: unknown };\n return scope.scope === \"project\" && typeof scope.projectId === \"string\" ? scope.projectId : undefined;\n};\n\nexport const resolveKanbanRendererStorageKey = (kanbanRendererId: string, placement: WorkbenchPanelInstance) => {\n const baseKey = `pstdio:workbench:kanbanRenderer:${kanbanRendererId}:${placement.instanceId}`;\n const projectScope = resolveProjectScope(placement);\n return projectScope ? `${baseKey}:project:${projectScope}` : baseKey;\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea } from \"@pstdio/ui\";\nimport {\n type AttributeDescriptor,\n type AttributesSource,\n isAttributesSource,\n KanbanRenderer,\n type KanbanRendererRow,\n useKanbanRendererStore,\n} from \"@pstdio/ui/kanban-renderer\";\nimport { type ReactNode, useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport type {\n KanbanRendererQueryState,\n RegisteredKanbanRendererContribution,\n ResourceRef,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport { createKanbanViewQuerySequencer, executeKanbanViewQuery } from \"./kanban-view-query\";\nimport { resolveKanbanRendererStorageKey } from \"./kanban-view-storage\";\n\ninterface WorkbenchKanbanViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredKanbanRendererContribution;\n placement: WorkbenchPanelInstance;\n}\n\ninterface WorkbenchKanbanViewFrameProps {\n children: ReactNode;\n usesInternalScroll: boolean;\n}\n\nconst kanbanViewScrollContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\" } as const;\n\nconst WorkbenchKanbanViewFrame = (props: WorkbenchKanbanViewFrameProps) => {\n const { children, usesInternalScroll } = props;\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\" position={usesInternalScroll ? \"relative\" : undefined}>\n {usesInternalScroll ? (\n // Board columns own vertical scrolling; do not let their content height\n // make the workbench region's outer ScrollArea become the scroll owner.\n <Box position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n ) : (\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\" contentProps={kanbanViewScrollContentProps}>\n {children}\n </ScrollArea>\n )}\n </Stack>\n );\n};\n\nconst noopSubscribe = () => () => {};\n\nconst isResourceRef = (resource: unknown): resource is ResourceRef =>\n Boolean(\n resource &&\n typeof resource === \"object\" &&\n typeof (resource as { kind?: unknown }).kind === \"string\" &&\n typeof (resource as { uri?: unknown }).uri === \"string\",\n );\n\nconst useResolvedContributionAttributes = (attributes: AttributeDescriptor[] | AttributesSource) => {\n const source = isAttributesSource(attributes) ? attributes : undefined;\n const fallback = source ? undefined : (attributes as AttributeDescriptor[]);\n const subscribe = source ? source.subscribe : noopSubscribe;\n const getSnapshot = source ? source.getSnapshot : () => fallback!;\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport const mergeKanbanViewRowActions = (\n resourceActions: ResourceContextAction[],\n contributionActions: ResourceContextAction[],\n) => {\n const resourceActionKeys = new Set(resourceActions.map((action) => action.key));\n const resourceCommandIds = new Set(resourceActions.flatMap((action) => (action.commandId ? [action.commandId] : [])));\n return [\n ...resourceActions,\n ...contributionActions.filter(\n (action) =>\n !resourceActionKeys.has(action.key) && (!action.commandId || !resourceCommandIds.has(action.commandId)),\n ),\n ];\n};\n\nexport const WorkbenchKanbanView = (props: WorkbenchKanbanViewProps) => {\n const { workbench, contribution, placement } = props;\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const attributes = useResolvedContributionAttributes(contribution.attributes);\n const storageKey = resolveKanbanRendererStorageKey(contribution.id, placement);\n const initialState = {\n settings: contribution.defaultSettings,\n filters: contribution.defaultFilters,\n views: contribution.defaultViews,\n activeViewId: contribution.defaultActiveViewId,\n };\n\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n\n const [rows, setRows] = useState<KanbanRendererRow[]>([]);\n const querySequencer = useRef(createKanbanViewQuerySequencer());\n\n // Run executeQuery whenever settings/filters change.\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n const queryId = querySequencer.current.next();\n const state: KanbanRendererQueryState = { settings, filters };\n void executeKanbanViewQuery(() => contribution.executeQuery(state)).then((next) => {\n if (cancelled || !querySequencer.current.isLatest(queryId)) return;\n setRows(next);\n });\n };\n runQuery();\n\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = workbench.renderers.onDidRefreshKanbanRenderer((event) => {\n if (event.kanbanRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") {\n subscription();\n } else {\n subscription?.dispose();\n }\n refreshSubscription.dispose();\n };\n }, [contribution, filters, settings, workbench]);\n\n const handleOpenRow = (row: KanbanRendererRow) => {\n if (contribution.onRowClick) {\n contribution.onRowClick(row);\n return;\n }\n const resource = row.resource as Parameters<typeof workbench.resources.openResource>[0] | undefined;\n if (resource && typeof resource === \"object\" && \"kind\" in resource && \"uri\" in resource) {\n void workbench.resources.openResource(resource, { replaceActive: true });\n }\n };\n\n const getRowContextMenuActions = (row: KanbanRendererRow) => {\n const resourceActions = isResourceRef(row.resource) ? resolveResourceActions(row.resource) : [];\n const contributionActions = contribution.getRowContextMenuActions?.(row) ?? [];\n return mergeKanbanViewRowActions(resourceActions, contributionActions);\n };\n\n return (\n <WorkbenchKanbanViewFrame usesInternalScroll={settings.viewMode === \"board\"}>\n <KanbanRenderer\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={contribution.defaultSettings}\n defaultFilters={contribution.defaultFilters}\n defaultViews={contribution.defaultViews}\n defaultActiveViewId={contribution.defaultActiveViewId}\n emptyTitle={contribution.emptyTitle}\n emptyDescription={contribution.emptyDescription}\n getBoardColumnConfig={contribution.getBoardColumnConfig}\n hideToolbar={contribution.hideToolbar}\n onRowClick={handleOpenRow}\n onAttributeChange={contribution.onAttributeChange}\n onReorder={contribution.onReorder}\n createRow={contribution.createRow}\n onCreateRow={contribution.onCreateRow}\n onColumnAction={contribution.onColumnAction}\n getRowContextMenuActions={getRowContextMenuActions}\n />\n </WorkbenchKanbanViewFrame>\n );\n};\n","import { createElement } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport { WorkbenchKanbanView } from \"./kanban-view\";\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchKanbanRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n workbench.renderers.setKanbanRendererImplementation(({ workbench: scope, instance, kanbanRendererId }) => {\n const contribution = scope.renderers.getKanbanRenderer(kanbanRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchKanbanView, { workbench: scope, contribution, placement: instance });\n });\n};\n","import type { ResourceContextAction } from \"@pstdio/ui\";\nimport { createElement } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchTreeView } from \"./tree-view\";\n\ninterface InstallWorkbenchTreeRendererInput {\n renderParamField?: CommandParamFieldRenderer;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\ninterface WorkbenchTreeRendererInstallation {\n renderParamField: CommandParamFieldRenderer | undefined;\n onSidenavContextActionsChange: ((actions: ResourceContextAction[]) => void) | undefined;\n}\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakMap<WorkbenchCore, WorkbenchTreeRendererInstallation>();\n\nexport const installWorkbenchTreeRenderer = (\n workbench: WorkbenchCore,\n input: InstallWorkbenchTreeRendererInput = {},\n) => {\n const current = installed.get(workbench);\n if (current) {\n current.renderParamField = input.renderParamField;\n current.onSidenavContextActionsChange = input.onSidenavContextActionsChange;\n return;\n }\n\n const installation = {\n renderParamField: input.renderParamField,\n onSidenavContextActionsChange: input.onSidenavContextActionsChange,\n };\n installed.set(workbench, installation);\n workbench.renderers.setTreeRendererImplementation(({ workbench: scope, instance, treeId }) =>\n createElement(WorkbenchTreeView, {\n workbench: scope,\n treeViewId: treeId,\n resource: instance.resource,\n viewId: instance.panelId,\n renderParamField: installation.renderParamField,\n onSidenavContextActionsChange:\n scope.layout.getPanel(instance.panelId)?.region === \"sidenav\"\n ? installation.onSidenavContextActionsChange\n : undefined,\n }),\n );\n};\n","import type { FileIconThemePreferenceOption } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\n// The file icon themes a workbench offers: whatever is registered in\n// `workbench.fileIconThemes` (e.g. extension-contributed themes). The list\n// shrinks when a contribution is disposed, mirroring color themes.\nexport const useWorkbenchFileIconThemePreferences = (workbench: WorkbenchCore) =>\n useWorkbenchStore(\n workbench.fileIconThemes.store,\n (state) => state.themes,\n ) as readonly FileIconThemePreferenceOption[];\n","import {\n getWorkbenchModePanelForRegion,\n isWorkbenchModePanelAvailable,\n matchesWorkbenchLocationEligibility,\n matchesWorkbenchModeEligibility,\n type WorkbenchCore,\n type WorkbenchRegion,\n} from \"../../core\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchRegionContentOptions {\n locationScoped?: boolean;\n}\n\nexport const useWorkbenchRegionContent = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n options: WorkbenchRegionContentOptions = {},\n) => {\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const modePanel = getWorkbenchModePanelForRegion(region);\n const panelAvailable =\n !modePanel || isWorkbenchModePanelAvailable(modeId ? workbench.modes.getMode(modeId) : undefined, modePanel);\n\n return useWorkbenchStore(workbench.layout.store, (state) => {\n if (!panelAvailable) return false;\n if (state.placeholders[region]) return true;\n if (!options.locationScoped) return state.layout.regions[region].widgets.length > 0;\n\n return state.layout.regions[region].widgets.some((placement) => {\n const widget = state.widgets[placement.contributionId];\n if (!widget) return false;\n return region === \"side\"\n ? matchesWorkbenchModeEligibility(widget, modeId)\n : matchesWorkbenchLocationEligibility(widget, resource, modeId, placement);\n });\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\ninterface WorkbenchHeaderBorderProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegion;\n}\n\n// The header's bottom edge is painted as an absolutely-positioned line instead\n// of a CSS border so an active outline tab can sit on top of it and merge with\n// the panel content below. Hosting headers must set `position=\"relative\"`; the\n// tab strip uses a higher `zIndex` so the active tab paints over this line.\nexport const WorkbenchHeaderBorder = (props: WorkbenchHeaderBorderProps) => {\n const { workbench, region } = props;\n\n if (!workbench.layout.getRegionHeaderBorderBottom(region)) return null;\n\n return (\n <Box position=\"absolute\" insetInline=\"0\" bottom=\"0\" h=\"1px\" bg=\"border.subtle\" pointerEvents=\"none\" zIndex=\"0\" />\n );\n};\n","import type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\nimport { resolvePanelCollapsible, setWorkbenchPanelOpen } from \"./workbench-panel-state\";\n\n// The collapse/reveal state of one panel around the main editor region, bundled so\n// WorkbenchBody receives one object per panel instead of six flat props.\nexport interface WorkbenchPanelView {\n has: boolean;\n hasHeader: boolean;\n collapsible: boolean;\n collapsed: boolean;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nexport interface WorkbenchMainPanels {\n hasMainHeader: boolean;\n secondaryPanel: WorkbenchPanelView;\n}\n\nconst useSecondaryPanelView = (workbench: WorkbenchCore) => {\n const hasContent = useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true });\n const hasHeader = useWorkbenchRegionContent(workbench, \"secondary-header\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const collapsible = useWorkbenchStore(workbench.layout.store, () =>\n resolvePanelCollapsible(workbench, \"secondary-header\", \"secondary\"),\n );\n const open = useWorkbenchStore(workbench.panels.store, (state) => state.openByRegionId.secondary ?? true);\n\n return {\n has: hasContent || hasHeader || hasPanelHeader,\n hasHeader,\n collapsible,\n collapsed: !open && collapsible,\n onCollapsedChange: (collapsed: boolean) => {\n if (!collapsed || collapsible) setWorkbenchPanelOpen(workbench, \"secondary\", !collapsed);\n },\n };\n};\n\n// Subscribe to derived panel facts rather than the whole layout. Replaying a\n// resource can replace the active main placement without rebuilding the shell.\nexport const useWorkbenchMainPanels = (workbench: WorkbenchCore) => {\n const hasMainHeader = useWorkbenchRegionContent(workbench, \"main-header\");\n const secondaryPanel = useSecondaryPanelView(workbench);\n\n return {\n hasMainHeader,\n secondaryPanel,\n };\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Header } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { useWorkbenchPanelHeaderVisible, WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\n\ninterface WorkbenchSecondaryPanelProps {\n workbench: WorkbenchCore;\n hasSecondaryHeader: boolean;\n}\n\nexport const WorkbenchSecondaryPanel = (props: WorkbenchSecondaryPanelProps) => {\n const { workbench, hasSecondaryHeader } = props;\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"secondary\"\n data-workbench-panel=\"secondary\"\n data-workbench-region=\"secondary\"\n as=\"section\"\n bg={workbenchBackgrounds.panel}\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n w=\"full\"\n >\n {hasSecondaryHeader || hasPanelHeader ? (\n <Header\n data-workbench-panel-header=\"secondary\"\n variant=\"main\"\n bg={workbenchBackgrounds.panel}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"secondary\" />\n {hasSecondaryHeader ? (\n <Box flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"secondary-header\" title=\"Secondary Panel header\" />\n </Box>\n ) : null}\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"secondary\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"secondary-header\" />\n </Header>\n ) : null}\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"secondary\">\n <WorkbenchRegion workbench={workbench} region=\"secondary\" title=\"Secondary Panel\" />\n </WorkbenchPanelMenuLayout>\n </Box>\n </WorkbenchFocusRegion>\n );\n};\n","import { Box, Grid } from \"@chakra-ui/react\";\nimport { Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout } from \"@pstdio/ui\";\nimport { headerTrailingMenuPath, type WorkbenchCore, type WorkbenchRegionSize } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchHeaderActions } from \"../header/header-actions\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport {\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n WorkbenchRegionTabs,\n} from \"../region/region-tabs\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\nimport { useWorkbenchMainPanels } from \"./use-workbench-main-panels\";\nimport { WorkbenchSecondaryPanel } from \"./workbench-secondary-panel\";\n\ninterface WorkbenchBodyProps {\n workbench: WorkbenchCore;\n}\n\nconst SECONDARY_PANEL_SIZE = { defaultPx: 240, minPx: 128, maxPx: 420 };\nconst SECONDARY_PANEL_CONTENT_MIN_SIZE_PX = 240;\nconst SECONDARY_PANEL_RESIZE_HANDLE_SIZE_PX = 4;\nconst mainHeaderTrailingMenuPath = headerTrailingMenuPath(\"main\");\n\nconst resolveRegionSize = (\n regionSize: WorkbenchRegionSize | undefined,\n persistedSize: number | undefined,\n fallback: Required<WorkbenchRegionSize>,\n) => ({\n defaultPx: persistedSize ?? regionSize?.defaultPx ?? fallback.defaultPx,\n minPx: regionSize?.minPx ?? fallback.minPx,\n maxPx: regionSize ? regionSize.maxPx : fallback.maxPx,\n});\n\ninterface MainHeaderBarProps {\n workbench: WorkbenchCore;\n hasMainHeader: boolean;\n}\n\nconst MainHeaderBar = (props: MainHeaderBarProps) => {\n const { workbench, hasMainHeader } = props;\n const hasMainContentTabs = useWorkbenchRegionTabsVisible(workbench, \"main\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"main\");\n\n if (!hasMainHeader && !hasPanelHeader) return null;\n\n return (\n <Header\n data-workbench-panel-header=\"main\"\n variant=\"main\"\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"main\" />\n {/* The tab strip grows into the empty header, so only claim space when a\n main-header view is actually mounted or when there are no tabs to claim it. */}\n <Box flex={hasMainHeader || !hasMainContentTabs ? \"1\" : \"0\"} h=\"full\" minW=\"0\" overflow=\"hidden\">\n {hasMainHeader ? <WorkbenchRegion workbench={workbench} region=\"main-header\" title=\"Main header\" /> : null}\n </Box>\n <WorkbenchHeaderActions\n workbench={workbench}\n menuPath={mainHeaderTrailingMenuPath}\n controlSize={PANEL_HEADER_CONTROL_SIZE}\n />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"main\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"main-header\" />\n </Header>\n );\n};\n\nexport const WorkbenchBody = (props: WorkbenchBodyProps) => {\n const { workbench } = props;\n const panels = useWorkbenchMainPanels(workbench);\n const { hasMainHeader, secondaryPanel } = panels;\n const persistedSecondarySize = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.regions.secondary.size,\n );\n const secondaryPanelSize = resolveRegionSize(\n workbench.layout.getRegionSize(\"secondary\"),\n persistedSecondarySize,\n SECONDARY_PANEL_SIZE,\n );\n\n const mainRegion = (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"main\"\n data-workbench-region=\"main\"\n bg={workbenchBackgrounds.main}\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n overflow=\"hidden\"\n >\n <WorkbenchRegion workbench={workbench} region=\"main\" title=\"Main\" />\n </WorkbenchFocusRegion>\n );\n const mainPanelWithMenus = (\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"main\">\n {mainRegion}\n </WorkbenchPanelMenuLayout>\n );\n\n const mainContent = (\n <Grid data-workbench-panel=\"main\" gridTemplateRows=\"auto minmax(0, 1fr)\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <MainHeaderBar workbench={workbench} hasMainHeader={hasMainHeader} />\n <Box gridRow=\"2\" h=\"full\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {mainPanelWithMenus}\n </Box>\n </Grid>\n );\n\n if (!secondaryPanel.has)\n return (\n <Grid as=\"main\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n {mainContent}\n </Grid>\n );\n\n return (\n <ResizableSplitLayout\n as=\"main\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"bottom\"\n contentPanel={mainContent}\n resizablePanel={<WorkbenchSecondaryPanel workbench={workbench} hasSecondaryHeader={secondaryPanel.hasHeader} />}\n collapsed={secondaryPanel.collapsed && secondaryPanel.collapsible}\n collapsible={secondaryPanel.collapsible}\n defaultSizePx={secondaryPanelSize.defaultPx}\n minSizePx={secondaryPanelSize.minPx}\n maxSizePx={secondaryPanelSize.maxPx}\n contentMinSizePx={SECONDARY_PANEL_CONTENT_MIN_SIZE_PX}\n resizeHandleSizePx={SECONDARY_PANEL_RESIZE_HANDLE_SIZE_PX}\n resizeLabel=\"Resize Secondary Panel\"\n showResizeSeparator\n onSizeChange={(height) => workbench.layout.setRegionSize(\"secondary\", height)}\n onCollapsedChange={secondaryPanel.onCollapsedChange}\n />\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Header, type ResourceContextAction, ResourceContextMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { useWorkbenchRegionTabsVisible, WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\n\ninterface WorkbenchSidenavProps {\n workbench: WorkbenchCore;\n hasHeader: boolean;\n contextActions: ResourceContextAction[];\n}\n\nexport const WorkbenchSidenav = (props: WorkbenchSidenavProps) => {\n const { workbench, hasHeader, contextActions } = props;\n const hasContentTabs = useWorkbenchRegionTabsVisible(workbench, \"sidenav\");\n const showHeaderBar = hasHeader || hasContentTabs;\n\n return (\n <ResourceContextMenu actions={contextActions} closeOnSelect={false} keepMountedWhenEmpty>\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"sidenav\"\n data-workbench-region=\"sidenav\"\n as=\"aside\"\n bg={workbenchBackgrounds.sidenav}\n display=\"flex\"\n flexDirection=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n w=\"full\"\n >\n {showHeaderBar ? (\n <Header\n data-workbench-panel-header=\"sidenav\"\n variant=\"main\"\n bg={workbenchBackgrounds.sidenav}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflowX=\"hidden\"\n // Full-bleed: sidenav-header content owns its own padding and fills the header height,\n // so the container adds none of its own horizontally.\n px=\"0\"\n // Size to content so a multi-row sidenav-header (e.g. a stacked action cluster) is not\n // clipped to the single-row height; single-row headers stay at the variant height.\n h=\"auto\"\n minH=\"2.5rem\"\n alignItems=\"stretch\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"sidenav\" />\n {hasHeader ? (\n <Box flex=\"1\" minW=\"0\" overflowX=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"sidenav-header\" title=\"Sidenav header\" />\n </Box>\n ) : null}\n <WorkbenchHeaderBorder workbench={workbench} region=\"sidenav-header\" />\n </Header>\n ) : null}\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"sidenav\" title=\"Sidenav\" />\n </Box>\n </WorkbenchFocusRegion>\n </Box>\n </ResourceContextMenu>\n );\n};\n\ninterface WorkbenchRegionPanelProps {\n workbench: WorkbenchCore;\n}\n\nexport const WORKBENCH_STATUS_BAR_HEIGHT = \"2rem\";\n\nexport const WorkbenchActivityBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"activity\"\n data-workbench-region=\"activity\"\n as=\"nav\"\n bg={workbenchBackgrounds.activityBar}\n borderRightWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n h=\"full\"\n minH=\"0\"\n overflow=\"hidden\"\n w=\"3.5rem\"\n >\n <WorkbenchRegion workbench={workbench} region=\"activity\" title=\"Activity bar\" />\n </WorkbenchFocusRegion>\n );\n};\n\nexport const WorkbenchStatusBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"status\"\n data-workbench-region=\"status\"\n as=\"footer\"\n bg={workbenchBackgrounds.statusBar}\n borderTopWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n h={WORKBENCH_STATUS_BAR_HEIGHT}\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n >\n <WorkbenchRegion workbench={workbench} region=\"status\" title=\"Status\" />\n </WorkbenchFocusRegion>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { WorkbenchAttachedSidePanel } from \"../side-panel/side-panel\";\n\nconst ATTACHED_PANEL_DEFAULT_SIZE_PX = 420;\nconst ATTACHED_PANEL_MIN_SIZE_PX = 320;\n\ninterface WorkbenchSidePanelRegionPortalProps {\n workbench: WorkbenchCore;\n hasSidePanel: boolean;\n mounted: boolean;\n sidePanelHost: HTMLDivElement | null;\n}\n\nexport const WorkbenchSidePanelRegionPortal = (props: WorkbenchSidePanelRegionPortalProps) => {\n const { workbench, hasSidePanel, mounted, sidePanelHost } = props;\n\n if (!hasSidePanel || !mounted || !sidePanelHost) return null;\n\n return createPortal(\n <WorkbenchRegion workbench={workbench} region=\"side\" title=\"Side Panel\" transparent />,\n sidePanelHost,\n );\n};\n\ninterface WorkbenchSidePanelRegionHeaderProps {\n workbench: WorkbenchCore;\n hasSideHeader: boolean;\n}\n\nexport const WorkbenchSidePanelRegionHeader = (props: WorkbenchSidePanelRegionHeaderProps) => {\n const { workbench, hasSideHeader } = props;\n\n return (\n <Box alignItems=\"center\" display=\"flex\" flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\" w=\"full\">\n <WorkbenchRegionTabs workbench={workbench} region=\"side\" />\n {hasSideHeader ? (\n <Box flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"side-header\" title=\"Side Panel header\" transparent />\n </Box>\n ) : null}\n </Box>\n );\n};\n\ninterface WorkbenchAttachedSidePanelLayoutProps {\n workbench: WorkbenchCore;\n attached: boolean;\n contentPanel: ReactNode;\n contentMinSizePx: number;\n header: ReactNode;\n onAttachedSlotChange: (slot: HTMLDivElement | null) => void;\n onCollapse: () => void;\n}\n\nexport const WorkbenchAttachedSidePanelLayout = (props: WorkbenchAttachedSidePanelLayoutProps) => {\n const { workbench, attached, contentPanel, contentMinSizePx, header, onAttachedSlotChange, onCollapse } = props;\n\n return (\n <ResizableSplitLayout\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n resizableSide=\"right\"\n contentPanel={contentPanel}\n resizablePanel={\n <WorkbenchAttachedSidePanel workbench={workbench} contentSlotRef={onAttachedSlotChange} header={header} />\n }\n collapsed={!attached}\n defaultSizePx={ATTACHED_PANEL_DEFAULT_SIZE_PX}\n minSizePx={ATTACHED_PANEL_MIN_SIZE_PX}\n contentMinSizePx={contentMinSizePx}\n resizeLabel=\"Resize Side Panel\"\n showResizeSeparator\n onCollapsedChange={(collapsed) => {\n if (attached && collapsed) onCollapse();\n }}\n />\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchAttachedSidePanelLayout } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchSidePanelBoundaryProps {\n workbench: WorkbenchCore;\n showAttachedSidePanel: boolean;\n contentFrame: ReactNode;\n sideHeader: ReactNode;\n contentMinSizePx: number;\n onAttachedSlotChange(slot: HTMLDivElement | null): void;\n}\n\ninterface WorkbenchKeyboardFrameProps {\n children: ReactNode;\n}\n\nconst interactivePointerTargetSelector = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"[contenteditable='true']\",\n \"[role='button']\",\n \"[role='checkbox']\",\n \"[role='menuitem']\",\n \"[role='option']\",\n \"[role='radio']\",\n \"[role='switch']\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nconst hasClosest = (target: EventTarget | null): target is EventTarget & { closest(selector: string): unknown } =>\n typeof (target as { closest?: unknown } | null)?.closest === \"function\";\n\nexport const shouldFocusWorkbenchKeyboardFrame = (target: EventTarget | null, currentTarget: EventTarget) => {\n if (target === currentTarget) return true;\n if (!hasClosest(target)) return false;\n return !target.closest(interactivePointerTargetSelector);\n};\n\nconst focusWorkbenchKeyboardFrame = (element: HTMLDivElement | null) => {\n element?.focus({ preventScroll: true });\n};\n\nconst WorkbenchKeyboardFrame = (props: WorkbenchKeyboardFrameProps) => {\n const { children } = props;\n const ref = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n focusWorkbenchKeyboardFrame(ref.current);\n }, []);\n\n return (\n <Flex\n ref={ref}\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n tabIndex={-1}\n outline=\"none\"\n onPointerDown={(event) => {\n if (shouldFocusWorkbenchKeyboardFrame(event.target, event.currentTarget)) {\n focusWorkbenchKeyboardFrame(event.currentTarget);\n }\n }}\n >\n {children}\n </Flex>\n );\n};\n\nexport const WorkbenchSidePanelBoundary = (props: WorkbenchSidePanelBoundaryProps) => {\n const { workbench, showAttachedSidePanel, contentFrame, sideHeader, contentMinSizePx, onAttachedSlotChange } = props;\n\n return (\n <WorkbenchKeyboardFrame>\n <WorkbenchAttachedSidePanelLayout\n workbench={workbench}\n attached={showAttachedSidePanel}\n contentPanel={contentFrame}\n contentMinSizePx={contentMinSizePx}\n header={sideHeader}\n onAttachedSlotChange={onAttachedSlotChange}\n onCollapse={() => workbench.sidePanel.setMode(\"closed\")}\n />\n </WorkbenchKeyboardFrame>\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout, type ResourceContextAction, Toaster } from \"@pstdio/ui\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\nimport { allowsWorkbenchFloatingPanels, type WorkbenchCore } from \"../../core\";\nimport { WorkbenchCommandPalette } from \"../command-palette/command-palette\";\nimport type { CommandParamFieldRenderer } from \"../command-palette/command-params-dialog\";\nimport { WorkbenchNavChrome, type WorkbenchNavRegionControl } from \"../header/workbench-nav-chrome\";\nimport { WorkbenchKeepAliveLayer } from \"../keep-alive/workbench-keep-alive-layer\";\nimport { WorkbenchKeybindingDispatcher } from \"../keybindings/workbench-keybinding-dispatcher\";\nimport { WorkbenchNotificationHost } from \"../notifications/notification-host\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { installWorkbenchControlsRenderer } from \"../renderers/controls/install-controls-renderer\";\nimport { installWorkbenchDataTableRenderer } from \"../renderers/data-table/install-data-table-renderer\";\nimport { installWorkbenchFileRenderer } from \"../renderers/file/install-file-renderer\";\nimport { installWorkbenchKanbanRenderer } from \"../renderers/kanban/install-kanban-renderer\";\nimport { installWorkbenchTreeRenderer } from \"../renderers/tree/install-tree-renderer\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchFloatingSidePanel } from \"../side-panel/side-panel\";\nimport { useWorkbenchFileIconThemePreferences } from \"../theme/use-workbench-file-icon-theme-preferences\";\nimport { useWorkbenchThemePreferences } from \"../theme/use-workbench-theme-preferences\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchThemeProvider } from \"../theme/workbench-theme-provider\";\nimport { WorkbenchThemeScope } from \"../theme/workbench-theme-scope\";\nimport { WorkbenchOverlayLayer } from \"./overlay-layer\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\nimport { WorkbenchBody } from \"./workbench-body\";\nimport { resolvePanelCollapsible, setWorkbenchPanelOpen, type WorkbenchPanelRegionId } from \"./workbench-panel-state\";\nimport {\n WORKBENCH_STATUS_BAR_HEIGHT,\n WorkbenchActivityBar,\n WorkbenchSidenav,\n WorkbenchStatusBar,\n} from \"./workbench-panels\";\nimport { WorkbenchSidePanelBoundary } from \"./workbench-side-panel-boundary\";\nimport { WorkbenchSidePanelRegionHeader, WorkbenchSidePanelRegionPortal } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchProps {\n workbench: WorkbenchCore;\n renderParamField?: CommandParamFieldRenderer;\n}\n\nconst SIDENAV_PANEL_ID = \"sidenav\";\n\nconst SIDENAV_DEFAULT_SIZE_PX = 250;\nconst SIDENAV_MIN_SIZE_PX = 200;\nconst CONTENT_MIN_SIZE_PX = 320;\n\nconst resolveSidenavSize = (workbench: WorkbenchCore, persistedSize: number | undefined) => {\n const regionSize = workbench.layout.getRegionSize(\"sidenav\");\n\n return {\n defaultPx: persistedSize ?? regionSize?.defaultPx ?? SIDENAV_DEFAULT_SIZE_PX,\n minPx: regionSize?.minPx ?? SIDENAV_MIN_SIZE_PX,\n maxPx: regionSize?.maxPx,\n };\n};\n\nconst createSidePanelHost = () => {\n if (typeof document === \"undefined\") return null;\n const host = document.createElement(\"div\");\n host.style.display = \"contents\";\n host.dataset.workbenchSidePanelHost = \"\";\n return host;\n};\n\nexport const resolveActiveSidePanelSlot = (input: {\n floatingPanelsAllowed: boolean;\n mounted: boolean;\n mode: \"attached\" | \"floating\" | \"closed\";\n attachedSlot: HTMLDivElement | null;\n floatingSlot: HTMLDivElement | null;\n}) => {\n if (!input.mounted) return null;\n if (input.mode === \"floating\") return input.floatingPanelsAllowed ? input.floatingSlot : input.attachedSlot;\n return input.attachedSlot;\n};\n\nconst useWorkbenchLayoutFlags = (workbench: WorkbenchCore) => {\n return {\n hasNavWidgets: useWorkbenchRegionContent(workbench, \"nav\"),\n hasActivityBarWidgets: useWorkbenchRegionContent(workbench, \"activity\"),\n hasSidenavHeaderWidgets: useWorkbenchRegionContent(workbench, \"sidenav-header\"),\n hasSidenavWidgets: useWorkbenchRegionContent(workbench, \"sidenav\"),\n hasSecondaryHeaderWidgets: useWorkbenchRegionContent(workbench, \"secondary-header\"),\n hasSecondaryWidgets: useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true }),\n hasSideHeaderWidgets: useWorkbenchRegionContent(workbench, \"side-header\"),\n hasSideWidgets: useWorkbenchRegionContent(workbench, \"side\", { locationScoped: true }),\n hasStatusWidgets: useWorkbenchRegionContent(workbench, \"status\"),\n };\n};\n\ninterface WorkbenchRegionControlsInput {\n workbench: WorkbenchCore;\n showSidenav: boolean;\n sidenavCollapsible: boolean;\n sidenavOpen: boolean;\n showSecondaryPanel: boolean;\n secondaryPanelCollapsible: boolean;\n secondaryPanelOpen: boolean;\n hasSidePanel: boolean;\n sidePanelMode: \"attached\" | \"floating\" | \"closed\";\n setPanelOpen: (region: WorkbenchPanelRegionId, open: boolean) => void;\n}\n\nconst createWorkbenchRegionControls = (input: WorkbenchRegionControlsInput) => {\n const controls: WorkbenchNavRegionControl[] = [];\n\n if (input.showSidenav && input.sidenavCollapsible && !input.sidenavOpen) {\n controls.push({\n id: \"sidenav\",\n label: \"Show Sidenav\",\n icon: \"PanelLeft\",\n open: false,\n onToggle: () => input.setPanelOpen(SIDENAV_PANEL_ID, true),\n });\n }\n\n if (input.showSecondaryPanel && input.secondaryPanelCollapsible) {\n controls.push({\n id: \"secondary\",\n label: input.secondaryPanelOpen ? \"Hide Secondary Panel\" : \"Show Secondary Panel\",\n icon: \"PanelBottom\",\n open: input.secondaryPanelOpen,\n onToggle: () => input.setPanelOpen(\"secondary\", !input.secondaryPanelOpen),\n });\n }\n\n if (input.hasSidePanel) {\n const open = input.sidePanelMode === \"attached\";\n controls.push({\n id: \"side\",\n label: open ? \"Hide Side Panel\" : \"Show Side Panel\",\n icon: \"PanelRight\",\n open,\n onToggle: () => input.workbench.sidePanel.setMode(open ? \"closed\" : \"attached\"),\n });\n }\n\n return controls;\n};\n\nconst WorkbenchContent = (props: WorkbenchProps) => {\n const { workbench, renderParamField } = props;\n const [sidenavContextActions, setSidenavContextActions] = useState<ResourceContextAction[]>([]);\n installWorkbenchTreeRenderer(workbench, {\n renderParamField,\n onSidenavContextActionsChange: setSidenavContextActions,\n });\n installWorkbenchKanbanRenderer(workbench);\n installWorkbenchDataTableRenderer(workbench);\n installWorkbenchFileRenderer(workbench);\n installWorkbenchControlsRenderer(workbench);\n const [attachedSidePanelSlot, setAttachedSidePanelSlot] = useState<HTMLDivElement | null>(null);\n const [floatingSidePanelSlot, setFloatingSidePanelSlot] = useState<HTMLDivElement | null>(null);\n const sidePanelHostRef = useRef<HTMLDivElement | null>(null);\n if (!sidePanelHostRef.current) sidePanelHostRef.current = createSidePanelHost();\n\n const sidePanelMode = useWorkbenchStore(workbench.sidePanel.store, (state) => state.mode);\n const paletteOpen = useWorkbenchStore(workbench.commandPalette.store, (state) => state.open);\n const paletteInitialQuery = useWorkbenchStore(workbench.commandPalette.store, (state) => state.initialQuery);\n const sidenavOpen = useWorkbenchStore(\n workbench.panels.store,\n (state) => state.openByRegionId[SIDENAV_PANEL_ID] ?? true,\n );\n const secondaryPanelOpen = useWorkbenchStore(\n workbench.panels.store,\n (state) => state.openByRegionId.secondary ?? true,\n );\n const secondaryPanelCollapsible = useWorkbenchStore(workbench.layout.store, () =>\n resolvePanelCollapsible(workbench, \"secondary-header\", \"secondary\"),\n );\n const hasSecondaryPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const hasSidePanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"side\");\n const floatingPanelsAllowed = useWorkbenchStore(workbench.layout.store, (state) =>\n allowsWorkbenchFloatingPanels(state.layout, Object.values(state.widgets)),\n );\n\n const {\n hasActivityBarWidgets,\n hasNavWidgets,\n hasSideHeaderWidgets,\n hasSideWidgets,\n hasSidenavHeaderWidgets,\n hasSidenavWidgets,\n hasSecondaryHeaderWidgets,\n hasSecondaryWidgets,\n hasStatusWidgets,\n } = useWorkbenchLayoutFlags(workbench);\n const hasSidePanel = hasSideHeaderWidgets || hasSideWidgets || hasSidePanelHeader;\n const showSidenav = hasSidenavWidgets || hasSidenavHeaderWidgets;\n const sidenavCollapsible = resolvePanelCollapsible(workbench, \"sidenav-header\", \"sidenav\");\n const showSecondaryPanel = hasSecondaryHeaderWidgets || hasSecondaryWidgets || hasSecondaryPanelHeader;\n const persistedSidenavSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.sidenav.size);\n const sidenavSize = resolveSidenavSize(workbench, persistedSidenavSize);\n const showAttachedSidePanel = hasSidePanel && sidePanelMode === \"attached\";\n // Closed removes the Side Panel's footprint, not its live region. Keeping the\n // portal in the hidden attached slot preserves provider and renderer state.\n const mountSidePanel = hasSidePanel;\n const setPanelOpen = (region: WorkbenchPanelRegionId, open: boolean) =>\n setWorkbenchPanelOpen(workbench, region, open);\n const regionControls = createWorkbenchRegionControls({\n workbench,\n showSidenav,\n sidenavCollapsible,\n sidenavOpen,\n showSecondaryPanel,\n secondaryPanelCollapsible,\n secondaryPanelOpen,\n hasSidePanel,\n sidePanelMode,\n setPanelOpen,\n });\n\n const sideHeader = <WorkbenchSidePanelRegionHeader workbench={workbench} hasSideHeader={hasSideHeaderWidgets} />;\n const activeSidePanelSlot = resolveActiveSidePanelSlot({\n floatingPanelsAllowed,\n mounted: mountSidePanel,\n mode: sidePanelMode,\n attachedSlot: attachedSidePanelSlot,\n floatingSlot: floatingSidePanelSlot,\n });\n\n useLayoutEffect(() => {\n const host = sidePanelHostRef.current;\n if (!host) return;\n if (activeSidePanelSlot) {\n if (host.parentNode !== activeSidePanelSlot) activeSidePanelSlot.appendChild(host);\n } else if (!mountSidePanel && host.parentNode) {\n host.parentNode.removeChild(host);\n }\n }, [activeSidePanelSlot, mountSidePanel]);\n\n const contentWithHeader = (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <WorkbenchNavChrome workbench={workbench} hasNav={hasNavWidgets} regionControls={regionControls} />\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchBody workbench={workbench} />\n </Flex>\n </Flex>\n );\n\n const contentWithSidenav = showSidenav ? (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <WorkbenchSidenav\n workbench={workbench}\n hasHeader={hasSidenavHeaderWidgets}\n contextActions={sidenavContextActions}\n />\n }\n contentPanel={contentWithHeader}\n collapsed={!sidenavOpen && sidenavCollapsible}\n collapsible={sidenavCollapsible}\n defaultSizePx={sidenavSize.defaultPx}\n minSizePx={sidenavSize.minPx}\n maxSizePx={sidenavSize.maxPx}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n resizeLabel=\"Resize sidenav\"\n showResizeSeparator\n onSizeChange={(width) => workbench.layout.setRegionSize(\"sidenav\", width)}\n onCollapsedChange={(collapsed) => {\n if (!collapsed || sidenavCollapsible) setPanelOpen(SIDENAV_PANEL_ID, !collapsed);\n }}\n />\n ) : (\n contentWithHeader\n );\n\n const contentFrame = (\n <Flex position=\"relative\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg={workbenchBackgrounds.main} color=\"fg\">\n {hasActivityBarWidgets ? <WorkbenchActivityBar workbench={workbench} /> : null}\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\" position=\"relative\">\n {contentWithSidenav}\n </Flex>\n <WorkbenchOverlayLayer workbench={workbench} />\n </Flex>\n );\n\n return (\n <WorkbenchThemeScope h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" position=\"relative\" w=\"full\">\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchSidePanelBoundary\n workbench={workbench}\n showAttachedSidePanel={showAttachedSidePanel}\n contentFrame={contentFrame}\n sideHeader={sideHeader}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n onAttachedSlotChange={setAttachedSidePanelSlot}\n />\n </Flex>\n {hasStatusWidgets ? <WorkbenchStatusBar workbench={workbench} /> : null}\n {hasSidePanel && floatingPanelsAllowed ? (\n <WorkbenchFloatingSidePanel\n workbench={workbench}\n contentSlotRef={setFloatingSidePanelSlot}\n bottomOffset={hasStatusWidgets ? WORKBENCH_STATUS_BAR_HEIGHT : undefined}\n header={sideHeader}\n />\n ) : null}\n <WorkbenchCommandPalette\n workbench={workbench}\n open={paletteOpen}\n initialQuery={paletteInitialQuery}\n renderParamField={renderParamField}\n onClose={() => workbench.commandPalette.close()}\n />\n <WorkbenchKeybindingDispatcher workbench={workbench} />\n <WorkbenchNotificationHost workbench={workbench} />\n </Flex>\n <WorkbenchSidePanelRegionPortal\n workbench={workbench}\n hasSidePanel={hasSidePanel}\n mounted={mountSidePanel}\n sidePanelHost={sidePanelHostRef.current}\n />\n {/* Kept-alive renderer portals sit at the workbench root so their hosts\n stay stable while widget slots and Side Panel containers move. */}\n <WorkbenchKeepAliveLayer workbench={workbench} />\n </WorkbenchThemeScope>\n );\n};\n\nexport const Workbench = (props: WorkbenchProps) => {\n const themePreferences = useWorkbenchThemePreferences(props.workbench);\n const fileIconThemePreferences = useWorkbenchFileIconThemePreferences(props.workbench);\n\n return (\n <WorkbenchThemeProvider themePreferences={themePreferences} fileIconThemePreferences={fileIconThemePreferences}>\n <WorkbenchContent {...props} />\n <Toaster />\n </WorkbenchThemeProvider>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport type { Disposable, WorkbenchCore, WorkbenchModuleContribution } from \"../../core\";\n\nexport interface WorkbenchModuleHostRegistration {\n disposable: Disposable;\n}\n\nexport interface WorkbenchModuleHostProps {\n workbench: WorkbenchCore;\n modules: readonly WorkbenchModuleContribution[];\n}\n\nexport const disposeWorkbenchModuleHostRegistrations = (\n registrations: Map<string, WorkbenchModuleHostRegistration>,\n) => {\n for (const registration of registrations.values()) registration.disposable.dispose();\n registrations.clear();\n};\n\nexport const syncWorkbenchModuleHostRegistrations = (\n workbench: WorkbenchCore,\n registrations: Map<string, WorkbenchModuleHostRegistration>,\n modules: readonly WorkbenchModuleContribution[],\n) => {\n const moduleIds = new Set(modules.map((module) => module.id));\n\n for (const [id, registration] of registrations) {\n if (!moduleIds.has(id)) {\n registration.disposable.dispose();\n registrations.delete(id);\n }\n }\n\n for (const module of modules) {\n if (!registrations.has(module.id)) {\n registrations.set(module.id, { disposable: workbench.registerModule(module) });\n }\n }\n};\n\nexport const WorkbenchModuleHost = (props: WorkbenchModuleHostProps) => {\n const { workbench, modules } = props;\n const registeredWorkbench = useRef(workbench);\n const registrations = useRef(new Map<string, WorkbenchModuleHostRegistration>());\n\n useEffect(() => {\n if (registeredWorkbench.current !== workbench) {\n disposeWorkbenchModuleHostRegistrations(registrations.current);\n registeredWorkbench.current = workbench;\n }\n\n syncWorkbenchModuleHostRegistrations(workbench, registrations.current, modules);\n }, [modules, workbench]);\n\n useEffect(() => () => disposeWorkbenchModuleHostRegistrations(registrations.current), []);\n\n return null;\n};\n"],"names":["useWorkbenchStore","store","selector","useStore","getSessionStatus","item","resource","metadata","status","undefined","WorkbenchBreadcrumbIcon","props","$","_c","t0","indicator","kind","t1","jsx","SessionIndicator","icon","Text","WorkbenchIcon","WorkbenchBreadcrumbTitle","title","t2","HStack","buildWorkbenchBreadcrumbItems","items","map","url","onClick","WorkbenchBreadcrumbView","workbench","breadcrumbs","_temp","length","Breadcrumb","state","chakraBackgrounds","activityBar","sidenav","main","panel","statusBar","vscodeColor","token","fallback","replaceAll","workbenchBackgrounds","widget","workbenchRegionBackgrounds","nav","activity","secondary","overlay","side","workbenchCommandPaletteBackground","getWorkbenchRegionBackground","region","humanize","value","spaced","replace","trim","charAt","toUpperCase","slice","isRecord","Array","isArray","stringifyEditableValue","String","JSON","stringify","toIdentifierPrefix","_match","char","toLowerCase","metadataString","key","resourceContextValue","entry","context","metadataValue","id","uri","type","resourceType","dedupeOptions","options","seen","Set","filter","option","has","add","hasCommandParameters","params","Object","keys","listCommandParamEntries","entries","param","label","buildCommandParamInitialValues","baseArgs","base","values","raw","hasOwn","defaultValue","isEmptyValue","parseJsonValue","parse","Error","normalizeValue","numberValue","Number","isFinite","split","Boolean","normalizeCommandParamValues","normalized","required","mergeCommandParamArgs","SEARCH_MODE_ID","COMMAND_MODE_ID","THEME_MODE_ID","MODE_VIEW_ID","workbenchPaletteModes","inputPrefix","isThemePaletteView","view","isModePaletteView","isPickerPaletteView","getPaletteViewMode","getPaletteViewModes","getPaletteInitialActiveIndex","input","themeInitialActiveIndex","modeInitialActiveIndex","getPaletteInputIcon","mode","Terminal","Search","getPalettePlaceholder","RESOURCE_QUERY_LIMIT","RESOURCE_QUERY_DEBOUNCE_MS","useWorkbenchCommandPaletteResourceEntries","query","open","onClose","refreshToken","commandPaletteResources","Symbol","for","setEntries","useState","cancelled","handle","setTimeout","queryProviders","limit","then","groups","flatMap","group","results","result","searchText","keywords","join","description","onActivate","Promise","resolve","activate","catch","_temp2","clearTimeout","useEffect","getStringValue","getStringArrayValue","FieldLabel","t3","jsxs","Stack","TextParamField","event","onChange","target","disabled","Input","t4","NumberParamField","LongTextParamField","Textarea","SelectParamField","find","selectedLabel","ChevronDown","t5","Button","t6","option_0","CircleDot","Circle","t7","Menu","t8","t9","MultiSelectParamField","T0","T1","bb0","selected","JsonParamField","toggle","optionValue","checked","from","Checkbox","includes","details","BooleanParamField","CommandParamField","isFilled","CommandParamsDialog","request","renderParamField","onRun","setValues","error","setError","submitting","setSubmitting","record","command","args","close","setValue","current","run","commandId","caught","message","isValid","every","Dialog","CloseButton","ScrollArea","p","fieldProps","custom","Fragment","submitLabel","getModeLabel","getModeEntryIndex","activeModeId","modes","index","findIndex","Math","max","createWorkbenchModePaletteEntries","getActiveModeId","listModes","modeId","isSelected","setActiveMode","getPanelLabel","openPanelWidget","openCommandId","commands","executeCommand","source","widgetResource","resourceKinds","canOpen","layout","openPanel","panels","setOpen","setRegionVisible","sidePanel","getMode","setMode","createWorkbenchPanelWidgetPaletteEntries","getPrimaryResource","widgets","listWidgets","getLayout","workbenchPanelRegions","listEligibleSubPanels","panelLabel","createResourceEntry","resources","getKind","resourceUri","openResource","paletteOpenInput","createWorkbenchResourcePaletteEntries","listResources","getThemeIconName","preference","getThemePreferenceLabel","themePreference","getThemePreferenceEntryIndex","themePreferences","THEME_GROUP_LABELS","light","dark","byModeThenLabel","a","b","localeCompare","createWorkbenchThemePreferencePaletteEntries","setThemePreference","sort","rollbackThemePreview","themePreviewRef","preview","baseTheme","getCommandSearchText","category","createShortcutByCommandId","Map","keybindings","listActiveKeybindings","keybinding","getShortcut","binding","PaletteShortcut","getCommandErrorMessage","commandExecutionContext","executePaletteCommand","notifications","show","level","createEntry","action","onRequestParams","shortcutByCommandId","isCommandVisible","shortcut","get","getRecordGroup","getRecordOrder","order","byCommandPaletteGroup","left","right","groupComparison","listCommandRecords","menuPath","listMenuItems","matches","when","getCommand","listCommands","createWorkbenchCommandPaletteEntries","WorkbenchCommandPalette","workbenchCommandPaletteMenuPath","initialQuery","useThemePreference","commandPalette","useRef","paramsRequest","liveQuery","setLiveQuery","commandPaletteResourceEntries","closePalette","exitPickerView","commitThemePreview","commandEntries","requestParams","resourceEntries","themeEntries","modeEntries","panelWidgetEntries","isThemeView","initialActiveIndex","activeViewMode","activeViewModes","Box","position","inset","alignItems","justifyContent","h","minH","padding","w","background","Palette","themeEntry","ctx","setQuery","setActiveIndex","clearParams","WorkbenchFocusRegion","boxProps","children","activeRegion","focus","ref","element","contains","document","activeElement","preventScroll","setActiveRegion","menuPathKey","path","workbenchResourceMetadataContextKeyPrefix","workbenchResourceMetadataContextKey","isWorkbenchResourceContextKey","workbenchResourceKindContextKey","workbenchResourceIdContextKey","startsWith","omitWorkbenchResourceContextValues","resolveContextValues","contextValues","createWorkbenchResourceContextValues","listWorkbenchMenuItemsFromState","itemsByPath","leftOrder","rightOrder","byContributionPriority","matchesContextExpression","handler","isVisible","iconSrc","overflowLabel","readOnly","isEnabled","listWorkbenchMenuItems","menuStore","getState","isKernelAction","isOverflowAction","withLeadingSeparator","enabled","first","rest","separatorBefore","resolveOverflowItems","regularItems","kernelItems","resolveWorkbenchHeaderActionGroups","inlineItems","overflowItems","resolveWorkbenchHeaderOverflowLabel","WorkbenchInlineHeaderAction","controlSize","onSelect","IconButton","Tooltip","WorkbenchHeaderActions","_temp3","_temp4","_temp5","item_0","Portal","item_1","ListRow","state_0","state_1","state_2","getAnchorResource","WorkbenchClaimContext","createContext","useWorkbenchClaim","useContext","WorkbenchKeepAliveLayer","renderers","hosts","claims","renderer","keepAlive","host","createPortal","render","useTanStackWorkbenchHotkeys","registrations","hotkeys","ignoreInputs","preventDefault","stopPropagation","useHotkeys","registration","hotkey","callback","execute","keyAliases","alt","cmd","ctrl","control","meta","mod","shift","normalizeWorkbenchKeybindingStep","part","trimmed","alias","normalizeWorkbenchKeybinding","steps","getKeybindingSteps","createWorkbenchHotkeyRegistrations","commandIds","allowedCommandIds","isCommandEnabled","WorkbenchKeybindingDispatcher","commandContextValues","snapshot","isRegisteredCommandVisible","executeTreeAction","resolvedArgs","runTreeAction","onCommandError","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","createMenuIcon","display","width","height","objectFit","createMenuEndContent","external","isKernelMenuAction","createTreeMenuItemGroups","shortcuts","k","nextArgs","sourceCommandId","endContent","onAction","push","createTreeActionMenuItems","actions","createTreeContextMenuItems","actionItems","visibleRegularItems","createTreeActionItems","tooltip","toResourceContextAction","Icon","isDisabled","createWorkbenchResourceActions","resourceContextMenuPath","useWorkbenchResourceActionResolver","executeNotificationAction","WorkbenchNotificationHost","shownNotificationIds","showNotification","notification","toastAction","toastOptions","closable","onStatusChange","dismiss","toaster","update","create","notification_0","listNotifications","subscription","subscribe","delete","dispose","clear","useWorkbenchLocationResource","activeLocationWidgetId","useWorkbenchActiveModeId","WorkbenchWidgetFallback","Center","WorkbenchRenderedWidgetFrame","WorkbenchKeepAliveSlot","rendererId","workbenchInput","slotRef","slot","disposable","claim","useLayoutEffect","noopRefresh","renderWidgetBody","WorkbenchWidgetHost","placement","getWidget","contributionId","toPanelContribution","instance","toPanelInstance","refresh","horizontalScrollRegions","panelMenuRegionIds","workbenchPanelMenuRegions","regions","sidePanelRegionIds","verticalContentProps","flexDirection","horizontalContentProps","getActivePlacement","activeWidgetId","widgetId","resolveRenderedRegionPlacements","activePlacement","mountStrategy","resolveRegionPlacementRenderState","active","pointerEvents","visibility","createPlaceholderPlacement","placeholder","WorkbenchRegion","transparent","locationResource","currentRegionState","registeredWidgets","activeSubPanel","getActiveWorkbenchSubPanel","getWorkbenchPanelForMenuRegion","ignoreOwnerResourceUri","activeLocationPanel","getActiveWorkbenchLocationPanel","regionState","contribution","matchesWorkbenchModeEligibility","matchesWorkbenchLocationEligibility","matchesWorkbenchPanelMenuOwner","locationPanel","subPanel","globalActiveWidgetId","getPlaceholder","placement_0","renderedPlacements","scrollsHorizontally","activateOnInteract","activatePanel","Flex","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","renderedPlacement","renderState","t21","t22","WorkbenchPanelAddMenu","hydrating","history","triggerRef","PANEL_HEADER_CONTROL_SIZE","trigger","getAnchorElement","toTabKey","regionId","resolveDisplayedActiveWidgetId","visiblePlacements","some","isPlacementCloseable","isWorkbenchPanelRegion","panelRegion","shouldShowRegionTabs","placements","hasAddAction","hasLeadingActions","shouldShowPanelHeader","hasOpenSubPanels","hasEligibleSubPanels","hasPanelMenus","hasHeaderActions","isSubPanelPlacement","role","isPlacementEligibleForRegion","matchesWorkbenchPanelPlacementLocation","ignoreResourceLocation","useWorkbenchPanelHeaderVisible","layoutState","isWorkbenchModePanelAvailable","eligibleSubPanels","hasMultipleLocations","openSubPanels","menuRegions","menuRegion","placement_1","workbenchRegionTabLeadingMenuPath","useWorkbenchRegionTabsVisible","_temp6","_temp7","_temp8","modePanel","getWorkbenchModePanelForRegion","locationTabs","leadingItems","WorkbenchTabRenderer","useRegionTabBehavior","nextWidgetId","previousWidgetId","sortable","customMenuRendererId","tab","isPreview","tabRetention","hasCustomMenu","hasContextMenu","sortableState","useSortable","openMenu","setOpenMenu","x","y","anchor","setAnchor","menu","rect","currentTarget","getBoundingClientRect","openTabMenu","event_0","openCustomMenu","event_1","openContextMenu","menu_0","setMenuOpen","event_2","altKey","reorderPanel","beforeWidgetId","afterWidgetId","reorderWithKeyboard","WorkbenchRegionTabMenuSurface","mainAxis","getAnchorRect","offset","WorkbenchRegionTabContextMenu","updatePanel","strategy","WorkbenchRegionTabLabel","contentRendererId","WorkbenchRegionTabCloseButton","isActive","opacity","bg","color","closePanel","WorkbenchRegionTabMenus","behavior","open_0","WorkbenchRegionTab","isDragging","listeners","setNodeRef","transform","transition","menuOpen","CSS","Transform","toString","Tabs","SortableRegionTabList","leadingActions","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","T2","reorderable","over","activeIndex","overIndex","reorderWidget","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","List","placement_3","reorderableIndex","candidate","placement_2","WorkbenchRegionTabs","visibilityStorageKey","historyHydrating","subPanelPlacements","tabStore","useTabVisibilityStore","tabOverrides","getKey","visibleSubPanels","filterVisibleTabs","visibleSubPanelIds","locationPanels","location","viewport","setViewport","placement_4","iconName","resolvePlacementIcon","hiddenByDefault","toggleTab","reset","menuActions","buildTabVisibilityMenuActions","onToggleTab","onResetAll","visibleIcon","hiddenIcon","resetIcon","hasVisibilityMenu","showTabs","Element","closest","openVisibilityMenu","onWheel","deltaY","scrollWidth","clientWidth","scrollLeft","addEventListener","passive","removeEventListener","onSelectLeadingItem","_temp9","placement_5","setRegionActiveWidget","PANEL_HEADER_TAB_SIZE","details_0","_temp0","state_3","state_4","resolveDataTableRendererColumns","contributionColumns","columns","firstRow","rows","buildDataTableRendererData","rowByData","WeakMap","data","row","fromEntries","column","set","resolveDataTableRendererSelectionActions","destructive","rendererRow","resolveDataTableRendererStorageKey","resourceKey","instanceId","initialResult","WorkbenchDataTableView","setResult","loading","setLoading","requestRef","runQuery","requestId","executeQuery","next","refreshSubscription","onDidRefreshDataTableRenderer","dataTableRendererId","model","labels","descriptions","icons","stats","rowActions","selectionActions","data_0","row_0","onRowClick","replaceActive","openRow","emptyTitle","emptyDescription","EmptyState","data_1","_temp1","_temp10","data_2","row_1","initialPageSize","pageSizeOptions","selectionMode","DataTable","column_0","column_1","column_2","column_3","column_4","column_5","stat","column_6","column_7","column_8","column_9","hidden","column_10","BOOLEAN_OPTIONS","name","at","toOptions","toParam","schema","default","enum","singleLine","multiSelect","preferenceSchemaToParams","paramValueToPreference","toName","WorkbenchPreferencesForm","preferences","names","resolveScopeId","staged","setStaged","formKey","setFormKey","scope","scopeId","scopeRef","getSchema","getValue","schemaByName","name_0","schema_0","persist","value_0","handleChange","name_1","value_1","save","discard","hasStaged","ParamEditor","key_0","activeNodeIds","ids","uniqueIds","resolveTreeNodeResourceUri","node","listTreeNodes","nodes","childrenByNodeId","listSectionNodes","sections","section","resolveActiveResourceNodeIds","resourceUris","findSectionNode","nodeId","resolveTreeListSelection","activeNodeId","activeResource","selectedNodeId","activeResourceUris","getWorkbenchSelectionResourceUris","activeResourceNodeId","selectedNode","selectedResourceUri","canVirtualizeTreeNode","isContainer","canVirtualizeTreeSections","findNode","child","findNodeInSections","wrapTreeNodeIcon","iconTooltip","resolveTreeNodeIcon","iconElement","resolveTreeNodeNavigationIntent","payload","resolveTreeNodeResource","renderShortcutEndContent","resolveTreeNodeEndContent","additions","diffAdditions","deletions","diffDeletions","DiffBubble","toTreeListSectionEmptyNode","emptyState","rowVariant","toTreeListNode","navigationIntent","commandContext","contextMenuItems","contextMenuActions","contextMenuPath","menuItems","iconColor","canHide","canReorder","suppressContextMenus","menuPlacement","collapsible","isNavigable","toTreeListSection","emptyNode","TREE_SKELETON_WIDTHS","TreeViewSkeleton","TreeViewBody","moduleLoading","backgroundContextActions","draggable","customizationAvailable","expandedNodeIds","expandedSectionIds","scrollRef","onToggleSection","onToggleNode","onReorderSections","onReorderNodes","onNavigate","TreeList","Skeleton","isUnregisteredTreeError","trees","treeId","getTreeRenderer","shouldShowTreeLoading","loadedTreeId","treeViewId","expandDefaultTreeSections","tree","sectionId","defaultExpandedSectionIds","setSectionExpanded","loadTreeData","header","body","footer","all","getHeader","getBody","getFooter","shouldSelectTreeNodeForNavigationTarget","targets","HEADER_SECTION_ID","FOOTER_SECTION_ID","toStringLabel","isCustomizableNode","visibilityContextIcon","effective","buildNodeVisibilityContextMenuItem","nodeOverrides","resolveVisibility","existingItems","addRegionNodeVisibilityContextMenuItems","changed","useTreeViewCustomization","storageKey","sectionOverrides","useTreeListVisibilityStore","toggleSection","toggleNode","resetVisibility","sectionOrder","useTreeListOrderStore","nodeOrderBySection","setSectionOrder","setNodeOrder","resetOrder","visibleFooterNodes","visibleHeaderNodes","visibleSections","suppressNodeContextMenus","footerNodes","headerNodes","visibilityActions","orderedSections","applyTreeListOrder","orderedHeaderNodes","orderedFooterNodes","includeNodeContextMenus","filterVisibleNodes","filterVisibleSections","buildTreeVisibilityMenuActions","_temp11","_temp12","customizationRevision","nextNodeIds","nextNodeIds_0","onReorderHeaderNodes","onReorderFooterNodes","state_5","state_6","state_7","state_8","node_0","node_1","EMPTY_TREE_STATE","regionSection","resolveActivePlacement","resolveTreeActiveResource","useSidenavContextActions","revision","actionsRef","TreeParamsDialog","navigateTreeNode","intent","setSelectedNode","navigation","openTarget","onOpenResourceError","useTreeData","viewId","setHeader","setBody","setFooter","setChildrenByNodeId","loadedTreeIdRef","loadRevisionRef","loadTree","loadRevision","onDidRefresh","WorkbenchTreeView","onSidenavContextActionsChange","treeRenderer","treeState","treeStore","statesByTreeId","setParamsRequest","rawHeaderSection","rawSections","adapterContext","rawFooterSection","expanded","setNodeExpanded","getChildren","expanded_0","navigationContext","headerSections","footerSections","bodyActiveNodeId","regionActiveNodeId","_sectionId","style","overflowX","minWidth","minHeight","t23","t24","t25","t26","_sectionId_0","t27","t28","t29","useSettingsRevision","settings","listener","useSyncExternalStore","Centered","ScrollableSettingsContent","CollectionItemView","itemId","setState","alive","Spinner","renderItem","SettingsSurfacePanel","panelId","getPanel","gap","SettingsOverlay","navTreeId","content","ResizableSplitLayout","SETTINGS_RESOURCE_KIND","settingsPanelResource","settingsItemResource","isSettingsScopeVisible","hasProjectScope","FALLBACK_SECTION_ID","toTreeActions","collectionItemNode","itemLabel","itemIcon","orderGroupKeys","indexOf","POSITIVE_INFINITY","collectionChildren","groupBy","byKey","list","panelToNode","buildSettingsTreeBody","listSections","sectionsById","listPanels","bySection","renderOrder","sectionPanels","WORKBENCH_SETTINGS_WIDGET_ID","WORKBENCH_SETTINGS_NAV_WIDGET_ID","WORKBENCH_SETTINGS_PANEL_WIDGET_ID","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","WIDGET_ID","RENDERER_ID","PANEL_RENDERER_ID","NAV_TREE_ID","createWorkbenchSettingsModule","registerTreeRenderer","registerPanel","singleton","registerRenderer","config","size","scrollBehavior","contentHeight","registerKind","standardResourceIcons","registerPresenter","registerCommand","resolvePanelCollapsible","getRegionCollapsible","setWorkbenchPanelOpen","PANEL_CONTENT_MIN_SIZE_PX","PANEL_MENU_RESIZE_HANDLE_SIZE_PX","PANEL_MENU_COLLAPSE_THRESHOLD_PX","shouldCollapseWorkbenchPanelMenus","panelWidth","canAttachWorkbenchPanelMenu","menuMinSizes","attachedMenuMinSizes","targetMenuMinSize","requiredWidth","reduce","total","PANEL_MENU_SIZE","defaultPx","minPx","maxPx","panelLabels","resolveRegionSize","regionSize","getWorkbenchPanelMenuLabel","useWorkbenchPanelMenu","responsiveCollapsed","panelStateKey","openByRegionId","getRegionSize","collapsed","onOpen","onCollapsedChange","WorkbenchPanelMenu","AttachedMenu","addPanelMenu","setRegionSize","WorkbenchPanelMenuLayout","useWorkbenchPanelWidth","withRight","setWidth","querySelector","measure","observer","ResizeObserver","observe","disconnect","WorkbenchPanelMenuOpener","canAttach","Header","WorkbenchPanelMenuOpeners","views","closedMenus","view_0","candidate_0","floatingPanelBottom","bottomOffset","launcherBottom","WorkbenchSidePanelTitle","WorkbenchSidePanelHeader","WorkbenchAttachedSidePanel","contentSlotRef","Minimize2","AttachedPanel","WorkbenchFloatingSidePanel","bottom","MessageCircle","BubbleButton","BubblePanel","workspacePathFromResource","workspacePath","withTerminalRequestDefaults","cwd","createControllerTerminalBridge","terminal","openSession","sessionId","getResource","getTitle","write","resize","cols","kill","signal","onData","onExit","onError","WorkbenchTerminalPanel","placementRef","bridge","setSessionId","processTitle","sessionsById","isAvailable","test","WORKBENCH_TERMINAL_WIDGET_ID","WORKBENCH_TERMINAL_OPEN_COMMAND_ID","LAUNCHER_RENDERER_ID","TERMINAL_PANEL_SIZE","WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID","ensureTerminalLauncher","existing","pinned","terminalTitlePattern","nextTerminalIndexes","getInitialTerminalIndex","terminalPlacements","titleIndexes","exec","parseInt","getNextTerminalTitle","nextIndex","hasWorkspacePath","getTerminalResource","getActiveResource","primaryResource","openWorkbenchTerminal","reveal","openInput","createWorkbenchTerminalModule","disposables","reuse","eligibleLocations","_args","useWorkbenchThemePreferences","contributed","themes","defaultThemePreferences","WorkbenchThemeProviderContext","WorkbenchThemeProvider","initialThemePreference","fileIconThemePreferences","ChakraProvider","psTheme","FileIconThemePreferenceProvider","ThemePreferenceProvider","WorkbenchThemeScope","stringValue","booleanValue","resolveOverlayConfig","overlayConfig","closeOnEscape","closeOnInteractOutside","modal","trapFocus","motionPreset","contentMaxHeight","contentMinHeight","closeTriggerTop","resolveOverlayDialogConfig","closeable","resolveOverlayDialogRenderState","exitingPlacement","WorkbenchOverlayFallback","WorkbenchOverlayLayer","overlayRegion","setExitingPlacement","dialogRootConfig","canCloseOverlay","closeLabel","handleOpenChange","handleExitComplete","WorkbenchBreadcrumbResourceActions","resolveActions","ResourceActionMenu","WorkbenchRegionControl","onToggle","WorkbenchNavigationControls","regionControls","canNavigateBack","cursor","canNavigateForward","goBack","goForward","WorkbenchRegionControls","controls","WorkbenchNavChrome","hasNav","sidenavControls","trailingRegionControls","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","control_0","openResourceRef","encodeURIComponent","initialState","WorkbenchControlsView","defaultValues","onDidRefreshControlsRenderer","controlsRendererId","updateValue","apply","hasControls","showFooter","prev","values_0","controlId","installed","WeakSet","installWorkbenchControlsRenderer","setControlsRendererImplementation","getControlsRenderer","createElement","installWorkbenchDataTableRenderer","setDataTableRendererImplementation","getDataTableRenderer","loadWorkbenchFileRendererView","module","WorkbenchFileRendererView","lazy","preloadCodeEditor","createWorkbenchFileRendererInstaller","preloadView","setFileRendererImplementation","fileRendererId","getFileRenderer","Suspense","installWorkbenchFileRenderer","window","createKanbanViewQuerySequencer","latestQueryId","isLatest","queryId","executeKanbanViewQuery","resolveProjectScope","projectId","favoriteScope","resolveKanbanRendererStorageKey","kanbanRendererId","baseKey","projectScope","kanbanViewScrollContentProps","WorkbenchKanbanViewFrame","usesInternalScroll","noopSubscribe","isResourceRef","useResolvedContributionAttributes","attributes","isAttributesSource","getSnapshot","mergeKanbanViewRowActions","resourceActions","contributionActions","resourceActionKeys","resourceCommandIds","WorkbenchKanbanView","resolveResourceActions","defaultActiveViewId","defaultFilters","defaultSettings","defaultViews","filters","activeViewId","useKanbanRendererStore","setRows","querySequencer","onDidRefreshKanbanRenderer","handleOpenRow","getRowContextMenuActions","viewMode","createRow","getBoardColumnConfig","hideToolbar","onAttributeChange","onColumnAction","onCreateRow","onReorder","KanbanRenderer","installWorkbenchKanbanRenderer","setKanbanRendererImplementation","getKanbanRenderer","installWorkbenchTreeRenderer","installation","setTreeRendererImplementation","useWorkbenchFileIconThemePreferences","fileIconThemes","useWorkbenchRegionContent","panelAvailable","placeholders","locationScoped","WorkbenchHeaderBorder","getRegionHeaderBorderBottom","useSecondaryPanelView","hasContent","hasHeader","hasPanelHeader","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","WorkbenchSecondaryPanel","hasSecondaryHeader","SECONDARY_PANEL_SIZE","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","SECONDARY_PANEL_RESIZE_HANDLE_SIZE_PX","mainHeaderTrailingMenuPath","headerTrailingMenuPath","persistedSize","MainHeaderBar","hasMainContentTabs","WorkbenchBody","persistedSecondarySize","secondaryPanelSize","mainRegion","mainPanelWithMenus","Grid","mainContent","WorkbenchSidenav","contextActions","hasContentTabs","showHeaderBar","ResourceContextMenu","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchActivityBar","WorkbenchStatusBar","ATTACHED_PANEL_DEFAULT_SIZE_PX","ATTACHED_PANEL_MIN_SIZE_PX","WorkbenchSidePanelRegionPortal","hasSidePanel","mounted","sidePanelHost","WorkbenchSidePanelRegionHeader","hasSideHeader","WorkbenchAttachedSidePanelLayout","attached","contentPanel","contentMinSizePx","onAttachedSlotChange","onCollapse","interactivePointerTargetSelector","hasClosest","shouldFocusWorkbenchKeyboardFrame","focusWorkbenchKeyboardFrame","WorkbenchKeyboardFrame","WorkbenchSidePanelBoundary","showAttachedSidePanel","contentFrame","sideHeader","SIDENAV_PANEL_ID","SIDENAV_DEFAULT_SIZE_PX","SIDENAV_MIN_SIZE_PX","CONTENT_MIN_SIZE_PX","resolveSidenavSize","createSidePanelHost","dataset","workbenchSidePanelHost","resolveActiveSidePanelSlot","floatingPanelsAllowed","floatingSlot","attachedSlot","useWorkbenchLayoutFlags","hasNavWidgets","hasActivityBarWidgets","hasSidenavHeaderWidgets","hasSidenavWidgets","hasSecondaryHeaderWidgets","hasSecondaryWidgets","hasSideHeaderWidgets","hasSideWidgets","hasStatusWidgets","createWorkbenchRegionControls","showSidenav","sidenavCollapsible","sidenavOpen","setPanelOpen","showSecondaryPanel","secondaryPanelCollapsible","secondaryPanelOpen","sidePanelMode","WorkbenchContent","sidenavContextActions","setSidenavContextActions","attachedSidePanelSlot","setAttachedSidePanelSlot","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","paletteOpen","paletteInitialQuery","hasSecondaryPanelHeader","hasSidePanelHeader","allowsWorkbenchFloatingPanels","persistedSidenavSize","sidenavSize","mountSidePanel","activeSidePanelSlot","parentNode","appendChild","removeChild","contentWithHeader","contentWithSidenav","Workbench","Toaster","disposeWorkbenchModuleHostRegistrations","syncWorkbenchModuleHostRegistrations","modules","moduleIds","registerModule","WorkbenchModuleHost","registeredWorkbench"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../src/react/shared/use-workbench-store.ts","../src/react/breadcrumb/breadcrumb-view.tsx","../src/react/shared/use-workbench-composition-panels.ts","../src/react/theme/workbench-theme-background.ts","../src/react/command-palette/command-palette-params.ts","../src/react/command-palette/palette-view.tsx","../src/react/command-palette/command-palette-resources.tsx","../src/react/command-palette/command-param-descriptors.ts","../src/react/command-palette/command-param-field.tsx","../src/react/command-palette/command-params-dialog.tsx","../src/react/command-palette/mode-palette.tsx","../src/react/region/panel-widget-open.ts","../src/react/command-palette/panel-widget-palette.tsx","../src/react/command-palette/resource-palette.tsx","../src/react/command-palette/theme-palette.tsx","../src/react/command-palette/command-palette.tsx","../src/react/focus/focus-region.tsx","../src/react/menus/menu-items.ts","../src/react/header/header-action-items.ts","../src/react/header/header-actions.tsx","../src/react/keep-alive/use-workbench-claim.ts","../src/react/keep-alive/workbench-keep-alive-layer.tsx","../src/react/keybindings/tanstack-hotkey-adapter.ts","../src/react/keybindings/workbench-keybinding-dispatcher.tsx","../src/react/renderers/tree/tree-actions.tsx","../src/react/menus/resource-actions.tsx","../src/react/notifications/notification-host.tsx","../src/react/shared/use-workbench-location-resource.ts","../src/react/region/widget-host.tsx","../src/react/region/region.tsx","../src/react/region/panel-add-menu.tsx","../src/react/region/region-tabs-visibility.ts","../src/react/region/region-tabs-visibility-hooks.ts","../src/react/region/region-tab.tsx","../src/react/region/sortable-region-tab-list.tsx","../src/react/region/region-tabs.tsx","../src/react/renderers/data-table/data-table-view-model.ts","../src/react/renderers/data-table/data-table-view.tsx","../src/react/renderers/settings/preference-schema-to-params.ts","../src/react/renderers/settings/preferences-form.tsx","../src/react/renderers/tree/tree-list-adapter.tsx","../src/react/renderers/tree/tree-view-body.tsx","../src/react/renderers/tree/tree-view-load.ts","../src/react/renderers/tree/tree-view-navigation.ts","../src/react/renderers/tree/use-tree-view-customization.ts","../src/react/renderers/tree/tree-view.tsx","../src/react/settings/use-settings-revision.ts","../src/react/settings/settings-surface-panel.tsx","../src/react/settings/settings-overlay.tsx","../src/react/settings/settings-resources.ts","../src/react/settings/settings-tree.ts","../src/react/settings/settings-module.tsx","../src/react/workbench/workbench-panel-state.ts","../src/react/panel-menu/panel-menu-sizing.ts","../src/react/panel-menu/panel-menu.tsx","../src/react/side-panel/side-panel.tsx","../src/react/terminal/workbench-terminal-panel.tsx","../src/react/terminal/terminal-module.tsx","../src/react/theme/use-workbench-theme-preferences.ts","../src/react/theme/workbench-theme-provider.tsx","../src/react/theme/workbench-theme-scope.tsx","../src/react/workbench/overlay-layer.tsx","../src/react/header/resource-actions.tsx","../src/react/header/workbench-nav-chrome.tsx","../src/react/renderers/controls/controls-view.tsx","../src/react/renderers/controls/install-controls-renderer.ts","../src/react/renderers/data-table/install-data-table-renderer.ts","../src/react/renderers/file/install-file-renderer.ts","../src/react/renderers/kanban/kanban-view-query.ts","../src/react/renderers/kanban/kanban-view-storage.ts","../src/react/renderers/kanban/kanban-view.tsx","../src/react/renderers/kanban/install-kanban-renderer.ts","../src/react/renderers/tree/install-tree-renderer.ts","../src/react/theme/use-workbench-file-icon-theme-preferences.ts","../src/react/workbench/use-workbench-region-content.ts","../src/react/workbench/header-bottom-border.tsx","../src/react/workbench/use-workbench-main-panels.ts","../src/react/workbench/workbench-secondary-panel.tsx","../src/react/workbench/workbench-body.tsx","../src/react/workbench/workbench-panels.tsx","../src/react/workbench/workbench-side-panel-layout.tsx","../src/react/workbench/workbench-side-panel-boundary.tsx","../src/react/workbench/workbench.tsx","../src/react/workbench/workbench-module-host.tsx"],"sourcesContent":["import { useStore } from \"zustand\";\nimport type { WorkbenchStore } from \"../../core\";\n\nexport const useWorkbenchStore = <TState, TSlice>(store: WorkbenchStore<TState>, selector: (state: TState) => TSlice) =>\n useStore(store, selector);\n","import { HStack, Text } from \"@chakra-ui/react\";\nimport { Breadcrumb, type SessionCompletionStatus, SessionIndicator } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchBreadcrumbItem, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchBreadcrumbViewProps {\n workbench: WorkbenchCore;\n}\n\nconst getSessionStatus = (item: WorkbenchBreadcrumbItem) =>\n typeof item.resource?.metadata?.status === \"string\"\n ? (item.resource.metadata.status as SessionCompletionStatus)\n : undefined;\n\nconst WorkbenchBreadcrumbIcon = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const status = getSessionStatus(item);\n\n if (item.indicator === \"session-status\" || item.resource?.kind === \"session\") {\n return <SessionIndicator status={status} boxSize=\"14px\" />;\n }\n\n if (!item.icon) return null;\n\n return (\n <Text as=\"span\" aria-hidden=\"true\" color=\"fg.muted\" display=\"inline-flex\" flexShrink={0}>\n <WorkbenchIcon name={item.icon} size={14} />\n </Text>\n );\n};\n\nconst WorkbenchBreadcrumbTitle = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const title = item.title as ReactNode;\n\n return (\n <HStack as=\"span\" gap=\"2xs\" minW=\"0\">\n <WorkbenchBreadcrumbIcon item={item} />\n <Text as=\"span\" minW=\"0\" maxW=\"15rem\" truncate>\n {title}\n </Text>\n </HStack>\n );\n};\n\nexport const buildWorkbenchBreadcrumbItems = (items: WorkbenchBreadcrumbItem[] | undefined) =>\n (items ?? []).map((item) => ({\n title: <WorkbenchBreadcrumbTitle item={item} />,\n url: item.url,\n onClick: item.onClick,\n }));\n\nexport const WorkbenchBreadcrumbView = (props: WorkbenchBreadcrumbViewProps) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n\n if (items.length === 0) return null;\n\n return (\n <Breadcrumb items={buildWorkbenchBreadcrumbItems(items)} separator=\"/\" separatorGap=\"xs\" display=\"flex\" h=\"full\" />\n );\n};\n","import type { WorkbenchCompositionRegionPanels, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport type WorkbenchCompositionPanelsByRegion = Record<WorkbenchPanelRegion, WorkbenchCompositionRegionPanels>;\n\nexport const useWorkbenchCompositionPanels = (workbench: WorkbenchCore): WorkbenchCompositionPanelsByRegion => {\n \"use no memo\";\n\n useWorkbenchStore(workbench.layout.store, (state) => state);\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n\n return {\n main: workbench.composition.panelsFor(\"main\"),\n secondary: workbench.composition.panelsFor(\"secondary\"),\n side: workbench.composition.panelsFor(\"side\"),\n };\n};\n","import type { WorkbenchRegion } from \"../../core\";\n\nconst chakraBackgrounds = {\n activityBar: \"var(--chakra-colors-bg-muted)\",\n sidenav: \"var(--chakra-colors-bg-subtle)\",\n main: \"var(--chakra-colors-bg)\",\n panel: \"var(--chakra-colors-bg-panel)\",\n statusBar: \"var(--chakra-colors-bg-subtle)\",\n} as const;\n\nconst vscodeColor = (token: string, fallback: string) =>\n `var(--chakra-colors-vscode-${token.replaceAll(\".\", \"-\")}, ${fallback})`;\n\nexport const workbenchBackgrounds = {\n activityBar: vscodeColor(\"activityBar.background\", vscodeColor(\"sideBar.background\", chakraBackgrounds.activityBar)),\n sidenav: vscodeColor(\"sideBar.background\", chakraBackgrounds.sidenav),\n main: vscodeColor(\"editor.background\", chakraBackgrounds.main),\n panel: vscodeColor(\"panel.background\", chakraBackgrounds.panel),\n statusBar: vscodeColor(\"statusBar.background\", vscodeColor(\"sideBar.background\", chakraBackgrounds.statusBar)),\n widget: vscodeColor(\"editorWidget.background\", vscodeColor(\"panel.background\", chakraBackgrounds.panel)),\n} as const;\n\nconst workbenchRegionBackgrounds = {\n nav: workbenchBackgrounds.main,\n activity: workbenchBackgrounds.activityBar,\n \"sidenav-header\": workbenchBackgrounds.sidenav,\n sidenav: workbenchBackgrounds.sidenav,\n \"main-header\": workbenchBackgrounds.main,\n \"main-left-menu\": workbenchBackgrounds.panel,\n main: workbenchBackgrounds.main,\n \"main-right-menu\": workbenchBackgrounds.panel,\n \"secondary-header\": workbenchBackgrounds.panel,\n \"secondary-left-menu\": workbenchBackgrounds.panel,\n secondary: workbenchBackgrounds.panel,\n \"secondary-right-menu\": workbenchBackgrounds.panel,\n status: workbenchBackgrounds.statusBar,\n overlay: workbenchBackgrounds.widget,\n \"side-header\": workbenchBackgrounds.widget,\n \"side-left-menu\": workbenchBackgrounds.widget,\n side: workbenchBackgrounds.widget,\n \"side-right-menu\": workbenchBackgrounds.widget,\n} as const satisfies Record<WorkbenchRegion, string>;\n\nexport const workbenchFocusBorder = vscodeColor(\"focusBorder\", \"var(--chakra-colors-color-palette-focus-ring)\");\n\nexport const workbenchCommandPaletteBackground = workbenchBackgrounds.widget;\n\nexport const getWorkbenchRegionBackground = (region: WorkbenchRegion) => workbenchRegionBackgrounds[region];\n","import type { CommandParamDescriptor, CommandParamSchema, WorkbenchCommandExecutionContext } from \"../../core\";\n\nexport type CommandParamValue = string | boolean | string[] | undefined;\n\nexport interface CommandParamEntry extends CommandParamDescriptor {\n key: string;\n label: string;\n}\n\nconst humanize = (value: string) => {\n const spaced = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .trim();\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringifyEditableValue = (value: unknown) => {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return JSON.stringify(value);\n};\n\nconst toIdentifierPrefix = (value: string) =>\n value\n .replace(/[^a-zA-Z0-9]+([a-zA-Z0-9])/g, (_match, char: string) => char.toUpperCase())\n .replace(/^[A-Z]/, (char) => char.toLowerCase());\n\nconst metadataString = (metadata: Record<string, unknown> | undefined, key: string) => {\n const value = metadata?.[key];\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") return String(value);\n return undefined;\n};\n\nconst resourceContextValue = (entry: CommandParamEntry, context: WorkbenchCommandExecutionContext | undefined) => {\n const resource = context?.resource;\n if (!resource) return undefined;\n\n const metadataValue = metadataString(resource.metadata, entry.key);\n if (metadataValue !== undefined) return metadataValue;\n\n if (entry.key === `${toIdentifierPrefix(resource.kind)}Id`) return resource.id ?? resource.uri;\n if (entry.type === \"resource\" && (!entry.resourceType || entry.resourceType === resource.kind)) return resource;\n return undefined;\n};\n\nconst dedupeOptions = (options: CommandParamDescriptor[\"options\"]) => {\n if (!options) return options;\n const seen = new Set<string>();\n return options.filter((option) => {\n if (seen.has(option.value)) return false;\n seen.add(option.value);\n return true;\n });\n};\n\nexport const hasCommandParameters = (params: CommandParamSchema | undefined) => Object.keys(params ?? {}).length > 0;\n\nexport const listCommandParamEntries = (params: CommandParamSchema | undefined): CommandParamEntry[] =>\n Object.entries(params ?? {}).map(([key, param]) => ({\n ...param,\n options: dedupeOptions(param.options),\n key,\n label: param.label ?? humanize(key),\n }));\n\nexport const buildCommandParamInitialValues = (\n params: CommandParamSchema | undefined,\n baseArgs?: unknown,\n context?: WorkbenchCommandExecutionContext,\n): Record<string, CommandParamValue> => {\n const base = isRecord(baseArgs) ? baseArgs : {};\n const values: Record<string, CommandParamValue> = {};\n\n for (const entry of listCommandParamEntries(params)) {\n const raw = Object.hasOwn(base, entry.key)\n ? base[entry.key]\n : (resourceContextValue(entry, context) ?? entry.defaultValue);\n if (entry.type === \"boolean\") {\n values[entry.key] = raw === undefined ? undefined : raw === true || raw === \"true\";\n continue;\n }\n if (entry.type === \"multi-select\") {\n values[entry.key] = Array.isArray(raw) ? raw.map(String) : [];\n continue;\n }\n values[entry.key] = stringifyEditableValue(raw);\n }\n\n return values;\n};\n\nconst isEmptyValue = (value: CommandParamValue) =>\n value === undefined || value === \"\" || (Array.isArray(value) && value.length === 0);\n\nconst parseJsonValue = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (typeof value !== \"string\") return value;\n try {\n return JSON.parse(value);\n } catch {\n throw new Error(`Invalid JSON for ${entry.label}`);\n }\n};\n\nconst normalizeValue = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (entry.type === \"number\") {\n const numberValue = Number(value);\n if (!Number.isFinite(numberValue)) throw new Error(`Invalid number for ${entry.label}`);\n return numberValue;\n }\n if (entry.type === \"boolean\") return value === true || value === \"true\";\n if (entry.type === \"json\" || entry.type === \"resource\" || entry.type === \"repo\" || entry.type === \"harness\") {\n return parseJsonValue(entry, value);\n }\n if (entry.type === \"multi-select\") return Array.isArray(value) ? value : String(value).split(\",\").filter(Boolean);\n return String(value ?? \"\");\n};\n\nexport const normalizeCommandParamValues = (\n params: CommandParamSchema | undefined,\n values: Record<string, CommandParamValue>,\n) => {\n const normalized: Record<string, unknown> = {};\n\n for (const entry of listCommandParamEntries(params)) {\n const value = values[entry.key];\n if (isEmptyValue(value)) {\n if (entry.required) throw new Error(`Missing required parameter: ${entry.label}`);\n continue;\n }\n normalized[entry.key] = normalizeValue(entry, value);\n }\n\n return normalized;\n};\n\nexport const mergeCommandParamArgs = (baseArgs: unknown, params: Record<string, unknown>) => ({\n ...(isRecord(baseArgs) ? baseArgs : {}),\n ...params,\n});\n","import type { PaletteMode } from \"@pstdio/ui\";\nimport { Search, Terminal } from \"lucide-react\";\nimport type { WorkbenchCommandPaletteView } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nexport const SEARCH_MODE_ID = \"search\";\nexport const COMMAND_MODE_ID = \"command\";\nexport const THEME_MODE_ID = \"theme\";\nexport const MODE_VIEW_ID = \"mode\";\n\nexport const workbenchPaletteModes: PaletteMode[] = [{ id: SEARCH_MODE_ID }, { id: COMMAND_MODE_ID, inputPrefix: \">\" }];\n\nexport const isThemePaletteView = (view: WorkbenchCommandPaletteView) => view === THEME_MODE_ID;\n\nexport const isModePaletteView = (view: WorkbenchCommandPaletteView) => view === MODE_VIEW_ID;\n\nexport const isPickerPaletteView = (view: WorkbenchCommandPaletteView) =>\n isThemePaletteView(view) || isModePaletteView(view);\n\nexport const getPaletteViewMode = (view: WorkbenchCommandPaletteView) => {\n if (isThemePaletteView(view)) return THEME_MODE_ID;\n if (isModePaletteView(view)) return MODE_VIEW_ID;\n\n return undefined;\n};\n\nexport const getPaletteViewModes = (view: WorkbenchCommandPaletteView) => {\n if (isPickerPaletteView(view)) return undefined;\n\n return workbenchPaletteModes;\n};\n\nexport const getPaletteInitialActiveIndex = (input: {\n view: WorkbenchCommandPaletteView;\n themeInitialActiveIndex: number;\n modeInitialActiveIndex: number;\n}) => {\n if (isThemePaletteView(input.view)) return input.themeInitialActiveIndex;\n if (isModePaletteView(input.view)) return input.modeInitialActiveIndex;\n\n return 0;\n};\n\nexport const getPaletteInputIcon = (input: { view: WorkbenchCommandPaletteView; mode: string | undefined }) => {\n if (isThemePaletteView(input.view)) return <WorkbenchIcon name=\"Palette\" size={16} />;\n if (isModePaletteView(input.view)) return <WorkbenchIcon name=\"PanelTop\" size={16} />;\n if (input.mode === COMMAND_MODE_ID) return <Terminal size={16} aria-hidden=\"true\" />;\n\n return <Search size={16} aria-hidden=\"true\" />;\n};\n\nexport const getPalettePlaceholder = (input: { view: WorkbenchCommandPaletteView; mode: string | undefined }) => {\n if (isThemePaletteView(input.view)) return \"Search themes\";\n if (isModePaletteView(input.view)) return \"Search modes\";\n if (input.mode === COMMAND_MODE_ID) return \"Run command\";\n\n return \"Search resources\";\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\n\nconst RESOURCE_QUERY_LIMIT = 25;\nconst RESOURCE_QUERY_DEBOUNCE_MS = 150;\n\ninterface UseWorkbenchCommandPaletteResourceEntriesInput {\n workbench: WorkbenchCore;\n query: string;\n open: boolean;\n onClose: () => void;\n}\n\n// Fetches extension-provided palette results for the live query (debounced) and maps\n// them to search-mode palette entries. Provider errors are isolated by the registry, so\n// one failing provider never blanks the palette.\nexport const useWorkbenchCommandPaletteResourceEntries = (input: UseWorkbenchCommandPaletteResourceEntriesInput) => {\n const { workbench, query, open, onClose } = input;\n const refreshToken = useWorkbenchStore(workbench.commandPaletteResources.store, (state) => state.refreshToken);\n const [entries, setEntries] = useState<PaletteEntry[]>([]);\n\n useEffect(() => {\n if (!open) {\n setEntries([]);\n return;\n }\n\n // Read so an explicit registry refresh (refreshToken bump) re-runs this query.\n void refreshToken;\n let cancelled = false;\n const handle = setTimeout(() => {\n void workbench.commandPaletteResources.queryProviders({ query, limit: RESOURCE_QUERY_LIMIT }).then((groups) => {\n if (cancelled) return;\n setEntries(\n groups.flatMap((group) =>\n group.results.map((result) => ({\n id: `workbench-command-palette-resource:${result.id}`,\n mode: SEARCH_MODE_ID,\n label: result.label,\n searchText: `${query} ${result.label} ${(result.keywords ?? []).join(\" \")}`.trim(),\n description: result.description,\n group: result.group ?? group.title,\n icon: result.icon ? <WorkbenchIcon name={result.icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(result.activate()).catch(() => undefined);\n },\n })),\n ),\n );\n });\n }, RESOURCE_QUERY_DEBOUNCE_MS);\n\n return () => {\n cancelled = true;\n clearTimeout(handle);\n };\n }, [workbench, query, open, refreshToken, onClose]);\n\n return entries;\n};\n","import type { Param, ParamValue, SelectionOption } from \"@pstdio/ui\";\nimport type { CommandParamEntry, CommandParamValue } from \"./command-palette-params\";\n\nconst asText = (value: CommandParamValue) => (typeof value === \"string\" ? value : \"\");\n\nconst asList = (value: CommandParamValue) => (Array.isArray(value) ? value : []);\n\n/** Required params carry the marker in their name — the editor has no required state. */\nexport const commandParamName = (entry: CommandParamEntry) => `${entry.label}${entry.required ? \" *\" : \"\"}`;\n\nconst commandParamOptions = (entry: CommandParamEntry): SelectionOption[] =>\n (entry.options ?? []).map((option) => ({ id: option.value, name: option.label, icon: option.icon }));\n\n// Structured params (harness, repo, template) are normally rendered by the host,\n// which knows how to fetch their options. Without a host renderer they fall back\n// to the JSON they are serialized as, so the command can still be run.\nconst JSON_PARAM_TYPES = new Set([\"json\", \"resource\", \"repo\", \"harness\"]);\n\n/**\n * Maps a declared command param onto the design-system control that owns that\n * kind of input, so a command dialog is built from the same rows as every other\n * param surface rather than from hand-rolled fields.\n */\nexport const buildCommandParam = (entry: CommandParamEntry, value: CommandParamValue): Param => {\n const base = { id: entry.key, name: commandParamName(entry), description: entry.description };\n\n if (entry.type === \"boolean\") return { ...base, type: \"boolean\", defaultValue: value === true };\n\n if (entry.type === \"number\") return { ...base, type: \"number\", defaultValue: Number(asText(value)) };\n\n if (entry.type === \"markdown\") return { ...base, type: \"markdown\", defaultValue: asText(value) };\n\n if (entry.type === \"multi-select\") {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asList(value),\n options: commandParamOptions(entry),\n multiSelect: true,\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: (entry.options?.length ?? 0) > 5,\n };\n }\n\n if ((entry.type === \"select\" || entry.type === \"template\") && entry.options?.length) {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asText(value),\n options: commandParamOptions(entry),\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: entry.options.length > 5,\n clearable: !entry.required,\n };\n }\n\n if (entry.type === \"longtext\" || JSON_PARAM_TYPES.has(entry.type)) {\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: false };\n }\n\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: true };\n};\n\n/** Narrows an editor value back to what a command param can carry. */\nexport const readCommandParamValue = (value: ParamValue): CommandParamValue => {\n if (typeof value === \"boolean\") return value;\n if (Array.isArray(value)) return value.map(String);\n return String(value ?? \"\");\n};\n","import { ParamEditorRow } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCommandExecutionContext } from \"../../core\";\nimport type { CommandParamEntry, CommandParamValue } from \"./command-palette-params\";\nimport { buildCommandParam, readCommandParamValue } from \"./command-param-descriptors\";\n\nexport interface CommandParamFieldProps {\n entry: CommandParamEntry;\n value: CommandParamValue;\n context?: WorkbenchCommandExecutionContext;\n disabled: boolean;\n onChange: (value: CommandParamValue) => void;\n}\n\n// Lets the host supply field UI for param types the workbench cannot render on its\n// own (e.g. harness/repo selectors backed by host data). Returning a falsy value\n// defers to the built-in field for that entry.\nexport type CommandParamFieldRenderer = (props: CommandParamFieldProps) => ReactNode;\n\nexport const CommandParamField = (props: Omit<CommandParamFieldProps, \"context\">) => {\n const { entry, value, disabled, onChange } = props;\n\n return (\n <ParamEditorRow\n param={buildCommandParam(entry, value)}\n readOnly={disabled}\n onChange={(_id, next) => onChange(readCommandParamValue(next))}\n />\n );\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { handleDialogAcceptShortcut, ScrollArea } from \"@pstdio/ui\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport type { Command, RegisteredMenuItem, WorkbenchCommandExecutionContext } from \"../../core\";\nimport {\n buildCommandParamInitialValues,\n type CommandParamEntry,\n type CommandParamValue,\n listCommandParamEntries,\n mergeCommandParamArgs,\n normalizeCommandParamValues,\n} from \"./command-palette-params\";\nimport { CommandParamField, type CommandParamFieldRenderer } from \"./command-param-field\";\n\nexport interface CommandParamsRequest {\n record: { command: Pick<Command, \"id\" | \"label\" | \"description\" | \"params\"> };\n action?: RegisteredMenuItem;\n label: string;\n // Confirm-button label for the dialog (defaults to \"Run\").\n submitLabel?: string;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}\n\nexport type { CommandParamFieldProps, CommandParamFieldRenderer } from \"./command-param-field\";\n\ninterface CommandParamsDialogProps {\n request: CommandParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n onClose: () => void;\n onRun: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n }) => Promise<void>;\n}\n\nconst isFilled = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (entry.type === \"boolean\") return value !== undefined;\n if (Array.isArray(value)) return value.length > 0;\n return typeof value === \"string\" && value.length > 0;\n};\n\nexport const CommandParamsDialog = (props: CommandParamsDialogProps) => {\n const { request, renderParamField, onClose, onRun } = props;\n const [values, setValues] = useState<Record<string, CommandParamValue>>({});\n const [error, setError] = useState<string | undefined>();\n const [submitting, setSubmitting] = useState(false);\n const entries = listCommandParamEntries(request?.record.command.params);\n\n useEffect(() => {\n setValues(buildCommandParamInitialValues(request?.record.command.params, request?.args, request?.context));\n setError(undefined);\n setSubmitting(false);\n }, [request]);\n\n const close = () => {\n if (submitting) return;\n onClose();\n };\n\n const setValue = (key: string, value: CommandParamValue) => {\n setValues((current) => ({ ...current, [key]: value }));\n };\n\n const run = async () => {\n if (!request || submitting) return;\n setSubmitting(true);\n setError(undefined);\n try {\n const params = normalizeCommandParamValues(request.record.command.params, values);\n await onRun({\n commandId: request.record.command.id,\n args: mergeCommandParamArgs(request.args, params),\n context: request.context,\n label: request.label,\n });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : \"Command failed.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n const isValid = entries.every((entry) => !entry.required || isFilled(entry, values[entry.key]));\n\n return (\n <Dialog.Root\n open={request !== null}\n size=\"lg\"\n scrollBehavior=\"inside\"\n onOpenChange={(details) => !details.open && close()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content\n display=\"flex\"\n flexDirection=\"column\"\n maxH=\"calc(100% - 48px)\"\n onKeyDownCapture={(event) => handleDialogAcceptShortcut(event, () => void run(), isValid && !submitting)}\n >\n <Dialog.Header>\n <Stack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"heading/M/semibold\">{request?.label ?? \"Run command\"}</Text>\n {request?.record.command.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\" truncate>\n {request.record.command.description}\n </Text>\n ) : null}\n </Stack>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body flex=\"1\" minH=\"0\" p=\"0\">\n <ScrollArea h=\"full\" contentProps={{ px: \"sm\", py: \"md\" }}>\n {/* Fields carry the param editor's own row padding, so the form is a\n flush stack of rows rather than rows spaced twice over. */}\n <Stack gap=\"0\">\n {entries.map((entry) => {\n const fieldProps = {\n entry,\n value: values[entry.key],\n disabled: submitting,\n onChange: (value: CommandParamValue) => setValue(entry.key, value),\n };\n const custom = renderParamField?.({ ...fieldProps, context: request?.context });\n return <Fragment key={entry.key}>{custom ?? <CommandParamField {...fieldProps} />}</Fragment>;\n })}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\" px=\"sm\" pt=\"xs\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </ScrollArea>\n </Dialog.Body>\n <Dialog.Footer>\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!isValid} loading={submitting} onClick={() => void run()}>\n {request?.submitLabel ?? \"Run\"}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport type { WorkbenchCore, WorkbenchModeContribution } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { MODE_VIEW_ID } from \"./palette-view\";\n\nexport interface WorkbenchModePaletteEntry extends PaletteEntry {\n modeId: string;\n mode: typeof MODE_VIEW_ID;\n}\n\nconst getModeLabel = (mode: WorkbenchModeContribution) => mode.label ?? mode.id;\n\nexport const getModeEntryIndex = (activeModeId: string | undefined, modes: readonly WorkbenchModeContribution[]) => {\n const index = modes.findIndex((mode) => mode.id === activeModeId);\n\n return Math.max(index, 0);\n};\n\nexport const createWorkbenchModePaletteEntries = (input: { workbench: WorkbenchCore; onClose: () => void }) => {\n const { onClose, workbench } = input;\n const activeModeId = workbench.modes.getActiveModeId();\n\n return workbench.modes.listModes().map((mode): WorkbenchModePaletteEntry => {\n const label = getModeLabel(mode);\n\n return {\n id: `mode:${mode.id}`,\n modeId: mode.id,\n mode: MODE_VIEW_ID,\n label,\n searchText: `mode workbench ${mode.id} ${label}`,\n group: \"Modes\",\n icon: <WorkbenchIcon name=\"PanelTop\" />,\n isSelected: mode.id === activeModeId,\n onActivate: () => {\n workbench.modes.setActiveMode(mode.id);\n onClose();\n },\n };\n });\n};\n","import type { RegisteredWidgetContribution, ResourceRef, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\n\ninterface OpenPanelWidgetInput {\n workbench: WorkbenchCore;\n widget: RegisteredWidgetContribution;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n pinned?: boolean;\n}\n\nexport const getPanelLabel = (region: WorkbenchPanelRegion) => {\n if (region === \"secondary\") return \"Secondary\";\n if (region === \"side\") return \"Side\";\n return \"Main\";\n};\n\nexport const openPanelWidget = (input: OpenPanelWidgetInput) => {\n const { pinned, region, resource, widget, workbench } = input;\n\n if (widget.openCommandId) {\n void workbench.commands.executeCommand(widget.openCommandId, undefined, {\n source: \"panel-add\",\n ...(resource ? { resource } : {}),\n });\n } else {\n const widgetResource = widget.resourceKinds?.length || widget.canOpen ? resource : undefined;\n // Adding a tab from the region's \"+\" tray is the user asking for a tab that stays.\n // The resource only binds the tab to its location; the tab is the widget, so it\n // keeps the widget's title instead of inheriting the location resource's label.\n workbench.layout.openWidget(widget.id, {\n region,\n resource: widgetResource,\n title: widget.title,\n closable: true,\n pinned,\n role: region === \"main\" ? \"location\" : \"sub-panel\",\n tabRetention: \"persistent\",\n });\n }\n\n if (region === \"secondary\") {\n workbench.panels.setOpen(\"secondary\", true);\n workbench.layout.setRegionVisible(\"secondary\", true);\n }\n if (region === \"side\" && workbench.sidePanel.getMode() === \"closed\") {\n workbench.sidePanel.setMode(\"attached\");\n }\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { type WorkbenchCore, workbenchPanelRegions } from \"../../core\";\nimport { getPanelLabel, openPanelWidget } from \"../region/panel-widget-open\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport type { WorkbenchCompositionPanelsByRegion } from \"../shared/use-workbench-composition-panels\";\nimport { COMMAND_MODE_ID } from \"./palette-view\";\n\nexport const createWorkbenchPanelWidgetPaletteEntries = (input: {\n workbench: WorkbenchCore;\n onClose: () => void;\n panelsByRegion?: WorkbenchCompositionPanelsByRegion;\n}) => {\n const { onClose, panelsByRegion, workbench } = input;\n const resource = workbench.getPrimaryResource();\n return workbenchPanelRegions.flatMap((region) =>\n (panelsByRegion?.[region] ?? workbench.composition.panelsFor(region)).addable.map((panel): PaletteEntry => {\n const widget = panel.contribution;\n const panelLabel = getPanelLabel(region);\n const label = `Open ${widget.title} in ${panelLabel} Panel`;\n\n return {\n id: `workbench-panel:${region}:${widget.id}`,\n mode: COMMAND_MODE_ID,\n label,\n searchText: `${label} ${widget.id}`,\n group: \"Panels\",\n icon: widget.icon ? <WorkbenchIcon name={widget.icon} /> : undefined,\n onActivate: () => {\n onClose();\n openPanelWidget({ workbench, widget, region, resource, pinned: panel.pinned });\n },\n };\n }),\n );\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport type { ResourceBrowseEntry, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\n\nexport interface WorkbenchResourcePaletteEntry extends PaletteEntry {\n resourceUri: string;\n mode: typeof SEARCH_MODE_ID;\n}\n\nconst createResourceEntry = (input: {\n workbench: WorkbenchCore;\n entry: ResourceBrowseEntry;\n onClose: () => void;\n}): WorkbenchResourcePaletteEntry => {\n const { entry, onClose, workbench } = input;\n const { resource } = entry;\n const label = entry.resource.label ?? entry.resource.uri;\n const kind = workbench.resources.getKind(resource.kind);\n const icon = resource.icon ?? kind?.icon;\n\n return {\n id: `workbench-resource:${resource.uri}`,\n resourceUri: resource.uri,\n mode: SEARCH_MODE_ID,\n label,\n searchText: entry.searchText ?? label,\n description: entry.description,\n group: entry.group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(\n entry.activate ? entry.activate(resource) : workbench.resources.openResource(resource, kind?.paletteOpenInput),\n ).catch(() => undefined);\n },\n };\n};\n\nexport const createWorkbenchResourcePaletteEntries = (input: {\n workbench: WorkbenchCore;\n query: string;\n onClose: () => void;\n}) => {\n const { onClose, query, workbench } = input;\n return workbench.resources.listResources(query).map((entry) => createResourceEntry({ workbench, entry, onClose }));\n};\n","import type { PaletteEntry, ThemePreference, ThemePreferenceOption } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nconst THEME_MODE_ID = \"theme\";\n\nexport interface WorkbenchThemePaletteEntry extends PaletteEntry {\n themePreference: ThemePreference;\n mode: typeof THEME_MODE_ID;\n}\n\nconst getThemeIconName = (preference: ThemePreference) => {\n if (preference === \"pstdio-light\") return \"Sun\";\n if (preference === \"pstdio-dark\") return \"Moon\";\n return \"Palette\";\n};\n\nconst getThemePreferenceLabel = (themePreference: ThemePreferenceOption) => themePreference.title ?? themePreference.id;\n\nexport const getThemePreferenceEntryIndex = (\n themePreference: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[],\n) => {\n const index = themePreferences.findIndex((preference) => preference.id === themePreference);\n\n return Math.max(index, 0);\n};\n\nconst THEME_GROUP_LABELS = { light: \"Light\", dark: \"Dark\" } as const;\n\n// Group entries by appearance mode (lights first) so cycling the picker stays\n// within one mode instead of flashing light/dark/light on every step.\nconst byModeThenLabel = (a: ThemePreferenceOption, b: ThemePreferenceOption) => {\n if (a.mode !== b.mode) return a.mode === \"light\" ? -1 : 1;\n return getThemePreferenceLabel(a).localeCompare(getThemePreferenceLabel(b));\n};\n\nexport const createWorkbenchThemePreferencePaletteEntries = (input: {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (themePreference: ThemePreference) => void;\n onClose: () => void;\n}) => {\n const { onClose, setThemePreference, themePreference, themePreferences } = input;\n\n return [...themePreferences].sort(byModeThenLabel).map((preference): WorkbenchThemePaletteEntry => {\n const label = getThemePreferenceLabel(preference);\n\n return {\n id: `theme:${preference.id}`,\n themePreference: preference.id,\n mode: THEME_MODE_ID,\n label,\n searchText: `theme color appearance ${preference.mode} ${preference.id} ${label}`,\n group: THEME_GROUP_LABELS[preference.mode],\n icon: <WorkbenchIcon name={getThemeIconName(preference.id)} />,\n isSelected: preference.id === themePreference,\n onActivate: () => {\n setThemePreference(preference.id);\n onClose();\n },\n };\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Palette, type PaletteEntry, PaletteShortcut, type ThemePreference, useThemePreference } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport {\n type Command,\n type KeybindingSequence,\n type MenuPath,\n type RegisteredCommand,\n type RegisteredMenuItem,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n workbenchCommandPaletteMenuPath,\n} from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchCommandPaletteBackground } from \"../theme/workbench-theme-background\";\nimport { hasCommandParameters } from \"./command-palette-params\";\nimport { useWorkbenchCommandPaletteResourceEntries } from \"./command-palette-resources\";\nimport {\n type CommandParamFieldRenderer,\n CommandParamsDialog,\n type CommandParamsRequest,\n} from \"./command-params-dialog\";\nimport { createWorkbenchModePaletteEntries, getModeEntryIndex } from \"./mode-palette\";\nimport {\n COMMAND_MODE_ID,\n getPaletteInitialActiveIndex,\n getPaletteInputIcon,\n getPalettePlaceholder,\n getPaletteViewMode,\n getPaletteViewModes,\n isPickerPaletteView,\n isThemePaletteView,\n} from \"./palette-view\";\nimport { createWorkbenchPanelWidgetPaletteEntries } from \"./panel-widget-palette\";\nimport { createWorkbenchResourcePaletteEntries } from \"./resource-palette\";\nimport {\n createWorkbenchThemePreferencePaletteEntries,\n getThemePreferenceEntryIndex,\n type WorkbenchThemePaletteEntry,\n} from \"./theme-palette\";\n\nexport type { WorkbenchResourcePaletteEntry } from \"./resource-palette\";\nexport { createWorkbenchResourcePaletteEntries };\n\ninterface WorkbenchCommandPaletteProps {\n workbench: WorkbenchCore;\n open: boolean;\n menuPath?: MenuPath;\n initialQuery?: string;\n renderParamField?: CommandParamFieldRenderer;\n onClose: () => void;\n}\n\nexport interface WorkbenchCommandPaletteEntry extends PaletteEntry {\n commandId: string;\n mode: typeof COMMAND_MODE_ID;\n}\n\ninterface WorkbenchThemePreviewState {\n baseTheme: ThemePreference;\n}\n\ninterface WorkbenchCommandPaletteRecord {\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n}\n\nconst rollbackThemePreview = (\n setThemePreference: (themePreference: ThemePreference) => void,\n themePreviewRef: { current: WorkbenchThemePreviewState | null },\n) => {\n const preview = themePreviewRef.current;\n themePreviewRef.current = null;\n if (preview) setThemePreference(preview.baseTheme);\n};\n\nconst getCommandSearchText = (command: Command, label: string) =>\n [label, command.id, command.description, command.category].filter(Boolean).join(\" \");\n\nconst createShortcutByCommandId = (workbench: WorkbenchCore) =>\n new Map(\n workbench.keybindings.listActiveKeybindings().map((keybinding) => [keybinding.commandId, keybinding.keybinding]),\n );\n\nconst getShortcut = (binding: KeybindingSequence | undefined): ReactNode =>\n binding ? <PaletteShortcut binding={binding} /> : undefined;\n\nconst getCommandErrorMessage = (error: unknown) => (error instanceof Error ? error.message : \"Command failed.\");\n\nconst commandExecutionContext = (workbench: WorkbenchCore): WorkbenchCommandExecutionContext | undefined => {\n const resource = workbench.getPrimaryResource();\n return resource ? { resource } : undefined;\n};\n\nconst executePaletteCommand = async (input: {\n workbench: WorkbenchCore;\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n}) => {\n const { args, commandId, context, label, workbench } = input;\n try {\n await workbench.commands.executeCommand(commandId, args, context);\n } catch (error) {\n workbench.notifications.show({ level: \"error\", title: `${label} failed`, message: getCommandErrorMessage(error) });\n }\n};\n\nconst createEntry = (input: {\n workbench: WorkbenchCore;\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n shortcutByCommandId: Map<string, KeybindingSequence>;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}): WorkbenchCommandPaletteEntry | null => {\n const { action, onClose, onRequestParams, record, workbench, shortcutByCommandId } = input;\n const args = action?.args;\n\n if (!workbench.commands.isCommandVisible(record.command.id, args)) return null;\n\n const label = action?.label ?? record.command.label;\n const icon = action?.icon ?? record.command.icon;\n const group = action?.group ?? record.command.category;\n\n return {\n id: `workbench-command:${record.command.id}`,\n commandId: record.command.id,\n mode: COMMAND_MODE_ID,\n label,\n searchText: getCommandSearchText(record.command, label),\n description: record.command.description,\n group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n shortcut: getShortcut(shortcutByCommandId.get(record.command.id)),\n onActivate: () => {\n const context = commandExecutionContext(workbench);\n onClose();\n if (hasCommandParameters(record.command.params) && onRequestParams) {\n onRequestParams({ record, action, label, args, context });\n return;\n }\n void executePaletteCommand({ workbench, commandId: record.command.id, args, context, label });\n },\n };\n};\n\nconst getRecordGroup = (item: WorkbenchCommandPaletteRecord) =>\n item.action?.group ?? item.record.command.category ?? \"\";\n\nconst getRecordOrder = (item: WorkbenchCommandPaletteRecord) => item.action?.order ?? 0;\n\nconst byCommandPaletteGroup = (left: WorkbenchCommandPaletteRecord, right: WorkbenchCommandPaletteRecord) => {\n const groupComparison = getRecordGroup(left).localeCompare(getRecordGroup(right));\n if (groupComparison !== 0) return groupComparison;\n\n return getRecordOrder(left) - getRecordOrder(right);\n};\n\nconst listCommandRecords = (workbench: WorkbenchCore, menuPath?: MenuPath) => {\n if (!menuPath) {\n return workbench.commands.listCommands().map((record) => ({ record, action: undefined }));\n }\n\n return workbench.layout\n .listMenuItems(menuPath)\n .filter((action) => workbench.context.matches(action.when))\n .map((action) => {\n const record = workbench.commands.getCommand(action.commandId);\n return record ? { record, action } : null;\n })\n .filter((item): item is { record: RegisteredCommand; action: RegisteredMenuItem } => item !== null);\n};\n\nexport const createWorkbenchCommandPaletteEntries = (input: {\n workbench: WorkbenchCore;\n menuPath?: MenuPath;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}) => {\n const { menuPath, onClose, onRequestParams, workbench } = input;\n const shortcutByCommandId = createShortcutByCommandId(workbench);\n\n return listCommandRecords(workbench, menuPath)\n .sort(byCommandPaletteGroup)\n .map(({ record, action }) =>\n createEntry({ workbench, record, action, shortcutByCommandId, onClose, onRequestParams }),\n )\n .filter((entry): entry is WorkbenchCommandPaletteEntry => entry !== null);\n};\n\nexport const WorkbenchCommandPalette = (props: WorkbenchCommandPaletteProps) => {\n const {\n workbench,\n open,\n menuPath = workbenchCommandPaletteMenuPath,\n initialQuery = \"\",\n renderParamField,\n onClose,\n } = props;\n const { themePreference, themePreferences, setThemePreference } = useThemePreference();\n const view = useWorkbenchStore(workbench.commandPalette.store, (state) => state.view);\n const themePreviewRef = useRef<WorkbenchThemePreviewState | null>(null);\n const paramsRequest = useWorkbenchStore(workbench.commandPalette.store, (state) => state.paramsRequest);\n const [liveQuery, setLiveQuery] = useState(initialQuery);\n const commandPaletteResourceEntries = useWorkbenchCommandPaletteResourceEntries({\n workbench,\n query: liveQuery,\n open,\n onClose,\n });\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n\n const closePalette = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n onClose();\n };\n\n const exitPickerView = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n workbench.commandPalette.open({ view: \"main\" });\n };\n\n const commitThemePreview = () => {\n themePreviewRef.current = null;\n onClose();\n };\n\n const commandEntries = createWorkbenchCommandPaletteEntries({\n workbench,\n menuPath,\n onClose,\n onRequestParams: (request) => workbench.commandPalette.requestParams(request),\n });\n const resourceEntries = createWorkbenchResourcePaletteEntries({ workbench, query: initialQuery, onClose });\n const themeEntries = createWorkbenchThemePreferencePaletteEntries({\n themePreference,\n themePreferences,\n setThemePreference,\n onClose: commitThemePreview,\n });\n const modeEntries = createWorkbenchModePaletteEntries({ workbench, onClose });\n const panelWidgetEntries = createWorkbenchPanelWidgetPaletteEntries({\n workbench,\n onClose,\n panelsByRegion: compositionPanels,\n });\n const entries = [\n ...resourceEntries,\n ...commandPaletteResourceEntries,\n ...commandEntries,\n ...panelWidgetEntries,\n ...themeEntries,\n ...modeEntries,\n ];\n const themeInitialActiveIndex = getThemePreferenceEntryIndex(themePreference, themePreferences);\n const modeInitialActiveIndex = getModeEntryIndex(workbench.modes.getActiveModeId(), workbench.modes.listModes());\n const isThemeView = isThemePaletteView(view);\n const initialActiveIndex = getPaletteInitialActiveIndex({\n view,\n themeInitialActiveIndex,\n modeInitialActiveIndex,\n });\n const activeViewMode = getPaletteViewMode(view);\n const activeViewModes = getPaletteViewModes(view);\n\n useEffect(() => {\n if (open) setLiveQuery(initialQuery);\n }, [initialQuery, open]);\n\n useEffect(() => {\n if (open && isThemeView) {\n if (!themePreviewRef.current) themePreviewRef.current = { baseTheme: themePreference };\n return;\n }\n\n rollbackThemePreview(setThemePreference, themePreviewRef);\n }, [isThemeView, open, setThemePreference, themePreference]);\n\n return (\n <>\n <Box\n display=\"contents\"\n css={{\n \"& [data-scope=dialog][data-part=backdrop], & [data-scope=dialog][data-part=positioner]\": {\n position: \"absolute\",\n inset: \"0\",\n },\n \"& [data-scope=dialog][data-part=positioner]\": {\n alignItems: \"center\",\n justifyContent: \"center\",\n h: \"full\",\n minH: \"0\",\n padding: \"md\",\n w: \"full\",\n },\n \"& [data-scope=dialog][data-part=content]\": { background: workbenchCommandPaletteBackground },\n }}\n >\n <Palette\n open={open}\n entries={entries}\n initialQuery={initialQuery}\n initialActiveIndex={initialActiveIndex}\n mode={activeViewMode}\n modes={activeViewModes}\n resetKey={`${view}:${initialQuery}`}\n inputIcon={({ mode }) => getPaletteInputIcon({ view, mode })}\n placeholder={({ mode }) => getPalettePlaceholder({ view, mode })}\n emptyLabel=\"No results found.\"\n onActiveEntryChange={(entry) => {\n if (!open || !isThemeView) return;\n const themeEntry = entry as WorkbenchThemePaletteEntry | null;\n if (!themeEntry?.themePreference || themeEntry.themePreference === themePreference) return;\n setThemePreference(themeEntry.themePreference);\n }}\n onQueryChange={setLiveQuery}\n onClose={closePalette}\n onEscape={(ctx) => {\n if (isPickerPaletteView(view)) {\n exitPickerView();\n return true;\n }\n\n if (ctx.query.length > 0) {\n ctx.setQuery(\"\");\n ctx.setActiveIndex(0);\n return true;\n }\n\n closePalette();\n return true;\n }}\n />\n </Box>\n <CommandParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n onClose={() => workbench.commandPalette.clearParams()}\n onRun={(input) => executePaletteCommand({ workbench, ...input })}\n />\n </>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport type { WorkbenchCore, WorkbenchFocusRegionId } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchFocusRegionProps extends BoxProps {\n workbench: WorkbenchCore;\n region: WorkbenchFocusRegionId;\n children: ReactNode;\n}\n\nexport const WorkbenchFocusRegion = (props: WorkbenchFocusRegionProps) => {\n const { workbench, region, children, ...boxProps } = props;\n const activeRegion = useWorkbenchStore(workbench.focus.store, (state) => state.activeRegion);\n const ref = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element || activeRegion !== region) return;\n if (element.contains(document.activeElement)) return;\n element.focus({ preventScroll: true });\n }, [activeRegion, region]);\n\n return (\n <Box\n ref={ref}\n tabIndex={-1}\n outline=\"none\"\n onFocusCapture={() => workbench.focus.setActiveRegion(region)}\n {...boxProps}\n >\n {children}\n </Box>\n );\n};\n","import type {\n ContextKeyValue,\n MenuPath,\n RegisteredCommand,\n RegisteredMenuItem,\n ResourceRef,\n WorkbenchCore,\n} from \"../../core\";\nimport {\n createWorkbenchResourceContextValues,\n matchesContextExpression,\n workbenchResourceIdContextKey,\n workbenchResourceKindContextKey,\n workbenchResourceMetadataContextKey,\n} from \"../../core\";\nimport { byContributionPriority } from \"../../core/shared/contributions/metadata\";\n\nexport interface WorkbenchMenuItem {\n id: string;\n commandId: string;\n label: string;\n description?: string;\n icon: string | undefined;\n iconSrc?: string;\n overflowLabel?: string;\n group: string | undefined;\n args: unknown;\n disabled: boolean;\n separatorBefore?: boolean;\n readOnly?: true;\n}\n\ninterface WorkbenchMenuItemState {\n itemsByPath: Record<string, RegisteredMenuItem[]>;\n commands: Record<string, RegisteredCommand>;\n contextValues: Record<string, ContextKeyValue>;\n}\n\nconst menuPathKey = (path: MenuPath) => path.join(\"/\");\n\ninterface WorkbenchMenuItemContext {\n resource?: ResourceRef | undefined;\n}\n\nconst workbenchResourceMetadataContextKeyPrefix = workbenchResourceMetadataContextKey(\"\");\n\nconst isWorkbenchResourceContextKey = (key: string) =>\n key === workbenchResourceKindContextKey ||\n key === workbenchResourceIdContextKey ||\n key.startsWith(workbenchResourceMetadataContextKeyPrefix);\n\nconst omitWorkbenchResourceContextValues = (values: Record<string, ContextKeyValue>) => {\n const result: Record<string, ContextKeyValue> = {};\n\n for (const [key, value] of Object.entries(values)) {\n if (!isWorkbenchResourceContextKey(key)) result[key] = value;\n }\n\n return result;\n};\n\nconst resolveContextValues = (state: WorkbenchMenuItemState, context: WorkbenchMenuItemContext | undefined) => {\n const baseContextValues = context ? omitWorkbenchResourceContextValues(state.contextValues) : state.contextValues;\n\n return {\n ...baseContextValues,\n ...createWorkbenchResourceContextValues(context?.resource),\n };\n};\n\nexport const listWorkbenchMenuItemsFromState = (\n state: WorkbenchMenuItemState,\n menuPath: MenuPath,\n context?: WorkbenchMenuItemContext,\n) => {\n const contextValues = resolveContextValues(state, context);\n\n return [...(state.itemsByPath[menuPathKey(menuPath)] ?? [])]\n .sort((left, right) => {\n const leftOrder = left.order ?? 0;\n const rightOrder = right.order ?? 0;\n return leftOrder - rightOrder || byContributionPriority(left, right);\n })\n .filter((action) => matchesContextExpression(contextValues, action.when))\n .map((action, index) => {\n const record = state.commands[action.commandId];\n if (!record) return null;\n\n const args = action.args;\n if (record.handler.isVisible?.(args) === false) return null;\n\n return {\n id: `${action.commandId}:${index}`,\n commandId: record.command.id,\n label: action.label ?? record.command.label,\n ...((action.description ?? record.command.description)\n ? { description: action.description ?? record.command.description }\n : {}),\n icon: action.icon ?? record.command.icon,\n ...(action.iconSrc ? { iconSrc: action.iconSrc } : {}),\n ...(action.overflowLabel ? { overflowLabel: action.overflowLabel } : {}),\n group: action.group,\n args,\n disabled: action.readOnly === true || record.handler.isEnabled?.(args) === false,\n ...(action.readOnly ? { readOnly: true } : {}),\n } satisfies WorkbenchMenuItem;\n })\n .filter((item): item is WorkbenchMenuItem => item !== null);\n};\n\nexport const listWorkbenchMenuItems = (\n workbench: WorkbenchCore,\n menuPath: MenuPath,\n context?: WorkbenchMenuItemContext,\n) =>\n listWorkbenchMenuItemsFromState(\n {\n itemsByPath: workbench.layout.menuStore.getState().itemsByPath,\n commands: workbench.commands.store.getState().commands,\n contextValues: workbench.context.store.getState().values,\n },\n menuPath,\n context,\n );\n","import type { WorkbenchMenuItem } from \"../menus/menu-items\";\n\nexport type WorkbenchHeaderOverflowItem = WorkbenchMenuItem & { separatorBefore?: boolean };\n\nexport interface WorkbenchHeaderActionGroups {\n inlineItems: WorkbenchMenuItem[];\n overflowItems: WorkbenchHeaderOverflowItem[];\n}\n\nconst isKernelAction = (item: WorkbenchMenuItem) => item.group === \"kernel\";\n\nconst isOverflowAction = (item: WorkbenchMenuItem) => item.group === \"overflow\" || isKernelAction(item);\n\nconst withLeadingSeparator = (items: WorkbenchMenuItem[], enabled: boolean) => {\n if (!enabled || items.length === 0) return items;\n\n const [first, ...rest] = items;\n if (!first) return rest;\n\n return [{ ...first, separatorBefore: true as const }, ...rest];\n};\n\nconst resolveOverflowItems = (items: WorkbenchMenuItem[]) => {\n const regularItems = items.filter((item) => !isKernelAction(item));\n const kernelItems = items.filter(isKernelAction);\n\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n\nexport const resolveWorkbenchHeaderActionGroups = (items: WorkbenchMenuItem[]) =>\n ({\n inlineItems: items.filter((item) => !isOverflowAction(item)),\n overflowItems: resolveOverflowItems(items.filter(isOverflowAction)),\n }) satisfies WorkbenchHeaderActionGroups;\n\nexport const resolveWorkbenchHeaderOverflowLabel = (items: WorkbenchMenuItem[]) =>\n items.find((item) => item.overflowLabel)?.overflowLabel ?? \"More header actions\";\n","import { Button, HStack, IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, Tooltip } from \"@pstdio/ui\";\nimport { Fragment } from \"react\";\nimport {\n getAnchorResource,\n type MenuPath,\n type ResourceRef,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n} from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport { listWorkbenchMenuItemsFromState, type WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { resolveWorkbenchHeaderActionGroups, resolveWorkbenchHeaderOverflowLabel } from \"./header-action-items\";\n\ninterface WorkbenchHeaderActionsProps {\n workbench: WorkbenchCore;\n menuPath: MenuPath;\n controlSize?: \"2xs\" | \"xs\";\n}\n\nconst commandExecutionContext = (resource: ResourceRef | undefined): WorkbenchCommandExecutionContext | undefined =>\n resource ? { resource } : undefined;\n\nconst WorkbenchInlineHeaderAction = (props: {\n item: WorkbenchMenuItem;\n onSelect: (item: WorkbenchMenuItem) => void;\n controlSize: \"2xs\" | \"xs\";\n}) => {\n const { controlSize, item, onSelect } = props;\n const onClick = () => onSelect(item);\n\n if (item.group === \"primary\" || !item.icon) {\n return (\n <Button\n key={item.id}\n size={controlSize}\n variant={item.group === \"primary\" ? \"primary\" : \"subtle\"}\n disabled={item.disabled}\n onClick={onClick}\n >\n {item.icon ? <WorkbenchIcon name={item.icon} size={14} /> : null}\n {item.label}\n </Button>\n );\n }\n\n return (\n <Tooltip key={item.id} content={item.label}>\n <IconButton size={controlSize} variant=\"ghost\" aria-label={item.label} disabled={item.disabled} onClick={onClick}>\n <WorkbenchIcon name={item.icon} size={16} />\n </IconButton>\n </Tooltip>\n );\n};\n\nexport const WorkbenchHeaderActions = (props: WorkbenchHeaderActionsProps) => {\n const { controlSize = \"xs\", menuPath, workbench } = props;\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const resource = useWorkbenchStore(workbench.layout.store, (state) => getAnchorResource(state.layout, \"primary\"));\n const items = listWorkbenchMenuItemsFromState({ itemsByPath, commands, contextValues }, menuPath, { resource });\n const { inlineItems, overflowItems } = resolveWorkbenchHeaderActionGroups(items);\n\n // Actions whose command declares parameters collect that input through the shared\n // command params dialog (opened via the command palette store) before running;\n // parameterless actions execute immediately.\n const onSelect = (item: WorkbenchMenuItem) => {\n const command = commands[item.commandId]?.command;\n const args = item.args;\n const context = commandExecutionContext(resource);\n if (command && hasCommandParameters(command.params)) {\n workbench.commandPalette.requestParams({ record: { command }, label: item.label, args, context });\n return;\n }\n void workbench.commands.executeCommand(item.commandId, args, context).catch(() => undefined);\n };\n\n if (items.length === 0) return null;\n\n return (\n <HStack flexShrink={0} gap=\"2xs\" minW=\"0\">\n {inlineItems.map((item) => (\n <WorkbenchInlineHeaderAction key={item.id} item={item} onSelect={onSelect} controlSize={controlSize} />\n ))}\n {overflowItems.length > 0 ? (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton\n size={controlSize}\n variant=\"ghost\"\n aria-label={resolveWorkbenchHeaderOverflowLabel(overflowItems)}\n >\n <WorkbenchIcon name=\"MoreHorizontal\" size={16} />\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"220px\" bg=\"bg\">\n {overflowItems.map((item) => (\n <Fragment key={item.id}>\n {item.separatorBefore ? <Menu.Separator /> : null}\n <Menu.Item value={item.id} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={item.id}\n label={item.label}\n icon={item.icon ? <WorkbenchIcon name={item.icon} size={16} /> : undefined}\n disabled={item.disabled}\n onActivate={() => onSelect(item)}\n />\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </HStack>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { WorkbenchPanelRenderInput } from \"../../core\";\n\n// Set by `WorkbenchKeepAliveLayer` for each kept-alive subtree. Reflects the\n// `WorkbenchPanelRenderInput` of the widget that currently has the host\n// claimed, or undefined when no widget is mounted against the renderer.\nexport const WorkbenchClaimContext = createContext<WorkbenchPanelRenderInput | undefined>(undefined);\n\nexport const useWorkbenchClaim = () => useContext(WorkbenchClaimContext);\n","import { Fragment, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchClaimContext } from \"./use-workbench-claim\";\n\ninterface WorkbenchKeepAliveLayerProps {\n workbench: WorkbenchCore;\n}\n\n// Renders every kept-alive renderer's subtree into its dedicated host element\n// exactly once. Hosts use `display: contents` and are moved between widget\n// slots via `renderers.claim`; React sees the subtree mounted once into a\n// stable host, so state survives the moves. The current widget's\n// `WorkbenchPanelRenderInput` is exposed to the subtree through\n// `useWorkbenchClaim()`.\nexport const WorkbenchKeepAliveLayer = (props: WorkbenchKeepAliveLayerProps) => {\n const { workbench } = props;\n const renderers = useWorkbenchStore(workbench.renderers.store, (state) => state.renderers);\n const hosts = useWorkbenchStore(workbench.renderers.store, (state) => state.hosts);\n const claims = useWorkbenchStore(workbench.renderers.store, (state) => state.claims);\n\n return (\n <Fragment>\n {Object.values(renderers).map((renderer) => {\n if (!renderer.keepAlive) return null;\n const host = hosts[renderer.id]?.host;\n if (!host) return null;\n return createPortal(\n <WorkbenchClaimContext.Provider value={claims[renderer.id]}>\n {renderer.render() as ReactNode}\n </WorkbenchClaimContext.Provider>,\n host,\n renderer.id,\n );\n })}\n </Fragment>\n );\n};\n","import { type UseHotkeyDefinition, useHotkeys } from \"@tanstack/react-hotkeys\";\nimport type { WorkbenchHotkeyRegistration } from \"./workbench-keybinding-dispatcher\";\n\nexport const useTanStackWorkbenchHotkeys = (registrations: WorkbenchHotkeyRegistration[]) => {\n const hotkeys: UseHotkeyDefinition[] = registrations.map((registration) => ({\n hotkey: registration.hotkey as UseHotkeyDefinition[\"hotkey\"],\n callback: (event) => {\n event.preventDefault();\n void registration.execute();\n },\n options: {\n enabled: registration.enabled,\n ignoreInputs: registration.ignoreInputs,\n preventDefault: true,\n stopPropagation: true,\n },\n }));\n\n useHotkeys(hotkeys, {\n ignoreInputs: true,\n preventDefault: true,\n stopPropagation: true,\n });\n};\n","import { getKeybindingSteps, type KeybindingSequence, type WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useTanStackWorkbenchHotkeys } from \"./tanstack-hotkey-adapter\";\n\nexport interface WorkbenchHotkeyRegistration {\n commandId: string;\n hotkey: KeybindingSequence;\n enabled: boolean;\n ignoreInputs: boolean;\n execute(): Promise<unknown>;\n}\n\nexport interface CreateWorkbenchHotkeyRegistrationsInput {\n workbench: WorkbenchCore;\n disabled?: boolean;\n commandIds?: readonly string[];\n}\n\nexport interface WorkbenchKeybindingDispatcherProps {\n workbench: WorkbenchCore;\n disabled?: boolean;\n commandIds?: readonly string[];\n}\n\nconst keyAliases: Record<string, string> = {\n alt: \"Alt\",\n cmd: \"Meta\",\n command: \"Meta\",\n ctrl: \"Control\",\n control: \"Control\",\n meta: \"Meta\",\n mod: \"Mod\",\n option: \"Alt\",\n shift: \"Shift\",\n};\n\nconst normalizeWorkbenchKeybindingStep = (keybinding: string) =>\n keybinding\n .split(\"+\")\n .map((part) => {\n const trimmed = part.trim();\n const alias = keyAliases[trimmed.toLowerCase()];\n if (alias) return alias;\n if (trimmed.length === 1) return trimmed.toUpperCase();\n return trimmed.slice(0, 1).toUpperCase() + trimmed.slice(1);\n })\n .join(\"+\");\n\nexport const normalizeWorkbenchKeybinding = (keybinding: KeybindingSequence): KeybindingSequence => {\n const steps = getKeybindingSteps(keybinding).map(normalizeWorkbenchKeybindingStep);\n return steps.length === 1 ? (steps[0] ?? \"\") : steps;\n};\n\nexport const createWorkbenchHotkeyRegistrations = (input: CreateWorkbenchHotkeyRegistrationsInput) => {\n const { workbench, disabled = false, commandIds } = input;\n const allowedCommandIds = commandIds ? new Set(commandIds) : undefined;\n\n return workbench.keybindings.listActiveKeybindings().flatMap((keybinding) => {\n if (allowedCommandIds && !allowedCommandIds.has(keybinding.commandId)) return [];\n const record = workbench.commands.getCommand(keybinding.commandId);\n if (!record) return [];\n\n const enabled =\n !disabled &&\n workbench.commands.isCommandVisible(record.command.id, keybinding.args) &&\n workbench.commands.isCommandEnabled(record.command.id, keybinding.args);\n\n return [\n {\n commandId: record.command.id,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled,\n ignoreInputs: true,\n execute: () => workbench.commands.executeCommand(record.command.id, keybinding.args),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n });\n};\n\nexport const WorkbenchKeybindingDispatcher = (props: WorkbenchKeybindingDispatcherProps) => {\n const { workbench, disabled, commandIds } = props;\n useWorkbenchStore(workbench.keybindings.store, (state) => state.keybindings);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n\n const registrations = createWorkbenchHotkeyRegistrations({ workbench, disabled, commandIds });\n useTanStackWorkbenchHotkeys(registrations);\n\n return null;\n};\n","import { Box, HStack, Text } from \"@chakra-ui/react\";\nimport { PaletteShortcut, type TreeListAction, type TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type {\n ContextKeyValue,\n KeybindingSequence,\n MenuPath,\n RegisteredCommand,\n TreeAction,\n WorkbenchCommandExecutionContext,\n WorkbenchCoreContributionContext,\n} from \"../../../core\";\nimport { createWorkbenchResourceContextValues, matchesContextExpression } from \"../../../core\";\nimport { hasCommandParameters } from \"../../command-palette/command-palette-params\";\nimport type { CommandParamsRequest } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\n\nexport interface TreeActionParamsRequest {\n request: CommandParamsRequest;\n run: (args: unknown) => Promise<void>;\n}\n\ninterface CreateTreeActionItemsInput {\n actions?: TreeAction[];\n workbench: WorkbenchCoreContributionContext;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\ninterface CreateTreeMenuItemsInput {\n workbench: WorkbenchCoreContributionContext;\n menuPath: MenuPath;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\ninterface CreateTreeContextMenuItemsInput {\n actions?: TreeAction[];\n menuPath?: MenuPath;\n workbench: WorkbenchCoreContributionContext;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\nconst commandContextValues = (\n workbench: WorkbenchCoreContributionContext,\n context: WorkbenchCommandExecutionContext | undefined,\n): Record<string, ContextKeyValue> => ({\n ...workbench.context.snapshot(),\n ...createWorkbenchResourceContextValues(context?.resource),\n});\n\nconst isRegisteredCommandVisible = (\n record: RegisteredCommand,\n args: unknown,\n contextValues: Record<string, ContextKeyValue>,\n) => {\n if (!matchesContextExpression(contextValues, record.command.when)) return false;\n return record.handler.isVisible?.(args) !== false;\n};\n\nconst executeTreeAction = async (input: {\n action: TreeAction;\n workbench: WorkbenchCoreContributionContext;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}) => {\n const { action, args, context, workbench } = input;\n const record = action.commandId ? workbench.commands.getCommand(action.commandId) : undefined;\n const resolvedArgs = args ?? action.args;\n await (record\n ? workbench.commands.executeCommand(record.command.id, resolvedArgs, context)\n : action.run?.(resolvedArgs));\n};\n\nconst runTreeAction = async (input: {\n action: TreeAction;\n workbench: WorkbenchCoreContributionContext;\n onCommandError?: (error: unknown) => void;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}) => {\n const { action, args, context, onCommandError, workbench } = input;\n try {\n await executeTreeAction({ action, args, context, workbench });\n } catch (error) {\n onCommandError?.(error);\n throw error;\n }\n};\n\nconst resolveTreeActionCommand = (workbench: WorkbenchCoreContributionContext, action: TreeAction) => {\n if (!action.commandId) return undefined;\n return workbench.commands.getCommand(action.commandId);\n};\n\nconst isTreeActionVisible = (\n workbench: WorkbenchCoreContributionContext,\n action: TreeAction,\n contextValues: Record<string, ContextKeyValue>,\n) => {\n if (!matchesContextExpression(contextValues, action.when)) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n if (action.commandId && !record) return false;\n\n return record ? isRegisteredCommandVisible(record, action.args, contextValues) : true;\n};\n\nconst isTreeActionEnabled = (workbench: WorkbenchCoreContributionContext, action: TreeAction) => {\n if (action.disabled) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n return record ? workbench.commands.isCommandEnabled(record.command.id, action.args) : true;\n};\n\nconst createMenuIcon = (input: { icon?: string; iconSrc?: string }) => {\n const { icon, iconSrc } = input;\n if (iconSrc) {\n return (\n <Box boxSize=\"16px\" bg=\"white\" borderRadius=\"4px\" p=\"1px\" display=\"grid\" placeItems=\"center\">\n <img\n src={iconSrc}\n alt=\"\"\n aria-hidden=\"true\"\n width={14}\n height={14}\n style={{ display: \"block\", width: \"100%\", height: \"100%\", objectFit: \"contain\" }}\n />\n </Box>\n );\n }\n\n return icon ? <WorkbenchIcon name={icon} /> : undefined;\n};\n\nconst createMenuEndContent = (input: { external?: boolean; binding?: KeybindingSequence }) => {\n const { binding, external } = input;\n if (external) return <WorkbenchIcon name=\"ArrowUpRight\" size={14} color=\"fg.muted\" />;\n if (binding) return <PaletteShortcut binding={binding} />;\n return undefined;\n};\n\nconst withLeadingSeparator = <T extends TreeListActionMenuItem>(items: T[], enabled: boolean) => {\n if (!enabled || items.length === 0) return items;\n const [first, ...rest] = items;\n return [{ ...first, separatorBefore: true }, ...rest];\n};\n\nconst isKernelMenuAction = (group: string | undefined) => group === \"kernel\";\n\nconst createTreeMenuItemGroups = (input: CreateTreeMenuItemsInput) => {\n const { context, menuPath, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listActiveKeybindings().map((k) => [k.commandId, k.keybinding]));\n const regularItems: TreeListActionMenuItem[] = [];\n const kernelItems: TreeListActionMenuItem[] = [];\n\n for (const [index, action] of workbench.layout.listMenuItems(menuPath).entries()) {\n if (!matchesContextExpression(contextValues, action.when)) continue;\n\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) continue;\n\n const args = action.args;\n if (!isRegisteredCommandVisible(record, args, contextValues)) continue;\n\n const icon = action.icon ?? record.command.icon;\n const binding = shortcuts.get(record.command.id);\n const readOnly = action.readOnly === true;\n const label = action.label ?? record.command.label;\n const requestParams =\n hasCommandParameters(record.command.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: record.command },\n label,\n args,\n context,\n },\n run: async (nextArgs) => {\n try {\n await workbench.commands.executeCommand(record.command.id, nextArgs, context);\n } catch (error) {\n onCommandError?.(error);\n throw error;\n }\n },\n })\n : undefined;\n const item = {\n id: `${action.commandId}:${index}`,\n label,\n commandId: action.sourceCommandId ?? record.command.id,\n description: action.description ?? record.command.description,\n icon: createMenuIcon({ icon, iconSrc: action.iconSrc }),\n endContent: createMenuEndContent({ external: action.external, binding }),\n disabled: readOnly || !workbench.commands.isCommandEnabled(record.command.id, args),\n readOnly,\n onAction: readOnly\n ? undefined\n : () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void workbench.commands\n .executeCommand(record.command.id, args, context)\n .catch((error) => onCommandError?.(error));\n },\n };\n\n if (isKernelMenuAction(action.group)) {\n kernelItems.push(item);\n } else {\n regularItems.push(item);\n }\n }\n\n return { regularItems, kernelItems };\n};\n\nexport const createTreeMenuItems = (input: CreateTreeMenuItemsInput) => {\n const { regularItems, kernelItems } = createTreeMenuItemGroups(input);\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n\nconst createTreeActionMenuItems = (input: CreateTreeContextMenuItemsInput) => {\n const { actions = [], context, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listActiveKeybindings().map((k) => [k.commandId, k.keybinding]));\n const items: TreeListActionMenuItem[] = [];\n\n for (const action of actions) {\n if (!isTreeActionVisible(workbench, action, contextValues)) continue;\n\n const record = resolveTreeActionCommand(workbench, action);\n const label = action.label ?? record?.command.label;\n if (!label) continue;\n\n const icon = action.icon ?? record?.command.icon;\n const disabled = !isTreeActionEnabled(workbench, action);\n const binding = action.commandId ? shortcuts.get(action.commandId) : undefined;\n const requestParams =\n hasCommandParameters(action.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: { id: action.commandId ?? action.id, label, params: action.params } },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => runTreeAction({ action, args, context, workbench, onCommandError }),\n })\n : undefined;\n items.push({\n id: action.id,\n label,\n commandId: record?.command.id ?? action.commandId,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n endContent: binding ? <PaletteShortcut binding={binding} /> : undefined,\n disabled,\n onAction: () => {\n if (disabled) return;\n if (requestParams) {\n requestParams();\n return;\n }\n void runTreeAction({ action, context, workbench, onCommandError }).catch(() => undefined);\n },\n });\n }\n\n return items;\n};\n\nexport const createTreeContextMenuItems = (input: CreateTreeContextMenuItemsInput) => {\n const actionItems = createTreeActionMenuItems(input);\n const { regularItems, kernelItems } = input.menuPath\n ? createTreeMenuItemGroups({ ...input, menuPath: input.menuPath })\n : { regularItems: [], kernelItems: [] };\n const visibleRegularItems = [...actionItems, ...regularItems];\n\n return [...visibleRegularItems, ...withLeadingSeparator(kernelItems, visibleRegularItems.length > 0)];\n};\n\nexport const createTreeActionItems = (input: CreateTreeActionItemsInput) => {\n const { actions = [], context, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listActiveKeybindings().map((k) => [k.commandId, k.keybinding]));\n const items: TreeListAction[] = [];\n\n for (const action of actions) {\n if (!isTreeActionVisible(workbench, action, contextValues) || !isTreeActionEnabled(workbench, action)) continue;\n\n const record = resolveTreeActionCommand(workbench, action);\n const label = action.label ?? record?.command.label;\n if (!label) continue;\n\n const icon = action.icon ?? record?.command.icon;\n const binding = action.commandId ? shortcuts.get(action.commandId) : undefined;\n const requestParams =\n hasCommandParameters(action.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: { id: action.commandId ?? action.id, label, params: action.params } },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => runTreeAction({ action, args, context, workbench, onCommandError }),\n })\n : undefined;\n items.push({\n id: action.id,\n label,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n tooltip: binding ? (\n <HStack gap=\"2\">\n <Text>{label}</Text>\n <PaletteShortcut binding={binding} />\n </HStack>\n ) : undefined,\n onAction: () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void runTreeAction({ action, context, workbench, onCommandError }).catch(() => undefined);\n },\n });\n }\n\n return items;\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport type { ResourceContextAction, TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type { ResourceRef, WorkbenchCoreContributionContext } from \"../../core\";\nimport { resourceContextMenuPath } from \"../../core\";\nimport { createTreeContextMenuItems } from \"../renderers/tree/tree-actions\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nconst toResourceContextAction = (item: TreeListActionMenuItem): ResourceContextAction => ({\n key: item.id,\n label: item.label,\n commandId: item.commandId,\n icon: typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"16px\" /> : item.icon,\n endContent: item.endContent,\n isDisabled: item.disabled,\n separatorBefore: item.separatorBefore,\n onClick: () => item.onAction?.(),\n});\n\nexport const createWorkbenchResourceActions = (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) =>\n createTreeContextMenuItems({\n menuPath: resourceContextMenuPath(resource.kind),\n workbench,\n context: { resource },\n onRequestParams: ({ request }) => workbench.commandPalette.requestParams(request),\n }).map(toResourceContextAction);\n\nexport const useWorkbenchResourceActionResolver = (workbench: WorkbenchCoreContributionContext) => {\n useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n\n return (resource: ResourceRef) => createWorkbenchResourceActions(workbench, resource);\n};\n","import type { ToastStatusChangeDetails } from \"@chakra-ui/react\";\nimport { toaster } from \"@pstdio/ui\";\nimport { useEffect, useRef } from \"react\";\nimport type { RegisteredWorkbenchNotification, WorkbenchCore, WorkbenchNotificationAction } from \"../../core\";\n\n// Bridges `workbench.notifications` into the shared `@pstdio/ui` toaster singleton.\n// The Workbench shell renders the viewport once alongside the rest of its chrome.\ninterface WorkbenchNotificationHostProps {\n workbench: WorkbenchCore;\n}\n\nconst executeNotificationAction = (input: { action: WorkbenchNotificationAction; workbench: WorkbenchCore }) => {\n const { action, workbench } = input;\n void workbench.commands.executeCommand(action.commandId, action.args).catch(() => undefined);\n};\n\nexport const WorkbenchNotificationHost = (props: WorkbenchNotificationHostProps) => {\n const { workbench } = props;\n const shownNotificationIds = useRef(new Set<string>());\n\n useEffect(() => {\n const showNotification = (notification: RegisteredWorkbenchNotification) => {\n const action = notification.actions?.[0];\n const toastAction = action\n ? {\n label: action.title,\n onClick: () => executeNotificationAction({ action, workbench }),\n }\n : undefined;\n const toastOptions = {\n id: notification.id,\n type: notification.level,\n title: notification.title,\n description: notification.message,\n action: toastAction,\n closable: true,\n onStatusChange: (details: ToastStatusChangeDetails) => {\n if (details.status === \"unmounted\") workbench.notifications.dismiss(notification.id);\n },\n };\n\n if (shownNotificationIds.current.has(notification.id)) {\n toaster.update(notification.id, toastOptions);\n return;\n }\n\n shownNotificationIds.current.add(notification.id);\n toaster.create(toastOptions);\n };\n\n for (const notification of workbench.notifications.listNotifications()) showNotification(notification);\n\n const subscription = workbench.notifications.subscribe((event) => {\n if (event.type === \"show\") {\n showNotification(event.notification);\n return;\n }\n\n shownNotificationIds.current.delete(event.id);\n toaster.dismiss(event.id);\n });\n\n return () => {\n subscription.dispose();\n for (const id of shownNotificationIds.current) toaster.dismiss(id);\n shownNotificationIds.current.clear();\n };\n }, [workbench]);\n\n return null;\n};\n","import type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport const useWorkbenchLocationResource = (workbench: WorkbenchCore) => {\n const activeLocationWidgetId = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.activeLocationWidgetId,\n );\n return activeLocationWidgetId ? workbench.getPrimaryResource() : undefined;\n};\n\nexport const useWorkbenchActiveModeId = (workbench: WorkbenchCore) =>\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n","import { Box, Center } from \"@chakra-ui/react\";\nimport { type ReactNode, useLayoutEffect, useRef } from \"react\";\nimport type {\n RegisteredPlaceholderContribution,\n RegisteredWidgetContribution,\n WorkbenchCore,\n WorkbenchPanelRenderInput,\n WorkbenchRendererRegistration,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchWidgetHostProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;\n}\n\nconst WorkbenchWidgetFallback = (props: { label: string }) => {\n const { label } = props;\n\n return (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n );\n};\n\nconst WorkbenchRenderedWidgetFrame = (props: { children: ReactNode }) => {\n const { children } = props;\n\n return (\n <Box flex=\"1\" minW=\"0\" minH=\"0\" w=\"full\" h=\"full\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n\ninterface WorkbenchKeepAliveSlotProps {\n workbench: WorkbenchCore;\n rendererId: string;\n workbenchInput: WorkbenchPanelRenderInput;\n}\n\n// Claims the renderer's persistent host into a stable slot div. The kept-alive\n// subtree itself lives in `WorkbenchKeepAliveLayer`; this just opens the door\n// for the host to be reparented into the widget's frame.\nconst WorkbenchKeepAliveSlot = (props: WorkbenchKeepAliveSlotProps) => {\n const { workbench, rendererId, workbenchInput } = props;\n const slotRef = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n const slot = slotRef.current;\n if (!slot) return;\n const disposable = workbench.renderers.claim(rendererId, slot, workbenchInput);\n return () => disposable.dispose();\n }, [workbench, rendererId, workbenchInput]);\n\n return <div ref={slotRef} style={{ display: \"contents\" }} data-workbench-keep-alive-slot={rendererId} />;\n};\n\nconst noopRefresh = () => undefined;\n\nconst renderWidgetBody = (renderer: WorkbenchRendererRegistration, workbenchInput: WorkbenchPanelRenderInput) => {\n if (renderer.keepAlive) {\n return (\n <WorkbenchKeepAliveSlot\n workbench={workbenchInput.workbench}\n rendererId={renderer.id}\n workbenchInput={workbenchInput}\n />\n );\n }\n return renderer.render(workbenchInput) as ReactNode;\n};\n\nexport const WorkbenchWidgetHost = (props: WorkbenchWidgetHostProps) => {\n const { workbench, placement } = props;\n const widget = props.widget ?? workbench.layout.getWidget(placement.contributionId);\n const refresh = noopRefresh;\n const renderer = useWorkbenchStore(workbench.renderers.store, (state) => state.renderers[widget?.rendererId ?? \"\"]);\n\n if (!widget) {\n return <WorkbenchWidgetFallback label=\"Widget contribution is no longer registered.\" />;\n }\n const panel = \"singleton\" in widget ? toPanelContribution(widget as RegisteredWidgetContribution) : widget;\n const instance = toPanelInstance(placement);\n\n return (\n // `flex: 1 0 auto` lets the host fill its region when the widget is short and\n // grow past it when the widget is tall, so the region's ScrollArea can scroll.\n <Box display=\"flex\" flex=\"1 0 auto\" minW=\"0\" minH=\"0\" w=\"full\" overflow=\"hidden\">\n {renderer ? (\n <WorkbenchRenderedWidgetFrame>\n {renderWidgetBody(renderer, { workbench, panel, instance, refresh })}\n </WorkbenchRenderedWidgetFrame>\n ) : (\n <WorkbenchWidgetFallback label={`No renderer registered for ${widget.rendererId}.`} />\n )}\n </Box>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@pstdio/ui\";\nimport type {\n RegisteredPlaceholderContribution,\n WorkbenchCore,\n WorkbenchPanelMenuRegion,\n WorkbenchRegion as WorkbenchRegionId,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n getWorkbenchPanelForMenuRegion,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { getWorkbenchRegionBackground } from \"../theme/workbench-theme-background\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\ninterface WorkbenchRegionProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegionId;\n title?: string;\n pointerEvents?: \"auto\" | \"none\";\n transparent?: boolean;\n}\n\n// Header bars and the status bar lay their content out in a row, so they\n// scroll on the X axis; every other region scrolls vertically.\nconst horizontalScrollRegions = new Set<WorkbenchRegionId>([\n \"nav\",\n \"sidenav-header\",\n \"main-header\",\n \"secondary-header\",\n \"side-header\",\n \"status\",\n]);\n\nconst panelMenuRegionIds = new Set<WorkbenchRegionId>(\n Object.values(workbenchPanelMenuRegions).flatMap((regions) => Object.values(regions)),\n);\nconst sidePanelRegionIds = new Set<WorkbenchRegionId>([\"side\", \"side-header\", \"side-left-menu\", \"side-right-menu\"]);\n\n// A flex column at least as tall as the viewport lets a widget fill the region\n// (e.g. a tree with a pinned footer) while still growing and scrolling.\nconst verticalContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\", position: \"relative\" } as const;\n\n// Horizontal header regions need a definite content height so full-height\n// controls can stretch through the ScrollArea's content wrapper.\nconst horizontalContentProps = {\n display: \"flex\",\n alignItems: \"stretch\",\n h: \"full\",\n minH: \"100%\",\n position: \"relative\",\n} as const;\n\nconst getActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((placement) => placement.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveRenderedRegionPlacements = (\n widgets: WorkbenchWidgetPlacement[],\n activeWidgetId?: string,\n): WorkbenchWidgetPlacement[] => {\n const activePlacement = getActivePlacement(widgets, activeWidgetId);\n if (!activePlacement) return [];\n return widgets.filter(\n (placement) => placement.widgetId === activePlacement.widgetId || placement.mountStrategy === \"keep-mounted\",\n );\n};\n\nexport const resolveRegionPlacementRenderState = (\n placement: WorkbenchWidgetPlacement,\n activeWidgetId: string | undefined,\n) => {\n const active = placement.widgetId === activeWidgetId;\n return {\n active,\n display: \"flex\",\n pointerEvents: active ? \"auto\" : \"none\",\n position: active ? \"relative\" : \"absolute\",\n visibility: active ? \"visible\" : \"hidden\",\n } as const;\n};\n\nconst createPlaceholderPlacement = (placeholder: RegisteredPlaceholderContribution): WorkbenchWidgetPlacement => ({\n widgetId: placeholder.id,\n contributionId: placeholder.id,\n title: placeholder.title,\n closable: false,\n});\n\nexport const WorkbenchRegion = (props: WorkbenchRegionProps) => {\n const { workbench, region, title, pointerEvents = \"auto\", transparent = false } = props;\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const currentRegionState = layout.regions[region];\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const activeSubPanel = panelMenuRegionIds.has(region)\n ? getActiveWorkbenchSubPanel(\n layout,\n getWorkbenchPanelForMenuRegion(region as WorkbenchPanelMenuRegion),\n locationResource,\n { ignoreOwnerResourceUri: sidePanelRegionIds.has(region) },\n )\n : undefined;\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (sidePanelRegionIds.has(region)\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement)) &&\n matchesWorkbenchPanelMenuOwner(contribution, {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n })\n : false;\n }),\n };\n const globalActiveWidgetId = useWorkbenchStore(workbench.layout.store, (state) => state.layout.activeWidgetId);\n const activePlacement = getActivePlacement(regionState.widgets, regionState.activeWidgetId);\n const placeholder = activePlacement ? undefined : workbench.layout.getPlaceholder(region);\n const placement = activePlacement ?? (placeholder ? createPlaceholderPlacement(placeholder) : undefined);\n const renderedPlacements = activePlacement\n ? resolveRenderedRegionPlacements(regionState.widgets, activePlacement.widgetId)\n : [];\n\n if (!placement) return null;\n\n const scrollsHorizontally = horizontalScrollRegions.has(region);\n\n // Interacting with a region makes its active widget the globally-active one (so clicking\n // into the Side Panel session sets it global-active) without touching the primary anchor,\n // which only follows `main`. Placeholders are not real widgets, so only activate a real\n // placement that is not already active.\n const activateOnInteract = () => {\n if (activePlacement && activePlacement.widgetId !== globalActiveWidgetId) {\n workbench.layout.activatePanel(activePlacement.widgetId);\n }\n };\n\n return (\n <Flex\n as=\"section\"\n direction=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n bg={transparent ? \"transparent\" : getWorkbenchRegionBackground(region)}\n overflow=\"hidden\"\n pointerEvents={pointerEvents}\n aria-label={title ?? region}\n onPointerDown={activateOnInteract}\n onFocusCapture={activateOnInteract}\n >\n {/* The region owns scrolling: overflowing widget content scrolls here\n with the same narrow overlay scrollbar used across the workbench. */}\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n size=\"xs\"\n showVerticalScrollbar={!scrollsHorizontally}\n showHorizontalScrollbar={scrollsHorizontally}\n // Horizontal bars hold a single row that should stay vertically\n // centered; the ScrollArea otherwise top-aligns its flowing content.\n viewportProps={scrollsHorizontally ? { justifyContent: \"center\" } : undefined}\n // Vertical regions host a flex column so a widget can fill the region\n // (e.g. a tree with a pinned footer) yet still grow and scroll.\n contentProps={scrollsHorizontally ? horizontalContentProps : verticalContentProps}\n >\n {placeholder ? (\n <WorkbenchWidgetHost workbench={workbench} placement={placement} widget={placeholder} />\n ) : (\n renderedPlacements.map((renderedPlacement) => {\n const renderState = resolveRegionPlacementRenderState(renderedPlacement, activePlacement?.widgetId);\n\n return (\n <Box\n key={renderedPlacement.widgetId}\n display={renderState.display}\n flex={renderState.active ? \"1 0 auto\" : undefined}\n h={renderState.active ? undefined : \"full\"}\n inset={renderState.active ? undefined : \"0\"}\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n pointerEvents={renderState.pointerEvents}\n position={renderState.position}\n visibility={renderState.visibility}\n w=\"full\"\n >\n <WorkbenchWidgetHost workbench={workbench} placement={renderedPlacement} />\n </Box>\n );\n })\n )}\n </ScrollArea>\n </Flex>\n );\n};\n","import { IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { useRef } from \"react\";\nimport type { ResourceRef, WorkbenchCompositionAddablePanel, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { openPanelWidget } from \"./panel-widget-open\";\n\ninterface WorkbenchPanelAddMenuProps {\n workbench: WorkbenchCore;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n panels: readonly WorkbenchCompositionAddablePanel[];\n}\n\nexport const WorkbenchPanelAddMenu = (props: WorkbenchPanelAddMenuProps) => {\n const { panels, region, resource, workbench } = props;\n const hydrating = useWorkbenchStore(workbench.history.store, (state) => state.hydrating);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const label = \"Add panel\";\n if (panels.length === 0) return null;\n\n const openPanel = (panel: WorkbenchCompositionAddablePanel) =>\n openPanelWidget({ workbench, widget: panel.contribution, region, resource, pinned: panel.pinned });\n\n const trigger = (\n <IconButton\n ref={panels.length > 1 ? triggerRef : undefined}\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={label}\n disabled={hydrating}\n flexShrink={0}\n onClick={panels.length === 1 ? () => openPanel(panels[0]) : undefined}\n >\n <WorkbenchIcon name=\"plus\" size={13} />\n </IconButton>\n );\n\n if (panels.length === 1) return <Tooltip content={label}>{trigger}</Tooltip>;\n\n return (\n <Menu.Root positioning={{ placement: \"bottom-start\", getAnchorElement: () => triggerRef.current }}>\n <Tooltip content={label}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"17.5rem\" bg=\"bg\">\n {panels.map((panel) => (\n <Menu.Item\n key={panel.contribution.id}\n value={`widget:${panel.contribution.id}`}\n disabled={hydrating}\n asChild\n >\n <ListRow\n asChild\n variant=\"full-width\"\n label={panel.contribution.title}\n icon={\n panel.contribution.icon ? <WorkbenchIcon name={panel.contribution.icon} size={14} /> : undefined\n }\n disabled={hydrating}\n onActivate={() => openPanel(panel)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import type { WorkbenchRegion, WorkbenchWidgetPlacement } from \"../../core\";\n\nexport const toTabKey = (regionId: string, placement: WorkbenchWidgetPlacement) =>\n `${regionId}:${placement.contributionId}`;\n\n// A lone pinned, non-closable sidenav panel offers no tab interaction — there is nothing to\n// switch to or close — so the sidenav renders it without a tab strip.\nexport const suppressesSidenavTabStrip = (region: WorkbenchRegion, placements: WorkbenchWidgetPlacement[]) =>\n region === \"sidenav\" && placements.length === 1 && placements[0]!.pinned === true && placements[0]!.closable !== true;\n\n// A Sub Panel tab presents its widget; the resource on its placement only binds\n// it to a Location. Location and content tabs present the resource they show.\nexport const resolveTabIconName = (\n placement: WorkbenchWidgetPlacement,\n widget: { icon?: string } | undefined,\n resourceKindIcon: string | undefined,\n) => {\n const resourceIcon = placement.resource?.icon ?? resourceKindIcon;\n if (placement.role === \"sub-panel\") return widget?.icon ?? resourceIcon;\n return resourceIcon ?? widget?.icon;\n};\n\nexport const resolveDisplayedActiveWidgetId = (\n visiblePlacements: WorkbenchWidgetPlacement[],\n activeWidgetId: string | undefined,\n): string | undefined => {\n if (!activeWidgetId) return visiblePlacements[0]?.widgetId;\n const hasActive = visiblePlacements.some((placement) => placement.widgetId === activeWidgetId);\n if (hasActive) return activeWidgetId;\n return visiblePlacements[0]?.widgetId;\n};\n","import {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion,\n type WorkbenchWidgetPlacement,\n workbenchPanelMenuRegions,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { suppressesSidenavTabStrip } from \"./region-tabs-visibility\";\n\nconst isPlacementCloseable = (placement: WorkbenchWidgetPlacement) => placement.closable === true;\n\nconst isWorkbenchPanelRegion = (region: WorkbenchRegion): region is WorkbenchPanelRegion =>\n workbenchPanelRegions.some((panelRegion) => panelRegion === region);\n\nexport const shouldShowRegionTabs = (\n placements: WorkbenchWidgetPlacement[],\n options: { hasLeadingActions?: boolean; hasAddAction?: boolean } = {},\n) =>\n options.hasAddAction === true ||\n options.hasLeadingActions === true ||\n placements.length > 0 ||\n placements.some(isPlacementCloseable);\n\ninterface WorkbenchPanelHeaderVisibility {\n hasOpenSubPanels?: boolean;\n hasEligibleSubPanels?: boolean;\n hasPanelMenus?: boolean;\n hasHeaderActions?: boolean;\n}\n\nexport const shouldShowPanelHeader = (input: WorkbenchPanelHeaderVisibility) =>\n input.hasOpenSubPanels === true ||\n input.hasEligibleSubPanels === true ||\n input.hasPanelMenus === true ||\n input.hasHeaderActions === true;\n\nconst isSubPanelPlacement = (placement: WorkbenchWidgetPlacement) => placement.role === \"sub-panel\";\n\nexport const isPlacementEligibleForRegion = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n placement: WorkbenchWidgetPlacement,\n resource = workbench.getPrimaryResource(),\n modeId = workbench.modes.getActiveModeId(),\n) => {\n const widget = workbench.layout.getWidget(placement.contributionId);\n return widget\n ? isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n ignoreResourceLocation: region === \"side\",\n })\n : false;\n};\n\nexport const useWorkbenchPanelHeaderVisible = (workbench: WorkbenchCore, region: WorkbenchPanelRegion) => {\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const compositionPanels = useWorkbenchCompositionPanels(workbench)[region];\n const activeSubPanel = getActiveWorkbenchSubPanel(layoutState.layout, region, resource, {\n ignoreOwnerResourceUri: region === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layoutState.layout);\n const openSubPanels = layoutState.layout.regions[region].widgets.filter(\n (placement) =>\n isSubPanelPlacement(placement) && isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n const hasMultipleLocations =\n region === \"main\" &&\n layoutState.layout.regions.main.widgets.filter(\n (placement) =>\n placement.role === \"location\" && !workbench.layout.getWidget(placement.contributionId)?.subPanelsOnly,\n ).length > 1;\n const eligibleSubPanels = compositionPanels.addable;\n const menuRegions = workbenchPanelMenuRegions[region];\n const hasPanelMenus = [menuRegions.left, menuRegions.right].some(\n (menuRegion) =>\n layoutState.layout.regions[menuRegion].widgets.some(\n (placement) =>\n isPlacementEligibleForRegion(workbench, region, placement, resource, modeId) &&\n matchesWorkbenchPanelMenuOwner(layoutState.widgets[placement.contributionId], {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n }),\n ) || Boolean(workbench.layout.getPlaceholder(menuRegion)),\n );\n const hasHeaderActions =\n listWorkbenchMenuItemsFromState({ itemsByPath, commands, contextValues }, workbenchRegionTabLeadingMenuPath(region))\n .length > 0;\n\n return shouldShowPanelHeader({\n hasOpenSubPanels: openSubPanels.length > 0 || hasMultipleLocations,\n hasEligibleSubPanels: eligibleSubPanels.length > 0,\n hasPanelMenus,\n hasHeaderActions,\n });\n};\n\nexport const useWorkbenchRegionTabsVisible = (workbench: WorkbenchCore, region: WorkbenchRegion) => {\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n const placements = layoutState.layout.regions[region].widgets.filter(\n (placement) =>\n isSubPanelPlacement(placement) && isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n const locationTabs =\n region === \"main\"\n ? layoutState.layout.regions.main.widgets.filter(\n (placement) =>\n placement.role === \"location\" && !workbench.layout.getWidget(placement.contributionId)?.subPanelsOnly,\n )\n : [];\n const leadingItems = listWorkbenchMenuItemsFromState(\n { itemsByPath, commands, contextValues },\n workbenchRegionTabLeadingMenuPath(region),\n );\n\n const tabPlacements = suppressesSidenavTabStrip(region, placements)\n ? []\n : locationTabs.length > 1\n ? [...locationTabs, ...placements]\n : placements;\n\n return shouldShowRegionTabs(tabPlacements, {\n hasLeadingActions: leadingItems.length > 0,\n hasAddAction: isWorkbenchPanelRegion(region) && compositionPanels[region].addable.length > 0,\n });\n};\n","import { Box, CloseButton, Menu, Portal, Tabs, Text } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { ListRow } from \"@pstdio/ui\";\nimport { type KeyboardEvent, type MouseEvent as ReactMouseEvent, type ReactNode, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { resolveTabIconName } from \"./region-tabs-visibility\";\n\ninterface WorkbenchRegionTabProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId: string | undefined;\n disabled?: boolean;\n nextWidgetId?: string;\n previousWidgetId?: string;\n sortable?: boolean;\n}\n\nconst noopRefresh = () => undefined;\n\nconst WorkbenchTabRenderer = (props: {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n rendererId: string;\n}) => {\n const { placement, rendererId, workbench } = props;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const renderer = useWorkbenchStore(workbench.renderers.store, (state) => state.renderers[rendererId]);\n\n if (!widget || !renderer || renderer.keepAlive) return null;\n return renderer.render({\n workbench,\n panel: toPanelContribution(widget),\n instance: toPanelInstance(placement),\n refresh: noopRefresh,\n }) as ReactNode;\n};\n\nconst useRegionTabBehavior = (input: WorkbenchRegionTabProps) => {\n const { disabled = false, nextWidgetId, placement, previousWidgetId, sortable = false, workbench } = input;\n const customMenuRendererId = placement.tab?.customMenuRendererId;\n const isPreview = placement.tabRetention === \"preview\";\n const hasCustomMenu = Boolean(customMenuRendererId);\n const hasContextMenu = isPreview;\n const sortableState = useSortable({ id: placement.widgetId, disabled: disabled || !sortable });\n const [openMenu, setOpenMenu] = useState<\"custom\" | \"context\">();\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const openTabMenu = (menu: \"custom\" | \"context\", event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n const rect = event.currentTarget.getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n setOpenMenu(menu);\n };\n const openCustomMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (hasCustomMenu && !disabled) openTabMenu(\"custom\", event);\n };\n const openContextMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (hasContextMenu && !disabled) openTabMenu(\"context\", event);\n };\n const setMenuOpen = (menu: \"custom\" | \"context\", open: boolean) => {\n setOpenMenu((current) => (open ? menu : current === menu ? undefined : current));\n };\n const reorderWithKeyboard = (event: KeyboardEvent<HTMLElement>) => {\n if (!sortable || disabled || !event.altKey) return;\n if (event.key === \"ArrowLeft\" && previousWidgetId) {\n event.preventDefault();\n workbench.layout.reorderPanel(placement.widgetId, { beforeWidgetId: previousWidgetId });\n }\n if (event.key === \"ArrowRight\" && nextWidgetId) {\n event.preventDefault();\n workbench.layout.reorderPanel(placement.widgetId, { afterWidgetId: nextWidgetId });\n }\n };\n return {\n anchor,\n customMenuRendererId,\n hasCustomMenu,\n hasContextMenu,\n isPreview,\n openContextMenu,\n openCustomMenu,\n openMenu,\n reorderWithKeyboard,\n setMenuOpen,\n sortableState,\n };\n};\n\nconst WorkbenchRegionTabMenuSurface = (props: {\n anchor: { x: number; y: number; width: number; height: number };\n children: ReactNode;\n label: string;\n open: boolean;\n setMenuOpen(open: boolean): void;\n}) => {\n const { anchor, children, label, open, setMenuOpen } = props;\n return (\n <Menu.Root\n open={open}\n onOpenChange={(details) => setMenuOpen(details.open)}\n positioning={{ placement: \"bottom-start\", getAnchorRect: () => anchor, offset: { mainAxis: 0 } }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"18.75rem\" bg=\"bg\">\n {children}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\nconst WorkbenchRegionTabContextMenu = (props: {\n anchor: { x: number; y: number; width: number; height: number };\n label: string;\n open: boolean;\n placement: WorkbenchWidgetPlacement;\n setMenuOpen(open: boolean): void;\n workbench: WorkbenchCore;\n}) => {\n const { anchor, label, open, placement, setMenuOpen, workbench } = props;\n return (\n <WorkbenchRegionTabMenuSurface\n anchor={anchor}\n label={`${label} context menu`}\n open={open}\n setMenuOpen={setMenuOpen}\n >\n <Menu.Item value=\"keep-open\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id=\"keep-open\"\n label=\"Keep Open\"\n icon={<WorkbenchIcon name=\"pin\" size={14} />}\n onActivate={() =>\n workbench.layout.updatePanel(placement.widgetId, {\n strategy: { kind: \"persistent\" },\n })\n }\n />\n </Menu.Item>\n </WorkbenchRegionTabMenuSurface>\n );\n};\n\nconst WorkbenchRegionTabLabel = (props: {\n contentRendererId?: string;\n icon?: string;\n id: string;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { contentRendererId, icon, id, label, placement, workbench } = props;\n if (contentRendererId) {\n return (\n <Box id={id} display=\"contents\">\n <WorkbenchTabRenderer workbench={workbench} placement={placement} rendererId={contentRendererId} />\n </Box>\n );\n }\n return (\n <>\n {icon ? <WorkbenchIcon name={icon} size={12} flexShrink={0} color=\"fg.muted\" /> : null}\n <Text as=\"span\" id={id} minW=\"0\" truncate>\n {label}\n </Text>\n </>\n );\n};\n\nconst WorkbenchRegionTabCloseButton = (props: {\n disabled: boolean;\n isActive: boolean;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { disabled, isActive, label, placement, workbench } = props;\n if (placement.closable !== true) return null;\n return (\n <CloseButton\n as=\"span\"\n role=\"button\"\n aria-label={`Close ${label}`}\n aria-disabled={disabled}\n size=\"2xs\"\n boxSize=\"1rem\"\n minW=\"1rem\"\n p=\"0\"\n borderRadius=\"2xs\"\n flexShrink={0}\n me=\"-1\"\n opacity={isActive ? \"1\" : \"0\"}\n pointerEvents={isActive ? \"auto\" : \"none\"}\n color=\"fg.muted\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _hover={{ bg: \"transparent\", color: \"fg\" }}\n _active={{ bg: \"transparent\" }}\n transition=\"opacity 120ms ease\"\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n if (disabled) return;\n workbench.layout.closePanel(placement.widgetId);\n }}\n />\n );\n};\n\nconst WorkbenchRegionTabMenus = (props: {\n behavior: ReturnType<typeof useRegionTabBehavior>;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { behavior, label, placement, workbench } = props;\n return (\n <>\n {behavior.customMenuRendererId ? (\n <WorkbenchRegionTabMenuSurface\n anchor={behavior.anchor}\n label={`${label} menu`}\n open={behavior.openMenu === \"custom\"}\n setMenuOpen={(open) => behavior.setMenuOpen(\"custom\", open)}\n >\n <WorkbenchTabRenderer\n workbench={workbench}\n placement={placement}\n rendererId={behavior.customMenuRendererId}\n />\n </WorkbenchRegionTabMenuSurface>\n ) : null}\n {behavior.hasContextMenu ? (\n <WorkbenchRegionTabContextMenu\n anchor={behavior.anchor}\n label={label}\n open={behavior.openMenu === \"context\"}\n placement={placement}\n setMenuOpen={(open) => behavior.setMenuOpen(\"context\", open)}\n workbench={workbench}\n />\n ) : null}\n </>\n );\n};\n\nexport const WorkbenchRegionTab = (props: WorkbenchRegionTabProps) => {\n const { activeWidgetId, disabled = false, placement, sortable = false, workbench } = props;\n const isActive = placement.widgetId === activeWidgetId;\n const label = placement.title ?? placement.contributionId;\n const labelId = `workbench-tab-label-${placement.widgetId}`;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const icon = resolveTabIconName(\n placement,\n widget,\n placement.resource ? workbench.resources.getKind(placement.resource.kind)?.icon : undefined,\n );\n const contentRendererId = placement.tab?.contentRendererId;\n const behavior = useRegionTabBehavior(props);\n const { isDragging, listeners, setNodeRef, transform, transition } = behavior.sortableState;\n const menuOpen =\n (behavior.openMenu === \"custom\" && behavior.hasCustomMenu) ||\n (behavior.openMenu === \"context\" && behavior.hasContextMenu);\n return (\n <>\n <Tabs.Trigger\n ref={setNodeRef}\n value={placement.widgetId}\n maxW=\"12rem\"\n minW=\"0\"\n flexShrink={0}\n title={label}\n // Name the tab from its label element alone. Computing the name from the tab's\n // contents would fold in the nested Close button, so a closable tab would be\n // called \"Artifacts Close Artifacts\" and rename itself the moment it became\n // closable. The label element still carries any status or count a tab renders.\n aria-labelledby={labelId}\n disabled={disabled}\n className=\"group\"\n aria-haspopup={behavior.hasCustomMenu || behavior.hasContextMenu ? \"menu\" : undefined}\n aria-expanded={behavior.hasCustomMenu || behavior.hasContextMenu ? menuOpen : undefined}\n aria-keyshortcuts={sortable ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined}\n fontStyle={behavior.isPreview ? \"italic\" : undefined}\n opacity={isDragging ? \"0.5\" : undefined}\n transform={CSS.Transform.toString(transform)}\n transition={transition}\n {...listeners}\n onKeyDown={behavior.reorderWithKeyboard}\n onContextMenu={behavior.hasContextMenu ? behavior.openContextMenu : undefined}\n onClick={behavior.hasCustomMenu && isActive && !disabled ? behavior.openCustomMenu : undefined}\n >\n <WorkbenchRegionTabLabel\n contentRendererId={contentRendererId}\n icon={icon}\n id={labelId}\n label={label}\n placement={placement}\n workbench={workbench}\n />\n <WorkbenchRegionTabCloseButton\n disabled={disabled}\n isActive={isActive}\n label={label}\n placement={placement}\n workbench={workbench}\n />\n </Tabs.Trigger>\n <WorkbenchRegionTabMenus behavior={behavior} label={label} placement={placement} workbench={workbench} />\n </>\n );\n};\n","import { Tabs } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { horizontalListSortingStrategy, SortableContext } from \"@dnd-kit/sortable\";\nimport type { ReactNode } from \"react\";\nimport type {\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { WorkbenchRegionTab } from \"./region-tab\";\n\ninterface SortableRegionTabListProps {\n activeWidgetId?: string;\n disabled: boolean;\n leadingActions: ReactNode;\n panelRegion?: WorkbenchPanelRegion;\n placements: WorkbenchWidgetPlacement[];\n resource?: ResourceRef;\n eligibleSubPanels: readonly WorkbenchCompositionAddablePanel[];\n workbench: WorkbenchCore;\n}\n\nexport const SortableRegionTabList = (props: SortableRegionTabListProps) => {\n const { activeWidgetId, disabled, eligibleSubPanels, leadingActions, panelRegion, placements, resource, workbench } =\n props;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n const reorderable = placements.filter(\n (placement) => placement.role === \"sub-panel\" && placement.tabRetention !== \"preview\",\n );\n const reorderWidget = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const activeIndex = placements.findIndex((placement) => placement.widgetId === active.id);\n const overIndex = placements.findIndex((placement) => placement.widgetId === over.id);\n const source = placements[activeIndex];\n const target = placements[overIndex];\n if (\n source?.role !== \"sub-panel\" ||\n source.tabRetention === \"preview\" ||\n target?.role !== \"sub-panel\" ||\n target.tabRetention === \"preview\"\n ) {\n return;\n }\n workbench.layout.reorderPanel(\n String(active.id),\n activeIndex < overIndex ? { afterWidgetId: target.widgetId } : { beforeWidgetId: target.widgetId },\n );\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={reorderWidget}>\n <SortableContext\n items={placements.map((placement) => placement.widgetId)}\n strategy={horizontalListSortingStrategy}\n >\n <Tabs.List h=\"full\" minH=\"0\" minW=\"max-content\" alignItems=\"center\" gap=\"2xs\" justifyContent=\"flex-start\">\n {placements.map((placement) => {\n const reorderableIndex = reorderable.findIndex((candidate) => candidate.widgetId === placement.widgetId);\n return (\n <WorkbenchRegionTab\n key={placement.widgetId}\n workbench={workbench}\n placement={placement}\n activeWidgetId={activeWidgetId}\n disabled={disabled}\n sortable={reorderableIndex >= 0}\n previousWidgetId={reorderable[reorderableIndex - 1]?.widgetId}\n nextWidgetId={reorderable[reorderableIndex + 1]?.widgetId}\n />\n );\n })}\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </Tabs.List>\n </SortableContext>\n </DndContext>\n );\n};\n","import { HStack, IconButton, Menu, Portal, Tabs } from \"@chakra-ui/react\";\nimport {\n buildTabVisibilityMenuActions,\n filterVisibleTabs,\n ListRow,\n PANEL_HEADER_CONTROL_SIZE,\n PANEL_HEADER_TAB_SIZE,\n ScrollArea,\n Tooltip,\n useTabVisibilityStore,\n} from \"@pstdio/ui\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport {\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion as WorkbenchRegionId,\n type WorkbenchWidgetPlacement,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport type { WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { resolveDisplayedActiveWidgetId, resolveTabIconName, toTabKey } from \"./region-tabs-visibility\";\nimport { isPlacementEligibleForRegion, shouldShowRegionTabs } from \"./region-tabs-visibility-hooks\";\nimport { SortableRegionTabList } from \"./sortable-region-tab-list\";\n\nexport {\n shouldShowPanelHeader,\n shouldShowRegionTabs,\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n} from \"./region-tabs-visibility-hooks\";\n\ninterface WorkbenchRegionTabsProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegionId;\n visibilityStorageKey?: string;\n}\n\nconst isWorkbenchPanelRegion = (region: WorkbenchRegionId): region is WorkbenchPanelRegion =>\n workbenchPanelRegions.some((panelRegion) => panelRegion === region);\n\nconst resolvePlacementIcon = (workbench: WorkbenchCore, placement: WorkbenchWidgetPlacement) => {\n const iconName = resolveTabIconName(\n placement,\n workbench.layout.getWidget(placement.contributionId),\n placement.resource ? workbench.resources.getKind(placement.resource.kind)?.icon : undefined,\n );\n return iconName ? <WorkbenchIcon name={iconName} size={14} /> : undefined;\n};\n\nexport const WorkbenchRegionTabs = (props: WorkbenchRegionTabsProps) => {\n const { workbench, region, visibilityStorageKey } = props;\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const historyHydrating = useWorkbenchStore(workbench.history.store, (state) => state.hydrating);\n const regionState = layoutState.layout.regions[region];\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n const subPanelPlacements = regionState.widgets.filter(\n (placement) =>\n placement.role === \"sub-panel\" && isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n // Visibility is on by default; the host can override the storage key. When no key is supplied, fall\n // back to the region id so persistence has a sensible default.\n const visibilityKey = visibilityStorageKey ?? region;\n const tabStore = useTabVisibilityStore(visibilityKey, (state) => state);\n const tabOverrides = tabStore.tabOverrides;\n const getKey = (placement: WorkbenchWidgetPlacement) => toTabKey(region, placement);\n const visibleSubPanels = filterVisibleTabs(subPanelPlacements, tabOverrides, getKey);\n const visibleSubPanelIds = new Set(visibleSubPanels.map((placement) => placement.widgetId));\n const locationPanels =\n region === \"main\" ? regionState.widgets.filter((placement) => placement.role === \"location\") : [];\n // A sub-panels-only Location presents no tab of its own; only its Sub Panels do.\n const tabbedLocationPanels = locationPanels.filter(\n (placement) => !workbench.layout.getWidget(placement.contributionId)?.subPanelsOnly,\n );\n const visiblePlacements =\n tabbedLocationPanels.length + visibleSubPanels.length > 1\n ? regionState.widgets.filter(\n (placement) =>\n tabbedLocationPanels.some((location) => location.widgetId === placement.widgetId) ||\n visibleSubPanelIds.has(placement.widgetId),\n )\n : visibleSubPanels;\n const [viewport, setViewport] = useState<HTMLDivElement | null>(null);\n const [menuOpen, setMenuOpen] = useState(false);\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0 });\n\n const menuActions = buildTabVisibilityMenuActions(\n subPanelPlacements,\n tabOverrides,\n {\n onToggleTab: (key, hiddenByDefault) => tabStore.toggleTab(key, hiddenByDefault),\n onResetAll: () => tabStore.reset(),\n },\n getKey,\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n (placement) => resolvePlacementIcon(workbench, placement),\n );\n const hasVisibilityMenu = menuActions.length > 0;\n const leadingItems = listWorkbenchMenuItemsFromState(\n { itemsByPath, commands, contextValues },\n workbenchRegionTabLeadingMenuPath(region),\n );\n const panelRegion = isWorkbenchPanelRegion(region) ? region : undefined;\n const eligibleSubPanels = panelRegion ? compositionPanels[panelRegion].addable : [];\n const hasAddAction = eligibleSubPanels.length > 0;\n const showTabs = shouldShowRegionTabs(visiblePlacements, {\n hasLeadingActions: leadingItems.length > 0,\n hasAddAction,\n });\n\n const openVisibilityMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasVisibilityMenu) return;\n\n event.preventDefault();\n const target = event.target instanceof Element ? event.target.closest('[role=\"tab\"]') : undefined;\n const rect = (target ?? event.currentTarget).getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n setMenuOpen(true);\n };\n\n // Translate vertical wheel into horizontal scrolling so the tab strip scrolls\n // with a plain mouse wheel — no modifier key required.\n useEffect(() => {\n if (!viewport) return;\n\n const onWheel = (event: WheelEvent) => {\n if (event.deltaY === 0 || viewport.scrollWidth <= viewport.clientWidth) return;\n viewport.scrollLeft += event.deltaY;\n event.preventDefault();\n };\n\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewport]);\n\n if (!showTabs) return null;\n\n const activeWidgetId = resolveDisplayedActiveWidgetId(visiblePlacements, regionState.activeWidgetId);\n const onSelectLeadingItem = (item: WorkbenchMenuItem) => {\n const command = commands[item.commandId]?.command;\n if (command && hasCommandParameters(command.params)) {\n workbench.commandPalette.requestParams({ record: { command }, label: item.label, args: item.args });\n return;\n }\n void workbench.commands.executeCommand(item.commandId, item.args).catch(() => undefined);\n };\n\n const leadingActions = leadingItems.map((item) => (\n <Tooltip key={item.id} content={item.label}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={item.label}\n disabled={historyHydrating || item.disabled}\n flexShrink={0}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n onSelectLeadingItem(item);\n }}\n >\n <WorkbenchIcon name={item.icon ?? \"plus\"} size={14} />\n </IconButton>\n </Tooltip>\n ));\n\n if (visiblePlacements.length === 0) {\n return (\n <HStack flex=\"1 1 auto\" h=\"full\" minW=\"0\" gap=\"2xs\">\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </HStack>\n );\n }\n\n return (\n <Tabs.Root\n value={activeWidgetId}\n onValueChange={(details) => {\n if (historyHydrating) return;\n const placement = visiblePlacements.find((candidate) => candidate.widgetId === details.value);\n if (placement?.role === \"location\") {\n workbench.layout.setRegionActiveWidget(region, placement.widgetId);\n return;\n }\n workbench.layout.activatePanel(details.value);\n }}\n variant=\"subtle\"\n colorPalette=\"gray\"\n justify=\"start\"\n size={PANEL_HEADER_TAB_SIZE}\n alignSelf=\"stretch\"\n flex=\"1 1 auto\"\n maxW=\"full\"\n minW=\"0\"\n h=\"full\"\n position=\"relative\"\n zIndex=\"1\"\n onContextMenu={hasVisibilityMenu ? openVisibilityMenu : undefined}\n >\n {/* Overflowing tabs scroll horizontally; the overlay scrollbar adds no\n height so the active tab still meets the header's bottom edge. */}\n <ScrollArea\n viewportRef={setViewport}\n size=\"xs\"\n h=\"full\"\n w=\"max-content\"\n maxW=\"full\"\n minW=\"0\"\n showVerticalScrollbar={false}\n showHorizontalScrollbar\n contentProps={{ h: \"full\" }}\n >\n {/* Chakra's size=\"sm\" list sets a 36px min-height that overflows the 2rem header and\n makes the horizontal-only viewport scroll vertically; minH=\"0\" lets h=\"full\" win. */}\n <SortableRegionTabList\n workbench={workbench}\n placements={visiblePlacements}\n activeWidgetId={activeWidgetId}\n disabled={historyHydrating}\n panelRegion={panelRegion}\n resource={resource}\n eligibleSubPanels={eligibleSubPanels}\n leadingActions={leadingActions}\n />\n </ScrollArea>\n {hasVisibilityMenu ? (\n <Menu.Root\n open={menuOpen}\n onOpenChange={(details) => setMenuOpen(details.open)}\n positioning={{\n placement: \"bottom-start\",\n getAnchorRect: () => anchor,\n offset: { mainAxis: 0 },\n }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"220px\" bg=\"bg\">\n {menuActions.map((action) => (\n <Menu.Item key={action.key} value={action.key} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </Tabs.Root>\n );\n};\n","import type { DataTableSelectionAction, RowData } from \"@pstdio/ui/data-table\";\nimport type { ReactNode } from \"react\";\nimport type {\n DataTableRendererColumn,\n DataTableRendererQueryResult,\n DataTableRendererRow,\n DataTableRendererSelectionAction,\n WorkbenchPanelInstance,\n} from \"../../../core\";\n\nexport const resolveDataTableRendererColumns = (\n result: DataTableRendererQueryResult,\n contributionColumns?: DataTableRendererColumn[],\n) => {\n if (result.columns) return result.columns;\n if (contributionColumns) return contributionColumns;\n const firstRow = result.rows[0];\n return firstRow ? Object.keys(firstRow.values).map((id): DataTableRendererColumn => ({ id })) : [];\n};\n\nexport const buildDataTableRendererData = (rows: DataTableRendererRow[], columns: DataTableRendererColumn[]) => {\n const rowByData = new WeakMap<Record<string, unknown>, DataTableRendererRow>();\n const data = rows.map((row) => {\n const values = Object.fromEntries(columns.map((column) => [column.id, row.values[column.id]]));\n rowByData.set(values, row);\n return values;\n });\n return { data, rowByData };\n};\n\nexport const resolveDataTableRendererSelectionActions = (\n actions: DataTableRendererSelectionAction[],\n rowByData: WeakMap<RowData, DataTableRendererRow>,\n): DataTableSelectionAction[] =>\n actions.map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const rows = data.flatMap((row) => {\n const rendererRow = rowByData.get(row);\n return rendererRow ? [rendererRow] : [];\n });\n void action.run(rows);\n },\n }));\n\nexport const resolveDataTableRendererStorageKey = (rendererId: string, placement: WorkbenchPanelInstance) => {\n const resourceKey = placement.resource?.uri ?? placement.resource?.id ?? \"unscoped\";\n return `pstdio:workbench:dataTableRenderer:${rendererId}:${placement.instanceId}:${resourceKey}`;\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@pstdio/ui\";\nimport {\n DataTable,\n type DataTableColumnRenderer,\n type DataTableColumnStat,\n type DataTableRowAction,\n DataTableSkeleton,\n type RowData,\n} from \"@pstdio/ui/data-table\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n DataTableRendererQueryResult,\n RegisteredDataTableRendererContribution,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport {\n buildDataTableRendererData,\n resolveDataTableRendererColumns,\n resolveDataTableRendererSelectionActions,\n resolveDataTableRendererStorageKey,\n} from \"./data-table-view-model\";\n\ninterface WorkbenchDataTableViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredDataTableRendererContribution;\n placement: WorkbenchPanelInstance;\n}\n\nconst initialResult: DataTableRendererQueryResult = { rows: [] };\n\n// Tabs unmount when they deactivate, so without a cache every revisit flashes a\n// loading state. The last result renders instantly while the fresh query runs.\nconst lastResults = new Map<string, DataTableRendererQueryResult>();\n\nconst resultCacheKey = (contributionId: string, placement: WorkbenchPanelInstance) =>\n `${contributionId} ${placement.resource?.uri ?? \"\"}`;\n\nexport const WorkbenchDataTableView = (props: WorkbenchDataTableViewProps) => {\n const { workbench, contribution, placement } = props;\n const cacheKey = resultCacheKey(contribution.id, placement);\n const [result, setResult] = useState(() => lastResults.get(cacheKey) ?? initialResult);\n const [loading, setLoading] = useState(() => !lastResults.has(cacheKey));\n const requestRef = useRef(0);\n\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve(\n contribution.executeQuery({ resource: placement.resource, modeId: workbench.modes.getActiveModeId() }),\n ).then((next) => {\n if (cancelled || requestRef.current !== requestId) return;\n lastResults.set(cacheKey, next);\n setResult(next);\n setLoading(false);\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = workbench.renderers.onDidRefreshDataTableRenderer((event) => {\n if (event.dataTableRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [cacheKey, contribution, placement.resource, workbench]);\n\n const columns = resolveDataTableRendererColumns(result, contribution.columns);\n const model = useMemo(() => buildDataTableRendererData(result.rows, columns), [columns, result.rows]);\n const labels = Object.fromEntries(\n columns.filter((column) => column.label).map((column) => [column.id, column.label!]),\n );\n const descriptions = Object.fromEntries(\n columns.filter((column) => column.description).map((column) => [column.id, column.description!]),\n );\n const icons = Object.fromEntries(\n columns.filter((column) => column.icon).map((column) => [column.id, column.icon as ReactNode]),\n );\n const stats = Object.fromEntries(\n columns.filter((column) => column.stat).map((column) => [column.id, column.stat as DataTableColumnStat]),\n );\n const renderers = Object.fromEntries(\n columns\n .filter((column) => column.renderer)\n .map((column) => [column.id, column.renderer as DataTableColumnRenderer]),\n );\n const rowActions: DataTableRowAction[] = (contribution.rowActions ?? []).map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const row = model.rowByData.get(data);\n if (row) void action.run(row);\n },\n }));\n const selectionActions = resolveDataTableRendererSelectionActions(\n contribution.selectionActions ?? [],\n model.rowByData,\n );\n const openRow = (data: RowData) => {\n const row = model.rowByData.get(data);\n if (!row) return;\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n\n if (loading) {\n // The table chrome renders instantly: declared columns become real headers\n // and only the row values shimmer until the first query resolves.\n const skeletonColumns = (contribution.columns ?? [])\n .filter((column) => !column.hidden)\n .map((column) => ({ id: column.id, label: column.label ?? column.id }));\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTableSkeleton columns={skeletonColumns.length > 0 ? skeletonColumns : undefined} />\n </Stack>\n );\n }\n\n if (result.rows.length === 0) {\n return (\n <EmptyState h=\"full\" title={contribution.emptyTitle ?? \"No rows\"} description={contribution.emptyDescription} />\n );\n }\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTable\n data={model.data}\n getRowId={(data) => model.rowByData.get(data)?.id ?? \"\"}\n toolbarStorageKey={resolveDataTableRendererStorageKey(contribution.id, placement)}\n compactHeaders={labels}\n columnDescriptions={descriptions}\n columnIcons={icons}\n hiddenColumns={columns.filter((column) => column.hidden).map((column) => column.id)}\n columnStats={stats}\n columnRenderers={renderers}\n initialPageSize={contribution.initialPageSize}\n pageSizeOptions={contribution.pageSizeOptions}\n selectionMode={contribution.selectionMode}\n selectionActions={selectionActions}\n rowActions={rowActions}\n onRowClick={openRow}\n isRowInteractive={(data) => {\n const row = model.rowByData.get(data);\n return Boolean(row && contribution.onRowActivate);\n }}\n fullWidth\n />\n </Stack>\n );\n};\n","import type { ParamEditorProps } from \"@pstdio/ui\";\nimport type { PreferencePropertySchema, PreferenceValue } from \"../../../core\";\n\n// `@pstdio/ui` does not export the Param union by name, so derive it from the\n// editor props — this keeps the mapper honest about what the editor accepts.\ntype Param = NonNullable<ParamEditorProps[\"params\"]>[number];\ntype ParamValue = Parameters<NonNullable<ParamEditorProps[\"onChange\"]>>[1];\n\nexport interface PreferenceParamEntry {\n name: string;\n schema: PreferencePropertySchema;\n label?: string;\n /** Current value; falls back to the schema default when omitted. */\n value?: PreferenceValue;\n}\n\n// Booleans have no dedicated param-editor control, so they render as a two-option\n// selection. Array/object schemas without an enum have no editor at all and are skipped.\nconst BOOLEAN_OPTIONS = [\n { id: \"true\", name: \"On\" },\n { id: \"false\", name: \"Off\" },\n];\n\nconst humanize = (value: string) => {\n const segment = value.split(\".\").at(-1) ?? value;\n const spaced = segment.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/[-_]/g, \" \");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n};\n\nconst toOptions = (values: PreferenceValue[]) =>\n values.map((value) => ({ id: String(value), name: humanize(String(value)) }));\n\nconst toParam = (entry: PreferenceParamEntry): Param | undefined => {\n const { name, schema } = entry;\n const label = entry.label ?? humanize(name);\n const description = schema.description;\n const current = entry.value ?? schema.default;\n const base = { id: name, name: label, description };\n\n if (schema.type === \"number\") {\n return { ...base, type: \"number\", defaultValue: Number(current ?? 0) };\n }\n\n if (schema.type === \"boolean\") {\n return { ...base, type: \"selection\", defaultValue: String(Boolean(current)), options: BOOLEAN_OPTIONS };\n }\n\n if (schema.type === \"string\") {\n if (schema.enum) {\n return { ...base, type: \"selection\", defaultValue: String(current ?? \"\"), options: toOptions(schema.enum) };\n }\n return { ...base, type: \"text\", defaultValue: String(current ?? \"\"), singleLine: true };\n }\n\n if (schema.type === \"array\" && schema.enum) {\n const defaultValue = Array.isArray(current) ? current.map(String) : [];\n return { ...base, type: \"selection\", multiSelect: true, defaultValue, options: toOptions(schema.enum) };\n }\n\n return undefined;\n};\n\nexport const preferenceSchemaToParams = (entries: PreferenceParamEntry[]) =>\n entries.map(toParam).filter((param): param is Param => param !== undefined);\n\nexport const paramValueToPreference = (schema: PreferencePropertySchema, value: ParamValue): PreferenceValue => {\n if (schema.type === \"boolean\") return value === \"true\";\n if (schema.type === \"number\") return Number(value);\n if (schema.type === \"array\") return Array.isArray(value) ? value.map(String) : [];\n return String(value);\n};\n","import { Button, HStack, Stack } from \"@chakra-ui/react\";\nimport { ParamEditor, type ParamEditorProps } from \"@pstdio/ui\";\nimport { useState } from \"react\";\nimport type { PreferenceRegistry, PreferenceScope } from \"../../../core\";\nimport {\n type PreferenceParamEntry,\n paramValueToPreference,\n preferenceSchemaToParams,\n} from \"./preference-schema-to-params\";\n\ntype ParamValue = Parameters<NonNullable<ParamEditorProps[\"onChange\"]>>[1];\n\nexport interface WorkbenchPreferencesFormProps {\n preferences: PreferenceRegistry;\n /** Preference names to edit; an object form overrides the displayed label. */\n names: (string | { name: string; label?: string })[];\n /** Resolves the scopeId for a preference's scope (e.g. \"project\" -> active project id). */\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n /** \"live\" persists on change (default); \"apply\" stages edits behind Save/Discard. */\n mode?: \"live\" | \"apply\";\n}\n\nconst toName = (entry: string | { name: string; label?: string }) =>\n typeof entry === \"string\" ? { name: entry } : entry;\n\n// Renders a param editor auto-generated from the registered preference schema. The\n// form is generic: it knows only about preference names + scope, never the domain.\nexport const WorkbenchPreferencesForm = (props: WorkbenchPreferencesFormProps) => {\n const { preferences, names, resolveScopeId, mode = \"live\" } = props;\n const [staged, setStaged] = useState<Record<string, ParamValue>>({});\n const [formKey, setFormKey] = useState(0);\n\n const scopeRef = (scope: PreferenceScope) => ({ scope, scopeId: resolveScopeId?.(scope) });\n\n const entries: PreferenceParamEntry[] = [];\n for (const candidate of names) {\n const { name, label } = toName(candidate);\n const schema = preferences.getSchema(name);\n if (!schema) continue;\n entries.push({ name, label, schema, value: preferences.getValue(name, scopeRef(schema.scope)) });\n }\n\n const params = preferenceSchemaToParams(entries);\n const schemaByName = new Map(entries.map((entry) => [entry.name, entry.schema]));\n\n const persist = (name: string, value: ParamValue) => {\n const schema = schemaByName.get(name);\n if (!schema) return;\n preferences.setValue(name, paramValueToPreference(schema, value), scopeRef(schema.scope));\n };\n\n const handleChange = (id: string, value: ParamValue) => {\n if (mode === \"apply\") {\n setStaged((current) => ({ ...current, [id]: value }));\n return;\n }\n persist(id, value);\n };\n\n const save = () => {\n for (const [name, value] of Object.entries(staged)) persist(name, value);\n setStaged({});\n setFormKey((key) => key + 1);\n };\n\n const discard = () => {\n setStaged({});\n setFormKey((key) => key + 1);\n };\n\n const hasStaged = Object.keys(staged).length > 0;\n\n return (\n <Stack gap=\"md\" maxW=\"640px\">\n <ParamEditor key={formKey} params={params} onChange={handleChange} fullWidth />\n {mode === \"apply\" && (\n <HStack gap=\"sm\">\n <Button size=\"sm\" onClick={save} disabled={!hasStaged}>\n Save\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={discard} disabled={!hasStaged}>\n Discard\n </Button>\n </HStack>\n )}\n </Stack>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { PaletteShortcut, Tooltip, type TreeListNode, type TreeListSection } from \"@pstdio/ui\";\nimport { DiffBubble } from \"@pstdio/ui/diff\";\nimport type { ReactNode } from \"react\";\nimport {\n getWorkbenchSelectionResourceUris,\n type ResourceRef,\n resourceContextMenuPath,\n type TreeNode,\n type TreeViewSection,\n type WorkbenchCore,\n} from \"../../../core\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { createTreeActionItems, createTreeContextMenuItems, type TreeActionParamsRequest } from \"./tree-actions\";\n\ninterface TreeNodeRenderContext {\n workbench: WorkbenchCore;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n suppressContextMenus?: boolean;\n}\n\nexport const resolveTreeListActiveNodeId = (activeNodeId: string | null | undefined, selectedNodeId?: string) => {\n if (!activeNodeId) return selectedNodeId;\n return activeNodeId;\n};\n\ninterface ResolveTreeListSelectionInput {\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n activeNodeId?: string | null;\n activeResource?: ResourceRef;\n selectedNodeId?: string;\n}\n\nconst activeNodeIds = (ids: string[]) => {\n const uniqueIds = [...new Set(ids)];\n if (uniqueIds.length === 0) return undefined;\n return uniqueIds.length === 1 ? uniqueIds[0] : uniqueIds;\n};\n\nconst resolveTreeNodeResourceUri = (node: TreeNode) => {\n if (node.resource) return node.resource.uri;\n if (node.target?.kind === \"resource\") return node.target.resource.uri;\n return undefined;\n};\n\nconst listTreeNodes = (nodes: TreeNode[], childrenByNodeId: Record<string, TreeNode[]>): TreeNode[] =>\n nodes.flatMap((node) => [\n node,\n ...listTreeNodes([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], childrenByNodeId),\n ]);\n\nconst listSectionNodes = (sections: TreeViewSection[], childrenByNodeId: Record<string, TreeNode[]>) =>\n sections.flatMap((section) => listTreeNodes(section.nodes, childrenByNodeId));\n\nconst resolveActiveResourceNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n resourceUris: string[],\n) => {\n const nodes = listSectionNodes(sections, childrenByNodeId);\n\n for (const resourceUri of resourceUris) {\n const matches = nodes\n .filter((node) => node.id === resourceUri || resolveTreeNodeResourceUri(node) === resourceUri)\n .map((node) => node.id);\n if (matches.length > 0) return activeNodeIds(matches);\n }\n\n return undefined;\n};\n\nconst findSectionNode = (sections: TreeViewSection[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>) =>\n listSectionNodes(sections, childrenByNodeId).find((node) => node.id === nodeId);\n\nexport const resolveTreeListSelection = (input: ResolveTreeListSelectionInput) => {\n const { sections, childrenByNodeId, activeNodeId, activeResource, selectedNodeId } = input;\n if (activeNodeId) return activeNodeId;\n\n const activeResourceUris = getWorkbenchSelectionResourceUris(activeResource);\n let selectedResourceUri: string | undefined;\n if (selectedNodeId) {\n const selectedNode = findSectionNode(sections, selectedNodeId, childrenByNodeId);\n selectedResourceUri = selectedNode ? resolveTreeNodeResourceUri(selectedNode) : undefined;\n if (selectedResourceUri && activeResourceUris.includes(selectedResourceUri)) return selectedNodeId;\n }\n\n const activeResourceNodeId = resolveActiveResourceNodeIds(sections, childrenByNodeId, activeResourceUris);\n if (activeResourceNodeId) return activeResourceNodeId;\n if (!selectedNodeId) return undefined;\n if (activeResourceUris.length > 0 && selectedResourceUri) return undefined;\n return selectedNodeId;\n};\n\nconst canVirtualizeTreeNode = (node: TreeListNode) => node.isContainer !== true && (node.children ?? []).length === 0;\n\nexport const canVirtualizeTreeSections = (sections: TreeListSection[]) =>\n sections.every((section) => section.nodes.every(canVirtualizeTreeNode));\n\nconst findNode = (nodes: TreeNode[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>): TreeNode | null => {\n for (const node of nodes) {\n if (node.id === nodeId) return node;\n const child = findNode([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], nodeId, childrenByNodeId);\n if (child) return child;\n }\n\n return null;\n};\n\nexport const findNodeInSections = (\n sections: TreeViewSection[],\n nodeId: string,\n childrenByNodeId: Record<string, TreeNode[]>,\n) => {\n for (const section of sections) {\n const node = findNode(section.nodes, nodeId, childrenByNodeId);\n if (node) return node;\n }\n\n return null;\n};\n\nconst wrapTreeNodeIcon = (icon: ReactNode, iconTooltip: string | undefined) => {\n if (!iconTooltip) return icon;\n\n return (\n <Tooltip content={iconTooltip} openDelay={300}>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" justifyContent=\"center\">\n {icon}\n </Box>\n </Tooltip>\n );\n};\n\nconst resolveTreeNodeIcon = (node: TreeNode): ReactNode | undefined => {\n let icon: ReactNode | undefined;\n if (node.iconElement !== undefined) {\n icon = node.iconElement as ReactNode;\n } else if (node.icon) {\n icon = <WorkbenchIcon name={node.icon} />;\n }\n\n return icon === undefined ? undefined : wrapTreeNodeIcon(icon, node.iconTooltip);\n};\n\nconst resolveTreeNodeNavigationIntent = (node: TreeNode) => {\n if (node.target) return { id: \"target\", payload: node.target };\n if (node.resource) return { id: \"resource\", payload: node.resource };\n return undefined;\n};\n\nconst resolveTreeNodeResource = (node: TreeNode): ResourceRef | undefined => {\n if (node.resource) return node.resource;\n if (node.target?.kind === \"resource\") return node.target.resource;\n return undefined;\n};\n\nconst renderShortcutEndContent = (binding: string | string[] | undefined) => {\n if (!binding) return undefined;\n\n return (\n <Box\n opacity=\"0\"\n pointerEvents=\"none\"\n display=\"inline-flex\"\n alignItems=\"center\"\n transition=\"opacity 120ms ease\"\n _groupHover={{ opacity: \"1\" }}\n >\n <PaletteShortcut binding={binding} />\n </Box>\n );\n};\n\nconst resolveTreeNodeEndContent = (\n node: TreeNode,\n resource: ResourceRef | undefined,\n binding: string | string[] | undefined,\n) => {\n if (node.endContent !== undefined) return node.endContent as ReactNode;\n\n const shortcut = renderShortcutEndContent(binding);\n if (shortcut) return shortcut;\n\n const additions = resource?.metadata?.diffAdditions;\n const deletions = resource?.metadata?.diffDeletions;\n if (resource?.kind !== \"workspace\" || typeof additions !== \"number\" || typeof deletions !== \"number\") {\n return undefined;\n }\n\n return <DiffBubble additions={additions} deletions={deletions} variant=\"ghost\" size=\"small\" />;\n};\n\nconst toTreeListSectionEmptyNode = (section: TreeViewSection): TreeListNode | undefined => {\n if (!section.emptyState || section.nodes.length > 0) return undefined;\n return {\n id: `${section.id}:empty`,\n label: section.emptyState.title,\n description: section.emptyState.description,\n icon: section.emptyState.icon ? <WorkbenchIcon name={section.emptyState.icon} /> : undefined,\n disabled: true,\n rowVariant: \"empty-state\",\n };\n};\n\nconst toTreeListNode = (\n node: TreeNode,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const navigationIntent = resolveTreeNodeNavigationIntent(node);\n const resource = resolveTreeNodeResource(node);\n const commandContext = resource ? { resource } : undefined;\n const contextMenuItems = createTreeContextMenuItems({\n actions: node.contextMenuActions,\n menuPath: node.contextMenuPath ?? node.menuPath ?? (resource ? resourceContextMenuPath(resource.kind) : undefined),\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n });\n const menuItems = node.menuPath && contextMenuItems.length > 0 ? contextMenuItems : undefined;\n const shortcuts = new Map(\n context.workbench.keybindings.listActiveKeybindings().map((k) => [k.commandId, k.keybinding]),\n );\n const binding = node.commandId ? shortcuts.get(node.commandId) : undefined;\n\n const treeNode: TreeListNode = {\n id: node.id,\n label: node.label,\n description: node.description,\n icon: resolveTreeNodeIcon(node),\n iconColor: node.iconColor,\n disabled: node.disabled,\n rowVariant: node.rowVariant,\n canHide: node.canHide,\n canReorder: node.canReorder,\n hiddenByDefault: node.hiddenByDefault,\n actions: createTreeActionItems({\n actions: node.actions,\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n endContent: resolveTreeNodeEndContent(node, resource, binding),\n menuItems,\n contextMenuItems: !context.suppressContextMenus && contextMenuItems.length > 0 ? contextMenuItems : undefined,\n ...(node.menuPlacement ? { menuPlacement: node.menuPlacement } : {}),\n isContainer: node.collapsible,\n isNavigable: Boolean(navigationIntent),\n navigationIntent,\n children: [...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])].map((child) =>\n toTreeListNode(child, childrenByNodeId, context),\n ),\n } as TreeListNode;\n\n return treeNode;\n};\n\nexport const toTreeListSection = (\n section: TreeViewSection,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const emptyNode = toTreeListSectionEmptyNode(section);\n\n return {\n id: section.id,\n label: section.label,\n actions: createTreeActionItems({\n actions: section.actions,\n workbench: context.workbench,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n collapsible: section.collapsible,\n canHide: section.canHide,\n canReorder: section.canReorder,\n hiddenByDefault: section.hiddenByDefault,\n nodes: emptyNode ? [emptyNode] : section.nodes.map((node) => toTreeListNode(node, childrenByNodeId, context)),\n };\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState, type ResourceContextAction, TreeList, type TreeListSection } from \"@pstdio/ui\";\nimport type { RefObject } from \"react\";\nimport { canVirtualizeTreeSections } from \"./tree-list-adapter\";\n\nconst TREE_SKELETON_WIDTHS = [\"70%\", \"50%\", \"82%\", \"60%\", \"44%\", \"76%\"];\n\nconst TreeViewSkeleton = () => (\n <Stack gap=\"sm\" px=\"sm\" py=\"xs\" aria-hidden>\n {TREE_SKELETON_WIDTHS.map((width, index) => (\n <Skeleton key={`${width}-${index}`} height=\"4\" width={width} borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\ninterface TreeViewBodyProps {\n loading: boolean;\n moduleLoading?: boolean;\n sections: TreeListSection[];\n backgroundContextActions?: ResourceContextAction[];\n draggable?: boolean;\n customizationAvailable?: boolean;\n activeNodeId: string | string[] | undefined;\n expandedNodeIds: string[];\n expandedSectionIds: string[];\n scrollRef: RefObject<HTMLDivElement | null>;\n onToggleSection: (sectionId: string) => void;\n onToggleNode: (nodeId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n onNavigate: (event: Parameters<NonNullable<Parameters<typeof TreeList>[0][\"onNavigate\"]>>[0]) => void;\n}\n\nexport const TreeViewBody = (props: TreeViewBodyProps) => {\n const {\n loading,\n moduleLoading,\n sections,\n backgroundContextActions,\n draggable,\n customizationAvailable,\n activeNodeId,\n expandedNodeIds,\n expandedSectionIds,\n scrollRef,\n onToggleSection,\n onToggleNode,\n onReorderSections,\n onReorderNodes,\n onNavigate,\n } = props;\n\n if (loading) return null;\n if (moduleLoading) return <TreeViewSkeleton />;\n\n // Keep an empty-but-customizable tree right-clickable so a fully-hidden tree\n // can still be restored from the back-of-tree menu.\n if (sections.length === 0 && (backgroundContextActions?.length ?? 0) === 0 && !customizationAvailable) {\n return <EmptyState minH=\"12rem\" title=\"No tree items\" />;\n }\n\n return (\n <TreeList\n sections={sections}\n backgroundContextActions={backgroundContextActions}\n draggable={draggable}\n expandedNodeIds={expandedNodeIds}\n expandedSectionIds={expandedSectionIds}\n activeNodeId={activeNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n virtualize={canVirtualizeTreeSections(sections)}\n scrollRef={scrollRef}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onReorderSections={onReorderSections}\n onReorderNodes={onReorderNodes}\n onNavigate={onNavigate}\n />\n );\n};\n","import type { TreeContext, TreeNode, TreeRendererRegistry, TreeViewSection } from \"../../../core\";\n\nconst isUnregisteredTreeError = (trees: TreeRendererRegistry, treeId: string, error: unknown) =>\n error instanceof Error &&\n error.message === `Tree renderer not registered: ${treeId}` &&\n !trees.getTreeRenderer(treeId);\n\nexport interface LoadedTreeData {\n header: TreeNode[];\n body: TreeViewSection[];\n footer: TreeNode[];\n}\n\n// A tree reloads whenever the open resource changes (e.g. selecting a different\n// sidenav item) or a refresh fires. Only show the loading state before a tree has\n// produced any content; reloads keep the current content so the sidenav never\n// blanks between selections.\nexport const shouldShowTreeLoading = (loadedTreeId: string | null, treeViewId: string) => loadedTreeId !== treeViewId;\n\nexport const expandDefaultTreeSections = (trees: TreeRendererRegistry, treeId: string) => {\n const tree = trees.getTreeRenderer(treeId);\n if (!tree) return;\n for (const sectionId of tree.defaultExpandedSectionIds ?? []) {\n trees.setSectionExpanded(treeId, sectionId, true);\n }\n};\n\nexport const loadTreeData = async (\n trees: TreeRendererRegistry,\n treeId: string,\n ctx: TreeContext = {},\n): Promise<LoadedTreeData | null> => {\n if (!trees.getTreeRenderer(treeId)) return null;\n\n try {\n const [header, body, footer] = await Promise.all([\n trees.getHeader(treeId, ctx),\n trees.getBody(treeId, ctx),\n trees.getFooter(treeId, ctx),\n ]);\n return { header, body, footer };\n } catch (error) {\n if (isUnregisteredTreeError(trees, treeId, error)) return null;\n throw error;\n }\n};\n","import { getSwitchModeNavigationTargetModeId, type NavigationTarget } from \"../../../core\";\n\nexport const shouldSelectTreeNodeForNavigationTarget = (target: NavigationTarget) => {\n const items = target.kind === \"compound\" ? target.targets : [target];\n return items.some((item) => {\n if (getSwitchModeNavigationTargetModeId(item)) return false;\n return item.kind !== \"command\";\n });\n};\n","import {\n applyTreeListOrder,\n buildTreeVisibilityMenuActions,\n filterVisibleNodes,\n filterVisibleSections,\n type ResourceContextAction,\n resolveVisibility,\n type TreeListActionMenuItem,\n type TreeListNode,\n type TreeListSection,\n useTreeListOrderStore,\n useTreeListVisibilityStore,\n type VisibilityOverride,\n} from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\n\ninterface TreeViewRegions {\n headerNodes: TreeListNode[];\n sections: TreeListSection[];\n footerNodes: TreeListNode[];\n}\n\ninterface TreeViewCustomization {\n // Header rows with hidden entries removed — what the header region renders.\n visibleHeaderNodes: TreeListNode[];\n // Sections with hidden categories removed — what the tree body renders.\n visibleSections: TreeListSection[];\n // Footer rows with hidden entries removed — what the footer region renders.\n visibleFooterNodes: TreeListNode[];\n // Back-of-tree right-click menu: header rows, body categories, and footer rows that opt in.\n backgroundContextActions: ResourceContextAction[];\n customizationRevision: string;\n onReorderHeaderNodes: (nextNodeIds: string[]) => void;\n onReorderSections: (nextSectionIds: string[]) => void;\n onReorderNodes: (sectionId: string, nextNodeIds: string[]) => void;\n onReorderFooterNodes: (nextNodeIds: string[]) => void;\n}\n\ninterface VisibilityToggleIcons {\n visibleIcon: ReactNode;\n hiddenIcon: ReactNode;\n resetIcon?: ReactNode;\n}\n\ninterface NodeVisibilityActions {\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n}\n\ninterface TreeViewCustomizationOptions {\n suppressNodeContextMenus?: boolean;\n}\n\nconst HEADER_SECTION_ID = \"__header__\";\nconst FOOTER_SECTION_ID = \"__footer__\";\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nconst isCustomizableNode = (node: TreeListNode) => node.canHide === true || node.hiddenByDefault === true;\n\nconst visibilityContextIcon = (effective: VisibilityOverride, icons: VisibilityToggleIcons) =>\n effective === \"shown\" ? icons.hiddenIcon : icons.visibleIcon;\n\nconst buildNodeVisibilityContextMenuItem = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n): TreeListActionMenuItem | undefined => {\n if (!isCustomizableNode(node)) return undefined;\n\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n const label = toStringLabel(node.label, node.id);\n const existingItems = node.contextMenuItems ?? [];\n\n return {\n id: `tree-visibility:${node.id}`,\n label: effective === \"shown\" ? `Hide ${label}` : `Show ${label}`,\n icon: visibilityContextIcon(effective, icons),\n ...(existingItems.length > 0 ? { separatorBefore: true } : {}),\n onAction: () => actions.onToggleNode(node.id, hiddenByDefault),\n };\n};\n\nexport const addRegionNodeVisibilityContextMenuItems = (\n nodes: TreeListNode[],\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n enabled = true,\n) => {\n if (!enabled) return nodes;\n let changed = false;\n const next = nodes.map((node) => {\n const item = buildNodeVisibilityContextMenuItem(node, nodeOverrides, actions, icons);\n if (!item) return node;\n\n changed = true;\n return { ...node, contextMenuItems: [...(node.contextMenuItems ?? []), item] };\n });\n\n return changed ? next : nodes;\n};\n\n// Wires the generic @pstdio/ui visibility primitives onto a single tree host. Visibility is\n// persisted per `storageKey`, so each tree view customizes independently. The menu is built from\n// the unfiltered regions so hidden entries stay listed (eye-off) and can be brought back —\n// covering header rows, body categories, and footer rows (never individual body items).\nexport const useTreeViewCustomization = (\n storageKey: string,\n regions: TreeViewRegions,\n icons: VisibilityToggleIcons,\n options: TreeViewCustomizationOptions = {},\n): TreeViewCustomization => {\n const sectionOverrides = useTreeListVisibilityStore(storageKey, (state) => state.sectionOverrides);\n const nodeOverrides = useTreeListVisibilityStore(storageKey, (state) => state.nodeOverrides);\n const toggleSection = useTreeListVisibilityStore(storageKey, (state) => state.toggleSection);\n const toggleNode = useTreeListVisibilityStore(storageKey, (state) => state.toggleNode);\n const resetVisibility = useTreeListVisibilityStore(storageKey, (state) => state.reset);\n const sectionOrder = useTreeListOrderStore(storageKey, (state) => state.sectionOrder);\n const nodeOrderBySection = useTreeListOrderStore(storageKey, (state) => state.nodeOrderBySection);\n const setSectionOrder = useTreeListOrderStore(storageKey, (state) => state.setSectionOrder);\n const setNodeOrder = useTreeListOrderStore(storageKey, (state) => state.setNodeOrder);\n const resetOrder = useTreeListOrderStore(storageKey, (state) => state.reset);\n const visibilityActions = {\n onToggleSection: toggleSection,\n onToggleNode: toggleNode,\n onResetAll: () => {\n resetVisibility();\n resetOrder();\n },\n };\n\n const orderedSections = applyTreeListOrder(regions.sections, sectionOrder, nodeOrderBySection);\n const orderedHeaderNodes =\n applyTreeListOrder(\n [{ id: HEADER_SECTION_ID, canReorder: false, nodes: regions.headerNodes }],\n [],\n nodeOrderBySection,\n )[0]?.nodes ?? [];\n const orderedFooterNodes =\n applyTreeListOrder(\n [{ id: FOOTER_SECTION_ID, canReorder: false, nodes: regions.footerNodes }],\n [],\n nodeOrderBySection,\n )[0]?.nodes ?? [];\n const includeNodeContextMenus = options.suppressNodeContextMenus !== true;\n\n const headerNodes = addRegionNodeVisibilityContextMenuItems(\n orderedHeaderNodes,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const footerNodes = addRegionNodeVisibilityContextMenuItems(\n orderedFooterNodes,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const visibleHeaderNodes = filterVisibleNodes(headerNodes, nodeOverrides);\n const visibleSections = filterVisibleSections(orderedSections, sectionOverrides, nodeOverrides);\n const visibleFooterNodes = filterVisibleNodes(footerNodes, nodeOverrides);\n const backgroundContextActions = buildTreeVisibilityMenuActions(\n { headerNodes: orderedHeaderNodes, sections: orderedSections, footerNodes: orderedFooterNodes },\n sectionOverrides,\n nodeOverrides,\n visibilityActions,\n icons,\n );\n\n const customizationRevision = JSON.stringify({\n header: orderedHeaderNodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n main: orderedSections.map((section) => [\n section.id,\n toStringLabel(section.label, section.id),\n section.nodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n ]),\n footer: orderedFooterNodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n sectionOverrides,\n nodeOverrides,\n sectionOrder,\n nodeOrderBySection,\n });\n\n return {\n visibleHeaderNodes,\n visibleSections,\n visibleFooterNodes,\n backgroundContextActions,\n customizationRevision,\n onReorderHeaderNodes: (nextNodeIds) => setNodeOrder(HEADER_SECTION_ID, nextNodeIds),\n onReorderSections: setSectionOrder,\n onReorderNodes: setNodeOrder,\n onReorderFooterNodes: (nextNodeIds) => setNodeOrder(FOOTER_SECTION_ID, nextNodeIds),\n };\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea, TreeList } from \"@pstdio/ui\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type {\n NavigationTarget,\n ResourceRef,\n TreeNode,\n TreeRendererState,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getAnchorResource } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { CommandParamsDialog } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../../theme/workbench-theme-background\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\nimport { findNodeInSections, resolveTreeListSelection, toTreeListSection } from \"./tree-list-adapter\";\nimport { TreeViewBody } from \"./tree-view-body\";\nimport { expandDefaultTreeSections, loadTreeData, shouldShowTreeLoading } from \"./tree-view-load\";\nimport { shouldSelectTreeNodeForNavigationTarget } from \"./tree-view-navigation\";\nimport { useTreeViewCustomization } from \"./use-tree-view-customization\";\n\ninterface WorkbenchTreeViewProps {\n workbench: WorkbenchCore;\n treeViewId: string;\n activeNodeId?: string | null;\n resource?: ResourceRef;\n viewId?: string;\n renderParamField?: CommandParamFieldRenderer;\n onOpenResourceError?: (error: unknown) => void;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\nconst EMPTY_TREE_STATE: TreeRendererState = { expandedNodeIds: [], expandedSectionIds: [] };\n\nconst HEADER_SECTION_ID = \"__header__\";\nconst FOOTER_SECTION_ID = \"__footer__\";\n\n// Header and footer rows are flat node lists; wrap them in a single unlabeled section so they\n// reuse the same TreeList adapter/rendering as the body (and mirror each other exactly).\nconst regionSection = (id: string, nodes: TreeNode[]): TreeViewSection => ({ id, nodes, canReorder: false });\n\ntype WorkbenchLayoutState = ReturnType<WorkbenchCore[\"layout\"][\"getLayout\"]>;\n\nconst resolveActivePlacement = (\n widgets: WorkbenchLayoutState[\"regions\"][\"overlay\"][\"widgets\"],\n activeWidgetId: string | undefined,\n) => widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nconst resolveTreeActiveResource = (layout: WorkbenchLayoutState) =>\n resolveActivePlacement(layout.regions.overlay.widgets, layout.regions.overlay.activeWidgetId)?.resource ??\n getAnchorResource(layout, \"primary\");\n\nconst useSidenavContextActions = (\n actions: ResourceContextAction[],\n revision: string,\n onChange: ((actions: ResourceContextAction[]) => void) | undefined,\n) => {\n const actionsRef = useRef(actions);\n actionsRef.current = actions;\n\n useEffect(() => {\n void revision;\n onChange?.(actionsRef.current);\n }, [revision, onChange]);\n\n useEffect(\n () => () => {\n onChange?.([]);\n },\n [onChange],\n );\n};\n\ninterface TreeParamsDialogProps {\n request: TreeActionParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n onClose: () => void;\n}\n\nconst TreeParamsDialog = (props: TreeParamsDialogProps) => {\n const { request, renderParamField, onClose } = props;\n return (\n <CommandParamsDialog\n request={request?.request ?? null}\n renderParamField={renderParamField}\n onClose={onClose}\n onRun={async ({ args }) => {\n await request?.run(args);\n }}\n />\n );\n};\n\ninterface TreeNavigationContext {\n workbench: WorkbenchCore;\n treeViewId: string;\n onOpenResourceError?: (error: unknown) => void;\n}\n\nconst navigateTreeNode = (\n context: TreeNavigationContext,\n nodeId: string,\n intent: { id?: string; payload?: unknown } | undefined,\n) => {\n if (intent?.id === \"target\") {\n const target = intent.payload as NavigationTarget;\n if (shouldSelectTreeNodeForNavigationTarget(target)) {\n context.workbench.renderers.setSelectedNode(context.treeViewId, nodeId);\n }\n void context.workbench.navigation.openTarget(target).catch(context.onOpenResourceError);\n return;\n }\n\n if (intent?.id !== \"resource\" || !intent.payload || typeof intent.payload !== \"object\") return;\n context.workbench.renderers.setSelectedNode(context.treeViewId, nodeId);\n void context.workbench.resources\n .openResource(intent.payload as ResourceRef, { replaceActive: true })\n .catch(context.onOpenResourceError);\n};\n\nconst useTreeData = (workbench: WorkbenchCore, treeViewId: string, resource?: ResourceRef, viewId?: string) => {\n const [header, setHeader] = useState<TreeNode[]>([]);\n const [body, setBody] = useState<TreeViewSection[]>([]);\n const [footer, setFooter] = useState<TreeNode[]>([]);\n const [childrenByNodeId, setChildrenByNodeId] = useState<Record<string, TreeNode[]>>({});\n const [loading, setLoading] = useState(true);\n const loadedTreeIdRef = useRef<string | null>(null);\n const loadRevisionRef = useRef(0);\n\n useEffect(() => {\n let cancelled = false;\n expandDefaultTreeSections(workbench.renderers, treeViewId);\n\n const loadTree = () => {\n const loadRevision = ++loadRevisionRef.current;\n if (shouldShowTreeLoading(loadedTreeIdRef.current, treeViewId)) setLoading(true);\n void loadTreeData(workbench.renderers, treeViewId, { resource, viewId }).then((data) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n loadedTreeIdRef.current = treeViewId;\n setHeader(data?.header ?? []);\n setBody(data?.body ?? []);\n setFooter(data?.footer ?? []);\n setChildrenByNodeId({});\n setLoading(false);\n });\n };\n\n loadTree();\n const disposable = workbench.renderers.onDidRefresh((event) => {\n if (event.treeId === treeViewId) loadTree();\n });\n return () => {\n cancelled = true;\n disposable.dispose();\n };\n }, [resource, viewId, workbench, treeViewId]);\n\n return { body, childrenByNodeId, footer, header, loading, setChildrenByNodeId };\n};\n\nexport const WorkbenchTreeView = (props: WorkbenchTreeViewProps) => {\n const {\n workbench,\n treeViewId,\n activeNodeId,\n resource,\n viewId,\n renderParamField,\n onOpenResourceError,\n onSidenavContextActionsChange,\n } = props;\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const treeRenderer = workbench.renderers.getTreeRenderer(treeViewId);\n const treeState =\n useWorkbenchStore(workbench.renderers.treeStore, (state) => state.statesByTreeId[treeViewId]) ?? EMPTY_TREE_STATE;\n const activeResource = useWorkbenchStore(workbench.layout.store, (state) => resolveTreeActiveResource(state.layout));\n const { body, childrenByNodeId, footer, header, loading, setChildrenByNodeId } = useTreeData(\n workbench,\n treeViewId,\n resource,\n viewId,\n );\n const [paramsRequest, setParamsRequest] = useState<TreeActionParamsRequest | null>(null);\n\n const adapterContext = {\n workbench,\n onCommandError: onOpenResourceError,\n onRequestParams: setParamsRequest,\n suppressContextMenus: Boolean(onSidenavContextActionsChange),\n };\n const rawSections = body.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawHeaderSection =\n header.length > 0\n ? toTreeListSection(regionSection(HEADER_SECTION_ID, header), childrenByNodeId, adapterContext)\n : undefined;\n const rawFooterSection =\n footer.length > 0\n ? toTreeListSection(regionSection(FOOTER_SECTION_ID, footer), childrenByNodeId, adapterContext)\n : undefined;\n const {\n visibleHeaderNodes,\n visibleSections,\n visibleFooterNodes,\n backgroundContextActions,\n customizationRevision,\n onReorderHeaderNodes,\n onReorderSections,\n onReorderNodes,\n onReorderFooterNodes,\n } = useTreeViewCustomization(\n treeViewId,\n {\n headerNodes: rawHeaderSection?.nodes ?? [],\n sections: rawSections,\n footerNodes: rawFooterSection?.nodes ?? [],\n },\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n { suppressNodeContextMenus: Boolean(onSidenavContextActionsChange) },\n );\n useSidenavContextActions(backgroundContextActions, customizationRevision, onSidenavContextActionsChange);\n if (!treeRenderer) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Tree renderer is no longer registered.\n </Text>\n );\n }\n\n const toggleNode = (nodeId: string) => {\n const node =\n findNodeInSections(body, nodeId, childrenByNodeId) ??\n findNodeInSections(\n [regionSection(HEADER_SECTION_ID, header), regionSection(FOOTER_SECTION_ID, footer)],\n nodeId,\n childrenByNodeId,\n );\n if (!node) return;\n\n const expanded = treeState.expandedNodeIds.includes(nodeId);\n\n workbench.renderers.setNodeExpanded(treeViewId, nodeId, !expanded);\n\n if (expanded || childrenByNodeId[nodeId]) return;\n if (node.children) return;\n\n void workbench.renderers.getChildren(treeViewId, node, { resource, viewId }).then((children) => {\n setChildrenByNodeId((current) => ({ ...current, [nodeId]: children }));\n });\n };\n\n const toggleSection = (sectionId: string) => {\n const expanded = treeState.expandedSectionIds.includes(sectionId);\n\n workbench.renderers.setSectionExpanded(treeViewId, sectionId, !expanded);\n };\n\n const navigationContext = { workbench, treeViewId, onOpenResourceError };\n\n const headerSections =\n rawHeaderSection && visibleHeaderNodes.length > 0 ? [{ ...rawHeaderSection, nodes: visibleHeaderNodes }] : [];\n const footerSections =\n rawFooterSection && visibleFooterNodes.length > 0 ? [{ ...rawFooterSection, nodes: visibleFooterNodes }] : [];\n const bodyActiveNodeId = resolveTreeListSelection({\n sections: body,\n childrenByNodeId,\n activeNodeId,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n const regionActiveNodeId = resolveTreeListSelection({\n sections: [regionSection(HEADER_SECTION_ID, header), regionSection(FOOTER_SECTION_ID, footer)],\n childrenByNodeId,\n activeNodeId,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n\n return (\n <Flex as=\"section\" direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" aria-label={treeRenderer.title}>\n {!loading && headerSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={headerSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={regionActiveNodeId}\n rowVariant=\"compact\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderNodes={(_sectionId, nextNodeIds) => onReorderHeaderNodes(nextNodeIds)}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n w=\"full\"\n viewportRef={scrollRef}\n viewportProps={{\n display: \"block\",\n style: { overflowX: \"hidden\" },\n }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n <TreeViewBody\n loading={loading}\n moduleLoading={treeState.loading}\n sections={visibleSections}\n backgroundContextActions={onSidenavContextActionsChange ? undefined : backgroundContextActions}\n draggable={Boolean(onSidenavContextActionsChange)}\n customizationAvailable={Boolean(onSidenavContextActionsChange)}\n activeNodeId={bodyActiveNodeId}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n scrollRef={scrollRef}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={onReorderSections}\n onReorderNodes={onReorderNodes}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Box>\n </ScrollArea>\n {!loading && footerSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={footerSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={regionActiveNodeId}\n rowVariant=\"compact\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderNodes={(_sectionId, nextNodeIds) => onReorderFooterNodes(nextNodeIds)}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n onClose={() => setParamsRequest(null)}\n />\n </Flex>\n );\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { SettingsRegistry } from \"../../core\";\n\nexport const useSettingsRevision = (settings: SettingsRegistry) =>\n useSyncExternalStore(\n (listener) => settings.store.subscribe(() => listener()),\n () => settings.store.getState().revision,\n () => settings.store.getState().revision,\n );\n","import { Box, Flex, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { EmptyState, ScrollArea } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport type { CollectionSettingsPanel, PreferenceScope, SettingsRegistry, WorkbenchPanelRenderInput } from \"../../core\";\nimport { WorkbenchPreferencesForm } from \"../renderers/settings/preferences-form\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\n\nexport interface SettingsSurfacePanelProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\n\nconst Centered = (props: { children: ReactNode }) => (\n <Flex h=\"full\" minH=\"0\" align=\"center\" justify=\"center\" p=\"lg\">\n {props.children}\n </Flex>\n);\n\nconst ScrollableSettingsContent = (props: { children: ReactNode }) => (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ h: \"full\", minH: \"full\" }}>\n <Box h=\"full\" minH=\"full\">\n {props.children}\n </Box>\n </ScrollArea>\n);\n\n// Resolves a collection item by id (items() may be async) and renders the\n// contributor-supplied editor. The framework never knows what the item is.\nconst CollectionItemView = (props: {\n panel: CollectionSettingsPanel;\n itemId: string;\n input: WorkbenchPanelRenderInput;\n}) => {\n const { panel, itemId, input } = props;\n const [state, setState] = useState<{ status: \"loading\" | \"ready\" | \"missing\"; item?: unknown }>({\n status: \"loading\",\n });\n\n useEffect(() => {\n let alive = true;\n setState({ status: \"loading\" });\n Promise.resolve(panel.items()).then((items) => {\n if (!alive) return;\n const item = items.find((candidate) => panel.itemId(candidate) === itemId);\n setState(item === undefined ? { status: \"missing\" } : { status: \"ready\", item });\n });\n return () => {\n alive = false;\n };\n }, [panel, itemId]);\n\n if (state.status === \"loading\")\n return (\n <Centered>\n <Spinner size=\"sm\" />\n </Centered>\n );\n if (state.status === \"missing\")\n return (\n <Centered>\n <EmptyState title=\"Item not found\" />\n </Centered>\n );\n return <ScrollableSettingsContent>{panel.renderItem(state.item, input) as ReactNode}</ScrollableSettingsContent>;\n};\n\n// The single main-region renderer for the settings surface. Dispatches the open\n// resource to a schema form, a custom view, or a collection item editor.\nexport const SettingsSurfacePanel = (props: SettingsSurfacePanelProps) => {\n const { input, settings, resolveScopeId } = props;\n const revision = useSettingsRevision(settings);\n const resource = input.instance.resource;\n const panelId = typeof resource?.metadata?.panelId === \"string\" ? resource.metadata.panelId : undefined;\n const itemId = typeof resource?.metadata?.itemId === \"string\" ? resource.metadata.itemId : undefined;\n const panel = panelId ? settings.getPanel(panelId) : undefined;\n\n if (!panel) {\n return (\n <Centered>\n <EmptyState title=\"Select a settings entry\" description=\"Pick an item from the settings sidenav.\" />\n </Centered>\n );\n }\n\n if (panel.kind === \"custom\")\n return <ScrollableSettingsContent>{panel.render(input) as ReactNode}</ScrollableSettingsContent>;\n\n if (panel.kind === \"collection\") {\n if (!itemId)\n return (\n <Centered>\n <EmptyState title={panel.title} />\n </Centered>\n );\n return (\n <CollectionItemView key={`${resource?.uri ?? itemId}:${revision}`} panel={panel} itemId={itemId} input={input} />\n );\n }\n\n return (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ p: \"lg\", display: \"flex\", flexDirection: \"column\", gap: \"md\" }}>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M/semibold\">{panel.title}</Text>\n {panel.description && (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" maxW=\"640px\">\n {panel.description}\n </Text>\n )}\n </Stack>\n <WorkbenchPreferencesForm\n preferences={input.workbench.preferences}\n names={panel.preferences}\n resolveScopeId={resolveScopeId}\n mode={panel.save ?? \"live\"}\n />\n </ScrollArea>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { PreferenceScope, SettingsRegistry, WorkbenchPanelRenderInput } from \"../../core\";\nimport { WorkbenchTreeView } from \"../renderers/tree/tree-view\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\n\nexport interface SettingsOverlayProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n navTreeId: string;\n title: string;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\n\n// The settings surface rendered inside the overlay dialog: a titled header bar,\n// then a full-height resizable nav on the left and the dispatching panel on the\n// right. Nav clicks route through openResource, which re-opens this singleton\n// overlay with the new resource — selection stays resource-driven and the dialog\n// never closes mid-navigation.\nexport const SettingsOverlay = (props: SettingsOverlayProps) => {\n const { input, settings, navTreeId, title, resolveScopeId } = props;\n useSettingsRevision(settings);\n const resource = input.instance.resource;\n\n const nav = (\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg=\"bg.subtle\">\n <WorkbenchTreeView\n workbench={input.workbench}\n treeViewId={navTreeId}\n resource={resource}\n activeNodeId={resource?.uri}\n />\n </Box>\n );\n\n const content = (\n <Box flex=\"1\" h=\"full\" minH=\"0\" minW=\"0\">\n <SettingsSurfacePanel input={input} settings={settings} resolveScopeId={resolveScopeId} />\n </Box>\n );\n\n return (\n <Flex direction=\"column\" position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\">\n <Flex\n align=\"center\"\n bg=\"bg.subtle\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n gap=\"2\"\n h=\"12\"\n px=\"3.5\"\n >\n <Box color=\"fg.accent\" display=\"inline-flex\">\n <WorkbenchIcon name=\"settings\" size={16} />\n </Box>\n <Text fontWeight=\"semibold\" textStyle=\"sm\">\n {title}\n </Text>\n </Flex>\n <Box flex=\"1\" minH=\"0\" minW=\"0\" position=\"relative\">\n <ResizableSplitLayout\n position=\"absolute\"\n inset=\"0\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"left\"\n resizablePanel={nav}\n contentPanel={content}\n defaultSizePx={280}\n minSizePx={220}\n maxSizePx={420}\n contentMinSizePx={360}\n collapsible={false}\n resizeLabel=\"Resize settings navigation\"\n showResizeSeparator\n />\n </Box>\n </Flex>\n );\n};\n","import type { ResourceRef, SettingsScope } from \"../../core\";\n\nexport const SETTINGS_RESOURCE_KIND = \"workbench-settings\";\n\nexport const settingsPanelResource = (panel: { id: string; title: string; icon?: string }): ResourceRef => ({\n kind: SETTINGS_RESOURCE_KIND,\n uri: `${SETTINGS_RESOURCE_KIND}://panel/${panel.id}`,\n id: panel.id,\n label: panel.title,\n icon: panel.icon,\n metadata: { panelId: panel.id },\n});\n\nexport const settingsItemResource = (\n panelId: string,\n item: { id: string; label: string; icon?: string },\n): ResourceRef => ({\n kind: SETTINGS_RESOURCE_KIND,\n uri: `${SETTINGS_RESOURCE_KIND}://item/${panelId}/${item.id}`,\n id: `${panelId}::${item.id}`,\n label: item.label,\n icon: item.icon,\n metadata: { panelId, itemId: item.id },\n});\n\n// Project-scoped entries stay hidden until a project scope id is available; global\n// entries are always visible. Mirrors the old dashboards' projectless behavior.\nexport const isSettingsScopeVisible = (scope: SettingsScope | undefined, hasProjectScope: boolean) =>\n (scope ?? \"project\") !== \"project\" || hasProjectScope;\n","import type {\n CollectionSettingsPanel,\n RegisteredSettingsPanel,\n SettingsAction,\n SettingsRegistry,\n TreeAction,\n TreeNode,\n TreeViewSection,\n} from \"../../core\";\nimport { isSettingsScopeVisible, settingsItemResource, settingsPanelResource } from \"./settings-resources\";\n\nexport const FALLBACK_SECTION_ID = \"settings\";\n\nconst toTreeActions = (actions: SettingsAction[] | undefined): TreeAction[] | undefined =>\n actions?.map((action) => ({ id: action.id, label: action.label, icon: action.icon, run: action.run }));\n\nconst collectionItemNode = (panel: CollectionSettingsPanel, item: unknown): TreeNode => {\n const id = panel.itemId(item);\n const label = panel.itemLabel(item);\n const icon = panel.itemIcon?.(item);\n const resource = settingsItemResource(panel.id, { id, label, icon });\n return { id: resource.uri, label, icon, resource };\n};\n\nconst orderGroupKeys = (keys: string[], order: string[] | undefined) => {\n const indexOf = (key: string) => {\n const index = order?.indexOf(key) ?? -1;\n return index === -1 ? Number.POSITIVE_INFINITY : index;\n };\n return [...keys].sort((left, right) => indexOf(left) - indexOf(right));\n};\n\nconst collectionChildren = async (panel: CollectionSettingsPanel): Promise<TreeNode[]> => {\n const items = await Promise.resolve(panel.items()).catch(() => []);\n if (!panel.groupBy) return items.map((item) => collectionItemNode(panel, item));\n\n const groupBy = panel.groupBy;\n const byKey = new Map<string, unknown[]>();\n for (const item of items) {\n const key = groupBy.key(item);\n const list = byKey.get(key) ?? [];\n list.push(item);\n byKey.set(key, list);\n }\n\n return orderGroupKeys([...byKey.keys()], groupBy.order).map((key) => ({\n id: `${panel.id}:group:${key}`,\n label: groupBy.label(key),\n icon: groupBy.icon?.(key),\n collapsible: true,\n children: (byKey.get(key) ?? []).map((item) => collectionItemNode(panel, item)),\n }));\n};\n\nconst panelToNode = async (panel: RegisteredSettingsPanel): Promise<TreeNode> => {\n if (panel.kind === \"collection\") {\n return {\n id: `settings-collection:${panel.id}`,\n label: panel.title,\n icon: panel.icon,\n collapsible: true,\n actions: toTreeActions(panel.actions),\n children: await collectionChildren(panel),\n };\n }\n\n const resource = settingsPanelResource(panel);\n return { id: resource.uri, label: panel.title, icon: panel.icon, resource };\n};\n\nexport interface BuildSettingsTreeInput {\n settings: SettingsRegistry;\n hasProjectScope: boolean;\n}\n\n// Derives the settings navigation tree from the registry: one section per registered\n// section (headerless when titleless), schema/custom panels as leaves, and collection\n// panels expanded into per-item nodes (optionally grouped). Scope gates project entries.\nexport const buildSettingsTreeBody = async (input: BuildSettingsTreeInput): Promise<TreeViewSection[]> => {\n const { settings, hasProjectScope } = input;\n const sections = settings.listSections();\n const sectionsById = new Map(sections.map((section) => [section.id, section]));\n const panels = settings.listPanels().filter((panel) => isSettingsScopeVisible(panel.scope, hasProjectScope));\n\n const bySection = new Map<string, RegisteredSettingsPanel[]>();\n for (const panel of panels) {\n const sectionId = panel.section && sectionsById.has(panel.section) ? panel.section : FALLBACK_SECTION_ID;\n const list = bySection.get(sectionId) ?? [];\n list.push(panel);\n bySection.set(sectionId, list);\n }\n\n const renderOrder = sections.map((section) => section.id);\n if (bySection.has(FALLBACK_SECTION_ID) && !sectionsById.has(FALLBACK_SECTION_ID)) {\n renderOrder.push(FALLBACK_SECTION_ID);\n }\n\n const result: TreeViewSection[] = [];\n for (const sectionId of renderOrder) {\n const section = sectionsById.get(sectionId);\n // Sections are containers — only hide one that is *explicitly* project-scoped.\n // No-scope sections fall through and are dropped below if they have no content.\n if (section?.scope === \"project\" && !hasProjectScope) continue;\n\n const sectionPanels = bySection.get(sectionId) ?? [];\n const actions = toTreeActions(section?.actions);\n if (sectionPanels.length === 0 && !actions) continue;\n\n const nodes: TreeNode[] = [];\n for (const panel of sectionPanels) nodes.push(await panelToNode(panel));\n // Settings groups are plain labels, not accordions — the whole tree stays visible.\n result.push({ id: sectionId, label: section?.title, actions, nodes, collapsible: false });\n }\n\n return result;\n};\n","import { type PreferenceScope, standardResourceIcons, type WorkbenchModuleContribution } from \"../../core\";\nimport { SettingsOverlay } from \"./settings-overlay\";\nimport { isSettingsScopeVisible, SETTINGS_RESOURCE_KIND, settingsPanelResource } from \"./settings-resources\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { buildSettingsTreeBody, FALLBACK_SECTION_ID } from \"./settings-tree\";\n\nexport interface WorkbenchSettingsModuleOptions {\n /** Maps a preference scope (e.g. \"project\") to its scope id; project entries hide until this resolves. */\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n /** Heading shown at the top of the settings overlay. */\n title?: string;\n}\n\n// The single overlay widget that hosts the whole settings surface. Exported so a\n// host can open settings directly (e.g. ctx.layout.openPanel(...)) or assert it\n// in tests — but hosts normally just open a settings resource and let the presenter\n// below place it here.\nexport const WORKBENCH_SETTINGS_WIDGET_ID = \"workbench.settings\";\nexport const WORKBENCH_SETTINGS_NAV_WIDGET_ID = \"workbench.settings.nav\";\nexport const WORKBENCH_SETTINGS_PANEL_WIDGET_ID = \"workbench.settings.panel\";\n\n// Built-in command to open settings at the first visible panel. Always registered\n// by the surface, so it is available in the command palette without host wiring;\n// hosts only add a curated menu item pointing at this id if they want one.\nexport const WORKBENCH_SETTINGS_OPEN_COMMAND_ID = \"workbench.settings.open\";\n\nconst WIDGET_ID = WORKBENCH_SETTINGS_WIDGET_ID;\nconst RENDERER_ID = \"workbench.settings.renderer\";\nconst PANEL_RENDERER_ID = \"workbench.settings.panel.renderer\";\nconst NAV_TREE_ID = \"workbench.settings.navigation\";\n\n// The unified Settings surface: a full-window modal overlay containing a nav tree\n// (derived from `ctx.settings`) and a dispatching panel, plus a resource presenter\n// that pops the overlay. Contributors only call ctx.settings.registerSection/\n// registerPanel — this renders and wires everything; hosts add no mode or presenter.\nexport const createWorkbenchSettingsModule = (\n options: WorkbenchSettingsModuleOptions = {},\n): WorkbenchModuleContribution => {\n const title = options.title ?? \"Settings\";\n const hasProjectScope = () => options.resolveScopeId?.(\"project\") !== undefined;\n\n return {\n id: \"workbench.settings.surface\",\n activate(ctx) {\n ctx.renderers.registerTreeRenderer({\n id: NAV_TREE_ID,\n title,\n // Settings sections read as a single scannable list, so every section starts expanded.\n defaultExpandedSectionIds: [...ctx.settings.listSections().map((section) => section.id), FALLBACK_SECTION_ID],\n getBody: () => buildSettingsTreeBody({ settings: ctx.settings, hasProjectScope: hasProjectScope() }),\n getChildren: () => [],\n });\n\n ctx.layout.registerPanel({\n id: WORKBENCH_SETTINGS_NAV_WIDGET_ID,\n title: `${title} navigation`,\n region: \"sidenav\",\n singleton: true,\n rendererId: NAV_TREE_ID,\n });\n\n ctx.layout.registerPanel({\n id: WORKBENCH_SETTINGS_PANEL_WIDGET_ID,\n title,\n region: \"main\",\n singleton: true,\n rendererId: PANEL_RENDERER_ID,\n });\n ctx.renderers.registerRenderer({\n id: PANEL_RENDERER_ID,\n render: (input) => (\n <SettingsSurfacePanel input={input} settings={ctx.settings} resolveScopeId={options.resolveScopeId} />\n ),\n });\n\n ctx.layout.registerPanel({\n id: WIDGET_ID,\n title,\n region: \"overlay\",\n singleton: true,\n rendererId: RENDERER_ID,\n config: {\n size: \"xl\",\n scrollBehavior: \"inside\",\n contentHeight: \"min(760px, 88vh)\",\n contentMaxWidth: \"min(1440px, 94vw)\",\n contentWidth: \"94vw\",\n closeTriggerTop: \"3.5\",\n // Settings hosts nested overlays (confirmations, popovers) that portal\n // outside this dialog's content; outside-interact dismissal would treat\n // clicks in them as \"close settings\". Esc and the close button remain.\n closeOnInteractOutside: false,\n },\n });\n ctx.renderers.registerRenderer({\n id: RENDERER_ID,\n render: (input) => (\n <SettingsOverlay\n input={input}\n settings={ctx.settings}\n navTreeId={NAV_TREE_ID}\n title={title}\n resolveScopeId={options.resolveScopeId}\n />\n ),\n });\n\n ctx.resources.registerKind({\n kind: SETTINGS_RESOURCE_KIND,\n label: \"Settings\",\n icon: standardResourceIcons.settings,\n });\n ctx.resources.registerPresenter({\n id: \"workbench.settings.presenter\",\n canOpen: (resource) => resource.kind === SETTINGS_RESOURCE_KIND,\n open: (resource) =>\n ctx.layout.openPanel(WIDGET_ID, {\n resource,\n title: resource.label,\n closable: true,\n strategy: { kind: \"persistent\" },\n }),\n });\n\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n label: \"Open settings\",\n category: \"Settings\",\n icon: standardResourceIcons.settings,\n },\n {\n execute: () => {\n const panel = ctx.settings\n .listPanels()\n .find((entry) => isSettingsScopeVisible(entry.scope, hasProjectScope()));\n if (!panel) return undefined;\n return ctx.resources.openResource(settingsPanelResource(panel), { replaceActive: true });\n },\n },\n );\n\n // Keep the tree in sync as contributions register/unregister.\n return { dispose: ctx.settings.store.subscribe(() => ctx.renderers.refresh(NAV_TREE_ID)) };\n },\n };\n};\n","import type { WorkbenchCore, WorkbenchPanelMenuRegion, WorkbenchRegion } from \"../../core\";\n\n// Panel regions the workbench chrome can collapse and reveal.\nexport type WorkbenchPanelRegionId = \"sidenav\" | \"secondary\" | WorkbenchPanelMenuRegion;\n\nexport const resolvePanelCollapsible = (workbench: WorkbenchCore, ...regions: WorkbenchRegion[]) =>\n regions.every((region) => workbench.layout.getRegionCollapsible(region));\n\n// Opening or closing a panel is two writes kept in lockstep: the panels\n// controller owns the open flag, the layout model owns region visibility.\nexport const setWorkbenchPanelOpen = (workbench: WorkbenchCore, region: WorkbenchPanelRegionId, open: boolean) => {\n workbench.panels.setOpen(region, open);\n workbench.layout.setRegionVisible(region, open);\n};\n","interface CanAttachWorkbenchPanelMenuInput {\n panelWidth: number;\n targetMenuMinSize: number;\n attachedMenuMinSizes: readonly number[];\n}\n\nexport const PANEL_CONTENT_MIN_SIZE_PX = 120;\nexport const PANEL_MENU_RESIZE_HANDLE_SIZE_PX = 4;\nexport const PANEL_MENU_COLLAPSE_THRESHOLD_PX = 480;\n\nexport const shouldCollapseWorkbenchPanelMenus = (panelWidth: number) =>\n panelWidth > 0 && panelWidth <= PANEL_MENU_COLLAPSE_THRESHOLD_PX;\n\nexport const canAttachWorkbenchPanelMenu = (input: CanAttachWorkbenchPanelMenuInput) => {\n const menuMinSizes = [...input.attachedMenuMinSizes, input.targetMenuMinSize];\n const requiredWidth =\n PANEL_CONTENT_MIN_SIZE_PX +\n menuMinSizes.reduce((total, size) => total + size, 0) +\n menuMinSizes.length * PANEL_MENU_RESIZE_HANDLE_SIZE_PX;\n\n return input.panelWidth >= requiredWidth;\n};\n","import { Box, HStack, IconButton, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { AttachedMenu, Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout, Tooltip } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelMenuRegion,\n type WorkbenchPanelMenuSide,\n type WorkbenchPanelRegion,\n type WorkbenchRegionSize,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { resolvePanelCollapsible } from \"../workbench/workbench-panel-state\";\nimport {\n canAttachWorkbenchPanelMenu,\n PANEL_CONTENT_MIN_SIZE_PX,\n PANEL_MENU_RESIZE_HANDLE_SIZE_PX,\n shouldCollapseWorkbenchPanelMenus,\n} from \"./panel-menu-sizing\";\n\nconst PANEL_MENU_SIZE = { defaultPx: 280, minPx: 144, maxPx: 320 };\n\nconst panelLabels: Record<WorkbenchPanelRegion, string> = {\n main: \"Main\",\n secondary: \"Secondary\",\n side: \"Side\",\n};\n\nconst resolveRegionSize = (regionSize: WorkbenchRegionSize | undefined) => ({\n defaultPx: regionSize?.defaultPx ?? PANEL_MENU_SIZE.defaultPx,\n minPx: regionSize?.minPx ?? PANEL_MENU_SIZE.minPx,\n maxPx: regionSize ? regionSize.maxPx : PANEL_MENU_SIZE.maxPx,\n});\n\nexport const getWorkbenchPanelMenuLabel = (panel: WorkbenchPanelRegion, side: WorkbenchPanelMenuSide) =>\n `${panelLabels[panel]} ${side} menu`;\n\ninterface WorkbenchPanelMenuView {\n region: WorkbenchPanelMenuRegion;\n side: WorkbenchPanelMenuSide;\n label: string;\n title: string;\n icon: string;\n has: boolean;\n collapsed: boolean;\n responsiveCollapsed: boolean;\n collapsible: boolean;\n size: ReturnType<typeof resolveRegionSize>;\n onOpen: () => void;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nconst useWorkbenchPanelMenu = (\n workbench: WorkbenchCore,\n panel: WorkbenchPanelRegion,\n side: WorkbenchPanelMenuSide,\n responsiveCollapsed = false,\n): WorkbenchPanelMenuView => {\n const region = workbenchPanelMenuRegions[panel][side];\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const currentRegionState = layout.regions[region];\n const activeSubPanel = getActiveWorkbenchSubPanel(layout, panel, locationResource, {\n ignoreOwnerResourceUri: panel === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (panel === \"side\"\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement)) &&\n matchesWorkbenchPanelMenuOwner(contribution, {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n })\n : false;\n }),\n };\n const activePlacement =\n regionState.widgets.find((placement) => placement.widgetId === regionState.activeWidgetId) ??\n regionState.widgets[0];\n const widget = activePlacement ? registeredWidgets[activePlacement.contributionId] : undefined;\n const collapsible = useWorkbenchStore(workbench.layout.store, () => resolvePanelCollapsible(workbench, region));\n const panelStateKey = activePlacement ? `panel-menu:${activePlacement.widgetId}` : region;\n const open = useWorkbenchStore(workbench.panels.store, (state) => state.openByRegionId[panelStateKey] ?? true);\n\n return {\n region,\n side,\n label: getWorkbenchPanelMenuLabel(panel, side),\n title: widget?.title ?? getWorkbenchPanelMenuLabel(panel, side),\n icon: widget?.icon ?? (side === \"left\" ? \"PanelLeft\" : \"PanelRight\"),\n has: regionState.widgets.length > 0 || Boolean(workbench.layout.getPlaceholder(region)),\n collapsed: (!open || responsiveCollapsed) && collapsible,\n responsiveCollapsed,\n collapsible,\n size: resolveRegionSize(workbench.layout.getRegionSize(region)),\n onOpen: () => workbench.panels.setOpen(panelStateKey, true),\n onCollapsedChange: (collapsed) => {\n if (!collapsed || collapsible) workbench.panels.setOpen(panelStateKey, !collapsed);\n },\n };\n};\n\nconst WorkbenchPanelMenu = (props: { workbench: WorkbenchCore; view: WorkbenchPanelMenuView }) => {\n const { view, workbench } = props;\n const panel = view.region.split(\"-\")[0] as WorkbenchPanelRegion;\n const background = panel === \"side\" ? workbenchBackgrounds.widget : workbenchBackgrounds.panel;\n\n return (\n <AttachedMenu\n data-workbench-panel-menu={`${panel}-${view.side}`}\n data-workbench-region={view.region}\n bg={background}\n >\n <WorkbenchRegion workbench={workbench} region={view.region} title={view.label} transparent />\n </AttachedMenu>\n );\n};\n\nconst addPanelMenu = (input: { content: ReactNode; view: WorkbenchPanelMenuView; workbench: WorkbenchCore }) => {\n const { content, view, workbench } = input;\n if (!view.has) return content;\n\n return (\n <ResizableSplitLayout\n minH=\"0\"\n minW=\"0\"\n resizableSide={view.side}\n resizablePanel={<WorkbenchPanelMenu workbench={workbench} view={view} />}\n contentPanel={content}\n collapsed={view.collapsed}\n collapsible={view.collapsible}\n defaultSizePx={view.size.defaultPx}\n minSizePx={view.size.minPx}\n maxSizePx={view.size.maxPx}\n contentMinSizePx={PANEL_CONTENT_MIN_SIZE_PX}\n resizeHandleSizePx={PANEL_MENU_RESIZE_HANDLE_SIZE_PX}\n resizeLabel={`Resize ${view.label}`}\n showResizeSeparator\n onSizeChange={(width) => workbench.layout.setRegionSize(view.region, width)}\n onCollapsedChange={view.onCollapsedChange}\n />\n );\n};\n\nexport const WorkbenchPanelMenuLayout = (props: {\n workbench: WorkbenchCore;\n panel: WorkbenchPanelRegion;\n children: ReactNode;\n}) => {\n const { children, panel, workbench } = props;\n const panelWidth = useWorkbenchPanelWidth(panel);\n const responsiveCollapsed = shouldCollapseWorkbenchPanelMenus(panelWidth);\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\", responsiveCollapsed);\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\", responsiveCollapsed);\n const withRight = addPanelMenu({ content: children, view: right, workbench });\n return addPanelMenu({ content: withRight, view: left, workbench });\n};\n\nconst useWorkbenchPanelWidth = (panel: WorkbenchPanelRegion) => {\n const [width, setWidth] = useState(0);\n\n useEffect(() => {\n const element = document.querySelector<HTMLElement>(`[data-workbench-panel=\"${panel}\"]`);\n if (!element) return;\n\n const measure = () => setWidth(element.clientWidth);\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [panel]);\n\n return width;\n};\n\ninterface WorkbenchPanelMenuOpenerProps {\n view: WorkbenchPanelMenuView;\n workbench: WorkbenchCore;\n canAttach: boolean;\n}\n\nconst WorkbenchPanelMenuOpener = (props: WorkbenchPanelMenuOpenerProps) => {\n const { canAttach, view, workbench } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n return (\n <Menu.Root\n positioning={{ placement: \"bottom-start\", offset: { mainAxis: 0 }, getAnchorElement: () => triggerRef.current }}\n onExitComplete={() => triggerRef.current?.focus()}\n >\n <Tooltip content={view.title}>\n <Menu.Trigger asChild>\n <IconButton\n ref={triggerRef}\n variant=\"ghost\"\n size={PANEL_HEADER_CONTROL_SIZE}\n aria-label={`Open ${view.label}`}\n flexShrink={0}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeftOpen\" : \"PanelRightOpen\"} size={14} />\n </IconButton>\n </Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n aria-label={`${view.label} controls`}\n data-workbench-panel-menu-controls={view.region}\n boxShadow=\"none\"\n display=\"flex\"\n flexDirection=\"column\"\n h=\"64\"\n maxW=\"64\"\n minW=\"64\"\n overflow=\"hidden\"\n p=\"0\"\n w=\"64\"\n >\n <Header variant=\"narrow\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" flexShrink={0} gap=\"xs\">\n <WorkbenchIcon name={view.icon} size={14} />\n <Text flex=\"1\" minW=\"0\" textStyle=\"label/S/medium\" truncate>\n {view.title}\n </Text>\n <Tooltip content={canAttach ? `Attach ${view.label}` : \"Panel is too narrow to attach this menu\"}>\n <Box as=\"span\" display=\"inline-flex\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label={`Attach ${view.label}`}\n disabled={!canAttach}\n onClick={view.onOpen}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeft\" : \"PanelRight\"} size={14} />\n </IconButton>\n </Box>\n </Tooltip>\n </Header>\n <Box flex=\"1\" minH=\"0\" minW=\"0\">\n <WorkbenchRegion workbench={workbench} region={view.region} title={view.label} transparent />\n </Box>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\nexport const WorkbenchPanelMenuOpeners = (props: { workbench: WorkbenchCore; panel: WorkbenchPanelRegion }) => {\n const { panel, workbench } = props;\n const panelWidth = useWorkbenchPanelWidth(panel);\n const responsiveCollapsed = shouldCollapseWorkbenchPanelMenus(panelWidth);\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\", responsiveCollapsed);\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\", responsiveCollapsed);\n const views = [left, right];\n const closedMenus = [left, right].filter((view) => view.has && view.collapsed);\n\n if (closedMenus.length === 0) return null;\n\n return (\n <HStack flexShrink={0} gap=\"2xs\" minW=\"0\">\n {closedMenus.map((view) => {\n const attachedMenuMinSizes = views\n .filter((candidate) => candidate.has && !candidate.collapsed)\n .map((candidate) => candidate.size.minPx);\n const canAttach =\n !view.responsiveCollapsed &&\n canAttachWorkbenchPanelMenu({\n panelWidth,\n targetMenuMinSize: view.size.minPx,\n attachedMenuMinSizes,\n });\n\n return <WorkbenchPanelMenuOpener key={view.region} view={view} workbench={workbench} canAttach={canAttach} />;\n })}\n </HStack>\n );\n};\n","import { Box, Flex, IconButton, Text } from \"@chakra-ui/react\";\nimport { AttachedPanel, BubbleButton, BubblePanel, Header, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { MessageCircle, Minimize2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\n\ninterface WorkbenchSidePanelProps {\n workbench: WorkbenchCore;\n contentSlotRef: (node: HTMLDivElement | null) => void;\n bottomOffset?: string;\n header?: ReactNode;\n}\n\nconst floatingPanelBottom = (bottomOffset: string | undefined) =>\n bottomOffset ? `calc(${bottomOffset} + 0.75rem)` : \"3\";\n\nconst launcherBottom = (bottomOffset: string | undefined) => (bottomOffset ? `calc(${bottomOffset} + 1.5rem)` : \"6\");\n\nconst WorkbenchSidePanelTitle = () => (\n <Box flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n Side Panel\n </Text>\n </Box>\n);\n\ninterface WorkbenchSidePanelHeaderProps {\n header?: ReactNode;\n}\n\nconst WorkbenchSidePanelHeader = (props: WorkbenchSidePanelHeaderProps) => {\n const { header } = props;\n\n return header ?? <WorkbenchSidePanelTitle />;\n};\n\nexport const WorkbenchAttachedSidePanel = (props: WorkbenchSidePanelProps) => {\n const { workbench, contentSlotRef, header } = props;\n\n return (\n <WorkbenchFocusRegion workbench={workbench} region=\"side\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <AttachedPanel\n data-testid=\"workbench-side-panel-attached\"\n data-workbench-panel=\"side\"\n data-workbench-region=\"side\"\n width=\"full\"\n minWidth=\"0\"\n bg={workbenchBackgrounds.widget}\n header={\n <Header data-workbench-panel-header=\"side\" variant=\"main\" flexShrink={0} gap=\"sm\">\n <WorkbenchSidePanelHeader header={header} />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"side\" />\n <Tooltip content=\"Float Side Panel\">\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label=\"Float Side Panel\"\n onClick={() => workbench.sidePanel.setMode(\"floating\")}\n >\n <Minimize2 size={16} />\n </IconButton>\n </Tooltip>\n </Header>\n }\n >\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"side\">\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </WorkbenchPanelMenuLayout>\n </AttachedPanel>\n </WorkbenchFocusRegion>\n );\n};\n\nexport const WorkbenchFloatingSidePanel = (props: WorkbenchSidePanelProps) => {\n const { workbench, contentSlotRef, bottomOffset, header } = props;\n const mode = workbench.sidePanel.getMode();\n\n if (mode === \"attached\") return null;\n\n if (mode === \"closed\") {\n return (\n <BubbleButton\n aria-label=\"Open Side Panel\"\n containerProps={{ bottom: launcherBottom(bottomOffset) }}\n tooltip=\"Open Side Panel\"\n onClick={() => workbench.sidePanel.setMode(\"floating\")}\n >\n <MessageCircle size={20} strokeWidth={2} />\n </BubbleButton>\n );\n }\n\n return (\n <BubblePanel\n isOpen\n aria-label=\"Side Panel\"\n testId=\"workbench-side-panel-floating\"\n closeLabel=\"Close Side Panel\"\n containerProps={{ bottom: floatingPanelBottom(bottomOffset), bg: workbenchBackgrounds.widget }}\n popOutLabel=\"Reattach Side Panel\"\n onClose={() => workbench.sidePanel.setMode(\"closed\")}\n onPopOut={() => workbench.sidePanel.setMode(\"attached\")}\n menu={<WorkbenchSidePanelHeader header={header} />}\n >\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </BubblePanel>\n );\n};\n","import { Box, Center, Text } from \"@chakra-ui/react\";\nimport { useThemePreference } from \"@pstdio/ui\";\nimport { Terminal, type TerminalBridge } from \"@pstdio/ui/terminal\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ResourceRef, WorkbenchCore, WorkbenchPanelInstance, WorkbenchTerminalController } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface ControllerTerminalBridgeOptions {\n getResource?: () => ResourceRef | undefined;\n getTitle?: () => string | undefined;\n}\n\nconst workspacePathFromResource = (resource: ResourceRef | undefined) => {\n const workspacePath = resource?.metadata?.workspacePath;\n return typeof workspacePath === \"string\" && workspacePath.length > 0 ? workspacePath : undefined;\n};\n\nconst withTerminalRequestDefaults = (\n request: Parameters<TerminalBridge[\"openSession\"]>[0],\n resource: ResourceRef | undefined,\n) => {\n const cwd = workspacePathFromResource(resource);\n return cwd && !request.cwd ? { ...request, cwd } : request;\n};\n\n// Adapts the core terminal controller to the renderer-side `TerminalBridge`\n// contract. Sessions opened by the panel land in the same controller registry\n// the `terminal.session` webview capability uses, so host UI and extension\n// webviews always see one session registry.\nexport const createControllerTerminalBridge = (\n terminal: WorkbenchTerminalController,\n options: ControllerTerminalBridgeOptions = {},\n): TerminalBridge => ({\n async openSession(request) {\n const { sessionId } = await terminal.open({\n request: withTerminalRequestDefaults(request, options.getResource?.()),\n title: options.getTitle?.(),\n });\n return {\n id: sessionId,\n write: (data) => terminal.write({ sessionId, data }),\n resize: (cols, rows) => terminal.resize({ sessionId, cols, rows }),\n kill: (signal) => terminal.kill({ sessionId, signal }),\n onData: (handler) => terminal.subscribe(sessionId, { onData: handler }),\n onExit: (handler) => terminal.subscribe(sessionId, { onExit: handler }),\n onError: (handler) => terminal.subscribe(sessionId, { onError: handler }),\n };\n },\n});\n\ninterface WorkbenchTerminalPanelProps {\n placement: WorkbenchPanelInstance;\n workbench: WorkbenchCore;\n}\n\n/**\n * Body of the host-owned terminal panel. Chrome (tab, title, close action,\n * resize) comes from the workbench `secondary` region; this component only mounts\n * the terminal bound to the workbench terminal controller. Collapsing the panel\n * keeps the terminal mounted. Closing its tab unmounts the terminal and kills\n * its session (close = kill).\n */\nexport const WorkbenchTerminalPanel = (props: WorkbenchTerminalPanelProps) => {\n const { placement, workbench } = props;\n const { themePreference } = useThemePreference();\n const placementRef = useRef(placement);\n placementRef.current = placement;\n const [bridge] = useState(() =>\n createControllerTerminalBridge(workbench.terminal, {\n getResource: () => placementRef.current.resource,\n getTitle: () => placementRef.current.title,\n }),\n );\n const [sessionId, setSessionId] = useState<string>();\n // The controller tracks the session's foreground process name; mirror it onto\n // the tab so terminals read like VSCode (e.g. `zsh`, `opencode`).\n const processTitle = useWorkbenchStore(workbench.terminal.store, (state) =>\n sessionId ? state.sessionsById[sessionId]?.title : undefined,\n );\n const active = useWorkbenchStore(workbench.layout.store, (state) => {\n const region = state.layout.regions.secondary;\n return (region.activeWidgetId ?? region.widgets[0]?.widgetId) === placement.instanceId;\n });\n\n useEffect(() => {\n if (!sessionId || !processTitle) return;\n workbench.layout.updatePanel(placement.instanceId, { title: processTitle });\n }, [sessionId, processTitle, placement.instanceId, workbench.layout]);\n\n if (!workbench.terminal.isAvailable()) {\n return (\n <Center h=\"full\" px=\"md\">\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n Terminal sessions are not available in this workbench host.\n </Text>\n </Center>\n );\n }\n\n return (\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Terminal\n bridge={bridge}\n theme={/dark/i.test(themePreference) ? \"dark\" : \"light\"}\n autoFocus={active}\n onSessionOpen={setSessionId}\n />\n </Box>\n );\n};\n","import type { WorkbenchCoreContributionContext, WorkbenchModuleContribution } from \"../../core\";\nimport { WorkbenchTerminalPanel } from \"./workbench-terminal-panel\";\n\n// The host-owned terminal panel in the workbench `secondary` (bottom) region.\n// Exported so hosts can open or assert it directly.\nexport const WORKBENCH_TERMINAL_WIDGET_ID = \"workbench.terminal\";\n\n// Built-in command to open (or focus) the terminal panel. Registered by the\n// surface module so it is available in the command palette without host wiring.\nexport const WORKBENCH_TERMINAL_OPEN_COMMAND_ID = \"workbench.terminal.open\";\n\nconst RENDERER_ID = \"workbench.terminal.renderer\";\nconst LAUNCHER_RENDERER_ID = \"workbench.terminal.launcher.renderer\";\nconst TERMINAL_PANEL_SIZE = { defaultPx: 240, minPx: 128 };\ntype OpenWorkbenchTerminalInput = NonNullable<Parameters<WorkbenchCoreContributionContext[\"layout\"][\"openWidget\"]>[1]>;\ntype OpenWorkbenchTerminalOptions = OpenWorkbenchTerminalInput & {\n reveal?: boolean;\n};\ntype TerminalResource = OpenWorkbenchTerminalOptions[\"resource\"];\n\nexport const WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID = \"workbench.terminal.launcher\";\n\nconst restoreTerminalSelectionFromLauncher = (ctx: WorkbenchCoreContributionContext, launcherInstanceId: string) => {\n const secondary = ctx.layout.getLayout().regions.secondary;\n if (secondary.activeWidgetId !== launcherInstanceId) return;\n\n const fallback = [...secondary.widgets]\n .reverse()\n .find((placement) => placement.contributionId !== WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID);\n if (fallback) ctx.layout.setRegionActiveWidget(\"secondary\", fallback.widgetId);\n};\n\nconst ensureTerminalLauncher = (ctx: WorkbenchCoreContributionContext) => {\n const existing = ctx.layout\n .getLayout()\n .regions.secondary.widgets.find((placement) => placement.contributionId === WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID);\n if (existing) {\n restoreTerminalSelectionFromLauncher(ctx, existing.widgetId);\n return existing;\n }\n\n const launcher = ctx.layout.openPanel(WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID, {\n hiddenByDefault: true,\n pinned: true,\n title: \"Terminal\",\n });\n restoreTerminalSelectionFromLauncher(ctx, launcher.instanceId);\n return launcher;\n};\n\nconst terminalTitlePattern = /^Terminal (\\d+)$/;\nconst nextTerminalIndexes = new WeakMap<WorkbenchCoreContributionContext[\"layout\"][\"store\"], number>();\n\nconst getInitialTerminalIndex = (ctx: WorkbenchCoreContributionContext) => {\n const terminalPlacements = ctx.layout\n .getLayout()\n .regions.secondary.widgets.filter((placement) => placement.contributionId === WORKBENCH_TERMINAL_WIDGET_ID);\n const titleIndexes = terminalPlacements\n .map((placement) => terminalTitlePattern.exec(placement.title ?? \"\")?.[1])\n .filter((index): index is string => index !== undefined)\n .map((index) => Number.parseInt(index, 10));\n return Math.max(terminalPlacements.length, ...titleIndexes) + 1;\n};\n\nconst getNextTerminalTitle = (ctx: WorkbenchCoreContributionContext) => {\n const nextIndex = Math.max(nextTerminalIndexes.get(ctx.layout.store) ?? 1, getInitialTerminalIndex(ctx));\n nextTerminalIndexes.set(ctx.layout.store, nextIndex + 1);\n return `Terminal ${nextIndex}`;\n};\n\nconst hasWorkspacePath = (resource: TerminalResource) =>\n typeof resource?.metadata?.workspacePath === \"string\" && resource.metadata.workspacePath.length > 0;\n\nconst getTerminalResource = (ctx: WorkbenchCoreContributionContext, resource: TerminalResource) => {\n const activeResource = ctx.getActiveResource();\n const primaryResource = ctx.getPrimaryResource();\n return (\n (hasWorkspacePath(resource) ? resource : undefined) ??\n (hasWorkspacePath(activeResource) ? activeResource : undefined) ??\n (hasWorkspacePath(primaryResource) ? primaryResource : undefined) ??\n resource ??\n primaryResource\n );\n};\n\n// Opens a new terminal placement, revealing the bottom region if it is collapsed.\nexport const openWorkbenchTerminal = (\n ctx: WorkbenchCoreContributionContext,\n input: OpenWorkbenchTerminalOptions = {},\n) => {\n const { reveal = true, ...openInput } = input;\n const resource = getTerminalResource(ctx, openInput.resource);\n ensureTerminalLauncher(ctx);\n const placement = ctx.layout.openPanel(WORKBENCH_TERMINAL_WIDGET_ID, {\n ...openInput,\n resource,\n title: openInput.title ?? getNextTerminalTitle(ctx),\n closable: true,\n // Every terminal keeps its own live session, so each open is a real tab.\n strategy: { kind: \"persistent\" },\n });\n if (reveal) {\n ctx.layout.setRegionVisible(\"secondary\", true);\n ctx.panels.setOpen(\"secondary\", true);\n }\n return placement;\n};\n\n/**\n * Host-owned terminal surface: tabbed placements in the `secondary` region whose\n * chrome, focus, lifecycle, and styling belong to the workbench. Sessions are\n * owned by `workbench.terminal` (the same registry the `terminal.session`\n * webview capability uses); the host injects a session opener via\n * `workbench.terminal.setSessionOpener(...)`. Closing a tab kills its session;\n * disposing the controller kills every live session.\n */\nexport const createWorkbenchTerminalModule = (): WorkbenchModuleContribution => ({\n id: \"workbench.terminal.surface\",\n activate(ctx) {\n const disposables = [\n ctx.layout.registerPanel({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n title: \"Terminal\",\n region: \"secondary\",\n singleton: false,\n reuse: \"none\",\n mountStrategy: \"keep-mounted\",\n rendererId: RENDERER_ID,\n openCommandId: WORKBENCH_TERMINAL_OPEN_COMMAND_ID,\n eligibleLocations: {},\n regionSize: TERMINAL_PANEL_SIZE,\n }),\n ctx.renderers.registerRenderer({\n id: RENDERER_ID,\n render: (input) => <WorkbenchTerminalPanel placement={input.instance} workbench={input.workbench} />,\n }),\n ctx.renderers.registerRenderer({ id: LAUNCHER_RENDERER_ID, render: () => null }),\n ctx.layout.registerPanel({\n id: WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID,\n title: \"Terminal\",\n region: \"secondary\",\n singleton: true,\n hiddenByDefault: true,\n rendererId: LAUNCHER_RENDERER_ID,\n regionSize: TERMINAL_PANEL_SIZE,\n }),\n ctx.layout.onDidChangePersistenceScope(() => ensureTerminalLauncher(ctx)),\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID,\n label: \"Open terminal\",\n category: \"Terminal\",\n icon: \"SquareTerminal\",\n },\n { execute: (_args, context) => openWorkbenchTerminal(ctx, { resource: context?.resource }) },\n ),\n ];\n\n ensureTerminalLauncher(ctx);\n return disposables;\n },\n});\n","import { defaultThemePreferences } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\n// The theme set a workbench offers: the built-in workbench themes plus whatever\n// is registered in `workbench.themes` (e.g. extension-contributed themes). The\n// list shrinks when a contribution is disposed, so the theme picker only ever\n// lists themes whose owner is still active.\nexport const useWorkbenchThemePreferences = (workbench: WorkbenchCore) => {\n const contributed = useWorkbenchStore(workbench.themes.store, (state) => state.themes);\n return [...defaultThemePreferences, ...contributed];\n};\n","import {\n ChakraProvider,\n type FileIconThemePreferenceOption,\n FileIconThemePreferenceProvider,\n psTheme,\n type ThemePreference,\n type ThemePreferenceOption,\n ThemePreferenceProvider,\n} from \"@pstdio/ui\";\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ninterface WorkbenchThemeProviderProps {\n children: ReactNode;\n initialThemePreference?: ThemePreference;\n themePreferences?: readonly ThemePreferenceOption[];\n fileIconThemePreferences?: readonly FileIconThemePreferenceOption[];\n}\n\nconst WorkbenchThemeProviderContext = createContext(false);\n\nexport const WorkbenchThemeProvider = (props: WorkbenchThemeProviderProps) => {\n const { children, initialThemePreference, themePreferences, fileIconThemePreferences } = props;\n const hasWorkbenchThemeProvider = useContext(WorkbenchThemeProviderContext);\n\n if (hasWorkbenchThemeProvider) return children;\n\n return (\n <WorkbenchThemeProviderContext value>\n <ThemePreferenceProvider initialPreference={initialThemePreference} themePreferences={themePreferences}>\n <FileIconThemePreferenceProvider themePreferences={fileIconThemePreferences}>\n <ChakraProvider value={psTheme}>{children}</ChakraProvider>\n </FileIconThemePreferenceProvider>\n </ThemePreferenceProvider>\n </WorkbenchThemeProviderContext>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface WorkbenchThemeScopeProps extends Omit<BoxProps, \"children\"> {\n children: ReactNode;\n}\n\nexport const WorkbenchThemeScope = (props: WorkbenchThemeScopeProps) => {\n const { children, ...boxProps } = props;\n\n return <Box {...boxProps}>{children}</Box>;\n};\n","import { Center, Dialog, Portal } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport interface WorkbenchOverlayWidgetConfig {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"cover\" | \"full\";\n placement?: \"center\" | \"top\" | \"bottom\";\n scrollBehavior?: \"inside\" | \"outside\";\n closeOnEscape?: boolean;\n closeOnInteractOutside?: boolean;\n modal?: boolean;\n preventScroll?: boolean;\n trapFocus?: boolean;\n motionPreset?: \"scale\" | \"slide-in-bottom\" | \"slide-in-top\" | \"slide-in-left\" | \"slide-in-right\" | \"none\";\n role?: \"dialog\" | \"alertdialog\";\n contentHeight?: string;\n contentMaxHeight?: string;\n contentMinHeight?: string;\n contentWidth?: string;\n contentMaxWidth?: string;\n closeTriggerTop?: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst booleanValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"boolean\" ? value : undefined;\n};\n\nconst resolveOverlayConfig = (config: unknown): WorkbenchOverlayWidgetConfig => {\n if (!isRecord(config)) return {};\n\n const overlayConfig: WorkbenchOverlayWidgetConfig = {};\n const size = stringValue(config, \"size\");\n const placement = stringValue(config, \"placement\");\n const scrollBehavior = stringValue(config, \"scrollBehavior\");\n const closeOnEscape = booleanValue(config, \"closeOnEscape\");\n const closeOnInteractOutside = booleanValue(config, \"closeOnInteractOutside\");\n const modal = booleanValue(config, \"modal\");\n const preventScroll = booleanValue(config, \"preventScroll\");\n const trapFocus = booleanValue(config, \"trapFocus\");\n const motionPreset = stringValue(config, \"motionPreset\");\n const role = stringValue(config, \"role\");\n const contentHeight = stringValue(config, \"contentHeight\");\n const contentMaxHeight = stringValue(config, \"contentMaxHeight\");\n const contentMinHeight = stringValue(config, \"contentMinHeight\");\n const contentWidth = stringValue(config, \"contentWidth\");\n const contentMaxWidth = stringValue(config, \"contentMaxWidth\");\n const closeTriggerTop = stringValue(config, \"closeTriggerTop\");\n\n if (size) overlayConfig.size = size as WorkbenchOverlayWidgetConfig[\"size\"];\n if (placement) overlayConfig.placement = placement as WorkbenchOverlayWidgetConfig[\"placement\"];\n if (scrollBehavior) overlayConfig.scrollBehavior = scrollBehavior as WorkbenchOverlayWidgetConfig[\"scrollBehavior\"];\n if (closeOnEscape !== undefined) overlayConfig.closeOnEscape = closeOnEscape;\n if (closeOnInteractOutside !== undefined) overlayConfig.closeOnInteractOutside = closeOnInteractOutside;\n if (modal !== undefined) overlayConfig.modal = modal;\n if (preventScroll !== undefined) overlayConfig.preventScroll = preventScroll;\n if (trapFocus !== undefined) overlayConfig.trapFocus = trapFocus;\n if (motionPreset) overlayConfig.motionPreset = motionPreset as WorkbenchOverlayWidgetConfig[\"motionPreset\"];\n if (role) overlayConfig.role = role as WorkbenchOverlayWidgetConfig[\"role\"];\n if (contentHeight) overlayConfig.contentHeight = contentHeight;\n if (contentMaxHeight) overlayConfig.contentMaxHeight = contentMaxHeight;\n if (contentMinHeight) overlayConfig.contentMinHeight = contentMinHeight;\n if (contentWidth) overlayConfig.contentWidth = contentWidth;\n if (contentMaxWidth) overlayConfig.contentMaxWidth = contentMaxWidth;\n if (closeTriggerTop) overlayConfig.closeTriggerTop = closeTriggerTop;\n return overlayConfig;\n};\n\nexport const resolveOverlayDialogConfig = (placement: Pick<WorkbenchWidgetPlacement, \"closable\">, config: unknown) => {\n const closeable = placement.closable === true;\n const overlayConfig = resolveOverlayConfig(config);\n\n return {\n size: \"xl\",\n scrollBehavior: \"inside\",\n modal: true,\n preventScroll: true,\n trapFocus: true,\n ...overlayConfig,\n closeOnEscape: closeable && (overlayConfig.closeOnEscape ?? true),\n closeOnInteractOutside: closeable && (overlayConfig.closeOnInteractOutside ?? true),\n } satisfies WorkbenchOverlayWidgetConfig;\n};\n\nconst resolveActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveOverlayDialogRenderState = (\n activePlacement: WorkbenchWidgetPlacement | undefined,\n exitingPlacement: WorkbenchWidgetPlacement | undefined,\n) => {\n if (activePlacement) return { open: true, placement: activePlacement };\n if (exitingPlacement) return { open: false, placement: exitingPlacement };\n return undefined;\n};\n\nconst WorkbenchOverlayFallback = (props: { label: string }) => (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={props.label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n);\n\ninterface WorkbenchOverlayLayerProps {\n workbench: WorkbenchCore;\n}\n\nexport const WorkbenchOverlayLayer = (props: WorkbenchOverlayLayerProps) => {\n const { workbench } = props;\n const overlayRegion = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.overlay);\n const renderers = useWorkbenchStore(workbench.renderers.store, (state) => state.renderers);\n const [exitingPlacement, setExitingPlacement] = useState<WorkbenchWidgetPlacement | undefined>();\n\n const activePlacement = resolveActivePlacement(overlayRegion.widgets, overlayRegion.activeWidgetId);\n const renderState = resolveOverlayDialogRenderState(activePlacement, exitingPlacement);\n\n useEffect(() => {\n if (activePlacement) setExitingPlacement(undefined);\n }, [activePlacement]);\n\n if (!renderState) return null;\n\n const { open, placement } = renderState;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const overlayConfig = resolveOverlayDialogConfig(placement, widget?.config);\n const {\n contentHeight,\n contentMaxHeight,\n contentMinHeight,\n contentWidth,\n contentMaxWidth,\n closeTriggerTop,\n ...dialogRootConfig\n } = overlayConfig;\n const renderer = widget ? renderers[widget.rendererId] : undefined;\n const canCloseOverlay = open && placement.closable === true;\n const closeLabel = placement.title ?? widget?.title ?? \"overlay\";\n\n // Overlay widgets are full-screen dialogs — keep-alive doesn't apply here.\n // Reject keep-alive renderers explicitly so the misconfiguration surfaces\n // instead of silently rendering nothing into the dialog.\n if (widget && renderer?.keepAlive) {\n throw new Error(\n `Widget ${widget.id} uses keep-alive renderer ${renderer.id} in the overlay region; overlay widgets cannot reuse keep-alive hosts.`,\n );\n }\n\n const body =\n widget && renderer ? (\n (renderer.render({\n workbench,\n panel: toPanelContribution(widget),\n instance: toPanelInstance(placement),\n refresh: () => undefined,\n }) as ReactNode)\n ) : (\n <WorkbenchOverlayFallback\n label={\n widget ? `No renderer registered for ${widget.rendererId}.` : \"Widget contribution is no longer registered.\"\n }\n />\n );\n\n const handleOpenChange = (details: { open: boolean }) => {\n if (!details.open && canCloseOverlay) {\n setExitingPlacement(placement);\n workbench.layout.closePanel(placement.widgetId);\n }\n };\n\n const handleExitComplete = () => {\n setExitingPlacement((current) => (current?.widgetId === placement.widgetId ? undefined : current));\n };\n\n // Nested overlays (confirmation dialogs, popovers, menus) portal outside this\n // dialog's content, so their clicks register as outside interactions here. If\n // the interaction landed inside any overlay content, it cannot mean \"dismiss\n // the settings dialog\" — the widget's own content never reaches this handler.\n const handleInteractOutside = (event: CustomEvent<{ originalEvent?: Event }>) => {\n const target = event.detail.originalEvent?.target;\n if (target instanceof Element && target.closest('[data-part=\"content\"]')) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog.Root\n {...dialogRootConfig}\n open={open}\n onExitComplete={handleExitComplete}\n onOpenChange={handleOpenChange}\n onInteractOutside={handleInteractOutside}\n >\n <Portal>\n <Dialog.Backdrop position=\"fixed\" inset=\"0\" />\n <Dialog.Positioner position=\"fixed\" inset=\"0\" overflow=\"auto\">\n <Dialog.Content\n position=\"relative\"\n overflow=\"hidden\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n h={contentHeight}\n maxH={contentMaxHeight}\n minH={contentMinHeight}\n w={contentWidth}\n maxW={contentMaxWidth}\n >\n {body}\n {canCloseOverlay ? (\n <Dialog.CloseTrigger\n aria-label={`Close ${closeLabel}`}\n alignItems=\"center\"\n borderRadius=\"sm\"\n color=\"fg.muted\"\n cursor=\"pointer\"\n display=\"inline-flex\"\n h=\"5\"\n insetEnd=\"1\"\n justifyContent=\"center\"\n position=\"absolute\"\n top={closeTriggerTop ?? \"1\"}\n w=\"5\"\n zIndex=\"1\"\n _hover={{ bg: \"bg.subtle\", color: \"fg\" }}\n >\n <WorkbenchIcon name=\"x\" size={16} />\n </Dialog.CloseTrigger>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n};\n","import { IconButton } from \"@chakra-ui/react\";\nimport { ResourceActionMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport const WorkbenchBreadcrumbResourceActions = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n const resolveActions = useWorkbenchResourceActionResolver(workbench);\n const resource = items.at(-1)?.resource;\n const actions = resource ? resolveActions(resource) : [];\n\n if (!resource || actions.length === 0) return null;\n\n const label = resource.label ?? resource.id ?? resource.kind;\n\n return (\n <ResourceActionMenu actions={actions} positioning={{ placement: \"bottom-start\" }}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={`Actions for ${label}`}\n data-workbench-breadcrumb-resource-actions=\"\"\n >\n <WorkbenchIcon name=\"ChevronDown\" size={14} />\n </IconButton>\n </ResourceActionMenu>\n );\n};\n","import { Box, HStack, IconButton } from \"@chakra-ui/react\";\nimport { Header, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { workbenchTopHeaderLeadingMenuPath, workbenchTopHeaderTrailingMenuPath } from \"../../core\";\nimport { WorkbenchBreadcrumbView } from \"../breadcrumb/breadcrumb-view\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderActions } from \"./header-actions\";\nimport { WorkbenchBreadcrumbResourceActions } from \"./resource-actions\";\n\nexport interface WorkbenchNavRegionControl {\n id: \"sidenav\" | \"secondary\" | \"side\";\n label: string;\n icon: \"PanelLeft\" | \"PanelBottom\" | \"PanelRight\";\n open: boolean;\n onToggle: () => void;\n}\n\ninterface WorkbenchNavChromeProps {\n workbench: WorkbenchCore;\n hasNav: boolean;\n regionControls: WorkbenchNavRegionControl[];\n}\n\nconst WorkbenchRegionControl = (props: { control: WorkbenchNavRegionControl }) => {\n const { control } = props;\n\n return (\n <Tooltip content={control.label}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={control.label}\n aria-pressed={control.open}\n onClick={control.onToggle}\n >\n <WorkbenchIcon name={control.icon} size={14} />\n </IconButton>\n </Tooltip>\n );\n};\n\ninterface WorkbenchNavigationControlsProps {\n workbench: WorkbenchCore;\n regionControls: WorkbenchNavRegionControl[];\n}\n\nconst WorkbenchNavigationControls = (props: WorkbenchNavigationControlsProps) => {\n const { workbench, regionControls } = props;\n const history = useWorkbenchStore(workbench.history.store, (state) => state);\n const canNavigateBack = history.cursor > 0;\n const canNavigateForward = history.cursor >= 0 && history.cursor < history.entries.length - 1;\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\n {regionControls.map((control) => (\n <WorkbenchRegionControl key={control.id} control={control} />\n ))}\n <Tooltip content=\"Navigate back\">\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Navigate back\"\n disabled={!canNavigateBack}\n onClick={() => workbench.history.goBack()}\n >\n <WorkbenchIcon name=\"ArrowLeft\" size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Navigate forward\">\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Navigate forward\"\n disabled={!canNavigateForward}\n onClick={() => workbench.history.goForward()}\n >\n <WorkbenchIcon name=\"ArrowRight\" size={14} />\n </IconButton>\n </Tooltip>\n </HStack>\n );\n};\n\nconst WorkbenchRegionControls = (props: { controls: WorkbenchNavRegionControl[] }) => {\n const { controls } = props;\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\n {controls.map((control) => (\n <WorkbenchRegionControl key={control.id} control={control} />\n ))}\n </HStack>\n );\n};\n\nexport const WorkbenchNavChrome = (props: WorkbenchNavChromeProps) => {\n const { workbench, hasNav, regionControls } = props;\n const sidenavControls = regionControls.filter((control) => control.id === \"sidenav\");\n const trailingRegionControls = regionControls.filter((control) => control.id !== \"sidenav\");\n\n return (\n <Header\n data-workbench-region=\"nav\"\n variant=\"main\"\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderLeadingMenuPath} />\n <WorkbenchNavigationControls workbench={workbench} regionControls={sidenavControls} />\n <Box h=\"full\" minW=\"0\" maxW=\"60%\" overflow=\"hidden\">\n {hasNav ? (\n <WorkbenchRegion workbench={workbench} region=\"nav\" title=\"Nav Chrome\" />\n ) : (\n <WorkbenchBreadcrumbView workbench={workbench} />\n )}\n </Box>\n <HStack data-workbench-breadcrumb-action-slot=\"\" flexShrink={0} gap=\"2xs\" h=\"6\" justifyContent=\"center\" minW=\"6\">\n <WorkbenchBreadcrumbResourceActions workbench={workbench} />\n </HStack>\n <Box flex=\"1\" minW=\"0\" />\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderTrailingMenuPath} />\n <WorkbenchRegionControls controls={trailingRegionControls} />\n </Header>\n );\n};\n","import { Box, Button, Flex, Stack, Text } from \"@chakra-ui/react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap, ResourceRefValue } from \"@pstdio/ui\";\nimport { ParamEditor, ScrollArea } from \"@pstdio/ui\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { RegisteredControlsRendererContribution, WorkbenchCore, WorkbenchPanelInstance } from \"../../../core\";\n\n// A resource param chip carries a serializable ref; open it as a workbench tab so\n// links (e.g. a ticket's parent/dependency) navigate like the old webview did.\nconst openResourceRef = (workbench: WorkbenchCore, ref: ResourceRefValue) => {\n void workbench.resources\n .openResource(\n {\n kind: ref.type,\n uri: `pstdio://extension-resource/${encodeURIComponent(ref.type)}/${encodeURIComponent(ref.id)}`,\n id: ref.id,\n label: ref.label,\n },\n { replaceActive: true },\n )\n .catch(() => undefined);\n};\n\ninterface WorkbenchControlsViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredControlsRendererContribution;\n placement: WorkbenchPanelInstance;\n}\n\ninterface ControlsViewState {\n params: Param[];\n groups: InputGroup[];\n values: ParamValueMap;\n readOnly: boolean;\n loading: boolean;\n}\n\nconst initialState: ControlsViewState = { params: [], groups: [], values: {}, readOnly: false, loading: true };\n\n// Panels and menus unmount when they deactivate; the last state renders instantly\n// on the next mount while the fresh query runs.\nconst lastStates = new Map<string, ControlsViewState>();\n\nconst stateCacheKey = (contributionId: string, placement: WorkbenchPanelInstance) =>\n `${contributionId} ${placement.resource?.uri ?? \"\"}`;\n\nexport const WorkbenchControlsView = (props: WorkbenchControlsViewProps) => {\n const { workbench, contribution, placement } = props;\n const resource = placement.resource;\n const cacheKey = stateCacheKey(contribution.id, placement);\n const [state, setState] = useState<ControlsViewState>(() => lastStates.get(cacheKey) ?? initialState);\n const requestRef = useRef(0);\n\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve(contribution.executeQuery(resource)).then((result) => {\n if (cancelled || requestRef.current !== requestId) return;\n const values = { ...(contribution.defaultValues ?? {}), ...(result.values ?? {}) } as ParamValueMap;\n const next = {\n params: (result.params ?? []) as Param[],\n groups: (result.groups ?? []) as InputGroup[],\n values,\n readOnly: Boolean(result.readOnly),\n loading: false,\n };\n lastStates.set(cacheKey, next);\n setState(next);\n });\n };\n runQuery();\n\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = workbench.renderers.onDidRefreshControlsRenderer((event) => {\n if (event.controlsRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [cacheKey, contribution, resource, workbench]);\n\n const readOnly = state.readOnly || (!contribution.updateValue && !contribution.apply);\n const hasControls = state.params.length > 0 || state.groups.length > 0;\n const showFooter = !readOnly && (Boolean(contribution.apply) || Boolean(contribution.reset));\n\n const handleChange = (id: string, value: ParamValue) => {\n // The command runs outside the setState updater: React may invoke updaters\n // twice (StrictMode), which would double-execute the update command.\n const values = { ...state.values, [id]: value };\n if (contribution.updateValue) void contribution.updateValue({ controlId: id, value, values, resource });\n setState((prev) => ({ ...prev, values: { ...prev.values, [id]: value } }));\n };\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\">\n {state.loading ? (\n <Box p=\"md\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n Loading…\n </Text>\n </Box>\n ) : hasControls ? (\n <ParamEditor\n variant=\"small\"\n params={state.params}\n groups={state.groups}\n defaultValues={state.values}\n readOnly={readOnly}\n onChange={handleChange}\n onOpenResource={(ref) => openResourceRef(workbench, ref)}\n />\n ) : (\n <Box p=\"md\">\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {contribution.emptyTitle || \"No controls\"}\n </Text>\n {contribution.emptyDescription ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mt=\"2xs\">\n {contribution.emptyDescription}\n </Text>\n ) : null}\n </Box>\n )}\n </ScrollArea>\n {showFooter ? (\n <Flex borderTopWidth=\"1px\" borderColor=\"border.muted\" px=\"sm\" py=\"xs\" gap=\"xs\" justifyContent=\"flex-end\">\n {contribution.reset ? (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={() => {\n void contribution.reset?.({ resource });\n }}\n >\n Reset\n </Button>\n ) : null}\n {contribution.apply ? (\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => {\n void contribution.apply?.({ values: state.values, resource });\n }}\n >\n Apply\n </Button>\n ) : null}\n </Flex>\n ) : null}\n </Stack>\n );\n};\n","import { createElement } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport { WorkbenchControlsView } from \"./controls-view\";\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchControlsRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n workbench.renderers.setControlsRendererImplementation(({ workbench: scope, instance, controlsRendererId }) => {\n const contribution = scope.renderers.getControlsRenderer(controlsRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchControlsView, { workbench: scope, contribution, placement: instance });\n });\n};\n","import { createElement } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport { WorkbenchDataTableView } from \"./data-table-view\";\n\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchDataTableRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n workbench.renderers.setDataTableRendererImplementation(({ workbench: scope, instance, dataTableRendererId }) => {\n const contribution = scope.renderers.getDataTableRenderer(dataTableRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchDataTableView, { workbench: scope, contribution, placement: instance });\n });\n};\n","import { preloadCodeEditor } from \"@pstdio/ui/diff\";\nimport { createElement, lazy, Suspense } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\n\nconst loadWorkbenchFileRendererView = () =>\n import(\"./file-renderer-view\").then((module) => ({\n default: module.WorkbenchFileRendererView,\n }));\n\nconst WorkbenchFileRendererView = lazy(loadWorkbenchFileRendererView);\n\nif (typeof document !== \"undefined\") void preloadCodeEditor();\n\nexport const createWorkbenchFileRendererInstaller = (preloadView: () => void) => {\n // Track per-core installation so repeated <Workbench> renders are idempotent.\n const installed = new WeakSet<WorkbenchCore>();\n\n return (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n preloadView();\n workbench.renderers.setFileRendererImplementation(({ workbench: scope, instance, fileRendererId }) => {\n const contribution = scope.renderers.getFileRenderer(fileRendererId);\n if (!contribution) return null;\n return createElement(\n Suspense,\n { fallback: null },\n createElement(WorkbenchFileRendererView, { workbench: scope, contribution, placement: instance }),\n );\n });\n };\n};\n\nexport const installWorkbenchFileRenderer = createWorkbenchFileRendererInstaller(() => {\n if (typeof window !== \"undefined\") void preloadCodeEditor();\n void loadWorkbenchFileRendererView();\n});\n","export const createKanbanViewQuerySequencer = () => {\n let latestQueryId = 0;\n\n return {\n next: () => {\n latestQueryId += 1;\n return latestQueryId;\n },\n isLatest: (queryId: number) => queryId === latestQueryId,\n };\n};\n\nexport const executeKanbanViewQuery = async <TRow>(executeQuery: () => Promise<TRow[]> | TRow[]) => {\n try {\n return await executeQuery();\n } catch {\n return [];\n }\n};\n","import type { WorkbenchPanelInstance } from \"../../../core\";\n\nconst resolveProjectScope = (placement: WorkbenchPanelInstance, storageScope: string | undefined) => {\n const metadata = placement.resource?.metadata;\n const projectId = metadata?.projectId;\n if (typeof projectId === \"string\") return projectId;\n\n const favoriteScope = metadata?.favoriteScope;\n if (!favoriteScope || typeof favoriteScope !== \"object\" || Array.isArray(favoriteScope)) {\n return storageScope;\n }\n\n const scope = favoriteScope as { scope?: unknown; projectId?: unknown };\n return scope.scope === \"project\" && typeof scope.projectId === \"string\" ? scope.projectId : undefined;\n};\n\nexport const resolveKanbanRendererStorageKey = (\n kanbanRendererId: string,\n placement: WorkbenchPanelInstance,\n storageScope?: string,\n) => {\n const baseKey = `pstdio:workbench:kanbanRenderer:${kanbanRendererId}:${placement.instanceId}`;\n const projectScope = resolveProjectScope(placement, storageScope);\n return projectScope ? `${baseKey}:project:${projectScope}` : baseKey;\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea } from \"@pstdio/ui\";\nimport {\n type AttributeDescriptor,\n type AttributesSource,\n isAttributesSource,\n KanbanRenderer,\n type KanbanRendererRow,\n useKanbanRendererStore,\n} from \"@pstdio/ui/kanban-renderer\";\nimport { type ReactNode, useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport type {\n KanbanRendererQueryState,\n RegisteredKanbanRendererContribution,\n ResourceRef,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport { createKanbanViewQuerySequencer, executeKanbanViewQuery } from \"./kanban-view-query\";\nimport { resolveKanbanRendererStorageKey } from \"./kanban-view-storage\";\n\ninterface WorkbenchKanbanViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredKanbanRendererContribution;\n placement: WorkbenchPanelInstance;\n}\n\ninterface WorkbenchKanbanViewFrameProps {\n children: ReactNode;\n usesInternalScroll: boolean;\n}\n\nconst kanbanViewScrollContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\" } as const;\n\nconst WorkbenchKanbanViewFrame = (props: WorkbenchKanbanViewFrameProps) => {\n const { children, usesInternalScroll } = props;\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\" position={usesInternalScroll ? \"relative\" : undefined}>\n {usesInternalScroll ? (\n // Board columns own vertical scrolling; do not let their content height\n // make the workbench region's outer ScrollArea become the scroll owner.\n <Box position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n ) : (\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\" contentProps={kanbanViewScrollContentProps}>\n {children}\n </ScrollArea>\n )}\n </Stack>\n );\n};\n\nconst noopSubscribe = () => () => {};\n\nconst isResourceRef = (resource: unknown): resource is ResourceRef =>\n Boolean(\n resource &&\n typeof resource === \"object\" &&\n typeof (resource as { kind?: unknown }).kind === \"string\" &&\n typeof (resource as { uri?: unknown }).uri === \"string\",\n );\n\nconst useResolvedContributionAttributes = (attributes: AttributeDescriptor[] | AttributesSource) => {\n const source = isAttributesSource(attributes) ? attributes : undefined;\n const fallback = source ? undefined : (attributes as AttributeDescriptor[]);\n const subscribe = source ? source.subscribe : noopSubscribe;\n const getSnapshot = source ? source.getSnapshot : () => fallback!;\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport const mergeKanbanViewRowActions = (\n resourceActions: ResourceContextAction[],\n contributionActions: ResourceContextAction[],\n) => {\n const resourceActionKeys = new Set(resourceActions.map((action) => action.key));\n const resourceCommandIds = new Set(resourceActions.flatMap((action) => (action.commandId ? [action.commandId] : [])));\n return [\n ...resourceActions,\n ...contributionActions.filter(\n (action) =>\n !resourceActionKeys.has(action.key) && (!action.commandId || !resourceCommandIds.has(action.commandId)),\n ),\n ];\n};\n\nexport const WorkbenchKanbanView = (props: WorkbenchKanbanViewProps) => {\n const { workbench, contribution, placement } = props;\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const attributes = useResolvedContributionAttributes(contribution.attributes);\n const storageKey = resolveKanbanRendererStorageKey(contribution.id, placement, contribution.storageScope);\n const initialState = {\n settings: contribution.defaultSettings,\n filters: contribution.defaultFilters,\n views: contribution.defaultViews,\n activeViewId: contribution.defaultActiveViewId,\n };\n\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n\n const [rows, setRows] = useState<KanbanRendererRow[]>([]);\n const querySequencer = useRef(createKanbanViewQuerySequencer());\n\n // Run executeQuery whenever settings/filters change.\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n const queryId = querySequencer.current.next();\n const state: KanbanRendererQueryState = { settings, filters };\n void executeKanbanViewQuery(() => contribution.executeQuery(state)).then((next) => {\n if (cancelled || !querySequencer.current.isLatest(queryId)) return;\n setRows(next);\n });\n };\n runQuery();\n\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = workbench.renderers.onDidRefreshKanbanRenderer((event) => {\n if (event.kanbanRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") {\n subscription();\n } else {\n subscription?.dispose();\n }\n refreshSubscription.dispose();\n };\n }, [contribution, filters, settings, workbench]);\n\n const handleOpenRow = (row: KanbanRendererRow) => {\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n\n const getRowContextMenuActions = (row: KanbanRendererRow) => {\n const resourceActions = isResourceRef(row.resource) ? resolveResourceActions(row.resource) : [];\n const contributionActions = contribution.getRowContextMenuActions?.(row) ?? [];\n return mergeKanbanViewRowActions(resourceActions, contributionActions);\n };\n\n return (\n <WorkbenchKanbanViewFrame usesInternalScroll={settings.viewMode === \"board\"}>\n <KanbanRenderer\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={contribution.defaultSettings}\n defaultFilters={contribution.defaultFilters}\n defaultViews={contribution.defaultViews}\n defaultActiveViewId={contribution.defaultActiveViewId}\n emptyTitle={contribution.emptyTitle}\n emptyDescription={contribution.emptyDescription}\n getBoardColumnConfig={contribution.getBoardColumnConfig}\n hideToolbar={contribution.hideToolbar}\n onRowClick={contribution.onRowActivate ? handleOpenRow : undefined}\n onAttributeChange={contribution.onAttributeChange}\n onReorder={contribution.onReorder}\n createRow={contribution.createRow}\n onCreateRow={contribution.onCreateRow}\n onColumnAction={contribution.onColumnAction}\n getRowContextMenuActions={getRowContextMenuActions}\n />\n </WorkbenchKanbanViewFrame>\n );\n};\n","import { createElement } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport { WorkbenchKanbanView } from \"./kanban-view\";\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchKanbanRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n workbench.renderers.setKanbanRendererImplementation(({ workbench: scope, instance, kanbanRendererId }) => {\n const contribution = scope.renderers.getKanbanRenderer(kanbanRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchKanbanView, { workbench: scope, contribution, placement: instance });\n });\n};\n","import type { ResourceContextAction } from \"@pstdio/ui\";\nimport { createElement } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchTreeView } from \"./tree-view\";\n\ninterface InstallWorkbenchTreeRendererInput {\n renderParamField?: CommandParamFieldRenderer;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\ninterface WorkbenchTreeRendererInstallation {\n renderParamField: CommandParamFieldRenderer | undefined;\n onSidenavContextActionsChange: ((actions: ResourceContextAction[]) => void) | undefined;\n}\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakMap<WorkbenchCore, WorkbenchTreeRendererInstallation>();\n\nexport const installWorkbenchTreeRenderer = (\n workbench: WorkbenchCore,\n input: InstallWorkbenchTreeRendererInput = {},\n) => {\n const current = installed.get(workbench);\n if (current) {\n current.renderParamField = input.renderParamField;\n current.onSidenavContextActionsChange = input.onSidenavContextActionsChange;\n return;\n }\n\n const installation = {\n renderParamField: input.renderParamField,\n onSidenavContextActionsChange: input.onSidenavContextActionsChange,\n };\n installed.set(workbench, installation);\n workbench.renderers.setTreeRendererImplementation(({ workbench: scope, instance, treeId }) =>\n createElement(WorkbenchTreeView, {\n workbench: scope,\n treeViewId: treeId,\n resource: instance.resource,\n viewId: instance.panelId,\n renderParamField: installation.renderParamField,\n onSidenavContextActionsChange:\n scope.layout.getPanel(instance.panelId)?.region === \"sidenav\"\n ? installation.onSidenavContextActionsChange\n : undefined,\n }),\n );\n};\n","import type { FileIconThemePreferenceOption } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\n// The file icon themes a workbench offers: whatever is registered in\n// `workbench.fileIconThemes` (e.g. extension-contributed themes). The list\n// shrinks when a contribution is disposed, mirroring color themes.\nexport const useWorkbenchFileIconThemePreferences = (workbench: WorkbenchCore) =>\n useWorkbenchStore(\n workbench.fileIconThemes.store,\n (state) => state.themes,\n ) as readonly FileIconThemePreferenceOption[];\n","import {\n getWorkbenchModePanelForRegion,\n isWorkbenchModePanelAvailable,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n type WorkbenchCore,\n type WorkbenchRegion,\n} from \"../../core\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchRegionContentOptions {\n locationScoped?: boolean;\n}\n\nexport const useWorkbenchRegionContent = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n options: WorkbenchRegionContentOptions = {},\n) => {\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const modePanel = getWorkbenchModePanelForRegion(region);\n const panelAvailable =\n !modePanel || isWorkbenchModePanelAvailable(modeId ? workbench.modes.getMode(modeId) : undefined, modePanel);\n\n return useWorkbenchStore(workbench.layout.store, (state) => {\n if (!panelAvailable) return false;\n if (state.placeholders[region]) return true;\n if (!options.locationScoped) return state.layout.regions[region].widgets.length > 0;\n\n return state.layout.regions[region].widgets.some((placement) => {\n const widget = state.widgets[placement.contributionId];\n if (!widget) return false;\n return region === \"side\"\n ? matchesWorkbenchModeEligibility(widget, modeId)\n : isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement);\n });\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\ninterface WorkbenchHeaderBorderProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegion;\n}\n\n// The header's bottom edge is painted as an absolutely-positioned line instead\n// of a CSS border so an active outline tab can sit on top of it and merge with\n// the panel content below. Hosting headers must set `position=\"relative\"`; the\n// tab strip uses a higher `zIndex` so the active tab paints over this line.\nexport const WorkbenchHeaderBorder = (props: WorkbenchHeaderBorderProps) => {\n const { workbench, region } = props;\n\n if (!workbench.layout.getRegionHeaderBorderBottom(region)) return null;\n\n return (\n <Box position=\"absolute\" insetInline=\"0\" bottom=\"0\" h=\"1px\" bg=\"border.subtle\" pointerEvents=\"none\" zIndex=\"0\" />\n );\n};\n","import type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\nimport { resolvePanelCollapsible, setWorkbenchPanelOpen } from \"./workbench-panel-state\";\n\n// The collapse/reveal state of one panel around the main editor region, bundled so\n// WorkbenchBody receives one object per panel instead of six flat props.\nexport interface WorkbenchPanelView {\n has: boolean;\n hasHeader: boolean;\n collapsible: boolean;\n collapsed: boolean;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nexport interface WorkbenchMainPanels {\n hasMainHeader: boolean;\n secondaryPanel: WorkbenchPanelView;\n}\n\nconst useSecondaryPanelView = (workbench: WorkbenchCore) => {\n const hasContent = useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true });\n const hasHeader = useWorkbenchRegionContent(workbench, \"secondary-header\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const collapsible = useWorkbenchStore(workbench.layout.store, () =>\n resolvePanelCollapsible(workbench, \"secondary-header\", \"secondary\"),\n );\n const open = useWorkbenchStore(workbench.panels.store, (state) => state.openByRegionId.secondary ?? true);\n\n return {\n has: hasContent || hasHeader || hasPanelHeader,\n hasHeader,\n collapsible,\n collapsed: !open && collapsible,\n onCollapsedChange: (collapsed: boolean) => {\n if (!collapsed || collapsible) setWorkbenchPanelOpen(workbench, \"secondary\", !collapsed);\n },\n };\n};\n\n// Subscribe to derived panel facts rather than the whole layout. Replaying a\n// resource can replace the active main placement without rebuilding the shell.\nexport const useWorkbenchMainPanels = (workbench: WorkbenchCore) => {\n const hasMainHeader = useWorkbenchRegionContent(workbench, \"main-header\");\n const secondaryPanel = useSecondaryPanelView(workbench);\n\n return {\n hasMainHeader,\n secondaryPanel,\n };\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Header } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { useWorkbenchPanelHeaderVisible, WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\n\ninterface WorkbenchSecondaryPanelProps {\n workbench: WorkbenchCore;\n hasSecondaryHeader: boolean;\n}\n\nexport const WorkbenchSecondaryPanel = (props: WorkbenchSecondaryPanelProps) => {\n const { workbench, hasSecondaryHeader } = props;\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"secondary\"\n data-workbench-panel=\"secondary\"\n data-workbench-region=\"secondary\"\n as=\"section\"\n bg={workbenchBackgrounds.panel}\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n w=\"full\"\n >\n {hasSecondaryHeader || hasPanelHeader ? (\n <Header\n data-workbench-panel-header=\"secondary\"\n variant=\"main\"\n bg={workbenchBackgrounds.panel}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"secondary\" />\n {hasSecondaryHeader ? (\n <Box flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"secondary-header\" title=\"Secondary Panel header\" />\n </Box>\n ) : null}\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"secondary\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"secondary-header\" />\n </Header>\n ) : null}\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"secondary\">\n <WorkbenchRegion workbench={workbench} region=\"secondary\" title=\"Secondary Panel\" />\n </WorkbenchPanelMenuLayout>\n </Box>\n </WorkbenchFocusRegion>\n );\n};\n","import { Box, Grid } from \"@chakra-ui/react\";\nimport { Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout } from \"@pstdio/ui\";\nimport { headerTrailingMenuPath, type WorkbenchCore, type WorkbenchRegionSize } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchHeaderActions } from \"../header/header-actions\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport {\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n WorkbenchRegionTabs,\n} from \"../region/region-tabs\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\nimport { useWorkbenchMainPanels } from \"./use-workbench-main-panels\";\nimport { WorkbenchSecondaryPanel } from \"./workbench-secondary-panel\";\n\ninterface WorkbenchBodyProps {\n workbench: WorkbenchCore;\n}\n\nconst SECONDARY_PANEL_SIZE = { defaultPx: 240, minPx: 128, maxPx: 420 };\nconst SECONDARY_PANEL_CONTENT_MIN_SIZE_PX = 240;\nconst SECONDARY_PANEL_RESIZE_HANDLE_SIZE_PX = 4;\nconst mainHeaderTrailingMenuPath = headerTrailingMenuPath(\"main\");\n\nconst resolveRegionSize = (\n regionSize: WorkbenchRegionSize | undefined,\n persistedSize: number | undefined,\n fallback: Required<WorkbenchRegionSize>,\n) => ({\n defaultPx: persistedSize ?? regionSize?.defaultPx ?? fallback.defaultPx,\n minPx: regionSize?.minPx ?? fallback.minPx,\n maxPx: regionSize ? regionSize.maxPx : fallback.maxPx,\n});\n\ninterface MainHeaderBarProps {\n workbench: WorkbenchCore;\n hasMainHeader: boolean;\n}\n\nconst MainHeaderBar = (props: MainHeaderBarProps) => {\n const { workbench, hasMainHeader } = props;\n const hasMainContentTabs = useWorkbenchRegionTabsVisible(workbench, \"main\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"main\");\n\n if (!hasMainHeader && !hasPanelHeader) return null;\n\n return (\n <Header\n data-workbench-panel-header=\"main\"\n variant=\"main\"\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"main\" />\n {/* The tab strip grows into the empty header, so only claim space when a\n main-header view is actually mounted or when there are no tabs to claim it. */}\n <Box flex={hasMainHeader || !hasMainContentTabs ? \"1\" : \"0\"} h=\"full\" minW=\"0\" overflow=\"hidden\">\n {hasMainHeader ? <WorkbenchRegion workbench={workbench} region=\"main-header\" title=\"Main header\" /> : null}\n </Box>\n <WorkbenchHeaderActions\n workbench={workbench}\n menuPath={mainHeaderTrailingMenuPath}\n controlSize={PANEL_HEADER_CONTROL_SIZE}\n />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"main\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"main-header\" />\n </Header>\n );\n};\n\nexport const WorkbenchBody = (props: WorkbenchBodyProps) => {\n const { workbench } = props;\n const panels = useWorkbenchMainPanels(workbench);\n const { hasMainHeader, secondaryPanel } = panels;\n const persistedSecondarySize = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.regions.secondary.size,\n );\n const secondaryPanelSize = resolveRegionSize(\n workbench.layout.getRegionSize(\"secondary\"),\n persistedSecondarySize,\n SECONDARY_PANEL_SIZE,\n );\n\n const mainRegion = (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"main\"\n data-workbench-region=\"main\"\n bg={workbenchBackgrounds.main}\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n overflow=\"hidden\"\n >\n <WorkbenchRegion workbench={workbench} region=\"main\" title=\"Main\" />\n </WorkbenchFocusRegion>\n );\n const mainPanelWithMenus = (\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"main\">\n {mainRegion}\n </WorkbenchPanelMenuLayout>\n );\n\n const mainContent = (\n <Grid data-workbench-panel=\"main\" gridTemplateRows=\"auto minmax(0, 1fr)\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <MainHeaderBar workbench={workbench} hasMainHeader={hasMainHeader} />\n <Box gridRow=\"2\" h=\"full\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {mainPanelWithMenus}\n </Box>\n </Grid>\n );\n\n if (!secondaryPanel.has)\n return (\n <Grid as=\"main\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n {mainContent}\n </Grid>\n );\n\n return (\n <ResizableSplitLayout\n as=\"main\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"bottom\"\n contentPanel={mainContent}\n resizablePanel={<WorkbenchSecondaryPanel workbench={workbench} hasSecondaryHeader={secondaryPanel.hasHeader} />}\n collapsed={secondaryPanel.collapsed && secondaryPanel.collapsible}\n collapsible={secondaryPanel.collapsible}\n defaultSizePx={secondaryPanelSize.defaultPx}\n minSizePx={secondaryPanelSize.minPx}\n maxSizePx={secondaryPanelSize.maxPx}\n contentMinSizePx={SECONDARY_PANEL_CONTENT_MIN_SIZE_PX}\n resizeHandleSizePx={SECONDARY_PANEL_RESIZE_HANDLE_SIZE_PX}\n resizeLabel=\"Resize Secondary Panel\"\n showResizeSeparator\n onSizeChange={(height) => workbench.layout.setRegionSize(\"secondary\", height)}\n onCollapsedChange={secondaryPanel.onCollapsedChange}\n />\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Header, type ResourceContextAction, ResourceContextMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { useWorkbenchRegionTabsVisible, WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\n\ninterface WorkbenchSidenavProps {\n workbench: WorkbenchCore;\n hasHeader: boolean;\n contextActions: ResourceContextAction[];\n}\n\nexport const WorkbenchSidenav = (props: WorkbenchSidenavProps) => {\n const { workbench, hasHeader, contextActions } = props;\n const hasContentTabs = useWorkbenchRegionTabsVisible(workbench, \"sidenav\");\n const showHeaderBar = hasHeader || hasContentTabs;\n\n return (\n <ResourceContextMenu actions={contextActions} closeOnSelect={false} keepMountedWhenEmpty>\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"sidenav\"\n data-workbench-region=\"sidenav\"\n as=\"aside\"\n bg={workbenchBackgrounds.sidenav}\n display=\"flex\"\n flexDirection=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n w=\"full\"\n >\n {showHeaderBar ? (\n <Header\n data-workbench-panel-header=\"sidenav\"\n variant=\"main\"\n bg={workbenchBackgrounds.sidenav}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflowX=\"hidden\"\n // Full-bleed: sidenav-header content owns its own padding and fills the header height,\n // so the container adds none of its own horizontally.\n px=\"0\"\n // Size to content so a multi-row sidenav-header (e.g. a stacked action cluster) is not\n // clipped to the single-row height; single-row headers stay at the variant height.\n h=\"auto\"\n minH=\"2.5rem\"\n alignItems=\"stretch\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"sidenav\" />\n {hasHeader ? (\n <Box flex=\"1\" minW=\"0\" overflowX=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"sidenav-header\" title=\"Sidenav header\" />\n </Box>\n ) : null}\n <WorkbenchHeaderBorder workbench={workbench} region=\"sidenav-header\" />\n </Header>\n ) : null}\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"sidenav\" title=\"Sidenav\" />\n </Box>\n </WorkbenchFocusRegion>\n </Box>\n </ResourceContextMenu>\n );\n};\n\ninterface WorkbenchRegionPanelProps {\n workbench: WorkbenchCore;\n}\n\nexport const WORKBENCH_STATUS_BAR_HEIGHT = \"2rem\";\n\nexport const WorkbenchActivityBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"activity\"\n data-workbench-region=\"activity\"\n as=\"nav\"\n bg={workbenchBackgrounds.activityBar}\n borderRightWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n h=\"full\"\n minH=\"0\"\n overflow=\"hidden\"\n w=\"3.5rem\"\n >\n <WorkbenchRegion workbench={workbench} region=\"activity\" title=\"Activity bar\" />\n </WorkbenchFocusRegion>\n );\n};\n\nexport const WorkbenchStatusBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"status\"\n data-workbench-region=\"status\"\n as=\"footer\"\n bg={workbenchBackgrounds.statusBar}\n borderTopWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n h={WORKBENCH_STATUS_BAR_HEIGHT}\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n >\n <WorkbenchRegion workbench={workbench} region=\"status\" title=\"Status\" />\n </WorkbenchFocusRegion>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { WorkbenchAttachedSidePanel } from \"../side-panel/side-panel\";\n\nconst ATTACHED_PANEL_DEFAULT_SIZE_PX = 420;\nconst ATTACHED_PANEL_MIN_SIZE_PX = 320;\n\ninterface WorkbenchSidePanelRegionPortalProps {\n workbench: WorkbenchCore;\n hasSidePanel: boolean;\n mounted: boolean;\n sidePanelHost: HTMLDivElement | null;\n}\n\nexport const WorkbenchSidePanelRegionPortal = (props: WorkbenchSidePanelRegionPortalProps) => {\n const { workbench, hasSidePanel, mounted, sidePanelHost } = props;\n\n if (!hasSidePanel || !mounted || !sidePanelHost) return null;\n\n return createPortal(\n <WorkbenchRegion workbench={workbench} region=\"side\" title=\"Side Panel\" transparent />,\n sidePanelHost,\n );\n};\n\ninterface WorkbenchSidePanelRegionHeaderProps {\n workbench: WorkbenchCore;\n hasSideHeader: boolean;\n}\n\nexport const WorkbenchSidePanelRegionHeader = (props: WorkbenchSidePanelRegionHeaderProps) => {\n const { workbench, hasSideHeader } = props;\n\n return (\n <Box alignItems=\"center\" display=\"flex\" flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\" w=\"full\">\n <WorkbenchRegionTabs workbench={workbench} region=\"side\" />\n {hasSideHeader ? (\n <Box flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"side-header\" title=\"Side Panel header\" transparent />\n </Box>\n ) : null}\n </Box>\n );\n};\n\ninterface WorkbenchAttachedSidePanelLayoutProps {\n workbench: WorkbenchCore;\n attached: boolean;\n contentPanel: ReactNode;\n contentMinSizePx: number;\n header: ReactNode;\n onAttachedSlotChange: (slot: HTMLDivElement | null) => void;\n onCollapse: () => void;\n}\n\nexport const WorkbenchAttachedSidePanelLayout = (props: WorkbenchAttachedSidePanelLayoutProps) => {\n const { workbench, attached, contentPanel, contentMinSizePx, header, onAttachedSlotChange, onCollapse } = props;\n\n return (\n <ResizableSplitLayout\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n resizableSide=\"right\"\n contentPanel={contentPanel}\n resizablePanel={\n <WorkbenchAttachedSidePanel workbench={workbench} contentSlotRef={onAttachedSlotChange} header={header} />\n }\n collapsed={!attached}\n defaultSizePx={ATTACHED_PANEL_DEFAULT_SIZE_PX}\n minSizePx={ATTACHED_PANEL_MIN_SIZE_PX}\n contentMinSizePx={contentMinSizePx}\n resizeLabel=\"Resize Side Panel\"\n showResizeSeparator\n onCollapsedChange={(collapsed) => {\n if (attached && collapsed) onCollapse();\n }}\n />\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchAttachedSidePanelLayout } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchSidePanelBoundaryProps {\n workbench: WorkbenchCore;\n showAttachedSidePanel: boolean;\n contentFrame: ReactNode;\n sideHeader: ReactNode;\n contentMinSizePx: number;\n onAttachedSlotChange(slot: HTMLDivElement | null): void;\n}\n\ninterface WorkbenchKeyboardFrameProps {\n children: ReactNode;\n}\n\nconst interactivePointerTargetSelector = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"[contenteditable='true']\",\n \"[role='button']\",\n \"[role='checkbox']\",\n \"[role='menuitem']\",\n \"[role='option']\",\n \"[role='radio']\",\n \"[role='switch']\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nconst hasClosest = (target: EventTarget | null): target is EventTarget & { closest(selector: string): unknown } =>\n typeof (target as { closest?: unknown } | null)?.closest === \"function\";\n\nexport const shouldFocusWorkbenchKeyboardFrame = (target: EventTarget | null, currentTarget: EventTarget) => {\n if (target === currentTarget) return true;\n if (!hasClosest(target)) return false;\n return !target.closest(interactivePointerTargetSelector);\n};\n\nconst focusWorkbenchKeyboardFrame = (element: HTMLDivElement | null) => {\n element?.focus({ preventScroll: true });\n};\n\nconst WorkbenchKeyboardFrame = (props: WorkbenchKeyboardFrameProps) => {\n const { children } = props;\n const ref = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n focusWorkbenchKeyboardFrame(ref.current);\n }, []);\n\n return (\n <Flex\n ref={ref}\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n tabIndex={-1}\n outline=\"none\"\n onPointerDown={(event) => {\n if (shouldFocusWorkbenchKeyboardFrame(event.target, event.currentTarget)) {\n focusWorkbenchKeyboardFrame(event.currentTarget);\n }\n }}\n >\n {children}\n </Flex>\n );\n};\n\nexport const WorkbenchSidePanelBoundary = (props: WorkbenchSidePanelBoundaryProps) => {\n const { workbench, showAttachedSidePanel, contentFrame, sideHeader, contentMinSizePx, onAttachedSlotChange } = props;\n\n return (\n <WorkbenchKeyboardFrame>\n <WorkbenchAttachedSidePanelLayout\n workbench={workbench}\n attached={showAttachedSidePanel}\n contentPanel={contentFrame}\n contentMinSizePx={contentMinSizePx}\n header={sideHeader}\n onAttachedSlotChange={onAttachedSlotChange}\n onCollapse={() => workbench.sidePanel.setMode(\"closed\")}\n />\n </WorkbenchKeyboardFrame>\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout, type ResourceContextAction, Toaster } from \"@pstdio/ui\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\nimport { allowsWorkbenchFloatingPanels, type WorkbenchCore } from \"../../core\";\nimport { WorkbenchCommandPalette } from \"../command-palette/command-palette\";\nimport type { CommandParamFieldRenderer } from \"../command-palette/command-params-dialog\";\nimport { WorkbenchNavChrome, type WorkbenchNavRegionControl } from \"../header/workbench-nav-chrome\";\nimport { WorkbenchKeepAliveLayer } from \"../keep-alive/workbench-keep-alive-layer\";\nimport { WorkbenchKeybindingDispatcher } from \"../keybindings/workbench-keybinding-dispatcher\";\nimport { WorkbenchNotificationHost } from \"../notifications/notification-host\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { installWorkbenchControlsRenderer } from \"../renderers/controls/install-controls-renderer\";\nimport { installWorkbenchDataTableRenderer } from \"../renderers/data-table/install-data-table-renderer\";\nimport { installWorkbenchFileRenderer } from \"../renderers/file/install-file-renderer\";\nimport { installWorkbenchKanbanRenderer } from \"../renderers/kanban/install-kanban-renderer\";\nimport { installWorkbenchTreeRenderer } from \"../renderers/tree/install-tree-renderer\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchFloatingSidePanel } from \"../side-panel/side-panel\";\nimport { useWorkbenchFileIconThemePreferences } from \"../theme/use-workbench-file-icon-theme-preferences\";\nimport { useWorkbenchThemePreferences } from \"../theme/use-workbench-theme-preferences\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchThemeProvider } from \"../theme/workbench-theme-provider\";\nimport { WorkbenchThemeScope } from \"../theme/workbench-theme-scope\";\nimport { WorkbenchOverlayLayer } from \"./overlay-layer\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\nimport { WorkbenchBody } from \"./workbench-body\";\nimport { resolvePanelCollapsible, setWorkbenchPanelOpen, type WorkbenchPanelRegionId } from \"./workbench-panel-state\";\nimport {\n WORKBENCH_STATUS_BAR_HEIGHT,\n WorkbenchActivityBar,\n WorkbenchSidenav,\n WorkbenchStatusBar,\n} from \"./workbench-panels\";\nimport { WorkbenchSidePanelBoundary } from \"./workbench-side-panel-boundary\";\nimport { WorkbenchSidePanelRegionHeader, WorkbenchSidePanelRegionPortal } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchProps {\n workbench: WorkbenchCore;\n renderParamField?: CommandParamFieldRenderer;\n}\n\nconst SIDENAV_PANEL_ID = \"sidenav\";\n\nconst SIDENAV_DEFAULT_SIZE_PX = 250;\nconst SIDENAV_MIN_SIZE_PX = 200;\nconst CONTENT_MIN_SIZE_PX = 320;\n\nconst resolveSidenavSize = (workbench: WorkbenchCore, persistedSize: number | undefined) => {\n const regionSize = workbench.layout.getRegionSize(\"sidenav\");\n\n return {\n defaultPx: persistedSize ?? regionSize?.defaultPx ?? SIDENAV_DEFAULT_SIZE_PX,\n minPx: regionSize?.minPx ?? SIDENAV_MIN_SIZE_PX,\n maxPx: regionSize?.maxPx,\n };\n};\n\nconst createSidePanelHost = () => {\n if (typeof document === \"undefined\") return null;\n const host = document.createElement(\"div\");\n host.style.display = \"contents\";\n host.dataset.workbenchSidePanelHost = \"\";\n return host;\n};\n\nexport const resolveActiveSidePanelSlot = (input: {\n floatingPanelsAllowed: boolean;\n mounted: boolean;\n mode: \"attached\" | \"floating\" | \"closed\";\n attachedSlot: HTMLDivElement | null;\n floatingSlot: HTMLDivElement | null;\n}) => {\n if (!input.mounted) return null;\n if (input.mode === \"floating\") return input.floatingPanelsAllowed ? input.floatingSlot : input.attachedSlot;\n return input.attachedSlot;\n};\n\nconst useWorkbenchLayoutFlags = (workbench: WorkbenchCore) => {\n return {\n hasNavWidgets: useWorkbenchRegionContent(workbench, \"nav\"),\n hasActivityBarWidgets: useWorkbenchRegionContent(workbench, \"activity\"),\n hasSidenavHeaderWidgets: useWorkbenchRegionContent(workbench, \"sidenav-header\"),\n hasSidenavWidgets: useWorkbenchRegionContent(workbench, \"sidenav\"),\n hasSecondaryHeaderWidgets: useWorkbenchRegionContent(workbench, \"secondary-header\"),\n hasSecondaryWidgets: useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true }),\n hasSideHeaderWidgets: useWorkbenchRegionContent(workbench, \"side-header\"),\n hasSideWidgets: useWorkbenchRegionContent(workbench, \"side\", { locationScoped: true }),\n hasStatusWidgets: useWorkbenchRegionContent(workbench, \"status\"),\n };\n};\n\ninterface WorkbenchRegionControlsInput {\n workbench: WorkbenchCore;\n showSidenav: boolean;\n sidenavCollapsible: boolean;\n sidenavOpen: boolean;\n showSecondaryPanel: boolean;\n secondaryPanelCollapsible: boolean;\n secondaryPanelOpen: boolean;\n hasSidePanel: boolean;\n sidePanelMode: \"attached\" | \"floating\" | \"closed\";\n setPanelOpen: (region: WorkbenchPanelRegionId, open: boolean) => void;\n}\n\nconst createWorkbenchRegionControls = (input: WorkbenchRegionControlsInput) => {\n const controls: WorkbenchNavRegionControl[] = [];\n\n if (input.showSidenav && input.sidenavCollapsible && !input.sidenavOpen) {\n controls.push({\n id: \"sidenav\",\n label: \"Show Sidenav\",\n icon: \"PanelLeft\",\n open: false,\n onToggle: () => input.setPanelOpen(SIDENAV_PANEL_ID, true),\n });\n }\n\n if (input.showSecondaryPanel && input.secondaryPanelCollapsible) {\n controls.push({\n id: \"secondary\",\n label: input.secondaryPanelOpen ? \"Hide Secondary Panel\" : \"Show Secondary Panel\",\n icon: \"PanelBottom\",\n open: input.secondaryPanelOpen,\n onToggle: () => input.setPanelOpen(\"secondary\", !input.secondaryPanelOpen),\n });\n }\n\n if (input.hasSidePanel) {\n const open = input.sidePanelMode === \"attached\";\n controls.push({\n id: \"side\",\n label: open ? \"Hide Side Panel\" : \"Show Side Panel\",\n icon: \"PanelRight\",\n open,\n onToggle: () => input.workbench.sidePanel.setMode(open ? \"closed\" : \"attached\"),\n });\n }\n\n return controls;\n};\n\nconst WorkbenchContent = (props: WorkbenchProps) => {\n const { workbench, renderParamField } = props;\n const [sidenavContextActions, setSidenavContextActions] = useState<ResourceContextAction[]>([]);\n installWorkbenchTreeRenderer(workbench, {\n renderParamField,\n onSidenavContextActionsChange: setSidenavContextActions,\n });\n installWorkbenchKanbanRenderer(workbench);\n installWorkbenchDataTableRenderer(workbench);\n installWorkbenchFileRenderer(workbench);\n installWorkbenchControlsRenderer(workbench);\n const [attachedSidePanelSlot, setAttachedSidePanelSlot] = useState<HTMLDivElement | null>(null);\n const [floatingSidePanelSlot, setFloatingSidePanelSlot] = useState<HTMLDivElement | null>(null);\n const sidePanelHostRef = useRef<HTMLDivElement | null>(null);\n if (!sidePanelHostRef.current) sidePanelHostRef.current = createSidePanelHost();\n\n const sidePanelMode = useWorkbenchStore(workbench.sidePanel.store, (state) => state.mode);\n const paletteOpen = useWorkbenchStore(workbench.commandPalette.store, (state) => state.open);\n const paletteInitialQuery = useWorkbenchStore(workbench.commandPalette.store, (state) => state.initialQuery);\n const sidenavOpen = useWorkbenchStore(\n workbench.panels.store,\n (state) => state.openByRegionId[SIDENAV_PANEL_ID] ?? true,\n );\n const secondaryPanelOpen = useWorkbenchStore(\n workbench.panels.store,\n (state) => state.openByRegionId.secondary ?? true,\n );\n const secondaryPanelCollapsible = useWorkbenchStore(workbench.layout.store, () =>\n resolvePanelCollapsible(workbench, \"secondary-header\", \"secondary\"),\n );\n const hasSecondaryPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const hasSidePanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"side\");\n const floatingPanelsAllowed = useWorkbenchStore(workbench.layout.store, (state) =>\n allowsWorkbenchFloatingPanels(state.layout, Object.values(state.widgets)),\n );\n\n const {\n hasActivityBarWidgets,\n hasNavWidgets,\n hasSideHeaderWidgets,\n hasSideWidgets,\n hasSidenavHeaderWidgets,\n hasSidenavWidgets,\n hasSecondaryHeaderWidgets,\n hasSecondaryWidgets,\n hasStatusWidgets,\n } = useWorkbenchLayoutFlags(workbench);\n const hasSidePanel = hasSideHeaderWidgets || hasSideWidgets || hasSidePanelHeader;\n const showSidenav = hasSidenavWidgets || hasSidenavHeaderWidgets;\n const sidenavCollapsible = resolvePanelCollapsible(workbench, \"sidenav-header\", \"sidenav\");\n const showSecondaryPanel = hasSecondaryHeaderWidgets || hasSecondaryWidgets || hasSecondaryPanelHeader;\n const persistedSidenavSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.sidenav.size);\n const sidenavSize = resolveSidenavSize(workbench, persistedSidenavSize);\n const showAttachedSidePanel = hasSidePanel && sidePanelMode === \"attached\";\n // Closed removes the Side Panel's footprint, not its live region. Keeping the\n // portal in the hidden attached slot preserves provider and renderer state.\n const mountSidePanel = hasSidePanel;\n const setPanelOpen = (region: WorkbenchPanelRegionId, open: boolean) =>\n setWorkbenchPanelOpen(workbench, region, open);\n const regionControls = createWorkbenchRegionControls({\n workbench,\n showSidenav,\n sidenavCollapsible,\n sidenavOpen,\n showSecondaryPanel,\n secondaryPanelCollapsible,\n secondaryPanelOpen,\n hasSidePanel,\n sidePanelMode,\n setPanelOpen,\n });\n\n const sideHeader = <WorkbenchSidePanelRegionHeader workbench={workbench} hasSideHeader={hasSideHeaderWidgets} />;\n const activeSidePanelSlot = resolveActiveSidePanelSlot({\n floatingPanelsAllowed,\n mounted: mountSidePanel,\n mode: sidePanelMode,\n attachedSlot: attachedSidePanelSlot,\n floatingSlot: floatingSidePanelSlot,\n });\n\n useLayoutEffect(() => {\n const host = sidePanelHostRef.current;\n if (!host) return;\n if (activeSidePanelSlot) {\n if (host.parentNode !== activeSidePanelSlot) activeSidePanelSlot.appendChild(host);\n } else if (!mountSidePanel && host.parentNode) {\n host.parentNode.removeChild(host);\n }\n }, [activeSidePanelSlot, mountSidePanel]);\n\n const contentWithHeader = (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <WorkbenchNavChrome workbench={workbench} hasNav={hasNavWidgets} regionControls={regionControls} />\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchBody workbench={workbench} />\n </Flex>\n </Flex>\n );\n\n const contentWithSidenav = showSidenav ? (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <WorkbenchSidenav\n workbench={workbench}\n hasHeader={hasSidenavHeaderWidgets}\n contextActions={sidenavContextActions}\n />\n }\n contentPanel={contentWithHeader}\n collapsed={!sidenavOpen && sidenavCollapsible}\n collapsible={sidenavCollapsible}\n defaultSizePx={sidenavSize.defaultPx}\n minSizePx={sidenavSize.minPx}\n maxSizePx={sidenavSize.maxPx}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n resizeLabel=\"Resize sidenav\"\n showResizeSeparator\n onSizeChange={(width) => workbench.layout.setRegionSize(\"sidenav\", width)}\n onCollapsedChange={(collapsed) => {\n if (!collapsed || sidenavCollapsible) setPanelOpen(SIDENAV_PANEL_ID, !collapsed);\n }}\n />\n ) : (\n contentWithHeader\n );\n\n const contentFrame = (\n <Flex position=\"relative\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg={workbenchBackgrounds.main} color=\"fg\">\n {hasActivityBarWidgets ? <WorkbenchActivityBar workbench={workbench} /> : null}\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\" position=\"relative\">\n {contentWithSidenav}\n </Flex>\n <WorkbenchOverlayLayer workbench={workbench} />\n </Flex>\n );\n\n return (\n <WorkbenchThemeScope h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" position=\"relative\" w=\"full\">\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchSidePanelBoundary\n workbench={workbench}\n showAttachedSidePanel={showAttachedSidePanel}\n contentFrame={contentFrame}\n sideHeader={sideHeader}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n onAttachedSlotChange={setAttachedSidePanelSlot}\n />\n </Flex>\n {hasStatusWidgets ? <WorkbenchStatusBar workbench={workbench} /> : null}\n {hasSidePanel && floatingPanelsAllowed ? (\n <WorkbenchFloatingSidePanel\n workbench={workbench}\n contentSlotRef={setFloatingSidePanelSlot}\n bottomOffset={hasStatusWidgets ? WORKBENCH_STATUS_BAR_HEIGHT : undefined}\n header={sideHeader}\n />\n ) : null}\n <WorkbenchCommandPalette\n workbench={workbench}\n open={paletteOpen}\n initialQuery={paletteInitialQuery}\n renderParamField={renderParamField}\n onClose={() => workbench.commandPalette.close()}\n />\n <WorkbenchKeybindingDispatcher workbench={workbench} />\n <WorkbenchNotificationHost workbench={workbench} />\n </Flex>\n <WorkbenchSidePanelRegionPortal\n workbench={workbench}\n hasSidePanel={hasSidePanel}\n mounted={mountSidePanel}\n sidePanelHost={sidePanelHostRef.current}\n />\n {/* Kept-alive renderer portals sit at the workbench root so their hosts\n stay stable while widget slots and Side Panel containers move. */}\n <WorkbenchKeepAliveLayer workbench={workbench} />\n </WorkbenchThemeScope>\n );\n};\n\nexport const Workbench = (props: WorkbenchProps) => {\n const themePreferences = useWorkbenchThemePreferences(props.workbench);\n const fileIconThemePreferences = useWorkbenchFileIconThemePreferences(props.workbench);\n\n return (\n <WorkbenchThemeProvider themePreferences={themePreferences} fileIconThemePreferences={fileIconThemePreferences}>\n <WorkbenchContent {...props} />\n <Toaster />\n </WorkbenchThemeProvider>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport type { Disposable, WorkbenchCore, WorkbenchModuleContribution } from \"../../core\";\n\nexport interface WorkbenchModuleHostRegistration {\n disposable: Disposable;\n}\n\nexport interface WorkbenchModuleHostProps {\n workbench: WorkbenchCore;\n modules: readonly WorkbenchModuleContribution[];\n}\n\nexport const disposeWorkbenchModuleHostRegistrations = (\n registrations: Map<string, WorkbenchModuleHostRegistration>,\n) => {\n for (const registration of registrations.values()) registration.disposable.dispose();\n registrations.clear();\n};\n\nexport const syncWorkbenchModuleHostRegistrations = (\n workbench: WorkbenchCore,\n registrations: Map<string, WorkbenchModuleHostRegistration>,\n modules: readonly WorkbenchModuleContribution[],\n) => {\n const moduleIds = new Set(modules.map((module) => module.id));\n\n for (const [id, registration] of registrations) {\n if (!moduleIds.has(id)) {\n registration.disposable.dispose();\n registrations.delete(id);\n }\n }\n\n for (const module of modules) {\n if (!registrations.has(module.id)) {\n registrations.set(module.id, { disposable: workbench.registerModule(module) });\n }\n }\n};\n\nexport const WorkbenchModuleHost = (props: WorkbenchModuleHostProps) => {\n const { workbench, modules } = props;\n const registeredWorkbench = useRef(workbench);\n const registrations = useRef(new Map<string, WorkbenchModuleHostRegistration>());\n\n useEffect(() => {\n if (registeredWorkbench.current !== workbench) {\n disposeWorkbenchModuleHostRegistrations(registrations.current);\n registeredWorkbench.current = workbench;\n }\n\n syncWorkbenchModuleHostRegistrations(workbench, registrations.current, modules);\n }, [modules, workbench]);\n\n useEffect(() => () => disposeWorkbenchModuleHostRegistrations(registrations.current), []);\n\n return null;\n};\n"],"names":["useWorkbenchStore","store","selector","useStore","getSessionStatus","item","resource","metadata","status","undefined","WorkbenchBreadcrumbIcon","props","$","_c","t0","indicator","kind","t1","jsx","SessionIndicator","icon","Text","WorkbenchIcon","WorkbenchBreadcrumbTitle","title","t2","HStack","buildWorkbenchBreadcrumbItems","items","map","url","onClick","WorkbenchBreadcrumbView","workbench","breadcrumbs","_temp","length","Breadcrumb","state","useWorkbenchCompositionPanels","layout","modes","activeModeId","main","composition","panelsFor","secondary","side","chakraBackgrounds","activityBar","sidenav","panel","statusBar","vscodeColor","token","fallback","replaceAll","workbenchBackgrounds","widget","workbenchRegionBackgrounds","nav","activity","overlay","workbenchCommandPaletteBackground","getWorkbenchRegionBackground","region","humanize","value","spaced","replace","trim","charAt","toUpperCase","slice","isRecord","Array","isArray","stringifyEditableValue","String","JSON","stringify","toIdentifierPrefix","_match","char","toLowerCase","metadataString","key","resourceContextValue","entry","context","metadataValue","id","uri","type","resourceType","dedupeOptions","options","seen","Set","filter","option","has","add","hasCommandParameters","params","Object","keys","listCommandParamEntries","entries","param","label","buildCommandParamInitialValues","baseArgs","base","values","raw","hasOwn","defaultValue","isEmptyValue","parseJsonValue","parse","Error","normalizeValue","numberValue","Number","isFinite","split","Boolean","normalizeCommandParamValues","normalized","required","mergeCommandParamArgs","SEARCH_MODE_ID","COMMAND_MODE_ID","THEME_MODE_ID","MODE_VIEW_ID","workbenchPaletteModes","inputPrefix","isThemePaletteView","view","isModePaletteView","isPickerPaletteView","getPaletteViewMode","getPaletteViewModes","getPaletteInitialActiveIndex","input","themeInitialActiveIndex","modeInitialActiveIndex","getPaletteInputIcon","mode","Terminal","Search","getPalettePlaceholder","RESOURCE_QUERY_LIMIT","RESOURCE_QUERY_DEBOUNCE_MS","useWorkbenchCommandPaletteResourceEntries","query","open","onClose","refreshToken","commandPaletteResources","Symbol","for","setEntries","useState","cancelled","handle","setTimeout","queryProviders","limit","then","groups","flatMap","group","results","result","searchText","keywords","join","description","onActivate","Promise","resolve","activate","catch","_temp2","clearTimeout","useEffect","asText","asList","commandParamName","commandParamOptions","name","JSON_PARAM_TYPES","buildCommandParam","multiSelect","placeholder","searchable","clearable","singleLine","readCommandParamValue","CommandParamField","disabled","onChange","_id","next","ParamEditorRow","isFilled","CommandParamsDialog","request","renderParamField","onRun","setValues","error","setError","submitting","setSubmitting","record","command","args","close","setValue","current","run","commandId","caught","message","isValid","every","Dialog","details","jsxs","event","handleDialogAcceptShortcut","Stack","CloseButton","ScrollArea","px","py","fieldProps","custom","Fragment","Button","submitLabel","getModeLabel","getModeEntryIndex","index","findIndex","Math","max","createWorkbenchModePaletteEntries","getActiveModeId","listModes","modeId","isSelected","setActiveMode","getPanelLabel","openPanelWidget","pinned","openCommandId","commands","executeCommand","source","widgetResource","resourceKinds","canOpen","openWidget","closable","role","tabRetention","panels","setOpen","setRegionVisible","sidePanel","getMode","setMode","createWorkbenchPanelWidgetPaletteEntries","panelsByRegion","getPrimaryResource","workbenchPanelRegions","addable","contribution","panelLabel","createResourceEntry","resources","getKind","resourceUri","openResource","paletteOpenInput","createWorkbenchResourcePaletteEntries","listResources","getThemeIconName","preference","getThemePreferenceLabel","themePreference","getThemePreferenceEntryIndex","themePreferences","THEME_GROUP_LABELS","light","dark","byModeThenLabel","a","b","localeCompare","createWorkbenchThemePreferencePaletteEntries","setThemePreference","sort","rollbackThemePreview","themePreviewRef","preview","baseTheme","getCommandSearchText","category","createShortcutByCommandId","Map","keybindings","listActiveKeybindings","keybinding","getShortcut","binding","PaletteShortcut","getCommandErrorMessage","commandExecutionContext","executePaletteCommand","notifications","show","level","createEntry","action","onRequestParams","shortcutByCommandId","isCommandVisible","shortcut","get","getRecordGroup","getRecordOrder","order","byCommandPaletteGroup","left","right","groupComparison","listCommandRecords","menuPath","listMenuItems","matches","when","getCommand","listCommands","createWorkbenchCommandPaletteEntries","WorkbenchCommandPalette","workbenchCommandPaletteMenuPath","initialQuery","useThemePreference","commandPalette","useRef","paramsRequest","liveQuery","setLiveQuery","commandPaletteResourceEntries","compositionPanels","closePalette","exitPickerView","commitThemePreview","commandEntries","requestParams","resourceEntries","themeEntries","modeEntries","panelWidgetEntries","isThemeView","initialActiveIndex","activeViewMode","activeViewModes","Box","position","inset","alignItems","justifyContent","h","minH","padding","w","background","Palette","themeEntry","ctx","setQuery","setActiveIndex","clearParams","WorkbenchFocusRegion","boxProps","children","activeRegion","focus","ref","element","contains","document","activeElement","preventScroll","setActiveRegion","t3","menuPathKey","path","workbenchResourceMetadataContextKeyPrefix","workbenchResourceMetadataContextKey","isWorkbenchResourceContextKey","workbenchResourceKindContextKey","workbenchResourceIdContextKey","startsWith","omitWorkbenchResourceContextValues","resolveContextValues","contextValues","createWorkbenchResourceContextValues","listWorkbenchMenuItemsFromState","itemsByPath","leftOrder","rightOrder","byContributionPriority","matchesContextExpression","handler","isVisible","iconSrc","overflowLabel","readOnly","isEnabled","listWorkbenchMenuItems","menuStore","getState","isKernelAction","isOverflowAction","withLeadingSeparator","enabled","first","rest","separatorBefore","resolveOverflowItems","regularItems","kernelItems","resolveWorkbenchHeaderActionGroups","inlineItems","overflowItems","resolveWorkbenchHeaderOverflowLabel","find","WorkbenchInlineHeaderAction","controlSize","onSelect","IconButton","Tooltip","WorkbenchHeaderActions","_temp3","_temp4","T0","t4","t5","t6","bb0","t7","_temp5","t8","item_0","Menu","Portal","item_1","ListRow","state_0","state_1","state_2","getAnchorResource","WorkbenchClaimContext","createContext","useWorkbenchClaim","useContext","WorkbenchKeepAliveLayer","renderers","hosts","claims","renderer","keepAlive","host","createPortal","render","useTanStackWorkbenchHotkeys","registrations","hotkeys","ignoreInputs","preventDefault","stopPropagation","useHotkeys","registration","hotkey","callback","execute","keyAliases","alt","cmd","ctrl","control","meta","mod","shift","normalizeWorkbenchKeybindingStep","part","trimmed","alias","normalizeWorkbenchKeybinding","steps","getKeybindingSteps","createWorkbenchHotkeyRegistrations","commandIds","allowedCommandIds","isCommandEnabled","WorkbenchKeybindingDispatcher","commandContextValues","snapshot","isRegisteredCommandVisible","executeTreeAction","resolvedArgs","runTreeAction","onCommandError","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","createMenuIcon","display","width","height","objectFit","createMenuEndContent","external","isKernelMenuAction","createTreeMenuItemGroups","shortcuts","k","nextArgs","sourceCommandId","endContent","onAction","push","createTreeActionMenuItems","actions","createTreeContextMenuItems","actionItems","visibleRegularItems","createTreeActionItems","tooltip","toResourceContextAction","Icon","isDisabled","createWorkbenchResourceActions","resourceContextMenuPath","useWorkbenchResourceActionResolver","executeNotificationAction","WorkbenchNotificationHost","shownNotificationIds","showNotification","notification","toastAction","toastOptions","onStatusChange","dismiss","toaster","update","create","notification_0","listNotifications","subscription","subscribe","delete","dispose","clear","useWorkbenchLocationResource","activeLocationWidgetId","useWorkbenchActiveModeId","WorkbenchWidgetFallback","Center","WorkbenchRenderedWidgetFrame","WorkbenchKeepAliveSlot","rendererId","workbenchInput","slotRef","slot","disposable","claim","useLayoutEffect","noopRefresh","renderWidgetBody","WorkbenchWidgetHost","placement","getWidget","contributionId","toPanelContribution","instance","toPanelInstance","refresh","horizontalScrollRegions","panelMenuRegionIds","workbenchPanelMenuRegions","regions","sidePanelRegionIds","verticalContentProps","flexDirection","horizontalContentProps","getActivePlacement","widgets","activeWidgetId","widgetId","resolveRenderedRegionPlacements","activePlacement","mountStrategy","resolveRegionPlacementRenderState","active","pointerEvents","visibility","createPlaceholderPlacement","WorkbenchRegion","transparent","locationResource","currentRegionState","registeredWidgets","activeSubPanel","getActiveWorkbenchSubPanel","getWorkbenchPanelForMenuRegion","ignoreOwnerResourceUri","activeLocationPanel","getActiveWorkbenchLocationPanel","regionState","matchesWorkbenchModeEligibility","isWorkbenchPanelPlacementVisible","matchesWorkbenchPanelMenuOwner","locationPanel","subPanel","globalActiveWidgetId","getPlaceholder","placement_0","renderedPlacements","scrollsHorizontally","activateOnInteract","activatePanel","Flex","t9","t10","t11","T1","t12","t13","t14","t15","t16","t17","t18","t19","t20","renderedPlacement","renderState","t21","t22","WorkbenchPanelAddMenu","hydrating","history","triggerRef","openPanel","PANEL_HEADER_CONTROL_SIZE","trigger","getAnchorElement","panel_0","toTabKey","regionId","suppressesSidenavTabStrip","placements","resolveTabIconName","resourceKindIcon","resourceIcon","resolveDisplayedActiveWidgetId","visiblePlacements","some","isPlacementCloseable","isWorkbenchPanelRegion","panelRegion","shouldShowRegionTabs","hasAddAction","hasLeadingActions","shouldShowPanelHeader","hasOpenSubPanels","hasEligibleSubPanels","hasPanelMenus","hasHeaderActions","isSubPanelPlacement","isPlacementEligibleForRegion","ignoreResourceLocation","useWorkbenchPanelHeaderVisible","layoutState","eligibleSubPanels","hasMultipleLocations","openSubPanels","subPanelsOnly","menuRegions","menuRegion","placement_1","workbenchRegionTabLeadingMenuPath","useWorkbenchRegionTabsVisible","_temp6","_temp7","_temp8","locationTabs","leadingItems","tabPlacements","WorkbenchTabRenderer","useRegionTabBehavior","nextWidgetId","previousWidgetId","sortable","customMenuRendererId","tab","isPreview","hasCustomMenu","hasContextMenu","sortableState","useSortable","openMenu","setOpenMenu","x","y","anchor","setAnchor","menu","rect","currentTarget","getBoundingClientRect","openTabMenu","event_0","openCustomMenu","event_1","openContextMenu","menu_0","setMenuOpen","event_2","altKey","reorderPanel","beforeWidgetId","afterWidgetId","reorderWithKeyboard","WorkbenchRegionTabMenuSurface","mainAxis","getAnchorRect","offset","WorkbenchRegionTabContextMenu","updatePanel","strategy","WorkbenchRegionTabLabel","contentRendererId","WorkbenchRegionTabCloseButton","isActive","opacity","bg","color","closePanel","WorkbenchRegionTabMenus","behavior","open_0","WorkbenchRegionTab","labelId","isDragging","listeners","setNodeRef","transform","transition","menuOpen","CSS","Transform","toString","Tabs","SortableRegionTabList","leadingActions","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","T2","reorderable","over","activeIndex","overIndex","target","reorderWidget","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","List","placement_3","reorderableIndex","candidate","placement_2","resolvePlacementIcon","iconName","WorkbenchRegionTabs","visibilityStorageKey","historyHydrating","subPanelPlacements","tabStore","useTabVisibilityStore","tabOverrides","getKey","visibleSubPanels","filterVisibleTabs","visibleSubPanelIds","locationPanels","tabbedLocationPanels","placement_4","location","viewport","setViewport","hiddenByDefault","toggleTab","reset","placement_5","menuActions","buildTabVisibilityMenuActions","onToggleTab","onResetAll","visibleIcon","hiddenIcon","resetIcon","hasVisibilityMenu","showTabs","Element","closest","openVisibilityMenu","onWheel","deltaY","scrollWidth","clientWidth","scrollLeft","addEventListener","passive","removeEventListener","_temp9","onSelectLeadingItem","_temp0","placement_6","setRegionActiveWidget","PANEL_HEADER_TAB_SIZE","details_0","_temp1","state_3","state_4","resolveDataTableRendererColumns","contributionColumns","columns","firstRow","rows","buildDataTableRendererData","rowByData","WeakMap","data","row","fromEntries","column","set","resolveDataTableRendererSelectionActions","destructive","rendererRow","resolveDataTableRendererStorageKey","resourceKey","instanceId","initialResult","lastResults","resultCacheKey","WorkbenchDataTableView","cacheKey","setResult","loading","setLoading","requestRef","runQuery","requestId","executeQuery","refreshSubscription","onDidRefreshDataTableRenderer","dataTableRendererId","model","labels","descriptions","icons","stats","rowActions","selectionActions","data_0","row_0","onRowActivate","openRow","_temp10","_temp11","skeletonColumns","DataTableSkeleton","emptyTitle","emptyDescription","EmptyState","data_1","_temp12","_temp13","data_2","initialPageSize","pageSizeOptions","selectionMode","DataTable","column_0","column_1","column_2","column_3","column_4","column_5","stat","column_6","column_7","column_8","column_9","hidden","column_10","column_11","column_12","BOOLEAN_OPTIONS","at","toOptions","toParam","schema","default","enum","preferenceSchemaToParams","paramValueToPreference","toName","WorkbenchPreferencesForm","preferences","names","resolveScopeId","staged","setStaged","formKey","setFormKey","scope","scopeId","scopeRef","getSchema","getValue","schemaByName","name_0","schema_0","persist","value_0","handleChange","name_1","value_1","save","discard","hasStaged","ParamEditor","key_0","activeNodeIds","ids","uniqueIds","resolveTreeNodeResourceUri","node","listTreeNodes","nodes","childrenByNodeId","listSectionNodes","sections","section","resolveActiveResourceNodeIds","resourceUris","findSectionNode","nodeId","resolveTreeListSelection","activeNodeId","activeResource","selectedNodeId","activeResourceUris","getWorkbenchSelectionResourceUris","selectedResourceUri","selectedNode","includes","activeResourceNodeId","canVirtualizeTreeNode","isContainer","canVirtualizeTreeSections","findNode","child","findNodeInSections","wrapTreeNodeIcon","iconTooltip","resolveTreeNodeIcon","iconElement","resolveTreeNodeNavigationIntent","payload","resolveTreeNodeResource","renderShortcutEndContent","resolveTreeNodeEndContent","additions","diffAdditions","deletions","diffDeletions","DiffBubble","toTreeListSectionEmptyNode","emptyState","rowVariant","toTreeListNode","navigationIntent","commandContext","contextMenuItems","contextMenuActions","contextMenuPath","menuItems","iconColor","canHide","canReorder","suppressContextMenus","menuPlacement","collapsible","isNavigable","toTreeListSection","emptyNode","TREE_SKELETON_WIDTHS","TreeViewSkeleton","TreeViewBody","moduleLoading","backgroundContextActions","draggable","customizationAvailable","expandedNodeIds","expandedSectionIds","scrollRef","onToggleSection","onToggleNode","onReorderSections","onReorderNodes","onNavigate","TreeList","Skeleton","isUnregisteredTreeError","trees","treeId","getTreeRenderer","shouldShowTreeLoading","loadedTreeId","treeViewId","expandDefaultTreeSections","tree","sectionId","defaultExpandedSectionIds","setSectionExpanded","loadTreeData","header","body","footer","all","getHeader","getBody","getFooter","shouldSelectTreeNodeForNavigationTarget","targets","getSwitchModeNavigationTargetModeId","HEADER_SECTION_ID","FOOTER_SECTION_ID","toStringLabel","isCustomizableNode","visibilityContextIcon","effective","buildNodeVisibilityContextMenuItem","nodeOverrides","resolveVisibility","existingItems","addRegionNodeVisibilityContextMenuItems","changed","useTreeViewCustomization","storageKey","sectionOverrides","useTreeListVisibilityStore","toggleSection","toggleNode","resetVisibility","sectionOrder","useTreeListOrderStore","nodeOrderBySection","setSectionOrder","setNodeOrder","resetOrder","visibleFooterNodes","visibleHeaderNodes","visibleSections","suppressNodeContextMenus","footerNodes","headerNodes","visibilityActions","orderedSections","applyTreeListOrder","orderedHeaderNodes","orderedFooterNodes","includeNodeContextMenus","filterVisibleNodes","filterVisibleSections","buildTreeVisibilityMenuActions","customizationRevision","nextNodeIds","nextNodeIds_0","onReorderHeaderNodes","onReorderFooterNodes","state_5","state_6","state_7","state_8","node_0","node_1","EMPTY_TREE_STATE","regionSection","resolveActivePlacement","resolveTreeActiveResource","useSidenavContextActions","revision","actionsRef","TreeParamsDialog","navigateTreeNode","intent","setSelectedNode","navigation","openTarget","onOpenResourceError","replaceActive","useTreeData","viewId","setHeader","setBody","setFooter","setChildrenByNodeId","loadedTreeIdRef","loadRevisionRef","loadTree","loadRevision","onDidRefresh","WorkbenchTreeView","onSidenavContextActionsChange","treeRenderer","treeState","treeStore","statesByTreeId","setParamsRequest","rawHeaderSection","rawSections","adapterContext","rawFooterSection","expanded","setNodeExpanded","getChildren","expanded_0","navigationContext","headerSections","footerSections","bodyActiveNodeId","regionActiveNodeId","_sectionId","style","overflowX","minWidth","minHeight","t23","t24","t25","t26","_sectionId_0","t27","t28","t29","useSettingsRevision","settings","listener","useSyncExternalStore","Centered","ScrollableSettingsContent","CollectionItemView","itemId","setState","alive","Spinner","renderItem","SettingsSurfacePanel","panelId","getPanel","p","gap","SettingsOverlay","navTreeId","content","ResizableSplitLayout","SETTINGS_RESOURCE_KIND","settingsPanelResource","settingsItemResource","isSettingsScopeVisible","hasProjectScope","FALLBACK_SECTION_ID","toTreeActions","collectionItemNode","itemLabel","itemIcon","orderGroupKeys","indexOf","POSITIVE_INFINITY","collectionChildren","groupBy","byKey","list","panelToNode","buildSettingsTreeBody","listSections","sectionsById","listPanels","bySection","renderOrder","sectionPanels","WORKBENCH_SETTINGS_WIDGET_ID","WORKBENCH_SETTINGS_NAV_WIDGET_ID","WORKBENCH_SETTINGS_PANEL_WIDGET_ID","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","WIDGET_ID","RENDERER_ID","PANEL_RENDERER_ID","NAV_TREE_ID","createWorkbenchSettingsModule","registerTreeRenderer","registerPanel","singleton","registerRenderer","config","size","scrollBehavior","contentHeight","contentMaxWidth","contentWidth","closeTriggerTop","closeOnInteractOutside","registerKind","standardResourceIcons","registerPresenter","registerCommand","resolvePanelCollapsible","getRegionCollapsible","setWorkbenchPanelOpen","PANEL_CONTENT_MIN_SIZE_PX","PANEL_MENU_RESIZE_HANDLE_SIZE_PX","PANEL_MENU_COLLAPSE_THRESHOLD_PX","shouldCollapseWorkbenchPanelMenus","panelWidth","canAttachWorkbenchPanelMenu","menuMinSizes","attachedMenuMinSizes","targetMenuMinSize","requiredWidth","reduce","total","PANEL_MENU_SIZE","defaultPx","minPx","maxPx","panelLabels","resolveRegionSize","regionSize","getWorkbenchPanelMenuLabel","useWorkbenchPanelMenu","responsiveCollapsed","panelStateKey","openByRegionId","getRegionSize","collapsed","onOpen","onCollapsedChange","WorkbenchPanelMenu","AttachedMenu","addPanelMenu","setRegionSize","WorkbenchPanelMenuLayout","useWorkbenchPanelWidth","withRight","setWidth","querySelector","measure","observer","ResizeObserver","observe","disconnect","WorkbenchPanelMenuOpener","canAttach","Header","WorkbenchPanelMenuOpeners","views","closedMenus","view_0","candidate_0","floatingPanelBottom","bottomOffset","launcherBottom","WorkbenchSidePanelTitle","WorkbenchSidePanelHeader","WorkbenchAttachedSidePanel","contentSlotRef","Minimize2","AttachedPanel","WorkbenchFloatingSidePanel","bottom","MessageCircle","BubbleButton","BubblePanel","workspacePathFromResource","workspacePath","withTerminalRequestDefaults","cwd","createControllerTerminalBridge","terminal","openSession","sessionId","getResource","getTitle","write","resize","cols","kill","signal","onData","onExit","onError","WorkbenchTerminalPanel","placementRef","bridge","setSessionId","processTitle","sessionsById","isAvailable","test","WORKBENCH_TERMINAL_WIDGET_ID","WORKBENCH_TERMINAL_OPEN_COMMAND_ID","LAUNCHER_RENDERER_ID","TERMINAL_PANEL_SIZE","WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID","restoreTerminalSelectionFromLauncher","launcherInstanceId","getLayout","reverse","ensureTerminalLauncher","existing","launcher","terminalTitlePattern","nextTerminalIndexes","getInitialTerminalIndex","terminalPlacements","titleIndexes","exec","parseInt","getNextTerminalTitle","nextIndex","hasWorkspacePath","getTerminalResource","getActiveResource","primaryResource","openWorkbenchTerminal","reveal","openInput","createWorkbenchTerminalModule","disposables","reuse","eligibleLocations","onDidChangePersistenceScope","_args","useWorkbenchThemePreferences","contributed","themes","defaultThemePreferences","WorkbenchThemeProviderContext","WorkbenchThemeProvider","initialThemePreference","fileIconThemePreferences","ChakraProvider","psTheme","FileIconThemePreferenceProvider","ThemePreferenceProvider","WorkbenchThemeScope","stringValue","booleanValue","resolveOverlayConfig","overlayConfig","closeOnEscape","modal","trapFocus","motionPreset","contentMaxHeight","contentMinHeight","resolveOverlayDialogConfig","closeable","resolveOverlayDialogRenderState","exitingPlacement","WorkbenchOverlayFallback","WorkbenchOverlayLayer","overlayRegion","setExitingPlacement","dialogRootConfig","canCloseOverlay","closeLabel","handleOpenChange","handleExitComplete","handleInteractOutside","detail","originalEvent","WorkbenchBreadcrumbResourceActions","resolveActions","ResourceActionMenu","WorkbenchRegionControl","onToggle","WorkbenchNavigationControls","regionControls","canNavigateBack","cursor","canNavigateForward","goBack","goForward","WorkbenchRegionControls","controls","WorkbenchNavChrome","hasNav","sidenavControls","trailingRegionControls","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","control_0","openResourceRef","encodeURIComponent","initialState","lastStates","stateCacheKey","WorkbenchControlsView","defaultValues","onDidRefreshControlsRenderer","controlsRendererId","updateValue","apply","hasControls","showFooter","values_0","controlId","prev","installed","WeakSet","installWorkbenchControlsRenderer","setControlsRendererImplementation","getControlsRenderer","createElement","installWorkbenchDataTableRenderer","setDataTableRendererImplementation","getDataTableRenderer","loadWorkbenchFileRendererView","module","WorkbenchFileRendererView","lazy","preloadCodeEditor","createWorkbenchFileRendererInstaller","preloadView","setFileRendererImplementation","fileRendererId","getFileRenderer","Suspense","installWorkbenchFileRenderer","window","createKanbanViewQuerySequencer","latestQueryId","isLatest","queryId","executeKanbanViewQuery","resolveProjectScope","storageScope","projectId","favoriteScope","resolveKanbanRendererStorageKey","kanbanRendererId","baseKey","projectScope","kanbanViewScrollContentProps","WorkbenchKanbanViewFrame","usesInternalScroll","noopSubscribe","isResourceRef","useResolvedContributionAttributes","attributes","isAttributesSource","getSnapshot","mergeKanbanViewRowActions","resourceActions","contributionActions","resourceActionKeys","resourceCommandIds","WorkbenchKanbanView","resolveResourceActions","defaultActiveViewId","defaultFilters","defaultSettings","defaultViews","filters","activeViewId","useKanbanRendererStore","setRows","querySequencer","onDidRefreshKanbanRenderer","handleOpenRow","getRowContextMenuActions","viewMode","createRow","getBoardColumnConfig","hideToolbar","onAttributeChange","onColumnAction","onCreateRow","onReorder","KanbanRenderer","installWorkbenchKanbanRenderer","setKanbanRendererImplementation","getKanbanRenderer","installWorkbenchTreeRenderer","installation","setTreeRendererImplementation","useWorkbenchFileIconThemePreferences","fileIconThemes","useWorkbenchRegionContent","modePanel","getWorkbenchModePanelForRegion","isWorkbenchModePanelAvailable","panelAvailable","placeholders","locationScoped","WorkbenchHeaderBorder","getRegionHeaderBorderBottom","useSecondaryPanelView","hasContent","hasHeader","hasPanelHeader","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","WorkbenchSecondaryPanel","hasSecondaryHeader","SECONDARY_PANEL_SIZE","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","SECONDARY_PANEL_RESIZE_HANDLE_SIZE_PX","mainHeaderTrailingMenuPath","headerTrailingMenuPath","persistedSize","MainHeaderBar","hasMainContentTabs","WorkbenchBody","persistedSecondarySize","secondaryPanelSize","mainRegion","mainPanelWithMenus","Grid","mainContent","WorkbenchSidenav","contextActions","hasContentTabs","showHeaderBar","ResourceContextMenu","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchActivityBar","WorkbenchStatusBar","ATTACHED_PANEL_DEFAULT_SIZE_PX","ATTACHED_PANEL_MIN_SIZE_PX","WorkbenchSidePanelRegionPortal","hasSidePanel","mounted","sidePanelHost","WorkbenchSidePanelRegionHeader","hasSideHeader","WorkbenchAttachedSidePanelLayout","attached","contentPanel","contentMinSizePx","onAttachedSlotChange","onCollapse","interactivePointerTargetSelector","hasClosest","shouldFocusWorkbenchKeyboardFrame","focusWorkbenchKeyboardFrame","WorkbenchKeyboardFrame","WorkbenchSidePanelBoundary","showAttachedSidePanel","contentFrame","sideHeader","SIDENAV_PANEL_ID","SIDENAV_DEFAULT_SIZE_PX","SIDENAV_MIN_SIZE_PX","CONTENT_MIN_SIZE_PX","resolveSidenavSize","createSidePanelHost","dataset","workbenchSidePanelHost","resolveActiveSidePanelSlot","floatingPanelsAllowed","floatingSlot","attachedSlot","useWorkbenchLayoutFlags","hasNavWidgets","hasActivityBarWidgets","hasSidenavHeaderWidgets","hasSidenavWidgets","hasSecondaryHeaderWidgets","hasSecondaryWidgets","hasSideHeaderWidgets","hasSideWidgets","hasStatusWidgets","createWorkbenchRegionControls","showSidenav","sidenavCollapsible","sidenavOpen","setPanelOpen","showSecondaryPanel","secondaryPanelCollapsible","secondaryPanelOpen","sidePanelMode","WorkbenchContent","sidenavContextActions","setSidenavContextActions","attachedSidePanelSlot","setAttachedSidePanelSlot","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","paletteOpen","paletteInitialQuery","hasSecondaryPanelHeader","hasSidePanelHeader","allowsWorkbenchFloatingPanels","persistedSidenavSize","sidenavSize","mountSidePanel","activeSidePanelSlot","parentNode","appendChild","removeChild","contentWithHeader","contentWithSidenav","Workbench","Toaster","disposeWorkbenchModuleHostRegistrations","syncWorkbenchModuleHostRegistrations","modules","moduleIds","registerModule","WorkbenchModuleHost","registeredWorkbench"],"mappings":"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"}
|