@pstdio/workbench 0.3.0 → 0.4.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/dist/extensions.d.ts +31 -2
- package/dist/extensions.js +87 -73
- package/dist/extensions.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.js.map +1 -1
- package/dist/react.d.ts +10 -0
- package/dist/react.js +1210 -1187
- package/dist/react.js.map +1 -1
- package/dist/testing.d.ts +10 -0
- package/package.json +2 -2
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 {\n DataTableRendererColumn,\n DataTableRendererQueryResult,\n DataTableRendererRow,\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 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 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 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 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 { createElement, lazy, Suspense } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\n\nconst WorkbenchFileRendererView = lazy(() =>\n import(\"./file-renderer-view\").then((module) => ({\n default: module.WorkbenchFileRendererView,\n })),\n);\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchFileRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\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","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","resolveDataTableRendererStorageKey","resourceKey","instanceId","initialResult","WorkbenchDataTableView","setResult","loading","setLoading","requestRef","runQuery","requestId","executeQuery","next","refreshSubscription","onDidRefreshDataTableRenderer","dataTableRendererId","model","labels","descriptions","icons","stats","rowActions","destructive","data_0","row_0","onRowClick","replaceActive","openRow","emptyTitle","emptyDescription","EmptyState","data_1","_temp1","_temp10","data_2","row_1","initialPageSize","pageSizeOptions","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","WorkbenchFileRendererView","lazy","module","installWorkbenchFileRenderer","setFileRendererImplementation","fileRendererId","getFileRenderer","Suspense","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/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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"}
|