@pstdio/workbench 0.10.0 → 0.11.1
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.js +265 -258
- package/dist/extensions.js.map +1 -1
- package/dist/{file-renderer-view-kfJRY3yR.js → file-renderer-view-Bfmw6RxV.js} +2 -2
- package/dist/{file-renderer-view-kfJRY3yR.js.map → file-renderer-view-Bfmw6RxV.js.map} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +966 -991
- package/dist/index.js.map +1 -1
- package/dist/react.js +945 -949
- package/dist/react.js.map +1 -1
- package/dist/webview-runtime.js +1 -1
- package/dist/webview-runtime.js.map +1 -1
- package/dist/workbench-renderers-BhgHQ-Ne.js +871 -0
- package/dist/workbench-renderers-BhgHQ-Ne.js.map +1 -0
- package/package.json +3 -3
- package/dist/workbench-renderers-DmsrBGC7.js +0 -960
- package/dist/workbench-renderers-DmsrBGC7.js.map +0 -1
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sources":["../src/react/breadcrumb/breadcrumb-view.tsx","../src/react/shared/use-workbench-composition-panels.ts","../src/react/theme/workbench-theme-background.ts","../src/react/command-palette/command-palette-params.ts","../src/react/command-palette/palette-view.tsx","../src/react/command-palette/command-palette-resources.tsx","../src/react/command-palette/command-param-descriptors.ts","../src/react/command-palette/command-param-field.tsx","../src/react/command-palette/command-params-dialog.tsx","../src/react/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/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/mode-chrome.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-params-dialog.tsx","../src/react/renderers/tree/tree-view-body.tsx","../src/react/renderers/tree/tree-view-move.ts","../src/react/renderers/tree/tree-view-navigation.ts","../src/react/renderers/tree/tree-view-search.tsx","../src/react/renderers/tree/tree-view-load.ts","../src/react/renderers/tree/use-tree-data.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/shared/use-workbench-mode-region-settings.ts","../src/react/side-panel/side-panel.tsx","../src/react/terminal/terminal-placement-binding.ts","../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-presentation.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 { 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}\nconst getSessionStatus = (item: WorkbenchBreadcrumbItem) =>\n typeof item.resource?.metadata?.status === \"string\"\n ? (item.resource.metadata.status as SessionCompletionStatus)\n : undefined;\nconst WorkbenchBreadcrumbIcon = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const status = getSessionStatus(item);\n if (item.indicator === \"session-status\" || item.resource?.type === \"session\") {\n return <SessionIndicator status={status} boxSize=\"14px\" />;\n }\n if (!item.icon) return null;\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};\nconst WorkbenchBreadcrumbTitle = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const title = item.title as ReactNode;\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};\nexport const buildWorkbenchBreadcrumbItems = (items: WorkbenchBreadcrumbItem[] | undefined) =>\n (items ?? []).map((item) => ({\n title: <WorkbenchBreadcrumbTitle item={item} />,\n url: item.url,\n onClick: item.onClick,\n }));\nexport const WorkbenchBreadcrumbView = (props: WorkbenchBreadcrumbViewProps) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n if (items.length === 0) return null;\n return (\n <Breadcrumb items={buildWorkbenchBreadcrumbItems(items)} separator=\"/\" separatorGap=\"xs\" display=\"flex\" h=\"full\" />\n );\n};\n","import type { WorkbenchCompositionRegionPanels, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport type WorkbenchCompositionPanelsByRegion = Record<WorkbenchPanelRegion, WorkbenchCompositionRegionPanels>;\n\nexport const useWorkbenchCompositionPanels = (workbench: WorkbenchCore): WorkbenchCompositionPanelsByRegion => {\n \"use no memo\";\n\n useWorkbenchStore(workbench.layout.store, (state) => state);\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n useWorkbenchStore(workbench.commands.store, (state) => state);\n useWorkbenchStore(workbench.context.store, (state) => state);\n\n return {\n main: workbench.composition.panelsFor(\"main\"),\n secondary: workbench.composition.panelsFor(\"secondary\"),\n side: workbench.composition.panelsFor(\"side\"),\n };\n};\n","import type { WorkbenchRegion } from \"../../core\";\n\nconst chakraBackgrounds = {\n activityBar: \"var(--chakra-colors-bg-muted)\",\n sidenav: \"var(--chakra-colors-bg-subtle)\",\n main: \"var(--chakra-colors-bg)\",\n panel: \"var(--chakra-colors-bg-panel)\",\n statusBar: \"var(--chakra-colors-bg-subtle)\",\n} as const;\n\nconst vscodeColor = (token: string, fallback: string) =>\n `var(--chakra-colors-vscode-${token.replaceAll(\".\", \"-\")}, ${fallback})`;\n\nexport const workbenchBackgrounds = {\n activityBar: vscodeColor(\"activityBar.background\", vscodeColor(\"sideBar.background\", chakraBackgrounds.activityBar)),\n sidenav: vscodeColor(\"sideBar.background\", chakraBackgrounds.sidenav),\n main: vscodeColor(\"editor.background\", chakraBackgrounds.main),\n panel: vscodeColor(\"panel.background\", chakraBackgrounds.panel),\n statusBar: vscodeColor(\"statusBar.background\", vscodeColor(\"sideBar.background\", chakraBackgrounds.statusBar)),\n widget: vscodeColor(\"editorWidget.background\", vscodeColor(\"panel.background\", chakraBackgrounds.panel)),\n} as const;\n\nconst workbenchRegionBackgrounds = {\n nav: workbenchBackgrounds.main,\n activity: workbenchBackgrounds.activityBar,\n sidenav: 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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { FileUploadValue } from \"@pstdio/ui\";\nimport type { CommandParamDescriptor, CommandParamSchema, WorkbenchCommandExecutionContext } from \"../../core\";\nexport interface CommandFilesParamValue {\n refs: string[];\n uploads: FileUploadValue[];\n}\nexport type CommandParamValue = string | boolean | string[] | CommandFilesParamValue | undefined;\nexport interface CommandParamEntry extends CommandParamDescriptor {\n key: string;\n label: string;\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};\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nexport const isFileUploadValue = (value: unknown): value is FileUploadValue => {\n if (!isRecord(value) || !isRecord(value.file)) return false;\n return typeof value.id === \"string\" && typeof value.file.name === \"string\" && typeof value.status === \"string\";\n};\nexport const isCommandFilesParamValue = (value: unknown): value is CommandFilesParamValue =>\n isRecord(value) &&\n Array.isArray(value.refs) &&\n value.refs.every((ref) => typeof ref === \"string\") &&\n Array.isArray(value.uploads) &&\n value.uploads.every(isFileUploadValue);\nexport const createCommandFilesParamValue = (input: Partial<CommandFilesParamValue> = {}): CommandFilesParamValue => ({\n refs: [...(input.refs ?? [])],\n uploads: [...(input.uploads ?? [])],\n});\nconst commandFilesParamValue = (raw: unknown, multiple: boolean | undefined) => {\n const value = isCommandFilesParamValue(raw)\n ? createCommandFilesParamValue(raw)\n : createCommandFilesParamValue({\n refs: Array.isArray(raw) ? raw.filter((item): item is string => typeof item === \"string\") : [],\n uploads: Array.isArray(raw) ? raw.filter(isFileUploadValue) : [],\n });\n if (multiple !== false) return value;\n if (value.uploads[0]) return createCommandFilesParamValue({ uploads: [value.uploads[0]] });\n return createCommandFilesParamValue({ refs: value.refs.slice(0, 1) });\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};\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());\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};\nconst resourceContextValue = (entry: CommandParamEntry, context: WorkbenchCommandExecutionContext | undefined) => {\n const resource = context?.resource;\n if (!resource) return undefined;\n const metadataValue = metadataString(resource.metadata, entry.key);\n if (metadataValue !== undefined) return metadataValue;\n if (entry.key === `${toIdentifierPrefix(resource.type)}Id`) return resource.id ?? resourceKey(resource);\n if (entry.type === \"resource\" && (!entry.resourceType || entry.resourceType === resource.type)) {\n return {\n type: resource.type,\n id: resource.id ?? resourceKey(resource),\n ...(resource.label ? { label: resource.label } : {}),\n ...(resource.metadata ? { metadata: resource.metadata } : {}),\n };\n }\n return undefined;\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};\nexport const hasCommandParameters = (params: CommandParamSchema | undefined) =>\n listCommandParamEntries(params).length > 0;\nexport const listCommandParamEntries = (params: CommandParamSchema | undefined): CommandParamEntry[] =>\n Object.entries(params ?? {}).flatMap(([key, param]) =>\n param.resolvedFrom === \"resource\"\n ? []\n : [\n {\n ...param,\n options: dedupeOptions(param.options),\n key,\n label: param.label ?? humanize(key),\n },\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 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 === \"files\") {\n values[entry.key] = commandFilesParamValue(raw, entry.multiple);\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 return values;\n};\nconst isEmptyValue = (value: CommandParamValue) => {\n if (isCommandFilesParamValue(value)) return value.refs.length === 0 && value.uploads.length === 0;\n return 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};\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 === \"files\") return isCommandFilesParamValue(value) ? value : createCommandFilesParamValue();\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};\nexport const normalizeCommandParamValues = (\n params: CommandParamSchema | undefined,\n values: Record<string, CommandParamValue>,\n) => {\n const normalized: Record<string, unknown> = {};\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 return normalized;\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\";\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 isPickerPaletteView = isThemePaletteView;\n\nexport const getPaletteViewMode = (view: WorkbenchCommandPaletteView) => {\n if (isThemePaletteView(view)) return THEME_MODE_ID;\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}) => {\n if (isThemePaletteView(input.view)) return input.themeInitialActiveIndex;\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 (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 (input.mode === COMMAND_MODE_ID) return \"Run command\";\n\n return \"Search resources\";\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\n\nconst RESOURCE_QUERY_LIMIT = 25;\nconst RESOURCE_QUERY_DEBOUNCE_MS = 150;\n\ninterface UseWorkbenchCommandPaletteResourceEntriesInput {\n workbench: WorkbenchCore;\n query: string;\n open: boolean;\n onClose: () => void;\n}\n\n// Fetches extension-provided palette results for the live query (debounced) and maps\n// them to search-mode palette entries. Provider errors are isolated by the registry, so\n// one failing provider never blanks the palette.\nexport const useWorkbenchCommandPaletteResourceEntries = (input: UseWorkbenchCommandPaletteResourceEntriesInput) => {\n const { workbench, query, open, onClose } = input;\n const refreshToken = useWorkbenchStore(workbench.commandPaletteResources.store, (state) => state.refreshToken);\n const [entries, setEntries] = useState<PaletteEntry[]>([]);\n\n useEffect(() => {\n if (!open) {\n setEntries([]);\n return;\n }\n\n // Read so an explicit registry refresh (refreshToken bump) re-runs this query.\n void refreshToken;\n let cancelled = false;\n const handle = setTimeout(() => {\n void workbench.commandPaletteResources.queryProviders({ query, limit: RESOURCE_QUERY_LIMIT }).then((groups) => {\n if (cancelled) return;\n setEntries(\n groups.flatMap((group) =>\n group.results.map((result) => ({\n id: `workbench-command-palette-resource:${result.id}`,\n mode: SEARCH_MODE_ID,\n label: result.label,\n searchText: `${query} ${result.label} ${(result.keywords ?? []).join(\" \")}`.trim(),\n description: result.description,\n group: result.group ?? group.title,\n icon: result.icon ? <WorkbenchIcon name={result.icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(result.activate()).catch(() => undefined);\n },\n })),\n ),\n );\n });\n }, RESOURCE_QUERY_DEBOUNCE_MS);\n\n return () => {\n cancelled = true;\n clearTimeout(handle);\n };\n }, [workbench, query, open, refreshToken, onClose]);\n\n return entries;\n};\n","import type { Param, ParamValue, SelectionOption } from \"@pstdio/ui\";\nimport {\n type CommandParamEntry,\n type CommandParamValue,\n createCommandFilesParamValue,\n isCommandFilesParamValue,\n isFileUploadValue,\n} from \"./command-palette-params\";\n\nconst asText = (value: CommandParamValue) => (typeof value === \"string\" ? value : \"\");\n\nconst asList = (value: CommandParamValue) => (Array.isArray(value) ? value : []);\n\n/** Required params carry the marker in their name — the editor has no required state. */\nexport const commandParamName = (entry: CommandParamEntry) => `${entry.label}${entry.required ? \" *\" : \"\"}`;\n\nconst commandParamOptions = (entry: CommandParamEntry): SelectionOption[] =>\n (entry.options ?? []).map((option) => ({ id: option.value, name: option.label, icon: option.icon }));\n\n// Structured params (harness, repo, template) are normally rendered by the host,\n// which knows how to fetch their options. Without a host renderer they fall back\n// to the JSON they are serialized as, so the command can still be run.\nconst JSON_PARAM_TYPES = new Set([\"json\", \"resource\", \"repo\", \"harness\"]);\n\n/**\n * Maps a declared command param onto the design-system control that owns that\n * kind of input, so a command dialog is built from the same rows as every other\n * param surface rather than from hand-rolled fields.\n */\nexport const buildCommandParam = (entry: CommandParamEntry, value: CommandParamValue): Param => {\n const base = { id: entry.key, name: commandParamName(entry), description: entry.description };\n\n if (entry.type === \"boolean\") return { ...base, type: \"boolean\", defaultValue: value === true };\n\n if (entry.type === \"number\") return { ...base, type: \"number\", defaultValue: Number(asText(value)) };\n\n if (entry.type === \"markdown\") return { ...base, type: \"markdown\", defaultValue: asText(value) };\n\n if (entry.type === \"files\") {\n return {\n ...base,\n type: \"fileUpload\",\n defaultValue: isCommandFilesParamValue(value) ? value.uploads : [],\n accept: entry.accept,\n multiple: entry.multiple,\n };\n }\n\n if (entry.type === \"multi-select\") {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asList(value),\n options: commandParamOptions(entry),\n multiSelect: true,\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: (entry.options?.length ?? 0) > 5,\n };\n }\n\n if ((entry.type === \"select\" || entry.type === \"template\") && entry.options?.length) {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asText(value),\n options: commandParamOptions(entry),\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: entry.options.length > 5,\n clearable: !entry.required,\n };\n }\n\n if (entry.type === \"longtext\" || JSON_PARAM_TYPES.has(entry.type)) {\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: false };\n }\n\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: true };\n};\n\n/** Narrows an editor value back to what a command param can carry. */\nexport const readCommandParamValue = (value: ParamValue, entry?: CommandParamEntry): CommandParamValue => {\n if (typeof value === \"boolean\") return value;\n if (entry?.type === \"files\") {\n return createCommandFilesParamValue({ uploads: Array.isArray(value) ? value.filter(isFileUploadValue) : [] });\n }\n if (Array.isArray(value)) return value.map(String);\n return String(value ?? \"\");\n};\n","import { ParamEditorRow } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCommandExecutionContext } from \"../../core\";\nimport { type CommandParamEntry, type CommandParamValue, isCommandFilesParamValue } from \"./command-palette-params\";\nimport { buildCommandParam, readCommandParamValue } from \"./command-param-descriptors\";\n\nexport interface CommandParamFieldProps {\n entry: CommandParamEntry;\n value: CommandParamValue;\n context?: WorkbenchCommandExecutionContext;\n disabled: boolean;\n onChange: (value: CommandParamValue) => void;\n}\n\n// Lets the host supply field UI for param types the workbench cannot render on its\n// own (e.g. harness/repo selectors backed by host data). Returning a falsy value\n// defers to the built-in field for that entry.\nexport type CommandParamFieldRenderer = (props: CommandParamFieldProps) => ReactNode;\n\nexport const CommandParamField = (props: Omit<CommandParamFieldProps, \"context\">) => {\n const { entry, value, disabled, onChange } = props;\n\n const change = (next: Parameters<typeof readCommandParamValue>[0]) => {\n const nextValue = readCommandParamValue(next, entry);\n if (entry.type !== \"files\" || !isCommandFilesParamValue(value) || !isCommandFilesParamValue(nextValue)) {\n onChange(nextValue);\n return;\n }\n\n const refs = entry.multiple === false && nextValue.uploads.length > 0 ? [] : value.refs;\n onChange({ ...nextValue, refs });\n };\n\n return (\n <ParamEditorRow\n param={buildCommandParam(entry, value)}\n readOnly={disabled}\n onChange={(_id, next) => change(next)}\n />\n );\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { handleDialogAcceptShortcut, ScrollArea } from \"@pstdio/ui\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport type { Command, RegisteredMenuItem, WorkbenchCommandExecutionContext } from \"../../core\";\nimport {\n buildCommandParamInitialValues,\n type CommandParamEntry,\n type CommandParamValue,\n isCommandFilesParamValue,\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 prepareArgs?: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n onArgsChange: (args: unknown) => void;\n }) => Promise<unknown>;\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 (isCommandFilesParamValue(value)) return value.refs.length + value.uploads.length > 0;\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, prepareArgs, 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 const args = mergeCommandParamArgs(request.args, params);\n const preparedArgs = prepareArgs\n ? await prepareArgs({\n commandId: request.record.command.id,\n args,\n context: request.context,\n onArgsChange: (nextArgs) =>\n setValues(buildCommandParamInitialValues(request.record.command.params, nextArgs, request.context)),\n })\n : args;\n await onRun({\n commandId: request.record.command.id,\n args: preparedArgs,\n context: request.context,\n label: request.label,\n });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : \"Command failed.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n const isValid = entries.every((entry) => !entry.required || isFilled(entry, values[entry.key]));\n\n return (\n <Dialog.Root\n open={request !== null}\n size=\"lg\"\n scrollBehavior=\"inside\"\n onOpenChange={(details) => !details.open && close()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content\n display=\"flex\"\n flexDirection=\"column\"\n maxH=\"calc(100% - 48px)\"\n onKeyDownCapture={(event) => handleDialogAcceptShortcut(event, () => void run(), isValid && !submitting)}\n >\n <Dialog.Header>\n <Stack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"heading/M/semibold\">{request?.label ?? \"Run command\"}</Text>\n {request?.record.command.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\" truncate>\n {request.record.command.description}\n </Text>\n ) : null}\n </Stack>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body flex=\"1\" minH=\"0\" p=\"0\">\n <ScrollArea h=\"full\" contentProps={{ px: \"sm\", py: \"md\" }}>\n {/* Fields carry the param editor's own row padding, so the form is a\n flush stack of rows rather than rows spaced twice over. */}\n <Stack gap=\"0\">\n {entries.map((entry) => {\n const fieldProps = {\n entry,\n value: values[entry.key],\n disabled: submitting,\n onChange: (value: CommandParamValue) => setValue(entry.key, value),\n };\n const custom = renderParamField?.({ ...fieldProps, context: request?.context });\n return <Fragment key={entry.key}>{custom ?? <CommandParamField {...fieldProps} />}</Fragment>;\n })}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\" px=\"sm\" pt=\"xs\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </ScrollArea>\n </Dialog.Body>\n <Dialog.Footer>\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!isValid} loading={submitting} onClick={() => void run()}>\n {request?.submitLabel ?? \"Run\"}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type {\n RegisteredWidgetContribution,\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n} from \"../../core\";\n\ninterface OpenPanelWidgetInput {\n workbench: WorkbenchCore;\n widget: RegisteredWidgetContribution;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n pinned?: boolean;\n open?: WorkbenchCompositionAddablePanel[\"open\"];\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 { open, pinned, region, resource, widget, workbench } = input;\n\n if (open) {\n open(resource);\n } else if (widget.openCommand) {\n void workbench.commands.executeCommand(widget.openCommand.commandId, widget.openCommand.args, {\n source: \"panel-add\",\n ...(resource ? { resource } : {}),\n });\n } else {\n const widgetResource = widget.resourceKinds?.length || widget.canOpen ? resource : undefined;\n // Adding a tab from the region's \"+\" tray is the user asking for a tab that stays.\n // The resource only binds the tab to its location; the tab is the widget, so it\n // keeps the widget's title instead of inheriting the location resource's label.\n workbench.layout.openWidget(widget.id, {\n region,\n resource: widgetResource,\n title: widget.title,\n closable: true,\n pinned,\n role: region === \"main\" ? \"location\" : \"sub-panel\",\n tabRetention: \"persistent\",\n });\n }\n\n if (region === \"secondary\") {\n workbench.shell.setRegionOpen(\"secondary\", true);\n }\n if (region === \"side\" && workbench.sidePanel.getMode() === \"closed\") {\n workbench.sidePanel.setMode(\"attached\");\n }\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { type WorkbenchCore, workbenchPanelRegions } from \"../../core\";\nimport { getPanelLabel, openPanelWidget } from \"../region/panel-widget-open\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport type { WorkbenchCompositionPanelsByRegion } from \"../shared/use-workbench-composition-panels\";\nimport { COMMAND_MODE_ID } from \"./palette-view\";\n\nexport const createWorkbenchPanelWidgetPaletteEntries = (input: {\n workbench: WorkbenchCore;\n onClose: () => void;\n panelsByRegion?: WorkbenchCompositionPanelsByRegion;\n}) => {\n const { onClose, panelsByRegion, workbench } = input;\n const resource = workbench.getPrimaryResource();\n return workbenchPanelRegions.flatMap((region) =>\n (panelsByRegion?.[region] ?? workbench.composition.panelsFor(region)).addable.map((panel): PaletteEntry => {\n const widget = panel.contribution;\n const panelLabel = getPanelLabel(region);\n const label = `Open ${widget.title} in ${panelLabel} Panel`;\n\n return {\n id: `workbench-panel:${region}:${widget.id}`,\n mode: COMMAND_MODE_ID,\n label,\n searchText: `${label} ${widget.id}`,\n group: \"Panels\",\n icon: widget.icon ? <WorkbenchIcon name={widget.icon} /> : undefined,\n onActivate: () => {\n onClose();\n openPanelWidget({ workbench, widget, region, resource, pinned: panel.pinned, open: panel.open });\n },\n };\n }),\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { PaletteEntry } from \"@pstdio/ui\";\nimport type { ResourceBrowseEntry, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\nexport interface WorkbenchResourcePaletteEntry extends PaletteEntry {\n resourceKey: string;\n mode: typeof SEARCH_MODE_ID;\n}\nconst createResourceEntry = (input: {\n workbench: WorkbenchCore;\n entry: ResourceBrowseEntry;\n onClose: () => void;\n}): WorkbenchResourcePaletteEntry | undefined => {\n const { entry, onClose, workbench } = input;\n const { resource } = entry;\n const label = entry.resource.label ?? resourceKey(entry.resource);\n const kind = workbench.resources.getKind(resource.type);\n const icon = resource.icon ?? kind?.icon;\n const activate = entry.activate;\n if (!activate) return undefined;\n return {\n id: `workbench-resource:${resourceKey(resource)}`,\n resourceKey: resourceKey(resource),\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(activate(resource)).catch(() => undefined);\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\n .listResources(query)\n .map((entry) => createResourceEntry({ workbench, entry, onClose }))\n .filter((entry): entry is WorkbenchResourcePaletteEntry => entry !== undefined);\n};\n","import type { PaletteEntry, ThemePreference, ThemePreferenceOption } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nconst THEME_MODE_ID = \"theme\";\n\nexport interface WorkbenchThemePaletteEntry extends PaletteEntry {\n themePreference: ThemePreference;\n mode: typeof THEME_MODE_ID;\n}\n\nconst getThemeIconName = (preference: ThemePreference) => {\n if (preference === \"pstdio-light\") return \"Sun\";\n if (preference === \"pstdio-dark\") return \"Moon\";\n return \"Palette\";\n};\n\nconst getThemePreferenceLabel = (themePreference: ThemePreferenceOption) => themePreference.title ?? themePreference.id;\n\nexport const getThemePreferenceEntryIndex = (\n themePreference: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[],\n) => {\n const index = themePreferences.findIndex((preference) => preference.id === themePreference);\n\n return Math.max(index, 0);\n};\n\nconst THEME_GROUP_LABELS = { light: \"Light\", dark: \"Dark\" } as const;\n\n// Group entries by appearance mode (lights first) so cycling the picker stays\n// within one mode instead of flashing light/dark/light on every step.\nconst byModeThenLabel = (a: ThemePreferenceOption, b: ThemePreferenceOption) => {\n if (a.mode !== b.mode) return a.mode === \"light\" ? -1 : 1;\n return getThemePreferenceLabel(a).localeCompare(getThemePreferenceLabel(b));\n};\n\nexport const createWorkbenchThemePreferencePaletteEntries = (input: {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (themePreference: ThemePreference) => void;\n onClose: () => void;\n}) => {\n const { onClose, setThemePreference, themePreference, themePreferences } = input;\n\n return [...themePreferences].sort(byModeThenLabel).map((preference): WorkbenchThemePaletteEntry => {\n const label = getThemePreferenceLabel(preference);\n\n return {\n id: `theme:${preference.id}`,\n themePreference: preference.id,\n mode: THEME_MODE_ID,\n label,\n searchText: `theme color appearance ${preference.mode} ${preference.id} ${label}`,\n group: THEME_GROUP_LABELS[preference.mode],\n icon: <WorkbenchIcon name={getThemeIconName(preference.id)} />,\n isSelected: preference.id === themePreference,\n onActivate: () => {\n setThemePreference(preference.id);\n onClose();\n },\n };\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Palette, type PaletteEntry, PaletteShortcut, type ThemePreference, useThemePreference } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport {\n type Command,\n type KeybindingSequence,\n type MenuPath,\n type RegisteredCommand,\n type RegisteredMenuItem,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n workbenchCommandPaletteMenuPath,\n} from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchCommandPaletteBackground } from \"../theme/workbench-theme-background\";\nimport { hasCommandParameters } from \"./command-palette-params\";\nimport { useWorkbenchCommandPaletteResourceEntries } from \"./command-palette-resources\";\nimport {\n type CommandParamFieldRenderer,\n CommandParamsDialog,\n type CommandParamsRequest,\n} from \"./command-params-dialog\";\nimport {\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.listCommandKeybindings().map((keybinding) => [keybinding.commandId, keybinding.keybinding]),\n );\n\nconst getShortcut = (binding: KeybindingSequence | undefined): ReactNode =>\n binding ? <PaletteShortcut binding={binding} /> : undefined;\n\nconst getCommandErrorMessage = (error: unknown) => (error instanceof Error ? error.message : \"Command failed.\");\n\nconst commandExecutionContext = (workbench: WorkbenchCore): WorkbenchCommandExecutionContext | undefined => {\n const resource = workbench.getPrimaryResource();\n return resource ? { resource } : undefined;\n};\n\nconst executePaletteCommand = async (input: {\n workbench: WorkbenchCore;\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n}) => {\n const { args, commandId, context, label, workbench } = input;\n try {\n await workbench.commands.executeCommand(commandId, args, context);\n } catch (error) {\n workbench.notifications.show({ level: \"error\", title: `${label} failed`, message: getCommandErrorMessage(error) });\n }\n};\n\nconst createEntry = (input: {\n workbench: WorkbenchCore;\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n shortcutByCommandId: Map<string, KeybindingSequence>;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}): WorkbenchCommandPaletteEntry | null => {\n const { action, onClose, onRequestParams, record, workbench, shortcutByCommandId } = input;\n const args = action?.args;\n\n if (!workbench.commands.isCommandVisible(record.command.id, args)) return null;\n\n const label = action?.label ?? record.command.label;\n const icon = action?.icon ?? record.command.icon;\n const group = action?.group ?? record.command.category;\n\n return {\n id: `workbench-command:${record.command.id}`,\n commandId: record.command.id,\n mode: COMMAND_MODE_ID,\n label,\n searchText: getCommandSearchText(record.command, label),\n description: record.command.description,\n group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n shortcut: getShortcut(shortcutByCommandId.get(record.command.id)),\n onActivate: () => {\n const context = commandExecutionContext(workbench);\n onClose();\n if (hasCommandParameters(record.command.params) && onRequestParams) {\n onRequestParams({ record, action, label, args, context });\n return;\n }\n void executePaletteCommand({ workbench, commandId: record.command.id, args, context, label });\n },\n };\n};\n\nconst getRecordGroup = (item: WorkbenchCommandPaletteRecord) =>\n item.action?.group ?? item.record.command.category ?? \"\";\n\nconst getRecordOrder = (item: WorkbenchCommandPaletteRecord) => item.action?.order ?? 0;\n\nconst byCommandPaletteGroup = (left: WorkbenchCommandPaletteRecord, right: WorkbenchCommandPaletteRecord) => {\n const groupComparison = getRecordGroup(left).localeCompare(getRecordGroup(right));\n if (groupComparison !== 0) return groupComparison;\n\n return getRecordOrder(left) - getRecordOrder(right);\n};\n\nconst listCommandRecords = (workbench: WorkbenchCore, menuPath?: MenuPath) => {\n if (!menuPath) {\n return workbench.commands.listCommands().map((record) => ({ record, action: undefined }));\n }\n\n return workbench.layout\n .listMenuItems(menuPath)\n .filter((action) => workbench.context.matches(action.when))\n .map((action) => {\n const record = workbench.commands.getCommand(action.commandId);\n return record ? { record, action } : null;\n })\n .filter((item): item is { record: RegisteredCommand; action: RegisteredMenuItem } => item !== null);\n};\n\nexport const createWorkbenchCommandPaletteEntries = (input: {\n workbench: WorkbenchCore;\n menuPath?: MenuPath;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}) => {\n const { menuPath, onClose, onRequestParams, workbench } = input;\n const shortcutByCommandId = createShortcutByCommandId(workbench);\n\n return listCommandRecords(workbench, menuPath)\n .sort(byCommandPaletteGroup)\n .map(({ record, action }) =>\n createEntry({ workbench, record, action, shortcutByCommandId, onClose, onRequestParams }),\n )\n .filter((entry): entry is WorkbenchCommandPaletteEntry => entry !== null);\n};\n\nexport const WorkbenchCommandPalette = (props: WorkbenchCommandPaletteProps) => {\n const {\n workbench,\n open,\n menuPath = workbenchCommandPaletteMenuPath,\n initialQuery = \"\",\n renderParamField,\n onClose,\n } = props;\n const { themePreference, themePreferences, setThemePreference } = useThemePreference();\n const view = useWorkbenchStore(workbench.commandPalette.store, (state) => state.view);\n const themePreviewRef = useRef<WorkbenchThemePreviewState | null>(null);\n const paramsRequest = useWorkbenchStore(workbench.commandPalette.store, (state) => state.paramsRequest);\n const [liveQuery, setLiveQuery] = useState(initialQuery);\n const commandPaletteResourceEntries = useWorkbenchCommandPaletteResourceEntries({\n workbench,\n query: liveQuery,\n open,\n onClose,\n });\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n\n const closePalette = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n onClose();\n };\n\n const exitPickerView = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n workbench.commandPalette.open({ view: \"main\" });\n };\n\n const commitThemePreview = () => {\n themePreviewRef.current = null;\n onClose();\n };\n\n const commandEntries = createWorkbenchCommandPaletteEntries({\n workbench,\n menuPath,\n onClose,\n onRequestParams: (request) => workbench.commandPalette.requestParams(request),\n });\n const resourceEntries = createWorkbenchResourcePaletteEntries({ workbench, query: initialQuery, onClose });\n const themeEntries = createWorkbenchThemePreferencePaletteEntries({\n themePreference,\n themePreferences,\n setThemePreference,\n onClose: commitThemePreview,\n });\n const panelWidgetEntries = createWorkbenchPanelWidgetPaletteEntries({\n workbench,\n onClose,\n panelsByRegion: compositionPanels,\n });\n const entries = [\n ...resourceEntries,\n ...commandPaletteResourceEntries,\n ...commandEntries,\n ...panelWidgetEntries,\n ...themeEntries,\n ];\n const themeInitialActiveIndex = getThemePreferenceEntryIndex(themePreference, themePreferences);\n const isThemeView = isThemePaletteView(view);\n const initialActiveIndex = getPaletteInitialActiveIndex({\n view,\n themeInitialActiveIndex,\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 prepareArgs={(input) =>\n workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n }\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={(event) => {\n if (event.currentTarget.contains(event.target)) workbench.focus.setActiveRegion(region);\n }}\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 workbenchResourceMetadataContextKey,\n workbenchResourceTypeContextKey,\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 === workbenchResourceTypeContextKey ||\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 { 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 id: 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, index) => {\n const action = keybinding.action;\n if (action.kind === \"command\") {\n if (allowedCommandIds && !allowedCommandIds.has(action.commandId)) return [];\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) return [];\n const enabled =\n !disabled &&\n workbench.commands.isCommandVisible(record.command.id, action.args) &&\n workbench.commands.isCommandEnabled(record.command.id, action.args);\n return [\n {\n id: record.command.id,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled,\n ignoreInputs: true,\n execute: () => workbench.navigation.openTarget(action),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n }\n if (allowedCommandIds) return [];\n return [\n {\n id: `workbench.keybinding.${index}`,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled: !disabled,\n ignoreInputs: true,\n execute: () => workbench.navigation.openTarget(action),\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.listCommandKeybindings().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.listCommandKeybindings().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.listCommandKeybindings().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});\nexport const createWorkbenchResourceActions = (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) =>\n createTreeContextMenuItems({\n menuPath: resourceContextMenuPath(resource.type),\n workbench,\n context: { resource },\n onRequestParams: ({ request }) => workbench.commandPalette.requestParams(request),\n }).map(toResourceContextAction);\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 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 useWorkbenchStore(workbench.pages.store, (state) => state.location?.resource);\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 } from \"react\";\nimport type {\n RegisteredPlaceholderContribution,\n RegisteredWidgetContribution,\n RegisteredWorkbenchView,\n WorkbenchCore,\n WorkbenchPanelContribution,\n WorkbenchRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { getWorkbenchRenderers } 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 region?: WorkbenchRegion;\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\nconst noopRefresh = () => undefined;\n\nconst toHostedPanel = (input: {\n placement: WorkbenchWidgetPlacement;\n region?: WorkbenchRegion;\n view?: RegisteredWorkbenchView;\n widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;\n}) => {\n if (input.view) {\n return {\n id: input.placement.contributionId,\n title: input.placement.title ?? input.view.title,\n icon: input.view.icon,\n region: input.region ?? input.widget?.region ?? \"main\",\n rendererId: input.view.id,\n } satisfies WorkbenchPanelContribution;\n }\n if (input.widget) {\n if (\"singleton\" in input.widget) return toPanelContribution(input.widget as RegisteredWidgetContribution);\n return input.widget;\n }\n return undefined;\n};\n\nexport const WorkbenchWidgetHost = (props: WorkbenchWidgetHostProps) => {\n const { workbench, placement } = props;\n const widget = props.widget ?? workbench.layout.getWidget(placement.contributionId);\n const view = placement.viewId ? workbench.views.getView(placement.viewId) : undefined;\n const rendererId = view?.id ?? widget?.rendererId ?? \"\";\n const refresh = noopRefresh;\n const rendererFromStore = useWorkbenchStore(\n getWorkbenchRenderers(workbench).store,\n (state) => state.renderers[rendererId],\n );\n const renderer = rendererFromStore ?? getWorkbenchRenderers(workbench).getRenderer(rendererId);\n useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.refreshKeys[rendererId] ?? 0);\n\n if (!widget && !view) {\n return <WorkbenchWidgetFallback label=\"Widget contribution is no longer registered.\" />;\n }\n const panel = toHostedPanel({ placement, region: props.region, view, widget });\n if (!panel) return <WorkbenchWidgetFallback label=\"View contribution is no longer registered.\" />;\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 {renderer.render({ workbench, panel, instance, refresh }) as ReactNode}\n </WorkbenchRenderedWidgetFrame>\n ) : (\n <WorkbenchWidgetFallback label={`No renderer registered for ${rendererId}.`} />\n )}\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\nexport const useModeChrome = (workbench: WorkbenchCore, region: WorkbenchRegion) =>\n useWorkbenchStore(workbench.modes.store, (state) => {\n const mode = state.activeModeId ? state.modes[state.activeModeId] : undefined;\n if (region !== \"nav\" && region !== \"sidenav\" && region !== \"activity\" && region !== \"status\") return undefined;\n return mode?.chrome?.[region];\n });\n\nexport const ModeChromeView = (props: { workbench: WorkbenchCore; viewId: string; region: WorkbenchRegion }) => {\n const { workbench, viewId, region } = props;\n return (\n <Box h=\"full\" w=\"full\" minH=\"0\" position=\"relative\">\n <Box position=\"absolute\" inset=\"0\" display=\"flex\">\n <WorkbenchWidgetHost\n key={viewId}\n workbench={workbench}\n region={region}\n placement={{ widgetId: viewId, contributionId: viewId, viewId, closable: false }}\n />\n </Box>\n </Box>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@pstdio/ui\";\nimport type {\n RegisteredPlaceholderContribution,\n WorkbenchCore,\n WorkbenchPanelMenuRegion,\n WorkbenchRegion as WorkbenchRegionId,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n getWorkbenchPanelForMenuRegion,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { getWorkbenchRegionBackground } from \"../theme/workbench-theme-background\";\nimport { ModeChromeView, useModeChrome } from \"./mode-chrome\";\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 \"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 region?: WorkbenchRegionId,\n): WorkbenchWidgetPlacement[] => {\n if (region === \"sidenav\") return widgets;\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 region?: WorkbenchRegionId,\n) => {\n const active = placement.widgetId === activeWidgetId;\n const additive = region === \"sidenav\";\n return {\n active,\n display: \"flex\",\n pointerEvents: active || additive ? \"auto\" : \"none\",\n position: active || additive ? \"relative\" : \"absolute\",\n visibility: active || additive ? \"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\ninterface WorkbenchRegionPlacementProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId?: string;\n globalActiveWidgetId?: string;\n region: WorkbenchRegionId;\n}\n\nconst WorkbenchRegionPlacement = (props: WorkbenchRegionPlacementProps) => {\n const { workbench, placement, activeWidgetId, globalActiveWidgetId, region } = props;\n const renderState = resolveRegionPlacementRenderState(placement, activeWidgetId, region);\n const additive = region === \"sidenav\";\n const overlaysActivePlacement = !renderState.active && !additive;\n let flex: string | undefined;\n if (additive) flex = \"1 1 0\";\n else if (renderState.active) flex = \"1 0 auto\";\n\n const activatePlacement = () => {\n if (placement.widgetId !== globalActiveWidgetId) workbench.layout.activatePanel(placement.widgetId);\n };\n\n return (\n <Box\n display={renderState.display}\n flex={flex}\n h={overlaysActivePlacement ? \"full\" : undefined}\n inset={overlaysActivePlacement ? \"0\" : undefined}\n minH=\"0\"\n minW=\"0\"\n onPointerDown={additive ? activatePlacement : undefined}\n onFocusCapture={additive ? activatePlacement : undefined}\n overflow=\"hidden\"\n pointerEvents={renderState.pointerEvents}\n position={renderState.position}\n visibility={renderState.visibility}\n w=\"full\"\n >\n <WorkbenchWidgetHost workbench={workbench} placement={placement} />\n </Box>\n );\n};\n\nexport const WorkbenchRegion = (props: WorkbenchRegionProps) => {\n const { workbench, region, title, pointerEvents = \"auto\", transparent = false } = props;\n const chrome = useModeChrome(workbench, region);\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 { ignoreOwnerResourceKey: sidePanelRegionIds.has(region) },\n )\n : undefined;\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (sidePanelRegionIds.has(region)\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement, {\n location: activeLocationPanel,\n })) &&\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, region)\n : [];\n\n if (chrome === false) return null;\n if (chrome) return <ModeChromeView workbench={workbench} region={region} viewId={chrome} />;\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 activatePlacement = (target: WorkbenchWidgetPlacement | undefined) => {\n if (target && target.widgetId !== globalActiveWidgetId) {\n workbench.layout.activatePanel(target.widgetId);\n }\n };\n const additive = region === \"sidenav\";\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={additive ? undefined : () => activatePlacement(activePlacement)}\n onFocusCapture={additive ? undefined : () => activatePlacement(activePlacement)}\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 <WorkbenchRegionPlacement\n key={renderedPlacement.widgetId}\n workbench={workbench}\n placement={renderedPlacement}\n activeWidgetId={activePlacement?.widgetId}\n globalActiveWidgetId={globalActiveWidgetId}\n region={region}\n />\n ))\n )}\n </ScrollArea>\n </Flex>\n );\n};\n","import { IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { useRef } from \"react\";\nimport type { ResourceRef, WorkbenchCompositionAddablePanel, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { openPanelWidget } from \"./panel-widget-open\";\n\ninterface WorkbenchPanelAddMenuProps {\n workbench: WorkbenchCore;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n panels: readonly WorkbenchCompositionAddablePanel[];\n}\n\nexport const WorkbenchPanelAddMenu = (props: WorkbenchPanelAddMenuProps) => {\n const { panels, region, resource, workbench } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const label = \"Add panel\";\n if (panels.length === 0) return null;\n\n const openPanel = (panel: WorkbenchCompositionAddablePanel) =>\n openPanelWidget({\n workbench,\n widget: panel.contribution,\n region,\n resource,\n pinned: panel.pinned,\n open: panel.open,\n });\n\n const trigger = (\n <IconButton\n ref={panels.length > 1 ? triggerRef : undefined}\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={label}\n flexShrink={0}\n onClick={panels.length === 1 ? () => openPanel(panels[0]) : undefined}\n >\n <WorkbenchIcon name=\"plus\" size={13} />\n </IconButton>\n );\n\n if (panels.length === 1) return <Tooltip content={label}>{trigger}</Tooltip>;\n\n return (\n <Menu.Root positioning={{ placement: \"bottom-start\", getAnchorElement: () => triggerRef.current }}>\n <Tooltip content={label}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"17.5rem\" bg=\"bg\">\n {panels.map((panel) => (\n <Menu.Item key={panel.contribution.id} value={`widget:${panel.contribution.id}`} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={panel.contribution.title}\n icon={\n panel.contribution.icon ? <WorkbenchIcon name={panel.contribution.icon} size={14} /> : undefined\n }\n onActivate={() => openPanel(panel)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import type { WorkbenchRegion, WorkbenchWidgetPlacement } from \"../../core\";\n\nexport const toTabKey = (regionId: string, placement: WorkbenchWidgetPlacement) =>\n `${regionId}:${placement.contributionId}`;\n\n// Sidenav placements compose as vertical navigation sections. They never become tabs.\nexport const suppressesSidenavTabStrip = (region: WorkbenchRegion, _placements: WorkbenchWidgetPlacement[]) =>\n region === \"sidenav\";\n\n// A Sub Panel tab presents its widget; the resource on its placement only binds\n// it to a Location. Location and content tabs present the resource they show.\nexport const resolveTabIconName = (\n placement: WorkbenchWidgetPlacement,\n widget: { icon?: string } | undefined,\n resourceKindIcon: string | undefined,\n) => {\n const resourceIcon = placement.resource?.icon ?? resourceKindIcon;\n if (placement.role === \"sub-panel\") return widget?.icon ?? resourceIcon;\n return resourceIcon ?? widget?.icon;\n};\n\nexport const resolveDisplayedActiveWidgetId = (\n visiblePlacements: WorkbenchWidgetPlacement[],\n activeWidgetId: string | undefined,\n): string | undefined => {\n if (!activeWidgetId) return visiblePlacements[0]?.widgetId;\n const hasActive = visiblePlacements.some((placement) => placement.widgetId === activeWidgetId);\n if (hasActive) return activeWidgetId;\n return visiblePlacements[0]?.widgetId;\n};\n","import { filterVisibleTabs, useTabVisibilityStore } from \"@pstdio/ui\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion,\n type WorkbenchWidgetPlacement,\n workbenchPanelMenuRegions,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { suppressesSidenavTabStrip, toTabKey } from \"./region-tabs-visibility\";\n\nconst isWorkbenchPanelRegion = (region: WorkbenchRegion): region is WorkbenchPanelRegion =>\n workbenchPanelRegions.some((panelRegion) => panelRegion === region);\n\nexport const shouldShowRegionTabs = (\n placements: WorkbenchWidgetPlacement[],\n options: { alwaysShowTabs?: boolean } = {},\n) => placements.length > 1 || (placements.length === 1 && (options.alwaysShowTabs ?? placements[0]?.closable) === true);\n\ninterface WorkbenchPanelHeaderVisibility {\n hasTabs?: boolean;\n hasPanelMenus?: boolean;\n hasHeaderActions?: boolean;\n}\n\nexport const shouldShowPanelHeader = (input: WorkbenchPanelHeaderVisibility) =>\n input.hasTabs === true || input.hasPanelMenus === true || input.hasHeaderActions === true;\n\nexport const isPlacementEligibleForRegion = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n placement: WorkbenchWidgetPlacement,\n resource = workbench.getPrimaryResource(),\n modeId = workbench.modes.getActiveModeId(),\n) => {\n const widget = workbench.layout.getWidget(placement.contributionId);\n return widget\n ? isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n ignoreResourceLocation: region === \"side\",\n location: getActiveWorkbenchLocationPanel(workbench.layout.getLayout()),\n })\n : false;\n};\n\nexport const useWorkbenchRegionTabsState = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n visibilityStorageKey?: string,\n) => {\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n const tabStore = useTabVisibilityStore(visibilityStorageKey ?? region, (state) => state);\n const regionState = layoutState.layout.regions[region];\n const subPanelPlacements = regionState.widgets.filter(\n (placement) =>\n placement.role === \"sub-panel\" && isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n const visibleSubPanels = filterVisibleTabs(subPanelPlacements, tabStore.tabOverrides, (placement) =>\n toTabKey(region, placement),\n );\n const visibleSubPanelIds = new Set(visibleSubPanels.map((placement) => placement.widgetId));\n const visiblePlacements = regionState.widgets.filter(\n (placement) => visibleSubPanelIds.has(placement.widgetId) || (region === \"main\" && placement.role === \"location\"),\n );\n const leadingItems = listWorkbenchMenuItemsFromState(\n { itemsByPath, commands, contextValues },\n workbenchRegionTabLeadingMenuPath(region),\n );\n const panelRegion = isWorkbenchPanelRegion(region) ? region : undefined;\n const eligibleSubPanels = panelRegion ? compositionPanels[panelRegion].addable : [];\n const showTabs =\n !suppressesSidenavTabStrip(region, visiblePlacements) &&\n shouldShowRegionTabs(visiblePlacements, {\n alwaysShowTabs: workbench.layout.getRegionSettings(region)?.alwaysShowTabs,\n });\n const hasActions = leadingItems.length > 0 || eligibleSubPanels.length > 0;\n\n return {\n commands,\n regionState,\n resource,\n tabStore: { tabOverrides: tabStore.tabOverrides, toggleTab: tabStore.toggleTab, reset: tabStore.reset },\n subPanelPlacements,\n visiblePlacements,\n leadingItems,\n panelRegion,\n eligibleSubPanels,\n showTabs,\n hasActions,\n };\n};\n\nexport const useWorkbenchPanelHeaderVisible = (workbench: WorkbenchCore, region: WorkbenchPanelRegion) => {\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const { showTabs, hasActions } = useWorkbenchRegionTabsState(workbench, region);\n const activeSubPanel = getActiveWorkbenchSubPanel(layoutState.layout, region, resource, {\n ignoreOwnerResourceKey: region === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layoutState.layout);\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\n return shouldShowPanelHeader({ hasTabs: showTabs, hasHeaderActions: hasActions, hasPanelMenus });\n};\n\nexport const useWorkbenchRegionTabsVisible = (workbench: WorkbenchCore, region: WorkbenchRegion) => {\n const { showTabs, hasActions } = useWorkbenchRegionTabsState(workbench, region);\n return showTabs || hasActions;\n};\n","import { Box, CloseButton, Menu, Portal, Tabs, Text } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { ListRow } from \"@pstdio/ui\";\nimport { type KeyboardEvent, type MouseEvent as ReactMouseEvent, type ReactNode, useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchTabMenuGroup, WorkbenchTabSnapshot, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { resolveTabIconName } from \"./region-tabs-visibility\";\n\ninterface WorkbenchRegionTabProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId: string | undefined;\n disabled?: boolean;\n nextWidgetId?: string;\n previousWidgetId?: string;\n sortable?: boolean;\n}\nconst useTabSnapshot = (placement: WorkbenchWidgetPlacement): WorkbenchTabSnapshot => {\n const tab = placement.tab;\n const [, setVersion] = useState(0);\n useEffect(() => {\n const subscription = tab?.subscribe?.(() => setVersion((version) => version + 1));\n if (!subscription) return undefined;\n return typeof subscription === \"function\" ? subscription : () => subscription.dispose();\n }, [tab]);\n return tab?.getSnapshot(toPanelInstance(placement)) ?? {};\n};\nconst useRegionTabBehavior = (input: WorkbenchRegionTabProps, tabSnapshot: WorkbenchTabSnapshot) => {\n const { disabled = false, nextWidgetId, placement, previousWidgetId, sortable = false, workbench } = input;\n const isPreview = placement.tabRetention === \"preview\";\n const hasCustomMenu = Boolean(tabSnapshot.menu?.some((group) => group.rows.length > 0));\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 hasCustomMenu,\n hasContextMenu,\n isPreview,\n openContextMenu,\n openCustomMenu,\n openMenu,\n reorderWithKeyboard,\n setMenuOpen,\n sortableState,\n tabSnapshot,\n };\n};\nconst WorkbenchRegionTabMenuSurface = (props: {\n anchor: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\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};\nconst WorkbenchRegionTabContextMenu = (props: {\n anchor: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\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 if (placement.placementIdentity) workbench.pinPlacement(placement.placementIdentity);\n else workbench.layout.updatePanel(placement.widgetId, { strategy: { kind: \"persistent\" } });\n }}\n />\n </Menu.Item>\n </WorkbenchRegionTabMenuSurface>\n );\n};\nconst WorkbenchRegionTabLabel = (props: {\n icon?: string;\n indicator?: WorkbenchTabSnapshot[\"indicator\"];\n id: string;\n label: string;\n}) => {\n const { icon, id, indicator, label } = props;\n return (\n <>\n {indicator ? (\n <WorkbenchIcon\n name={indicator.icon}\n size={12}\n flexShrink={0}\n color={indicator.color ?? \"fg.muted\"}\n aria-label={indicator.label}\n />\n ) : icon ? (\n <WorkbenchIcon name={icon} size={12} flexShrink={0} color=\"fg.muted\" />\n ) : null}\n <Text as=\"span\" id={id} minW=\"0\" truncate>\n {label}\n </Text>\n </>\n );\n};\nconst activateTabAction = (\n workbench: WorkbenchCore,\n action: NonNullable<WorkbenchTabMenuGroup[\"rows\"][number][\"action\"]>,\n) => {\n if (action.kind === \"command\") {\n void workbench.commands.executeCommand(action.commandId, action.args);\n return;\n }\n void workbench.navigation.openTarget(action.target);\n};\nconst WorkbenchStructuredTabMenu = (props: { groups: readonly WorkbenchTabMenuGroup[]; workbench: WorkbenchCore }) => {\n const { groups, workbench } = props;\n return groups.map((group, groupIndex) => (\n <Box key={group.id} display=\"contents\">\n {groupIndex > 0 ? <Menu.Separator /> : null}\n {group.rows.map((row) => (\n <Menu.Item key={row.id} value={row.id} disabled={row.disabled} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={row.id}\n label={row.label}\n icon={row.icon ? <WorkbenchIcon name={row.icon} size={16} /> : undefined}\n iconColor={row.iconColor}\n isSelected={row.selected}\n disabled={row.disabled}\n onActivate={row.action ? () => activateTabAction(workbench, row.action!) : undefined}\n />\n </Menu.Item>\n ))}\n </Box>\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 const identity = placement.placementIdentity;\n if (identity) {\n workbench.closePlacement(identity);\n return;\n }\n workbench.layout.closePanel(placement.widgetId);\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.hasCustomMenu ? (\n <WorkbenchRegionTabMenuSurface\n anchor={behavior.anchor}\n label={`${label} menu`}\n open={behavior.openMenu === \"custom\"}\n setMenuOpen={(open) => behavior.setMenuOpen(\"custom\", open)}\n >\n <WorkbenchStructuredTabMenu groups={behavior.tabSnapshot.menu ?? []} workbench={workbench} />\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};\nexport const WorkbenchRegionTab = (props: WorkbenchRegionTabProps) => {\n const { activeWidgetId, disabled = false, placement, sortable = false, workbench } = props;\n const isActive = placement.widgetId === activeWidgetId;\n const tabSnapshot = useTabSnapshot(placement);\n const label = tabSnapshot.label ?? placement.resource?.label ?? placement.title ?? placement.contributionId;\n const labelId = `workbench-tab-label-${placement.widgetId}`;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const icon = resolveTabIconName(\n placement,\n widget,\n placement.resource ? workbench.resources.getKind(placement.resource.type)?.icon : undefined,\n );\n const behavior = useRegionTabBehavior(props, tabSnapshot);\n const { isDragging, listeners, setNodeRef, transform, transition } = behavior.sortableState;\n const menuOpen =\n (behavior.openMenu === \"custom\" && behavior.hasCustomMenu) ||\n (behavior.openMenu === \"context\" && behavior.hasContextMenu);\n return (\n <>\n <Tabs.Trigger\n ref={setNodeRef}\n value={placement.widgetId}\n maxW=\"12rem\"\n minW=\"0\"\n flexShrink={0}\n title={label}\n // Name the tab from its label element alone. Computing the name from the tab's\n // contents would fold in the nested Close button, so a closable tab would be\n // called \"Artifacts Close Artifacts\" and rename itself the moment it became\n // closable. The label element still carries any status or count a tab renders.\n aria-labelledby={labelId}\n disabled={disabled}\n className=\"group\"\n aria-haspopup={behavior.hasCustomMenu || behavior.hasContextMenu ? \"menu\" : undefined}\n aria-expanded={behavior.hasCustomMenu || behavior.hasContextMenu ? menuOpen : undefined}\n aria-keyshortcuts={sortable ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined}\n fontStyle={behavior.isPreview ? \"italic\" : undefined}\n opacity={isDragging ? \"0.5\" : undefined}\n transform={CSS.Transform.toString(transform)}\n transition={transition}\n {...listeners}\n onKeyDown={behavior.reorderWithKeyboard}\n onContextMenu={behavior.hasContextMenu ? behavior.openContextMenu : undefined}\n onClick={behavior.hasCustomMenu && isActive && !disabled ? behavior.openCustomMenu : undefined}\n >\n <WorkbenchRegionTabLabel\n icon={tabSnapshot.icon ?? icon}\n id={labelId}\n indicator={tabSnapshot.indicator}\n label={label}\n />\n <WorkbenchRegionTabCloseButton\n disabled={disabled}\n isActive={isActive}\n label={label}\n placement={placement}\n workbench={workbench}\n />\n </Tabs.Trigger>\n <WorkbenchRegionTabMenus behavior={behavior} label={label} placement={placement} workbench={workbench} />\n </>\n );\n};\n","import { Tabs } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { horizontalListSortingStrategy, SortableContext } from \"@dnd-kit/sortable\";\nimport type { ReactNode } from \"react\";\nimport type {\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { WorkbenchRegionTab } from \"./region-tab\";\n\ninterface SortableRegionTabListProps {\n activeWidgetId?: string;\n disabled: boolean;\n leadingActions: ReactNode;\n panelRegion?: WorkbenchPanelRegion;\n placements: WorkbenchWidgetPlacement[];\n resource?: ResourceRef;\n eligibleSubPanels: readonly WorkbenchCompositionAddablePanel[];\n workbench: WorkbenchCore;\n}\n\nexport const SortableRegionTabList = (props: SortableRegionTabListProps) => {\n const { activeWidgetId, disabled, eligibleSubPanels, leadingActions, panelRegion, placements, resource, workbench } =\n props;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n const reorderable = placements.filter(\n (placement) => placement.role === \"sub-panel\" && placement.tabRetention !== \"preview\",\n );\n const reorderWidget = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const activeIndex = placements.findIndex((placement) => placement.widgetId === active.id);\n const overIndex = placements.findIndex((placement) => placement.widgetId === over.id);\n const source = placements[activeIndex];\n const target = placements[overIndex];\n if (\n source?.role !== \"sub-panel\" ||\n source.tabRetention === \"preview\" ||\n target?.role !== \"sub-panel\" ||\n target.tabRetention === \"preview\"\n ) {\n return;\n }\n workbench.layout.reorderPanel(\n String(active.id),\n activeIndex < overIndex ? { afterWidgetId: target.widgetId } : { beforeWidgetId: target.widgetId },\n );\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={reorderWidget}>\n <SortableContext\n items={placements.map((placement) => placement.widgetId)}\n strategy={horizontalListSortingStrategy}\n >\n <Tabs.List h=\"full\" minH=\"0\" minW=\"max-content\" alignItems=\"center\" gap=\"2xs\" justifyContent=\"flex-start\">\n {placements.map((placement) => {\n const reorderableIndex = reorderable.findIndex((candidate) => candidate.widgetId === placement.widgetId);\n return (\n <WorkbenchRegionTab\n key={placement.widgetId}\n workbench={workbench}\n placement={placement}\n activeWidgetId={activeWidgetId}\n disabled={disabled}\n sortable={reorderableIndex >= 0}\n previousWidgetId={reorderable[reorderableIndex - 1]?.widgetId}\n nextWidgetId={reorderable[reorderableIndex + 1]?.widgetId}\n />\n );\n })}\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </Tabs.List>\n </SortableContext>\n </DndContext>\n );\n};\n","import { HStack, IconButton, Menu, Portal, Tabs } from \"@chakra-ui/react\";\nimport {\n buildTabVisibilityMenuActions,\n ListRow,\n PANEL_HEADER_CONTROL_SIZE,\n PANEL_HEADER_TAB_SIZE,\n ScrollArea,\n Tooltip,\n} from \"@pstdio/ui\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchRegion as WorkbenchRegionId, WorkbenchWidgetPlacement } from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport type { WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { resolveDisplayedActiveWidgetId, resolveTabIconName, toTabKey } from \"./region-tabs-visibility\";\nimport { useWorkbenchRegionTabsState } 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}\nconst resolvePlacementIcon = (workbench: WorkbenchCore, placement: WorkbenchWidgetPlacement) => {\n const iconName = resolveTabIconName(\n placement,\n workbench.layout.getWidget(placement.contributionId),\n placement.resource ? workbench.resources.getKind(placement.resource.type)?.icon : undefined,\n );\n return iconName ? <WorkbenchIcon name={iconName} size={14} /> : undefined;\n};\nexport const WorkbenchRegionTabs = (props: WorkbenchRegionTabsProps) => {\n const { workbench, region, visibilityStorageKey } = props;\n const {\n commands,\n regionState,\n resource,\n tabStore,\n subPanelPlacements,\n visiblePlacements,\n leadingItems,\n panelRegion,\n eligibleSubPanels,\n showTabs,\n hasActions,\n } = useWorkbenchRegionTabsState(workbench, region, visibilityStorageKey);\n const tabOverrides = tabStore.tabOverrides;\n const getKey = (placement: WorkbenchWidgetPlacement) => toTabKey(region, placement);\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 const menuActions = buildTabVisibilityMenuActions(\n subPanelPlacements,\n tabOverrides,\n {\n onToggleTab: (key, hiddenByDefault) => tabStore.toggleTab(key, hiddenByDefault),\n onResetAll: () => tabStore.reset(),\n },\n getKey,\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n (placement) => resolvePlacementIcon(workbench, placement),\n );\n const hasVisibilityMenu = menuActions.length > 0;\n const openVisibilityMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasVisibilityMenu) return;\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 // 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 const onWheel = (event: WheelEvent) => {\n if (event.deltaY === 0 || viewport.scrollWidth <= viewport.clientWidth) return;\n viewport.scrollLeft += event.deltaY;\n event.preventDefault();\n };\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewport]);\n if (!showTabs && !hasActions) return null;\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 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={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 if (!showTabs) {\n return (\n <HStack flex=\"1 1 auto\" h=\"full\" minW=\"0\" gap=\"2xs\">\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </HStack>\n );\n }\n return (\n <Tabs.Root\n value={activeWidgetId}\n onValueChange={(details) => {\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 disabled={false}\n workbench={workbench}\n placements={visiblePlacements}\n activeWidgetId={activeWidgetId}\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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { ResourceContextAction } from \"@pstdio/ui\";\nimport 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\";\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};\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};\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 }));\nexport const resolveDataTableRendererResourceActions = (\n data: RowData,\n rowByData: WeakMap<RowData, DataTableRendererRow>,\n resolveResourceActions: (resource: NonNullable<DataTableRendererRow[\"resource\"]>) => ResourceContextAction[],\n) => {\n const resource = rowByData.get(data)?.resource;\n if (!resource) return [];\n return resolveResourceActions(resource)\n .filter((action) => !action.isDisabled)\n .map((action) => ({\n label: action.label,\n icon: action.icon,\n onSelect: (_context?: unknown) => void action.onClick(),\n }));\n};\nexport const resolveDataTableRendererStorageKey = (rendererId: string, placement: WorkbenchPanelInstance) => {\n const identity = resourceKey(placement.resource) ?? placement.resource?.id ?? \"unscoped\";\n return `pstdio:workbench:dataTableRenderer:${rendererId}:${placement.instanceId}:${identity}`;\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { EmptyState } from \"@pstdio/ui\";\nimport {\n DataTable,\n type DataTableColumnRenderer,\n type DataTableColumnStat,\n type DataTableRowAction,\n DataTableSkeleton,\n type RowData,\n} from \"@pstdio/ui/data-table\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n DataTableRendererQueryResult,\n RegisteredDataTableRendererContribution,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport {\n buildDataTableRendererData,\n resolveDataTableRendererColumns,\n resolveDataTableRendererResourceActions,\n resolveDataTableRendererSelectionActions,\n resolveDataTableRendererStorageKey,\n} from \"./data-table-view-model\";\n\ninterface WorkbenchDataTableViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredDataTableRendererContribution;\n placement: WorkbenchPanelInstance;\n}\nconst initialResult: DataTableRendererQueryResult = { rows: [] };\n// Tabs unmount when they deactivate, so without a cache every revisit flashes a\n// loading state. The last result renders instantly while the fresh query runs.\nconst lastResults = new Map<string, DataTableRendererQueryResult>();\nconst resultCacheKey = (contributionId: string, placement: WorkbenchPanelInstance) =>\n `${contributionId} ${resourceKey(placement.resource) ?? \"\"}`;\nexport const WorkbenchDataTableView = (props: WorkbenchDataTableViewProps) => {\n const { workbench, contribution, placement } = props;\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const cacheKey = resultCacheKey(contribution.id, placement);\n const [result, setResult] = useState(() => lastResults.get(cacheKey) ?? initialResult);\n const [loading, setLoading] = useState(() => !lastResults.has(cacheKey));\n const requestRef = useRef(0);\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve(\n contribution.executeQuery({ resource: placement.resource, modeId: workbench.modes.getActiveModeId() }),\n ).then((next) => {\n if (cancelled || requestRef.current !== requestId) return;\n lastResults.set(cacheKey, next);\n setResult(next);\n setLoading(false);\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshDataTableRenderer((event) => {\n if (event.dataTableRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [cacheKey, contribution, placement.resource, workbench]);\n const columns = resolveDataTableRendererColumns(result, contribution.columns);\n const model = useMemo(() => buildDataTableRendererData(result.rows, columns), [columns, result.rows]);\n const labels = Object.fromEntries(\n columns.filter((column) => column.label).map((column) => [column.id, column.label!]),\n );\n const descriptions = Object.fromEntries(\n columns.filter((column) => column.description).map((column) => [column.id, column.description!]),\n );\n const icons = Object.fromEntries(\n columns.filter((column) => column.icon).map((column) => [column.id, column.icon as ReactNode]),\n );\n const stats = Object.fromEntries(\n columns.filter((column) => column.stat).map((column) => [column.id, column.stat as DataTableColumnStat]),\n );\n const renderers = Object.fromEntries(\n columns\n .filter((column) => column.renderer)\n .map((column) => [column.id, column.renderer as DataTableColumnRenderer]),\n );\n const rowActions: DataTableRowAction[] = (contribution.rowActions ?? []).map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const row = model.rowByData.get(data);\n if (row) void action.run(row);\n },\n }));\n const selectionActions = resolveDataTableRendererSelectionActions(\n contribution.selectionActions ?? [],\n model.rowByData,\n );\n const openRow = (data: RowData) => {\n const row = model.rowByData.get(data);\n if (!row) return;\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n if (loading) {\n // The table chrome renders instantly: declared columns become real headers\n // and only the row values shimmer until the first query resolves.\n const skeletonColumns = (contribution.columns ?? [])\n .filter((column) => !column.hidden)\n .map((column) => ({ id: column.id, label: column.label ?? column.id }));\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTableSkeleton columns={skeletonColumns.length > 0 ? skeletonColumns : undefined} />\n </Stack>\n );\n }\n if (result.rows.length === 0) {\n return (\n <EmptyState h=\"full\" title={contribution.emptyTitle ?? \"No rows\"} description={contribution.emptyDescription} />\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 getRowActions={(data) => resolveDataTableRendererResourceActions(data, model.rowByData, resolveResourceActions)}\n onRowClick={openRow}\n isRowInteractive={(data) => {\n const row = model.rowByData.get(data);\n return Boolean(row && contribution.onRowActivate);\n }}\n getCellContextMenuActions={(context) =>\n resolveDataTableRendererResourceActions(context.row, model.rowByData, resolveResourceActions)\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 type { PageLocation, PageRef } from \"@pstdio/sdk/extensions\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { PaletteShortcut, Tooltip, type TreeListNode, type TreeListSection } from \"@pstdio/ui\";\nimport { DiffBubble } from \"@pstdio/ui/diff\";\nimport type { ReactNode } from \"react\";\nimport {\n getWorkbenchSelectionResourceKeys,\n type NavigationTarget,\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}\nexport const resolveTreeListActiveNodeId = (activeNodeId: string | null | undefined, selectedNodeId?: string) => {\n if (!activeNodeId) return selectedNodeId;\n return activeNodeId;\n};\ninterface ResolveTreeListSelectionInput {\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n activeNodeId?: string | null;\n activeLocation?: PageLocation;\n activeResource?: ResourceRef;\n selectedNodeId?: string;\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};\nconst resolveTreeNodeResourceKey = (node: TreeNode) => {\n if (node.resource) return resourceKey(node.resource);\n return undefined;\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 ]);\nconst listSectionNodes = (sections: TreeViewSection[], childrenByNodeId: Record<string, TreeNode[]>) =>\n sections.flatMap((section) => listTreeNodes(section.nodes, childrenByNodeId));\nconst resolveActiveResourceNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n resourceKeys: string[],\n) => {\n const nodes = listSectionNodes(sections, childrenByNodeId);\n for (const resourceKey of resourceKeys) {\n const matches = nodes\n .filter((node) => node.id === resourceKey || resolveTreeNodeResourceKey(node) === resourceKey)\n .map((node) => node.id);\n if (matches.length > 0) return activeNodeIds(matches);\n }\n return undefined;\n};\nconst findSectionNode = (sections: TreeViewSection[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>) =>\n listSectionNodes(sections, childrenByNodeId).find((node) => node.id === nodeId);\nexport const filterTreeListSelection = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n selection: string | string[] | undefined,\n) => {\n const selectedIds = typeof selection === \"string\" ? [selection] : (selection ?? []);\n return activeNodeIds(selectedIds.filter((nodeId) => findSectionNode(sections, nodeId, childrenByNodeId)));\n};\nconst pageRefsEqual = (left: PageRef, right: PageRef) => left.id === right.id && left.extensionId === right.extensionId;\nconst targetMatchesPage = (target: NavigationTarget | undefined, activePage: PageRef, activeResource?: ResourceRef) => {\n if (!target) return false;\n const targets = target.kind === \"compound\" ? target.targets : [target];\n return targets.some(\n (candidate) =>\n candidate.kind === \"page\" &&\n pageRefsEqual(candidate.page, activePage) &&\n (candidate.resource\n ? activeResource !== undefined && resourceKey(candidate.resource) === resourceKey(activeResource)\n : activeResource === undefined),\n );\n};\nconst resolveActivePageNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n activePage: PageRef | undefined,\n activeResource: ResourceRef | undefined,\n) => {\n if (!activePage) return undefined;\n return activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => targetMatchesPage(node.target, activePage, activeResource))\n .map((node) => node.id),\n );\n};\nexport const resolveTreeListSelection = (input: ResolveTreeListSelectionInput) => {\n const { sections, childrenByNodeId, activeNodeId, activeLocation, activeResource, selectedNodeId } = input;\n if (activeNodeId) return activeNodeId;\n // Keep renderer selection on the nodes so it survives composing and scoping trees.\n const declaredSelection = activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => node.selected)\n .map((node) => node.id),\n );\n if (declaredSelection) return declaredSelection;\n const activeResourceKeys = getWorkbenchSelectionResourceKeys(activeResource);\n let selectedResourceKey: string | undefined;\n if (selectedNodeId) {\n const selectedNode = findSectionNode(sections, selectedNodeId, childrenByNodeId);\n selectedResourceKey = selectedNode ? resolveTreeNodeResourceKey(selectedNode) : undefined;\n if (selectedResourceKey && activeResourceKeys.includes(selectedResourceKey)) return selectedNodeId;\n // Keep the selected document when several nodes target the same page and resource.\n if (activeLocation && targetMatchesPage(selectedNode?.target, activeLocation.page, activeLocation.resource)) {\n return selectedNodeId;\n }\n }\n const activeResourceNodeId = resolveActiveResourceNodeIds(sections, childrenByNodeId, activeResourceKeys);\n if (activeResourceNodeId) return activeResourceNodeId;\n const activePageNodeId = resolveActivePageNodeIds(\n sections,\n childrenByNodeId,\n activeLocation?.page,\n activeLocation?.resource,\n );\n if (activePageNodeId) return activePageNodeId;\n if (!selectedNodeId) return undefined;\n if (activeResourceKeys.length > 0 && selectedResourceKey) return undefined;\n return selectedNodeId;\n};\nconst canVirtualizeTreeNode = (node: TreeListNode) =>\n node.inlineInput === undefined && node.isContainer !== true && (node.children ?? []).length === 0;\nexport const canVirtualizeTreeSections = (sections: TreeListSection[]) =>\n sections.every((section) => section.nodes.every(canVirtualizeTreeNode));\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 return null;\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 return null;\n};\nconst wrapTreeNodeIcon = (icon: ReactNode, iconTooltip: string | undefined) => {\n if (!iconTooltip) return icon;\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};\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 return icon === undefined ? undefined : wrapTreeNodeIcon(icon, node.iconTooltip);\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};\nconst resolveTreeNodeResource = (node: TreeNode): ResourceRef | undefined => {\n if (node.resource) return node.resource;\n return undefined;\n};\nconst renderShortcutEndContent = (binding: string | string[] | undefined) => {\n if (!binding) return undefined;\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};\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 const shortcut = renderShortcutEndContent(binding);\n if (shortcut) return shortcut;\n const additions = resource?.metadata?.diffAdditions;\n const deletions = resource?.metadata?.diffDeletions;\n if (resource?.type !== \"workspace\" || typeof additions !== \"number\" || typeof deletions !== \"number\") {\n return undefined;\n }\n return <DiffBubble additions={additions} deletions={deletions} variant=\"ghost\" size=\"small\" />;\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};\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.type) : 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.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]),\n );\n const binding = node.commandId ? shortcuts.get(node.commandId) : undefined;\n const treeNode: TreeListNode = {\n id: node.id,\n moveScope: node.moveScope,\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 inlineInput: node.inlineInput,\n showContextMenuTrigger: node.showContextMenuTrigger,\n canHide: node.canHide,\n canReorder: node.canReorder,\n canDrag: node.canDrag,\n canDrop: node.canDrop,\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: 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 return treeNode;\n};\nexport const toTreeListSection = (\n section: TreeViewSection,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const emptyNode = toTreeListSectionEmptyNode(section);\n return {\n id: section.id,\n moveScope: section.moveScope,\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 type { WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { CommandParamsDialog } from \"../../command-palette/command-params-dialog\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\n\ninterface TreeParamsDialogProps {\n request: TreeActionParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n workbench: WorkbenchCore;\n onClose: () => void;\n}\n\nexport const TreeParamsDialog = (props: TreeParamsDialogProps) => {\n const { request, renderParamField, workbench, onClose } = props;\n return (\n <CommandParamsDialog\n request={request?.request ?? null}\n renderParamField={renderParamField}\n prepareArgs={(input) =>\n workbench.commands.getCommand(input.commandId)\n ? workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n : Promise.resolve(input.args)\n }\n onClose={onClose}\n onRun={async ({ args }) => {\n await request?.run(args);\n }}\n />\n );\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport {\n EmptyState,\n type ResourceContextAction,\n TreeList,\n type TreeListMovePolicy,\n type TreeListSection,\n} 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 error?: string | null;\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 canMove?: TreeListMovePolicy;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n onNavigate: (event: Parameters<NonNullable<Parameters<typeof TreeList>[0][\"onNavigate\"]>>[0]) => void;\n}\n\nexport const TreeViewBody = (props: TreeViewBodyProps) => {\n const {\n error,\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 canMove,\n onMoveNode,\n onNavigate,\n } = props;\n\n if (error) return <EmptyState title=\"Could not load files\" description={error} />;\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 canMove={canMove}\n onMoveNode={onMoveNode}\n onNavigate={onNavigate}\n />\n );\n};\n","import type {\n RegisteredTreeRendererContribution,\n ResourceRef,\n TreeNode,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { findNodeInSections } from \"./tree-list-adapter\";\n\ninterface MoveTreeNodeContext {\n workbench: WorkbenchCore;\n renderer: RegisteredTreeRendererContribution;\n resource?: ResourceRef;\n viewId?: string;\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n onError?: (error: unknown) => void;\n}\n\nexport const createMoveTreeNode = (context: MoveTreeNodeContext) =>\n context.renderer.moveNode\n ? (sourceNodeId: string, targetNodeId?: string) => {\n const source = findNodeInSections(context.sections, sourceNodeId, context.childrenByNodeId);\n const target = targetNodeId\n ? (findNodeInSections(context.sections, targetNodeId, context.childrenByNodeId) ?? undefined)\n : undefined;\n if (!source || (targetNodeId && !target)) return;\n const trees = getWorkbenchRenderers(context.workbench);\n void Promise.resolve(\n context.renderer.moveNode?.(source, target, {\n resource: context.resource,\n viewId: context.viewId,\n state: trees.getTreeState(context.renderer.id),\n refresh: () => trees.refresh(context.renderer.id),\n setSelectedNode: (nodeId) => trees.setSelectedNode(context.renderer.id, nodeId),\n }),\n ).catch(context.onError);\n }\n : undefined;\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 === \"page\" || item.kind === \"panel\");\n};\n","import { Input, InputGroup } from \"@chakra-ui/react\";\nimport { Header } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\n\ninterface TreeViewSearchProps {\n visible: boolean;\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n}\n\nexport const TreeViewSearch = (props: TreeViewSearchProps) => {\n const { visible, placeholder = \"Search files\", value, onChange } = props;\n if (!visible) return null;\n\n return (\n <Header flexShrink={0} borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <InputGroup startElement={<WorkbenchIcon name=\"search\" size={14} />} width=\"full\">\n <Input\n size=\"sm\"\n variant=\"borderless\"\n aria-label={placeholder}\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n </InputGroup>\n </Header>\n );\n};\n","import type { TreeNode, TreeQueryContext, 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: TreeViewSection[];\n body: TreeViewSection[];\n footer: TreeViewSection[];\n}\n\nconst listTreeNodes = (data: LoadedTreeData) => [\n ...data.header.flatMap((section) => section.nodes),\n ...data.body.flatMap((section) => section.nodes),\n ...data.footer.flatMap((section) => section.nodes),\n];\n\nexport const loadExpandedTreeChildren = async (\n trees: TreeRendererRegistry,\n treeId: string,\n data: LoadedTreeData,\n expandedNodeIds: string[],\n ctx: TreeQueryContext = {},\n) => {\n const expanded = new Set(expandedNodeIds);\n const visited = new Set<string>();\n const childrenByNodeId: Record<string, TreeNode[]> = {};\n\n const loadNodes = async (nodes: TreeNode[]) => {\n await Promise.all(\n nodes.map(async (node) => {\n if (!expanded.has(node.id) || visited.has(node.id)) return;\n visited.add(node.id);\n const children = node.children ?? (await trees.getChildren(treeId, node, ctx));\n if (!node.children) childrenByNodeId[node.id] = children;\n await loadNodes(children);\n }),\n );\n };\n\n await loadNodes(listTreeNodes(data));\n return childrenByNodeId;\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: TreeQueryContext = {},\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 { useEffect, useRef, useState } from \"react\";\nimport {\n getWorkbenchRenderers,\n type ResourceRef,\n type TreeNode,\n type TreeViewSection,\n type WorkbenchCore,\n} from \"../../../core\";\nimport {\n expandDefaultTreeSections,\n loadExpandedTreeChildren,\n loadTreeData,\n shouldShowTreeLoading,\n} from \"./tree-view-load\";\n\nexport const useTreeData = (\n workbench: WorkbenchCore,\n treeViewId: string,\n resource?: ResourceRef,\n viewId?: string,\n filter?: string,\n) => {\n const [header, setHeader] = useState<TreeViewSection[]>([]);\n const [body, setBody] = useState<TreeViewSection[]>([]);\n const [footer, setFooter] = useState<TreeViewSection[]>([]);\n const [childrenByNodeId, setChildrenByNodeId] = useState<Record<string, TreeNode[]>>({});\n const [error, setError] = useState<string | null>(null);\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(getWorkbenchRenderers(workbench), treeViewId);\n\n const loadTree = () => {\n const loadRevision = ++loadRevisionRef.current;\n if (shouldShowTreeLoading(loadedTreeIdRef.current, treeViewId)) setLoading(true);\n setError(null);\n void loadTreeData(getWorkbenchRenderers(workbench), treeViewId, { resource, viewId, filter })\n .then(async (data) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n const treeStillRegistered = getWorkbenchRenderers(workbench).getTreeRenderer(treeViewId);\n const children =\n data && treeStillRegistered\n ? await loadExpandedTreeChildren(\n getWorkbenchRenderers(workbench),\n treeViewId,\n data,\n getWorkbenchRenderers(workbench).getTreeState(treeViewId).expandedNodeIds,\n { resource, viewId, filter },\n )\n : {};\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(children);\n setLoading(false);\n })\n .catch((loadError) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n setError(loadError instanceof Error ? loadError.message : \"The file tree could not be loaded.\");\n setLoading(false);\n });\n };\n\n loadTree();\n const disposable = getWorkbenchRenderers(workbench).onDidRefresh((event) => {\n if (event.treeId === treeViewId) loadTree();\n });\n return () => {\n cancelled = true;\n disposable.dispose();\n };\n }, [filter, resource, viewId, workbench, treeViewId]);\n\n return { body, childrenByNodeId, error, footer, header, loading, setChildrenByNodeId };\n};\n","import {\n applyTreeListOrder,\n buildTreeVisibilityMenuActions,\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 headerSections: TreeListSection[];\n sections: TreeListSection[];\n footerSections: TreeListSection[];\n}\n\nexport type TreeViewSlot = \"header\" | \"content\" | \"footer\";\n\ninterface TreeViewCustomization {\n // Header sections with hidden entries removed — what the pinned header renders.\n visibleHeaderSections: TreeListSection[];\n // Sections with hidden categories removed — what the tree body renders.\n visibleSections: TreeListSection[];\n // Footer sections with hidden entries removed — what the pinned footer renders.\n visibleFooterSections: TreeListSection[];\n // Back-of-tree right-click menu: header rows, body categories, and footer rows that opt in.\n backgroundContextActions: ResourceContextAction[];\n customizationRevision: string;\n onReorderSections: (slot: TreeViewSlot, nextSectionIds: string[]) => void;\n onMoveSection: (nextSectionIds: string[], sourceSectionId: string, destinationSectionId: string) => void;\n onReorderNodes: (sectionId: string, 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 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\nconst addSectionNodeVisibilityContextMenuItems = (\n sections: TreeListSection[],\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n enabled: boolean,\n) => {\n let changed = false;\n const next = sections.map((section) => {\n const nodes = addRegionNodeVisibilityContextMenuItems(section.nodes, nodeOverrides, actions, icons, enabled);\n if (nodes === section.nodes) return section;\n changed = true;\n return { ...section, nodes };\n });\n return changed ? next : sections;\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 sectionSlotById = useTreeListOrderStore(storageKey, (state) => state.sectionSlotById);\n const setSectionOrder = useTreeListOrderStore(storageKey, (state) => state.setSectionOrder);\n const setNodeOrder = useTreeListOrderStore(storageKey, (state) => state.setNodeOrder);\n const setSectionSlot = useTreeListOrderStore(storageKey, (state) => state.setSectionSlot);\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 defaultSlotBySectionId = new Map([\n ...regions.headerSections.map((section) => [section.id, \"header\" as const] as const),\n ...regions.sections.map((section) => [section.id, \"content\" as const] as const),\n ...regions.footerSections.map((section) => [section.id, \"footer\" as const] as const),\n ]);\n const orderedSectionsBySlot: Record<TreeViewSlot, TreeListSection[]> = { header: [], content: [], footer: [] };\n const orderedAllSections = applyTreeListOrder(\n [...regions.headerSections, ...regions.sections, ...regions.footerSections],\n sectionOrder,\n nodeOrderBySection,\n );\n for (const section of orderedAllSections) {\n const slot = sectionSlotById[section.id] ?? defaultSlotBySectionId.get(section.id) ?? \"content\";\n orderedSectionsBySlot[slot].push(section);\n }\n const orderedHeaderSections = orderedSectionsBySlot.header;\n const orderedSections = orderedSectionsBySlot.content;\n const orderedFooterSections = orderedSectionsBySlot.footer;\n const includeNodeContextMenus = options.suppressNodeContextMenus !== true;\n\n const headerSections = addSectionNodeVisibilityContextMenuItems(\n orderedHeaderSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const contentSections = addSectionNodeVisibilityContextMenuItems(\n orderedSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const footerSections = addSectionNodeVisibilityContextMenuItems(\n orderedFooterSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const visibleHeaderSections = filterVisibleSections(headerSections, sectionOverrides, nodeOverrides);\n const visibleSections = filterVisibleSections(contentSections, sectionOverrides, nodeOverrides);\n const visibleFooterSections = filterVisibleSections(footerSections, sectionOverrides, nodeOverrides);\n const backgroundContextActions = buildTreeVisibilityMenuActions(\n { headerSections: orderedHeaderSections, sections: orderedSections, footerSections: orderedFooterSections },\n sectionOverrides,\n nodeOverrides,\n visibilityActions,\n icons,\n );\n\n const customizationRevision = JSON.stringify({\n header: orderedHeaderSections.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 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: orderedFooterSections.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 sectionOverrides,\n nodeOverrides,\n sectionOrder,\n nodeOrderBySection,\n sectionSlotById,\n });\n\n return {\n visibleHeaderSections,\n visibleSections,\n visibleFooterSections,\n backgroundContextActions,\n customizationRevision,\n onReorderSections: (slot, nextSectionIds) => {\n const idsBySlot: Record<TreeViewSlot, string[]> = {\n header: orderedHeaderSections.map((section) => section.id),\n content: orderedSections.map((section) => section.id),\n footer: orderedFooterSections.map((section) => section.id),\n };\n idsBySlot[slot] = nextSectionIds;\n setSectionOrder([...idsBySlot.header, ...idsBySlot.content, ...idsBySlot.footer]);\n },\n onMoveSection: (nextSectionIds, sourceSectionId, destinationSectionId) => {\n const destinationSlot =\n sectionSlotById[destinationSectionId] ?? defaultSlotBySectionId.get(destinationSectionId) ?? \"content\";\n setSectionSlot(sourceSectionId, destinationSlot);\n setSectionOrder(nextSectionIds);\n },\n onReorderNodes: setNodeOrder,\n };\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea, TreeList, TreeListDragProvider } from \"@pstdio/ui\";\nimport { type Dispatch, type SetStateAction, useEffect, useRef, useState } from \"react\";\nimport type {\n NavigationTarget,\n ResourceRef,\n TreeNode,\n TreeRendererState,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getAnchorResource, getWorkbenchRenderers } from \"../../../core\";\nimport type { CommandParamFieldRenderer } 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 {\n filterTreeListSelection,\n findNodeInSections,\n resolveTreeListSelection,\n toTreeListSection,\n} from \"./tree-list-adapter\";\nimport { TreeParamsDialog } from \"./tree-params-dialog\";\nimport { TreeViewBody } from \"./tree-view-body\";\nimport { createMoveTreeNode } from \"./tree-view-move\";\nimport { shouldSelectTreeNodeForNavigationTarget } from \"./tree-view-navigation\";\nimport { TreeViewSearch } from \"./tree-view-search\";\nimport { useTreeData } from \"./use-tree-data\";\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\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 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 getWorkbenchRenderers(context.workbench).setSelectedNode(context.treeViewId, nodeId);\n }\n void context.workbench.navigation.openTarget(target).catch(context.onOpenResourceError);\n return;\n }\n};\n\ninterface ToggleTreeNodeContext {\n workbench: WorkbenchCore;\n treeViewId: string;\n resource?: ResourceRef;\n viewId?: string;\n body: TreeViewSection[];\n header: TreeViewSection[];\n footer: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n expandedNodeIds: string[];\n setChildrenByNodeId: Dispatch<SetStateAction<Record<string, TreeNode[]>>>;\n}\n\nconst createToggleTreeNode = (context: ToggleTreeNodeContext) => (nodeId: string) => {\n const node =\n findNodeInSections(context.body, nodeId, context.childrenByNodeId) ??\n findNodeInSections([...context.header, ...context.footer], nodeId, context.childrenByNodeId);\n if (!node) return;\n\n const expanded = context.expandedNodeIds.includes(nodeId);\n getWorkbenchRenderers(context.workbench).setNodeExpanded(context.treeViewId, nodeId, !expanded);\n if (expanded || context.childrenByNodeId[nodeId] || node.children) return;\n\n void getWorkbenchRenderers(context.workbench)\n .getChildren(context.treeViewId, node, { resource: context.resource, viewId: context.viewId })\n .then((children) => {\n context.setChildrenByNodeId((current) => ({ ...current, [nodeId]: children }));\n });\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 = getWorkbenchRenderers(workbench).getTreeRenderer(treeViewId);\n const [filter, setFilter] = useState(\"\");\n const treeState =\n useWorkbenchStore(getWorkbenchRenderers(workbench).treeStore, (state) => state.statesByTreeId[treeViewId]) ??\n EMPTY_TREE_STATE;\n const projectId = useWorkbenchStore(workbench.pages.store, (state) => state.projectId);\n const activeLocation = useWorkbenchStore(workbench.pages.store, (state) => state.location);\n const activeResource = useWorkbenchStore(workbench.layout.store, (state) => resolveTreeActiveResource(state.layout));\n const { body, childrenByNodeId, error, footer, header, loading, setChildrenByNodeId } = useTreeData(\n workbench,\n treeViewId,\n resource,\n viewId,\n treeRenderer?.searchable ? filter.trim() || undefined : undefined,\n );\n const [paramsRequest, setParamsRequest] = useState<TreeActionParamsRequest | null>(null);\n\n const adapterContext = {\n workbench,\n onCommandError: onOpenResourceError,\n onRequestParams: setParamsRequest,\n };\n const rawSections = body.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawHeaderSections = header.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawFooterSections = footer.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const {\n visibleHeaderSections,\n visibleSections,\n visibleFooterSections,\n backgroundContextActions,\n customizationRevision,\n onReorderSections,\n onReorderNodes,\n onMoveSection,\n } = useTreeViewCustomization(\n `${treeViewId}:${projectId ?? \"global\"}`,\n {\n headerSections: rawHeaderSections,\n sections: rawSections,\n footerSections: rawFooterSections,\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 = createToggleTreeNode({\n workbench,\n treeViewId,\n resource,\n viewId,\n body,\n header,\n footer,\n childrenByNodeId,\n expandedNodeIds: treeState.expandedNodeIds,\n setChildrenByNodeId,\n });\n\n const toggleSection = (sectionId: string) => {\n const expanded = treeState.expandedSectionIds.includes(sectionId);\n\n getWorkbenchRenderers(workbench).setSectionExpanded(treeViewId, sectionId, !expanded);\n };\n const moveNode = createMoveTreeNode({\n workbench,\n renderer: treeRenderer,\n resource,\n viewId,\n sections: body,\n childrenByNodeId,\n onError: onOpenResourceError,\n });\n\n const navigationContext = { workbench, treeViewId, onOpenResourceError };\n\n const activeNodeSelection = resolveTreeListSelection({\n sections: [...header, ...body, ...footer],\n childrenByNodeId,\n activeNodeId,\n activeLocation,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n const headerActiveNodeId = filterTreeListSelection(header, childrenByNodeId, activeNodeSelection);\n const bodyActiveNodeId = filterTreeListSelection(body, childrenByNodeId, activeNodeSelection);\n const footerActiveNodeId = filterTreeListSelection(footer, childrenByNodeId, activeNodeSelection);\n\n return (\n <TreeListDragProvider\n sections={[...visibleHeaderSections, ...visibleSections, ...visibleFooterSections]}\n canMove={treeRenderer.canMove}\n onReorderSections={onMoveSection}\n onReorderNodes={onReorderNodes}\n >\n <Flex as=\"section\" direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" aria-label={treeRenderer.title}>\n {!loading && visibleHeaderSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleHeaderSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={headerActiveNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"header\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeViewSearch\n visible={!loading && Boolean(treeRenderer.searchable)}\n placeholder={treeRenderer.searchPlaceholder}\n value={filter}\n onChange={setFilter}\n />\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 error={error}\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={(nextSectionIds) => onReorderSections(\"content\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onMoveNode={moveNode}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Box>\n </ScrollArea>\n {!loading && visibleFooterSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleFooterSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={footerActiveNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"footer\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n workbench={workbench}\n onClose={() => setParamsRequest(null)}\n />\n </Flex>\n </TreeListDragProvider>\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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { EmptyState, ScrollArea } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport {\n type CollectionSettingsPanel,\n getWorkbenchRenderers,\n type PreferenceScope,\n type SettingsRegistry,\n type WorkbenchPanelRenderInput,\n} from \"../../core\";\nimport { WorkbenchPreferencesForm } from \"../renderers/settings/preferences-form\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\nexport interface SettingsSurfacePanelProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\nconst Centered = (props: { children: ReactNode }) => (\n <Flex h=\"full\" minH=\"0\" align=\"center\" justify=\"center\" p=\"lg\">\n {props.children}\n </Flex>\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);\nconst SettingsViewContent = (props: { input: WorkbenchPanelRenderInput; panelId: string; viewId: string }) => {\n const { input, panelId, viewId } = props;\n const renderer = useWorkbenchStore(getWorkbenchRenderers(input.workbench).store, (state) => state.renderers[viewId]);\n useWorkbenchStore(getWorkbenchRenderers(input.workbench).store, (state) => state.refreshKeys[viewId] ?? 0);\n if (!renderer) {\n return (\n <Centered>\n <EmptyState title=\"Settings View not found\" />\n </Centered>\n );\n }\n return (\n <ScrollableSettingsContent>\n {renderer.render({ ...input, instance: { ...input.instance, panelId, viewId } }) as ReactNode}\n </ScrollableSettingsContent>\n );\n};\n// Resolve async collection data before rendering its registered View. The View\n// can read the current item from settings by the stable panel and item ids.\nconst CollectionItemView = (props: {\n panel: CollectionSettingsPanel;\n itemId: string;\n input: WorkbenchPanelRenderInput;\n}) => {\n const { panel, itemId, input } = props;\n const resolveCollectionItem = input.workbench.settings.resolveCollectionItem;\n const [state, setState] = useState<{\n status: \"loading\" | \"ready\" | \"missing\";\n }>({\n status: \"loading\",\n });\n useEffect(() => {\n let alive = true;\n setState({ status: \"loading\" });\n resolveCollectionItem(panel.id, itemId).then((item) => {\n if (!alive) return;\n setState(item === undefined ? { status: \"missing\" } : { status: \"ready\" });\n });\n return () => {\n alive = false;\n };\n }, [panel, itemId, resolveCollectionItem]);\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 <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\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 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 if (panel.kind === \"view\") return <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\n if (panel.kind === \"collection\") {\n if (!itemId)\n return (\n <Centered>\n <EmptyState title={panel.title} />\n </Centered>\n );\n return (\n <CollectionItemView\n key={`${resourceKey(resource) ?? itemId}:${revision}`}\n panel={panel}\n itemId={itemId}\n input={input}\n />\n );\n }\n return (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ p: \"lg\", display: \"flex\", flexDirection: \"column\", gap: \"md\" }}>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M/semibold\">{panel.title}</Text>\n {panel.description && (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" maxW=\"640px\">\n {panel.description}\n </Text>\n )}\n </Stack>\n <WorkbenchPreferencesForm\n preferences={input.workbench.preferences}\n names={panel.preferences}\n resolveScopeId={resolveScopeId}\n mode={panel.save ?? \"live\"}\n />\n </ScrollArea>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { PreferenceScope, SettingsRegistry, WorkbenchPanelRenderInput } from \"../../core\";\nimport { WorkbenchTreeView } from \"../renderers/tree/tree-view\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\nexport interface SettingsOverlayProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n navTreeId: string;\n title: string;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\n// The settings surface rendered inside the overlay dialog: a titled header bar,\n// then a full-height resizable nav on the left and the dispatching panel on the\n// right. Nav clicks execute the settings command, which re-opens this singleton\n// overlay with the new resource — selection stays resource-driven and the dialog\n// never closes mid-navigation.\nexport const SettingsOverlay = (props: SettingsOverlayProps) => {\n const { input, settings, navTreeId, title, resolveScopeId } = props;\n useSettingsRevision(settings);\n const resource = input.instance.resource;\n 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={resourceKey(resource)}\n />\n </Box>\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 return (\n <Flex direction=\"column\" position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <Flex\n align=\"center\"\n bg=\"bg.subtle\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n gap=\"2\"\n h=\"12\"\n px=\"3.5\"\n >\n <Box color=\"fg.accent\" display=\"inline-flex\">\n <WorkbenchIcon name=\"settings\" size={16} />\n </Box>\n <Text fontWeight=\"semibold\" textStyle=\"sm\">\n {title}\n </Text>\n </Flex>\n <Box flex=\"1\" minH=\"0\" minW=\"0\" position=\"relative\" overflow=\"hidden\">\n <ResizableSplitLayout\n position=\"absolute\"\n inset=\"0\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"left\"\n resizablePanel={nav}\n contentPanel={content}\n defaultSizePx={280}\n minSizePx={220}\n maxSizePx={420}\n contentMinSizePx={360}\n collapsible={false}\n resizeLabel=\"Resize settings navigation\"\n showResizeSeparator\n />\n </Box>\n </Flex>\n );\n};\n","import type { ResourceRef, SettingsScope } from \"../../core\";\nexport const SETTINGS_RESOURCE_KIND = \"workbench-settings\";\nexport const WORKBENCH_SETTINGS_OPEN_COMMAND_ID = \"workbench.settings.open\";\nexport const settingsPanelResource = (panel: { id: string; title: string; icon?: string }): ResourceRef => ({\n type: SETTINGS_RESOURCE_KIND,\n id: panel.id,\n label: panel.title,\n icon: panel.icon,\n metadata: { panelId: panel.id },\n});\nexport const settingsItemResource = (\n panelId: string,\n item: {\n id: string;\n label: string;\n icon?: string;\n },\n): ResourceRef => ({\n type: SETTINGS_RESOURCE_KIND,\n id: `${panelId}::${item.id}`,\n label: item.label,\n icon: item.icon,\n metadata: { panelId, itemId: item.id },\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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type {\n CollectionSettingsPanel,\n RegisteredSettingsPanel,\n SettingsAction,\n SettingsRegistry,\n TreeAction,\n TreeNode,\n TreeViewSection,\n} from \"../../core\";\nimport {\n isSettingsScopeVisible,\n settingsItemResource,\n settingsPanelResource,\n WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n} from \"./settings-resources\";\nexport const FALLBACK_SECTION_ID = \"settings\";\nconst toTreeActions = (actions: SettingsAction[] | undefined): TreeAction[] | undefined =>\n actions?.map((action) => ({ id: action.id, label: action.label, icon: action.icon, run: action.run }));\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 {\n id: resourceKey(resource),\n label,\n icon,\n resource,\n target: {\n kind: \"command\",\n commandId: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n args: { panelId: panel.id, itemId: id },\n },\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};\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 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 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};\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 const resource = settingsPanelResource(panel);\n return {\n id: resourceKey(resource),\n label: panel.title,\n icon: panel.icon,\n resource,\n target: {\n kind: \"command\",\n commandId: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n args: { panelId: panel.id },\n },\n };\n};\nexport interface BuildSettingsTreeInput {\n settings: SettingsRegistry;\n hasProjectScope: boolean;\n matchesWhen(expression?: string): boolean;\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, matchesWhen } = input;\n const sections = settings.listSections();\n const sectionsById = new Map(sections.map((section) => [section.id, section]));\n const panels = settings\n .listPanels()\n .filter((panel) => isSettingsScopeVisible(panel.scope, hasProjectScope) && matchesWhen(panel.when));\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 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 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 const sectionPanels = bySection.get(sectionId) ?? [];\n const actions = toTreeActions(section?.actions);\n if (sectionPanels.length === 0 && !actions) continue;\n const nodes: TreeNode[] = [];\n for (const panel of sectionPanels) nodes.push(await panelToNode(panel));\n // Settings groups are plain labels, not accordions — the whole tree stays visible.\n result.push({ id: sectionId, label: section?.title, actions, nodes, collapsible: false });\n }\n return result;\n};\n","import {\n type PreferenceScope,\n standardResourceIcons,\n type WorkbenchModuleContext,\n type WorkbenchModuleContribution,\n} from \"../../core\";\nimport { SettingsOverlay } from \"./settings-overlay\";\nimport {\n isSettingsScopeVisible,\n settingsItemResource,\n settingsPanelResource,\n WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n} 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 placement that hosts the whole settings surface.\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 { WORKBENCH_SETTINGS_OPEN_COMMAND_ID } from \"./settings-resources\";\n\nconst WIDGET_ID = WORKBENCH_SETTINGS_WIDGET_ID;\n\nconst openSettings = (input: { args: unknown; ctx: WorkbenchModuleContext; hasProjectScope: () => boolean }) => {\n const { args, ctx, hasProjectScope } = input;\n const requested = args && typeof args === \"object\" ? args : undefined;\n const panelId = requested && \"panelId\" in requested ? requested.panelId : undefined;\n const itemId = requested && \"itemId\" in requested ? requested.itemId : undefined;\n const requestedPanel = typeof panelId === \"string\" ? ctx.settings.getPanel(panelId) : undefined;\n const isVisible = (entry: NonNullable<typeof requestedPanel>) =>\n isSettingsScopeVisible(entry.scope, hasProjectScope()) && ctx.context.matches(entry.when);\n const panel =\n (requestedPanel && isVisible(requestedPanel) ? requestedPanel : undefined) ??\n ctx.settings.listPanels().find(isVisible);\n if (!panel) return undefined;\n const resource =\n panel.kind === \"collection\" && typeof itemId === \"string\"\n ? settingsItemResource(panel.id, { id: itemId, label: itemId })\n : settingsPanelResource(panel);\n ctx.overlays.openOverlay(WIDGET_ID, {\n resource,\n title: resource.label,\n });\n return resource;\n};\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.views.registerView({\n id: WORKBENCH_SETTINGS_NAV_WIDGET_ID,\n title: `${title} navigation`,\n body: {\n kind: \"tree\",\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: () =>\n buildSettingsTreeBody({\n settings: ctx.settings,\n hasProjectScope: hasProjectScope(),\n matchesWhen: (when) => ctx.context.matches(when),\n }),\n getChildren: () => [],\n },\n });\n\n ctx.views.registerView({\n id: WORKBENCH_SETTINGS_PANEL_WIDGET_ID,\n title,\n body: {\n kind: \"react\",\n render: (input) => (\n <SettingsSurfacePanel input={input} settings={ctx.settings} resolveScopeId={options.resolveScopeId} />\n ),\n },\n });\n\n ctx.views.registerView({\n id: WIDGET_ID,\n title,\n body: {\n kind: \"react\",\n render: (input) => (\n <SettingsOverlay\n input={input}\n settings={ctx.settings}\n navTreeId={WORKBENCH_SETTINGS_NAV_WIDGET_ID}\n title={title}\n resolveScopeId={options.resolveScopeId}\n />\n ),\n },\n });\n ctx.overlays.registerOverlay({\n id: WIDGET_ID,\n viewId: WIDGET_ID,\n config: {\n size: \"xl\",\n scrollBehavior: \"inside\",\n contentHeight: \"min(760px, 88vh)\",\n contentMaxWidth: \"min(1440px, 94vw)\",\n contentWidth: \"94vw\",\n closeTriggerTop: \"3.5\",\n // Settings hosts nested overlays (confirmations, popovers) that portal\n // outside this dialog's content; outside-interact dismissal would treat\n // clicks in them as \"close settings\". Esc and the close button remain.\n closeOnInteractOutside: false,\n },\n });\n\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: (args) => openSettings({ args, ctx, hasProjectScope }),\n },\n );\n\n // Keep the tree in sync as contributions register or their context conditions change.\n const refreshNavigation = () => {\n if (ctx.views.getView(WORKBENCH_SETTINGS_NAV_WIDGET_ID)) {\n ctx.views.refreshView(WORKBENCH_SETTINGS_NAV_WIDGET_ID);\n }\n };\n const unsubscribeSettings = ctx.settings.store.subscribe(refreshNavigation);\n const unsubscribeContext = ctx.context.store.subscribe(refreshNavigation);\n return {\n dispose() {\n unsubscribeSettings();\n unsubscribeContext();\n },\n };\n },\n };\n};\n","import type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\nexport const resolvePanelCollapsible = (workbench: WorkbenchCore, ...regions: WorkbenchRegion[]) =>\n regions.every((region) => workbench.layout.getRegionCollapsible(region));\n","interface CanAttachWorkbenchPanelMenuInput {\n panelWidth: number;\n targetMenuMinSize: number;\n attachedMenuMinSizes: readonly number[];\n}\n\nexport const PANEL_CONTENT_MIN_SIZE_PX = 120;\nexport const PANEL_MENU_RESIZE_HANDLE_SIZE_PX = 4;\nexport const PANEL_MENU_COLLAPSE_THRESHOLD_PX = 480;\n\nexport const shouldCollapseWorkbenchPanelMenus = (panelWidth: number) =>\n panelWidth > 0 && panelWidth <= PANEL_MENU_COLLAPSE_THRESHOLD_PX;\n\nexport const canAttachWorkbenchPanelMenu = (input: CanAttachWorkbenchPanelMenuInput) => {\n const menuMinSizes = [...input.attachedMenuMinSizes, input.targetMenuMinSize];\n const requiredWidth =\n PANEL_CONTENT_MIN_SIZE_PX +\n menuMinSizes.reduce((total, size) => total + size, 0) +\n menuMinSizes.length * PANEL_MENU_RESIZE_HANDLE_SIZE_PX;\n\n return input.panelWidth >= requiredWidth;\n};\n","import { Box, HStack, IconButton, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { AttachedMenu, Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout, Tooltip } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelMenuRegion,\n type WorkbenchPanelMenuSide,\n type WorkbenchPanelRegion,\n type WorkbenchRegionSize,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { resolvePanelCollapsible } from \"../workbench/workbench-panel-state\";\nimport {\n canAttachWorkbenchPanelMenu,\n PANEL_CONTENT_MIN_SIZE_PX,\n PANEL_MENU_RESIZE_HANDLE_SIZE_PX,\n shouldCollapseWorkbenchPanelMenus,\n} from \"./panel-menu-sizing\";\n\nconst PANEL_MENU_SIZE = { defaultPx: 280, minPx: 144, maxPx: 320 };\n\nconst panelLabels: Record<WorkbenchPanelRegion, string> = {\n main: \"Main\",\n secondary: \"Secondary\",\n side: \"Side\",\n};\n\nconst resolveRegionSize = (regionSize: WorkbenchRegionSize | undefined) => ({\n defaultPx: regionSize?.defaultPx ?? PANEL_MENU_SIZE.defaultPx,\n minPx: regionSize?.minPx ?? PANEL_MENU_SIZE.minPx,\n maxPx: regionSize ? regionSize.maxPx : PANEL_MENU_SIZE.maxPx,\n});\n\nexport const getWorkbenchPanelMenuLabel = (panel: WorkbenchPanelRegion, side: WorkbenchPanelMenuSide) =>\n `${panelLabels[panel]} ${side} menu`;\n\ninterface WorkbenchPanelMenuView {\n region: WorkbenchPanelMenuRegion;\n side: WorkbenchPanelMenuSide;\n label: string;\n title: string;\n icon: string;\n has: boolean;\n collapsed: boolean;\n responsiveCollapsed: boolean;\n collapsible: boolean;\n size: ReturnType<typeof resolveRegionSize>;\n onOpen: () => void;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nconst useWorkbenchPanelMenu = (\n workbench: WorkbenchCore,\n panel: WorkbenchPanelRegion,\n side: WorkbenchPanelMenuSide,\n responsiveCollapsed = false,\n): WorkbenchPanelMenuView => {\n const region = workbenchPanelMenuRegions[panel][side];\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const currentRegionState = layout.regions[region];\n const activeSubPanel = getActiveWorkbenchSubPanel(layout, panel, locationResource, {\n ignoreOwnerResourceKey: panel === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (panel === \"side\"\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement, {\n location: activeLocationPanel,\n })) &&\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.panelMenuState.store, (state) => state.openByMenuId[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.panelMenuState.setOpen(panelStateKey, true),\n onCollapsedChange: (collapsed) => {\n if (!collapsed || collapsible) workbench.panelMenuState.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 { useShallow } from \"zustand/react/shallow\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\n// Read mode policy through its store so the React compiler sees policy changes.\nexport const useWorkbenchModeRegionSettings = (workbench: WorkbenchCore, region: WorkbenchRegion) =>\n useWorkbenchStore(\n workbench.modes.store,\n useShallow(() => workbench.layout.getRegionSettings(region)),\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 { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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 bubbleIcon?: ReactNode;\n onOpen?: () => void;\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 const settings = useWorkbenchModeRegionSettings(workbench, \"side\");\n const canFloat = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\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 settings?.showHeader !== false && (header || canFloat) ? (\n <Header data-workbench-panel-header=\"side\" variant=\"main\" flexShrink={0} gap=\"sm\">\n <WorkbenchSidePanelHeader header={header} />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"side\" />\n {canFloat ? (\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 ) : null}\n </Header>\n ) : undefined\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, bubbleIcon, onOpen } = props;\n const mode = workbench.sidePanel.getMode();\n\n if (!workbench.sidePanel.canFloat() || 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={onOpen ?? (() => workbench.sidePanel.setMode(\"floating\"))}\n >\n {bubbleIcon ?? <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","export const terminalPlacementBindingId = (scope: string | undefined, instanceId: string) =>\n JSON.stringify([scope, instanceId]);\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\";\nimport { terminalPlacementBindingId } from \"./terminal-placement-binding\";\n\ninterface ControllerTerminalBridgeOptions {\n getBindingId?: () => string | undefined;\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 bindingId: options.getBindingId?.(),\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. Scope changes keep the session alive; the terminal\n * module ends it when its tab is explicitly closed.\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 getBindingId: () =>\n terminalPlacementBindingId(workbench.layout.getPersistenceScope(), placementRef.current.instanceId),\n getResource: () => placementRef.current.resource,\n getTitle: () => placementRef.current.title,\n }),\n );\n const [sessionId, setSessionId] = useState<string>();\n // The terminal resource label follows the session's foreground process name.\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 const updateShellPlacement = workbench.shellPlacements.updatePlacement;\n\n useEffect(() => {\n if (!sessionId || !processTitle) return;\n const currentPlacement = workbench.layout\n .getLayout()\n .regions.secondary.widgets.find((candidate) => candidate.widgetId === placement.instanceId);\n const identity = currentPlacement?.placementIdentity;\n if (identity?.kind === \"shell\" && currentPlacement?.resource) {\n updateShellPlacement(identity, { resource: { ...currentPlacement.resource, label: processTitle } });\n }\n }, [sessionId, processTitle, placement.instanceId, workbench.layout, updateShellPlacement]);\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 killOnUnmount={false}\n onSessionOpen={setSessionId}\n />\n </Box>\n );\n};\n","import type { ResourceRef, WorkbenchCoreContributionContext, WorkbenchModuleContribution } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { terminalPlacementBindingId } from \"./terminal-placement-binding\";\nimport { WorkbenchTerminalPanel } from \"./workbench-terminal-panel\";\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// 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/** Suggested secondary-region size for hosts that mount the terminal (createWorkbench regionSettings). */\nexport const WORKBENCH_TERMINAL_PANEL_SIZE = { defaultPx: 240, minPx: 128 };\ninterface OpenWorkbenchTerminalOptions {\n resource?: ResourceRef;\n reveal?: boolean;\n}\ntype TerminalResource = OpenWorkbenchTerminalOptions[\"resource\"];\nconst terminalInstanceIds = (ctx: WorkbenchCoreContributionContext) =>\n new Set(\n ctx.layout\n .listPanelInstances(\"secondary\")\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.instanceId),\n );\nconst watchClosedTerminalPlacements = (ctx: WorkbenchCoreContributionContext) => {\n // A scope rotation temporarily removes every placement. Only an explicit tab\n // close should end the PTY bound to that placement.\n let changingScope = false;\n const willChangeScope = ctx.layout.onWillChangePersistenceScope(() => {\n changingScope = true;\n });\n const didChangeScope = ctx.layout.onDidChangePersistenceScope(() => {\n changingScope = false;\n });\n const unsubscribeLayout = ctx.layout.store.subscribe((state, previousState) => {\n if (changingScope) return;\n const currentIds = new Set(\n state.layout.regions.secondary.widgets\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.widgetId),\n );\n const previousIds = previousState.layout.regions.secondary.widgets\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.widgetId);\n const scope = ctx.layout.getPersistenceScope();\n for (const instanceId of previousIds) {\n if (!currentIds.has(instanceId)) void ctx.terminal.killBinding(terminalPlacementBindingId(scope, instanceId));\n }\n });\n return {\n dispose() {\n unsubscribeLayout();\n willChangeScope.dispose();\n didChangeScope.dispose();\n const scope = ctx.layout.getPersistenceScope();\n for (const instanceId of terminalInstanceIds(ctx)) {\n void ctx.terminal.killBinding(terminalPlacementBindingId(scope, instanceId));\n }\n },\n };\n};\nconst terminalTitlePattern = /^Terminal (\\d+)$/;\nconst nextTerminalIndexes = new WeakMap<WorkbenchCoreContributionContext[\"layout\"][\"store\"], number>();\nconst getInitialTerminalIndex = (ctx: WorkbenchCoreContributionContext) => {\n const terminalPlacements = ctx.layout\n .getLayout()\n .regions.secondary.widgets.filter((placement) => placement.viewId === 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};\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};\nconst hasWorkspacePath = (resource: TerminalResource) =>\n typeof resource?.metadata?.workspacePath === \"string\" && resource.metadata.workspacePath.length > 0;\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// 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 } = input;\n const workspace = getTerminalResource(ctx, input.resource);\n const title = getNextTerminalTitle(ctx);\n const index = Number.parseInt(terminalTitlePattern.exec(title)?.[1] ?? \"1\", 10);\n const id = `${String(index).padStart(8, \"0\")}-${globalThis.crypto.randomUUID()}`;\n const resource: ResourceRef = {\n type: \"terminal\",\n id,\n label: title,\n icon: \"SquareTerminal\",\n metadata: workspace?.metadata,\n };\n const identity = ctx.shellPlacements.openPlacement({\n placementId: WORKBENCH_TERMINAL_WIDGET_ID,\n resource,\n open: \"pin\",\n title,\n });\n if (identity.kind !== \"shell\") throw new Error(\"Terminal placement must be shell-owned\");\n if (reveal) {\n ctx.shell.setRegionOpen(\"secondary\", true);\n }\n const placement = ctx.layout\n .getLayout()\n .regions.secondary.widgets.find(\n (candidate) =>\n candidate.placementIdentity?.kind === \"shell\" &&\n candidate.placementIdentity.placementId === identity.placementId &&\n candidate.placementIdentity.instanceKey === identity.instanceKey,\n );\n if (!placement) throw new Error(`Terminal placement did not open: ${identity.instanceKey}`);\n return toPanelInstance(placement);\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.views.registerView({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n title: \"Terminal\",\n body: {\n kind: \"react\",\n render: (input) => <WorkbenchTerminalPanel placement={input.instance} workbench={input.workbench} />,\n },\n }),\n ctx.shellPlacements.registerPlacement({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n item: {\n kind: \"binding\",\n binding: {\n kinds: [\n {\n kind: \"resource-kind\",\n id: \"terminal\",\n },\n ],\n view: {\n kind: \"view\",\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n },\n cardinality: \"many\",\n add: { kind: \"command\", target: { command: { kind: \"command\", id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID } } },\n },\n },\n region: \"secondary\",\n mountStrategy: \"keep-mounted\",\n // Background flows mint terminals without user intent; a closed Secondary\n // Panel must stay closed until an explicit open reveals it.\n hiddenByDefault: true,\n }),\n watchClosedTerminalPlacements(ctx),\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID,\n label: \"Open terminal\",\n category: \"Terminal\",\n icon: \"SquareTerminal\",\n },\n { execute: (_args, context) => openWorkbenchTerminal(ctx, { resource: context?.resource }) },\n ),\n ];\n 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 defaultThemePreference?: ThemePreference;\n preferenceScope?: string;\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\n initialPreference={initialThemePreference}\n defaultPreference={props.defaultThemePreference}\n preferenceScope={props.preferenceScope}\n themePreferences={themePreferences}\n >\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 { getWorkbenchRenderers, type WorkbenchCore, type 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 /** Controls dialog semantics. Every workbench overlay blocks background pointer input. */\n modal?: boolean;\n preventScroll?: boolean;\n trapFocus?: boolean;\n motionPreset?: \"scale\" | \"slide-in-bottom\" | \"slide-in-top\" | \"slide-in-left\" | \"slide-in-right\" | \"none\";\n role?: \"dialog\" | \"alertdialog\";\n contentHeight?: string;\n contentMaxHeight?: string;\n contentMinHeight?: string;\n contentWidth?: string;\n contentMaxWidth?: string;\n closeTriggerTop?: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst booleanValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"boolean\" ? value : undefined;\n};\n\nconst resolveOverlayConfig = (config: unknown): WorkbenchOverlayWidgetConfig => {\n if (!isRecord(config)) return {};\n\n const overlayConfig: WorkbenchOverlayWidgetConfig = {};\n const size = stringValue(config, \"size\");\n const placement = stringValue(config, \"placement\");\n const scrollBehavior = stringValue(config, \"scrollBehavior\");\n const closeOnEscape = booleanValue(config, \"closeOnEscape\");\n const closeOnInteractOutside = booleanValue(config, \"closeOnInteractOutside\");\n const modal = booleanValue(config, \"modal\");\n const preventScroll = booleanValue(config, \"preventScroll\");\n const trapFocus = booleanValue(config, \"trapFocus\");\n const motionPreset = stringValue(config, \"motionPreset\");\n const role = stringValue(config, \"role\");\n const contentHeight = stringValue(config, \"contentHeight\");\n const contentMaxHeight = stringValue(config, \"contentMaxHeight\");\n const contentMinHeight = stringValue(config, \"contentMinHeight\");\n const contentWidth = stringValue(config, \"contentWidth\");\n const contentMaxWidth = stringValue(config, \"contentMaxWidth\");\n const closeTriggerTop = stringValue(config, \"closeTriggerTop\");\n\n if (size) overlayConfig.size = size as WorkbenchOverlayWidgetConfig[\"size\"];\n if (placement) overlayConfig.placement = placement as WorkbenchOverlayWidgetConfig[\"placement\"];\n if (scrollBehavior) overlayConfig.scrollBehavior = scrollBehavior as WorkbenchOverlayWidgetConfig[\"scrollBehavior\"];\n if (closeOnEscape !== undefined) overlayConfig.closeOnEscape = closeOnEscape;\n if (closeOnInteractOutside !== undefined) overlayConfig.closeOnInteractOutside = closeOnInteractOutside;\n if (modal !== undefined) overlayConfig.modal = modal;\n if (preventScroll !== undefined) overlayConfig.preventScroll = preventScroll;\n if (trapFocus !== undefined) overlayConfig.trapFocus = trapFocus;\n if (motionPreset) overlayConfig.motionPreset = motionPreset as WorkbenchOverlayWidgetConfig[\"motionPreset\"];\n if (role) overlayConfig.role = role as WorkbenchOverlayWidgetConfig[\"role\"];\n if (contentHeight) overlayConfig.contentHeight = contentHeight;\n if (contentMaxHeight) overlayConfig.contentMaxHeight = contentMaxHeight;\n if (contentMinHeight) overlayConfig.contentMinHeight = contentMinHeight;\n if (contentWidth) overlayConfig.contentWidth = contentWidth;\n if (contentMaxWidth) overlayConfig.contentMaxWidth = contentMaxWidth;\n if (closeTriggerTop) overlayConfig.closeTriggerTop = closeTriggerTop;\n return overlayConfig;\n};\n\nexport const resolveOverlayDialogConfig = (placement: Pick<WorkbenchWidgetPlacement, \"closable\">, config: unknown) => {\n const closeable = placement.closable === true;\n const overlayConfig = resolveOverlayConfig(config);\n\n return {\n size: \"xl\",\n scrollBehavior: \"inside\",\n modal: true,\n preventScroll: true,\n trapFocus: true,\n ...overlayConfig,\n closeOnEscape: closeable && (overlayConfig.closeOnEscape ?? true),\n closeOnInteractOutside: closeable && (overlayConfig.closeOnInteractOutside ?? true),\n } satisfies WorkbenchOverlayWidgetConfig;\n};\n\nconst resolveActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveOverlayDialogRenderState = (\n activePlacement: WorkbenchWidgetPlacement | undefined,\n exitingPlacement: WorkbenchWidgetPlacement | undefined,\n) => {\n if (activePlacement) return { open: true, placement: activePlacement };\n if (exitingPlacement) return { open: false, placement: exitingPlacement };\n return undefined;\n};\n\nconst WorkbenchOverlayFallback = (props: { label: string }) => (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={props.label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n);\n\ninterface WorkbenchOverlayLayerProps {\n workbench: WorkbenchCore;\n}\n\nexport const WorkbenchOverlayLayer = (props: WorkbenchOverlayLayerProps) => {\n const { workbench } = props;\n const overlayRegion = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.overlay);\n const renderers = useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.renderers);\n useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.refreshKeys);\n const [exitingPlacement, setExitingPlacement] = useState<WorkbenchWidgetPlacement | undefined>();\n\n const activePlacement = resolveActivePlacement(overlayRegion.widgets, overlayRegion.activeWidgetId);\n const renderState = resolveOverlayDialogRenderState(activePlacement, exitingPlacement);\n\n useEffect(() => {\n if (activePlacement) setExitingPlacement(undefined);\n }, [activePlacement]);\n\n if (!renderState) return null;\n\n const { open, placement } = renderState;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const overlayConfig = resolveOverlayDialogConfig(placement, widget?.config);\n const {\n contentHeight,\n contentMaxHeight,\n contentMinHeight,\n contentWidth,\n contentMaxWidth,\n closeTriggerTop,\n ...dialogRootConfig\n } = overlayConfig;\n const renderer = widget ? renderers[widget.rendererId] : undefined;\n const canCloseOverlay = open && placement.closable === true;\n const closeLabel = placement.title ?? widget?.title ?? \"overlay\";\n\n const body =\n widget && renderer ? (\n (renderer.render({\n workbench,\n panel: toPanelContribution(widget),\n instance: toPanelInstance(placement),\n refresh: () => undefined,\n }) as ReactNode)\n ) : (\n <WorkbenchOverlayFallback\n label={\n widget ? `No renderer registered for ${widget.rendererId}.` : \"Widget contribution is no longer registered.\"\n }\n />\n );\n\n const handleOpenChange = (details: { open: boolean }) => {\n if (!details.open && canCloseOverlay) {\n setExitingPlacement(placement);\n workbench.layout.closePanel(placement.widgetId);\n }\n };\n\n const handleExitComplete = () => {\n setExitingPlacement((current) => (current?.widgetId === placement.widgetId ? undefined : current));\n };\n\n // Nested overlays (confirmation dialogs, popovers, menus) portal outside this\n // dialog's content, so their clicks register as outside interactions here. If\n // the interaction landed inside any overlay content, it cannot mean \"dismiss\n // the settings dialog\" — the widget's own content never reaches this handler.\n const handleInteractOutside = (event: CustomEvent<{ originalEvent?: Event }>) => {\n const target = event.detail.originalEvent?.target;\n if (target instanceof Element && target.closest('[data-part=\"content\"]')) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog.Root\n {...dialogRootConfig}\n open={open}\n onExitComplete={handleExitComplete}\n onOpenChange={handleOpenChange}\n onInteractOutside={handleInteractOutside}\n >\n <Portal>\n <Dialog.Backdrop position=\"fixed\" inset=\"0\" pointerEvents=\"auto\" />\n <Dialog.Positioner\n position=\"fixed\"\n inset=\"0\"\n overflow={dialogRootConfig.scrollBehavior === \"outside\" ? \"auto\" : \"hidden\"}\n pointerEvents=\"auto\"\n >\n <Dialog.Content\n position=\"relative\"\n overflow=\"hidden\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n h={contentHeight}\n maxH={contentMaxHeight}\n minH={contentMinHeight}\n w={contentWidth}\n maxW={contentMaxWidth}\n >\n {body}\n {canCloseOverlay ? (\n <Dialog.CloseTrigger\n aria-label={`Close ${closeLabel}`}\n alignItems=\"center\"\n borderRadius=\"sm\"\n color=\"fg.muted\"\n cursor=\"pointer\"\n display=\"inline-flex\"\n h=\"5\"\n insetEnd=\"1\"\n justifyContent=\"center\"\n position=\"absolute\"\n top={closeTriggerTop ?? \"1\"}\n w=\"5\"\n zIndex=\"1\"\n _hover={{ bg: \"bg.subtle\", color: \"fg\" }}\n >\n <WorkbenchIcon name=\"x\" size={16} />\n </Dialog.CloseTrigger>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n};\n","import { IconButton } from \"@chakra-ui/react\";\nimport { ResourceActionMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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 if (!resource || actions.length === 0) return null;\n const label = resource.label ?? resource.id ?? resource.type;\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 { ModeChromeView, useModeChrome } from \"../region/mode-chrome\";\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.pageLocations.historyStore, (state) => state);\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={!history.canGoBack}\n onClick={() => workbench.pageLocations.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={!history.canGoForward}\n onClick={() => workbench.pageLocations.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 chrome = useModeChrome(workbench, \"nav\");\n const sidenavControls = regionControls.filter((control) => control.id === \"sidenav\");\n const trailingRegionControls = regionControls.filter((control) => control.id !== \"sidenav\");\n\n if (chrome === false) return null;\n if (chrome)\n return (\n <Header data-workbench-region=\"nav\" variant=\"main\" padding=\"0\" flexShrink={0}>\n <Box flex=\"1\" minW=\"0\" h=\"full\" overflow=\"hidden\">\n <ModeChromeView workbench={workbench} viewId={chrome} region=\"nav\" />\n </Box>\n <WorkbenchRegionControls controls={regionControls} />\n </Header>\n );\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 { ControlValueMap } from \"@pstdio/sdk/extensions\";\nimport type { InputGroup, Param, ParamValue } from \"@pstdio/ui\";\nimport { ParamEditor, ScrollArea } from \"@pstdio/ui\";\nimport { controlValueSchema } from \"pstdio-api-contracts\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getWorkbenchRenderers,\n type RegisteredControlsRendererContribution,\n type WorkbenchCore,\n type WorkbenchPanelInstance,\n} from \"../../../core\";\n\ninterface WorkbenchControlsViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredControlsRendererContribution;\n placement: WorkbenchPanelInstance;\n}\ninterface ControlsViewState {\n params: Param[];\n groups: InputGroup[];\n values: ControlValueMap;\n readOnly: boolean;\n loading: boolean;\n error?: string;\n}\nconst initialState: ControlsViewState = { params: [], groups: [], values: {}, readOnly: false, loading: true };\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 useEffect(() => {\n let cancelled = false;\n setState(initialState);\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve()\n .then(() => contribution.executeQuery(resource))\n .then((result) => {\n if (cancelled || requestRef.current !== requestId) return;\n const values = { ...(contribution.defaultValues ?? {}), ...(result.values ?? {}) };\n const next = {\n params: result.params ?? [],\n groups: result.groups ?? [],\n values,\n readOnly: Boolean(result.readOnly),\n loading: false,\n };\n setState(next);\n })\n .catch((error: unknown) => {\n if (cancelled || requestRef.current !== requestId) return;\n setState({ ...initialState, loading: false, error: error instanceof Error ? error.message : String(error) });\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).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 const readOnly = state.readOnly || (!contribution.updateValue && !contribution.apply);\n const showFooter = !readOnly && (Boolean(contribution.apply) || Boolean(contribution.reset));\n const handleChange = (id: string, input: ParamValue) => {\n const value = controlValueSchema.parse(input);\n // The command runs outside the setState updater: React may invoke updaters\n // twice (StrictMode), which would double-execute the update command.\n const values = { ...state.values, [id]: value };\n if (contribution.updateValue) void contribution.updateValue({ controlId: id, value, values, resource });\n setState((prev) => ({ ...prev, values: { ...prev.values, [id]: value } }));\n };\n 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 <ControlsContent state={state} contribution={contribution} readOnly={readOnly} onChange={handleChange} />\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\ninterface ControlsContentProps {\n state: ControlsViewState;\n contribution: RegisteredControlsRendererContribution;\n readOnly: boolean;\n onChange(id: string, value: ParamValue): void;\n}\nconst ControlsContent = (props: ControlsContentProps) => {\n const { state, contribution, readOnly, onChange } = props;\n if (state.loading)\n return (\n <Box p=\"md\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n Loading…\n </Text>\n </Box>\n );\n if (state.error)\n return (\n <Box p=\"md\">\n <Text role=\"alert\" textStyle=\"paragraph/S/regular\" color=\"fg\">\n {state.error}\n </Text>\n </Box>\n );\n if (state.params.length || state.groups.length)\n return (\n <ParamEditor\n variant=\"small\"\n params={state.params}\n groups={state.groups}\n defaultValues={state.values}\n readOnly={readOnly}\n onChange={onChange}\n />\n );\n return (\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};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, 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 getWorkbenchRenderers(workbench).setControlsRendererImplementation(\n ({ workbench: scope, instance, controlsRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getControlsRenderer(controlsRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchControlsView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, 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 getWorkbenchRenderers(workbench).setDataTableRendererImplementation(\n ({ workbench: scope, instance, dataTableRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getDataTableRenderer(dataTableRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchDataTableView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import { createElement, lazy, Suspense } from \"react\";\nimport { getWorkbenchRenderers, 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\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 getWorkbenchRenderers(workbench).setFileRendererImplementation(({ workbench: scope, instance, fileRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).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","import type { ComponentType, ReactNode } from \"react\";\nimport type {\n AttributeDescriptor,\n AttributesSource,\n BoardColumnConfig,\n KanbanRendererContribution,\n KanbanRendererRow,\n RegisteredKanbanRendererContribution,\n ResourceContextAction,\n} from \"../../../core\";\n\ntype ReactColumnIcon = ComponentType<{ size?: number | string }>;\nexport type ReactAttributeDescriptor = AttributeDescriptor<ReactNode>;\nexport type ReactAttributesSource = AttributesSource<ReactNode>;\nexport type ReactBoardColumnConfig = BoardColumnConfig<ReactColumnIcon>;\nexport type ReactResourceContextAction = ResourceContextAction<ReactNode>;\nexport type ReactKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> =\n KanbanRendererContribution<TRow, ReactNode, ReactColumnIcon>;\n\n// The core stores presentation values without choosing a UI framework, as it\n// does for view.render. Installing the React renderer binds that presentation.\nexport const bindReactKanbanPresentation = (contribution: RegisteredKanbanRendererContribution) =>\n contribution as RegisteredKanbanRendererContribution<KanbanRendererRow, ReactNode, ReactColumnIcon>;\n","export const createKanbanViewQuerySequencer = () => {\n let latestQueryId = 0;\n\n return {\n next: () => {\n latestQueryId += 1;\n return latestQueryId;\n },\n isLatest: (queryId: number) => queryId === latestQueryId,\n };\n};\n\nexport const executeKanbanViewQuery = async <TRow>(executeQuery: () => Promise<TRow[]> | TRow[]) => {\n try {\n return await executeQuery();\n } catch {\n return [];\n }\n};\n","import type { WorkbenchPanelInstance } from \"../../../core\";\n\nconst resolveProjectScope = (placement: WorkbenchPanelInstance, storageScope: string | undefined) => {\n const metadata = placement.resource?.metadata;\n const projectId = metadata?.projectId;\n if (typeof projectId === \"string\") return projectId;\n\n const favoriteScope = metadata?.favoriteScope;\n if (!favoriteScope || typeof favoriteScope !== \"object\" || Array.isArray(favoriteScope)) {\n return storageScope;\n }\n\n const scope = favoriteScope as { scope?: unknown; projectId?: unknown };\n return scope.scope === \"project\" && typeof scope.projectId === \"string\" ? scope.projectId : undefined;\n};\n\nexport const resolveKanbanRendererStorageKey = (\n kanbanRendererId: string,\n placement: WorkbenchPanelInstance,\n storageScope?: string,\n) => {\n const baseKey = `pstdio:workbench:kanbanRenderer:${kanbanRendererId}:${placement.instanceId}`;\n const projectScope = resolveProjectScope(placement, storageScope);\n return projectScope ? `${baseKey}:project:${projectScope}` : baseKey;\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea } from \"@pstdio/ui\";\nimport {\n type AttributeDescriptor,\n type AttributesSource,\n isAttributesSource,\n KanbanRenderer,\n type KanbanRendererRow,\n useKanbanRendererStore,\n} from \"@pstdio/ui/kanban-renderer\";\nimport { type ReactNode, useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport type {\n KanbanRendererQueryState,\n RegisteredKanbanRendererContribution,\n ResourceRef,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport { bindReactKanbanPresentation } from \"./kanban-presentation\";\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\nexport const isKanbanRowResource = (resource: unknown): resource is ResourceRef =>\n Boolean(\n resource &&\n typeof resource === \"object\" &&\n \"type\" in resource &&\n typeof resource.type === \"string\" &&\n \"id\" in resource &&\n typeof resource.id === \"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, placement } = props;\n const contribution = bindReactKanbanPresentation(props.contribution);\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const attributes = useResolvedContributionAttributes(contribution.attributes);\n const storageKey = resolveKanbanRendererStorageKey(contribution.id, placement, contribution.storageScope);\n const initialState = {\n settings: contribution.defaultSettings,\n filters: contribution.defaultFilters,\n views: contribution.defaultViews,\n activeViewId: contribution.defaultActiveViewId,\n };\n\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n\n const [rows, setRows] = useState<KanbanRendererRow[]>([]);\n const querySequencer = useRef(createKanbanViewQuerySequencer());\n\n // Run executeQuery whenever settings/filters change.\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n const queryId = querySequencer.current.next();\n const state: KanbanRendererQueryState = { settings, filters };\n void executeKanbanViewQuery(() => contribution.executeQuery(state)).then((next) => {\n if (cancelled || !querySequencer.current.isLatest(queryId)) return;\n setRows(next);\n });\n };\n runQuery();\n\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshKanbanRenderer((event) => {\n if (event.kanbanRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") {\n subscription();\n } else {\n subscription?.dispose();\n }\n refreshSubscription.dispose();\n };\n }, [contribution, filters, settings, workbench]);\n\n const handleOpenRow = (row: KanbanRendererRow) => {\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n\n const getRowContextMenuActions = (row: KanbanRendererRow) => {\n const resourceActions = isKanbanRowResource(row.resource) ? resolveResourceActions(row.resource) : [];\n const contributionActions = contribution.getRowContextMenuActions?.(row) ?? [];\n return mergeKanbanViewRowActions(resourceActions, contributionActions);\n };\n\n return (\n <WorkbenchKanbanViewFrame usesInternalScroll={settings.viewMode === \"board\"}>\n <KanbanRenderer\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={contribution.defaultSettings}\n defaultFilters={contribution.defaultFilters}\n defaultViews={contribution.defaultViews}\n defaultActiveViewId={contribution.defaultActiveViewId}\n emptyTitle={contribution.emptyTitle}\n emptyDescription={contribution.emptyDescription}\n getBoardColumnConfig={contribution.getBoardColumnConfig}\n hideToolbar={contribution.hideToolbar}\n onRowClick={contribution.onRowActivate ? handleOpenRow : undefined}\n onAttributeChange={contribution.onAttributeChange}\n onReorder={contribution.onReorder}\n createRow={contribution.createRow}\n onCreateRow={contribution.onCreateRow}\n onColumnAction={contribution.onColumnAction}\n getRowContextMenuActions={getRowContextMenuActions}\n />\n </WorkbenchKanbanViewFrame>\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, 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 getWorkbenchRenderers(workbench).setKanbanRendererImplementation(\n ({ workbench: scope, instance, kanbanRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getKanbanRenderer(kanbanRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchKanbanView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import type { ResourceContextAction } from \"@pstdio/ui\";\nimport { createElement } from \"react\";\nimport { getWorkbenchRenderers, 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\nconst isSidenavPlacement = (workbench: WorkbenchCore, instanceId: string) =>\n workbench.layout.getLayout().regions.sidenav.widgets.some((placement) => placement.widgetId === instanceId);\n\nconst viewContextId = (workbench: WorkbenchCore, panelId: string, viewId: string | undefined) => {\n const config = workbench.layout.getPanel(panelId)?.config;\n if (config && typeof config === \"object\" && \"viewContextId\" in config) {\n const candidate = config.viewContextId;\n if (typeof candidate === \"string\") return candidate;\n }\n return viewId;\n};\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 getWorkbenchRenderers(workbench).setTreeRendererImplementation(({ workbench: scope, instance, treeId }) =>\n createElement(WorkbenchTreeView, {\n workbench: scope,\n treeViewId: treeId,\n resource: instance.resource,\n viewId: viewContextId(scope, instance.panelId, instance.viewId),\n renderParamField: installation.renderParamField,\n onSidenavContextActionsChange: isSidenavPlacement(scope, instance.instanceId)\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 getActiveWorkbenchLocationPanel,\n getWorkbenchModePanelForRegion,\n isWorkbenchModePanelAvailable,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n type WorkbenchCore,\n type WorkbenchRegion,\n} from \"../../core\";\nimport { useModeChrome } from \"../region/mode-chrome\";\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 chrome = useModeChrome(workbench, region);\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 (chrome !== undefined) return chrome !== false;\n if (!panelAvailable) return false;\n if (state.placeholders[region]) return true;\n if (!options.locationScoped) return state.layout.regions[region].widgets.length > 0;\n\n return state.layout.regions[region].widgets.some((placement) => {\n const widget = state.widgets[placement.contributionId];\n if (!widget) return false;\n return region === \"side\"\n ? matchesWorkbenchModeEligibility(widget, modeId)\n : isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n location: getActiveWorkbenchLocationPanel(state.layout),\n });\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 } 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.layout.store, (state) => state.layout.regions.secondary.visible);\n\n return {\n has: hasContent || hasHeader || hasPanelHeader,\n hasHeader,\n collapsible,\n collapsed: !open,\n onCollapsedChange: (collapsed: boolean) => {\n if (!collapsed || collapsible) workbench.shell.setRegionOpen(\"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 { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\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 const settings = useWorkbenchModeRegionSettings(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 {settings?.showHeader !== false && (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 { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\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 const settings = useWorkbenchModeRegionSettings(workbench, \"main\");\n\n if (settings?.showHeader === false || (!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 modeSettings = useWorkbenchModeRegionSettings(workbench, \"secondary\");\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 modeSettings?.size ?? 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}\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 { type ResourceContextAction, ResourceContextMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { ModeChromeView, useModeChrome } from \"../region/mode-chrome\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchWidgetHost } from \"../region/widget-host\";\nimport { useWorkbenchActiveModeId } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\n\ninterface WorkbenchSidenavProps {\n workbench: WorkbenchCore;\n contextActions: ResourceContextAction[];\n}\n\nexport const WorkbenchSidenav = (props: WorkbenchSidenavProps) => {\n const { workbench, contextActions } = props;\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 <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\ninterface WorkbenchStatusBarItemsProps {\n workbench: WorkbenchCore;\n slot: \"leading\" | \"trailing\";\n}\n\nconst WorkbenchStatusBarItems = (props: WorkbenchStatusBarItemsProps) => {\n const { slot, workbench } = props;\n const activeModeId = useWorkbenchActiveModeId(workbench);\n const items = activeModeId === workbench.modes.getActiveModeId() ? workbench.statusBar.listVisibleItems(slot) : [];\n\n return items.map((item) => {\n const view = workbench.views.getView(item.viewId);\n if (!view) return null;\n return (\n <Box key={item.id} display=\"flex\" alignItems=\"center\" minW=\"0\" h=\"full\">\n <WorkbenchWidgetHost\n workbench={workbench}\n region=\"status\"\n placement={{\n widgetId: item.id,\n contributionId: view.id,\n viewId: view.id,\n title: view.title,\n closable: false,\n }}\n />\n </Box>\n );\n });\n};\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 useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n const chrome = useModeChrome(workbench, \"status\");\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 {chrome ? (\n <ModeChromeView workbench={workbench} region=\"status\" viewId={chrome} />\n ) : (\n <Box display=\"flex\" alignItems=\"stretch\" justifyContent=\"space-between\" h=\"full\" minW=\"0\" w=\"full\">\n <Box display=\"flex\" alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"leading\" />\n </Box>\n <Box display=\"flex\" alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"trailing\" />\n </Box>\n </Box>\n )}\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 { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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 const persistedSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.side.size);\n const modeSettings = useWorkbenchModeRegionSettings(workbench, \"side\");\n const size = modeSettings?.size ?? workbench.layout.getRegionSize(\"side\");\n const collapsible = modeSettings?.collapsible ?? workbench.layout.getRegionCollapsible(\"side\");\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={persistedSize ?? size?.defaultPx ?? ATTACHED_PANEL_DEFAULT_SIZE_PX}\n minSizePx={size?.minPx ?? ATTACHED_PANEL_MIN_SIZE_PX}\n maxSizePx={size?.maxPx}\n collapsible={collapsible}\n onSizeChange={(width) => workbench.layout.setRegionSize(\"side\", width)}\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 { type ReactNode, useLayoutEffect, useRef, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchShellOpenRegion } 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 { WorkbenchKeybindingDispatcher } from \"../keybindings/workbench-keybinding-dispatcher\";\nimport { WorkbenchNotificationHost } from \"../notifications/notification-host\";\nimport { useModeChrome } from \"../region/mode-chrome\";\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 } 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 /** Host chrome above all workbench regions, inside the current theme. */\n titleBar?: ReactNode;\n renderParamField?: CommandParamFieldRenderer;\n /** Icon shown in the closed Side Panel's bubble launcher. */\n sidePanelBubbleIcon?: ReactNode;\n /** Host action for opening the closed Side Panel from its bubble launcher. */\n onOpenSidePanel?: () => void;\n}\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 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.floatingSlot;\n return input.attachedSlot;\n};\n\nconst useWorkbenchLayoutFlags = (workbench: WorkbenchCore) => {\n const statusChrome = useModeChrome(workbench, \"status\");\n const statusBarItems = useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n const activeModeId = useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n return {\n hasNavWidgets: useWorkbenchRegionContent(workbench, \"nav\"),\n hasActivityBarWidgets: useWorkbenchRegionContent(workbench, \"activity\"),\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:\n statusChrome !== undefined\n ? statusChrome !== false\n : activeModeId === workbench.modes.getActiveModeId() &&\n Object.keys(statusBarItems).length > 0 &&\n workbench.statusBar.listVisibleItems().length > 0,\n };\n};\n\ninterface WorkbenchRegionControlsInput {\n showSidenav: boolean;\n sidenavOpen: boolean;\n showSecondaryPanel: boolean;\n secondaryPanelOpen: boolean;\n hasSidePanel: boolean;\n sidePanelMode: \"attached\" | \"floating\" | \"closed\";\n setPanelOpen: (region: WorkbenchShellOpenRegion, open: boolean) => void;\n}\n\nconst createWorkbenchRegionControls = (input: WorkbenchRegionControlsInput) => {\n const controls: WorkbenchNavRegionControl[] = [];\n\n if (input.showSidenav && !input.sidenavOpen) {\n controls.push({\n id: \"sidenav\",\n label: \"Show Sidenav\",\n icon: \"PanelLeft\",\n open: false,\n onToggle: () => input.setPanelOpen(\"sidenav\", true),\n });\n }\n\n if (input.showSecondaryPanel) {\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 !== \"closed\";\n controls.push({\n id: \"side\",\n label: open ? \"Hide Side Panel\" : \"Show Side Panel\",\n icon: \"PanelRight\",\n open,\n onToggle: () => input.setPanelOpen(\"side\", !open),\n });\n }\n\n return controls;\n};\n\nconst WorkbenchContent = (props: WorkbenchProps) => {\n const { workbench, renderParamField, sidePanelBubbleIcon, onOpenSidePanel, titleBar } = 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(workbench.layout.store, (state) => state.layout.regions.sidenav.visible);\n const secondaryPanelOpen = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.regions.secondary.visible,\n );\n const hasSecondaryPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const hasSidePanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"side\");\n const floatingPanelsAllowed = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n\n const {\n hasActivityBarWidgets,\n hasNavWidgets,\n hasSideHeaderWidgets,\n hasSideWidgets,\n hasSidenavWidgets,\n hasSecondaryHeaderWidgets,\n hasSecondaryWidgets,\n hasStatusWidgets,\n } = useWorkbenchLayoutFlags(workbench);\n const hasSidePanel = hasSideHeaderWidgets || hasSideWidgets || hasSidePanelHeader;\n const showSidenav = hasSidenavWidgets;\n const sidenavCollapsible = resolvePanelCollapsible(workbench, \"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 = workbench.shell.setRegionOpen;\n const regionControls = createWorkbenchRegionControls({\n showSidenav,\n sidenavOpen,\n showSecondaryPanel,\n secondaryPanelOpen,\n hasSidePanel,\n sidePanelMode,\n setPanelOpen,\n });\n\n const sideHeader =\n hasSideHeaderWidgets || hasSidePanelHeader ? (\n <WorkbenchSidePanelRegionHeader workbench={workbench} hasSideHeader={hasSideHeaderWidgets} />\n ) : undefined;\n const activeSidePanelSlot = resolveActiveSidePanelSlot({\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={<WorkbenchSidenav workbench={workbench} contextActions={sidenavContextActions} />}\n contentPanel={contentWithHeader}\n collapsed={!sidenavOpen}\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\", !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 {titleBar}\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 bubbleIcon={sidePanelBubbleIcon}\n onOpen={onOpenSidePanel}\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 </WorkbenchThemeScope>\n );\n};\n\nexport const Workbench = (props: WorkbenchProps) => {\n const themePreferences = useWorkbenchThemePreferences(props.workbench);\n const mode = useWorkbenchStore(props.workbench.modes.store, (state) =>\n state.activeModeId ? state.modes[state.activeModeId] : undefined,\n );\n const fileIconThemePreferences = useWorkbenchFileIconThemePreferences(props.workbench);\n\n return (\n <WorkbenchThemeProvider\n themePreferences={themePreferences}\n fileIconThemePreferences={fileIconThemePreferences}\n defaultThemePreference={mode?.defaultTheme}\n preferenceScope={mode?.defaultTheme ? mode.id : undefined}\n >\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":["getSessionStatus","item","resource","metadata","status","undefined","WorkbenchBreadcrumbIcon","props","$","_c","t0","indicator","type","t1","jsx","SessionIndicator","icon","Text","WorkbenchIcon","WorkbenchBreadcrumbTitle","title","t2","HStack","buildWorkbenchBreadcrumbItems","items","map","url","onClick","WorkbenchBreadcrumbView","workbench","useWorkbenchStore","breadcrumbs","store","_temp","length","Breadcrumb","state","useWorkbenchCompositionPanels","layout","modes","activeModeId","commands","context","main","composition","panelsFor","secondary","side","chakraBackgrounds","activityBar","sidenav","panel","statusBar","vscodeColor","token","fallback","replaceAll","workbenchBackgrounds","widget","workbenchRegionBackgrounds","nav","activity","overlay","workbenchCommandPaletteBackground","getWorkbenchRegionBackground","region","humanize","value","spaced","replace","trim","charAt","toUpperCase","slice","isRecord","Array","isArray","isFileUploadValue","file","id","name","isCommandFilesParamValue","refs","every","ref","uploads","createCommandFilesParamValue","input","commandFilesParamValue","raw","multiple","filter","stringifyEditableValue","String","JSON","stringify","toIdentifierPrefix","_match","char","toLowerCase","metadataString","key","resourceContextValue","entry","metadataValue","resourceKey","resourceType","label","dedupeOptions","options","seen","Set","option","has","add","hasCommandParameters","params","listCommandParamEntries","Object","entries","flatMap","param","resolvedFrom","buildCommandParamInitialValues","baseArgs","base","values","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","workbenchPaletteModes","inputPrefix","isThemePaletteView","view","isPickerPaletteView","getPaletteViewMode","getPaletteViewModes","getPaletteInitialActiveIndex","themeInitialActiveIndex","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","group","results","result","searchText","keywords","join","description","onActivate","Promise","resolve","activate","catch","_temp2","clearTimeout","useEffect","asText","asList","commandParamName","commandParamOptions","JSON_PARAM_TYPES","buildCommandParam","accept","multiSelect","placeholder","searchable","clearable","singleLine","readCommandParamValue","CommandParamField","disabled","onChange","next","nextValue","change","_id","next_0","t3","ParamEditorRow","isFilled","CommandParamsDialog","request","renderParamField","prepareArgs","onRun","setValues","error","setError","submitting","setSubmitting","record","command","args","close","setValue","current","run","preparedArgs","commandId","onArgsChange","nextArgs","caught","message","isValid","Dialog","details","jsxs","event","handleDialogAcceptShortcut","Stack","CloseButton","ScrollArea","px","py","fieldProps","custom","Fragment","Button","submitLabel","getPanelLabel","openPanelWidget","pinned","openCommand","executeCommand","source","widgetResource","resourceKinds","canOpen","openWidget","closable","role","tabRetention","shell","setRegionOpen","sidePanel","getMode","setMode","createWorkbenchPanelWidgetPaletteEntries","panelsByRegion","getPrimaryResource","workbenchPanelRegions","addable","contribution","panelLabel","createResourceEntry","kind","resources","getKind","createWorkbenchResourcePaletteEntries","listResources","getThemeIconName","preference","getThemePreferenceLabel","themePreference","getThemePreferenceEntryIndex","themePreferences","index","findIndex","Math","max","THEME_GROUP_LABELS","light","dark","byModeThenLabel","a","b","localeCompare","createWorkbenchThemePreferencePaletteEntries","setThemePreference","sort","isSelected","rollbackThemePreview","themePreviewRef","preview","baseTheme","getCommandSearchText","category","createShortcutByCommandId","Map","keybindings","listCommandKeybindings","keybinding","getShortcut","binding","PaletteShortcut","getCommandErrorMessage","commandExecutionContext","executePaletteCommand","notifications","show","level","createEntry","action","onRequestParams","shortcutByCommandId","isCommandVisible","shortcut","get","getRecordGroup","getRecordOrder","order","byCommandPaletteGroup","left","right","groupComparison","listCommandRecords","menuPath","listMenuItems","matches","when","getCommand","listCommands","createWorkbenchCommandPaletteEntries","WorkbenchCommandPalette","workbenchCommandPaletteMenuPath","initialQuery","useThemePreference","commandPalette","useRef","paramsRequest","liveQuery","setLiveQuery","commandPaletteResourceEntries","compositionPanels","closePalette","exitPickerView","commitThemePreview","commandEntries","requestParams","resourceEntries","themeEntries","panelWidgetEntries","isThemeView","initialActiveIndex","activeViewMode","activeViewModes","Box","position","inset","alignItems","justifyContent","h","minH","padding","w","background","Palette","themeEntry","ctx","setQuery","setActiveIndex","prepareCommandArgs","clearParams","WorkbenchFocusRegion","boxProps","children","activeRegion","focus","element","contains","document","activeElement","preventScroll","currentTarget","target","setActiveRegion","menuPathKey","path","workbenchResourceMetadataContextKeyPrefix","workbenchResourceMetadataContextKey","isWorkbenchResourceContextKey","workbenchResourceTypeContextKey","workbenchResourceIdContextKey","startsWith","omitWorkbenchResourceContextValues","resolveContextValues","contextValues","createWorkbenchResourceContextValues","listWorkbenchMenuItemsFromState","itemsByPath","leftOrder","rightOrder","byContributionPriority","matchesContextExpression","handler","isVisible","iconSrc","overflowLabel","readOnly","isEnabled","listWorkbenchMenuItems","menuStore","getState","isKernelAction","isOverflowAction","withLeadingSeparator","enabled","first","rest","separatorBefore","resolveOverflowItems","regularItems","kernelItems","resolveWorkbenchHeaderActionGroups","inlineItems","overflowItems","resolveWorkbenchHeaderOverflowLabel","find","WorkbenchInlineHeaderAction","controlSize","onSelect","IconButton","Tooltip","WorkbenchHeaderActions","_temp3","_temp4","T0","t4","t5","t6","bb0","t7","_temp5","t8","item_0","Menu","Portal","item_1","ListRow","state_0","state_1","state_2","getAnchorResource","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","listActiveKeybindings","isCommandEnabled","navigation","openTarget","WorkbenchKeybindingDispatcher","commandContextValues","snapshot","isRegisteredCommandVisible","executeTreeAction","resolvedArgs","runTreeAction","onCommandError","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","createMenuIcon","display","width","height","objectFit","createMenuEndContent","external","isKernelMenuAction","createTreeMenuItemGroups","shortcuts","k","sourceCommandId","endContent","onAction","push","createTreeActionMenuItems","actions","createTreeContextMenuItems","actionItems","visibleRegularItems","createTreeActionItems","tooltip","toResourceContextAction","Icon","isDisabled","createWorkbenchResourceActions","resourceContextMenuPath","useWorkbenchResourceActionResolver","executeNotificationAction","WorkbenchNotificationHost","shownNotificationIds","showNotification","notification","toastAction","toastOptions","onStatusChange","dismiss","toaster","update","create","notification_0","listNotifications","subscription","subscribe","delete","dispose","clear","useWorkbenchLocationResource","pages","useWorkbenchActiveModeId","location","WorkbenchWidgetFallback","Center","WorkbenchRenderedWidgetFrame","noopRefresh","toHostedPanel","placement","contributionId","rendererId","toPanelContribution","WorkbenchWidgetHost","getWidget","viewId","views","getView","getWorkbenchRenderers","renderer","renderers","getRenderer","refreshKeys","instance","toPanelInstance","render","refresh","t9","useModeChrome","chrome","ModeChromeView","widgetId","horizontalScrollRegions","panelMenuRegionIds","workbenchPanelMenuRegions","regions","sidePanelRegionIds","verticalContentProps","flexDirection","horizontalContentProps","getActivePlacement","widgets","activeWidgetId","resolveRenderedRegionPlacements","activePlacement","mountStrategy","resolveRegionPlacementRenderState","active","additive","pointerEvents","visibility","createPlaceholderPlacement","WorkbenchRegionPlacement","globalActiveWidgetId","renderState","overlaysActivePlacement","flex","activatePanel","activatePlacement","WorkbenchRegion","transparent","locationResource","modeId","currentRegionState","registeredWidgets","activeSubPanel","getActiveWorkbenchSubPanel","getWorkbenchPanelForMenuRegion","ignoreOwnerResourceKey","activeLocationPanel","getActiveWorkbenchLocationPanel","regionState","matchesWorkbenchModeEligibility","isWorkbenchPanelPlacementVisible","matchesWorkbenchPanelMenuOwner","locationPanel","subPanel","getPlaceholder","placement_0","renderedPlacements","scrollsHorizontally","Flex","t10","t11","t12","t13","t14","T1","t15","t16","t17","t18","t19","t20","t21","t22","t23","renderedPlacement","t24","t25","WorkbenchPanelAddMenu","panels","triggerRef","openPanel","PANEL_HEADER_CONTROL_SIZE","trigger","getAnchorElement","panel_0","toTabKey","regionId","suppressesSidenavTabStrip","_placements","resolveTabIconName","resourceKindIcon","resourceIcon","resolveDisplayedActiveWidgetId","visiblePlacements","some","isWorkbenchPanelRegion","panelRegion","shouldShowRegionTabs","placements","alwaysShowTabs","shouldShowPanelHeader","hasTabs","hasPanelMenus","hasHeaderActions","isPlacementEligibleForRegion","getActiveModeId","ignoreResourceLocation","getLayout","useWorkbenchRegionTabsState","visibilityStorageKey","layoutState","tabStore","useTabVisibilityStore","subPanelPlacements","tabOverrides","visibleSubPanels","filterVisibleTabs","_temp6","visibleSubPanelIds","eligibleSubPanels","leadingItems","placement_2","workbenchRegionTabLeadingMenuPath","getRegionSettings","showTabs","hasActions","reset","toggleTab","useWorkbenchPanelHeaderVisible","_temp7","menuRegions","menuRegion","useWorkbenchRegionTabsVisible","state_3","placement_1","useTabSnapshot","tab","setVersion","getSnapshot","useRegionTabBehavior","tabSnapshot","nextWidgetId","previousWidgetId","sortable","isPreview","menu","hasCustomMenu","hasContextMenu","sortableState","useSortable","openMenu","setOpenMenu","x","y","anchor","setAnchor","rect","getBoundingClientRect","openTabMenu","event_0","openCustomMenu","event_1","openContextMenu","menu_0","setMenuOpen","event_2","altKey","reorderPanel","beforeWidgetId","afterWidgetId","reorderWithKeyboard","WorkbenchRegionTabMenuSurface","mainAxis","getAnchorRect","offset","WorkbenchRegionTabContextMenu","placementIdentity","pinPlacement","updatePanel","strategy","WorkbenchRegionTabLabel","color","activateTabAction","WorkbenchStructuredTabMenu","groupIndex","rows","row","iconColor","selected","WorkbenchRegionTabCloseButton","isActive","opacity","bg","identity","closePlacement","closePanel","WorkbenchRegionTabMenus","behavior","open_0","WorkbenchRegionTab","labelId","isDragging","listeners","setNodeRef","transform","transition","menuOpen","CSS","Transform","toString","Tabs","version","SortableRegionTabList","leadingActions","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","T2","reorderable","over","activeIndex","overIndex","reorderWidget","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","List","placement_3","reorderableIndex","candidate","resolvePlacementIcon","iconName","WorkbenchRegionTabs","getKey","viewport","setViewport","hiddenByDefault","menuActions","buildTabVisibilityMenuActions","onToggleTab","onResetAll","visibleIcon","hiddenIcon","resetIcon","hasVisibilityMenu","Element","closest","openVisibilityMenu","onWheel","deltaY","scrollWidth","clientWidth","scrollLeft","addEventListener","passive","removeEventListener","onSelectLeadingItem","setRegionActiveWidget","PANEL_HEADER_TAB_SIZE","t26","t27","t28","t29","t30","details_0","t31","Root","resolveDataTableRendererColumns","contributionColumns","columns","firstRow","keys","buildDataTableRendererData","rowByData","WeakMap","data","fromEntries","column","set","resolveDataTableRendererSelectionActions","destructive","rendererRow","resolveDataTableRendererResourceActions","resolveResourceActions","_context","resolveDataTableRendererStorageKey","instanceId","initialResult","lastResults","resultCacheKey","WorkbenchDataTableView","cacheKey","setResult","loading","setLoading","requestRef","runQuery","requestId","executeQuery","refreshSubscription","onDidRefreshDataTableRenderer","dataTableRendererId","model","labels","descriptions","icons","_temp8","stats","_temp9","_temp0","rowActions","selectionActions","data_0","row_0","onRowActivate","_temp1","openRow","_temp10","_temp11","skeletonColumns","DataTableSkeleton","emptyTitle","emptyDescription","EmptyState","data_1","_temp12","_temp13","data_2","data_3","initialPageSize","pageSizeOptions","selectionMode","DataTable","column_0","column_1","column_2","column_3","column_4","column_5","stat","column_6","column_7","column_8","column_9","hidden","column_10","column_11","column_12","BOOLEAN_OPTIONS","at","toOptions","toParam","schema","default","enum","preferenceSchemaToParams","paramValueToPreference","toName","WorkbenchPreferencesForm","preferences","names","resolveScopeId","staged","setStaged","formKey","setFormKey","scope","scopeId","scopeRef","getSchema","getValue","schemaByName","name_0","schema_0","persist","value_0","handleChange","name_1","value_1","save","discard","hasStaged","ParamEditor","key_0","activeNodeIds","ids","uniqueIds","resolveTreeNodeResourceKey","node","listTreeNodes","nodes","childrenByNodeId","listSectionNodes","sections","section","resolveActiveResourceNodeIds","resourceKeys","findSectionNode","nodeId","filterTreeListSelection","selection","pageRefsEqual","extensionId","targetMatchesPage","activePage","activeResource","targets","page","resolveActivePageNodeIds","resolveTreeListSelection","activeNodeId","activeLocation","selectedNodeId","declaredSelection","activeResourceKeys","getWorkbenchSelectionResourceKeys","selectedResourceKey","selectedNode","includes","activeResourceNodeId","activePageNodeId","canVirtualizeTreeNode","inlineInput","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","moveScope","showContextMenuTrigger","canHide","canReorder","canDrag","canDrop","menuPlacement","collapsible","isNavigable","toTreeListSection","emptyNode","TreeParamsDialog","TREE_SKELETON_WIDTHS","TreeViewSkeleton","TreeViewBody","moduleLoading","backgroundContextActions","draggable","customizationAvailable","expandedNodeIds","expandedSectionIds","scrollRef","onToggleSection","onToggleNode","onReorderSections","onReorderNodes","canMove","onMoveNode","onNavigate","TreeList","Skeleton","createMoveTreeNode","moveNode","sourceNodeId","targetNodeId","trees","getTreeState","setSelectedNode","onError","shouldSelectTreeNodeForNavigationTarget","TreeViewSearch","visible","Header","InputGroup","Input","isUnregisteredTreeError","treeId","getTreeRenderer","header","body","footer","loadExpandedTreeChildren","expanded","visited","loadNodes","all","getChildren","shouldShowTreeLoading","loadedTreeId","treeViewId","expandDefaultTreeSections","tree","sectionId","defaultExpandedSectionIds","setSectionExpanded","loadTreeData","getHeader","getBody","getFooter","useTreeData","setHeader","setBody","setFooter","setChildrenByNodeId","loadedTreeIdRef","loadRevisionRef","loadTree","loadRevision","treeStillRegistered","loadError","disposable","onDidRefresh","toStringLabel","isCustomizableNode","visibilityContextIcon","effective","buildNodeVisibilityContextMenuItem","nodeOverrides","resolveVisibility","existingItems","addRegionNodeVisibilityContextMenuItems","changed","addSectionNodeVisibilityContextMenuItems","useTreeViewCustomization","storageKey","sectionOverrides","useTreeListVisibilityStore","toggleSection","toggleNode","resetVisibility","sectionOrder","useTreeListOrderStore","nodeOrderBySection","sectionSlotById","setSectionOrder","setNodeOrder","setSectionSlot","resetOrder","defaultSlotBySectionId","orderedFooterSections","orderedHeaderSections","orderedSections","visibleFooterSections","visibleHeaderSections","visibleSections","footerSections","headerSections","visibilityActions","orderedSectionsBySlot","content","orderedAllSections","applyTreeListOrder","section_2","slot","includeNodeContextMenus","suppressNodeContextMenus","contentSections","filterVisibleSections","buildTreeVisibilityMenuActions","_temp15","_temp17","_temp19","customizationRevision","slot_0","nextSectionIds","idsBySlot","_temp20","_temp21","_temp22","nextSectionIds_0","sourceSectionId","destinationSectionId","destinationSlot","onMoveSection","state_4","state_5","state_6","state_7","state_8","state_9","state_10","section_0","section_1","_temp14","section_3","_temp16","node_0","section_4","_temp18","node_1","section_5","section_6","section_7","section_8","EMPTY_TREE_STATE","resolveActivePlacement","resolveTreeActiveResource","useSidenavContextActions","revision","actionsRef","navigateTreeNode","intent","onOpenResourceError","createToggleTreeNode","setNodeExpanded","WorkbenchTreeView","onSidenavContextActionsChange","treeRenderer","setFilter","treeState","treeStore","statesByTreeId","projectId","setParamsRequest","rawHeaderSections","rawSections","adapterContext","rawFooterSections","navigationContext","bodyActiveNodeId","headerActiveNodeId","activeNodeSelection","footerActiveNodeId","searchPlaceholder","style","overflowX","minWidth","minHeight","nextSectionIds_1","TreeListDragProvider","useSettingsRevision","settings","listener","useSyncExternalStore","Centered","ScrollableSettingsContent","SettingsViewContent","panelId","CollectionItemView","itemId","resolveCollectionItem","setState","alive","Spinner","SettingsSurfacePanel","getPanel","p","gap","SettingsOverlay","navTreeId","ResizableSplitLayout","SETTINGS_RESOURCE_KIND","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","settingsPanelResource","settingsItemResource","isSettingsScopeVisible","hasProjectScope","FALLBACK_SECTION_ID","toTreeActions","collectionItemNode","itemLabel","itemIcon","orderGroupKeys","indexOf","POSITIVE_INFINITY","collectionChildren","groupBy","byKey","list","panelToNode","buildSettingsTreeBody","matchesWhen","listSections","sectionsById","listPanels","bySection","renderOrder","sectionPanels","WORKBENCH_SETTINGS_WIDGET_ID","WORKBENCH_SETTINGS_NAV_WIDGET_ID","WORKBENCH_SETTINGS_PANEL_WIDGET_ID","WIDGET_ID","openSettings","requested","requestedPanel","overlays","openOverlay","createWorkbenchSettingsModule","registerView","registerOverlay","config","size","scrollBehavior","contentHeight","contentMaxWidth","contentWidth","closeTriggerTop","closeOnInteractOutside","registerCommand","standardResourceIcons","refreshNavigation","refreshView","unsubscribeSettings","unsubscribeContext","resolvePanelCollapsible","getRegionCollapsible","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","openByMenuId","panelMenuState","getRegionSize","setOpen","collapsed","onOpen","onCollapsedChange","WorkbenchPanelMenu","AttachedMenu","addPanelMenu","setRegionSize","WorkbenchPanelMenuLayout","useWorkbenchPanelWidth","withRight","setWidth","querySelector","measure","observer","ResizeObserver","observe","disconnect","WorkbenchPanelMenuOpener","canAttach","WorkbenchPanelMenuOpeners","closedMenus","view_0","candidate_0","useWorkbenchModeRegionSettings","useShallow","floatingPanelBottom","bottomOffset","launcherBottom","WorkbenchSidePanelTitle","WorkbenchSidePanelHeader","WorkbenchAttachedSidePanel","contentSlotRef","canFloat","showHeader","Minimize2","AttachedPanel","WorkbenchFloatingSidePanel","bubbleIcon","bottom","MessageCircle","BubbleButton","BubblePanel","terminalPlacementBindingId","workspacePathFromResource","workspacePath","withTerminalRequestDefaults","cwd","createControllerTerminalBridge","terminal","openSession","sessionId","bindingId","getBindingId","getResource","getTitle","write","resize","cols","kill","signal","onData","onExit","WorkbenchTerminalPanel","placementRef","bridge","getPersistenceScope","setSessionId","processTitle","sessionsById","updateShellPlacement","shellPlacements","updatePlacement","currentPlacement","isAvailable","test","WORKBENCH_TERMINAL_WIDGET_ID","WORKBENCH_TERMINAL_OPEN_COMMAND_ID","WORKBENCH_TERMINAL_PANEL_SIZE","terminalInstanceIds","listPanelInstances","watchClosedTerminalPlacements","changingScope","willChangeScope","onWillChangePersistenceScope","didChangeScope","onDidChangePersistenceScope","unsubscribeLayout","previousState","currentIds","previousIds","killBinding","terminalTitlePattern","nextTerminalIndexes","getInitialTerminalIndex","terminalPlacements","titleIndexes","exec","parseInt","getNextTerminalTitle","nextIndex","hasWorkspacePath","getTerminalResource","getActiveResource","primaryResource","openWorkbenchTerminal","reveal","workspace","padStart","globalThis","crypto","randomUUID","openPlacement","placementId","instanceKey","createWorkbenchTerminalModule","registerPlacement","kinds","cardinality","_args","useWorkbenchThemePreferences","contributed","themes","defaultThemePreferences","WorkbenchThemeProviderContext","createContext","WorkbenchThemeProvider","initialThemePreference","fileIconThemePreferences","useContext","ChakraProvider","psTheme","FileIconThemePreferenceProvider","defaultThemePreference","preferenceScope","ThemePreferenceProvider","WorkbenchThemeScope","stringValue","booleanValue","resolveOverlayConfig","overlayConfig","closeOnEscape","modal","trapFocus","motionPreset","contentMaxHeight","contentMinHeight","resolveOverlayDialogConfig","closeable","resolveOverlayDialogRenderState","exitingPlacement","WorkbenchOverlayFallback","WorkbenchOverlayLayer","overlayRegion","setExitingPlacement","dialogRootConfig","canCloseOverlay","closeLabel","handleOpenChange","handleExitComplete","handleInteractOutside","detail","originalEvent","WorkbenchBreadcrumbResourceActions","resolveActions","ResourceActionMenu","WorkbenchRegionControl","onToggle","WorkbenchNavigationControls","regionControls","history","pageLocations","historyStore","canGoBack","goBack","canGoForward","goForward","WorkbenchRegionControls","controls","WorkbenchNavChrome","hasNav","sidenavControls","trailingRegionControls","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","control_0","initialState","WorkbenchControlsView","defaultValues","onDidRefreshControlsRenderer","controlsRendererId","updateValue","apply","showFooter","controlValueSchema","values_0","controlId","prev","ControlsContent","installed","WeakSet","installWorkbenchControlsRenderer","setControlsRendererImplementation","getControlsRenderer","createElement","installWorkbenchDataTableRenderer","setDataTableRendererImplementation","getDataTableRenderer","loadWorkbenchFileRendererView","module","WorkbenchFileRendererView","lazy","installWorkbenchFileRenderer","setFileRendererImplementation","fileRendererId","getFileRenderer","Suspense","bindReactKanbanPresentation","createKanbanViewQuerySequencer","latestQueryId","isLatest","queryId","executeKanbanViewQuery","resolveProjectScope","storageScope","favoriteScope","resolveKanbanRendererStorageKey","kanbanRendererId","baseKey","projectScope","kanbanViewScrollContentProps","WorkbenchKanbanViewFrame","usesInternalScroll","noopSubscribe","isKanbanRowResource","useResolvedContributionAttributes","attributes","isAttributesSource","mergeKanbanViewRowActions","resourceActions","contributionActions","resourceActionKeys","resourceCommandIds","WorkbenchKanbanView","defaultActiveViewId","defaultFilters","defaultSettings","defaultViews","filters","activeViewId","useKanbanRendererStore","setRows","querySequencer","onDidRefreshKanbanRenderer","handleOpenRow","getRowContextMenuActions","viewMode","createRow","getBoardColumnConfig","hideToolbar","onAttributeChange","onColumnAction","onCreateRow","onReorder","KanbanRenderer","installWorkbenchKanbanRenderer","setKanbanRendererImplementation","getKanbanRenderer","isSidenavPlacement","viewContextId","installWorkbenchTreeRenderer","installation","setTreeRendererImplementation","useWorkbenchFileIconThemePreferences","fileIconThemes","useWorkbenchRegionContent","modePanel","getWorkbenchModePanelForRegion","isWorkbenchModePanelAvailable","panelAvailable","placeholders","locationScoped","WorkbenchHeaderBorder","getRegionHeaderBorderBottom","useSecondaryPanelView","hasContent","hasHeader","hasPanelHeader","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","WorkbenchSecondaryPanel","hasSecondaryHeader","SECONDARY_PANEL_SIZE","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","SECONDARY_PANEL_RESIZE_HANDLE_SIZE_PX","mainHeaderTrailingMenuPath","headerTrailingMenuPath","persistedSize","MainHeaderBar","hasMainContentTabs","WorkbenchBody","modeSettings","persistedSecondarySize","secondaryPanelSize","mainRegion","mainPanelWithMenus","Grid","mainContent","WorkbenchSidenav","contextActions","ResourceContextMenu","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchStatusBarItems","listVisibleItems","WorkbenchActivityBar","WorkbenchStatusBar","ATTACHED_PANEL_DEFAULT_SIZE_PX","ATTACHED_PANEL_MIN_SIZE_PX","WorkbenchSidePanelRegionPortal","hasSidePanel","mounted","sidePanelHost","createPortal","WorkbenchSidePanelRegionHeader","hasSideHeader","WorkbenchAttachedSidePanelLayout","attached","contentPanel","contentMinSizePx","onAttachedSlotChange","onCollapse","interactivePointerTargetSelector","hasClosest","shouldFocusWorkbenchKeyboardFrame","focusWorkbenchKeyboardFrame","WorkbenchKeyboardFrame","useLayoutEffect","WorkbenchSidePanelBoundary","showAttachedSidePanel","contentFrame","sideHeader","SIDENAV_DEFAULT_SIZE_PX","SIDENAV_MIN_SIZE_PX","CONTENT_MIN_SIZE_PX","resolveSidenavSize","createSidePanelHost","host","dataset","workbenchSidePanelHost","resolveActiveSidePanelSlot","floatingSlot","attachedSlot","useWorkbenchLayoutFlags","statusChrome","statusBarItems","hasNavWidgets","hasActivityBarWidgets","hasSidenavWidgets","hasSecondaryHeaderWidgets","hasSecondaryWidgets","hasSideHeaderWidgets","hasSideWidgets","hasStatusWidgets","createWorkbenchRegionControls","showSidenav","sidenavOpen","setPanelOpen","showSecondaryPanel","secondaryPanelOpen","sidePanelMode","WorkbenchContent","sidePanelBubbleIcon","onOpenSidePanel","titleBar","sidenavContextActions","setSidenavContextActions","attachedSidePanelSlot","setAttachedSidePanelSlot","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","paletteOpen","paletteInitialQuery","hasSecondaryPanelHeader","hasSidePanelHeader","floatingPanelsAllowed","sidenavCollapsible","persistedSidenavSize","sidenavSize","mountSidePanel","activeSidePanelSlot","parentNode","appendChild","removeChild","contentWithHeader","contentWithSidenav","Workbench","defaultTheme","Toaster","disposeWorkbenchModuleHostRegistrations","syncWorkbenchModuleHostRegistrations","modules","moduleIds","registerModule","WorkbenchModuleHost","registeredWorkbench"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../src/react/breadcrumb/breadcrumb-view.tsx","../src/react/shared/use-workbench-composition-panels.ts","../src/react/theme/workbench-theme-background.ts","../src/react/command-palette/command-palette-params.ts","../src/react/command-palette/palette-view.tsx","../src/react/command-palette/command-palette-resources.tsx","../src/react/command-palette/command-param-descriptors.ts","../src/react/command-palette/command-param-field.tsx","../src/react/command-palette/command-params-dialog.tsx","../src/react/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/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/mode-chrome.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-params-dialog.tsx","../src/react/renderers/tree/tree-view-body.tsx","../src/react/renderers/tree/tree-view-move.ts","../src/react/renderers/tree/tree-view-navigation.ts","../src/react/renderers/tree/tree-view-search.tsx","../src/react/renderers/tree/tree-view-load.ts","../src/react/renderers/tree/use-tree-data.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/shared/use-workbench-mode-region-settings.ts","../src/react/side-panel/side-panel.tsx","../src/react/terminal/terminal-placement-binding.ts","../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-presentation.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 { 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}\nconst getSessionStatus = (item: WorkbenchBreadcrumbItem) =>\n typeof item.resource?.metadata?.status === \"string\"\n ? (item.resource.metadata.status as SessionCompletionStatus)\n : undefined;\nconst WorkbenchBreadcrumbIcon = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const status = getSessionStatus(item);\n if (item.indicator === \"session-status\" || item.resource?.type === \"session\") {\n return <SessionIndicator status={status} boxSize=\"14px\" />;\n }\n if (!item.icon) return null;\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};\nconst WorkbenchBreadcrumbTitle = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const title = item.title as ReactNode;\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};\nexport const buildWorkbenchBreadcrumbItems = (items: WorkbenchBreadcrumbItem[] | undefined) =>\n (items ?? []).map((item) => ({\n title: <WorkbenchBreadcrumbTitle item={item} />,\n url: item.url,\n onClick: item.onClick,\n }));\nexport const WorkbenchBreadcrumbView = (props: WorkbenchBreadcrumbViewProps) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n if (items.length === 0) return null;\n return (\n <Breadcrumb items={buildWorkbenchBreadcrumbItems(items)} separator=\"/\" separatorGap=\"xs\" display=\"flex\" h=\"full\" />\n );\n};\n","import type { WorkbenchCompositionRegionPanels, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport type WorkbenchCompositionPanelsByRegion = Record<WorkbenchPanelRegion, WorkbenchCompositionRegionPanels>;\n\nexport const useWorkbenchCompositionPanels = (workbench: WorkbenchCore): WorkbenchCompositionPanelsByRegion => {\n \"use no memo\";\n\n useWorkbenchStore(workbench.layout.store, (state) => state);\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n useWorkbenchStore(workbench.commands.store, (state) => state);\n useWorkbenchStore(workbench.context.store, (state) => state);\n\n return {\n main: workbench.composition.panelsFor(\"main\"),\n secondary: workbench.composition.panelsFor(\"secondary\"),\n side: workbench.composition.panelsFor(\"side\"),\n };\n};\n","import type { WorkbenchRegion } from \"../../core\";\n\nconst chakraBackgrounds = {\n sidenav: \"var(--chakra-colors-bg-subtle)\",\n main: \"var(--chakra-colors-bg)\",\n panel: \"var(--chakra-colors-bg-panel)\",\n} as const;\n\nconst vscodeColor = (token: string, fallback: string) =>\n `var(--chakra-colors-vscode-${token.replaceAll(\".\", \"-\")}, ${fallback})`;\n\nexport const workbenchBackgrounds = {\n sidenav: vscodeColor(\"sideBar.background\", chakraBackgrounds.sidenav),\n main: vscodeColor(\"editor.background\", chakraBackgrounds.main),\n panel: vscodeColor(\"panel.background\", chakraBackgrounds.panel),\n widget: vscodeColor(\"editorWidget.background\", vscodeColor(\"panel.background\", chakraBackgrounds.panel)),\n} as const;\n\nconst workbenchRegionBackgrounds = {\n nav: workbenchBackgrounds.main,\n activity: workbenchBackgrounds.main,\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.main,\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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { FileUploadValue } from \"@pstdio/ui\";\nimport type { CommandParamDescriptor, CommandParamSchema, WorkbenchCommandExecutionContext } from \"../../core\";\nexport interface CommandFilesParamValue {\n refs: string[];\n uploads: FileUploadValue[];\n}\nexport type CommandParamValue = string | boolean | string[] | CommandFilesParamValue | undefined;\nexport interface CommandParamEntry extends CommandParamDescriptor {\n key: string;\n label: string;\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};\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nexport const isFileUploadValue = (value: unknown): value is FileUploadValue => {\n if (!isRecord(value) || !isRecord(value.file)) return false;\n return typeof value.id === \"string\" && typeof value.file.name === \"string\" && typeof value.status === \"string\";\n};\nexport const isCommandFilesParamValue = (value: unknown): value is CommandFilesParamValue =>\n isRecord(value) &&\n Array.isArray(value.refs) &&\n value.refs.every((ref) => typeof ref === \"string\") &&\n Array.isArray(value.uploads) &&\n value.uploads.every(isFileUploadValue);\nexport const createCommandFilesParamValue = (input: Partial<CommandFilesParamValue> = {}): CommandFilesParamValue => ({\n refs: [...(input.refs ?? [])],\n uploads: [...(input.uploads ?? [])],\n});\nconst commandFilesParamValue = (raw: unknown, multiple: boolean | undefined) => {\n const value = isCommandFilesParamValue(raw)\n ? createCommandFilesParamValue(raw)\n : createCommandFilesParamValue({\n refs: Array.isArray(raw) ? raw.filter((item): item is string => typeof item === \"string\") : [],\n uploads: Array.isArray(raw) ? raw.filter(isFileUploadValue) : [],\n });\n if (multiple !== false) return value;\n if (value.uploads[0]) return createCommandFilesParamValue({ uploads: [value.uploads[0]] });\n return createCommandFilesParamValue({ refs: value.refs.slice(0, 1) });\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};\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());\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};\nconst resourceContextValue = (entry: CommandParamEntry, context: WorkbenchCommandExecutionContext | undefined) => {\n const resource = context?.resource;\n if (!resource) return undefined;\n const metadataValue = metadataString(resource.metadata, entry.key);\n if (metadataValue !== undefined) return metadataValue;\n if (entry.key === `${toIdentifierPrefix(resource.type)}Id`) return resource.id ?? resourceKey(resource);\n if (entry.type === \"resource\" && (!entry.resourceType || entry.resourceType === resource.type)) {\n return {\n type: resource.type,\n id: resource.id ?? resourceKey(resource),\n ...(resource.label ? { label: resource.label } : {}),\n ...(resource.metadata ? { metadata: resource.metadata } : {}),\n };\n }\n return undefined;\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};\nexport const hasCommandParameters = (params: CommandParamSchema | undefined) =>\n listCommandParamEntries(params).length > 0;\nexport const listCommandParamEntries = (params: CommandParamSchema | undefined): CommandParamEntry[] =>\n Object.entries(params ?? {}).flatMap(([key, param]) =>\n param.resolvedFrom === \"resource\"\n ? []\n : [\n {\n ...param,\n options: dedupeOptions(param.options),\n key,\n label: param.label ?? humanize(key),\n },\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 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 === \"files\") {\n values[entry.key] = commandFilesParamValue(raw, entry.multiple);\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 return values;\n};\nconst isEmptyValue = (value: CommandParamValue) => {\n if (isCommandFilesParamValue(value)) return value.refs.length === 0 && value.uploads.length === 0;\n return 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};\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 === \"files\") return isCommandFilesParamValue(value) ? value : createCommandFilesParamValue();\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};\nexport const normalizeCommandParamValues = (\n params: CommandParamSchema | undefined,\n values: Record<string, CommandParamValue>,\n) => {\n const normalized: Record<string, unknown> = {};\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 return normalized;\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\";\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 isPickerPaletteView = isThemePaletteView;\n\nexport const getPaletteViewMode = (view: WorkbenchCommandPaletteView) => {\n if (isThemePaletteView(view)) return THEME_MODE_ID;\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}) => {\n if (isThemePaletteView(input.view)) return input.themeInitialActiveIndex;\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 (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 (input.mode === COMMAND_MODE_ID) return \"Run command\";\n\n return \"Search resources\";\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\n\nconst RESOURCE_QUERY_LIMIT = 25;\nconst RESOURCE_QUERY_DEBOUNCE_MS = 150;\n\ninterface UseWorkbenchCommandPaletteResourceEntriesInput {\n workbench: WorkbenchCore;\n query: string;\n open: boolean;\n onClose: () => void;\n}\n\n// Fetches extension-provided palette results for the live query (debounced) and maps\n// them to search-mode palette entries. Provider errors are isolated by the registry, so\n// one failing provider never blanks the palette.\nexport const useWorkbenchCommandPaletteResourceEntries = (input: UseWorkbenchCommandPaletteResourceEntriesInput) => {\n const { workbench, query, open, onClose } = input;\n const refreshToken = useWorkbenchStore(workbench.commandPaletteResources.store, (state) => state.refreshToken);\n const [entries, setEntries] = useState<PaletteEntry[]>([]);\n\n useEffect(() => {\n if (!open) {\n setEntries([]);\n return;\n }\n\n // Read so an explicit registry refresh (refreshToken bump) re-runs this query.\n void refreshToken;\n let cancelled = false;\n const handle = setTimeout(() => {\n void workbench.commandPaletteResources.queryProviders({ query, limit: RESOURCE_QUERY_LIMIT }).then((groups) => {\n if (cancelled) return;\n setEntries(\n groups.flatMap((group) =>\n group.results.map((result) => ({\n id: `workbench-command-palette-resource:${result.id}`,\n mode: SEARCH_MODE_ID,\n label: result.label,\n searchText: `${query} ${result.label} ${(result.keywords ?? []).join(\" \")}`.trim(),\n description: result.description,\n group: result.group ?? group.title,\n icon: result.icon ? <WorkbenchIcon name={result.icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(result.activate()).catch(() => undefined);\n },\n })),\n ),\n );\n });\n }, RESOURCE_QUERY_DEBOUNCE_MS);\n\n return () => {\n cancelled = true;\n clearTimeout(handle);\n };\n }, [workbench, query, open, refreshToken, onClose]);\n\n return entries;\n};\n","import type { Param, ParamValue, SelectionOption } from \"@pstdio/ui\";\nimport {\n type CommandParamEntry,\n type CommandParamValue,\n createCommandFilesParamValue,\n isCommandFilesParamValue,\n isFileUploadValue,\n} from \"./command-palette-params\";\n\nconst asText = (value: CommandParamValue) => (typeof value === \"string\" ? value : \"\");\n\nconst asList = (value: CommandParamValue) => (Array.isArray(value) ? value : []);\n\n/** Required params carry the marker in their name — the editor has no required state. */\nexport const commandParamName = (entry: CommandParamEntry) => `${entry.label}${entry.required ? \" *\" : \"\"}`;\n\nconst commandParamOptions = (entry: CommandParamEntry): SelectionOption[] =>\n (entry.options ?? []).map((option) => ({ id: option.value, name: option.label, icon: option.icon }));\n\n// Structured params (harness, repo, template) are normally rendered by the host,\n// which knows how to fetch their options. Without a host renderer they fall back\n// to the JSON they are serialized as, so the command can still be run.\nconst JSON_PARAM_TYPES = new Set([\"json\", \"resource\", \"repo\", \"harness\"]);\n\n/**\n * Maps a declared command param onto the design-system control that owns that\n * kind of input, so a command dialog is built from the same rows as every other\n * param surface rather than from hand-rolled fields.\n */\nexport const buildCommandParam = (entry: CommandParamEntry, value: CommandParamValue): Param => {\n const base = { id: entry.key, name: commandParamName(entry), description: entry.description };\n\n if (entry.type === \"boolean\") return { ...base, type: \"boolean\", defaultValue: value === true };\n\n if (entry.type === \"number\") return { ...base, type: \"number\", defaultValue: Number(asText(value)) };\n\n if (entry.type === \"markdown\") return { ...base, type: \"markdown\", defaultValue: asText(value) };\n\n if (entry.type === \"files\") {\n return {\n ...base,\n type: \"fileUpload\",\n defaultValue: isCommandFilesParamValue(value) ? value.uploads : [],\n accept: entry.accept,\n multiple: entry.multiple,\n };\n }\n\n if (entry.type === \"multi-select\") {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asList(value),\n options: commandParamOptions(entry),\n multiSelect: true,\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: (entry.options?.length ?? 0) > 5,\n };\n }\n\n if ((entry.type === \"select\" || entry.type === \"template\") && entry.options?.length) {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asText(value),\n options: commandParamOptions(entry),\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: entry.options.length > 5,\n clearable: !entry.required,\n };\n }\n\n if (entry.type === \"longtext\" || JSON_PARAM_TYPES.has(entry.type)) {\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: false };\n }\n\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: true };\n};\n\n/** Narrows an editor value back to what a command param can carry. */\nexport const readCommandParamValue = (value: ParamValue, entry?: CommandParamEntry): CommandParamValue => {\n if (typeof value === \"boolean\") return value;\n if (entry?.type === \"files\") {\n return createCommandFilesParamValue({ uploads: Array.isArray(value) ? value.filter(isFileUploadValue) : [] });\n }\n if (Array.isArray(value)) return value.map(String);\n return String(value ?? \"\");\n};\n","import { ParamEditorRow } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCommandExecutionContext } from \"../../core\";\nimport { type CommandParamEntry, type CommandParamValue, isCommandFilesParamValue } from \"./command-palette-params\";\nimport { buildCommandParam, readCommandParamValue } from \"./command-param-descriptors\";\n\nexport interface CommandParamFieldProps {\n entry: CommandParamEntry;\n value: CommandParamValue;\n context?: WorkbenchCommandExecutionContext;\n disabled: boolean;\n onChange: (value: CommandParamValue) => void;\n}\n\n// Lets the host supply field UI for param types the workbench cannot render on its\n// own (e.g. harness/repo selectors backed by host data). Returning a falsy value\n// defers to the built-in field for that entry.\nexport type CommandParamFieldRenderer = (props: CommandParamFieldProps) => ReactNode;\n\nexport const CommandParamField = (props: Omit<CommandParamFieldProps, \"context\">) => {\n const { entry, value, disabled, onChange } = props;\n\n const change = (next: Parameters<typeof readCommandParamValue>[0]) => {\n const nextValue = readCommandParamValue(next, entry);\n if (entry.type !== \"files\" || !isCommandFilesParamValue(value) || !isCommandFilesParamValue(nextValue)) {\n onChange(nextValue);\n return;\n }\n\n const refs = entry.multiple === false && nextValue.uploads.length > 0 ? [] : value.refs;\n onChange({ ...nextValue, refs });\n };\n\n return (\n <ParamEditorRow\n param={buildCommandParam(entry, value)}\n readOnly={disabled}\n onChange={(_id, next) => change(next)}\n />\n );\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { handleDialogAcceptShortcut, ScrollArea } from \"@pstdio/ui\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport type { Command, RegisteredMenuItem, WorkbenchCommandExecutionContext } from \"../../core\";\nimport {\n buildCommandParamInitialValues,\n type CommandParamEntry,\n type CommandParamValue,\n isCommandFilesParamValue,\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 prepareArgs?: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n onArgsChange: (args: unknown) => void;\n }) => Promise<unknown>;\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 (isCommandFilesParamValue(value)) return value.refs.length + value.uploads.length > 0;\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, prepareArgs, 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 const args = mergeCommandParamArgs(request.args, params);\n const preparedArgs = prepareArgs\n ? await prepareArgs({\n commandId: request.record.command.id,\n args,\n context: request.context,\n onArgsChange: (nextArgs) =>\n setValues(buildCommandParamInitialValues(request.record.command.params, nextArgs, request.context)),\n })\n : args;\n await onRun({\n commandId: request.record.command.id,\n args: preparedArgs,\n context: request.context,\n label: request.label,\n });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : \"Command failed.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n const isValid = entries.every((entry) => !entry.required || isFilled(entry, values[entry.key]));\n\n return (\n <Dialog.Root\n open={request !== null}\n size=\"lg\"\n scrollBehavior=\"inside\"\n onOpenChange={(details) => !details.open && close()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content\n display=\"flex\"\n flexDirection=\"column\"\n maxH=\"calc(100% - 48px)\"\n onKeyDownCapture={(event) => handleDialogAcceptShortcut(event, () => void run(), isValid && !submitting)}\n >\n <Dialog.Header>\n <Stack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"heading/M/semibold\">{request?.label ?? \"Run command\"}</Text>\n {request?.record.command.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\" truncate>\n {request.record.command.description}\n </Text>\n ) : null}\n </Stack>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body flex=\"1\" minH=\"0\" p=\"0\">\n <ScrollArea h=\"full\" contentProps={{ px: \"sm\", py: \"md\" }}>\n {/* Fields carry the param editor's own row padding, so the form is a\n flush stack of rows rather than rows spaced twice over. */}\n <Stack gap=\"0\">\n {entries.map((entry) => {\n const fieldProps = {\n entry,\n value: values[entry.key],\n disabled: submitting,\n onChange: (value: CommandParamValue) => setValue(entry.key, value),\n };\n const custom = renderParamField?.({ ...fieldProps, context: request?.context });\n return <Fragment key={entry.key}>{custom ?? <CommandParamField {...fieldProps} />}</Fragment>;\n })}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\" px=\"sm\" pt=\"xs\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </ScrollArea>\n </Dialog.Body>\n <Dialog.Footer>\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!isValid} loading={submitting} onClick={() => void run()}>\n {request?.submitLabel ?? \"Run\"}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type {\n RegisteredWidgetContribution,\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n} from \"../../core\";\n\ninterface OpenPanelWidgetInput {\n workbench: WorkbenchCore;\n widget: RegisteredWidgetContribution;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n pinned?: boolean;\n open?: WorkbenchCompositionAddablePanel[\"open\"];\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 { open, pinned, region, resource, widget, workbench } = input;\n\n if (open) {\n open(resource);\n } else if (widget.openCommand) {\n void workbench.commands.executeCommand(widget.openCommand.commandId, widget.openCommand.args, {\n source: \"panel-add\",\n ...(resource ? { resource } : {}),\n });\n } else {\n const widgetResource = widget.resourceKinds?.length || widget.canOpen ? resource : undefined;\n // Adding a tab from the region's \"+\" tray is the user asking for a tab that stays.\n // The resource only binds the tab to its location; the tab is the widget, so it\n // keeps the widget's title instead of inheriting the location resource's label.\n workbench.layout.openWidget(widget.id, {\n region,\n resource: widgetResource,\n title: widget.title,\n closable: true,\n pinned,\n role: region === \"main\" ? \"location\" : \"sub-panel\",\n tabRetention: \"persistent\",\n });\n }\n\n if (region === \"secondary\") {\n workbench.shell.setRegionOpen(\"secondary\", true);\n }\n if (region === \"side\" && workbench.sidePanel.getMode() === \"closed\") {\n workbench.sidePanel.setMode(\"attached\");\n }\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { type WorkbenchCore, workbenchPanelRegions } from \"../../core\";\nimport { getPanelLabel, openPanelWidget } from \"../region/panel-widget-open\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport type { WorkbenchCompositionPanelsByRegion } from \"../shared/use-workbench-composition-panels\";\nimport { COMMAND_MODE_ID } from \"./palette-view\";\n\nexport const createWorkbenchPanelWidgetPaletteEntries = (input: {\n workbench: WorkbenchCore;\n onClose: () => void;\n panelsByRegion?: WorkbenchCompositionPanelsByRegion;\n}) => {\n const { onClose, panelsByRegion, workbench } = input;\n const resource = workbench.getPrimaryResource();\n return workbenchPanelRegions.flatMap((region) =>\n (panelsByRegion?.[region] ?? workbench.composition.panelsFor(region)).addable.map((panel): PaletteEntry => {\n const widget = panel.contribution;\n const panelLabel = getPanelLabel(region);\n const label = `Open ${widget.title} in ${panelLabel} Panel`;\n\n return {\n id: `workbench-panel:${region}:${widget.id}`,\n mode: COMMAND_MODE_ID,\n label,\n searchText: `${label} ${widget.id}`,\n group: \"Panels\",\n icon: widget.icon ? <WorkbenchIcon name={widget.icon} /> : undefined,\n onActivate: () => {\n onClose();\n openPanelWidget({ workbench, widget, region, resource, pinned: panel.pinned, open: panel.open });\n },\n };\n }),\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { PaletteEntry } from \"@pstdio/ui\";\nimport type { ResourceBrowseEntry, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\nexport interface WorkbenchResourcePaletteEntry extends PaletteEntry {\n resourceKey: string;\n mode: typeof SEARCH_MODE_ID;\n}\nconst createResourceEntry = (input: {\n workbench: WorkbenchCore;\n entry: ResourceBrowseEntry;\n onClose: () => void;\n}): WorkbenchResourcePaletteEntry | undefined => {\n const { entry, onClose, workbench } = input;\n const { resource } = entry;\n const label = entry.resource.label ?? resourceKey(entry.resource);\n const kind = workbench.resources.getKind(resource.type);\n const icon = resource.icon ?? kind?.icon;\n const activate = entry.activate;\n if (!activate) return undefined;\n return {\n id: `workbench-resource:${resourceKey(resource)}`,\n resourceKey: resourceKey(resource),\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(activate(resource)).catch(() => undefined);\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\n .listResources(query)\n .map((entry) => createResourceEntry({ workbench, entry, onClose }))\n .filter((entry): entry is WorkbenchResourcePaletteEntry => entry !== undefined);\n};\n","import type { PaletteEntry, ThemePreference, ThemePreferenceOption } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nconst THEME_MODE_ID = \"theme\";\n\nexport interface WorkbenchThemePaletteEntry extends PaletteEntry {\n themePreference: ThemePreference;\n mode: typeof THEME_MODE_ID;\n}\n\nconst getThemeIconName = (preference: ThemePreference) => {\n if (preference === \"pstdio-light\") return \"Sun\";\n if (preference === \"pstdio-dark\") return \"Moon\";\n return \"Palette\";\n};\n\nconst getThemePreferenceLabel = (themePreference: ThemePreferenceOption) => themePreference.title ?? themePreference.id;\n\nexport const getThemePreferenceEntryIndex = (\n themePreference: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[],\n) => {\n const index = themePreferences.findIndex((preference) => preference.id === themePreference);\n\n return Math.max(index, 0);\n};\n\nconst THEME_GROUP_LABELS = { light: \"Light\", dark: \"Dark\" } as const;\n\n// Group entries by appearance mode (lights first) so cycling the picker stays\n// within one mode instead of flashing light/dark/light on every step.\nconst byModeThenLabel = (a: ThemePreferenceOption, b: ThemePreferenceOption) => {\n if (a.mode !== b.mode) return a.mode === \"light\" ? -1 : 1;\n return getThemePreferenceLabel(a).localeCompare(getThemePreferenceLabel(b));\n};\n\nexport const createWorkbenchThemePreferencePaletteEntries = (input: {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (themePreference: ThemePreference) => void;\n onClose: () => void;\n}) => {\n const { onClose, setThemePreference, themePreference, themePreferences } = input;\n\n return [...themePreferences].sort(byModeThenLabel).map((preference): WorkbenchThemePaletteEntry => {\n const label = getThemePreferenceLabel(preference);\n\n return {\n id: `theme:${preference.id}`,\n themePreference: preference.id,\n mode: THEME_MODE_ID,\n label,\n searchText: `theme color appearance ${preference.mode} ${preference.id} ${label}`,\n group: THEME_GROUP_LABELS[preference.mode],\n icon: <WorkbenchIcon name={getThemeIconName(preference.id)} />,\n isSelected: preference.id === themePreference,\n onActivate: () => {\n setThemePreference(preference.id);\n onClose();\n },\n };\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Palette, type PaletteEntry, PaletteShortcut, type ThemePreference, useThemePreference } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport {\n type Command,\n type KeybindingSequence,\n type MenuPath,\n type RegisteredCommand,\n type RegisteredMenuItem,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n workbenchCommandPaletteMenuPath,\n} from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchCommandPaletteBackground } from \"../theme/workbench-theme-background\";\nimport { hasCommandParameters } from \"./command-palette-params\";\nimport { useWorkbenchCommandPaletteResourceEntries } from \"./command-palette-resources\";\nimport {\n type CommandParamFieldRenderer,\n CommandParamsDialog,\n type CommandParamsRequest,\n} from \"./command-params-dialog\";\nimport {\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.listCommandKeybindings().map((keybinding) => [keybinding.commandId, keybinding.keybinding]),\n );\n\nconst getShortcut = (binding: KeybindingSequence | undefined): ReactNode =>\n binding ? <PaletteShortcut binding={binding} /> : undefined;\n\nconst getCommandErrorMessage = (error: unknown) => (error instanceof Error ? error.message : \"Command failed.\");\n\nconst commandExecutionContext = (workbench: WorkbenchCore): WorkbenchCommandExecutionContext | undefined => {\n const resource = workbench.getPrimaryResource();\n return resource ? { resource } : undefined;\n};\n\nconst executePaletteCommand = async (input: {\n workbench: WorkbenchCore;\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n}) => {\n const { args, commandId, context, label, workbench } = input;\n try {\n await workbench.commands.executeCommand(commandId, args, context);\n } catch (error) {\n workbench.notifications.show({ level: \"error\", title: `${label} failed`, message: getCommandErrorMessage(error) });\n }\n};\n\nconst createEntry = (input: {\n workbench: WorkbenchCore;\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n shortcutByCommandId: Map<string, KeybindingSequence>;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}): WorkbenchCommandPaletteEntry | null => {\n const { action, onClose, onRequestParams, record, workbench, shortcutByCommandId } = input;\n const args = action?.args;\n\n if (!workbench.commands.isCommandVisible(record.command.id, args)) return null;\n\n const label = action?.label ?? record.command.label;\n const icon = action?.icon ?? record.command.icon;\n const group = action?.group ?? record.command.category;\n\n return {\n id: `workbench-command:${record.command.id}`,\n commandId: record.command.id,\n mode: COMMAND_MODE_ID,\n label,\n searchText: getCommandSearchText(record.command, label),\n description: record.command.description,\n group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n shortcut: getShortcut(shortcutByCommandId.get(record.command.id)),\n onActivate: () => {\n const context = commandExecutionContext(workbench);\n onClose();\n if (hasCommandParameters(record.command.params) && onRequestParams) {\n onRequestParams({ record, action, label, args, context });\n return;\n }\n void executePaletteCommand({ workbench, commandId: record.command.id, args, context, label });\n },\n };\n};\n\nconst getRecordGroup = (item: WorkbenchCommandPaletteRecord) =>\n item.action?.group ?? item.record.command.category ?? \"\";\n\nconst getRecordOrder = (item: WorkbenchCommandPaletteRecord) => item.action?.order ?? 0;\n\nconst byCommandPaletteGroup = (left: WorkbenchCommandPaletteRecord, right: WorkbenchCommandPaletteRecord) => {\n const groupComparison = getRecordGroup(left).localeCompare(getRecordGroup(right));\n if (groupComparison !== 0) return groupComparison;\n\n return getRecordOrder(left) - getRecordOrder(right);\n};\n\nconst listCommandRecords = (workbench: WorkbenchCore, menuPath?: MenuPath) => {\n if (!menuPath) {\n return workbench.commands.listCommands().map((record) => ({ record, action: undefined }));\n }\n\n return workbench.layout\n .listMenuItems(menuPath)\n .filter((action) => workbench.context.matches(action.when))\n .map((action) => {\n const record = workbench.commands.getCommand(action.commandId);\n return record ? { record, action } : null;\n })\n .filter((item): item is { record: RegisteredCommand; action: RegisteredMenuItem } => item !== null);\n};\n\nexport const createWorkbenchCommandPaletteEntries = (input: {\n workbench: WorkbenchCore;\n menuPath?: MenuPath;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}) => {\n const { menuPath, onClose, onRequestParams, workbench } = input;\n const shortcutByCommandId = createShortcutByCommandId(workbench);\n\n return listCommandRecords(workbench, menuPath)\n .sort(byCommandPaletteGroup)\n .map(({ record, action }) =>\n createEntry({ workbench, record, action, shortcutByCommandId, onClose, onRequestParams }),\n )\n .filter((entry): entry is WorkbenchCommandPaletteEntry => entry !== null);\n};\n\nexport const WorkbenchCommandPalette = (props: WorkbenchCommandPaletteProps) => {\n const {\n workbench,\n open,\n menuPath = workbenchCommandPaletteMenuPath,\n initialQuery = \"\",\n renderParamField,\n onClose,\n } = props;\n const { themePreference, themePreferences, setThemePreference } = useThemePreference();\n const view = useWorkbenchStore(workbench.commandPalette.store, (state) => state.view);\n const themePreviewRef = useRef<WorkbenchThemePreviewState | null>(null);\n const paramsRequest = useWorkbenchStore(workbench.commandPalette.store, (state) => state.paramsRequest);\n const [liveQuery, setLiveQuery] = useState(initialQuery);\n const commandPaletteResourceEntries = useWorkbenchCommandPaletteResourceEntries({\n workbench,\n query: liveQuery,\n open,\n onClose,\n });\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n\n const closePalette = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n onClose();\n };\n\n const exitPickerView = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n workbench.commandPalette.open({ view: \"main\" });\n };\n\n const commitThemePreview = () => {\n themePreviewRef.current = null;\n onClose();\n };\n\n const commandEntries = createWorkbenchCommandPaletteEntries({\n workbench,\n menuPath,\n onClose,\n onRequestParams: (request) => workbench.commandPalette.requestParams(request),\n });\n const resourceEntries = createWorkbenchResourcePaletteEntries({ workbench, query: initialQuery, onClose });\n const themeEntries = createWorkbenchThemePreferencePaletteEntries({\n themePreference,\n themePreferences,\n setThemePreference,\n onClose: commitThemePreview,\n });\n const panelWidgetEntries = createWorkbenchPanelWidgetPaletteEntries({\n workbench,\n onClose,\n panelsByRegion: compositionPanels,\n });\n const entries = [\n ...resourceEntries,\n ...commandPaletteResourceEntries,\n ...commandEntries,\n ...panelWidgetEntries,\n ...themeEntries,\n ];\n const themeInitialActiveIndex = getThemePreferenceEntryIndex(themePreference, themePreferences);\n const isThemeView = isThemePaletteView(view);\n const initialActiveIndex = getPaletteInitialActiveIndex({\n view,\n themeInitialActiveIndex,\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 prepareArgs={(input) =>\n workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n }\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={(event) => {\n if (event.currentTarget.contains(event.target)) workbench.focus.setActiveRegion(region);\n }}\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 workbenchResourceMetadataContextKey,\n workbenchResourceTypeContextKey,\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 === workbenchResourceTypeContextKey ||\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 { 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 id: 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, index) => {\n const action = keybinding.action;\n if (action.kind === \"command\") {\n if (allowedCommandIds && !allowedCommandIds.has(action.commandId)) return [];\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) return [];\n const enabled =\n !disabled &&\n workbench.commands.isCommandVisible(record.command.id, action.args) &&\n workbench.commands.isCommandEnabled(record.command.id, action.args);\n return [\n {\n id: record.command.id,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled,\n ignoreInputs: true,\n execute: () => workbench.navigation.openTarget(action),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n }\n if (allowedCommandIds) return [];\n return [\n {\n id: `workbench.keybinding.${index}`,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled: !disabled,\n ignoreInputs: true,\n execute: () => workbench.navigation.openTarget(action),\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.listCommandKeybindings().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.listCommandKeybindings().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.listCommandKeybindings().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});\nexport const createWorkbenchResourceActions = (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) =>\n createTreeContextMenuItems({\n menuPath: resourceContextMenuPath(resource.type),\n workbench,\n context: { resource },\n onRequestParams: ({ request }) => workbench.commandPalette.requestParams(request),\n }).map(toResourceContextAction);\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 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 useWorkbenchStore(workbench.pages.store, (state) => state.location?.resource);\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 } from \"react\";\nimport type {\n RegisteredPlaceholderContribution,\n RegisteredWidgetContribution,\n RegisteredWorkbenchView,\n WorkbenchCore,\n WorkbenchPanelContribution,\n WorkbenchRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { getWorkbenchRenderers } 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 region?: WorkbenchRegion;\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\nconst noopRefresh = () => undefined;\n\nconst toHostedPanel = (input: {\n placement: WorkbenchWidgetPlacement;\n region?: WorkbenchRegion;\n view?: RegisteredWorkbenchView;\n widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;\n}) => {\n if (input.view) {\n return {\n id: input.placement.contributionId,\n title: input.placement.title ?? input.view.title,\n icon: input.view.icon,\n region: input.region ?? input.widget?.region ?? \"main\",\n rendererId: input.view.id,\n } satisfies WorkbenchPanelContribution;\n }\n if (input.widget) {\n if (\"singleton\" in input.widget) return toPanelContribution(input.widget as RegisteredWidgetContribution);\n return input.widget;\n }\n return undefined;\n};\n\nexport const WorkbenchWidgetHost = (props: WorkbenchWidgetHostProps) => {\n const { workbench, placement } = props;\n const widget = props.widget ?? workbench.layout.getWidget(placement.contributionId);\n const view = placement.viewId ? workbench.views.getView(placement.viewId) : undefined;\n const rendererId = view?.id ?? widget?.rendererId ?? \"\";\n const refresh = noopRefresh;\n const rendererFromStore = useWorkbenchStore(\n getWorkbenchRenderers(workbench).store,\n (state) => state.renderers[rendererId],\n );\n const renderer = rendererFromStore ?? getWorkbenchRenderers(workbench).getRenderer(rendererId);\n useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.refreshKeys[rendererId] ?? 0);\n\n if (!widget && !view) {\n return <WorkbenchWidgetFallback label=\"Widget contribution is no longer registered.\" />;\n }\n const panel = toHostedPanel({ placement, region: props.region, view, widget });\n if (!panel) return <WorkbenchWidgetFallback label=\"View contribution is no longer registered.\" />;\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 {renderer.render({ workbench, panel, instance, refresh }) as ReactNode}\n </WorkbenchRenderedWidgetFrame>\n ) : (\n <WorkbenchWidgetFallback label={`No renderer registered for ${rendererId}.`} />\n )}\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\nexport const useModeChrome = (workbench: WorkbenchCore, region: WorkbenchRegion) =>\n useWorkbenchStore(workbench.modes.store, (state) => {\n const mode = state.activeModeId ? state.modes[state.activeModeId] : undefined;\n if (region !== \"nav\" && region !== \"sidenav\" && region !== \"activity\" && region !== \"status\") return undefined;\n return mode?.chrome?.[region];\n });\n\nexport const ModeChromeView = (props: { workbench: WorkbenchCore; viewId: string; region: WorkbenchRegion }) => {\n const { workbench, viewId, region } = props;\n return (\n <Box h=\"full\" w=\"full\" minH=\"0\" position=\"relative\">\n <Box position=\"absolute\" inset=\"0\" display=\"flex\">\n <WorkbenchWidgetHost\n key={viewId}\n workbench={workbench}\n region={region}\n placement={{ widgetId: viewId, contributionId: viewId, viewId, closable: false }}\n />\n </Box>\n </Box>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@pstdio/ui\";\nimport type {\n RegisteredPlaceholderContribution,\n WorkbenchCore,\n WorkbenchPanelMenuRegion,\n WorkbenchRegion as WorkbenchRegionId,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n getWorkbenchPanelForMenuRegion,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { getWorkbenchRegionBackground } from \"../theme/workbench-theme-background\";\nimport { ModeChromeView, useModeChrome } from \"./mode-chrome\";\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 \"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 region?: WorkbenchRegionId,\n): WorkbenchWidgetPlacement[] => {\n if (region === \"sidenav\") return widgets;\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 region?: WorkbenchRegionId,\n) => {\n const active = placement.widgetId === activeWidgetId;\n const additive = region === \"sidenav\";\n return {\n active,\n display: \"flex\",\n pointerEvents: active || additive ? \"auto\" : \"none\",\n position: active || additive ? \"relative\" : \"absolute\",\n visibility: active || additive ? \"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\ninterface WorkbenchRegionPlacementProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId?: string;\n globalActiveWidgetId?: string;\n region: WorkbenchRegionId;\n}\n\nconst WorkbenchRegionPlacement = (props: WorkbenchRegionPlacementProps) => {\n const { workbench, placement, activeWidgetId, globalActiveWidgetId, region } = props;\n const renderState = resolveRegionPlacementRenderState(placement, activeWidgetId, region);\n const additive = region === \"sidenav\";\n const overlaysActivePlacement = !renderState.active && !additive;\n let flex: string | undefined;\n if (additive) flex = \"1 1 0\";\n else if (renderState.active) flex = \"1 0 auto\";\n\n const activatePlacement = () => {\n if (placement.widgetId !== globalActiveWidgetId) workbench.layout.activatePanel(placement.widgetId);\n };\n\n return (\n <Box\n display={renderState.display}\n flex={flex}\n h={overlaysActivePlacement ? \"full\" : undefined}\n inset={overlaysActivePlacement ? \"0\" : undefined}\n minH=\"0\"\n minW=\"0\"\n onPointerDown={additive ? activatePlacement : undefined}\n onFocusCapture={additive ? activatePlacement : undefined}\n overflow=\"hidden\"\n pointerEvents={renderState.pointerEvents}\n position={renderState.position}\n visibility={renderState.visibility}\n w=\"full\"\n >\n <WorkbenchWidgetHost workbench={workbench} placement={placement} />\n </Box>\n );\n};\n\nexport const WorkbenchRegion = (props: WorkbenchRegionProps) => {\n const { workbench, region, title, pointerEvents = \"auto\", transparent = false } = props;\n const chrome = useModeChrome(workbench, region);\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 { ignoreOwnerResourceKey: sidePanelRegionIds.has(region) },\n )\n : undefined;\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (sidePanelRegionIds.has(region)\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement, {\n location: activeLocationPanel,\n })) &&\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, region)\n : [];\n\n if (chrome === false) return null;\n if (chrome) return <ModeChromeView workbench={workbench} region={region} viewId={chrome} />;\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 activatePlacement = (target: WorkbenchWidgetPlacement | undefined) => {\n if (target && target.widgetId !== globalActiveWidgetId) {\n workbench.layout.activatePanel(target.widgetId);\n }\n };\n const additive = region === \"sidenav\";\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={additive ? undefined : () => activatePlacement(activePlacement)}\n onFocusCapture={additive ? undefined : () => activatePlacement(activePlacement)}\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 <WorkbenchRegionPlacement\n key={renderedPlacement.widgetId}\n workbench={workbench}\n placement={renderedPlacement}\n activeWidgetId={activePlacement?.widgetId}\n globalActiveWidgetId={globalActiveWidgetId}\n region={region}\n />\n ))\n )}\n </ScrollArea>\n </Flex>\n );\n};\n","import { IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { useRef } from \"react\";\nimport type { ResourceRef, WorkbenchCompositionAddablePanel, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { openPanelWidget } from \"./panel-widget-open\";\n\ninterface WorkbenchPanelAddMenuProps {\n workbench: WorkbenchCore;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n panels: readonly WorkbenchCompositionAddablePanel[];\n}\n\nexport const WorkbenchPanelAddMenu = (props: WorkbenchPanelAddMenuProps) => {\n const { panels, region, resource, workbench } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const label = \"Add panel\";\n if (panels.length === 0) return null;\n\n const openPanel = (panel: WorkbenchCompositionAddablePanel) =>\n openPanelWidget({\n workbench,\n widget: panel.contribution,\n region,\n resource,\n pinned: panel.pinned,\n open: panel.open,\n });\n\n const trigger = (\n <IconButton\n ref={panels.length > 1 ? triggerRef : undefined}\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={label}\n flexShrink={0}\n onClick={panels.length === 1 ? () => openPanel(panels[0]) : undefined}\n >\n <WorkbenchIcon name=\"plus\" size={13} />\n </IconButton>\n );\n\n if (panels.length === 1) return <Tooltip content={label}>{trigger}</Tooltip>;\n\n return (\n <Menu.Root positioning={{ placement: \"bottom-start\", getAnchorElement: () => triggerRef.current }}>\n <Tooltip content={label}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"17.5rem\" bg=\"bg\">\n {panels.map((panel) => (\n <Menu.Item key={panel.contribution.id} value={`widget:${panel.contribution.id}`} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={panel.contribution.title}\n icon={\n panel.contribution.icon ? <WorkbenchIcon name={panel.contribution.icon} size={14} /> : undefined\n }\n onActivate={() => openPanel(panel)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import type { WorkbenchRegion, WorkbenchWidgetPlacement } from \"../../core\";\n\nexport const toTabKey = (regionId: string, placement: WorkbenchWidgetPlacement) =>\n `${regionId}:${placement.contributionId}`;\n\n// Sidenav placements compose as vertical navigation sections. They never become tabs.\nexport const suppressesSidenavTabStrip = (region: WorkbenchRegion, _placements: WorkbenchWidgetPlacement[]) =>\n region === \"sidenav\";\n\n// A Sub Panel tab presents its widget; the resource on its placement only binds\n// it to a Location. Location and content tabs present the resource they show.\nexport const resolveTabIconName = (\n placement: WorkbenchWidgetPlacement,\n widget: { icon?: string } | undefined,\n resourceKindIcon: string | undefined,\n) => {\n const resourceIcon = placement.resource?.icon ?? resourceKindIcon;\n if (placement.role === \"sub-panel\") return widget?.icon ?? resourceIcon;\n return resourceIcon ?? widget?.icon;\n};\n\nexport const resolveDisplayedActiveWidgetId = (\n visiblePlacements: WorkbenchWidgetPlacement[],\n activeWidgetId: string | undefined,\n): string | undefined => {\n if (!activeWidgetId) return visiblePlacements[0]?.widgetId;\n const hasActive = visiblePlacements.some((placement) => placement.widgetId === activeWidgetId);\n if (hasActive) return activeWidgetId;\n return visiblePlacements[0]?.widgetId;\n};\n","import { filterVisibleTabs, useTabVisibilityStore } from \"@pstdio/ui\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion,\n type WorkbenchWidgetPlacement,\n workbenchPanelMenuRegions,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { suppressesSidenavTabStrip, toTabKey } from \"./region-tabs-visibility\";\n\nconst isWorkbenchPanelRegion = (region: WorkbenchRegion): region is WorkbenchPanelRegion =>\n workbenchPanelRegions.some((panelRegion) => panelRegion === region);\n\nexport const shouldShowRegionTabs = (\n placements: WorkbenchWidgetPlacement[],\n options: { alwaysShowTabs?: boolean } = {},\n) => placements.length > 1 || (placements.length === 1 && (options.alwaysShowTabs ?? placements[0]?.closable) === true);\n\ninterface WorkbenchPanelHeaderVisibility {\n hasTabs?: boolean;\n hasPanelMenus?: boolean;\n hasHeaderActions?: boolean;\n}\n\nexport const shouldShowPanelHeader = (input: WorkbenchPanelHeaderVisibility) =>\n input.hasTabs === true || input.hasPanelMenus === true || input.hasHeaderActions === true;\n\nexport const isPlacementEligibleForRegion = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n placement: WorkbenchWidgetPlacement,\n resource = workbench.getPrimaryResource(),\n modeId = workbench.modes.getActiveModeId(),\n) => {\n const widget = workbench.layout.getWidget(placement.contributionId);\n return widget\n ? isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n ignoreResourceLocation: region === \"side\",\n location: getActiveWorkbenchLocationPanel(workbench.layout.getLayout()),\n })\n : false;\n};\n\nexport const useWorkbenchRegionTabsState = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n visibilityStorageKey?: string,\n) => {\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n const tabStore = useTabVisibilityStore(visibilityStorageKey ?? region, (state) => state);\n const regionState = layoutState.layout.regions[region];\n const subPanelPlacements = regionState.widgets.filter(\n (placement) =>\n placement.role === \"sub-panel\" && isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n const visibleSubPanels = filterVisibleTabs(subPanelPlacements, tabStore.tabOverrides, (placement) =>\n toTabKey(region, placement),\n );\n const visibleSubPanelIds = new Set(visibleSubPanels.map((placement) => placement.widgetId));\n const visiblePlacements = regionState.widgets.filter(\n (placement) => visibleSubPanelIds.has(placement.widgetId) || (region === \"main\" && placement.role === \"location\"),\n );\n const leadingItems = listWorkbenchMenuItemsFromState(\n { itemsByPath, commands, contextValues },\n workbenchRegionTabLeadingMenuPath(region),\n );\n const panelRegion = isWorkbenchPanelRegion(region) ? region : undefined;\n const eligibleSubPanels = panelRegion ? compositionPanels[panelRegion].addable : [];\n const showTabs =\n !suppressesSidenavTabStrip(region, visiblePlacements) &&\n shouldShowRegionTabs(visiblePlacements, {\n alwaysShowTabs: workbench.layout.getRegionSettings(region)?.alwaysShowTabs,\n });\n const hasActions = leadingItems.length > 0 || eligibleSubPanels.length > 0;\n\n return {\n commands,\n regionState,\n resource,\n tabStore: { tabOverrides: tabStore.tabOverrides, toggleTab: tabStore.toggleTab, reset: tabStore.reset },\n subPanelPlacements,\n visiblePlacements,\n leadingItems,\n panelRegion,\n eligibleSubPanels,\n showTabs,\n hasActions,\n };\n};\n\nexport const useWorkbenchPanelHeaderVisible = (workbench: WorkbenchCore, region: WorkbenchPanelRegion) => {\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const { showTabs, hasActions } = useWorkbenchRegionTabsState(workbench, region);\n const activeSubPanel = getActiveWorkbenchSubPanel(layoutState.layout, region, resource, {\n ignoreOwnerResourceKey: region === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layoutState.layout);\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\n return shouldShowPanelHeader({ hasTabs: showTabs, hasHeaderActions: hasActions, hasPanelMenus });\n};\n\nexport const useWorkbenchRegionTabsVisible = (workbench: WorkbenchCore, region: WorkbenchRegion) => {\n const { showTabs, hasActions } = useWorkbenchRegionTabsState(workbench, region);\n return showTabs || hasActions;\n};\n","import { Box, CloseButton, Menu, Portal, Tabs, Text } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { ListRow } from \"@pstdio/ui\";\nimport { type KeyboardEvent, type MouseEvent as ReactMouseEvent, type ReactNode, useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchTabMenuGroup, WorkbenchTabSnapshot, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { resolveTabIconName } from \"./region-tabs-visibility\";\n\ninterface WorkbenchRegionTabProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId: string | undefined;\n disabled?: boolean;\n nextWidgetId?: string;\n previousWidgetId?: string;\n sortable?: boolean;\n}\nconst useTabSnapshot = (placement: WorkbenchWidgetPlacement): WorkbenchTabSnapshot => {\n const tab = placement.tab;\n const [, setVersion] = useState(0);\n useEffect(() => {\n const subscription = tab?.subscribe?.(() => setVersion((version) => version + 1));\n if (!subscription) return undefined;\n return typeof subscription === \"function\" ? subscription : () => subscription.dispose();\n }, [tab]);\n return tab?.getSnapshot(toPanelInstance(placement)) ?? {};\n};\nconst useRegionTabBehavior = (input: WorkbenchRegionTabProps, tabSnapshot: WorkbenchTabSnapshot) => {\n const { disabled = false, nextWidgetId, placement, previousWidgetId, sortable = false, workbench } = input;\n const isPreview = placement.tabRetention === \"preview\";\n const hasCustomMenu = Boolean(tabSnapshot.menu?.some((group) => group.rows.length > 0));\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 hasCustomMenu,\n hasContextMenu,\n isPreview,\n openContextMenu,\n openCustomMenu,\n openMenu,\n reorderWithKeyboard,\n setMenuOpen,\n sortableState,\n tabSnapshot,\n };\n};\nconst WorkbenchRegionTabMenuSurface = (props: {\n anchor: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\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};\nconst WorkbenchRegionTabContextMenu = (props: {\n anchor: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\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 if (placement.placementIdentity) workbench.pinPlacement(placement.placementIdentity);\n else workbench.layout.updatePanel(placement.widgetId, { strategy: { kind: \"persistent\" } });\n }}\n />\n </Menu.Item>\n </WorkbenchRegionTabMenuSurface>\n );\n};\nconst WorkbenchRegionTabLabel = (props: {\n icon?: string;\n indicator?: WorkbenchTabSnapshot[\"indicator\"];\n id: string;\n label: string;\n}) => {\n const { icon, id, indicator, label } = props;\n return (\n <>\n {indicator ? (\n <WorkbenchIcon\n name={indicator.icon}\n size={12}\n flexShrink={0}\n color={indicator.color ?? \"fg.muted\"}\n aria-label={indicator.label}\n />\n ) : icon ? (\n <WorkbenchIcon name={icon} size={12} flexShrink={0} color=\"fg.muted\" />\n ) : null}\n <Text as=\"span\" id={id} minW=\"0\" truncate>\n {label}\n </Text>\n </>\n );\n};\nconst activateTabAction = (\n workbench: WorkbenchCore,\n action: NonNullable<WorkbenchTabMenuGroup[\"rows\"][number][\"action\"]>,\n) => {\n if (action.kind === \"command\") {\n void workbench.commands.executeCommand(action.commandId, action.args);\n return;\n }\n void workbench.navigation.openTarget(action.target);\n};\nconst WorkbenchStructuredTabMenu = (props: { groups: readonly WorkbenchTabMenuGroup[]; workbench: WorkbenchCore }) => {\n const { groups, workbench } = props;\n return groups.map((group, groupIndex) => (\n <Box key={group.id} display=\"contents\">\n {groupIndex > 0 ? <Menu.Separator /> : null}\n {group.rows.map((row) => (\n <Menu.Item key={row.id} value={row.id} disabled={row.disabled} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={row.id}\n label={row.label}\n icon={row.icon ? <WorkbenchIcon name={row.icon} size={16} /> : undefined}\n iconColor={row.iconColor}\n isSelected={row.selected}\n disabled={row.disabled}\n onActivate={row.action ? () => activateTabAction(workbench, row.action!) : undefined}\n />\n </Menu.Item>\n ))}\n </Box>\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 const identity = placement.placementIdentity;\n if (identity) {\n workbench.closePlacement(identity);\n return;\n }\n workbench.layout.closePanel(placement.widgetId);\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.hasCustomMenu ? (\n <WorkbenchRegionTabMenuSurface\n anchor={behavior.anchor}\n label={`${label} menu`}\n open={behavior.openMenu === \"custom\"}\n setMenuOpen={(open) => behavior.setMenuOpen(\"custom\", open)}\n >\n <WorkbenchStructuredTabMenu groups={behavior.tabSnapshot.menu ?? []} workbench={workbench} />\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};\nexport const WorkbenchRegionTab = (props: WorkbenchRegionTabProps) => {\n const { activeWidgetId, disabled = false, placement, sortable = false, workbench } = props;\n const isActive = placement.widgetId === activeWidgetId;\n const tabSnapshot = useTabSnapshot(placement);\n const label = tabSnapshot.label ?? placement.resource?.label ?? placement.title ?? placement.contributionId;\n const labelId = `workbench-tab-label-${placement.widgetId}`;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const icon = resolveTabIconName(\n placement,\n widget,\n placement.resource ? workbench.resources.getKind(placement.resource.type)?.icon : undefined,\n );\n const behavior = useRegionTabBehavior(props, tabSnapshot);\n const { isDragging, listeners, setNodeRef, transform, transition } = behavior.sortableState;\n const menuOpen =\n (behavior.openMenu === \"custom\" && behavior.hasCustomMenu) ||\n (behavior.openMenu === \"context\" && behavior.hasContextMenu);\n return (\n <>\n <Tabs.Trigger\n ref={setNodeRef}\n value={placement.widgetId}\n maxW=\"12rem\"\n minW=\"0\"\n flexShrink={0}\n title={label}\n // Name the tab from its label element alone. Computing the name from the tab's\n // contents would fold in the nested Close button, so a closable tab would be\n // called \"Artifacts Close Artifacts\" and rename itself the moment it became\n // closable. The label element still carries any status or count a tab renders.\n aria-labelledby={labelId}\n disabled={disabled}\n className=\"group\"\n aria-haspopup={behavior.hasCustomMenu || behavior.hasContextMenu ? \"menu\" : undefined}\n aria-expanded={behavior.hasCustomMenu || behavior.hasContextMenu ? menuOpen : undefined}\n aria-keyshortcuts={sortable ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined}\n fontStyle={behavior.isPreview ? \"italic\" : undefined}\n opacity={isDragging ? \"0.5\" : undefined}\n transform={CSS.Transform.toString(transform)}\n transition={transition}\n {...listeners}\n onKeyDown={behavior.reorderWithKeyboard}\n onContextMenu={behavior.hasContextMenu ? behavior.openContextMenu : undefined}\n onClick={behavior.hasCustomMenu && isActive && !disabled ? behavior.openCustomMenu : undefined}\n >\n <WorkbenchRegionTabLabel\n icon={tabSnapshot.icon ?? icon}\n id={labelId}\n indicator={tabSnapshot.indicator}\n label={label}\n />\n <WorkbenchRegionTabCloseButton\n disabled={disabled}\n isActive={isActive}\n label={label}\n placement={placement}\n workbench={workbench}\n />\n </Tabs.Trigger>\n <WorkbenchRegionTabMenus behavior={behavior} label={label} placement={placement} workbench={workbench} />\n </>\n );\n};\n","import { Tabs } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { horizontalListSortingStrategy, SortableContext } from \"@dnd-kit/sortable\";\nimport type { ReactNode } from \"react\";\nimport type {\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { WorkbenchRegionTab } from \"./region-tab\";\n\ninterface SortableRegionTabListProps {\n activeWidgetId?: string;\n disabled: boolean;\n leadingActions: ReactNode;\n panelRegion?: WorkbenchPanelRegion;\n placements: WorkbenchWidgetPlacement[];\n resource?: ResourceRef;\n eligibleSubPanels: readonly WorkbenchCompositionAddablePanel[];\n workbench: WorkbenchCore;\n}\n\nexport const SortableRegionTabList = (props: SortableRegionTabListProps) => {\n const { activeWidgetId, disabled, eligibleSubPanels, leadingActions, panelRegion, placements, resource, workbench } =\n props;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n const reorderable = placements.filter(\n (placement) => placement.role === \"sub-panel\" && placement.tabRetention !== \"preview\",\n );\n const reorderWidget = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const activeIndex = placements.findIndex((placement) => placement.widgetId === active.id);\n const overIndex = placements.findIndex((placement) => placement.widgetId === over.id);\n const source = placements[activeIndex];\n const target = placements[overIndex];\n if (\n source?.role !== \"sub-panel\" ||\n source.tabRetention === \"preview\" ||\n target?.role !== \"sub-panel\" ||\n target.tabRetention === \"preview\"\n ) {\n return;\n }\n workbench.layout.reorderPanel(\n String(active.id),\n activeIndex < overIndex ? { afterWidgetId: target.widgetId } : { beforeWidgetId: target.widgetId },\n );\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={reorderWidget}>\n <SortableContext\n items={placements.map((placement) => placement.widgetId)}\n strategy={horizontalListSortingStrategy}\n >\n <Tabs.List h=\"full\" minH=\"0\" minW=\"max-content\" alignItems=\"center\" gap=\"2xs\" justifyContent=\"flex-start\">\n {placements.map((placement) => {\n const reorderableIndex = reorderable.findIndex((candidate) => candidate.widgetId === placement.widgetId);\n return (\n <WorkbenchRegionTab\n key={placement.widgetId}\n workbench={workbench}\n placement={placement}\n activeWidgetId={activeWidgetId}\n disabled={disabled}\n sortable={reorderableIndex >= 0}\n previousWidgetId={reorderable[reorderableIndex - 1]?.widgetId}\n nextWidgetId={reorderable[reorderableIndex + 1]?.widgetId}\n />\n );\n })}\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </Tabs.List>\n </SortableContext>\n </DndContext>\n );\n};\n","import { HStack, IconButton, Menu, Portal, Tabs } from \"@chakra-ui/react\";\nimport {\n buildTabVisibilityMenuActions,\n ListRow,\n PANEL_HEADER_CONTROL_SIZE,\n PANEL_HEADER_TAB_SIZE,\n ScrollArea,\n Tooltip,\n} from \"@pstdio/ui\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchRegion as WorkbenchRegionId, WorkbenchWidgetPlacement } from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport type { WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { resolveDisplayedActiveWidgetId, resolveTabIconName, toTabKey } from \"./region-tabs-visibility\";\nimport { useWorkbenchRegionTabsState } 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}\nconst resolvePlacementIcon = (workbench: WorkbenchCore, placement: WorkbenchWidgetPlacement) => {\n const iconName = resolveTabIconName(\n placement,\n workbench.layout.getWidget(placement.contributionId),\n placement.resource ? workbench.resources.getKind(placement.resource.type)?.icon : undefined,\n );\n return iconName ? <WorkbenchIcon name={iconName} size={14} /> : undefined;\n};\nexport const WorkbenchRegionTabs = (props: WorkbenchRegionTabsProps) => {\n const { workbench, region, visibilityStorageKey } = props;\n const {\n commands,\n regionState,\n resource,\n tabStore,\n subPanelPlacements,\n visiblePlacements,\n leadingItems,\n panelRegion,\n eligibleSubPanels,\n showTabs,\n hasActions,\n } = useWorkbenchRegionTabsState(workbench, region, visibilityStorageKey);\n const tabOverrides = tabStore.tabOverrides;\n const getKey = (placement: WorkbenchWidgetPlacement) => toTabKey(region, placement);\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 const menuActions = buildTabVisibilityMenuActions(\n subPanelPlacements,\n tabOverrides,\n {\n onToggleTab: (key, hiddenByDefault) => tabStore.toggleTab(key, hiddenByDefault),\n onResetAll: () => tabStore.reset(),\n },\n getKey,\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n (placement) => resolvePlacementIcon(workbench, placement),\n );\n const hasVisibilityMenu = menuActions.length > 0;\n const openVisibilityMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasVisibilityMenu) return;\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 // 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 const onWheel = (event: WheelEvent) => {\n if (event.deltaY === 0 || viewport.scrollWidth <= viewport.clientWidth) return;\n viewport.scrollLeft += event.deltaY;\n event.preventDefault();\n };\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewport]);\n if (!showTabs && !hasActions) return null;\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 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={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 if (!showTabs) {\n return (\n <HStack flex=\"1 1 auto\" h=\"full\" minW=\"0\" gap=\"2xs\">\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </HStack>\n );\n }\n return (\n <Tabs.Root\n value={activeWidgetId}\n onValueChange={(details) => {\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 disabled={false}\n workbench={workbench}\n placements={visiblePlacements}\n activeWidgetId={activeWidgetId}\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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { ResourceContextAction } from \"@pstdio/ui\";\nimport 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\";\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};\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};\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 }));\nexport const resolveDataTableRendererResourceActions = (\n data: RowData,\n rowByData: WeakMap<RowData, DataTableRendererRow>,\n resolveResourceActions: (resource: NonNullable<DataTableRendererRow[\"resource\"]>) => ResourceContextAction[],\n) => {\n const resource = rowByData.get(data)?.resource;\n if (!resource) return [];\n return resolveResourceActions(resource)\n .filter((action) => !action.isDisabled)\n .map((action) => ({\n label: action.label,\n icon: action.icon,\n onSelect: (_context?: unknown) => void action.onClick(),\n }));\n};\nexport const resolveDataTableRendererStorageKey = (rendererId: string, placement: WorkbenchPanelInstance) => {\n const identity = resourceKey(placement.resource) ?? placement.resource?.id ?? \"unscoped\";\n return `pstdio:workbench:dataTableRenderer:${rendererId}:${placement.instanceId}:${identity}`;\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { EmptyState } from \"@pstdio/ui\";\nimport {\n DataTable,\n type DataTableColumnRenderer,\n type DataTableColumnStat,\n type DataTableRowAction,\n DataTableSkeleton,\n type RowData,\n} from \"@pstdio/ui/data-table\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n DataTableRendererQueryResult,\n RegisteredDataTableRendererContribution,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport {\n buildDataTableRendererData,\n resolveDataTableRendererColumns,\n resolveDataTableRendererResourceActions,\n resolveDataTableRendererSelectionActions,\n resolveDataTableRendererStorageKey,\n} from \"./data-table-view-model\";\n\ninterface WorkbenchDataTableViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredDataTableRendererContribution;\n placement: WorkbenchPanelInstance;\n}\nconst initialResult: DataTableRendererQueryResult = { rows: [] };\n// Tabs unmount when they deactivate, so without a cache every revisit flashes a\n// loading state. The last result renders instantly while the fresh query runs.\nconst lastResults = new Map<string, DataTableRendererQueryResult>();\nconst resultCacheKey = (contributionId: string, placement: WorkbenchPanelInstance) =>\n `${contributionId} ${resourceKey(placement.resource) ?? \"\"}`;\nexport const WorkbenchDataTableView = (props: WorkbenchDataTableViewProps) => {\n const { workbench, contribution, placement } = props;\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const cacheKey = resultCacheKey(contribution.id, placement);\n const [result, setResult] = useState(() => lastResults.get(cacheKey) ?? initialResult);\n const [loading, setLoading] = useState(() => !lastResults.has(cacheKey));\n const requestRef = useRef(0);\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve(\n contribution.executeQuery({ resource: placement.resource, modeId: workbench.modes.getActiveModeId() }),\n ).then((next) => {\n if (cancelled || requestRef.current !== requestId) return;\n lastResults.set(cacheKey, next);\n setResult(next);\n setLoading(false);\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshDataTableRenderer((event) => {\n if (event.dataTableRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [cacheKey, contribution, placement.resource, workbench]);\n const columns = resolveDataTableRendererColumns(result, contribution.columns);\n const model = useMemo(() => buildDataTableRendererData(result.rows, columns), [columns, result.rows]);\n const labels = Object.fromEntries(\n columns.filter((column) => column.label).map((column) => [column.id, column.label!]),\n );\n const descriptions = Object.fromEntries(\n columns.filter((column) => column.description).map((column) => [column.id, column.description!]),\n );\n const icons = Object.fromEntries(\n columns.filter((column) => column.icon).map((column) => [column.id, column.icon as ReactNode]),\n );\n const stats = Object.fromEntries(\n columns.filter((column) => column.stat).map((column) => [column.id, column.stat as DataTableColumnStat]),\n );\n const renderers = Object.fromEntries(\n columns\n .filter((column) => column.renderer)\n .map((column) => [column.id, column.renderer as DataTableColumnRenderer]),\n );\n const rowActions: DataTableRowAction[] = (contribution.rowActions ?? []).map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const row = model.rowByData.get(data);\n if (row) void action.run(row);\n },\n }));\n const selectionActions = resolveDataTableRendererSelectionActions(\n contribution.selectionActions ?? [],\n model.rowByData,\n );\n const openRow = (data: RowData) => {\n const row = model.rowByData.get(data);\n if (!row) return;\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n if (loading) {\n // The table chrome renders instantly: declared columns become real headers\n // and only the row values shimmer until the first query resolves.\n const skeletonColumns = (contribution.columns ?? [])\n .filter((column) => !column.hidden)\n .map((column) => ({ id: column.id, label: column.label ?? column.id }));\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTableSkeleton columns={skeletonColumns.length > 0 ? skeletonColumns : undefined} />\n </Stack>\n );\n }\n if (result.rows.length === 0) {\n return (\n <EmptyState h=\"full\" title={contribution.emptyTitle ?? \"No rows\"} description={contribution.emptyDescription} />\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 getRowActions={(data) => resolveDataTableRendererResourceActions(data, model.rowByData, resolveResourceActions)}\n onRowClick={openRow}\n isRowInteractive={(data) => {\n const row = model.rowByData.get(data);\n return Boolean(row && contribution.onRowActivate);\n }}\n getCellContextMenuActions={(context) =>\n resolveDataTableRendererResourceActions(context.row, model.rowByData, resolveResourceActions)\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 type { PageLocation, PageRef } from \"@pstdio/sdk/extensions\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { PaletteShortcut, Tooltip, type TreeListNode, type TreeListSection } from \"@pstdio/ui\";\nimport { DiffBubble } from \"@pstdio/ui/diff\";\nimport type { ReactNode } from \"react\";\nimport {\n getWorkbenchSelectionResourceKeys,\n type NavigationTarget,\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}\nexport const resolveTreeListActiveNodeId = (activeNodeId: string | null | undefined, selectedNodeId?: string) => {\n if (!activeNodeId) return selectedNodeId;\n return activeNodeId;\n};\ninterface ResolveTreeListSelectionInput {\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n activeNodeId?: string | null;\n activeLocation?: PageLocation;\n activeResource?: ResourceRef;\n selectedNodeId?: string;\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};\nconst resolveTreeNodeResourceKey = (node: TreeNode) => {\n if (node.resource) return resourceKey(node.resource);\n return undefined;\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 ]);\nconst listSectionNodes = (sections: TreeViewSection[], childrenByNodeId: Record<string, TreeNode[]>) =>\n sections.flatMap((section) => listTreeNodes(section.nodes, childrenByNodeId));\nconst resolveActiveResourceNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n resourceKeys: string[],\n) => {\n const nodes = listSectionNodes(sections, childrenByNodeId);\n for (const resourceKey of resourceKeys) {\n const matches = nodes\n .filter((node) => node.id === resourceKey || resolveTreeNodeResourceKey(node) === resourceKey)\n .map((node) => node.id);\n if (matches.length > 0) return activeNodeIds(matches);\n }\n return undefined;\n};\nconst findSectionNode = (sections: TreeViewSection[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>) =>\n listSectionNodes(sections, childrenByNodeId).find((node) => node.id === nodeId);\nexport const filterTreeListSelection = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n selection: string | string[] | undefined,\n) => {\n const selectedIds = typeof selection === \"string\" ? [selection] : (selection ?? []);\n return activeNodeIds(selectedIds.filter((nodeId) => findSectionNode(sections, nodeId, childrenByNodeId)));\n};\nconst pageRefsEqual = (left: PageRef, right: PageRef) => left.id === right.id && left.extensionId === right.extensionId;\nconst targetMatchesPage = (target: NavigationTarget | undefined, activePage: PageRef, activeResource?: ResourceRef) => {\n if (!target) return false;\n const targets = target.kind === \"compound\" ? target.targets : [target];\n return targets.some(\n (candidate) =>\n candidate.kind === \"page\" &&\n pageRefsEqual(candidate.page, activePage) &&\n (candidate.resource\n ? activeResource !== undefined && resourceKey(candidate.resource) === resourceKey(activeResource)\n : activeResource === undefined),\n );\n};\nconst resolveActivePageNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n activePage: PageRef | undefined,\n activeResource: ResourceRef | undefined,\n) => {\n if (!activePage) return undefined;\n return activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => targetMatchesPage(node.target, activePage, activeResource))\n .map((node) => node.id),\n );\n};\nexport const resolveTreeListSelection = (input: ResolveTreeListSelectionInput) => {\n const { sections, childrenByNodeId, activeNodeId, activeLocation, activeResource, selectedNodeId } = input;\n if (activeNodeId) return activeNodeId;\n // Keep renderer selection on the nodes so it survives composing and scoping trees.\n const declaredSelection = activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => node.selected)\n .map((node) => node.id),\n );\n if (declaredSelection) return declaredSelection;\n const activeResourceKeys = getWorkbenchSelectionResourceKeys(activeResource);\n let selectedResourceKey: string | undefined;\n if (selectedNodeId) {\n const selectedNode = findSectionNode(sections, selectedNodeId, childrenByNodeId);\n selectedResourceKey = selectedNode ? resolveTreeNodeResourceKey(selectedNode) : undefined;\n if (selectedResourceKey && activeResourceKeys.includes(selectedResourceKey)) return selectedNodeId;\n // Keep the selected document when several nodes target the same page and resource.\n if (activeLocation && targetMatchesPage(selectedNode?.target, activeLocation.page, activeLocation.resource)) {\n return selectedNodeId;\n }\n }\n const activeResourceNodeId = resolveActiveResourceNodeIds(sections, childrenByNodeId, activeResourceKeys);\n if (activeResourceNodeId) return activeResourceNodeId;\n const activePageNodeId = resolveActivePageNodeIds(\n sections,\n childrenByNodeId,\n activeLocation?.page,\n activeLocation?.resource,\n );\n if (activePageNodeId) return activePageNodeId;\n if (!selectedNodeId) return undefined;\n if (activeResourceKeys.length > 0 && selectedResourceKey) return undefined;\n return selectedNodeId;\n};\nconst canVirtualizeTreeNode = (node: TreeListNode) =>\n node.inlineInput === undefined && node.isContainer !== true && (node.children ?? []).length === 0;\nexport const canVirtualizeTreeSections = (sections: TreeListSection[]) =>\n sections.every((section) => section.nodes.every(canVirtualizeTreeNode));\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 return null;\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 return null;\n};\nconst wrapTreeNodeIcon = (icon: ReactNode, iconTooltip: string | undefined) => {\n if (!iconTooltip) return icon;\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};\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 return icon === undefined ? undefined : wrapTreeNodeIcon(icon, node.iconTooltip);\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};\nconst resolveTreeNodeResource = (node: TreeNode): ResourceRef | undefined => {\n if (node.resource) return node.resource;\n return undefined;\n};\nconst renderShortcutEndContent = (binding: string | string[] | undefined) => {\n if (!binding) return undefined;\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};\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 const shortcut = renderShortcutEndContent(binding);\n if (shortcut) return shortcut;\n const additions = resource?.metadata?.diffAdditions;\n const deletions = resource?.metadata?.diffDeletions;\n if (resource?.type !== \"workspace\" || typeof additions !== \"number\" || typeof deletions !== \"number\") {\n return undefined;\n }\n return <DiffBubble additions={additions} deletions={deletions} variant=\"ghost\" size=\"small\" />;\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};\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.type) : 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.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]),\n );\n const binding = node.commandId ? shortcuts.get(node.commandId) : undefined;\n const treeNode: TreeListNode = {\n id: node.id,\n moveScope: node.moveScope,\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 inlineInput: node.inlineInput,\n showContextMenuTrigger: node.showContextMenuTrigger,\n canHide: node.canHide,\n canReorder: node.canReorder,\n canDrag: node.canDrag,\n canDrop: node.canDrop,\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: 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 return treeNode;\n};\nexport const toTreeListSection = (\n section: TreeViewSection,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const emptyNode = toTreeListSectionEmptyNode(section);\n return {\n id: section.id,\n moveScope: section.moveScope,\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 type { WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { CommandParamsDialog } from \"../../command-palette/command-params-dialog\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\n\ninterface TreeParamsDialogProps {\n request: TreeActionParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n workbench: WorkbenchCore;\n onClose: () => void;\n}\n\nexport const TreeParamsDialog = (props: TreeParamsDialogProps) => {\n const { request, renderParamField, workbench, onClose } = props;\n return (\n <CommandParamsDialog\n request={request?.request ?? null}\n renderParamField={renderParamField}\n prepareArgs={(input) =>\n workbench.commands.getCommand(input.commandId)\n ? workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n : Promise.resolve(input.args)\n }\n onClose={onClose}\n onRun={async ({ args }) => {\n await request?.run(args);\n }}\n />\n );\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport {\n EmptyState,\n type ResourceContextAction,\n TreeList,\n type TreeListMovePolicy,\n type TreeListSection,\n} 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 error?: string | null;\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 canMove?: TreeListMovePolicy;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n onNavigate: (event: Parameters<NonNullable<Parameters<typeof TreeList>[0][\"onNavigate\"]>>[0]) => void;\n}\n\nexport const TreeViewBody = (props: TreeViewBodyProps) => {\n const {\n error,\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 canMove,\n onMoveNode,\n onNavigate,\n } = props;\n\n if (error) return <EmptyState title=\"Could not load files\" description={error} />;\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 canMove={canMove}\n onMoveNode={onMoveNode}\n onNavigate={onNavigate}\n />\n );\n};\n","import type {\n RegisteredTreeRendererContribution,\n ResourceRef,\n TreeNode,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { findNodeInSections } from \"./tree-list-adapter\";\n\ninterface MoveTreeNodeContext {\n workbench: WorkbenchCore;\n renderer: RegisteredTreeRendererContribution;\n resource?: ResourceRef;\n viewId?: string;\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n onError?: (error: unknown) => void;\n}\n\nexport const createMoveTreeNode = (context: MoveTreeNodeContext) =>\n context.renderer.moveNode\n ? (sourceNodeId: string, targetNodeId?: string) => {\n const source = findNodeInSections(context.sections, sourceNodeId, context.childrenByNodeId);\n const target = targetNodeId\n ? (findNodeInSections(context.sections, targetNodeId, context.childrenByNodeId) ?? undefined)\n : undefined;\n if (!source || (targetNodeId && !target)) return;\n const trees = getWorkbenchRenderers(context.workbench);\n void Promise.resolve(\n context.renderer.moveNode?.(source, target, {\n resource: context.resource,\n viewId: context.viewId,\n state: trees.getTreeState(context.renderer.id),\n refresh: () => trees.refresh(context.renderer.id),\n setSelectedNode: (nodeId) => trees.setSelectedNode(context.renderer.id, nodeId),\n }),\n ).catch(context.onError);\n }\n : undefined;\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 === \"page\" || item.kind === \"panel\");\n};\n","import { Input, InputGroup } from \"@chakra-ui/react\";\nimport { Header } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\n\ninterface TreeViewSearchProps {\n visible: boolean;\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n}\n\nexport const TreeViewSearch = (props: TreeViewSearchProps) => {\n const { visible, placeholder = \"Search files\", value, onChange } = props;\n if (!visible) return null;\n\n return (\n <Header flexShrink={0} borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <InputGroup startElement={<WorkbenchIcon name=\"search\" size={14} />} width=\"full\">\n <Input\n size=\"sm\"\n variant=\"borderless\"\n aria-label={placeholder}\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n </InputGroup>\n </Header>\n );\n};\n","import type { TreeNode, TreeQueryContext, 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: TreeViewSection[];\n body: TreeViewSection[];\n footer: TreeViewSection[];\n}\n\nconst listTreeNodes = (data: LoadedTreeData) => [\n ...data.header.flatMap((section) => section.nodes),\n ...data.body.flatMap((section) => section.nodes),\n ...data.footer.flatMap((section) => section.nodes),\n];\n\nexport const loadExpandedTreeChildren = async (\n trees: TreeRendererRegistry,\n treeId: string,\n data: LoadedTreeData,\n expandedNodeIds: string[],\n ctx: TreeQueryContext = {},\n) => {\n const expanded = new Set(expandedNodeIds);\n const visited = new Set<string>();\n const childrenByNodeId: Record<string, TreeNode[]> = {};\n\n const loadNodes = async (nodes: TreeNode[]) => {\n await Promise.all(\n nodes.map(async (node) => {\n if (!expanded.has(node.id) || visited.has(node.id)) return;\n visited.add(node.id);\n const children = node.children ?? (await trees.getChildren(treeId, node, ctx));\n if (!node.children) childrenByNodeId[node.id] = children;\n await loadNodes(children);\n }),\n );\n };\n\n await loadNodes(listTreeNodes(data));\n return childrenByNodeId;\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: TreeQueryContext = {},\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 { useEffect, useRef, useState } from \"react\";\nimport {\n getWorkbenchRenderers,\n type ResourceRef,\n type TreeNode,\n type TreeViewSection,\n type WorkbenchCore,\n} from \"../../../core\";\nimport {\n expandDefaultTreeSections,\n loadExpandedTreeChildren,\n loadTreeData,\n shouldShowTreeLoading,\n} from \"./tree-view-load\";\n\nexport const useTreeData = (\n workbench: WorkbenchCore,\n treeViewId: string,\n resource?: ResourceRef,\n viewId?: string,\n filter?: string,\n) => {\n const [header, setHeader] = useState<TreeViewSection[]>([]);\n const [body, setBody] = useState<TreeViewSection[]>([]);\n const [footer, setFooter] = useState<TreeViewSection[]>([]);\n const [childrenByNodeId, setChildrenByNodeId] = useState<Record<string, TreeNode[]>>({});\n const [error, setError] = useState<string | null>(null);\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(getWorkbenchRenderers(workbench), treeViewId);\n\n const loadTree = () => {\n const loadRevision = ++loadRevisionRef.current;\n if (shouldShowTreeLoading(loadedTreeIdRef.current, treeViewId)) setLoading(true);\n setError(null);\n void loadTreeData(getWorkbenchRenderers(workbench), treeViewId, { resource, viewId, filter })\n .then(async (data) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n const treeStillRegistered = getWorkbenchRenderers(workbench).getTreeRenderer(treeViewId);\n const children =\n data && treeStillRegistered\n ? await loadExpandedTreeChildren(\n getWorkbenchRenderers(workbench),\n treeViewId,\n data,\n getWorkbenchRenderers(workbench).getTreeState(treeViewId).expandedNodeIds,\n { resource, viewId, filter },\n )\n : {};\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(children);\n setLoading(false);\n })\n .catch((loadError) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n setError(loadError instanceof Error ? loadError.message : \"The file tree could not be loaded.\");\n setLoading(false);\n });\n };\n\n loadTree();\n const disposable = getWorkbenchRenderers(workbench).onDidRefresh((event) => {\n if (event.treeId === treeViewId) loadTree();\n });\n return () => {\n cancelled = true;\n disposable.dispose();\n };\n }, [filter, resource, viewId, workbench, treeViewId]);\n\n return { body, childrenByNodeId, error, footer, header, loading, setChildrenByNodeId };\n};\n","import {\n applyTreeListOrder,\n buildTreeVisibilityMenuActions,\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 headerSections: TreeListSection[];\n sections: TreeListSection[];\n footerSections: TreeListSection[];\n}\n\nexport type TreeViewSlot = \"header\" | \"content\" | \"footer\";\n\ninterface TreeViewCustomization {\n // Header sections with hidden entries removed — what the pinned header renders.\n visibleHeaderSections: TreeListSection[];\n // Sections with hidden categories removed — what the tree body renders.\n visibleSections: TreeListSection[];\n // Footer sections with hidden entries removed — what the pinned footer renders.\n visibleFooterSections: TreeListSection[];\n // Back-of-tree right-click menu: header rows, body categories, and footer rows that opt in.\n backgroundContextActions: ResourceContextAction[];\n customizationRevision: string;\n onReorderSections: (slot: TreeViewSlot, nextSectionIds: string[]) => void;\n onMoveSection: (nextSectionIds: string[], sourceSectionId: string, destinationSectionId: string) => void;\n onReorderNodes: (sectionId: string, 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 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\nconst addSectionNodeVisibilityContextMenuItems = (\n sections: TreeListSection[],\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n enabled: boolean,\n) => {\n let changed = false;\n const next = sections.map((section) => {\n const nodes = addRegionNodeVisibilityContextMenuItems(section.nodes, nodeOverrides, actions, icons, enabled);\n if (nodes === section.nodes) return section;\n changed = true;\n return { ...section, nodes };\n });\n return changed ? next : sections;\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 sectionSlotById = useTreeListOrderStore(storageKey, (state) => state.sectionSlotById);\n const setSectionOrder = useTreeListOrderStore(storageKey, (state) => state.setSectionOrder);\n const setNodeOrder = useTreeListOrderStore(storageKey, (state) => state.setNodeOrder);\n const setSectionSlot = useTreeListOrderStore(storageKey, (state) => state.setSectionSlot);\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 defaultSlotBySectionId = new Map([\n ...regions.headerSections.map((section) => [section.id, \"header\" as const] as const),\n ...regions.sections.map((section) => [section.id, \"content\" as const] as const),\n ...regions.footerSections.map((section) => [section.id, \"footer\" as const] as const),\n ]);\n const orderedSectionsBySlot: Record<TreeViewSlot, TreeListSection[]> = { header: [], content: [], footer: [] };\n const orderedAllSections = applyTreeListOrder(\n [...regions.headerSections, ...regions.sections, ...regions.footerSections],\n sectionOrder,\n nodeOrderBySection,\n );\n for (const section of orderedAllSections) {\n const slot = sectionSlotById[section.id] ?? defaultSlotBySectionId.get(section.id) ?? \"content\";\n orderedSectionsBySlot[slot].push(section);\n }\n const orderedHeaderSections = orderedSectionsBySlot.header;\n const orderedSections = orderedSectionsBySlot.content;\n const orderedFooterSections = orderedSectionsBySlot.footer;\n const includeNodeContextMenus = options.suppressNodeContextMenus !== true;\n\n const headerSections = addSectionNodeVisibilityContextMenuItems(\n orderedHeaderSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const contentSections = addSectionNodeVisibilityContextMenuItems(\n orderedSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const footerSections = addSectionNodeVisibilityContextMenuItems(\n orderedFooterSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const visibleHeaderSections = filterVisibleSections(headerSections, sectionOverrides, nodeOverrides);\n const visibleSections = filterVisibleSections(contentSections, sectionOverrides, nodeOverrides);\n const visibleFooterSections = filterVisibleSections(footerSections, sectionOverrides, nodeOverrides);\n const backgroundContextActions = buildTreeVisibilityMenuActions(\n { headerSections: orderedHeaderSections, sections: orderedSections, footerSections: orderedFooterSections },\n sectionOverrides,\n nodeOverrides,\n visibilityActions,\n icons,\n );\n\n const customizationRevision = JSON.stringify({\n header: orderedHeaderSections.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 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: orderedFooterSections.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 sectionOverrides,\n nodeOverrides,\n sectionOrder,\n nodeOrderBySection,\n sectionSlotById,\n });\n\n return {\n visibleHeaderSections,\n visibleSections,\n visibleFooterSections,\n backgroundContextActions,\n customizationRevision,\n onReorderSections: (slot, nextSectionIds) => {\n const idsBySlot: Record<TreeViewSlot, string[]> = {\n header: orderedHeaderSections.map((section) => section.id),\n content: orderedSections.map((section) => section.id),\n footer: orderedFooterSections.map((section) => section.id),\n };\n idsBySlot[slot] = nextSectionIds;\n setSectionOrder([...idsBySlot.header, ...idsBySlot.content, ...idsBySlot.footer]);\n },\n onMoveSection: (nextSectionIds, sourceSectionId, destinationSectionId) => {\n const destinationSlot =\n sectionSlotById[destinationSectionId] ?? defaultSlotBySectionId.get(destinationSectionId) ?? \"content\";\n setSectionSlot(sourceSectionId, destinationSlot);\n setSectionOrder(nextSectionIds);\n },\n onReorderNodes: setNodeOrder,\n };\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea, TreeList, TreeListDragProvider } from \"@pstdio/ui\";\nimport { type Dispatch, type SetStateAction, useEffect, useRef, useState } from \"react\";\nimport type {\n NavigationTarget,\n ResourceRef,\n TreeNode,\n TreeRendererState,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getAnchorResource, getWorkbenchRenderers } from \"../../../core\";\nimport type { CommandParamFieldRenderer } 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 {\n filterTreeListSelection,\n findNodeInSections,\n resolveTreeListSelection,\n toTreeListSection,\n} from \"./tree-list-adapter\";\nimport { TreeParamsDialog } from \"./tree-params-dialog\";\nimport { TreeViewBody } from \"./tree-view-body\";\nimport { createMoveTreeNode } from \"./tree-view-move\";\nimport { shouldSelectTreeNodeForNavigationTarget } from \"./tree-view-navigation\";\nimport { TreeViewSearch } from \"./tree-view-search\";\nimport { useTreeData } from \"./use-tree-data\";\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\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 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 getWorkbenchRenderers(context.workbench).setSelectedNode(context.treeViewId, nodeId);\n }\n void context.workbench.navigation.openTarget(target).catch(context.onOpenResourceError);\n return;\n }\n};\n\ninterface ToggleTreeNodeContext {\n workbench: WorkbenchCore;\n treeViewId: string;\n resource?: ResourceRef;\n viewId?: string;\n body: TreeViewSection[];\n header: TreeViewSection[];\n footer: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n expandedNodeIds: string[];\n setChildrenByNodeId: Dispatch<SetStateAction<Record<string, TreeNode[]>>>;\n}\n\nconst createToggleTreeNode = (context: ToggleTreeNodeContext) => (nodeId: string) => {\n const node =\n findNodeInSections(context.body, nodeId, context.childrenByNodeId) ??\n findNodeInSections([...context.header, ...context.footer], nodeId, context.childrenByNodeId);\n if (!node) return;\n\n const expanded = context.expandedNodeIds.includes(nodeId);\n getWorkbenchRenderers(context.workbench).setNodeExpanded(context.treeViewId, nodeId, !expanded);\n if (expanded || context.childrenByNodeId[nodeId] || node.children) return;\n\n void getWorkbenchRenderers(context.workbench)\n .getChildren(context.treeViewId, node, { resource: context.resource, viewId: context.viewId })\n .then((children) => {\n context.setChildrenByNodeId((current) => ({ ...current, [nodeId]: children }));\n });\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 = getWorkbenchRenderers(workbench).getTreeRenderer(treeViewId);\n const [filter, setFilter] = useState(\"\");\n const treeState =\n useWorkbenchStore(getWorkbenchRenderers(workbench).treeStore, (state) => state.statesByTreeId[treeViewId]) ??\n EMPTY_TREE_STATE;\n const projectId = useWorkbenchStore(workbench.pages.store, (state) => state.projectId);\n const activeLocation = useWorkbenchStore(workbench.pages.store, (state) => state.location);\n const activeResource = useWorkbenchStore(workbench.layout.store, (state) => resolveTreeActiveResource(state.layout));\n const { body, childrenByNodeId, error, footer, header, loading, setChildrenByNodeId } = useTreeData(\n workbench,\n treeViewId,\n resource,\n viewId,\n treeRenderer?.searchable ? filter.trim() || undefined : undefined,\n );\n const [paramsRequest, setParamsRequest] = useState<TreeActionParamsRequest | null>(null);\n\n const adapterContext = {\n workbench,\n onCommandError: onOpenResourceError,\n onRequestParams: setParamsRequest,\n };\n const rawSections = body.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawHeaderSections = header.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawFooterSections = footer.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const {\n visibleHeaderSections,\n visibleSections,\n visibleFooterSections,\n backgroundContextActions,\n customizationRevision,\n onReorderSections,\n onReorderNodes,\n onMoveSection,\n } = useTreeViewCustomization(\n `${treeViewId}:${projectId ?? \"global\"}`,\n {\n headerSections: rawHeaderSections,\n sections: rawSections,\n footerSections: rawFooterSections,\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 = createToggleTreeNode({\n workbench,\n treeViewId,\n resource,\n viewId,\n body,\n header,\n footer,\n childrenByNodeId,\n expandedNodeIds: treeState.expandedNodeIds,\n setChildrenByNodeId,\n });\n\n const toggleSection = (sectionId: string) => {\n const expanded = treeState.expandedSectionIds.includes(sectionId);\n\n getWorkbenchRenderers(workbench).setSectionExpanded(treeViewId, sectionId, !expanded);\n };\n const moveNode = createMoveTreeNode({\n workbench,\n renderer: treeRenderer,\n resource,\n viewId,\n sections: body,\n childrenByNodeId,\n onError: onOpenResourceError,\n });\n\n const navigationContext = { workbench, treeViewId, onOpenResourceError };\n\n const activeNodeSelection = resolveTreeListSelection({\n sections: [...header, ...body, ...footer],\n childrenByNodeId,\n activeNodeId,\n activeLocation,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n const headerActiveNodeId = filterTreeListSelection(header, childrenByNodeId, activeNodeSelection);\n const bodyActiveNodeId = filterTreeListSelection(body, childrenByNodeId, activeNodeSelection);\n const footerActiveNodeId = filterTreeListSelection(footer, childrenByNodeId, activeNodeSelection);\n\n return (\n <TreeListDragProvider\n sections={[...visibleHeaderSections, ...visibleSections, ...visibleFooterSections]}\n canMove={treeRenderer.canMove}\n onReorderSections={onMoveSection}\n onReorderNodes={onReorderNodes}\n >\n <Flex as=\"section\" direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" aria-label={treeRenderer.title}>\n {!loading && visibleHeaderSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleHeaderSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={headerActiveNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"header\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeViewSearch\n visible={!loading && Boolean(treeRenderer.searchable)}\n placeholder={treeRenderer.searchPlaceholder}\n value={filter}\n onChange={setFilter}\n />\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 error={error}\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={(nextSectionIds) => onReorderSections(\"content\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onMoveNode={moveNode}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Box>\n </ScrollArea>\n {!loading && visibleFooterSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleFooterSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={footerActiveNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"footer\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n workbench={workbench}\n onClose={() => setParamsRequest(null)}\n />\n </Flex>\n </TreeListDragProvider>\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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { EmptyState, ScrollArea } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport {\n type CollectionSettingsPanel,\n getWorkbenchRenderers,\n type PreferenceScope,\n type SettingsRegistry,\n type WorkbenchPanelRenderInput,\n} from \"../../core\";\nimport { WorkbenchPreferencesForm } from \"../renderers/settings/preferences-form\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\nexport interface SettingsSurfacePanelProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\nconst Centered = (props: { children: ReactNode }) => (\n <Flex h=\"full\" minH=\"0\" align=\"center\" justify=\"center\" p=\"lg\">\n {props.children}\n </Flex>\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);\nconst SettingsViewContent = (props: { input: WorkbenchPanelRenderInput; panelId: string; viewId: string }) => {\n const { input, panelId, viewId } = props;\n const renderer = useWorkbenchStore(getWorkbenchRenderers(input.workbench).store, (state) => state.renderers[viewId]);\n useWorkbenchStore(getWorkbenchRenderers(input.workbench).store, (state) => state.refreshKeys[viewId] ?? 0);\n if (!renderer) {\n return (\n <Centered>\n <EmptyState title=\"Settings View not found\" />\n </Centered>\n );\n }\n return (\n <ScrollableSettingsContent>\n {renderer.render({ ...input, instance: { ...input.instance, panelId, viewId } }) as ReactNode}\n </ScrollableSettingsContent>\n );\n};\n// Resolve async collection data before rendering its registered View. The View\n// can read the current item from settings by the stable panel and item ids.\nconst CollectionItemView = (props: {\n panel: CollectionSettingsPanel;\n itemId: string;\n input: WorkbenchPanelRenderInput;\n}) => {\n const { panel, itemId, input } = props;\n const resolveCollectionItem = input.workbench.settings.resolveCollectionItem;\n const [state, setState] = useState<{\n status: \"loading\" | \"ready\" | \"missing\";\n }>({\n status: \"loading\",\n });\n useEffect(() => {\n let alive = true;\n setState({ status: \"loading\" });\n resolveCollectionItem(panel.id, itemId).then((item) => {\n if (!alive) return;\n setState(item === undefined ? { status: \"missing\" } : { status: \"ready\" });\n });\n return () => {\n alive = false;\n };\n }, [panel, itemId, resolveCollectionItem]);\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 <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\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 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 if (panel.kind === \"view\") return <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\n if (panel.kind === \"collection\") {\n if (!itemId)\n return (\n <Centered>\n <EmptyState title={panel.title} />\n </Centered>\n );\n return (\n <CollectionItemView\n key={`${resourceKey(resource) ?? itemId}:${revision}`}\n panel={panel}\n itemId={itemId}\n input={input}\n />\n );\n }\n return (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ p: \"lg\", display: \"flex\", flexDirection: \"column\", gap: \"md\" }}>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M/semibold\">{panel.title}</Text>\n {panel.description && (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" maxW=\"640px\">\n {panel.description}\n </Text>\n )}\n </Stack>\n <WorkbenchPreferencesForm\n preferences={input.workbench.preferences}\n names={panel.preferences}\n resolveScopeId={resolveScopeId}\n mode={panel.save ?? \"live\"}\n />\n </ScrollArea>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { PreferenceScope, SettingsRegistry, WorkbenchPanelRenderInput } from \"../../core\";\nimport { WorkbenchTreeView } from \"../renderers/tree/tree-view\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\nexport interface SettingsOverlayProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n navTreeId: string;\n title: string;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\n// The settings surface rendered inside the overlay dialog: a titled header bar,\n// then a full-height resizable nav on the left and the dispatching panel on the\n// right. Nav clicks execute the settings command, which re-opens this singleton\n// overlay with the new resource — selection stays resource-driven and the dialog\n// never closes mid-navigation.\nexport const SettingsOverlay = (props: SettingsOverlayProps) => {\n const { input, settings, navTreeId, title, resolveScopeId } = props;\n useSettingsRevision(settings);\n const resource = input.instance.resource;\n 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={resourceKey(resource)}\n />\n </Box>\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 return (\n <Flex direction=\"column\" position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <Flex\n align=\"center\"\n bg=\"bg.subtle\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n gap=\"2\"\n h=\"12\"\n px=\"3.5\"\n >\n <Box color=\"fg.accent\" display=\"inline-flex\">\n <WorkbenchIcon name=\"settings\" size={16} />\n </Box>\n <Text fontWeight=\"semibold\" textStyle=\"sm\">\n {title}\n </Text>\n </Flex>\n <Box flex=\"1\" minH=\"0\" minW=\"0\" position=\"relative\" overflow=\"hidden\">\n <ResizableSplitLayout\n position=\"absolute\"\n inset=\"0\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"left\"\n resizablePanel={nav}\n contentPanel={content}\n defaultSizePx={280}\n minSizePx={220}\n maxSizePx={420}\n contentMinSizePx={360}\n collapsible={false}\n resizeLabel=\"Resize settings navigation\"\n separator=\"line\"\n />\n </Box>\n </Flex>\n );\n};\n","import type { ResourceRef, SettingsScope } from \"../../core\";\nexport const SETTINGS_RESOURCE_KIND = \"workbench-settings\";\nexport const WORKBENCH_SETTINGS_OPEN_COMMAND_ID = \"workbench.settings.open\";\nexport const settingsPanelResource = (panel: { id: string; title: string; icon?: string }): ResourceRef => ({\n type: SETTINGS_RESOURCE_KIND,\n id: panel.id,\n label: panel.title,\n icon: panel.icon,\n metadata: { panelId: panel.id },\n});\nexport const settingsItemResource = (\n panelId: string,\n item: {\n id: string;\n label: string;\n icon?: string;\n },\n): ResourceRef => ({\n type: SETTINGS_RESOURCE_KIND,\n id: `${panelId}::${item.id}`,\n label: item.label,\n icon: item.icon,\n metadata: { panelId, itemId: item.id },\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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type {\n CollectionSettingsPanel,\n RegisteredSettingsPanel,\n SettingsAction,\n SettingsRegistry,\n TreeAction,\n TreeNode,\n TreeViewSection,\n} from \"../../core\";\nimport {\n isSettingsScopeVisible,\n settingsItemResource,\n settingsPanelResource,\n WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n} from \"./settings-resources\";\nexport const FALLBACK_SECTION_ID = \"settings\";\nconst toTreeActions = (actions: SettingsAction[] | undefined): TreeAction[] | undefined =>\n actions?.map((action) => ({ id: action.id, label: action.label, icon: action.icon, run: action.run }));\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 {\n id: resourceKey(resource),\n label,\n icon,\n resource,\n target: {\n kind: \"command\",\n commandId: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n args: { panelId: panel.id, itemId: id },\n },\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};\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 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 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};\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 const resource = settingsPanelResource(panel);\n return {\n id: resourceKey(resource),\n label: panel.title,\n icon: panel.icon,\n resource,\n target: {\n kind: \"command\",\n commandId: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n args: { panelId: panel.id },\n },\n };\n};\nexport interface BuildSettingsTreeInput {\n settings: SettingsRegistry;\n hasProjectScope: boolean;\n matchesWhen(expression?: string): boolean;\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, matchesWhen } = input;\n const sections = settings.listSections();\n const sectionsById = new Map(sections.map((section) => [section.id, section]));\n const panels = settings\n .listPanels()\n .filter((panel) => isSettingsScopeVisible(panel.scope, hasProjectScope) && matchesWhen(panel.when));\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 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 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 const sectionPanels = bySection.get(sectionId) ?? [];\n const actions = toTreeActions(section?.actions);\n if (sectionPanels.length === 0 && !actions) continue;\n const nodes: TreeNode[] = [];\n for (const panel of sectionPanels) nodes.push(await panelToNode(panel));\n // Settings groups are plain labels, not accordions — the whole tree stays visible.\n result.push({ id: sectionId, label: section?.title, actions, nodes, collapsible: false });\n }\n return result;\n};\n","import {\n type PreferenceScope,\n standardResourceIcons,\n type WorkbenchModuleContext,\n type WorkbenchModuleContribution,\n} from \"../../core\";\nimport { SettingsOverlay } from \"./settings-overlay\";\nimport {\n isSettingsScopeVisible,\n settingsItemResource,\n settingsPanelResource,\n WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n} 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 placement that hosts the whole settings surface.\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 { WORKBENCH_SETTINGS_OPEN_COMMAND_ID } from \"./settings-resources\";\n\nconst WIDGET_ID = WORKBENCH_SETTINGS_WIDGET_ID;\n\nconst openSettings = (input: { args: unknown; ctx: WorkbenchModuleContext; hasProjectScope: () => boolean }) => {\n const { args, ctx, hasProjectScope } = input;\n const requested = args && typeof args === \"object\" ? args : undefined;\n const panelId = requested && \"panelId\" in requested ? requested.panelId : undefined;\n const itemId = requested && \"itemId\" in requested ? requested.itemId : undefined;\n const requestedPanel = typeof panelId === \"string\" ? ctx.settings.getPanel(panelId) : undefined;\n const isVisible = (entry: NonNullable<typeof requestedPanel>) =>\n isSettingsScopeVisible(entry.scope, hasProjectScope()) && ctx.context.matches(entry.when);\n const panel =\n (requestedPanel && isVisible(requestedPanel) ? requestedPanel : undefined) ??\n ctx.settings.listPanels().find(isVisible);\n if (!panel) return undefined;\n const resource =\n panel.kind === \"collection\" && typeof itemId === \"string\"\n ? settingsItemResource(panel.id, { id: itemId, label: itemId })\n : settingsPanelResource(panel);\n ctx.overlays.openOverlay(WIDGET_ID, {\n resource,\n title: resource.label,\n });\n return resource;\n};\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.views.registerView({\n id: WORKBENCH_SETTINGS_NAV_WIDGET_ID,\n title: `${title} navigation`,\n body: {\n kind: \"tree\",\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: () =>\n buildSettingsTreeBody({\n settings: ctx.settings,\n hasProjectScope: hasProjectScope(),\n matchesWhen: (when) => ctx.context.matches(when),\n }),\n getChildren: () => [],\n },\n });\n\n ctx.views.registerView({\n id: WORKBENCH_SETTINGS_PANEL_WIDGET_ID,\n title,\n body: {\n kind: \"react\",\n render: (input) => (\n <SettingsSurfacePanel input={input} settings={ctx.settings} resolveScopeId={options.resolveScopeId} />\n ),\n },\n });\n\n ctx.views.registerView({\n id: WIDGET_ID,\n title,\n body: {\n kind: \"react\",\n render: (input) => (\n <SettingsOverlay\n input={input}\n settings={ctx.settings}\n navTreeId={WORKBENCH_SETTINGS_NAV_WIDGET_ID}\n title={title}\n resolveScopeId={options.resolveScopeId}\n />\n ),\n },\n });\n ctx.overlays.registerOverlay({\n id: WIDGET_ID,\n viewId: WIDGET_ID,\n config: {\n size: \"xl\",\n scrollBehavior: \"inside\",\n contentHeight: \"min(760px, 88vh)\",\n contentMaxWidth: \"min(1440px, 94vw)\",\n contentWidth: \"94vw\",\n closeTriggerTop: \"3.5\",\n // Settings hosts nested overlays (confirmations, popovers) that portal\n // outside this dialog's content; outside-interact dismissal would treat\n // clicks in them as \"close settings\". Esc and the close button remain.\n closeOnInteractOutside: false,\n },\n });\n\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: (args) => openSettings({ args, ctx, hasProjectScope }),\n },\n );\n\n // Keep the tree in sync as contributions register or their context conditions change.\n const refreshNavigation = () => {\n if (ctx.views.getView(WORKBENCH_SETTINGS_NAV_WIDGET_ID)) {\n ctx.views.refreshView(WORKBENCH_SETTINGS_NAV_WIDGET_ID);\n }\n };\n const unsubscribeSettings = ctx.settings.store.subscribe(refreshNavigation);\n const unsubscribeContext = ctx.context.store.subscribe(refreshNavigation);\n return {\n dispose() {\n unsubscribeSettings();\n unsubscribeContext();\n },\n };\n },\n };\n};\n","import type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\nexport const resolvePanelCollapsible = (workbench: WorkbenchCore, ...regions: WorkbenchRegion[]) =>\n regions.every((region) => workbench.layout.getRegionCollapsible(region));\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 = 1;\nexport const PANEL_MENU_COLLAPSE_THRESHOLD_PX = 480;\n\nexport const shouldCollapseWorkbenchPanelMenus = (panelWidth: number) =>\n panelWidth > 0 && panelWidth <= PANEL_MENU_COLLAPSE_THRESHOLD_PX;\n\nexport const canAttachWorkbenchPanelMenu = (input: CanAttachWorkbenchPanelMenuInput) => {\n const menuMinSizes = [...input.attachedMenuMinSizes, input.targetMenuMinSize];\n const requiredWidth =\n PANEL_CONTENT_MIN_SIZE_PX +\n menuMinSizes.reduce((total, size) => total + size, 0) +\n menuMinSizes.length * PANEL_MENU_RESIZE_HANDLE_SIZE_PX;\n\n return input.panelWidth >= requiredWidth;\n};\n","import { Box, HStack, IconButton, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { AttachedMenu, Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout, Tooltip } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelMenuRegion,\n type WorkbenchPanelMenuSide,\n type WorkbenchPanelRegion,\n type WorkbenchRegionSize,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { resolvePanelCollapsible } from \"../workbench/workbench-panel-state\";\nimport {\n canAttachWorkbenchPanelMenu,\n PANEL_CONTENT_MIN_SIZE_PX,\n 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 ignoreOwnerResourceKey: panel === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (panel === \"side\"\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement, {\n location: activeLocationPanel,\n })) &&\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.panelMenuState.store, (state) => state.openByMenuId[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.panelMenuState.setOpen(panelStateKey, true),\n onCollapsedChange: (collapsed) => {\n if (!collapsed || collapsible) workbench.panelMenuState.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 resizeLabel={`Resize ${view.label}`}\n separator=\"line\"\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 { useShallow } from \"zustand/react/shallow\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\n// Read mode policy through its store so the React compiler sees policy changes.\nexport const useWorkbenchModeRegionSettings = (workbench: WorkbenchCore, region: WorkbenchRegion) =>\n useWorkbenchStore(\n workbench.modes.store,\n useShallow(() => workbench.layout.getRegionSettings(region)),\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 { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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 bubbleIcon?: ReactNode;\n onOpen?: () => void;\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 const settings = useWorkbenchModeRegionSettings(workbench, \"side\");\n const canFloat = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\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 layerStyle=\"panel\"\n header={\n settings?.showHeader !== false && (header || canFloat) ? (\n <Header data-workbench-panel-header=\"side\" variant=\"main\" flexShrink={0} gap=\"sm\">\n <WorkbenchSidePanelHeader header={header} />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"side\" />\n {canFloat ? (\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 ) : null}\n </Header>\n ) : undefined\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, bubbleIcon, onOpen } = props;\n const mode = workbench.sidePanel.getMode();\n\n if (!workbench.sidePanel.canFloat() || 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={onOpen ?? (() => workbench.sidePanel.setMode(\"floating\"))}\n >\n {bubbleIcon ?? <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","export const terminalPlacementBindingId = (scope: string | undefined, instanceId: string) =>\n JSON.stringify([scope, instanceId]);\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\";\nimport { terminalPlacementBindingId } from \"./terminal-placement-binding\";\n\ninterface ControllerTerminalBridgeOptions {\n getBindingId?: () => string | undefined;\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 bindingId: options.getBindingId?.(),\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. Scope changes keep the session alive; the terminal\n * module ends it when its tab is explicitly closed.\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 getBindingId: () =>\n terminalPlacementBindingId(workbench.layout.getPersistenceScope(), placementRef.current.instanceId),\n getResource: () => placementRef.current.resource,\n getTitle: () => placementRef.current.title,\n }),\n );\n const [sessionId, setSessionId] = useState<string>();\n // The terminal resource label follows the session's foreground process name.\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 const updateShellPlacement = workbench.shellPlacements.updatePlacement;\n\n useEffect(() => {\n if (!sessionId || !processTitle) return;\n const currentPlacement = workbench.layout\n .getLayout()\n .regions.secondary.widgets.find((candidate) => candidate.widgetId === placement.instanceId);\n const identity = currentPlacement?.placementIdentity;\n if (identity?.kind === \"shell\" && currentPlacement?.resource) {\n updateShellPlacement(identity, { resource: { ...currentPlacement.resource, label: processTitle } });\n }\n }, [sessionId, processTitle, placement.instanceId, workbench.layout, updateShellPlacement]);\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 killOnUnmount={false}\n onSessionOpen={setSessionId}\n />\n </Box>\n );\n};\n","import type { ResourceRef, WorkbenchCoreContributionContext, WorkbenchModuleContribution } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { terminalPlacementBindingId } from \"./terminal-placement-binding\";\nimport { WorkbenchTerminalPanel } from \"./workbench-terminal-panel\";\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// 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/** Suggested secondary-region size for hosts that mount the terminal (createWorkbench regionSettings). */\nexport const WORKBENCH_TERMINAL_PANEL_SIZE = { defaultPx: 240, minPx: 128 };\ninterface OpenWorkbenchTerminalOptions {\n resource?: ResourceRef;\n reveal?: boolean;\n}\ntype TerminalResource = OpenWorkbenchTerminalOptions[\"resource\"];\nconst terminalInstanceIds = (ctx: WorkbenchCoreContributionContext) =>\n new Set(\n ctx.layout\n .listPanelInstances(\"secondary\")\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.instanceId),\n );\nconst watchClosedTerminalPlacements = (ctx: WorkbenchCoreContributionContext) => {\n // A scope rotation temporarily removes every placement. Only an explicit tab\n // close should end the PTY bound to that placement.\n let changingScope = false;\n const willChangeScope = ctx.layout.onWillChangePersistenceScope(() => {\n changingScope = true;\n });\n const didChangeScope = ctx.layout.onDidChangePersistenceScope(() => {\n changingScope = false;\n });\n const unsubscribeLayout = ctx.layout.store.subscribe((state, previousState) => {\n if (changingScope) return;\n const currentIds = new Set(\n state.layout.regions.secondary.widgets\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.widgetId),\n );\n const previousIds = previousState.layout.regions.secondary.widgets\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.widgetId);\n const scope = ctx.layout.getPersistenceScope();\n for (const instanceId of previousIds) {\n if (!currentIds.has(instanceId)) void ctx.terminal.killBinding(terminalPlacementBindingId(scope, instanceId));\n }\n });\n return {\n dispose() {\n unsubscribeLayout();\n willChangeScope.dispose();\n didChangeScope.dispose();\n const scope = ctx.layout.getPersistenceScope();\n for (const instanceId of terminalInstanceIds(ctx)) {\n void ctx.terminal.killBinding(terminalPlacementBindingId(scope, instanceId));\n }\n },\n };\n};\nconst terminalTitlePattern = /^Terminal (\\d+)$/;\nconst nextTerminalIndexes = new WeakMap<WorkbenchCoreContributionContext[\"layout\"][\"store\"], number>();\nconst getInitialTerminalIndex = (ctx: WorkbenchCoreContributionContext) => {\n const terminalPlacements = ctx.layout\n .getLayout()\n .regions.secondary.widgets.filter((placement) => placement.viewId === 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};\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};\nconst hasWorkspacePath = (resource: TerminalResource) =>\n typeof resource?.metadata?.workspacePath === \"string\" && resource.metadata.workspacePath.length > 0;\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// 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 } = input;\n const workspace = getTerminalResource(ctx, input.resource);\n const title = getNextTerminalTitle(ctx);\n const index = Number.parseInt(terminalTitlePattern.exec(title)?.[1] ?? \"1\", 10);\n const id = `${String(index).padStart(8, \"0\")}-${globalThis.crypto.randomUUID()}`;\n const resource: ResourceRef = {\n type: \"terminal\",\n id,\n label: title,\n icon: \"SquareTerminal\",\n metadata: workspace?.metadata,\n };\n const identity = ctx.shellPlacements.openPlacement({\n placementId: WORKBENCH_TERMINAL_WIDGET_ID,\n resource,\n open: \"pin\",\n title,\n });\n if (identity.kind !== \"shell\") throw new Error(\"Terminal placement must be shell-owned\");\n if (reveal) {\n ctx.shell.setRegionOpen(\"secondary\", true);\n }\n const placement = ctx.layout\n .getLayout()\n .regions.secondary.widgets.find(\n (candidate) =>\n candidate.placementIdentity?.kind === \"shell\" &&\n candidate.placementIdentity.placementId === identity.placementId &&\n candidate.placementIdentity.instanceKey === identity.instanceKey,\n );\n if (!placement) throw new Error(`Terminal placement did not open: ${identity.instanceKey}`);\n return toPanelInstance(placement);\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.views.registerView({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n title: \"Terminal\",\n body: {\n kind: \"react\",\n render: (input) => <WorkbenchTerminalPanel placement={input.instance} workbench={input.workbench} />,\n },\n }),\n ctx.shellPlacements.registerPlacement({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n item: {\n kind: \"binding\",\n binding: {\n kinds: [\n {\n kind: \"resource-kind\",\n id: \"terminal\",\n },\n ],\n view: {\n kind: \"view\",\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n },\n cardinality: \"many\",\n add: { kind: \"command\", target: { command: { kind: \"command\", id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID } } },\n },\n },\n region: \"secondary\",\n mountStrategy: \"keep-mounted\",\n // Background flows mint terminals without user intent; a closed Secondary\n // Panel must stay closed until an explicit open reveals it.\n hiddenByDefault: true,\n }),\n watchClosedTerminalPlacements(ctx),\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID,\n label: \"Open terminal\",\n category: \"Terminal\",\n icon: \"SquareTerminal\",\n },\n { execute: (_args, context) => openWorkbenchTerminal(ctx, { resource: context?.resource }) },\n ),\n ];\n 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 defaultThemePreference?: ThemePreference;\n preferenceScope?: string;\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\n initialPreference={initialThemePreference}\n defaultPreference={props.defaultThemePreference}\n preferenceScope={props.preferenceScope}\n themePreferences={themePreferences}\n >\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 { getWorkbenchRenderers, type WorkbenchCore, type 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 /** Controls dialog semantics. Every workbench overlay blocks background pointer input. */\n modal?: boolean;\n preventScroll?: boolean;\n trapFocus?: boolean;\n motionPreset?: \"scale\" | \"slide-in-bottom\" | \"slide-in-top\" | \"slide-in-left\" | \"slide-in-right\" | \"none\";\n role?: \"dialog\" | \"alertdialog\";\n contentHeight?: string;\n contentMaxHeight?: string;\n contentMinHeight?: string;\n contentWidth?: string;\n contentMaxWidth?: string;\n closeTriggerTop?: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst booleanValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"boolean\" ? value : undefined;\n};\n\nconst resolveOverlayConfig = (config: unknown): WorkbenchOverlayWidgetConfig => {\n if (!isRecord(config)) return {};\n\n const overlayConfig: WorkbenchOverlayWidgetConfig = {};\n const size = stringValue(config, \"size\");\n const placement = stringValue(config, \"placement\");\n const scrollBehavior = stringValue(config, \"scrollBehavior\");\n const closeOnEscape = booleanValue(config, \"closeOnEscape\");\n const closeOnInteractOutside = booleanValue(config, \"closeOnInteractOutside\");\n const modal = booleanValue(config, \"modal\");\n const preventScroll = booleanValue(config, \"preventScroll\");\n const trapFocus = booleanValue(config, \"trapFocus\");\n const motionPreset = stringValue(config, \"motionPreset\");\n const role = stringValue(config, \"role\");\n const contentHeight = stringValue(config, \"contentHeight\");\n const contentMaxHeight = stringValue(config, \"contentMaxHeight\");\n const contentMinHeight = stringValue(config, \"contentMinHeight\");\n const contentWidth = stringValue(config, \"contentWidth\");\n const contentMaxWidth = stringValue(config, \"contentMaxWidth\");\n const closeTriggerTop = stringValue(config, \"closeTriggerTop\");\n\n if (size) overlayConfig.size = size as WorkbenchOverlayWidgetConfig[\"size\"];\n if (placement) overlayConfig.placement = placement as WorkbenchOverlayWidgetConfig[\"placement\"];\n if (scrollBehavior) overlayConfig.scrollBehavior = scrollBehavior as WorkbenchOverlayWidgetConfig[\"scrollBehavior\"];\n if (closeOnEscape !== undefined) overlayConfig.closeOnEscape = closeOnEscape;\n if (closeOnInteractOutside !== undefined) overlayConfig.closeOnInteractOutside = closeOnInteractOutside;\n if (modal !== undefined) overlayConfig.modal = modal;\n if (preventScroll !== undefined) overlayConfig.preventScroll = preventScroll;\n if (trapFocus !== undefined) overlayConfig.trapFocus = trapFocus;\n if (motionPreset) overlayConfig.motionPreset = motionPreset as WorkbenchOverlayWidgetConfig[\"motionPreset\"];\n if (role) overlayConfig.role = role as WorkbenchOverlayWidgetConfig[\"role\"];\n if (contentHeight) overlayConfig.contentHeight = contentHeight;\n if (contentMaxHeight) overlayConfig.contentMaxHeight = contentMaxHeight;\n if (contentMinHeight) overlayConfig.contentMinHeight = contentMinHeight;\n if (contentWidth) overlayConfig.contentWidth = contentWidth;\n if (contentMaxWidth) overlayConfig.contentMaxWidth = contentMaxWidth;\n if (closeTriggerTop) overlayConfig.closeTriggerTop = closeTriggerTop;\n return overlayConfig;\n};\n\nexport const resolveOverlayDialogConfig = (placement: Pick<WorkbenchWidgetPlacement, \"closable\">, config: unknown) => {\n const closeable = placement.closable === true;\n const overlayConfig = resolveOverlayConfig(config);\n\n return {\n size: \"xl\",\n scrollBehavior: \"inside\",\n modal: true,\n preventScroll: true,\n trapFocus: true,\n ...overlayConfig,\n closeOnEscape: closeable && (overlayConfig.closeOnEscape ?? true),\n closeOnInteractOutside: closeable && (overlayConfig.closeOnInteractOutside ?? true),\n } satisfies WorkbenchOverlayWidgetConfig;\n};\n\nconst resolveActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveOverlayDialogRenderState = (\n activePlacement: WorkbenchWidgetPlacement | undefined,\n exitingPlacement: WorkbenchWidgetPlacement | undefined,\n) => {\n if (activePlacement) return { open: true, placement: activePlacement };\n if (exitingPlacement) return { open: false, placement: exitingPlacement };\n return undefined;\n};\n\nconst WorkbenchOverlayFallback = (props: { label: string }) => (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={props.label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n);\n\ninterface WorkbenchOverlayLayerProps {\n workbench: WorkbenchCore;\n}\n\nexport const WorkbenchOverlayLayer = (props: WorkbenchOverlayLayerProps) => {\n const { workbench } = props;\n const overlayRegion = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.overlay);\n const renderers = useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.renderers);\n useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.refreshKeys);\n const [exitingPlacement, setExitingPlacement] = useState<WorkbenchWidgetPlacement | undefined>();\n\n const activePlacement = resolveActivePlacement(overlayRegion.widgets, overlayRegion.activeWidgetId);\n const renderState = resolveOverlayDialogRenderState(activePlacement, exitingPlacement);\n\n useEffect(() => {\n if (activePlacement) setExitingPlacement(undefined);\n }, [activePlacement]);\n\n if (!renderState) return null;\n\n const { open, placement } = renderState;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const overlayConfig = resolveOverlayDialogConfig(placement, widget?.config);\n const {\n contentHeight,\n contentMaxHeight,\n contentMinHeight,\n contentWidth,\n contentMaxWidth,\n closeTriggerTop,\n ...dialogRootConfig\n } = overlayConfig;\n const renderer = widget ? renderers[widget.rendererId] : undefined;\n const canCloseOverlay = open && placement.closable === true;\n const closeLabel = placement.title ?? widget?.title ?? \"overlay\";\n\n const body =\n widget && renderer ? (\n (renderer.render({\n workbench,\n panel: toPanelContribution(widget),\n instance: toPanelInstance(placement),\n refresh: () => undefined,\n }) as ReactNode)\n ) : (\n <WorkbenchOverlayFallback\n label={\n widget ? `No renderer registered for ${widget.rendererId}.` : \"Widget contribution is no longer registered.\"\n }\n />\n );\n\n const handleOpenChange = (details: { open: boolean }) => {\n if (!details.open && canCloseOverlay) {\n setExitingPlacement(placement);\n workbench.layout.closePanel(placement.widgetId);\n }\n };\n\n const handleExitComplete = () => {\n setExitingPlacement((current) => (current?.widgetId === placement.widgetId ? undefined : current));\n };\n\n // Nested overlays (confirmation dialogs, popovers, menus) portal outside this\n // dialog's content, so their clicks register as outside interactions here. If\n // the interaction landed inside any overlay content, it cannot mean \"dismiss\n // the settings dialog\" — the widget's own content never reaches this handler.\n const handleInteractOutside = (event: CustomEvent<{ originalEvent?: Event }>) => {\n const target = event.detail.originalEvent?.target;\n if (target instanceof Element && target.closest('[data-part=\"content\"]')) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog.Root\n {...dialogRootConfig}\n open={open}\n onExitComplete={handleExitComplete}\n onOpenChange={handleOpenChange}\n onInteractOutside={handleInteractOutside}\n >\n <Portal>\n <Dialog.Backdrop position=\"fixed\" inset=\"0\" pointerEvents=\"auto\" />\n <Dialog.Positioner\n position=\"fixed\"\n inset=\"0\"\n overflow={dialogRootConfig.scrollBehavior === \"outside\" ? \"auto\" : \"hidden\"}\n pointerEvents=\"auto\"\n >\n <Dialog.Content\n position=\"relative\"\n overflow=\"hidden\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n h={contentHeight}\n maxH={contentMaxHeight}\n minH={contentMinHeight}\n w={contentWidth}\n maxW={contentMaxWidth}\n >\n {body}\n {canCloseOverlay ? (\n <Dialog.CloseTrigger\n aria-label={`Close ${closeLabel}`}\n alignItems=\"center\"\n borderRadius=\"sm\"\n color=\"fg.muted\"\n cursor=\"pointer\"\n display=\"inline-flex\"\n h=\"5\"\n insetEnd=\"1\"\n justifyContent=\"center\"\n position=\"absolute\"\n top={closeTriggerTop ?? \"1\"}\n w=\"5\"\n zIndex=\"1\"\n _hover={{ bg: \"bg.subtle\", color: \"fg\" }}\n >\n <WorkbenchIcon name=\"x\" size={16} />\n </Dialog.CloseTrigger>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n};\n","import { IconButton } from \"@chakra-ui/react\";\nimport { ResourceActionMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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 if (!resource || actions.length === 0) return null;\n const label = resource.label ?? resource.id ?? resource.type;\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 { ModeChromeView, useModeChrome } from \"../region/mode-chrome\";\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.pageLocations.historyStore, (state) => state);\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={!history.canGoBack}\n onClick={() => workbench.pageLocations.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={!history.canGoForward}\n onClick={() => workbench.pageLocations.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 chrome = useModeChrome(workbench, \"nav\");\n const sidenavControls = regionControls.filter((control) => control.id === \"sidenav\");\n const trailingRegionControls = regionControls.filter((control) => control.id !== \"sidenav\");\n\n if (chrome === false) return null;\n if (chrome)\n return (\n <Header data-workbench-region=\"nav\" variant=\"main\" padding=\"0\" flexShrink={0}>\n <Box flex=\"1\" minW=\"0\" h=\"full\" overflow=\"hidden\">\n <ModeChromeView workbench={workbench} viewId={chrome} region=\"nav\" />\n </Box>\n <WorkbenchRegionControls controls={regionControls} />\n </Header>\n );\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 { ControlValueMap } from \"@pstdio/sdk/extensions\";\nimport type { InputGroup, Param, ParamValue } from \"@pstdio/ui\";\nimport { ParamEditor, ScrollArea } from \"@pstdio/ui\";\nimport { controlValueSchema } from \"pstdio-api-contracts\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getWorkbenchRenderers,\n type RegisteredControlsRendererContribution,\n type WorkbenchCore,\n type WorkbenchPanelInstance,\n} from \"../../../core\";\n\ninterface WorkbenchControlsViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredControlsRendererContribution;\n placement: WorkbenchPanelInstance;\n}\ninterface ControlsViewState {\n params: Param[];\n groups: InputGroup[];\n values: ControlValueMap;\n readOnly: boolean;\n loading: boolean;\n error?: string;\n}\nconst initialState: ControlsViewState = { params: [], groups: [], values: {}, readOnly: false, loading: true };\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 useEffect(() => {\n let cancelled = false;\n setState(initialState);\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve()\n .then(() => contribution.executeQuery(resource))\n .then((result) => {\n if (cancelled || requestRef.current !== requestId) return;\n const values = { ...(contribution.defaultValues ?? {}), ...(result.values ?? {}) };\n const next = {\n params: result.params ?? [],\n groups: result.groups ?? [],\n values,\n readOnly: Boolean(result.readOnly),\n loading: false,\n };\n setState(next);\n })\n .catch((error: unknown) => {\n if (cancelled || requestRef.current !== requestId) return;\n setState({ ...initialState, loading: false, error: error instanceof Error ? error.message : String(error) });\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).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 const readOnly = state.readOnly || (!contribution.updateValue && !contribution.apply);\n const showFooter = !readOnly && (Boolean(contribution.apply) || Boolean(contribution.reset));\n const handleChange = (id: string, input: ParamValue) => {\n const value = controlValueSchema.parse(input);\n // The command runs outside the setState updater: React may invoke updaters\n // twice (StrictMode), which would double-execute the update command.\n const values = { ...state.values, [id]: value };\n if (contribution.updateValue) void contribution.updateValue({ controlId: id, value, values, resource });\n setState((prev) => ({ ...prev, values: { ...prev.values, [id]: value } }));\n };\n 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 <ControlsContent state={state} contribution={contribution} readOnly={readOnly} onChange={handleChange} />\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\ninterface ControlsContentProps {\n state: ControlsViewState;\n contribution: RegisteredControlsRendererContribution;\n readOnly: boolean;\n onChange(id: string, value: ParamValue): void;\n}\nconst ControlsContent = (props: ControlsContentProps) => {\n const { state, contribution, readOnly, onChange } = props;\n if (state.loading)\n return (\n <Box p=\"md\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n Loading…\n </Text>\n </Box>\n );\n if (state.error)\n return (\n <Box p=\"md\">\n <Text role=\"alert\" textStyle=\"paragraph/S/regular\" color=\"fg\">\n {state.error}\n </Text>\n </Box>\n );\n if (state.params.length || state.groups.length)\n return (\n <ParamEditor\n variant=\"small\"\n params={state.params}\n groups={state.groups}\n defaultValues={state.values}\n readOnly={readOnly}\n onChange={onChange}\n />\n );\n return (\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};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, 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 getWorkbenchRenderers(workbench).setControlsRendererImplementation(\n ({ workbench: scope, instance, controlsRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getControlsRenderer(controlsRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchControlsView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, 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 getWorkbenchRenderers(workbench).setDataTableRendererImplementation(\n ({ workbench: scope, instance, dataTableRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getDataTableRenderer(dataTableRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchDataTableView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import { createElement, lazy, Suspense } from \"react\";\nimport { getWorkbenchRenderers, 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\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 getWorkbenchRenderers(workbench).setFileRendererImplementation(({ workbench: scope, instance, fileRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).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","import type { ComponentType, ReactNode } from \"react\";\nimport type {\n AttributeDescriptor,\n AttributesSource,\n BoardColumnConfig,\n KanbanRendererContribution,\n KanbanRendererRow,\n RegisteredKanbanRendererContribution,\n ResourceContextAction,\n} from \"../../../core\";\n\ntype ReactColumnIcon = ComponentType<{ size?: number | string }>;\nexport type ReactAttributeDescriptor = AttributeDescriptor<ReactNode>;\nexport type ReactAttributesSource = AttributesSource<ReactNode>;\nexport type ReactBoardColumnConfig = BoardColumnConfig<ReactColumnIcon>;\nexport type ReactResourceContextAction = ResourceContextAction<ReactNode>;\nexport type ReactKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> =\n KanbanRendererContribution<TRow, ReactNode, ReactColumnIcon>;\n\n// The core stores presentation values without choosing a UI framework, as it\n// does for view.render. Installing the React renderer binds that presentation.\nexport const bindReactKanbanPresentation = (contribution: RegisteredKanbanRendererContribution) =>\n contribution as RegisteredKanbanRendererContribution<KanbanRendererRow, ReactNode, ReactColumnIcon>;\n","export const createKanbanViewQuerySequencer = () => {\n let latestQueryId = 0;\n\n return {\n next: () => {\n latestQueryId += 1;\n return latestQueryId;\n },\n isLatest: (queryId: number) => queryId === latestQueryId,\n };\n};\n\nexport const executeKanbanViewQuery = async <TRow>(executeQuery: () => Promise<TRow[]> | TRow[]) => {\n try {\n return await executeQuery();\n } catch {\n return [];\n }\n};\n","import type { WorkbenchPanelInstance } from \"../../../core\";\n\nconst resolveProjectScope = (placement: WorkbenchPanelInstance, storageScope: string | undefined) => {\n const metadata = placement.resource?.metadata;\n const projectId = metadata?.projectId;\n if (typeof projectId === \"string\") return projectId;\n\n const favoriteScope = metadata?.favoriteScope;\n if (!favoriteScope || typeof favoriteScope !== \"object\" || Array.isArray(favoriteScope)) {\n return storageScope;\n }\n\n const scope = favoriteScope as { scope?: unknown; projectId?: unknown };\n return scope.scope === \"project\" && typeof scope.projectId === \"string\" ? scope.projectId : undefined;\n};\n\nexport const resolveKanbanRendererStorageKey = (\n kanbanRendererId: string,\n placement: WorkbenchPanelInstance,\n storageScope?: string,\n) => {\n const baseKey = `pstdio:workbench:kanbanRenderer:${kanbanRendererId}:${placement.instanceId}`;\n const projectScope = resolveProjectScope(placement, storageScope);\n return projectScope ? `${baseKey}:project:${projectScope}` : baseKey;\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea } from \"@pstdio/ui\";\nimport {\n type AttributeDescriptor,\n type AttributesSource,\n isAttributesSource,\n KanbanRenderer,\n type KanbanRendererRow,\n useKanbanRendererStore,\n} from \"@pstdio/ui/kanban-renderer\";\nimport { type ReactNode, useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport type {\n KanbanRendererQueryState,\n RegisteredKanbanRendererContribution,\n ResourceRef,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport { bindReactKanbanPresentation } from \"./kanban-presentation\";\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\nexport const isKanbanRowResource = (resource: unknown): resource is ResourceRef =>\n Boolean(\n resource &&\n typeof resource === \"object\" &&\n \"type\" in resource &&\n typeof resource.type === \"string\" &&\n \"id\" in resource &&\n typeof resource.id === \"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, placement } = props;\n const contribution = bindReactKanbanPresentation(props.contribution);\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const attributes = useResolvedContributionAttributes(contribution.attributes);\n const storageKey = resolveKanbanRendererStorageKey(contribution.id, placement, contribution.storageScope);\n const initialState = {\n settings: contribution.defaultSettings,\n filters: contribution.defaultFilters,\n views: contribution.defaultViews,\n activeViewId: contribution.defaultActiveViewId,\n };\n\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n\n const [rows, setRows] = useState<KanbanRendererRow[]>([]);\n const querySequencer = useRef(createKanbanViewQuerySequencer());\n\n // Run executeQuery whenever settings/filters change.\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n const queryId = querySequencer.current.next();\n const state: KanbanRendererQueryState = { settings, filters };\n void executeKanbanViewQuery(() => contribution.executeQuery(state)).then((next) => {\n if (cancelled || !querySequencer.current.isLatest(queryId)) return;\n setRows(next);\n });\n };\n runQuery();\n\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshKanbanRenderer((event) => {\n if (event.kanbanRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") {\n subscription();\n } else {\n subscription?.dispose();\n }\n refreshSubscription.dispose();\n };\n }, [contribution, filters, settings, workbench]);\n\n const handleOpenRow = (row: KanbanRendererRow) => {\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n\n const getRowContextMenuActions = (row: KanbanRendererRow) => {\n const resourceActions = isKanbanRowResource(row.resource) ? resolveResourceActions(row.resource) : [];\n const contributionActions = contribution.getRowContextMenuActions?.(row) ?? [];\n return mergeKanbanViewRowActions(resourceActions, contributionActions);\n };\n\n return (\n <WorkbenchKanbanViewFrame usesInternalScroll={settings.viewMode === \"board\"}>\n <KanbanRenderer\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={contribution.defaultSettings}\n defaultFilters={contribution.defaultFilters}\n defaultViews={contribution.defaultViews}\n defaultActiveViewId={contribution.defaultActiveViewId}\n emptyTitle={contribution.emptyTitle}\n emptyDescription={contribution.emptyDescription}\n getBoardColumnConfig={contribution.getBoardColumnConfig}\n hideToolbar={contribution.hideToolbar}\n onRowClick={contribution.onRowActivate ? handleOpenRow : undefined}\n onAttributeChange={contribution.onAttributeChange}\n onReorder={contribution.onReorder}\n createRow={contribution.createRow}\n onCreateRow={contribution.onCreateRow}\n onColumnAction={contribution.onColumnAction}\n getRowContextMenuActions={getRowContextMenuActions}\n />\n </WorkbenchKanbanViewFrame>\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, 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 getWorkbenchRenderers(workbench).setKanbanRendererImplementation(\n ({ workbench: scope, instance, kanbanRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getKanbanRenderer(kanbanRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchKanbanView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import type { ResourceContextAction } from \"@pstdio/ui\";\nimport { createElement } from \"react\";\nimport { getWorkbenchRenderers, 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\nconst isSidenavPlacement = (workbench: WorkbenchCore, instanceId: string) =>\n workbench.layout.getLayout().regions.sidenav.widgets.some((placement) => placement.widgetId === instanceId);\n\nconst viewContextId = (workbench: WorkbenchCore, panelId: string, viewId: string | undefined) => {\n const config = workbench.layout.getPanel(panelId)?.config;\n if (config && typeof config === \"object\" && \"viewContextId\" in config) {\n const candidate = config.viewContextId;\n if (typeof candidate === \"string\") return candidate;\n }\n return viewId;\n};\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 getWorkbenchRenderers(workbench).setTreeRendererImplementation(({ workbench: scope, instance, treeId }) =>\n createElement(WorkbenchTreeView, {\n workbench: scope,\n treeViewId: treeId,\n resource: instance.resource,\n viewId: viewContextId(scope, instance.panelId, instance.viewId),\n renderParamField: installation.renderParamField,\n onSidenavContextActionsChange: isSidenavPlacement(scope, instance.instanceId)\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 getActiveWorkbenchLocationPanel,\n getWorkbenchModePanelForRegion,\n isWorkbenchModePanelAvailable,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n type WorkbenchCore,\n type WorkbenchRegion,\n} from \"../../core\";\nimport { useModeChrome } from \"../region/mode-chrome\";\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 chrome = useModeChrome(workbench, region);\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 (chrome !== undefined) return chrome !== false;\n if (!panelAvailable) return false;\n if (state.placeholders[region]) return true;\n if (!options.locationScoped) return state.layout.regions[region].widgets.length > 0;\n\n return state.layout.regions[region].widgets.some((placement) => {\n const widget = state.widgets[placement.contributionId];\n if (!widget) return false;\n return region === \"side\"\n ? matchesWorkbenchModeEligibility(widget, modeId)\n : isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n location: getActiveWorkbenchLocationPanel(state.layout),\n });\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 } 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.layout.store, (state) => state.layout.regions.secondary.visible);\n\n return {\n has: hasContent || hasHeader || hasPanelHeader,\n hasHeader,\n collapsible,\n collapsed: !open,\n onCollapsedChange: (collapsed: boolean) => {\n if (!collapsed || collapsible) workbench.shell.setRegionOpen(\"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 { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\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 const settings = useWorkbenchModeRegionSettings(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 layerStyle=\"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 {settings?.showHeader !== false && (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 { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\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 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 const settings = useWorkbenchModeRegionSettings(workbench, \"main\");\n\n if (settings?.showHeader === false || (!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 modeSettings = useWorkbenchModeRegionSettings(workbench, \"secondary\");\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 modeSettings?.size ?? 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\n data-workbench-panel=\"main\"\n gridTemplateRows=\"auto minmax(0, 1fr)\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n bg={workbenchBackgrounds.main}\n layerStyle=\"panel\"\n >\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}\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 resizeLabel=\"Resize Secondary Panel\"\n onSizeChange={(height) => workbench.layout.setRegionSize(\"secondary\", height)}\n onCollapsedChange={secondaryPanel.onCollapsedChange}\n />\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { ModeChromeView, useModeChrome } from \"../region/mode-chrome\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchWidgetHost } from \"../region/widget-host\";\nimport { useWorkbenchActiveModeId } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\n\ninterface WorkbenchSidenavProps {\n workbench: WorkbenchCore;\n contextActions: ResourceContextAction[];\n}\n\nexport const WorkbenchSidenav = (props: WorkbenchSidenavProps) => {\n const { workbench, contextActions } = props;\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 layerStyle=\"panel\"\n display=\"flex\"\n flexDirection=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n w=\"full\"\n >\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\ninterface WorkbenchStatusBarItemsProps {\n workbench: WorkbenchCore;\n slot: \"leading\" | \"trailing\";\n}\n\nconst WorkbenchStatusBarItems = (props: WorkbenchStatusBarItemsProps) => {\n const { slot, workbench } = props;\n const activeModeId = useWorkbenchActiveModeId(workbench);\n const items = activeModeId === workbench.modes.getActiveModeId() ? workbench.statusBar.listVisibleItems(slot) : [];\n\n return items.map((item) => {\n const view = workbench.views.getView(item.viewId);\n if (!view) return null;\n return (\n <Box key={item.id} display=\"flex\" alignItems=\"center\" minW=\"0\" h=\"full\">\n <WorkbenchWidgetHost\n workbench={workbench}\n region=\"status\"\n placement={{\n widgetId: item.id,\n contributionId: view.id,\n viewId: view.id,\n title: view.title,\n closable: false,\n }}\n />\n </Box>\n );\n });\n};\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 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 useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n const chrome = useModeChrome(workbench, \"status\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"status\"\n data-workbench-region=\"status\"\n as=\"footer\"\n flexShrink={0}\n h={WORKBENCH_STATUS_BAR_HEIGHT}\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n >\n {chrome ? (\n <ModeChromeView workbench={workbench} region=\"status\" viewId={chrome} />\n ) : (\n <Box display=\"flex\" alignItems=\"stretch\" justifyContent=\"space-between\" h=\"full\" minW=\"0\" w=\"full\">\n <Box display=\"flex\" alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"leading\" />\n </Box>\n <Box display=\"flex\" alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"trailing\" />\n </Box>\n </Box>\n )}\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 { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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 const persistedSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.side.size);\n const modeSettings = useWorkbenchModeRegionSettings(workbench, \"side\");\n const size = modeSettings?.size ?? workbench.layout.getRegionSize(\"side\");\n const collapsible = modeSettings?.collapsible ?? workbench.layout.getRegionCollapsible(\"side\");\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={persistedSize ?? size?.defaultPx ?? ATTACHED_PANEL_DEFAULT_SIZE_PX}\n minSizePx={size?.minPx ?? ATTACHED_PANEL_MIN_SIZE_PX}\n maxSizePx={size?.maxPx}\n collapsible={collapsible}\n onSizeChange={(width) => workbench.layout.setRegionSize(\"side\", width)}\n contentMinSizePx={contentMinSizePx}\n resizeLabel=\"Resize Side Panel\"\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 { type ReactNode, useLayoutEffect, useRef, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchShellOpenRegion } 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 { WorkbenchKeybindingDispatcher } from \"../keybindings/workbench-keybinding-dispatcher\";\nimport { WorkbenchNotificationHost } from \"../notifications/notification-host\";\nimport { useModeChrome } from \"../region/mode-chrome\";\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 } 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 /** Host chrome above all workbench regions, inside the current theme. */\n titleBar?: ReactNode;\n renderParamField?: CommandParamFieldRenderer;\n /** Icon shown in the closed Side Panel's bubble launcher. */\n sidePanelBubbleIcon?: ReactNode;\n /** Host action for opening the closed Side Panel from its bubble launcher. */\n onOpenSidePanel?: () => void;\n}\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 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.floatingSlot;\n return input.attachedSlot;\n};\n\nconst useWorkbenchLayoutFlags = (workbench: WorkbenchCore) => {\n const statusChrome = useModeChrome(workbench, \"status\");\n const statusBarItems = useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n const activeModeId = useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n return {\n hasNavWidgets: useWorkbenchRegionContent(workbench, \"nav\"),\n hasActivityBarWidgets: useWorkbenchRegionContent(workbench, \"activity\"),\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:\n statusChrome !== undefined\n ? statusChrome !== false\n : activeModeId === workbench.modes.getActiveModeId() &&\n Object.keys(statusBarItems).length > 0 &&\n workbench.statusBar.listVisibleItems().length > 0,\n };\n};\n\ninterface WorkbenchRegionControlsInput {\n showSidenav: boolean;\n sidenavOpen: boolean;\n showSecondaryPanel: boolean;\n secondaryPanelOpen: boolean;\n hasSidePanel: boolean;\n sidePanelMode: \"attached\" | \"floating\" | \"closed\";\n setPanelOpen: (region: WorkbenchShellOpenRegion, open: boolean) => void;\n}\n\nconst createWorkbenchRegionControls = (input: WorkbenchRegionControlsInput) => {\n const controls: WorkbenchNavRegionControl[] = [];\n\n if (input.showSidenav && !input.sidenavOpen) {\n controls.push({\n id: \"sidenav\",\n label: \"Show Sidenav\",\n icon: \"PanelLeft\",\n open: false,\n onToggle: () => input.setPanelOpen(\"sidenav\", true),\n });\n }\n\n if (input.showSecondaryPanel) {\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 !== \"closed\";\n controls.push({\n id: \"side\",\n label: open ? \"Hide Side Panel\" : \"Show Side Panel\",\n icon: \"PanelRight\",\n open,\n onToggle: () => input.setPanelOpen(\"side\", !open),\n });\n }\n\n return controls;\n};\n\nconst WorkbenchContent = (props: WorkbenchProps) => {\n const { workbench, renderParamField, sidePanelBubbleIcon, onOpenSidePanel, titleBar } = 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(workbench.layout.store, (state) => state.layout.regions.sidenav.visible);\n const secondaryPanelOpen = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.regions.secondary.visible,\n );\n const hasSecondaryPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const hasSidePanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"side\");\n const floatingPanelsAllowed = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n\n const {\n hasActivityBarWidgets,\n hasNavWidgets,\n hasSideHeaderWidgets,\n hasSideWidgets,\n hasSidenavWidgets,\n hasSecondaryHeaderWidgets,\n hasSecondaryWidgets,\n hasStatusWidgets,\n } = useWorkbenchLayoutFlags(workbench);\n const hasSidePanel = hasSideHeaderWidgets || hasSideWidgets || hasSidePanelHeader;\n const showSidenav = hasSidenavWidgets;\n const sidenavCollapsible = resolvePanelCollapsible(workbench, \"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 = workbench.shell.setRegionOpen;\n const regionControls = createWorkbenchRegionControls({\n showSidenav,\n sidenavOpen,\n showSecondaryPanel,\n secondaryPanelOpen,\n hasSidePanel,\n sidePanelMode,\n setPanelOpen,\n });\n\n const sideHeader =\n hasSideHeaderWidgets || hasSidePanelHeader ? (\n <WorkbenchSidePanelRegionHeader workbench={workbench} hasSideHeader={hasSideHeaderWidgets} />\n ) : undefined;\n const activeSidePanelSlot = resolveActiveSidePanelSlot({\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={<WorkbenchSidenav workbench={workbench} contextActions={sidenavContextActions} />}\n contentPanel={contentWithHeader}\n collapsed={!sidenavOpen}\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 onSizeChange={(width) => workbench.layout.setRegionSize(\"sidenav\", width)}\n onCollapsedChange={(collapsed) => {\n if (!collapsed || sidenavCollapsible) setPanelOpen(\"sidenav\", !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 {titleBar}\n <Flex\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n py=\"panel-gap\"\n pr=\"panel-gap\"\n pl={hasActivityBarWidgets ? \"0\" : \"panel-gap\"}\n >\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 bubbleIcon={sidePanelBubbleIcon}\n onOpen={onOpenSidePanel}\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 </WorkbenchThemeScope>\n );\n};\n\nexport const Workbench = (props: WorkbenchProps) => {\n const themePreferences = useWorkbenchThemePreferences(props.workbench);\n const mode = useWorkbenchStore(props.workbench.modes.store, (state) =>\n state.activeModeId ? state.modes[state.activeModeId] : undefined,\n );\n const fileIconThemePreferences = useWorkbenchFileIconThemePreferences(props.workbench);\n\n return (\n <WorkbenchThemeProvider\n themePreferences={themePreferences}\n fileIconThemePreferences={fileIconThemePreferences}\n defaultThemePreference={mode?.defaultTheme}\n preferenceScope={mode?.defaultTheme ? mode.id : undefined}\n >\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":["getSessionStatus","item","resource","metadata","status","undefined","WorkbenchBreadcrumbIcon","props","$","_c","t0","indicator","type","t1","jsx","SessionIndicator","icon","Text","WorkbenchIcon","WorkbenchBreadcrumbTitle","title","t2","HStack","buildWorkbenchBreadcrumbItems","items","map","url","onClick","WorkbenchBreadcrumbView","workbench","useWorkbenchStore","breadcrumbs","store","_temp","length","Breadcrumb","state","useWorkbenchCompositionPanels","layout","modes","activeModeId","commands","context","main","composition","panelsFor","secondary","side","chakraBackgrounds","sidenav","panel","vscodeColor","token","fallback","replaceAll","workbenchBackgrounds","widget","workbenchRegionBackgrounds","nav","activity","overlay","workbenchCommandPaletteBackground","getWorkbenchRegionBackground","region","humanize","value","spaced","replace","trim","charAt","toUpperCase","slice","isRecord","Array","isArray","isFileUploadValue","file","id","name","isCommandFilesParamValue","refs","every","ref","uploads","createCommandFilesParamValue","input","commandFilesParamValue","raw","multiple","filter","stringifyEditableValue","String","JSON","stringify","toIdentifierPrefix","_match","char","toLowerCase","metadataString","key","resourceContextValue","entry","metadataValue","resourceKey","resourceType","label","dedupeOptions","options","seen","Set","option","has","add","hasCommandParameters","params","listCommandParamEntries","Object","entries","flatMap","param","resolvedFrom","buildCommandParamInitialValues","baseArgs","base","values","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","workbenchPaletteModes","inputPrefix","isThemePaletteView","view","isPickerPaletteView","getPaletteViewMode","getPaletteViewModes","getPaletteInitialActiveIndex","themeInitialActiveIndex","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","group","results","result","searchText","keywords","join","description","onActivate","Promise","resolve","activate","catch","_temp2","clearTimeout","useEffect","asText","asList","commandParamName","commandParamOptions","JSON_PARAM_TYPES","buildCommandParam","accept","multiSelect","placeholder","searchable","clearable","singleLine","readCommandParamValue","CommandParamField","disabled","onChange","next","nextValue","change","_id","next_0","t3","ParamEditorRow","isFilled","CommandParamsDialog","request","renderParamField","prepareArgs","onRun","setValues","error","setError","submitting","setSubmitting","record","command","args","close","setValue","current","run","preparedArgs","commandId","onArgsChange","nextArgs","caught","message","isValid","Dialog","details","jsxs","event","handleDialogAcceptShortcut","Stack","CloseButton","ScrollArea","px","py","fieldProps","custom","Fragment","Button","submitLabel","getPanelLabel","openPanelWidget","pinned","openCommand","executeCommand","source","widgetResource","resourceKinds","canOpen","openWidget","closable","role","tabRetention","shell","setRegionOpen","sidePanel","getMode","setMode","createWorkbenchPanelWidgetPaletteEntries","panelsByRegion","getPrimaryResource","workbenchPanelRegions","addable","contribution","panelLabel","createResourceEntry","kind","resources","getKind","createWorkbenchResourcePaletteEntries","listResources","getThemeIconName","preference","getThemePreferenceLabel","themePreference","getThemePreferenceEntryIndex","themePreferences","index","findIndex","Math","max","THEME_GROUP_LABELS","light","dark","byModeThenLabel","a","b","localeCompare","createWorkbenchThemePreferencePaletteEntries","setThemePreference","sort","isSelected","rollbackThemePreview","themePreviewRef","preview","baseTheme","getCommandSearchText","category","createShortcutByCommandId","Map","keybindings","listCommandKeybindings","keybinding","getShortcut","binding","PaletteShortcut","getCommandErrorMessage","commandExecutionContext","executePaletteCommand","notifications","show","level","createEntry","action","onRequestParams","shortcutByCommandId","isCommandVisible","shortcut","get","getRecordGroup","getRecordOrder","order","byCommandPaletteGroup","left","right","groupComparison","listCommandRecords","menuPath","listMenuItems","matches","when","getCommand","listCommands","createWorkbenchCommandPaletteEntries","WorkbenchCommandPalette","workbenchCommandPaletteMenuPath","initialQuery","useThemePreference","commandPalette","useRef","paramsRequest","liveQuery","setLiveQuery","commandPaletteResourceEntries","compositionPanels","closePalette","exitPickerView","commitThemePreview","commandEntries","requestParams","resourceEntries","themeEntries","panelWidgetEntries","isThemeView","initialActiveIndex","activeViewMode","activeViewModes","Box","position","inset","alignItems","justifyContent","h","minH","padding","w","background","Palette","themeEntry","ctx","setQuery","setActiveIndex","prepareCommandArgs","clearParams","WorkbenchFocusRegion","boxProps","children","activeRegion","focus","element","contains","document","activeElement","preventScroll","currentTarget","target","setActiveRegion","menuPathKey","path","workbenchResourceMetadataContextKeyPrefix","workbenchResourceMetadataContextKey","isWorkbenchResourceContextKey","workbenchResourceTypeContextKey","workbenchResourceIdContextKey","startsWith","omitWorkbenchResourceContextValues","resolveContextValues","contextValues","createWorkbenchResourceContextValues","listWorkbenchMenuItemsFromState","itemsByPath","leftOrder","rightOrder","byContributionPriority","matchesContextExpression","handler","isVisible","iconSrc","overflowLabel","readOnly","isEnabled","listWorkbenchMenuItems","menuStore","getState","isKernelAction","isOverflowAction","withLeadingSeparator","enabled","first","rest","separatorBefore","resolveOverflowItems","regularItems","kernelItems","resolveWorkbenchHeaderActionGroups","inlineItems","overflowItems","resolveWorkbenchHeaderOverflowLabel","find","WorkbenchInlineHeaderAction","controlSize","onSelect","IconButton","Tooltip","WorkbenchHeaderActions","_temp3","_temp4","T0","t4","t5","t6","bb0","t7","_temp5","t8","item_0","Menu","Portal","item_1","ListRow","state_0","state_1","state_2","getAnchorResource","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","listActiveKeybindings","isCommandEnabled","navigation","openTarget","WorkbenchKeybindingDispatcher","commandContextValues","snapshot","isRegisteredCommandVisible","executeTreeAction","resolvedArgs","runTreeAction","onCommandError","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","createMenuIcon","display","width","height","objectFit","createMenuEndContent","external","isKernelMenuAction","createTreeMenuItemGroups","shortcuts","k","sourceCommandId","endContent","onAction","push","createTreeActionMenuItems","actions","createTreeContextMenuItems","actionItems","visibleRegularItems","createTreeActionItems","tooltip","toResourceContextAction","Icon","isDisabled","createWorkbenchResourceActions","resourceContextMenuPath","useWorkbenchResourceActionResolver","executeNotificationAction","WorkbenchNotificationHost","shownNotificationIds","showNotification","notification","toastAction","toastOptions","onStatusChange","dismiss","toaster","update","create","notification_0","listNotifications","subscription","subscribe","delete","dispose","clear","useWorkbenchLocationResource","pages","useWorkbenchActiveModeId","location","WorkbenchWidgetFallback","Center","WorkbenchRenderedWidgetFrame","noopRefresh","toHostedPanel","placement","contributionId","rendererId","toPanelContribution","WorkbenchWidgetHost","getWidget","viewId","views","getView","getWorkbenchRenderers","renderer","renderers","getRenderer","refreshKeys","instance","toPanelInstance","render","refresh","t9","useModeChrome","chrome","ModeChromeView","widgetId","horizontalScrollRegions","panelMenuRegionIds","workbenchPanelMenuRegions","regions","sidePanelRegionIds","verticalContentProps","flexDirection","horizontalContentProps","getActivePlacement","widgets","activeWidgetId","resolveRenderedRegionPlacements","activePlacement","mountStrategy","resolveRegionPlacementRenderState","active","additive","pointerEvents","visibility","createPlaceholderPlacement","WorkbenchRegionPlacement","globalActiveWidgetId","renderState","overlaysActivePlacement","flex","activatePanel","activatePlacement","WorkbenchRegion","transparent","locationResource","modeId","currentRegionState","registeredWidgets","activeSubPanel","getActiveWorkbenchSubPanel","getWorkbenchPanelForMenuRegion","ignoreOwnerResourceKey","activeLocationPanel","getActiveWorkbenchLocationPanel","regionState","matchesWorkbenchModeEligibility","isWorkbenchPanelPlacementVisible","matchesWorkbenchPanelMenuOwner","locationPanel","subPanel","getPlaceholder","placement_0","renderedPlacements","scrollsHorizontally","Flex","t10","t11","t12","t13","t14","T1","t15","t16","t17","t18","t19","t20","t21","t22","t23","renderedPlacement","t24","t25","WorkbenchPanelAddMenu","panels","triggerRef","openPanel","PANEL_HEADER_CONTROL_SIZE","trigger","getAnchorElement","panel_0","toTabKey","regionId","suppressesSidenavTabStrip","_placements","resolveTabIconName","resourceKindIcon","resourceIcon","resolveDisplayedActiveWidgetId","visiblePlacements","some","isWorkbenchPanelRegion","panelRegion","shouldShowRegionTabs","placements","alwaysShowTabs","shouldShowPanelHeader","hasTabs","hasPanelMenus","hasHeaderActions","isPlacementEligibleForRegion","getActiveModeId","ignoreResourceLocation","getLayout","useWorkbenchRegionTabsState","visibilityStorageKey","layoutState","tabStore","useTabVisibilityStore","subPanelPlacements","tabOverrides","visibleSubPanels","filterVisibleTabs","_temp6","visibleSubPanelIds","eligibleSubPanels","leadingItems","placement_2","workbenchRegionTabLeadingMenuPath","getRegionSettings","showTabs","hasActions","reset","toggleTab","useWorkbenchPanelHeaderVisible","_temp7","menuRegions","menuRegion","useWorkbenchRegionTabsVisible","state_3","placement_1","useTabSnapshot","tab","setVersion","getSnapshot","useRegionTabBehavior","tabSnapshot","nextWidgetId","previousWidgetId","sortable","isPreview","menu","hasCustomMenu","hasContextMenu","sortableState","useSortable","openMenu","setOpenMenu","x","y","anchor","setAnchor","rect","getBoundingClientRect","openTabMenu","event_0","openCustomMenu","event_1","openContextMenu","menu_0","setMenuOpen","event_2","altKey","reorderPanel","beforeWidgetId","afterWidgetId","reorderWithKeyboard","WorkbenchRegionTabMenuSurface","mainAxis","getAnchorRect","offset","WorkbenchRegionTabContextMenu","placementIdentity","pinPlacement","updatePanel","strategy","WorkbenchRegionTabLabel","color","activateTabAction","WorkbenchStructuredTabMenu","groupIndex","rows","row","iconColor","selected","WorkbenchRegionTabCloseButton","isActive","opacity","bg","identity","closePlacement","closePanel","WorkbenchRegionTabMenus","behavior","open_0","WorkbenchRegionTab","labelId","isDragging","listeners","setNodeRef","transform","transition","menuOpen","CSS","Transform","toString","Tabs","version","SortableRegionTabList","leadingActions","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","T2","reorderable","over","activeIndex","overIndex","reorderWidget","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","List","placement_3","reorderableIndex","candidate","resolvePlacementIcon","iconName","WorkbenchRegionTabs","getKey","viewport","setViewport","hiddenByDefault","menuActions","buildTabVisibilityMenuActions","onToggleTab","onResetAll","visibleIcon","hiddenIcon","resetIcon","hasVisibilityMenu","Element","closest","openVisibilityMenu","onWheel","deltaY","scrollWidth","clientWidth","scrollLeft","addEventListener","passive","removeEventListener","onSelectLeadingItem","setRegionActiveWidget","PANEL_HEADER_TAB_SIZE","t26","t27","t28","t29","t30","details_0","t31","Root","resolveDataTableRendererColumns","contributionColumns","columns","firstRow","keys","buildDataTableRendererData","rowByData","WeakMap","data","fromEntries","column","set","resolveDataTableRendererSelectionActions","destructive","rendererRow","resolveDataTableRendererResourceActions","resolveResourceActions","_context","resolveDataTableRendererStorageKey","instanceId","initialResult","lastResults","resultCacheKey","WorkbenchDataTableView","cacheKey","setResult","loading","setLoading","requestRef","runQuery","requestId","executeQuery","refreshSubscription","onDidRefreshDataTableRenderer","dataTableRendererId","model","labels","descriptions","icons","_temp8","stats","_temp9","_temp0","rowActions","selectionActions","data_0","row_0","onRowActivate","_temp1","openRow","_temp10","_temp11","skeletonColumns","DataTableSkeleton","emptyTitle","emptyDescription","EmptyState","data_1","_temp12","_temp13","data_2","data_3","initialPageSize","pageSizeOptions","selectionMode","DataTable","column_0","column_1","column_2","column_3","column_4","column_5","stat","column_6","column_7","column_8","column_9","hidden","column_10","column_11","column_12","BOOLEAN_OPTIONS","at","toOptions","toParam","schema","default","enum","preferenceSchemaToParams","paramValueToPreference","toName","WorkbenchPreferencesForm","preferences","names","resolveScopeId","staged","setStaged","formKey","setFormKey","scope","scopeId","scopeRef","getSchema","getValue","schemaByName","name_0","schema_0","persist","value_0","handleChange","name_1","value_1","save","discard","hasStaged","ParamEditor","key_0","activeNodeIds","ids","uniqueIds","resolveTreeNodeResourceKey","node","listTreeNodes","nodes","childrenByNodeId","listSectionNodes","sections","section","resolveActiveResourceNodeIds","resourceKeys","findSectionNode","nodeId","filterTreeListSelection","selection","pageRefsEqual","extensionId","targetMatchesPage","activePage","activeResource","targets","page","resolveActivePageNodeIds","resolveTreeListSelection","activeNodeId","activeLocation","selectedNodeId","declaredSelection","activeResourceKeys","getWorkbenchSelectionResourceKeys","selectedResourceKey","selectedNode","includes","activeResourceNodeId","activePageNodeId","canVirtualizeTreeNode","inlineInput","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","moveScope","showContextMenuTrigger","canHide","canReorder","canDrag","canDrop","menuPlacement","collapsible","isNavigable","toTreeListSection","emptyNode","TreeParamsDialog","TREE_SKELETON_WIDTHS","TreeViewSkeleton","TreeViewBody","moduleLoading","backgroundContextActions","draggable","customizationAvailable","expandedNodeIds","expandedSectionIds","scrollRef","onToggleSection","onToggleNode","onReorderSections","onReorderNodes","canMove","onMoveNode","onNavigate","TreeList","Skeleton","createMoveTreeNode","moveNode","sourceNodeId","targetNodeId","trees","getTreeState","setSelectedNode","onError","shouldSelectTreeNodeForNavigationTarget","TreeViewSearch","visible","Header","InputGroup","Input","isUnregisteredTreeError","treeId","getTreeRenderer","header","body","footer","loadExpandedTreeChildren","expanded","visited","loadNodes","all","getChildren","shouldShowTreeLoading","loadedTreeId","treeViewId","expandDefaultTreeSections","tree","sectionId","defaultExpandedSectionIds","setSectionExpanded","loadTreeData","getHeader","getBody","getFooter","useTreeData","setHeader","setBody","setFooter","setChildrenByNodeId","loadedTreeIdRef","loadRevisionRef","loadTree","loadRevision","treeStillRegistered","loadError","disposable","onDidRefresh","toStringLabel","isCustomizableNode","visibilityContextIcon","effective","buildNodeVisibilityContextMenuItem","nodeOverrides","resolveVisibility","existingItems","addRegionNodeVisibilityContextMenuItems","changed","addSectionNodeVisibilityContextMenuItems","useTreeViewCustomization","storageKey","sectionOverrides","useTreeListVisibilityStore","toggleSection","toggleNode","resetVisibility","sectionOrder","useTreeListOrderStore","nodeOrderBySection","sectionSlotById","setSectionOrder","setNodeOrder","setSectionSlot","resetOrder","defaultSlotBySectionId","orderedFooterSections","orderedHeaderSections","orderedSections","visibleFooterSections","visibleHeaderSections","visibleSections","footerSections","headerSections","visibilityActions","orderedSectionsBySlot","content","orderedAllSections","applyTreeListOrder","section_2","slot","includeNodeContextMenus","suppressNodeContextMenus","contentSections","filterVisibleSections","buildTreeVisibilityMenuActions","_temp15","_temp17","_temp19","customizationRevision","slot_0","nextSectionIds","idsBySlot","_temp20","_temp21","_temp22","nextSectionIds_0","sourceSectionId","destinationSectionId","destinationSlot","onMoveSection","state_4","state_5","state_6","state_7","state_8","state_9","state_10","section_0","section_1","_temp14","section_3","_temp16","node_0","section_4","_temp18","node_1","section_5","section_6","section_7","section_8","EMPTY_TREE_STATE","resolveActivePlacement","resolveTreeActiveResource","useSidenavContextActions","revision","actionsRef","navigateTreeNode","intent","onOpenResourceError","createToggleTreeNode","setNodeExpanded","WorkbenchTreeView","onSidenavContextActionsChange","treeRenderer","setFilter","treeState","treeStore","statesByTreeId","projectId","setParamsRequest","rawHeaderSections","rawSections","adapterContext","rawFooterSections","navigationContext","bodyActiveNodeId","headerActiveNodeId","activeNodeSelection","footerActiveNodeId","searchPlaceholder","style","overflowX","minWidth","minHeight","nextSectionIds_1","TreeListDragProvider","useSettingsRevision","settings","listener","useSyncExternalStore","Centered","ScrollableSettingsContent","SettingsViewContent","panelId","CollectionItemView","itemId","resolveCollectionItem","setState","alive","Spinner","SettingsSurfacePanel","getPanel","p","gap","SettingsOverlay","navTreeId","ResizableSplitLayout","SETTINGS_RESOURCE_KIND","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","settingsPanelResource","settingsItemResource","isSettingsScopeVisible","hasProjectScope","FALLBACK_SECTION_ID","toTreeActions","collectionItemNode","itemLabel","itemIcon","orderGroupKeys","indexOf","POSITIVE_INFINITY","collectionChildren","groupBy","byKey","list","panelToNode","buildSettingsTreeBody","matchesWhen","listSections","sectionsById","listPanels","bySection","renderOrder","sectionPanels","WORKBENCH_SETTINGS_WIDGET_ID","WORKBENCH_SETTINGS_NAV_WIDGET_ID","WORKBENCH_SETTINGS_PANEL_WIDGET_ID","WIDGET_ID","openSettings","requested","requestedPanel","overlays","openOverlay","createWorkbenchSettingsModule","registerView","registerOverlay","config","size","scrollBehavior","contentHeight","contentMaxWidth","contentWidth","closeTriggerTop","closeOnInteractOutside","registerCommand","standardResourceIcons","refreshNavigation","refreshView","unsubscribeSettings","unsubscribeContext","resolvePanelCollapsible","getRegionCollapsible","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","openByMenuId","panelMenuState","getRegionSize","setOpen","collapsed","onOpen","onCollapsedChange","WorkbenchPanelMenu","AttachedMenu","addPanelMenu","setRegionSize","WorkbenchPanelMenuLayout","useWorkbenchPanelWidth","withRight","setWidth","querySelector","measure","observer","ResizeObserver","observe","disconnect","WorkbenchPanelMenuOpener","canAttach","WorkbenchPanelMenuOpeners","closedMenus","view_0","candidate_0","useWorkbenchModeRegionSettings","useShallow","floatingPanelBottom","bottomOffset","launcherBottom","WorkbenchSidePanelTitle","WorkbenchSidePanelHeader","WorkbenchAttachedSidePanel","contentSlotRef","canFloat","showHeader","Minimize2","AttachedPanel","WorkbenchFloatingSidePanel","bubbleIcon","bottom","MessageCircle","BubbleButton","BubblePanel","terminalPlacementBindingId","workspacePathFromResource","workspacePath","withTerminalRequestDefaults","cwd","createControllerTerminalBridge","terminal","openSession","sessionId","bindingId","getBindingId","getResource","getTitle","write","resize","cols","kill","signal","onData","onExit","WorkbenchTerminalPanel","placementRef","bridge","getPersistenceScope","setSessionId","processTitle","sessionsById","updateShellPlacement","shellPlacements","updatePlacement","currentPlacement","isAvailable","test","WORKBENCH_TERMINAL_WIDGET_ID","WORKBENCH_TERMINAL_OPEN_COMMAND_ID","WORKBENCH_TERMINAL_PANEL_SIZE","terminalInstanceIds","listPanelInstances","watchClosedTerminalPlacements","changingScope","willChangeScope","onWillChangePersistenceScope","didChangeScope","onDidChangePersistenceScope","unsubscribeLayout","previousState","currentIds","previousIds","killBinding","terminalTitlePattern","nextTerminalIndexes","getInitialTerminalIndex","terminalPlacements","titleIndexes","exec","parseInt","getNextTerminalTitle","nextIndex","hasWorkspacePath","getTerminalResource","getActiveResource","primaryResource","openWorkbenchTerminal","reveal","workspace","padStart","globalThis","crypto","randomUUID","openPlacement","placementId","instanceKey","createWorkbenchTerminalModule","registerPlacement","kinds","cardinality","_args","useWorkbenchThemePreferences","contributed","themes","defaultThemePreferences","WorkbenchThemeProviderContext","createContext","WorkbenchThemeProvider","initialThemePreference","fileIconThemePreferences","useContext","ChakraProvider","psTheme","FileIconThemePreferenceProvider","defaultThemePreference","preferenceScope","ThemePreferenceProvider","WorkbenchThemeScope","stringValue","booleanValue","resolveOverlayConfig","overlayConfig","closeOnEscape","modal","trapFocus","motionPreset","contentMaxHeight","contentMinHeight","resolveOverlayDialogConfig","closeable","resolveOverlayDialogRenderState","exitingPlacement","WorkbenchOverlayFallback","WorkbenchOverlayLayer","overlayRegion","setExitingPlacement","dialogRootConfig","canCloseOverlay","closeLabel","handleOpenChange","handleExitComplete","handleInteractOutside","detail","originalEvent","WorkbenchBreadcrumbResourceActions","resolveActions","ResourceActionMenu","WorkbenchRegionControl","onToggle","WorkbenchNavigationControls","regionControls","history","pageLocations","historyStore","canGoBack","goBack","canGoForward","goForward","WorkbenchRegionControls","controls","WorkbenchNavChrome","hasNav","sidenavControls","trailingRegionControls","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","control_0","initialState","WorkbenchControlsView","defaultValues","onDidRefreshControlsRenderer","controlsRendererId","updateValue","apply","showFooter","controlValueSchema","values_0","controlId","prev","ControlsContent","installed","WeakSet","installWorkbenchControlsRenderer","setControlsRendererImplementation","getControlsRenderer","createElement","installWorkbenchDataTableRenderer","setDataTableRendererImplementation","getDataTableRenderer","loadWorkbenchFileRendererView","module","WorkbenchFileRendererView","lazy","installWorkbenchFileRenderer","setFileRendererImplementation","fileRendererId","getFileRenderer","Suspense","bindReactKanbanPresentation","createKanbanViewQuerySequencer","latestQueryId","isLatest","queryId","executeKanbanViewQuery","resolveProjectScope","storageScope","favoriteScope","resolveKanbanRendererStorageKey","kanbanRendererId","baseKey","projectScope","kanbanViewScrollContentProps","WorkbenchKanbanViewFrame","usesInternalScroll","noopSubscribe","isKanbanRowResource","useResolvedContributionAttributes","attributes","isAttributesSource","mergeKanbanViewRowActions","resourceActions","contributionActions","resourceActionKeys","resourceCommandIds","WorkbenchKanbanView","defaultActiveViewId","defaultFilters","defaultSettings","defaultViews","filters","activeViewId","useKanbanRendererStore","setRows","querySequencer","onDidRefreshKanbanRenderer","handleOpenRow","getRowContextMenuActions","viewMode","createRow","getBoardColumnConfig","hideToolbar","onAttributeChange","onColumnAction","onCreateRow","onReorder","KanbanRenderer","installWorkbenchKanbanRenderer","setKanbanRendererImplementation","getKanbanRenderer","isSidenavPlacement","viewContextId","installWorkbenchTreeRenderer","installation","setTreeRendererImplementation","useWorkbenchFileIconThemePreferences","fileIconThemes","useWorkbenchRegionContent","modePanel","getWorkbenchModePanelForRegion","isWorkbenchModePanelAvailable","panelAvailable","placeholders","locationScoped","WorkbenchHeaderBorder","getRegionHeaderBorderBottom","useSecondaryPanelView","hasContent","hasHeader","hasPanelHeader","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","WorkbenchSecondaryPanel","hasSecondaryHeader","SECONDARY_PANEL_SIZE","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","mainHeaderTrailingMenuPath","headerTrailingMenuPath","persistedSize","MainHeaderBar","hasMainContentTabs","WorkbenchBody","modeSettings","persistedSecondarySize","secondaryPanelSize","mainRegion","mainPanelWithMenus","Grid","mainContent","WorkbenchSidenav","contextActions","ResourceContextMenu","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchStatusBarItems","statusBar","listVisibleItems","WorkbenchActivityBar","WorkbenchStatusBar","ATTACHED_PANEL_DEFAULT_SIZE_PX","ATTACHED_PANEL_MIN_SIZE_PX","WorkbenchSidePanelRegionPortal","hasSidePanel","mounted","sidePanelHost","createPortal","WorkbenchSidePanelRegionHeader","hasSideHeader","WorkbenchAttachedSidePanelLayout","attached","contentPanel","contentMinSizePx","onAttachedSlotChange","onCollapse","interactivePointerTargetSelector","hasClosest","shouldFocusWorkbenchKeyboardFrame","focusWorkbenchKeyboardFrame","WorkbenchKeyboardFrame","useLayoutEffect","WorkbenchSidePanelBoundary","showAttachedSidePanel","contentFrame","sideHeader","SIDENAV_DEFAULT_SIZE_PX","SIDENAV_MIN_SIZE_PX","CONTENT_MIN_SIZE_PX","resolveSidenavSize","createSidePanelHost","host","dataset","workbenchSidePanelHost","resolveActiveSidePanelSlot","floatingSlot","attachedSlot","useWorkbenchLayoutFlags","statusChrome","statusBarItems","hasNavWidgets","hasActivityBarWidgets","hasSidenavWidgets","hasSecondaryHeaderWidgets","hasSecondaryWidgets","hasSideHeaderWidgets","hasSideWidgets","hasStatusWidgets","createWorkbenchRegionControls","showSidenav","sidenavOpen","setPanelOpen","showSecondaryPanel","secondaryPanelOpen","sidePanelMode","WorkbenchContent","sidePanelBubbleIcon","onOpenSidePanel","titleBar","sidenavContextActions","setSidenavContextActions","attachedSidePanelSlot","setAttachedSidePanelSlot","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","paletteOpen","paletteInitialQuery","hasSecondaryPanelHeader","hasSidePanelHeader","floatingPanelsAllowed","sidenavCollapsible","persistedSidenavSize","sidenavSize","mountSidePanel","activeSidePanelSlot","parentNode","appendChild","removeChild","contentWithHeader","contentWithSidenav","Workbench","defaultTheme","Toaster","disposeWorkbenchModuleHostRegistrations","syncWorkbenchModuleHostRegistrations","modules","moduleIds","registerModule","WorkbenchModuleHost","registeredWorkbench"],"mappings":"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"}
|