@pstdio/workbench 0.3.0 → 0.5.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.
@@ -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 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 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: \"activate-or-open\"; position?: WorkbenchTabPosition }\n | { kind: \"replace-active\" }\n | { kind: \"replace-panel\"; instanceId: string }\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":"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"}
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":"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"}
package/dist/react.d.ts CHANGED
@@ -8,6 +8,7 @@ import { JSXElementConstructor } from 'react';
8
8
  import { ListRowActionMenuItem } from '@pstdio/ui';
9
9
  import { Param } from '@pstdio/ui';
10
10
  import { ParamEditorProps } from '@pstdio/ui';
11
+ import { ParamValue } from '@pstdio/ui';
11
12
  import { ReactElement } from 'react';
12
13
  import { ReactNode } from 'react';
13
14
  import { ReactPortal } from 'react';
@@ -185,9 +186,13 @@ export declare interface CommandParamFieldProps {
185
186
 
186
187
  export declare type CommandParamFieldRenderer = (props: CommandParamFieldProps) => ReactNode;
187
188
 
189
+ /** Required params carry the marker in their name — the editor has no required state. */
190
+ export declare const commandParamName: (entry: CommandParamEntry) => string;
191
+
188
192
  declare interface CommandParamOption {
189
193
  label: string;
190
194
  value: string;
195
+ icon?: string;
191
196
  }
192
197
 
193
198
  declare type CommandParamSchema = Record<string, CommandParamDescriptor>;
@@ -434,6 +439,8 @@ declare interface DataTableRendererContribution {
434
439
  title: string;
435
440
  resourceKind?: string;
436
441
  columns?: DataTableRendererColumn[];
442
+ selectionMode?: "none" | "multiple";
443
+ selectionActions?: DataTableRendererSelectionAction[];
437
444
  rowActions?: DataTableRendererRowAction[];
438
445
  initialPageSize?: number;
439
446
  pageSizeOptions?: number[];
@@ -486,6 +493,14 @@ declare interface DataTableRendererRowAction {
486
493
  run(row: DataTableRendererRow): Promise<void> | void;
487
494
  }
488
495
 
496
+ declare interface DataTableRendererSelectionAction {
497
+ id: string;
498
+ label: string;
499
+ icon?: unknown;
500
+ destructive?: boolean;
501
+ run(rows: DataTableRendererRow[]): Promise<void> | void;
502
+ }
503
+
489
504
  declare interface DataTableRendererStoreState {
490
505
  renderers: Record<string, RegisteredDataTableRendererContribution>;
491
506
  }
@@ -1004,9 +1019,9 @@ declare type OpenWorkbenchTerminalOptions = OpenWorkbenchTerminalInput & {
1004
1019
  reveal?: boolean;
1005
1020
  };
1006
1021
 
1007
- declare type ParamValue = Parameters<NonNullable<ParamEditorProps["onChange"]>>[1];
1022
+ declare type ParamValue_2 = Parameters<NonNullable<ParamEditorProps["onChange"]>>[1];
1008
1023
 
1009
- export declare const paramValueToPreference: (schema: PreferencePropertySchema, value: ParamValue) => PreferenceValue;
1024
+ export declare const paramValueToPreference: (schema: PreferencePropertySchema, value: ParamValue_2) => PreferenceValue;
1010
1025
 
1011
1026
  declare interface PlaceholderContribution {
1012
1027
  id: string;
@@ -1062,6 +1077,9 @@ declare interface PreferenceScopeRef {
1062
1077
 
1063
1078
  declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
1064
1079
 
1080
+ /** Narrows an editor value back to what a command param can carry. */
1081
+ export declare const readCommandParamValue: (value: ParamValue) => CommandParamValue;
1082
+
1065
1083
  declare interface RegisteredCommand extends RegisteredContributionMetadata {
1066
1084
  command: Command;
1067
1085
  handler: CommandHandler;
@@ -1549,6 +1567,7 @@ declare interface WidgetContribution {
1549
1567
  mountStrategy?: WidgetMountStrategy;
1550
1568
  closable?: boolean;
1551
1569
  hiddenByDefault?: boolean;
1570
+ subPanelsOnly?: boolean;
1552
1571
  regionSize?: WorkbenchRegionSize;
1553
1572
  regionCollapsible?: boolean;
1554
1573
  headerBorderBottom?: boolean;
@@ -2010,6 +2029,8 @@ export declare interface WorkbenchOverlayWidgetConfig {
2010
2029
  contentHeight?: string;
2011
2030
  contentMaxHeight?: string;
2012
2031
  contentMinHeight?: string;
2032
+ contentWidth?: string;
2033
+ contentMaxWidth?: string;
2013
2034
  closeTriggerTop?: string;
2014
2035
  }
2015
2036
 
@@ -2025,6 +2046,7 @@ declare interface WorkbenchPanelContribution {
2025
2046
  reuse?: WorkbenchPanelReusePolicy;
2026
2047
  mountStrategy?: WorkbenchPanelMountStrategy;
2027
2048
  hiddenByDefault?: boolean;
2049
+ subPanelsOnly?: boolean;
2028
2050
  regionSize?: WorkbenchRegionSize;
2029
2051
  regionCollapsible?: boolean;
2030
2052
  headerBorderBottom?: boolean;
@@ -2133,13 +2155,14 @@ declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
2133
2155
  declare type WorkbenchPanelMountStrategy_2 = WidgetMountStrategy_2;
2134
2156
 
2135
2157
  declare type WorkbenchPanelOpenStrategy = {
2136
- kind: "activate-or-open";
2158
+ kind: "persistent";
2137
2159
  position?: WorkbenchTabPosition;
2138
2160
  } | {
2139
2161
  kind: "replace-active";
2140
2162
  } | {
2141
2163
  kind: "replace-panel";
2142
2164
  instanceId: string;
2165
+ retention?: WorkbenchTabRetention;
2143
2166
  } | {
2144
2167
  kind: "preview";
2145
2168
  position?: WorkbenchTabPosition;