@pstdio/workbench 0.8.0 → 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 +1283 -774
  3. package/dist/extensions.js +1454 -1924
  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 +589 -644
  8. package/dist/index.js +5011 -2644
  9. package/dist/index.js.map +1 -1
  10. package/dist/react.d.ts +540 -585
  11. package/dist/react.js +3583 -3424
  12. package/dist/react.js.map +1 -1
  13. package/dist/storage.d.ts +118 -157
  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/layout-types-DMoZz38-.js +0 -100
  33. package/dist/layout-types-DMoZz38-.js.map +0 -1
  34. package/dist/surface-map-C1pOTUmF.js +0 -52
  35. package/dist/surface-map-C1pOTUmF.js.map +0 -1
  36. package/dist/testing.d.ts +0 -2443
  37. package/dist/testing.js +0 -58
  38. package/dist/testing.js.map +0 -1
  39. package/dist/workbench-built-ins-BCJ6-fIM.js +0 -1173
  40. package/dist/workbench-built-ins-BCJ6-fIM.js.map +0 -1
  41. package/dist/workbench-menu-paths-D-e7iscN.js +0 -43
  42. package/dist/workbench-menu-paths-D-e7iscN.js.map +0 -1
  43. package/dist/workflow-status-settings-DLiu9FZ0.js +0 -144
  44. package/dist/workflow-status-settings-DLiu9FZ0.js.map +0 -1
package/dist/testing.js DELETED
@@ -1,58 +0,0 @@
1
- import { describe as w, beforeEach as y, afterEach as h, test as u, expect as t } from "bun:test";
2
- import { r as p } from "./surface-map-C1pOTUmF.js";
3
- const m = (e) => e.layout.listPanelInstances(p("primary")), g = (e) => m(e).filter((l) => !l.pinned), n = (e) => e.getPrimaryResource(), r = async () => {
4
- await Promise.resolve(), await Promise.resolve();
5
- }, b = (e) => {
6
- w(`${e.name} navigation contract`, () => {
7
- let l, a;
8
- y(async () => {
9
- l = await e.setup(), a = l.workbench;
10
- }), h(() => {
11
- l.dispose?.();
12
- });
13
- const i = async (o) => {
14
- await a.resources.openResource(o), await r();
15
- }, d = () => g(a).map((o) => o.panelId);
16
- if (e.rootDetailHistory === "retained" ? (u("root -> detail -> Back uses only a retained root tab", async () => {
17
- await i(e.root), await i(e.detail);
18
- const o = d();
19
- t(a.history.store.getState().cursor).toBeGreaterThan(0);
20
- const s = a.history.goBack();
21
- await r(), t(n(a)?.uri).toBe(e.root.uri), t(s?.resource?.uri).toBe(e.root.uri), t(d()).toEqual(o);
22
- }), u("root -> detail -> Back -> Forward keeps the live tab set stable", async () => {
23
- await i(e.root), await i(e.detail);
24
- const o = d();
25
- t(a.history.store.getState().cursor).toBeGreaterThan(0), a.history.goBack(), await r();
26
- const s = a.history.goForward();
27
- await r(), t(n(a)?.uri).toBe(e.detail.uri), t(s?.resource?.uri).toBe(e.detail.uri), t(d()).toEqual(o);
28
- })) : (u("root -> detail replacement replays the prior Location through Back", async () => {
29
- await i(e.root), await i(e.detail);
30
- const o = a.history.store.getState();
31
- t(o.entries.map((s) => s.resource?.uri)).toEqual([e.root.uri, e.detail.uri]), t(o.cursor).toBe(1), t(a.history.goBack()?.resource?.uri).toBe(e.root.uri), await r(), t(n(a)?.uri).toBe(e.root.uri);
32
- }), u("root -> detail replacement retains Forward after Back", async () => {
33
- await i(e.root), await i(e.detail), t(a.history.goBack()?.resource?.uri).toBe(e.root.uri), await r(), t(a.history.goForward()?.resource?.uri).toBe(e.detail.uri), await r(), t(n(a)?.uri).toBe(e.detail.uri);
34
- })), e.detailB) {
35
- const o = e.detailB;
36
- u("detail A -> detail B -> Back changes only a retained detail tab", async () => {
37
- await i(e.root), await i(e.detail), await i(o);
38
- const s = d();
39
- t(a.history.store.getState().cursor).toBeGreaterThan(0);
40
- const B = a.history.goBack();
41
- await r(), t(n(a)?.uri).toBe(e.detail.uri), t(B?.resource?.uri).toBe(e.detail.uri), t(d()).toEqual(s);
42
- });
43
- }
44
- if (e.expectedMode) {
45
- const o = e.expectedMode;
46
- u("activates the route mode and keeps it across Back", async () => {
47
- await i(e.root), t(a.modes.getActiveModeId()).toBe(o), await i(e.detail), t(a.modes.getActiveModeId()).toBe(o), a.history.goBack(), await r(), t(a.modes.getActiveModeId()).toBe(o);
48
- });
49
- }
50
- });
51
- };
52
- export {
53
- n as activePrimaryResource,
54
- b as describeResourceRouteContract,
55
- m as primaryPlacements,
56
- g as unpinnedPrimaryPlacements
57
- };
58
- //# sourceMappingURL=testing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testing.js","sources":["../src/testing/navigation-contract.ts"],"sourcesContent":["import { afterEach, beforeEach, describe, expect, test } from \"bun:test\";\nimport type { ResourceRef, WorkbenchCore } from \"../core\";\nimport { resolveAnchorRegion } from \"../core\";\n\n// The primary/main surface hosts the \"primary\" anchor (see surface-map). Reading placements\n// and the active resource through the anchor — not the global activeResourceUri, which any\n// side-region activation can pollute — measures the exact signal history records, so the\n// contract asserts the user-visible navigation state.\nexport const primaryPlacements = (workbench: WorkbenchCore) =>\n workbench.layout.listPanelInstances(resolveAnchorRegion(\"primary\"));\n\nexport const unpinnedPrimaryPlacements = (workbench: WorkbenchCore) =>\n primaryPlacements(workbench).filter((placement) => !placement.pinned);\n\nexport const activePrimaryResource = (workbench: WorkbenchCore) => workbench.getPrimaryResource();\n\nexport interface RouteContractHarness {\n workbench: WorkbenchCore;\n dispose?: () => void;\n}\n\nexport interface ResourceRouteContract {\n // Route id / assertion label so a contract failure names the offending route.\n name: string;\n setup: () => RouteContractHarness | Promise<RouteContractHarness>;\n root: ResourceRef;\n detail: ResourceRef;\n detailB?: ResourceRef;\n rootDetailHistory: \"retained\" | \"replaced\";\n expectedMode?: string;\n}\n\n// Two microtasks settle resource activation and any presenter work on the active tab.\nconst flush = async () => {\n await Promise.resolve();\n await Promise.resolve();\n};\n\n// Shared navigation invariants every resource-first root/detail route must satisfy. Back and\n// Forward activate tabs retained by the route without creating or removing placements.\nexport const describeResourceRouteContract = (contract: ResourceRouteContract) => {\n describe(`${contract.name} navigation contract`, () => {\n let harness: RouteContractHarness;\n let workbench: WorkbenchCore;\n\n beforeEach(async () => {\n harness = await contract.setup();\n workbench = harness.workbench;\n });\n\n afterEach(() => {\n harness.dispose?.();\n });\n\n const open = async (resource: ResourceRef) => {\n await workbench.resources.openResource(resource);\n await flush();\n };\n\n const primaryWidgetIds = () => unpinnedPrimaryPlacements(workbench).map((placement) => placement.panelId);\n\n if (contract.rootDetailHistory === \"retained\") {\n test(\"root -> detail -> Back uses only a retained root tab\", async () => {\n await open(contract.root);\n await open(contract.detail);\n const panelIds = primaryWidgetIds();\n expect(workbench.history.store.getState().cursor).toBeGreaterThan(0);\n\n const back = workbench.history.goBack();\n await flush();\n\n expect(activePrimaryResource(workbench)?.uri).toBe(contract.root.uri);\n expect(back?.resource?.uri).toBe(contract.root.uri);\n expect(primaryWidgetIds()).toEqual(panelIds);\n });\n\n test(\"root -> detail -> Back -> Forward keeps the live tab set stable\", async () => {\n await open(contract.root);\n await open(contract.detail);\n const panelIds = primaryWidgetIds();\n expect(workbench.history.store.getState().cursor).toBeGreaterThan(0);\n\n workbench.history.goBack();\n await flush();\n const forward = workbench.history.goForward();\n await flush();\n\n expect(activePrimaryResource(workbench)?.uri).toBe(contract.detail.uri);\n expect(forward?.resource?.uri).toBe(contract.detail.uri);\n expect(primaryWidgetIds()).toEqual(panelIds);\n });\n } else {\n test(\"root -> detail replacement replays the prior Location through Back\", async () => {\n await open(contract.root);\n await open(contract.detail);\n const history = workbench.history.store.getState();\n\n expect(history.entries.map((entry) => entry.resource?.uri)).toEqual([contract.root.uri, contract.detail.uri]);\n expect(history.cursor).toBe(1);\n expect(workbench.history.goBack()?.resource?.uri).toBe(contract.root.uri);\n await flush();\n expect(activePrimaryResource(workbench)?.uri).toBe(contract.root.uri);\n });\n\n test(\"root -> detail replacement retains Forward after Back\", async () => {\n await open(contract.root);\n await open(contract.detail);\n\n expect(workbench.history.goBack()?.resource?.uri).toBe(contract.root.uri);\n await flush();\n expect(workbench.history.goForward()?.resource?.uri).toBe(contract.detail.uri);\n await flush();\n expect(activePrimaryResource(workbench)?.uri).toBe(contract.detail.uri);\n });\n }\n\n if (contract.detailB) {\n const detailB = contract.detailB;\n test(\"detail A -> detail B -> Back changes only a retained detail tab\", async () => {\n await open(contract.root);\n await open(contract.detail);\n await open(detailB);\n const panelIds = primaryWidgetIds();\n expect(workbench.history.store.getState().cursor).toBeGreaterThan(0);\n\n const back = workbench.history.goBack();\n await flush();\n\n expect(activePrimaryResource(workbench)?.uri).toBe(contract.detail.uri);\n expect(back?.resource?.uri).toBe(contract.detail.uri);\n expect(primaryWidgetIds()).toEqual(panelIds);\n });\n }\n\n if (contract.expectedMode) {\n const expectedMode = contract.expectedMode;\n test(\"activates the route mode and keeps it across Back\", async () => {\n await open(contract.root);\n expect(workbench.modes.getActiveModeId()).toBe(expectedMode);\n\n await open(contract.detail);\n expect(workbench.modes.getActiveModeId()).toBe(expectedMode);\n\n workbench.history.goBack();\n await flush();\n expect(workbench.modes.getActiveModeId()).toBe(expectedMode);\n });\n }\n });\n};\n"],"names":["primaryPlacements","workbench","layout","listPanelInstances","resolveAnchorRegion","unpinnedPrimaryPlacements","filter","placement","pinned","activePrimaryResource","getPrimaryResource","flush","Promise","resolve","describeResourceRouteContract","contract","describe","name","harness","beforeEach","setup","afterEach","dispose","open","resource","resources","openResource","primaryWidgetIds","map","panelId","rootDetailHistory","test","root","detail","panelIds","expect","history","store","getState","cursor","toBeGreaterThan","back","goBack","uri","toBe","toEqual","forward","goForward","entries","entry","detailB","expectedMode","modes","getActiveModeId"],"mappings":"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"}