@pstdio/workbench 0.44.0 → 0.45.0-nightly.20261020145025
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extensions.d.ts +30 -4
- package/dist/extensions.js +878 -771
- package/dist/extensions.js.map +1 -1
- package/dist/{file-renderer-view-C5dyoQQW.js → file-renderer-view-c0hGcYy9.js} +47 -47
- package/dist/{file-renderer-view-C5dyoQQW.js.map → file-renderer-view-c0hGcYy9.js.map} +1 -1
- package/dist/{index-8x-QT7wg.d.ts → index-B2IdtXpS.d.ts} +342 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2062 -1812
- package/dist/index.js.map +1 -1
- package/dist/{kanban-presentation-pexk_oCY.d.ts → kanban-presentation-C7JHKKGw.d.ts} +1 -1
- package/dist/navigation-tree-registry-1h3dEi30.js +135 -0
- package/dist/navigation-tree-registry-1h3dEi30.js.map +1 -0
- package/dist/{react-C-HbdPSw.js → react-QSItpi3d.js} +3629 -3041
- package/dist/react-QSItpi3d.js.map +1 -0
- package/dist/react.d.ts +18 -5
- package/dist/react.js +2 -2
- package/dist/storage.d.ts +1 -1
- package/dist/webview-runtime.js +1 -1
- package/dist/{workbench-renderers-Bz_dLyHW.js → workbench-renderers-B1Qp-9yW.js} +1663 -1300
- package/dist/workbench-renderers-B1Qp-9yW.js.map +1 -0
- package/package.json +3 -3
- package/dist/navigation-tree-registry-C5l3eO3n.js +0 -120
- package/dist/navigation-tree-registry-C5l3eO3n.js.map +0 -1
- package/dist/react-C-HbdPSw.js.map +0 -1
- package/dist/workbench-renderers-Bz_dLyHW.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"react-C-HbdPSw.js","names":["ResourceRef","WorkbenchLayout","WorkbenchPageContribution","pageResourceContextKey","resolvePageActivePlacement","layout","page","main","regions","selected","widgets","find","entry","widgetId","activeWidgetId","placementIdentity","kind","pageId","id","undefined","resolvePageBreadcrumbPlacement","resource","placement","useStore","WorkbenchStore","useWorkbenchStore","store","selector","resourceKey","FileUploadValue","Command","CommandParamDescriptor","CommandParamSchema","WorkbenchCommandExecutionContext","CommandFilesParamValue","refs","uploads","CommandParamValue","CommandParamEntry","key","label","humanize","value","spaced","replace","trim","charAt","toUpperCase","slice","isRecord","Record","Array","isArray","isFileUploadValue","file","id","name","status","isCommandFilesParamValue","every","ref","createCommandFilesParamValue","input","Partial","commandFilesParamValue","raw","multiple","filter","item","stringifyEditableValue","undefined","String","JSON","stringify","toIdentifierPrefix","_match","char","toLowerCase","metadataString","metadata","resourceContextValue","entry","context","resource","metadataValue","type","resourceType","dedupeOptions","options","seen","Set","option","has","add","hasCommandParameters","params","listCommandParamEntries","length","commandParamEntries","Object","entries","map","param","resolvedFrom","resolveCommandResourceParams","baseArgs","base","fromEntries","hasOwn","renameLabelDefault","mutation","kind","labelParam","idParam","buildCommandParamInitialValues","values","defaultValue","isEmptyValue","parseJsonValue","parse","Error","normalizeValue","numberValue","Number","isFinite","split","Boolean","normalizeCommandParamValues","normalized","required","mergeCommandParamArgs","schema","humanize","isRecord","Icon","IconProps","resolveIconComponent","WorkbenchIconProps","Omit","name","size","WorkbenchIcon","props","$","_c","rest","t0","undefined","t1","IconComponent","t2","t3","_c","ContextKeyValue","MenuItem","RegisteredCommand","WorkbenchCommandExecutionContext","matchesContextExpression","resolveMenuItemState","action","record","values","Record","context","when","command","handler","isVisible","args","undefined","readOnly","Boolean","disabledWhen","description","disabled","isEnabled","disabledReason","Box","Image","PaletteShortcut","Tooltip","TreeListActionMenuItem","KeybindingSequence","MenuPath","WorkbenchCommandExecutionContext","WorkbenchCoreContributionContext","scopeWorkbenchResourceContextValues","reportUserActionError","hasCommandParameters","TreeActionParamsRequest","WorkbenchIcon","resolveMenuItemState","CreateMenuItemsInput","workbench","menuPath","context","onCommandError","error","onRequestParams","request","commandContextValues","resource","snapshot","createMenuIcon","input","icon","iconSrc","undefined","createMenuEndContent","external","binding","disabledReason","readOnly","withLeadingSeparator","items","T","enabled","length","first","rest","separatorBefore","isKernelMenuAction","group","createMenuItemGroups","contextValues","shortcuts","Map","keybindings","listCommandKeybindings","map","k","commandId","keybinding","regularItems","kernelItems","action","layout","listMenuItems","record","commands","getCommand","args","state","command","get","id","label","requestParams","params","run","nextArgs","executeCommand","item","resourceGroup","sourceCommandId","description","endContent","disabled","onAction","catch","push","createMenuItems","commandContextValues","withLeadingSeparator","Icon","ResourceContextAction","TreeListActionMenuItem","useEffect","useState","ResourceRef","WorkbenchCoreContributionContext","resourceContextMenuPath","workbenchBreadcrumbLocationMenuPath","useWorkbenchStore","CreateMenuItemsInput","createMenuItems","toResourceContextAction","item","key","id","label","commandId","icon","endContent","isDisabled","disabled","separatorBefore","onClick","onAction","createWorkbenchResourceActions","workbench","subject","options","Pick","kind","resources","getKind","type","extensionId","current","resolve","resource","preview","undefined","menuPath","context","onRequestParams","request","commandPalette","requestParams","onCommandError","map","group","createWorkbenchLocationActions","useWorkbenchResourceActionResolver","$","_c","store","_temp","kinds","_temp2","refresh","t0","subscriptions","Object","values","flatMap","subscribe","_temp3","subscription","dispose","t1","commands","_temp4","_temp5","layout","menuStore","_temp6","t2","state","changes","state_0","revision","state_1","state_2","state_3","itemsByPath","_c","_temp","_temp2","_temp3","_temp4","_temp5","_temp6","ResourceRef","WorkbenchCore","WorkbenchTabAction","WorkbenchCommandParamsRequest","runUserAction","hasCommandParameters","runPlacementAction","workbench","action","requestParams","request","commandPalette","resource","target","kind","navigation","openTarget","command","commands","getCommand","commandId","params","record","label","args","context","undefined","executeCommand","ResourceContextAction","ResourceRef","WorkbenchCore","WorkbenchTabMenuRow","WorkbenchTabSnapshot","WorkbenchIcon","runPlacementAction","placementRowAction","workbench","row","resource","target","action","kind","key","id","label","commandId","undefined","icon","iconColor","isDisabled","disabled","isSelected","selected","onClick","placementMenuActions","snapshot","menu","flatMap","section","group","actions","rows","map","ResourceRef","WorkbenchCore","WorkbenchTabSnapshot","resolveResourcePreview","placementMenuActions","createWorkbenchResourceActions","createWorkbenchResourceMenu","workbench","subject","snapshot","resource","resources","preview","store","getState","changes","undefined","useEffect","useState","WorkbenchCore","WorkbenchTabSnapshot","WorkbenchWidgetPlacement","toPanelInstance","resolveResourcePreview","useWorkbenchStore","readPlacementTab","placement","tab","getSnapshot","usePlacementTab","workbench","$","_c","changes","resources","preview","store","_temp","t0","snapshot","state_0","setState","t1","t2","refresh","subscription","subscribe","dispose","t3","state","resource","t4","undefined","projected","changed","t5","label","_c","_temp","ResourceRef","WorkbenchBreadcrumbItem","WorkbenchTabSnapshot","breadcrumbSnapshot","item","current","resource","snapshot","referenceKey","HStack","Text","Breadcrumb","ResourceContextAction","SessionCompletionStatus","SessionIndicator","ReactNode","WorkbenchBreadcrumbItem","WorkbenchCore","resolvePageBreadcrumbPlacement","resolveResourcePreview","useWorkbenchResourceActionResolver","createWorkbenchResourceMenu","WorkbenchIcon","usePlacementTab","useWorkbenchStore","breadcrumbSnapshot","WorkbenchBreadcrumbViewProps","workbench","getSessionStatus","item","resource","metadata","status","undefined","WorkbenchBreadcrumbIcon","props","$","_c","t0","indicator","type","t1","icon","WorkbenchBreadcrumbTitle","title","t2","buildWorkbenchBreadcrumbItems","items","actionsForResource","map","actions","url","onClick","length","contextMenuActions","WorkbenchBreadcrumbView","changes","resources","preview","store","_temp","breadcrumbs","_temp2","page","pages","_temp3","routedResource","_temp4","state_3","state","layout","placement","snapshot","projected","label","crumbs","flatMap","some","item_0","resourceReferenceKey","push","id","getKind","extensionId","T0","item_1","at","t3","state_0","state_1","activePageId","state_2","location","_c","_temp","_temp2","_temp3","_temp4","Button","HStack","Text","CommandOptionState","CommandOptionStatusProps","state","onRetry","CommandOptionStatus","props","$","_c","status","t0","options","length","t1","error","t2","t3","t4","_c","WorkbenchCompositionRegionPanels","WorkbenchCore","WorkbenchPanelRegion","useWorkbenchStore","WorkbenchCompositionPanelsByRegion","Record","useWorkbenchCompositionPanels","workbench","layout","store","state","modes","activeModeId","commands","context","main","composition","panelsFor","secondary","side","PaletteMode","Search","Terminal","WorkbenchCommandPaletteView","WorkbenchIcon","SEARCH_MODE_ID","COMMAND_MODE_ID","THEME_MODE_ID","workbenchPaletteModes","id","inputPrefix","isThemePaletteView","view","getPaletteViewMode","undefined","getPaletteViewModes","getPaletteInitialActiveIndex","input","themeInitialActiveIndex","getPaletteInputIcon","mode","getPalettePlaceholder","THEME_MODE_ID","PaletteEntry","useEffect","useState","WorkbenchCore","runUserAction","WorkbenchIcon","useWorkbenchStore","SEARCH_MODE_ID","RESOURCE_QUERY_LIMIT","RESOURCE_QUERY_DEBOUNCE_MS","UseWorkbenchCommandPaletteResourceEntriesInput","workbench","query","open","onClose","useWorkbenchCommandPaletteResourceEntries","input","$","_c","refreshToken","commandPaletteResources","store","_temp","t0","Symbol","for","entries","setEntries","t1","cancelled","handle","setTimeout","queryProviders","limit","then","groups","flatMap","group","results","map","result","id","mode","label","searchText","keywords","join","trim","description","title","icon","undefined","onActivate","activate","clearTimeout","t2","state","_c","_temp","Param","ParamValue","SelectionOption","CommandParamEntry","CommandParamValue","createCommandFilesParamValue","isCommandFilesParamValue","isFileUploadValue","asText","value","asList","Array","isArray","commandParamName","entry","label","commandParamOptions","options","map","option","id","name","icon","JSON_PARAM_TYPES","Set","buildCommandParam","base","key","description","type","defaultValue","Number","uploads","accept","multiple","allowCustomValues","multiSelect","placeholder","toLowerCase","searchable","length","clearable","required","has","singleLine","readCommandParamValue","filter","String","ParamEditorRow","ReactNode","WorkbenchCommandExecutionContext","CommandParamEntry","CommandParamValue","isCommandFilesParamValue","buildCommandParam","readCommandParamValue","CommandParamFieldProps","entry","value","context","disabled","onChange","onUpdateValue","update","current","onValidationChange","error","CommandParamFieldRenderer","props","CommandParamField","$","_c","t0","next","nextValue","type","refs","multiple","uploads","length","change","t1","t2","_id","next_0","t3","_c","CommandParamOption","CommandParamOptionSource","CommandParamSchema","CommandParamValue","normalizeCommandParamValues","Values","Record","CommandOptionState","key","status","options","error","ExecuteOptionCommand","commandId","args","signal","AbortSignal","Promise","valueRef","value","kind","argumentsFor","source","values","schema","resolved","Object","fromEntries","entries","params","map","descriptor","resolvedFrom","normalized","required","readOptions","result","Array","isArray","Error","row","valueField","labelField","label","createCommandOptionResolver","execute","onChange","referencedValue","queryKey","JSON","stringify","snapshot","disposed","controllers","Map","AbortController","listeners","Set","requests","sources","flatMap","param","publish","state","listener","clearInvalidSelection","offered","option","current","next","filter","has","length","load","field","get","abort","controller","set","version","requestKey","allowCustomValues","message","String","subscribe","add","delete","getSnapshot","update","retry","find","validate","errors","selected","Boolean","some","dispose","clear","useEffect","useRef","useState","useSyncExternalStore","CommandParamSchema","createCommandOptionResolver","ExecuteOptionCommand","CommandParamValue","useCommandOptions","schema","values","Record","execute","onChange","key","value","resolved","callbacks","current","resolver","id","args","signal","Promise","reject","Error","states","subscribe","getSnapshot","update","dispose","validate","retry","Box","Button","CloseButton","Dialog","HStack","Stack","Text","AlertMessage","handleDialogAcceptShortcut","ScrollArea","Fragment","useState","Command","RegisteredMenuItem","WorkbenchCommandExecutionContext","ExecuteOptionCommand","CommandOptionStatus","buildCommandParamInitialValues","CommandParamEntry","CommandParamValue","isCommandFilesParamValue","listCommandParamEntries","mergeCommandParamArgs","normalizeCommandParamValues","resolveCommandResourceParams","CommandParamField","CommandParamFieldRenderer","useCommandOptions","CommandParamsRequest","record","command","Pick","action","label","submitLabel","args","context","CommandParamFieldProps","CommandParamsDialogProps","request","renderParamField","executeOptionCommand","prepareArgs","input","commandId","onArgsChange","Promise","onRunError","error","onClose","onRun","isFilled","entry","value","type","undefined","refs","length","uploads","Array","isArray","CommandParamsDialog","props","$","_c","t0","revision","current","setCurrent","t1","CommandParamsForm","values","setValues","Record","params","resourceMutation","resolved","setError","submitting","setSubmitting","customFieldErrors","setCustomFieldErrors","entries","close","setValue","key","options","fieldErrors","setFieldErrors","run","invalid","validate","Object","keys","preparedArgs","id","nextArgs","submission","catch","caught","Error","message","isValid","some","Boolean","every","required","details","open","event","description","px","py","map","state","states","dynamic","fieldProps","disabled","status","onChange","onUpdateValue","update","onValidationChange","custom","retry","_c","AlertMessage","DeleteConfirmationModal","useState","WorkbenchCore","WorkbenchCommandConfirmation","reportUserActionError","useWorkbenchStore","CommandParamFieldRenderer","CommandParamsDialog","PaletteParamsDialogProps","workbench","renderParamField","PaletteParamsDialog","props","$","_c","request","commandPalette","store","_temp","confirmation","_temp2","t0","label","t1","context","commands","id","args","signal","executeCommand","t2","input","prepareCommandArgs","commandId","onArgsChange","t3","error","t4","clearParams","t5","t6","args_0","t7","CommandConfirmationDialog","setError","description","buttonLabel","resolve","undefined","onConfirm","caught","Error","message","state","paramsRequest","state_0","_c","_temp","_temp2","_Fragment","WorkbenchRegion","chakraBackgrounds","sidenav","main","panel","const","vscodeColor","token","fallback","replaceAll","workbenchBackgrounds","widget","workbenchRegionBackgrounds","nav","activity","secondary","status","overlay","side","Record","workbenchFocusBorder","workbenchCommandPaletteBackground","getWorkbenchRegionBackground","region","Box","ReactNode","workbenchCommandPaletteBackground","WorkbenchPaletteSurface","props","$","_c","children","t0","Symbol","for","position","inset","alignItems","justifyContent","h","minH","padding","w","background","t1","_c","RegisteredWidgetContribution","ResourceRef","WorkbenchCompositionAddablePanel","WorkbenchCore","WorkbenchPanelRegion","runUserAction","OpenPanelWidgetInput","workbench","widget","region","resource","pinned","open","getPanelLabel","openPanelWidget","input","openCommand","title","commands","executeCommand","commandId","args","source","widgetResource","resourceKinds","length","canOpen","undefined","layout","openWidget","id","closable","role","tabRetention","shell","setRegionOpen","sidePanel","getMode","setMode","PaletteEntry","WorkbenchCore","workbenchPanelRegions","getPanelLabel","openPanelWidget","WorkbenchIcon","WorkbenchCompositionPanelsByRegion","COMMAND_MODE_ID","createWorkbenchPanelWidgetPaletteEntries","input","workbench","onClose","panelsByRegion","resource","getPrimaryResource","flatMap","region","composition","panelsFor","addable","map","panel","widget","contribution","panelLabel","label","title","id","mode","searchText","group","icon","undefined","onActivate","pinned","open","resourceKey","PaletteEntry","ResourceBrowseEntry","WorkbenchCore","runUserAction","WorkbenchIcon","SEARCH_MODE_ID","WorkbenchResourcePaletteEntry","mode","createResourceEntry","input","workbench","entry","onClose","resource","label","kind","resources","getKind","type","extensionId","indicator","icon","activate","undefined","id","searchText","description","group","color","onActivate","createWorkbenchResourcePaletteEntries","query","listResources","map","filter","Palette","useEffect","useState","WorkbenchCore","WorkbenchResourceSearchRequest","WorkbenchIcon","WorkbenchPaletteSurface","createWorkbenchResourcePaletteEntries","WorkbenchResourceSearchProps","workbench","request","onClose","WorkbenchResourceSearch","props","$","_c","t0","query","resources","list","search","setSearch","t1","t2","refresh","current","unsubscribe","subscribe","t3","entries","t4","Symbol","for","t5","query_0","t6","label","placeholder","_c","PaletteEntry","ThemePreference","ThemePreferenceOption","WorkbenchIcon","THEME_MODE_ID","WorkbenchThemePaletteEntry","themePreference","mode","getThemeIconName","preference","getThemePreferenceLabel","title","id","getThemePaletteEntryIndex","entries","Math","max","findIndex","entry","THEME_GROUP_LABELS","light","dark","const","byModeThenLabel","a","b","localeCompare","createWorkbenchThemePreferencePaletteEntries","input","chosenThemePreference","themePreferences","setThemePreference","onClose","sort","map","label","searchText","group","icon","isSelected","onActivate","Palette","PaletteEntry","PaletteShortcut","useThemePreference","ReactNode","useEffect","useState","Command","getNavigationTargetKey","KeybindingSequence","MenuPath","RegisteredCommand","RegisteredMenuItem","WorkbenchCommandExecutionContext","WorkbenchCore","workbenchCommandPaletteMenuPath","runUserAction","WorkbenchIcon","useWorkbenchCompositionPanels","useWorkbenchStore","hasCommandParameters","useWorkbenchCommandPaletteResourceEntries","CommandParamFieldRenderer","CommandParamsRequest","PaletteParamsDialog","WorkbenchPaletteSurface","COMMAND_MODE_ID","getPaletteInitialActiveIndex","getPaletteInputIcon","getPalettePlaceholder","getPaletteViewMode","getPaletteViewModes","isThemePaletteView","createWorkbenchPanelWidgetPaletteEntries","createWorkbenchResourcePaletteEntries","WorkbenchResourceSearch","createWorkbenchThemePreferencePaletteEntries","getThemePaletteEntryIndex","WorkbenchThemePaletteEntry","WorkbenchResourcePaletteEntry","WorkbenchCommandPaletteProps","workbench","open","menuPath","initialQuery","renderParamField","onClose","WorkbenchCommandPaletteEntry","commandId","mode","WorkbenchCommandPaletteRecord","record","action","getCommandSearchText","command","label","id","description","category","filter","Boolean","join","createShortcutByAction","Map","keybindings","listKeybindings","map","binding","keybinding","getShortcut","undefined","commandExecutionContext","resource","getPrimaryResource","executePaletteCommand","input","args","context","commands","executeCommand","createEntry","shortcutByAction","onRequestParams","request","isCommandVisible","icon","group","searchText","shortcut","get","kind","sourceCommandId","onActivate","params","getRecordGroup","item","getRecordOrder","order","byCommandPaletteGroup","left","right","groupComparison","localeCompare","listCommandRecords","listCommands","layout","listMenuItems","matches","when","getCommand","createWorkbenchCommandPaletteEntries","sort","entry","WorkbenchCommandPalette","props","$","_c","commandPalette","store","_temp","t0","WorkbenchMainCommandPalette","t1","chosenThemePreference","themePreferences","setThemePreference","previewThemePreference","view","_temp2","_temp3","_temp4","menuStore","_temp5","liveQuery","setLiveQuery","t2","query","commandPaletteResourceEntries","compositionPanels","t3","closePalette","t4","exitPickerView","entries","isThemeView","t5","t6","requestParams","commandEntries","resourceEntries","themeEntries","panelWidgetEntries","panelsByRegion","themeInitialActiveIndex","t7","initialActiveIndex","activeViewMode","activeViewModes","t8","t9","t10","t11","t12","t13","t14","t15","t16","mode_0","themeEntry","themePreference","ctx","length","setQuery","setActiveIndex","t17","t18","t19","state","resourceSearch","state_0","state_1","state_2","itemsByPath","commandExecutionContext","_c","_temp","_temp2","_temp3","_temp4","_temp5","_Fragment","Box","BoxProps","ReactNode","useEffect","useRef","WorkbenchCore","WorkbenchFocusRegionId","useWorkbenchStore","WorkbenchFocusRegionProps","workbench","region","children","WorkbenchFocusRegion","props","$","_c","boxProps","activeRegion","focus","store","_temp","ref","t0","t1","element","current","contains","document","activeElement","preventScroll","t2","event","currentTarget","target","setActiveRegion","t3","state","_c","_temp","ContextKeyValue","MenuPath","RegisteredCommand","RegisteredMenuItem","ResourceRef","WorkbenchCore","scopeWorkbenchResourceContextValues","byContributionPriority","resolveMenuItemState","WorkbenchMenuItem","id","commandId","label","description","icon","iconSrc","overflowLabel","group","args","disabled","separatorBefore","readOnly","WorkbenchMenuItemState","itemsByPath","Record","commands","contextValues","menuPathKey","path","join","WorkbenchMenuItemContext","resource","resolveContextValues","state","context","listWorkbenchMenuItemsFromState","menuPath","sort","left","right","leftOrder","order","rightOrder","map","action","record","availability","command","filter","item","listWorkbenchMenuItems","workbench","layout","menuStore","getState","store","values","WorkbenchMenuItem","WorkbenchHeaderOverflowItem","separatorBefore","WorkbenchHeaderActionGroups","inlineItems","overflowItems","isKernelAction","item","group","isOverflowAction","withLeadingSeparator","items","enabled","length","first","rest","const","resolveOverflowItems","regularItems","filter","kernelItems","resolveWorkbenchHeaderActionGroups","resolveWorkbenchHeaderOverflowLabel","find","overflowLabel","Button","HStack","IconButton","Menu","Portal","ListRow","Tooltip","Fragment","getAnchorResource","MenuPath","ResourceRef","WorkbenchCommandExecutionContext","WorkbenchCore","runUserAction","hasCommandParameters","createMenuEndContent","listWorkbenchMenuItemsFromState","WorkbenchMenuItem","WorkbenchIcon","useWorkbenchStore","resolveWorkbenchHeaderActionGroups","resolveWorkbenchHeaderOverflowLabel","WorkbenchHeaderActionsProps","workbench","menuPath","controlSize","commandExecutionContext","resource","undefined","WorkbenchInlineHeaderAction","props","$","_c","item","onSelect","t0","onClick","group","icon","t1","t2","t3","disabled","id","label","WorkbenchHeaderActions","commands","store","_temp","contextValues","context","_temp2","itemsByPath","layout","menuStore","_temp3","_temp4","T0","t4","t5","t6","Symbol","for","bb0","items","inlineItems","overflowItems","command","commandId","args","params","commandPalette","requestParams","record","executeCommand","length","map","item_0","item_1","separatorBefore","readOnly","disabledReason","description","t7","state","state_0","values","state_1","state_2","_c","_temp","_temp2","_temp3","_temp4","UseHotkeyDefinition","useHotkeys","WorkbenchHotkeyRegistration","useTanStackWorkbenchHotkeys","registrations","$","_c","t0","map","_temp","hotkeys","t1","Symbol","for","ignoreInputs","preventDefault","stopPropagation","registration","hotkey","callback","event","execute","options","enabled","_c","_temp","useEffect","useState","getKeybindingSteps","KeybindingSequence","WorkbenchCore","runUserAction","hasCommandParameters","useTanStackWorkbenchHotkeys","WorkbenchHotkeyRegistration","id","hotkey","enabled","ignoreInputs","execute","Promise","CreateWorkbenchHotkeyRegistrationsInput","workbench","disabled","commandIds","WorkbenchKeybindingDispatcherProps","keyAliases","Record","alt","cmd","command","ctrl","control","meta","mod","option","shift","normalizeWorkbenchKeybindingStep","keybinding","split","map","part","trimmed","trim","alias","toLowerCase","length","toUpperCase","slice","join","normalizeWorkbenchKeybinding","steps","createWorkbenchHotkeyRegistrations","input","allowedCommandIds","Set","undefined","keybindings","listActiveKeybindings","flatMap","index","action","kind","has","commandId","record","commands","getCommand","isCommandVisible","args","isCommandEnabled","params","resource","getPrimaryResource","commandPalette","requestParams","label","context","navigation","openTarget","WorkbenchKeybindingDispatcher","props","$","_c","t0","registrations","setRegistrations","t1","t2","refresh","subscriptions","store","subscribe","unsubscribe","_c","ToastStatusChangeDetails","toaster","useEffect","useRef","RegisteredWorkbenchNotification","WorkbenchCore","WorkbenchNotificationAction","runUserAction","WorkbenchNotificationHostProps","workbench","executeNotificationAction","input","action","title","commands","executeCommand","commandId","args","WorkbenchNotificationHost","props","$","_c","t0","Symbol","for","Set","shownNotificationIds","t1","t2","showNotification","notification","actions","toastAction","label","onClick","undefined","toastOptions","id","type","level","description","message","closable","onStatusChange","details","status","notifications","dismiss","current","has","update","add","create","notification_0","listNotifications","subscription","subscribe","event","delete","dispose","clear","_c","WorkbenchCore","useWorkbenchStore","useWorkbenchLocationResource","workbench","pages","store","_temp","useWorkbenchActiveModeId","modes","_temp2","state","location","resource","activeModeId","_temp","_temp2","WorkbenchWidgetPlacement","retainViewPlacements","previous","current","registeredViews","ReadonlySet","retained","Map","filter","placement","viewId","has","map","widgetId","existing","find","entry","unchanged","Object","keys","length","entries","every","key","value","Reflect","get","set","next","values","index","useState","WorkbenchCore","WorkbenchWidgetPlacement","useWorkbenchStore","retainViewPlacements","useRetainedViewPlacements","workbench","current","$","_c","views","store","_temp","previous","setPrevious","t0","Set","Object","keys","placements","state","_c","_temp","Box","Center","ReactNode","RegisteredPlaceholderContribution","RegisteredWidgetContribution","RegisteredWorkbenchView","WorkbenchCore","WorkbenchPanelContribution","WorkbenchRegion","WorkbenchWidgetPlacement","getWorkbenchRenderers","toPanelContribution","toPanelInstance","WorkbenchIcon","useWorkbenchStore","WorkbenchWidgetHostProps","workbench","placement","widget","region","WorkbenchWidgetFallback","props","$","_c","label","t0","Symbol","for","t1","WorkbenchRenderedWidgetFrame","children","noopRefresh","undefined","toHostedPanel","input","view","id","contributionId","title","icon","rendererId","WorkbenchWidgetHost","layout","getWidget","viewId","views","getView","rendererFromStore","store","state","renderers","renderer","getRenderer","state_0","refreshKeys","t2","panel","instance","T0","t3","t4","t5","t6","t7","t8","t9","t10","render","refresh","t11","_c","Box","WorkbenchCore","WorkbenchRegion","useWorkbenchStore","useRetainedViewPlacements","WorkbenchWidgetHost","useModeChrome","workbench","region","$","_c","t0","state","mode","activeModeId","modes","undefined","chrome","store","ModeChromeView","props","viewId","widgetId","contributionId","closable","placements","t1","t2","t3","placement","map","_c","movePanelHost","host","HTMLElement","slot","parentNode","moveBefore","isConnected","appendChild","WorkbenchCore","WorkbenchRegion","resolvePanelCollapsible","workbench","regions","every","region","layout","getRegionCollapsible","WorkbenchPanelMenuSize","has","open","collapsible","minSize","PANEL_CONTENT_MIN_SIZE_PX","PANEL_MENU_RESIZE_HANDLE_SIZE_PX","PANEL_MENU_NARROW_PANEL_MAX_PX","getWorkbenchPanelMenuAttachment","panelWidth","menus","map","menu","attached","Set","filter","narrow","fits","sizes","reduce","total","candidate","add","useEffect","useState","getActiveWorkbenchLocationPanel","getActiveWorkbenchSubPanel","isWorkbenchModePanelAvailable","isWorkbenchPanelPlacementVisible","matchesWorkbenchModeEligibility","matchesWorkbenchPanelMenuOwner","WorkbenchCore","WorkbenchPanelMenuRegion","WorkbenchPanelMenuSide","WorkbenchPanelRegion","WorkbenchRegionSize","workbenchPanelMenuRegions","useWorkbenchActiveModeId","useWorkbenchLocationResource","useWorkbenchStore","resolvePanelCollapsible","getWorkbenchPanelMenuAttachment","PANEL_MENU_SIZE","defaultPx","minPx","maxPx","panelLabels","Record","main","secondary","side","resolveRegionSize","regionSize","getWorkbenchPanelMenuLabel","panel","WorkbenchPanelMenuView","region","label","title","icon","has","collapsed","collapsible","size","ReturnType","onOpen","onCollapsedChange","useWorkbenchPanelMenu","workbench","$","_c","locationResource","modeId","t0","modes","getMode","undefined","panelAvailable","layout","store","_temp","registeredWidgets","_temp2","currentRegionState","regions","regionState","t1","activeSubPanel","ignoreOwnerResourceKey","activeLocationPanel","widgets","filter","placement","contribution","contributionId","location","locationPanel","subPanel","find","placement_0","widgetId","activeWidgetId","activePlacement","widget","t2","panelStateKey","t3","state_1","state","openByMenuId","open","panelMenuState","t4","t5","t6","t7","length","Boolean","getPlaceholder","t8","t9","getRegionSize","t10","setOpen","t11","t12","useWorkbenchPanelMenus","width","useWorkbenchPanelWidth","views","attachment","map","_temp3","view_0","index","view","canAttach","useWorkbenchPanelMenusPresent","left","right","setWidth","element","document","querySelector","measure","clientWidth","observer","ResizeObserver","observe","disconnect","state_0","minSize","resolveRegionSize","_c","_temp","_temp2","_temp3","WorkbenchRegion","WorkbenchWidgetPlacement","toTabKey","regionId","placement","contributionId","suppressesSidenavTabStrip","region","_placements","resolveTabIconName","widget","icon","resourceKindIcon","resourceIcon","resource","role","resolveDisplayedActiveWidgetId","visiblePlacements","activeWidgetId","widgetId","hasActive","some","filterVisibleTabs","getTabVisibilityStore","useTabVisibilityStore","useEffect","getActiveWorkbenchLocationPanel","getAnchorResource","headerTrailingMenuPath","isWorkbenchPanelPlacementVisible","WorkbenchCore","WorkbenchPanelRegion","WorkbenchRegion","WorkbenchWidgetPlacement","workbenchPanelRegions","workbenchRegionTabLeadingMenuPath","resolveResourcePreview","listWorkbenchMenuItemsFromState","useWorkbenchPanelMenus","useWorkbenchCompositionPanels","useWorkbenchActiveModeId","useWorkbenchLocationResource","useWorkbenchStore","suppressesSidenavTabStrip","toTabKey","isWorkbenchPanelRegion","region","some","panelRegion","shouldShowRegionTabs","placements","options","alwaysShowTabs","length","closable","WorkbenchPanelHeaderVisibility","hasTabs","hasPanelMenus","hasHeaderActions","shouldShowPanelHeader","input","isPlacementEligibleForRegion","workbench","placement","resource","getPrimaryResource","modeId","modes","getActiveModeId","resources","preview","resolve","widget","layout","getWidget","contributionId","ignoreResourceLocation","location","getLayout","useWorkbenchRegionTabsState","visibilityStorageKey","t0","$","_c","hasPanelMenuOpeners","undefined","changes","store","_temp","commands","_temp2","contextValues","context","_temp3","itemsByPath","menuStore","_temp4","layoutState","_temp5","compositionPanels","t1","getPersistenceScope","storageKey","tabStore","_temp6","t2","t3","subscription","onDidResetLayout","getState","reset","dispose","regionState","regions","subPanelPlacements","t4","widgets","tabOverrides","t5","role","Boolean","filter","t6","placement_0","visibleSubPanels","Set","map","_temp7","visibleSubPanelIds","eligibleSubPanels","leadingItems","visiblePlacements","placement_2","has","widgetId","t7","t8","addable","t9","placement_3","hasMovedPlacement","getRegionSettings","showTabs","hasActions","hasTrailingActions","toggleTab","useWorkbenchPanelRegionTabsState","left","right","_temp8","tabs","useWorkbenchPanelHeaderVisible","useWorkbenchRegionTabsVisible","state","state_0","state_1","values","state_2","state_3","state_4","placement_1","menu","collapsed","_c","_temp","_temp2","_temp3","_temp4","_temp5","_temp6","_temp7","_temp8","Box","createContext","ReactNode","useContext","useLayoutEffect","useState","createPortal","WorkbenchCore","WorkbenchPanelRegion","WorkbenchWidgetPlacement","workbenchPanelRegions","resolveResourcePreview","useWorkbenchStore","movePanelHost","isPlacementEligibleForRegion","useRetainedViewPlacements","WorkbenchWidgetHost","PanelViewSlots","register","region","node","HTMLDivElement","PanelViewContext","usePanelViewSlot","$","_c","registry","setNode","t0","t1","t2","Boolean","t3","enabled","ref","PanelViewPortal","props","workbench","placement","slot","active","host","_temp","remove","t4","widgetId","layout","getLayout","activeWidgetId","activatePanel","activate","t5","t6","t7","focus","event","currentTarget","contains","target","setActiveRegion","t8","t9","t10","WorkbenchPanelViewHosts","children","changes","resources","preview","store","_temp2","_temp3","pages","_temp4","modes","_temp5","Symbol","for","slots","setSlots","previous","undefined","flatMap","region_0","state_3","regions","eligible","state","widgets","filter","p","resource","selected","find","p_0","p_1","mountStrategy","current","retained","region_1","id","some","p_2","peers","p_3","selected_0","p_4","map","document","createElement","style","display","state_0","state_1","location","state_2","activeModeId","_c","_temp","_temp2","_temp3","_temp4","_temp5","current","Box","Flex","ScrollArea","RegisteredPlaceholderContribution","WorkbenchCore","WorkbenchPanelMenuRegion","WorkbenchRegion","WorkbenchRegionId","WorkbenchWidgetPlacement","getActiveWorkbenchLocationPanel","getActiveWorkbenchSubPanel","getWorkbenchPanelForMenuRegion","isWorkbenchPanelPlacementVisible","matchesWorkbenchModeEligibility","matchesWorkbenchPanelMenuOwner","WorkbenchPanelRegion","workbenchPanelMenuRegions","workbenchPanelRegions","useWorkbenchActiveModeId","useWorkbenchLocationResource","useWorkbenchStore","getWorkbenchRegionBackground","ModeChromeView","useModeChrome","usePanelViewSlot","useRetainedViewPlacements","WorkbenchWidgetHost","WorkbenchRegionProps","workbench","region","title","pointerEvents","transparent","horizontalScrollRegions","Set","panelMenuRegionIds","Object","values","flatMap","regions","sidePanelRegionIds","verticalContentProps","display","flexDirection","minH","position","const","horizontalContentProps","alignItems","h","getActivePlacement","widgets","activeWidgetId","find","placement","widgetId","resolveRenderedRegionPlacements","activePlacement","filter","mountStrategy","resolveRegionPlacementRenderState","active","additive","visibility","createPlaceholderPlacement","placeholder","id","contributionId","closable","WorkbenchRegionPlacementProps","globalActiveWidgetId","visible","order","WorkbenchRegionPlacement","props","$","_c","t0","renderState","overlaysActivePlacement","flex","t1","layout","activatePanel","activatePlacement","t2","t3","t4","undefined","t5","t6","t7","t8","t9","panelRegion","includes","panelSlot","sharedViews","enabled","chrome","locationResource","modeId","store","state","currentRegionState","registeredWidgets","activeSubPanel","has","ignoreOwnerResourceKey","activeLocationPanel","regionState","contribution","location","locationPanel","subPanel","getPlaceholder","renderedPlacements","retainedPlacements","visibleIds","map","entry","scrollsHorizontally","target","justifyContent","ref","renderedPlacement","findIndex","_c","IconButton","Menu","Portal","ListRow","PANEL_HEADER_CONTROL_SIZE","Tooltip","useRef","ResourceRef","WorkbenchCompositionAddablePanel","WorkbenchCore","WorkbenchPanelRegion","WorkbenchIcon","openPanelWidget","WorkbenchPanelAddMenuProps","workbench","region","resource","panels","WorkbenchPanelAddMenu","props","$","_c","triggerRef","length","t0","panel","widget","contribution","pinned","open","openPanel","t1","undefined","t2","t3","Symbol","for","t4","label","trigger","t5","placement","getAnchorElement","current","t6","t7","t8","panel_0","id","title","icon","map","t9","_c","Menu","Portal","VisuallyHidden","ResourceContextAction","ResourceMenuItems","useId","useRef","WorkbenchCore","WorkbenchTabMenuGroup","WorkbenchWidgetPlacement","findPlacementByWidgetId","useWorkbenchResourceActionResolver","createWorkbenchResourceMenu","WorkbenchIcon","getPanelLabel","RegionTabMenuProps","anchor","x","y","width","height","triggerId","label","open","setOpen","groups","placement","workbench","RegionTabMenu","props","$","_c","labelId","pending","t0","widgetId","layout","getLayout","regionId","currentRegion","t1","closable","placementIdentity","resource","tabRetention","t2","region","destinations","getPanelDestinations","filter","t3","pinned","pinPlacement","updatePanel","strategy","kind","pin","t4","closePlacement","closePanel","close","tabAction","_temp","t5","menu","t6","t7","region_0","movePanel","t8","map","t9","t10","resetLayout","actions","trigger","details","Symbol","for","action","current","onClick","mainAxis","getAnchorRect","offset","action_0","t11","key","title","icon","group","id","_c","_temp","Box","DndContext","DragOverEvent","DragOverlay","MouseSensor","pointerWithin","TouchSensor","useDroppable","useSensor","useSensors","createContext","ReactNode","useContext","useId","useState","WorkbenchCore","WorkbenchPanelRegion","WorkbenchTabPosition","findPlacementByWidgetId","planTrayDrop","TabDrop","region","position","widgetId","edge","TabDragContext","activeId","drop","destinations","useTabDrag","WorkbenchTabDragProvider","props","$","_c","workbench","children","setActiveId","setDrop","t0","Symbol","for","activationConstraint","distance","t1","sensors","t2","undefined","finish","t3","event","data","over","current","id","active","getPanelDestinations","String","includes","layout","getLayout","placement","widgets","regions","rect","translated","before","left","width","beforeWidgetId","afterWidgetId","plan","index","findIndex","widget","next","previous","resolveDrop","t4","placement_0","t5","t6","t7","event_0","t8","t9","event_1","event_2","t10","event_3","target","movePanel","t11","title","resource","label","t12","t13","_temp","t14","WorkbenchTabDropTarget","allowed","Boolean","disabled","setNodeRef","highlighted","args","pointer","pointerCoordinates","panel","document","elementFromPoint","x","y","closest","getAttribute","filter","collision","droppableContainer","sort","a","b","area","rect_0","droppableRects","get","height","Infinity","_c","_temp","useDraggable","useDroppable","KeyboardEvent","MouseEvent","PointerEvent","useEffect","useRef","useState","WorkbenchCore","WorkbenchPanelRegion","WorkbenchWidgetPlacement","usePlacementTab","useTabDrag","WorkbenchRegionTabProps","workbench","placement","activeWidgetId","disabled","nextWidgetId","previousWidgetId","sortable","region","useRegionTab","props","$","_c","t0","t1","undefined","snapshot","open","setOpen","t2","Symbol","for","x","y","width","height","triggerId","anchor","setAnchor","hold","t3","start","suppressClick","t4","t5","widgetId","id","drag","t6","t7","t8","data","target","context","t9","clearTimeout","current","clearHold","t10","t11","t12","element","rect","getBoundingClientRect","show","t13","event","preventDefault","stopPropagation","currentTarget","onContextMenu","t14","event_0","key","shiftKey","altKey","layout","reorderPanel","beforeWidgetId","afterWidgetId","onKeyDown","t15","event_1","pointerType","element_0","clientX","clientY","setTimeout","onPointerDown","t16","event_2","Math","hypot","onPointerMove","t17","event_3","onClick","t18","drop","t19","onPointerUp","onPointerCancel","_c","Box","CloseButton","Tabs","Text","useTabsContext","DropIndicator","Tooltip","WorkbenchIcon","RegionTabMenu","resolveTabIconName","useRegionTab","WorkbenchRegionTabProps","TabIcon","props","$","_c","indicator","icon","t0","color","t1","label","WorkbenchRegionTab","workbench","placement","activeWidgetId","disabled","sortable","undefined","tabs","behavior","snapshot","drag","target","drop","resource","title","contributionId","labelId","widgetId","t2","layout","resources","widget","getWidget","getKind","type","extensionId","active","t3","node","setNodeRef","t4","t5","closable","t6","t7","Symbol","for","t8","getTriggerProps","value","t9","t10","tabRetention","t11","isDragging","t12","t13","t14","placementIdentity","opacity","pointerEvents","_temp","_temp2","_temp3","event_2","event","stopPropagation","closePlacement","closePanel","t15","onClick","onContextMenu","onKeyDown","onPointerCancel","onPointerDown","onPointerMove","onPointerUp","open","listeners","id","t16","t17","t18","t19","menu","t20","anchor","setOpen","t21","TabDropIndicator","edge","event_0","event_1","_c","_temp","_temp2","_temp3","_Fragment","Tabs","WorkbenchCore","WorkbenchPanelRegion","WorkbenchWidgetPlacement","WorkbenchRegionTab","RegionTabListProps","activeWidgetId","disabled","panelRegion","placements","workbench","RegionTabList","props","$","_c","t0","map","placement","index","widgetId","Boolean","getPanelDestinations","length","t1","_c","HStack","IconButton","Menu","Portal","Tabs","buildTabVisibilityMenuActions","ListRow","PANEL_HEADER_CONTROL_SIZE","PANEL_HEADER_TAB_SIZE","ScrollArea","Tooltip","MouseEvent","ReactMouseEvent","useEffect","useState","WorkbenchCore","WorkbenchPanelRegion","WorkbenchRegion","WorkbenchRegionId","WorkbenchWidgetPlacement","workbenchPanelRegions","runUserAction","hasCommandParameters","WorkbenchMenuItem","WorkbenchIcon","WorkbenchPanelAddMenu","RegionTabList","resolveDisplayedActiveWidgetId","resolveTabIconName","toTabKey","useWorkbenchPanelRegionTabsState","useWorkbenchRegionTabsState","shouldShowPanelHeader","shouldShowRegionTabs","useWorkbenchPanelHeaderVisible","useWorkbenchRegionTabsVisible","WorkbenchRegionTabsProps","workbench","region","visibilityStorageKey","resolvePlacementIcon","placement","iconName","layout","getWidget","contributionId","resource","resources","getKind","type","extensionId","icon","undefined","WorkbenchRegionTabsContentProps","state","ReturnType","WorkbenchRegionTabsContent","props","$","_c","commands","regionState","tabStore","subPanelPlacements","visiblePlacements","leadingItems","panelRegion","eligibleSubPanels","showTabs","hasActions","tabOverrides","t0","getKey","viewport","setViewport","menuOpen","setMenuOpen","t1","Symbol","for","x","y","width","height","anchor","setAnchor","t2","t3","key","hiddenByDefault","toggleTab","reset","t4","t5","t6","t7","placement_0","menuActions","onToggleTab","onResetAll","visibleIcon","hiddenIcon","resetIcon","hasVisibilityMenu","length","t8","event","preventDefault","target","Element","closest","rect","currentTarget","getBoundingClientRect","openVisibilityMenu","t10","t9","onWheel","event_0","deltaY","scrollWidth","clientWidth","scrollLeft","addEventListener","passive","removeEventListener","t11","activeWidgetId","t12","t13","querySelector","scrollIntoView","block","inline","t14","item","command","commandId","params","commandPalette","requestParams","record","label","args","executeCommand","onSelectLeadingItem","t15","t16","item_0","id","disabled","_temp","event_2","stopPropagation","map","leadingActions","t17","T0","t18","t19","t20","t21","details","placement_1","find","candidate","widgetId","value","role","setRegionActiveWidget","activatePanel","t22","t23","t24","t26","t27","t28","t29","t30","t31","t32","t33","t34","h","w","minW","t35","t36","details_0","open","getAnchorRect","offset","mainAxis","_temp2","t37","Root","t25","t38","t39","WorkbenchPanelRegionTabsProps","WorkbenchPanelRegionTabs","WorkbenchOtherRegionTabs","WorkbenchRegionTabs","panel","event_1","action","endContent","isDisabled","onClick","_c","_temp","_temp2","Button","AlertMessage","RendererReadNoticeProps","error","retry","RendererReadNotice","props","$","_c","t0","t1","_c","resolvePageParams","WorkbenchCore","WorkbenchPanelInstance","useWorkbenchStore","usePageParams","workbench","placement","$","_c","state_0","pages","store","_temp","owner","placementIdentity","kind","pageId","state","activePageId","t0","params","t1","location","t2","_c","_temp","createRendererMutations","baseline","T","revision","journal","Array","update","value","saving","pending","some","operation","undefined","reduce","accept","next","readRevision","length","begin","push","finish","success","splice","indexOf","createRendererMutationBinding","key","owner","bind","ownerKey","queryKey","JSON","stringify","createContext","ReactNode","useContext","WorkbenchConnectionContext","WorkbenchConnectionProviderProps","connected","children","WorkbenchConnectionProvider","props","$","_c","t0","useWorkbenchConnection","_c","PstdioConnectionError","useEffect","useRef","useState","Disposable","RendererReadBinding","WorkbenchCore","createRendererMutationBinding","useWorkbenchConnection","RendererReadOptions","workbench","ownerKey","queryKey","refreshKey","load","signal","AbortSignal","publish","value","T","Promise","subscribe","listener","ReadState","loading","error","Error","useRendererRead","options","connected","state","setState","retryRef","undefined","refreshRef","lastRefreshKey","callbacks","mutationBinding","mutations","current","bind","saveQueue","resolve","binding","views","reads","owner","handlers","onProgress","previous","onValue","onError","connectionLost","readError","String","refresh","reason","pending","revision","request","JSON","stringify","accept","subscription","dispose","message","retry","mutate","update","save","operation","begin","then","catch","finish","finally","createMenuItemGroups","createMenuItems","withLeadingSeparator","createTreeMenuItems","HStack","Text","PaletteShortcut","TreeListAction","TreeListActionMenuItem","ContextKeyValue","MenuPath","RegisteredCommand","TreeAction","WorkbenchCommandExecutionContext","WorkbenchCoreContributionContext","matchesContextExpression","scopeWorkbenchResourceContextValues","reportUserActionError","hasCommandParameters","CommandParamsRequest","WorkbenchIcon","TreeActionParamsRequest","request","run","args","Promise","CreateTreeActionItemsInput","actions","workbench","context","onCommandError","error","onRequestParams","CreateTreeContextMenuItemsInput","menuPath","commandContextValues","Record","resource","snapshot","isRegisteredCommandVisible","record","contextValues","command","when","handler","isVisible","executeTreeAction","input","action","commandId","commands","getCommand","undefined","resolvedArgs","executeCommand","id","runTreeAction","label","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","disabled","isCommandEnabled","createTreeActionMenuItems","shortcuts","Map","keybindings","listCommandKeybindings","map","k","keybinding","items","icon","binding","get","requestParams","params","resourceMutation","submitLabel","push","endContent","onAction","catch","createTreeContextMenuItems","actionItems","regularItems","kernelItems","visibleRegularItems","length","createTreeActionItems","tooltip","withLeadingSeparator","WorkbenchCore","reportUserActionError","CommandParamFieldRenderer","CommandParamsDialog","TreeActionParamsRequest","TreeParamsDialogProps","request","renderParamField","workbench","onClose","TreeParamsDialog","props","$","_c","t0","t1","context","commands","id","args","signal","executeCommand","t2","input","getCommand","commandId","prepareCommandArgs","onArgsChange","Promise","resolve","t3","label","error","t4","t5","args_0","run","_c","Button","HStack","Text","ReactNode","useState","WorkbenchCommandExecutionContext","WorkbenchCore","ViewToolbarAction","CommandParamFieldRenderer","useWorkbenchStore","createTreeContextMenuItems","TreeActionParamsRequest","TreeParamsDialog","ViewToolbarActionsProps","workbench","actions","context","renderParamField","ViewToolbarActions","props","$","_c","request","setRequest","error","setError","store","_temp","commands","_temp2","T0","t0","t1","t2","Symbol","for","error_0","Error","message","String","items","onRequestParams","onCommandError","t3","item","id","find","action","presentation","disabled","undefined","onAction","icon","label","map","t4","t5","t6","state","values","state_0","_c","_temp","_temp2","_Fragment","resourceKey","ResourceContextAction","DataTableSelectionAction","RowData","ReactNode","DataTableRendererColumn","DataTableRendererContribution","DataTableRendererQueryResult","DataTableRendererRow","DataTableRendererSelectionAction","WorkbenchPanelInstance","resolveDataTableRendererQueryKey","contribution","Pick","resource","modeId","contextValues","Record","JSON","stringify","id","contextKeys","map","key","resolveDataTableRendererColumns","result","contributionColumns","columns","firstRow","rows","Object","keys","values","buildDataTableRendererData","rowByData","WeakMap","data","row","fromEntries","column","set","resolveDataTableRendererSelectionActions","actions","action","label","icon","destructive","onSelect","flatMap","rendererRow","get","run","resolveDataTableRendererResourceActions","resolveResourceActions","NonNullable","filter","isDisabled","_context","onClick","resolveDataTableRendererStorageKey","placement","identity","scope","instanceId","length","Box","Stack","EmptyState","DataTable","DataTableColumnRenderer","DataTableColumnStat","DataTableRowAction","DataTableSkeleton","RowData","useDataTableViewStore","ReactNode","useSyncExternalStore","DataTableRendererQueryResult","RegisteredDataTableRendererContribution","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","runUserAction","CommandParamFieldRenderer","useWorkbenchResourceActionResolver","useWorkbenchStore","RendererReadNotice","usePageParams","useRendererRead","ViewToolbarActions","buildDataTableRendererData","resolveDataTableRendererColumns","resolveDataTableRendererQueryKey","resolveDataTableRendererResourceActions","resolveDataTableRendererSelectionActions","resolveDataTableRendererStorageKey","WorkbenchDataTableViewProps","workbench","renderParamField","contribution","placement","initialResult","rows","noopSubscribe","DataTableViewFrame","props","$","_c","t0","children","WorkbenchDataTableView","pageParams","resolveResourceActions","contextValues","context","store","_temp","storageKey","provider","viewsProvider","viewsSource","subscribe","getSnapshot","_temp2","_temp3","filter","_temp4","sorts","_temp5","settings","_temp6","t1","t2","resource","modes","getActiveModeId","t3","JSON","stringify","t4","signal","executeQuery","modeId","t5","refresh","subscription","events","onDidRefreshDataTableRenderer","event","dataTableRendererId","id","dispose","t6","ownerKey","queryKey","refreshKey","load","read","result","value","loading","T0","T1","model","openRow","renderers","rowActions","selectionActions","stats","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t7","t8","t9","columns","defaultActiveViewId","defaultFilter","defaultSettings","defaultSorts","defaultViews","emptyDescription","emptyTitle","onRowActivate","resourceKind","toolbarActions","error","retry","Symbol","for","bb0","labels","Object","fromEntries","_temp7","map","_temp8","descriptions","_temp9","_temp0","icons","_temp1","_temp10","_temp11","_temp12","_temp13","_temp14","action","label","icon","destructive","onSelect","data","row","rowByData","get","run","t28","action_0","data_0","row_0","t29","t30","column_9","column","hidden","hiddenColumns","includes","_temp15","skeletonColumns","length","undefined","t31","resources","getKind","data_1","flatMap","_temp16","_temp17","_temp18","_temp19","_temp20","_temp21","_temp22","data_2","data_3","row_1","Boolean","initialPageSize","pageSizeOptions","selectionMode","t32","state","values","state_0","state_1","state_2","column_0","column_1","description","column_2","column_3","column_4","column_5","stat","column_6","column_7","renderer","column_8","column_10","column_11","type","column_12","filterable","column_13","column_14","groupable","column_15","column_16","column_17","noopSubscribe","_c","_temp","_temp2","_temp3","_temp4","_temp5","_temp6","_temp7","_temp8","_temp9","_temp0","_temp1","_temp10","_temp11","_temp12","_temp13","_temp14","_temp15","_temp16","_temp17","_temp18","_temp19","_temp20","_temp21","_temp22","ParamEditorProps","PreferencePropertySchema","PreferenceValue","Param","NonNullable","ParamValue","Parameters","PreferenceParamEntry","name","schema","label","value","BOOLEAN_OPTIONS","id","humanize","segment","split","at","spaced","replace","charAt","toUpperCase","slice","toOptions","values","map","String","toParam","entry","description","current","default","base","type","defaultValue","Number","Boolean","options","enum","singleLine","Array","isArray","multiSelect","undefined","preferenceSchemaToParams","entries","filter","param","paramValueToPreference","Button","HStack","Stack","ParamEditor","ParamEditorProps","useState","PreferenceRegistry","PreferenceScope","PreferenceParamEntry","paramValueToPreference","preferenceSchemaToParams","ParamValue","Parameters","NonNullable","WorkbenchPreferencesFormProps","preferences","names","name","label","resolveScopeId","scope","mode","toName","entry","WorkbenchPreferencesForm","props","$","_c","t0","undefined","t1","Symbol","for","staged","setStaged","formKey","setFormKey","t2","scopeId","scopeRef","entries","t3","candidate","schema","getSchema","push","value","getValue","params","t4","Map","map","_temp","schemaByName","t5","name_0","schema_0","get","setValue","persist","t6","id","value_0","current","handleChange","t7","name_1","value_1","Object","_temp2","save","t8","_temp3","discard","t9","keys","hasStaged","length","t10","t11","t12","key","key_0","_c","_temp","_temp2","_temp3","Badge","Box","PageLocation","PageRef","resourceKey","Tooltip","TreeListNode","TreeListSection","DiffBubble","ReactNode","getWorkbenchSelectionResourceKeys","NavigationTarget","ResourceRef","resourceContextMenuPath","TreeNode","TreeViewSection","WorkbenchCore","createWorkbenchResourceActions","WorkbenchIcon","createTreeActionItems","createTreeContextMenuItems","TreeActionParamsRequest","TreeNodeRenderContext","workbench","onCommandError","error","onRequestParams","request","resolveTreeListActiveNodeId","activeNodeId","selectedNodeId","ResolveTreeListSelectionInput","sections","childrenByNodeId","Record","activeLocation","activeResource","activeNodeIds","ids","uniqueIds","Set","length","undefined","targetPanelResource","target","targets","kind","reverse","find","candidate","resource","resolveTreeNodeResourceKey","node","listTreeNodes","nodes","flatMap","children","id","listSectionNodes","section","resolveActiveResourceNodeIds","resourceKeys","matches","filter","map","findSectionNode","nodeId","pageRefsEqual","left","right","extensionId","targetMatchesPage","activePage","some","page","resolveActivePageNodeIds","resolveTreeListSelection","input","activeResourceKeys","declaredSelection","selected","nodeResourceKey","includes","selectedNode","selectedResourceKey","activeResourceNodeId","activePageNodeId","canVirtualizeTreeNode","inlineInput","isContainer","canVirtualizeTreeSections","every","findNode","child","findNodeInSections","wrapTreeNodeIcon","icon","iconTooltip","resolveTreeNodeIcon","iconElement","resolveTreeNodeNavigationIntent","payload","resolveTreeNodeResource","resolveTreeNodeEndContent","endContent","badge","color","label","additions","metadata","diffAdditions","deletions","diffDeletions","type","toTreeListSectionEmptyNode","emptyState","title","description","disabled","rowVariant","toTreeListNode","context","navigationIntent","commandContext","customPath","contextMenuPath","menuPath","resourcePath","sharedActions","action","key","commandId","group","isDisabled","separatorBefore","onAction","onClick","contextMenuItems","actions","contextMenuActions","join","menuItems","treeNode","moveScope","iconColor","tooltip","showContextMenuTrigger","canHide","canReorder","canDrag","canDrop","hiddenByDefault","menuPlacement","collapsible","isNavigable","Boolean","toTreeListSection","emptyNode","menuLabel","listTreeNodes","TreeListSection","TreeViewSection","pinnedOnlyNodeIds","sections","Set","flatMap","section","nodes","filter","node","pinnedOnly","map","id","withoutPinnedOnlyRows","ids","ReadonlySet","size","has","length","Skeleton","Stack","EmptyState","ResourceContextAction","TreeList","TreeListMovePolicy","TreeListSection","RefObject","canVirtualizeTreeSections","TREE_SKELETON_WIDTHS","TreeViewSkeleton","$","_c","t0","Symbol","for","map","_temp","TreeViewBodyProps","error","loading","moduleLoading","sections","backgroundContextActions","draggable","customizationAvailable","activeNodeId","expandedNodeIds","expandedSectionIds","scrollRef","HTMLDivElement","onToggleSection","sectionId","onToggleNode","nodeId","onReorderSections","nextSectionIds","onReorderNodes","nextNodeIds","canMove","onMoveNode","sourceNodeId","targetNodeId","position","onNavigate","event","Parameters","NonNullable","TreeViewBody","props","length","t1","width","index","_c","_temp","getWorkbenchRenderers","NavigationTarget","WorkbenchCore","shouldSelectTreeNodeForNavigationTarget","target","items","kind","targets","some","item","createToggleTreeSection","workbench","treeViewId","expandedIds","sectionId","setSectionExpanded","includes","Input","InputGroup","Header","WorkbenchIcon","TreeViewSearchProps","visible","placeholder","value","onChange","TreeViewSearch","props","$","_c","t0","undefined","t1","Symbol","for","t2","event","target","t3","_c","TreeNode","TreeViewSection","ResourcePreviewChanges","resolveResourcePreview","previewTreeResources","sections","childrenByNodeId","Record","changes","previewNodes","nodes","flatMap","node","resource","undefined","children","id","label","map","section","TreeNode","TreeQueryContext","TreeRendererRegistry","TreeViewSection","settleReadBatch","isUnregisteredTreeError","trees","treeId","error","Error","message","getTreeRenderer","LoadedTreeData","header","body","footer","listTreeNodes","data","flatMap","section","nodes","loadExpandedTreeChildren","expandedNodeIds","ctx","expanded","Set","visited","childrenByNodeId","Record","queue","length","signal","throwIfAborted","batch","node","shift","has","id","add","push","children","map","AbortSignal","getChildren","flat","expandDefaultTreeSections","tree","sectionId","defaultExpandedSectionIds","setSectionExpanded","loadTreeData","onProgress","Promise","available","loadSlot","slot","context","sections","aborted","loaders","getHeader","getBody","getFooter","RegisteredTreeRendererContribution","ResourceRef","TreeNode","TreeViewSection","WorkbenchCore","getWorkbenchRenderers","getNavigationTreeNodeSource","reportUserActionError","findNodeInSections","MoveTreeNodeContext","workbench","renderer","resource","viewId","sections","childrenByNodeId","Record","onError","error","canMoveTreeNode","context","Pick","sourceId","targetId","source","target","undefined","canDrag","canDrop","sourceOwner","targetOwner","contribution","registryToken","createMoveTreeNode","moveNode","sourceNodeId","targetNodeId","position","trees","state","getTreeState","id","refresh","setSelectedNode","nodeId","TreeNode","TreeViewSection","TreeMoveIntent","sourceId","targetId","position","previewTreeMove","sections","children","Record","move","childrenOf","node","id","find","nodes","child","roots","flatMap","section","source","target","canDrag","canDrop","collapsible","materialize","descendants","map","moving","update","next","useEffect","useRef","useState","TreeNode","TreeViewSection","previewTreeMove","TreeMoveIntent","PendingMove","token","intent","savedAfter","useTreeMovement","input","scope","body","childrenByNodeId","Record","persist","sourceId","targetId","position","Promise","canMove","refresh","pending","setPending","moves","latestBody","current","queue","resolve","filter","move","length","preview","reduce","sections","moveNode","then","Symbol","saved","map","undefined","resourceKey","useEffect","useState","useSyncExternalStore","WorkbenchPanelInstance","getWorkbenchRenderers","ResourceRef","TreeNode","WorkbenchCore","useWorkbenchStore","usePageParams","useRendererRead","previewTreeResources","expandDefaultTreeSections","LoadedTreeData","loadExpandedTreeChildren","loadTreeData","canMoveTreeNode","createMoveTreeNode","useTreeMovement","useTreeData","workbench","treeViewId","resource","viewId","filter","t0","onMoveError","placement","$","_c","ownerKey","undefined","JSON","stringify","pageParams","trees","changes","resources","preview","store","_temp","t1","state_0","state","refreshKeysByTreeId","treeStore","mode","modes","_temp2","location","pages","_temp3","project","_temp4","activePage","_temp5","t2","navigationTrees","resolveOwner","getPageOwner","t3","listener","subscription","onDidChange","dispose","pageOwner","queryKey","refreshKey","getTreeRenderer","getReadKey","childrenKey","t4","t5","expandedChildren","setExpandedChildren","byNodeId","read","load","signal","publish","ctx","data","available","children","throwIfAborted","getTreeState","expandedNodeIds","header","body","footer","subscribe","refresh","onDidRefresh","event","treeId","loadChildren","node","getChildren","then","children_0","current","id","t6","subscription_0","subscribeRefresh","resource_0","contains","nodes","some","node_0","value","section","retry","t7","savedBody","savedChildren","renderer","movement","scope","childrenByNodeId","canMove","sourceId","targetId","sections","persist","onError","t8","t9","Symbol","for","t10","t11","t12","error","t13","loading","t14","state_1","activeModeId","state_2","state_3","projectId","state_4","activePageId","_c","_temp","_temp2","_temp3","_temp4","_temp5","ResourceRef","WorkbenchLayout","WorkbenchPageContribution","resolvePageActivePlacement","resolveTreeActiveResource","layout","page","primary","overlay","regions","overlayResource","widgets","find","entry","widgetId","activeWidgetId","resource","active","WorkbenchCore","useWorkbenchStore","resolveTreeActiveResource","useTreeNavigationState","workbench","$","_c","projectId","pages","store","_temp","activeLocation","_temp2","activePage","_temp3","t0","resource","state_2","state","layout","activeResource","t1","state_0","location","state_1","activePageId","undefined","_c","_temp","_temp2","_temp3","TreeNode","TreeViewSection","treeSelectionAncestors","sections","childrenByNodeId","Record","selectedIds","selected","Set","parents","expandedSections","visit","nodes","path","sectionId","node","has","id","add","children","section","size","undefined","useEffect","useRef","getWorkbenchRenderers","WorkbenchCore","resolveTreeListSelection","treeSelectionAncestors","useTreeSelection","workbench","treeViewId","input","$","_c","sections","childrenByNodeId","ids","selectedNodeIds","t0","JSON","stringify","key","revealed","t1","t2","length","current","ancestors","trees","id","nodes","setNodeExpanded","id_0","setSectionExpanded","_c","resolveVisibility","TreeListSection","VisibilityOverride","keepSectionsEmptiedByMoves","source","ordered","visible","sectionOverrides","Record","pinnedOnlyNodeIds","ReadonlySet","Set","visibleById","Map","map","section","id","hadRows","filter","nodes","some","node","has","flatMap","shown","get","emptiedByMoves","length","hiddenByDefault","TreeListGroup","TreeListSection","activeTreeGroupLayout","sections","groups","nodeOrderBySection","Record","scopes","Set","map","section","moveScope","activeGroups","filter","group","undefined","has","inactiveGroupIds","includes","id","activeNodeOrder","Object","fromEntries","entries","sectionId","ResourceContextAction","TreeListActionMenuItem","TreeListGroup","TreeListSection","useTreeListOrderStore","useState","WorkbenchIcon","activeTreeGroupLayout","GroupDraft","storageKey","group","isNew","useTreeViewGroups","sections","nodeOrderBySection","Record","enabled","savedGroups","state","groups","addGroup","renameGroup","removeGroup","draft","setDraft","currentDraft","activeNodeOrder","push","startGroup","moveScope","id","crypto","randomUUID","label","newGroupAction","key","icon","closeOnSelect","onClick","withGroupControls","orderedSections","map","section","find","menuItems","onAction","editing","canReorder","contextMenuItems","actions","inlineInput","ariaLabel","placeholder","defaultValue","onCommit","onCancel","undefined","applyTreeListOrder","buildTreeVisibilityMenuActions","filterVisibleSections","ResourceContextAction","resolveVisibility","TreeListActionMenuItem","TreeListNode","TreeListSection","useTreeListOrderStore","useTreeListVisibilityStore","VisibilityOverride","ReactNode","keepSectionsEmptiedByMoves","withoutPinnedOnlyRows","useTreeViewGroups","TreeViewRegions","headerSections","sections","footerSections","TreeViewSlot","TreeViewCustomization","visibleHeaderSections","visibleSections","visibleFooterSections","backgroundContextActions","customizationRevision","onReorderSections","slot","nextSectionIds","onMoveSection","sourceSectionId","destinationSectionId","onReorderNodes","sectionId","nextNodeIds","VisibilityToggleIcons","visibleIcon","hiddenIcon","resetIcon","NodeVisibilityActions","onToggleNode","id","hiddenByDefault","TreeViewCustomizationOptions","suppressNodeContextMenus","pinnedOnlyNodeIds","ReadonlySet","allowGroups","toStringLabel","label","fallback","isCustomizableNode","node","canHide","visibilityContextIcon","effective","icons","buildNodeVisibilityContextMenuItem","nodeOverrides","Record","actions","undefined","existingItems","contextMenuItems","icon","length","separatorBefore","onAction","addRegionNodeVisibilityContextMenuItems","nodes","enabled","changed","next","map","item","addSectionNodeVisibilityContextMenuItems","section","useTreeViewCustomization","storageKey","regions","t0","$","_c","options","sectionOverrides","_temp","_temp2","toggleSection","_temp3","toggleNode","_temp4","resetVisibility","_temp5","sectionOrder","_temp6","nodeOrderBySection","_temp7","sectionSlotById","_temp8","setSectionOrder","_temp9","setNodeOrder","_temp0","setSectionSlot","_temp1","resetOrder","_temp10","t1","sourceSections","groups","activeNodeOrder","withGroupControls","newGroupAction","t2","visibilityActions","onToggleSection","onResetAll","t3","Map","_temp11","_temp12","_temp13","defaultSlotBySectionId","orderedSectionsBySlot","header","content","footer","orderedAllSections","section_2","get","push","orderedHeaderSections","orderedSections","Set","orderedFooterSections","includeNodeContextMenus","contentSections","visibleIn","visibilityMenuItems","key","items","_temp14","JSON","stringify","_temp16","main","_temp18","_temp20","t4","slot_0","idsBySlot","_temp21","_temp22","_temp23","t5","nextSectionIds_0","destinationSlot","t6","state","state_0","state_1","state_2","state_3","reset","state_4","state_5","state_6","state_7","state_8","state_9","state_10","const","section_0","section_1","closeOnSelect","_temp15","section_3","_temp17","node_0","section_4","_temp19","node_1","section_5","section_6","section_7","section_8","_c","_temp","_temp2","_temp3","_temp4","_temp5","Box","Flex","Text","ResourceContextAction","ScrollArea","TreeList","TreeListDragProvider","useEffect","useRef","useState","NavigationTarget","ResourceRef","TreeNode","TreeRendererState","TreeViewSection","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","reportUserActionError","CommandParamFieldRenderer","WorkbenchIcon","useWorkbenchStore","workbenchBackgrounds","RendererReadNotice","TreeActionParamsRequest","findNodeInSections","toTreeListSection","TreeParamsDialog","pinnedOnlyNodeIds","TreeViewBody","createToggleTreeSection","shouldSelectTreeNodeForNavigationTarget","TreeViewSearch","useTreeData","useTreeNavigationState","useTreeSelection","useTreeViewCustomization","WorkbenchTreeViewProps","readOwnerKey","placement","workbench","treeViewId","activeNodeId","resource","viewId","renderParamField","onOpenResourceError","error","onSidenavContextActionsChange","actions","EMPTY_TREE_STATE","expandedNodeIds","expandedSectionIds","treeCustomizationOptions","body","isSidenav","suppressNodeContextMenus","allowGroups","useSidenavContextActions","revision","onChange","actionsRef","current","TreeNavigationContext","navigateTreeNode","context","nodeId","intent","id","payload","target","setSelectedNode","navigation","openTarget","catch","ToggleTreeNodeContext","header","footer","childrenByNodeId","Record","loadChildren","node","createToggleTreeNode","expanded","includes","setNodeExpanded","children","WorkbenchTreeView","props","$","_c","Boolean","scrollRef","t0","getTreeRenderer","treeRenderer","filter","setFilter","treeState","treeStore","state","statesByTreeId","projectId","activeLocation","activeResource","t1","searchable","trim","undefined","moveNode","loading","retry","paramsRequest","setParamsRequest","rawHeaderSections","rawSections","t2","adapterContext","onCommandError","onRequestParams","map","section","section_0","section_1","rawFooterSections","t3","headerSections","sections","footerSections","t4","Symbol","for","visibleIcon","hiddenIcon","resetIcon","t5","visibleHeaderSections","visibleSections","visibleFooterSections","backgroundContextActions","customizationRevision","onReorderSections","onReorderNodes","onMoveSection","t6","t7","selectedNodeId","activeNodeSelection","t8","toggleNode","t9","toggleSection","t10","navigationContext","t11","t12","canMove","t13","title","t14","length","sidenav","nextSectionIds","event","t15","t16","searchPlaceholder","t17","t18","t19","display","style","overflowX","minWidth","width","minHeight","flexDirection","t20","t21","nextSectionIds_0","t22","event_0","t23","t24","nextSectionIds_1","event_1","t25","t26","t27","t28","_c","ResourceRef","WorkbenchModuleContext","pageResourceContextKey","relatedResourceStateKey","state","ReturnType","resource","JSON","stringify","projectId","activePageId","pages","undefined","location","relatedResourcePageKey","ctx","store","getState","RelatedResourceOpening","ResourceRef","resourceKey","WorkbenchModuleContext","WorkbenchRegionState","relatedResourcePageKey","regions","const","PanelChoice","visible","resource","PageChoices","Partial","Record","selected","region","widgets","find","panel","widgetId","activeWidgetId","choiceChanged","before","after","tabRetention","some","tab","next","createRelatedResourcePreferences","ctx","canonicalize","source","relatedRegions","Set","pendingChoices","writes","Map","value","promise","Promise","currentResource","pages","store","getState","location","pageKey","scope","scopeId","read","get","preferences","getOwnedValue","write","destination","queued","save","setOwnedValue","result","then","pending","set","finally","delete","catch","error","console","warn","removedOwner","ReturnType","layout","getWidget","contributionId","viewId","views","getView","forSource","choices","Object","fromEntries","entries","filter","has","isResourcePage","owner","resources","getKind","type","extensionId","Boolean","relatedOpenings","snapshot","key","getPersistenceScope","getLayout","previous","observing","updating","run","action","T","unsubscribe","subscribe","undefined","changedRegions","id","old","length","relatedChanges","reset","onDidResetLayout","enter","openings","defaults","map","entry","edits","keys","choice","shouldReveal","actual","values","dispose","resourceKey","WorkbenchModuleContext","WorkbenchRegion","WorkbenchRegionState","batchWorkbenchChanges","relatedResourcePageKey","survivingOrder","region","other","widgets","filter","tab","some","next","widgetId","map","createRelatedPanelLifetime","ctx","ownersByMode","Map","modeKey","JSON","stringify","pages","store","getState","projectId","modes","getActiveModeId","snapshot","layout","getLayout","scope","getPersistenceScope","mode","page","previous","updating","run","action","T","unsubscribe","subscribe","before","owners","get","keys","old","regions","added","prior","nextOrder","reordered","id","index","edited","current","find","item","tabRetention","relatedSource","resource","getWidget","contributionId","viewId","Boolean","views","getView","visible","delete","claim","sourceKey","set","leave","owner","shell","setRegionOpen","dispose","contributionRefId","PageRef","RelatedResourceOpening","resourceKey","NavigationTarget","NavigationTargetPanel","ResourceRef","WorkbenchModuleContext","WorkbenchRegion","isWorkbenchModePanelAvailable","resourceMatchesConstraint","createRelatedPanelLifetime","relatedResourcePageKey","findPage","ctx","ref","pages","listPages","find","page","id","extensionId","findOpenResource","resource","Object","values","layout","getLayout","regions","flatMap","region","widgets","map","panel","pagePreviewView","pageRef","main","kind","view","slot","slots","item","binding","empty","createResourcePreviewOpener","panels","reveal","shell","setRegionOpen","setRegionVisible","projections","Map","viewId","dispose","replacesSource","source","some","widget","tabRetention","openView","options","open","views","getView","JSON","stringify","type","shellPlacements","getPlacement","registration","registerPlacement","kinds","cardinality","set","openPlacement","placementId","title","label","activate","relatedSource","openPanel","target","placement","modePlacements","inActiveMode","modeId","modes","getActiveModeId","present","Extract","Boolean","updateVisibility","show","closed","setRegionActiveWidget","widgetId","claim","openResource","existing","getMode","undefined","getRegionState","opened","targets","run","unsubscribe","store","subscribe","projection","delete","leavePage","sourceKey","leave","ResourceRef","resourceKey","NavigationTarget","RegisteredResourceKind","WorkbenchModuleContext","relatedResourcePageKey","relatedResourceStateKey","createRelatedResourcePreferences","WorkbenchResourceLinksOptions","createResourcePreviewOpener","openRelatedResourcesPreference","targetResource","target","kind","targets","map","find","Boolean","resource","undefined","registerRelatedResourcePreviews","ctx","options","schema","preferences","registerSchema","properties","type","scope","default","opener","canonicalize","source","projectId","extensionId","pending","Map","owner","controller","AbortController","promise","Promise","abortAll","values","abort","requestKey","sourceKey","JSON","stringify","cancelOtherSelections","selectedKey","pages","store","getState","location","pageResource","key","openingPreviews","disposed","enabled","getValue","load","present","pageKey","current","signal","aborted","resources","getKind","entries","relatedOpenings","openings","filter","entry","autoOpen","length","resolved","createService","resolve","run","get","open","shouldReveal","error","console","warn","existing","enter","finally","delete","set","primary","pageLocations","onDidNavigate","then","primaryState","subscribe","state","previous","previousKey","activeModeId","modeChanged","leavePage","restoresMode","layoutActivation","navigation","onDidOpenTarget","routed","project","subscribeSelector","owners","preference","onDidChangeValue","name","selection","layout","onDidActivatePanel","panel","selectionState","getActivePanel","onWillChangePersistenceScope","dispose","Button","HStack","Input","Menu","Stack","Text","ResourceRole","resourceKey","AlertMessage","ListRow","ScrollArea","useEffect","useState","WorkbenchIcon","ResourceLinkCandidate","ResourceLinksService","ResourceLinkPickerProps","service","excludeKey","busy","onCancel","onSelect","candidate","role","Promise","ResourceLinkPicker","props","$","_c","query","setQuery","t0","Symbol","for","results","setResults","selected","setSelected","setRole","loading","setLoading","error","setError","revision","setRevision","t1","t2","subscribe","undefined","_temp","t3","cancelled","controller","AbortController","timer","setTimeout","search","signal","then","items","filter","item","resource","catch","cause","Error","message","String","finally","abort","clearTimeout","t4","t5","event","target","value","t6","t7","t8","t9","length","t10","t11","item_0","label","shorthand","id","description","icon","map","t12","t13","t14","t15","const","value_0","t16","t17","t18","t19","t20","t21","t22","_c","_temp","Button","Dialog","HStack","IconButton","Stack","Text","ResourceAnchorPage","ResourceRef","ResourceRole","resourceKey","AlertMessage","ListRow","ScrollArea","useEffect","useState","WorkbenchIcon","ResourceLinkPicker","ResourceLinkCandidate","ResourceLinksService","RelatedResourcesProps","resource","service","onClose","RelatedResourceRow","edge","candidate","incoming","RelatedResources","props","rows","setRows","cursor","setCursor","nextCursor","setNextCursor","picker","setPicker","busy","setBusy","loading","setLoading","error","setError","revision","setRevision","key","subscribe","value","cancelled","controller","AbortController","undefined","list","direction","limit","then","page","refs","items","map","source","target","resolved","resolve","signal","candidates","Map","item","index","get","catch","cause","Error","message","String","finally","abort","mutate","action","Promise","add","role","open","label","shorthand","id","length","type","extensionId","icon","event","stopPropagation","remove","_Fragment","WorkbenchModuleContext","closeResourceLinksOnProjectChange","ctx","Pick","viewId","dispose","pages","store","subscribeSelector","state","projectId","widget","layout","getLayout","regions","overlay","widgets","overlays","closeOverlay","widgetId","ResourceRef","WorkbenchModuleContribution","registerRelatedResourcePreviews","RelatedResources","closeResourceLinksOnProjectChange","ResourceLinksService","WorkbenchResourceLinksOptions","canonicalize","resource","createService","resourceLinksCommandId","viewId","createWorkbenchResourceLinksModule","options","id","activate","ctx","previews","currentResource","getActiveResource","getPrimaryResource","views","registerView","title","body","kind","render","input","instance","projectId","extensionId","type","overlays","closeOverlay","instanceId","registerOverlay","config","size","placement","scrollBehavior","commands","registerCommand","label","icon","category","isEnabled","Boolean","isVisible","execute","_args","context","current","openOverlay","useSyncExternalStore","SettingsRegistry","useSettingsRevision","settings","$","_c","t0","t1","t2","store","listener","subscribe","getState","revision","_c","Box","Flex","Spinner","Stack","Text","resourceKey","EmptyState","ScrollArea","ReactNode","useEffect","useState","CollectionSettingsPanel","getWorkbenchRenderers","PreferenceScope","SettingsRegistry","WorkbenchPanelRenderInput","WorkbenchPreferencesForm","useWorkbenchStore","useSettingsRevision","SettingsSurfacePanelProps","input","settings","resolveScopeId","scope","Centered","props","$","_c","t0","children","ScrollableSettingsContent","Symbol","for","h","minH","t1","SettingsViewContent","panelId","viewId","workbench","state","renderers","renderer","store","t2","t3","state_0","refreshKeys","t4","render","instance","t5","t6","CollectionItemView","panel","itemId","resolveCollectionItem","status","setState","id","alive","then","item","undefined","SettingsSurfacePanel","revision","resource","metadata","getPanel","kind","title","p","display","flexDirection","gap","description","save","preferences","t7","_c","Box","Flex","Text","resourceKey","ResizableSplitLayout","PreferenceScope","SettingsRegistry","WorkbenchPanelRenderInput","WorkbenchTreeView","WorkbenchIcon","SettingsSurfacePanel","useSettingsRevision","SettingsOverlayProps","input","settings","navTreeId","title","resolveScopeId","scope","SettingsOverlay","props","$","_c","resource","instance","t0","workbench","t1","t2","nav","t3","content","t4","Symbol","for","t5","t6","t7","_c","ResourceRef","SettingsScope","SETTINGS_RESOURCE_KIND","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","settingsPanelResource","panel","id","title","icon","type","label","metadata","panelId","settingsItemResource","item","itemId","isSettingsScopeVisible","scope","hasProjectScope","resourceKey","CollectionSettingsPanel","RegisteredSettingsPanel","SettingsAction","SettingsRegistry","TreeAction","TreeNode","TreeViewSection","settleReadBatch","isSettingsScopeVisible","settingsItemResource","settingsPanelResource","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","FALLBACK_SECTION_ID","toTreeActions","actions","map","action","id","label","icon","run","collectionItemNode","panel","item","itemId","itemLabel","itemIcon","resource","target","kind","commandId","args","panelId","orderGroupKeys","keys","order","indexOf","key","index","Number","POSITIVE_INFINITY","sort","left","right","collectionChildren","Promise","items","groupBy","byKey","Map","list","get","push","set","collapsible","children","panelToNode","title","BuildSettingsTreeInput","settings","hasProjectScope","matchesWhen","expression","signal","AbortSignal","onProgress","sections","buildSettingsTreeBody","input","throwIfAborted","listSections","sectionsById","section","panels","listPanels","filter","scope","when","bySection","sectionId","has","renderOrder","result","collections","sectionPanels","length","nodes","node","PreferenceScope","standardResourceIcons","WorkbenchModuleContext","WorkbenchModuleContribution","SettingsOverlay","isSettingsScopeVisible","settingsItemResource","settingsPanelResource","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","SettingsSurfacePanel","buildSettingsTreeBody","FALLBACK_SECTION_ID","WorkbenchSettingsModuleOptions","resolveScopeId","scope","title","WORKBENCH_SETTINGS_WIDGET_ID","WORKBENCH_SETTINGS_NAV_WIDGET_ID","WORKBENCH_SETTINGS_PANEL_WIDGET_ID","WIDGET_ID","openSettings","input","args","ctx","hasProjectScope","requested","undefined","panelId","itemId","requestedPanel","settings","getPanel","isVisible","entry","NonNullable","context","matches","when","panel","listPanels","find","resource","kind","id","label","overlays","openOverlay","createWorkbenchSettingsModule","options","activate","views","registerView","body","defaultExpandedSectionIds","listSections","map","section","getBody","signal","onProgress","matchesWhen","getChildren","render","registerOverlay","viewId","config","size","scrollBehavior","contentHeight","contentMaxWidth","contentWidth","closeOnInteractOutside","commands","registerCommand","category","icon","execute","refreshNavigation","getView","refreshView","unsubscribeSettings","store","subscribe","unsubscribeContext","dispose","Box","HStack","IconButton","Menu","Portal","Text","AttachedMenu","Header","PANEL_HEADER_CONTROL_SIZE","ResizableSplitLayout","Tooltip","ReactNode","useRef","WorkbenchCore","WorkbenchPanelRegion","WorkbenchRegion","WorkbenchIcon","workbenchBackgrounds","PANEL_CONTENT_MIN_SIZE_PX","PANEL_MENU_RESIZE_HANDLE_SIZE_PX","useWorkbenchPanelMenus","WorkbenchPanelMenuView","WorkbenchPanelMenu","props","$","_c","view","workbench","t0","region","split","panel","background","widget","t1","side","t2","label","t3","PanelMenuLayoutInput","content","contentMinSizePx","addPanelMenu","input","has","collapsed","collapsible","size","defaultPx","minPx","maxPx","width","layout","setRegionSize","onCollapsedChange","WorkbenchPanelMenuLayout","children","left","right","withRight","WorkbenchPanelMenuOpenerProps","canAttach","WorkbenchPanelMenuOpener","triggerRef","onOpen","undefined","t4","trigger","t5","title","t6","Symbol","for","mainAxis","t7","current","t8","placement","offset","flip","fitViewport","getAnchorElement","t9","focus","t10","t11","t12","t13","icon","t14","t15","t16","t17","t18","WorkbenchPanelMenuOpeners","filter","_temp","closedMenus","length","map","view_0","_c","_temp","useShallow","WorkbenchCore","WorkbenchRegion","useWorkbenchStore","useWorkbenchModeRegionSettings","workbench","region","$","_c","t0","layout","getRegionSettings","modes","store","_c","Box","Flex","IconButton","Text","AttachedPanel","BubbleButton","BubblePanel","Header","PANEL_HEADER_CONTROL_SIZE","Tooltip","MessageCircle","Minimize2","ReactNode","WorkbenchCore","WorkbenchFocusRegion","WorkbenchPanelMenuLayout","WorkbenchPanelMenuOpeners","useWorkbenchRegionTabsVisible","WorkbenchTabDropTarget","useWorkbenchModeRegionSettings","useWorkbenchStore","workbenchBackgrounds","WorkbenchSidePanelProps","workbench","contentSlotRef","node","HTMLDivElement","bottomOffset","header","bubbleIcon","onOpen","floatingPanelBottom","launcherBottom","WorkbenchSidePanelTitle","$","_c","t0","Symbol","for","WorkbenchSidePanelHeaderProps","WorkbenchSidePanelHeader","props","WorkbenchAttachedSidePanel","settings","sidePanel","canFloat","modes","store","t1","getMode","attached","layout","hasTabs","showHeader","Boolean","t2","setMode","undefined","t3","t4","t5","t6","widget","t7","WorkbenchFloatingSidePanelProps","available","WorkbenchFloatingSidePanel","mode","visible","bottom","bg","t8","t9","t10","t11","t12","_c","_Fragment","TagEditorValue","WorkflowStatus","toStatusEditorValue","status","id","name","label","color","icon","sortOrder","isDefault","actions","sameActions","left","right","sort","join","statusNeedsUpdate","original","draft","toWorkflowStatus","Stack","SaveTagSettingsInput","TagSettingsPanel","useEffect","useState","RegisteredWorkbenchStatusSet","WorkbenchStatusRegistry","WorkflowStatus","WorkbenchIcon","useWorkbenchStore","statusNeedsUpdate","toStatusEditorValue","toWorkflowStatus","WorkflowStatusSectionProps","statusSet","workbench","statuses","WorkflowStatusSection","props","$","_c","t0","id","cached","getStatuses","undefined","setStatuses","loadError","setLoadError","t1","current","cached_0","load","then","value","error","t2","t3","input","next","drafts","map","save","t4","t5","t6","actions","_temp","t7","title","t8","_temp2","WorkflowStatusSettingsProps","WorkflowStatusSettings","store","_temp3","T0","statusSets","listStatusSets","action","label","icon","status","name","state","_c","_temp","_temp2","_temp3","Box","Center","Text","useThemePreference","createTerminalThemeFromPreference","Terminal","TerminalBridge","useEffect","useLayoutEffect","useRef","useState","ResourceRef","WorkbenchCore","WorkbenchPanelInstance","WorkbenchTerminalController","useWorkbenchStore","ControllerTerminalBridgeOptions","getBindingId","getResource","getTitle","workspacePathFromResource","resource","workspacePath","metadata","length","undefined","withTerminalRequestDefaults","request","Parameters","cwd","createControllerTerminalBridge","terminal","options","openSession","sessionId","open","bindingId","title","id","write","data","resize","cols","rows","kill","signal","onData","handler","subscribe","onExit","onError","WorkbenchTerminalPanelProps","placement","workbench","WorkbenchTerminalPanel","props","themePreference","themePreferences","preference","find","theme","placementRef","current","bridge","instanceId","setSessionId","processTitle","store","state","sessionsById","active","layout","region","Object","values","regions","widgets","some","candidate","widgetId","activeWidgetId","updateShellPlacement","shellPlacements","updatePlacement","currentPlacement","getLayout","flatMap","identity","placementIdentity","kind","label","isAvailable","Terminal","ResourceRef","WorkbenchCoreContributionContext","WorkbenchLayout","WorkbenchModuleContribution","WorkbenchPanelRegion","workbenchPanelRegions","pageContextChanged","departingPagePreviews","toPanelInstance","WorkbenchTerminalPanel","WORKBENCH_TERMINAL_WIDGET_ID","WORKBENCH_TERMINAL_OPEN_COMMAND_ID","WORKBENCH_TERMINAL_PANEL_SIZE","defaultPx","minPx","OpenWorkbenchTerminalOptions","resource","reveal","region","TerminalResource","terminalPlacements","layout","flatMap","regions","widgets","filter","placement","viewId","terminalInstanceIds","ctx","Set","getLayout","map","widgetId","watchClosedTerminalPlacements","previousScope","getPersistenceScope","previousMode","modes","getActiveModeId","previousPage","pages","store","getState","unsubscribeLayout","subscribe","state","previousState","scope","scopeChanged","mode","modeChanged","page","closedPreviews","tab","hiddenMain","main","tabRetention","isTransitioning","currentIds","previousIds","instanceId","has","terminal","killBinding","dispose","terminalTitlePattern","nextTerminalIndexes","WeakMap","getInitialTerminalIndex","placements","titleIndexes","exec","title","index","undefined","Number","parseInt","Math","max","length","getNextTerminalTitle","nextIndex","get","set","hasWorkspacePath","metadata","workspacePath","getTerminalResource","activeResource","getActiveResource","primaryResource","getPrimaryResource","openWorkbenchTerminal","input","workspace","id","String","padStart","globalThis","crypto","randomUUID","type","extensionId","projectId","label","icon","identity","shellPlacements","openPlacement","placementId","open","kind","Error","shell","setRegionOpen","find","candidate","placementIdentity","instanceKey","createWorkbenchTerminalModule","activate","disposables","views","registerView","body","render","instance","workbench","registerPlacement","item","binding","kinds","view","cardinality","add","target","command","mountStrategy","hiddenByDefault","commands","registerCommand","category","execute","_args","context","defaultThemePreferences","WorkbenchCore","useWorkbenchStore","useWorkbenchThemePreferences","workbench","$","_c","contributed","themes","store","_temp","t0","state","_c","_temp","ChakraProvider","FileIconThemePreferenceOption","FileIconThemePreferenceProvider","psTheme","ThemePreference","ThemePreferenceOption","ThemePreferenceProvider","ThemePreferenceStorage","createContext","ReactNode","useContext","WorkbenchThemeProviderProps","children","initialThemePreference","defaultThemePreference","preferenceScope","themeStorage","themePreferences","fileIconThemePreferences","WorkbenchThemeProviderContext","WorkbenchThemeProvider","props","$","_c","hasWorkbenchThemeProvider","t0","t1","t2","_c","Box","BoxProps","ReactNode","WorkbenchThemeScopeProps","Omit","children","WorkbenchThemeScope","props","$","_c","boxProps","t0","_c","Center","CloseButton","Dialog","Portal","ReactNode","useEffect","useState","getWorkbenchRenderers","WorkbenchCore","WorkbenchWidgetPlacement","toPanelContribution","toPanelInstance","WorkbenchIcon","useWorkbenchStore","WorkbenchOverlayWidgetConfig","size","placement","scrollBehavior","closeOnEscape","closeOnInteractOutside","modal","preventScroll","trapFocus","motionPreset","role","contentHeight","contentMaxHeight","contentMinHeight","contentWidth","contentMaxWidth","isRecord","value","Record","Array","isArray","stringValue","record","key","undefined","booleanValue","resolveOverlayConfig","config","overlayConfig","resolveOverlayDialogConfig","Pick","closeable","closable","resolveActivePlacement","widgets","activeWidgetId","find","entry","widgetId","resolveOverlayDialogRenderState","activePlacement","exitingPlacement","open","WorkbenchOverlayFallback","props","$","_c","t0","Symbol","for","t1","label","WorkbenchOverlayLayerProps","workbench","WorkbenchOverlayLayer","overlayRegion","layout","store","_temp","renderers","_temp2","_temp3","setExitingPlacement","renderState","widget","getWidget","contributionId","dialogRootConfig","renderer","rendererId","canCloseOverlay","closeLabel","title","body","render","panel","instance","refresh","_temp4","t2","details","closePanel","handleOpenChange","t3","current","handleExitComplete","handleInteractOutside","_temp5","t4","t5","t6","t7","t8","t9","state","regions","overlay","state_0","state_1","refreshKeys","event","target","detail","originalEvent","Element","closest","preventDefault","_c","_temp","_temp2","_temp3","_temp4","_temp5","IconButton","ResourceActionMenu","WorkbenchCore","resolvePageBreadcrumbPlacement","resolveResourcePreview","createWorkbenchLocationActions","useWorkbenchResourceActionResolver","createWorkbenchResourceMenu","WorkbenchIcon","usePlacementTab","useWorkbenchStore","WorkbenchBreadcrumbActions","props","$","_c","workbench","items","breadcrumbs","store","_temp","changes","resources","preview","_temp2","page","pages","_temp3","routedResource","_temp4","t0","state_3","state","layout","placement","snapshot","subject","resource","at","undefined","resourceActions","actions","map","_temp5","length","resourceLabel","label","id","type","t1","Symbol","for","t2","t3","state_0","state_1","activePageId","state_2","location","action","group","_c","_temp","_temp2","_temp3","_temp4","_temp5","Box","HStack","IconButton","Header","PANEL_HEADER_CONTROL_SIZE","Tooltip","WorkbenchCore","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","WorkbenchBreadcrumbView","useModeChrome","WorkbenchRegion","WorkbenchIcon","useWorkbenchStore","workbenchBackgrounds","WorkbenchHeaderActions","WorkbenchBreadcrumbActions","WorkbenchNavRegionControl","id","label","icon","open","onToggle","WorkbenchNavChromeProps","workbench","hasNav","regionControls","WorkbenchRegionControl","props","$","_c","control","t0","t1","t2","WorkbenchNavigationControlsProps","WorkbenchNavigationControls","history","pageLocations","historyStore","_temp","map","_temp2","canGoBack","goBack","t3","Symbol","for","t4","t5","canGoForward","t6","goForward","t7","t8","t9","WorkbenchRegionControls","controls","_temp3","WorkbenchNavChrome","chrome","filter","_temp4","sidenavControls","_temp5","trailingRegionControls","undefined","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","main","state","control_0","_c","_temp","_temp2","_temp3","_temp4","_temp5","ControlValueMap","mergeControlDraft","draft","saved","changed","Record","values","id","Object","keys","createControlSaveQueue","previous","Promise","resolve","save","T","current","then","catch","undefined","Text","ControlValue","HarnessControl","HarnessControlDeclaration","CommandParamFieldRenderer","HarnessControlProps","param","value","readOnly","renderParamField","onChange","props","$","_c","t0","entry","key","id","label","name","description","type","required","JSON","stringify","disabled","Boolean","next","parse","field","t1","Symbol","for","_c","Box","Button","Flex","Stack","Text","ControlValueMap","resourceKey","ScrollArea","InputGroup","Param","ParamEditor","ParamValue","controlValueSchema","useEffect","useRef","useState","getWorkbenchRenderers","RegisteredControlsRendererContribution","rendererReadKey","WorkbenchCore","WorkbenchPanelInstance","runUserAction","CommandParamFieldRenderer","RendererReadNotice","usePageParams","useRendererRead","mergeControlDraft","createControlSaveQueue","HarnessControl","WorkbenchControlsViewProps","workbench","contribution","placement","renderParamField","ControlsViewState","params","groups","values","readOnly","loading","changed","Record","error","initialState","WorkbenchControlsView","props","$","_c","t0","id","resource","JSON","stringify","t1","WorkbenchControlsForm","pageParams","state","setState","pending","setPending","saves","changes","read","ownerKey","queryKey","load","signal","executeQuery","subscribe","refresh","subscription","events","onDidRefreshControlsRenderer","event","controlsRendererId","dispose","value","result","previous","defaultValues","Boolean","updateValue","apply","showFooter","reset","handleChange","input","parse","revision","current","controlId","retry","prev","undefined","submit","Error","message","String","ControlsContentProps","onChange","ControlsContent","param","type","name","defaultValue","hostParam","Symbol","for","length","map","t2","t3","group","emptyTitle","emptyDescription","t4","_c","createElement","getWorkbenchRenderers","WorkbenchCore","CommandParamFieldRenderer","WorkbenchControlsView","installed","WeakSet","installWorkbenchControlsRenderer","workbench","options","renderParamField","has","add","setControlsRendererImplementation","scope","instance","controlsRendererId","contribution","getControlsRenderer","placement","installed","createElement","getWorkbenchRenderers","WorkbenchCore","CommandParamFieldRenderer","WorkbenchDataTableView","installed","WeakSet","installWorkbenchDataTableRenderer","workbench","options","renderParamField","has","add","setDataTableRendererImplementation","scope","instance","dataTableRendererId","contribution","getDataTableRenderer","placement","installed","CommandExecuteResponse","storageVersions","Symbol","ObservedContent","Record","fileStorageVersions","content","attachFileStorageVersions","T","response","value","outcome","data","Array","isArray","Object","assign","copyFileStorageVersions","source","FileRendererContent","FileRendererRefreshOrigin","RegisteredFileRendererContribution","ResourceRef","copyFileStorageVersions","FileEditController","LoadedFile","editorRevision","loadKey","FILE_CONTENT_CACHE_LIMIT","fileContentCache","Map","readCachedFileContent","get","clearCachedResourceContent","resourceKey","key","keys","startsWith","JSON","stringify","delete","storeCachedFileContent","content","set","size","oldest","next","value","undefined","nextLoadedRevision","previous","shown","shownContent","dataUrl","acceptFileRendererLoad","controller","accepted","acceptLoaded","revision","saveLoadedFile","contribution","resource","origin","loaded","result","save","resourceKey","createElement","lazy","Suspense","getWorkbenchRenderers","WorkbenchCore","clearCachedResourceContent","loadWorkbenchFileRendererView","then","module","default","WorkbenchFileRendererView","installed","WeakSet","installWorkbenchFileRenderer","workbench","has","add","resources","onWillRemove","resource","setFileRendererImplementation","scope","instance","fileRendererId","contribution","getFileRenderer","fallback","placement","installed","KanbanRendererMove","KanbanRendererContribution","MoveCallbacks","Pick","prepareKanbanMove","callbacks","move","onMove","onAttributeChange","onReorder","save","supportedMove","rowId","attributes","order","undefined","attributeId","value","Object","entries","beforeRowId","ComponentType","ReactNode","AttributeDescriptor","AttributesSource","BoardColumnConfig","KanbanRendererContribution","KanbanRendererRow","RegisteredKanbanRendererContribution","ResourceContextAction","ReactColumnIcon","size","ReactAttributeDescriptor","ReactAttributesSource","ReactBoardColumnConfig","ReactResourceContextAction","ReactKanbanRendererContribution","TRow","bindReactKanbanPresentation","contribution","WorkbenchPanelInstance","resolveProjectScope","placement","storageScope","metadata","resource","projectId","favoriteScope","Array","isArray","scope","undefined","resolveKanbanRendererStorageKey","kanbanRendererId","baseKey","instanceId","projectScope","Box","Skeleton","Stack","ResourceContextAction","ScrollArea","AttributeDescriptor","AttributesSource","applyKanbanMove","isAttributesSource","KanbanRenderer","KanbanRendererRow","useKanbanRendererStore","ReactNode","useSyncExternalStore","RegisteredKanbanRendererContribution","ResourceRef","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","reportUserActionError","runUserAction","CommandParamFieldRenderer","useWorkbenchResourceActionResolver","RendererReadNotice","usePageParams","useRendererRead","ViewToolbarActions","prepareKanbanMove","bindReactKanbanPresentation","resolveKanbanRendererStorageKey","WorkbenchKanbanViewProps","workbench","renderParamField","contribution","placement","WorkbenchKanbanViewFrameProps","children","usesInternalScroll","kanbanViewScrollContentProps","display","flexDirection","minH","const","WorkbenchKanbanViewFrame","props","$","_c","t0","undefined","t1","t2","noopSubscribe","isKanbanRowResource","resource","Boolean","type","id","useResolvedContributionAttributes","attributes","source","fallback","subscribe","getSnapshot","mergeKanbanViewRowActions","resourceActions","contributionActions","resourceActionKeys","Set","map","action","key","resourceCommandIds","flatMap","commandId","filter","has","WorkbenchKanbanView","pageParams","resolveResourceActions","storageKey","storageScope","provider","viewsProvider","viewsSource","_temp","_temp2","initialState","settings","defaultSettings","defaultFilter","sorts","defaultSorts","_temp3","_temp4","_temp5","read","ownerKey","queryKey","refreshKey","JSON","stringify","load","signal","executeQuery","refresh","subscription","events","onDidRefreshKanbanRenderer","event","kanbanRendererId","dispose","value","rows","handleOpenRow","row","onRowActivate","getRowContextMenuActions","row_0","onClick","label","error","retry","contentPlaceholder","readNotice","t3","viewMode","t4","Symbol","for","t5","T0","T1","resourceKind","resources","getKind","t6","t7","action_0","t8","onMove","onAttributeChange","move","mutation","mutate","rows_0","save","t9","onReorder","rowId","beforeRowId","rows_1","order","t10","onColumnAction","t11","args","t12","toolbarActions","t13","createRow","defaultActiveViewId","defaultViews","emptyDescription","emptyTitle","getBoardColumnConfig","hideToolbar","onCreateRow","t14","state","state_0","state_1","_c","_temp","_temp2","_temp3","_temp4","_temp5","createElement","getWorkbenchRenderers","WorkbenchCore","CommandParamFieldRenderer","WorkbenchKanbanView","installed","WeakSet","installWorkbenchKanbanRenderer","workbench","options","renderParamField","has","add","setKanbanRendererImplementation","scope","instance","kanbanRendererId","contribution","getKanbanRenderer","placement","installed","ResourceContextAction","createElement","getWorkbenchRenderers","rendererReadKey","WorkbenchCore","CommandParamFieldRenderer","WorkbenchTreeView","InstallWorkbenchTreeRendererInput","renderParamField","onSidenavContextActionsChange","actions","WorkbenchTreeRendererInstallation","installed","WeakMap","isSidenavPlacement","workbench","instanceId","layout","getLayout","regions","sidenav","widgets","some","placement","widgetId","viewContextId","panelId","viewId","config","getPanel","candidate","installWorkbenchTreeRenderer","input","current","get","installation","set","setTreeRendererImplementation","scope","instance","treeId","treeViewId","readOwnerKey","resource","undefined","FileIconThemePreferenceOption","WorkbenchCore","useWorkbenchStore","useWorkbenchFileIconThemePreferences","workbench","fileIconThemes","store","_temp","state","themes","_temp","getActiveWorkbenchLocationPanel","getWorkbenchModePanelForRegion","isWorkbenchModePanelAvailable","isWorkbenchPanelPlacementVisible","matchesWorkbenchModeEligibility","WorkbenchCore","WorkbenchRegion","useModeChrome","useWorkbenchActiveModeId","useWorkbenchLocationResource","useWorkbenchStore","WorkbenchRegionContentOptions","locationScoped","useWorkbenchRegionContent","workbench","region","t0","$","_c","t1","undefined","options","chrome","resource","modeId","t2","modes","modePanel","getMode","panelAvailable","t3","state","placeholders","layout","regions","widgets","length","some","placement","widget","contributionId","location","store","_c","Box","WorkbenchCore","WorkbenchRegion","WorkbenchHeaderBorderProps","workbench","region","WorkbenchHeaderBorder","props","$","_c","layout","getRegionHeaderBorderBottom","t0","Symbol","for","_c","WorkbenchCore","useWorkbenchPanelMenusPresent","useWorkbenchPanelHeaderVisible","useWorkbenchStore","useWorkbenchRegionContent","resolvePanelCollapsible","useSecondaryPanelView","workbench","$","_c","t0","Symbol","for","locationScoped","hasContent","hasHeader","hasPanelHeader","hasMenus","t1","collapsible","layout","store","open","_temp","t2","t3","t4","shell","collapsed","setRegionOpen","t5","has","onCollapsedChange","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","state","regions","secondary","visible","_c","_temp","Box","Header","WorkbenchCore","WorkbenchFocusRegion","WorkbenchPanelMenuLayout","WorkbenchPanelMenuOpeners","WorkbenchRegion","useWorkbenchPanelHeaderVisible","useWorkbenchRegionTabsVisible","WorkbenchRegionTabs","WorkbenchTabDropTarget","useWorkbenchModeRegionSettings","workbenchBackgrounds","WorkbenchHeaderBorder","WorkbenchSecondaryPanelProps","workbench","hasSecondaryHeader","WorkbenchSecondaryPanel","props","$","_c","hasPanelHeader","settings","hasTabs","visible","showHeader","t0","t1","t2","t3","t4","t5","t6","t7","panel","t8","Symbol","for","t9","t10","t11","_c","Box","Grid","Header","PANEL_HEADER_CONTROL_SIZE","ResizableSplitLayout","headerTrailingMenuPath","WorkbenchCore","WorkbenchRegionSize","WorkbenchFocusRegion","WorkbenchHeaderActions","WorkbenchPanelMenuLayout","WorkbenchPanelMenuOpeners","WorkbenchRegion","useWorkbenchPanelHeaderVisible","useWorkbenchRegionTabsVisible","WorkbenchRegionTabs","WorkbenchTabDropTarget","useWorkbenchModeRegionSettings","useWorkbenchStore","workbenchBackgrounds","WorkbenchHeaderBorder","useWorkbenchMainPanels","WorkbenchSecondaryPanel","WorkbenchBodyProps","workbench","SECONDARY_PANEL_SIZE","defaultPx","minPx","maxPx","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","mainHeaderTrailingMenuPath","resolveRegionSize","regionSize","persistedSize","fallback","Required","MainHeaderBarProps","hasMainHeader","MainHeaderBar","props","$","_c","hasMainContentTabs","hasPanelHeader","settings","visible","showHeader","t0","t1","t2","t3","t4","t5","t6","t7","t8","main","WorkbenchBody","pageId","pages","store","_temp","modeSettings","panels","secondaryPanel","persistedSecondarySize","layout","_temp2","size","getRegionSize","secondaryPanelSize","mainRegion","mainPanelWithMenus","Symbol","for","mainContent","t9","hasHeader","t10","has","collapsed","t11","height","setRegionSize","t12","collapsible","onCollapsedChange","state","activePageId","state_0","regions","secondary","_c","_temp","_temp2","Box","DndContext","DragOverEvent","DragOverlay","MouseSensor","pointerWithin","TouchSensor","useDraggable","useDroppable","useSensor","useSensors","DropIndicator","useState","WorkbenchCore","WorkbenchStatusBarSlot","WorkbenchWidgetPlacement","useRetainedViewPlacements","WorkbenchWidgetHost","useWorkbenchActiveModeId","useWorkbenchStore","StatusDrop","id","edge","reorderInstructions","resolveDrop","event","over","active","undefined","rect","current","translated","String","left","width","WorkbenchStatusBarItemProps","workbench","placement","ids","activeId","drop","WorkbenchStatusBarItem","props","$","_c","widgetId","order","indexOf","sortable","length","t0","t1","disabled","drag","t2","t3","target","title","t4","node","setNodeRef","t5","t6","attributes","t7","t8","t9","t10","t11","t12","t13","altKey","includes","key","preventDefault","stopPropagation","neighbor","statusBar","reorderItem","beforeItemId","afterItemId","t14","t15","t16","right","t17","listeners","WorkbenchStatusBarItems","slot","store","_temp","activeModeId","items","modes","getActiveModeId","listVisibleItems","map","_temp2","views","item_0","item","contributionId","viewId","getView","closable","placements","setActiveId","setDrop","Symbol","for","activationConstraint","distance","sensors","finish","T0","screenReaderInstructions","draggable","event_0","event_1","event_2","find","placement_0","state","_c","_temp","_temp2","Box","ResourceContextAction","ResourceContextMenu","WorkbenchCore","WorkbenchFocusRegion","ModeChromeView","useModeChrome","WorkbenchRegion","workbenchBackgrounds","WorkbenchStatusBarItems","WorkbenchSidenavProps","workbench","contextActions","WorkbenchSidenav","props","$","_c","t0","t1","sidenav","t2","WorkbenchRegionPanelProps","visible","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchActivityBar","WorkbenchStatusBar","chrome","undefined","t3","t4","t5","t6","t7","_c","Box","ResizableSplitLayout","ReactNode","createPortal","WorkbenchCore","WorkbenchRegion","WorkbenchRegionTabs","useWorkbenchModeRegionSettings","useWorkbenchStore","WorkbenchAttachedSidePanel","ATTACHED_PANEL_DEFAULT_SIZE_PX","ATTACHED_PANEL_MIN_SIZE_PX","WorkbenchSidePanelRegionPortalProps","workbench","sidePanelHost","HTMLDivElement","WorkbenchSidePanelRegionPortal","props","$","_c","t0","t1","WorkbenchSidePanelRegionHeaderProps","hasSideHeader","WorkbenchSidePanelRegionHeader","t2","WorkbenchAttachedSidePanelLayoutProps","attached","contentPanel","contentMinSizePx","header","onAttachedSlotChange","slot","onCollapse","WorkbenchAttachedSidePanelLayout","persistedSize","layout","store","_temp","modeSettings","size","getRegionSize","collapsible","getRegionCollapsible","t3","t4","defaultPx","t5","minPx","t6","maxPx","t7","width","setRegionSize","t8","collapsed","t9","state","regions","side","_c","_temp","Flex","ReactNode","useLayoutEffect","useRef","WorkbenchCore","WorkbenchAttachedSidePanelLayout","WorkbenchSidePanelBoundaryProps","workbench","showAttachedSidePanel","contentFrame","sideHeader","contentMinSizePx","onAttachedSlotChange","slot","HTMLDivElement","WorkbenchKeyboardFrameProps","children","interactivePointerTargetSelector","join","hasClosest","target","EventTarget","closest","selector","shouldFocusWorkbenchKeyboardFrame","currentTarget","focusWorkbenchKeyboardFrame","element","focus","preventScroll","WorkbenchKeyboardFrame","props","$","_c","ref","t0","t1","Symbol","for","current","t2","_temp","WorkbenchSidePanelBoundary","sidePanel","setMode","event","_c","_temp","Flex","ResizableSplitLayout","ResourceContextAction","ThemePreferenceStorage","Toaster","ReactNode","useLayoutEffect","useRef","useState","WorkbenchCore","WorkbenchShellOpenRegion","WorkbenchCommandPalette","CommandParamFieldRenderer","WorkbenchNavChrome","WorkbenchNavRegionControl","WorkbenchKeybindingDispatcher","WorkbenchNotificationHost","useWorkbenchPanelMenusPresent","useModeChrome","movePanelHost","WorkbenchPanelViewHosts","useWorkbenchPanelHeaderVisible","WorkbenchTabDragProvider","installWorkbenchControlsRenderer","installWorkbenchDataTableRenderer","installWorkbenchFileRenderer","installWorkbenchKanbanRenderer","installWorkbenchTreeRenderer","useWorkbenchStore","WorkbenchFloatingSidePanel","useWorkbenchFileIconThemePreferences","useWorkbenchThemePreferences","workbenchBackgrounds","WorkbenchThemeProvider","WorkbenchThemeScope","WorkbenchOverlayLayer","useWorkbenchRegionContent","WorkbenchBody","resolvePanelCollapsible","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchActivityBar","WorkbenchSidenav","WorkbenchStatusBar","WorkbenchSidePanelBoundary","WorkbenchSidePanelRegionHeader","WorkbenchSidePanelRegionPortal","WorkbenchProps","workbench","titleBar","renderParamField","sidePanelBubbleIcon","onOpenSidePanel","themeStorage","SIDENAV_DEFAULT_SIZE_PX","SIDENAV_MIN_SIZE_PX","CONTENT_MIN_SIZE_PX","resolveSidenavSize","persistedSize","regionSize","layout","getRegionSize","defaultPx","minPx","maxPx","createSidePanelHost","document","host","createElement","style","display","dataset","workbenchSidePanelHost","useWorkbenchLayoutFlags","$","_c","statusChrome","statusBarItems","statusBar","store","_temp","context","_temp2","activeModeId","modes","_temp3","t0","t1","t2","t3","t4","Symbol","for","locationScoped","t5","t6","t7","t8","t9","t10","t11","undefined","getActiveModeId","Object","keys","length","listVisibleItems","t12","hasNavWidgets","hasActivityBarWidgets","hasSidenavWidgets","hasSecondaryHeaderWidgets","hasSecondaryWidgets","hasSecondaryMenus","hasSideHeaderWidgets","hasSideWidgets","hasSideMenus","hasStatusWidgets","WorkbenchRegionControlsInput","showSidenav","sidenavOpen","showSecondaryPanel","secondaryPanelOpen","hasSidePanel","sidePanelMode","setPanelOpen","region","open","createWorkbenchRegionControls","input","controls","push","id","label","icon","onToggle","WorkbenchContent","props","sidenavContextActions","setSidenavContextActions","onSidenavContextActionsChange","attachedSidePanelSlot","setAttachedSidePanelSlot","HTMLDivElement","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","current","paletteOpen","commandPalette","state","paletteInitialQuery","initialQuery","regions","sidenav","visible","secondary","hasSecondaryPanelHeader","hasSidePanelHeader","sidePanel","getMode","sidenavCollapsible","persistedSidenavSize","size","sidenavSize","showAttachedSidePanel","shell","setRegionOpen","regionControls","sideHeader","activeSidePanelSlot","HTMLElement","parentElement","contentWithHeader","contentWithSidenav","width","setRegionSize","collapsed","contentFrame","main","close","Workbench","projectId","pages","_temp4","themePreferences","mode","_temp5","fileIconThemePreferences","defaultTheme","items","state_0","values","state_1","_c","_jsxs","useEffect","useRef","Disposable","WorkbenchCore","WorkbenchModuleContribution","WorkbenchModuleHostRegistration","disposable","WorkbenchModuleHostProps","workbench","modules","disposeWorkbenchModuleHostRegistrations","registrations","Map","registration","values","dispose","clear","syncWorkbenchModuleHostRegistrations","moduleIds","Set","map","module","id","has","delete","set","registerModule","WorkbenchModuleHost","props","$","_c","registeredWorkbench","t0","Symbol","for","t1","t2","current","t3","t4","_c","workbenchRegionTabLeadingMenuPath","isWorkbenchPanelPlacementVisible","resourceMatchesConstraint","workbenchBreadcrumbLocationMenuPath","resourceContextMenuPath","byContributionPriority","scopeWorkbenchResourceContextValues","getKeybindingSteps","findPlacementByWidgetId","workbenchTopHeaderTrailingMenuPath","matchesWorkbenchPanelMenuOwner","getAnchorResource","workbenchCommandPaletteMenuPath","getActiveWorkbenchLocationPanel","matchesContextExpression","workbenchPanelRegions","getNavigationTargetKey","headerTrailingMenuPath","toPanelInstance","getWorkbenchSelectionResourceKeys","resolveResourcePreview","getWorkbenchPanelForMenuRegion","workbenchPanelMenuRegions","standardResourceIcons","getNavigationTreeNodeSource","rendererReadKey","settleReadBatch","departingPagePreviews","workbenchTopHeaderLeadingMenuPath","matchesWorkbenchModeEligibility","getActiveWorkbenchSubPanel","runUserAction","controlValueSchema","reportUserActionError","planTrayDrop","pageContextChanged","getWorkbenchRenderers","batchWorkbenchChanges","pageResourceContextKey","getWorkbenchModePanelForRegion","toPanelContribution","resolvePageParams","isWorkbenchModePanelAvailable","Fragment$1","Terminal$1","resolvePageActivePlacement","page","main","layout","selected","entry","resolvePageBreadcrumbPlacement","placement","resource","useWorkbenchStore","useStore","store","selector","humanize$1","spaced","value","isRecord$1","isFileUploadValue","isCommandFilesParamValue","ref","createCommandFilesParamValue","input","commandFilesParamValue","raw","item","multiple","stringifyEditableValue","toIdentifierPrefix","char","metadataString","metadata","key","resourceContextValue","context","metadataValue","resourceKey","dedupeOptions","options","seen","option","hasCommandParameters","listCommandParamEntries","params","commandParamEntries","param","resolveCommandResourceParams","base","baseArgs","renameLabelDefault","mutation","id","buildCommandParamInitialValues","values","isEmptyValue","parseJsonValue","normalizeValue","numberValue","normalizeCommandParamValues","normalized","mergeCommandParamArgs","schema","WorkbenchIcon","$","c","name","rest","t0","props","size","t1","resolveIconComponent","IconComponent","t2","t3","Icon","resolveMenuItemState","action","record","readOnly","description","commandContextValues$1","workbench","createMenuIcon","iconSrc","Box","Image","icon","createMenuEndContent","disabledReason","Tooltip","external","binding","PaletteShortcut","withLeadingSeparator$1","enabled","items","first","isKernelMenuAction","group","createMenuItemGroups","contextValues","shortcuts","k","regularItems","kernelItems","menuPath","args","state","label","requestParams","onRequestParams","nextArgs","onCommandError","error","createMenuItems","toResourceContextAction","createWorkbenchResourceActions","kind","subject","current","request","createWorkbenchLocationActions","useWorkbenchResourceActionResolver","_temp$40","kinds","_temp2$24","refresh","useState","subscriptions","_temp3$18","subscription","useEffect","_temp4$13","_temp5$11","_temp6$3","state_0","revision","state_1","state_2","state_3","runPlacementAction","target","command","placementRowAction","row","placementMenuActions","snapshot","section","createWorkbenchResourceMenu","readPlacementTab","usePlacementTab","changes","_temp$39","setState","t4","projected","changed","t5","breadcrumbSnapshot","referenceKey","getSessionStatus","WorkbenchBreadcrumbIcon","status","SessionIndicator","Text","WorkbenchBreadcrumbTitle","title","HStack","buildWorkbenchBreadcrumbItems","actions","actionsForResource","WorkbenchBreadcrumbView","_temp$38","_temp2$23","_temp3$17","routedResource","_temp4$12","crumbs","item_0","T0","Breadcrumb","item_1","CommandOptionStatus","onRetry","Button","useWorkbenchCompositionPanels","SEARCH_MODE_ID","COMMAND_MODE_ID","THEME_MODE_ID$1","workbenchPaletteModes","isThemePaletteView","view","getPaletteViewMode","getPaletteViewModes","getPaletteInitialActiveIndex","getPaletteInputIcon","Terminal","Search","getPalettePlaceholder","RESOURCE_QUERY_LIMIT","RESOURCE_QUERY_DEBOUNCE_MS","useWorkbenchCommandPaletteResourceEntries","refreshToken","_temp$37","entries","setEntries","onClose","open","query","cancelled","handle","groups","result","asText","asList","commandParamName","commandParamOptions","JSON_PARAM_TYPES","buildCommandParam","readCommandParamValue","CommandParamField","onChange","nextValue","next","refs","change","next_0","disabled","ParamEditorRow","valueRef","argumentsFor","source","descriptor","resolved","readOptions","createCommandOptionResolver","referencedValue","queryKey","disposed","controllers","listeners","requests","sources","publish","listener","clearInvalidSelection","offered","load","field","controller","version","requestKey","execute","errors","useCommandOptions","callbacks","useRef","resolver","signal","states","useSyncExternalStore","isFilled","CommandParamsDialog","setCurrent","CommandParamsForm","setValues","setError","submitting","setSubmitting","customFieldErrors","setCustomFieldErrors","close","setValue","executeOptionCommand","fieldErrors","setFieldErrors","run","invalid","key_0","error_0","preparedArgs","prepareArgs","submission","onRun","onRunError","caught_0","caught","isValid","Dialog","details","handleDialogAcceptShortcut","event","Stack","CloseButton","ScrollArea","entry_0","dynamic","fieldProps","value_0","current_0","update","current_1","error_1","custom","renderParamField","Fragment","AlertMessage","PaletteParamsDialog","_temp$36","confirmation","_temp2$22","CommandConfirmationDialog","args_0","t6","commandId","t7","DeleteConfirmationModal","chakraBackgrounds","vscodeColor","token","fallback","workbenchBackgrounds","workbenchRegionBackgrounds","workbenchCommandPaletteBackground","getWorkbenchRegionBackground","region","WorkbenchPaletteSurface","children","getPanelLabel","openPanelWidget","widget","widgetResource","createWorkbenchPanelWidgetPaletteEntries","panelsByRegion","panel","panelLabel","createResourceEntry","indicator","activate","createWorkbenchResourcePaletteEntries","WorkbenchResourceSearch","search","setSearch","unsubscribe","query_0","Palette","THEME_MODE_ID","getThemeIconName","preference","getThemePreferenceLabel","themePreference","getThemePaletteEntryIndex","THEME_GROUP_LABELS","byModeThenLabel","a","b","createWorkbenchThemePreferencePaletteEntries","themePreferences","chosenThemePreference","setThemePreference","getCommandSearchText","createShortcutByAction","getShortcut","commandExecutionContext$1","executePaletteCommand","createEntry","shortcutByAction","getRecordGroup","getRecordOrder","byCommandPaletteGroup","groupComparison","left","right","listCommandRecords","createWorkbenchCommandPaletteEntries","WorkbenchCommandPalette","_temp$35","WorkbenchMainCommandPalette","initialQuery","useThemePreference","_temp2$21","_temp3$16","_temp4$11","_temp5$10","liveQuery","setLiveQuery","commandPaletteResourceEntries","compositionPanels","previewThemePreference","closePalette","exitPickerView","isThemeView","commandEntries","resourceEntries","themeEntries","panelWidgetEntries","themeInitialActiveIndex","initialActiveIndex","activeViewMode","activeViewModes","t8","t9","t10","t11","t12","t13","t14","t15","mode_0","t16","themeEntry","ctx","t17","t18","t19","WorkbenchFocusRegion","boxProps","activeRegion","_temp$34","element","menuPathKey","path","resolveContextValues","listWorkbenchMenuItemsFromState","availability","listWorkbenchMenuItems","isKernelAction","isOverflowAction","withLeadingSeparator","resolveOverflowItems","resolveWorkbenchHeaderActionGroups","resolveWorkbenchHeaderOverflowLabel","commandExecutionContext","WorkbenchInlineHeaderAction","onSelect","onClick","controlSize","IconButton","WorkbenchHeaderActions","commands","_temp$33","_temp2$20","itemsByPath","_temp3$15","_temp4$10","inlineItems","overflowItems","Menu","Portal","ListRow","useTanStackWorkbenchHotkeys","registrations","_temp$32","hotkeys","useHotkeys","registration","keyAliases","normalizeWorkbenchKeybindingStep","keybinding","trimmed","part","normalizeWorkbenchKeybinding","steps","createWorkbenchHotkeyRegistrations","allowedCommandIds","commandIds","index","WorkbenchKeybindingDispatcher","setRegistrations","executeNotificationAction","WorkbenchNotificationHost","shownNotificationIds","showNotification","notification","toastAction","toastOptions","toaster","notification_0","useWorkbenchLocationResource","_temp$31","useWorkbenchActiveModeId","_temp2$19","retainViewPlacements","retained","previous","registeredViews","existing","unchanged","useRetainedViewPlacements","views","_temp$30","setPrevious","placements","WorkbenchWidgetFallback","Center","WorkbenchRenderedWidgetFrame","noopRefresh","toHostedPanel","WorkbenchWidgetHost","rendererId","renderer","instance","useModeChrome","mode","ModeChromeView","viewId","movePanelHost","slot","host","resolvePanelCollapsible","regions","getWorkbenchPanelMenuAttachment","panelWidth","menus","menu","attached","narrow","fits","sizes","total","candidate","PANEL_MENU_SIZE","panelLabels","resolveRegionSize$1","regionSize","getWorkbenchPanelMenuLabel","side","useWorkbenchPanelMenu","locationResource","modeId","panelAvailable","_temp$29","registeredWidgets","_temp2$18","currentRegionState","regionState","activeSubPanel","activeLocationPanel","contribution","placement_0","activePlacement","collapsible","panelStateKey","collapsed","useWorkbenchPanelMenus","width","useWorkbenchPanelWidth","attachment","_temp3$14","view_0","useWorkbenchPanelMenusPresent","setWidth","measure","observer","toTabKey","regionId","suppressesSidenavTabStrip","resolveTabIconName","resourceIcon","resourceKindIcon","resolveDisplayedActiveWidgetId","activeWidgetId","visiblePlacements","isWorkbenchPanelRegion","panelRegion","shouldShowRegionTabs","shouldShowPanelHeader","isPlacementEligibleForRegion","useWorkbenchRegionTabsState","hasPanelMenuOpeners","_temp$28","_temp2$17","_temp3$13","_temp4$9","layoutState","_temp5$9","visibilityStorageKey","storageKey","tabStore","useTabVisibilityStore","_temp6$2","getTabVisibilityStore","subPanelPlacements","visibleSubPanels","filterVisibleTabs","_temp7$2","visibleSubPanelIds","eligibleSubPanels","leadingItems","placement_2","placement_3","hasMovedPlacement","showTabs","hasActions","hasTrailingActions","useWorkbenchPanelRegionTabsState","hasPanelMenus","_temp8$2","tabs","useWorkbenchPanelHeaderVisible","useWorkbenchRegionTabsVisible","state_4","placement_1","PanelViewContext","createContext","usePanelViewSlot","registry","useContext","node","setNode","useLayoutEffect","PanelViewPortal","_temp$27","active","createPortal","WorkbenchPanelViewHosts","_temp2$16","_temp3$12","_temp4$8","_temp5$8","slots","setSlots","region_0","eligible","p","p_0","p_1","region_1","p_2","peers","p_3","selected_0","p_4","horizontalScrollRegions","panelMenuRegionIds","sidePanelRegionIds","verticalContentProps","horizontalContentProps","getActivePlacement","widgets","resolveRenderedRegionPlacements","resolveRegionPlacementRenderState","additive","createPlaceholderPlacement","placeholder","WorkbenchRegionPlacement","renderState","overlaysActivePlacement","flex","globalActiveWidgetId","activatePlacement","visible","order","WorkbenchRegion","panelSlot","sharedViews","chrome","renderedPlacements","retainedPlacements","visibleIds","scrollsHorizontally","Flex","transparent","renderedPlacement","WorkbenchPanelAddMenu","triggerRef","panels","openPanel","PANEL_HEADER_CONTROL_SIZE","trigger","panel_0","RegionTabMenu","labelId","useId","pending","currentRegion","destinations","pinned","pin","tabAction","_temp$26","anchor","setOpen","VisuallyHidden","ResourceMenuItems","action_0","TabDragContext","useTabDrag","WorkbenchTabDragProvider","activeId","setActiveId","drop","setDrop","sensors","useSensors","useSensor","MouseSensor","TouchSensor","finish","data","widgetId","rect","before","position","plan","resolveDrop","event_0","event_1","event_2","event_3","DragOverlay","DndContext","_temp$25","WorkbenchTabDropTarget","allowed","useDroppable","highlighted","setNodeRef","pointer","pointerWithin","collision","area","rect_0","useRegionTab","sortable","setAnchor","hold","start","suppressClick","drag","useDraggable","clearHold","show","onContextMenu","nextWidgetId","previousWidgetId","onKeyDown","element_0","onPointerDown","onPointerMove","TabIcon","WorkbenchRegionTab","useTabsContext","behavior","_temp$24","_temp2$15","_temp3$11","Tabs","TabDropIndicator","t20","t21","DropIndicator","RegionTabList","resolvePlacementIcon","iconName","WorkbenchRegionTabsContent","tabOverrides","getKey","viewport","setViewport","menuOpen","setMenuOpen","hiddenByDefault","menuActions","buildTabVisibilityMenuActions","hasVisibilityMenu","openVisibilityMenu","onWheel","onSelectLeadingItem","_temp$23","leadingActions","t25","PANEL_HEADER_TAB_SIZE","t33","t34","t35","t36","details_0","_temp2$14","t37","t38","t39","WorkbenchPanelRegionTabs","WorkbenchOtherRegionTabs","WorkbenchRegionTabs","RendererReadNotice","retry","usePageParams","_temp$22","owner","createRendererMutations","baseline","journal","operation","readRevision","success","createRendererMutationBinding","ownerKey","WorkbenchConnectionContext","WorkbenchConnectionProvider","connected","useWorkbenchConnection","useRendererRead","retryRef","refreshRef","lastRefreshKey","refreshKey","mutationBinding","mutations","saveQueue","handlers","connectionLost","PstdioConnectionError","readError","previous_0","value_1","reason","previous_1","connectionLost_0","owner_0","previous_2","save","commandContextValues","isRegisteredCommandVisible","executeTreeAction","resolvedArgs","runTreeAction","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","createTreeActionMenuItems","createTreeContextMenuItems","actionItems","visibleRegularItems","createTreeActionItems","TreeParamsDialog","ViewToolbarActions","setRequest","_temp$21","_temp2$13","resolveDataTableRendererQueryKey","resolveDataTableRendererColumns","contributionColumns","firstRow","buildDataTableRendererData","rowByData","rows","columns","column","resolveDataTableRendererSelectionActions","rendererRow","resolveDataTableRendererResourceActions","resolveResourceActions","resolveDataTableRendererStorageKey","identity","scope","initialResult","noopSubscribe$1","DataTableViewFrame","WorkbenchDataTableView","pageParams","_temp$20","provider","viewsSource","_temp2$12","_temp3$10","filter","useDataTableViewStore","_temp4$7","sorts","_temp5$7","settings","_temp6$1","events","read","loading","T1","model","openRow","renderers","rowActions","selectionActions","stats","t22","t23","t24","t26","t27","labels","_temp7$1","_temp8$1","descriptions","_temp9$1","_temp0$1","icons","_temp1$1","_temp10$1","_temp11$1","_temp12$1","_temp13$1","_temp14$1","t28","row_0","data_0","t29","t30","column_9","_temp15$1","skeletonColumns","t31","DataTableSkeleton","DataTable","EmptyState","data_1","_temp16$1","_temp17$1","_temp18$1","_temp19$1","_temp20$1","_temp21$1","_temp22$1","data_2","data_3","t32","column_0","column_1","column_2","column_3","column_4","column_5","column_6","column_7","column_8","column_10","column_11","column_12","column_13","column_14","column_15","column_16","column_17","BOOLEAN_OPTIONS","humanize","toOptions","toParam","defaultValue","preferenceSchemaToParams","paramValueToPreference","toName","WorkbenchPreferencesForm","staged","setStaged","formKey","setFormKey","resolveScopeId","scopeRef","names","preferences","_temp$19","schemaByName","schema_0","name_0","persist","handleChange","name_1","_temp2$11","_temp3$9","discard","hasStaged","ParamEditor","activeNodeIds","uniqueIds","ids","targetPanelResource","resolveTreeNodeResourceKey","listTreeNodes$1","nodes","childrenByNodeId","listSectionNodes","sections","resolveActiveResourceNodeIds","resourceKeys","matches","findSectionNode","nodeId","pageRefsEqual","targetMatchesPage","activePage","activeResource","resolveActivePageNodeIds","resolveTreeListSelection","activeNodeId","activeResourceKeys","declaredSelection","nodeResourceKey","activeLocation","selectedNode","selectedNodeId","selectedResourceKey","activeResourceNodeId","activePageNodeId","canVirtualizeTreeNode","canVirtualizeTreeSections","findNode","child","findNodeInSections","wrapTreeNodeIcon","iconTooltip","resolveTreeNodeIcon","resolveTreeNodeNavigationIntent","resolveTreeNodeResource","resolveTreeNodeEndContent","Badge","additions","deletions","DiffBubble","toTreeListSectionEmptyNode","toTreeListNode","navigationIntent","commandContext","customPath","resourcePath","contextMenuItems","menuItems","toTreeListSection","emptyNode","pinnedOnlyNodeIds","withoutPinnedOnlyRows","TREE_SKELETON_WIDTHS","TreeViewSkeleton","_temp$18","TreeViewBody","moduleLoading","backgroundContextActions","customizationAvailable","canMove","draggable","expandedNodeIds","expandedSectionIds","onMoveNode","onNavigate","onReorderNodes","onReorderSections","onToggleNode","onToggleSection","scrollRef","TreeList","Skeleton","shouldSelectTreeNodeForNavigationTarget","createToggleTreeSection","treeViewId","sectionId","expandedIds","TreeViewSearch","Header","InputGroup","Input","previewTreeResources","previewNodes","isUnregisteredTreeError","treeId","trees","listTreeNodes","loadExpandedTreeChildren","expanded","visited","queue","batch","expandDefaultTreeSections","tree","loadTreeData","available","loadSlot","onProgress","header","body","footer","canMoveTreeNode","sourceId","targetId","sourceOwner","targetOwner","createMoveTreeNode","sourceNodeId","targetNodeId","previewTreeMove","childrenOf","find","roots","move","materialize","descendants","moving","useTreeMovement","setPending","latestBody","moves","moves_0","preview","move_0","intent","saved","move_1","move_2","useTreeData","_temp$17","_temp2$10","location","_temp3$8","project","_temp4$6","_temp5$6","getPageOwner","pageOwner","childrenKey","expandedChildren","setExpandedChildren","loadChildren","children_0","subscription_0","contains","node_0","resource_0","savedBody","savedChildren","movement","onMoveError","resolveTreeActiveResource","overlay","overlayResource","primary","useTreeNavigationState","projectId","_temp$16","_temp2$9","_temp3$7","treeSelectionAncestors","selectedIds","parents","expandedSections","visit","useTreeSelection","selectedNodeIds","revealed","ancestors","id_0","keepSectionsEmptiedByMoves","visibleById","hadRows","ordered","shown","resolveVisibility","sectionOverrides","activeTreeGroupLayout","scopes","activeGroups","inactiveGroupIds","nodeOrderBySection","useTreeViewGroups","savedGroups","useTreeListOrderStore","addGroup","renameGroup","removeGroup","draft","setDraft","currentDraft","activeNodeOrder","startGroup","orderedSections","group_0","editing","section_0","toStringLabel","isCustomizableNode","visibilityContextIcon","effective","buildNodeVisibilityContextMenuItem","nodeOverrides","existingItems","addRegionNodeVisibilityContextMenuItems","addSectionNodeVisibilityContextMenuItems","useTreeViewCustomization","useTreeListVisibilityStore","_temp$15","_temp2$8","toggleSection","_temp3$6","toggleNode","_temp4$5","resetVisibility","_temp5$5","sectionOrder","_temp6","_temp7","sectionSlotById","_temp8","setSectionOrder","_temp9","setNodeOrder","_temp0","setSectionSlot","_temp1","resetOrder","_temp10","sourceSections","visibilityActions","_temp11","_temp12","_temp13","defaultSlotBySectionId","orderedSectionsBySlot","orderedAllSections","withGroupControls","applyTreeListOrder","section_2","orderedHeaderSections","orderedFooterSections","includeNodeContextMenus","headerSections","contentSections","footerSections","visibleIn","filterVisibleSections","visibleHeaderSections","visibleSections","visibleFooterSections","visibilityMenuItems","buildTreeVisibilityMenuActions","newGroupAction","_temp14","customizationRevision","_temp16","_temp18","_temp20","idsBySlot","_temp21","_temp22","_temp23","slot_0","nextSectionIds","destinationSlot","destinationSectionId","sourceSectionId","nextSectionIds_0","state_5","state_6","state_7","state_8","state_9","state_10","section_1","_temp15","section_3","_temp17","section_4","_temp19","node_1","section_5","section_6","section_7","section_8","EMPTY_TREE_STATE","treeCustomizationOptions","isSidenav","useSidenavContextActions","actionsRef","navigateTreeNode","createToggleTreeNode","WorkbenchTreeView","onSidenavContextActionsChange","treeRenderer","setFilter","treeState","onOpenResourceError","paramsRequest","setParamsRequest","rawHeaderSections","rawSections","adapterContext","rawFooterSections","activeNodeSelection","navigationContext","moveNode","nextSectionIds_1","onMoveSection","TreeListDragProvider","relatedResourceStateKey","relatedResourcePageKey","choiceChanged","after","tab","createRelatedResourcePreferences","relatedRegions","pendingChoices","writes","currentResource","canonicalize","pageKey","write","destination","queued","removedOwner","forSource","isResourcePage","observing","updating","changedRegions","old","choices","relatedChanges","reset","defaults","edits","choice","survivingOrder","other","createRelatedPanelLifetime","ownersByMode","modeKey","owners","sourceKey","added","prior","nextOrder","reordered","edited","findPage","findOpenResource","pagePreviewView","pageRef","contributionRefId","createResourcePreviewOpener","reveal","projections","replacesSource","openView","inActiveMode","present","updateVisibility","closed","openResource","opened","projection","openRelatedResourcesPreference","targetResource","registerRelatedResourcePreviews","opener","abortAll","cancelOtherSelections","pageResource","selectedKey","openingPreviews","openings","targets","promise","primaryState","previousKey","restoresMode","navigation","routed","selection","selectionState","ResourceLinkPicker","setQuery","results","setResults","setSelected","role","setRole","setLoading","setRevision","service","_temp$14","excludeKey","timer","cause","busy","onCancel","RelatedResources","setRows","cursor","setCursor","nextCursor","setNextCursor","picker","setPicker","setBusy","edge","candidates","edge_0","mutate","cause_0","add","candidate_0","cause_1","edge_1","candidate_1","incoming","closeResourceLinksOnProjectChange","resourceLinksCommandId","createWorkbenchResourceLinksModule","previews","useSettingsRevision","Centered","ScrollableSettingsContent","SettingsViewContent","panelId","CollectionItemView","resolveCollectionItem","itemId","alive","Spinner","SettingsSurfacePanel","SettingsOverlay","navTreeId","nav","content","ResizableSplitLayout","SETTINGS_RESOURCE_KIND","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","settingsPanelResource","settingsItemResource","isSettingsScopeVisible","hasProjectScope","FALLBACK_SECTION_ID","toTreeActions","collectionItemNode","orderGroupKeys","indexOf","keys","collectionChildren","groupBy","byKey","list","panelToNode","buildSettingsTreeBody","sectionsById","matchesWhen","bySection","renderOrder","collections","sectionPanels","WORKBENCH_SETTINGS_WIDGET_ID","WORKBENCH_SETTINGS_NAV_WIDGET_ID","WORKBENCH_SETTINGS_PANEL_WIDGET_ID","WIDGET_ID","openSettings","requested","requestedPanel","isVisible","createWorkbenchSettingsModule","when","refreshNavigation","unsubscribeSettings","unsubscribeContext","WorkbenchPanelMenu","background","AttachedMenu","addPanelMenu","WorkbenchPanelMenuLayout","WorkbenchPanelMenuOpener","canAttach","WorkbenchPanelMenuOpeners","_temp$13","closedMenus","useWorkbenchModeRegionSettings","useShallow","floatingPanelBottom","bottomOffset","launcherBottom","WorkbenchSidePanelTitle","WorkbenchSidePanelHeader","WorkbenchAttachedSidePanel","canFloat","hasTabs","showHeader","Minimize2","contentSlotRef","AttachedPanel","WorkbenchFloatingSidePanel","bubbleIcon","onOpen","BubbleButton","MessageCircle","BubblePanel","toStatusEditorValue","sameActions","statusNeedsUpdate","original","toWorkflowStatus","WorkflowStatusSection","statusSet","cached","statuses","setStatuses","loadError","setLoadError","cached_0","_temp$12","TagSettingsPanel","_temp2$7","WorkflowStatusSettings","_temp3$5","statusSets","workspacePathFromResource","workspacePath","withTerminalRequestDefaults","cwd","createControllerTerminalBridge","terminal","sessionId","handler","WorkbenchTerminalPanel","theme","placementRef","bridge","setSessionId","processTitle","updateShellPlacement","currentPlacement","createTerminalThemeFromPreference","WORKBENCH_TERMINAL_WIDGET_ID","WORKBENCH_TERMINAL_OPEN_COMMAND_ID","WORKBENCH_TERMINAL_PANEL_SIZE","terminalPlacements","terminalInstanceIds","watchClosedTerminalPlacements","previousScope","previousMode","previousPage","unsubscribeLayout","scopeChanged","modeChanged","closedPreviews","previousState","hiddenMain","currentIds","previousIds","instanceId","terminalTitlePattern","nextTerminalIndexes","getInitialTerminalIndex","titleIndexes","getNextTerminalTitle","nextIndex","hasWorkspacePath","getTerminalResource","primaryResource","openWorkbenchTerminal","workspace","createWorkbenchTerminalModule","useWorkbenchThemePreferences","contributed","_temp$11","defaultThemePreferences","WorkbenchThemeProviderContext","WorkbenchThemeProvider","ChakraProvider","psTheme","fileIconThemePreferences","FileIconThemePreferenceProvider","initialThemePreference","ThemePreferenceProvider","WorkbenchThemeScope","isRecord","stringValue","booleanValue","resolveOverlayConfig","config","overlayConfig","scrollBehavior","closeOnEscape","closeOnInteractOutside","modal","preventScroll","trapFocus","motionPreset","contentHeight","contentMaxHeight","contentMinHeight","contentWidth","contentMaxWidth","resolveOverlayDialogConfig","closeable","resolveActivePlacement","resolveOverlayDialogRenderState","exitingPlacement","WorkbenchOverlayFallback","WorkbenchOverlayLayer","overlayRegion","_temp$10","_temp2$6","_temp3$4","setExitingPlacement","dialogRootConfig","canCloseOverlay","closeLabel","_temp4$4","handleOpenChange","handleExitComplete","handleInteractOutside","_temp5$4","WorkbenchBreadcrumbActions","_temp$9","_temp2$5","_temp3$3","_temp4$3","_temp5$3","resourceLabel","ResourceActionMenu","WorkbenchRegionControl","control","WorkbenchNavigationControls","history","_temp$8","regionControls","_temp2$4","WorkbenchRegionControls","controls","_temp3$2","WorkbenchNavChrome","_temp4$2","sidenavControls","_temp5$2","trailingRegionControls","hasNav","control_0","mergeControlDraft","createControlSaveQueue","HarnessControl","initialState","WorkbenchControlsView","WorkbenchControlsForm","saves","showFooter","prev","submit","ControlsContent","hostParam","installed$4","installWorkbenchControlsRenderer","controlsRendererId","createElement","installed$3","installWorkbenchDataTableRenderer","dataTableRendererId","storageVersions","fileStorageVersions","attachFileStorageVersions","response","copyFileStorageVersions","FILE_CONTENT_CACHE_LIMIT","fileContentCache","readCachedFileContent","loadKey","clearCachedResourceContent","storeCachedFileContent","oldest","nextLoadedRevision","acceptFileRendererLoad","accepted","saveLoadedFile","origin","loaded","WorkbenchFileRendererView","lazy","module","installed$2","installWorkbenchFileRenderer","fileRendererId","Suspense","prepareKanbanMove","onMove","supportedMove","onAttributeChange","onReorder","attributeId","bindReactKanbanPresentation","resolveProjectScope","favoriteScope","storageScope","resolveKanbanRendererStorageKey","baseKey","kanbanRendererId","projectScope","kanbanViewScrollContentProps","WorkbenchKanbanViewFrame","usesInternalScroll","noopSubscribe","isKanbanRowResource","useResolvedContributionAttributes","isAttributesSource","attributes","subscribe","getSnapshot","mergeKanbanViewRowActions","resourceActionKeys","resourceActions","resourceCommandIds","contributionActions","WorkbenchKanbanView","_temp$7","_temp2$3","useKanbanRendererStore","_temp3$1","_temp4$1","_temp5$1","handleOpenRow","getRowContextMenuActions","contentPlaceholder","readNotice","KanbanRenderer","applyKanbanMove","rows_0","rows_1","rowId","beforeRowId","installed$1","installWorkbenchKanbanRenderer","installed","isSidenavPlacement","viewContextId","installWorkbenchTreeRenderer","installation","useWorkbenchFileIconThemePreferences","_temp$6","useWorkbenchRegionContent","modePanel","WorkbenchHeaderBorder","useSecondaryPanelView","hasContent","hasHeader","hasPanelHeader","hasMenus","_temp$5","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","WorkbenchSecondaryPanel","hasSecondaryHeader","SECONDARY_PANEL_SIZE","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","mainHeaderTrailingMenuPath","resolveRegionSize","persistedSize","MainHeaderBar","hasMainContentTabs","WorkbenchBody","pageId","_temp$4","modeSettings","persistedSecondarySize","_temp2$2","secondaryPanelSize","mainRegion","mainPanelWithMenus","Grid","mainContent","height","reorderInstructions","WorkbenchStatusBarItem","neighbor","WorkbenchStatusBarItems","_temp$3","_temp2$1","WorkbenchSidenav","contextActions","ResourceContextMenu","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchActivityBar","WorkbenchStatusBar","ATTACHED_PANEL_DEFAULT_SIZE_PX","ATTACHED_PANEL_MIN_SIZE_PX","WorkbenchSidePanelRegionPortal","sidePanelHost","WorkbenchSidePanelRegionHeader","hasSideHeader","WorkbenchAttachedSidePanelLayout","_temp$2","onAttachedSlotChange","onCollapse","contentMinSizePx","contentPanel","interactivePointerTargetSelector","hasClosest","shouldFocusWorkbenchKeyboardFrame","currentTarget","focusWorkbenchKeyboardFrame","WorkbenchKeyboardFrame","_temp$1","WorkbenchSidePanelBoundary","contentFrame","showAttachedSidePanel","sideHeader","SIDENAV_DEFAULT_SIZE_PX","SIDENAV_MIN_SIZE_PX","CONTENT_MIN_SIZE_PX","resolveSidenavSize","createSidePanelHost","useWorkbenchLayoutFlags","statusChrome","statusBarItems","_temp","_temp2","activeModeId","_temp3","createWorkbenchRegionControls","WorkbenchContent","sidenavContextActions","setSidenavContextActions","attachedSidePanelSlot","setAttachedSidePanelSlot","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","paletteOpen","paletteInitialQuery","sidenavOpen","secondaryPanelOpen","hasSecondaryPanelHeader","hasSidePanelHeader","sidePanelMode","hasSidePanel","hasSideHeaderWidgets","hasSideWidgets","hasSideMenus","showSidenav","hasSidenavWidgets","sidenavCollapsible","showSecondaryPanel","hasSecondaryHeaderWidgets","hasSecondaryWidgets","hasSecondaryMenus","sidenavSize","setPanelOpen","activeSidePanelSlot","contentWithSidenav","hasNavWidgets","hasActivityBarWidgets","titleBar","hasStatusWidgets","sidePanelBubbleIcon","onOpenSidePanel","Workbench","_temp4","_temp5","Toaster","disposeWorkbenchModuleHostRegistrations","syncWorkbenchModuleHostRegistrations","moduleIds","modules","WorkbenchModuleHost","registeredWorkbench"],"sources":["../src/core/registries/pages/page-active-placement.ts","../src/react/shared/use-workbench-store.ts","../src/react/command-palette/command-palette-params.ts","../src/react/shared/icon.tsx","../src/react/menus/menu-item-state.ts","../src/react/menus/command-menu-items.tsx","../src/react/menus/resource-actions.tsx","../src/react/shared/run-placement-action.ts","../src/react/shared/placement-menu-actions.tsx","../src/react/menus/resource-menu.ts","../src/react/shared/use-placement-tab.ts","../src/react/breadcrumb/breadcrumb-snapshot.ts","../src/react/breadcrumb/breadcrumb-view.tsx","../src/react/command-palette/command-option-status.tsx","../src/react/shared/use-workbench-composition-panels.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-option-resolver.ts","../src/react/command-palette/use-command-options.ts","../src/react/command-palette/command-params-dialog.tsx","../src/react/command-palette/palette-params-dialog.tsx","../src/react/theme/workbench-theme-background.ts","../src/react/command-palette/palette-surface.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/resource-search.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/notifications/notification-host.tsx","../src/react/shared/use-workbench-location-resource.ts","../src/react/region/retained-view-placements.ts","../src/react/region/use-retained-view-placements.ts","../src/react/region/widget-host.tsx","../src/react/region/mode-chrome.tsx","../src/react/region/move-panel-host.ts","../src/react/workbench/workbench-panel-state.ts","../src/react/panel-menu/panel-menu-sizing.ts","../src/react/panel-menu/use-panel-menu.ts","../src/react/region/region-tabs-visibility.ts","../src/react/region/region-tabs-visibility-hooks.ts","../src/react/region/panel-view-hosts.tsx","../src/react/region/region.tsx","../src/react/region/panel-add-menu.tsx","../src/react/region/region-tab-menu.tsx","../src/react/region/tab-drag-context.tsx","../src/react/region/use-region-tab.ts","../src/react/region/workbench-region-tab.tsx","../src/react/region/region-tab-list.tsx","../src/react/region/region-tabs.tsx","../src/react/renderers/renderer-read-notice.tsx","../src/react/renderers/use-page-params.ts","../src/react/renderers/renderer-mutations.ts","../src/react/renderers/workbench-connection-provider.tsx","../src/react/renderers/use-renderer-read.ts","../src/react/renderers/tree/tree-actions.tsx","../src/react/renderers/tree/tree-params-dialog.tsx","../src/react/renderers/view-toolbar-actions.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-pinned-only.ts","../src/react/renderers/tree/tree-view-body.tsx","../src/react/renderers/tree/tree-view-navigation.ts","../src/react/renderers/tree/tree-view-search.tsx","../src/react/renderers/tree/tree-resource-preview.ts","../src/react/renderers/tree/tree-view-load.ts","../src/react/renderers/tree/tree-view-move.ts","../src/react/renderers/tree/tree-move-preview.ts","../src/react/renderers/tree/use-tree-movement.ts","../src/react/renderers/tree/use-tree-data.ts","../src/react/renderers/tree/tree-active-resource.ts","../src/react/renderers/tree/use-tree-navigation-state.ts","../src/react/renderers/tree/tree-selection-ancestors.ts","../src/react/renderers/tree/use-tree-selection.ts","../src/react/renderers/tree/tree-emptied-sections.ts","../src/react/renderers/tree/tree-group-scope.ts","../src/react/renderers/tree/use-tree-view-groups.tsx","../src/react/renderers/tree/use-tree-view-customization.ts","../src/react/renderers/tree/tree-view.tsx","../src/react/resource-links/related-resource-page-key.ts","../src/react/resource-links/related-resource-preferences.ts","../src/react/resource-links/related-panel-lifetime.ts","../src/react/resource-links/resource-preview-opener.ts","../src/react/resource-links/related-resource-previews.ts","../src/react/resource-links/resource-link-picker.tsx","../src/react/resource-links/related-resources.tsx","../src/react/resource-links/resource-links-project-scope.ts","../src/react/resource-links/resource-links-module.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/panel-menu/panel-menu.tsx","../src/react/shared/use-workbench-mode-region-settings.ts","../src/react/side-panel/side-panel.tsx","../src/react/statuses/workflow-status-settings-model.ts","../src/react/statuses/workflow-status-settings.tsx","../src/react/terminal/workbench-terminal-panel.tsx","../src/react/terminal/terminal-module.tsx","../src/react/theme/use-workbench-theme-preferences.ts","../src/react/theme/workbench-theme-provider.tsx","../src/react/theme/workbench-theme-scope.tsx","../src/react/workbench/overlay-layer.tsx","../src/react/header/resource-actions.tsx","../src/react/header/workbench-nav-chrome.tsx","../src/react/renderers/controls/control-draft.ts","../src/react/renderers/controls/control-save-queue.ts","../src/react/renderers/controls/harness-control.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/extensions/contributions/file-storage-versions.ts","../src/react/renderers/file/file-renderer-load-state.ts","../src/react/renderers/file/install-file-renderer.ts","../src/react/renderers/kanban/kanban-move.ts","../src/react/renderers/kanban/kanban-presentation.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-status-bar-items.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 type { ResourceRef } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchLayout } from \"../layout/layout-types\";\nimport type { WorkbenchPageContribution } from \"./page-registry\";\nimport { pageResourceContextKey } from \"./page-resource-context\";\n\nexport const resolvePageActivePlacement = (layout: WorkbenchLayout, page?: WorkbenchPageContribution) => {\n if (!page) return;\n const main = layout.regions.main;\n const selected = main.widgets.find((entry) => entry.widgetId === main.activeWidgetId) ?? main.widgets[0];\n return selected?.placementIdentity?.kind === \"page\" && selected.placementIdentity.pageId === page.id\n ? selected\n : undefined;\n};\n\nexport const resolvePageBreadcrumbPlacement = (\n layout: WorkbenchLayout,\n page?: WorkbenchPageContribution,\n resource?: ResourceRef,\n) => {\n const placement = resolvePageActivePlacement(layout, page);\n if (page?.resource && pageResourceContextKey(page, placement?.resource) !== pageResourceContextKey(page, resource))\n return;\n return placement;\n};\n","import { useStore } from \"zustand\";\nimport type { WorkbenchStore } from \"../../core\";\n\nexport const useWorkbenchStore = <TState, TSlice>(store: WorkbenchStore<TState>, selector: (state: TState) => TSlice) =>\n useStore(store, selector);\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { FileUploadValue } from \"@pstdio/ui/param-editor\";\nimport type { Command, 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 (!Array.isArray(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;\nconst commandParamEntries = (params: CommandParamSchema | undefined): CommandParamEntry[] =>\n Object.entries(params ?? {}).map(([key, param]) => ({\n ...param,\n options: dedupeOptions(param.options),\n key,\n label: param.label ?? humanize(key),\n }));\nexport const listCommandParamEntries = (params: CommandParamSchema | undefined) =>\n commandParamEntries(params).filter((entry) => entry.resolvedFrom !== \"resource\");\nexport const resolveCommandResourceParams = (\n params: CommandParamSchema | undefined,\n baseArgs?: unknown,\n context?: WorkbenchCommandExecutionContext,\n) => {\n const base = isRecord(baseArgs) ? baseArgs : {};\n return Object.fromEntries(\n commandParamEntries(params)\n .filter((entry) => entry.resolvedFrom === \"resource\")\n .map((entry) => [\n entry.key,\n Object.hasOwn(base, entry.key) ? base[entry.key] : resourceContextValue(entry, context),\n ]),\n );\n};\nconst renameLabelDefault = (\n key: string,\n base: Record<string, unknown>,\n context: WorkbenchCommandExecutionContext | undefined,\n mutation: Command[\"resourceMutation\"],\n) => {\n const resource = context?.resource;\n if (mutation?.kind !== \"rename\" || key !== mutation.labelParam || resource?.type !== mutation.resourceType)\n return undefined;\n const id = base[mutation.idParam];\n return id === undefined || id === resource.id ? resource.label : undefined;\n};\nexport const buildCommandParamInitialValues = (\n params: CommandParamSchema | undefined,\n baseArgs?: unknown,\n context?: WorkbenchCommandExecutionContext,\n mutation?: Command[\"resourceMutation\"],\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 : (renameLabelDefault(entry.key, base, context, mutation) ??\n resourceContextValue(entry, context) ??\n 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 === \"harness\" || entry.type === \"workspace\") {\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 = (\n baseArgs: unknown,\n params: Record<string, unknown>,\n schema: CommandParamSchema | undefined,\n) => {\n const base = isRecord(baseArgs) ? { ...baseArgs } : {};\n for (const entry of listCommandParamEntries(schema)) delete base[entry.key];\n return { ...base, ...params };\n};\n","import { Icon, type IconProps } from \"@chakra-ui/react\";\nimport { resolveIconComponent } from \"@pstdio/ui\";\n\nexport interface WorkbenchIconProps extends Omit<IconProps, \"as\" | \"size\"> {\n name?: string;\n size?: number | string;\n}\n\nexport const WorkbenchIcon = (props: WorkbenchIconProps) => {\n const { name, size = 14, ...rest } = props;\n if (!name) return null;\n\n const IconComponent = resolveIconComponent(name);\n if (!IconComponent) return null;\n\n return (\n <Icon as={IconComponent} boxSize={typeof size === \"number\" ? `${size}px` : size} aria-hidden=\"true\" {...rest} />\n );\n};\n","import type { ContextKeyValue, MenuItem, RegisteredCommand, WorkbenchCommandExecutionContext } from \"../../core\";\nimport { matchesContextExpression } from \"../../core\";\n\nexport const resolveMenuItemState = (\n action: MenuItem,\n record: RegisteredCommand,\n values: Record<string, ContextKeyValue>,\n context?: WorkbenchCommandExecutionContext,\n) => {\n if (\n !matchesContextExpression(values, action.when) ||\n !matchesContextExpression(values, record.command.when) ||\n record.handler.isVisible?.(action.args, context) === false\n )\n return undefined;\n const readOnly =\n action.readOnly === true || Boolean(action.disabledWhen && matchesContextExpression(values, action.disabledWhen));\n const description = action.description ?? record.command.description;\n return {\n readOnly,\n disabled: readOnly || record.handler.isEnabled?.(action.args, context) === false,\n description: readOnly ? (action.disabledReason ?? description) : description,\n };\n};\n","import { Box, Image } from \"@chakra-ui/react\";\nimport { PaletteShortcut, Tooltip, type TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type {\n KeybindingSequence,\n MenuPath,\n WorkbenchCommandExecutionContext,\n WorkbenchCoreContributionContext,\n} from \"../../core\";\nimport { scopeWorkbenchResourceContextValues } from \"../../core\";\nimport { reportUserActionError } from \"../../core/shared/run-user-action\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport type { TreeActionParamsRequest } from \"../renderers/tree/tree-actions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { resolveMenuItemState } from \"./menu-item-state\";\nexport interface CreateMenuItemsInput {\n workbench: WorkbenchCoreContributionContext;\n menuPath: MenuPath;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\nconst commandContextValues = (\n workbench: WorkbenchCoreContributionContext,\n context: WorkbenchCommandExecutionContext | undefined,\n) =>\n context?.resource\n ? scopeWorkbenchResourceContextValues(workbench.context.snapshot(), context.resource)\n : workbench.context.snapshot();\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 <Image\n src={iconSrc}\n alt=\"\"\n aria-hidden=\"true\"\n htmlWidth={14}\n htmlHeight={14}\n display=\"block\"\n w=\"full\"\n h=\"full\"\n fit=\"contain\"\n />\n </Box>\n );\n }\n\n return icon ? <WorkbenchIcon name={icon} /> : undefined;\n};\n\nexport const createMenuEndContent = (input: {\n external?: boolean;\n binding?: KeybindingSequence;\n disabledReason?: string;\n readOnly?: boolean;\n}) => {\n const { binding, external, disabledReason, readOnly } = input;\n if (readOnly && disabledReason)\n return (\n <Tooltip content={disabledReason} openDelay={300}>\n <Box as=\"span\" tabIndex={0} aria-label={disabledReason}>\n <WorkbenchIcon name=\"Info\" />\n </Box>\n </Tooltip>\n );\n if (external) return <WorkbenchIcon name=\"ArrowUpRight\" size={14} color=\"fg.muted\" />;\n if (binding) return <PaletteShortcut binding={binding} />;\n return undefined;\n};\n\nexport const 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\";\nexport const createMenuItemGroups = (input: CreateMenuItemsInput) => {\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 action of workbench.layout.listMenuItems(menuPath)) {\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) continue;\n\n const args = action.args;\n const state = resolveMenuItemState(action, record, contextValues, context);\n if (!state) continue;\n\n const icon = action.icon ?? record.command.icon;\n const binding = shortcuts.get(record.command.id);\n const readOnly = state.readOnly;\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 await workbench.commands.executeCommand(record.command.id, nextArgs, context);\n },\n })\n : undefined;\n const item = {\n id: action.id,\n label,\n group: action.resourceGroup,\n commandId: action.sourceCommandId ?? record.command.id,\n description: state.description,\n icon: createMenuIcon({ icon, iconSrc: action.iconSrc }),\n endContent: createMenuEndContent({\n external: action.external,\n binding,\n disabledReason: state.description,\n readOnly,\n }),\n disabled: state.disabled,\n readOnly,\n separatorBefore: action.separatorBefore,\n onAction: readOnly\n ? undefined\n : () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void workbench.commands.executeCommand(record.command.id, args, context).catch((error) => {\n if (onCommandError) onCommandError(error);\n else reportUserActionError(workbench, label, error);\n });\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 createMenuItems = (input: CreateMenuItemsInput) => {\n const { regularItems, kernelItems } = createMenuItemGroups(input);\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport type { ResourceContextAction, TreeListActionMenuItem } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { ResourceRef, WorkbenchCoreContributionContext } from \"../../core\";\nimport { resourceContextMenuPath, workbenchBreadcrumbLocationMenuPath } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { type CreateMenuItemsInput, createMenuItems } from \"./command-menu-items\";\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 = (\n workbench: WorkbenchCoreContributionContext,\n subject: ResourceRef,\n options: Pick<CreateMenuItemsInput, \"onRequestParams\" | \"onCommandError\"> = {},\n) => {\n const kind = workbench.resources.getKind(subject.type, subject.extensionId);\n const current = kind?.resolve ? kind.resolve(subject) : subject;\n const resource = current ? workbench.resources.preview.resolve(current) : undefined;\n if (!resource) return [];\n return createMenuItems({\n menuPath: resourceContextMenuPath(resource.type),\n workbench,\n context: { resource },\n onRequestParams: options.onRequestParams ?? (({ request }) => workbench.commandPalette.requestParams(request)),\n onCommandError: options.onCommandError,\n }).map((item) => ({\n ...toResourceContextAction(item),\n group: item.group ?? {\n id: `resource:${resource.extensionId ?? \"pstdio\"}:${resource.type}`,\n label: kind?.label ?? resource.type,\n },\n }));\n};\nexport const createWorkbenchLocationActions = (\n workbench: WorkbenchCoreContributionContext,\n resource: ResourceRef | undefined,\n) =>\n createMenuItems({\n menuPath: workbenchBreadcrumbLocationMenuPath,\n workbench,\n context: resource ? { resource } : undefined,\n onRequestParams: ({ request }) => workbench.commandPalette.requestParams(request),\n }).map(toResourceContextAction);\nexport const useWorkbenchResourceActionResolver = (workbench: WorkbenchCoreContributionContext) => {\n useWorkbenchStore(workbench.resources.preview.store, (state) => state.changes);\n const kinds = useWorkbenchStore(workbench.resources.store, (state) => state.kinds);\n const [, refresh] = useState(0);\n useEffect(() => {\n const subscriptions = Object.values(kinds).flatMap((kind) =>\n kind.subscribe ? [kind.subscribe(() => refresh((revision) => revision + 1))] : [],\n );\n return () => {\n for (const subscription of subscriptions) {\n if (typeof subscription === \"function\") subscription();\n else subscription.dispose();\n }\n };\n }, [kinds]);\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 { ResourceRef, WorkbenchCore, WorkbenchTabAction } from \"../../core\";\nimport type { WorkbenchCommandParamsRequest } from \"../../core/controllers/command-palette/command-palette-controller\";\nimport { runUserAction } from \"../../core/shared/run-user-action\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\n\nexport const runPlacementAction = (\n workbench: WorkbenchCore,\n action: WorkbenchTabAction,\n requestParams = (request: WorkbenchCommandParamsRequest) => workbench.commandPalette.requestParams(request),\n resource?: ResourceRef,\n) => {\n const target = action.kind === \"navigation\" ? action.target : action;\n if (target.kind !== \"command\") {\n void runUserAction(workbench, \"Open\", () => workbench.navigation.openTarget(target));\n return;\n }\n const command = workbench.commands.getCommand(target.commandId)?.command;\n if (command && hasCommandParameters(command.params)) {\n requestParams({\n record: { command },\n label: command.label,\n args: target.args,\n context: resource ? { resource } : undefined,\n });\n } else {\n void runUserAction(workbench, command?.label ?? \"Command\", () =>\n workbench.commands.executeCommand(target.commandId, target.args, resource ? { resource } : undefined),\n );\n }\n};\n","import type { ResourceContextAction } from \"@pstdio/ui\";\nimport type { ResourceRef, WorkbenchCore, WorkbenchTabMenuRow, WorkbenchTabSnapshot } from \"../../core\";\nimport { WorkbenchIcon } from \"./icon\";\nimport { runPlacementAction } from \"./run-placement-action\";\n\nconst placementRowAction = (workbench: WorkbenchCore, row: WorkbenchTabMenuRow, resource?: ResourceRef) => {\n const target = row.action?.kind === \"navigation\" ? row.action.target : row.action;\n return {\n key: row.id,\n label: row.label,\n commandId: target?.kind === \"command\" ? target.commandId : undefined,\n icon: row.icon ? <WorkbenchIcon name={row.icon} size={14} color={row.iconColor} /> : undefined,\n isDisabled: row.disabled,\n isSelected: row.selected,\n onClick: () => {\n if (row.action) runPlacementAction(workbench, row.action, undefined, resource);\n },\n };\n};\nexport const placementMenuActions = (\n workbench: WorkbenchCore,\n snapshot: WorkbenchTabSnapshot,\n resource?: ResourceRef,\n) =>\n (snapshot.menu ?? []).flatMap((section) => {\n const group = { id: `placement:${section.id}`, label: section.label };\n const actions: ResourceContextAction[] = section.rows.map((row) => ({\n ...placementRowAction(workbench, row, resource),\n key: `${section.id}:${row.id}`,\n group,\n }));\n return actions;\n });\n","import type { ResourceRef, WorkbenchCore, WorkbenchTabSnapshot } from \"../../core\";\nimport { resolveResourcePreview } from \"../../core/registries/resources/resource-preview\";\nimport { placementMenuActions } from \"../shared/placement-menu-actions\";\nimport { createWorkbenchResourceActions } from \"./resource-actions\";\n\nexport const createWorkbenchResourceMenu = (\n workbench: WorkbenchCore,\n subject: ResourceRef | undefined,\n snapshot: WorkbenchTabSnapshot,\n) => {\n const resource = subject\n ? resolveResourcePreview(subject, workbench.resources.preview.store.getState().changes)\n : undefined;\n return [\n ...(resource ? createWorkbenchResourceActions(workbench, resource) : []),\n ...placementMenuActions(workbench, snapshot, resource),\n ];\n};\n","import { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchTabSnapshot, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { resolveResourcePreview } from \"../../core/registries/resources/resource-preview\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nconst readPlacementTab = (placement: WorkbenchWidgetPlacement | undefined) =>\n placement?.tab?.getSnapshot(toPanelInstance(placement)) ?? {};\n\nexport const usePlacementTab = (placement: WorkbenchWidgetPlacement | undefined, workbench: WorkbenchCore) => {\n const changes = useWorkbenchStore(workbench.resources.preview.store, (state) => state.changes);\n const [state, setState] = useState<{ placement: typeof placement; snapshot: WorkbenchTabSnapshot }>(() => ({\n placement,\n snapshot: readPlacementTab(placement),\n }));\n useEffect(() => {\n const refresh = () => setState({ placement, snapshot: readPlacementTab(placement) });\n const subscription = placement?.tab?.subscribe?.(refresh);\n refresh();\n return () => {\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n };\n }, [placement]);\n const snapshot = state.placement === placement ? state.snapshot : readPlacementTab(placement);\n const resource = placement?.resource;\n const projected = resource ? resolveResourcePreview(resource, changes) : undefined;\n const changed = projected && projected !== resource;\n return changed ? { ...snapshot, label: projected.label } : snapshot;\n};\n","import type { ResourceRef, WorkbenchBreadcrumbItem, WorkbenchTabSnapshot } from \"../../core\";\n\nexport const breadcrumbSnapshot = (\n item: WorkbenchBreadcrumbItem,\n current: WorkbenchBreadcrumbItem | undefined,\n resource: ResourceRef | undefined,\n snapshot: WorkbenchTabSnapshot,\n referenceKey: (resource: ResourceRef) => string,\n) =>\n item === current && resource && item.resource && referenceKey(item.resource) === referenceKey(resource)\n ? snapshot\n : {};\n","import { HStack, Text } from \"@chakra-ui/react\";\nimport { Breadcrumb, type ResourceContextAction, type SessionCompletionStatus, SessionIndicator } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchBreadcrumbItem, WorkbenchCore } from \"../../core\";\nimport { resolvePageBreadcrumbPlacement } from \"../../core/registries/pages/page-active-placement\";\nimport { resolveResourcePreview } from \"../../core/registries/resources/resource-preview\";\nimport { useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { createWorkbenchResourceMenu } from \"../menus/resource-menu\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { usePlacementTab } from \"../shared/use-placement-tab\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { breadcrumbSnapshot } from \"./breadcrumb-snapshot\";\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 = (\n items: WorkbenchBreadcrumbItem[] | undefined,\n actionsForResource?: (item: WorkbenchBreadcrumbItem) => ResourceContextAction[] | undefined,\n) =>\n (items ?? []).map((item) => {\n const actions = actionsForResource?.(item);\n return {\n title: <WorkbenchBreadcrumbTitle item={item} />,\n url: item.url,\n onClick: item.onClick,\n ...(actions?.length ? { contextMenuActions: actions } : {}),\n };\n });\nexport const WorkbenchBreadcrumbView = (props: WorkbenchBreadcrumbViewProps) => {\n const { workbench } = props;\n const changes = useWorkbenchStore(workbench.resources.preview.store, (state) => state.changes);\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n const page = useWorkbenchStore(workbench.pages.store, (state) =>\n state.activePageId ? state.pages[state.activePageId] : undefined,\n );\n const routedResource = useWorkbenchStore(workbench.pages.store, (state) => state.location?.resource);\n const placement = useWorkbenchStore(workbench.layout.store, (state) =>\n resolvePageBreadcrumbPlacement(state.layout, page, routedResource),\n );\n const snapshot = usePlacementTab(placement, workbench);\n useWorkbenchResourceActionResolver(workbench);\n if (items.length === 0) return null;\n const resource = placement?.resource;\n const crumbs = items.flatMap((item) => {\n if (!item.resource) return [item];\n const projected = resolveResourcePreview(item.resource, changes);\n if (!projected) return [];\n return [{ ...item, resource: projected, title: projected !== item.resource ? projected.label : item.title }];\n });\n if (\n resource &&\n resolveResourcePreview(resource, changes) &&\n !crumbs.some(\n (item) =>\n item.resource &&\n workbench.pages.resourceReferenceKey(item.resource) === workbench.pages.resourceReferenceKey(resource),\n )\n ) {\n crumbs.push({\n title: snapshot.label ?? resource.label ?? resource.id,\n icon: snapshot.icon ?? workbench.resources.getKind(resource.type, resource.extensionId)?.icon,\n resource,\n });\n }\n return (\n <Breadcrumb\n items={buildWorkbenchBreadcrumbItems(crumbs, (item) =>\n item.resource\n ? createWorkbenchResourceMenu(\n workbench,\n item.resource,\n breadcrumbSnapshot(item, crumbs.at(-1), resource, snapshot, workbench.pages.resourceReferenceKey),\n )\n : undefined,\n )}\n separator=\"/\"\n separatorGap=\"xs\"\n display=\"flex\"\n h=\"full\"\n />\n );\n};\n","import { Button, HStack, Text } from \"@chakra-ui/react\";\nimport type { CommandOptionState } from \"./command-option-resolver\";\n\ninterface CommandOptionStatusProps {\n state?: CommandOptionState;\n onRetry: () => void;\n}\nexport const CommandOptionStatus = (props: CommandOptionStatusProps) => {\n const { state, onRetry } = props;\n if (state?.status === \"ready\")\n return state.options.length === 0 ? (\n <Text px=\"sm\" textStyle=\"paragraph/XS/regular\" color=\"fg.muted\">\n No options available.\n </Text>\n ) : null;\n return (\n <HStack px=\"sm\" py=\"xs\" gap=\"sm\">\n <Text role=\"status\" textStyle=\"paragraph/XS/regular\" color={state?.status === \"error\" ? \"fg.error\" : \"fg.muted\"}>\n {state?.error ?? \"Loading options…\"}\n </Text>\n {state?.status === \"error\" ? (\n <Button size=\"xs\" variant=\"outline\" onClick={onRetry}>\n Retry\n </Button>\n ) : null}\n </HStack>\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 { 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 getPaletteViewMode = (view: WorkbenchCommandPaletteView) => {\n if (isThemePaletteView(view)) return THEME_MODE_ID;\n return undefined;\n};\n\nexport const getPaletteViewModes = (view: WorkbenchCommandPaletteView) => {\n if (isThemePaletteView(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, or type > to run a command\";\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { runUserAction } from \"../../core/shared/run-user-action\";\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 runUserAction(workbench, result.label, () => result.activate());\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/param-editor\";\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\nexport const commandParamName = (entry: CommandParamEntry) => entry.label;\n\nconst commandParamOptions = (entry: CommandParamEntry): SelectionOption[] =>\n (Array.isArray(entry.options) ? entry.options : []).map((option) => ({\n id: option.value,\n name: option.label,\n icon: option.icon,\n }));\n\n// Structured params (harness, resource, workspace) 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\", \"harness\", \"workspace\"]);\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 allowCustomValues: entry.allowCustomValues,\n defaultValue: asList(value),\n options: commandParamOptions(entry),\n multiSelect: true,\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: (Array.isArray(entry.options) ? entry.options.length : 0) > 5,\n };\n }\n\n if ((entry.type === \"select\" || entry.type === \"template\") && Array.isArray(entry.options)) {\n return {\n ...base,\n type: \"selection\",\n allowCustomValues: entry.allowCustomValues,\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/param-editor\";\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 /** Updates a compound field using its latest stored value. */\n onUpdateValue?: (update: (current: CommandParamValue) => CommandParamValue) => void;\n /** Reports host field validation to the containing command form. */\n onValidationChange?: (error: string | undefined) => void;\n}\n\n// Lets the host supply field UI for param types the workbench cannot render on its\n// own (e.g. harness/workspace 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 type { CommandParamOption, CommandParamOptionSource, CommandParamSchema } from \"../../core\";\nimport { type CommandParamValue, normalizeCommandParamValues } from \"./command-palette-params\";\n\ntype Values = Record<string, CommandParamValue>;\nexport interface CommandOptionState {\n key: string;\n status: \"loading\" | \"ready\" | \"error\";\n options: CommandParamOption[];\n error?: string;\n}\nexport type ExecuteOptionCommand = (\n commandId: string,\n args: Record<string, unknown>,\n signal?: AbortSignal,\n) => Promise<unknown>;\nconst valueRef = (value: unknown): value is { kind: \"param-value\"; key: string } =>\n typeof value === \"object\" &&\n value !== null &&\n \"kind\" in value &&\n value.kind === \"param-value\" &&\n \"key\" in value &&\n typeof value.key === \"string\";\nconst argumentsFor = (\n source: CommandParamOptionSource,\n values: Values,\n schema: CommandParamSchema,\n resolved: Record<string, unknown>,\n) =>\n Object.fromEntries(\n Object.entries(source.params ?? {}).map(([key, value]) => {\n if (!valueRef(value)) return [key, value];\n const descriptor = schema[value.key];\n if (descriptor?.resolvedFrom === \"resource\") return [key, resolved[value.key]];\n const normalized = descriptor\n ? normalizeCommandParamValues({ [value.key]: { ...descriptor, required: false } }, values)[value.key]\n : values[value.key];\n return [key, normalized];\n }),\n );\n\nconst readOptions = (source: CommandParamOptionSource, result: unknown): CommandParamOption[] => {\n if (!Array.isArray(result)) throw new Error(\"The option command must return a list.\");\n return result.map((row) => {\n if (\n !row ||\n typeof row !== \"object\" ||\n typeof row[source.valueField] !== \"string\" ||\n typeof row[source.labelField] !== \"string\"\n )\n throw new Error(\"The option command returned an invalid value or label.\");\n return { value: row[source.valueField], label: row[source.labelField] };\n });\n};\n\nexport function createCommandOptionResolver(\n schema: CommandParamSchema,\n execute: ExecuteOptionCommand,\n onChange: (key: string, value: CommandParamValue) => void,\n resolved: Record<string, unknown> = {},\n) {\n const referencedValue = (key: string, values: Values) =>\n schema[key]?.resolvedFrom === \"resource\" ? resolved[key] : values[key];\n const queryKey = (source: CommandParamOptionSource, values: Values) =>\n JSON.stringify([\n source,\n Object.entries(source.params ?? {}).map(([key, value]) => [\n key,\n valueRef(value) ? referencedValue(value.key, values) : value,\n ]),\n ]);\n let snapshot: Record<string, CommandOptionState> = {};\n let values: Values = {};\n let disposed = false;\n const controllers = new Map<string, AbortController>();\n const listeners = new Set<() => void>();\n const requests = new Map<string, number>();\n const sources = Object.entries(schema).flatMap(([key, param]) =>\n param.options && !Array.isArray(param.options) ? [{ key, param, source: param.options }] : [],\n );\n const publish = (key: string, state: CommandOptionState) => {\n snapshot = { ...snapshot, [key]: state };\n for (const listener of listeners) listener();\n };\n const clearInvalidSelection = (key: string, options: CommandParamOption[]) => {\n const offered = new Set(options.map((option) => option.value));\n const current = values[key];\n if (Array.isArray(current)) {\n const next = current.filter((value) => offered.has(value));\n if (next.length !== current.length) onChange(key, next);\n } else if (typeof current === \"string\" && current && !offered.has(current)) onChange(key, \"\");\n };\n const load = async (field: (typeof sources)[number]) => {\n const { key, source, param } = field;\n controllers.get(key)?.abort();\n const controller = new AbortController();\n controllers.set(key, controller);\n const version = (requests.get(key) ?? 0) + 1;\n requests.set(key, version);\n const requestKey = queryKey(source, values);\n publish(key, { key: requestKey, status: \"loading\", options: [] });\n try {\n const options = readOptions(\n source,\n await execute(source.commandId, argumentsFor(source, values, schema, resolved), controller.signal),\n );\n if (disposed || requests.get(key) !== version) return;\n publish(key, { key: requestKey, status: \"ready\", options });\n if (param.allowCustomValues) return;\n clearInvalidSelection(key, options);\n } catch (error) {\n if (disposed || requests.get(key) !== version) return;\n publish(key, {\n key: requestKey,\n status: \"error\",\n options: [],\n error: error instanceof Error ? error.message : String(error),\n });\n }\n };\n return {\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => snapshot,\n update(next: Values) {\n disposed = false;\n values = next;\n for (const field of sources) if (snapshot[field.key]?.key !== queryKey(field.source, values)) void load(field);\n },\n retry(key: string) {\n const field = sources.find((field) => field.key === key);\n if (field && !disposed) void load(field);\n },\n validate(next: Values) {\n const errors: Record<string, string> = {};\n for (const { key, param, source } of sources) {\n const state = snapshot[key];\n if (state?.status !== \"ready\" || state.key !== queryKey(source, next)) {\n errors[key] = \"Wait for the available options to load.\";\n continue;\n }\n if (param.allowCustomValues) continue;\n const value = next[key];\n const selected = Array.isArray(value) ? value : [value].filter(Boolean);\n if (selected.some((value) => !state.options.some((option) => option.value === value)))\n errors[key] = \"Choose a value from the available options.\";\n }\n return errors;\n },\n dispose() {\n disposed = true;\n for (const controller of controllers.values()) controller.abort();\n for (const [key, version] of requests) requests.set(key, version + 1);\n snapshot = {};\n listeners.clear();\n },\n };\n}\n","import { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport type { CommandParamSchema } from \"../../core\";\nimport { createCommandOptionResolver, type ExecuteOptionCommand } from \"./command-option-resolver\";\nimport type { CommandParamValue } from \"./command-palette-params\";\n\nexport const useCommandOptions = (\n schema: CommandParamSchema,\n values: Record<string, CommandParamValue>,\n execute: ExecuteOptionCommand | undefined,\n onChange: (key: string, value: CommandParamValue) => void,\n resolved: Record<string, unknown> = {},\n) => {\n const callbacks = useRef({ execute, onChange });\n callbacks.current = { execute, onChange };\n const [resolver] = useState(() =>\n createCommandOptionResolver(\n schema,\n (id, args, signal) => {\n if (!callbacks.current.execute) return Promise.reject(new Error(\"Option commands are unavailable.\"));\n return callbacks.current.execute(id, args, signal);\n },\n (key, value) => callbacks.current.onChange(key, value),\n resolved,\n ),\n );\n const states = useSyncExternalStore(resolver.subscribe, resolver.getSnapshot, resolver.getSnapshot);\n useEffect(() => {\n resolver.update(values);\n }, [resolver, values]);\n useEffect(() => () => resolver.dispose(), [resolver]);\n return { states, validate: resolver.validate, retry: resolver.retry };\n};\n","import { Box, Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { AlertMessage, handleDialogAcceptShortcut, ScrollArea } from \"@pstdio/ui\";\nimport { Fragment, useState } from \"react\";\nimport type { Command, RegisteredMenuItem, WorkbenchCommandExecutionContext } from \"../../core\";\nimport type { ExecuteOptionCommand } from \"./command-option-resolver\";\nimport { CommandOptionStatus } from \"./command-option-status\";\nimport {\n buildCommandParamInitialValues,\n type CommandParamEntry,\n type CommandParamValue,\n isCommandFilesParamValue,\n listCommandParamEntries,\n mergeCommandParamArgs,\n normalizeCommandParamValues,\n resolveCommandResourceParams,\n} from \"./command-palette-params\";\nimport { CommandParamField, type CommandParamFieldRenderer } from \"./command-param-field\";\nimport { useCommandOptions } from \"./use-command-options\";\n\nexport interface CommandParamsRequest {\n record: { command: Pick<Command, \"id\" | \"label\" | \"description\" | \"params\" | \"resourceMutation\"> };\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 executeOptionCommand?: ExecuteOptionCommand;\n prepareArgs?: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n onArgsChange: (args: unknown) => void;\n }) => Promise<unknown>;\n onRunError?: (label: string, error: unknown) => void;\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 [current, setCurrent] = useState({ request: props.request, revision: 0 });\n if (current.request !== props.request) {\n setCurrent({ request: props.request, revision: current.revision + 1 });\n }\n return props.request ? <CommandParamsForm key={current.revision} {...props} request={props.request} /> : null;\n};\n\nconst CommandParamsForm = (props: CommandParamsDialogProps & { request: CommandParamsRequest }) => {\n const { request, renderParamField, prepareArgs, executeOptionCommand, onClose, onRun, onRunError } = props;\n const [values, setValues] = useState<Record<string, CommandParamValue>>(() =>\n buildCommandParamInitialValues(\n request.record.command.params,\n request.args,\n request.context,\n request.record.command.resourceMutation,\n ),\n );\n const [resolved] = useState(() =>\n resolveCommandResourceParams(request.record.command.params, request.args, request.context),\n );\n const [error, setError] = useState<string | undefined>();\n const [submitting, setSubmitting] = useState(false);\n const [customFieldErrors, setCustomFieldErrors] = useState<Record<string, string | undefined>>({});\n const entries = listCommandParamEntries(request?.record.command.params);\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 options = useCommandOptions(\n request.record.command.params ?? {},\n values,\n executeOptionCommand,\n setValue,\n resolved,\n );\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});\n\n const run = async () => {\n if (!request || submitting) return;\n const invalid = options.validate(values);\n for (const [key, error] of Object.entries(customFieldErrors)) {\n if (error) invalid[key] = error;\n }\n setFieldErrors(invalid);\n if (Object.keys(invalid).length > 0) return;\n setSubmitting(true);\n setError(undefined);\n try {\n const params = normalizeCommandParamValues(request.record.command.params, values);\n const args = mergeCommandParamArgs(request.args, { ...resolved, ...params }, request.record.command.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(\n buildCommandParamInitialValues(\n request.record.command.params,\n nextArgs,\n request.context,\n request.record.command.resourceMutation,\n ),\n ),\n })\n : args;\n const submission = {\n commandId: request.record.command.id,\n args: preparedArgs,\n context: request.context,\n label: request.label,\n };\n if (request.record.command.resourceMutation) {\n onClose();\n void onRun(submission).catch((caught) => onRunError?.(request.label, caught));\n return;\n }\n await onRun(submission);\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 =\n Object.keys(options.validate(values)).length === 0 &&\n !Object.values(customFieldErrors).some(Boolean) &&\n 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 <Dialog.Title>{request?.label ?? \"Run command\"}</Dialog.Title>\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 state = options.states[entry.key];\n const dynamic = entry.options && !Array.isArray(entry.options);\n const fieldProps = {\n entry: dynamic ? { ...entry, options: state?.options ?? [] } : entry,\n value: values[entry.key],\n disabled: submitting || Boolean(dynamic && state?.status !== \"ready\"),\n onChange: (value: CommandParamValue) => setValue(entry.key, value),\n onUpdateValue: (update: (current: CommandParamValue) => CommandParamValue) =>\n setValues((current) => ({ ...current, [entry.key]: update(current[entry.key]) })),\n onValidationChange: (error: string | undefined) =>\n setCustomFieldErrors((current) =>\n current[entry.key] === error ? current : { ...current, [entry.key]: error },\n ),\n };\n const custom = renderParamField?.({ ...fieldProps, context: request?.context });\n return (\n <Fragment key={entry.key}>\n {custom ?? <CommandParamField {...fieldProps} />}\n {dynamic ? <CommandOptionStatus state={state} onRetry={() => options.retry(entry.key)} /> : null}\n {fieldErrors[entry.key] ? (\n <Text role=\"alert\" px=\"sm\" textStyle=\"paragraph/XS/regular\" color=\"fg.error\">\n {fieldErrors[entry.key]}\n </Text>\n ) : null}\n </Fragment>\n );\n })}\n </Stack>\n </ScrollArea>\n </Dialog.Body>\n {/* Outside the scroll area, so the reason stays next to Run however long the form is. */}\n {error ? (\n <Box px=\"lg\" pb=\"md\">\n <AlertMessage status=\"error\" title={error} role=\"alert\" />\n </Box>\n ) : null}\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 { AlertMessage, DeleteConfirmationModal } from \"@pstdio/ui\";\nimport { useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport type { WorkbenchCommandConfirmation } from \"../../core/controllers/command-palette/command-palette-controller\";\nimport { reportUserActionError } from \"../../core/shared/run-user-action\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { type CommandParamFieldRenderer, CommandParamsDialog } from \"./command-params-dialog\";\n\ninterface PaletteParamsDialogProps {\n workbench: WorkbenchCore;\n renderParamField?: CommandParamFieldRenderer;\n}\n\nexport const PaletteParamsDialog = (props: PaletteParamsDialogProps) => {\n const { workbench, renderParamField } = props;\n const request = useWorkbenchStore(workbench.commandPalette.store, (state) => state.paramsRequest);\n const confirmation = useWorkbenchStore(workbench.commandPalette.store, (state) => state.confirmation);\n return (\n <>\n {confirmation ? <CommandConfirmationDialog key={confirmation.label} confirmation={confirmation} /> : null}\n <CommandParamsDialog\n request={request}\n renderParamField={renderParamField}\n executeOptionCommand={(id, args, signal) =>\n workbench.commands.executeCommand(id, args, { ...request?.context, signal })\n }\n prepareArgs={(input) =>\n workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n }\n onRunError={(label, error) => reportUserActionError(workbench, label, error)}\n onClose={() => workbench.commandPalette.clearParams()}\n // The dialog shows a failure itself and stays open, so let the error reach it.\n onRun={async ({ commandId, args, context }) => {\n await workbench.commands.executeCommand(commandId, args, context);\n }}\n />\n </>\n );\n};\n\nexport const CommandConfirmationDialog = (props: { confirmation: WorkbenchCommandConfirmation }) => {\n const { confirmation } = props;\n const [error, setError] = useState<string>();\n return (\n <DeleteConfirmationModal\n open\n headline={`${confirmation.label}?`}\n notificationText={confirmation.description ?? \"This cannot be undone.\"}\n buttonText={confirmation.buttonLabel ?? \"Delete\"}\n onClose={() => confirmation.resolve(false)}\n onDelete={async () => {\n setError(undefined);\n try {\n await confirmation.onConfirm?.();\n confirmation.resolve(true);\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : \"Could not save. Try again.\");\n throw caught;\n }\n }}\n >\n {error ? <AlertMessage status=\"error\" title={error} role=\"alert\" /> : null}\n </DeleteConfirmationModal>\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 { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { workbenchCommandPaletteBackground } from \"../theme/workbench-theme-background\";\n\nexport const WorkbenchPaletteSurface = (props: { children: ReactNode }) => {\n const { children } = props;\n return (\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 {children}\n </Box>\n );\n};\n","import type {\n RegisteredWidgetContribution,\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n} from \"../../core\";\nimport { runUserAction } from \"../../core/shared/run-user-action\";\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 = async (input: OpenPanelWidgetInput) => {\n const { open, pinned, region, resource, widget, workbench } = input;\n\n if (open) {\n await open(resource);\n } else if (widget.openCommand) {\n await runUserAction(workbench, widget.title, async () => {\n await workbench.commands.executeCommand(widget.openCommand!.commandId, widget.openCommand!.args, {\n source: \"panel-add\",\n region,\n ...(resource ? { resource } : {}),\n });\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 { runUserAction } from \"../../core/shared/run-user-action\";\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, resource.extensionId);\n const indicator = entry.indicator;\n const icon = indicator?.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 ? (\n <WorkbenchIcon\n name={icon}\n color={indicator?.color}\n role={indicator?.label ? \"img\" : undefined}\n aria-label={indicator?.label}\n aria-hidden={indicator?.label ? undefined : true}\n />\n ) : undefined,\n onActivate: () => {\n onClose();\n void runUserAction(workbench, label, () => activate(resource));\n },\n };\n};\nexport const createWorkbenchResourcePaletteEntries = (input: {\n workbench: WorkbenchCore;\n query: string;\n onClose: () => void;\n resources?: readonly ResourceBrowseEntry[];\n}) => {\n const { onClose, query, workbench } = input;\n return (input.resources ?? workbench.resources.listResources(query))\n .map((entry) => createResourceEntry({ workbench, entry, onClose }))\n .filter((entry): entry is WorkbenchResourcePaletteEntry => entry !== undefined);\n};\n","import { Palette } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchResourceSearchRequest } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { WorkbenchPaletteSurface } from \"./palette-surface\";\nimport { createWorkbenchResourcePaletteEntries } from \"./resource-palette\";\n\ninterface WorkbenchResourceSearchProps {\n workbench: WorkbenchCore;\n request: WorkbenchResourceSearchRequest;\n onClose(): void;\n}\n\nexport const WorkbenchResourceSearch = (props: WorkbenchResourceSearchProps) => {\n const { workbench, request, onClose } = props;\n const [search, setSearch] = useState(() => ({ request, query: \"\", resources: request.list(\"\") }));\n const query = search.request === request ? search.query : \"\";\n if (search.request !== request) setSearch({ request, query: \"\", resources: request.list(\"\") });\n useEffect(() => {\n const refresh = () =>\n setSearch((current) =>\n current.request === request ? { ...current, resources: request.list(current.query) } : current,\n );\n const unsubscribe = request.subscribe?.(refresh);\n // Catch source changes between the first render and subscription setup.\n refresh();\n return unsubscribe;\n }, [request]);\n const entries = createWorkbenchResourcePaletteEntries({\n workbench,\n query,\n resources: search.request === request ? search.resources : [],\n onClose,\n });\n return (\n <WorkbenchPaletteSurface>\n <Palette\n open\n resetKey={request}\n label={request.label}\n entries={entries}\n placeholder={request.placeholder}\n inputIcon={<WorkbenchIcon name=\"Search\" />}\n emptyLabel=\"No resources found.\"\n onQueryChange={(query) => setSearch({ request, query, resources: request.list(query) })}\n onClose={onClose}\n />\n </WorkbenchPaletteSurface>\n );\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 getThemePaletteEntryIndex = (\n entries: readonly WorkbenchThemePaletteEntry[],\n themePreference: ThemePreference,\n) =>\n Math.max(\n entries.findIndex((entry) => entry.themePreference === themePreference),\n 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 /** The saved theme. A theme shown only as a preview is never marked as selected. */\n chosenThemePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (themePreference: ThemePreference) => void;\n onClose: () => void;\n}) => {\n const { chosenThemePreference, onClose, setThemePreference, 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 === chosenThemePreference,\n onActivate: () => {\n setThemePreference(preference.id);\n onClose();\n },\n };\n });\n};\n","import { Palette, type PaletteEntry, PaletteShortcut, useThemePreference } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport {\n type Command,\n getNavigationTargetKey,\n type KeybindingSequence,\n type MenuPath,\n type RegisteredCommand,\n type RegisteredMenuItem,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n workbenchCommandPaletteMenuPath,\n} from \"../../core\";\nimport { runUserAction } from \"../../core/shared/run-user-action\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { hasCommandParameters } from \"./command-palette-params\";\nimport { useWorkbenchCommandPaletteResourceEntries } from \"./command-palette-resources\";\nimport type { CommandParamFieldRenderer, CommandParamsRequest } from \"./command-params-dialog\";\nimport { PaletteParamsDialog } from \"./palette-params-dialog\";\nimport { WorkbenchPaletteSurface } from \"./palette-surface\";\nimport {\n COMMAND_MODE_ID,\n getPaletteInitialActiveIndex,\n getPaletteInputIcon,\n getPalettePlaceholder,\n getPaletteViewMode,\n getPaletteViewModes,\n isThemePaletteView,\n} from \"./palette-view\";\nimport { createWorkbenchPanelWidgetPaletteEntries } from \"./panel-widget-palette\";\nimport { createWorkbenchResourcePaletteEntries } from \"./resource-palette\";\nimport { WorkbenchResourceSearch } from \"./resource-search\";\nimport {\n createWorkbenchThemePreferencePaletteEntries,\n getThemePaletteEntryIndex,\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 WorkbenchCommandPaletteRecord {\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n}\n\nconst getCommandSearchText = (command: Command, label: string) =>\n [label, command.id, command.description, command.category].filter(Boolean).join(\" \");\n\nconst createShortcutByAction = (workbench: WorkbenchCore) =>\n new Map(\n workbench.keybindings\n .listKeybindings()\n .map((binding) => [getNavigationTargetKey(binding.action), binding.keybinding]),\n );\n\nconst getShortcut = (binding: KeybindingSequence | undefined): ReactNode =>\n binding ? <PaletteShortcut binding={binding} /> : undefined;\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 await runUserAction(workbench, label, () => workbench.commands.executeCommand(commandId, args, context));\n};\n\nconst createEntry = (input: {\n workbench: WorkbenchCore;\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n shortcutByAction: Map<string, KeybindingSequence>;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}): WorkbenchCommandPaletteEntry | null => {\n const { action, onClose, onRequestParams, record, workbench, shortcutByAction } = 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(\n shortcutByAction.get(getNavigationTargetKey({ kind: \"command\", commandId: record.command.id, args })) ??\n shortcutByAction.get(\n getNavigationTargetKey({\n kind: \"command\",\n commandId: action?.sourceCommandId ?? record.command.id,\n args,\n }),\n ),\n ),\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 shortcutByAction = createShortcutByAction(workbench);\n\n return listCommandRecords(workbench, menuPath)\n .sort(byCommandPaletteGroup)\n .map(({ record, action }) => createEntry({ workbench, record, action, shortcutByAction, onClose, onRequestParams }))\n .filter((entry): entry is WorkbenchCommandPaletteEntry => entry !== null);\n};\n\nexport const WorkbenchCommandPalette = (props: WorkbenchCommandPaletteProps) => {\n const { workbench, open, onClose } = props;\n const request = useWorkbenchStore(workbench.commandPalette.store, (state) => state.resourceSearch);\n if (request && open) return <WorkbenchResourceSearch workbench={workbench} request={request} onClose={onClose} />;\n return <WorkbenchMainCommandPalette {...props} />;\n};\n\nconst WorkbenchMainCommandPalette = (props: WorkbenchCommandPaletteProps) => {\n const {\n workbench,\n open,\n menuPath = workbenchCommandPaletteMenuPath,\n initialQuery = \"\",\n renderParamField,\n onClose,\n } = props;\n const { chosenThemePreference, themePreferences, setThemePreference, previewThemePreference } = useThemePreference();\n const view = useWorkbenchStore(workbench.commandPalette.store, (state) => state.view);\n useWorkbenchStore(workbench.keybindings.store, (state) => state.keybindings);\n useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\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 // A theme preview is never saved, so leaving the picker in any way shows the chosen theme again.\n const closePalette = () => {\n previewThemePreference(null);\n onClose();\n };\n\n const exitPickerView = () => {\n previewThemePreference(null);\n workbench.commandPalette.open({ view: \"main\" });\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 chosenThemePreference,\n themePreferences,\n setThemePreference,\n onClose,\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 = getThemePaletteEntryIndex(themeEntries, chosenThemePreference);\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) previewThemePreference(null);\n }, [isThemeView, open, previewThemePreference]);\n\n return (\n <>\n <WorkbenchPaletteSurface>\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) return;\n previewThemePreference(\n themeEntry.themePreference === chosenThemePreference ? null : themeEntry.themePreference,\n );\n }}\n onQueryChange={setLiveQuery}\n onClose={closePalette}\n onEscape={(ctx) => {\n if (isThemePaletteView(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 </WorkbenchPaletteSurface>\n <PaletteParamsDialog workbench={workbench} renderParamField={renderParamField} />\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 { scopeWorkbenchResourceContextValues } from \"../../core\";\nimport { byContributionPriority } from \"../../core/shared/contributions/metadata\";\nimport { resolveMenuItemState } from \"./menu-item-state\";\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 resolveContextValues = (state: WorkbenchMenuItemState, context: WorkbenchMenuItemContext | undefined) =>\n context ? scopeWorkbenchResourceContextValues(state.contextValues, context.resource) : state.contextValues;\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 .map((action) => {\n const record = state.commands[action.commandId];\n if (!record) return null;\n\n const args = action.args;\n const availability = resolveMenuItemState(action, record, contextValues, context);\n if (!availability) return null;\n\n return {\n id: action.id,\n commandId: record.command.id,\n label: action.label ?? record.command.label,\n ...(availability.description ? { description: availability.description } : {}),\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: availability.disabled,\n ...(availability.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 { runUserAction } from \"../../core/shared/run-user-action\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport { createMenuEndContent } from \"../menus/command-menu-items\";\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 // Command handlers can read the focused panel while the page's primary resource stays unchanged.\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const resource = getAnchorResource(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 runUserAction(workbench, item.label, () => workbench.commands.executeCommand(item.commandId, args, context));\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} disabled={item.disabled} 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 endContent={createMenuEndContent({ readOnly: item.readOnly, disabledReason: item.description })}\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 { useEffect, useState } from \"react\";\nimport { getKeybindingSteps, type KeybindingSequence, type WorkbenchCore } from \"../../core\";\nimport { runUserAction } from \"../../core/shared/run-user-action\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\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: async () => {\n if (action.args === undefined && hasCommandParameters(record.command.params)) {\n const resource = workbench.getPrimaryResource();\n workbench.commandPalette.requestParams({\n record,\n label: record.command.label,\n context: resource ? { resource } : undefined,\n });\n return;\n }\n return runUserAction(workbench, record.command.label, () => workbench.navigation.openTarget(action));\n },\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: () => runUserAction(workbench, \"Open\", () => workbench.navigation.openTarget(action)),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n });\n};\n\nexport const WorkbenchKeybindingDispatcher = (props: WorkbenchKeybindingDispatcherProps) => {\n const { workbench, disabled, commandIds } = props;\n const [registrations, setRegistrations] = useState(() =>\n createWorkbenchHotkeyRegistrations({ workbench, disabled, commandIds }),\n );\n useEffect(() => {\n const refresh = () => setRegistrations(createWorkbenchHotkeyRegistrations({ workbench, disabled, commandIds }));\n const subscriptions = [workbench.keybindings.store, workbench.context.store, workbench.commands.store].map(\n (store) => store.subscribe(refresh),\n );\n refresh();\n return () => {\n for (const unsubscribe of subscriptions) unsubscribe();\n };\n }, [workbench, disabled, commandIds]);\n useTanStackWorkbenchHotkeys(registrations);\n\n return null;\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\";\nimport { runUserAction } from \"../../core/shared/run-user-action\";\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 runUserAction(workbench, action.title, () => workbench.commands.executeCommand(action.commandId, action.args));\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 type { WorkbenchWidgetPlacement } from \"../../core\";\n\nexport const retainViewPlacements = (\n previous: WorkbenchWidgetPlacement[],\n current: WorkbenchWidgetPlacement[],\n registeredViews: ReadonlySet<string>,\n) => {\n const retained = new Map(\n previous\n .filter((placement) => placement.viewId && registeredViews.has(placement.viewId))\n .map((placement) => [placement.widgetId, placement]),\n );\n for (const placement of current) {\n const existing = previous.find((entry) => entry.widgetId === placement.widgetId);\n const unchanged =\n existing &&\n Object.keys(existing).length === Object.keys(placement).length &&\n Object.entries(placement).every(([key, value]) => Reflect.get(existing, key) === value);\n retained.set(placement.widgetId, unchanged ? existing : placement);\n }\n const next = [...retained.values()];\n return next.length === previous.length && next.every((placement, index) => placement === previous[index])\n ? previous\n : next;\n};\n","import { useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchWidgetPlacement } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { retainViewPlacements } from \"./retained-view-placements\";\n\n// A region owns live views; the active location owns only their visibility.\n// Keep this cache in React so it is discarded with the workbench, never persisted.\nexport const useRetainedViewPlacements = (workbench: WorkbenchCore, current: WorkbenchWidgetPlacement[]) => {\n const views = useWorkbenchStore(workbench.views.store, (state) => state.views);\n const [previous, setPrevious] = useState(current);\n const placements = retainViewPlacements(previous, current, new Set(Object.keys(views)));\n if (previous !== placements) setPrevious(placements);\n return placements;\n};\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\n data-workbench-view={view?.id ?? placement.contributionId}\n data-workbench-renderer={renderer ? \"mounted\" : \"missing\"}\n display=\"flex\"\n flex=\"1 0 auto\"\n minW=\"0\"\n minH=\"0\"\n w=\"full\"\n overflow=\"hidden\"\n >\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 { useRetainedViewPlacements } from \"./use-retained-view-placements\";\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 const placements = useRetainedViewPlacements(\n workbench,\n viewId ? [{ widgetId: viewId, contributionId: viewId, viewId, closable: false }] : [],\n );\n return (\n <Box h=\"full\" w=\"full\" minH=\"0\" position=\"relative\" display={viewId ? \"block\" : \"none\"}>\n {placements.map((placement) => (\n <Box\n key={placement.widgetId}\n position=\"absolute\"\n inset=\"0\"\n display={placement.viewId === viewId ? \"flex\" : \"none\"}\n inert={placement.viewId !== viewId}\n >\n <WorkbenchWidgetHost workbench={workbench} region={region} placement={placement} />\n </Box>\n ))}\n </Box>\n );\n};\n","export const movePanelHost = (host: HTMLElement, slot: HTMLElement | null | undefined) => {\n if (!slot || host.parentNode === slot) return;\n if (slot.moveBefore && host.isConnected && slot.isConnected) slot.moveBefore(host, null);\n // Temporary WebKit fallback: ADR 0053 explains the iframe reload limitation.\n else slot.appendChild(host);\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 WorkbenchPanelMenuSize {\n has: boolean;\n open: boolean;\n collapsible: boolean;\n minSize: number;\n}\n\nexport const PANEL_CONTENT_MIN_SIZE_PX = 120;\nexport const PANEL_MENU_RESIZE_HANDLE_SIZE_PX = 1;\n// Narrow panels give their full width to content, even when a menu's minimum width would fit.\nexport const PANEL_MENU_NARROW_PANEL_MAX_PX = 580;\n\nexport const getWorkbenchPanelMenuAttachment = (panelWidth: number, menus: readonly WorkbenchPanelMenuSize[]) => {\n if (panelWidth === 0) return menus.map((menu) => menu.has && (menu.open || !menu.collapsible));\n\n const attached = new Set(menus.filter((menu) => menu.has && !menu.collapsible));\n const narrow = panelWidth <= PANEL_MENU_NARROW_PANEL_MAX_PX;\n const fits = (menu: WorkbenchPanelMenuSize) => {\n const sizes = [...attached, menu];\n return (\n !narrow &&\n panelWidth >=\n PANEL_CONTENT_MIN_SIZE_PX +\n sizes.reduce((total, candidate) => total + candidate.minSize + PANEL_MENU_RESIZE_HANDLE_SIZE_PX, 0)\n );\n };\n\n // Keep content usable and reserve fixed menus before optional menus, in side order.\n for (const menu of menus) {\n if (menu.has && menu.open && !attached.has(menu) && fits(menu)) attached.add(menu);\n }\n return menus.map((menu) => menu.has && (attached.has(menu) || fits(menu)));\n};\n","import { useEffect, useState } from \"react\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchModePanelAvailable,\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 { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { resolvePanelCollapsible } from \"../workbench/workbench-panel-state\";\nimport { getWorkbenchPanelMenuAttachment } 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\nexport interface WorkbenchPanelMenuView {\n region: WorkbenchPanelMenuRegion;\n side: WorkbenchPanelMenuSide;\n label: string;\n title: string;\n icon: string;\n has: boolean;\n collapsed: 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): WorkbenchPanelMenuView => {\n const region = workbenchPanelMenuRegions[panel][side];\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const panelAvailable = isWorkbenchModePanelAvailable(modeId ? workbench.modes.getMode(modeId) : undefined, panel);\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: panelAvailable && (regionState.widgets.length > 0 || Boolean(workbench.layout.getPlaceholder(region))),\n collapsed: !open && collapsible,\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\nexport const useWorkbenchPanelMenus = (workbench: WorkbenchCore, panel: WorkbenchPanelRegion) => {\n const width = useWorkbenchPanelWidth(panel);\n const views = [useWorkbenchPanelMenu(workbench, panel, \"left\"), useWorkbenchPanelMenu(workbench, panel, \"right\")];\n const attachment = getWorkbenchPanelMenuAttachment(\n width,\n views.map((view) => ({\n has: view.has,\n open: !view.collapsed,\n collapsible: view.collapsible,\n minSize: view.size.minPx,\n })),\n );\n return views.map((view, index) => ({\n ...view,\n canAttach: attachment[index],\n collapsed: view.collapsed || !attachment[index],\n }));\n};\n\nexport const useWorkbenchPanelMenusPresent = (workbench: WorkbenchCore, panel: WorkbenchPanelRegion) => {\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\");\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\");\n return left.has || right.has;\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","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, getTabVisibilityStore, useTabVisibilityStore } from \"@pstdio/ui\";\nimport { useEffect } from \"react\";\nimport {\n getActiveWorkbenchLocationPanel,\n getAnchorResource,\n headerTrailingMenuPath,\n isWorkbenchPanelPlacementVisible,\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion,\n type WorkbenchWidgetPlacement,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { resolveResourcePreview } from \"../../core/registries/resources/resource-preview\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { useWorkbenchPanelMenus } from \"../panel-menu/use-panel-menu\";\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 if (placement.resource && !workbench.resources.preview.resolve(placement.resource)) return false;\n const widget = workbench.layout.getWidget(placement.contributionId);\n return widget\n ? isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n ignoreResourceLocation: region === \"side\" || region === \"secondary\",\n location: getActiveWorkbenchLocationPanel(workbench.layout.getLayout()),\n })\n : false;\n};\n\nexport const useWorkbenchRegionTabsState = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n visibilityStorageKey?: string,\n hasPanelMenuOpeners = false,\n) => {\n const changes = useWorkbenchStore(workbench.resources.preview.store, (state) => state.changes);\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 storageKey = visibilityStorageKey ?? `${workbench.layout.getPersistenceScope() ?? \"unscoped\"}/${region}`;\n const tabStore = useTabVisibilityStore(storageKey, (state) => state);\n useEffect(() => {\n const subscription = workbench.onDidResetLayout(() => getTabVisibilityStore(storageKey).getState().reset());\n return () => subscription.dispose();\n }, [workbench, storageKey]);\n const regionState = layoutState.layout.regions[region];\n const subPanelPlacements = regionState.widgets.filter(\n (placement) =>\n placement.role === \"sub-panel\" &&\n (!placement.resource || Boolean(resolveResourcePreview(placement.resource, changes))) &&\n 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) =>\n (visibleSubPanelIds.has(placement.widgetId) || placement.role === \"location\") &&\n (!placement.resource || Boolean(resolveResourcePreview(placement.resource, changes))),\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 hasMovedPlacement = visiblePlacements.some(\n (placement) => layoutState.widgets[placement.contributionId]?.region !== region,\n );\n const showTabs =\n !suppressesSidenavTabStrip(region, visiblePlacements) &&\n ((hasPanelMenuOpeners && visiblePlacements.length > 0) ||\n hasMovedPlacement ||\n shouldShowRegionTabs(visiblePlacements, {\n alwaysShowTabs: workbench.layout.getRegionSettings(region)?.alwaysShowTabs,\n }));\n const hasActions =\n leadingItems.length > 0 || (eligibleSubPanels.length > 0 && (visiblePlacements.length === 0 || showTabs));\n const hasTrailingActions =\n region === \"main\" &&\n listWorkbenchMenuItemsFromState({ itemsByPath, commands, contextValues }, headerTrailingMenuPath(region), {\n resource: getAnchorResource(layoutState.layout, \"primary\"),\n }).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 hasTrailingActions,\n };\n};\n\nexport const useWorkbenchPanelRegionTabsState = (\n workbench: WorkbenchCore,\n region: WorkbenchPanelRegion,\n visibilityStorageKey?: string,\n) => {\n const [left, right] = useWorkbenchPanelMenus(workbench, region);\n const hasPanelMenus = [left, right].some((menu) => menu.has && menu.collapsed);\n const tabs = useWorkbenchRegionTabsState(workbench, region, visibilityStorageKey, hasPanelMenus);\n return { ...tabs, hasPanelMenus };\n};\n\nexport const useWorkbenchPanelHeaderVisible = (workbench: WorkbenchCore, region: WorkbenchPanelRegion) => {\n const { showTabs, hasActions, hasTrailingActions, hasPanelMenus } = useWorkbenchPanelRegionTabsState(\n workbench,\n region,\n );\n return shouldShowPanelHeader({\n hasTabs: showTabs,\n hasHeaderActions: hasActions || hasTrailingActions,\n hasPanelMenus,\n });\n};\n\nexport const useWorkbenchRegionTabsVisible = (workbench: WorkbenchCore, region: WorkbenchPanelRegion) => {\n const { showTabs, hasActions } = useWorkbenchPanelRegionTabsState(workbench, region);\n return showTabs || hasActions;\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { createContext, type ReactNode, useContext, useLayoutEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { WorkbenchCore, WorkbenchPanelRegion, WorkbenchWidgetPlacement } from \"../../core\";\nimport { workbenchPanelRegions } from \"../../core\";\nimport { resolveResourcePreview } from \"../../core/registries/resources/resource-preview\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { movePanelHost } from \"./move-panel-host\";\nimport { isPlacementEligibleForRegion } from \"./region-tabs-visibility-hooks\";\nimport { useRetainedViewPlacements } from \"./use-retained-view-placements\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\ninterface PanelViewSlots {\n register(region: WorkbenchPanelRegion, node: HTMLDivElement | null): void;\n}\nconst PanelViewContext = createContext<PanelViewSlots | null>(null);\nexport const usePanelViewSlot = (region: WorkbenchPanelRegion | undefined) => {\n const registry = useContext(PanelViewContext);\n const [node, setNode] = useState<HTMLDivElement | null>(null);\n useLayoutEffect(() => {\n if (!region) return;\n registry?.register(region, node);\n return () => registry?.register(region, null);\n }, [registry, region, node]);\n return { enabled: Boolean(registry && region), ref: setNode };\n};\n\nconst PanelViewPortal = (props: {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n slot?: HTMLElement;\n region?: WorkbenchPanelRegion;\n active: boolean;\n}) => {\n const { workbench, placement, slot, region, active } = props;\n // The portal target is stable for the life of a view. Only its DOM parent moves.\n const [host] = useState(() => {\n const node = document.createElement(\"div\");\n node.style.display = \"contents\";\n return node;\n });\n useLayoutEffect(() => {\n // Hidden retained views stay connected to keep their iframe browsing context.\n movePanelHost(host, slot);\n }, [host, slot]);\n useLayoutEffect(() => () => host.remove(), [host]);\n const activate = () => {\n if (workbench.layout.getLayout().activeWidgetId !== placement.widgetId)\n workbench.layout.activatePanel(placement.widgetId);\n };\n return createPortal(\n <Box\n data-workbench-instance={placement.widgetId}\n display={active ? \"flex\" : \"none\"}\n inert={!active}\n flex=\"1 0 auto\"\n minW=\"0\"\n minH=\"0\"\n w=\"full\"\n overflow=\"hidden\"\n onPointerDown={activate}\n onFocusCapture={(event) => {\n if (!event.currentTarget.contains(event.target)) return;\n activate();\n if (region) workbench.focus.setActiveRegion(region);\n }}\n >\n <WorkbenchWidgetHost workbench={workbench} placement={placement} region={region} />\n </Box>,\n host,\n );\n};\n\nexport const WorkbenchPanelViewHosts = (props: { workbench: WorkbenchCore; children: ReactNode }) => {\n const { workbench, children } = props;\n const changes = useWorkbenchStore(workbench.resources.preview.store, (state) => state.changes);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n useWorkbenchStore(workbench.pages.store, (state) => state.location);\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n const [slots, setSlots] = useState<Partial<Record<WorkbenchPanelRegion, HTMLDivElement>>>({});\n const [registry] = useState<PanelViewSlots>(() => ({\n register: (region, node) =>\n setSlots((previous) => {\n if (previous[region] === (node ?? undefined)) return previous;\n return { ...previous, [region]: node ?? undefined };\n }),\n }));\n const current = workbenchPanelRegions.flatMap((region) => {\n const state = layout.regions[region];\n const eligible = state.widgets.filter(\n (p) =>\n (!p.resource || Boolean(resolveResourcePreview(p.resource, changes))) &&\n isPlacementEligibleForRegion(workbench, region, p),\n );\n const selected = eligible.find((p) => p.widgetId === state.activeWidgetId) ?? eligible[0];\n return eligible.filter((p) => p.widgetId === selected?.widgetId || p.mountStrategy === \"keep-mounted\");\n });\n const retained = useRetainedViewPlacements(workbench, current);\n return (\n <PanelViewContext value={registry}>\n {children}\n {retained.map((placement) => {\n const region = workbenchPanelRegions.find((id) =>\n layout.regions[id].widgets.some((p) => p.widgetId === placement.widgetId),\n );\n const peers = region\n ? layout.regions[region].widgets.filter(\n (p) =>\n (!p.resource || Boolean(resolveResourcePreview(p.resource, changes))) &&\n isPlacementEligibleForRegion(workbench, region, p),\n )\n : [];\n const selected = region\n ? (peers.find((p) => p.widgetId === layout.regions[region].activeWidgetId) ?? peers[0])\n : undefined;\n return (\n <PanelViewPortal\n key={placement.widgetId}\n workbench={workbench}\n placement={placement}\n region={region}\n slot={region ? slots[region] : undefined}\n active={selected?.widgetId === placement.widgetId}\n />\n );\n })}\n </PanelViewContext>\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 type WorkbenchPanelRegion,\n workbenchPanelMenuRegions,\n workbenchPanelRegions,\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 { usePanelViewSlot } from \"./panel-view-hosts\";\nimport { useRetainedViewPlacements } from \"./use-retained-view-placements\";\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 visible: boolean;\n order: number;\n}\n\nconst WorkbenchRegionPlacement = (props: WorkbenchRegionPlacementProps) => {\n const { workbench, placement, activeWidgetId, globalActiveWidgetId, region, visible, order } = 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={visible ? renderState.display : \"none\"}\n inert={!visible || (!renderState.active && !additive)}\n order={order}\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 panelRegion = workbenchPanelRegions.includes(region as WorkbenchPanelRegion)\n ? (region as WorkbenchPanelRegion)\n : undefined;\n const panelSlot = usePanelViewSlot(panelRegion);\n const sharedViews = panelSlot.enabled;\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 const retainedPlacements = useRetainedViewPlacements(\n workbench,\n chrome !== undefined || sharedViews ? [] : renderedPlacements,\n );\n const visibleIds = new Set(renderedPlacements.map((entry) => entry.widgetId));\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 display={chrome === false ? \"none\" : \"flex\"}\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 <ModeChromeView workbench={workbench} region={region} viewId={chrome || undefined} />\n <ScrollArea\n display={chrome ? \"none\" : \"flex\"}\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 && placement ? (\n <WorkbenchWidgetHost workbench={workbench} placement={placement} widget={placeholder} />\n ) : null}\n {sharedViews ? (\n <Box ref={panelSlot.ref} display=\"flex\" flexDirection=\"column\" minH=\"full\" w=\"full\" minW=\"0\" />\n ) : null}\n {retainedPlacements.map((renderedPlacement) => (\n <WorkbenchRegionPlacement\n key={renderedPlacement.widgetId}\n visible={!chrome && visibleIds.has(renderedPlacement.widgetId)}\n order={renderedPlacements.findIndex((entry) => entry.widgetId === renderedPlacement.widgetId)}\n workbench={workbench}\n placement={renderedPlacement}\n activeWidgetId={activePlacement?.widgetId}\n globalActiveWidgetId={globalActiveWidgetId}\n region={region}\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 { Menu, Portal, VisuallyHidden } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ResourceMenuItems } from \"@pstdio/ui\";\nimport { useId, useRef } from \"react\";\nimport type { WorkbenchCore, WorkbenchTabMenuGroup, WorkbenchWidgetPlacement } from \"../../core\";\nimport { findPlacementByWidgetId } from \"../../core/registries/layout/layout-operations\";\nimport { useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { createWorkbenchResourceMenu } from \"../menus/resource-menu\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { getPanelLabel } from \"./panel-widget-open\";\n\ninterface RegionTabMenuProps {\n anchor: { x: number; y: number; width: number; height: number; triggerId: string };\n label: string;\n open: boolean;\n setOpen(open: boolean): void;\n groups: readonly WorkbenchTabMenuGroup[];\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}\nexport const RegionTabMenu = (props: RegionTabMenuProps) => {\n const { anchor, label, open, setOpen, groups, placement, workbench } = props;\n const labelId = useId();\n useWorkbenchResourceActionResolver(workbench);\n const pending = useRef<ResourceContextAction | null>(null);\n const currentRegion = findPlacementByWidgetId(workbench.layout.getLayout(), placement.widgetId)?.regionId;\n const destinations = workbench.getPanelDestinations(placement.widgetId).filter((region) => region !== currentRegion);\n const pin = () => {\n const pinned = placement.tabRetention === \"preview\";\n if (placement.placementIdentity) workbench.pinPlacement(placement.placementIdentity, pinned);\n else workbench.layout.updatePanel(placement.widgetId, { strategy: { kind: pinned ? \"persistent\" : \"preview\" } });\n };\n const close = () => {\n if (placement.placementIdentity) workbench.closePlacement(placement.placementIdentity);\n else workbench.layout.closePanel(placement.widgetId);\n };\n const tabAction = (key: string, title: string, icon: string, onClick: () => void) => ({\n key,\n label: title,\n icon: <WorkbenchIcon name={icon} size={14} />,\n group: { id: \"tab\", label: \"Tab\" },\n onClick,\n });\n const actions = [\n ...createWorkbenchResourceMenu(workbench, placement.resource, { menu: groups }),\n ...(placement.tabRetention\n ? [tabAction(\"pin\", placement.tabRetention === \"preview\" ? \"Pin tab\" : \"Unpin tab\", \"pin\", pin)]\n : []),\n ...destinations.map((region) =>\n tabAction(`move-${region}`, `Move to ${getPanelLabel(region)}`, \"ArrowRight\", () =>\n workbench.movePanel(placement.widgetId, region),\n ),\n ),\n ...(placement.closable ? [tabAction(\"close\", \"Close tab\", \"x\", close)] : []),\n tabAction(\"reset-layout\", \"Reset layout\", \"RotateCcw\", () => workbench.resetLayout()),\n ];\n return (\n <Menu.Root\n ids={{ trigger: anchor.triggerId }}\n open={open}\n onOpenChange={(details) => setOpen(details.open)}\n onExitComplete={() => {\n const action = pending.current;\n pending.current = null;\n void action?.onClick?.();\n }}\n positioning={{ placement: \"bottom-start\", getAnchorRect: () => anchor, offset: { mainAxis: 0 } }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-labelledby={labelId}>\n <VisuallyHidden id={labelId}>{label} context menu</VisuallyHidden>\n {open ? (\n <ResourceMenuItems\n actions={actions}\n onSelect={(action) => {\n pending.current = action;\n }}\n />\n ) : null}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport {\n DndContext,\n type DragOverEvent,\n DragOverlay,\n MouseSensor,\n pointerWithin,\n TouchSensor,\n useDroppable,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { createContext, type ReactNode, useContext, useId, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchPanelRegion, WorkbenchTabPosition } from \"../../core\";\nimport { findPlacementByWidgetId } from \"../../core/registries/layout/layout-operations\";\n\nimport { planTrayDrop } from \"../../core/registries/layout/tray-tabs\";\n\ninterface TabDrop {\n region: WorkbenchPanelRegion;\n position: WorkbenchTabPosition;\n widgetId?: string;\n edge?: \"before\" | \"after\";\n}\nconst TabDragContext = createContext<{ activeId?: string; drop?: TabDrop; destinations?: WorkbenchPanelRegion[] }>({});\nexport const useTabDrag = () => useContext(TabDragContext);\n\nexport const WorkbenchTabDragProvider = (props: { workbench: WorkbenchCore; children: ReactNode }) => {\n const { workbench, children } = props;\n const [activeId, setActiveId] = useState<string>();\n const [drop, setDrop] = useState<TabDrop>();\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, { activationConstraint: { distance: 5 } }),\n );\n const finish = () => {\n setActiveId(undefined);\n setDrop(undefined);\n };\n const resolveDrop = (event: DragOverEvent) => {\n const data = event.over?.data.current;\n if (\n !data?.region ||\n event.over?.id === event.active.id ||\n !workbench.getPanelDestinations(String(event.active.id)).includes(data.region)\n )\n return undefined;\n const layout = workbench.layout.getLayout();\n const placement = findPlacementByWidgetId(layout, String(event.active.id))?.placement;\n if (!placement) return undefined;\n const region = data.region as WorkbenchPanelRegion;\n const widgets = layout.regions[region].widgets;\n const widgetId = data.widgetId as string | undefined;\n const rect = event.active.rect.current.translated;\n const before = rect && event.over && rect.left + rect.width / 2 < event.over.rect.left + event.over.rect.width / 2;\n let position: WorkbenchTabPosition = \"end\";\n if (widgetId) position = before ? { beforeWidgetId: widgetId } : { afterWidgetId: widgetId };\n const plan = planTrayDrop(widgets, placement, position);\n const index = plan.widgets.findIndex((widget) => widget.widgetId === placement.widgetId);\n const next = plan.widgets[index + 1];\n const previous = plan.widgets[index - 1];\n return {\n region,\n position,\n widgetId: next?.widgetId ?? previous?.widgetId,\n edge: next ? \"before\" : \"after\",\n } satisfies TabDrop;\n };\n const placement = activeId ? findPlacementByWidgetId(workbench.layout.getLayout(), activeId)?.placement : undefined;\n return (\n <TabDragContext value={{ activeId, drop, destinations: activeId ? workbench.getPanelDestinations(activeId) : [] }}>\n <DndContext\n sensors={sensors}\n collisionDetection={(args) => {\n const pointer = args.pointerCoordinates;\n const panel = pointer\n ? document\n .elementFromPoint(pointer.x, pointer.y)\n ?.closest(\"[data-workbench-panel]\")\n ?.getAttribute(\"data-workbench-panel\")\n : undefined;\n return pointerWithin(args)\n .filter((collision) => collision.data?.droppableContainer.data.current?.region === panel)\n .sort((a, b) => {\n const area = (id: typeof a.id) => {\n const rect = args.droppableRects.get(id);\n return rect ? rect.width * rect.height : Infinity;\n };\n return area(a.id) - area(b.id);\n });\n }}\n onDragStart={(event) => setActiveId(String(event.active.id))}\n onDragOver={(event) => setDrop(resolveDrop(event))}\n onDragMove={(event) => setDrop(resolveDrop(event))}\n onDragCancel={finish}\n onDragEnd={(event) => {\n const target = resolveDrop(event);\n finish();\n if (target) workbench.movePanel(String(event.active.id), target.region, target.position);\n }}\n >\n {children}\n <Box asChild pointerEvents=\"none\">\n <DragOverlay dropAnimation={null}>\n {placement ? (\n <Box layerStyle=\"floatingBar\" textStyle=\"label/XS/medium\">\n {placement.title ?? placement.resource?.label}\n </Box>\n ) : null}\n </DragOverlay>\n </Box>\n </DndContext>\n </TabDragContext>\n );\n};\n\nexport const WorkbenchTabDropTarget = (props: { region: WorkbenchPanelRegion }) => {\n const { region } = props;\n const { activeId, drop, destinations } = useTabDrag();\n const id = useId();\n const allowed = Boolean(activeId && destinations?.includes(region));\n const { setNodeRef } = useDroppable({ id, data: { region }, disabled: !allowed });\n const highlighted = allowed && drop?.region === region;\n return (\n <Box\n ref={setNodeRef}\n data-workbench-tab-drop={region}\n data-drop-active={highlighted || undefined}\n position=\"absolute\"\n inset=\"0\"\n zIndex=\"dropdown\"\n // Keep tab drag events out of iframes, including release over a disallowed\n // destination. Native file drops still reach the guest outside tab drags.\n pointerEvents={activeId ? \"auto\" : \"none\"}\n visibility={activeId ? \"visible\" : \"hidden\"}\n layerStyle={highlighted ? \"tabDropZone\" : undefined}\n />\n );\n};\n","import { useDraggable, useDroppable } from \"@dnd-kit/core\";\nimport { type KeyboardEvent, type MouseEvent, type PointerEvent, useEffect, useRef, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchPanelRegion, WorkbenchWidgetPlacement } from \"../../core\";\nimport { usePlacementTab } from \"../shared/use-placement-tab\";\nimport { useTabDrag } from \"./tab-drag-context\";\n\nexport interface WorkbenchRegionTabProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId?: string;\n disabled?: boolean;\n nextWidgetId?: string;\n previousWidgetId?: string;\n sortable?: boolean;\n region?: WorkbenchPanelRegion;\n}\nexport const useRegionTab = (props: WorkbenchRegionTabProps) => {\n const { workbench, placement, disabled = false, sortable = false, region, nextWidgetId, previousWidgetId } = props;\n const snapshot = usePlacementTab(placement, workbench);\n const [open, setOpen] = useState(false);\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0, triggerId: \"\" });\n const hold = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const start = useRef({ x: 0, y: 0 });\n const suppressClick = useRef(false);\n const drag = useDraggable({ id: placement.widgetId, disabled: disabled || !sortable });\n const target = useDroppable({\n id: placement.widgetId,\n disabled: !region,\n data: { region, widgetId: placement.widgetId },\n });\n const context = useTabDrag();\n const clearHold = () => clearTimeout(hold.current);\n useEffect(() => () => clearTimeout(hold.current), []);\n const show = (element: HTMLElement) => {\n if (disabled) return;\n const rect = element.getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height, triggerId: element.id });\n setOpen(true);\n };\n const onContextMenu = (event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n show(event.currentTarget);\n };\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === \"ContextMenu\" || (event.shiftKey && event.key === \"F10\")) {\n event.preventDefault();\n show(event.currentTarget);\n return;\n }\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 const onPointerDown = (event: PointerEvent<HTMLElement>) => {\n suppressClick.current = false;\n if (event.pointerType !== \"touch\") return;\n const element = event.currentTarget;\n start.current = { x: event.clientX, y: event.clientY };\n hold.current = setTimeout(() => {\n suppressClick.current = true;\n show(element);\n }, 550);\n };\n const onPointerMove = (event: PointerEvent<HTMLElement>) => {\n if (Math.hypot(event.clientX - start.current.x, event.clientY - start.current.y) > 5) clearHold();\n };\n const onClick = (event: MouseEvent<HTMLElement>) => {\n if (suppressClick.current) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n return {\n snapshot,\n open,\n setOpen,\n anchor,\n drag,\n target,\n drop: context.drop?.widgetId === placement.widgetId ? context.drop : undefined,\n onContextMenu,\n onKeyDown,\n onPointerDown,\n onPointerMove,\n onPointerUp: clearHold,\n onPointerCancel: clearHold,\n onClick,\n };\n};\n","import { Box, CloseButton, Tabs, Text, useTabsContext } from \"@chakra-ui/react\";\nimport { DropIndicator, Tooltip } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { RegionTabMenu } from \"./region-tab-menu\";\nimport { resolveTabIconName } from \"./region-tabs-visibility\";\nimport { useRegionTab, type WorkbenchRegionTabProps } from \"./use-region-tab\";\n\nconst TabIcon = (props: { indicator?: import(\"../../core\").WorkbenchTabSnapshot[\"indicator\"]; icon?: string }) => {\n const { indicator, icon } = props;\n if (indicator)\n return (\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 );\n return icon ? <WorkbenchIcon name={icon} size={12} flexShrink={0} color=\"fg.muted\" /> : null;\n};\n\nexport const WorkbenchRegionTab = (props: WorkbenchRegionTabProps) => {\n const { workbench, placement, activeWidgetId, disabled = false, sortable = false } = props;\n const tabs = useTabsContext();\n const behavior = useRegionTab(props);\n const { snapshot, drag, target, drop } = behavior;\n const label = snapshot.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 =\n snapshot.icon ??\n resolveTabIconName(\n placement,\n widget,\n placement.resource\n ? workbench.resources.getKind(placement.resource.type, placement.resource.extensionId)?.icon\n : undefined,\n );\n const active = placement.widgetId === activeWidgetId;\n return (\n <>\n <Box\n ref={(node: HTMLDivElement | null) => {\n drag.setNodeRef(node);\n target.setNodeRef(node);\n }}\n position=\"relative\"\n data-workbench-tab={placement.widgetId}\n minW={placement.closable ? \"tab-min\" : undefined}\n flex={placement.closable ? \"1 1 0\" : \"0 0 auto\"}\n maxW=\"fit-content\"\n className=\"group\"\n >\n <Tooltip content={label} openDelay={300} closeDelay={150} positioning={{ placement: \"bottom\" }}>\n <Tabs.Trigger\n id={tabs.getTriggerProps({ value: placement.widgetId }).id}\n value={placement.widgetId}\n aria-labelledby={labelId}\n disabled={disabled}\n aria-haspopup=\"menu\"\n aria-expanded={behavior.open}\n aria-keyshortcuts={sortable ? \"Alt+ArrowLeft Alt+ArrowRight Shift+F10\" : \"Shift+F10\"}\n fontStyle={placement.tabRetention === \"preview\" ? \"italic\" : undefined}\n opacity={drag.isDragging ? 0.5 : undefined}\n w=\"full\"\n {...drag.listeners}\n onKeyDown={behavior.onKeyDown}\n onContextMenu={behavior.onContextMenu}\n onPointerDown={behavior.onPointerDown}\n onPointerMove={behavior.onPointerMove}\n onPointerUp={behavior.onPointerUp}\n onPointerCancel={behavior.onPointerCancel}\n onClickCapture={behavior.onClick}\n >\n <TabIcon indicator={snapshot.indicator} icon={icon} />\n <Text as=\"span\" id={labelId} data-tab-label>\n {label}\n </Text>\n {placement.closable ? (\n <CloseButton\n as=\"span\"\n role=\"button\"\n aria-label={`Close ${label}`}\n aria-disabled={disabled}\n data-tab-close\n size=\"2xs\"\n boxSize=\"4\"\n minW=\"4\"\n p=\"0\"\n borderRadius=\"2xs\"\n flexShrink={0}\n me=\"-1\"\n opacity={active ? 1 : 0}\n pointerEvents={active ? \"auto\" : \"none\"}\n color=\"fg.muted\"\n _groupHover={{ opacity: 1, pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: 1, pointerEvents: \"auto\" }}\n onPointerDown={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.stopPropagation()}\n onTouchStart={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n if (disabled) return;\n if (placement.placementIdentity) workbench.closePlacement(placement.placementIdentity);\n else workbench.layout.closePanel(placement.widgetId);\n }}\n />\n ) : null}\n </Tabs.Trigger>\n </Tooltip>\n <TabDropIndicator drop={drop} />\n </Box>\n <RegionTabMenu\n anchor={behavior.anchor}\n label={label}\n open={behavior.open}\n setOpen={behavior.setOpen}\n groups={snapshot.menu ?? []}\n placement={placement}\n workbench={workbench}\n />\n </>\n );\n};\n\nconst TabDropIndicator = (props: { drop: ReturnType<typeof useRegionTab>[\"drop\"] }) => {\n const { drop } = props;\n if (!drop) return null;\n return (\n <DropIndicator\n orientation=\"vertical\"\n left={drop.edge === \"before\" ? \"0\" : undefined}\n right={drop.edge === \"after\" ? \"0\" : undefined}\n />\n );\n};\n","import { Tabs } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchPanelRegion, WorkbenchWidgetPlacement } from \"../../core\";\nimport { WorkbenchRegionTab } from \"./workbench-region-tab\";\n\ninterface RegionTabListProps {\n activeWidgetId?: string;\n disabled: boolean;\n panelRegion?: WorkbenchPanelRegion;\n placements: WorkbenchWidgetPlacement[];\n workbench: WorkbenchCore;\n}\nexport const RegionTabList = (props: RegionTabListProps) => {\n const { activeWidgetId, disabled, panelRegion, placements, workbench } = props;\n return (\n <Tabs.List h=\"full\" minH=\"0\" w=\"full\" alignItems=\"center\" gap=\"2xs\" justifyContent=\"flex-start\">\n {placements.map((placement, index) => (\n <WorkbenchRegionTab\n key={placement.widgetId}\n workbench={workbench}\n placement={placement}\n activeWidgetId={activeWidgetId}\n disabled={disabled}\n region={panelRegion}\n sortable={Boolean(panelRegion && workbench.getPanelDestinations(placement.widgetId).length)}\n previousWidgetId={placements[index - 1]?.widgetId}\n nextWidgetId={placements[index + 1]?.widgetId}\n />\n ))}\n </Tabs.List>\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 {\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion as WorkbenchRegionId,\n type WorkbenchWidgetPlacement,\n workbenchPanelRegions,\n} from \"../../core\";\nimport { runUserAction } from \"../../core/shared/run-user-action\";\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 { RegionTabList } from \"./region-tab-list\";\nimport { resolveDisplayedActiveWidgetId, resolveTabIconName, toTabKey } from \"./region-tabs-visibility\";\nimport { useWorkbenchPanelRegionTabsState, useWorkbenchRegionTabsState } from \"./region-tabs-visibility-hooks\";\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\n ? workbench.resources.getKind(placement.resource.type, placement.resource.extensionId)?.icon\n : undefined,\n );\n return iconName ? <WorkbenchIcon name={iconName} size={14} /> : undefined;\n};\ninterface WorkbenchRegionTabsContentProps extends WorkbenchRegionTabsProps {\n state: ReturnType<typeof useWorkbenchRegionTabsState>;\n}\n\nconst WorkbenchRegionTabsContent = (props: WorkbenchRegionTabsContentProps) => {\n const { workbench, region, state } = 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 } = state;\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 const activeWidgetId = resolveDisplayedActiveWidgetId(visiblePlacements, regionState.activeWidgetId);\n useEffect(() => {\n if (!activeWidgetId) return;\n viewport?.querySelector<HTMLElement>('[role=\"tab\"][aria-selected=\"true\"]')?.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\",\n });\n }, [activeWidgetId, viewport]);\n if (!showTabs && !hasActions) return null;\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 runUserAction(workbench, item.label, () => workbench.commands.executeCommand(item.commandId, item.args));\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\" 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 <HStack flex=\"1\" h=\"full\" minW=\"0\" gap=\"2xs\">\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=\"0 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 The content minimum overrides Zag's inline style; see ADR 0049. */}\n <ScrollArea\n viewportRef={setViewport}\n size=\"xs\"\n h=\"full\"\n maxW=\"full\"\n minW=\"0\"\n showVerticalScrollbar={false}\n showHorizontalScrollbar\n contentProps={{ h: \"full\", w: \"full\", minW: \"0!\" }}\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 <RegionTabList\n disabled={false}\n workbench={workbench}\n placements={visiblePlacements}\n activeWidgetId={activeWidgetId}\n panelRegion={panelRegion}\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 {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\ninterface WorkbenchPanelRegionTabsProps extends WorkbenchRegionTabsProps {\n region: WorkbenchPanelRegion;\n}\n\nconst WorkbenchPanelRegionTabs = (props: WorkbenchPanelRegionTabsProps) => {\n const { workbench, region, visibilityStorageKey } = props;\n const state = useWorkbenchPanelRegionTabsState(workbench, region, visibilityStorageKey);\n return <WorkbenchRegionTabsContent {...props} state={state} />;\n};\n\nconst WorkbenchOtherRegionTabs = (props: WorkbenchRegionTabsProps) => {\n const { workbench, region, visibilityStorageKey } = props;\n const state = useWorkbenchRegionTabsState(workbench, region, visibilityStorageKey);\n return <WorkbenchRegionTabsContent {...props} state={state} />;\n};\n\nexport const WorkbenchRegionTabs = (props: WorkbenchRegionTabsProps) => {\n const { region } = props;\n const panel = workbenchPanelRegions.find((panelRegion) => panelRegion === region);\n return panel ? <WorkbenchPanelRegionTabs {...props} region={panel} /> : <WorkbenchOtherRegionTabs {...props} />;\n};\n","import { Button } from \"@chakra-ui/react\";\nimport { AlertMessage } from \"@pstdio/ui\";\n\ninterface RendererReadNoticeProps {\n error: string;\n retry(): void;\n}\n\nexport const RendererReadNotice = (props: RendererReadNoticeProps) => {\n const { error, retry } = props;\n return (\n <AlertMessage\n status=\"error\"\n title=\"Could not load this view\"\n endElement={\n <Button size=\"xs\" variant=\"outline\" onClick={retry}>\n Retry\n </Button>\n }\n >\n {error}\n </AlertMessage>\n );\n};\n","import { resolvePageParams } from \"pstdio-api-contracts\";\nimport type { WorkbenchCore, WorkbenchPanelInstance } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport const usePageParams = (workbench: WorkbenchCore, placement?: WorkbenchPanelInstance) => {\n const state = useWorkbenchStore(workbench.pages.store, (state) => state);\n const owner = placement?.placementIdentity;\n if (owner?.kind !== \"page\" || owner.pageId !== state.activePageId) return undefined;\n return resolvePageParams(state.pages[owner.pageId]?.params, state.location?.params);\n};\n","// The read owner keeps the canonical value and a journal of local edits. Reads\n// begun before an edit or while saving cannot replace its preview.\nexport const createRendererMutations = <T>() => {\n let baseline: T | undefined;\n let revision = 0;\n const journal: Array<{ update: (value: T) => T; saving: boolean }> = [];\n const pending = () => journal.some((operation) => operation.saving);\n const value = () =>\n baseline === undefined ? undefined : journal.reduce<T>((value, operation) => operation.update(value), baseline!);\n return {\n value,\n pending,\n revision: () => revision,\n accept(next: T, readRevision: number) {\n if (readRevision !== revision || pending()) return false;\n baseline = next;\n journal.length = 0;\n return true;\n },\n begin(update: (value: T) => T) {\n revision += 1;\n const operation = { update, saving: true };\n journal.push(operation);\n return operation;\n },\n finish(operation: (typeof journal)[number], success: boolean) {\n revision += 1;\n operation.saving = false;\n if (!success) journal.splice(journal.indexOf(operation), 1);\n },\n };\n};\n\n/** Connection changes rebind transport reads, not local mutation ownership. */\nexport const createRendererMutationBinding = <T>() => {\n let key: string | undefined;\n let owner = createRendererMutations<T>();\n return {\n bind(ownerKey: string, queryKey: string) {\n const next = JSON.stringify([ownerKey, queryKey]);\n if (key !== undefined && key !== next) owner = createRendererMutations<T>();\n key = next;\n return owner;\n },\n };\n};\n","import { createContext, type ReactNode, useContext } from \"react\";\n\nconst WorkbenchConnectionContext = createContext(true);\n\ninterface WorkbenchConnectionProviderProps {\n connected: boolean;\n children: ReactNode;\n}\n\n// The host owns transport health. Views retain their data until that connection recovers.\nexport const WorkbenchConnectionProvider = (props: WorkbenchConnectionProviderProps) => {\n const { connected, children } = props;\n return <WorkbenchConnectionContext value={connected}>{children}</WorkbenchConnectionContext>;\n};\n\nexport const useWorkbenchConnection = () => useContext(WorkbenchConnectionContext);\n","import { PstdioConnectionError } from \"@pstdio/sdk/client\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { Disposable, RendererReadBinding, WorkbenchCore } from \"../../core\";\nimport { createRendererMutationBinding } from \"./renderer-mutations\";\nimport { useWorkbenchConnection } from \"./workbench-connection-provider\";\n\ninterface RendererReadOptions<T> {\n workbench: WorkbenchCore;\n ownerKey: string;\n /** What the read is about. A new key drops the old value and loads again. */\n queryKey: string;\n /**\n * What the read is asked for, such as a view's filter. A new key loads again but keeps the\n * current value on screen until the new one arrives.\n */\n refreshKey?: string;\n load(signal: AbortSignal, publish: (value: T) => void): Promise<T> | T;\n subscribe(listener: () => void): Disposable | (() => void);\n}\n\ninterface ReadState<T> {\n queryKey: string;\n value?: T;\n loading: boolean;\n error?: Error;\n}\n\nexport const useRendererRead = <T>(options: RendererReadOptions<T>) => {\n const { workbench, ownerKey, queryKey, refreshKey } = options;\n const connected = useWorkbenchConnection();\n const [state, setState] = useState<ReadState<T>>({ queryKey, loading: true });\n const retryRef = useRef<(() => Promise<void>) | undefined>(undefined);\n const refreshRef = useRef<(() => Promise<void>) | undefined>(undefined);\n const lastRefreshKey = useRef(refreshKey);\n const callbacks = useRef(options);\n const mutationBinding = useRef(createRendererMutationBinding<T>());\n const mutations = useRef(mutationBinding.current.bind(ownerKey, queryKey));\n const saveQueue = useRef(Promise.resolve());\n useEffect(() => {\n callbacks.current = options;\n });\n // Query identity controls ownership. Rendering a new callback must not start another read.\n // biome-ignore lint/correctness/useExhaustiveDependencies: A connection change reloads views after missed sync events, including local contributions.\n useEffect(() => {\n const binding: RendererReadBinding = workbench.views.reads.bind(ownerKey);\n const owner = mutationBinding.current.bind(ownerKey, queryKey);\n mutations.current = owner;\n const handlers = {\n onProgress: (value: T) => {\n // Background refreshes keep the complete snapshot until its replacement is ready.\n setState((previous) => {\n if (previous.queryKey === queryKey && previous.value !== undefined && !previous.loading) return previous;\n return { queryKey, value, loading: true };\n });\n },\n onValue: (value: T) => {\n setState({ queryKey, value: owner.value() ?? value, loading: false });\n },\n onError: (error: unknown) => {\n const connectionLost = error instanceof PstdioConnectionError;\n const readError = error instanceof Error ? error : new Error(String(error));\n setState((previous) => ({\n queryKey,\n value: previous.queryKey === queryKey ? previous.value : undefined,\n loading: false,\n // Retain a loaded snapshot after a dropped response. An initial failure\n // still needs Retry if the host's sync connection has not been lost.\n error:\n connectionLost && previous.queryKey === queryKey && previous.value !== undefined ? undefined : readError,\n }));\n },\n };\n const refresh = (reason?: \"retry\") => {\n if (owner.pending()) return Promise.resolve();\n const current = callbacks.current;\n const revision = owner.revision();\n return binding.request(\n {\n ...handlers,\n // A changed read scope cancels older work without clearing the mounted view's snapshot.\n queryKey: JSON.stringify([queryKey, current.refreshKey]),\n load: current.load,\n onValue: (value: T) => {\n if (owner.accept(value, revision)) handlers.onValue(value);\n },\n },\n reason,\n );\n };\n refreshRef.current = () => refresh();\n // This read already uses the current refresh key, so the refresh effect below must not repeat it.\n lastRefreshKey.current = callbacks.current.refreshKey;\n retryRef.current = () => {\n setState((previous) => ({ ...previous, loading: previous.value === undefined, error: undefined }));\n return refresh(\"retry\");\n };\n refresh();\n const subscription = callbacks.current.subscribe(refresh);\n return () => {\n retryRef.current = undefined;\n refreshRef.current = undefined;\n binding.dispose();\n if (typeof subscription === \"function\") subscription();\n else subscription.dispose();\n };\n }, [workbench, ownerKey, queryKey, connected]);\n useEffect(() => {\n if (lastRefreshKey.current === refreshKey) return;\n lastRefreshKey.current = refreshKey;\n refreshRef.current?.();\n }, [refreshKey]);\n const current = state.queryKey === queryKey ? state : { queryKey, loading: true };\n const connectionLost = current.error instanceof PstdioConnectionError && !connected;\n return {\n ...current,\n error: connectionLost ? undefined : current.error?.message,\n loading: current.loading || (connectionLost && current.value === undefined),\n retry: () => retryRef.current?.() ?? Promise.resolve(),\n mutate: (update: (value: T) => T, save: () => Promise<void> | void) => {\n const owner = mutations.current;\n const operation = owner.begin(update);\n const publish = () => setState((previous) => ({ ...previous, value: owner.value() }));\n publish();\n const pending = saveQueue.current.then(save);\n saveQueue.current = pending.catch(() => undefined);\n return pending\n .then(\n () => owner.finish(operation, true),\n (error: unknown) => {\n owner.finish(operation, false);\n throw error;\n },\n )\n .finally(() => {\n if (mutations.current !== owner) return;\n publish();\n if (!owner.pending()) void refreshRef.current?.();\n });\n },\n };\n};\n","import { createMenuItemGroups, createMenuItems, withLeadingSeparator } from \"../../menus/command-menu-items\";\nexport const createTreeMenuItems = createMenuItems;\n\nimport { HStack, Text } from \"@chakra-ui/react\";\nimport { PaletteShortcut, type TreeListAction, type TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type {\n ContextKeyValue,\n MenuPath,\n RegisteredCommand,\n TreeAction,\n WorkbenchCommandExecutionContext,\n WorkbenchCoreContributionContext,\n} from \"../../../core\";\nimport { matchesContextExpression, scopeWorkbenchResourceContextValues } from \"../../../core\";\nimport { reportUserActionError } from \"../../../core/shared/run-user-action\";\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 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 context?.resource\n ? scopeWorkbenchResourceContextValues(workbench.context.snapshot(), context.resource)\n : workbench.context.snapshot();\n\nconst isRegisteredCommandVisible = (\n record: RegisteredCommand,\n args: unknown,\n contextValues: Record<string, ContextKeyValue>,\n context?: WorkbenchCommandExecutionContext,\n) => {\n if (!matchesContextExpression(contextValues, record.command.when)) return false;\n return record.handler.isVisible?.(args, context) !== 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 if (onCommandError) onCommandError(error);\n else reportUserActionError(workbench, action.label ?? \"Action\", 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 context?: WorkbenchCommandExecutionContext,\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, context) : true;\n};\n\nconst isTreeActionEnabled = (\n workbench: WorkbenchCoreContributionContext,\n action: TreeAction,\n context?: WorkbenchCommandExecutionContext,\n) => {\n if (action.disabled) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n return record ? workbench.commands.isCommandEnabled(record.command.id, action.args, context) : true;\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, context)) 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, context);\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: {\n command: {\n id: action.commandId ?? action.id,\n label,\n params: action.params,\n resourceMutation: action.resourceMutation ?? record?.command.resourceMutation,\n },\n },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => executeTreeAction({ action, args, context, workbench }),\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 ? createMenuItemGroups({ ...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 (\n !isTreeActionVisible(workbench, action, contextValues, context) ||\n !isTreeActionEnabled(workbench, action, context)\n )\n 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: {\n command: {\n id: action.commandId ?? action.id,\n label,\n params: action.params,\n resourceMutation: action.resourceMutation ?? record?.command.resourceMutation,\n },\n },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => executeTreeAction({ action, args, context, workbench }),\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 type { WorkbenchCore } from \"../../../core\";\nimport { reportUserActionError } from \"../../../core/shared/run-user-action\";\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 executeOptionCommand={(id, args, signal) =>\n workbench.commands.executeCommand(id, args, { ...request?.request.context, signal })\n }\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 onRunError={(label, error) => reportUserActionError(workbench, label, error)}\n onClose={onClose}\n onRun={async ({ args }) => {\n await request?.run(args);\n }}\n />\n );\n};\n","import { Button, HStack, Text } from \"@chakra-ui/react\";\nimport { type ReactNode, useState } from \"react\";\nimport type { WorkbenchCommandExecutionContext, WorkbenchCore } from \"../../core\";\nimport type { ViewToolbarAction } from \"../../core/registries/renderers/view-toolbar-action\";\nimport type { CommandParamFieldRenderer } from \"../command-palette/command-params-dialog\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { createTreeContextMenuItems, type TreeActionParamsRequest } from \"./tree/tree-actions\";\nimport { TreeParamsDialog } from \"./tree/tree-params-dialog\";\n\ninterface ViewToolbarActionsProps {\n workbench: WorkbenchCore;\n actions?: ViewToolbarAction[];\n context?: WorkbenchCommandExecutionContext;\n renderParamField?: CommandParamFieldRenderer;\n}\n\nexport const ViewToolbarActions = (props: ViewToolbarActionsProps) => {\n const { workbench, actions, context, renderParamField } = props;\n const [request, setRequest] = useState<TreeActionParamsRequest | null>(null);\n const [error, setError] = useState<string>();\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const items = createTreeContextMenuItems({\n workbench,\n actions,\n context,\n onRequestParams: setRequest,\n onCommandError: (error) => setError(error instanceof Error ? error.message : String(error)),\n });\n return (\n <>\n <HStack gap=\"xs\">\n {items.map((item) => (\n <Button\n key={item.id}\n size=\"sm\"\n variant={\n actions?.find((action) => action.id === item.id)?.presentation === \"primary\" ? \"primary\" : \"outline\"\n }\n disabled={item.disabled}\n onClick={() => {\n setError(undefined);\n item.onAction?.();\n }}\n >\n {item.icon as ReactNode}\n {item.label}\n </Button>\n ))}\n {error ? (\n <Text role=\"alert\" textStyle=\"paragraph/XS/regular\" color=\"fg.error\">\n {error}\n </Text>\n ) : null}\n </HStack>\n <TreeParamsDialog\n workbench={workbench}\n request={request}\n renderParamField={renderParamField}\n onClose={() => setRequest(null)}\n />\n </>\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 DataTableRendererContribution,\n DataTableRendererQueryResult,\n DataTableRendererRow,\n DataTableRendererSelectionAction,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nexport const resolveDataTableRendererQueryKey = (\n contribution: Pick<DataTableRendererContribution, \"id\" | \"contextKeys\">,\n resource: WorkbenchPanelInstance[\"resource\"],\n modeId: string | undefined,\n contextValues: Record<string, unknown>,\n) =>\n JSON.stringify([\n contribution.id,\n resourceKey(resource),\n modeId,\n contribution.contextKeys?.map((key) => contextValues[key] ?? null),\n ]);\n\nexport const resolveDataTableRendererColumns = (\n result: DataTableRendererQueryResult,\n contributionColumns?: DataTableRendererColumn[],\n) => {\n if (result.columns) return result.columns;\n if (contributionColumns) return contributionColumns;\n const firstRow = result.rows[0];\n return firstRow ? Object.keys(firstRow.values).map((id): DataTableRendererColumn => ({ id })) : [];\n};\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 = (\n contribution: Pick<DataTableRendererContribution, \"id\" | \"contextKeys\">,\n placement: WorkbenchPanelInstance,\n contextValues: Record<string, unknown>,\n) => {\n const identity = resourceKey(placement.resource) ?? placement.resource?.id ?? \"unscoped\";\n const scope = contribution.contextKeys?.map((key) => contextValues[key] ?? null);\n const key = `pstdio:workbench:dataTableRenderer:${contribution.id}:${placement.instanceId}:${identity}`;\n return scope?.length ? `${key}:${JSON.stringify(scope)}` : key;\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"@pstdio/ui\";\nimport {\n DataTable,\n type DataTableColumnRenderer,\n type DataTableColumnStat,\n type DataTableRowAction,\n DataTableSkeleton,\n type RowData,\n useDataTableViewStore,\n} from \"@pstdio/ui/data-table\";\nimport { type ReactNode, useSyncExternalStore } from \"react\";\nimport type {\n DataTableRendererQueryResult,\n RegisteredDataTableRendererContribution,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers, rendererReadKey } from \"../../../core\";\nimport { runUserAction } from \"../../../core/shared/run-user-action\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { RendererReadNotice } from \"../renderer-read-notice\";\nimport { usePageParams } from \"../use-page-params\";\nimport { useRendererRead } from \"../use-renderer-read\";\nimport { ViewToolbarActions } from \"../view-toolbar-actions\";\nimport {\n buildDataTableRendererData,\n resolveDataTableRendererColumns,\n resolveDataTableRendererQueryKey,\n resolveDataTableRendererResourceActions,\n resolveDataTableRendererSelectionActions,\n resolveDataTableRendererStorageKey,\n} from \"./data-table-view-model\";\n\ninterface WorkbenchDataTableViewProps {\n workbench: WorkbenchCore;\n renderParamField?: CommandParamFieldRenderer;\n contribution: RegisteredDataTableRendererContribution;\n placement: WorkbenchPanelInstance;\n}\nconst initialResult: DataTableRendererQueryResult = { rows: [] };\nconst noopSubscribe = () => () => {};\n\nconst DataTableViewFrame = (props: { children: ReactNode }) => (\n <Box position=\"relative\" h=\"full\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {/* The table owns scrolling, so its rows must not grow the outer region. */}\n <Stack position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n {props.children}\n </Stack>\n </Box>\n);\n\nexport const WorkbenchDataTableView = (props: WorkbenchDataTableViewProps) => {\n const { workbench, contribution, placement } = props;\n const pageParams = usePageParams(workbench, placement);\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const storageKey = resolveDataTableRendererStorageKey(contribution, placement, contextValues);\n const provider = contribution.viewsProvider;\n const viewsSource = useSyncExternalStore(\n provider?.subscribe ?? noopSubscribe,\n provider?.getSnapshot ?? (() => undefined),\n provider?.getSnapshot ?? (() => undefined),\n );\n const filter = useDataTableViewStore(storageKey, (state) => state.filter, contribution);\n const sorts = useDataTableViewStore(storageKey, (state) => state.sorts, contribution);\n const settings = useDataTableViewStore(storageKey, (state) => state.settings, contribution);\n const read = useRendererRead({\n workbench,\n ownerKey: rendererReadKey(placement),\n queryKey: resolveDataTableRendererQueryKey(\n contribution,\n placement.resource,\n workbench.modes.getActiveModeId(),\n contextValues,\n ),\n // Filter and sorts can narrow what the query returns. Display settings and search never run it again.\n refreshKey: JSON.stringify([filter, sorts, pageParams]),\n load: (signal) =>\n contribution.executeQuery(\n {\n pageParams,\n resource: placement.resource,\n modeId: workbench.modes.getActiveModeId(),\n filter,\n sorts,\n settings,\n },\n signal,\n ),\n subscribe: (refresh) => {\n const subscription = contribution.subscribe?.(refresh);\n const events = getWorkbenchRenderers(workbench).onDidRefreshDataTableRenderer((event) => {\n if (event.dataTableRendererId === contribution.id) refresh();\n });\n return () => {\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n events.dispose();\n };\n },\n });\n const result = read.value ?? initialResult;\n const loading = read.loading && !read.value;\n const columns = resolveDataTableRendererColumns(result, contribution.columns);\n const model = buildDataTableRendererData(result.rows, columns);\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 runUserAction(workbench, action.label, () => action.run(row));\n },\n }));\n const selectionActions = resolveDataTableRendererSelectionActions(\n (contribution.selectionActions ?? []).map((action) => ({\n ...action,\n run: (rows) => runUserAction(workbench, action.label, () => action.run(rows)),\n })),\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 runUserAction(workbench, \"Open row\", () => contribution.onRowActivate!(row));\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 && !settings.hiddenColumns.includes(column.id))\n .map((column) => ({ id: column.id, label: column.label ?? column.id }));\n return (\n <DataTableViewFrame>\n <DataTableSkeleton columns={skeletonColumns.length > 0 ? skeletonColumns : undefined} />\n </DataTableViewFrame>\n );\n }\n if (!read.value && read.error) return <RendererReadNotice error={read.error} retry={read.retry} />;\n if (provider && !viewsSource)\n return (\n <DataTableViewFrame>\n <DataTableSkeleton />\n </DataTableViewFrame>\n );\n\n return (\n <DataTableViewFrame>\n {read.error ? <RendererReadNotice error={read.error} retry={read.retry} /> : null}\n <DataTable\n itemLabel={\n contribution.resourceKind ? workbench.resources.getKind(contribution.resourceKind)?.label : undefined\n }\n toolbarActions={\n <ViewToolbarActions\n workbench={workbench}\n actions={contribution.toolbarActions}\n context={{ resource: placement.resource }}\n renderParamField={props.renderParamField}\n />\n }\n contentPlaceholder={\n result.rows.length === 0 ? (\n <EmptyState\n h=\"full\"\n title={contribution.emptyTitle ?? \"No rows\"}\n description={contribution.emptyDescription}\n />\n ) : undefined\n }\n data={model.data}\n getRowId={(data) => model.rowByData.get(data)?.id ?? \"\"}\n toolbarStorageKey={storageKey}\n viewsSource={viewsSource}\n defaultSettings={contribution.defaultSettings}\n defaultFilter={contribution.defaultFilter}\n defaultSorts={contribution.defaultSorts}\n defaultViews={contribution.defaultViews}\n defaultActiveViewId={contribution.defaultActiveViewId}\n columnTypes={Object.fromEntries(columns.flatMap((column) => (column.type ? [[column.id, column.type]] : [])))}\n filterableColumns={columns.filter((column) => column.filterable !== false).map((column) => column.id)}\n groupableColumns={columns.filter((column) => column.groupable).map((column) => column.id)}\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 </DataTableViewFrame>\n );\n};\n","import type { ParamEditorProps } from \"@pstdio/ui/param-editor\";\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/param-editor\";\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 { Badge, Box } from \"@chakra-ui/react\";\nimport type { PageLocation, PageRef } from \"@pstdio/sdk/extensions\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { 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 { createWorkbenchResourceActions } from \"../../menus/resource-actions\";\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 targetPanelResource = (target: NavigationTarget | undefined) => {\n if (!target) return undefined;\n const targets = target.kind === \"compound\" ? target.targets : [target];\n return [...targets].reverse().find((candidate) => candidate.kind === \"panel\")?.resource;\n};\nconst resolveTreeNodeResourceKey = (node: TreeNode) => {\n const resource = node.resource ?? targetPanelResource(node.target);\n return resource ? resourceKey(resource) : 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);\nconst pageRefsEqual = (left: PageRef, right: PageRef) => left.id === right.id && left.extensionId === right.extensionId;\nconst targetMatchesPage = (target: NavigationTarget | undefined, activePage: PageRef, activeResource?: ResourceRef) => {\n // A resource panel owns its selection; its containing page can host other open resources.\n if (!target || targetPanelResource(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 const activeResourceKeys = getWorkbenchSelectionResourceKeys(activeResource);\n // Parent trees retain their document selection, but only the active context owns selection.\n const declaredSelection = activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => {\n if (!node.selected) return false;\n const nodeResourceKey = resolveTreeNodeResourceKey(node);\n if (!nodeResourceKey && !node.target) return true;\n if (nodeResourceKey && activeResourceKeys.includes(nodeResourceKey)) return true;\n return activeLocation ? targetMatchesPage(node.target, activeLocation.page, activeResource) : !activeResource;\n })\n .map((node) => node.id),\n );\n if (declaredSelection) return declaredSelection;\n const selectedNode = selectedNodeId ? findSectionNode(sections, selectedNodeId, childrenByNodeId) : undefined;\n const 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, activeResource)) {\n return selectedNodeId;\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 (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 resolveTreeNodeEndContent = (node: TreeNode, resource: ResourceRef | undefined) => {\n if (node.endContent !== undefined) return node.endContent as ReactNode;\n if (node.badge) {\n return (\n <Badge size=\"sm\" variant=\"subtle\" colorPalette={node.badge.color ?? \"gray\"} flexShrink={0}>\n {node.badge.label}\n </Badge>\n );\n }\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 customPath = node.contextMenuPath ?? node.menuPath;\n const resourcePath = resource ? resourceContextMenuPath(resource.type) : undefined;\n const sharedActions = resource\n ? createWorkbenchResourceActions(context.workbench, resource, {\n onRequestParams: context.onRequestParams,\n onCommandError: context.onCommandError,\n }).map((action) => ({\n id: action.key,\n label: action.label,\n commandId: action.commandId,\n icon: action.icon,\n group: action.group,\n disabled: action.isDisabled,\n endContent: action.endContent,\n separatorBefore: action.separatorBefore,\n onAction: () => {\n void action.onClick?.();\n },\n }))\n : [];\n const contextMenuItems = [\n ...sharedActions,\n ...createTreeContextMenuItems({\n actions: node.contextMenuActions,\n menuPath: customPath?.join(\"/\") !== resourcePath?.join(\"/\") ? customPath : undefined,\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n ];\n const menuItems = node.menuPath && contextMenuItems.length > 0 ? contextMenuItems : 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 tooltip: node.tooltip,\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),\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 menuLabel: section.menuLabel,\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 { TreeListSection } from \"@pstdio/ui\";\nimport type { TreeViewSection } from \"../../../core\";\n\nexport const pinnedOnlyNodeIds = (sections: readonly TreeViewSection[]) =>\n new Set(sections.flatMap((section) => section.nodes.filter((node) => node.pinnedOnly).map((node) => node.id)));\n\n// Pinned-only rows render where users pinned them (header or footer), never in the body.\nexport const withoutPinnedOnlyRows = (sections: TreeListSection[], ids: ReadonlySet<string>) => {\n if (ids.size === 0) return sections;\n return sections.flatMap((section) => {\n const nodes = section.nodes.filter((node) => !ids.has(node.id));\n if (nodes.length === section.nodes.length) return [section];\n return nodes.length > 0 ? [{ ...section, nodes }] : [];\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, position?: \"before\" | \"after\" | \"inside\") => 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 && sections.length === 0) return null;\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 { getWorkbenchRenderers, type NavigationTarget, type WorkbenchCore } 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\nexport const createToggleTreeSection =\n (workbench: WorkbenchCore, treeViewId: string, expandedIds: string[]) => (sectionId: string) => {\n getWorkbenchRenderers(workbench).setSectionExpanded(treeViewId, sectionId, !expandedIds.includes(sectionId));\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, TreeViewSection } from \"../../../core\";\nimport {\n type ResourcePreviewChanges,\n resolveResourcePreview,\n} from \"../../../core/registries/resources/resource-preview\";\n\nexport const previewTreeResources = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n changes: ResourcePreviewChanges,\n) => {\n const previewNodes = (nodes: TreeNode[]): TreeNode[] =>\n nodes.flatMap((node) => {\n const resource = node.resource ? resolveResourcePreview(node.resource, changes) : undefined;\n if (node.resource && !resource) return [];\n const children = childrenByNodeId[node.id] ?? node.children;\n return [\n {\n ...node,\n label: resource && resource !== node.resource ? (resource.label ?? node.label) : node.label,\n ...(resource ? { resource } : {}),\n ...(children ? { children: previewNodes(children) } : {}),\n },\n ];\n });\n return sections.map((section) => ({ ...section, nodes: previewNodes(section.nodes) }));\n};\n","import type { TreeNode, TreeQueryContext, TreeRendererRegistry, TreeViewSection } from \"../../../core\";\nimport { settleReadBatch } from \"../../../core/registries/views/settle-read-batch\";\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 queue = listTreeNodes(data);\n while (queue.length) {\n ctx.signal?.throwIfAborted();\n const batch: TreeNode[] = [];\n while (queue.length && batch.length < 4) {\n const node = queue.shift()!;\n if (!expanded.has(node.id) || visited.has(node.id)) continue;\n visited.add(node.id);\n batch.push(node);\n }\n const children = await settleReadBatch(\n batch.map((node) => async (signal: AbortSignal) => {\n const children = node.children ?? (await trees.getChildren(treeId, node, { ...ctx, signal }));\n if (!node.children) childrenByNodeId[node.id] = children;\n return children;\n }),\n ctx.signal,\n );\n queue.push(...children.flat());\n }\n return childrenByNodeId;\n};\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 onProgress?: (data: LoadedTreeData) => void,\n): Promise<LoadedTreeData | null> => {\n if (!trees.getTreeRenderer(treeId)) return null;\n let available: LoadedTreeData = { header: [], body: [], footer: [] };\n const loadSlot = async (slot: keyof LoadedTreeData, signal: AbortSignal) => {\n const context = {\n ...ctx,\n signal,\n onProgress: (sections: TreeViewSection[]) => {\n if (signal.aborted) return;\n available = { ...available, [slot]: sections };\n onProgress?.(available);\n },\n };\n const loaders = { header: trees.getHeader, body: trees.getBody, footer: trees.getFooter };\n const sections = await loaders[slot](treeId, context);\n available = { ...available, [slot]: sections };\n return sections;\n };\n\n try {\n const [header, body, footer] = await settleReadBatch(\n [\n (signal) => loadSlot(\"header\", signal),\n (signal) => loadSlot(\"body\", signal),\n (signal) => loadSlot(\"footer\", signal),\n ],\n ctx.signal,\n );\n return { header, body, footer };\n } catch (error) {\n if (isUnregisteredTreeError(trees, treeId, error)) return null;\n throw error;\n }\n};\n","import type {\n RegisteredTreeRendererContribution,\n ResourceRef,\n TreeNode,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { getNavigationTreeNodeSource } from \"../../../core/registries/navigation/navigation-tree-node-source\";\nimport { reportUserActionError } from \"../../../core/shared/run-user-action\";\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 canMoveTreeNode = (\n context: Pick<MoveTreeNodeContext, \"sections\" | \"childrenByNodeId\">,\n sourceId: string,\n targetId?: string,\n) => {\n const source = findNodeInSections(context.sections, sourceId, context.childrenByNodeId);\n const target = targetId ? findNodeInSections(context.sections, targetId, context.childrenByNodeId) : undefined;\n if (!source?.canDrag || sourceId === targetId || (targetId && !target?.canDrop)) return false;\n if (!target) return true;\n // Resource ownership is independent of the scope used for arranging navigation rows.\n const sourceOwner = getNavigationTreeNodeSource(source);\n const targetOwner = getNavigationTreeNodeSource(target);\n return (\n sourceOwner?.contribution === targetOwner?.contribution && sourceOwner?.registryToken === targetOwner?.registryToken\n );\n};\n\nexport const createMoveTreeNode = (context: MoveTreeNodeContext) =>\n context.renderer.moveNode\n ? async (sourceNodeId: string, targetNodeId?: string, position?: \"before\" | \"after\" | \"inside\") => {\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 || !canMoveTreeNode(context, sourceNodeId, targetNodeId)) return false;\n const trees = getWorkbenchRenderers(context.workbench);\n try {\n await context.renderer.moveNode?.(source, target, {\n resource: context.resource,\n viewId: context.viewId,\n position,\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 return true;\n } catch (error) {\n if (context.onError) context.onError(error);\n else reportUserActionError(context.workbench, \"Move\", error);\n return false;\n }\n }\n : undefined;\n","import type { TreeNode, TreeViewSection } from \"../../../core\";\n\nexport interface TreeMoveIntent {\n sourceId: string;\n targetId: string;\n position: \"before\" | \"after\" | \"inside\";\n}\n\nexport const previewTreeMove = (\n sections: TreeViewSection[],\n children: Record<string, TreeNode[]>,\n move: TreeMoveIntent,\n) => {\n const childrenOf = (node: TreeNode) => node.children ?? children[node.id];\n const find = (nodes: TreeNode[], id: string): TreeNode | undefined => {\n for (const node of nodes) {\n if (node.id === id) return node;\n const child = find(childrenOf(node) ?? [], id);\n if (child) return child;\n }\n };\n const roots = sections.flatMap((section) => section.nodes);\n const source = find(roots, move.sourceId);\n const target = find(roots, move.targetId);\n if (!source?.canDrag || !target?.canDrop || source === target) return sections;\n if (find(childrenOf(source) ?? [], target.id)) return sections;\n if (move.position === \"inside\" && !childrenOf(target) && !target.collapsible) return sections;\n const materialize = (node: TreeNode): TreeNode => {\n const descendants = childrenOf(node);\n return descendants ? { ...node, children: descendants.map(materialize) } : node;\n };\n const moving = materialize(source);\n const update = (nodes: TreeNode[]): TreeNode[] =>\n nodes.flatMap((node) => {\n if (node.id === source.id) return [];\n const descendants = childrenOf(node);\n const next = descendants ? { ...node, children: update(descendants) } : node;\n if (node.id !== target.id) return [next];\n if (move.position === \"inside\") return [{ ...next, children: [...(next.children ?? []), moving] }];\n return move.position === \"before\" ? [moving, next] : [next, moving];\n });\n return sections.map((section) => ({ ...section, nodes: update(section.nodes) }));\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport type { TreeNode, TreeViewSection } from \"../../../core\";\nimport { previewTreeMove, type TreeMoveIntent } from \"./tree-move-preview\";\n\ninterface PendingMove {\n token: symbol;\n intent: TreeMoveIntent;\n savedAfter?: TreeViewSection[];\n}\n\n// Keep only unconfirmed intent. The renderer owns persistence and every completed read replaces the preview.\nexport const useTreeMovement = (input: {\n scope: string;\n body: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n persist?: (sourceId: string, targetId?: string, position?: TreeMoveIntent[\"position\"]) => Promise<boolean>;\n canMove(sourceId: string, targetId?: string): boolean;\n refresh(): void;\n}) => {\n const { scope, body, childrenByNodeId, persist, canMove, refresh } = input;\n const [pending, setPending] = useState<{ scope: string; moves: PendingMove[] }>({ scope, moves: [] });\n const latestBody = useRef(body);\n latestBody.current = body;\n const queue = useRef(Promise.resolve());\n useEffect(() => {\n setPending((current) => {\n if (current.scope !== scope) return { scope, moves: [] };\n const moves = current.moves.filter((move) => !move.savedAfter || move.savedAfter === body);\n return moves.length === current.moves.length ? current : { scope, moves };\n });\n }, [scope, body]);\n const moves = pending.scope === scope ? pending.moves : [];\n const preview = moves.reduce((sections, move) => previewTreeMove(sections, childrenByNodeId, move.intent), body);\n return {\n body: preview,\n // Preview parents contain their loaded children, so the adapter must not append the old children again.\n childrenByNodeId: moves.length ? {} : childrenByNodeId,\n moveNode: persist\n ? (sourceId: string, targetId?: string, position: TreeMoveIntent[\"position\"] = \"inside\") => {\n if (!canMove(sourceId, targetId)) return;\n if (!targetId || previewTreeMove(preview, childrenByNodeId, { sourceId, targetId, position }) === preview) {\n queue.current = queue.current.then(async () => {\n await persist(sourceId, targetId, position);\n refresh();\n });\n return;\n }\n const intent = { sourceId, targetId, position };\n const token = Symbol(\"tree move\");\n setPending((current) => ({\n scope,\n moves: [...(current.scope === scope ? current.moves : []), { token, intent }],\n }));\n // Serial writes preserve the user's order when several drops happen before the first save finishes.\n queue.current = queue.current.then(async () => {\n const saved = await persist(sourceId, targetId, position);\n setPending((current) =>\n current.scope !== scope\n ? current\n : {\n scope,\n moves: saved\n ? current.moves.map((move) =>\n move.token === token ? { ...move, savedAfter: latestBody.current } : move,\n )\n : current.moves.filter((move) => move.token !== token),\n },\n );\n // Retry cancels an older read so it cannot replace the preview with a pre-save snapshot.\n refresh();\n });\n }\n : undefined,\n };\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { useEffect, useState, useSyncExternalStore } from \"react\";\nimport type { WorkbenchPanelInstance } from \"../../../core\";\nimport { getWorkbenchRenderers, type ResourceRef, type TreeNode, type WorkbenchCore } from \"../../../core\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { usePageParams } from \"../use-page-params\";\nimport { useRendererRead } from \"../use-renderer-read\";\nimport { previewTreeResources } from \"./tree-resource-preview\";\nimport {\n expandDefaultTreeSections,\n type LoadedTreeData,\n loadExpandedTreeChildren,\n loadTreeData,\n} from \"./tree-view-load\";\nimport { canMoveTreeNode, createMoveTreeNode } from \"./tree-view-move\";\nimport { useTreeMovement } from \"./use-tree-movement\";\n\nexport const useTreeData = (\n workbench: WorkbenchCore,\n treeViewId: string,\n resource?: ResourceRef,\n viewId?: string,\n filter?: string,\n ownerKey = JSON.stringify([\"tree\", treeViewId, viewId]),\n onMoveError?: (error: unknown) => void,\n placement?: WorkbenchPanelInstance,\n) => {\n const pageParams = usePageParams(workbench, placement);\n const trees = getWorkbenchRenderers(workbench);\n const changes = useWorkbenchStore(workbench.resources.preview.store, (state) => state.changes);\n useWorkbenchStore(trees.treeStore, (state) => state.refreshKeysByTreeId[treeViewId]);\n const mode = useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n const location = useWorkbenchStore(workbench.pages.store, (state) => state.location);\n const project = useWorkbenchStore(workbench.pages.store, (state) => state.projectId);\n const activePage = useWorkbenchStore(workbench.pages.store, (state) => state.activePageId);\n const getPageOwner = () => (activePage ? workbench.navigationTrees.resolveOwner(\"page\", activePage) : undefined);\n const pageOwner = useSyncExternalStore(\n (listener) => {\n const subscription = workbench.navigationTrees.onDidChange(listener);\n return () => subscription.dispose();\n },\n getPageOwner,\n getPageOwner,\n );\n // Navigation keeps mounted rows. A new search clears results that no longer match its query.\n const queryKey = JSON.stringify([treeViewId, viewId, project, filter, pageParams]);\n const refreshKey = JSON.stringify(\n trees.getTreeRenderer(treeViewId)?.getReadKey?.({ resource, viewId, filter, pageParams }) ?? [\n resourceKey(resource),\n resourceKey(location?.resource),\n mode,\n pageOwner,\n ],\n );\n const childrenKey = JSON.stringify([queryKey, refreshKey]);\n // Defaults apply when the view starts. Refreshes keep sections the user collapsed.\n useEffect(() => expandDefaultTreeSections(getWorkbenchRenderers(workbench), treeViewId), [workbench, treeViewId]);\n const [expandedChildren, setExpandedChildren] = useState<{ queryKey: string; byNodeId: Record<string, TreeNode[]> }>({\n queryKey: childrenKey,\n byNodeId: {},\n });\n const read = useRendererRead<LoadedTreeData & { children: Record<string, TreeNode[]> }>({\n workbench,\n ownerKey,\n queryKey,\n refreshKey,\n load: async (signal, publish) => {\n const ctx = { resource, viewId, filter, signal, pageParams };\n const data = await loadTreeData(trees, treeViewId, ctx, (available) => publish({ ...available, children: {} }));\n signal.throwIfAborted();\n const children =\n data && trees.getTreeRenderer(treeViewId)\n ? await loadExpandedTreeChildren(trees, treeViewId, data, trees.getTreeState(treeViewId).expandedNodeIds, ctx)\n : {};\n return { header: data?.header ?? [], body: data?.body ?? [], footer: data?.footer ?? [], children };\n },\n subscribe: (refresh) =>\n trees.onDidRefresh((event) => {\n if (event.treeId === treeViewId) refresh();\n }),\n });\n // Expanding one folder loads only its children. The next full read already includes them.\n const loadChildren = (node: TreeNode) => {\n void trees.getChildren(treeViewId, node, { resource, viewId, filter, pageParams }).then((children) => {\n setExpandedChildren((current) => ({\n queryKey: childrenKey,\n byNodeId: { ...(current.queryKey === childrenKey ? current.byNodeId : {}), [node.id]: children },\n }));\n });\n };\n useEffect(() => {\n const subscription = workbench.resources.preview.subscribeRefresh(async (resource) => {\n const contains = (nodes: TreeNode[]): boolean =>\n nodes.some(\n (node) =>\n (node.resource && resourceKey(node.resource) === resourceKey(resource)) ||\n contains(read.value?.children[node.id] ?? node.children ?? []),\n );\n if (read.value?.body.some((section) => contains(section.nodes))) await read.retry();\n });\n return () => subscription.dispose();\n }, [workbench, read.retry, read.value]);\n const savedBody = read.value?.body ?? [];\n const savedChildren = {\n ...(expandedChildren.queryKey === childrenKey ? expandedChildren.byNodeId : {}),\n ...read.value?.children,\n };\n const renderer = trees.getTreeRenderer(treeViewId);\n const movement = useTreeMovement({\n scope: queryKey,\n body: savedBody,\n childrenByNodeId: savedChildren,\n canMove: (sourceId, targetId) =>\n canMoveTreeNode({ sections: savedBody, childrenByNodeId: savedChildren }, sourceId, targetId),\n persist: renderer\n ? createMoveTreeNode({\n workbench,\n renderer,\n resource,\n viewId,\n sections: savedBody,\n childrenByNodeId: savedChildren,\n onError: onMoveError,\n })\n : undefined,\n refresh: read.retry,\n });\n return {\n ...movement,\n body: previewTreeResources(movement.body, movement.childrenByNodeId, changes),\n childrenByNodeId: {},\n header: read.value?.header ?? [],\n footer: read.value?.footer ?? [],\n loadChildren,\n error: read.error ?? null,\n loading: read.loading && !read.value,\n retry: read.retry,\n };\n};\n","import type { ResourceRef, WorkbenchLayout, WorkbenchPageContribution } from \"../../../core\";\nimport { resolvePageActivePlacement } from \"../../../core/registries/pages/page-active-placement\";\n\nexport const resolveTreeActiveResource = (\n layout: WorkbenchLayout,\n page: WorkbenchPageContribution | undefined,\n primary: ResourceRef | undefined,\n) => {\n const overlay = layout.regions.overlay;\n const overlayResource = (\n overlay.widgets.find((entry) => entry.widgetId === overlay.activeWidgetId) ?? overlay.widgets[0]\n )?.resource;\n if (overlayResource) return overlayResource;\n // Collection pages select their own content, independently of the routed primary.\n const active = resolvePageActivePlacement(layout, page);\n if (active?.resource) return active.resource;\n return primary;\n};\n","import type { WorkbenchCore } from \"../../../core\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { resolveTreeActiveResource } from \"./tree-active-resource\";\n\nexport const useTreeNavigationState = (workbench: WorkbenchCore) => {\n const projectId = useWorkbenchStore(workbench.pages.store, (state) => state.projectId);\n const activeLocation = useWorkbenchStore(workbench.pages.store, (state) => state.location);\n const activePage = useWorkbenchStore(workbench.pages.store, (state) =>\n state.activePageId ? state.pages[state.activePageId] : undefined,\n );\n const activeResource = useWorkbenchStore(workbench.layout.store, (state) =>\n resolveTreeActiveResource(state.layout, activePage, activeLocation?.resource),\n );\n return { projectId, activeLocation, activeResource };\n};\n","import type { TreeNode, TreeViewSection } from \"../../../core\";\n\nexport const treeSelectionAncestors = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n selectedIds: string[],\n) => {\n const selected = new Set(selectedIds);\n const parents = new Set<string>();\n const expandedSections = new Set<string>();\n const visit = (nodes: TreeNode[], path: string[], sectionId: string) => {\n for (const node of nodes) {\n if (selected.has(node.id)) {\n for (const id of path) parents.add(id);\n expandedSections.add(sectionId);\n }\n visit([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], [...path, node.id], sectionId);\n }\n };\n for (const section of sections) visit(section.nodes, [], section.id);\n if (!expandedSections.size) return undefined;\n return { nodes: [...parents], sections: [...expandedSections] };\n};\n","import { useEffect, useRef } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { resolveTreeListSelection } from \"./tree-list-adapter\";\nimport { treeSelectionAncestors } from \"./tree-selection-ancestors\";\n\nexport const useTreeSelection = (\n workbench: WorkbenchCore,\n treeViewId: string,\n input: Parameters<typeof resolveTreeListSelection>[0],\n) => {\n const { sections, childrenByNodeId } = input;\n const selectedNodeIds = resolveTreeListSelection(input);\n const ids = typeof selectedNodeIds === \"string\" ? [selectedNodeIds] : (selectedNodeIds ?? []);\n const key = JSON.stringify([treeViewId, ids]);\n const revealed = useRef<string | null>(null);\n useEffect(() => {\n if (!ids.length) {\n revealed.current = null;\n return;\n }\n if (revealed.current === key) return;\n const ancestors = treeSelectionAncestors(sections, childrenByNodeId, ids);\n if (!ancestors) return;\n revealed.current = key;\n const trees = getWorkbenchRenderers(workbench);\n for (const id of ancestors.nodes) trees.setNodeExpanded(treeViewId, id, true);\n for (const id of ancestors.sections) trees.setSectionExpanded(treeViewId, id, true);\n }, [workbench, treeViewId, key, ids, sections, childrenByNodeId]);\n return selectedNodeIds;\n};\n","import { resolveVisibility, type TreeListSection, type VisibilityOverride } from \"@pstdio/ui\";\n\n// A section left empty because users moved its rows elsewhere stays as an empty drop target, so the rows can move\n// back. Sections users hid, sections their contributor sent empty, and outer-level sections whose rows are all\n// pinned-only stay out.\nexport const keepSectionsEmptiedByMoves = (\n source: TreeListSection[],\n ordered: TreeListSection[],\n visible: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n pinnedOnlyNodeIds: ReadonlySet<string> = new Set(),\n) => {\n const visibleById = new Map(visible.map((section) => [section.id, section]));\n const hadRows = new Set(\n source\n .filter((section) => section.nodes.some((node) => !pinnedOnlyNodeIds.has(node.id)))\n .map((section) => section.id),\n );\n return ordered.flatMap((section) => {\n const shown = visibleById.get(section.id);\n if (shown) return [shown];\n const emptiedByMoves =\n section.nodes.length === 0 &&\n hadRows.has(section.id) &&\n resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault) === \"shown\";\n return emptiedByMoves ? [section] : [];\n });\n};\n","import type { TreeListGroup, TreeListSection } from \"@pstdio/ui\";\n\nexport const activeTreeGroupLayout = (\n sections: TreeListSection[],\n groups: TreeListGroup[],\n nodeOrderBySection: Record<string, string[]>,\n) => {\n const scopes = new Set(sections.map((section) => section.moveScope));\n const activeGroups = groups.filter((group) => group.moveScope === undefined || scopes.has(group.moveScope));\n const inactiveGroupIds = new Set(groups.filter((group) => !activeGroups.includes(group)).map((group) => group.id));\n // Inactive groups must not turn into the unnamed runs the order model reconstructs from saved memberships.\n const activeNodeOrder = Object.fromEntries(\n Object.entries(nodeOrderBySection).filter(([sectionId]) => !inactiveGroupIds.has(sectionId)),\n );\n return { groups: activeGroups, nodeOrderBySection: activeNodeOrder };\n};\n","import {\n type ResourceContextAction,\n type TreeListActionMenuItem,\n type TreeListGroup,\n type TreeListSection,\n useTreeListOrderStore,\n} from \"@pstdio/ui\";\nimport { useState } from \"react\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { activeTreeGroupLayout } from \"./tree-group-scope\";\n\ninterface GroupDraft {\n storageKey: string;\n group: TreeListGroup;\n isNew: boolean;\n}\n\nexport const useTreeViewGroups = (\n storageKey: string,\n sections: TreeListSection[],\n nodeOrderBySection: Record<string, string[]>,\n enabled: boolean,\n) => {\n const savedGroups = useTreeListOrderStore(storageKey, (state) => state.groups);\n const addGroup = useTreeListOrderStore(storageKey, (state) => state.addGroup);\n const renameGroup = useTreeListOrderStore(storageKey, (state) => state.renameGroup);\n const removeGroup = useTreeListOrderStore(storageKey, (state) => state.removeGroup);\n const [draft, setDraft] = useState<GroupDraft | null>(null);\n const currentDraft = draft?.storageKey === storageKey ? draft : null;\n const { groups, nodeOrderBySection: activeNodeOrder } = activeTreeGroupLayout(\n sections,\n savedGroups,\n nodeOrderBySection,\n );\n if (currentDraft?.isNew) groups.push(currentDraft.group);\n\n const startGroup = (moveScope = sections[0]?.moveScope) => {\n setDraft({\n storageKey,\n group: { id: `tree-list-group:${crypto.randomUUID()}`, label: \"New group\", moveScope },\n isNew: true,\n });\n };\n const newGroupAction: ResourceContextAction = {\n key: \"tree-group:new\",\n label: \"New group\",\n icon: <WorkbenchIcon name=\"folder-plus\" size={14} />,\n closeOnSelect: true,\n onClick: () => startGroup(),\n };\n\n const withGroupControls = (orderedSections: TreeListSection[]) =>\n orderedSections.map((section) => {\n const group = groups.find((group) => group.id === section.id);\n if (!group) return section;\n const menuItems: TreeListActionMenuItem[] = [\n {\n id: \"tree-group:rename\",\n label: \"Rename group\",\n icon: <WorkbenchIcon name=\"pencil\" size={14} />,\n onAction: () => setDraft({ storageKey, group, isNew: false }),\n },\n {\n id: \"tree-group:remove\",\n label: \"Remove group\",\n icon: <WorkbenchIcon name=\"trash-2\" size={14} />,\n onAction: () => removeGroup(group.id),\n },\n ];\n const editing = currentDraft?.group.id === group.id;\n return {\n ...section,\n canReorder: !editing,\n contextMenuItems: menuItems,\n actions: [\n {\n id: \"tree-group:actions\",\n label: \"Group actions\",\n icon: <WorkbenchIcon name=\"ellipsis\" size={14} />,\n menuItems,\n },\n ],\n inlineInput: editing\n ? {\n ariaLabel: \"Group name\",\n placeholder: \"New group\",\n defaultValue: currentDraft.isNew ? \"\" : group.label,\n onCommit: (label: string) => {\n if (currentDraft.isNew)\n addGroup(\n { ...group, label },\n orderedSections.map((section) => section.id),\n );\n else renameGroup(group.id, label);\n setDraft(null);\n },\n onCancel: () => setDraft(null),\n }\n : undefined,\n };\n });\n\n return {\n groups,\n nodeOrderBySection: activeNodeOrder,\n withGroupControls,\n newGroupAction: enabled ? newGroupAction : undefined,\n };\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\";\nimport { keepSectionsEmptiedByMoves } from \"./tree-emptied-sections\";\nimport { withoutPinnedOnlyRows } from \"./tree-pinned-only\";\nimport { useTreeViewGroups } from \"./use-tree-view-groups\";\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 pinnedOnlyNodeIds?: ReadonlySet<string>;\n allowGroups?: 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 sourceSections = [...regions.headerSections, ...regions.sections, ...regions.footerSections];\n const {\n groups,\n nodeOrderBySection: activeNodeOrder,\n withGroupControls,\n newGroupAction,\n } = useTreeViewGroups(storageKey, sourceSections, nodeOrderBySection, options.allowGroups === true);\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 = withGroupControls(\n applyTreeListOrder(sourceSections, sectionOrder, activeNodeOrder, groups),\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 = withoutPinnedOnlyRows(orderedSectionsBySlot.content, options.pinnedOnlyNodeIds ?? new Set());\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 visibleIn = (sections: TreeListSection[]) =>\n keepSectionsEmptiedByMoves(\n sourceSections,\n sections,\n filterVisibleSections(sections, sectionOverrides, nodeOverrides),\n sectionOverrides,\n options.pinnedOnlyNodeIds,\n );\n const visibleHeaderSections = visibleIn(headerSections);\n const visibleSections = visibleIn(contentSections);\n const visibleFooterSections = visibleIn(footerSections);\n const visibilityMenuItems = buildTreeVisibilityMenuActions(\n { headerSections: orderedHeaderSections, sections: orderedSections, footerSections: orderedFooterSections },\n sectionOverrides,\n nodeOverrides,\n visibilityActions,\n icons,\n );\n const backgroundContextActions: ResourceContextAction[] = newGroupAction ? [newGroupAction] : [];\n if (visibilityMenuItems.length > 0)\n backgroundContextActions.push({\n key: \"tree-visibility\",\n label: \"Hide/show items\",\n icon: icons.visibleIcon,\n items: visibilityMenuItems.map((item) => ({ ...item, closeOnSelect: false })),\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 groups,\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 { useEffect, useRef, useState } from \"react\";\nimport type {\n NavigationTarget,\n ResourceRef,\n TreeNode,\n TreeRendererState,\n TreeViewSection,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { reportUserActionError } from \"../../../core/shared/run-user-action\";\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 { RendererReadNotice } from \"../renderer-read-notice\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\nimport { findNodeInSections, toTreeListSection } from \"./tree-list-adapter\";\nimport { TreeParamsDialog } from \"./tree-params-dialog\";\nimport { pinnedOnlyNodeIds } from \"./tree-pinned-only\";\nimport { TreeViewBody } from \"./tree-view-body\";\nimport { createToggleTreeSection, shouldSelectTreeNodeForNavigationTarget } from \"./tree-view-navigation\";\nimport { TreeViewSearch } from \"./tree-view-search\";\nimport { useTreeData } from \"./use-tree-data\";\nimport { useTreeNavigationState } from \"./use-tree-navigation-state\";\nimport { useTreeSelection } from \"./use-tree-selection\";\nimport { useTreeViewCustomization } from \"./use-tree-view-customization\";\n\ninterface WorkbenchTreeViewProps {\n readOwnerKey?: string;\n placement?: WorkbenchPanelInstance;\n workbench: WorkbenchCore;\n treeViewId: string;\n activeNodeId?: string | null;\n resource?: ResourceRef;\n viewId?: string;\n renderParamField?: CommandParamFieldRenderer;\n onOpenResourceError?: (error: unknown) => void;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\nconst EMPTY_TREE_STATE: TreeRendererState = { expandedNodeIds: [], expandedSectionIds: [] };\n\nconst treeCustomizationOptions = (body: TreeViewSection[], isSidenav: boolean) => ({\n suppressNodeContextMenus: isSidenav,\n pinnedOnlyNodeIds: pinnedOnlyNodeIds(body),\n allowGroups: isSidenav,\n});\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((error) => {\n if (context.onOpenResourceError) context.onOpenResourceError(error);\n else reportUserActionError(context.workbench, \"Open\", error);\n });\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 loadChildren(node: TreeNode): void;\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 context.loadChildren(node);\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 isSidenav = Boolean(onSidenavContextActionsChange);\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, activeLocation, activeResource } = useTreeNavigationState(workbench);\n const { body, childrenByNodeId, moveNode, error, footer, header, loadChildren, loading, retry } = useTreeData(\n workbench,\n treeViewId,\n resource,\n viewId,\n treeRenderer?.searchable ? filter.trim() || undefined : undefined,\n props.readOwnerKey,\n onOpenResourceError,\n props.placement,\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 treeCustomizationOptions(body, isSidenav),\n );\n useSidenavContextActions(backgroundContextActions, customizationRevision, onSidenavContextActionsChange);\n const activeNodeSelection = useTreeSelection(workbench, treeViewId, {\n sections: [...header, ...body, ...footer],\n childrenByNodeId,\n activeNodeId,\n activeLocation,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n\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 loadChildren,\n });\n\n const toggleSection = createToggleTreeSection(workbench, treeViewId, treeState.expandedSectionIds);\n\n const navigationContext = { workbench, treeViewId, onOpenResourceError };\n\n return (\n <TreeListDragProvider\n sections={[...visibleHeaderSections, ...visibleSections, ...visibleFooterSections]}\n canMove={treeRenderer.canMove}\n onReorderSections={onMoveSection}\n onReorderNodes={onReorderNodes}\n >\n <Flex\n as=\"section\"\n direction=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n aria-label={treeRenderer.title}\n aria-busy={loading}\n >\n {!loading && visibleHeaderSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleHeaderSections}\n draggable={isSidenav}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={activeNodeSelection}\n rowVariant=\"compact\"\n // Header sections separate owners (mode and levels), so their rows read as one list.\n sectionGap=\"1px\"\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={Boolean(treeRenderer.searchable)}\n placeholder={treeRenderer.searchPlaceholder}\n value={filter}\n onChange={setFilter}\n />\n {error && !isSidenav ? <RendererReadNotice error={error} retry={retry} /> : null}\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n w=\"full\"\n viewportRef={scrollRef}\n viewportProps={{\n display: \"block\",\n style: { overflowX: \"hidden\" },\n }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n <TreeViewBody\n error={error}\n loading={loading}\n moduleLoading={treeState.loading}\n sections={visibleSections}\n backgroundContextActions={isSidenav ? undefined : backgroundContextActions}\n draggable={isSidenav}\n customizationAvailable={isSidenav}\n activeNodeId={activeNodeSelection}\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={isSidenav}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={activeNodeSelection}\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 type { ResourceRef } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchModuleContext } from \"../../core\";\nimport { pageResourceContextKey } from \"../../core/registries/pages/page-resource-context\";\n\nexport const relatedResourceStateKey = (\n state: ReturnType<WorkbenchModuleContext[\"pages\"][\"store\"][\"getState\"]>,\n resource?: ResourceRef,\n) =>\n JSON.stringify([\n state.projectId,\n state.activePageId,\n pageResourceContextKey(\n state.activePageId ? state.pages[state.activePageId] : undefined,\n resource ?? state.location?.resource,\n ),\n ]);\n\nexport const relatedResourcePageKey = (ctx: WorkbenchModuleContext, resource?: ResourceRef) => {\n const state = ctx.pages.store.getState();\n return relatedResourceStateKey(state, resource);\n};\n","import { type RelatedResourceOpening, type ResourceRef, resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchModuleContext, WorkbenchRegionState } from \"../../core\";\nimport { relatedResourcePageKey } from \"./related-resource-page-key\";\n\nconst regions = [\"side\", \"secondary\"] as const;\ninterface PanelChoice {\n visible: boolean;\n resource?: ResourceRef;\n}\ntype PageChoices = Partial<Record<(typeof regions)[number], PanelChoice>>;\nconst selected = (region: WorkbenchRegionState) =>\n region.widgets.find((panel) => panel.widgetId === region.activeWidgetId) ?? region.widgets[0];\nconst choiceChanged = (before: WorkbenchRegionState, after: WorkbenchRegionState) =>\n before.visible !== after.visible ||\n resourceKey(selected(before)?.resource) !== resourceKey(selected(after)?.resource) ||\n selected(before)?.tabRetention !== selected(after)?.tabRetention ||\n before.widgets.some((tab) => !after.widgets.some((next) => next.widgetId === tab.widgetId));\n\n// Layout state follows the project. These are only the user's overrides of a\n// resource page's related-opening defaults, not another copy of its layout.\nexport const createRelatedResourcePreferences = (\n ctx: WorkbenchModuleContext,\n canonicalize: (source: ResourceRef) => ResourceRef | undefined,\n) => {\n // Only the current owner's automatic destinations have page-specific choices.\n // Other trays keep the project's live layout, including closures made elsewhere.\n let relatedRegions: Set<string> | undefined;\n let pendingChoices: PageChoices = {};\n const writes = new Map<string, { value: PageChoices; promise: Promise<void> }>();\n const currentResource = () => {\n const source = ctx.pages.store.getState().location?.resource;\n return source && canonicalize(source);\n };\n const pageKey = () => relatedResourcePageKey(ctx, currentResource());\n const scope = () => ({ scope: \"user\" as const, scopeId: pageKey() });\n const read = () =>\n writes.get(scope().scopeId)?.value ??\n (ctx.preferences.getOwnedValue(\"workbench.related-resources\", \"panels\", scope()) as PageChoices | undefined) ??\n {};\n const write = (value: PageChoices) => {\n const destination = scope();\n const queued = writes.get(destination.scopeId);\n const save = () => ctx.preferences.setOwnedValue(\"workbench.related-resources\", \"panels\", value, destination);\n const result = queued ? queued.promise.then(save, save) : save();\n if (!(result instanceof Promise)) return;\n const pending = { value, promise: result };\n writes.set(destination.scopeId, pending);\n void result\n .finally(() => {\n if (writes.get(destination.scopeId) === pending) writes.delete(destination.scopeId);\n })\n .catch((error) => console.warn(\"Could not save resource page choices\", error));\n };\n const removedOwner = (\n before: WorkbenchRegionState,\n after: WorkbenchRegionState,\n widgets: ReturnType<typeof ctx.layout.store.getState>[\"widgets\"],\n ) =>\n before.widgets.some(\n (panel) =>\n !after.widgets.some((next) => next.widgetId === panel.widgetId) &&\n (!ctx.layout.getWidget(panel.contributionId) ||\n widgets[panel.contributionId] !== ctx.layout.getWidget(panel.contributionId) ||\n (panel.viewId && !ctx.views.getView(panel.viewId))),\n );\n const forSource = (source: ResourceRef) => {\n const choices: PageChoices =\n resourceKey(canonicalize(source)) === resourceKey(currentResource())\n ? Object.fromEntries(Object.entries(read()).filter(([region]) => relatedRegions?.has(region)))\n : {};\n return choices;\n };\n const isResourcePage = () => {\n const source = currentResource();\n const owner = source && ctx.resources.getKind(source.type, source.extensionId);\n return source && owner?.extensionId === source.extensionId && Boolean(owner?.relatedOpenings);\n };\n const snapshot = () => ({\n key: pageKey(),\n scope: ctx.layout.getPersistenceScope(),\n layout: ctx.layout.getLayout(),\n widgets: ctx.layout.store.getState().widgets,\n });\n let previous = snapshot();\n let observing: string | undefined;\n let updating = 0;\n const run = <T>(action: () => T) => {\n updating++;\n try {\n return action();\n } finally {\n previous = snapshot();\n updating--;\n }\n };\n const unsubscribe = ctx.layout.store.subscribe(() => {\n const before = previous;\n previous = snapshot();\n if (updating) return;\n if (before.key !== previous.key || before.scope !== previous.scope) {\n observing = undefined;\n return;\n }\n if (observing !== previous.key) return;\n if (!isResourcePage()) return;\n const changedRegions = regions.filter((id) => {\n const old = before.layout.regions[id];\n const region = previous.layout.regions[id];\n return !removedOwner(old, region, before.widgets) && choiceChanged(old, region);\n });\n if (!changedRegions.length) return;\n const choices = { ...forSource(currentResource()!), ...pendingChoices };\n const relatedChanges = changedRegions.filter((id) => !relatedRegions || relatedRegions.has(id));\n for (const id of relatedChanges) {\n const region = previous.layout.regions[id];\n const panel = selected(region);\n choices[id] = {\n visible: region.visible,\n resource: panel?.resource ?? selected(before.layout.regions[id])?.resource,\n };\n }\n if (!relatedRegions) pendingChoices = choices;\n else if (relatedChanges.length) void write(choices);\n });\n const reset = ctx.onDidResetLayout(() => {\n void write({});\n previous = snapshot();\n });\n return {\n run,\n enter(source: ResourceRef) {\n if (resourceKey(canonicalize(source)) !== resourceKey(currentResource())) return;\n if (observing !== pageKey()) {\n relatedRegions = undefined;\n pendingChoices = {};\n }\n observing = pageKey();\n previous = snapshot();\n },\n openings(source: ResourceRef, defaults: RelatedResourceOpening[]) {\n if (resourceKey(canonicalize(source)) === resourceKey(currentResource())) {\n relatedRegions = new Set(defaults.map((entry) => entry.region));\n const edits = Object.fromEntries(\n Object.entries(pendingChoices).filter(([region]) => relatedRegions?.has(region)),\n );\n pendingChoices = {};\n if (Object.keys(edits).length) void write({ ...forSource(source), ...edits });\n }\n const choices = forSource(source);\n return defaults.map((entry) => {\n const choice = entry.region === \"side\" || entry.region === \"secondary\" ? choices[entry.region] : undefined;\n return choice?.resource ? { ...entry, resource: choice.resource } : entry;\n });\n },\n shouldReveal(source: ResourceRef, entry: RelatedResourceOpening) {\n const choices = forSource(source);\n const actual = Object.values(ctx.layout.getLayout().regions).find((region) =>\n region.widgets.some((panel) => resourceKey(panel.resource) === resourceKey(entry.resource)),\n );\n const region = actual?.id ?? entry.region;\n return (region !== \"side\" && region !== \"secondary\") || choices[region]?.visible !== false;\n },\n dispose() {\n unsubscribe();\n reset.dispose();\n },\n };\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchModuleContext, WorkbenchRegion, WorkbenchRegionState } from \"../../core\";\nimport { batchWorkbenchChanges } from \"../../core/shared/store/workbench-batch\";\nimport { relatedResourcePageKey } from \"./related-resource-page-key\";\n\nconst survivingOrder = (region: WorkbenchRegionState, other: WorkbenchRegionState) =>\n region.widgets\n .filter((tab) => other.widgets.some((next) => next.widgetId === tab.widgetId))\n .map((tab) => tab.widgetId);\n\n// A page owns visibility only when it reveals a closed panel. An explicit tab\n// or visibility edit hands that panel back to the user's global layout.\nexport const createRelatedPanelLifetime = (ctx: WorkbenchModuleContext) => {\n const ownersByMode = new Map<string, Map<\"side\" | \"secondary\", string>>();\n const modeKey = () => JSON.stringify([ctx.pages.store.getState().projectId, ctx.modes.getActiveModeId()]);\n const snapshot = () => ({\n layout: ctx.layout.getLayout(),\n scope: ctx.layout.getPersistenceScope(),\n widgets: ctx.layout.store.getState().widgets,\n mode: modeKey(),\n page: relatedResourcePageKey(ctx),\n });\n let previous = snapshot();\n let updating = 0;\n const run = <T>(action: () => T) => {\n updating++;\n try {\n return batchWorkbenchChanges(action);\n } finally {\n previous = snapshot();\n updating--;\n }\n };\n const unsubscribe = ctx.layout.store.subscribe(() => {\n const before = previous;\n previous = snapshot();\n if (updating || before.scope !== previous.scope || before.mode !== previous.mode || before.page !== previous.page)\n return;\n const owners = ownersByMode.get(previous.mode);\n if (!owners) return;\n for (const region of owners.keys()) {\n const old = before.layout.regions[region];\n const next = previous.layout.regions[region];\n const added = next.widgets.some((tab) => !old.widgets.some((prior) => prior.widgetId === tab.widgetId));\n const nextOrder = survivingOrder(next, old);\n const reordered = survivingOrder(old, next).some((id, index) => nextOrder[index] !== id);\n const edited = old.widgets.some((tab) => {\n const current = next.widgets.find((item) => item.widgetId === tab.widgetId);\n if (current)\n return (\n current.tabRetention !== tab.tabRetention ||\n current.relatedSource !== tab.relatedSource ||\n resourceKey(current.resource) !== resourceKey(tab.resource)\n );\n return (\n ctx.layout.getWidget(tab.contributionId) === before.widgets[tab.contributionId] &&\n (!tab.viewId || Boolean(ctx.views.getView(tab.viewId)))\n );\n });\n if (old.visible !== next.visible || added || edited || reordered) owners.delete(region);\n }\n });\n return {\n run,\n claim(region: WorkbenchRegion, sourceKey: string) {\n if (region !== \"side\" && region !== \"secondary\") return;\n const owners = ownersByMode.get(modeKey()) ?? new Map<\"side\" | \"secondary\", string>();\n owners.set(region, sourceKey);\n ownersByMode.set(modeKey(), owners);\n },\n leave(sourceKey: string) {\n const owners = ownersByMode.get(modeKey());\n if (!owners) return;\n for (const [region, owner] of owners) {\n if (owner !== sourceKey) continue;\n owners.delete(region);\n ctx.shell.setRegionOpen(region, false);\n }\n },\n dispose: unsubscribe,\n };\n};\n","import { contributionRefId, type PageRef, type RelatedResourceOpening, resourceKey } from \"@pstdio/sdk/extensions\";\nimport type {\n NavigationTarget,\n NavigationTargetPanel,\n ResourceRef,\n WorkbenchModuleContext,\n WorkbenchRegion,\n} from \"../../core\";\nimport { isWorkbenchModePanelAvailable } from \"../../core/registries/modes/mode-layout\";\nimport { resourceMatchesConstraint } from \"../../core/shared/contributions/reference-id\";\nimport { createRelatedPanelLifetime } from \"./related-panel-lifetime\";\nimport { relatedResourcePageKey } from \"./related-resource-page-key\";\n\nconst findPage = (ctx: WorkbenchModuleContext, ref: PageRef) =>\n ctx.pages.listPages().find((page) => page.ref.id === ref.id && page.ref.extensionId === ref.extensionId);\nconst findOpenResource = (ctx: WorkbenchModuleContext, resource: ResourceRef) =>\n Object.values(ctx.layout.getLayout().regions)\n .flatMap((region) => region.widgets.map((panel) => ({ region: region.id, panel })))\n .find(({ panel }) => panel.resource && resourceKey(panel.resource) === resourceKey(resource));\nconst pagePreviewView = (ctx: WorkbenchModuleContext, pageRef: PageRef, resource: ResourceRef) => {\n const page = findPage(ctx, pageRef);\n if (!page) return;\n if (page.main.kind === \"view\") return contributionRefId(page.main.view);\n const slot = page.slots.find(\n (slot) =>\n slot.region === \"main\" && slot.item.kind === \"binding\" && resourceMatchesConstraint(slot.item.binding, resource),\n );\n return slot?.item.kind === \"binding\" ? contributionRefId(slot.item.binding.view) : contributionRefId(page.main.empty);\n};\n\n// Owner views render related resources without changing the routed parent page.\nexport const createResourcePreviewOpener = (ctx: WorkbenchModuleContext) => {\n const panels = createRelatedPanelLifetime(ctx);\n const reveal = (region: WorkbenchRegion) => {\n if (region === \"side\" || region === \"secondary\") ctx.shell.setRegionOpen(region, true);\n else ctx.layout.setRegionVisible(region, true);\n };\n const projections = new Map<string, { viewId: string; dispose(): void }>();\n const replacesSource = (region: RelatedResourceOpening[\"region\"], source: ResourceRef) =>\n ctx.layout\n .getLayout()\n .regions[region].widgets.some(\n (widget) =>\n widget.tabRetention === \"preview\" && widget.resource && resourceKey(widget.resource) === resourceKey(source),\n );\n const openView = (viewId: string, resource: ResourceRef, source: ResourceRef, options: RelatedResourceOpening) => {\n const { region, open = \"preview\" } = options;\n if (!ctx.views.getView(viewId) || (open === \"preview\" && replacesSource(region, source))) return false;\n const id = `workbench.related.${JSON.stringify([resource.extensionId, resource.type, viewId, region])}`;\n if (!ctx.shellPlacements.getPlacement(id)) {\n const registration = ctx.shellPlacements.registerPlacement({\n id,\n region,\n item: {\n kind: \"binding\",\n binding: {\n kinds: [{ kind: \"resource-kind\", id: resource.type, extensionId: resource.extensionId }],\n view: { kind: \"view\", id: viewId },\n cardinality: \"many\",\n },\n },\n });\n projections.set(id, { viewId, dispose: () => registration.dispose() });\n }\n ctx.shellPlacements.openPlacement({\n placementId: id,\n resource,\n title: resource.label,\n open,\n activate: false,\n relatedSource: relatedResourcePageKey(ctx),\n });\n return true;\n };\n const openPanel = (\n target: NavigationTargetPanel,\n resource: ResourceRef,\n source: ResourceRef,\n options: RelatedResourceOpening,\n ) => {\n const panel = target.panel;\n const { region, open = \"preview\" } = options;\n if (panel.kind === \"page-slot\") {\n const slot = findPage(ctx, panel.page)?.slots.find((slot) => slot.id === panel.id);\n return (\n slot?.item.kind === \"binding\" && openView(contributionRefId(slot.item.binding.view), resource, source, options)\n );\n }\n const placement =\n panel.kind === \"shell-placement\"\n ? ctx.shellPlacements.getPlacement(panel.id)\n : ctx.modePlacements.getPlacement(panel);\n if (placement?.item.kind !== \"binding\") return false;\n const viewId = contributionRefId(placement.item.binding.view);\n const inActiveMode =\n panel.kind === \"shell-placement\" || (\"modeId\" in placement && placement.modeId === ctx.modes.getActiveModeId());\n if (placement.item.binding.cardinality === \"one\" || placement.region !== region || !inActiveMode)\n return openView(viewId, resource, source, options);\n if (open === \"preview\" && replacesSource(region, source)) return false;\n if (panel.kind === \"shell-placement\")\n ctx.shellPlacements.openPlacement({\n placementId: panel.id,\n resource,\n open,\n title: resource.label,\n activate: false,\n relatedSource: relatedResourcePageKey(ctx),\n });\n else ctx.modePlacements.openPlacement({ panel, resource, open, relatedSource: relatedResourcePageKey(ctx) });\n return true;\n };\n const present = (\n target: Extract<NavigationTarget, { kind: \"page\" | \"panel\" }>,\n resource: ResourceRef,\n source: ResourceRef,\n options: RelatedResourceOpening,\n ) => {\n if (target.kind === \"panel\") return Boolean(openPanel(target, resource, source, options));\n const viewId = pagePreviewView(ctx, target.page, resource);\n return viewId ? openView(viewId, resource, source, options) : false;\n };\n const updateVisibility = (region: WorkbenchRegion, show: boolean, closed: boolean, resource: ResourceRef) => {\n if (!show) {\n if (region === \"side\" || region === \"secondary\") ctx.shell.setRegionOpen(region, false);\n return;\n }\n if (closed) {\n const panel = findOpenResource(ctx, resource)?.panel;\n if (panel) ctx.layout.setRegionActiveWidget(region, panel.widgetId);\n panels.claim(region, relatedResourcePageKey(ctx));\n }\n reveal(region);\n };\n const openResource = (\n target: Extract<NavigationTarget, { kind: \"page\" | \"panel\" }>,\n source: ResourceRef,\n options: RelatedResourceOpening,\n show: boolean,\n ) => {\n const resource = target.resource;\n if (!resource) return false;\n const existing = findOpenResource(ctx, resource);\n const region = existing?.region ?? options.region;\n const modeId = ctx.modes.getActiveModeId();\n if (\n !isWorkbenchModePanelAvailable(\n modeId ? ctx.modes.getMode(modeId) : undefined,\n region as \"main\" | \"side\" | \"secondary\",\n )\n )\n return false;\n // Capture visibility before placement reconciliation can reveal the panel.\n const closed = (region === \"side\" || region === \"secondary\") && !ctx.shell.getRegionState(region).open;\n if (!existing && !present(target, resource, source, options)) return false;\n updateVisibility(region, show, closed, resource);\n return true;\n };\n const open = (target: NavigationTarget, source: ResourceRef, options: RelatedResourceOpening, show = true) => {\n if (target.kind === \"compound\") {\n let opened = false;\n for (const item of target.targets) if (open(item, source, options, show)) opened = true;\n return opened;\n }\n if (target.kind !== \"panel\" && target.kind !== \"page\") return false;\n return panels.run(() => openResource(target, source, options, show));\n };\n const unsubscribe = ctx.views.store.subscribe(() => {\n for (const [id, projection] of projections) {\n if (ctx.views.getView(projection.viewId)) continue;\n projection.dispose();\n projections.delete(id);\n }\n });\n return {\n open,\n leavePage(sourceKey: string) {\n panels.run(() => panels.leave(sourceKey));\n },\n dispose() {\n panels.dispose();\n unsubscribe();\n for (const projection of projections.values()) projection.dispose();\n },\n };\n};\n","import { type ResourceRef, resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { NavigationTarget, RegisteredResourceKind, WorkbenchModuleContext } from \"../../core\";\nimport { relatedResourcePageKey, relatedResourceStateKey } from \"./related-resource-page-key\";\nimport { createRelatedResourcePreferences } from \"./related-resource-preferences\";\nimport type { WorkbenchResourceLinksOptions } from \"./resource-links-module\";\nimport { createResourcePreviewOpener } from \"./resource-preview-opener\";\n\nexport const openRelatedResourcesPreference = \"workbench.openRelatedResources\";\nconst targetResource = (target: NavigationTarget): ResourceRef | undefined => {\n if (target.kind === \"compound\") return target.targets.map(targetResource).find(Boolean);\n return target.kind === \"page\" || target.kind === \"panel\" ? target.resource : undefined;\n};\n\nexport const registerRelatedResourcePreviews = (\n ctx: WorkbenchModuleContext,\n options: WorkbenchResourceLinksOptions,\n) => {\n const schema = ctx.preferences.registerSchema({\n properties: { [openRelatedResourcesPreference]: { type: \"boolean\", scope: \"user\", default: true } },\n });\n const opener = createResourcePreviewOpener(ctx);\n const canonicalize = (source: ResourceRef) =>\n options.canonicalize(source) ?? (source.projectId && source.extensionId ? source : undefined);\n const pending = new Map<\n string,\n {\n owner: RegisteredResourceKind;\n controller: AbortController;\n promise: Promise<void>;\n }\n >();\n const abortAll = () => {\n for (const { controller } of pending.values()) controller.abort();\n };\n const requestKey = (sourceKey: string | undefined) => JSON.stringify([relatedResourcePageKey(ctx), sourceKey]);\n const cancelOtherSelections = (selectedKey?: string) => {\n const source = ctx.pages.store.getState().location?.resource;\n const pageResource = source && canonicalize(source);\n for (const [key, { controller }] of pending) {\n if (selectedKey && key === requestKey(selectedKey)) continue;\n // A manual panel selection must not discard the routed page's declaration\n // lookup: its result still determines which user choices belong to the page.\n if (key !== requestKey(resourceKey(pageResource))) controller.abort();\n }\n };\n let openingPreviews = false;\n let disposed = false;\n const preferences = createRelatedResourcePreferences(ctx, canonicalize);\n const enabled = () => ctx.preferences.getValue(openRelatedResourcesPreference) !== false;\n const load = async (\n resource: ResourceRef,\n owner: RegisteredResourceKind,\n controller: AbortController,\n present: boolean,\n ) => {\n const pageKey = relatedResourcePageKey(ctx);\n const current = () =>\n !controller.signal.aborted &&\n enabled() &&\n relatedResourcePageKey(ctx) === pageKey &&\n ctx.resources.getKind(resource.type, resource.extensionId) === owner;\n try {\n const entries = await owner.relatedOpenings!(resource, controller.signal);\n if (!current()) return;\n const openings = preferences.openings(\n resource,\n entries.filter(\n (entry) =>\n entry.autoOpen === true &&\n entry.resource.projectId === resource.projectId &&\n resourceKey(entry.resource) !== resourceKey(resource),\n ),\n );\n if (!present) return;\n if (!openings.length) return;\n const resolved = await options.createService(resource).resolve(\n openings.map((entry) => entry.resource),\n controller.signal,\n );\n if (!current()) return;\n const targets = new Map(resolved.map((entry) => [resourceKey(entry.resource), entry.target]));\n openingPreviews = true;\n try {\n preferences.run(() => {\n for (const entry of openings) {\n const target = targets.get(resourceKey(entry.resource));\n if (target) opener.open(target, resource, entry, preferences.shouldReveal(resource, entry));\n }\n });\n } finally {\n openingPreviews = false;\n }\n } catch (error) {\n if (current()) console.warn(\"Could not open related resources\", error);\n }\n };\n const open = (source: ResourceRef, present = true) => {\n const resource = canonicalize(source);\n const owner = resource && ctx.resources.getKind(resource.type, resource.extensionId);\n cancelOtherSelections(resourceKey(resource));\n if (!enabled() || !resource || !owner?.relatedOpenings || owner.extensionId !== resource.extensionId) {\n if (!enabled()) abortAll();\n return Promise.resolve();\n }\n const key = requestKey(resourceKey(resource));\n const existing = pending.get(key);\n if (existing?.owner === owner && !existing.controller.signal.aborted) {\n return existing.promise;\n }\n existing?.controller.abort();\n preferences.enter(resource);\n const controller = new AbortController();\n const promise = load(resource, owner, controller, present).finally(() => {\n if (pending.get(key)?.controller === controller) pending.delete(key);\n });\n pending.set(key, { owner, controller, promise });\n return promise;\n };\n const primary = ctx.pageLocations.onDidNavigate((location) => {\n if (openingPreviews) return;\n if (location.resource) {\n const resource = location.resource;\n const key = relatedResourcePageKey(ctx);\n void Promise.resolve().then(() => {\n if (!disposed && relatedResourcePageKey(ctx) === key) void open(resource);\n });\n } else cancelOtherSelections();\n });\n const primaryState = ctx.pages.store.subscribe((state, previous) => {\n const key = relatedResourceStateKey(state);\n const previousKey = relatedResourceStateKey(previous);\n if (key === previousKey && state.activeModeId === previous.activeModeId) return;\n if (openingPreviews) return;\n const modeChanged = state.activeModeId !== previous.activeModeId || state.projectId !== previous.projectId;\n if (!modeChanged) preferences.run(() => opener.leavePage(previousKey));\n const resource = ctx.pages.store.getState().location?.resource;\n cancelOtherSelections(resourceKey(resource));\n // Evaluate after the new page layout settles, including saved-route boot.\n if (resource) {\n const restoresMode = state.layoutActivation === \"restore-mode\";\n void Promise.resolve().then(() => {\n if (!disposed && relatedResourcePageKey(ctx) === key) void open(resource, !restoresMode);\n });\n }\n });\n const navigation = ctx.navigation.onDidOpenTarget((target) => {\n if (openingPreviews) return;\n const resource = targetResource(target);\n const routed = ctx.pages.store.getState().location?.resource;\n if (resource && routed && resourceKey(canonicalize(resource)) === resourceKey(canonicalize(routed))) return;\n if (resource) void open(resource);\n else if (target.kind === \"page\" || target.kind === \"panel\" || target.kind === \"compound\") abortAll();\n });\n const project = ctx.pages.store.subscribeSelector((state) => state.projectId, abortAll);\n const owners = ctx.resources.store.subscribe(() => {\n for (const { owner, controller } of pending.values()) {\n if (ctx.resources.getKind(owner.kind, owner.extensionId) !== owner) controller.abort();\n }\n });\n const preference = ctx.preferences.onDidChangeValue((name) => {\n if (name === openRelatedResourcesPreference && !enabled()) abortAll();\n });\n const selection = ctx.layout.onDidActivatePanel((panel) => {\n if (openingPreviews) return;\n const routed = ctx.pages.store.getState().location?.resource;\n if (panel.resource && resourceKey(canonicalize(panel.resource)) === resourceKey(routed && canonicalize(routed)))\n return;\n if (panel.resource) void open(panel.resource);\n else cancelOtherSelections();\n });\n const selectionState = ctx.layout.store.subscribeSelector(\n () => {\n const resource = ctx.layout.getActivePanel()?.resource;\n return resource && resourceKey(resource);\n },\n (key) => {\n if (!openingPreviews) cancelOtherSelections(key);\n },\n );\n const scope = ctx.layout.onWillChangePersistenceScope(() => {\n abortAll();\n });\n return {\n open,\n dispose() {\n disposed = true;\n abortAll();\n primary.dispose();\n primaryState();\n navigation.dispose();\n project();\n owners();\n preference.dispose();\n selection.dispose();\n selectionState();\n scope.dispose();\n preferences.dispose();\n opener.dispose();\n schema.dispose();\n },\n };\n};\n","import { Button, HStack, Input, Menu, Stack, Text } from \"@chakra-ui/react\";\nimport { type ResourceRole, resourceKey } from \"@pstdio/sdk/extensions\";\nimport { AlertMessage, ListRow, ScrollArea } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport type { ResourceLinkCandidate, ResourceLinksService } from \"./resource-links-types\";\n\ninterface ResourceLinkPickerProps {\n service: ResourceLinksService;\n excludeKey: string;\n busy: boolean;\n onCancel(): void;\n onSelect(candidate: ResourceLinkCandidate, role: ResourceRole): Promise<void>;\n}\n\nexport const ResourceLinkPicker = (props: ResourceLinkPickerProps) => {\n const { service, excludeKey, busy, onCancel, onSelect } = props;\n const [query, setQuery] = useState(\"\");\n const [results, setResults] = useState<ResourceLinkCandidate[]>([]);\n const [selected, setSelected] = useState<ResourceLinkCandidate>();\n const [role, setRole] = useState<ResourceRole>(\"context\");\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string>();\n const [revision, setRevision] = useState(0);\n useEffect(\n () =>\n service.subscribe(() => {\n setSelected(undefined);\n setRevision((value) => value + 1);\n }),\n [service],\n );\n useEffect(() => {\n void revision;\n let cancelled = false;\n const controller = new AbortController();\n setLoading(true);\n setResults([]);\n setSelected(undefined);\n setError(undefined);\n const timer = setTimeout(() => {\n void service\n .search(query, controller.signal)\n .then((items) => {\n if (!cancelled) setResults(items.filter((item) => resourceKey(item.resource) !== excludeKey));\n })\n .catch((cause: unknown) => {\n if (!cancelled) setError(cause instanceof Error ? cause.message : String(cause));\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n }, 150);\n return () => {\n cancelled = true;\n controller.abort();\n clearTimeout(timer);\n };\n }, [service, query, excludeKey, revision]);\n return (\n <Stack gap=\"3\">\n <Input\n size=\"sm\"\n aria-label=\"Search resources\"\n placeholder=\"Search resources…\"\n value={query}\n onChange={(event) => {\n setQuery(event.target.value);\n setSelected(undefined);\n }}\n autoFocus\n />\n {error ? <AlertMessage status=\"error\" title={error} /> : null}\n <ScrollArea maxH=\"64\">\n {loading ? (\n <Text color=\"fg.muted\" textStyle=\"sm\">\n Searching…\n </Text>\n ) : null}\n {!loading && !results.length ? (\n <Text color=\"fg.muted\" textStyle=\"sm\">\n No resources found.\n </Text>\n ) : null}\n {results.map((item) => (\n <ListRow\n key={resourceKey(item.resource)}\n label={item.resource.label ?? item.resource.shorthand ?? item.resource.id}\n description={item.description}\n icon={<WorkbenchIcon name={item.resource.icon ?? \"file-text\"} />}\n isSelected={selected === item}\n onActivate={() => {\n if (!loading && !busy) setSelected(item);\n }}\n />\n ))}\n </ScrollArea>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n Purpose: {role}\n <WorkbenchIcon name=\"chevron-down\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {([\"primary\", \"context\", \"source\", \"result\"] as const).map((value) => (\n <Menu.Item key={value} value={value} onClick={() => setRole(value)}>\n {value}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n <HStack justify=\"flex-end\">\n <Button variant=\"ghost\" onClick={onCancel} disabled={busy}>\n Cancel\n </Button>\n <Button\n disabled={!selected || busy || loading}\n loading={busy}\n onClick={() => selected && void onSelect(selected, role)}\n >\n Link\n </Button>\n </HStack>\n </Stack>\n );\n};\n","import { Button, Dialog, HStack, IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport { type ResourceAnchorPage, type ResourceRef, type ResourceRole, resourceKey } from \"@pstdio/sdk/extensions\";\nimport { AlertMessage, ListRow, ScrollArea } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { ResourceLinkPicker } from \"./resource-link-picker\";\nimport type { ResourceLinkCandidate, ResourceLinksService } from \"./resource-links-types\";\n\ninterface RelatedResourcesProps {\n resource: ResourceRef;\n service: ResourceLinksService;\n onClose(): void;\n}\n\ninterface RelatedResourceRow {\n edge: ResourceAnchorPage[\"items\"][number];\n candidate: ResourceLinkCandidate;\n incoming: boolean;\n}\n\nexport const RelatedResources = (props: RelatedResourcesProps) => {\n const { resource, service, onClose } = props;\n const [rows, setRows] = useState<RelatedResourceRow[]>([]);\n const [cursor, setCursor] = useState<string>();\n const [nextCursor, setNextCursor] = useState<string>();\n const [picker, setPicker] = useState(false);\n const [busy, setBusy] = useState(false);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string>();\n const [revision, setRevision] = useState(0);\n const key = resourceKey(resource);\n useEffect(\n () =>\n service.subscribe(() => {\n setRevision((value) => value + 1);\n }),\n [service],\n );\n useEffect(() => {\n void revision;\n let cancelled = false;\n const controller = new AbortController();\n setLoading(true);\n setError(undefined);\n void service\n .list({ resource, direction: \"both\", limit: 25, cursor })\n .then(async (page) => {\n if (cancelled) return;\n const refs = page.items.map((edge) => (resourceKey(edge.source) === key ? edge.target : edge.source));\n const resolved = await service.resolve(refs, controller.signal);\n if (cancelled) return;\n const candidates = new Map(resolved.map((item) => [resourceKey(item.resource), item]));\n setRows(\n page.items.map((edge, index) => ({\n edge,\n incoming: resourceKey(edge.source) !== key,\n candidate: candidates.get(resourceKey(refs[index]!)) ?? { resource: refs[index]! },\n })),\n );\n setNextCursor(page.nextCursor);\n })\n .catch((cause: unknown) => {\n if (!cancelled) setError(cause instanceof Error ? cause.message : String(cause));\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [resource, key, cursor, revision, service]);\n const mutate = async (action: () => Promise<void>) => {\n setBusy(true);\n setError(undefined);\n try {\n await action();\n setPicker(false);\n setCursor(undefined);\n setRevision((value) => value + 1);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n } finally {\n setBusy(false);\n }\n };\n const add = (candidate: ResourceLinkCandidate, role: ResourceRole) =>\n mutate(() => service.add(resource, [{ ...candidate.resource, role }]));\n const open = async (candidate: ResourceLinkCandidate) => {\n setError(undefined);\n try {\n await candidate.open?.();\n onClose();\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n }\n };\n return (\n <>\n <Dialog.Header>\n <Dialog.Title>{picker ? \"Link resource\" : \"Related resources\"}</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"3\">\n <Text color=\"fg.muted\" textStyle=\"sm\">\n {resource.label ?? resource.shorthand ?? resource.id}\n </Text>\n {error ? <AlertMessage status=\"error\" title={error} /> : null}\n {picker ? (\n <ResourceLinkPicker\n service={service}\n excludeKey={key}\n busy={busy}\n onCancel={() => setPicker(false)}\n onSelect={add}\n />\n ) : (\n <>\n {loading ? (\n <Text color=\"fg.muted\" textStyle=\"sm\">\n Loading resources…\n </Text>\n ) : null}\n {!loading && !rows.length && !error ? (\n <Text color=\"fg.muted\" textStyle=\"sm\">\n No related resources yet.\n </Text>\n ) : null}\n <ScrollArea maxH=\"80\">\n {rows.map(({ edge, candidate, incoming }) => (\n <ListRow\n key={`${resourceKey(edge.source)}:${resourceKey(edge.target)}`}\n label={\n candidate.resource.label ??\n candidate.resource.shorthand ??\n `${candidate.resource.type}: ${candidate.resource.id}`\n }\n description={`${incoming ? \"Incoming\" : \"Outgoing\"} · ${edge.target.role ?? \"context\"}${candidate.open ? \"\" : \" · Unavailable\"}`}\n tooltip={`${candidate.resource.extensionId ?? \"pstdio\"} · ${candidate.resource.type}: ${candidate.resource.id}`}\n icon={<WorkbenchIcon name={candidate.resource.icon ?? \"file-text\"} />}\n onActivate={\n candidate.open\n ? () => {\n void open(candidate);\n }\n : undefined\n }\n endContent={\n <IconButton\n aria-label=\"Remove link\"\n variant=\"ghost\"\n size=\"2xs\"\n disabled={busy}\n onKeyDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n void mutate(() => service.remove(edge.source, [edge.target]));\n }}\n >\n <WorkbenchIcon name=\"unlink\" />\n </IconButton>\n }\n />\n ))}\n </ScrollArea>\n <HStack>\n <Button variant=\"outline\" onClick={() => setPicker(true)} disabled={busy}>\n <WorkbenchIcon name=\"link\" />\n Link resource\n </Button>\n {cursor ? (\n <Button variant=\"ghost\" onClick={() => setCursor(undefined)} disabled={loading}>\n First page\n </Button>\n ) : null}\n {nextCursor ? (\n <Button variant=\"ghost\" onClick={() => setCursor(nextCursor)} disabled={loading}>\n More resources\n </Button>\n ) : null}\n </HStack>\n </>\n )}\n </Stack>\n </Dialog.Body>\n </>\n );\n};\n","import type { WorkbenchModuleContext } from \"../../core\";\n\nexport const closeResourceLinksOnProjectChange = (\n ctx: Pick<WorkbenchModuleContext, \"pages\" | \"layout\" | \"overlays\">,\n viewId: string,\n) => ({\n dispose: ctx.pages.store.subscribeSelector(\n (state) => state.projectId,\n () => {\n for (const widget of ctx.layout.getLayout().regions.overlay.widgets) {\n if (widget.viewId === viewId) ctx.overlays.closeOverlay(widget.widgetId);\n }\n },\n ),\n});\n","import type { ResourceRef } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchModuleContribution } from \"../../core\";\nimport { registerRelatedResourcePreviews } from \"./related-resource-previews\";\nimport { RelatedResources } from \"./related-resources\";\nimport { closeResourceLinksOnProjectChange } from \"./resource-links-project-scope\";\nimport type { ResourceLinksService } from \"./resource-links-types\";\n\nexport interface WorkbenchResourceLinksOptions {\n canonicalize(resource: ResourceRef): ResourceRef | undefined;\n createService(resource: ResourceRef): ResourceLinksService;\n}\n\nexport const resourceLinksCommandId = \"workbench.resources.links\";\nconst viewId = \"workbench.resources.related\";\n\nexport const createWorkbenchResourceLinksModule = (options: WorkbenchResourceLinksOptions) =>\n ({\n id: \"workbench.resource-links\",\n activate(ctx) {\n const previews = registerRelatedResourcePreviews(ctx, options);\n const currentResource = () => {\n const resource = ctx.getActiveResource() ?? ctx.getPrimaryResource();\n return resource && options.canonicalize(resource);\n };\n ctx.views.registerView({\n id: viewId,\n title: \"Related resources\",\n body: {\n kind: \"react\",\n render: (input) => {\n const resource = input.instance.resource;\n return resource ? (\n <RelatedResources\n key={`${resource.projectId}:${resource.extensionId}:${resource.type}:${resource.id}`}\n resource={resource}\n service={options.createService(resource)}\n onClose={() => ctx.overlays.closeOverlay(input.instance.instanceId)}\n />\n ) : null;\n },\n },\n });\n ctx.overlays.registerOverlay({\n id: viewId,\n viewId,\n config: { size: \"md\", placement: \"center\", scrollBehavior: \"inside\" },\n });\n ctx.commands.registerCommand(\n { id: resourceLinksCommandId, label: \"Related resources\", icon: \"link\", category: \"Resources\" },\n {\n isEnabled: () => Boolean(currentResource()),\n isVisible: () => Boolean(currentResource()),\n execute: (_args, context) => {\n const current = context?.resource ?? ctx.getActiveResource() ?? ctx.getPrimaryResource();\n const resource = current && options.canonicalize(current);\n if (resource) ctx.overlays.openOverlay(viewId, { resource, title: \"Related resources\" });\n },\n },\n );\n return [previews, closeResourceLinksOnProjectChange(ctx, viewId)];\n },\n }) satisfies WorkbenchModuleContribution;\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 workbench={input.workbench} treeViewId={navTreeId} activeNodeId={resourceKey(resource)} />\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 { settleReadBatch } from \"../../core/registries/views/settle-read-batch\";\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 let items: unknown[];\n try {\n items = await panel.items();\n } catch {\n items = [];\n }\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 = (panel: RegisteredSettingsPanel): 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: [],\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 signal?: AbortSignal;\n onProgress?(sections: TreeViewSection[]): void;\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, signal, onProgress } = input;\n signal?.throwIfAborted();\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 let result: TreeViewSection[] = [];\n const collections: CollectionSettingsPanel[] = [];\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 = sectionPanels.map(panelToNode);\n for (const panel of sectionPanels) if (panel.kind === \"collection\") collections.push(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 onProgress?.(result);\n await settleReadBatch(\n collections.map((panel) => async (signal) => {\n const children = await collectionChildren(panel);\n signal.throwIfAborted();\n result = result.map((section) => ({\n ...section,\n nodes: section.nodes.map((node) =>\n node.id === `settings-collection:${panel.id}` ? { ...node, children } : node,\n ),\n }));\n onProgress?.(result);\n }),\n signal,\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: ({ signal, onProgress }) =>\n buildSettingsTreeBody({\n settings: ctx.settings,\n hasProjectScope: hasProjectScope(),\n matchesWhen: (when) => ctx.context.matches(when),\n signal,\n onProgress,\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 // 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 { 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 { useRef } from \"react\";\nimport type { WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { PANEL_CONTENT_MIN_SIZE_PX, PANEL_MENU_RESIZE_HANDLE_SIZE_PX } from \"./panel-menu-sizing\";\n\nimport { useWorkbenchPanelMenus, type WorkbenchPanelMenuView } from \"./use-panel-menu\";\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\ninterface PanelMenuLayoutInput {\n content: ReactNode;\n view: WorkbenchPanelMenuView;\n workbench: WorkbenchCore;\n contentMinSizePx?: number;\n}\n\nconst addPanelMenu = (input: PanelMenuLayoutInput) => {\n const { content, view, workbench, contentMinSizePx = PANEL_CONTENT_MIN_SIZE_PX } = input;\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.has || view.collapsed}\n collapsible={view.collapsible}\n defaultSizePx={view.size.defaultPx}\n minSizePx={view.size.minPx}\n maxSizePx={view.size.maxPx}\n contentMinSizePx={contentMinSizePx}\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 [left, right] = useWorkbenchPanelMenus(workbench, panel);\n const withRight = addPanelMenu({ content: children, view: right, workbench });\n const contentMinSizePx =\n PANEL_CONTENT_MIN_SIZE_PX +\n (right.has && !right.collapsed ? right.size.minPx + PANEL_MENU_RESIZE_HANDLE_SIZE_PX : 0);\n return addPanelMenu({ content: withRight, view: left, workbench, contentMinSizePx });\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 const trigger = (\n <IconButton\n ref={triggerRef}\n variant=\"ghost\"\n size={PANEL_HEADER_CONTROL_SIZE}\n aria-label={`Open ${view.label}`}\n flexShrink={0}\n onClick={canAttach ? view.onOpen : undefined}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeftOpen\" : \"PanelRightOpen\"} size={14} />\n </IconButton>\n );\n\n if (canAttach) return <Tooltip content={view.title}>{trigger}</Tooltip>;\n\n // A floating menu is a temporary view. It keeps the stored open preference so that dismissing it\n // does not close the menu for wider panels, and opening it does not move another menu out.\n return (\n <Menu.Root\n variant=\"panel\"\n positioning={{\n placement: view.side === \"left\" ? \"bottom-start\" : \"bottom-end\",\n offset: { mainAxis: 0 },\n flip: false,\n fitViewport: true,\n getAnchorElement: () => triggerRef.current,\n }}\n onExitComplete={() => triggerRef.current?.focus()}\n >\n <Tooltip content={view.title}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={`${view.label} controls`} data-workbench-panel-menu-controls={view.region}>\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 </Header>\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflowY=\"auto\">\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 [left, right] = useWorkbenchPanelMenus(workbench, panel);\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 <WorkbenchPanelMenuOpener key={view.region} view={view} workbench={workbench} canAttach={view.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 { useWorkbenchRegionTabsVisible } from \"../region/region-tabs\";\nimport { WorkbenchTabDropTarget } from \"../region/tab-drag-context\";\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 const attached = useWorkbenchStore(workbench.layout.store, () => workbench.sidePanel.getMode() === \"attached\");\n const hasTabs = useWorkbenchRegionTabsVisible(workbench, \"side\");\n const showHeader = (settings?.showHeader !== false || hasTabs) && Boolean(header || 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 showHeader && attached ? (\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 position=\"relative\" flex=\"1\" minH={0} direction=\"column\">\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </Flex>\n </WorkbenchPanelMenuLayout>\n <WorkbenchTabDropTarget region=\"side\" />\n </AttachedPanel>\n </WorkbenchFocusRegion>\n );\n};\n\ninterface WorkbenchFloatingSidePanelProps extends WorkbenchSidePanelProps {\n available?: boolean;\n}\n\nexport const WorkbenchFloatingSidePanel = (props: WorkbenchFloatingSidePanelProps) => {\n const { workbench, contentSlotRef, bottomOffset, header, bubbleIcon, onOpen, available = true } = props;\n const mode = useWorkbenchStore(workbench.layout.store, () => workbench.sidePanel.getMode());\n const canFloat = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n const visible = available && canFloat && mode === \"floating\";\n\n return (\n <>\n {available && canFloat && mode !== \"attached\" ? (\n <BubbleButton\n isOpen={visible}\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 ) : null}\n {/* Both presentation slots stay connected so hiding cannot release a live iframe. */}\n <BubblePanel\n isOpen={visible}\n aria-label=\"Side Panel\"\n testId=\"workbench-side-panel-floating\"\n closeLabel=\"Close Side Panel\"\n containerProps={{\n \"data-workbench-panel\": \"side\",\n bottom: floatingPanelBottom(bottomOffset),\n bg: workbenchBackgrounds.widget,\n }}\n popOutLabel=\"Reattach Side Panel\"\n onClose={() => workbench.sidePanel.setMode(\"closed\")}\n onPopOut={() => workbench.sidePanel.setMode(\"attached\")}\n menu={visible ? <WorkbenchSidePanelHeader header={header} /> : undefined}\n overlay={<WorkbenchTabDropTarget region=\"side\" />}\n >\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </BubblePanel>\n </>\n );\n};\n","import type { TagEditorValue } from \"@pstdio/ui\";\nimport type { WorkflowStatus } from \"../../core\";\n\nexport const toStatusEditorValue = (status: WorkflowStatus): TagEditorValue => ({\n id: status.id,\n name: status.label,\n color: status.color,\n icon: status.icon,\n sortOrder: status.sortOrder,\n isDefault: status.isDefault,\n actions: [...(status.actions ?? [])],\n});\n\nconst sameActions = (left: readonly string[] | undefined, right: readonly string[] | undefined) =>\n [...(left ?? [])].sort().join(\"|\") === [...(right ?? [])].sort().join(\"|\");\n\nexport const statusNeedsUpdate = (original: WorkflowStatus, draft: TagEditorValue) =>\n original.label !== draft.name ||\n original.color !== draft.color ||\n original.icon !== draft.icon ||\n original.isDefault !== draft.isDefault ||\n !sameActions(original.actions, draft.actions);\n\nexport const toWorkflowStatus = (draft: TagEditorValue): WorkflowStatus => ({\n id: draft.id,\n label: draft.name,\n color: draft.color,\n icon: draft.icon,\n sortOrder: draft.sortOrder,\n isDefault: draft.isDefault,\n actions: [...(draft.actions ?? [])],\n});\n","import { Stack } from \"@chakra-ui/react\";\nimport { type SaveTagSettingsInput, TagSettingsPanel } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { RegisteredWorkbenchStatusSet, WorkbenchStatusRegistry, WorkflowStatus } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { statusNeedsUpdate, toStatusEditorValue, toWorkflowStatus } from \"./workflow-status-settings-model\";\n\ninterface WorkflowStatusSectionProps {\n statusSet: RegisteredWorkbenchStatusSet;\n workbench: { statuses: WorkbenchStatusRegistry };\n}\n\nconst WorkflowStatusSection = (props: WorkflowStatusSectionProps) => {\n const { statusSet, workbench } = props;\n const [statuses, setStatuses] = useState<WorkflowStatus[] | undefined>(() => {\n const cached = workbench.statuses.getStatuses(statusSet.id);\n return cached ? [...cached] : undefined;\n });\n const [loadError, setLoadError] = useState<unknown>();\n\n useEffect(() => {\n let current = true;\n const cached = workbench.statuses.getStatuses(statusSet.id);\n setStatuses(cached ? [...cached] : undefined);\n setLoadError(undefined);\n void workbench.statuses.load(statusSet.id).then(\n (value) => {\n if (current) setStatuses([...value]);\n },\n (error) => {\n if (current) setLoadError(error);\n },\n );\n return () => {\n current = false;\n };\n }, [statusSet.id, workbench]);\n\n const save = async (input: SaveTagSettingsInput<WorkflowStatus>) => {\n const next = input.drafts.map(toWorkflowStatus);\n setStatuses([...(await workbench.statuses.save(statusSet.id, next))]);\n };\n\n return (\n <TagSettingsPanel\n values={statuses}\n loadError={loadError}\n onSave={save}\n toEditorValue={toStatusEditorValue}\n valueNeedsUpdate={statusNeedsUpdate}\n readOnly={!statusSet.save}\n title={statusSet.title}\n description={statusSet.save ? undefined : \"This status set is read-only.\"}\n actionOptions={statusSet.actions?.map((action) => ({\n value: action.id,\n label: action.label,\n icon: action.icon ? <WorkbenchIcon name={action.icon} size={13} /> : undefined,\n }))}\n actionsLabel=\"Commands\"\n framed\n showColumnHeaders\n valueColumnLabel=\"State\"\n showDefault\n errorTitle={`Unable to update ${statusSet.title}`}\n addLabel=\"Add state\"\n addName=\"New status\"\n resetLabel=\"Reset\"\n saveLabel=\"Save\"\n deleteHeadline=\"Delete status?\"\n deleteNotificationText={(status) => `This will delete the \"${status.name}\" status.`}\n deleteButtonText=\"Delete status\"\n />\n );\n};\n\ninterface WorkflowStatusSettingsProps {\n workbench: { statuses: WorkbenchStatusRegistry };\n}\n\nexport const WorkflowStatusSettings = (props: WorkflowStatusSettingsProps) => {\n const { workbench } = props;\n useWorkbenchStore(workbench.statuses.store, (state) => state.statusSets);\n const statusSets = workbench.statuses.listStatusSets();\n\n return (\n <Stack gap=\"none\" minH=\"full\" bg=\"bg\">\n {statusSets.map((statusSet) => (\n <Stack key={statusSet.id} data-testid={`workflow-status-set-${statusSet.id}`} gap=\"none\">\n <WorkflowStatusSection workbench={workbench} statusSet={statusSet} />\n </Stack>\n ))}\n </Stack>\n );\n};\n","import { Box, Center, Text } from \"@chakra-ui/react\";\nimport { useThemePreference } from \"@pstdio/ui\";\nimport { createTerminalThemeFromPreference, Terminal, type TerminalBridge } from \"@pstdio/ui/terminal\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { ResourceRef, WorkbenchCore, WorkbenchPanelInstance, WorkbenchTerminalController } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference)!;\n const placementRef = useRef(placement);\n // A layout effect runs before the terminal's passive effect opens a session,\n // so a session opened in the same commit reads the current placement.\n useLayoutEffect(() => {\n placementRef.current = placement;\n }, [placement]);\n const [bridge] = useState(() =>\n createControllerTerminalBridge(workbench.terminal, {\n getBindingId: () => 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 = Object.values(state.layout.regions).find((region) =>\n region.widgets.some((candidate) => candidate.widgetId === placement.instanceId),\n );\n if (!region) return false;\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.getLayout().regions;\n const current = Object.values(currentPlacement)\n .flatMap((region) => region.widgets)\n .find((candidate) => candidate.widgetId === placement.instanceId);\n const identity = current?.placementIdentity;\n if (identity?.kind === \"shell\" && current?.resource) {\n updateShellPlacement(identity, { resource: { ...current.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={createTerminalThemeFromPreference(preference)}\n autoFocus={active}\n killOnUnmount={false}\n onSessionOpen={setSessionId}\n />\n </Box>\n );\n};\n","import {\n type ResourceRef,\n type WorkbenchCoreContributionContext,\n type WorkbenchLayout,\n type WorkbenchModuleContribution,\n type WorkbenchPanelRegion,\n workbenchPanelRegions,\n} from \"../../core\";\nimport { pageContextChanged } from \"../../core/controllers/page-runtime/page-main-tabs\";\nimport { departingPagePreviews } from \"../../core/controllers/page-runtime/page-preview-lifetime\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\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 region?: WorkbenchPanelRegion;\n}\ntype TerminalResource = OpenWorkbenchTerminalOptions[\"resource\"];\nconst terminalPlacements = (layout: WorkbenchLayout) =>\n workbenchPanelRegions\n .flatMap((region) => layout.regions[region].widgets)\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID);\nconst terminalInstanceIds = (ctx: WorkbenchCoreContributionContext) =>\n new Set(terminalPlacements(ctx.layout.getLayout()).map((placement) => placement.widgetId));\nconst watchClosedTerminalPlacements = (ctx: WorkbenchCoreContributionContext) => {\n // Scope and mode changes hide placements temporarily. Only an explicit tab\n // close should end the PTY bound to that placement.\n let previousScope = ctx.layout.getPersistenceScope();\n let previousMode = ctx.modes.getActiveModeId();\n let previousPage = ctx.pages.store.getState();\n const unsubscribeLayout = ctx.layout.store.subscribe((state, previousState) => {\n // Store notifications may be batched until after the scope events finish.\n const scope = ctx.layout.getPersistenceScope();\n const scopeChanged = scope !== previousScope;\n previousScope = scope;\n const mode = ctx.modes.getActiveModeId();\n const modeChanged = mode !== previousMode;\n previousMode = mode;\n const page = ctx.pages.store.getState();\n const closedPreviews = new Set(\n departingPagePreviews(page, previousPage, previousState.layout).map((tab) => tab.widgetId),\n );\n const hiddenMain = new Set(\n pageContextChanged(page, previousPage)\n ? previousState.layout.regions.main.widgets\n .filter((tab) => tab.tabRetention !== \"preview\")\n .map((tab) => tab.widgetId)\n : [],\n );\n previousPage = page;\n if (modeChanged || ctx.modes.isTransitioning()) return;\n const currentIds = new Set(terminalPlacements(state.layout).map((placement) => placement.widgetId));\n const previousIds = terminalPlacements(previousState.layout).map((placement) => placement.widgetId);\n for (const instanceId of previousIds) {\n if (hiddenMain.has(instanceId)) continue;\n if (scopeChanged && !closedPreviews.has(instanceId)) continue;\n if (!currentIds.has(instanceId)) void ctx.terminal.killBinding(instanceId);\n }\n });\n return {\n dispose() {\n unsubscribeLayout();\n for (const instanceId of terminalInstanceIds(ctx)) {\n void ctx.terminal.killBinding(instanceId);\n }\n },\n };\n};\nconst terminalTitlePattern = /^Terminal (\\d+)$/;\nconst nextTerminalIndexes = new WeakMap<WorkbenchCoreContributionContext[\"layout\"][\"store\"], number>();\nconst getInitialTerminalIndex = (ctx: WorkbenchCoreContributionContext) => {\n const placements = terminalPlacements(ctx.layout.getLayout());\n const titleIndexes = placements\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(placements.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 in the requested region, or Bottom when no region is given.\nexport const openWorkbenchTerminal = (\n ctx: WorkbenchCoreContributionContext,\n input: OpenWorkbenchTerminalOptions = {},\n) => {\n const { reveal = true, region = \"secondary\" } = 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 extensionId: \"pstdio\",\n projectId: workspace?.projectId ?? ctx.pages.store.getState().projectId,\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 region,\n });\n if (identity.kind !== \"shell\") throw new Error(\"Terminal placement must be shell-owned\");\n if (reveal && region !== \"main\") {\n ctx.shell.setRegionOpen(region, true);\n }\n const placement = ctx.layout\n .getLayout()\n .regions[region].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 icon: \"SquareTerminal\",\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 {\n execute: (_args, context) =>\n openWorkbenchTerminal(ctx, { resource: context?.resource, region: context?.region }),\n },\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 type ThemePreferenceStorage,\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 /** Where the chosen theme is saved. Defaults to browser storage. */\n themeStorage?: ThemePreferenceStorage;\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 storage={props.themeStorage}\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, CloseButton, 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}\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\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 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 { contentHeight, contentMaxHeight, contentMinHeight, contentWidth, contentMaxWidth, ...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 asChild>\n <CloseButton size=\"sm\" aria-label={`Close ${closeLabel}`} />\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 { resolvePageBreadcrumbPlacement } from \"../../core/registries/pages/page-active-placement\";\nimport { resolveResourcePreview } from \"../../core/registries/resources/resource-preview\";\nimport { createWorkbenchLocationActions, useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { createWorkbenchResourceMenu } from \"../menus/resource-menu\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { usePlacementTab } from \"../shared/use-placement-tab\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nexport const WorkbenchBreadcrumbActions = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n const changes = useWorkbenchStore(workbench.resources.preview.store, (state) => state.changes);\n const page = useWorkbenchStore(workbench.pages.store, (state) =>\n state.activePageId ? state.pages[state.activePageId] : undefined,\n );\n const routedResource = useWorkbenchStore(workbench.pages.store, (state) => state.location?.resource);\n const placement = useWorkbenchStore(workbench.layout.store, (state) =>\n resolvePageBreadcrumbPlacement(state.layout, page, routedResource),\n );\n const snapshot = usePlacementTab(placement, workbench);\n useWorkbenchResourceActionResolver(workbench);\n const subject = placement?.resource ?? items.at(-1)?.resource;\n const resource = subject ? resolveResourcePreview(subject, changes) : undefined;\n const resourceActions = createWorkbenchResourceMenu(workbench, resource, snapshot);\n const actions = [\n ...resourceActions,\n ...createWorkbenchLocationActions(workbench, resource).map((action) => ({\n ...action,\n group: { id: \"location\", label: \"Location\" },\n })),\n ];\n if (items.length === 0 || actions.length === 0) return null;\n const resourceLabel = snapshot.label ?? resource?.label ?? resource?.id ?? resource?.type;\n const label = resource ? `Actions for ${resourceLabel}` : \"Page actions\";\n return (\n <ResourceActionMenu actions={actions} positioning={{ placement: \"bottom-start\" }}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={label} data-workbench-breadcrumb-resource-actions=\"\">\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 { 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 { WorkbenchBreadcrumbActions } 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 return (\n <Header\n data-workbench-region=\"nav\"\n display={chrome === false ? \"none\" : \"flex\"}\n variant=\"main\"\n padding={chrome ? \"0\" : undefined}\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <Box display={chrome ? \"none\" : \"contents\"}>\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderLeadingMenuPath} />\n <WorkbenchNavigationControls workbench={workbench} regionControls={sidenavControls} />\n </Box>\n <Box\n display={hasNav ? \"block\" : \"none\"}\n flex={chrome ? \"1\" : undefined}\n h=\"full\"\n minW=\"0\"\n maxW={chrome ? undefined : \"60%\"}\n overflow=\"hidden\"\n >\n <WorkbenchRegion workbench={workbench} region=\"nav\" title=\"Nav Chrome\" />\n </Box>\n <Box display={chrome ? \"none\" : \"contents\"}>\n {!hasNav ? (\n <Box h=\"full\" minW=\"0\" maxW=\"60%\" overflow=\"hidden\">\n <WorkbenchBreadcrumbView workbench={workbench} />\n </Box>\n ) : null}\n <HStack\n data-workbench-breadcrumb-action-slot=\"\"\n flexShrink={0}\n gap=\"2xs\"\n h=\"6\"\n justifyContent=\"center\"\n minW=\"6\"\n >\n <WorkbenchBreadcrumbActions workbench={workbench} />\n </HStack>\n <Box flex=\"1\" minW=\"0\" />\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderTrailingMenuPath} />\n </Box>\n <WorkbenchRegionControls controls={chrome ? regionControls : trailingRegionControls} />\n </Header>\n );\n};\n","import type { ControlValueMap } from \"@pstdio/sdk/extensions\";\n\nexport const mergeControlDraft = (draft: ControlValueMap, saved: ControlValueMap, changed: Record<string, number>) => {\n const values = { ...saved };\n for (const id of Object.keys(changed)) {\n if (id in draft) values[id] = draft[id];\n }\n return values;\n};\n","export const createControlSaveQueue = () => {\n let previous: Promise<unknown> = Promise.resolve();\n return <T>(save: () => Promise<T>) => {\n const current = previous.then(save);\n previous = current.catch(() => undefined);\n return current;\n };\n};\n","import { Text } from \"@chakra-ui/react\";\nimport type { ControlValue, HarnessControl as HarnessControlDeclaration } from \"@pstdio/sdk/extensions\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-param-field\";\n\ninterface HarnessControlProps {\n param: HarnessControlDeclaration;\n value: ControlValue;\n readOnly: boolean;\n renderParamField?: CommandParamFieldRenderer;\n onChange: (value: ControlValue) => void;\n}\n\nexport const HarnessControl = (props: HarnessControlProps) => {\n const { param, value, readOnly, renderParamField, onChange } = props;\n const field = renderParamField?.({\n entry: { key: param.id, label: param.name, description: param.description, type: \"harness\", required: true },\n value: JSON.stringify(value),\n disabled: readOnly || Boolean(param.readOnly),\n onChange: (next) => {\n if (!readOnly && !param.readOnly && typeof next === \"string\") onChange(JSON.parse(next));\n },\n });\n if (field) return field;\n return (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n Harness selection is unavailable in this host.\n </Text>\n );\n};\n","import { Box, Button, Flex, Stack, Text } from \"@chakra-ui/react\";\nimport type { ControlValueMap } from \"@pstdio/sdk/extensions\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { ScrollArea } from \"@pstdio/ui\";\nimport { type InputGroup, type Param, ParamEditor, type ParamValue } from \"@pstdio/ui/param-editor\";\nimport { controlValueSchema } from \"pstdio-api-contracts\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getWorkbenchRenderers,\n type RegisteredControlsRendererContribution,\n rendererReadKey,\n type WorkbenchCore,\n type WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { runUserAction } from \"../../../core/shared/run-user-action\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-param-field\";\nimport { RendererReadNotice } from \"../renderer-read-notice\";\nimport { usePageParams } from \"../use-page-params\";\nimport { useRendererRead } from \"../use-renderer-read\";\nimport { mergeControlDraft } from \"./control-draft\";\nimport { createControlSaveQueue } from \"./control-save-queue\";\nimport { HarnessControl } from \"./harness-control\";\n\ninterface WorkbenchControlsViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredControlsRendererContribution;\n placement: WorkbenchPanelInstance;\n renderParamField?: CommandParamFieldRenderer;\n}\ninterface ControlsViewState {\n params: Param[];\n groups: InputGroup[];\n values: ControlValueMap;\n readOnly: boolean;\n loading: boolean;\n changed: Record<string, number>;\n error?: string;\n}\nconst initialState: ControlsViewState = {\n params: [],\n groups: [],\n values: {},\n changed: {},\n readOnly: false,\n loading: true,\n};\nexport const WorkbenchControlsView = (props: WorkbenchControlsViewProps) => {\n const { contribution, placement } = props;\n return <WorkbenchControlsForm key={JSON.stringify([contribution.id, resourceKey(placement.resource)])} {...props} />;\n};\nconst WorkbenchControlsForm = (props: WorkbenchControlsViewProps) => {\n const { workbench, contribution, placement, renderParamField } = props;\n const resource = placement.resource;\n const pageParams = usePageParams(workbench, placement);\n const [state, setState] = useState<ControlsViewState>(initialState);\n const [pending, setPending] = useState(false);\n const saves = useRef(createControlSaveQueue());\n const changes = useRef(0);\n const read = useRendererRead({\n workbench,\n ownerKey: rendererReadKey(placement),\n queryKey: JSON.stringify([contribution.id, resourceKey(resource), pageParams]),\n\n load: (signal) => contribution.executeQuery(resource, signal, pageParams),\n subscribe: (refresh) => {\n const subscription = contribution.subscribe?.(refresh);\n const events = getWorkbenchRenderers(workbench).onDidRefreshControlsRenderer((event) => {\n if (event.controlsRendererId === contribution.id) refresh();\n });\n return () => {\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n events.dispose();\n };\n },\n });\n useEffect(() => {\n if (!read.value) {\n setState(initialState);\n return;\n }\n const result = read.value;\n setState((previous) => ({\n ...previous,\n params: result.params ?? [],\n groups: result.groups ?? [],\n values: mergeControlDraft(\n previous.values,\n { ...(contribution.defaultValues ?? {}), ...(result.values ?? {}) },\n previous.changed,\n ),\n readOnly: Boolean(result.readOnly),\n loading: false,\n }));\n }, [read.value, contribution.defaultValues]);\n const readOnly = pending || state.readOnly || (!contribution.updateValue && !contribution.apply);\n const showFooter =\n Boolean(read.value) &&\n !state.loading &&\n !state.readOnly &&\n (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 const revision = ++changes.current;\n if (contribution.updateValue)\n void runUserAction(workbench, \"Update value\", () =>\n saves.current(async () => {\n try {\n await contribution.updateValue!({ controlId: id, value, values, resource });\n } finally {\n setState((previous) => {\n if (previous.changed[id] !== revision) return previous;\n const changed = { ...previous.changed };\n delete changed[id];\n return { ...previous, changed };\n });\n await read.retry();\n }\n }),\n );\n setState((prev) => ({\n ...prev,\n values: { ...prev.values, [id]: value },\n changed: { ...prev.changed, [id]: revision },\n error: undefined,\n }));\n };\n const submit = async (reset: boolean) => {\n setPending(true);\n setState((previous) => ({ ...previous, error: undefined }));\n try {\n if (reset) await contribution.reset?.({ resource });\n else await contribution.apply?.({ values: state.values, resource });\n setState((previous) => ({\n ...previous,\n changed: {},\n values: reset ? { ...contribution.defaultValues, ...read.value?.values } : previous.values,\n }));\n await read.retry();\n } catch (error) {\n setState((previous) => ({ ...previous, error: error instanceof Error ? error.message : String(error) }));\n } finally {\n setPending(false);\n }\n };\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n {read.error ? <RendererReadNotice error={read.error} retry={read.retry} /> : null}\n {state.error ? (\n <Box p=\"sm\">\n <Text role=\"alert\" textStyle=\"paragraph/S/regular\" color=\"fg\">\n {state.error}\n </Text>\n </Box>\n ) : null}\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\">\n {read.value || read.loading ? (\n <ControlsContent\n state={read.value ? state : initialState}\n contribution={contribution}\n readOnly={readOnly}\n onChange={handleChange}\n renderParamField={renderParamField}\n />\n ) : null}\n </ScrollArea>\n {showFooter ? (\n <Flex\n borderTopWidth=\"1px\"\n borderColor=\"border.muted\"\n pl=\"sm\"\n pr=\"4xl\"\n py=\"xs\"\n gap=\"xs\"\n justifyContent=\"flex-end\"\n >\n {contribution.reset || contribution.apply ? (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n disabled={pending}\n onClick={() => {\n void submit(true);\n }}\n >\n Reset\n </Button>\n ) : null}\n {contribution.apply ? (\n <Button\n size=\"xs\"\n variant=\"subtle\"\n disabled={pending}\n onClick={() => {\n void submit(false);\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 renderParamField?: CommandParamFieldRenderer;\n}\nconst ControlsContent = (props: ControlsContentProps) => {\n const { state, contribution, readOnly, onChange, renderParamField } = props;\n // Host-backed controls reuse command fields; the UI editor still owns group layout.\n const hostParam = (param: Param): Param => {\n if (param.type !== \"harness\") return param;\n return {\n id: param.id,\n name: \"\",\n type: \"property\",\n value: (\n <HarnessControl\n param={param}\n value={state.values[param.id] ?? param.defaultValue}\n readOnly={readOnly}\n renderParamField={renderParamField}\n onChange={(value) => onChange(param.id, value)}\n />\n ),\n };\n };\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.params.length || state.groups.length)\n return (\n <ParamEditor\n variant=\"small\"\n params={state.params.map(hostParam)}\n groups={state.groups.map((group) => ({ ...group, params: group.params.map(hostParam) }))}\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 type { CommandParamFieldRenderer } from \"../../command-palette/command-param-field\";\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 = (\n workbench: WorkbenchCore,\n options: { renderParamField?: CommandParamFieldRenderer } = {},\n) => {\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, {\n workbench: scope,\n contribution,\n placement: instance,\n renderParamField: options.renderParamField,\n });\n },\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchDataTableView } from \"./data-table-view\";\n\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchDataTableRenderer = (\n workbench: WorkbenchCore,\n options: { renderParamField?: CommandParamFieldRenderer } = {},\n) => {\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, {\n workbench: scope,\n contribution,\n placement: instance,\n renderParamField: options.renderParamField,\n });\n },\n );\n};\n","import type { CommandExecuteResponse } from \"@pstdio/sdk/api\";\n\nconst storageVersions = Symbol(\"file storage versions\");\ninterface ObservedContent {\n [storageVersions]?: Record<string, string>;\n}\nexport const fileStorageVersions = (content: unknown) =>\n (content as ObservedContent | undefined)?.[storageVersions] ?? {};\nexport const attachFileStorageVersions = <T extends object>(content: T, response: unknown) => {\n const value = (response as CommandExecuteResponse | undefined)?.outcome?.data?.fileStorageVersions;\n if (value && typeof value === \"object\" && !Array.isArray(value)) Object.assign(content, { [storageVersions]: value });\n return content;\n};\nexport const copyFileStorageVersions = <T extends object>(content: T, source: unknown) =>\n Object.assign(content, { [storageVersions]: fileStorageVersions(source) });\n","// Owns what a load does to the renderer: the last document per binding, the\n// revision that drives the editor's React key, and the single place where a\n// fetched document is accepted.\n\nimport type {\n FileRendererContent,\n FileRendererRefreshOrigin,\n RegisteredFileRendererContribution,\n ResourceRef,\n} from \"../../../core\";\nimport { copyFileStorageVersions } from \"../../../extensions/contributions/file-storage-versions\";\nimport type { FileEditController } from \"./file-renderer-edit-state\";\n\nexport interface LoadedFile extends FileRendererContent {\n // Bumped whenever a load brings content the editor is not showing, so the\n // uncontrolled editors remount with it.\n editorRevision: number;\n loadKey: string;\n}\n\n// Last loaded document per binding, so reopening a recently viewed file mounts\n// the editor immediately instead of a spinner. The follow-up load reconciles:\n// unchanged content keeps the revision (no remount), changed content remounts.\nconst FILE_CONTENT_CACHE_LIMIT = 30;\nconst fileContentCache = new Map<string, FileRendererContent>();\n\nexport const readCachedFileContent = (loadKey: string) => fileContentCache.get(loadKey);\n\nexport const clearCachedResourceContent = (resourceKey: string) => {\n for (const key of fileContentCache.keys()) {\n if (key.startsWith(`${JSON.stringify(resourceKey)}:`)) fileContentCache.delete(key);\n }\n};\n\nexport const storeCachedFileContent = (loadKey: string, content: FileRendererContent) => {\n fileContentCache.delete(loadKey);\n fileContentCache.set(loadKey, content);\n if (fileContentCache.size <= FILE_CONTENT_CACHE_LIMIT) return;\n const oldest = fileContentCache.keys().next().value;\n if (oldest !== undefined) fileContentCache.delete(oldest);\n};\n\n// A reload that returns what the editor already shows must not remount it: the\n// revision feeds the editor's React key, and a new key destroys focus and\n// selection. `shown` is what the editor displayed before this load — after a\n// save that is the saved value, which differs from the previously loaded state.\nconst nextLoadedRevision = (\n previous: LoadedFile | null,\n next: FileRendererContent,\n loadKey: string,\n shown?: string,\n) => {\n if (!previous || previous.loadKey !== loadKey) return 1;\n const shownContent = shown ?? previous.content;\n if (shownContent === next.content && previous.dataUrl === next.dataUrl) return previous.editorRevision;\n return previous.editorRevision + 1;\n};\n\n// Records a load: the controller takes the document as its baseline and reports\n// what the editor was showing, the cache keeps it for the next open, and the\n// returned updater puts it in React state. Returns nothing when the controller\n// rejects the load, which it does while local edits or a failed save wait.\nexport const acceptFileRendererLoad = (\n next: FileRendererContent,\n loadKey: string,\n controller: FileEditController | null,\n) => {\n const accepted = controller ? controller.acceptLoaded(next.content, next.revision) : { shown: undefined };\n if (!accepted) return;\n storeCachedFileContent(loadKey, next);\n return (previous: LoadedFile | null) => ({\n ...next,\n editorRevision: nextLoadedRevision(previous, next, loadKey, accepted.shown),\n loadKey,\n });\n};\n\nexport const saveLoadedFile = async (\n contribution: RegisteredFileRendererContribution,\n resource: ResourceRef | undefined,\n value: string,\n origin: FileRendererRefreshOrigin,\n loaded: FileRendererContent | undefined,\n) => {\n const result = await contribution.save?.(resource, value, origin, loaded);\n const content = loaded ? copyFileStorageVersions({ ...loaded, content: value }, result) : undefined;\n return { result: result ?? undefined, content };\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { createElement, lazy, Suspense } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { clearCachedResourceContent } from \"./file-renderer-load-state\";\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 workbench.resources.onWillRemove((resource) => {\n clearCachedResourceContent(resourceKey(resource));\n return [];\n });\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 { KanbanRendererMove } from \"@pstdio/sdk/extensions\";\nimport type { KanbanRendererContribution } from \"../../../core\";\n\ntype MoveCallbacks = Pick<KanbanRendererContribution, \"onMove\" | \"onAttributeChange\" | \"onReorder\">;\n\nexport const prepareKanbanMove = (callbacks: MoveCallbacks, move: KanbanRendererMove) => {\n const { onMove, onAttributeChange, onReorder } = callbacks;\n if (onMove) return { move, save: () => onMove(move) };\n const supportedMove: KanbanRendererMove = {\n rowId: move.rowId,\n attributes: onAttributeChange ? move.attributes : {},\n order: onReorder ? move.order : undefined,\n };\n return {\n move: supportedMove,\n save: async () => {\n for (const [attributeId, value] of Object.entries(supportedMove.attributes)) {\n await onAttributeChange!(move.rowId, attributeId, value);\n }\n if (supportedMove.order) await onReorder!(move.rowId, supportedMove.order.beforeRowId);\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","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, Skeleton, Stack } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea } from \"@pstdio/ui\";\nimport {\n type AttributeDescriptor,\n type AttributesSource,\n applyKanbanMove,\n isAttributesSource,\n KanbanRenderer,\n type KanbanRendererRow,\n useKanbanRendererStore,\n} from \"@pstdio/ui/kanban-renderer\";\nimport { type ReactNode, useSyncExternalStore } from \"react\";\nimport type {\n RegisteredKanbanRendererContribution,\n ResourceRef,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers, rendererReadKey } from \"../../../core\";\nimport { reportUserActionError, runUserAction } from \"../../../core/shared/run-user-action\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport { RendererReadNotice } from \"../renderer-read-notice\";\nimport { usePageParams } from \"../use-page-params\";\nimport { useRendererRead } from \"../use-renderer-read\";\nimport { ViewToolbarActions } from \"../view-toolbar-actions\";\nimport { prepareKanbanMove } from \"./kanban-move\";\nimport { bindReactKanbanPresentation } from \"./kanban-presentation\";\nimport { resolveKanbanRendererStorageKey } from \"./kanban-view-storage\";\n\ninterface WorkbenchKanbanViewProps {\n workbench: WorkbenchCore;\n renderParamField?: CommandParamFieldRenderer;\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 pageParams = usePageParams(workbench, placement);\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 provider = contribution.viewsProvider;\n const viewsSource = useSyncExternalStore(\n provider?.subscribe ?? noopSubscribe,\n provider?.getSnapshot ?? (() => undefined),\n provider?.getSnapshot ?? (() => undefined),\n );\n const initialState = {\n settings: contribution.defaultSettings,\n filter: contribution.defaultFilter,\n sorts: contribution.defaultSorts,\n };\n\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filter = useKanbanRendererStore(storageKey, (state) => state.filter, initialState);\n const sorts = useKanbanRendererStore(storageKey, (state) => state.sorts, initialState);\n\n const read = useRendererRead({\n workbench,\n ownerKey: rendererReadKey(placement),\n queryKey: contribution.id,\n // The view can narrow what the query returns, so it loads again while the board stays on\n // screen. Search is not part of it, so typing a search never runs the query.\n refreshKey: JSON.stringify([settings, filter, sorts, pageParams]),\n\n load: (signal) => contribution.executeQuery({ settings, filter, sorts, pageParams }, signal),\n subscribe: (refresh) => {\n const subscription = contribution.subscribe?.(refresh);\n const events = getWorkbenchRenderers(workbench).onDidRefreshKanbanRenderer((event) => {\n if (event.kanbanRendererId === contribution.id) refresh();\n });\n return () => {\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n events.dispose();\n };\n },\n });\n const rows = read.value ?? [];\n\n const handleOpenRow = (row: KanbanRendererRow) => {\n if (contribution.onRowActivate) void runUserAction(workbench, \"Open row\", () => contribution.onRowActivate!(row));\n };\n\n const getRowContextMenuActions = (row: KanbanRendererRow) => {\n const resourceActions = isKanbanRowResource(row.resource) ? resolveResourceActions(row.resource) : [];\n const contributionActions = (contribution.getRowContextMenuActions?.(row) ?? []).map((action) => ({\n ...action,\n onClick: () => runUserAction(workbench, action.label, () => action.onClick?.()),\n }));\n return mergeKanbanViewRowActions(resourceActions, contributionActions);\n };\n const contentPlaceholder = read.error ? (\n <RendererReadNotice error={read.error} retry={read.retry} />\n ) : (\n <Skeleton minH=\"12rem\" w=\"full\" />\n );\n\n const readNotice = read.error && read.value ? <RendererReadNotice error={read.error} retry={read.retry} /> : null;\n if (provider && !viewsSource) {\n return (\n <WorkbenchKanbanViewFrame usesInternalScroll={settings.viewMode === \"board\"}>\n {readNotice}\n <Skeleton minH=\"12rem\" w=\"full\" />\n </WorkbenchKanbanViewFrame>\n );\n }\n\n return (\n <WorkbenchKanbanViewFrame usesInternalScroll={settings.viewMode === \"board\"}>\n {readNotice}\n <KanbanRenderer\n itemLabel={\n contribution.resourceKind ? workbench.resources.getKind(contribution.resourceKind)?.label : undefined\n }\n viewsSource={viewsSource}\n rows={rows}\n contentPlaceholder={read.value ? undefined : contentPlaceholder}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={contribution.defaultSettings}\n defaultFilter={contribution.defaultFilter}\n defaultSorts={contribution.defaultSorts}\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 onActionError={(error, action) => reportUserActionError(workbench, action, error)}\n onAttributeChange={contribution.onAttributeChange}\n onMove={\n contribution.onMove || contribution.onAttributeChange\n ? (move) => {\n const mutation = prepareKanbanMove(contribution, move);\n return read.mutate((rows) => applyKanbanMove(rows, mutation.move), mutation.save);\n }\n : undefined\n }\n onReorder={\n contribution.onReorder\n ? (rowId, beforeRowId) =>\n read.mutate(\n (rows) => applyKanbanMove(rows, { rowId, attributes: {}, order: { beforeRowId } }),\n () => contribution.onReorder!(rowId, beforeRowId),\n )\n : undefined\n }\n createRow={contribution.createRow}\n onCreateRow={contribution.onCreateRow}\n onColumnAction={\n contribution.onColumnAction\n ? (...args) => runUserAction(workbench, \"Column action\", () => contribution.onColumnAction!(...args))\n : undefined\n }\n getRowContextMenuActions={getRowContextMenuActions}\n toolbarActions={\n <ViewToolbarActions\n workbench={workbench}\n actions={contribution.toolbarActions}\n context={{ resource: placement.resource }}\n renderParamField={props.renderParamField}\n />\n }\n />\n </WorkbenchKanbanViewFrame>\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\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 = (\n workbench: WorkbenchCore,\n options: { renderParamField?: CommandParamFieldRenderer } = {},\n) => {\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, {\n workbench: scope,\n contribution,\n placement: instance,\n renderParamField: options.renderParamField,\n });\n },\n );\n};\n","import type { ResourceContextAction } from \"@pstdio/ui\";\nimport { createElement } from \"react\";\nimport { getWorkbenchRenderers, rendererReadKey, 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 placement: instance,\n readOwnerKey: rendererReadKey(instance),\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 { useWorkbenchPanelMenusPresent } from \"../panel-menu/use-panel-menu\";\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.\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 hasMenus = useWorkbenchPanelMenusPresent(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 || hasMenus,\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 {\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n WorkbenchRegionTabs,\n} from \"../region/region-tabs\";\nimport { WorkbenchTabDropTarget } from \"../region/tab-drag-context\";\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 const hasTabs = useWorkbenchRegionTabsVisible(workbench, \"secondary\");\n const visible = (settings?.showHeader !== false || hasTabs) && (hasSecondaryHeader || hasPanelHeader);\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 position=\"relative\"\n >\n <Header\n display={visible ? \"flex\" : \"none\"}\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 <Box display={hasSecondaryHeader ? \"block\" : \"none\"} flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"secondary-header\" title=\"Secondary Panel header\" />\n </Box>\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"secondary\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"secondary-header\" />\n </Header>\n <WorkbenchTabDropTarget region=\"secondary\" />\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 { WorkbenchTabDropTarget } from \"../region/tab-drag-context\";\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 const visible = (settings?.showHeader !== false || hasMainContentTabs) && (hasMainHeader || hasPanelHeader);\n\n return (\n <Header\n data-workbench-panel-header=\"main\"\n display={visible ? \"flex\" : \"none\"}\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 <WorkbenchRegion workbench={workbench} region=\"main-header\" title=\"Main header\" />\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 pageId = useWorkbenchStore(workbench.pages.store, (state) => state.activePageId);\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 data-workbench-page={pageId}\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 position=\"relative\"\n >\n <MainHeaderBar workbench={workbench} hasMainHeader={hasMainHeader} />\n <WorkbenchTabDropTarget region=\"main\" />\n <Box gridRow=\"2\" h=\"full\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {mainPanelWithMenus}\n </Box>\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.has || 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 {\n DndContext,\n type DragOverEvent,\n DragOverlay,\n MouseSensor,\n pointerWithin,\n TouchSensor,\n useDraggable,\n useDroppable,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { DropIndicator } from \"@pstdio/ui\";\nimport { useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchStatusBarSlot, WorkbenchWidgetPlacement } from \"../../core\";\nimport { useRetainedViewPlacements } from \"../region/use-retained-view-placements\";\nimport { WorkbenchWidgetHost } from \"../region/widget-host\";\nimport { useWorkbenchActiveModeId } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface StatusDrop {\n id: string;\n edge: \"before\" | \"after\";\n}\n\nconst reorderInstructions = \"Drag to reorder. Alt+Left or Alt+Right to move.\";\n\nconst resolveDrop = (event: DragOverEvent) => {\n if (!event.over || event.over.id === event.active.id) return undefined;\n const rect = event.active.rect.current.translated;\n if (!rect) return undefined;\n return {\n id: String(event.over.id),\n edge: rect.left + rect.width / 2 < event.over.rect.left + event.over.rect.width / 2 ? \"before\" : \"after\",\n } satisfies StatusDrop;\n};\n\ninterface WorkbenchStatusBarItemProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n ids: string[];\n activeId?: string;\n drop?: StatusDrop;\n}\n\nconst WorkbenchStatusBarItem = (props: WorkbenchStatusBarItemProps) => {\n const { workbench, placement, ids, activeId, drop } = props;\n const id = placement.widgetId;\n const order = ids.indexOf(id);\n const sortable = order >= 0 && ids.length > 1;\n const drag = useDraggable({ id, disabled: !sortable });\n const target = useDroppable({ id, disabled: !sortable });\n const title = placement.title ?? id;\n return (\n <Box\n ref={(node: HTMLDivElement | null) => {\n drag.setNodeRef(node);\n target.setNodeRef(node);\n }}\n {...drag.listeners}\n tabIndex={sortable ? 0 : undefined}\n role=\"group\"\n aria-label={title}\n aria-describedby={sortable ? drag.attributes[\"aria-describedby\"] : undefined}\n aria-keyshortcuts={sortable ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined}\n data-status-bar-item={id}\n data-sortable={sortable || undefined}\n data-dragging={activeId === id || undefined}\n layerStyle=\"statusBarItem\"\n alignItems=\"center\"\n display={order < 0 ? \"none\" : \"flex\"}\n inert={order < 0}\n order={order}\n touchAction={sortable ? \"pan-y\" : undefined}\n onKeyDown={(event) => {\n if (!sortable || !event.altKey || ![\"ArrowLeft\", \"ArrowRight\"].includes(event.key)) return;\n event.preventDefault();\n event.stopPropagation();\n const left = event.key === \"ArrowLeft\";\n const neighbor = ids[order + (left ? -1 : 1)];\n if (neighbor) {\n workbench.statusBar.reorderItem(id, left ? { beforeItemId: neighbor } : { afterItemId: neighbor });\n }\n }}\n >\n <WorkbenchWidgetHost workbench={workbench} region=\"status\" placement={placement} />\n {/* A drag must keep its pointer events in the host, even over an extension iframe. */}\n {activeId ? <Box position=\"absolute\" inset=\"0\" /> : null}\n {drop?.id === id ? (\n <DropIndicator orientation=\"vertical\" {...(drop.edge === \"before\" ? { left: 0 } : { right: 0 })} />\n ) : null}\n </Box>\n );\n};\n\nexport const WorkbenchStatusBarItems = (props: { workbench: WorkbenchCore; slot: WorkbenchStatusBarSlot }) => {\n const { slot, workbench } = props;\n useWorkbenchStore(workbench.statusBar.store, (state) => state);\n const activeModeId = useWorkbenchActiveModeId(workbench);\n const items = activeModeId === workbench.modes.getActiveModeId() ? workbench.statusBar.listVisibleItems(slot) : [];\n const ids = items.map((item) => item.id);\n const placements = useRetainedViewPlacements(\n workbench,\n items.map((item) => ({\n widgetId: item.id,\n contributionId: item.viewId,\n viewId: item.viewId,\n title: workbench.views.getView(item.viewId)?.title,\n closable: false,\n })),\n );\n const [activeId, setActiveId] = useState<string>();\n const [drop, setDrop] = useState<StatusDrop>();\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, { activationConstraint: { distance: 5 } }),\n );\n const finish = () => {\n setActiveId(undefined);\n setDrop(undefined);\n };\n return (\n <DndContext\n sensors={sensors}\n accessibility={{ screenReaderInstructions: { draggable: reorderInstructions } }}\n collisionDetection={pointerWithin}\n onDragStart={(event) => setActiveId(String(event.active.id))}\n onDragOver={(event) => setDrop(resolveDrop(event))}\n onDragMove={(event) => setDrop(resolveDrop(event))}\n onDragCancel={finish}\n onDragEnd={(event) => {\n const target = resolveDrop(event);\n finish();\n if (target) {\n workbench.statusBar.reorderItem(\n String(event.active.id),\n target.edge === \"before\" ? { beforeItemId: target.id } : { afterItemId: target.id },\n );\n }\n }}\n >\n {placements.map((placement) => (\n <WorkbenchStatusBarItem key={placement.widgetId} {...{ workbench, placement, ids, activeId, drop }} />\n ))}\n <Box asChild pointerEvents=\"none\">\n <DragOverlay dropAnimation={null}>\n {activeId ? (\n <Box layerStyle=\"floatingBar\" textStyle=\"label/XS/medium\">\n {placements.find((placement) => placement.widgetId === activeId)?.title ?? activeId}\n </Box>\n ) : null}\n </DragOverlay>\n </Box>\n </DndContext>\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 { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchStatusBarItems } from \"./workbench-status-bar-items\";\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 visible?: boolean;\n}\n\nexport const WORKBENCH_STATUS_BAR_HEIGHT = \"2rem\";\n\nexport const WorkbenchActivityBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"activity\"\n data-workbench-region=\"activity\"\n display={props.visible === false ? \"none\" : \"block\"}\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 const chrome = useModeChrome(workbench, \"status\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"status\"\n data-workbench-region=\"status\"\n display={props.visible === false ? \"none\" : \"block\"}\n as=\"footer\"\n flexShrink={0}\n h={WORKBENCH_STATUS_BAR_HEIGHT}\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n >\n <ModeChromeView workbench={workbench} region=\"status\" viewId={chrome || undefined} />\n <Box\n display={chrome ? \"none\" : \"flex\"}\n alignItems=\"stretch\"\n justifyContent=\"space-between\"\n px=\"sm\"\n h=\"full\"\n minW=\"0\"\n w=\"full\"\n >\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 </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 sidePanelHost: HTMLDivElement | null;\n}\n\nexport const WorkbenchSidePanelRegionPortal = (props: WorkbenchSidePanelRegionPortalProps) => {\n const { workbench, sidePanelHost } = props;\n\n if (!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, type ThemePreferenceStorage, 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 { useWorkbenchPanelMenusPresent } from \"../panel-menu/use-panel-menu\";\nimport { useModeChrome } from \"../region/mode-chrome\";\nimport { movePanelHost } from \"../region/move-panel-host\";\nimport { WorkbenchPanelViewHosts } from \"../region/panel-view-hosts\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { WorkbenchTabDragProvider } from \"../region/tab-drag-context\";\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 /** Host storage for the chosen theme. Defaults to browser storage. */\n themeStorage?: ThemePreferenceStorage;\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\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 hasSecondaryMenus: useWorkbenchPanelMenusPresent(workbench, \"secondary\"),\n hasSideHeaderWidgets: useWorkbenchRegionContent(workbench, \"side-header\"),\n hasSideWidgets: useWorkbenchRegionContent(workbench, \"side\", { locationScoped: true }),\n hasSideMenus: useWorkbenchPanelMenusPresent(workbench, \"side\"),\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, { renderParamField });\n installWorkbenchDataTableRenderer(workbench, { renderParamField });\n installWorkbenchFileRenderer(workbench);\n installWorkbenchControlsRenderer(workbench, { renderParamField });\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 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 sidePanelMode = useWorkbenchStore(workbench.layout.store, () => workbench.sidePanel.getMode());\n\n const {\n hasActivityBarWidgets,\n hasNavWidgets,\n hasSideHeaderWidgets,\n hasSideWidgets,\n hasSideMenus,\n hasSidenavWidgets,\n hasSecondaryHeaderWidgets,\n hasSecondaryWidgets,\n hasSecondaryMenus,\n hasStatusWidgets,\n } = useWorkbenchLayoutFlags(workbench);\n const hasSidePanel = hasSideHeaderWidgets || hasSideWidgets || hasSidePanelHeader || hasSideMenus;\n const showSidenav = hasSidenavWidgets;\n const sidenavCollapsible = resolvePanelCollapsible(workbench, \"sidenav\");\n const showSecondaryPanel =\n hasSecondaryHeaderWidgets || hasSecondaryWidgets || hasSecondaryPanelHeader || hasSecondaryMenus;\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 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 let activeSidePanelSlot: HTMLElement | null = attachedSidePanelSlot;\n if (sidePanelMode === \"floating\") activeSidePanelSlot = floatingSidePanelSlot;\n else if (sidePanelMode === \"closed\")\n activeSidePanelSlot = sidePanelHostRef.current?.parentElement ?? attachedSidePanelSlot;\n\n useLayoutEffect(() => {\n const host = sidePanelHostRef.current;\n if (!host) return;\n movePanelHost(host, activeSidePanelSlot);\n }, [activeSidePanelSlot]);\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 = (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={<WorkbenchSidenav workbench={workbench} contextActions={sidenavContextActions} />}\n contentPanel={contentWithHeader}\n collapsed={!showSidenav || !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\n const contentFrame = (\n <Flex position=\"relative\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg={workbenchBackgrounds.main} color=\"fg\">\n <WorkbenchActivityBar workbench={workbench} visible={hasActivityBarWidgets} />\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 pt=\"panel-gap\"\n // The status bar owns the space under the panels, so its items center in it.\n pb={hasStatusWidgets ? \"0\" : \"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 <WorkbenchStatusBar workbench={workbench} visible={hasStatusWidgets} />\n <WorkbenchFloatingSidePanel\n workbench={workbench}\n available={hasSidePanel}\n bubbleIcon={sidePanelBubbleIcon}\n onOpen={onOpenSidePanel}\n contentSlotRef={setFloatingSidePanelSlot}\n bottomOffset={hasStatusWidgets ? WORKBENCH_STATUS_BAR_HEIGHT : undefined}\n header={sideHeader}\n />\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 workbench={workbench} sidePanelHost={sidePanelHostRef.current} />\n </WorkbenchThemeScope>\n );\n};\n\nexport const Workbench = (props: WorkbenchProps) => {\n const projectId = useWorkbenchStore(props.workbench.pages.store, (state) => state.projectId);\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 themeStorage={props.themeStorage}\n >\n <WorkbenchTabDragProvider workbench={props.workbench}>\n <WorkbenchPanelViewHosts key={projectId} workbench={props.workbench}>\n <WorkbenchContent {...props} />\n </WorkbenchPanelViewHosts>\n </WorkbenchTabDragProvider>\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"],"mappings":"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"}
|