@pstdio/workbench 0.7.1 → 0.9.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 (44) hide show
  1. package/README.md +39 -317
  2. package/dist/extensions.d.ts +1492 -698
  3. package/dist/extensions.js +1679 -1776
  4. package/dist/extensions.js.map +1 -1
  5. package/dist/file-renderer-view-kfJRY3yR.js +515 -0
  6. package/dist/file-renderer-view-kfJRY3yR.js.map +1 -0
  7. package/dist/index.d.ts +724 -599
  8. package/dist/index.js +5151 -2369
  9. package/dist/index.js.map +1 -1
  10. package/dist/react.d.ts +673 -550
  11. package/dist/react.js +3585 -3335
  12. package/dist/react.js.map +1 -1
  13. package/dist/storage.d.ts +120 -155
  14. package/dist/storage.js +135 -149
  15. package/dist/storage.js.map +1 -1
  16. package/dist/webview-runtime.d.ts +2 -5
  17. package/dist/webview-runtime.js +3 -3
  18. package/dist/webview-runtime.js.map +1 -1
  19. package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
  20. package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
  21. package/dist/workbench-renderers-DmsrBGC7.js +960 -0
  22. package/dist/workbench-renderers-DmsrBGC7.js.map +1 -0
  23. package/dist/workspaces-DJwFj8uq.js +1872 -0
  24. package/dist/workspaces-DJwFj8uq.js.map +1 -0
  25. package/package.json +6 -41
  26. package/dist/composition-resolver-types-CWykPyEK.js +0 -241
  27. package/dist/composition-resolver-types-CWykPyEK.js.map +0 -1
  28. package/dist/file-renderer-view-B6_iR4EN.js +0 -496
  29. package/dist/file-renderer-view-B6_iR4EN.js.map +0 -1
  30. package/dist/file-section-navigation-CfYqVObc.js +0 -30
  31. package/dist/file-section-navigation-CfYqVObc.js.map +0 -1
  32. package/dist/icon-B9XolQG8.js +0 -35
  33. package/dist/icon-B9XolQG8.js.map +0 -1
  34. package/dist/layout-types-DMoZz38-.js +0 -100
  35. package/dist/layout-types-DMoZz38-.js.map +0 -1
  36. package/dist/surface-map-C1pOTUmF.js +0 -52
  37. package/dist/surface-map-C1pOTUmF.js.map +0 -1
  38. package/dist/testing.d.ts +0 -2284
  39. package/dist/testing.js +0 -58
  40. package/dist/testing.js.map +0 -1
  41. package/dist/workbench-built-ins-BncLJfQA.js +0 -1175
  42. package/dist/workbench-built-ins-BncLJfQA.js.map +0 -1
  43. package/dist/workbench-menu-paths-Bb0ICxeG.js +0 -20
  44. package/dist/workbench-menu-paths-Bb0ICxeG.js.map +0 -1
@@ -1,241 +0,0 @@
1
- const v = (e) => [.../* @__PURE__ */ new Set([e.region, ...e.allowedRegions ?? []])], _ = (e) => e.show ? Array.isArray(e.show) ? e.show : [e.show] : [], q = (e, o, s, n) => {
2
- if (!o || s.resourceKind !== o.id) return !1;
3
- const l = o.slots[s.slot];
4
- return l ? s.extensionId !== o.extensionId && (!l.external || s.slot === "primary") ? (n.push({
5
- code: "extension_resource_slot_closed",
6
- message: `Slot "${s.slot}" is closed to external panels`,
7
- panelId: s.panel,
8
- slot: s.slot
9
- }), !1) : e.composition.panels.some((r) => r.id === s.panel) ? !0 : (n.push({
10
- code: "extension_panel_missing",
11
- message: `Resource panel "${s.id}" names unknown panel "${s.panel}"`,
12
- panelId: s.panel,
13
- slot: s.slot
14
- }), !1) : (n.push({
15
- code: "extension_resource_slot_missing",
16
- message: `Resource panel "${s.id}" names unknown slot "${s.slot}"`,
17
- panelId: s.panel,
18
- slot: s.slot
19
- }), !1);
20
- }, w = (e) => {
21
- const o = e.kind?.slots[e.slotName];
22
- if (!o)
23
- return e.diagnostics.push({
24
- code: "extension_resource_slot_missing",
25
- message: `Mode "${e.input.mode.id}" places unknown slot "${e.slotName}"`,
26
- slot: e.slotName
27
- }), [];
28
- const s = e.policy.required === !0;
29
- return s && o.cardinality === "many" && e.diagnostics.push({
30
- code: "extension_placement_required_invalid",
31
- message: `Required slot "${e.slotName}" has cardinality many; name a specific panel instead`,
32
- slot: e.slotName
33
- }), e.validEdges.filter((n) => n.slot === e.slotName && !e.overriddenPanels.has(n.panel)).filter((n) => n.extensionId === e.kind?.extensionId).map((n) => ({
34
- panelId: n.panel,
35
- slot: e.slotName,
36
- policy: e.policy,
37
- required: s && o.cardinality === "one"
38
- }));
39
- }, P = (e, o) => {
40
- const s = e.composition.resourceKinds.find((r) => r.id === e.context.resourceKind), n = _(o), l = n.find((r) => r.resourceKind === e.context.resourceKind);
41
- if (l && o.extensionId === s?.extensionId) return l;
42
- if (o.extensionId === e.mode.extensionId)
43
- return n.find((r) => r.resourceKind === void 0);
44
- }, b = (e, o, s) => {
45
- const n = e.composition.resourceKinds.find((t) => t.id === e.context.resourceKind), l = [], r = e.composition.resourcePanels.filter((t) => q(e, n, t, s)), a = {
46
- ...o?.panels ?? {},
47
- ...e.mode.modePanels ?? {}
48
- }, i = new Set(Object.keys(a));
49
- for (const [t, c] of Object.entries(o?.slots ?? {}))
50
- l.push(...w({
51
- diagnostics: s,
52
- kind: n,
53
- input: e,
54
- overriddenPanels: i,
55
- policy: c,
56
- slotName: t,
57
- validEdges: r
58
- }));
59
- for (const t of e.composition.panels) {
60
- const c = P(e, t);
61
- if (!c) continue;
62
- const p = a[t.id] ?? c;
63
- l.push({
64
- panelId: t.id,
65
- policy: p,
66
- base: c,
67
- required: p.required ?? c.required ?? !1
68
- });
69
- }
70
- const u = new Set(l.map((t) => t.panelId));
71
- for (const [t, c] of Object.entries(a)) {
72
- if (u.has(t)) continue;
73
- const p = r.find((d) => d.panel === t);
74
- if (!e.composition.panels.find((d) => d.id === t) || o?.panels?.[t] && !p) {
75
- s.push({
76
- code: "extension_panel_missing",
77
- message: `Mode "${e.mode.id}" places panel "${t}" that is not registered for the resource`,
78
- panelId: t
79
- });
80
- continue;
81
- }
82
- l.push({
83
- panelId: t,
84
- slot: p?.slot,
85
- policy: c,
86
- required: c.required === !0
87
- });
88
- }
89
- return {
90
- candidates: l,
91
- validEdges: r
92
- };
93
- }, h = (e) => {
94
- const o = e.base ? v(e.base) : v(e.policy);
95
- return !e.base || !e.policy.allowedRegions ? o : v(e.policy).filter((s) => o.includes(s));
96
- }, y = (e, o, s) => {
97
- if (!e.composition.panels.find((r) => r.id === o.panelId)) return;
98
- const l = h(o);
99
- if (!l.includes(o.policy.region)) {
100
- s.push({
101
- code: "extension_panel_placement_unresolvable",
102
- message: `Panel "${o.panelId}" cannot be placed in region "${o.policy.region}"`,
103
- panelId: o.panelId
104
- });
105
- return;
106
- }
107
- return {
108
- panelId: o.panelId,
109
- region: o.policy.region,
110
- slot: o.slot,
111
- required: o.required,
112
- defaultOpen: o.required || o.policy.defaultOpen !== !1,
113
- pinned: o.policy.pinned,
114
- allowedRegions: l,
115
- origin: o.required ? "required" : "default"
116
- };
117
- }, g = (e, o, s) => {
118
- const n = /* @__PURE__ */ new Map();
119
- let l;
120
- for (const r of o) {
121
- const a = y(e, r, s);
122
- if (a) {
123
- n.has(a.panelId) || n.set(a.panelId, a);
124
- continue;
125
- }
126
- r.required && h(r).includes("main") && (l = {
127
- panelId: r.panelId
128
- });
129
- }
130
- return {
131
- requiredFallback: l,
132
- resolvedByPanel: n
133
- };
134
- }, R = (e) => Object.entries(e.regions).filter((o) => !!o[1]), $ = (e) => {
135
- for (const [o, s] of R(e.persisted)) {
136
- for (const n of s.order) {
137
- const l = e.resolvedByPanel.get(n);
138
- l && e.place({
139
- ...l,
140
- origin: "persisted"
141
- }, l.allowedRegions.includes(o) ? o : l.region);
142
- }
143
- s.activePanelId && e.placed.has(s.activePanelId) && (e.activePanelIds[o] = s.activePanelId);
144
- }
145
- }, K = (e, o) => {
146
- const s = [], n = {}, l = {}, r = /* @__PURE__ */ new Set(), a = (i, u) => {
147
- r.has(i.panelId) || (r.add(i.panelId), s.push({
148
- ...i,
149
- region: u
150
- }), n[u] = [...n[u] ?? [], i.panelId]);
151
- };
152
- if (!e.persisted) {
153
- for (const i of o.values()) i.defaultOpen && a(i, i.region);
154
- return {
155
- activePanelIds: l,
156
- placed: r,
157
- placements: s,
158
- regionOrder: n
159
- };
160
- }
161
- $({
162
- activePanelIds: l,
163
- persisted: e.persisted,
164
- place: a,
165
- placed: r,
166
- resolvedByPanel: o
167
- });
168
- for (const i of o.values())
169
- i.required && !r.has(i.panelId) && a(i, i.region);
170
- return {
171
- activePanelIds: l,
172
- placed: r,
173
- placements: s,
174
- regionOrder: n
175
- };
176
- }, k = (e) => {
177
- const o = [], s = e.context.resourceKind ? e.mode.resources?.[e.context.resourceKind] : void 0;
178
- if (e.context.resourceKind && !s)
179
- return o.push({
180
- code: "extension_mode_resource_unsupported",
181
- message: `Mode "${e.mode.id}" does not accept resource kind "${e.context.resourceKind}"`
182
- }), {
183
- placements: [],
184
- regionOrder: {},
185
- activePanelIds: {},
186
- addablePanels: [],
187
- diagnostics: o
188
- };
189
- const {
190
- candidates: n,
191
- validEdges: l
192
- } = b(e, s, o), {
193
- requiredFallback: r,
194
- resolvedByPanel: a
195
- } = g(e, n, o), {
196
- activePanelIds: i,
197
- placed: u,
198
- placements: t,
199
- regionOrder: c
200
- } = K(e, a), p = Array.from(a.values()).filter((d) => !d.required && !u.has(d.panelId)).map(({
201
- panelId: d,
202
- region: m,
203
- allowedRegions: f,
204
- pinned: x
205
- }) => ({
206
- panelId: d,
207
- region: m,
208
- allowedRegions: f,
209
- pinned: x
210
- })), I = new Set(p.map((d) => d.panelId));
211
- for (const d of l) {
212
- if (u.has(d.panel) || I.has(d.panel)) continue;
213
- const m = s?.panels?.[d.panel] ?? s?.slots?.[d.slot];
214
- if (!m) continue;
215
- const f = y(e, {
216
- panelId: d.panel,
217
- slot: d.slot,
218
- policy: m,
219
- required: !1
220
- }, o);
221
- f && (p.push({
222
- panelId: f.panelId,
223
- region: f.region,
224
- allowedRegions: f.allowedRegions,
225
- pinned: f.pinned
226
- }), I.add(f.panelId));
227
- }
228
- return {
229
- placements: t,
230
- regionOrder: c,
231
- activePanelIds: i,
232
- addablePanels: p,
233
- diagnostics: o,
234
- requiredFallback: r
235
- };
236
- }, O = ["sidenav", "main", "secondary", "side"];
237
- export {
238
- O as d,
239
- k as r
240
- };
241
- //# sourceMappingURL=composition-resolver-types-CWykPyEK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"composition-resolver-types-CWykPyEK.js","sources":["../src/core/registries/layout/composition-resolver.ts","../src/core/registries/layout/composition-resolver-types.ts"],"sourcesContent":["import type {\n CompositionDiagnostic,\n CompositionModeRecipe,\n CompositionPanelPlacement,\n CompositionPlacementPolicy,\n CompositionResourceKindDefinition,\n DockedCompositionRegion,\n ResolveCompositionInput,\n ResolvedComposition,\n ResolvedCompositionPlacement,\n} from \"./composition-resolver-types\";\n\ninterface PlacementCandidate {\n panelId: string;\n slot?: string;\n policy: CompositionPlacementPolicy;\n base?: CompositionPanelPlacement;\n required: boolean;\n}\n\nconst policyRegions = (policy: CompositionPlacementPolicy) => [\n ...new Set([policy.region, ...(policy.allowedRegions ?? [])]),\n];\n\nconst panelPlacements = (panel: ResolveCompositionInput[\"composition\"][\"panels\"][number]) => {\n if (!panel.show) return [];\n return Array.isArray(panel.show) ? panel.show : [panel.show];\n};\n\nconst isUsableEdge = (\n input: ResolveCompositionInput,\n kind: CompositionResourceKindDefinition | undefined,\n edge: ResolveCompositionInput[\"composition\"][\"resourcePanels\"][number],\n diagnostics: CompositionDiagnostic[],\n) => {\n if (!kind || edge.resourceKind !== kind.id) return false;\n const slot = kind.slots[edge.slot];\n if (!slot) {\n diagnostics.push({\n code: \"extension_resource_slot_missing\",\n message: `Resource panel \"${edge.id}\" names unknown slot \"${edge.slot}\"`,\n panelId: edge.panel,\n slot: edge.slot,\n });\n return false;\n }\n if (edge.extensionId !== kind.extensionId && (!slot.external || edge.slot === \"primary\")) {\n diagnostics.push({\n code: \"extension_resource_slot_closed\",\n message: `Slot \"${edge.slot}\" is closed to external panels`,\n panelId: edge.panel,\n slot: edge.slot,\n });\n return false;\n }\n if (!input.composition.panels.some((panel) => panel.id === edge.panel)) {\n diagnostics.push({\n code: \"extension_panel_missing\",\n message: `Resource panel \"${edge.id}\" names unknown panel \"${edge.panel}\"`,\n panelId: edge.panel,\n slot: edge.slot,\n });\n return false;\n }\n return true;\n};\n\nconst slotCandidates = (args: {\n diagnostics: CompositionDiagnostic[];\n kind: CompositionResourceKindDefinition | undefined;\n input: ResolveCompositionInput;\n overriddenPanels: ReadonlySet<string>;\n policy: CompositionPlacementPolicy;\n slotName: string;\n validEdges: ResolveCompositionInput[\"composition\"][\"resourcePanels\"];\n}): PlacementCandidate[] => {\n const slot = args.kind?.slots[args.slotName];\n if (!slot) {\n args.diagnostics.push({\n code: \"extension_resource_slot_missing\",\n message: `Mode \"${args.input.mode.id}\" places unknown slot \"${args.slotName}\"`,\n slot: args.slotName,\n });\n return [];\n }\n const required = args.policy.required === true;\n if (required && slot.cardinality === \"many\") {\n args.diagnostics.push({\n code: \"extension_placement_required_invalid\",\n message: `Required slot \"${args.slotName}\" has cardinality many; name a specific panel instead`,\n slot: args.slotName,\n });\n }\n return args.validEdges\n .filter((edge) => edge.slot === args.slotName && !args.overriddenPanels.has(edge.panel))\n .filter((edge) => edge.extensionId === args.kind?.extensionId)\n .map((edge) => ({\n panelId: edge.panel,\n slot: args.slotName,\n policy: args.policy,\n required: required && slot.cardinality === \"one\",\n }));\n};\n\nconst panelPlacementFor = (\n input: ResolveCompositionInput,\n panel: ResolveCompositionInput[\"composition\"][\"panels\"][number],\n) => {\n const kind = input.composition.resourceKinds.find((candidate) => candidate.id === input.context.resourceKind);\n const placements = panelPlacements(panel);\n const resourcePlacement = placements.find((placement) => placement.resourceKind === input.context.resourceKind);\n if (resourcePlacement && panel.extensionId === kind?.extensionId) return resourcePlacement;\n if (panel.extensionId !== input.mode.extensionId) return undefined;\n return placements.find((placement) => placement.resourceKind === undefined);\n};\n\nconst collectCandidates = (\n input: ResolveCompositionInput,\n recipe: CompositionModeRecipe | undefined,\n diagnostics: CompositionDiagnostic[],\n) => {\n const kind = input.composition.resourceKinds.find((candidate) => candidate.id === input.context.resourceKind);\n const candidates: PlacementCandidate[] = [];\n const validEdges = input.composition.resourcePanels.filter((edge) => isUsableEdge(input, kind, edge, diagnostics));\n const overrides = { ...(recipe?.panels ?? {}), ...(input.mode.modePanels ?? {}) };\n const overriddenPanels = new Set(Object.keys(overrides));\n\n for (const [slotName, policy] of Object.entries(recipe?.slots ?? {})) {\n candidates.push(...slotCandidates({ diagnostics, kind, input, overriddenPanels, policy, slotName, validEdges }));\n }\n\n for (const panel of input.composition.panels) {\n const base = panelPlacementFor(input, panel);\n if (!base) continue;\n const policy = overrides[panel.id] ?? base;\n candidates.push({\n panelId: panel.id,\n policy,\n base,\n required: policy.required ?? base.required ?? false,\n });\n }\n\n const known = new Set(candidates.map((candidate) => candidate.panelId));\n for (const [panelId, policy] of Object.entries(overrides)) {\n if (known.has(panelId)) continue;\n const edge = validEdges.find((candidate) => candidate.panel === panelId);\n const panel = input.composition.panels.find((candidate) => candidate.id === panelId);\n if (!panel || (recipe?.panels?.[panelId] && !edge)) {\n diagnostics.push({\n code: \"extension_panel_missing\",\n message: `Mode \"${input.mode.id}\" places panel \"${panelId}\" that is not registered for the resource`,\n panelId,\n });\n continue;\n }\n candidates.push({ panelId, slot: edge?.slot, policy, required: policy.required === true });\n }\n\n return { candidates, validEdges };\n};\n\nconst allowedRegionsFor = (candidate: PlacementCandidate) => {\n const baseRegions = candidate.base ? policyRegions(candidate.base) : policyRegions(candidate.policy);\n if (!candidate.base || !candidate.policy.allowedRegions) return baseRegions;\n return policyRegions(candidate.policy).filter((region) => baseRegions.includes(region));\n};\n\nconst resolveCandidate = (\n input: ResolveCompositionInput,\n candidate: PlacementCandidate,\n diagnostics: CompositionDiagnostic[],\n): ResolvedCompositionPlacement | undefined => {\n const panel = input.composition.panels.find((definition) => definition.id === candidate.panelId);\n if (!panel) return undefined;\n const allowedRegions = allowedRegionsFor(candidate);\n if (!allowedRegions.includes(candidate.policy.region)) {\n diagnostics.push({\n code: \"extension_panel_placement_unresolvable\",\n message: `Panel \"${candidate.panelId}\" cannot be placed in region \"${candidate.policy.region}\"`,\n panelId: candidate.panelId,\n });\n return undefined;\n }\n return {\n panelId: candidate.panelId,\n region: candidate.policy.region,\n slot: candidate.slot,\n required: candidate.required,\n defaultOpen: candidate.required || candidate.policy.defaultOpen !== false,\n pinned: candidate.policy.pinned,\n allowedRegions,\n origin: candidate.required ? \"required\" : \"default\",\n };\n};\n\nconst resolveCandidates = (\n input: ResolveCompositionInput,\n candidates: readonly PlacementCandidate[],\n diagnostics: CompositionDiagnostic[],\n) => {\n const resolvedByPanel = new Map<string, ResolvedCompositionPlacement>();\n let requiredFallback: { panelId: string } | undefined;\n\n for (const candidate of candidates) {\n const resolved = resolveCandidate(input, candidate, diagnostics);\n if (resolved) {\n if (!resolvedByPanel.has(resolved.panelId)) resolvedByPanel.set(resolved.panelId, resolved);\n continue;\n }\n if (candidate.required && allowedRegionsFor(candidate).includes(\"main\")) {\n requiredFallback = { panelId: candidate.panelId };\n }\n }\n\n return { requiredFallback, resolvedByPanel };\n};\n\ntype PersistedRegionState = { order: readonly string[]; activePanelId?: string };\ntype PlaceResolvedPanel = (placement: ResolvedCompositionPlacement, region: DockedCompositionRegion) => void;\n\nconst persistedRegions = (persisted: NonNullable<ResolveCompositionInput[\"persisted\"]>) =>\n Object.entries(persisted.regions).filter((entry): entry is [DockedCompositionRegion, PersistedRegionState] =>\n Boolean(entry[1]),\n );\n\nconst placePersistedRegions = (input: {\n activePanelIds: Partial<Record<DockedCompositionRegion, string>>;\n persisted: NonNullable<ResolveCompositionInput[\"persisted\"]>;\n place: PlaceResolvedPanel;\n placed: ReadonlySet<string>;\n resolvedByPanel: ReadonlyMap<string, ResolvedCompositionPlacement>;\n}) => {\n for (const [region, state] of persistedRegions(input.persisted)) {\n for (const panelId of state.order) {\n const resolved = input.resolvedByPanel.get(panelId);\n if (resolved) {\n input.place(\n { ...resolved, origin: \"persisted\" },\n resolved.allowedRegions.includes(region) ? region : resolved.region,\n );\n }\n }\n if (state.activePanelId && input.placed.has(state.activePanelId)) {\n input.activePanelIds[region] = state.activePanelId;\n }\n }\n};\n\nconst placeResolved = (\n input: ResolveCompositionInput,\n resolvedByPanel: ReadonlyMap<string, ResolvedCompositionPlacement>,\n) => {\n const placements: ResolvedCompositionPlacement[] = [];\n const regionOrder: Partial<Record<DockedCompositionRegion, string[]>> = {};\n const activePanelIds: Partial<Record<DockedCompositionRegion, string>> = {};\n const placed = new Set<string>();\n const place = (placement: ResolvedCompositionPlacement, region: DockedCompositionRegion) => {\n if (placed.has(placement.panelId)) return;\n placed.add(placement.panelId);\n placements.push({ ...placement, region });\n regionOrder[region] = [...(regionOrder[region] ?? []), placement.panelId];\n };\n\n if (!input.persisted) {\n for (const resolved of resolvedByPanel.values()) if (resolved.defaultOpen) place(resolved, resolved.region);\n return { activePanelIds, placed, placements, regionOrder };\n }\n placePersistedRegions({ activePanelIds, persisted: input.persisted, place, placed, resolvedByPanel });\n for (const resolved of resolvedByPanel.values()) {\n if (resolved.required && !placed.has(resolved.panelId)) place(resolved, resolved.region);\n }\n return { activePanelIds, placed, placements, regionOrder };\n};\n\nexport const resolveComposition = (input: ResolveCompositionInput): ResolvedComposition => {\n const diagnostics: CompositionDiagnostic[] = [];\n const recipe = input.context.resourceKind ? input.mode.resources?.[input.context.resourceKind] : undefined;\n if (input.context.resourceKind && !recipe) {\n diagnostics.push({\n code: \"extension_mode_resource_unsupported\",\n message: `Mode \"${input.mode.id}\" does not accept resource kind \"${input.context.resourceKind}\"`,\n });\n return { placements: [], regionOrder: {}, activePanelIds: {}, addablePanels: [], diagnostics };\n }\n\n const { candidates, validEdges } = collectCandidates(input, recipe, diagnostics);\n const { requiredFallback, resolvedByPanel } = resolveCandidates(input, candidates, diagnostics);\n const { activePanelIds, placed, placements, regionOrder } = placeResolved(input, resolvedByPanel);\n const addablePanels = Array.from(resolvedByPanel.values())\n .filter((panel) => !panel.required && !placed.has(panel.panelId))\n .map(({ panelId, region, allowedRegions, pinned }) => ({ panelId, region, allowedRegions, pinned }));\n const addablePanelIds = new Set(addablePanels.map((panel) => panel.panelId));\n\n for (const edge of validEdges) {\n if (placed.has(edge.panel) || addablePanelIds.has(edge.panel)) continue;\n const policy = recipe?.panels?.[edge.panel] ?? recipe?.slots?.[edge.slot];\n if (!policy) continue;\n const resolved = resolveCandidate(\n input,\n { panelId: edge.panel, slot: edge.slot, policy, required: false },\n diagnostics,\n );\n if (!resolved) continue;\n addablePanels.push({\n panelId: resolved.panelId,\n region: resolved.region,\n allowedRegions: resolved.allowedRegions,\n pinned: resolved.pinned,\n });\n addablePanelIds.add(resolved.panelId);\n }\n\n return { placements, regionOrder, activePanelIds, addablePanels, diagnostics, requiredFallback };\n};\n","export const dockedCompositionRegions = [\"sidenav\", \"main\", \"secondary\", \"side\"] as const;\nexport type DockedCompositionRegion = (typeof dockedCompositionRegions)[number];\n\nexport interface CompositionSlotDefinition {\n cardinality: \"one\" | \"many\";\n external: boolean;\n}\n\nexport interface CompositionResourceKindDefinition {\n id: string;\n extensionId: string;\n surface: \"primary\" | \"secondary\" | \"attached\";\n slots: Record<string, CompositionSlotDefinition>;\n}\n\nexport interface CompositionPanelDefinition {\n id: string;\n extensionId: string;\n title: string;\n icon?: string;\n show?: CompositionPanelPlacement | readonly CompositionPanelPlacement[];\n}\n\nexport interface CompositionPanelPlacement extends CompositionPlacementPolicy {\n resourceKind?: string;\n}\n\nexport interface CompositionResourcePanelEdge {\n id: string;\n extensionId: string;\n resourceKind: string;\n panel: string;\n slot: string;\n}\n\nexport interface CompositionPlacementPolicy {\n region: DockedCompositionRegion;\n allowedRegions?: readonly DockedCompositionRegion[];\n required?: boolean;\n defaultOpen?: boolean;\n pinned?: boolean;\n}\n\nexport interface CompositionModeRecipe {\n slots?: Record<string, CompositionPlacementPolicy>;\n panels?: Record<string, CompositionPlacementPolicy>;\n}\n\nexport interface CompositionModeDefinition {\n id: string;\n extensionId?: string;\n resources?: Record<string, CompositionModeRecipe>;\n modePanels?: Record<string, CompositionPlacementPolicy>;\n}\n\nexport interface WorkbenchComposition {\n resourceKinds: readonly CompositionResourceKindDefinition[];\n panels: readonly CompositionPanelDefinition[];\n resourcePanels: readonly CompositionResourcePanelEdge[];\n}\n\nexport interface PersistedCompositionRegionState {\n order: readonly string[];\n activePanelId?: string;\n}\n\n// The user-owned half of resolution: which panels are open in which region, in which\n// tab order. A panel absent from every region was closed by the user. `undefined`\n// persisted layout means the scope is new and defaults may seed.\nexport interface PersistedCompositionLayout {\n regions: Partial<Record<DockedCompositionRegion, PersistedCompositionRegionState>>;\n}\n\nexport interface CompositionResolutionContext {\n modeId: string;\n resourceKind?: string;\n}\n\nexport interface ResolveCompositionInput {\n context: CompositionResolutionContext;\n mode: CompositionModeDefinition;\n composition: WorkbenchComposition;\n persisted?: PersistedCompositionLayout;\n}\n\nexport interface ResolvedCompositionPlacement {\n panelId: string;\n region: DockedCompositionRegion;\n slot?: string;\n required: boolean;\n defaultOpen: boolean;\n pinned?: boolean;\n allowedRegions: readonly DockedCompositionRegion[];\n origin: \"persisted\" | \"required\" | \"default\";\n}\n\nexport interface ResolvedCompositionAddablePanel {\n panelId: string;\n region: DockedCompositionRegion;\n allowedRegions: readonly DockedCompositionRegion[];\n pinned?: boolean;\n}\n\nexport interface CompositionDiagnostic {\n code:\n | \"extension_resource_kind_missing\"\n | \"extension_resource_slot_missing\"\n | \"extension_resource_slot_closed\"\n | \"extension_panel_missing\"\n | \"extension_panel_placement_unresolvable\"\n | \"extension_mode_resource_unsupported\"\n | \"extension_placement_required_invalid\"\n | \"extension_resource_primary_invalid\";\n message: string;\n panelId?: string;\n slot?: string;\n}\n\nexport interface ResolvedComposition {\n placements: readonly ResolvedCompositionPlacement[];\n regionOrder: Partial<Record<DockedCompositionRegion, readonly string[]>>;\n activePanelIds: Partial<Record<DockedCompositionRegion, string>>;\n addablePanels: readonly ResolvedCompositionAddablePanel[];\n diagnostics: readonly CompositionDiagnostic[];\n // The safest main placement when a required placement cannot be resolved.\n requiredFallback?: { panelId: string };\n}\n"],"names":["policyRegions","policy","Set","region","allowedRegions","panelPlacements","panel","show","Array","isArray","isUsableEdge","input","kind","edge","diagnostics","resourceKind","id","slot","slots","extensionId","external","push","code","message","panelId","composition","panels","some","slotCandidates","args","slotName","mode","required","cardinality","validEdges","filter","overriddenPanels","has","map","panelPlacementFor","resourceKinds","find","candidate","context","placements","resourcePlacement","placement","undefined","collectCandidates","recipe","candidates","resourcePanels","overrides","modePanels","Object","keys","entries","base","known","allowedRegionsFor","baseRegions","includes","resolveCandidate","definition","defaultOpen","pinned","origin","resolveCandidates","resolvedByPanel","Map","requiredFallback","resolved","set","persistedRegions","persisted","regions","entry","Boolean","placePersistedRegions","state","order","get","place","activePanelId","placed","activePanelIds","placeResolved","regionOrder","add","values","resolveComposition","resources","addablePanels","from","addablePanelIds","dockedCompositionRegions"],"mappings":"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"}