@pstdio/workbench 0.45.0 → 0.46.0-nightly.20261024001730

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-BT0I-th2.js","names":["z","JsonObject","jsonObjectSchema","record","string","unknown","serializableJsonObjectSchema","ZodType","json","meta","type","additionalProperties","localizedStringSchema","object","$l10n","default","optional","localizableStringSchema","union","extensionSettingScopeSchema","enum","extensionSettingValueTypeSchema","extensionSettingSourceSchema","extensionDiagnosticSeveritySchema","extensionDiagnosticSchema","code","severity","message","extensionId","commandId","sourcePath","metadata","extensionRecordSchema","id","name","displayName","extensionInstanceId","installedExtensionId","installName","version","description","packageAssetDescriptorSchema","kind","literal","path","baseUrl","extensionPlacementSchema","extensionSlotKindSchema","commandSourceSchema","extensionWhenExpressionSchema","mode","array","source","viewId","resourceType","extensionWebviewContributionSchema","entry","title","capabilities","workbenchExtensionWebviewSchema","extend","runtimeUrl","moduleUrl","styles","ExtensionDiagnostic","infer","LocalizableString","ExtensionRecord","z","serializableJsonObjectSchema","extensionResourceRefSchema","object","device","ownerId","string","id","name","optional","shorthand","type","projectId","label","icon","extensionId","metadata","z","ControlParam","ControlsQueryResult","extensionResourceRefSchema","base","id","string","name","description","optional","readOnly","boolean","numeric","min","number","max","step","vector","strictObject","x","y","range","tuple","harness","harnessId","model","params","record","union","selectionValue","array","selectionOption","icon","color","disabled","selection","placeholder","searchable","searchPlaceholder","emptyText","image","src","alt","primitive","null","readOnlyContent","extend","type","literal","images","controlValueSchema","controlValuesSchema","controlParamSchema","discriminatedUnion","defaultValue","singleLine","allowCustomValues","options","multiSelect","clearable","group","value","href","ref","copyText","editable","unit","markerCount","variant","enum","indicatorColor","coordinateMode","xLabel","yLabel","ZodType","controlGroupSchema","title","collapsible","defaultCollapsed","controlsQueryResultSchema","groups","values","SESSION_RESOURCE_RETENTION_MS","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","Icon","IconProps","resolveIconComponent","WorkbenchIconProps","Omit","name","size","WorkbenchIcon","props","$","_c","rest","t0","undefined","t1","IconComponent","t2","t3","_c","resourceKey","WorkbenchCommandExecutionContext","ResourceParamSchema","Record","type","resolvedFrom","resourceType","ResourceParamEntry","key","isRecord","value","Array","isArray","toIdentifierPrefix","replace","_match","char","toUpperCase","toLowerCase","metadataString","metadata","String","undefined","resourceContextValue","entry","context","resource","metadataValue","id","label","resolveCommandResourceParams","params","baseArgs","base","Object","fromEntries","entries","map","param","filter","hasOwn","isRecord","resourceContextValue","resolveCommandResourceParams","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","dedupeOptions","options","seen","Set","option","has","add","hasCommandParameters","params","listCommandParamEntries","length","commandParamEntries","Object","entries","map","param","entry","resolvedFrom","renameLabelDefault","base","context","mutation","resource","kind","labelParam","type","resourceType","idParam","buildCommandParamInitialValues","baseArgs","values","hasOwn","defaultValue","isEmptyValue","parseJsonValue","parse","Error","normalizeValue","numberValue","Number","isFinite","split","Boolean","normalizeCommandParamValues","normalized","required","mergeCommandParamArgs","schema","humanize","isRecord","ContextKeyValue","MenuItem","RegisteredCommand","WorkbenchCommandExecutionContext","matchesContextExpression","resolveMenuItemState","action","record","values","Record","context","when","command","handler","isVisible","args","undefined","readOnly","Boolean","disabledWhen","description","disabled","isEnabled","disabledReason","MenuPath","WorkbenchCommandExecutionContext","WorkbenchCoreContributionContext","scopeWorkbenchResourceContextValues","hasCommandParameters","resolveCommandResourceParams","TreeActionParamsRequest","resolveMenuItemState","ResolveMenuEntriesInput","workbench","menuPath","context","onRequestParams","request","commandContextValues","resource","snapshot","withLeadingSeparator","separatorBefore","items","T","enabled","length","first","rest","resolveMenuEntries","input","contextValues","shortcuts","Map","keybindings","listCommandKeybindings","map","k","commandId","keybinding","layout","listMenuItems","flatMap","action","record","commands","getCommand","state","args","label","command","requestParams","params","run","nextArgs","executeCommand","id","undefined","bound","resolvedArgs","Object","keys","group","resourceGroup","sourceCommandId","description","icon","iconSrc","external","binding","get","kernel","disabled","readOnly","MenuEntry","ReturnType","orderMenuEntries","entries","regular","filter","entry","commandContextValues","withLeadingSeparator","Box","Image","PaletteShortcut","Tooltip","TreeListActionMenuItem","KeybindingSequence","WorkbenchCoreContributionContext","reportUserActionError","WorkbenchIcon","MenuEntry","ResolveMenuEntriesInput","resolveMenuEntries","withLeadingSeparator","CreateMenuItemsInput","onCommandError","error","createMenuIcon","input","icon","iconSrc","undefined","createMenuEndContent","external","binding","disabledReason","readOnly","toMenuItem","workbench","entry","id","label","group","commandId","description","endContent","disabled","separatorBefore","onAction","run","catch","createMenuItemGroups","entries","itemsWhere","kernel","filter","map","regularItems","kernelItems","createMenuItems","length","withLeadingSeparator","RegisteredResourceKind","ResourceRef","WorkbenchCoreContributionContext","resourceContextMenuPath","ResolveMenuEntriesInput","resolveResourceActionMenu","workbench","subject","onRequestParams","kind","resources","getKind","type","extensionId","current","resolve","resource","preview","undefined","menuPath","context","request","commandPalette","requestParams","group","id","label","subscribeResourceKinds","kinds","listener","subscriptions","flatMap","subscribe","subscription","dispose","subscribeResourceActionChanges","stopKinds","listKinds","stops","store","subscribeSelector","state","changes","commands","values","layout","menuStore","itemsByPath","stop","Icon","ResourceContextAction","TreeListActionMenuItem","useEffect","useState","ResourceRef","WorkbenchCoreContributionContext","workbenchBreadcrumbLocationMenuPath","useWorkbenchStore","CreateMenuItemsInput","createMenuItems","resolveResourceActionMenu","subscribeResourceKinds","toResourceContextAction","item","key","id","label","commandId","icon","endContent","isDisabled","disabled","separatorBefore","onClick","onAction","createWorkbenchResourceActions","workbench","subject","options","Pick","menu","onRequestParams","onCommandError","map","group","createWorkbenchLocationActions","resource","menuPath","context","undefined","request","commandPalette","requestParams","useWorkbenchResourceActionResolver","$","_c","resources","preview","store","_temp","kinds","_temp2","refresh","t0","Object","values","_temp3","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","Box","AlertMessage","useEffect","WorkbenchCore","useWorkbenchStore","WorkbenchActionErrors","props","$","_c","workbench","target","notifications","store","_temp","t0","Object","values","t1","filter","notice","inlineTarget","errors","t2","notice_0","listNotifications","dismiss","id","t3","length","t4","map","error","title","message","t5","state","_c","_temp","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","inlineTarget","onSuccess","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","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","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","clearParams","t4","t5","args_0","t6","CommandConfirmationDialog","error","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","inlineTarget","onSuccess","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","WorkbenchActionErrors","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","closePalette","commandPalette","captureClose","commands","executeCommand","inlineTarget","onSuccess","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","store","_temp","t0","WorkbenchMainCommandPalette","t1","chosenThemePreference","themePreferences","setThemePreference","previewThemePreference","view","_temp2","requestId","_temp3","_temp4","_temp5","menuStore","_temp6","liveQuery","setLiveQuery","t2","query","commandPaletteResourceEntries","compositionPanels","t3","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","t17","ctx","length","setQuery","setActiveIndex","t18","t19","t20","state","resourceSearch","state_0","state_1","state_2","state_3","itemsByPath","commandExecutionContext","_c","_temp","_temp2","_temp3","_temp4","_temp5","_temp6","_Fragment","Box","BoxProps","ReactNode","useEffect","useRef","WorkbenchCore","WorkbenchFocusRegionId","WorkbenchActionErrors","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","t4","t5","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","level","inlineTarget","current","delete","id","dismiss","actions","toastAction","label","onClick","undefined","toastOptions","type","description","message","closable","onStatusChange","details","status","notifications","store","getState","has","update","add","create","notification_0","listNotifications","subscription","subscribe","event","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","openPlacements","retained","Map","filter","placement","viewId","has","widgetId","map","existing","find","entry","unchanged","Object","keys","length","entries","every","key","value","Reflect","get","set","next","values","index","SESSION_RESOURCE_RETENTION_MS","WorkbenchWidgetPlacement","retainViewPlacements","RetainedViewState","placements","expires","ReadonlyMap","retainRecentViewPlacements","previous","current","registered","ReadonlySet","open","now","Map","retained","Set","undefined","currentIds","map","placement","widgetId","viewId","has","id","deadline","get","set","add","unchanged","size","every","at","useEffect","useState","WorkbenchCore","WorkbenchWidgetPlacement","useWorkbenchStore","RetainedViewState","retainRecentViewPlacements","useRetainedViewPlacements","workbench","current","open","$","_c","views","store","_temp","t0","placements","expires","Map","previous","setPrevious","next","t1","Set","Object","keys","Date","now","Math","min","values","deadline","t2","t3","Number","isFinite","timer","setTimeout","_temp2","max","clearTimeout","state","state_0","_c","_temp","_temp2","afterPaint","signal","AbortSignal","Promise","resolve","reject","throwIfAborted","frame","abort","cancelAnimationFrame","reason","addEventListener","once","requestAnimationFrame","removeEventListener","ReactNode","startTransition","useEffect","useState","WorkbenchPanelRenderInput","WorkbenchRendererRegistration","afterPaint","WorkbenchWidgetContentsProps","input","renderer","defer","WorkbenchWidgetContents","props","$","_c","mounted","setMounted","requestAnimationFrame","t0","t1","controller","AbortController","signal","then","_temp","abort","t2","render","_c","_temp","Box","Center","ReactNode","RegisteredPlaceholderContribution","RegisteredWidgetContribution","RegisteredWorkbenchView","WorkbenchCore","WorkbenchPanelContribution","WorkbenchRegion","WorkbenchWidgetPlacement","getWorkbenchRenderers","toPanelContribution","toPanelInstance","WorkbenchActionErrors","WorkbenchIcon","useWorkbenchStore","WorkbenchWidgetContents","WorkbenchWidgetHostProps","workbench","placement","widget","region","WorkbenchWidgetFallback","props","$","_c","label","t0","Symbol","for","t1","WorkbenchRenderedWidgetFrame","children","status","undefined","t2","noopRefresh","toHostedPanel","input","view","id","contributionId","title","icon","rendererId","WorkbenchWidgetHost","layout","getWidget","viewId","views","getView","rendererFromStore","store","state","renderers","renderer","getRenderer","state_0","refreshKeys","panel","instance","t3","t4","t5","widgetId","t6","body","refresh","kind","includes","t7","_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","ScrollArea","ReactNode","verticalContentProps","display","flexDirection","minH","position","const","horizontalContentProps","alignItems","h","RegionScrollAreaProps","children","horizontal","hidden","RegionScrollArea","props","$","_c","t0","t1","undefined","t2","t3","t4","justifyContent","t5","t6","_c","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","headerVisible","shell","placement_2","has","widgetId","t7","t8","addable","t9","placement_3","hasMovedPlacement","getPanelPolicy","legacyHeaders","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","Activity","createContext","ReactNode","Ref","useContext","useEffect","useLayoutEffect","useState","createPortal","WorkbenchCore","WorkbenchPanelRegion","WorkbenchWidgetPlacement","workbenchPanelRegions","resolveResourcePreview","useWorkbenchStore","movePanelHost","RegionScrollArea","isPlacementEligibleForRegion","useRetainedViewPlacements","WorkbenchWidgetHost","PanelViewSlots","register","region","node","HTMLDivElement","PanelViewContext","usePanelViewSlot","$","_c","registry","setNode","t0","t1","t2","Boolean","t3","enabled","ref","WorkbenchPanelViewSlotProps","slotRef","hidden","placeholder","WorkbenchPanelViewSlot","props","PanelViewPortal","workbench","placement","slot","active","view","viewId","views","getView","undefined","collection","body","kind","host","_temp","hasChildNodes","remove","t4","widgetId","layout","getLayout","activeWidgetId","activatePanel","activate","t5","t6","t7","focus","event","currentTarget","contains","target","setActiveRegion","t8","t9","t10","t11","t12","WorkbenchPanelViewHosts","children","changes","resources","preview","store","_temp2","_temp3","pages","_temp4","modes","_temp5","Symbol","for","slots","setSlots","previous","flatMap","region_0","state_3","regions","eligible","state","widgets","filter","p","resource","selected","find","p_0","p_1","mountStrategy","current","getOpenPlacementIds","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","_Fragment","_temp","_temp2","_temp3","_temp4","_temp5","Box","Flex","RegisteredPlaceholderContribution","WorkbenchCore","WorkbenchPanelMenuRegion","WorkbenchRegion","WorkbenchRegionId","WorkbenchWidgetPlacement","getActiveWorkbenchLocationPanel","getActiveWorkbenchSubPanel","getWorkbenchPanelForMenuRegion","isWorkbenchPanelPlacementVisible","matchesWorkbenchModeEligibility","matchesWorkbenchPanelMenuOwner","WorkbenchPanelRegion","workbenchPanelMenuRegions","workbenchPanelRegions","useWorkbenchActiveModeId","useWorkbenchLocationResource","useWorkbenchStore","getWorkbenchRegionBackground","ModeChromeView","useModeChrome","usePanelViewSlot","WorkbenchPanelViewSlot","RegionScrollArea","useRetainedViewPlacements","WorkbenchWidgetHost","WorkbenchRegionProps","workbench","region","title","pointerEvents","transparent","horizontalScrollRegions","Set","panelMenuRegionIds","Object","values","flatMap","regions","sidePanelRegionIds","getActivePlacement","widgets","activeWidgetId","find","placement","widgetId","resolveRenderedRegionPlacements","activePlacement","filter","mountStrategy","resolveRegionPlacementRenderState","active","additive","display","position","visibility","const","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","_temp","currentRegionState","registeredWidgets","_temp2","activeSubPanel","has","ignoreOwnerResourceKey","activeLocationPanel","regionState","contribution","location","locationPanel","subPanel","_temp3","getPlaceholder","placement_0","renderedPlacements","host","getOpenPlacementIds","retainedPlacements","map","_temp4","visibleIds","scrollsHorizontally","target","placeholderView","t10","t11","t12","t13","t14","t15","ref","Boolean","renderedPlacement","findIndex","entry_0","entry","t16","state","state_0","state_1","_c","_temp","_temp2","_temp3","_temp4","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","UseMenuReturn","VisuallyHidden","ResourceContextAction","ResourceMenuItems","useId","useRef","WorkbenchCore","WorkbenchTabMenuGroup","WorkbenchWidgetPlacement","findPlacementByWidgetId","useWorkbenchResourceActionResolver","createWorkbenchResourceMenu","WorkbenchIcon","getPanelLabel","RegionTabMenuProps","menu","label","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","t6","t7","region_0","movePanel","t8","map","t9","t10","resetLayout","actions","action","current","triggerId","api","getTriggerProps","id","document","getElementById","focus","preventScroll","onClick","Symbol","for","action_0","key","title","icon","group","_c","_temp","CollisionDetection","UniqueIdentifier","Point","x","y","PanelDropTarget","id","rect","left","right","top","bottom","resolvePanelDropTarget","pointer","origin","targets","closest","distance","Math","hypot","candidate","max","panelDropCollision","args","Parameters","pointerCoordinates","droppableContainers","filter","container","data","current","panelRegion","active","flatMap","frame","node","getBoundingClientRect","droppableRects","get","undefined","CollisionDetection","pointerWithin","tabHeaderDropCollisions","args","Parameters","pointer","pointerCoordinates","host","document","elementsFromPoint","x","y","map","element","closest","find","panel","owner","getAttribute","tabs","droppableContainers","filter","container","node","current","data","widgetId","region","id","active","getClientRects","length","rects","Map","droppableRects","tab","sideSlot","querySelector","getBoundingClientRect","bottomSlot","rect","get","width","height","set","left","top","tabEdgeDropCollisions","panelPosition","flatMap","edge","frame","undefined","horizontal","Math","min","right","max","bottom","distances","vertical","hit","distance","droppableContainer","value","sort","a","b","slice","Box","DndContext","DragOverEvent","DragOverlay","MouseSensor","pointerWithin","TouchSensor","useDroppable","useSensor","useSensors","createContext","ReactNode","useContext","useId","useRef","useState","WorkbenchCore","WorkbenchPanelRegion","WorkbenchTabPosition","findPlacementByWidgetId","resolvePanelPosition","WorkbenchPanelPosition","WorkbenchPositionedRegion","planTrayDrop","batchWorkbenchChanges","panelDropCollision","tabEdgeDropCollisions","tabHeaderDropCollisions","TabDrop","region","position","widgetId","edge","panelPosition","TabDragContext","activeId","drop","destinations","activePanel","panelDrop","useTabDrag","WorkbenchTabDragProvider","props","$","_c","workbench","children","setActiveId","setActivePanel","setPanelDrop","setDrop","origin","undefined","t0","Symbol","for","activationConstraint","distance","t1","sensors","t2","current","finish","t3","event","data","over","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","args","panelRegion","tabs","filter","collision","droppableContainer","length","edges","pointer","pointerCoordinates","panel","document","elementFromPoint","x","y","closest","getAttribute","collision_0","sort","a","b","area","rect_0","droppableRects","get","height","Infinity","t8","event_0","input","activatorEvent","MouseEvent","TouchEvent","point","touches","clientX","clientY","t10","t9","event_1","event_2","t11","event_3","data_0","shell","repositionPanel","target","getArrangement","movePanel","setSidePanelPresentation","t12","title","resource","label","t13","t14","t15","WorkbenchTabDropTarget","visible","dragging","Boolean","allowed","disabled","setNodeRef","highlighted","_c","useMenu","MouseEvent","useRef","useTabContextMenu","triggerId","t0","$","_c","disabled","undefined","t1","Symbol","for","x","y","width","height","anchor","trigger","t2","t3","t4","placement","getAnchorRect","current","offset","mainAxis","element","requestAnimationFrame","focus","preventScroll","t5","ids","positioning","onEscapeKeyDown","menu","t6","event","preventDefault","stopPropagation","currentTarget","getBoundingClientRect","api","getContextTriggerProps","onContextMenu","t7","element_0","rect","dispatchEvent","window","bubbles","cancelable","clientX","left","clientY","bottom","show","t8","_c","useDraggable","useDroppable","KeyboardEvent","MouseEvent","PointerEvent","useEffect","useRef","WorkbenchCore","WorkbenchPanelRegion","WorkbenchWidgetPlacement","usePlacementTab","useTabDrag","useTabContextMenu","WorkbenchRegionTabProps","workbench","placement","activeWidgetId","disabled","nextWidgetId","previousWidgetId","sortable","region","useRegionTab","props","triggerId","$","_c","t0","t1","undefined","snapshot","menu","show","onContextMenu","hold","t2","Symbol","for","x","y","start","suppressClick","t3","t4","widgetId","id","drag","t5","t6","t7","data","target","context","t8","clearTimeout","current","clearHold","t10","t9","t11","event","key","shiftKey","preventDefault","currentTarget","altKey","layout","reorderPanel","beforeWidgetId","afterWidgetId","onKeyDown","t12","event_0","pointerType","element","clientX","clientY","setTimeout","onPointerDown","t13","event_1","Math","hypot","onPointerMove","t14","event_2","stopPropagation","onClick","t15","drop","t16","onPointerUp","onPointerCancel","_c","Box","CloseButton","Tabs","Text","useTabsContext","DropIndicator","Tooltip","useRef","WorkbenchIcon","RegionTabMenu","resolveTabIconName","useRegionTab","WorkbenchRegionTabProps","TabIcon","props","$","_c","indicator","icon","t0","color","t1","label","WorkbenchRegionTab","workbench","placement","activeWidgetId","disabled","sortable","undefined","tabs","t2","widgetId","getTriggerProps","value","triggerId","id","behavior","snapshot","drag","target","drop","resource","title","contributionId","labelId","labelRef","t3","layout","resources","widget","getWidget","getKind","type","extensionId","active","t4","node","setNodeRef","t5","closable","t6","t7","Symbol","for","t8","t9","tabRetention","t10","isDragging","t11","t12","t13","placementIdentity","opacity","pointerEvents","_temp","_temp2","_temp3","event_2","event","stopPropagation","closePlacement","closePanel","t14","menu","api","open","onClick","onContextMenu","onKeyDown","onPointerCancel","onPointerDown","onPointerMove","onPointerUp","listeners","t15","t16","t17","t18","t19","t20","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","CollectionPage","CollectionPageRequest","RendererPageRevisionChanged","Error","constructor","acceptRendererPage","result","rows","TRow","page","request","revision","Array","isArray","groups","undefined","length","limit","Number","isSafeInteger","total","filteredTotal","some","group","count","cursor","DataTableRendererColumn","DataTableRendererSettings","KanbanRendererSettings","AttributeDescriptor","tablePageFields","columns","Pick","settings","filter","column","id","grouping","hidden","hiddenColumns","includes","map","kanbanPageFields","attributes","fields","Set","displayProperties","columnGrouping","rowGrouping","delete","viewMode","add","attribute","has","display","kind","itemsAttributeId","rendererQueryKey","value","JSON","stringify","_key","entry","Array","isArray","Object","fromEntries","keys","sort","map","key","Button","AlertMessage","RendererReadNoticeProps","error","retry","RendererReadNotice","props","$","_c","t0","t1","_c","PageParams","resolvePageParams","useLayoutEffect","useRef","useShallow","WorkbenchCore","WorkbenchPanelInstance","useWorkbenchStore","usePageParams","workbench","placement","owner","placementIdentity","pageId","kind","undefined","projectId","pages","store","state","params","activePageId","location","retained","current","previous","CollectionPage","rendererPagePosition","identity","offset","limit","accepted","page","Pick","revision","cursor","undefined","CollectionPage","CollectionPageRequest","useRef","useState","rendererPagePosition","PagePosition","identity","offset","cursor","revision","useRendererPages","input","$","_c","epoch","setEpoch","search","setSearch","t0","Symbol","for","t1","scope","groups","collapse","setCollapse","collapsedGroups","t2","setCollapsedGroups","limit","setLimit","Math","max","min","initialPageSize","JSON","stringify","fields","t3","position","setPosition","t4","current","previous","undefined","t5","request","t6","_temp","reset","t7","append","index","saved","go","t8","floor","t9","result","loading","enabled","displayed","onSearchChange","onPageSizeChange","size","onCollapsedGroupsChange","onPageChange","index_0","onLoadMore","t10","result_0","signal","saved_0","page","rows","slice","aborted","t11","key","pageIndex","controls","accept","value","_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","startTransition","useEffect","useRef","useState","Disposable","RendererReadBinding","WorkbenchCore","createRendererMutationBinding","useWorkbenchConnection","RendererReadOptions","workbench","ownerKey","queryKey","refreshKey","load","signal","AbortSignal","publish","value","T","Promise","subscribe","listener","ReadState","request","loading","error","Error","useRendererRead","options","connected","state","setState","retryRef","undefined","refreshRef","lastRefreshKey","callbacks","mutationBinding","mutations","current","bind","saveQueue","resolve","binding","views","reads","owner","handlers","onValue","onError","connectionLost","readError","String","previous","refresh","reason","pending","revision","Symbol","JSON","stringify","onProgress","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","length","shortcuts","Map","keybindings","listCommandKeybindings","map","k","keybinding","items","icon","binding","get","requestParams","params","resourceMutation","submitLabel","push","endContent","onAction","catch","createTreeContextMenuItems","actionItems","regularItems","kernelItems","visibleRegularItems","createTreeActionItems","tooltip","withLeadingSeparator","WorkbenchCore","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","t4","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","rendererQueryKey","resolveDataTableRendererQueryKey","contribution","Pick","resource","modeId","contextValues","Record","id","contextKeys","map","key","resolveDataTableRendererColumns","result","contributionColumns","columns","firstRow","rows","Object","keys","values","rendererRow","Symbol","RowByData","WeakMap","rowByData","get","data","buildDataTableRendererData","row","fromEntries","column","defineProperty","value","resolveDataTableRendererSelectionActions","actions","action","label","icon","destructive","onSelect","flatMap","run","resolveDataTableRendererResourceActions","resolveResourceActions","NonNullable","filter","isDisabled","_context","onClick","resolveDataTableRendererStorageKey","placement","identity","scope","instanceId","length","useState","DataTableRendererColumn","DataTableRendererQueryResult","rendererQueryKey","resolveDataTableRendererColumns","PageColumn","Pick","useTablePageColumns","scope","declared","$","_c","t0","accepted","setAccepted","t1","columns","t2","result","enabled","selection","map","_temp2","_temp3","t3","pending","_temp","accept","loaded","requested","error","undefined","id","hidden","id_0","hidden_0","_c","_temp2","_temp3","_temp","Box","Stack","EmptyState","DataTable","DataTableColumnRenderer","DataTableColumnStat","DataTableRowAction","DataTableSkeleton","RowData","useDataTableViewStore","ReactNode","useSyncExternalStore","useShallow","DataTableRendererQueryResult","RegisteredDataTableRendererContribution","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","acceptRendererPage","runUserAction","CommandParamFieldRenderer","useWorkbenchResourceActionResolver","useWorkbenchStore","tablePageFields","rendererQueryKey","RendererReadNotice","usePageParams","useRendererPages","useRendererRead","ViewToolbarActions","buildDataTableRendererData","resolveDataTableRendererColumns","resolveDataTableRendererQueryKey","resolveDataTableRendererResourceActions","resolveDataTableRendererSelectionActions","resolveDataTableRendererStorageKey","useTablePageColumns","WorkbenchDataTableViewProps","workbench","renderParamField","contribution","placement","initialResult","rows","noopSubscribe","DataTableViewFrame","props","$","_c","t0","children","requirePageStatistics","result","columns","hiddenColumns","column","hidden","includes","id","stat","page","statistics","type","Error","emptyTablePlaceholder","search","grouping","length","groups","some","group","field","count","undefined","emptyTitle","emptyDescription","WorkbenchDataTableView","pageParams","resolveResourceActions","contextKeys","state","Object","fromEntries","map","key","values","contextValues","context","store","modeId","modes","_temp","t1","storageKey","provider","viewsProvider","viewsSource","subscribe","getSnapshot","_temp2","_temp3","filter","_temp4","sorts","_temp5","settings","_temp6","paged","queryMode","t2","resource","queryKey","pageColumns","t3","t4","JSON","stringify","t5","t6","initialPageSize","identity","scope","fields","pages","t7","t8","request","t9","signal","executeQuery","showStats","accept","position","t10","refresh","invalidate","reset","subscription","events","onDidRefreshDataTableRenderer","event","dataTableRendererId","dispose","t11","ownerKey","refreshKey","load","read","result_0","value","t12","error","retry","notice","T0","T1","model","openRow","renderers","rowActions","selectionActions","stats","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","loading","Symbol","for","bb0","pending","labels","_temp7","_temp8","descriptions","_temp9","_temp0","icons","_temp1","_temp10","_temp11","_temp12","_temp13","_temp14","action","label","icon","destructive","onSelect","data","row","rowByData","get","run","t35","action_0","data_0","row_0","onRowActivate","t36","t37","column_9","_temp15","skeletonColumns","t38","controls","resourceKind","resources","getKind","toolbarActions","data_1","defaultSettings","defaultFilter","defaultSorts","defaultViews","defaultActiveViewId","flatMap","_temp16","_temp17","_temp18","_temp19","_temp20","_temp21","_temp22","data_2","data_3","row_1","Boolean","pageSizeOptions","selectionMode","t39","state_0","activeModeId","state_1","state_2","state_3","column_0","column_1","description","column_2","column_3","column_4","column_5","column_6","column_7","renderer","column_8","column_10","column_11","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","Spinner","PageLocation","PageRef","resourceKey","Tooltip","TreeListActionMenuItem","TreeListNode","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","findNode","child","findNodeInSections","wrapTreeNodeIcon","icon","iconTooltip","resolveTreeNodeIcon","iconElement","resolveTreeNodeNavigationIntent","payload","resolveTreeNodeResource","resolveTreeNodeEndContent","endContent","badge","color","label","additions","metadata","diffAdditions","deletions","diffDeletions","type","toTreeListSectionEmptyNode","loading","disabled","rowVariant","emptyState","title","description","toTreeListNode","context","navigationIntent","commandContext","customPath","contextMenuPath","menuPath","resourcePath","menuItems","resolveMenuItems","sharedActions","action","key","commandId","group","isDisabled","separatorBefore","onAction","onClick","actions","contextMenuActions","join","treeNode","moveScope","iconColor","tooltip","inlineInput","showContextMenuTrigger","canHide","canReorder","canDrag","canDrop","hiddenByDefault","items","contextMenuItems","menuPlacement","isContainer","collapsible","isNavigable","Boolean","toTreeListSection","emptyNode","menuLabel","listTreeNodes","Box","ListRow","useSyncExternalStore","WorkbenchCore","resolveNavigationLevels","WorkbenchIcon","useWorkbenchStore","TreeModeReturn","props","$","_c","workbench","pages","store","_temp","mode","modes","_temp2","t0","navigationTrees","listener","subscription","onDidChange","dispose","t1","location","Object","values","length","hasLevel","t2","label","id","t3","Symbol","for","t4","pageLocations","navigateToRootLevel","t5","state","state_0","activeModeId","undefined","_c","_temp","_temp2","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","ReactNode","RefObject","TREE_SKELETON_WIDTHS","TreeViewSkeleton","$","_c","t0","Symbol","for","map","_temp","TreeViewBodyProps","error","loading","moduleLoading","sections","leadingContent","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","t2","width","index","_c","_temp","_Fragment","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","size","Object","keys","length","previewNodes","nodes","flatMap","node","resource","undefined","children","id","label","map","section","TreeNode","TreeQueryContext","TreeRendererContribution","TreeRendererRegistry","TreeViewSection","settleReadBatch","isUnregisteredTreeError","trees","treeId","error","Error","message","getTreeRenderer","LoadedTreeData","header","body","footer","treeStructure","renderer","ctx","getHeaderStructure","getStructure","getFooterStructure","listTreeNodes","data","flatMap","section","nodes","loadExpandedTreeChildren","expandedNodeIds","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","some","move","undefined","length","filter","preview","reduce","sections","moveNode","then","Symbol","saved","map","resourceKey","useEffect","useState","useSyncExternalStore","WorkbenchPanelInstance","getWorkbenchRenderers","ResourceRef","TreeNode","WorkbenchCore","resolveNavigationLevels","useWorkbenchStore","usePageParams","useRendererRead","previewTreeResources","expandDefaultTreeSections","LoadedTreeData","loadExpandedTreeChildren","loadTreeData","treeStructure","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","t2","navigationTrees","Object","values","getState","map","_temp5","getPageOwner","t3","listener","subscription","onDidChange","dispose","pageOwner","scope","getTreeRenderer","getReadKey","refreshKey","queryKey","childrenKey","renderer","structure","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","loading","length","savedChildren","movement","childrenByNodeId","canMove","sourceId","targetId","sections","persist","onError","t8","t9","Symbol","for","t10","t11","t12","error","t13","state_1","activeModeId","state_2","state_3","projectId","owner","location_0","_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","_temp6","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","TreeModeReturn","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","t22","nextSectionIds_0","t23","event_0","t24","t25","nextSectionIds_1","event_1","t26","t27","t28","t29","_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","error","console","warn","result","then","pending","set","finally","delete","catch","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","removing","onWillRemove","forget","map","choice","values","removed","onDidRemove","enter","openings","defaults","entry","edits","keys","shouldReveal","actual","dispose","RelatedResourceOpening","ResourceRef","resourceKey","NavigationTarget","ResourceLinksService","targetAvailable","target","available","resource","pending","length","item","pop","kind","push","targets","RelatedResolutionInput","defaults","openings","service","signal","AbortSignal","current","resolveRelatedOpenings","input","resolved","resolve","filter","entry","map","Map","fallbacks","index","choice","get","fallbackTargets","set","flatMap","includes","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","getPanelPolicy","canClose","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","getRegionState","open","setRegionOpen","setRegionVisible","projections","Map","viewId","dispose","replacesSource","source","some","widget","tabRetention","openView","options","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","getPanelPolicy","canClose","setRegionActiveWidget","widgetId","claim","openResource","existing","getMode","undefined","policy","provided","acceptsTabs","canOpen","opened","targets","run","unsubscribe","store","subscribe","projection","delete","leavePage","sourceKey","leave","ResourceRef","resourceKey","NavigationTarget","RegisteredResourceKind","WorkbenchModuleContext","relatedResourcePageKey","relatedResourceStateKey","createRelatedResourcePreferences","resolveRelatedOpenings","WorkbenchResourceLinksOptions","createResourcePreviewOpener","openRelatedResourcesPreference","targetResource","target","kind","targets","map","find","Boolean","resource","undefined","RelatedLookup","owner","controller","AbortController","removed","Set","promise","Promise","registerRelatedResourcePreviews","ctx","options","schema","preferences","registerSchema","properties","type","scope","default","opener","canonicalize","source","projectId","extensionId","pending","Map","abortAll","values","abort","requestKey","sourceKey","JSON","stringify","cancelOtherSelections","selectedKey","pages","store","getState","location","pageResource","key","openingPreviews","disposed","enabled","getValue","load","request","present","pageKey","available","has","current","signal","aborted","resources","getKind","entries","relatedOpenings","defaults","filter","entry","autoOpen","openings","length","resolved","service","createService","run","open","shouldReveal","error","console","warn","resolve","existing","get","enter","completion","withResolvers","set","finally","delete","then","reject","primary","pageLocations","onDidNavigate","primaryState","subscribe","state","previous","previousKey","activeModeId","modeChanged","leavePage","restoresMode","layoutActivation","navigation","onDidOpenTarget","routed","project","subscribeSelector","owners","removal","onWillRemove","add","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","Box","Flex","Spinner","Stack","Text","resourceKey","EmptyState","ScrollArea","ReactNode","useEffect","useState","CollectionSettingsPanel","getWorkbenchRenderers","PreferenceScope","SettingsRegistry","WorkbenchPanelRenderInput","getSettingsPanels","WorkbenchPreferencesForm","useWorkbenchStore","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","instanceId","JSON","stringify","content","t5","embedded","CollectionItemView","panel","itemId","resolveCollectionItem","status","setState","id","alive","then","item","undefined","SettingsSurfacePanel","settingsState","_temp","resource","metadata","panels","kind","T0","T1","bb0","child","parentPanelId","context","matches","when","filter","length","child_0","map","title","revision","p","display","flexDirection","gap","description","save","preferences","t6","_c","_temp","useSyncExternalStore","SettingsRegistry","useSettingsRevision","settings","$","_c","t0","t1","t2","store","listener","subscribe","getState","revision","_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","parentPanelId","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","parentPanelId","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","usePanelPolicy","workbench","region","$","_c","modes","store","_temp","t0","shell","getPanelPolicy","layout","state","activeModeId","_c","_temp","mergeRefs","useDraggable","Header","ComponentProps","MouseEvent","TouchEvent","useShallow","WorkbenchCore","resolvePanelPosition","WorkbenchPositionedRegion","WorkbenchIcon","useWorkbenchStore","usePanelMovePositions","workbench","region","$","_c","modes","store","_temp","t0","shell","current","getArrangement","getPanelPositions","filter","position","layout","usePanelPositionActions","t1","t2","key","label","icon","left","right","top","bottom","onClick","repositionPanel","map","interactive","usePanelDragSurface","canMove","length","sidePanel","getMode","floatingSide","state","active","fullscreenSide","fullscreen","disabled","t3","panelRegion","t4","id","data","drag","empty","_temp2","t5","t6","undefined","t7","isDragging","t8","t9","listeners","event_0","event","onMouseDown","event_1","onTouchStart","t10","setNodeRef","ref","tabIndex","layerStyle","PanelDragHeaderProps","PanelDragHeader","props","children","rest","activeModeId","target","Element","closest","_c","_temp","_temp2","Box","useRecipe","Header","ResourceContextMenu","ComponentProps","WorkbenchCore","WorkbenchPanelRegion","WorkbenchIcon","usePanelPolicy","PanelDragHeader","usePanelPositionActions","PanelHeaderProps","workbench","region","hasContent","hasTabs","PanelHeader","props","$","_c","children","rest","t0","t1","undefined","t2","Symbol","for","key","t3","t4","edgeStyles","policy","positionActions","show","legacyHeaders","showHeader","headerExplicit","t5","secondary","side","main","label","t6","t7","tabIndex","headerProps","t8","header","t9","t10","t11","shell","setHeaderVisible","t12","icon","onClick","t13","t14","t15","_c","Box","Flex","IconButton","Text","AttachedPanel","BubbleButton","BubblePanel","PANEL_HEADER_CONTROL_SIZE","Tooltip","MessageCircle","Minimize2","Minus","SquareArrowOutUpRight","ReactNode","useLayoutEffect","useRef","WorkbenchCore","WorkbenchFocusRegion","WorkbenchPanelMenuLayout","WorkbenchPanelMenuOpeners","PanelHeader","useWorkbenchRegionTabsVisible","WorkbenchTabDropTarget","usePanelPolicy","useWorkbenchStore","workbenchBackgrounds","WorkbenchSidePanelProps","workbench","contentSlotRef","node","HTMLDivElement","bottomOffset","header","bubbleIcon","onOpen","floatingPanelBottom","launcherBottom","WorkbenchSidePanelTitle","$","_c","t0","Symbol","for","WorkbenchSidePanelHeaderProps","WorkbenchSidePanelHeader","props","WorkbenchAttachedSidePanel","sidePanel","canFloat","modes","store","hasTabs","t1","getMode","mode","layout","fullscreen","_temp","attached","t2","Boolean","shell","setSidePanelPresentation","undefined","t3","t4","t5","t6","widget","t7","WorkbenchFloatingSidePanelProps","available","WorkbenchFloatingSidePanel","_temp2","policy","visible","active","sideOpen","bubbleRef","previousFullscreen","previous","current","frame","requestAnimationFrame","focus","preventScroll","cancelAnimationFrame","commands","canOpen","bottom","executeCommand","bg","t8","canClose","hideSide","setRegionOpen","t9","setMode","t10","t11","t12","t13","t14","t15","state","_c","_temp","_temp2","_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","IconButton","PANEL_HEADER_CONTROL_SIZE","Tooltip","useLayoutEffect","useRef","WorkbenchCore","WorkbenchIcon","useWorkbenchStore","FullscreenControls","props","$","_c","workbench","active","fullscreen","store","_temp","exitRef","previous","t0","t1","current","focus","preventScroll","label","t2","commands","executeCommand","t3","t4","t5","t6","FullscreenKeyboard","onKeyDown","event","key","defaultPrevented","getState","commandPalette","open","target","Element","undefined","closest","preventDefault","sideOpen","shell","getPanelPolicy","canClose","hideSide","exit","document","addEventListener","removeEventListener","state","_c","_temp","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","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","HStack","IconButton","PANEL_HEADER_CONTROL_SIZE","Tooltip","WorkbenchCore","WorkbenchShellOpenRegion","resolveArrangement","WorkbenchIcon","usePanelPolicy","useWorkbenchCompositionPanels","useWorkbenchStore","useWorkbenchRegionContent","useWorkbenchPanelToggles","workbench","saved","layout","store","_temp","arrangement","sidenav","secondary","side","hasNavigation","composition","hasSide","addable","length","hasBottom","panels","region","label","icon","policy","provided","const","filter","_temp2","map","panel","position","WorkbenchPanelToggles","props","$","_c","regions","t0","T0","t1","t2","t3","t4","t5","t6","Symbol","for","bb0","t7","t8","includes","t9","region_0","action","open","canToggle","undefined","shell","setRegionOpen","state","canClose","canOpen","_temp","_temp2","_c","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","Tooltip","WorkbenchCore","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","WorkbenchBreadcrumbView","useModeChrome","WorkbenchRegion","WorkbenchIcon","useWorkbenchStore","workbenchBackgrounds","FullscreenControls","WorkbenchPanelToggles","WorkbenchHeaderActions","WorkbenchBreadcrumbActions","WorkbenchNavChromeProps","workbench","hasNav","panelControls","WorkbenchNavigationControls","props","$","_c","history","pageLocations","historyStore","_temp","t0","canGoBack","t1","goBack","t2","Symbol","for","t3","t4","canGoForward","t5","goForward","t6","t7","t8","WorkbenchNavChrome","undefined","chrome","fullscreen","store","_temp2","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","main","state","active","_c","_temp","_temp2","Box","Flex","useDroppable","ReactNode","useShallow","WorkbenchCore","resolveArrangement","resolvePanelPosition","WorkbenchPanelPosition","WorkbenchPositionedRegion","useWorkbenchStore","useTabDrag","PanelInsertionTargetProps","edge","region","panel","tabEdgeAnchors","left","top","bottom","right","const","PanelInsertionTarget","props","$","_c","drop","panelDrop","t0","t1","panelRegion","position","panelPosition","t2","id","data","setNodeRef","highlighted","vertical","targetId","t3","t4","undefined","t5","WorkbenchPanelDropFrameProps","workbench","Exclude","children","WorkbenchPanelDropFrame","activeId","destinations","activePanel","modes","store","_temp","moving","shell","state_0","arrangement","state","layout","current","getPanelPositions","filter","includes","open","getPanelPolicy","widgets","regions","lastTab","length","widgetId","positions","edge_0","edges","edge_1","Boolean","Object","fromEntries","map","targets","activeModeId","_c","_Fragment","_temp","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","ResourceRef","FILE_SECTION_NAVIGATION_METADATA_KEY","FileSectionAnchor","id","heading","occurrence","FileSectionNavigation","treeId","targetNodeId","anchors","isAnchor","value","anchor","Record","occurrenceIsValid","undefined","Number","isInteger","getFileSectionNavigation","resource","metadata","navigation","Array","isArray","every","resolveFileSectionTargetId","selectedNodeId","some","PreviousFileSectionNavigation","resourceKey","anchorIds","shouldClearFileSectionSelection","input","previous","current","currentResourceKey","includes","Center","Spinner","FileRendererLoading","$","_c","t0","Symbol","for","_c","FileKind","IMAGE_EXTENSIONS","Set","PROSE_EXTENSIONS","CODE_LANGUAGE_BY_EXTENSION","Record","ts","tsx","js","jsx","mjs","cjs","json","jsonc","py","rb","rs","go","java","kt","c","h","cpp","cc","hpp","cs","php","swift","sh","bash","zsh","sql","css","scss","less","html","xml","yml","yaml","toml","ini","dockerfile","graphql","gql","md","markdown","txt","extensionOf","fileName","dot","lastIndexOf","length","slice","toLowerCase","isImage","mimeType","startsWith","has","pickFileKind","extension","codeLanguageFor","FileRendererContent","codeLanguageFor","pickFileKind","FileRendererPresentation","kind","isEditable","language","resolveFileRendererPresentation","content","contributionCanSave","emptyState","automaticKind","fileName","mimeType","editable","textRenderer","Box","Center","Flex","Image","Text","FileSourcePosition","AlertMessage","EmptyState","LazyMarkdownEditor","lazy","ReactNode","RefObject","Suspense","useLayoutEffect","FileRendererContent","FileRendererLoading","resolveFileRendererPresentation","CodeEditor","then","module","default","FileRendererContentViewProps","content","position","editorKey","errorNotice","contributionCanSave","onActiveSectionChange","sectionId","onChange","value","rendererRef","HTMLDivElement","sectionNavigation","anchors","Array","id","heading","occurrence","targetId","title","FileRendererContentView","props","$","_c","t0","t1","node","current","requestAnimationFrame","parentElement","overflowY","getComputedStyle","includes","scrollHeight","clientHeight","scrollTop","t2","Symbol","for","presentation","t3","kind","positionNotice","t4","emptyState","t5","description","t6","t7","dataUrl","fileName","isEditable","undefined","language","t8","placeholder","_c","FileRendererRefreshEnvelope","FileRendererRefreshOrigin","FileRendererSaveResult","FileEditControllerState","dirty","saving","saveError","removed","FileEditControllerInput","binding","Omit","resourceKey","debounceMs","load","event","save","value","origin","Promise","createOperationId","onStateChange","state","FileEditController","ReturnType","createFileEditController","input","baseline","baselineRevision","draft","activeSave","deferredRevision","genericRefreshDeferred","timer","setTimeout","operationSequence","seenRefreshRevisions","Set","completedOperationIds","describeError","error","Error","message","getState","const","notify","clearTimer","clearTimeout","nextOperationId","Date","now","hasPendingLocalState","Boolean","deferRefresh","revision","localeCompare","isSelfRefresh","operationId","rendererId","instanceId","has","takeDeferredRefresh","savedRevision","generic","undefined","runSave","resolve","then","result","add","size","delete","values","next","schedule","catch","getDraft","markRemoved","retain","getBaseline","setBaseline","acceptLoaded","shown","handleChange","handleRefreshEvent","retry","retryLoad","flush","Button","Flex","Text","FileRendererErrorNotice","props","$","_c","message","onRetry","t0","t1","t2","_c","PageParams","resourceKey","ResourceRef","FileRendererLoadKeyInput","fileRendererId","resource","pageParams","stableValue","value","Array","isArray","map","Object","fromEntries","entries","Record","sort","left","right","localeCompare","key","entry","createFileRendererLoadKey","input","resourceValue","id","type","metadata","JSON","stringify","isCurrentLoadedFile","loaded","loadKey","Text","Header","resolveFileIconElement","useFileIconThemePreference","FileRendererPathHeader","props","$","_c","fileName","filePath","activeFileIconTheme","t0","theme","t1","t2","t3","_c","Box","Button","Center","Flex","Text","ResourceRef","resourceKey","ReactNode","useEffect","useLayoutEffect","useRef","useState","RegisteredFileRendererContribution","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","getFileSectionNavigation","resolveFileSectionTargetId","shouldClearFileSectionSelection","useWorkbenchStore","usePageParams","FileRendererContentView","createFileEditController","FileEditController","FileEditControllerState","FileRendererErrorNotice","createFileRendererLoadKey","isCurrentLoadedFile","acceptFileRendererLoad","LoadedFile","readCachedFileContent","saveLoadedFile","storeCachedFileContent","FileRendererPathHeader","WorkbenchFileRendererViewProps","workbench","contribution","placement","SAVE_DEBOUNCE_MS","describeError","error","Error","message","syncActiveFileSection","input","navigation","ReturnType","sectionId","getTreeRenderer","treeId","anchors","some","anchor","id","setSelectedNode","selectedNodeId","getTreeState","undefined","getEditorSectionNavigation","targetId","useFilePosition","resource","$","_c","t0","state","location","position","page_0","Object","values","pages","find","page","ref","extensionId","key","document","metadataKey","metadata","store","FileRendererHeader","props","file","fileName","filePath","fileRendererOwnerKey","contributionId","loadKey","JSON","stringify","WorkbenchFileRendererView","sectionNavigation","editorSectionNavigation","pageParams","fileRendererId","loaded","setLoaded","setError","t1","Symbol","for","dirty","saving","editState","setEditState","controllerRef","retryReadRef","rendererRef","previousSectionNavigationRef","t2","t3","previous","current","currentResourceKey","anchorIds","map","_temp","contributionRef","resourceRef","pageParamsRef","placementRef","t4","hasSave","Boolean","save","ownerKey","instanceId","t5","cancelled","removed","boundResource","boundContribution","read","views","reads","bind","controller","cached","baseline","editorRevision","load","t6","reason","request","queryKey","signal","onValue","next","updateLoaded","onError","loadError","binding","rendererId","debounceMs","onStateChange","value","origin","saved","content","result","setBaseline","revision","removalSubscription","resources","onWillRemove","resource_0","retain","markRemoved","identity","placementIdentity","refreshSubscription","onDidRefreshFileRenderer","event","controller_0","handleRefreshEvent","dispose","flush","t7","t8","onVisibility","visibilityState","window","addEventListener","removeEventListener","t9","value_0","handleChange","t10","currentLoaded","loadError_0","t11","t12","t13","editorKey","errorNotice","saveError","retry","t14","t15","title","t16","_c","_temp","resourceKey","createElement","getWorkbenchRenderers","WorkbenchCore","clearCachedResourceContent","WorkbenchFileRendererView","installed","WeakSet","installWorkbenchFileRenderer","workbench","has","add","resources","onWillRemove","resource","setFileRendererImplementation","scope","instance","fileRendererId","contribution","getFileRenderer","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","Stack","ResourceContextAction","AttributeDescriptor","AttributesSource","applyKanbanMove","isAttributesSource","KanbanRenderer","KanbanRendererSkeleton","useKanbanRendererStore","ReactNode","useSyncExternalStore","KanbanRendererRow","RegisteredKanbanRendererContribution","ResourceRef","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","reportUserActionError","runUserAction","CommandParamFieldRenderer","useWorkbenchResourceActionResolver","kanbanPageFields","rendererQueryKey","RendererReadNotice","usePageParams","useRendererPages","useRendererRead","ViewToolbarActions","prepareKanbanMove","bindReactKanbanPresentation","resolveKanbanRendererStorageKey","WorkbenchKanbanViewProps","workbench","renderParamField","contribution","placement","WorkbenchKanbanViewFrameProps","children","WorkbenchKanbanViewFrame","props","$","_c","t0","noopSubscribe","isKanbanRowResource","resource","Boolean","type","id","useResolvedContributionAttributes","attributes","source","undefined","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","t1","t2","identity","scope","fields","append","pages","paged","executePage","read","ownerKey","queryKey","JSON","stringify","refreshKey","request","load","signal","state_2","accept","state","page","rows","executeQuery","position","refresh","invalidate","reset","subscription","events","onDidRefreshKanbanRenderer","event","kanbanRendererId","dispose","t3","value","mutate","t4","args","finally","handleOpenRow","row","target","navigation","openTarget","onRowActivate","getRowContextMenuActions","row_0","onClick","label","error","viewMode","retry","readNotice","T0","t5","T1","t6","loading","controls","t7","resourceKind","resources","getKind","t8","t9","some","_temp6","t10","action_0","t11","onAttributeChange","rowId","attributeId","snapshot","t12","onMove","move","mutation","value_0","save","t13","onReorder","rowId_0","beforeRowId","value_1","order","t14","onColumnAction","t15","args_0","t16","toolbarActions","t17","createRow","defaultActiveViewId","defaultViews","emptyDescription","emptyTitle","getBoardColumnConfig","hideToolbar","onCreateRow","t18","state_0","state_1","row_1","_c","_temp","_temp2","_temp3","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","RegisteredWorkbenchNotification","WorkbenchCore","useWorkbenchStore","isSystemError","notice","level","inlineTarget","useHasSystemErrors","workbench","notifications","store","_temp","state","Object","values","some","_temp","WorkbenchCore","useHasSystemErrors","useWorkbenchPanelMenusPresent","useModeChrome","useWorkbenchStore","useWorkbenchRegionContent","useWorkbenchLayoutFlags","workbench","$","_c","statusChrome","statusBarItems","statusBar","store","_temp","hasSystemErrors","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","state","items","state_0","values","state_1","_c","_temp","_temp2","_temp3","Button","HStack","Icon","Popover","Portal","Stack","Tag","Text","AlertMessage","ScrollArea","TriangleAlert","WorkbenchCore","useWorkbenchStore","WorkbenchActionErrors","isSystemError","WorkbenchSystemErrors","props","$","_c","workbench","notifications","store","_temp","errors","t0","t1","Symbol","for","bb0","Object","values","filter","sort","_temp2","length","at","latest","t2","placement","offset","mainAxis","t3","title","t4","t5","t6","t7","t8","t9","t10","t11","t12","error","dismiss","id","t13","t14","role","overscrollBehavior","t15","t16","error_0","actions","map","action","commandId","report","captureActionError","commands","executeCommand","args","catch","message","reverse","t17","t18","state","left","right","createdAt","localeCompare","_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","WorkbenchSystemErrors","ModeChromeView","useModeChrome","usePanelDragSurface","usePanelPositionActions","WorkbenchRegion","useWorkbenchStore","workbenchBackgrounds","WorkbenchStatusBarItems","WorkbenchSidenavProps","workbench","contextActions","WorkbenchSidenav","props","$","_c","drag","positionActions","t0","t1","t2","sidenav","t3","t4","WorkbenchRegionPanelProps","visible","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchActivityBar","shell","getArrangement","activity","edge","layout","store","horizontal","t5","t6","t7","t8","WorkbenchStatusBar","chrome","undefined","t9","t10","t11","t12","t13","_c","Flex","ReactNode","WorkbenchCore","resolveArrangement","WorkbenchPanelDropFrame","useWorkbenchStore","WorkbenchActivityBar","useWorkbenchArrangement","workbench","$","_c","saved","layout","store","_temp","t0","WorkbenchArrangementFrame","props","activityVisible","children","activity","Symbol","for","left","right","top","bottom","t1","t2","t3","t4","t5","state","arrangement","_c","_temp","useShallow","WorkbenchCore","WorkbenchRegion","useWorkbenchStore","useWorkbenchModeRegionSettings","workbench","region","$","_c","t0","layout","getRegionSettings","modes","store","_c","Box","WorkbenchCore","WorkbenchRegion","WorkbenchHeaderBorderProps","workbench","region","WorkbenchHeaderBorder","props","$","_c","layout","getRegionHeaderBorderBottom","t0","Symbol","for","_c","WorkbenchCore","useWorkbenchPanelMenusPresent","useWorkbenchPanelHeaderVisible","usePanelPolicy","useWorkbenchStore","useWorkbenchRegionContent","resolvePanelCollapsible","useSecondaryPanelView","workbench","$","_c","policy","t0","Symbol","for","locationScoped","hasContent","hasPanelHeader","hasMenus","hasHeader","t1","collapsible","layout","store","open","_temp","t2","provided","canClose","t3","t4","shell","collapsed","setRegionOpen","t5","has","onCollapsedChange","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","state","regions","secondary","visible","_c","_temp","Box","WorkbenchCore","WorkbenchFocusRegion","WorkbenchPanelMenuLayout","WorkbenchPanelMenuOpeners","PanelHeader","WorkbenchRegion","useWorkbenchPanelHeaderVisible","useWorkbenchRegionTabsVisible","WorkbenchRegionTabs","WorkbenchTabDropTarget","usePanelPolicy","workbenchBackgrounds","WorkbenchHeaderBorder","WorkbenchSecondaryPanelProps","workbench","hasSecondaryHeader","WorkbenchSecondaryPanel","props","$","_c","policy","hasTabs","hasPanelHeader","t0","t1","t2","t3","t4","t5","t6","t7","panel","t8","open","t9","t10","t11","_c","Box","Grid","PANEL_HEADER_CONTROL_SIZE","ResizableSplitLayout","headerTrailingMenuPath","WorkbenchCore","WorkbenchRegionSize","WorkbenchFocusRegion","WorkbenchHeaderActions","WorkbenchPanelMenuLayout","WorkbenchPanelMenuOpeners","WorkbenchPanelDropFrame","PanelHeader","WorkbenchRegion","useWorkbenchPanelHeaderVisible","useWorkbenchRegionTabsVisible","WorkbenchRegionTabs","WorkbenchTabDropTarget","usePanelPolicy","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","t0","t1","t2","t3","t4","t5","t6","t7","t8","main","WorkbenchBody","shell","getArrangement","secondary","position","layout","store","policy","fullscreen","_temp","pageId","pages","_temp2","modeSettings","panels","secondaryPanel","persistedSecondarySize","_temp3","size","getRegionSize","secondaryPanelSize","mainRegion","mainPanelWithMenus","t9","Symbol","for","t10","t11","mainContent","t12","hasHeader","t13","has","collapsed","t14","canClose","collapsible","t15","height","setRegionSize","t16","resizable","onCollapsedChange","t17","state","active","state_0","activePageId","state_1","regions","_c","_temp","_temp2","Box","ResizableSplitLayout","ReactNode","createPortal","WorkbenchCore","WorkbenchPanelDropFrame","WorkbenchRegion","WorkbenchRegionTabs","usePanelPolicy","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","shell","getArrangement","side","position","layout","store","policy","persistedSize","_temp","modeSettings","size","getRegionSize","collapsible","getRegionCollapsible","t3","t4","t5","defaultPx","t6","minPx","t7","maxPx","t8","canClose","t9","width","setRegionSize","t10","collapsed","t11","resizable","t12","state","regions","_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","shell","setRegionOpen","event","_c","_temp","Flex","ResizableSplitLayout","ResourceContextAction","ThemePreferenceStorage","Toaster","ReactNode","useLayoutEffect","useRef","useState","WorkbenchCore","WorkbenchCommandPalette","CommandParamFieldRenderer","WorkbenchNavChrome","WorkbenchKeybindingDispatcher","WorkbenchNotificationHost","movePanelHost","WorkbenchPanelDropFrame","WorkbenchPanelViewHosts","useWorkbenchPanelHeaderVisible","WorkbenchTabDragProvider","installWorkbenchControlsRenderer","installWorkbenchDataTableRenderer","installWorkbenchFileRenderer","installWorkbenchKanbanRenderer","installWorkbenchTreeRenderer","usePanelPolicy","useWorkbenchStore","WorkbenchFloatingSidePanel","useWorkbenchFileIconThemePreferences","useWorkbenchThemePreferences","workbenchBackgrounds","WorkbenchThemeProvider","WorkbenchThemeScope","FullscreenKeyboard","WorkbenchOverlayLayer","useWorkbenchLayoutFlags","useWorkbenchArrangement","WorkbenchArrangementFrame","WorkbenchBody","resolvePanelCollapsible","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchSidenav","WorkbenchStatusBar","WorkbenchSidePanelBoundary","WorkbenchSidePanelRegionHeader","WorkbenchSidePanelRegionPortal","WorkbenchProps","panelControlsPlacement","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","WorkbenchContent","props","arrangement","sidenavContextActions","setSidenavContextActions","onSidenavContextActionsChange","attachedSidePanelSlot","setAttachedSidePanelSlot","HTMLDivElement","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","current","paletteOpen","commandPalette","store","state","open","paletteInitialQuery","initialQuery","sidenavOpen","regions","sidenav","visible","hasSidePanelHeader","sidePanelMode","sidePanel","getMode","fullscreen","presentedSideMode","active","sideOpen","hasActivityBarWidgets","hasNavWidgets","hasSideHeaderWidgets","hasSideWidgets","hasSideMenus","hasSidenavWidgets","hasStatusWidgets","showActivity","showStatus","sidePolicy","sidenavPolicy","hasSidePanel","provided","canClose","showSidenav","sidenavCollapsible","persistedSidenavSize","size","sidenavSize","showAttachedSidePanel","setPanelOpen","shell","setRegionOpen","sideHeader","undefined","activeSidePanelSlot","HTMLElement","parentElement","contentWithHeader","contentWithSidenav","resizable","width","setRegionSize","collapsed","contentFrame","main","close","Workbench","$","_c","projectId","pages","_temp","themePreferences","mode","modes","_temp2","fileIconThemePreferences","t0","defaultTheme","t1","id","t2","t3","t4","t5","Symbol","for","t6","state_0","activeModeId","_c","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","matchesContextExpression","resolvePanelPosition","matchesWorkbenchPanelMenuOwner","getNavigationTargetKey","getWorkbenchModePanelForRegion","resourceContextMenuPath","headerTrailingMenuPath","findPlacementByWidgetId","getWorkbenchSelectionResourceKeys","getActiveWorkbenchLocationPanel","getActiveWorkbenchSubPanel","workbenchTopHeaderLeadingMenuPath","toPanelContribution","workbenchTopHeaderTrailingMenuPath","toPanelInstance","workbenchBreadcrumbLocationMenuPath","getAnchorResource","byContributionPriority","getKeybindingSteps","isWorkbenchPanelPlacementVisible","scopeWorkbenchResourceContextValues","resolveResourcePreview","rendererReadKey","workbenchPanelMenuRegions","settleReadBatch","getSettingsPanels","resolvePageParams","departingPagePreviews","getWorkbenchPanelForMenuRegion","workbenchRegionTabLeadingMenuPath","workbenchCommandPaletteMenuPath","resolveArrangement","batchWorkbenchChanges","runUserAction","workbenchPanelRegions","reportUserActionError","getWorkbenchRenderers","planTrayDrop","pageContextChanged","standardResourceIcons","resolveNavigationLevels","resourceMatchesConstraint","isWorkbenchModePanelAvailable","getNavigationTreeNodeSource","pageResourceContextKey","matchesWorkbenchModeEligibility","Fragment$1","Terminal$1","jsonObjectSchema","z","serializableJsonObjectSchema","localizedStringSchema","localizableStringSchema","extensionDiagnosticSeveritySchema","packageAssetDescriptorSchema","extensionSlotKindSchema","commandSourceSchema","extensionResourceRefSchema","base","numeric","vector","range","harness","selectionValue","selectionOption","selection","image","primitive","readOnlyContent","controlValueSchema","controlValuesSchema","controlParamSchema","controlGroupSchema","controlsQueryResultSchema","resolvePageActivePlacement","page","main","layout","selected","entry","resolvePageBreadcrumbPlacement","placement","resource","useWorkbenchStore","useStore","store","selector","WorkbenchIcon","$","c","name","rest","t0","props","size","t1","resolveIconComponent","IconComponent","t2","t3","Icon","isRecord$2","value","toIdentifierPrefix","char","metadataString","metadata","key","resourceContextValue","context","metadataValue","resourceKey","resolveCommandResourceParams","baseArgs","params","param","humanize$1","spaced","isRecord$1","isFileUploadValue","isCommandFilesParamValue","ref","createCommandFilesParamValue","input","commandFilesParamValue","raw","item","multiple","stringifyEditableValue","dedupeOptions","options","seen","option","hasCommandParameters","listCommandParamEntries","commandParamEntries","renameLabelDefault","mutation","id","buildCommandParamInitialValues","values","isEmptyValue","parseJsonValue","normalizeValue","numberValue","normalizeCommandParamValues","normalized","mergeCommandParamArgs","schema","resolveMenuItemState","action","record","readOnly","description","commandContextValues$1","workbench","withLeadingSeparator$1","enabled","items","first","resolveMenuEntries","contextValues","shortcuts","k","menuPath","state","label","requestParams","onRequestParams","nextArgs","bound","args","resolvedArgs","orderMenuEntries","regular","entries","kernel","createMenuIcon","iconSrc","Box","Image","icon","createMenuEndContent","disabledReason","Tooltip","external","binding","PaletteShortcut","toMenuItem","onCommandError","error","createMenuItemGroups","itemsWhere","createMenuItems","regularItems","kernelItems","resolveResourceActionMenu","kind","subject","current","request","subscribeResourceKinds","subscriptions","kinds","listener","subscription","subscribeResourceActionChanges","stopKinds","stops","stop","toResourceContextAction","createWorkbenchResourceActions","menu","createWorkbenchLocationActions","useWorkbenchResourceActionResolver","_temp$56","_temp2$33","refresh","useState","_temp3$20","useEffect","_temp4$12","_temp5$9","_temp6$5","state_0","revision","state_1","state_2","state_3","runPlacementAction","target","command","placementRowAction","row","placementMenuActions","snapshot","group","section","createWorkbenchResourceMenu","readPlacementTab","usePlacementTab","changes","_temp$55","setState","t4","projected","changed","t5","breadcrumbSnapshot","referenceKey","getSessionStatus","WorkbenchBreadcrumbIcon","status","SessionIndicator","Text","WorkbenchBreadcrumbTitle","title","HStack","buildWorkbenchBreadcrumbItems","actions","actionsForResource","WorkbenchBreadcrumbView","_temp$54","_temp2$32","_temp3$19","routedResource","_temp4$11","crumbs","item_0","T0","Breadcrumb","item_1","CommandOptionStatus","onRetry","Button","WorkbenchActionErrors","notifications","_temp$53","notice","errors","notice_0","AlertMessage","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$52","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","clearInvalidSelection","offered","load","field","controller","version","requestKey","execute","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","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","PaletteParamsDialog","_temp$51","confirmation","_temp2$31","CommandConfirmationDialog","args_0","commandId","t6","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","closePalette","createEntry","shortcutByAction","getRecordGroup","getRecordOrder","byCommandPaletteGroup","groupComparison","left","right","listCommandRecords","createWorkbenchCommandPaletteEntries","WorkbenchCommandPalette","_temp$50","WorkbenchMainCommandPalette","initialQuery","useThemePreference","_temp2$30","requestId","_temp3$18","_temp4$10","_temp5$8","_temp6$4","liveQuery","setLiveQuery","commandPaletteResourceEntries","compositionPanels","previewThemePreference","exitPickerView","isThemeView","commandEntries","resourceEntries","themeEntries","panelWidgetEntries","themeInitialActiveIndex","t7","initialActiveIndex","activeViewMode","activeViewModes","t8","t9","t10","t11","t12","t13","t14","t15","mode_0","t16","themeEntry","t17","ctx","t18","t19","t20","WorkbenchFocusRegion","boxProps","activeRegion","_temp$49","element","menuPathKey","path","resolveContextValues","listWorkbenchMenuItemsFromState","availability","listWorkbenchMenuItems","isKernelAction","isOverflowAction","withLeadingSeparator","resolveOverflowItems","resolveWorkbenchHeaderActionGroups","resolveWorkbenchHeaderOverflowLabel","commandExecutionContext","WorkbenchInlineHeaderAction","onSelect","onClick","controlSize","IconButton","WorkbenchHeaderActions","commands","_temp$48","_temp2$29","itemsByPath","_temp3$17","_temp4$9","inlineItems","overflowItems","Menu","Portal","ListRow","useTanStackWorkbenchHotkeys","registrations","_temp$47","hotkeys","useHotkeys","registration","keyAliases","normalizeWorkbenchKeybindingStep","keybinding","trimmed","part","normalizeWorkbenchKeybinding","steps","createWorkbenchHotkeyRegistrations","allowedCommandIds","commandIds","index","WorkbenchKeybindingDispatcher","setRegistrations","executeNotificationAction","WorkbenchNotificationHost","shownNotificationIds","showNotification","notification","toaster","toastAction","toastOptions","notification_0","useWorkbenchLocationResource","_temp$46","useWorkbenchActiveModeId","_temp2$28","retainViewPlacements","retained","previous","registeredViews","openPlacements","existing","unchanged","retainRecentViewPlacements","expires","currentIds","registered","deadline","now","placements","at","useRetainedViewPlacements","views","_temp$45","setPrevious","timer","_temp2$27","afterPaint","frame","abort","reject","resolve","WorkbenchWidgetContents","mounted","setMounted","defer","startTransition","_temp$44","renderer","WorkbenchWidgetFallback","Center","WorkbenchRenderedWidgetFrame","noopRefresh","toHostedPanel","WorkbenchWidgetHost","rendererId","instance","useModeChrome","mode","ModeChromeView","viewId","movePanelHost","slot","host","verticalContentProps","horizontalContentProps","RegionScrollArea","horizontal","resolvePanelCollapsible","regions","getWorkbenchPanelMenuAttachment","panelWidth","menus","attached","narrow","fits","sizes","total","candidate","PANEL_MENU_SIZE","panelLabels","resolveRegionSize$1","regionSize","getWorkbenchPanelMenuLabel","side","useWorkbenchPanelMenu","locationResource","modeId","panelAvailable","_temp$43","registeredWidgets","_temp2$26","currentRegionState","regionState","activeSubPanel","activeLocationPanel","contribution","placement_0","activePlacement","collapsible","panelStateKey","collapsed","useWorkbenchPanelMenus","width","useWorkbenchPanelWidth","attachment","_temp3$16","view_0","useWorkbenchPanelMenusPresent","setWidth","measure","observer","toTabKey","regionId","suppressesSidenavTabStrip","resolveTabIconName","resourceIcon","resourceKindIcon","resolveDisplayedActiveWidgetId","activeWidgetId","visiblePlacements","isWorkbenchPanelRegion","panelRegion","shouldShowRegionTabs","shouldShowPanelHeader","isPlacementEligibleForRegion","useWorkbenchRegionTabsState","hasPanelMenuOpeners","_temp$42","_temp2$25","_temp3$15","_temp4$8","layoutState","_temp5$7","visibilityStorageKey","storageKey","tabStore","useTabVisibilityStore","_temp6$3","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","WorkbenchPanelViewSlot","hidden","placeholder","slotRef","PanelViewPortal","collection","_temp$41","active","Activity","createPortal","WorkbenchPanelViewHosts","_temp2$24","_temp3$14","_temp4$7","_temp5$6","slots","setSlots","region_0","eligible","p","p_0","p_1","region_1","p_2","peers","p_3","selected_0","p_4","horizontalScrollRegions","panelMenuRegionIds","sidePanelRegionIds","getActivePlacement","widgets","resolveRenderedRegionPlacements","resolveRegionPlacementRenderState","additive","createPlaceholderPlacement","WorkbenchRegionPlacement","renderState","overlaysActivePlacement","flex","globalActiveWidgetId","activatePlacement","visible","order","WorkbenchRegion","pointerEvents","transparent","panelSlot","sharedViews","chrome","_temp$40","_temp2$23","_temp3$13","renderedPlacements","retainedPlacements","_temp4$6","visibleIds","scrollsHorizontally","placeholderView","renderedPlacement","Flex","WorkbenchPanelAddMenu","triggerRef","panels","openPanel","PANEL_HEADER_CONTROL_SIZE","trigger","panel_0","RegionTabMenu","labelId","useId","pending","currentRegion","destinations","pinned","pin","tabAction","_temp$39","triggerId","VisuallyHidden","action_0","ResourceMenuItems","resolvePanelDropTarget","closest","distance","pointer","origin","targets","rect","panelDropCollision","container","tabHeaderDropCollisions","owner","rects","tab","sideSlot","bottomSlot","x","y","pointerWithin","tabEdgeDropCollisions","edge","distances","vertical","hit","TabDragContext","useTabDrag","WorkbenchTabDragProvider","activeId","setActiveId","activePanel","setActivePanel","panelDrop","setPanelDrop","drop","setDrop","sensors","useSensors","useSensor","MouseSensor","TouchSensor","finish","data","widgetId","before","position","plan","resolveDrop","collision","edges","collision_0","area","rect_0","event_0","point","event_1","event_2","event_3","data_0","DragOverlay","DndContext","WorkbenchTabDropTarget","dragging","allowed","useDroppable","highlighted","setNodeRef","useTabContextMenu","anchor","useMenu","onContextMenu","element_0","show","useRegionTab","sortable","hold","start","suppressClick","drag","useDraggable","clearHold","nextWidgetId","previousWidgetId","onKeyDown","onPointerDown","onPointerMove","TabIcon","WorkbenchRegionTab","useTabsContext","behavior","labelRef","_temp$38","_temp2$22","_temp3$12","Tabs","TabDropIndicator","DropIndicator","RegionTabList","resolvePlacementIcon","iconName","WorkbenchRegionTabsContent","tabOverrides","getKey","viewport","setViewport","menuOpen","setMenuOpen","setAnchor","hiddenByDefault","menuActions","buildTabVisibilityMenuActions","hasVisibilityMenu","openVisibilityMenu","onWheel","onSelectLeadingItem","_temp$37","leadingActions","t21","t25","PANEL_HEADER_TAB_SIZE","t33","t34","t35","t36","details_0","_temp2$21","t37","t38","t39","WorkbenchPanelRegionTabs","WorkbenchOtherRegionTabs","WorkbenchRegionTabs","RendererPageRevisionChanged","acceptRendererPage","tablePageFields","columns","column","settings","kanbanPageFields","fields","attribute","attributes","rendererQueryKey","RendererReadNotice","retry","usePageParams","pageId","projectId","useShallow","rendererPagePosition","accepted","offset","limit","useRendererPages","epoch","setEpoch","collapse","setCollapse","collapsedGroups","setCollapsedGroups","setLimit","identity","setPosition","_temp$36","reset","saved","go","index_0","saved_0","rows","result_0","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","request_0","previous_1","value_1","reason","previous_2","connectionLost_0","owner_0","previous_3","save","commandContextValues","isRegisteredCommandVisible","executeTreeAction","runTreeAction","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","createTreeActionMenuItems","createTreeContextMenuItems","actionItems","visibleRegularItems","createTreeActionItems","TreeParamsDialog","ViewToolbarActions","setRequest","_temp$35","_temp2$20","resolveDataTableRendererQueryKey","resolveDataTableRendererColumns","contributionColumns","firstRow","rendererRow","rowByData","buildDataTableRendererData","resolveDataTableRendererSelectionActions","resolveDataTableRendererResourceActions","resolveResourceActions","resolveDataTableRendererStorageKey","scope","useTablePageColumns","setAccepted","declared","_temp2$19","_temp3$11","_temp$34","loaded","requested","id_0","hidden_0","initialResult","noopSubscribe$1","DataTableViewFrame","requirePageStatistics","hiddenColumns","emptyTablePlaceholder","grouping","EmptyState","WorkbenchDataTableView","pageParams","_temp$33","provider","viewsSource","_temp2$18","_temp3$10","filter","useDataTableViewStore","_temp4$5","sorts","_temp5$5","_temp6$2","paged","pageColumns","pages","invalidate","events","read","T1","model","openRow","renderers","rowActions","selectionActions","stats","t22","t23","t24","t26","t27","t28","t29","t30","t31","t32","loading","labels","_temp7$1","_temp8$1","descriptions","_temp9$1","_temp0$1","icons","_temp1$1","_temp10$1","_temp11$1","_temp12$1","_temp13$1","_temp14$1","row_0","column_9","_temp15$1","skeletonColumns","DataTableSkeleton","DataTable","data_1","_temp16$1","_temp17$1","_temp18$1","_temp19$1","_temp20$1","_temp21$1","_temp22$1","data_2","data_3","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$32","schemaByName","schema_0","name_0","persist","handleChange","name_1","_temp2$17","_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","findNode","child","findNodeInSections","wrapTreeNodeIcon","iconTooltip","resolveTreeNodeIcon","resolveTreeNodeNavigationIntent","resolveTreeNodeResource","resolveTreeNodeEndContent","Badge","additions","deletions","DiffBubble","toTreeListSectionEmptyNode","Spinner","toTreeListNode","navigationIntent","commandContext","customPath","resourcePath","menuItems","resolveMenuItems","toTreeListSection","emptyNode","TreeModeReturn","_temp$31","_temp2$16","pinnedOnlyNodeIds","withoutPinnedOnlyRows","TREE_SKELETON_WIDTHS","TreeViewSkeleton","_temp$30","TreeViewBody","leadingContent","TreeList","moduleLoading","backgroundContextActions","customizationAvailable","canMove","draggable","expandedNodeIds","expandedSectionIds","onMoveNode","onNavigate","onReorderNodes","onReorderSections","onToggleNode","onToggleSection","scrollRef","Skeleton","shouldSelectTreeNodeForNavigationTarget","createToggleTreeSection","treeViewId","sectionId","expandedIds","TreeViewSearch","Header","InputGroup","Input","previewTreeResources","previewNodes","isUnregisteredTreeError","treeId","trees","treeStructure","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","move_0","moves_0","preview","move_1","intent","move_2","move_3","useTreeData","_temp$29","_temp2$15","location","_temp3$8","project","_temp4$4","_temp5$4","getPageOwner","pageOwner","childrenKey","structure","expandedChildren","setExpandedChildren","loadChildren","children_0","subscription_0","contains","node_0","resource_0","savedBody","savedChildren","movement","onMoveError","location_0","resolveTreeActiveResource","overlay","overlayResource","primary","useTreeNavigationState","_temp$28","_temp2$14","_temp3$7","treeSelectionAncestors","selectedIds","parents","expandedSections","visit","useTreeSelection","selectedNodeIds","revealed","ancestors","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$27","_temp2$13","toggleSection","_temp3$6","toggleNode","_temp4$3","resetVisibility","_temp5$3","sectionOrder","_temp6$1","_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","createRelatedResourcePreferences","relatedRegions","pendingChoices","writes","currentResource","canonicalize","pageKey","write","destination","queued","removedOwner","forSource","isResourcePage","observing","updating","changedRegions","old","choices","relatedChanges","removing","forget","choice","removed","defaults","edits","targetAvailable","resolveRelatedOpenings","service","openings","fallbacks","fallbackTargets","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","policy","opened","projection","openRelatedResourcesPreference","targetResource","registerRelatedResourcePreviews","opener","abortAll","cancelOtherSelections","pageResource","selectedKey","openingPreviews","completion","primaryState","previousKey","restoresMode","navigation","routed","removal","selectionState","ResourceLinkPicker","setQuery","results","setResults","setSelected","role","setRole","setLoading","setRevision","_temp$26","excludeKey","cause","busy","onCancel","RelatedResources","setRows","cursor","setCursor","nextCursor","setNextCursor","picker","setPicker","setBusy","candidates","edge_0","mutate","cause_0","add","candidate_0","cause_1","edge_1","candidate_1","incoming","closeResourceLinksOnProjectChange","resourceLinksCommandId","createWorkbenchResourceLinksModule","previews","Centered","ScrollableSettingsContent","SettingsViewContent","panelId","content","CollectionItemView","resolveCollectionItem","itemId","alive","SettingsSurfacePanel","settingsState","_temp$25","child_0","useSettingsRevision","SettingsOverlay","navTreeId","nav","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","requestedPanel","isVisible","createWorkbenchSettingsModule","when","refreshNavigation","unsubscribeSettings","unsubscribeContext","WorkbenchPanelMenu","background","AttachedMenu","addPanelMenu","WorkbenchPanelMenuLayout","WorkbenchPanelMenuOpener","canAttach","WorkbenchPanelMenuOpeners","_temp$24","closedMenus","usePanelPolicy","_temp$23","usePanelMovePositions","_temp$22","usePanelPositionActions","interactive","usePanelDragSurface","floatingSide","fullscreenSide","empty","_temp2$12","PanelDragHeader","mergeRefs","PanelHeader","hasContent","hasTabs","useRecipe","edgeStyles","positionActions","headerProps","ResourceContextMenu","floatingPanelBottom","bottomOffset","launcherBottom","WorkbenchSidePanelTitle","WorkbenchSidePanelHeader","WorkbenchAttachedSidePanel","canFloat","fullscreen","_temp$21","Minimize2","contentSlotRef","AttachedPanel","WorkbenchFloatingSidePanel","_temp2$11","bubbleRef","previousFullscreen","bubbleIcon","onOpen","BubbleButton","MessageCircle","SquareArrowOutUpRight","Minus","BubblePanel","toStatusEditorValue","sameActions","statusNeedsUpdate","original","toWorkflowStatus","WorkflowStatusSection","statusSet","cached","statuses","setStatuses","loadError","setLoadError","cached_0","_temp$20","TagSettingsPanel","_temp2$10","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","previousIds","instanceId","terminalTitlePattern","nextTerminalIndexes","getInitialTerminalIndex","titleIndexes","getNextTerminalTitle","nextIndex","hasWorkspacePath","getTerminalResource","primaryResource","openWorkbenchTerminal","workspace","createWorkbenchTerminalModule","useWorkbenchThemePreferences","contributed","_temp$19","defaultThemePreferences","WorkbenchThemeProviderContext","WorkbenchThemeProvider","ChakraProvider","psTheme","fileIconThemePreferences","FileIconThemePreferenceProvider","initialThemePreference","ThemePreferenceProvider","WorkbenchThemeScope","FullscreenControls","_temp$18","exitRef","FullscreenKeyboard","sideOpen","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$17","_temp2$9","_temp3$4","setExitingPlacement","dialogRootConfig","canCloseOverlay","closeLabel","_temp4$2","handleOpenChange","handleExitComplete","handleInteractOutside","_temp5$2","useWorkbenchRegionContent","modePanel","useWorkbenchPanelToggles","_temp$16","arrangement","sidenav","secondary","hasNavigation","composition","hasSide","hasBottom","_temp2$8","WorkbenchPanelToggles","provided","WorkbenchBreadcrumbActions","_temp$15","_temp2$7","_temp3$3","_temp4$1","_temp5$1","resourceLabel","ResourceActionMenu","WorkbenchNavigationControls","history","_temp$14","WorkbenchNavChrome","panelControls","_temp2$6","hasNav","tabEdgeAnchors","PanelInsertionTarget","WorkbenchPanelDropFrame","_temp$13","lastTab","positions","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","saveLoadedFile","FILE_SECTION_NAVIGATION_METADATA_KEY","isAnchor","occurrenceIsValid","getFileSectionNavigation","resolveFileSectionTargetId","shouldClearFileSectionSelection","currentResourceKey","FileRendererLoading","IMAGE_EXTENSIONS","PROSE_EXTENSIONS","CODE_LANGUAGE_BY_EXTENSION","extensionOf","fileName","dot","isImage","mimeType","pickFileKind","extension","codeLanguageFor","resolveFileRendererPresentation","automaticKind","isEditable","contributionCanSave","CodeEditor","lazy","module","FileRendererContentView","editorKey","rendererRef","sectionNavigation","overflowY","presentation","positionNotice","errorNotice","Suspense","onActiveSectionChange","LazyMarkdownEditor","createFileEditController","baselineRevision","activeSave","saveError","deferredRevision","genericRefreshDeferred","operationSequence","seenRefreshRevisions","completedOperationIds","describeError","getState","notify","clearTimer","nextOperationId","hasPendingLocalState","deferRefresh","isSelfRefresh","operationId","takeDeferredRefresh","generic","savedRevision","runSave","schedule","retain","FileRendererErrorNotice","message","stableValue","createFileRendererLoadKey","resourceValue","fileRendererId","isCurrentLoadedFile","FileRendererPathHeader","useFileIconThemePreference","activeFileIconTheme","resolveFileIconElement","filePath","SAVE_DEBOUNCE_MS","syncActiveFileSection","getEditorSectionNavigation","useFilePosition","FileRendererHeader","file","fileRendererOwnerKey","contributionId","WorkbenchFileRendererView","editorSectionNavigation","setLoaded","editState","setEditState","controllerRef","retryReadRef","previousSectionNavigationRef","_temp$12","contributionRef","resourceRef","pageParamsRef","hasSave","boundResource","boundContribution","updateLoaded","removalSubscription","refreshSubscription","controller_0","flush","onVisibility","currentLoaded","loadError_0","installed$2","installWorkbenchFileRenderer","prepareKanbanMove","onMove","supportedMove","onAttributeChange","onReorder","attributeId","bindReactKanbanPresentation","resolveProjectScope","favoriteScope","storageScope","resolveKanbanRendererStorageKey","baseKey","kanbanRendererId","projectScope","WorkbenchKanbanViewFrame","noopSubscribe","isKanbanRowResource","useResolvedContributionAttributes","isAttributesSource","subscribe","getSnapshot","mergeKanbanViewRowActions","resourceActionKeys","resourceActions","resourceCommandIds","contributionActions","WorkbenchKanbanView","_temp$11","_temp2$5","useKanbanRendererStore","_temp3$2","_temp4","_temp5","handleOpenRow","getRowContextMenuActions","KanbanRendererSkeleton","readNotice","KanbanRenderer","_temp6","applyKanbanMove","rowId","rowId_0","beforeRowId","row_1","installed$1","installWorkbenchKanbanRenderer","installed","isSidenavPlacement","viewContextId","installWorkbenchTreeRenderer","installation","useWorkbenchFileIconThemePreferences","_temp$10","isSystemError","useHasSystemErrors","_temp$9","useWorkbenchLayoutFlags","statusChrome","statusBarItems","_temp$8","hasSystemErrors","_temp2$4","activeModeId","_temp3$1","WorkbenchSystemErrors","_temp$7","_temp2$3","latest","TriangleAlert","Popover","Tag","report","reorderInstructions","WorkbenchStatusBarItem","neighbor","WorkbenchStatusBarItems","_temp$6","_temp2$2","WorkbenchSidenav","contextActions","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchActivityBar","WorkbenchStatusBar","useWorkbenchArrangement","_temp$5","WorkbenchArrangementFrame","activity","activityVisible","useWorkbenchModeRegionSettings","WorkbenchHeaderBorder","useSecondaryPanelView","hasPanelHeader","hasMenus","hasHeader","_temp$4","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","WorkbenchSecondaryPanel","hasSecondaryHeader","SECONDARY_PANEL_SIZE","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","mainHeaderTrailingMenuPath","resolveRegionSize","persistedSize","MainHeaderBar","hasMainContentTabs","WorkbenchBody","_temp$3","_temp2$1","modeSettings","persistedSecondarySize","_temp3","secondaryPanelSize","mainRegion","mainPanelWithMenus","Grid","mainContent","height","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","WorkbenchContent","sidenavContextActions","setSidenavContextActions","attachedSidePanelSlot","setAttachedSidePanelSlot","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","paletteOpen","paletteInitialQuery","sidenavOpen","hasSidePanelHeader","sidePanelMode","presentedSideMode","showActivity","hasActivityBarWidgets","showStatus","hasStatusWidgets","sidePolicy","sidenavPolicy","hasSidePanel","hasSideHeaderWidgets","hasSideWidgets","hasSideMenus","showSidenav","hasSidenavWidgets","sidenavCollapsible","sidenavSize","setPanelOpen","activeSidePanelSlot","contentWithHeader","hasNavWidgets","panelControlsPlacement","contentWithSidenav","titleBar","sidePanelBubbleIcon","onOpenSidePanel","Workbench","_temp","_temp2","Toaster","disposeWorkbenchModuleHostRegistrations","syncWorkbenchModuleHostRegistrations","moduleIds","modules","WorkbenchModuleHost","registeredWorkbench"],"sources":["../../pstdio-api-contracts/src/extensions/common.ts","../../pstdio-api-contracts/src/extensions/resource-ref.ts","../../pstdio-api-contracts/src/extensions/control-declarations.ts","../../pstdio-api-contracts/src/session-resource-retention.ts","../src/core/registries/pages/page-active-placement.ts","../src/react/shared/use-workbench-store.ts","../src/react/shared/icon.tsx","../src/core/registries/commands/command-resource-params.ts","../src/react/command-palette/command-palette-params.ts","../src/react/menus/menu-item-state.ts","../src/react/menus/menu-entries.ts","../src/react/menus/command-menu-items.tsx","../src/react/menus/resource-action-menu.ts","../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/notifications/action-errors.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/retained-view-lifetime.ts","../src/react/region/use-retained-view-placements.ts","../src/react/shared/after-paint.ts","../src/react/region/widget-contents.tsx","../src/react/region/widget-host.tsx","../src/react/region/mode-chrome.tsx","../src/react/region/move-panel-host.ts","../src/react/region/region-scroll-area.tsx","../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/panel-drop-collision.ts","../src/react/region/tab-edge-drop-collision.ts","../src/react/region/tab-drag-context.tsx","../src/react/region/use-tab-context-menu.ts","../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/core/registries/renderers/renderer-page.ts","../src/react/renderers/renderer-page-fields.ts","../src/react/renderers/renderer-query-key.ts","../src/react/renderers/renderer-read-notice.tsx","../src/react/renderers/use-page-params.ts","../src/react/renderers/renderer-page-position.ts","../src/react/renderers/use-renderer-pages.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/use-table-page-columns.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-mode-return.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-resource-resolution.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/settings-surface-panel.tsx","../src/react/settings/use-settings-revision.ts","../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-panel-policy.ts","../src/react/region/panel-position-controls.tsx","../src/react/region/panel-header.tsx","../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/fullscreen-controls.tsx","../src/react/workbench/overlay-layer.tsx","../src/react/workbench/use-workbench-region-content.ts","../src/react/workbench/workbench-panel-toggles.tsx","../src/react/header/resource-actions.tsx","../src/react/header/workbench-nav-chrome.tsx","../src/react/region/panel-drop-frame.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/core/registries/renderers/file-section-navigation.ts","../src/react/renderers/file/file-renderer-loading.tsx","../src/react/renderers/file/file-kind.ts","../src/react/renderers/file/file-renderer-presentation.ts","../src/react/renderers/file/file-renderer-content.tsx","../src/react/renderers/file/file-renderer-edit-state.ts","../src/react/renderers/file/file-renderer-error-notice.tsx","../src/react/renderers/file/file-renderer-load-key.ts","../src/react/renderers/file/file-renderer-path-header.tsx","../src/react/renderers/file/file-renderer-view.tsx","../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/notifications/system-error-state.ts","../src/react/workbench/use-workbench-layout-flags.ts","../src/react/notifications/system-errors.tsx","../src/react/workbench/workbench-status-bar-items.tsx","../src/react/workbench/workbench-panels.tsx","../src/react/workbench/workbench-arrangement.tsx","../src/react/shared/use-workbench-mode-region-settings.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-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 { z } from \"zod\";\nimport type { JsonObject } from \"../extension-kernel/types/json\";\n\nexport const jsonObjectSchema = z.record(z.string(), z.unknown());\nexport const serializableJsonObjectSchema: z.ZodType<JsonObject> = z.record(z.string(), z.json()).meta({\n type: \"object\",\n additionalProperties: true,\n});\nexport const localizedStringSchema = z.object({ $l10n: z.string(), default: z.string().optional() });\nexport const localizableStringSchema = z.union([z.string(), localizedStringSchema]);\n\nexport const extensionSettingScopeSchema = z.enum([\"global\", \"project\"]);\nexport const extensionSettingValueTypeSchema = z.enum([\"boolean\", \"number\", \"string\", \"array\", \"object\"]);\nexport const extensionSettingSourceSchema = z.enum([\"stored\", \"default\"]);\n\nexport const extensionDiagnosticSeveritySchema = z.enum([\"info\", \"warning\", \"error\"]);\n\nexport const extensionDiagnosticSchema = z.object({\n code: z.string(),\n severity: extensionDiagnosticSeveritySchema,\n message: z.string(),\n extensionId: z.string().optional(),\n commandId: z.string().optional(),\n sourcePath: z.string().optional(),\n metadata: jsonObjectSchema.optional(),\n});\n\nexport const extensionRecordSchema = z.object({\n id: z.string(),\n name: z.string(),\n displayName: z.string(),\n extensionInstanceId: z.string().optional(),\n installedExtensionId: z.string().optional(),\n installName: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n sourcePath: z.string(),\n});\n\nexport const packageAssetDescriptorSchema = z.object({\n kind: z.literal(\"package-asset\"),\n path: z.string(),\n baseUrl: z.string(),\n});\n\nexport const extensionPlacementSchema = z.enum([\"first\", \"default\", \"last\"]);\nexport const extensionSlotKindSchema = z.enum([\n \"menu\",\n \"panel\",\n \"settings\",\n \"renderer\",\n \"kanbanRenderer\",\n \"dataTableRenderer\",\n]);\n\nexport const commandSourceSchema = z.enum([\n \"cli\",\n \"dashboard\",\n \"api\",\n \"schedule\",\n \"event\",\n \"automation\",\n \"command-panel\",\n]);\n\nexport const extensionWhenExpressionSchema = z.object({\n mode: z.union([z.string(), z.array(z.string())]).optional(),\n source: z.array(commandSourceSchema).optional(),\n viewId: z.union([z.string(), z.array(z.string())]).optional(),\n resourceType: z.array(z.string()).optional(),\n metadata: jsonObjectSchema.optional(),\n});\n\nexport const extensionWebviewContributionSchema = z.object({\n entry: packageAssetDescriptorSchema,\n title: localizableStringSchema.optional(),\n /** Host capabilities the webview is allowed to invoke through the bridge. */\n capabilities: z.array(z.string()).optional(),\n});\n\nexport const workbenchExtensionWebviewSchema = extensionWebviewContributionSchema.extend({\n /** API-served URL of the bridge runtime HTML the dashboard mounts in the iframe. */\n runtimeUrl: z.string(),\n /** API-served URL of the bundled extension module the bridge runtime dynamically imports. */\n moduleUrl: z.string(),\n /** API-served URLs of CSS files the bridge runtime should inject before mounting the module. */\n styles: z.array(z.string()).optional(),\n});\n\nexport type ExtensionDiagnostic = z.infer<typeof extensionDiagnosticSchema>;\nexport type LocalizableString = z.infer<typeof localizableStringSchema>;\nexport type ExtensionRecord = z.infer<typeof extensionRecordSchema>;\n","import { z } from \"zod\";\nimport { serializableJsonObjectSchema } from \"./common\";\n\nexport const extensionResourceRefSchema = z.object({\n device: z.object({ ownerId: z.string(), id: z.string(), name: z.string() }).optional(),\n shorthand: z.string().optional(),\n type: z.string(),\n id: z.string(),\n projectId: z.string().optional(),\n label: z.string().optional(),\n icon: z.string().optional(),\n extensionId: z.string().optional(),\n metadata: serializableJsonObjectSchema.optional(),\n});\n","import { z } from \"zod\";\nimport type { ControlParam, ControlsQueryResult } from \"../extension-kernel\";\nimport { extensionResourceRefSchema } from \"./execute\";\n\nconst base = { id: z.string(), name: z.string(), description: z.string().optional(), readOnly: z.boolean().optional() };\nconst numeric = { min: z.number().optional(), max: z.number().optional(), step: z.number().optional() };\nconst vector = z.strictObject({ x: z.number(), y: z.number() });\nconst range = z.tuple([z.number(), z.number()]);\nconst harness = z.strictObject({\n harnessId: z.string().min(1),\n model: z.string().optional(),\n params: z.record(z.string(), z.union([z.string(), z.boolean()])).optional(),\n});\nconst selectionValue = z.union([z.string(), z.array(z.string())]);\nconst selectionOption = z.strictObject({\n id: z.string(),\n name: z.string(),\n icon: z.string().optional(),\n color: z.string().optional(),\n description: z.string().optional(),\n disabled: z.boolean().optional(),\n});\nconst selection = {\n placeholder: z.string().optional(),\n searchable: z.boolean().optional(),\n searchPlaceholder: z.string().optional(),\n emptyText: z.string().optional(),\n disabled: z.boolean().optional(),\n};\nconst image = z.strictObject({ src: z.string(), alt: z.string() });\nconst primitive = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst readOnlyContent = z.union([\n primitive,\n z.array(primitive),\n image.extend({ type: z.literal(\"image\") }),\n z.strictObject({ type: z.literal(\"image-gallery\"), images: z.array(image) }),\n]);\n\nexport const controlValueSchema = z.union([primitive, z.array(z.string()), range, vector, harness]);\nexport const controlValuesSchema = z.record(z.string(), controlValueSchema);\nexport const controlParamSchema = z.discriminatedUnion(\"type\", [\n z.strictObject({ ...base, type: z.literal(\"harness\"), defaultValue: harness }),\n z.strictObject({ ...base, ...numeric, type: z.literal(\"number\"), defaultValue: z.number() }),\n z.strictObject({ ...base, type: z.literal(\"boolean\"), defaultValue: z.boolean() }),\n z.strictObject({ ...base, type: z.literal(\"text\"), defaultValue: z.string(), singleLine: z.boolean().optional() }),\n z.strictObject({\n ...base,\n type: z.literal(\"markdown\"),\n defaultValue: z.string(),\n placeholder: z.string().optional(),\n }),\n z.strictObject({\n ...base,\n ...selection,\n type: z.literal(\"selection\"),\n allowCustomValues: z.boolean().optional(),\n defaultValue: selectionValue,\n options: z.array(selectionOption),\n multiSelect: z.boolean().optional(),\n clearable: z.boolean().optional(),\n group: z\n .strictObject({\n id: z.string(),\n name: z.string(),\n defaultValue: z.string(),\n options: z.array(selectionOption),\n ...selection,\n })\n .optional(),\n }),\n z.strictObject({\n ...base,\n type: z.literal(\"date\"),\n defaultValue: z.string(),\n min: z.string().optional(),\n max: z.string().optional(),\n }),\n z.strictObject({ ...base, type: z.literal(\"color\"), defaultValue: z.string() }),\n z.strictObject({ ...base, type: z.literal(\"readOnly\"), value: readOnlyContent }),\n z.strictObject({\n ...base,\n type: z.literal(\"resource\"),\n defaultValue: selectionValue,\n options: z.array(\n z.strictObject({\n id: z.string(),\n name: z.string(),\n icon: z.string().optional(),\n color: z.string().optional(),\n description: z.string().optional(),\n href: z.string().optional(),\n ref: extensionResourceRefSchema.optional(),\n copyText: z.string().optional(),\n }),\n ),\n multiSelect: z.boolean().optional(),\n editable: z.boolean().optional(),\n placeholder: z.string().optional(),\n emptyText: z.string().optional(),\n }),\n z.strictObject({\n ...base,\n ...numeric,\n type: z.literal(\"range\"),\n defaultValue: range,\n min: z.number(),\n max: z.number(),\n unit: z.string().optional(),\n markerCount: z.number().optional(),\n }),\n z.strictObject({\n ...base,\n type: z.literal(\"segmented\"),\n defaultValue: z.string(),\n variant: z.enum([\"default\", \"dots\"]).optional(),\n options: z.array(\n z.strictObject({\n id: z.string(),\n name: z.string(),\n icon: z.string().optional(),\n indicatorColor: z.string().optional(),\n }),\n ),\n }),\n z.strictObject({\n ...base,\n type: z.literal(\"actions\"),\n defaultValue: z.string().optional(),\n options: z.array(\n z.strictObject({\n id: z.string(),\n name: z.string(),\n icon: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n ),\n }),\n z.strictObject({\n ...base,\n type: z.literal(\"anchorGrid\"),\n defaultValue: z.enum([\n \"top-left\",\n \"top\",\n \"top-right\",\n \"left\",\n \"center\",\n \"right\",\n \"bottom-left\",\n \"bottom\",\n \"bottom-right\",\n ]),\n }),\n z.strictObject({\n ...base,\n ...numeric,\n type: z.literal(\"vector\"),\n defaultValue: vector,\n coordinateMode: z.enum([\"cartesian\", \"screen\"]).optional(),\n xLabel: z.string().optional(),\n yLabel: z.string().optional(),\n }),\n]) satisfies z.ZodType<ControlParam>;\n\nexport const controlGroupSchema = z.strictObject({\n id: z.string(),\n title: z.string(),\n description: z.string().optional(),\n params: z.array(controlParamSchema),\n collapsible: z.boolean().optional(),\n defaultCollapsed: z.boolean().optional(),\n});\nexport const controlsQueryResultSchema = z.strictObject({\n params: z.array(controlParamSchema).optional(),\n groups: z.array(controlGroupSchema).optional(),\n values: controlValuesSchema.optional(),\n readOnly: z.boolean().optional(),\n}) satisfies z.ZodType<ControlsQueryResult>;\n","export const SESSION_RESOURCE_RETENTION_MS = 30 * 60_000;\n","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 { 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 { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { WorkbenchCommandExecutionContext } from \"./command-registry\";\n\ntype ResourceParamSchema = Record<string, { type: string; resolvedFrom?: \"resource\"; resourceType?: string }>;\ntype ResourceParamEntry = ResourceParamSchema[string] & { key: string };\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(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};\nexport const resourceContextValue = (\n entry: ResourceParamEntry,\n context: WorkbenchCommandExecutionContext | undefined,\n) => {\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};\nexport const resolveCommandResourceParams = (\n params: ResourceParamSchema | undefined,\n baseArgs?: unknown,\n context?: WorkbenchCommandExecutionContext,\n) => {\n const base = isRecord(baseArgs) ? baseArgs : {};\n return Object.fromEntries(\n Object.entries(params ?? {})\n .map(([key, param]) => ({ ...param, key }))\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};\n","import { resourceContextValue } from \"../../core/registries/commands/command-resource-params\";\n\nexport { resolveCommandResourceParams } from \"../../core/registries/commands/command-resource-params\";\n\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 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\");\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 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 type { MenuPath, WorkbenchCommandExecutionContext, WorkbenchCoreContributionContext } from \"../../core\";\nimport { scopeWorkbenchResourceContextValues } from \"../../core\";\nimport { hasCommandParameters, resolveCommandResourceParams } from \"../command-palette/command-palette-params\";\nimport type { TreeActionParamsRequest } from \"../renderers/tree/tree-actions\";\nimport { resolveMenuItemState } from \"./menu-item-state\";\n\nexport interface ResolveMenuEntriesInput {\n workbench: WorkbenchCoreContributionContext;\n menuPath: MenuPath;\n context?: WorkbenchCommandExecutionContext;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\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\nexport const withLeadingSeparator = <T extends { separatorBefore?: boolean }>(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\n// Menu state without presentation, so native menus and webview bridges share one\n// source for visibility, availability, and execution.\nexport const resolveMenuEntries = (input: ResolveMenuEntriesInput) => {\n const { context, menuPath, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]));\n\n return workbench.layout.listMenuItems(menuPath).flatMap((action) => {\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) return [];\n const state = resolveMenuItemState(action, record, contextValues, context);\n if (!state) return [];\n\n const { args } = action;\n const label = action.label ?? record.command.label;\n const requestParams =\n hasCommandParameters(record.command.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: { record: { command: record.command }, label, args, context },\n run: async (nextArgs) => {\n await workbench.commands.executeCommand(record.command.id, nextArgs, context);\n },\n })\n : undefined;\n // Resolves when the command finishes or the parameter form opens; rejects when the command fails.\n const run = async () => {\n if (requestParams) {\n requestParams();\n return;\n }\n const bound = resolveCommandResourceParams(record.command.params, args, context);\n const resolvedArgs = Object.keys(bound).length\n ? { ...(typeof args === \"object\" && args !== null ? args : {}), ...bound }\n : args;\n await workbench.commands.executeCommand(record.command.id, resolvedArgs, context);\n };\n\n return [\n {\n id: action.id,\n label,\n group: action.resourceGroup,\n commandId: action.sourceCommandId ?? record.command.id,\n description: state.description,\n icon: action.icon ?? record.command.icon,\n iconSrc: action.iconSrc,\n external: action.external,\n binding: shortcuts.get(record.command.id),\n kernel: action.group === \"kernel\",\n disabled: state.disabled,\n readOnly: state.readOnly,\n separatorBefore: action.separatorBefore,\n run: state.readOnly ? undefined : run,\n },\n ];\n });\n};\n\nexport type MenuEntry = ReturnType<typeof resolveMenuEntries>[number];\n\nexport const orderMenuEntries = <T extends { kernel: boolean; separatorBefore?: boolean }>(entries: T[]) => {\n const regular = entries.filter((entry) => !entry.kernel);\n const kernel = entries.filter((entry) => entry.kernel);\n return [...regular, ...withLeadingSeparator(kernel, regular.length > 0)];\n};\n","import { Box, Image } from \"@chakra-ui/react\";\nimport { PaletteShortcut, Tooltip, type TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type { KeybindingSequence, WorkbenchCoreContributionContext } from \"../../core\";\nimport { reportUserActionError } from \"../../core/shared/run-user-action\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { type MenuEntry, type ResolveMenuEntriesInput, resolveMenuEntries, withLeadingSeparator } from \"./menu-entries\";\nexport interface CreateMenuItemsInput extends ResolveMenuEntriesInput {\n onCommandError?: (error: unknown) => void;\n}\n\nconst createMenuIcon = (input: { icon?: string; iconSrc?: string }) => {\n const { icon, iconSrc } = input;\n if (iconSrc) {\n return (\n <Box boxSize=\"16px\" bg=\"white\" borderRadius=\"4px\" p=\"1px\" display=\"grid\" placeItems=\"center\">\n <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}>\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\nconst toMenuItem = (\n workbench: WorkbenchCoreContributionContext,\n entry: MenuEntry,\n onCommandError: CreateMenuItemsInput[\"onCommandError\"],\n): TreeListActionMenuItem => ({\n id: entry.id,\n label: entry.label,\n group: entry.group,\n commandId: entry.commandId,\n description: entry.description,\n icon: createMenuIcon(entry),\n endContent: createMenuEndContent({\n external: entry.external,\n binding: entry.binding,\n disabledReason: entry.description,\n readOnly: entry.readOnly,\n }),\n disabled: entry.disabled,\n readOnly: entry.readOnly,\n separatorBefore: entry.separatorBefore,\n onAction: entry.run\n ? () => {\n void entry.run?.().catch((error) => {\n if (onCommandError) onCommandError(error);\n else reportUserActionError(workbench, entry.label, error);\n });\n }\n : undefined,\n});\n\nexport const createMenuItemGroups = (input: CreateMenuItemsInput) => {\n const entries = resolveMenuEntries(input);\n const itemsWhere = (kernel: boolean) =>\n entries\n .filter((entry) => entry.kernel === kernel)\n .map((entry) => toMenuItem(input.workbench, entry, input.onCommandError));\n return { regularItems: itemsWhere(false), kernelItems: itemsWhere(true) };\n};\n\nexport const createMenuItems = (input: CreateMenuItemsInput) => {\n const { regularItems, kernelItems } = createMenuItemGroups(input);\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n","import type { RegisteredResourceKind, ResourceRef, WorkbenchCoreContributionContext } from \"../../core\";\nimport { resourceContextMenuPath } from \"../../core\";\nimport type { ResolveMenuEntriesInput } from \"./menu-entries\";\n\n// Resolves the current resource and its context menu once, so native cards and\n// webviews list the same actions for the same resource.\nexport const resolveResourceActionMenu = (\n workbench: WorkbenchCoreContributionContext,\n subject: ResourceRef,\n onRequestParams?: ResolveMenuEntriesInput[\"onRequestParams\"],\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 undefined;\n return {\n workbench,\n menuPath: resourceContextMenuPath(resource.type),\n context: { resource },\n onRequestParams: onRequestParams ?? (({ request }) => workbench.commandPalette.requestParams(request)),\n group: { id: `resource:${resource.extensionId ?? \"pstdio\"}:${resource.type}`, label: kind?.label ?? resource.type },\n } satisfies ResolveMenuEntriesInput & { group: { id: string; label: string } };\n};\n\nexport const subscribeResourceKinds = (kinds: RegisteredResourceKind[], listener: () => void) => {\n const subscriptions = kinds.flatMap((kind) => (kind.subscribe ? [kind.subscribe(listener)] : []));\n return () => {\n for (const subscription of subscriptions) {\n if (typeof subscription === \"function\") subscription();\n else subscription.dispose();\n }\n };\n};\n\n// Fires when anything that decides a resource's actions changes: resource data,\n// kinds, commands, context keys, or menu contributions.\nexport const subscribeResourceActionChanges = (workbench: WorkbenchCoreContributionContext, listener: () => void) => {\n let stopKinds = subscribeResourceKinds(workbench.resources.listKinds(), listener);\n const stops = [\n workbench.resources.preview.store.subscribeSelector((state) => state.changes, listener),\n workbench.resources.store.subscribeSelector(\n (state) => state.kinds,\n () => {\n stopKinds();\n stopKinds = subscribeResourceKinds(workbench.resources.listKinds(), listener);\n listener();\n },\n ),\n workbench.commands.store.subscribeSelector((state) => state.commands, listener),\n workbench.context.store.subscribeSelector((state) => state.values, listener),\n workbench.layout.menuStore.subscribeSelector((state) => state.itemsByPath, listener),\n ];\n return () => {\n stopKinds();\n for (const stop of stops) stop();\n };\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 { workbenchBreadcrumbLocationMenuPath } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { type CreateMenuItemsInput, createMenuItems } from \"./command-menu-items\";\nimport { resolveResourceActionMenu, subscribeResourceKinds } from \"./resource-action-menu\";\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 menu = resolveResourceActionMenu(workbench, subject, options.onRequestParams);\n if (!menu) return [];\n return createMenuItems({ ...menu, onCommandError: options.onCommandError }).map((item) => ({\n ...toResourceContextAction(item),\n group: item.group ?? menu.group,\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(() => subscribeResourceKinds(Object.values(kinds), () => refresh((revision) => revision + 1)), [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 { Box } from \"@chakra-ui/react\";\nimport { AlertMessage } from \"@pstdio/ui\";\nimport { useEffect } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport const WorkbenchActionErrors = (props: { workbench: WorkbenchCore; target: string }) => {\n const { workbench, target } = props;\n const notifications = useWorkbenchStore(workbench.notifications.store, (state) => state.notifications);\n const errors = Object.values(notifications).filter((notice) => notice.inlineTarget === target);\n\n useEffect(\n () => () => {\n for (const notice of workbench.notifications.listNotifications()) {\n if (notice.inlineTarget === target) workbench.notifications.dismiss(notice.id);\n }\n },\n [workbench, target],\n );\n\n if (!errors.length) return null;\n return (\n <Box flexShrink={0} p=\"xs\" data-action-error-target={target}>\n {errors.map((error) => (\n <AlertMessage\n key={error.id}\n status=\"error\"\n role=\"alert\"\n title={error.title}\n onClose={() => workbench.notifications.dismiss(error.id)}\n >\n {error.message}\n </AlertMessage>\n ))}\n </Box>\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 void runUserAction(workbench, result.label, () => result.activate(), {\n inlineTarget: \"command-palette\",\n onSuccess: onClose,\n });\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 /** @deprecated Failed submissions stay open and display their error in the dialog. */\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 } = 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 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 { 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 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 void runUserAction(workbench, label, () => activate(resource), {\n inlineTarget: \"command-palette\",\n onSuccess: onClose,\n });\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 { WorkbenchActionErrors } from \"../notifications/action-errors\";\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 onClose: () => void;\n}) => {\n const { args, commandId, context, label, workbench, onClose } = input;\n const closePalette = workbench.commandPalette.captureClose(onClose);\n await runUserAction(workbench, label, () => workbench.commands.executeCommand(commandId, args, context), {\n inlineTarget: \"command-palette\",\n onSuccess: closePalette,\n });\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 if (hasCommandParameters(record.command.params) && onRequestParams) {\n onClose();\n onRequestParams({ record, action, label, args, context });\n return;\n }\n void executePaletteCommand({ workbench, commandId: record.command.id, args, context, label, onClose });\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 const requestId = useWorkbenchStore(workbench.commandPalette.store, (state) => state.requestId);\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 // biome-ignore lint/correctness/useExhaustiveDependencies: a new presentation resets provider queries even when its initial text is unchanged.\n useEffect(() => {\n if (open) setLiveQuery(initialQuery);\n }, [initialQuery, open, requestId]);\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={`${requestId}:${view}:${initialQuery}`}\n inputIcon={({ mode }) => getPaletteInputIcon({ view, mode })}\n placeholder={({ mode }) => getPalettePlaceholder({ view, mode })}\n emptyLabel=\"No results found.\"\n footerStart={<WorkbenchActionErrors workbench={workbench} target=\"command-palette\" />}\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 { WorkbenchActionErrors } from \"../notifications/action-errors\";\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 <WorkbenchActionErrors workbench={workbench} target={`region:${region}`} />\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// System errors belong to the status bar. Action errors belong to their view.\n// Other notifications use the shared toaster rendered once by the shell.\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 useEffect(() => {\n const showNotification = (notification: RegisteredWorkbenchNotification) => {\n if (notification.level === \"error\" || notification.inlineTarget) {\n if (shownNotificationIds.current.delete(notification.id)) toaster.dismiss(notification.id);\n return;\n }\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 (\n details.status === \"unmounted\" &&\n workbench.notifications.store.getState().notifications[notification.id] === notification\n )\n 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 openPlacements?: ReadonlySet<string>,\n) => {\n const retained = new Map(\n previous\n .filter(\n (placement) =>\n placement.viewId &&\n registeredViews.has(placement.viewId) &&\n (!openPlacements || openPlacements.has(placement.widgetId)),\n )\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 { SESSION_RESOURCE_RETENTION_MS } from \"pstdio-api-contracts\";\nimport type { WorkbenchWidgetPlacement } from \"../../core\";\nimport { retainViewPlacements } from \"./retained-view-placements\";\n\nexport interface RetainedViewState {\n placements: WorkbenchWidgetPlacement[];\n expires: ReadonlyMap<string, number>;\n}\n\nexport const retainRecentViewPlacements = (\n previous: RetainedViewState,\n current: WorkbenchWidgetPlacement[],\n registered: ReadonlySet<string>,\n open: ReadonlySet<string> | undefined,\n now: number,\n) => {\n const expires = new Map<string, number>();\n const retained = open ? new Set(open) : undefined;\n const currentIds = new Set(current.map((placement) => placement.widgetId));\n for (const placement of previous.placements) {\n if (!placement.viewId || !registered.has(placement.viewId)) continue;\n const id = placement.widgetId;\n if (!retained || open?.has(id) || currentIds.has(id)) continue;\n const deadline = previous.expires.get(id) ?? now + SESSION_RESOURCE_RETENTION_MS;\n if (deadline <= now) continue;\n expires.set(id, deadline);\n retained.add(id);\n }\n const placements = retainViewPlacements(previous.placements, current, registered, retained);\n const unchanged =\n expires.size === previous.expires.size && [...expires].every(([id, at]) => previous.expires.get(id) === at);\n return placements === previous.placements && unchanged ? previous : { placements, expires };\n};\n","import { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchWidgetPlacement } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { type RetainedViewState, retainRecentViewPlacements } from \"./retained-view-lifetime\";\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 = (\n workbench: WorkbenchCore,\n current: WorkbenchWidgetPlacement[],\n open?: ReadonlySet<string>,\n) => {\n const views = useWorkbenchStore(workbench.views.store, (state) => state.views);\n const [previous, setPrevious] = useState<RetainedViewState>(() => ({ placements: current, expires: new Map() }));\n const next = retainRecentViewPlacements(previous, current, new Set(Object.keys(views)), open, Date.now());\n if (previous !== next) setPrevious(next);\n const deadline = Math.min(...next.expires.values());\n useEffect(() => {\n if (!Number.isFinite(deadline)) return;\n const timer = setTimeout(() => setPrevious((state) => ({ ...state })), Math.max(0, deadline - Date.now()));\n return () => clearTimeout(timer);\n }, [deadline]);\n return next.placements;\n};\n","/** Yield a browser paint opportunity before starting work for newly mounted content. */\nexport const afterPaint = (signal: AbortSignal) =>\n new Promise<void>((resolve, reject) => {\n signal.throwIfAborted();\n let frame = 0;\n const abort = () => {\n cancelAnimationFrame(frame);\n reject(signal.reason);\n };\n signal.addEventListener(\"abort\", abort, { once: true });\n frame = requestAnimationFrame(() => {\n frame = requestAnimationFrame(() => {\n signal.removeEventListener(\"abort\", abort);\n resolve();\n });\n });\n });\n","import { type ReactNode, startTransition, useEffect, useState } from \"react\";\nimport type { WorkbenchPanelRenderInput, WorkbenchRendererRegistration } from \"../../core\";\nimport { afterPaint } from \"../shared/after-paint\";\n\ninterface WorkbenchWidgetContentsProps {\n input: WorkbenchPanelRenderInput;\n renderer: WorkbenchRendererRegistration;\n defer: boolean;\n}\n\nexport const WorkbenchWidgetContents = (props: WorkbenchWidgetContentsProps) => {\n const { input, renderer, defer } = props;\n // Static rendering has no browser paint cycle to wait for.\n const [mounted, setMounted] = useState(!defer || typeof requestAnimationFrame !== \"function\");\n useEffect(() => {\n if (mounted) return;\n const controller = new AbortController();\n void afterPaint(controller.signal).then(\n () => startTransition(() => setMounted(true)),\n () => undefined,\n );\n return () => controller.abort();\n }, [mounted]);\n // Keep mounted panels intact when resources, placements, or regions change.\n return mounted ? (renderer.render(input) as ReactNode) : null;\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 { WorkbenchActionErrors } from \"../notifications/action-errors\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchWidgetContents } from \"./widget-contents\";\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; status: boolean }) => {\n const { children } = props;\n\n return (\n <Box\n flex=\"1\"\n minW=\"0\"\n minH=\"0\"\n w=\"full\"\n h=\"full\"\n overflow=\"hidden\"\n display={props.status ? \"flex\" : undefined}\n alignItems={props.status ? \"center\" : undefined}\n >\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 flexDirection=\"column\"\n flex=\"1 0 auto\"\n minW=\"0\"\n minH=\"0\"\n w=\"full\"\n overflow=\"hidden\"\n >\n <WorkbenchActionErrors workbench={workbench} target={placement.widgetId} />\n {renderer ? (\n <WorkbenchRenderedWidgetFrame status={props.region === \"status\"}>\n <WorkbenchWidgetContents\n renderer={renderer}\n input={{ workbench, panel, instance, refresh }}\n // File views start an async read; their heavy editors load separately.\n defer={view?.body.kind !== \"file\" && [\"main\", \"side\", \"bottom\"].includes(panel.region)}\n />\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 { ScrollArea } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\n\n// Let short views fill the viewport while tall views use the region scrollbar.\nconst verticalContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\", position: \"relative\" } as const;\nconst horizontalContentProps = {\n display: \"flex\",\n alignItems: \"stretch\",\n h: \"full\",\n minH: \"100%\",\n position: \"relative\",\n} as const;\n\ninterface RegionScrollAreaProps {\n children: ReactNode;\n horizontal?: boolean;\n hidden?: boolean;\n}\n\nexport const RegionScrollArea = (props: RegionScrollAreaProps) => {\n const { children, horizontal = false, hidden = false } = props;\n return (\n <ScrollArea\n display={hidden ? \"none\" : \"flex\"}\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n size=\"xs\"\n showVerticalScrollbar={!horizontal}\n showHorizontalScrollbar={horizontal}\n viewportProps={horizontal ? { justifyContent: \"center\" } : undefined}\n contentProps={horizontal ? horizontalContentProps : verticalContentProps}\n >\n {children}\n </ScrollArea>\n );\n};\n","import type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\nexport const resolvePanelCollapsible = (workbench: WorkbenchCore, ...regions: WorkbenchRegion[]) =>\n regions.every((region) => workbench.layout.getRegionCollapsible(region));\n","interface 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:\n regionState.headerVisible === true ||\n (workbench.shell.getPanelPolicy(region).legacyHeaders || region === \"main\"\n ? workbench.layout.getRegionSettings(region)?.alwaysShowTabs\n : (workbench.layout.getRegionSettings(region)?.alwaysShowTabs ?? true)),\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 {\n Activity,\n createContext,\n type ReactNode,\n type Ref,\n useContext,\n useEffect,\n useLayoutEffect,\n useState,\n} 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 { RegionScrollArea } from \"./region-scroll-area\";\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\ninterface WorkbenchPanelViewSlotProps {\n slotRef: Ref<HTMLDivElement>;\n hidden: boolean;\n placeholder: ReactNode;\n}\n\nexport const WorkbenchPanelViewSlot = (props: WorkbenchPanelViewSlotProps) => {\n const { slotRef, hidden, placeholder } = props;\n return (\n <>\n {placeholder ? <RegionScrollArea hidden={hidden}>{placeholder}</RegionScrollArea> : null}\n {/* Keep the slot connected when chrome or a placeholder hides retained views. */}\n <Box\n ref={slotRef}\n display={hidden || placeholder ? \"none\" : \"flex\"}\n flexDirection=\"column\"\n flex=\"1\"\n minH=\"0\"\n w=\"full\"\n minW=\"0\"\n />\n </>\n );\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 const view = placement.viewId ? workbench.views.getView(placement.viewId) : undefined;\n const collection = view?.body.kind === \"dataTable\" || view?.body.kind === \"kanban\";\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 useEffect(\n () => () => {\n // React removes portal children before passive unmount cleanup. StrictMode\n // replays effects with those children still live, so their host must stay connected.\n if (!host.hasChildNodes()) host.remove();\n },\n [host],\n );\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\"\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 {/* The retained view owns its viewport, so another tab cannot reset its scroll position. */}\n <RegionScrollArea>\n {/* Preserve collection state while deferring updates and reads for hidden pages. */}\n <Activity mode={active || !collection ? \"visible\" : \"hidden\"}>\n <WorkbenchWidgetHost workbench={workbench} placement={placement} region={region} />\n </Activity>\n </RegionScrollArea>\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, workbench.host.getOpenPlacementIds());\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 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, WorkbenchPanelViewSlot } from \"./panel-view-hosts\";\nimport { RegionScrollArea } from \"./region-scroll-area\";\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\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 workbench.host.getOpenPlacementIds(),\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 const placeholderView =\n placeholder && placement ? (\n <WorkbenchWidgetHost workbench={workbench} placement={placement} widget={placeholder} />\n ) : null;\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 <ModeChromeView workbench={workbench} region={region} viewId={chrome || undefined} />\n {sharedViews ? (\n <WorkbenchPanelViewSlot slotRef={panelSlot.ref} hidden={Boolean(chrome)} placeholder={placeholderView} />\n ) : (\n <RegionScrollArea hidden={Boolean(chrome)} horizontal={scrollsHorizontally}>\n {placeholderView}\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 </RegionScrollArea>\n )}\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, type UseMenuReturn, 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 menu: UseMenuReturn;\n label: string;\n groups: readonly WorkbenchTabMenuGroup[];\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}\nexport const RegionTabMenu = (props: RegionTabMenuProps) => {\n const { menu, label, 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.RootProvider\n value={menu}\n lazyMount\n unmountOnExit\n onExitComplete={() => {\n const action = pending.current;\n pending.current = null;\n if (action) {\n const triggerId = menu.api.getTriggerProps().id;\n if (triggerId) document.getElementById(triggerId)?.focus({ preventScroll: true });\n }\n void action?.onClick?.();\n }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-labelledby={labelId}>\n <VisuallyHidden id={labelId}>{label} context menu</VisuallyHidden>\n <ResourceMenuItems\n actions={actions}\n onSelect={(action) => {\n pending.current = action;\n }}\n />\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.RootProvider>\n );\n};\n","import type { CollisionDetection, UniqueIdentifier } from \"@dnd-kit/core\";\n\ninterface Point {\n x: number;\n y: number;\n}\ninterface PanelDropTarget {\n id: UniqueIdentifier;\n rect: { left: number; right: number; top: number; bottom: number };\n}\n\nexport const resolvePanelDropTarget = (pointer: Point, origin: Point, targets: PanelDropTarget[]) => {\n let closest: UniqueIdentifier | undefined;\n // The grab point competes with destinations, leaving a generous way to keep the current placement.\n let distance = Math.hypot(pointer.x - origin.x, pointer.y - origin.y);\n for (const { id, rect } of targets) {\n const candidate = Math.hypot(\n Math.max(rect.left - pointer.x, 0, pointer.x - rect.right),\n Math.max(rect.top - pointer.y, 0, pointer.y - rect.bottom),\n );\n if (candidate < distance) {\n closest = id;\n distance = candidate;\n }\n }\n return closest;\n};\n\n/** The pointer can approach an insertion anywhere in its layout, including over a live view. */\nexport const panelDropCollision = (args: Parameters<CollisionDetection>[0], origin: Point | undefined) => {\n const pointer = args.pointerCoordinates;\n if (!pointer || !origin) return [];\n const targets = args.droppableContainers\n .filter((container) => container.data.current?.panelRegion === args.active.data.current?.panelRegion)\n .flatMap((container) => {\n const frame = container.node.current\n ?.closest('[data-workbench-panel-drop-frame=\"activity\"]')\n ?.getBoundingClientRect();\n const rect = args.droppableRects.get(container.id);\n if (\n !rect ||\n !frame ||\n pointer.x < frame.left ||\n pointer.x > frame.right ||\n pointer.y < frame.top ||\n pointer.y > frame.bottom\n )\n return [];\n return [{ id: container.id, rect }];\n });\n const id = resolvePanelDropTarget(pointer, origin, targets);\n return id === undefined ? [] : [{ id }];\n};\n","import { type CollisionDetection, pointerWithin } from \"@dnd-kit/core\";\n\n/** Tabs keep their hit area while an insertion preview shifts their header. */\nexport const tabHeaderDropCollisions = (args: Parameters<CollisionDetection>[0]) => {\n const pointer = args.pointerCoordinates;\n if (!pointer) return [];\n const host = document\n .elementsFromPoint(pointer.x, pointer.y)\n .map((element) => element.closest(\"[data-workbench-panel]\"))\n .find((panel) => panel && !panel.closest(\"[inert]\"));\n const owner = host?.getAttribute(\"data-workbench-panel\");\n const tabs = args.droppableContainers.filter((container) => {\n const node = container.node.current;\n return (\n container.data.current?.widgetId &&\n (!owner || container.data.current.region === owner) &&\n container.id !== args.active.id &&\n node?.getClientRects().length &&\n !node.closest(\"[inert]\")\n );\n });\n const rects = new Map(args.droppableRects);\n for (const tab of tabs) {\n if (tab.data.current?.region === \"side\") continue;\n const node = tab.node.current!;\n const sideSlot = node\n .closest('[data-workbench-panel-drop-frame=\"side\"]')\n ?.querySelector('[data-workbench-edge-drop=\"side\"][data-workbench-edge-position=\"left\"]')\n ?.getBoundingClientRect();\n const bottomSlot = node\n .closest('[data-workbench-panel-drop-frame=\"secondary\"]')\n ?.querySelector('[data-workbench-edge-drop=\"secondary\"][data-workbench-edge-position=\"top\"]')\n ?.getBoundingClientRect();\n const rect = rects.get(tab.id);\n if (!rect) continue;\n const x = sideSlot?.width ?? 0;\n const y = bottomSlot?.height ?? 0;\n rects.set(tab.id, {\n ...rect,\n left: rect.left - x,\n top: rect.top - y,\n width: rect.width + x,\n height: rect.height + y,\n });\n }\n return pointerWithin({ ...args, droppableContainers: tabs, droppableRects: rects });\n};\n\nexport const tabEdgeDropCollisions = (args: Parameters<CollisionDetection>[0]) => {\n const pointer = args.pointerCoordinates;\n if (!pointer) return [];\n return args.droppableContainers\n .filter((container) => container.data.current?.panelPosition)\n .flatMap((container) => {\n const { region, panelPosition: edge } = container.data.current!;\n const node = container.node.current;\n const frame = node?.closest(`[data-workbench-panel-drop-frame=\"${region}\"]`);\n if (!node || !frame) return [];\n const rect = frame.getBoundingClientRect();\n // Undo only the temporary Side slot's horizontal shift. An open Side\n // stays excluded, and Bottom still starts below navigation.\n const sideSlot =\n region === \"secondary\"\n ? node\n .closest('[data-workbench-panel-drop-frame=\"side\"]')\n ?.querySelector('[data-workbench-edge-drop=\"side\"]')\n ?.getBoundingClientRect()\n : undefined;\n const horizontal = {\n left: Math.min(rect.left, sideSlot?.left ?? rect.left),\n right: Math.max(rect.right, sideSlot?.right ?? rect.right),\n };\n if (\n pointer.x < horizontal.left ||\n pointer.x > horizontal.right ||\n pointer.y < rect.top ||\n pointer.y > rect.bottom\n )\n return [];\n const distances = {\n left: pointer.x - horizontal.left,\n right: horizontal.right - pointer.x,\n top: pointer.y - rect.top,\n bottom: rect.bottom - pointer.y,\n };\n const vertical = edge === \"left\" || edge === \"right\";\n const hit = node.getBoundingClientRect();\n const distance = distances[edge as keyof typeof distances];\n if (distance > (vertical ? hit.width : hit.height)) return [];\n return [{ id: container.id, data: { droppableContainer: container, value: distance } }];\n })\n .sort((a, b) => a.data.value - b.data.value)\n .slice(0, 1);\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, useRef, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchPanelRegion, WorkbenchTabPosition } from \"../../core\";\nimport { findPlacementByWidgetId } from \"../../core/registries/layout/layout-operations\";\nimport {\n resolvePanelPosition,\n type WorkbenchPanelPosition,\n type WorkbenchPositionedRegion,\n} from \"../../core/registries/layout/panel-positions\";\nimport { planTrayDrop } from \"../../core/registries/layout/tray-tabs\";\nimport { batchWorkbenchChanges } from \"../../core/shared/store/workbench-batch\";\nimport { panelDropCollision } from \"./panel-drop-collision\";\nimport { tabEdgeDropCollisions, tabHeaderDropCollisions } from \"./tab-edge-drop-collision\";\n\ninterface TabDrop {\n region: WorkbenchPanelRegion;\n position: WorkbenchTabPosition;\n widgetId?: string;\n edge?: \"before\" | \"after\";\n panelPosition?: WorkbenchPanelPosition;\n}\nconst TabDragContext = createContext<{\n activeId?: string;\n drop?: TabDrop;\n destinations?: WorkbenchPanelRegion[];\n activePanel?: WorkbenchPositionedRegion;\n panelDrop?: WorkbenchPanelPosition;\n}>({});\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 [activePanel, setActivePanel] = useState<WorkbenchPositionedRegion>();\n const [panelDrop, setPanelDrop] = useState<WorkbenchPanelPosition>();\n const [drop, setDrop] = useState<TabDrop>();\n const origin = useRef<{ x: number; y: number } | undefined>(undefined);\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, { activationConstraint: { distance: 5 } }),\n );\n const finish = () => {\n origin.current = undefined;\n setActiveId(undefined);\n setActivePanel(undefined);\n setPanelDrop(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 panelPosition: data.panelPosition as WorkbenchPanelPosition | undefined,\n } satisfies TabDrop;\n };\n const placement = activeId ? findPlacementByWidgetId(workbench.layout.getLayout(), activeId)?.placement : undefined;\n return (\n <TabDragContext\n value={{\n activeId,\n drop,\n activePanel,\n panelDrop,\n destinations: activeId ? workbench.getPanelDestinations(activeId) : [],\n }}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={(args) => {\n if (args.active.data.current?.panelRegion) return panelDropCollision(args, origin.current);\n const destinations = workbench.getPanelDestinations(String(args.active.id));\n const tabs = tabHeaderDropCollisions(args).filter((collision) =>\n destinations.includes(collision.data?.droppableContainer.data.current?.region),\n );\n if (tabs.length) return tabs;\n const edges = tabEdgeDropCollisions(args);\n if (edges.length) return edges;\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) => {\n if (event.active.data.current?.panelRegion) {\n const input = event.activatorEvent as MouseEvent | TouchEvent;\n const point = \"touches\" in input ? input.touches[0] : input;\n origin.current = { x: point.clientX, y: point.clientY };\n setActivePanel(event.active.data.current.panelRegion);\n } else setActiveId(String(event.active.id));\n }}\n onDragOver={(event) => {\n setDrop(resolveDrop(event));\n setPanelDrop(event.over?.data.current?.position);\n }}\n onDragMove={(event) => {\n setDrop(resolveDrop(event));\n setPanelDrop(event.over?.data.current?.position);\n }}\n onDragCancel={finish}\n onDragEnd={(event) => {\n if (event.active.data.current?.panelRegion) {\n const data = event.over?.data.current;\n finish();\n if (data?.position && data.panelRegion === event.active.data.current.panelRegion)\n workbench.shell.repositionPanel(data.panelRegion, data.position);\n return;\n }\n const target = resolveDrop(event);\n finish();\n if (target)\n batchWorkbenchChanges(() => {\n if (\n target.panelPosition &&\n target.panelPosition !== resolvePanelPosition(workbench.shell.getArrangement(), target.region)\n )\n workbench.shell.repositionPanel(target.region, target.panelPosition);\n workbench.movePanel(String(event.active.id), target.region, target.position);\n if (target.panelPosition && target.region === \"side\")\n workbench.shell.setSidePanelPresentation(\"attached\");\n });\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; visible?: boolean }) => {\n const { region, visible = true } = props;\n const { activeId, drop, destinations } = useTabDrag();\n const id = useId();\n const dragging = Boolean(activeId && visible);\n const allowed = dragging && Boolean(destinations?.includes(region));\n const { setNodeRef } = useDroppable({ id, data: { region }, disabled: !allowed });\n const highlighted = allowed && drop?.region === region && !drop.panelPosition;\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={dragging ? \"auto\" : \"none\"}\n visibility={dragging ? \"visible\" : \"hidden\"}\n layerStyle={highlighted ? \"tabDropZone\" : undefined}\n />\n );\n};\n","import { useMenu } from \"@chakra-ui/react\";\nimport { type MouseEvent, useRef } from \"react\";\n\nexport const useTabContextMenu = (triggerId: string, disabled = false) => {\n const anchor = useRef({ x: 0, y: 0, width: 0, height: 0 });\n const trigger = useRef<HTMLElement | null>(null);\n const menu = useMenu({\n ids: { trigger: triggerId },\n positioning: { placement: \"bottom-start\", getAnchorRect: () => anchor.current, offset: { mainAxis: 0 } },\n onEscapeKeyDown: () => {\n const element = trigger.current;\n if (element) requestAnimationFrame(() => element.focus({ preventScroll: true }));\n },\n });\n const onContextMenu = (event: MouseEvent<HTMLElement>) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n trigger.current = event.currentTarget;\n anchor.current = event.currentTarget.getBoundingClientRect();\n // Context-menu dismissal preserves outside focus; Escape restores it explicitly.\n menu.api.getContextTriggerProps().onContextMenu?.(event);\n };\n const show = (element: HTMLElement) => {\n if (disabled) return;\n const rect = element.getBoundingClientRect();\n element.dispatchEvent(\n new window.MouseEvent(\"contextmenu\", {\n bubbles: true,\n cancelable: true,\n clientX: rect.left,\n clientY: rect.bottom,\n }),\n );\n };\n return { menu, show, onContextMenu };\n};\n","import { useDraggable, useDroppable } from \"@dnd-kit/core\";\nimport { type KeyboardEvent, type MouseEvent, type PointerEvent, useEffect, useRef } from \"react\";\nimport type { WorkbenchCore, WorkbenchPanelRegion, WorkbenchWidgetPlacement } from \"../../core\";\nimport { usePlacementTab } from \"../shared/use-placement-tab\";\nimport { useTabDrag } from \"./tab-drag-context\";\nimport { useTabContextMenu } from \"./use-tab-context-menu\";\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, triggerId: string) => {\n const { workbench, placement, disabled = false, sortable = false, region, nextWidgetId, previousWidgetId } = props;\n const snapshot = usePlacementTab(placement, workbench);\n const { menu, show, onContextMenu } = useTabContextMenu(triggerId, disabled);\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 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 menu,\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 { useRef } from \"react\";\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 triggerId = tabs.getTriggerProps({ value: placement.widgetId }).id!;\n const behavior = useRegionTab(props, triggerId);\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 labelRef = useRef<HTMLSpanElement>(null);\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} overflowRef={labelRef} closeDelay={150} positioning={{ placement: \"bottom\" }}>\n <Tabs.Trigger\n id={triggerId}\n value={placement.widgetId}\n aria-labelledby={labelId}\n disabled={disabled}\n aria-haspopup=\"menu\"\n aria-expanded={behavior.menu.api.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 asChild>\n <span ref={labelRef} id={labelId} data-tab-label>\n {label}\n </span>\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 menu={behavior.menu}\n label={label}\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 type { CollectionPage, CollectionPageRequest } from \"@pstdio/sdk/extensions\";\n\nexport class RendererPageRevisionChanged extends Error {\n constructor() {\n super(\"The query revision changed. Reload the first page.\");\n }\n}\n\nexport const acceptRendererPage = <TRow>(\n result: { rows: TRow[]; page?: CollectionPage },\n request: CollectionPageRequest,\n) => {\n const page = result.page;\n if (!page || typeof page.revision !== \"string\" || !Array.isArray(page.groups))\n throw new Error(\"A paged provider must return page metadata\");\n if (request.revision !== undefined && request.revision !== page.revision) throw new RendererPageRevisionChanged();\n if (result.rows.length > request.limit) throw new Error(\"The provider exceeded the requested page limit\");\n if (\n !Number.isSafeInteger(page.total) ||\n !Number.isSafeInteger(page.filteredTotal) ||\n page.filteredTotal < 0 ||\n result.rows.length > page.filteredTotal ||\n page.total < page.filteredTotal ||\n page.groups.some((group) => !Number.isSafeInteger(group.count) || group.count < 0 || group.count > page.total)\n )\n throw new Error(\"The provider returned inconsistent page counts\");\n if (page.cursor !== null && (typeof page.cursor !== \"string\" || !page.cursor))\n throw new Error(\"The provider must return a cursor or null\");\n return { rows: result.rows, page };\n};\n","import type {\n DataTableRendererColumn,\n DataTableRendererSettings,\n KanbanRendererSettings,\n} from \"@pstdio/sdk/extensions\";\nimport type { AttributeDescriptor } from \"@pstdio/ui/kanban-renderer\";\n\nexport const tablePageFields = (\n columns: Pick<DataTableRendererColumn, \"id\" | \"hidden\">[],\n settings: Pick<DataTableRendererSettings, \"hiddenColumns\" | \"grouping\">,\n) =>\n columns\n .filter(\n (column) => column.id === settings.grouping || (!column.hidden && !settings.hiddenColumns.includes(column.id)),\n )\n .map((column) => column.id);\n\nexport const kanbanPageFields = (\n attributes: Pick<AttributeDescriptor, \"id\" | \"display\">[],\n settings: Pick<KanbanRendererSettings, \"displayProperties\" | \"columnGrouping\" | \"rowGrouping\" | \"viewMode\">,\n) => {\n const fields = new Set([\"title\", ...settings.displayProperties, settings.columnGrouping, settings.rowGrouping]);\n fields.delete(\"none\");\n if (settings.viewMode === \"list\") fields.add(\"id\");\n for (const attribute of attributes) {\n if (fields.has(attribute.id) && attribute.display?.kind === \"badge-list\")\n fields.add(attribute.display.itemsAttributeId);\n }\n return [...fields];\n};\n","/** Object insertion order is not part of a saved view's query; array order is. */\nexport const rendererQueryKey = (value: unknown) =>\n JSON.stringify(value, (_key, entry) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) return entry;\n return Object.fromEntries(\n Object.keys(entry)\n .sort()\n .map((key) => [key, entry[key]]),\n );\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 status=\"error\" title=\"Could not load this view\" endElement={<Button onClick={retry}>Retry</Button>}>\n {error}\n </AlertMessage>\n );\n};\n","import type { PageParams } from \"@pstdio/sdk/extensions\";\nimport { resolvePageParams } from \"pstdio-api-contracts\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { useShallow } from \"zustand/react/shallow\";\nimport type { WorkbenchCore, WorkbenchPanelInstance } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport const usePageParams = (workbench: WorkbenchCore, placement?: WorkbenchPanelInstance) => {\n const owner = placement?.placementIdentity;\n const pageId = owner?.kind === \"page\" ? owner.pageId : undefined;\n const projectId = useWorkbenchStore(workbench.pages.store, (state) => state.projectId);\n const params = useWorkbenchStore(\n workbench.pages.store,\n useShallow((state) =>\n pageId && pageId === state.activePageId\n ? resolvePageParams(state.pages[pageId]?.params, state.location?.params)\n : undefined,\n ),\n );\n const retained = useRef<{ pageId: string; projectId?: string; params: PageParams } | undefined>(undefined);\n useLayoutEffect(() => {\n if (pageId && params) retained.current = { pageId, projectId, params };\n }, [pageId, projectId, params]);\n if (!pageId) return undefined;\n // Retained views keep their last query scope while another page is active.\n // Clearing it would reload the hidden view during navigation.\n const previous = retained.current;\n return params ?? (previous?.pageId === pageId && previous.projectId === projectId ? previous.params : undefined);\n};\n","import type { CollectionPage } from \"@pstdio/sdk/extensions\";\n\n/** A cursor belongs to its accepted page, even while navigation is loading another position. */\nexport const rendererPagePosition = (\n identity: string,\n offset: number,\n limit: number,\n accepted: { offset: number; page: Pick<CollectionPage, \"revision\" | \"cursor\"> },\n) => ({\n identity,\n offset,\n revision: accepted.page.revision,\n cursor: offset === accepted.offset + limit ? (accepted.page.cursor ?? undefined) : undefined,\n});\n","import type { CollectionPage, CollectionPageRequest } from \"@pstdio/sdk/extensions\";\nimport { useRef, useState } from \"react\";\nimport { rendererPagePosition } from \"./renderer-page-position\";\n\ninterface PagePosition {\n identity: string;\n offset: number;\n cursor?: string;\n revision?: string;\n}\n\n/** Navigation owns only the requested position. Loaded rows still belong to the renderer read. */\nexport const useRendererPages = <TRow>(input: {\n identity: string;\n scope: string;\n fields: string[];\n append?: boolean;\n initialPageSize?: number;\n}) => {\n const [epoch, setEpoch] = useState(0);\n const [search, setSearch] = useState(\"\");\n const [collapse, setCollapse] = useState({ scope: input.scope, groups: [] as string[] });\n const collapsedGroups = collapse.scope === input.scope ? collapse.groups : [];\n const setCollapsedGroups = (groups: string[]) => setCollapse({ scope: input.scope, groups });\n const [limit, setLimit] = useState(Math.max(1, Math.min(100, input.initialPageSize ?? 100)));\n const identity = JSON.stringify([input.identity, input.fields, search, collapsedGroups, limit, epoch]);\n const [position, setPosition] = useState<PagePosition>({ identity, offset: 0 });\n const current = position.identity === identity ? position : { identity, offset: 0 };\n if (position.identity !== identity) setPosition(current);\n const previous = useRef<{ identity: string; offset: number; rows: TRow[]; page: CollectionPage } | undefined>(\n undefined,\n );\n const request: CollectionPageRequest = {\n limit,\n offset: current.offset,\n cursor: current.cursor,\n revision: current.revision,\n fields: input.fields,\n search,\n collapsedGroups,\n };\n const reset = () => {\n previous.current = undefined;\n setEpoch((value) => value + 1);\n return true;\n };\n const go = (index: number) => {\n const saved = previous.current;\n if (saved?.identity !== identity || (input.append && saved.offset !== current.offset)) return;\n setPosition(rendererPagePosition(identity, index * limit, limit, saved));\n };\n return {\n key: identity,\n request,\n search,\n setSearch,\n collapsedGroups,\n setCollapsedGroups,\n pageIndex: Math.floor(current.offset / limit),\n setLimit,\n reset,\n go,\n controls: (\n result: CollectionPage | undefined,\n loading: boolean,\n enabled: boolean,\n displayed?: CollectionPageRequest,\n ) =>\n enabled\n ? {\n request,\n result,\n displayed,\n loading,\n onSearchChange: setSearch,\n onPageSizeChange: (size: number) => setLimit(Math.max(1, Math.min(100, size))),\n onCollapsedGroupsChange: setCollapsedGroups,\n onPageChange: (index: number) => {\n if (result) go(index);\n },\n onLoadMore: () => {\n if (result?.cursor) go(Math.floor(current.offset / limit) + 1);\n },\n }\n : undefined,\n accept: (result: { rows: TRow[]; page: CollectionPage }, signal: AbortSignal) => {\n const saved = previous.current;\n const append =\n input.append &&\n current.offset > 0 &&\n saved?.identity === identity &&\n saved.page.revision === result.page.revision;\n const rows = append ? [...saved.rows.slice(0, current.offset), ...result.rows] : result.rows;\n if (!signal.aborted) previous.current = { identity, offset: current.offset, rows, page: result.page };\n return { ...result, rows, position: request };\n },\n };\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 { startTransition, 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 request?: symbol;\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 onValue: (value: T, request: symbol) => {\n // Loaded contents may render many rows. Navigation structure and input keep priority.\n startTransition(() => setState({ queryKey, request, 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 request: previous.queryKey === queryKey ? previous.request : undefined,\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 setState((previous) => ({ ...previous, loading: true, error: undefined }));\n const current = callbacks.current;\n const revision = owner.revision();\n const request = Symbol();\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 onProgress: (value: T) => {\n // A replacement keeps even a partial snapshot. Progress within its original read still grows.\n startTransition(() =>\n setState((previous) => {\n if (previous.queryKey === queryKey && previous.value !== undefined && previous.request !== request)\n return previous;\n return { queryKey, request, value, loading: true };\n }),\n );\n },\n onValue: (value: T) => {\n if (owner.accept(value, revision)) handlers.onValue(value, request);\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 } from \"../../menus/command-menu-items\";\nimport { withLeadingSeparator } from \"../../menus/menu-entries\";\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 if (actions.length === 0) return [];\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 if (actions.length === 0) return [];\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 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 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\";\nimport { rendererQueryKey } from \"../renderer-query-key\";\nexport const resolveDataTableRendererQueryKey = (\n contribution: Pick<DataTableRendererContribution, \"id\" | \"contextKeys\">,\n resource: WorkbenchPanelInstance[\"resource\"],\n modeId: string | undefined,\n contextValues: Record<string, unknown>,\n) =>\n rendererQueryKey([\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};\nconst rendererRow = Symbol(\"renderer row\");\ntype RowByData = Pick<WeakMap<RowData, DataTableRendererRow>, \"get\">;\nconst rowByData: RowByData = {\n get: (data) => (data as RowData & { [rendererRow]?: DataTableRendererRow })[rendererRow],\n};\n\nexport const buildDataTableRendererData = (rows: DataTableRendererRow[], columns: DataTableRendererColumn[]) => {\n const data = rows.map((row) => {\n const values = Object.fromEntries(columns.map((column) => [column.id, row.values[column.id]]));\n // The adapter row owns its identity even when selection outlives the displayed page.\n // Metadata stays out of columns, spread copies, and serialized values.\n Object.defineProperty(values, rendererRow, { value: row });\n return values;\n });\n return { data, rowByData };\n};\nexport const resolveDataTableRendererSelectionActions = (\n actions: DataTableRendererSelectionAction[],\n rowByData: RowByData,\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: RowByData,\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}:${rendererQueryKey(scope)}` : key;\n};\n","import { useState } from \"react\";\nimport type { DataTableRendererColumn, DataTableRendererQueryResult } from \"../../../core\";\nimport { rendererQueryKey } from \"../renderer-query-key\";\nimport { resolveDataTableRendererColumns } from \"./data-table-view-model\";\n\ntype PageColumn = Pick<DataTableRendererColumn, \"id\" | \"hidden\">;\n\n/** Accepted column metadata owns field selection; loaded rows stay in the renderer read. */\nexport const useTablePageColumns = (scope: string, declared: DataTableRendererColumn[] | undefined) => {\n const [accepted, setAccepted] = useState<{ scope: string; columns?: PageColumn[] }>({ scope });\n if (accepted.scope !== scope) setAccepted({ scope });\n const columns = accepted.scope === scope ? (accepted.columns ?? declared ?? []) : (declared ?? []);\n return {\n columns,\n pending: (loaded: string[] | undefined, requested: string[], error: string | undefined) =>\n !error && loaded !== undefined && rendererQueryKey(loaded) !== rendererQueryKey(requested),\n accept: (result: DataTableRendererQueryResult | undefined, enabled: boolean) => {\n if (!enabled || !result) return;\n const selection = resolveDataTableRendererColumns(result, declared).map(({ id, hidden }) => ({ id, hidden }));\n if (rendererQueryKey(selection) !== rendererQueryKey(columns.map(({ id, hidden }) => ({ id, hidden }))))\n setAccepted({ scope, columns: selection });\n },\n };\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 { useShallow } from \"zustand/react/shallow\";\nimport type {\n DataTableRendererQueryResult,\n RegisteredDataTableRendererContribution,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers, rendererReadKey } from \"../../../core\";\nimport { acceptRendererPage } from \"../../../core/registries/renderers/renderer-page\";\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 { tablePageFields } from \"../renderer-page-fields\";\nimport { rendererQueryKey } from \"../renderer-query-key\";\nimport { RendererReadNotice } from \"../renderer-read-notice\";\nimport { usePageParams } from \"../use-page-params\";\nimport { useRendererPages } from \"../use-renderer-pages\";\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\";\nimport { useTablePageColumns } from \"./use-table-page-columns\";\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\nconst requirePageStatistics = (\n result: DataTableRendererQueryResult,\n columns: RegisteredDataTableRendererContribution[\"columns\"],\n hiddenColumns: string[],\n) => {\n for (const column of result.columns ?? columns ?? []) {\n if (column.hidden || hiddenColumns.includes(column.id)) continue;\n if (column.stat && result.page?.statistics?.[column.id]?.type !== column.stat.type)\n throw new Error(`The page provider did not return the requested ${column.id} statistic`);\n }\n};\n\nconst emptyTablePlaceholder = (\n result: DataTableRendererQueryResult,\n search: string,\n grouping: string,\n contribution: RegisteredDataTableRendererContribution,\n) => {\n if (result.rows.length || result.page?.groups?.some((group) => group.field === grouping && group.count > 0) || search)\n return undefined;\n return (\n <EmptyState h=\"full\" title={contribution.emptyTitle ?? \"No rows\"} description={contribution.emptyDescription} />\n );\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(\n workbench.context.store,\n useShallow((state) => Object.fromEntries((contribution.contextKeys ?? []).map((key) => [key, state.values[key]]))),\n );\n const modeId = useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\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 paged = contribution.queryMode === \"paged\";\n const queryKey = resolveDataTableRendererQueryKey(contribution, placement.resource, modeId, contextValues);\n const pageColumns = useTablePageColumns(queryKey, contribution.columns);\n const pages = useRendererPages<DataTableRendererQueryResult[\"rows\"][number]>({\n identity: rendererQueryKey([storageKey, filter, sorts, settings, pageParams]),\n scope: JSON.stringify([storageKey, settings.grouping]),\n fields: tablePageFields(pageColumns.columns, settings),\n initialPageSize: contribution.initialPageSize,\n });\n const read = useRendererRead({\n workbench,\n ownerKey: rendererReadKey(placement),\n queryKey,\n // Paged providers also receive display fields and search before selecting a bounded page.\n refreshKey: rendererQueryKey([filter, sorts, pageParams, ...(paged ? [settings, pages.request, pages.key] : [])]),\n load: async (signal) => {\n const result = await contribution.executeQuery(\n {\n pageParams,\n resource: placement.resource,\n modeId,\n filter,\n sorts,\n settings,\n ...(paged && { page: pages.request }),\n },\n signal,\n );\n if (paged && settings.showStats) requirePageStatistics(result, contribution.columns, settings.hiddenColumns);\n return paged\n ? { ...result, ...pages.accept(acceptRendererPage(result, pages.request), signal) }\n : { ...result, position: undefined };\n },\n subscribe: (refresh) => {\n const invalidate = () => {\n if (!paged || !pages.reset()) refresh();\n };\n const subscription = contribution.subscribe?.(invalidate);\n const events = getWorkbenchRenderers(workbench).onDidRefreshDataTableRenderer((event) => {\n if (event.dataTableRendererId === contribution.id) invalidate();\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 notice = read.error ? (\n <RendererReadNotice\n error={read.error}\n retry={() => {\n if (!paged || !pages.reset()) void read.retry();\n }}\n />\n ) : null;\n const columns = resolveDataTableRendererColumns(result, contribution.columns);\n pageColumns.accept(read.value, paged);\n const loading =\n (read.loading && !read.value) ||\n pageColumns.pending(read.value?.position?.fields, pages.request.fields, read.error);\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 && notice) return notice;\n if (provider && !viewsSource)\n return (\n <DataTableViewFrame>\n <DataTableSkeleton />\n </DataTableViewFrame>\n );\n\n return (\n <DataTableViewFrame>\n {notice}\n <DataTable\n page={pages.controls(result.page, read.loading, paged, read.value?.position)}\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={emptyTablePlaceholder(result, pages.search, settings.grouping, contribution)}\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, Spinner } from \"@chakra-ui/react\";\nimport type { PageLocation, PageRef } from \"@pstdio/sdk/extensions\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { Tooltip, type TreeListActionMenuItem, type TreeListNode } 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 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}>\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.loading && section.nodes.length === 0)\n return {\n id: `${section.id}:loading`,\n label: \"Loading…\",\n icon: <Spinner size=\"xs\" />,\n disabled: true,\n rowVariant: \"empty-state\",\n };\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 // Building a row menu resolves commands, context, and shortcuts. Large trees adapt every row but mount only\n // the visible ones, so the getters below build a menu when the rendered row first reads it. Copying the\n // node with a spread reads both getters immediately.\n let menuItems: TreeListActionMenuItem[] | undefined;\n const resolveMenuItems = () => {\n if (menuItems) return menuItems;\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 menuItems = [\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 return menuItems;\n };\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 get menuItems() {\n if (!node.menuPath) return undefined;\n const items = resolveMenuItems();\n return items.length > 0 ? items : undefined;\n },\n get contextMenuItems() {\n const items = resolveMenuItems();\n return items.length > 0 ? items : undefined;\n },\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 { Box } from \"@chakra-ui/react\";\nimport { ListRow } from \"@pstdio/ui\";\nimport { useSyncExternalStore } from \"react\";\nimport type { WorkbenchCore } from \"../../../core\";\nimport { resolveNavigationLevels } from \"../../../core/controllers/page-location/navigation-level\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\n\nexport const TreeModeReturn = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const pages = useWorkbenchStore(workbench.pages.store, (state) => state);\n const mode = useWorkbenchStore(workbench.modes.store, (state) =>\n state.activeModeId ? state.modes[state.activeModeId] : undefined,\n );\n const hasLevel = useSyncExternalStore(\n (listener) => {\n const subscription = workbench.navigationTrees.onDidChange(listener);\n return () => subscription.dispose();\n },\n () =>\n resolveNavigationLevels({\n location: pages.location,\n pages: Object.values(pages.pages),\n navigationTrees: workbench.navigationTrees,\n }).length > 0,\n );\n if (!hasLevel || !mode) return null;\n\n return (\n <Box pb=\"1px\">\n <ListRow\n id=\"workbench.navigation.root\"\n role=\"button\"\n label={mode.label ?? mode.id}\n icon={<WorkbenchIcon name=\"ArrowLeft\" size={14} />}\n variant=\"compact\"\n onActivate={() => workbench.pageLocations.navigateToRootLevel()}\n />\n </Box>\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 { ReactNode, RefObject } from \"react\";\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 leadingContent?: ReactNode;\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 leadingContent,\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 || loading) && sections.length === 0) return <TreeList sections={[]} leadingContent={leadingContent} />;\n if (moduleLoading)\n return (\n <TreeList\n sections={[]}\n leadingContent={\n <>\n {leadingContent}\n <TreeViewSkeleton />\n </>\n }\n />\n );\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 leadingContent={leadingContent}\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 // Late children and inline editors must not switch renderers and remount open menus.\n virtualize\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 // Selection changes do not change tree data. Keep the snapshot so the renderer\n // can reuse its adapted rows instead of rebuilding every saved session.\n if (changes.size === 0 && Object.keys(childrenByNodeId).length === 0) return sections;\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 {\n TreeNode,\n TreeQueryContext,\n TreeRendererContribution,\n TreeRendererRegistry,\n TreeViewSection,\n} 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\nexport const treeStructure = (renderer: TreeRendererContribution | undefined, ctx: TreeQueryContext) => ({\n header: renderer?.getHeaderStructure?.(ctx) ?? [],\n body: renderer?.getStructure?.(ctx) ?? [],\n footer: renderer?.getFooterStructure?.(ctx) ?? [],\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 = treeStructure(trees.getTreeRenderer(treeId), ctx);\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 signal.throwIfAborted();\n available = { ...available, [slot]: sections };\n onProgress?.(available);\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 // Even a no-op update can interrupt a pending transition before its rows commit.\n if (\n !pending.moves.some(\n (move) => pending.scope !== scope || (move.savedAfter !== undefined && move.savedAfter !== body),\n )\n )\n return;\n setPending((current) => {\n if (current.moves.length === 0) return 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, pending]);\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 { resolveNavigationLevels } from \"../../../core/controllers/page-location/navigation-level\";\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 treeStructure,\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 getPageOwner = () =>\n JSON.stringify(\n resolveNavigationLevels({\n location,\n pages: Object.values(workbench.pages.store.getState().pages),\n navigationTrees: workbench.navigationTrees,\n }).map(({ owner, location }) => [owner, resourceKey(location.resource)]),\n );\n const pageOwner = useSyncExternalStore(\n (listener) => {\n const subscription = workbench.navigationTrees.onDidChange(listener);\n return () => subscription.dispose();\n },\n getPageOwner,\n getPageOwner,\n );\n // A new owner or bound resource starts with its structure. Selecting a child page\n // refreshes the same owner's data without removing its mounted rows.\n const scope = trees.getTreeRenderer(treeViewId)?.getReadKey?.({ resource, viewId, filter, pageParams });\n const refreshKey = JSON.stringify(scope ?? [resourceKey(resource), resourceKey(location?.resource), mode, pageOwner]);\n const queryKey = JSON.stringify([\n treeViewId,\n viewId,\n project,\n resourceKey(resource),\n filter,\n pageParams,\n mode,\n pageOwner,\n ]);\n const childrenKey = JSON.stringify([queryKey, refreshKey]);\n const renderer = trees.getTreeRenderer(treeViewId);\n const structure = treeStructure(renderer, { resource, viewId, filter, pageParams });\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 {\n header: data?.header ?? [],\n body: data?.body ?? [],\n footer: data?.footer ?? [],\n children,\n };\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.loading && !read.value?.body.length ? structure.body : (read.value?.body ?? []);\n const savedChildren = {\n ...(expandedChildren.queryKey === childrenKey ? expandedChildren.byNodeId : {}),\n ...read.value?.children,\n };\n const movement = useTreeMovement({\n scope: childrenKey,\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 ?? structure.header,\n footer: read.value?.footer ?? structure.footer,\n loadChildren,\n error: read.error ?? null,\n loading: read.loading,\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 { TreeModeReturn } from \"./tree-mode-return\";\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 {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 leadingContent={isSidenav ? <TreeModeReturn workbench={workbench} /> : undefined}\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 {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 = () => {\n try {\n return ctx.preferences.setOwnedValue(\"workbench.related-resources\", \"panels\", value, destination);\n } catch (error) {\n console.warn(\"Could not save resource page choices\", error);\n }\n };\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 const removing = ctx.resources.onWillRemove((resource) => {\n updating++;\n const forget = (choices: PageChoices) =>\n Object.fromEntries(\n Object.entries(choices).map(([region, choice]) => [\n region,\n resourceKey(choice.resource) === resourceKey(resource) ? { visible: choice.visible } : choice,\n ]),\n ) as PageChoices;\n const choices = read();\n if (Object.values(choices).some((choice) => resourceKey(choice.resource) === resourceKey(resource)))\n void write(forget(choices));\n pendingChoices = forget(pendingChoices);\n return [];\n });\n const removed = ctx.resources.onDidRemove(() => {\n previous = snapshot();\n updating--;\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 removing.dispose();\n removed.dispose();\n },\n };\n};\n","import { type RelatedResourceOpening, type ResourceRef, resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { NavigationTarget } from \"../../core\";\nimport type { ResourceLinksService } from \"./resource-links-types\";\n\nconst targetAvailable = (target: NavigationTarget, available: (resource: ResourceRef) => boolean) => {\n const pending = [target];\n while (pending.length) {\n const item = pending.pop()!;\n if (item.kind === \"compound\") pending.push(...item.targets);\n else if ((item.kind === \"page\" || item.kind === \"panel\") && item.resource && !available(item.resource))\n return false;\n }\n return true;\n};\n\ninterface RelatedResolutionInput {\n defaults: RelatedResourceOpening[];\n openings: RelatedResourceOpening[];\n service: ResourceLinksService;\n signal: AbortSignal;\n available(resource: ResourceRef): boolean;\n current(): boolean;\n}\n\nexport const resolveRelatedOpenings = async (input: RelatedResolutionInput) => {\n const { defaults, openings, service, signal, available, current } = input;\n const resolved = await service.resolve(\n openings.filter((entry) => available(entry.resource)).map((entry) => entry.resource),\n signal,\n );\n if (!current()) return [];\n const targets = new Map(resolved.map((entry) => [resourceKey(entry.resource), entry.target]));\n // The owner may have deleted a remembered choice while this page or app was closed.\n // Fall back for this visit without erasing a choice on a transient resolver failure.\n const fallbacks = defaults.filter((entry, index) => {\n const choice = openings[index]!;\n return (\n resourceKey(choice.resource) !== resourceKey(entry.resource) &&\n (!available(choice.resource) || !targets.get(resourceKey(choice.resource)))\n );\n });\n if (fallbacks.length) {\n const fallbackTargets = await service.resolve(\n fallbacks.map((entry) => entry.resource),\n signal,\n );\n if (!current()) return [];\n for (const entry of fallbackTargets) targets.set(resourceKey(entry.resource), entry.target);\n }\n return openings.flatMap((choice, index) => {\n const entry = fallbacks.includes(defaults[index]!) ? defaults[index]! : choice;\n const target = targets.get(resourceKey(entry.resource));\n return target && available(entry.resource) && targetAvailable(target, available) ? [{ entry, target }] : [];\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 if (ctx.shell.getPanelPolicy(region).canClose) 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\") {\n if (!ctx.shell.getRegionState(region).open) 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.getPanelPolicy(region).canClose)\n 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 const policy = ctx.shell.getPanelPolicy(region);\n if (!policy.provided || (!existing && !policy.acceptsTabs)) return false;\n show = show && (policy.open || policy.canOpen);\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 { resolveRelatedOpenings } from \"./related-resource-resolution\";\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\ninterface RelatedLookup {\n resource: ResourceRef;\n owner: RegisteredResourceKind;\n controller: AbortController;\n removed: Set<string>;\n promise: Promise<void>;\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<string, RelatedLookup>();\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 (request: RelatedLookup, present: boolean) => {\n const { resource, owner, controller, removed } = request;\n const pageKey = relatedResourcePageKey(ctx);\n const available = (target: ResourceRef) => !removed.has(resourceKey(target));\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 defaults = entries.filter(\n (entry) =>\n entry.autoOpen === true &&\n entry.resource.projectId === resource.projectId &&\n resourceKey(entry.resource) !== resourceKey(resource) &&\n available(entry.resource),\n );\n const openings = preferences.openings(resource, defaults);\n if (!present) return;\n if (!openings.length) return;\n const resolved = await resolveRelatedOpenings({\n defaults,\n openings,\n service: options.createService(resource),\n signal: controller.signal,\n available,\n current,\n });\n if (!current()) return;\n openingPreviews = true;\n try {\n preferences.run(() => {\n for (const { entry, target } of resolved) {\n if (current() && available(entry.resource))\n 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 completion = Promise.withResolvers<void>();\n const request: RelatedLookup = {\n resource,\n owner,\n controller: new AbortController(),\n removed: new Set(),\n promise: completion.promise,\n };\n pending.set(key, request);\n void load(request, present)\n .finally(() => {\n if (pending.get(key) === request) pending.delete(key);\n })\n .then(completion.resolve, completion.reject);\n return request.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 removal = ctx.resources.onWillRemove((resource) => {\n const key = resourceKey(resource);\n for (const request of pending.values()) {\n if (request.controller.signal.aborted) continue;\n // The owner may not have returned the target identity yet. Track removals\n // only for the pending request; later authoritative opens start fresh.\n request.removed.add(key);\n if (key === resourceKey(request.resource)) request.controller.abort();\n }\n return [];\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 removal.dispose();\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 { 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 { getSettingsPanels } from \"../../core/registries/settings/settings-registry\";\nimport { WorkbenchPreferencesForm } from \"../renderers/settings/preferences-form\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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: {\n input: WorkbenchPanelRenderInput;\n panelId: string;\n viewId: string;\n embedded?: boolean;\n}) => {\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 const content = renderer.render({\n ...input,\n instance: {\n ...input.instance,\n instanceId: JSON.stringify([input.instance.instanceId, panelId, viewId]),\n panelId,\n viewId,\n },\n }) as ReactNode;\n return props.embedded ? content : <ScrollableSettingsContent>{content}</ScrollableSettingsContent>;\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 settingsState = useWorkbenchStore(settings.store, (state) => state);\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 ? settingsState.panels[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\") {\n const children = getSettingsPanels(settingsState).filter(\n (child) => child.parentPanelId === panel.id && input.workbench.context.matches(child.when),\n );\n if (children.length === 0) return <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\n return (\n <ScrollableSettingsContent>\n <Stack gap=\"md\">\n <SettingsViewContent embedded input={input} panelId={panel.id} viewId={panel.viewId} />\n {children.map((child) =>\n child.kind === \"view\" ? (\n <SettingsViewContent embedded key={child.id} input={input} panelId={child.id} viewId={child.viewId} />\n ) : null,\n )}\n </Stack>\n </ScrollableSettingsContent>\n );\n }\n if (panel.kind === \"collection\") {\n if (!itemId)\n return (\n <Centered>\n <EmptyState title={panel.title} />\n </Centered>\n );\n return (\n <CollectionItemView\n key={`${resourceKey(resource) ?? itemId}:${settingsState.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 { 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, 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(\n (panel) =>\n !panel.parentPanelId && isSettingsScopeVisible(panel.scope, hasProjectScope) && matchesWhen(panel.when),\n );\n const bySection = new Map<string, RegisteredSettingsPanel[]>();\n for (const panel of panels) {\n const sectionId = panel.section && sectionsById.has(panel.section) ? panel.section : FALLBACK_SECTION_ID;\n const list = bySection.get(sectionId) ?? [];\n list.push(panel);\n bySection.set(sectionId, list);\n }\n 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 !entry.parentPanelId && 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\nexport const usePanelPolicy = (workbench: WorkbenchCore, region: WorkbenchRegion) => {\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n return useWorkbenchStore(\n workbench.layout.store,\n useShallow(() => workbench.shell.getPanelPolicy(region)),\n );\n};\n","import { mergeRefs } from \"@chakra-ui/react\";\nimport { useDraggable } from \"@dnd-kit/core\";\nimport { Header } from \"@pstdio/ui\";\nimport type { ComponentProps, MouseEvent, TouchEvent } from \"react\";\nimport { useShallow } from \"zustand/react/shallow\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { resolvePanelPosition, type WorkbenchPositionedRegion } from \"../../core/registries/layout/panel-positions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nconst usePanelMovePositions = (workbench: WorkbenchCore, region: WorkbenchPositionedRegion) => {\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n return useWorkbenchStore(\n workbench.layout.store,\n useShallow(() => {\n const current = resolvePanelPosition(workbench.shell.getArrangement(), region);\n return workbench.shell.getPanelPositions(region).filter((position) => position !== current);\n }),\n );\n};\n\nexport const usePanelPositionActions = (workbench: WorkbenchCore, region: WorkbenchPositionedRegion) => {\n return usePanelMovePositions(workbench, region).map((position) => ({\n key: `position-${position}`,\n label: `Move ${region === \"activity\" ? \"action bar\" : \"panel\"} to ${position}`,\n icon: (\n <WorkbenchIcon\n name={{ left: \"PanelLeft\", right: \"PanelRight\", top: \"PanelTop\", bottom: \"PanelBottom\" }[position]}\n size={14}\n />\n ),\n onClick: () => workbench.shell.repositionPanel(region, position),\n }));\n};\n\nconst interactive =\n 'button,a,input,textarea,select,iframe,[role=\"tab\"],[role=\"treeitem\"],[role=\"button\"],[role=\"menuitem\"],[contenteditable=\"true\"],[data-workbench-tab],[data-tree-list-focus-id]';\n\n/** Only unused header space starts a whole-panel drag. Tab and control gestures keep their owners. */\nexport const usePanelDragSurface = (workbench: WorkbenchCore, region: WorkbenchPositionedRegion) => {\n const canMove = usePanelMovePositions(workbench, region).length > 0;\n const floatingSide = useWorkbenchStore(\n workbench.layout.store,\n () => region === \"side\" && workbench.sidePanel.getMode() === \"floating\",\n );\n const fullscreenSide = useWorkbenchStore(workbench.fullscreen.store, (state) => region === \"side\" && state.active);\n const disabled = !canMove || floatingSide || fullscreenSide;\n const drag = useDraggable({\n id: `panel:${region}`,\n data: { panelRegion: region },\n disabled,\n });\n const empty = (event: MouseEvent | TouchEvent) => !(event.target as Element).closest(interactive);\n return {\n ref: drag.setNodeRef,\n tabIndex: 0,\n \"aria-label\": `Move ${region} panel`,\n \"data-workbench-panel-drag\": region,\n \"data-panel-draggable\": !disabled || undefined,\n \"data-panel-dragging\": drag.isDragging || undefined,\n layerStyle: \"panelDragSurface\",\n onMouseDown: (event: MouseEvent<HTMLElement>) => {\n if (empty(event)) drag.listeners?.onMouseDown?.(event);\n },\n onTouchStart: (event: TouchEvent<HTMLElement>) => {\n if (empty(event)) drag.listeners?.onTouchStart?.(event);\n },\n };\n};\n\ninterface PanelDragHeaderProps extends ComponentProps<typeof Header> {\n workbench: WorkbenchCore;\n region: WorkbenchPositionedRegion;\n}\nexport const PanelDragHeader = (props: PanelDragHeaderProps) => {\n const { workbench, region, children, ref, ...rest } = props;\n const drag = usePanelDragSurface(workbench, region);\n return (\n <Header {...drag} {...rest} ref={mergeRefs(drag.ref, ref)}>\n {children}\n </Header>\n );\n};\n","import { Box, useRecipe } from \"@chakra-ui/react\";\nimport { type Header, ResourceContextMenu } from \"@pstdio/ui\";\nimport type { ComponentProps } from \"react\";\nimport type { WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { usePanelPolicy } from \"../shared/use-panel-policy\";\nimport { PanelDragHeader, usePanelPositionActions } from \"./panel-position-controls\";\n\ninterface PanelHeaderProps extends ComponentProps<typeof Header> {\n workbench: WorkbenchCore;\n region: WorkbenchPanelRegion;\n hasContent?: boolean;\n hasTabs?: boolean;\n}\n\n/** Keep an accessible context surface even when the tab header is hidden. */\nexport const PanelHeader = (props: PanelHeaderProps) => {\n const { workbench, region, hasContent = true, hasTabs = false, children, ...rest } = props;\n const edgeStyles = useRecipe({ key: \"panelHeaderEdge\" })();\n const policy = usePanelPolicy(workbench, region);\n const positionActions = usePanelPositionActions(workbench, region);\n const show = policy.legacyHeaders\n ? (policy.showHeader || hasTabs) && hasContent\n : policy.showHeader && (region !== \"main\" || hasContent || policy.headerExplicit);\n const label = { secondary: \"Bottom\", side: \"Side\", main: \"Main\" }[region];\n const headerProps = {\n ...rest,\n \"data-workbench-panel-header\": region,\n \"aria-label\": `${label} panel header`,\n tabIndex: 0,\n };\n const header = (\n <PanelDragHeader workbench={workbench} region={region} {...headerProps}>\n {children}\n </PanelDragHeader>\n );\n return (\n <ResourceContextMenu\n actions={[\n ...positionActions,\n {\n key: \"header\",\n label: show ? \"Hide header\" : \"Show header\",\n icon: <WorkbenchIcon name=\"PanelTop\" size={14} />,\n onClick: () => workbench.shell.setHeaderVisible(region, !show),\n },\n ]}\n >\n {show ? header : <Box css={edgeStyles} aria-label={`${label} header edge`} aria-haspopup=\"menu\" tabIndex={0} />}\n </ResourceContextMenu>\n );\n};\n","import { Box, Flex, IconButton, Text } from \"@chakra-ui/react\";\nimport { AttachedPanel, BubbleButton, BubblePanel, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { MessageCircle, Minimize2, Minus, SquareArrowOutUpRight } from \"lucide-react\";\nimport { type ReactNode, useLayoutEffect, useRef } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { PanelHeader } from \"../region/panel-header\";\nimport { useWorkbenchRegionTabsVisible } from \"../region/region-tabs\";\nimport { WorkbenchTabDropTarget } from \"../region/tab-drag-context\";\nimport { usePanelPolicy } from \"../shared/use-panel-policy\";\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 canFloat = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n const hasTabs = useWorkbenchRegionTabsVisible(workbench, \"side\");\n const mode = useWorkbenchStore(workbench.layout.store, () => workbench.sidePanel.getMode());\n const fullscreen = useWorkbenchStore(workbench.fullscreen.store, (state) => state.active);\n const attached = mode === \"attached\" && !fullscreen;\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 attached ? (\n <PanelHeader\n workbench={workbench}\n region=\"side\"\n hasTabs={hasTabs}\n hasContent={Boolean(header || canFloat)}\n variant=\"main\"\n flexShrink={0}\n gap=\"sm\"\n >\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.shell.setSidePanelPresentation(\"floating\")}\n >\n <Minimize2 size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </PanelHeader>\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\" visible={attached} />\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 fullscreen = useWorkbenchStore(workbench.fullscreen.store, (state) => state);\n const canFloat = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n const policy = usePanelPolicy(workbench, \"side\");\n const visible = available && canFloat && (fullscreen.active ? fullscreen.sideOpen : mode === \"floating\");\n const bubbleRef = useRef<HTMLButtonElement>(null);\n const previousFullscreen = useRef(fullscreen);\n useLayoutEffect(() => {\n const previous = previousFullscreen.current;\n previousFullscreen.current = fullscreen;\n if (!previous.active || !fullscreen.active || !previous.sideOpen || fullscreen.sideOpen) return;\n const frame = requestAnimationFrame(() => bubbleRef.current?.focus({ preventScroll: true }));\n return () => cancelAnimationFrame(frame);\n }, [fullscreen]);\n\n return (\n <>\n {available && canFloat && policy.canOpen && (fullscreen.active || mode !== \"attached\") ? (\n <BubbleButton\n ref={bubbleRef}\n isOpen={visible}\n aria-label=\"Open Side Panel\"\n containerProps={{ bottom: launcherBottom(bottomOffset) }}\n tooltip=\"Open Side Panel\"\n onClick={\n fullscreen.active\n ? () => workbench.commands.executeCommand(\"workbench.showFullscreenSide\")\n : (onOpen ?? (() => workbench.shell.setSidePanelPresentation(\"floating\")))\n }\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 header={\n visible ? (\n <PanelHeader workbench={workbench} region=\"side\" hasTabs variant=\"main\" gap=\"sm\">\n <WorkbenchSidePanelHeader header={header} />\n {!fullscreen.active ? (\n <Tooltip content=\"Reattach Side Panel\">\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label=\"Reattach Side Panel\"\n onClick={() => workbench.shell.setSidePanelPresentation(\"attached\")}\n >\n <SquareArrowOutUpRight size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n {policy.canClose ? (\n <Tooltip content=\"Close Side Panel\">\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label=\"Close Side Panel\"\n onClick={() =>\n fullscreen.active ? workbench.fullscreen.hideSide() : workbench.shell.setRegionOpen(\"side\", false)\n }\n >\n <Minus size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </PanelHeader>\n ) : null\n }\n onPopOut={() => workbench.sidePanel.setMode(\"attached\")}\n menu={visible ? <WorkbenchSidePanelHeader header={header} /> : undefined}\n overlay={<WorkbenchTabDropTarget region=\"side\" visible={visible} />}\n >\n <WorkbenchFocusRegion workbench={workbench} region=\"side\" display=\"flex\" flex=\"1\" minH=\"0\">\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </WorkbenchFocusRegion>\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 { IconButton } from \"@chakra-ui/react\";\nimport { PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport const FullscreenControls = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const active = useWorkbenchStore(workbench.fullscreen.store, (state) => state.active);\n const exitRef = useRef<HTMLButtonElement>(null);\n const previous = useRef(active);\n useLayoutEffect(() => {\n if (previous.current && !active) exitRef.current?.focus({ preventScroll: true });\n previous.current = active;\n }, [active]);\n const label = active ? \"Exit Main fullscreen\" : \"Enter Main fullscreen\";\n return (\n <Tooltip content={label}>\n <IconButton\n ref={exitRef}\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={label}\n aria-pressed={active}\n onClick={() =>\n workbench.commands.executeCommand(active ? \"workbench.exitMainFullscreen\" : \"workbench.enterMainFullscreen\")\n }\n >\n <WorkbenchIcon name={active ? \"Minimize\" : \"Maximize\"} size={14} />\n </IconButton>\n </Tooltip>\n );\n};\n\n/** Let menus and dialogs consume Escape before leaving the presentation. */\nexport const FullscreenKeyboard = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || event.defaultPrevented || !workbench.fullscreen.store.getState().active) return;\n if (workbench.commandPalette.store.getState().open) return;\n const target = event.target instanceof Element ? event.target : undefined;\n if (target?.closest('[role=\"menu\"], [role=\"listbox\"], [role=\"dialog\"]:not([data-workbench-panel=\"side\"])'))\n return;\n event.preventDefault();\n const { sideOpen } = workbench.fullscreen.store.getState();\n if (sideOpen && workbench.shell.getPanelPolicy(\"side\").canClose) workbench.fullscreen.hideSide();\n else workbench.fullscreen.exit();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [workbench]);\n return null;\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 {\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 { HStack, IconButton } from \"@chakra-ui/react\";\nimport { PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport type { WorkbenchCore, WorkbenchShellOpenRegion } from \"../../core\";\nimport { resolveArrangement } from \"../../core/registries/layout/panel-positions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { usePanelPolicy } from \"../shared/use-panel-policy\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\n\nexport const useWorkbenchPanelToggles = (workbench: WorkbenchCore) => {\n const saved = useWorkbenchStore(workbench.layout.store, (state) => state.layout.arrangement);\n const arrangement = resolveArrangement(saved);\n const sidenav = usePanelPolicy(workbench, \"sidenav\");\n const secondary = usePanelPolicy(workbench, \"secondary\");\n const side = usePanelPolicy(workbench, \"side\");\n const hasNavigation = useWorkbenchRegionContent(workbench, \"sidenav\");\n const composition = useWorkbenchCompositionPanels(workbench);\n const hasSide = useWorkbenchRegionContent(workbench, \"side\") || composition.side.addable.length > 0;\n const hasBottom = useWorkbenchRegionContent(workbench, \"secondary\") || composition.secondary.addable.length > 0;\n const panels = [\n { region: \"sidenav\", label: \"Sidenav\", icon: \"ListTree\", policy: sidenav, provided: hasNavigation },\n {\n region: \"secondary\",\n label: \"Bottom Panel\",\n icon: arrangement.secondary === \"top\" ? \"PanelTop\" : \"PanelBottom\",\n policy: secondary,\n provided: hasBottom,\n },\n {\n region: \"side\",\n label: \"Side Panel\",\n icon: arrangement.side === \"left\" ? \"PanelLeft\" : \"PanelRight\",\n policy: side,\n provided: hasSide,\n },\n ] as const;\n return panels\n .filter(({ policy, provided }) => provided && policy.provided && (policy.open ? policy.canClose : policy.canOpen))\n .map((panel) => ({ ...panel, position: arrangement[panel.region] }));\n};\n\n/** Shared host controls. Desktop hosts mount these beside their project tabs. */\nexport const WorkbenchPanelToggles = (props: {\n workbench: WorkbenchCore;\n regions?: readonly WorkbenchShellOpenRegion[];\n}) => {\n const { workbench, regions } = props;\n const panels = useWorkbenchPanelToggles(workbench).filter(({ region }) => !regions || regions.includes(region));\n if (!panels.length) return null;\n return (\n <HStack\n role=\"group\"\n aria-label={regions?.length === 1 && regions[0] === \"sidenav\" ? \"Sidenav controls\" : \"Panel controls\"}\n gap=\"2xs\"\n flexShrink={0}\n >\n {panels.map(({ region, label, icon, policy, position }) => {\n const action = `${policy.open ? \"Hide\" : \"Show\"} ${label}`;\n return (\n <Tooltip key={region} content={action}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={action}\n aria-pressed={policy.canToggle ? policy.open : undefined}\n onClick={() => workbench.shell.setRegionOpen(region as WorkbenchShellOpenRegion, !policy.open)}\n >\n <WorkbenchIcon\n name={icon}\n size={14}\n layerStyle={region === \"sidenav\" && position === \"right\" ? \"mirroredIcon\" : undefined}\n />\n </IconButton>\n </Tooltip>\n );\n })}\n </HStack>\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, 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 { FullscreenControls } from \"../workbench/fullscreen-controls\";\nimport { WorkbenchPanelToggles } from \"../workbench/workbench-panel-toggles\";\nimport { WorkbenchHeaderActions } from \"./header-actions\";\nimport { WorkbenchBreadcrumbActions } from \"./resource-actions\";\n\ninterface WorkbenchNavChromeProps {\n workbench: WorkbenchCore;\n hasNav: boolean;\n panelControls?: boolean;\n}\n\nconst WorkbenchNavigationControls = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const history = useWorkbenchStore(workbench.pageLocations.historyStore, (state) => state);\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\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\nexport const WorkbenchNavChrome = (props: WorkbenchNavChromeProps) => {\n const { workbench, hasNav, panelControls = true } = props;\n const chrome = useModeChrome(workbench, \"nav\");\n const fullscreen = useWorkbenchStore(workbench.fullscreen.store, (state) => state.active);\n\n return (\n <Header\n data-workbench-region=\"nav\"\n display=\"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 !== undefined || fullscreen ? \"none\" : \"contents\"}>\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderLeadingMenuPath} />\n <WorkbenchNavigationControls workbench={workbench} />\n </Box>\n <Box\n display={hasNav && !fullscreen ? \"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 !== undefined || fullscreen ? \"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 {fullscreen || chrome === false ? <Box flex=\"1\" minW=\"0\" /> : null}\n {panelControls && !fullscreen ? <WorkbenchPanelToggles workbench={workbench} /> : null}\n {panelControls || fullscreen ? <FullscreenControls workbench={workbench} /> : null}\n </Header>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { useDroppable } from \"@dnd-kit/core\";\nimport type { ReactNode } from \"react\";\nimport { useShallow } from \"zustand/react/shallow\";\nimport type { WorkbenchCore } from \"../../core\";\nimport {\n resolveArrangement,\n resolvePanelPosition,\n type WorkbenchPanelPosition,\n type WorkbenchPositionedRegion,\n} from \"../../core/registries/layout/panel-positions\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useTabDrag } from \"./tab-drag-context\";\n\ninterface PanelInsertionTargetProps {\n edge: WorkbenchPanelPosition;\n region: WorkbenchPositionedRegion;\n panel: boolean;\n}\n\nconst tabEdgeAnchors = {\n left: { top: \"0\", bottom: \"0\", left: \"0\" },\n right: { top: \"0\", bottom: \"0\", right: \"0\" },\n top: { top: \"0\", left: \"0\", right: \"0\" },\n bottom: { bottom: \"0\", left: \"0\", right: \"0\" },\n} as const;\n\nconst PanelInsertionTarget = (props: PanelInsertionTargetProps) => {\n const { edge, region, panel } = props;\n const { drop, panelDrop } = useTabDrag();\n const { setNodeRef } = useDroppable({\n id: `edge:${panel ? \"panel\" : \"tab\"}:${region}:${edge}`,\n data: panel ? { panelRegion: region, position: edge } : { region, panelPosition: edge },\n });\n const highlighted = panel ? panelDrop === edge : drop?.region === region && drop.panelPosition === edge;\n const vertical = edge === \"left\" || edge === \"right\";\n const targetId = panel ? `panel-${edge}` : region;\n return (\n <>\n {!panel ? (\n <Box\n ref={setNodeRef}\n data-workbench-edge-hit={region}\n data-workbench-edge-position={edge}\n position=\"absolute\"\n {...tabEdgeAnchors[edge]}\n w={vertical ? \"12\" : \"full\"}\n h={vertical ? \"full\" : \"12\"}\n zIndex=\"overlay\"\n />\n ) : null}\n {panel || highlighted ? (\n <Box\n ref={panel ? setNodeRef : undefined}\n data-workbench-edge-drop={targetId}\n data-workbench-edge-position={edge}\n data-drop-active={highlighted || undefined}\n position=\"relative\"\n flexShrink={0}\n w={vertical ? \"12\" : \"full\"}\n h={vertical ? \"full\" : \"12\"}\n layerStyle=\"panelDropZone\"\n />\n ) : null}\n </>\n );\n};\n\ninterface WorkbenchPanelDropFrameProps {\n workbench: WorkbenchCore;\n region: Exclude<WorkbenchPositionedRegion, \"main\">;\n children: ReactNode;\n}\n\n/** Visible targets reserve space at the layout boundary that owns the panel. */\nexport const WorkbenchPanelDropFrame = (props: WorkbenchPanelDropFrameProps) => {\n const { workbench, region, children } = props;\n const { activeId, destinations, activePanel } = useTabDrag();\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n const moving = region === \"secondary\" && activePanel === \"main\" ? \"main\" : region;\n // Derive from the subscribed layout so a completed move updates the next drag.\n const edges = useWorkbenchStore(\n workbench.layout.store,\n useShallow((state) => {\n const arrangement = resolveArrangement(state.layout.arrangement);\n const current = resolvePanelPosition(arrangement, moving);\n if (activePanel === moving) return workbench.shell.getPanelPositions(moving).filter((edge) => edge !== current);\n if (!activePanel && activeId && (region === \"side\" || region === \"secondary\") && destinations?.includes(region)) {\n const open = workbench.shell.getPanelPolicy(region).open;\n const widgets = state.layout.regions[region].widgets;\n const lastTab = widgets.length === 1 && widgets[0]?.widgetId === activeId;\n const positions = workbench.shell.getPanelPositions(region);\n if (!open) return positions.length ? positions : [arrangement[region]];\n if (lastTab) return positions.filter((edge) => edge !== current);\n }\n return [];\n }),\n );\n\n const targets = Object.fromEntries(\n edges.map((edge) => [\n edge,\n <PanelInsertionTarget key={edge} edge={edge} region={moving} panel={Boolean(activePanel)} />,\n ]),\n );\n return (\n <Flex\n data-workbench-panel-drop-frame={region}\n position=\"relative\"\n direction=\"column\"\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n >\n {targets.top}\n <Flex flex=\"1\" minH=\"0\" minW=\"0\">\n {targets.left}\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" position=\"relative\">\n {children}\n </Flex>\n {targets.right}\n </Flex>\n {targets.bottom}\n {region === \"activity\" && activePanel ? (\n // Keep pointer movement and release in the host, including over Navigation and other iframe views.\n <Box\n data-workbench-panel-drag-shield=\"\"\n aria-hidden\n layerStyle=\"panelDragging\"\n position=\"absolute\"\n inset=\"0\"\n zIndex=\"overlay\"\n />\n ) : null}\n </Flex>\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 type { ResourceRef } from \"../resources/resource-registry\";\n\nexport const FILE_SECTION_NAVIGATION_METADATA_KEY = \"pstdio.fileSectionNavigation\";\n\nexport interface FileSectionAnchor {\n id: string;\n heading: string;\n occurrence?: number;\n}\n\nexport interface FileSectionNavigation {\n treeId: string;\n targetNodeId: string;\n anchors: FileSectionAnchor[];\n}\n\nconst isAnchor = (value: unknown): value is FileSectionAnchor => {\n if (!value || typeof value !== \"object\") return false;\n const anchor = value as Record<string, unknown>;\n const occurrenceIsValid =\n anchor.occurrence === undefined ||\n (typeof anchor.occurrence === \"number\" && Number.isInteger(anchor.occurrence) && anchor.occurrence >= 0);\n return typeof anchor.id === \"string\" && typeof anchor.heading === \"string\" && occurrenceIsValid;\n};\n\nexport const getFileSectionNavigation = (resource: ResourceRef | undefined): FileSectionNavigation | undefined => {\n const value = resource?.metadata?.[FILE_SECTION_NAVIGATION_METADATA_KEY];\n if (!value || typeof value !== \"object\") return undefined;\n const navigation = value as Record<string, unknown>;\n if (typeof navigation.treeId !== \"string\" || typeof navigation.targetNodeId !== \"string\") return undefined;\n if (!Array.isArray(navigation.anchors) || !navigation.anchors.every(isAnchor)) return undefined;\n\n return {\n treeId: navigation.treeId,\n targetNodeId: navigation.targetNodeId,\n anchors: navigation.anchors,\n };\n};\n\nexport const resolveFileSectionTargetId = (navigation: FileSectionNavigation, selectedNodeId: string | undefined) => {\n if (selectedNodeId && navigation.anchors.some((anchor) => anchor.id === selectedNodeId)) return selectedNodeId;\n return navigation.targetNodeId;\n};\n\nexport interface PreviousFileSectionNavigation {\n resourceKey?: string;\n treeId: string;\n anchorIds: string[];\n}\n\nexport const shouldClearFileSectionSelection = (input: {\n previous: PreviousFileSectionNavigation | null;\n current: FileSectionNavigation | undefined;\n currentResourceKey?: string;\n selectedNodeId?: string;\n}) => {\n const { previous, current, currentResourceKey, selectedNodeId } = input;\n if (!previous || !selectedNodeId || !previous.anchorIds.includes(selectedNodeId)) return false;\n if (current?.targetNodeId === selectedNodeId) return false;\n\n return !current || previous.treeId !== current.treeId || previous.resourceKey !== currentResourceKey;\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\n\nexport const FileRendererLoading = () => (\n <Center h=\"full\" minH=\"0\" bg=\"bg\">\n <Spinner size=\"sm\" />\n </Center>\n);\n","// Generic file-type dispatch for the file renderer. Markdown is the default so\n// `.md` / `.txt` / extension-less files open in the prose editor; recognised code\n// extensions open in Monaco; images render read-only. This is deliberately\n// domain-agnostic — it knows about file types, not about tickets.\n\nexport type FileKind = \"markdown\" | \"code\" | \"image\";\n\nconst IMAGE_EXTENSIONS = new Set([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\", \"avif\", \"bmp\", \"ico\"]);\nconst PROSE_EXTENSIONS = new Set([\"md\", \"markdown\", \"txt\"]);\n\n// Extension → Monaco language id. Markdown/plain text intentionally absent so\n// they fall through to the prose editor.\nconst CODE_LANGUAGE_BY_EXTENSION: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n json: \"json\",\n jsonc: \"json\",\n py: \"python\",\n rb: \"ruby\",\n rs: \"rust\",\n go: \"go\",\n java: \"java\",\n kt: \"kotlin\",\n c: \"c\",\n h: \"c\",\n cpp: \"cpp\",\n cc: \"cpp\",\n hpp: \"cpp\",\n cs: \"csharp\",\n php: \"php\",\n swift: \"swift\",\n sh: \"shell\",\n bash: \"shell\",\n zsh: \"shell\",\n sql: \"sql\",\n css: \"css\",\n scss: \"scss\",\n less: \"less\",\n html: \"html\",\n xml: \"xml\",\n yml: \"yaml\",\n yaml: \"yaml\",\n toml: \"ini\",\n ini: \"ini\",\n dockerfile: \"dockerfile\",\n graphql: \"graphql\",\n gql: \"graphql\",\n md: \"markdown\",\n markdown: \"markdown\",\n txt: \"plaintext\",\n};\n\nconst extensionOf = (fileName: string | undefined) => {\n if (!fileName) return \"\";\n const dot = fileName.lastIndexOf(\".\");\n if (dot < 0 || dot === fileName.length - 1) return \"\";\n return fileName.slice(dot + 1).toLowerCase();\n};\n\nconst isImage = (fileName: string | undefined, mimeType: string | undefined) => {\n if (mimeType?.startsWith(\"image/\")) return true;\n return IMAGE_EXTENSIONS.has(extensionOf(fileName));\n};\n\nexport const pickFileKind = (fileName: string | undefined, mimeType: string | undefined): FileKind => {\n if (isImage(fileName, mimeType)) return \"image\";\n const extension = extensionOf(fileName);\n if (!PROSE_EXTENSIONS.has(extension) && extension in CODE_LANGUAGE_BY_EXTENSION) return \"code\";\n return \"markdown\";\n};\n\n// Monaco language for a code file; falls back to plaintext for unknown extensions.\nexport const codeLanguageFor = (fileName: string | undefined) =>\n CODE_LANGUAGE_BY_EXTENSION[extensionOf(fileName)] ?? \"plaintext\";\n","import type { FileRendererContent } from \"../../../core\";\nimport { codeLanguageFor, pickFileKind } from \"./file-kind\";\n\nexport type FileRendererPresentation =\n | { kind: \"empty\"; isEditable: false }\n | { kind: \"image\"; isEditable: false }\n | { kind: \"code\"; isEditable: boolean; language: string }\n | { kind: \"markdown\"; isEditable: boolean };\n\nexport const resolveFileRendererPresentation = (\n content: FileRendererContent,\n contributionCanSave: boolean,\n): FileRendererPresentation => {\n if (content.emptyState) return { kind: \"empty\", isEditable: false };\n\n const automaticKind = pickFileKind(content.fileName, content.mimeType);\n if (automaticKind === \"image\") return { kind: \"image\", isEditable: false };\n\n const isEditable = contributionCanSave && content.editable !== false;\n if (automaticKind === \"code\" || content.textRenderer === \"monaco\") {\n return { kind: \"code\", isEditable, language: codeLanguageFor(content.fileName) };\n }\n return { kind: \"markdown\", isEditable };\n};\n","import { Box, Center, Flex, Image, Text } from \"@chakra-ui/react\";\nimport type { FileSourcePosition } from \"@pstdio/sdk/extensions\";\nimport { AlertMessage, EmptyState } from \"@pstdio/ui\";\nimport { LazyMarkdownEditor } from \"@pstdio/ui/rich-text\";\nimport { lazy, type ReactNode, type RefObject, Suspense, useLayoutEffect } from \"react\";\nimport type { FileRendererContent } from \"../../../core\";\nimport { FileRendererLoading } from \"./file-renderer-loading\";\nimport { resolveFileRendererPresentation } from \"./file-renderer-presentation\";\n\nconst CodeEditor = lazy(() => import(\"@pstdio/ui/diff\").then((module) => ({ default: module.CodeEditor })));\n\ninterface FileRendererContentViewProps {\n content: FileRendererContent | null;\n position?: FileSourcePosition;\n editorKey: string;\n errorNotice: ReactNode;\n contributionCanSave: boolean;\n onActiveSectionChange?: (sectionId: string | null) => void;\n onChange: (value: string) => void;\n rendererRef: RefObject<HTMLDivElement | null>;\n sectionNavigation?: {\n anchors: Array<{ id: string; heading: string; occurrence?: number }>;\n targetId: string;\n };\n title: string;\n}\n\nexport const FileRendererContentView = (props: FileRendererContentViewProps) => {\n const {\n content,\n position,\n editorKey,\n errorNotice,\n contributionCanSave,\n onActiveSectionChange,\n onChange,\n rendererRef,\n sectionNavigation,\n title,\n } = props;\n useLayoutEffect(() => {\n if (!editorKey || sectionNavigation) return;\n const node = rendererRef.current;\n if (!node) return;\n requestAnimationFrame(() => {\n let current = node.parentElement;\n while (current) {\n const overflowY = getComputedStyle(current).overflowY;\n if ([\"auto\", \"scroll\", \"overlay\"].includes(overflowY) && current.scrollHeight > current.clientHeight) {\n current.scrollTop = 0;\n }\n current = current.parentElement;\n }\n });\n }, [editorKey, sectionNavigation, rendererRef]);\n if (!content) return <FileRendererLoading />;\n const presentation = resolveFileRendererPresentation(content, contributionCanSave);\n const positionNotice =\n position && presentation.kind !== \"code\" && presentation.kind !== \"empty\" ? (\n <AlertMessage status=\"info\" title=\"Source location unavailable\">\n This preview does not support source line selection.\n </AlertMessage>\n ) : null;\n\n if (presentation.kind === \"empty\") {\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <EmptyState\n flex=\"1\"\n minH=\"0\"\n title={content.emptyState?.title ?? \"Select a file\"}\n description={content.emptyState?.description}\n />\n </Flex>\n );\n }\n\n if (presentation.kind === \"image\") {\n if (!content.dataUrl) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\">\n <Text color=\"fg.muted\">This image preview is unavailable.</Text>\n </Center>\n );\n }\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Center ref={rendererRef} flex=\"1\" minH=\"0\" p=\"md\" overflow=\"auto\">\n <Image src={content.dataUrl} alt={content.fileName ?? title} maxW=\"100%\" maxH=\"100%\" objectFit=\"contain\" />\n </Center>\n </Flex>\n );\n }\n\n if (presentation.kind === \"code\") {\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Box flex=\"1\" minH=\"0\">\n <Suspense fallback={<FileRendererLoading />}>\n <CodeEditor\n key={editorKey}\n language={presentation.language}\n position={position}\n fileName={content.fileName}\n defaultCode={content.content ?? \"\"}\n isEditable={presentation.isEditable}\n showLineNumbers\n onChange={presentation.isEditable ? onChange : undefined}\n />\n </Suspense>\n </Box>\n </Flex>\n );\n }\n\n return (\n <Flex ref={rendererRef} direction=\"column\" h=\"full\" minH=\"0\" overflow=\"hidden\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Box flex=\"1\" minH=\"0\" overflowY=\"auto\">\n <LazyMarkdownEditor\n key={editorKey}\n defaultState={content.content ?? \"\"}\n isEditable={presentation.isEditable}\n sectionNavigation={sectionNavigation}\n placeholder={presentation.isEditable ? (content.placeholder ?? \"Write…\") : undefined}\n onActiveSectionChange={onActiveSectionChange}\n onChange={presentation.isEditable ? onChange : undefined}\n />\n </Box>\n </Flex>\n );\n};\n","// Owns the editable file renderer's save lifecycle: the last loaded or saved\n// value (the baseline), the debounced draft, the one in-flight save, and\n// refresh events that arrive while a draft or save exists.\n//\n// Invariants (from the renderer edit/refresh lifecycle PRD):\n// - a change equal to the baseline never schedules a save\n// - at most one save runs at a time; the baseline advances when it succeeds\n// - a failed save keeps the draft so a later change or flush retries it\n// - refresh events are deferred while a draft or save exists and coalesce\n// into one reload after the last save settles\n\nimport type {\n FileRendererRefreshEnvelope,\n FileRendererRefreshOrigin,\n FileRendererSaveResult,\n} from \"../../../core/registries/renderers/file-renderer-registry\";\n\nexport interface FileEditControllerState {\n dirty: boolean;\n saving: boolean;\n saveError?: string;\n removed?: true;\n}\n\nexport interface FileEditControllerInput {\n binding: Omit<FileRendererRefreshOrigin, \"operationId\"> & { resourceKey?: string };\n debounceMs: number;\n load: (event?: FileRendererRefreshEnvelope) => void;\n save: (value: string, origin: FileRendererRefreshOrigin) => Promise<FileRendererSaveResult | undefined>;\n createOperationId?: () => string;\n onStateChange?: (state: FileEditControllerState) => void;\n}\n\nexport type FileEditController = ReturnType<typeof createFileEditController>;\n\nexport const createFileEditController = (input: FileEditControllerInput) => {\n let baseline: string | undefined;\n let removed = false;\n let baselineRevision: string | undefined;\n let draft: string | null = null;\n let activeSave: { value: string; origin: FileRendererRefreshOrigin } | null = null;\n let saveError: string | undefined;\n let deferredRevision: string | undefined;\n let genericRefreshDeferred = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let operationSequence = 0;\n const seenRefreshRevisions = new Set<string>();\n const completedOperationIds = new Set<string>();\n\n const describeError = (error: unknown) => (error instanceof Error ? error.message : \"Failed to save file.\");\n const getState = (): FileEditControllerState => ({\n dirty: draft !== null || (activeSave !== null && activeSave.value !== baseline),\n saving: activeSave !== null,\n ...(saveError ? { saveError } : {}),\n ...(removed ? { removed: true as const } : {}),\n });\n const notify = () => input.onStateChange?.(getState());\n\n const clearTimer = () => {\n if (timer === null) return;\n clearTimeout(timer);\n timer = null;\n };\n\n const nextOperationId = () => input.createOperationId?.() ?? `file-save-${Date.now()}-${++operationSequence}`;\n\n const hasPendingLocalState = () => draft !== null || activeSave !== null || timer !== null || Boolean(saveError);\n\n const deferRefresh = (event: FileRendererRefreshEnvelope) => {\n if (event.revision && (!deferredRevision || event.revision.localeCompare(deferredRevision) > 0)) {\n deferredRevision = event.revision;\n }\n if (!event.revision) genericRefreshDeferred = true;\n };\n\n const isSelfRefresh = (event: FileRendererRefreshEnvelope) => {\n const operationId = event.origin?.operationId;\n if (!operationId) return false;\n if (event.origin?.rendererId !== input.binding.rendererId) return false;\n if (event.origin.instanceId !== input.binding.instanceId) return false;\n return activeSave?.origin.operationId === operationId || completedOperationIds.has(operationId);\n };\n\n const takeDeferredRefresh = (savedRevision?: string) => {\n if (draft !== null || activeSave) return;\n const revision = deferredRevision;\n const generic = genericRefreshDeferred;\n deferredRevision = undefined;\n genericRefreshDeferred = false;\n if (revision && (!savedRevision || revision.localeCompare(savedRevision) > 0)) {\n input.load({ resourceKey: input.binding.resourceKey, revision });\n return;\n }\n if (generic) input.load({ resourceKey: input.binding.resourceKey });\n };\n\n const runSave = () => {\n if (removed || draft === null || activeSave || saveError) return;\n const value = draft;\n draft = null;\n const origin = {\n rendererId: input.binding.rendererId,\n instanceId: input.binding.instanceId,\n operationId: nextOperationId(),\n };\n activeSave = { value, origin };\n notify();\n void Promise.resolve(input.save(value, origin))\n .then((result) => {\n if (activeSave?.origin.operationId !== origin.operationId) return;\n activeSave = null;\n completedOperationIds.add(origin.operationId);\n if (completedOperationIds.size > 20) completedOperationIds.delete(completedOperationIds.values().next().value!);\n baseline = value;\n baselineRevision = result?.revision ?? baselineRevision;\n if (draft === baseline) {\n draft = null;\n clearTimer();\n }\n notify();\n if (draft !== null) {\n schedule();\n return;\n }\n takeDeferredRefresh(result?.revision);\n })\n .catch((error) => {\n if (removed) return;\n if (activeSave?.origin.operationId !== origin.operationId) return;\n activeSave = null;\n if (draft === null) draft = value;\n saveError = describeError(error);\n notify();\n });\n };\n\n const schedule = () => {\n clearTimer();\n timer = setTimeout(() => {\n timer = null;\n runSave();\n }, input.debounceMs);\n };\n\n return {\n getDraft() {\n return draft ?? activeSave?.value ?? baseline;\n },\n markRemoved() {\n const retain = hasPendingLocalState();\n removed = true;\n draft = draft ?? activeSave?.value ?? null;\n activeSave = null;\n clearTimer();\n notify();\n return retain;\n },\n getBaseline() {\n return baseline;\n },\n getState,\n setBaseline(value: string | undefined, revision?: string) {\n baseline = value;\n baselineRevision = revision;\n notify();\n },\n // Takes a freshly loaded value as the new baseline and returns the value the\n // editor was showing, so the caller can tell whether the editor must show\n // something else. Returns null while pending local state must keep the\n // editor: the refresh is deferred until the save settles.\n acceptLoaded(value: string | undefined, revision?: string) {\n if (removed) return null;\n if (hasPendingLocalState()) {\n deferRefresh(revision ? { revision } : {});\n return null;\n }\n const shown = baseline;\n baseline = value;\n baselineRevision = revision;\n notify();\n return { shown };\n },\n handleChange(value: string) {\n if (removed) {\n draft = value;\n notify();\n return;\n }\n if (saveError && value === draft) return;\n saveError = undefined;\n if (value === baseline && !activeSave) {\n draft = null;\n clearTimer();\n notify();\n return;\n }\n if (activeSave?.value === value) {\n draft = null;\n clearTimer();\n notify();\n return;\n }\n draft = value;\n schedule();\n notify();\n },\n handleRefreshEvent(event: FileRendererRefreshEnvelope = {}) {\n if (removed) return;\n if (event.resourceKey && event.resourceKey !== input.binding.resourceKey) return;\n if (isSelfRefresh(event)) return;\n if (event.revision && seenRefreshRevisions.has(event.revision)) return;\n if (event.revision) seenRefreshRevisions.add(event.revision);\n if (hasPendingLocalState()) {\n deferRefresh(event);\n return;\n }\n if (event.revision && baselineRevision && event.revision.localeCompare(baselineRevision) <= 0) return;\n input.load(event);\n },\n retry() {\n if (!saveError || draft === null || activeSave) return;\n saveError = undefined;\n notify();\n runSave();\n },\n retryLoad() {\n if (removed) return;\n input.load({ resourceKey: input.binding.resourceKey });\n },\n flush() {\n clearTimer();\n runSave();\n },\n };\n};\n","import { Button, Flex, Text } from \"@chakra-ui/react\";\n\nexport const FileRendererErrorNotice = (props: { message: string; onRetry?: () => void }) => {\n const { message, onRetry } = props;\n return (\n <Flex\n flex=\"none\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"sm\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n bg=\"bg.muted\"\n px=\"sm\"\n py=\"xs\"\n >\n <Text color=\"fg.muted\" textStyle=\"label/S/regular\">\n {message}\n </Text>\n {onRetry ? (\n <Button size=\"2xs\" variant=\"subtle\" onClick={onRetry}>\n Retry\n </Button>\n ) : null}\n </Flex>\n );\n};\n","import type { PageParams } from \"@pstdio/sdk/extensions\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { ResourceRef } from \"../../../core\";\n\ninterface FileRendererLoadKeyInput {\n fileRendererId: string;\n resource: ResourceRef | undefined;\n pageParams?: PageParams;\n}\nconst stableValue = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(stableValue);\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, stableValue(entry)]),\n );\n};\nexport const createFileRendererLoadKey = (input: FileRendererLoadKeyInput) => {\n const { fileRendererId, resource } = input;\n const resourceValue = resource\n ? stableValue({\n id: resource.id,\n type: resource.type,\n metadata: resource.metadata,\n })\n : null;\n const key = `${JSON.stringify(resourceKey(resource))}:${fileRendererId}:${JSON.stringify(resourceValue)}`;\n return input.pageParams ? `${key}:${JSON.stringify(stableValue(input.pageParams))}` : key;\n};\nexport const isCurrentLoadedFile = (\n loaded: {\n loadKey: string;\n } | null,\n loadKey: string,\n) => loaded?.loadKey === loadKey;\n","import { Text } from \"@chakra-ui/react\";\nimport { Header, resolveFileIconElement, useFileIconThemePreference } from \"@pstdio/ui\";\n\nexport const FileRendererPathHeader = (props: { fileName: string; filePath: string }) => {\n const { fileName, filePath } = props;\n const { activeFileIconTheme } = useFileIconThemePreference();\n\n return (\n <Header variant=\"narrow\" flexShrink={0} gap=\"2xs\" bg=\"bg\">\n {resolveFileIconElement(fileName, { theme: activeFileIconTheme })}\n <Text aria-label={`File path ${filePath}`} textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {filePath}\n </Text>\n </Header>\n );\n};\n","import { Box, Button, Center, Flex, Text } from \"@chakra-ui/react\";\nimport { type ResourceRef, resourceKey } from \"@pstdio/sdk/extensions\";\nimport { type ReactNode, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { RegisteredFileRendererContribution, WorkbenchCore, WorkbenchPanelInstance } from \"../../../core\";\nimport { getWorkbenchRenderers, rendererReadKey } from \"../../../core\";\nimport {\n getFileSectionNavigation,\n resolveFileSectionTargetId,\n shouldClearFileSectionSelection,\n} from \"../../../core/registries/renderers/file-section-navigation\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { usePageParams } from \"../use-page-params\";\nimport { FileRendererContentView } from \"./file-renderer-content\";\nimport {\n createFileEditController,\n type FileEditController,\n type FileEditControllerState,\n} from \"./file-renderer-edit-state\";\nimport { FileRendererErrorNotice } from \"./file-renderer-error-notice\";\nimport { createFileRendererLoadKey, isCurrentLoadedFile } from \"./file-renderer-load-key\";\nimport {\n acceptFileRendererLoad,\n type LoadedFile,\n readCachedFileContent,\n saveLoadedFile,\n storeCachedFileContent,\n} from \"./file-renderer-load-state\";\nimport { FileRendererPathHeader } from \"./file-renderer-path-header\";\n\ninterface WorkbenchFileRendererViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredFileRendererContribution;\n // The bound resource (e.g. the open ticket / ticket-file) the load/save\n // commands operate on.\n placement?: WorkbenchPanelInstance;\n}\nconst SAVE_DEBOUNCE_MS = 600;\nconst describeError = (error: unknown) => (error instanceof Error ? error.message : \"Failed to load file.\");\nconst syncActiveFileSection = (input: {\n workbench: WorkbenchCore;\n navigation: ReturnType<typeof getFileSectionNavigation>;\n sectionId: string | null;\n}) => {\n const { workbench, navigation, sectionId } = input;\n if (!navigation || !getWorkbenchRenderers(workbench).getTreeRenderer(navigation.treeId)) return;\n if (sectionId && navigation.anchors.some((anchor) => anchor.id === sectionId)) {\n getWorkbenchRenderers(workbench).setSelectedNode(navigation.treeId, sectionId);\n return;\n }\n const selectedNodeId = getWorkbenchRenderers(workbench).getTreeState(navigation.treeId).selectedNodeId;\n if (selectedNodeId && navigation.anchors.some((anchor) => anchor.id === selectedNodeId)) {\n getWorkbenchRenderers(workbench).setSelectedNode(navigation.treeId, undefined);\n }\n};\nconst getEditorSectionNavigation = (\n workbench: WorkbenchCore,\n navigation: ReturnType<typeof getFileSectionNavigation>,\n) => {\n if (!navigation) return undefined;\n const selectedNodeId = getWorkbenchRenderers(workbench).getTreeRenderer(navigation.treeId)\n ? getWorkbenchRenderers(workbench).getTreeState(navigation.treeId).selectedNodeId\n : undefined;\n return {\n anchors: navigation.anchors,\n targetId: resolveFileSectionTargetId(navigation, selectedNodeId),\n };\n};\nconst useFilePosition = (workbench: WorkbenchCore, resource?: ResourceRef) =>\n useWorkbenchStore(workbench.pages.store, (state) => {\n const location = state.location;\n if (!location?.position || resourceKey(location.resource) !== resourceKey(resource)) return undefined;\n const page = Object.values(state.pages).find(\n (page) => page.ref.id === location.page.id && page.ref.extensionId === location.page.extensionId,\n );\n const key = page?.document?.metadataKey;\n if (!key || location.resource?.metadata?.[key] !== resource?.metadata?.[key]) return undefined;\n return location.position;\n });\n\nconst FileRendererHeader = (props: { file: LoadedFile }) => {\n const { file } = props;\n return file.filePath ? (\n <FileRendererPathHeader fileName={file.fileName ?? file.filePath} filePath={file.filePath} />\n ) : null;\n};\n\nconst fileRendererOwnerKey = (\n placement: WorkbenchPanelInstance | undefined,\n contributionId: string,\n loadKey: string,\n) => (placement ? rendererReadKey(placement) : JSON.stringify([\"file\", contributionId, loadKey]));\n\nexport const WorkbenchFileRendererView = (props: WorkbenchFileRendererViewProps) => {\n const { workbench, contribution } = props;\n const resource = props.placement?.resource;\n const position = useFilePosition(workbench, resource);\n const sectionNavigation = getFileSectionNavigation(resource);\n const editorSectionNavigation = getEditorSectionNavigation(workbench, sectionNavigation);\n const pageParams = usePageParams(workbench, props.placement);\n const loadKey = createFileRendererLoadKey({ fileRendererId: contribution.id, resource, pageParams });\n const [loaded, setLoaded] = useState<LoadedFile | null>(null);\n const [error, setError] = useState<{\n loadKey: string;\n message: string;\n } | null>(null);\n const [editState, setEditState] = useState<FileEditControllerState>({ dirty: false, saving: false });\n const controllerRef = useRef<FileEditController | null>(null);\n const retryReadRef = useRef<(() => void) | undefined>(undefined);\n const rendererRef = useRef<HTMLDivElement>(null);\n const previousSectionNavigationRef = useRef<{\n resourceKey?: string;\n treeId: string;\n anchorIds: string[];\n } | null>(null);\n useEffect(() => {\n const previous = previousSectionNavigationRef.current;\n const selectedNodeId =\n previous && getWorkbenchRenderers(workbench).getTreeRenderer(previous.treeId)\n ? getWorkbenchRenderers(workbench).getTreeState(previous.treeId).selectedNodeId\n : undefined;\n if (\n shouldClearFileSectionSelection({\n previous,\n current: sectionNavigation,\n currentResourceKey: resourceKey(resource),\n selectedNodeId,\n }) &&\n previous\n ) {\n getWorkbenchRenderers(workbench).setSelectedNode(previous.treeId, undefined);\n }\n previousSectionNavigationRef.current = sectionNavigation\n ? {\n resourceKey: resourceKey(resource),\n treeId: sectionNavigation.treeId,\n anchorIds: sectionNavigation.anchors.map((anchor) => anchor.id),\n }\n : null;\n }, [resource, sectionNavigation, workbench]);\n // Contribution refresh re-registers an identical contribution as a new\n // object, and a save that changes the document title produces a new resource\n // object with a fresh label. The load key uses resource values instead of\n // object identity, while callbacks read the latest objects through refs.\n const contributionRef = useRef(contribution);\n const resourceRef = useRef(resource);\n const pageParamsRef = useRef(pageParams);\n const placementRef = useRef(props.placement);\n useLayoutEffect(() => {\n contributionRef.current = contribution;\n resourceRef.current = resource;\n pageParamsRef.current = pageParams;\n placementRef.current = props.placement;\n });\n const contributionId = contribution.id;\n const hasSave = Boolean(contribution.save);\n const ownerKey = fileRendererOwnerKey(props.placement, contributionId, loadKey);\n const instanceId = props.placement?.instanceId ?? contributionId;\n // Re-binding a singleton widget to another resource changes `resource` and reloads.\n useLayoutEffect(() => {\n let cancelled = false;\n let removed = false;\n const boundResource = resourceRef.current;\n const boundContribution = contributionRef.current;\n const read = workbench.views.reads.bind(ownerKey);\n let controller: FileEditController | null = null;\n setError(null);\n // A recently viewed document mounts immediately from the cache; the load\n // below reconciles it (unchanged content keeps the editor mounted).\n const cached = readCachedFileContent(loadKey);\n let baseline = cached;\n setLoaded(cached ? { ...cached, editorRevision: 1, loadKey } : null);\n const load = (reason: \"refresh\" | \"retry\" = \"refresh\") => {\n read.request(\n {\n queryKey: loadKey,\n load: (signal) => contributionRef.current.load(resourceRef.current, signal, pageParamsRef.current),\n onValue: (next) => {\n if (cancelled || removed) return;\n const updateLoaded = acceptFileRendererLoad(next, loadKey, controller);\n if (!updateLoaded) return;\n baseline = next;\n setError(null);\n setLoaded(updateLoaded);\n },\n onError: (loadError) => {\n if (cancelled || removed) return;\n setError({ loadKey, message: describeError(loadError) });\n },\n },\n reason,\n );\n };\n retryReadRef.current = () => load(\"retry\");\n controller = hasSave\n ? createFileEditController({\n binding: {\n rendererId: contributionId,\n instanceId,\n resourceKey: resourceKey(resourceRef.current),\n },\n debounceMs: SAVE_DEBOUNCE_MS,\n load: () => load(),\n onStateChange: (state) => {\n if (!cancelled) setEditState(state);\n },\n save: async (value, origin) => {\n const saved = await saveLoadedFile(boundContribution, boundResource, value, origin, baseline);\n baseline = saved.content;\n if (baseline && !removed) storeCachedFileContent(loadKey, baseline);\n return saved.result;\n },\n })\n : null;\n controllerRef.current = controller;\n if (cached) controllerRef.current?.setBaseline(cached.content, cached.revision);\n setEditState({ dirty: false, saving: false });\n load();\n const removalSubscription = workbench.resources.onWillRemove((resource) => {\n if (resourceKey(resource) !== resourceKey(resourceRef.current)) return [];\n removed = true;\n const retain = controllerRef.current?.markRemoved();\n const identity = placementRef.current?.placementIdentity;\n return retain && identity ? [identity] : [];\n });\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshFileRenderer((event) => {\n if (removed || event.fileRendererId !== contributionId) return;\n const controller = controllerRef.current;\n if (controller) controller.handleRefreshEvent(event);\n else load();\n });\n return () => {\n cancelled = true;\n read.dispose();\n retryReadRef.current = undefined;\n refreshSubscription.dispose();\n removalSubscription.dispose();\n // Flush the last keystrokes on unbind; the load callback above is\n // cancelled, so a deferred refresh cannot resurrect the old binding.\n controller?.flush();\n if (controllerRef.current === controller) controllerRef.current = null;\n };\n }, [contributionId, hasSave, workbench, loadKey, ownerKey, instanceId]);\n // The last keystrokes are also flushed when the tab is hidden or closed.\n useEffect(() => {\n const flush = () => controllerRef.current?.flush();\n const onVisibility = () => {\n if (document.visibilityState === \"hidden\") flush();\n };\n window.addEventListener(\"beforeunload\", flush);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.removeEventListener(\"beforeunload\", flush);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n }, []);\n const handleChange = (value: string) => {\n controllerRef.current?.handleChange(value);\n };\n const currentLoaded = isCurrentLoadedFile(loaded, loadKey) ? loaded : null;\n const loadError = error?.loadKey === loadKey ? error.message : undefined;\n if (loadError && !currentLoaded) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\" flexDirection=\"column\" gap=\"sm\">\n <Text color=\"fg.muted\">{loadError}</Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => retryReadRef.current?.()}>\n Retry\n </Button>\n </Center>\n );\n }\n // The key must carry the document identity, not just the contribution: two\n // documents from the same renderer both start at revision 1, so keying on the\n // contribution alone reuses the editor and keeps showing the previous file.\n const editorKey = currentLoaded ? `${currentLoaded.loadKey}:${currentLoaded.editorRevision}` : \"\";\n let errorNotice: ReactNode = null;\n if (editState.removed) {\n errorNotice = (\n <FileRendererErrorNotice message=\"This resource was removed. Your draft is kept here. Copy it before closing this tab.\" />\n );\n } else if (loadError) {\n errorNotice = <FileRendererErrorNotice message={loadError} onRetry={() => retryReadRef.current?.()} />;\n } else if (editState.saveError) {\n errorNotice = (\n <FileRendererErrorNotice message={editState.saveError} onRetry={() => controllerRef.current?.retry()} />\n );\n }\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {currentLoaded && <FileRendererHeader file={currentLoaded} />}\n <Box flex=\"1\" minH=\"0\">\n <FileRendererContentView\n content={currentLoaded}\n position={position}\n editorKey={editorKey}\n errorNotice={errorNotice}\n contributionCanSave={Boolean(contribution.save)}\n onActiveSectionChange={\n sectionNavigation\n ? (sectionId) => syncActiveFileSection({ workbench, navigation: sectionNavigation, sectionId })\n : undefined\n }\n onChange={handleChange}\n rendererRef={rendererRef}\n sectionNavigation={editorSectionNavigation}\n title={contribution.title}\n />\n </Box>\n </Flex>\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { clearCachedResourceContent } from \"./file-renderer-load-state\";\nimport { WorkbenchFileRendererView } from \"./file-renderer-view\";\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(WorkbenchFileRendererView, { workbench: scope, contribution, placement: instance });\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 = placement.resource?.projectId ?? metadata?.projectId;\n if (typeof projectId === \"string\") return projectId;\n\n const favoriteScope = metadata?.favoriteScope;\n if (!favoriteScope || typeof favoriteScope !== \"object\" || Array.isArray(favoriteScope)) {\n return storageScope;\n }\n\n const scope = favoriteScope as { scope?: unknown; projectId?: unknown };\n return scope.scope === \"project\" && typeof scope.projectId === \"string\" ? scope.projectId : undefined;\n};\n\nexport const resolveKanbanRendererStorageKey = (\n kanbanRendererId: string,\n placement: WorkbenchPanelInstance,\n storageScope?: string,\n) => {\n const baseKey = `pstdio:workbench:kanbanRenderer:${kanbanRendererId}:${placement.instanceId}`;\n const projectScope = resolveProjectScope(placement, storageScope);\n return projectScope ? `${baseKey}:project:${projectScope}` : baseKey;\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport type { ResourceContextAction } from \"@pstdio/ui\";\nimport {\n type AttributeDescriptor,\n type AttributesSource,\n applyKanbanMove,\n isAttributesSource,\n KanbanRenderer,\n KanbanRendererSkeleton,\n useKanbanRendererStore,\n} from \"@pstdio/ui/kanban-renderer\";\nimport { type ReactNode, useSyncExternalStore } from \"react\";\nimport type {\n KanbanRendererRow,\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 { kanbanPageFields } from \"../renderer-page-fields\";\nimport { rendererQueryKey } from \"../renderer-query-key\";\nimport { RendererReadNotice } from \"../renderer-read-notice\";\nimport { usePageParams } from \"../use-page-params\";\nimport { useRendererPages } from \"../use-renderer-pages\";\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}\n\n// Board columns and the list own vertical scrolling, so the renderer always gets a bounded height.\n// The workbench region's outer ScrollArea must not become the scroll owner, or the list mounts every row.\nconst WorkbenchKanbanViewFrame = (props: WorkbenchKanbanViewFrameProps) => {\n const { children } = props;\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\" position=\"relative\">\n <Box position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\" display=\"flex\" flexDirection=\"column\">\n {children}\n </Box>\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 const pages = useRendererPages<KanbanRendererRow>({\n identity: rendererQueryKey([storageKey, settings, filter, sorts, pageParams]),\n scope: storageKey,\n fields: kanbanPageFields(attributes, settings),\n append: true,\n });\n const paged = Boolean(contribution.executePage);\n\n const read = useRendererRead({\n workbench,\n ownerKey: rendererReadKey(placement),\n queryKey: JSON.stringify([contribution.id, storageKey]),\n // Paged providers apply search before selecting rows; legacy providers keep local search.\n refreshKey: rendererQueryKey([settings, filter, sorts, pageParams, ...(paged ? [pages.request, pages.key] : [])]),\n\n load: async (signal) => {\n const state = { settings, filter, sorts, pageParams };\n if (contribution.executePage)\n return pages.accept(await contribution.executePage({ ...state, page: pages.request }, signal), signal);\n return { rows: await contribution.executeQuery(state, signal), page: undefined, position: undefined };\n },\n subscribe: (refresh) => {\n const invalidate = () => {\n if (!paged || !pages.reset()) refresh();\n };\n const subscription = contribution.subscribe?.(invalidate);\n const events = getWorkbenchRenderers(workbench).onDidRefreshKanbanRenderer((event) => {\n if (event.kanbanRendererId === contribution.id) invalidate();\n });\n return () => {\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n events.dispose();\n };\n },\n });\n const rows = read.value?.rows ?? [];\n const mutate = (...args: Parameters<typeof read.mutate>) =>\n read.mutate(...args).finally(() => {\n if (paged) pages.reset();\n });\n\n const handleOpenRow = (row: KanbanRendererRow) => {\n if (row.target) {\n void runUserAction(workbench, \"Open row\", () => workbench.navigation.openTarget(row.target!));\n return;\n }\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 // Tabs, filter pills, and columns read their labels from the views and the query's fields.\n // Until both arrive, show the view's shape instead of controls that would print raw ids.\n if ((provider && !viewsSource) || (!read.value && !read.error)) {\n return (\n <WorkbenchKanbanViewFrame>\n <KanbanRendererSkeleton viewMode={settings.viewMode} />\n </WorkbenchKanbanViewFrame>\n );\n }\n\n const readNotice = read.error ? (\n <RendererReadNotice\n error={read.error}\n retry={() => {\n if (!paged || !pages.reset()) void read.retry();\n }}\n />\n ) : null;\n\n return (\n <WorkbenchKanbanViewFrame>\n {read.value ? readNotice : null}\n <KanbanRenderer\n page={pages.controls(read.value?.page, read.loading, paged, read.value?.position)}\n itemLabel={\n contribution.resourceKind ? workbench.resources.getKind(contribution.resourceKind)?.label : undefined\n }\n viewsSource={viewsSource}\n rows={rows}\n contentPlaceholder={read.value ? undefined : readNotice}\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 || rows.some((row) => row.target) ? handleOpenRow : undefined}\n onActionError={(error, action) => reportUserActionError(workbench, action, error)}\n onAttributeChange={\n contribution.onAttributeChange\n ? (rowId, attributeId, value) =>\n mutate(\n (snapshot) => ({\n ...snapshot,\n rows: applyKanbanMove(snapshot.rows, { rowId, attributes: { [attributeId]: value } }),\n }),\n () => contribution.onAttributeChange!(rowId, attributeId, value),\n )\n : undefined\n }\n onMove={\n contribution.onMove || contribution.onAttributeChange\n ? (move) => {\n const mutation = prepareKanbanMove(contribution, move);\n return mutate(\n (value) => ({ ...value, rows: applyKanbanMove(value.rows, mutation.move) }),\n mutation.save,\n );\n }\n : undefined\n }\n onReorder={\n contribution.onReorder\n ? (rowId, beforeRowId) =>\n mutate(\n (value) => ({\n ...value,\n rows: applyKanbanMove(value.rows, { rowId, attributes: {}, order: { beforeRowId } }),\n }),\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 type { RegisteredWorkbenchNotification, WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport const isSystemError = (notice: RegisteredWorkbenchNotification) =>\n notice.level === \"error\" && !notice.inlineTarget;\n\nexport const useHasSystemErrors = (workbench: WorkbenchCore) =>\n useWorkbenchStore(workbench.notifications.store, (state) => Object.values(state.notifications).some(isSystemError));\n","import type { WorkbenchCore } from \"../../core\";\nimport { useHasSystemErrors } from \"../notifications/system-error-state\";\nimport { useWorkbenchPanelMenusPresent } from \"../panel-menu/use-panel-menu\";\nimport { useModeChrome } from \"../region/mode-chrome\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\n\nexport const useWorkbenchLayoutFlags = (workbench: WorkbenchCore) => {\n const statusChrome = useModeChrome(workbench, \"status\");\n const statusBarItems = useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n const hasSystemErrors = useHasSystemErrors(workbench);\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 hasSystemErrors ||\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","import { Button, HStack, Icon, Popover, Portal, Stack, Tag, Text } from \"@chakra-ui/react\";\nimport { AlertMessage, ScrollArea } from \"@pstdio/ui\";\nimport { TriangleAlert } from \"lucide-react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchActionErrors } from \"./action-errors\";\nimport { isSystemError } from \"./system-error-state\";\n\nexport const WorkbenchSystemErrors = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const notifications = useWorkbenchStore(workbench.notifications.store, (state) => state.notifications);\n const errors = Object.values(notifications)\n .filter(isSystemError)\n .sort((left, right) => left.createdAt.localeCompare(right.createdAt));\n if (!errors.length) return null;\n const latest = errors.at(-1)!;\n\n return (\n <Popover.Root positioning={{ placement: \"top-start\", offset: { mainAxis: 4 } }}>\n <Popover.Trigger asChild>\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n color=\"fg.error\"\n minW=\"0\"\n maxW=\"full\"\n justifyContent=\"flex-start\"\n aria-label={`System errors: ${latest.title}`}\n >\n <Icon as={TriangleAlert} boxSize=\"4\" />\n <Text as=\"span\" textStyle=\"label/XS/medium\" maxW=\"2xs\" truncate role=\"status\">\n {latest.title}\n </Text>\n </Button>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content\n width=\"performance-popover\"\n maxW=\"calc(100vw - var(--chakra-spacing-md) * 2)\"\n maxH=\"70dvh\"\n overflow=\"hidden\"\n >\n <Popover.Body display=\"flex\" flexDirection=\"column\" gap=\"sm\" minH=\"0\">\n <HStack gap=\"xs\" flexShrink=\"0\">\n <Icon as={TriangleAlert} boxSize=\"4\" />\n <Popover.Title>System errors</Popover.Title>\n <Tag.Root size=\"sm\" variant=\"subtle\" colorPalette=\"red\" aria-label={`${errors.length} system errors`}>\n <Tag.Label>{errors.length}</Tag.Label>\n </Tag.Root>\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n marginLeft=\"auto\"\n onClick={() => {\n for (const error of errors) workbench.notifications.dismiss(error.id);\n }}\n >\n Clear all\n </Button>\n </HStack>\n <ScrollArea\n minH=\"0\"\n viewportProps={{ role: \"region\", \"aria-label\": \"System error list\", overscrollBehavior: \"contain\" }}\n >\n <Stack gap=\"sm\" minW=\"0\">\n {[...errors].reverse().map((error) => (\n <AlertMessage\n key={error.id}\n status=\"error\"\n title={error.title}\n closeLabel={`Dismiss ${error.title}`}\n onClose={() => workbench.notifications.dismiss(error.id)}\n endElement={error.actions?.map((action) => (\n <Button\n key={action.commandId}\n onClick={() => {\n const report = workbench.notifications.captureActionError(\n action.title,\n `system-errors.${error.id}`,\n );\n void workbench.commands.executeCommand(action.commandId, action.args).catch(report);\n }}\n >\n {action.title}\n </Button>\n ))}\n >\n <Stack gap=\"xs\" minW=\"0\">\n <Text>{error.message}</Text>\n <WorkbenchActionErrors workbench={workbench} target={`system-errors.${error.id}`} />\n </Stack>\n </AlertMessage>\n ))}\n </Stack>\n </ScrollArea>\n </Popover.Body>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.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 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=\"stretch\"\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 { WorkbenchSystemErrors } from \"../notifications/system-errors\";\nimport { ModeChromeView, useModeChrome } from \"../region/mode-chrome\";\nimport { usePanelDragSurface, usePanelPositionActions } from \"../region/panel-position-controls\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\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 const drag = usePanelDragSurface(workbench, \"sidenav\");\n const positionActions = usePanelPositionActions(workbench, \"sidenav\");\n\n return (\n <ResourceContextMenu actions={[...contextActions, ...positionActions]} closeOnSelect={false} keepMountedWhenEmpty>\n <Box {...drag} 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 const drag = usePanelDragSurface(workbench, \"activity\");\n const positionActions = usePanelPositionActions(workbench, \"activity\");\n const edge = useWorkbenchStore(workbench.layout.store, () => workbench.shell.getArrangement().activity);\n const horizontal = edge === \"top\" || edge === \"bottom\";\n\n return (\n <ResourceContextMenu actions={positionActions}>\n <Box\n {...drag}\n display={props.visible === false ? \"none\" : \"block\"}\n flexShrink={0}\n h={horizontal ? \"14\" : \"full\"}\n w={horizontal ? \"full\" : \"14\"}\n >\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=\"full\"\n >\n <WorkbenchRegion workbench={workbench} region=\"activity\" title=\"Activity bar\" />\n </WorkbenchFocusRegion>\n </Box>\n </ResourceContextMenu>\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 <Box display=\"flex\" alignItems=\"stretch\" justifyContent=\"space-between\" px=\"sm\" h=\"full\" minW=\"0\" w=\"full\">\n <Box display=\"flex\" alignItems=\"center\" minW=\"0\">\n <WorkbenchSystemErrors workbench={workbench} />\n </Box>\n <Box flex=\"1\" minW=\"0\" h=\"full\" display={chrome ? \"block\" : \"none\"}>\n <ModeChromeView workbench={workbench} region=\"status\" viewId={chrome || undefined} />\n </Box>\n <Box display={chrome === undefined ? \"flex\" : \"none\"} alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"leading\" />\n </Box>\n <Box display={chrome === undefined ? \"flex\" : \"none\"} alignItems=\"stretch\" minW=\"0\" h=\"full\" marginLeft=\"auto\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"trailing\" />\n </Box>\n </Box>\n </WorkbenchFocusRegion>\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { resolveArrangement } from \"../../core/registries/layout/panel-positions\";\nimport { WorkbenchPanelDropFrame } from \"../region/panel-drop-frame\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchActivityBar } from \"./workbench-panels\";\n\nexport const useWorkbenchArrangement = (workbench: WorkbenchCore) => {\n const saved = useWorkbenchStore(workbench.layout.store, (state) => state.layout.arrangement);\n return resolveArrangement(saved);\n};\n\nexport const WorkbenchArrangementFrame = (props: {\n workbench: WorkbenchCore;\n activityVisible: boolean;\n children: ReactNode;\n}) => {\n const { workbench, activityVisible, children } = props;\n const { activity } = useWorkbenchArrangement(workbench);\n return (\n <WorkbenchPanelDropFrame workbench={workbench} region=\"activity\">\n <Flex\n position=\"relative\"\n h=\"full\"\n w=\"full\"\n minH=\"0\"\n minW=\"0\"\n direction={\n { left: \"row\", right: \"row-reverse\", top: \"column\", bottom: \"column-reverse\" }[activity] as\n | \"row\"\n | \"row-reverse\"\n | \"column\"\n | \"column-reverse\"\n }\n >\n <WorkbenchActivityBar workbench={workbench} visible={activityVisible} />\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\" position=\"relative\">\n {children}\n </Flex>\n </Flex>\n </WorkbenchPanelDropFrame>\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 } 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 { usePanelPolicy } from \"../shared/use-panel-policy\";\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 policy = usePanelPolicy(workbench, \"secondary\");\n const hasContent = useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true });\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const hasMenus = useWorkbenchPanelMenusPresent(workbench, \"secondary\");\n const hasHeader = useWorkbenchRegionContent(workbench, \"secondary-header\");\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: (policy.provided && !policy.canClose) || 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 type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { PanelHeader } from \"../region/panel-header\";\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 { usePanelPolicy } from \"../shared/use-panel-policy\";\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 policy = usePanelPolicy(workbench, \"secondary\");\n const hasTabs = useWorkbenchRegionTabsVisible(workbench, \"secondary\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"secondary\"\n data-workbench-panel=\"secondary\"\n data-workbench-region=\"secondary\"\n as=\"section\"\n bg={workbenchBackgrounds.panel}\n 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 <PanelHeader\n workbench={workbench}\n region=\"secondary\"\n hasTabs={hasTabs}\n hasContent={hasSecondaryHeader || hasPanelHeader}\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 </PanelHeader>\n <WorkbenchTabDropTarget region=\"secondary\" visible={policy.open} />\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 { 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 { WorkbenchPanelDropFrame } from \"../region/panel-drop-frame\";\nimport { PanelHeader } from \"../region/panel-header\";\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 { usePanelPolicy } from \"../shared/use-panel-policy\";\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\n return (\n <PanelHeader\n workbench={workbench}\n region=\"main\"\n hasTabs={hasMainContentTabs}\n hasContent={hasMainHeader || hasPanelHeader}\n data-workbench-panel-header=\"main\"\n variant=\"main\"\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"main\" />\n {/* The tab strip grows into the empty header, so only claim space when a\n main-header view is actually mounted or when there are no tabs to claim it. */}\n <Box flex={hasMainHeader || !hasMainContentTabs ? \"1\" : \"0\"} h=\"full\" minW=\"0\" overflow=\"hidden\">\n <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 </PanelHeader>\n );\n};\n\nexport const WorkbenchBody = (props: WorkbenchBodyProps) => {\n const { workbench } = props;\n const position = useWorkbenchStore(workbench.layout.store, () => workbench.shell.getArrangement().secondary);\n const policy = usePanelPolicy(workbench, \"secondary\");\n const fullscreen = useWorkbenchStore(workbench.fullscreen.store, (state) => state.active);\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 <Box display={fullscreen ? \"none\" : \"contents\"}>\n <MainHeaderBar workbench={workbench} hasMainHeader={hasMainHeader} />\n </Box>\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 <WorkbenchPanelDropFrame workbench={workbench} region=\"secondary\">\n <ResizableSplitLayout\n as=\"main\"\n minH=\"0\"\n minW=\"0\"\n resizableSide={position}\n contentPanel={mainContent}\n resizablePanel={<WorkbenchSecondaryPanel workbench={workbench} hasSecondaryHeader={secondaryPanel.hasHeader} />}\n collapsed={fullscreen || !secondaryPanel.has || secondaryPanel.collapsed}\n resizable={policy.resizable}\n collapsible={policy.canClose && 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.shell.setRegionSize(\"secondary\", height)}\n onCollapsedChange={secondaryPanel.onCollapsedChange}\n />\n </WorkbenchPanelDropFrame>\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 { WorkbenchPanelDropFrame } from \"../region/panel-drop-frame\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { usePanelPolicy } from \"../shared/use-panel-policy\";\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 position = useWorkbenchStore(workbench.layout.store, () => workbench.shell.getArrangement().side);\n const policy = usePanelPolicy(workbench, \"side\");\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 <WorkbenchPanelDropFrame workbench={workbench} region=\"side\">\n <ResizableSplitLayout\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n resizableSide={position}\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 resizable={policy.resizable}\n collapsible={policy.canClose && collapsible}\n onSizeChange={(width) => workbench.shell.setRegionSize(\"side\", width)}\n contentMinSizePx={contentMinSizePx}\n resizeLabel=\"Resize Side Panel\"\n onCollapsedChange={(collapsed) => {\n if (attached && collapsed) onCollapse();\n }}\n />\n </WorkbenchPanelDropFrame>\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 \"iframe\",\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.shell.setRegionOpen(\"side\", false)}\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 } from \"../../core\";\nimport { WorkbenchCommandPalette } from \"../command-palette/command-palette\";\nimport type { CommandParamFieldRenderer } from \"../command-palette/command-params-dialog\";\nimport { WorkbenchNavChrome } from \"../header/workbench-nav-chrome\";\nimport { WorkbenchKeybindingDispatcher } from \"../keybindings/workbench-keybinding-dispatcher\";\nimport { WorkbenchNotificationHost } from \"../notifications/notification-host\";\nimport { movePanelHost } from \"../region/move-panel-host\";\nimport { WorkbenchPanelDropFrame } from \"../region/panel-drop-frame\";\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 { usePanelPolicy } from \"../shared/use-panel-policy\";\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 { FullscreenKeyboard } from \"./fullscreen-controls\";\nimport { WorkbenchOverlayLayer } from \"./overlay-layer\";\nimport { useWorkbenchLayoutFlags } from \"./use-workbench-layout-flags\";\nimport { useWorkbenchArrangement, WorkbenchArrangementFrame } from \"./workbench-arrangement\";\nimport { WorkbenchBody } from \"./workbench-body\";\nimport { resolvePanelCollapsible } from \"./workbench-panel-state\";\nimport { WORKBENCH_STATUS_BAR_HEIGHT, WorkbenchSidenav, WorkbenchStatusBar } from \"./workbench-panels\";\nimport { WorkbenchSidePanelBoundary } from \"./workbench-side-panel-boundary\";\nimport { WorkbenchSidePanelRegionHeader, WorkbenchSidePanelRegionPortal } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchProps {\n /** The host renders WorkbenchPanelToggles and WorkbenchFullscreenToggle outside the navigation header. */\n panelControlsPlacement?: \"nav\" | \"host\";\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 WorkbenchContent = (props: WorkbenchProps) => {\n const { workbench, renderParamField, sidePanelBubbleIcon, onOpenSidePanel, titleBar, panelControlsPlacement } = props;\n const arrangement = useWorkbenchArrangement(workbench);\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 hasSidePanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"side\");\n const sidePanelMode = useWorkbenchStore(workbench.layout.store, () => workbench.sidePanel.getMode());\n const fullscreen = useWorkbenchStore(workbench.fullscreen.store, (state) => state);\n let presentedSideMode = sidePanelMode;\n if (fullscreen.active) presentedSideMode = fullscreen.sideOpen ? \"floating\" : \"closed\";\n\n const {\n hasActivityBarWidgets,\n hasNavWidgets,\n hasSideHeaderWidgets,\n hasSideWidgets,\n hasSideMenus,\n hasSidenavWidgets,\n hasStatusWidgets,\n } = useWorkbenchLayoutFlags(workbench);\n const showActivity = !fullscreen.active && hasActivityBarWidgets;\n const showStatus = !fullscreen.active && hasStatusWidgets;\n const sidePolicy = usePanelPolicy(workbench, \"side\");\n const sidenavPolicy = usePanelPolicy(workbench, \"sidenav\");\n const hasSidePanel =\n (sidePolicy.provided && !sidePolicy.canClose) ||\n hasSideHeaderWidgets ||\n hasSideWidgets ||\n hasSidePanelHeader ||\n hasSideMenus;\n const showSidenav = hasSidenavWidgets;\n const sidenavCollapsible = resolvePanelCollapsible(workbench, \"sidenav\");\n const persistedSidenavSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.sidenav.size);\n const sidenavSize = resolveSidenavSize(workbench, persistedSidenavSize);\n const showAttachedSidePanel = hasSidePanel && presentedSideMode === \"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\n const sideHeader =\n hasSideHeaderWidgets || hasSidePanelHeader ? (\n <WorkbenchSidePanelRegionHeader workbench={workbench} hasSideHeader={hasSideHeaderWidgets} />\n ) : undefined;\n let activeSidePanelSlot: HTMLElement | null = attachedSidePanelSlot;\n if (presentedSideMode === \"floating\") activeSidePanelSlot = floatingSidePanelSlot;\n else if (presentedSideMode === \"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\n workbench={workbench}\n hasNav={hasNavWidgets}\n panelControls={panelControlsPlacement !== \"host\"}\n />\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchBody workbench={workbench} />\n </Flex>\n </Flex>\n );\n\n const contentWithSidenav = (\n <WorkbenchPanelDropFrame workbench={workbench} region=\"sidenav\">\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={<WorkbenchSidenav workbench={workbench} contextActions={sidenavContextActions} />}\n resizableSide={arrangement.sidenav}\n contentPanel={\n <WorkbenchSidePanelBoundary\n workbench={workbench}\n showAttachedSidePanel={showAttachedSidePanel}\n contentFrame={contentWithHeader}\n sideHeader={sideHeader}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n onAttachedSlotChange={setAttachedSidePanelSlot}\n />\n }\n collapsed={fullscreen.active || !showSidenav || !sidenavOpen}\n resizable={sidenavPolicy.resizable}\n collapsible={sidenavPolicy.canClose && 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.shell.setRegionSize(\"sidenav\", width)}\n onCollapsedChange={(collapsed) => {\n if (!collapsed || sidenavCollapsible) setPanelOpen(\"sidenav\", !collapsed);\n }}\n />\n </WorkbenchPanelDropFrame>\n );\n\n const contentFrame = (\n <Flex position=\"relative\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg={workbenchBackgrounds.main} color=\"fg\">\n <WorkbenchArrangementFrame workbench={workbench} activityVisible={showActivity}>\n {contentWithSidenav}\n </WorkbenchArrangementFrame>\n <WorkbenchOverlayLayer workbench={workbench} />\n </Flex>\n );\n\n return (\n <WorkbenchThemeScope h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" position=\"relative\" w=\"full\">\n <Flex display={fullscreen.active ? \"none\" : \"contents\"}>{titleBar}</Flex>\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={showStatus ? \"0\" : \"panel-gap\"}\n pr=\"panel-gap\"\n pl={showActivity ? \"0\" : \"panel-gap\"}\n >\n {contentFrame}\n </Flex>\n <WorkbenchStatusBar workbench={workbench} visible={showStatus} />\n <WorkbenchFloatingSidePanel\n workbench={workbench}\n available={hasSidePanel}\n bubbleIcon={sidePanelBubbleIcon}\n onOpen={onOpenSidePanel}\n contentSlotRef={setFloatingSidePanelSlot}\n bottomOffset={showStatus ? 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 <FullscreenKeyboard 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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"}