@pstdio/workbench 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +66 -72
  2. package/dist/composition-resolver-types-CWykPyEK.js +241 -0
  3. package/dist/composition-resolver-types-CWykPyEK.js.map +1 -0
  4. package/dist/extensions.d.ts +380 -29
  5. package/dist/extensions.js +1366 -883
  6. package/dist/extensions.js.map +1 -1
  7. package/dist/file-renderer-view-B6_iR4EN.js +496 -0
  8. package/dist/file-renderer-view-B6_iR4EN.js.map +1 -0
  9. package/dist/file-section-navigation-CfYqVObc.js +30 -0
  10. package/dist/file-section-navigation-CfYqVObc.js.map +1 -0
  11. package/dist/index.d.ts +305 -17
  12. package/dist/index.js +2343 -2083
  13. package/dist/index.js.map +1 -1
  14. package/dist/layout-types-DMoZz38-.js.map +1 -1
  15. package/dist/react.d.ts +190 -16
  16. package/dist/react.js +2473 -2374
  17. package/dist/react.js.map +1 -1
  18. package/dist/storage.js +132 -155
  19. package/dist/storage.js.map +1 -1
  20. package/dist/testing.d.ts +177 -14
  21. package/dist/webview-runtime.js +1 -1
  22. package/dist/webview-runtime.js.map +1 -1
  23. package/dist/workbench-built-ins-BncLJfQA.js +1175 -0
  24. package/dist/workbench-built-ins-BncLJfQA.js.map +1 -0
  25. package/dist/workbench-menu-paths-Bb0ICxeG.js +20 -0
  26. package/dist/workbench-menu-paths-Bb0ICxeG.js.map +1 -0
  27. package/package.json +4 -4
  28. package/dist/context-key-service-B2K9LAec.js +0 -1034
  29. package/dist/context-key-service-B2K9LAec.js.map +0 -1
  30. package/dist/file-renderer-view-DrrhYnb_.js +0 -171
  31. package/dist/file-renderer-view-DrrhYnb_.js.map +0 -1
  32. package/dist/workbench-menu-paths-B_QJzcNU.js +0 -12
  33. package/dist/workbench-menu-paths-B_QJzcNU.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"layout-types-DMoZz38-.js","sources":["../src/core/registries/layout/widget-id.ts","../src/core/registries/layout/layout-types.ts"],"sourcesContent":["export const resolveUniqueWidgetId = (\n widgetIds: ReadonlySet<string>,\n contributionId: string,\n preferredId = contributionId,\n) => {\n if (!widgetIds.has(preferredId)) return preferredId;\n\n let suffix = 1;\n while (widgetIds.has(`${contributionId}:${suffix}`)) suffix += 1;\n return `${contributionId}:${suffix}`;\n};\n","import type { ContributionSource, RegisteredContributionMetadata } from \"../../shared/contributions/metadata\";\nimport type { ResourceRef } from \"../resources/resource-registry\";\nimport { resolveUniqueWidgetId } from \"./widget-id\";\n\nexport const workbenchRegions = [\n \"nav\",\n \"activity\",\n \"sidenav-header\",\n \"sidenav\",\n \"main-header\",\n \"main-left-menu\",\n \"main\",\n \"main-right-menu\",\n \"secondary-header\",\n \"secondary-left-menu\",\n \"secondary\",\n \"secondary-right-menu\",\n \"side-header\",\n \"side-left-menu\",\n \"side\",\n \"side-right-menu\",\n \"status\",\n \"overlay\",\n] as const;\n\nexport type WorkbenchRegion = (typeof workbenchRegions)[number];\n\nexport const workbenchPanelRegions = [\"main\", \"secondary\", \"side\"] as const satisfies readonly WorkbenchRegion[];\n\nexport type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];\n\nexport type WorkbenchPanelMenuSide = \"left\" | \"right\";\n\nexport const workbenchPanelMenuRegions = {\n main: { left: \"main-left-menu\", right: \"main-right-menu\" },\n secondary: { left: \"secondary-left-menu\", right: \"secondary-right-menu\" },\n side: { left: \"side-left-menu\", right: \"side-right-menu\" },\n} as const satisfies Record<WorkbenchPanelRegion, Record<WorkbenchPanelMenuSide, WorkbenchRegion>>;\n\nexport type WorkbenchPanelMenuRegion = (typeof workbenchPanelMenuRegions)[WorkbenchPanelRegion][WorkbenchPanelMenuSide];\n\nconst workbenchPanelByMenuRegion = {\n \"main-left-menu\": \"main\",\n \"main-right-menu\": \"main\",\n \"secondary-left-menu\": \"secondary\",\n \"secondary-right-menu\": \"secondary\",\n \"side-left-menu\": \"side\",\n \"side-right-menu\": \"side\",\n} as const satisfies Record<WorkbenchPanelMenuRegion, WorkbenchPanelRegion>;\n\nexport const getWorkbenchPanelForMenuRegion = (region: WorkbenchPanelMenuRegion) => workbenchPanelByMenuRegion[region];\n\nexport interface WorkbenchRegionSize {\n defaultPx?: number;\n minPx?: number;\n maxPx?: number;\n}\n\nexport type WidgetReusePolicy = \"resource\" | \"none\";\n\nexport type WidgetMountStrategy = \"active\" | \"keep-mounted\";\n\nexport type WorkbenchPanelReusePolicy = WidgetReusePolicy;\n\nexport type WorkbenchPanelMountStrategy = WidgetMountStrategy;\n\nexport type WorkbenchFloatingPanelVisibility = \"visible\" | \"hidden\";\n\nexport type WorkbenchWidgetRole = \"content\" | \"location\" | \"sub-panel\" | \"panel-menu\";\n\nexport type WorkbenchTabRetention = \"preview\" | \"persistent\";\n\nexport type WorkbenchTabPosition = \"start\" | \"end\" | { beforeWidgetId: string } | { afterWidgetId: string };\n\nexport interface WorkbenchLocationEligibility {\n modeIds?: string[];\n resourceKinds?: string[];\n resourceIds?: string[];\n canOpen?(resource: ResourceRef): boolean;\n}\n\nexport type WorkbenchPanelMenuOwner =\n | { level: \"panel\"; contributionId?: string }\n | { level: \"sub-panel\"; contributionId: string };\n\nexport interface WorkbenchWidgetTab {\n contentRendererId?: string;\n /** Custom actions shown when the user activates an already-active tab. */\n customMenuRendererId?: string;\n}\n\nexport type WorkbenchPanelTab = WorkbenchWidgetTab;\n\nexport interface WidgetContribution {\n id: string;\n title: string;\n icon?: string;\n region: WorkbenchRegion;\n fallbackRegion?: WorkbenchRegion;\n singleton?: boolean;\n reuse?: WidgetReusePolicy;\n mountStrategy?: WidgetMountStrategy;\n closable?: boolean;\n // Non-closeable widgets opt into the tab visibility menu; closeable widgets\n // ignore this and use the X button for dismissal.\n hiddenByDefault?: boolean;\n // A Location that presents only its Sub Panels: it renders no tab and no\n // content of its own — establishing it activates its first Sub Panel.\n subPanelsOnly?: boolean;\n regionSize?: WorkbenchRegionSize;\n regionCollapsible?: boolean;\n headerBorderBottom?: boolean;\n floatingPanels?: WorkbenchFloatingPanelVisibility;\n resourceKinds?: string[];\n priority?: number;\n rendererId: string;\n openCommandId?: string;\n role?: WorkbenchWidgetRole;\n eligibleLocations?: WorkbenchLocationEligibility;\n panelMenuOwner?: WorkbenchPanelMenuOwner;\n tab?: WorkbenchWidgetTab;\n config?: unknown;\n canOpen?(resource: ResourceRef): boolean;\n}\n\nexport interface WorkbenchPanelMenuDefinition {\n id: string;\n title: string;\n icon?: string;\n side: WorkbenchPanelMenuSide;\n singleton?: boolean;\n reuse?: WorkbenchPanelReusePolicy;\n mountStrategy?: WorkbenchPanelMountStrategy;\n hiddenByDefault?: boolean;\n regionSize?: WorkbenchRegionSize;\n regionCollapsible?: boolean;\n headerBorderBottom?: boolean;\n rendererId: string;\n priority?: number;\n config?: unknown;\n}\n\ninterface WorkbenchPanelMenusContribution {\n panelMenus?: readonly WorkbenchPanelMenuDefinition[];\n}\n\nexport interface WorkbenchPanelContribution {\n id: string;\n title: string;\n icon?: string;\n region: WorkbenchRegion;\n fallbackRegion?: WorkbenchRegion;\n rendererId: string;\n closable: boolean;\n singleton?: boolean;\n reuse?: WorkbenchPanelReusePolicy;\n mountStrategy?: WorkbenchPanelMountStrategy;\n hiddenByDefault?: boolean;\n subPanelsOnly?: boolean;\n regionSize?: WorkbenchRegionSize;\n regionCollapsible?: boolean;\n headerBorderBottom?: boolean;\n floatingPanels?: WorkbenchFloatingPanelVisibility;\n resourceKinds?: string[];\n eligibleLocations?: WorkbenchLocationEligibility;\n priority?: number;\n openCommandId?: string;\n tab?: WorkbenchPanelTab;\n config?: unknown;\n canOpen?(resource: ResourceRef): boolean;\n ownerId?: string;\n source?: ContributionSource;\n panelMenus?: readonly WorkbenchPanelMenuDefinition[];\n}\n\nexport type WorkbenchLocationContribution = Omit<WidgetContribution, \"role\"> & WorkbenchPanelMenusContribution;\n\nexport type WorkbenchSubPanelContribution = Omit<WidgetContribution, \"region\" | \"fallbackRegion\" | \"role\"> & {\n region: WorkbenchPanelRegion;\n fallbackRegion?: WorkbenchPanelRegion;\n} & WorkbenchPanelMenusContribution;\n\nexport type WorkbenchPanelMenuContribution = Omit<WidgetContribution, \"region\" | \"fallbackRegion\" | \"role\"> & {\n region: WorkbenchPanelMenuRegion;\n fallbackRegion?: WorkbenchPanelMenuRegion;\n};\n\nexport type RegisteredWidgetContribution = Omit<WidgetContribution, \"priority\" | \"singleton\" | \"reuse\"> & {\n ownedPanelMenuIds?: readonly string[];\n singleton: boolean;\n reuse: WidgetReusePolicy;\n role: WorkbenchWidgetRole;\n} & RegisteredContributionMetadata;\n\nexport interface PlaceholderContribution {\n id: string;\n title: string;\n region: WorkbenchRegion;\n rendererId: string;\n regionSize?: WorkbenchRegionSize;\n regionCollapsible?: boolean;\n config?: unknown;\n priority?: number;\n}\n\nexport type RegisteredPlaceholderContribution = Omit<PlaceholderContribution, \"priority\"> &\n RegisteredContributionMetadata;\n\nexport interface WorkbenchWidgetPlacement {\n widgetId: string;\n contributionId: string;\n ownerId?: string;\n source?: ContributionSource;\n resource?: ResourceRef;\n resourceUri?: string;\n ownerResourceUri?: string;\n title?: string;\n pinned?: boolean;\n closable?: boolean;\n mountStrategy?: WidgetMountStrategy;\n hiddenByDefault?: boolean;\n tabRetention?: WorkbenchTabRetention;\n tab?: WorkbenchWidgetTab;\n role?: WorkbenchWidgetRole;\n}\n\nexport interface WorkbenchPanelInstance {\n instanceId: string;\n panelId: string;\n ownerId?: string;\n source?: ContributionSource;\n resource?: ResourceRef;\n resourceUri?: string;\n ownerResourceUri?: string;\n title?: string;\n pinned?: boolean;\n closable: boolean;\n mountStrategy?: WorkbenchPanelMountStrategy;\n hiddenByDefault?: boolean;\n tabRetention?: WorkbenchTabRetention;\n tab?: WorkbenchPanelTab;\n}\n\nexport interface WorkbenchRegionState {\n id: WorkbenchRegion;\n visible: boolean;\n size?: number;\n widgets: WorkbenchWidgetPlacement[];\n activeWidgetId?: string;\n}\n\nexport interface WorkbenchLayout {\n regions: Record<WorkbenchRegion, WorkbenchRegionState>;\n locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;\n activeWidgetId?: string;\n activeLocationWidgetId?: string;\n activeResourceUri?: string;\n}\n\nexport interface WorkbenchLayoutStoreState {\n layout: WorkbenchLayout;\n widgets: Record<string, RegisteredWidgetContribution>;\n placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;\n}\n\nexport interface OpenWidgetInput {\n resource?: ResourceRef;\n title?: string;\n region?: WorkbenchRegion;\n ownerId?: string;\n source?: ContributionSource;\n pinned?: boolean;\n closable?: boolean;\n mountStrategy?: WidgetMountStrategy;\n hiddenByDefault?: boolean;\n tabRetention?: WorkbenchTabRetention;\n tabPosition?: WorkbenchTabPosition;\n tab?: WorkbenchWidgetTab;\n replaceActive?: boolean;\n replaceWidgetId?: string;\n}\n\nexport type WorkbenchPanelOpenStrategy =\n | { kind: \"persistent\"; position?: WorkbenchTabPosition }\n | { kind: \"replace-active\" }\n | { kind: \"replace-panel\"; instanceId: string; retention?: WorkbenchTabRetention }\n | { kind: \"preview\"; position?: WorkbenchTabPosition };\n\nexport interface OpenWorkbenchPanelInput {\n resource?: ResourceRef;\n title?: string;\n region?: WorkbenchRegion;\n pinned?: boolean;\n mountStrategy?: WorkbenchPanelMountStrategy;\n hiddenByDefault?: boolean;\n tab?: WorkbenchPanelTab;\n strategy?: WorkbenchPanelOpenStrategy;\n}\n\nconst createRegionState = (id: WorkbenchRegion, visible: boolean): WorkbenchRegionState => ({\n id,\n visible,\n widgets: [],\n});\n\nexport const createDefaultWorkbenchLayout = (\n regionVisibility: Partial<Record<WorkbenchRegion, boolean>> = {},\n): WorkbenchLayout => {\n const createRegion = (id: WorkbenchRegion) => createRegionState(id, regionVisibility[id] ?? true);\n\n return {\n regions: {\n nav: createRegion(\"nav\"),\n activity: createRegion(\"activity\"),\n \"sidenav-header\": createRegion(\"sidenav-header\"),\n sidenav: createRegion(\"sidenav\"),\n \"main-header\": createRegion(\"main-header\"),\n \"main-left-menu\": createRegion(\"main-left-menu\"),\n main: createRegion(\"main\"),\n \"main-right-menu\": createRegion(\"main-right-menu\"),\n \"secondary-header\": createRegion(\"secondary-header\"),\n \"secondary-left-menu\": createRegion(\"secondary-left-menu\"),\n secondary: createRegion(\"secondary\"),\n \"secondary-right-menu\": createRegion(\"secondary-right-menu\"),\n \"side-header\": createRegion(\"side-header\"),\n \"side-left-menu\": createRegion(\"side-left-menu\"),\n side: createRegion(\"side\"),\n \"side-right-menu\": createRegion(\"side-right-menu\"),\n status: createRegion(\"status\"),\n overlay: createRegion(\"overlay\"),\n },\n };\n};\n\nconst findLastWidgetIndex = (widgets: WorkbenchWidgetPlacement[], widgetId: string) => {\n for (let index = widgets.length - 1; index >= 0; index -= 1) {\n if (widgets[index]?.widgetId === widgetId) return index;\n }\n return -1;\n};\n\nconst normalizeWidgetIds = (layout: WorkbenchLayout) => {\n const widgetIds = new Set<string>();\n const regions = {} as WorkbenchLayout[\"regions\"];\n let activeWidgetId = layout.activeWidgetId;\n let activeResourceUri = layout.activeResourceUri;\n\n for (const [id, region] of Object.entries(layout.regions) as [WorkbenchRegion, WorkbenchRegionState][]) {\n const originalActiveWidgetId = region.activeWidgetId;\n const activeIndex = originalActiveWidgetId ? findLastWidgetIndex(region.widgets, originalActiveWidgetId) : -1;\n const widgets = region.widgets.map((placement) => {\n const widgetId = resolveUniqueWidgetId(widgetIds, placement.contributionId, placement.widgetId);\n widgetIds.add(widgetId);\n return widgetId === placement.widgetId ? placement : { ...placement, widgetId };\n });\n const normalizedActiveWidgetId = activeIndex >= 0 ? widgets[activeIndex]?.widgetId : originalActiveWidgetId;\n regions[id] = { ...region, widgets, activeWidgetId: normalizedActiveWidgetId };\n\n if (originalActiveWidgetId && layout.activeWidgetId === originalActiveWidgetId && activeIndex >= 0) {\n activeWidgetId = normalizedActiveWidgetId;\n activeResourceUri = widgets[activeIndex]?.resourceUri;\n }\n }\n\n return { ...layout, regions, activeWidgetId, activeResourceUri };\n};\n\nexport const mergeWithDefaultRegions = (\n persisted: WorkbenchLayout,\n regionVisibility: Partial<Record<WorkbenchRegion, boolean>> = {},\n): WorkbenchLayout => {\n const defaults = createDefaultWorkbenchLayout(regionVisibility);\n return normalizeWidgetIds({\n ...persisted,\n regions: { ...defaults.regions, ...persisted.regions },\n });\n};\n"],"names":["resolveUniqueWidgetId","widgetIds","contributionId","preferredId","has","suffix","workbenchRegions","workbenchPanelRegions","workbenchPanelMenuRegions","main","left","right","secondary","side","workbenchPanelByMenuRegion","getWorkbenchPanelForMenuRegion","region","createRegionState","id","visible","widgets","createDefaultWorkbenchLayout","regionVisibility","createRegion","regions","nav","activity","sidenav","status","overlay","findLastWidgetIndex","widgetId","index","length","normalizeWidgetIds","layout","Set","activeWidgetId","activeResourceUri","Object","entries","originalActiveWidgetId","activeIndex","map","placement","add","normalizedActiveWidgetId","resourceUri","mergeWithDefaultRegions","persisted","defaults"],"mappings":"AAAO,MAAMA,IAAwBA,CACnCC,GACAC,GACAC,IAAcD,MACX;AACH,MAAI,CAACD,EAAUG,IAAID,CAAW,EAAG,QAAOA;AAExC,MAAIE,IAAS;AACb,SAAOJ,EAAUG,IAAI,GAAGF,CAAc,IAAIG,CAAM,EAAE,IAAGA,CAAAA,KAAU;AAC/D,SAAO,GAAGH,CAAc,IAAIG,CAAM;AACpC,GCNaC,IAAmB,CAC9B,OACA,YACA,kBACA,WACA,eACA,kBACA,QACA,mBACA,oBACA,uBACA,aACA,wBACA,eACA,kBACA,QACA,mBACA,UACA,SAAS,GAKEC,IAAwB,CAAC,QAAQ,aAAa,MAAM,GAMpDC,IAA4B;AAAA,EACvCC,MAAM;AAAA,IAAEC,MAAM;AAAA,IAAkBC,OAAO;AAAA,EAAA;AAAA,EACvCC,WAAW;AAAA,IAAEF,MAAM;AAAA,IAAuBC,OAAO;AAAA,EAAA;AAAA,EACjDE,MAAM;AAAA,IAAEH,MAAM;AAAA,IAAkBC,OAAO;AAAA,EAAA;AACzC,GAIMG,IAA6B;AAAA,EACjC,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,mBAAmB;AACrB,GAEaC,IAAiCA,CAACC,MAAqCF,EAA2BE,CAAM,GAyP/GC,IAAoBA,CAACC,GAAqBC,OAA4C;AAAA,EAC1FD,IAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,SAAS,CAAA;AACX,IAEaC,IAA+BA,CAC1CC,IAA8D,OAC1C;AACpB,QAAMC,IAAeA,CAACL,MAAwBD,EAAkBC,GAAII,EAAiBJ,CAAE,KAAK,EAAI;AAEhG,SAAO;AAAA,IACLM,SAAS;AAAA,MACPC,KAAKF,EAAa,KAAK;AAAA,MACvBG,UAAUH,EAAa,UAAU;AAAA,MACjC,kBAAkBA,EAAa,gBAAgB;AAAA,MAC/CI,SAASJ,EAAa,SAAS;AAAA,MAC/B,eAAeA,EAAa,aAAa;AAAA,MACzC,kBAAkBA,EAAa,gBAAgB;AAAA,MAC/Cd,MAAMc,EAAa,MAAM;AAAA,MACzB,mBAAmBA,EAAa,iBAAiB;AAAA,MACjD,oBAAoBA,EAAa,kBAAkB;AAAA,MACnD,uBAAuBA,EAAa,qBAAqB;AAAA,MACzDX,WAAWW,EAAa,WAAW;AAAA,MACnC,wBAAwBA,EAAa,sBAAsB;AAAA,MAC3D,eAAeA,EAAa,aAAa;AAAA,MACzC,kBAAkBA,EAAa,gBAAgB;AAAA,MAC/CV,MAAMU,EAAa,MAAM;AAAA,MACzB,mBAAmBA,EAAa,iBAAiB;AAAA,MACjDK,QAAQL,EAAa,QAAQ;AAAA,MAC7BM,SAASN,EAAa,SAAS;AAAA,IAAA;AAAA,EACjC;AAEJ,GAEMO,IAAsBA,CAACV,GAAqCW,MAAqB;AACrF,WAASC,IAAQZ,EAAQa,SAAS,GAAGD,KAAS,GAAGA,KAAS;AACxD,QAAIZ,EAAQY,CAAK,GAAGD,aAAaA,EAAU,QAAOC;AAEpD,SAAO;AACT,GAEME,IAAqBA,CAACC,MAA4B;AACtD,QAAMlC,wBAAgBmC,IAAAA,GAChBZ,IAAU,CAAA;AAChB,MAAIa,IAAiBF,EAAOE,gBACxBC,IAAoBH,EAAOG;AAE/B,aAAW,CAACpB,GAAIF,CAAM,KAAKuB,OAAOC,QAAQL,EAAOX,OAAO,GAAgD;AACtG,UAAMiB,IAAyBzB,EAAOqB,gBAChCK,IAAcD,IAAyBX,EAAoBd,EAAOI,SAASqB,CAAsB,IAAI,IACrGrB,IAAUJ,EAAOI,QAAQuB,IAAKC,CAAAA,MAAc;AAChD,YAAMb,IAAW/B,EAAsBC,GAAW2C,EAAU1C,gBAAgB0C,EAAUb,QAAQ;AAC9F9B,aAAAA,EAAU4C,IAAId,CAAQ,GACfA,MAAaa,EAAUb,WAAWa,IAAY;AAAA,QAAE,GAAGA;AAAAA,QAAWb,UAAAA;AAAAA,MAAAA;AAAAA,IACvE,CAAC,GACKe,IAA2BJ,KAAe,IAAItB,EAAQsB,CAAW,GAAGX,WAAWU;AACrFjB,IAAAA,EAAQN,CAAE,IAAI;AAAA,MAAE,GAAGF;AAAAA,MAAQI,SAAAA;AAAAA,MAASiB,gBAAgBS;AAAAA,IAAAA,GAEhDL,KAA0BN,EAAOE,mBAAmBI,KAA0BC,KAAe,MAC/FL,IAAiBS,GACjBR,IAAoBlB,EAAQsB,CAAW,GAAGK;AAAAA,EAE9C;AAEA,SAAO;AAAA,IAAE,GAAGZ;AAAAA,IAAQX,SAAAA;AAAAA,IAASa,gBAAAA;AAAAA,IAAgBC,mBAAAA;AAAAA,EAAAA;AAC/C,GAEaU,IAA0BA,CACrCC,GACA3B,IAA8D,OAC1C;AACpB,QAAM4B,IAAW7B,EAA6BC,CAAgB;AAC9D,SAAOY,EAAmB;AAAA,IACxB,GAAGe;AAAAA,IACHzB,SAAS;AAAA,MAAE,GAAG0B,EAAS1B;AAAAA,MAAS,GAAGyB,EAAUzB;AAAAA,IAAAA;AAAAA,EAAQ,CACtD;AACH;"}
1
+ {"version":3,"file":"layout-types-DMoZz38-.js","sources":["../src/core/registries/layout/widget-id.ts","../src/core/registries/layout/layout-types.ts"],"sourcesContent":["export const resolveUniqueWidgetId = (\n widgetIds: ReadonlySet<string>,\n contributionId: string,\n preferredId = contributionId,\n) => {\n if (!widgetIds.has(preferredId)) return preferredId;\n\n let suffix = 1;\n while (widgetIds.has(`${contributionId}:${suffix}`)) suffix += 1;\n return `${contributionId}:${suffix}`;\n};\n","import type { ContributionSource, RegisteredContributionMetadata } from \"../../shared/contributions/metadata\";\nimport type { ResourceRef } from \"../resources/resource-registry\";\nimport { resolveUniqueWidgetId } from \"./widget-id\";\n\nexport const workbenchRegions = [\n \"nav\",\n \"activity\",\n \"sidenav-header\",\n \"sidenav\",\n \"main-header\",\n \"main-left-menu\",\n \"main\",\n \"main-right-menu\",\n \"secondary-header\",\n \"secondary-left-menu\",\n \"secondary\",\n \"secondary-right-menu\",\n \"side-header\",\n \"side-left-menu\",\n \"side\",\n \"side-right-menu\",\n \"status\",\n \"overlay\",\n] as const;\n\nexport type WorkbenchRegion = (typeof workbenchRegions)[number];\n\nexport const workbenchPanelRegions = [\"main\", \"secondary\", \"side\"] as const satisfies readonly WorkbenchRegion[];\n\nexport type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];\n\nexport type WorkbenchPanelMenuSide = \"left\" | \"right\";\n\nexport const workbenchPanelMenuRegions = {\n main: { left: \"main-left-menu\", right: \"main-right-menu\" },\n secondary: { left: \"secondary-left-menu\", right: \"secondary-right-menu\" },\n side: { left: \"side-left-menu\", right: \"side-right-menu\" },\n} as const satisfies Record<WorkbenchPanelRegion, Record<WorkbenchPanelMenuSide, WorkbenchRegion>>;\n\nexport type WorkbenchPanelMenuRegion = (typeof workbenchPanelMenuRegions)[WorkbenchPanelRegion][WorkbenchPanelMenuSide];\n\nconst workbenchPanelByMenuRegion = {\n \"main-left-menu\": \"main\",\n \"main-right-menu\": \"main\",\n \"secondary-left-menu\": \"secondary\",\n \"secondary-right-menu\": \"secondary\",\n \"side-left-menu\": \"side\",\n \"side-right-menu\": \"side\",\n} as const satisfies Record<WorkbenchPanelMenuRegion, WorkbenchPanelRegion>;\n\nexport const getWorkbenchPanelForMenuRegion = (region: WorkbenchPanelMenuRegion) => workbenchPanelByMenuRegion[region];\n\nexport interface WorkbenchRegionSize {\n defaultPx?: number;\n minPx?: number;\n maxPx?: number;\n}\n\nexport type WidgetReusePolicy = \"resource\" | \"none\";\n\nexport type WidgetMountStrategy = \"active\" | \"keep-mounted\";\n\nexport type WorkbenchPanelReusePolicy = WidgetReusePolicy;\n\nexport type WorkbenchPanelMountStrategy = WidgetMountStrategy;\n\nexport type WorkbenchFloatingPanelVisibility = \"visible\" | \"hidden\";\n\nexport type WorkbenchWidgetRole = \"content\" | \"location\" | \"sub-panel\" | \"panel-menu\";\n\nexport type WorkbenchTabRetention = \"preview\" | \"persistent\";\n\nexport type WorkbenchTabPosition = \"start\" | \"end\" | { beforeWidgetId: string } | { afterWidgetId: string };\n\nexport interface WorkbenchLocationEligibility {\n modeIds?: string[];\n resourceKinds?: string[];\n resourceIds?: string[];\n canOpen?(resource: ResourceRef): boolean;\n}\n\nexport type WorkbenchPanelMenuOwner =\n | { level: \"panel\"; contributionId?: string }\n | { level: \"sub-panel\"; contributionId: string };\n\nexport interface WorkbenchWidgetTab {\n contentRendererId?: string;\n /** Custom actions shown when the user activates an already-active tab. */\n customMenuRendererId?: string;\n}\n\nexport type WorkbenchPanelTab = WorkbenchWidgetTab;\n\nexport interface WidgetContribution {\n id: string;\n title: string;\n icon?: string;\n region: WorkbenchRegion;\n fallbackRegion?: WorkbenchRegion;\n singleton?: boolean;\n reuse?: WidgetReusePolicy;\n mountStrategy?: WidgetMountStrategy;\n closable?: boolean;\n // Non-closeable widgets opt into the tab visibility menu; closeable widgets\n // ignore this and use the X button for dismissal.\n hiddenByDefault?: boolean;\n // A Location that presents only its Sub Panels: it renders no tab and no\n // content of its own — establishing it activates its first Sub Panel.\n subPanelsOnly?: boolean;\n regionSize?: WorkbenchRegionSize;\n regionCollapsible?: boolean;\n headerBorderBottom?: boolean;\n floatingPanels?: WorkbenchFloatingPanelVisibility;\n resourceKinds?: string[];\n priority?: number;\n rendererId: string;\n openCommandId?: string;\n eligibleLocations?: WorkbenchLocationEligibility;\n panelMenuOwner?: WorkbenchPanelMenuOwner;\n tab?: WorkbenchWidgetTab;\n config?: unknown;\n canOpen?(resource: ResourceRef): boolean;\n}\n\nexport interface WorkbenchPanelMenuDefinition {\n id: string;\n title: string;\n icon?: string;\n side: WorkbenchPanelMenuSide;\n singleton?: boolean;\n reuse?: WorkbenchPanelReusePolicy;\n mountStrategy?: WorkbenchPanelMountStrategy;\n hiddenByDefault?: boolean;\n regionSize?: WorkbenchRegionSize;\n regionCollapsible?: boolean;\n headerBorderBottom?: boolean;\n rendererId: string;\n priority?: number;\n config?: unknown;\n}\n\ninterface WorkbenchPanelMenusContribution {\n panelMenus?: readonly WorkbenchPanelMenuDefinition[];\n}\n\nexport interface WorkbenchPanelContribution {\n id: string;\n title: string;\n icon?: string;\n region: WorkbenchRegion;\n fallbackRegion?: WorkbenchRegion;\n rendererId: string;\n singleton?: boolean;\n reuse?: WorkbenchPanelReusePolicy;\n mountStrategy?: WorkbenchPanelMountStrategy;\n hiddenByDefault?: boolean;\n subPanelsOnly?: boolean;\n regionSize?: WorkbenchRegionSize;\n regionCollapsible?: boolean;\n headerBorderBottom?: boolean;\n floatingPanels?: WorkbenchFloatingPanelVisibility;\n resourceKinds?: string[];\n eligibleLocations?: WorkbenchLocationEligibility;\n priority?: number;\n openCommandId?: string;\n tab?: WorkbenchPanelTab;\n config?: unknown;\n canOpen?(resource: ResourceRef): boolean;\n ownerId?: string;\n source?: ContributionSource;\n panelMenus?: readonly WorkbenchPanelMenuDefinition[];\n}\n\nexport type WorkbenchLocationContribution = WidgetContribution & WorkbenchPanelMenusContribution;\n\nexport type WorkbenchSubPanelContribution = Omit<WidgetContribution, \"region\" | \"fallbackRegion\"> & {\n region: WorkbenchPanelRegion;\n fallbackRegion?: WorkbenchPanelRegion;\n} & WorkbenchPanelMenusContribution;\n\nexport type WorkbenchPanelMenuContribution = Omit<WidgetContribution, \"region\" | \"fallbackRegion\"> & {\n region: WorkbenchPanelMenuRegion;\n fallbackRegion?: WorkbenchPanelMenuRegion;\n};\n\nexport type RegisteredWidgetContribution = Omit<WidgetContribution, \"priority\" | \"singleton\" | \"reuse\"> & {\n ownedPanelMenuIds?: readonly string[];\n singleton: boolean;\n reuse: WidgetReusePolicy;\n} & RegisteredContributionMetadata;\n\nexport interface PlaceholderContribution {\n id: string;\n title: string;\n region: WorkbenchRegion;\n rendererId: string;\n regionSize?: WorkbenchRegionSize;\n regionCollapsible?: boolean;\n config?: unknown;\n priority?: number;\n}\n\nexport type RegisteredPlaceholderContribution = Omit<PlaceholderContribution, \"priority\"> &\n RegisteredContributionMetadata;\n\nexport interface WorkbenchWidgetPlacement {\n widgetId: string;\n contributionId: string;\n ownerId?: string;\n source?: ContributionSource;\n resource?: ResourceRef;\n resourceUri?: string;\n ownerResourceUri?: string;\n title?: string;\n pinned?: boolean;\n closable?: boolean;\n mountStrategy?: WidgetMountStrategy;\n hiddenByDefault?: boolean;\n tabRetention?: WorkbenchTabRetention;\n tab?: WorkbenchWidgetTab;\n role?: WorkbenchWidgetRole;\n}\n\nexport interface WorkbenchPanelInstance {\n instanceId: string;\n panelId: string;\n ownerId?: string;\n source?: ContributionSource;\n resource?: ResourceRef;\n resourceUri?: string;\n ownerResourceUri?: string;\n title?: string;\n pinned?: boolean;\n closable: boolean;\n mountStrategy?: WorkbenchPanelMountStrategy;\n hiddenByDefault?: boolean;\n tabRetention?: WorkbenchTabRetention;\n tab?: WorkbenchPanelTab;\n}\n\nexport interface WorkbenchRegionState {\n id: WorkbenchRegion;\n visible: boolean;\n size?: number;\n widgets: WorkbenchWidgetPlacement[];\n activeWidgetId?: string;\n}\n\nexport interface WorkbenchLayout {\n regions: Record<WorkbenchRegion, WorkbenchRegionState>;\n locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;\n activeWidgetId?: string;\n activeLocationWidgetId?: string;\n activeResourceUri?: string;\n}\n\nexport interface WorkbenchLayoutStoreState {\n layout: WorkbenchLayout;\n widgets: Record<string, RegisteredWidgetContribution>;\n placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;\n}\n\nexport interface OpenWidgetInput {\n resource?: ResourceRef;\n title?: string;\n region?: WorkbenchRegion;\n // The role this placement takes, when the caller knows it better than the widget\n // does. A panel is a Location in main and a Sub Panel elsewhere, so a placement made\n // by the composition resolver carries the role its region implies.\n role?: WorkbenchWidgetRole;\n ownerId?: string;\n source?: ContributionSource;\n pinned?: boolean;\n closable?: boolean;\n mountStrategy?: WidgetMountStrategy;\n hiddenByDefault?: boolean;\n tabRetention?: WorkbenchTabRetention;\n tabPosition?: WorkbenchTabPosition;\n tab?: WorkbenchWidgetTab;\n replaceActive?: boolean;\n replaceWidgetId?: string;\n}\n\nexport type WorkbenchPanelOpenStrategy =\n | { kind: \"persistent\"; position?: WorkbenchTabPosition }\n | { kind: \"replace-active\" }\n | { kind: \"replace-panel\"; instanceId: string; retention?: WorkbenchTabRetention }\n | { kind: \"preview\"; position?: WorkbenchTabPosition };\n\nexport interface OpenWorkbenchPanelInput {\n resource?: ResourceRef;\n title?: string;\n region?: WorkbenchRegion;\n role?: WorkbenchWidgetRole;\n pinned?: boolean;\n closable?: boolean;\n mountStrategy?: WorkbenchPanelMountStrategy;\n hiddenByDefault?: boolean;\n tab?: WorkbenchPanelTab;\n strategy?: WorkbenchPanelOpenStrategy;\n}\n\nconst createRegionState = (id: WorkbenchRegion, visible: boolean): WorkbenchRegionState => ({\n id,\n visible,\n widgets: [],\n});\n\nexport const createDefaultWorkbenchLayout = (\n regionVisibility: Partial<Record<WorkbenchRegion, boolean>> = {},\n): WorkbenchLayout => {\n const createRegion = (id: WorkbenchRegion) => createRegionState(id, regionVisibility[id] ?? true);\n\n return {\n regions: {\n nav: createRegion(\"nav\"),\n activity: createRegion(\"activity\"),\n \"sidenav-header\": createRegion(\"sidenav-header\"),\n sidenav: createRegion(\"sidenav\"),\n \"main-header\": createRegion(\"main-header\"),\n \"main-left-menu\": createRegion(\"main-left-menu\"),\n main: createRegion(\"main\"),\n \"main-right-menu\": createRegion(\"main-right-menu\"),\n \"secondary-header\": createRegion(\"secondary-header\"),\n \"secondary-left-menu\": createRegion(\"secondary-left-menu\"),\n secondary: createRegion(\"secondary\"),\n \"secondary-right-menu\": createRegion(\"secondary-right-menu\"),\n \"side-header\": createRegion(\"side-header\"),\n \"side-left-menu\": createRegion(\"side-left-menu\"),\n side: createRegion(\"side\"),\n \"side-right-menu\": createRegion(\"side-right-menu\"),\n status: createRegion(\"status\"),\n overlay: createRegion(\"overlay\"),\n },\n };\n};\n\nconst findLastWidgetIndex = (widgets: WorkbenchWidgetPlacement[], widgetId: string) => {\n for (let index = widgets.length - 1; index >= 0; index -= 1) {\n if (widgets[index]?.widgetId === widgetId) return index;\n }\n return -1;\n};\n\nconst normalizeWidgetIds = (layout: WorkbenchLayout) => {\n const widgetIds = new Set<string>();\n const regions = {} as WorkbenchLayout[\"regions\"];\n let activeWidgetId = layout.activeWidgetId;\n let activeResourceUri = layout.activeResourceUri;\n\n for (const [id, region] of Object.entries(layout.regions) as [WorkbenchRegion, WorkbenchRegionState][]) {\n const originalActiveWidgetId = region.activeWidgetId;\n const activeIndex = originalActiveWidgetId ? findLastWidgetIndex(region.widgets, originalActiveWidgetId) : -1;\n const widgets = region.widgets.map((placement) => {\n const widgetId = resolveUniqueWidgetId(widgetIds, placement.contributionId, placement.widgetId);\n widgetIds.add(widgetId);\n return widgetId === placement.widgetId ? placement : { ...placement, widgetId };\n });\n const normalizedActiveWidgetId = activeIndex >= 0 ? widgets[activeIndex]?.widgetId : originalActiveWidgetId;\n regions[id] = { ...region, widgets, activeWidgetId: normalizedActiveWidgetId };\n\n if (originalActiveWidgetId && layout.activeWidgetId === originalActiveWidgetId && activeIndex >= 0) {\n activeWidgetId = normalizedActiveWidgetId;\n activeResourceUri = widgets[activeIndex]?.resourceUri;\n }\n }\n\n return { ...layout, regions, activeWidgetId, activeResourceUri };\n};\n\nexport const mergeWithDefaultRegions = (\n persisted: WorkbenchLayout,\n regionVisibility: Partial<Record<WorkbenchRegion, boolean>> = {},\n): WorkbenchLayout => {\n const defaults = createDefaultWorkbenchLayout(regionVisibility);\n return normalizeWidgetIds({\n ...persisted,\n regions: { ...defaults.regions, ...persisted.regions },\n });\n};\n"],"names":["resolveUniqueWidgetId","widgetIds","contributionId","preferredId","has","suffix","workbenchRegions","workbenchPanelRegions","workbenchPanelMenuRegions","main","left","right","secondary","side","workbenchPanelByMenuRegion","getWorkbenchPanelForMenuRegion","region","createRegionState","id","visible","widgets","createDefaultWorkbenchLayout","regionVisibility","createRegion","regions","nav","activity","sidenav","status","overlay","findLastWidgetIndex","widgetId","index","length","normalizeWidgetIds","layout","Set","activeWidgetId","activeResourceUri","Object","entries","originalActiveWidgetId","activeIndex","map","placement","add","normalizedActiveWidgetId","resourceUri","mergeWithDefaultRegions","persisted","defaults"],"mappings":"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"}
package/dist/react.d.ts CHANGED
@@ -2,6 +2,7 @@ import { BoxProps } from '@chakra-ui/react';
2
2
  import { ComponentType } from 'react';
3
3
  import { Context } from 'react';
4
4
  import { FileIconThemePreferenceOption as FileIconThemePreferenceOption_2 } from '@pstdio/ui';
5
+ import { FileUploadValue } from '@pstdio/ui';
5
6
  import { IconProps } from '@chakra-ui/react';
6
7
  import { JSX } from 'react/jsx-runtime';
7
8
  import { JSXElementConstructor } from 'react';
@@ -111,7 +112,13 @@ declare interface Command {
111
112
  params?: CommandParamSchema;
112
113
  }
113
114
 
115
+ export declare interface CommandFilesParamValue {
116
+ refs: string[];
117
+ uploads: FileUploadValue[];
118
+ }
119
+
114
120
  declare interface CommandHandler<TArgs = unknown, TResult = unknown> {
121
+ prepareArgs?(args: TArgs, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: TArgs) => void): TArgs | Promise<TArgs>;
115
122
  execute(args: TArgs, context?: WorkbenchCommandExecutionContext): TResult | Promise<TResult>;
116
123
  isEnabled?(args: TArgs): boolean;
117
124
  isVisible?(args: TArgs): boolean;
@@ -168,6 +175,8 @@ declare interface CommandParamDescriptor {
168
175
  options?: CommandParamOption[];
169
176
  templateType?: string;
170
177
  resourceType?: string;
178
+ accept?: string;
179
+ multiple?: boolean;
171
180
  metadata?: Record<string, unknown>;
172
181
  }
173
182
 
@@ -208,7 +217,7 @@ declare interface CommandParamsRequest {
208
217
  context?: WorkbenchCommandExecutionContext;
209
218
  }
210
219
 
211
- export declare type CommandParamValue = string | boolean | string[] | undefined;
220
+ export declare type CommandParamValue = string | boolean | string[] | CommandFilesParamValue | undefined;
212
221
 
213
222
  declare interface CommandRegistry {
214
223
  store: WorkbenchStore<CommandRegistryStoreState>;
@@ -218,6 +227,7 @@ declare interface CommandRegistry {
218
227
  isCommandEnabled(id: string, args?: unknown): boolean;
219
228
  isCommandVisible(id: string, args?: unknown): boolean;
220
229
  isCommandToggled(id: string, args?: unknown): boolean;
230
+ prepareCommandArgs(id: string, args: unknown, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: unknown) => void): Promise<unknown>;
221
231
  executeCommand(id: string, args?: unknown, context?: WorkbenchCommandExecutionContext): Promise<unknown>;
222
232
  onDidExecuteError(listener: WorkbenchCommandExecutionErrorListener): Disposable_2;
223
233
  }
@@ -341,6 +351,8 @@ declare interface ControlsUpdateValueInput {
341
351
  resource?: ResourceRef;
342
352
  }
343
353
 
354
+ export declare const createCommandFilesParamValue: (input?: Partial<CommandFilesParamValue>) => CommandFilesParamValue;
355
+
344
356
  export declare const createControllerTerminalBridge: (terminal: WorkbenchTerminalController, options?: ControllerTerminalBridgeOptions) => TerminalBridge;
345
357
 
346
358
  export declare const createTreeContextMenuItems: (input: CreateTreeContextMenuItemsInput) => ListRowActionMenuItem[];
@@ -448,7 +460,7 @@ declare interface DataTableRendererContribution {
448
460
  emptyDescription?: string;
449
461
  executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
450
462
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
451
- onRowClick?: (row: DataTableRendererRow) => void;
463
+ onRowActivate?: (row: DataTableRendererRow) => Promise<void> | void;
452
464
  }
453
465
 
454
466
  declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
@@ -575,10 +587,23 @@ declare interface FileIconThemeRegistry {
575
587
 
576
588
  declare interface FileRendererContent {
577
589
  fileName?: string;
590
+ /** Workspace-relative path shown above the file preview. */
591
+ filePath?: string;
578
592
  mimeType?: string;
579
593
  content?: string;
580
594
  dataUrl?: string;
581
595
  placeholder?: string;
596
+ /** Override contribution-level save support for one loaded file. */
597
+ editable?: boolean;
598
+ /** Request Monaco for text that automatic dispatch would open as markdown. */
599
+ textRenderer?: "automatic" | "monaco";
600
+ /** Represent a deliberate no-file selection without an editable blank document. */
601
+ emptyState?: {
602
+ title: string;
603
+ description?: string;
604
+ };
605
+ /** Ordered backing-store revision when one is available. */
606
+ revision?: string;
582
607
  }
583
608
 
584
609
  declare interface FileRendererContribution {
@@ -588,35 +613,53 @@ declare interface FileRendererContribution {
588
613
  /** Resolve the file's content (and identity) for the bound resource. */
589
614
  load(resource: ResourceRef | undefined): Promise<FileRendererContent> | FileRendererContent;
590
615
  /** Persist edited text. Absent ⇒ read-only. Never called for images. */
591
- save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
616
+ save?(resource: ResourceRef | undefined, content: string, origin?: FileRendererRefreshOrigin): Promise<FileRendererSaveResult | undefined> | FileRendererSaveResult | void;
592
617
  }
593
618
 
594
619
  declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
595
620
  fileRendererId: string;
596
621
  }) => unknown;
597
622
 
598
- declare interface FileRendererRefreshEvent {
623
+ declare interface FileRendererRefreshEnvelope {
624
+ resourceUri?: string;
625
+ origin?: FileRendererRefreshOrigin;
626
+ revision?: string;
627
+ }
628
+
629
+ declare interface FileRendererRefreshEvent extends FileRendererRefreshEnvelope {
599
630
  fileRendererId: string;
600
631
  }
601
632
 
602
633
  declare type FileRendererRefreshListener = (event: FileRendererRefreshEvent) => void;
603
634
 
635
+ declare interface FileRendererRefreshOrigin {
636
+ rendererId: string;
637
+ instanceId: string;
638
+ operationId: string;
639
+ }
640
+
604
641
  declare interface FileRendererRegistry {
605
642
  fileRendererStore: WorkbenchStore<FileRendererStoreState>;
606
643
  registerFileRenderer(contribution: FileRendererContribution, metadata?: ContributionMetadata): Disposable_2;
607
644
  setFileRendererImplementation(impl: FileRendererImplementation): void;
608
645
  getFileRenderer(id: string): RegisteredFileRendererContribution | undefined;
609
646
  listFileRenderers(): RegisteredFileRendererContribution[];
610
- refreshFileRenderer(id: string): void;
647
+ refreshFileRenderer(id: string, event?: FileRendererRefreshEnvelope): void;
611
648
  onDidRefreshFileRenderer(listener: FileRendererRefreshListener): Disposable_2;
612
649
  }
613
650
 
651
+ declare interface FileRendererSaveResult {
652
+ revision?: string;
653
+ }
654
+
614
655
  declare interface FileRendererStoreState {
615
656
  renderers: Record<string, RegisteredFileRendererContribution>;
616
657
  }
617
658
 
618
659
  declare interface HistoryController {
619
660
  store: WorkbenchStore<HistoryStoreState>;
661
+ /** Snapshot the history for a compound navigation; the returned function restores it. */
662
+ createCheckpoint(): () => void;
620
663
  goBack(): HistoryEntry | undefined;
621
664
  goForward(): HistoryEntry | undefined;
622
665
  goPrevious(): HistoryEntry | undefined;
@@ -638,12 +681,16 @@ declare interface HistoryStoreState {
638
681
  hydrating: boolean;
639
682
  }
640
683
 
684
+ export declare const isCommandFilesParamValue: (value: unknown) => value is CommandFilesParamValue;
685
+
641
686
  export declare const isSettingsScopeVisible: (scope: SettingsScope | undefined, hasProjectScope: boolean) => boolean;
642
687
 
643
688
  declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
644
689
  id: string;
645
690
  title: string;
646
691
  resourceKind?: string;
692
+ /** Host-owned scope for persisted display settings. */
693
+ storageScope?: string;
647
694
  /**
648
695
  * Declarative attribute schema. The renderer dispatches filter / group /
649
696
  * sort / display / inline-edit behavior on each descriptor's `type.kind`.
@@ -671,8 +718,8 @@ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = Ka
671
718
  */
672
719
  executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
673
720
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
674
- /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
675
- onRowClick?: (row: TRow) => void;
721
+ /** Row activation surfaced by the renderer (mirrored from <KanbanRenderer>). */
722
+ onRowActivate?: (row: TRow) => Promise<void> | void;
676
723
  /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
677
724
  getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
678
725
  /**
@@ -766,7 +813,7 @@ declare interface KanbanRendererRow {
766
813
  title: string;
767
814
  /**
768
815
  * Optional navigation handle. When set, the renderer's default click handler
769
- * routes through the contribution's onRowClick (which typically opens the
816
+ * routes through the contribution's onRowActivate (which typically opens the
770
817
  * resource via the workbench).
771
818
  */
772
819
  resource?: unknown;
@@ -871,6 +918,16 @@ declare interface LayoutModel {
871
918
  carryRegionState?: readonly WorkbenchRegion_2[];
872
919
  }): void;
873
920
  getPersistenceScope(): LayoutScope | undefined;
921
+ /** True when the current persistence scope already stores a layout. A new scope returns false. */
922
+ /** Whether anything is stored for the active scope right now. */
923
+ hasPersistedLayout(): boolean;
924
+ /**
925
+ * Whether the active scope was entered with a layout the user already had. Unlike
926
+ * `hasPersistedLayout`, writes made while entering a mode do not change the answer.
927
+ */
928
+ enteredWithPersistedLayout(): boolean;
929
+ /** Moves owned panel menus beside their owner's current region and removes orphan menus. */
930
+ reconcilePanelMenus(): void;
874
931
  onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
875
932
  dispose(): void;
876
933
  };
@@ -987,6 +1044,7 @@ declare interface OpenWidgetInput {
987
1044
  resource?: ResourceRef;
988
1045
  title?: string;
989
1046
  region?: WorkbenchRegion_2;
1047
+ role?: WorkbenchWidgetRole;
990
1048
  ownerId?: string;
991
1049
  source?: ContributionSource;
992
1050
  pinned?: boolean;
@@ -1004,7 +1062,9 @@ declare interface OpenWorkbenchPanelInput {
1004
1062
  resource?: ResourceRef;
1005
1063
  title?: string;
1006
1064
  region?: WorkbenchRegion_2;
1065
+ role?: WorkbenchWidgetRole;
1007
1066
  pinned?: boolean;
1067
+ closable?: boolean;
1008
1068
  mountStrategy?: WorkbenchPanelMountStrategy;
1009
1069
  hiddenByDefault?: boolean;
1010
1070
  tab?: WorkbenchPanelTab;
@@ -1078,7 +1138,7 @@ declare interface PreferenceScopeRef {
1078
1138
  declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
1079
1139
 
1080
1140
  /** Narrows an editor value back to what a command param can carry. */
1081
- export declare const readCommandParamValue: (value: ParamValue) => CommandParamValue;
1141
+ export declare const readCommandParamValue: (value: ParamValue, entry?: CommandParamEntry) => CommandParamValue;
1082
1142
 
1083
1143
  declare interface RegisteredCommand extends RegisteredContributionMetadata {
1084
1144
  command: Command;
@@ -1141,7 +1201,6 @@ declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority"
1141
1201
  ownedPanelMenuIds?: readonly string[];
1142
1202
  singleton: boolean;
1143
1203
  reuse: WidgetReusePolicy;
1144
- role: WorkbenchWidgetRole;
1145
1204
  } & RegisteredContributionMetadata;
1146
1205
 
1147
1206
  declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
@@ -1157,7 +1216,9 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
1157
1216
 
1158
1217
  declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1159
1218
 
1160
- declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
1219
+ declare type ResolvedResourcePresenter = Omit<ResourcePresenter, "priority"> & {
1220
+ priority: number;
1221
+ };
1161
1222
 
1162
1223
  declare interface ResourceBrowseEntry {
1163
1224
  resource: ResourceRef;
@@ -1179,6 +1240,14 @@ declare interface ResourceContextAction {
1179
1240
  separatorBefore?: boolean;
1180
1241
  }
1181
1242
 
1243
+ declare interface ResourceHierarchyCycle {
1244
+ code: typeof resourceHierarchyCycleCode;
1245
+ path: ResourceRef[];
1246
+ repeatedUri: string;
1247
+ }
1248
+
1249
+ declare const resourceHierarchyCycleCode = "resource_hierarchy_cycle";
1250
+
1182
1251
  declare interface ResourceHierarchyProvider {
1183
1252
  id: string;
1184
1253
  priority?: number;
@@ -1211,6 +1280,7 @@ declare interface ResourcePresenter {
1211
1280
  priority?: number;
1212
1281
  canOpen(resource: ResourceRef): boolean;
1213
1282
  open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1283
+ afterOpen?(resource: ResourceRef, instance: WorkbenchPanelInstance, input: OpenResourceInput): void;
1214
1284
  }
1215
1285
 
1216
1286
  declare interface ResourceProvider {
@@ -1251,6 +1321,7 @@ declare interface ResourceRegistry {
1251
1321
  registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1252
1322
  listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1253
1323
  walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1324
+ onDidDetectHierarchyCycle(listener: (cycle: ResourceHierarchyCycle) => void): Disposable_2;
1254
1325
  isOpeningResource(): boolean;
1255
1326
  openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1256
1327
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
@@ -1440,11 +1511,13 @@ declare interface TreeNode {
1440
1511
  target?: NavigationTarget;
1441
1512
  /** Visual row variant for non-data rows such as placeholders. */
1442
1513
  rowVariant?: TreeNodeRowVariant;
1514
+ inlineInput?: TreeNodeInlineInput;
1443
1515
  actions?: TreeAction[];
1444
1516
  contextMenuActions?: TreeAction[];
1445
1517
  contextMenuPath?: MenuPath;
1446
1518
  menuPath?: MenuPath;
1447
1519
  menuPlacement?: "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "left-start";
1520
+ showContextMenuTrigger?: boolean;
1448
1521
  collapsible?: boolean;
1449
1522
  disabled?: boolean;
1450
1523
  children?: TreeNode[];
@@ -1455,6 +1528,18 @@ declare interface TreeNode {
1455
1528
  canHide?: boolean;
1456
1529
  /** When false, the node stays fixed within its Sidenav group. */
1457
1530
  canReorder?: boolean;
1531
+ /** Allow this node to be moved to another tree location. */
1532
+ canDrag?: boolean;
1533
+ /** Allow movable nodes to be dropped on this node. */
1534
+ canDrop?: boolean;
1535
+ }
1536
+
1537
+ declare interface TreeNodeInlineInput {
1538
+ ariaLabel: string;
1539
+ defaultValue?: string;
1540
+ placeholder?: string;
1541
+ onCommit(value: string): Promise<void> | void;
1542
+ onCancel?(): void;
1458
1543
  }
1459
1544
 
1460
1545
  declare type TreeNodeRowVariant = "empty-state";
@@ -1463,6 +1548,8 @@ declare interface TreeRendererContribution {
1463
1548
  id: string;
1464
1549
  title: string;
1465
1550
  icon?: string;
1551
+ searchable?: boolean;
1552
+ searchPlaceholder?: string;
1466
1553
  when?: string;
1467
1554
  defaultExpandedSectionIds?: string[];
1468
1555
  defaultExpandedNodeIds?: string[];
@@ -1470,6 +1557,7 @@ declare interface TreeRendererContribution {
1470
1557
  getHeader?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1471
1558
  getFooter?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1472
1559
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1560
+ moveNode?(source: TreeNode, target: TreeNode | undefined, ctx: TreeContext): Promise<void> | void;
1473
1561
  }
1474
1562
 
1475
1563
  declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
@@ -1576,7 +1664,6 @@ declare interface WidgetContribution {
1576
1664
  priority?: number;
1577
1665
  rendererId: string;
1578
1666
  openCommandId?: string;
1579
- role?: WorkbenchWidgetRole;
1580
1667
  eligibleLocations?: WorkbenchLocationEligibility;
1581
1668
  panelMenuOwner?: WorkbenchPanelMenuOwner;
1582
1669
  tab?: WorkbenchWidgetTab;
@@ -1713,6 +1800,20 @@ declare interface WorkbenchCommandParamsRequest {
1713
1800
  context?: WorkbenchCommandExecutionContext;
1714
1801
  }
1715
1802
 
1803
+ declare interface WorkbenchCompositionAddablePanel extends WorkbenchModeAddablePanel {
1804
+ contribution: RegisteredWidgetContribution;
1805
+ }
1806
+
1807
+ declare interface WorkbenchCompositionController {
1808
+ panelsFor(region: WorkbenchPanelRegion): WorkbenchCompositionRegionPanels;
1809
+ }
1810
+
1811
+ declare interface WorkbenchCompositionRegionPanels {
1812
+ open: readonly WorkbenchWidgetPlacement[];
1813
+ addable: readonly WorkbenchCompositionAddablePanel[];
1814
+ closable: readonly string[];
1815
+ }
1816
+
1716
1817
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1717
1818
  host: WorkbenchHost;
1718
1819
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
@@ -1724,6 +1825,7 @@ declare interface WorkbenchCoreContributionContext {
1724
1825
  commandPalette: WorkbenchCommandPaletteController;
1725
1826
  commandPaletteResources: CommandPaletteResourceRegistry;
1726
1827
  commands: CommandRegistry;
1828
+ composition: WorkbenchCompositionController;
1727
1829
  context: ContextKeyService;
1728
1830
  focus: WorkbenchFocusController;
1729
1831
  history: HistoryController;
@@ -1732,6 +1834,7 @@ declare interface WorkbenchCoreContributionContext {
1732
1834
  layout: WorkbenchLayoutModel;
1733
1835
  modes: WorkbenchModeRegistry;
1734
1836
  navigation: NavigationRegistry;
1837
+ navigator: WorkbenchNavigator;
1735
1838
  notifications: NotificationRegistry;
1736
1839
  panels: WorkbenchPanelsController;
1737
1840
  preferences: PreferenceRegistry;
@@ -1859,7 +1962,7 @@ declare interface WorkbenchLayoutStoreState {
1859
1962
  placeholders: Partial<Record<WorkbenchRegion_2, RegisteredPlaceholderContribution>>;
1860
1963
  }
1861
1964
 
1862
- declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
1965
+ declare type WorkbenchLocationContribution = WidgetContribution & WorkbenchPanelMenusContribution;
1863
1966
 
1864
1967
  declare interface WorkbenchLocationEligibility {
1865
1968
  modeIds?: string[];
@@ -1900,15 +2003,31 @@ declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
1900
2003
 
1901
2004
  declare type WorkbenchModeActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1902
2005
 
2006
+ declare interface WorkbenchModeAddablePanel {
2007
+ panelId: string;
2008
+ region: WorkbenchPanelRegion;
2009
+ allowedRegions?: readonly WorkbenchRegion_2[];
2010
+ pinned?: boolean;
2011
+ }
2012
+
2013
+ declare interface WorkbenchModeAddablePanelContext {
2014
+ layout: WorkbenchLayout;
2015
+ resource?: ResourceRef;
2016
+ }
2017
+
1903
2018
  declare type WorkbenchModeChangeListener = () => void;
1904
2019
 
1905
2020
  declare interface WorkbenchModeContribution {
1906
2021
  id: string;
1907
2022
  label?: string;
1908
2023
  panels?: readonly WorkbenchPanelRegion[];
2024
+ resourceKinds?: readonly string[];
2025
+ defaultResource?: ResourceRef | (() => Promise<ResourceRef | undefined> | ResourceRef | undefined);
2026
+ listAddablePanels?(context: WorkbenchModeAddablePanelContext): readonly WorkbenchModeAddablePanel[];
1909
2027
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1910
2028
  seed?(ctx: WorkbenchModeActivationContext): void;
1911
2029
  enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
2030
+ reconcile?(ctx: WorkbenchModeActivationContext): void;
1912
2031
  }
1913
2032
 
1914
2033
  declare interface WorkbenchModeRegistry {
@@ -1955,6 +2074,14 @@ export declare interface WorkbenchModuleHostRegistration {
1955
2074
  disposable: Disposable_2;
1956
2075
  }
1957
2076
 
2077
+ declare interface WorkbenchNavigationCommit {
2078
+ modeId: string | undefined;
2079
+ resource: ResourceRef | undefined;
2080
+ replaceActive: boolean;
2081
+ }
2082
+
2083
+ declare type WorkbenchNavigationDiagnosticCode = "navigation_mode_missing" | "navigation_resource_missing" | "navigation_resource_incompatible" | "navigation_default_missing" | "navigation_target_stale";
2084
+
1958
2085
  declare interface WorkbenchNavigationEntry {
1959
2086
  entryId: string;
1960
2087
  recordedAt: number;
@@ -1969,6 +2096,53 @@ declare interface WorkbenchNavigationEntry {
1969
2096
  closedSubPanel?: WorkbenchClosedSubPanel;
1970
2097
  }
1971
2098
 
2099
+ declare type WorkbenchNavigationResult = {
2100
+ ok: true;
2101
+ modeId: string | undefined;
2102
+ resource: ResourceRef | undefined;
2103
+ } | {
2104
+ ok: false;
2105
+ code: WorkbenchNavigationDiagnosticCode;
2106
+ message: string;
2107
+ };
2108
+
2109
+ declare interface WorkbenchNavigationTarget {
2110
+ modeId?: string;
2111
+ resource?: ResourceRef;
2112
+ replaceActive?: boolean;
2113
+ }
2114
+
2115
+ declare interface WorkbenchNavigator {
2116
+ configure(hooks: WorkbenchNavigatorHostHooks): void;
2117
+ getSelectedResource(): ResourceRef | undefined;
2118
+ open(target: WorkbenchNavigationTarget): Promise<WorkbenchNavigationResult>;
2119
+ commitContext(input: WorkbenchNavigatorCommitInput): WorkbenchNavigationResult;
2120
+ getLastResource(projectId: string | undefined, modeId: string): ResourceRef | undefined;
2121
+ forgetResource(uri: string): void;
2122
+ onDidCommit(listener: (commit: WorkbenchNavigationCommit) => void): {
2123
+ dispose(): void;
2124
+ };
2125
+ }
2126
+
2127
+ declare interface WorkbenchNavigatorCommitInput {
2128
+ modeId?: string | null;
2129
+ resource?: ResourceRef | null;
2130
+ replaceActive?: boolean;
2131
+ present?: boolean;
2132
+ }
2133
+
2134
+ declare interface WorkbenchNavigatorHostHooks {
2135
+ getProjectId?(): string | undefined;
2136
+ getSelectedResource?(): ResourceRef | undefined;
2137
+ interpretSelection?(resource: ResourceRef): ResourceRef | undefined;
2138
+ applySelection?(resource: ResourceRef | undefined): void;
2139
+ applyScope?(commit: WorkbenchNavigationCommit): void;
2140
+ applyBreadcrumb?(resource: ResourceRef | undefined): void;
2141
+ presentResource?(resource: ResourceRef, input: {
2142
+ replaceActive: boolean;
2143
+ }): Promise<unknown> | unknown;
2144
+ }
2145
+
1972
2146
  declare interface WorkbenchNotification {
1973
2147
  id?: string;
1974
2148
  level: WorkbenchNotificationLevel;
@@ -2021,6 +2195,7 @@ export declare interface WorkbenchOverlayWidgetConfig {
2021
2195
  scrollBehavior?: "inside" | "outside";
2022
2196
  closeOnEscape?: boolean;
2023
2197
  closeOnInteractOutside?: boolean;
2198
+ /** Controls dialog semantics. Every workbench overlay blocks background pointer input. */
2024
2199
  modal?: boolean;
2025
2200
  preventScroll?: boolean;
2026
2201
  trapFocus?: boolean;
@@ -2041,7 +2216,6 @@ declare interface WorkbenchPanelContribution {
2041
2216
  region: WorkbenchRegion_2;
2042
2217
  fallbackRegion?: WorkbenchRegion_2;
2043
2218
  rendererId: string;
2044
- closable: boolean;
2045
2219
  singleton?: boolean;
2046
2220
  reuse?: WorkbenchPanelReusePolicy;
2047
2221
  mountStrategy?: WorkbenchPanelMountStrategy;
@@ -2097,7 +2271,7 @@ declare interface WorkbenchPanelInstance_2 {
2097
2271
  tab?: WorkbenchPanelTab_2;
2098
2272
  }
2099
2273
 
2100
- declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2274
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
2101
2275
  region: WorkbenchPanelMenuRegion;
2102
2276
  fallbackRegion?: WorkbenchPanelMenuRegion;
2103
2277
  };
@@ -2355,7 +2529,7 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2355
2529
 
2356
2530
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2357
2531
 
2358
- declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2532
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
2359
2533
  region: WorkbenchPanelRegion;
2360
2534
  fallbackRegion?: WorkbenchPanelRegion;
2361
2535
  } & WorkbenchPanelMenusContribution;