@pstdio/workbench 0.2.1 → 0.3.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 (39) hide show
  1. package/README.md +100 -88
  2. package/dist/context-key-service-W4QEfVdN.js +1031 -0
  3. package/dist/context-key-service-W4QEfVdN.js.map +1 -0
  4. package/dist/extensions.d.ts +739 -275
  5. package/dist/extensions.js +891 -699
  6. package/dist/extensions.js.map +1 -1
  7. package/dist/file-renderer-view-DrrhYnb_.js.map +1 -1
  8. package/dist/index.d.ts +746 -448
  9. package/dist/index.js +2974 -60
  10. package/dist/index.js.map +1 -1
  11. package/dist/layout-types-DMoZz38-.js +100 -0
  12. package/dist/layout-types-DMoZz38-.js.map +1 -0
  13. package/dist/react.d.ts +735 -231
  14. package/dist/react.js +3562 -2584
  15. package/dist/react.js.map +1 -1
  16. package/dist/storage.d.ts +109 -14
  17. package/dist/storage.js +142 -47
  18. package/dist/storage.js.map +1 -1
  19. package/dist/surface-map-C1pOTUmF.js +52 -0
  20. package/dist/surface-map-C1pOTUmF.js.map +1 -0
  21. package/dist/testing.d.ts +685 -198
  22. package/dist/testing.js +46 -34
  23. package/dist/testing.js.map +1 -1
  24. package/dist/webview-runtime.js +5 -1
  25. package/dist/webview-runtime.js.map +1 -1
  26. package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
  27. package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
  28. package/package.json +6 -7
  29. package/dist/context-key-service-C--cHa0B.js +0 -447
  30. package/dist/context-key-service-C--cHa0B.js.map +0 -1
  31. package/dist/core.d.ts +0 -1885
  32. package/dist/core.js +0 -64
  33. package/dist/core.js.map +0 -1
  34. package/dist/surface-reconcile-DkRf01ro.js +0 -260
  35. package/dist/surface-reconcile-DkRf01ro.js.map +0 -1
  36. package/dist/workbench-core-DFpwi8Lo.js +0 -2264
  37. package/dist/workbench-core-DFpwi8Lo.js.map +0 -1
  38. package/dist/workbench-menu-paths-CQVH6z4_.js +0 -11
  39. package/dist/workbench-menu-paths-CQVH6z4_.js.map +0 -1
package/dist/testing.js CHANGED
@@ -1,46 +1,58 @@
1
- import { describe as c, beforeEach as w, afterEach as n, test as d, expect as i } from "bun:test";
2
- import { g as y, e as B } from "./surface-reconcile-DkRf01ro.js";
3
- const h = (e) => e.layout.getLayout().areas[B("primary")].widgets, l = (e) => h(e).filter((s) => !s.pinned), u = (e) => y(e.layout.getLayout(), "primary"), r = async () => {
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
4
  await Promise.resolve(), await Promise.resolve();
5
- }, g = (e) => {
6
- c(`${e.name} navigation contract`, () => {
7
- let s, a;
8
- w(async () => {
9
- s = await e.setup(), a = s.workbench;
10
- }), n(() => {
11
- s.dispose?.();
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
12
  });
13
- const o = async (t) => {
14
- await a.resources.openResource(t, {
15
- replaceActive: !0
16
- }), await r();
17
- };
18
- if (d("root -> detail -> Back activates the root", async () => {
19
- await o(e.root), await o(e.detail);
20
- const t = a.history.goBack();
21
- await r(), i(u(a)?.uri).toBe(e.root.uri), i(t?.resource?.uri).toBe(e.root.uri), i(l(a)).toHaveLength(1);
22
- }), d("root -> detail -> Back -> Forward activates the detail", async () => {
23
- await o(e.root), await o(e.detail), a.history.goBack(), await r();
24
- const t = a.history.goForward();
25
- await r(), i(u(a)?.uri).toBe(e.detail.uri), i(t?.resource?.uri).toBe(e.detail.uri), i(l(a)).toHaveLength(1);
26
- }), e.detailB) {
27
- const t = e.detailB;
28
- d("detail A -> detail B -> Back activates detail A", async () => {
29
- await o(e.root), await o(e.detail), await o(t), a.history.goBack(), await r(), i(u(a)?.uri).toBe(e.detail.uri), i(l(a)).toHaveLength(1);
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);
30
42
  });
31
43
  }
32
44
  if (e.expectedMode) {
33
- const t = e.expectedMode;
34
- d("activates the route mode and keeps it across Back", async () => {
35
- await o(e.root), i(a.modes.getActiveModeId()).toBe(t), await o(e.detail), i(a.modes.getActiveModeId()).toBe(t), a.history.goBack(), await r(), i(a.modes.getActiveModeId()).toBe(t);
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);
36
48
  });
37
49
  }
38
50
  });
39
51
  };
40
52
  export {
41
- u as activePrimaryResource,
42
- g as describeResourceRouteContract,
43
- h as primaryPlacements,
44
- l as unpinnedPrimaryPlacements
53
+ n as activePrimaryResource,
54
+ b as describeResourceRouteContract,
55
+ m as primaryPlacements,
56
+ g as unpinnedPrimaryPlacements
45
57
  };
46
58
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
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 { getAnchorResource, resolveAnchorArea } 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-area 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.getLayout().areas[resolveAnchorArea(\"primary\")].widgets;\n\nexport const unpinnedPrimaryPlacements = (workbench: WorkbenchCore) =>\n primaryPlacements(workbench).filter((placement) => !placement.pinned);\n\nexport const activePrimaryResource = (workbench: WorkbenchCore) =>\n getAnchorResource(workbench.layout.getLayout(), \"primary\");\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 expectedMode?: string;\n}\n\n// Two microtasks settle a Back/Forward replay: the cursor moves synchronously, then the\n// silent resource reopen resolves on the microtask queue.\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. Drives a\n// real workbench core (provided by `setup`) and asserts the user-visible Back/Forward state:\n// root stays root, detail replays, mode is restored, and the primary area never grows tabs.\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, { replaceActive: true });\n await flush();\n };\n\n test(\"root -> detail -> Back activates the root\", async () => {\n await open(contract.root);\n await open(contract.detail);\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(unpinnedPrimaryPlacements(workbench)).toHaveLength(1);\n });\n\n test(\"root -> detail -> Back -> Forward activates the detail\", async () => {\n await open(contract.root);\n await open(contract.detail);\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(unpinnedPrimaryPlacements(workbench)).toHaveLength(1);\n });\n\n if (contract.detailB) {\n const detailB = contract.detailB;\n test(\"detail A -> detail B -> Back activates detail A\", async () => {\n await open(contract.root);\n await open(contract.detail);\n await open(detailB);\n\n workbench.history.goBack();\n await flush();\n\n expect(activePrimaryResource(workbench)?.uri).toBe(contract.detail.uri);\n expect(unpinnedPrimaryPlacements(workbench)).toHaveLength(1);\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","getLayout","areas","resolveAnchorArea","widgets","unpinnedPrimaryPlacements","filter","placement","pinned","activePrimaryResource","getAnchorResource","flush","Promise","resolve","describeResourceRouteContract","contract","describe","name","harness","beforeEach","setup","afterEach","dispose","open","resource","resources","openResource","replaceActive","test","root","detail","back","history","goBack","expect","uri","toBe","toHaveLength","forward","goForward","detailB","expectedMode","modes","getActiveModeId"],"mappings":"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"}
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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"}
@@ -1,4 +1,4 @@
1
- const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction u(){let G=globalThis;if(G.window!==void 0&&G.document!==void 0)return"browser";if(G.WorkerGlobalScope!==void 0&&G.self!==void 0&&G.self instanceof G.WorkerGlobalScope||G.window===void 0&&G.self!==void 0&&typeof G.importScripts=="function")return"worker";let J=G.process;if(J&&typeof J=="object"){let K=J.versions??{},Q=J.release?.name;if(K.bun||Q==="bun"||G.Bun!==void 0)return"bun";if(K.node&&Q==="node")return"node"}return G.Bun===void 0?"browser":"bun"}function b(){return u()}function k(){return b()==="worker"}function A(){let G=b();return G==="node"||G==="bun"}function v(){return window.self!==window.top}function p(G){let J={};return function K(Q,z=""){Object.keys(Q).forEach(($)=>{let Z=z?`${z}.${$}`:$;Q[$]===Object(Q[$])&&K(Q[$],Z),typeof Q[$]=="function"&&(J[Z]=Q[$],delete Q[$])})}(G),J}function i(G){return!G||G==="null"?"*":G}function l(G,J,K){if(!G||typeof G!="object")return G;let Q=Array.isArray(J)?J:J.split(".").map(($)=>$.match(/^\\d+$/)?Number($):$),z=G;for(let $=0;$<Q.length;$++){let Z=Q[$];$===Q.length-1?z[Z]=K:((!z[Z]||typeof z[Z]!="object")&&(z[Z]=typeof Q[$+1]=="number"?[]:{}),z=z[Z])}return G}function r(G=10){let J="";for(let K=0;K<G;K++)J+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*62));return J}var y=b(),B=null;if(y==="node"||y==="bun")try{let G=globalThis.require;B=G?.("node:worker_threads")?.parentPort??null}catch{}function o(){if(A())return B;if(k())return self;if(v())return window.parent;throw Error("No valid target found for postMessage")}function C(G,J,K,Q){if(!G)throw Error("Rimless Error: No target specified for postMessage");if(A()&&G===B){G.postMessage(J,{transfer:Q});return}if(k()){G.postMessage(J,{transfer:Q});return}if(G.postMessage){G.postMessage(J,{targetOrigin:i(K),transfer:Q});return}throw Error("Rimless Error: Invalid target for postMessage")}function I(G){return B!==null&&G===B}function x(G,J,K){I(G)?G.on(J,K):("addEventListener"in G)&&G.addEventListener(J,K)}function L(G,J,K){I(G)?G.off(J,K):("removeEventListener"in G)&&G.removeEventListener(J,K)}function R(G){return G.data||G}var N=function(G){return G.MESSAGE="message",G}({}),D=function(G){return G.HANDSHAKE_REQUEST="RIMLESS/HANDSHAKE_REQUEST",G.HANDSHAKE_REPLY="RIMLESS/HANDSHAKE_REPLY",G.RPC_REQUEST="RIMLESS/RPC_REQUEST",G.RPC_RESOLVE="RIMLESS/RPC_RESOLVE",G.RPC_REJECT="RIMLESS/RPC_REJECT",G}({}),w=Symbol();function s(G={},J,K,Q,z){let $=[];for(let[Z,X]of Object.entries(G)){async function P(F){let{action:j,callID:Y,connectionID:q,callName:O,args:W=[]}=R(F);if(j!==D.RPC_REQUEST||!Y||!O||O!==Z||q!==J)return;let H={action:D.RPC_RESOLVE,callID:Y,callName:O,connectionID:q,error:null,result:null},V;try{H.result=await X(...W,z),H.result?.[w]&&(V=H.result[w]??[],delete H.result[w])}catch(T){H.action=D.RPC_REJECT,H.error=JSON.parse(JSON.stringify(T,Object.getOwnPropertyNames(T)))}C(Q,H,F?.origin,V)}x(K,N.MESSAGE,P),$.push(()=>L(K,N.MESSAGE,P))}return()=>$.forEach((Z)=>Z())}function a(G,J,K,Q=[],z,$){return(...Z)=>new Promise((X,P)=>{let F=r();function j(O){let{callID:W,connectionID:H,callName:V,result:T,error:d,action:_}=R(O);if(!(!W||!V)&&V===G&&W===F&&H===J){if(_===D.RPC_RESOLVE)return X(T);if(_===D.RPC_REJECT)return P(d)}}let Y={action:D.RPC_REQUEST,args:Z,callID:F,callName:G,connectionID:J},q=Z.reduce((O,W)=>W[w]?.length?O.concat(W[w]):O,Z[w]??[]);x(z,N.MESSAGE,j),Q.push(()=>L(z,N.MESSAGE,j)),C($,Y,K?.origin,q)})}function t(G={},J=[],K,Q,z,$){let Z={...G},X=[];for(let P of J)l(Z,P,a(P,K,Q,X,z,$));return{remote:Z,unregisterRemote:()=>X.forEach((P)=>P())}}function n(G={},J){return new Promise(async(K)=>{let Q=p(G),z=o(),$=self||window;async function Z(X){let P=R(X);if(P?.action!==D.HANDSHAKE_REPLY)return;let{remote:F,unregisterRemote:j}=t(P.schema,P.methodNames,P.connectionID,X,$,z),Y=s(Q,P.connectionID,$,z,F);return await J?.onConnectionSetup?.(F),C(z,{action:D.HANDSHAKE_REPLY,connectionID:P.connectionID},X?.origin),K({remote:F,close:()=>{L($,N.MESSAGE,Z),j(),Y()},id:P.connectionID})}x($,N.MESSAGE,Z),C(z,{action:D.HANDSHAKE_REQUEST,methodNames:Object.keys(Q),schema:G})})}var S={connect:n};var e=(G)=>typeof G==="object"&&G!==null,E=(G)=>{try{let J=JSON.stringify(G);if(typeof J==="string"&&J.length>0)return J}catch{}try{return String(G)}catch{return"Unknown error"}},f=(G)=>{if(G instanceof Error)return{message:G.message,stack:G.stack};if(typeof G==="string")return{message:G};if(e(G)){let J=typeof G.message==="string"?G.message:null,K=typeof G.stack==="string"?G.stack:void 0;if(J)return K?{message:J,stack:K}:{message:J};return{message:E(G)}}if(G===null||G===void 0)return{message:"Unknown error"};return{message:E(G)}};var U=(G)=>({id:G}),M=(G,J)=>({id:G,kind:J.kind,label:J.label,description:J.description,metadata:J.metadata}),UG={sidebar:M("project.sidebar",{kind:"view"}),headerPrimary:M("project.headerPrimary",{kind:"menu"}),headerOverflow:M("project.headerOverflow",{kind:"menu"}),settingsPanels:M("project.settingsPanels",{kind:"settings"})},FG={headerPrimary:M("session.headerPrimary",{kind:"menu"}),headerOverflow:M("session.headerOverflow",{kind:"menu"}),transcriptActions:M("session.transcriptActions",{kind:"menu"})},MG={headerPrimary:M("workspace.headerPrimary",{kind:"menu"}),headerOverflow:M("workspace.headerOverflow",{kind:"menu"}),sidebar:M("workspace.sidebar",{kind:"view"})},YG={opened:U("project.opened")},HG={started:U("session.started"),resumed:U("session.resumed"),awaitingInput:U("session.awaitingInput"),succeeded:U("session.succeeded"),failed:U("session.failed"),completed:U("session.completed")},DG={created:U("workspace.created"),provision:U("workspace.provision"),ready:U("workspace.ready"),archived:U("workspace.archived"),deleted:U("workspace.deleted")},jG={removed:U("worktree.removed")},OG={committed:U("git.committed"),rebased:U("git.rebased"),merged:U("git.merged"),conflicted:U("git.conflicted")};var GG=["commands.execute","resource.open","notification.show","notification.action","notification.resolve","notification.dismiss","preferences.get","preferences.set","extension.settings.all","extension.settings.get","extension.settings.set","extension.settings.delete","terminal.session","files.upload","files.list","files.delete"],JG=["host.dispatchKeyboardEvent"],WG=[...GG,...JG];var g=(G,J)=>({call:async(K,Q)=>await G({method:K,params:Q}),onEvent:J}),h=(G)=>{let J=G,K=new Set;return{get:()=>J,subscribe:(Q)=>{return K.add(Q),()=>K.delete(Q)},set:(Q)=>{J=Q;for(let z of K)z(J)}}};var c="pstdio-extension-mount",KG=()=>{let G=new Map;return{get length(){return G.size},clear:()=>G.clear(),getItem:(J)=>G.get(J)??null,key:(J)=>Array.from(G.keys())[J]??null,removeItem:(J)=>G.delete(J),setItem:(J,K)=>G.set(J,K)}},QG=()=>{for(let G of["localStorage","sessionStorage"])try{window[G]}catch{Object.defineProperty(window,G,{configurable:!0,value:KG()})}},m=(G,J)=>{let K=document.documentElement,Q=G==="dark"?"light":"dark";K.classList.remove(Q),K.classList.add(G),K.setAttribute("data-theme",G),K.style.colorScheme=G;for(let[z,$]of Object.entries(J))if(z.startsWith("--"))K.style.setProperty(z,$)},ZG=(G)=>{for(let J of G){let K=document.createElement("link");K.rel="stylesheet",K.href=J,document.head.appendChild(K)}},$G=()=>{let G=document.getElementById(c);if(!G)G=document.createElement("div"),G.id=c,G.style.height="100%",G.style.width="100%",document.body.appendChild(G);return G},zG=(G)=>G instanceof HTMLInputElement||G instanceof HTMLTextAreaElement||G instanceof HTMLSelectElement||G instanceof HTMLElement&&G.isContentEditable,PG=async()=>{QG();let G=h(void 0),J=new Map,K=(Z,X)=>{let P=J.get(Z)??new Set;return P.add(X),J.set(Z,P),()=>{P.delete(X)}},Q,z=!1,$=await S.connect({init:async(Z)=>{try{m(Z.theme,Z.themeVariables),ZG(Z.styles),G.set(Z.props);let X=$G(),P=await import(Z.moduleUrl),F=P.default??(P.mount?P:void 0);if(!F?.mount)throw Error("Extension module does not export a default view (defineExtensionView).");let j=g((q)=>$.remote.call(q),K),Y=await F.mount(X,j,G);if(Q=typeof Y==="function"?Y:void 0,!z)z=!0,document.addEventListener("keydown",(q)=>{if(!q.ctrlKey&&!q.metaKey&&!q.altKey)return;if(zG(q.target)&&!q.shiftKey)return;$.remote.call({method:"host.dispatchKeyboardEvent",params:{key:q.key,code:q.code,ctrlKey:q.ctrlKey,metaKey:q.metaKey,altKey:q.altKey,shiftKey:q.shiftKey,repeat:q.repeat}}).catch(()=>{})},!0)}catch(X){let P=f(X);throw $.remote.runtimeError(P),X instanceof Error?X:Error(P.message)}},themeUpdate:(Z)=>{m(Z.theme,Z.variables)},propsUpdate:(Z)=>{G.set(Z.props)},hostEvent:(Z)=>{for(let X of J.get(Z.scope)??[])X(Z.payload)}});$.remote.ready({}),window.addEventListener("beforeunload",()=>{Q?.()})};PG();\n', t = "pstdio-extension-mount", o = (e) => e.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;"), i = (e) => e.replaceAll("<\/script", "<\\/script").replaceAll("<!--", "<\\!--"), n = (e) => `<!doctype html>
1
+ const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction d(){let P=globalThis;if(P.window!==void 0&&P.document!==void 0)return"browser";if(P.WorkerGlobalScope!==void 0&&P.self!==void 0&&P.self instanceof P.WorkerGlobalScope||P.window===void 0&&P.self!==void 0&&typeof P.importScripts=="function")return"worker";let G=P.process;if(G&&typeof G=="object"){let R=G.versions??{},J=G.release?.name;if(R.bun||J==="bun"||P.Bun!==void 0)return"bun";if(R.node&&J==="node")return"node"}return P.Bun===void 0?"browser":"bun"}function V(){return d()}function b(){return V()==="worker"}function x(){let P=V();return P==="node"||P==="bun"}function u(){return window.self!==window.top}function p(P){let G={};return function R(J,X=""){Object.keys(J).forEach((Q)=>{let K=X?`${X}.${Q}`:Q;J[Q]===Object(J[Q])&&R(J[Q],K),typeof J[Q]=="function"&&(G[K]=J[Q],delete J[Q])})}(P),G}function i(P){return!P||P==="null"?"*":P}function l(P,G,R){if(!P||typeof P!="object")return P;let J=Array.isArray(G)?G:G.split(".").map((Q)=>Q.match(/^\\d+$/)?Number(Q):Q),X=P;for(let Q=0;Q<J.length;Q++){let K=J[Q];Q===J.length-1?X[K]=R:((!X[K]||typeof X[K]!="object")&&(X[K]=typeof J[Q+1]=="number"?[]:{}),X=X[K])}return P}function r(P=10){let G="";for(let R=0;R<P;R++)G+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*62));return G}var E=V(),_=null;if(E==="node"||E==="bun")try{let P=globalThis.require;_=P?.("node:worker_threads")?.parentPort??null}catch{}function s(){if(x())return _;if(b())return self;if(u())return window.parent;throw Error("No valid target found for postMessage")}function D(P,G,R,J){if(!P)throw Error("Rimless Error: No target specified for postMessage");if(x()&&P===_){P.postMessage(G,{transfer:J});return}if(b()){P.postMessage(G,{transfer:J});return}if(P.postMessage){P.postMessage(G,{targetOrigin:i(R),transfer:J});return}throw Error("Rimless Error: Invalid target for postMessage")}function S(P){return _!==null&&P===_}function j(P,G,R){S(P)?P.on(G,R):("addEventListener"in P)&&P.addEventListener(G,R)}function H(P,G,R){S(P)?P.off(G,R):("removeEventListener"in P)&&P.removeEventListener(G,R)}function w(P){return P.data||P}var N=function(P){return P.MESSAGE="message",P}({}),M=function(P){return P.HANDSHAKE_REQUEST="RIMLESS/HANDSHAKE_REQUEST",P.HANDSHAKE_REPLY="RIMLESS/HANDSHAKE_REPLY",P.RPC_REQUEST="RIMLESS/RPC_REQUEST",P.RPC_RESOLVE="RIMLESS/RPC_RESOLVE",P.RPC_REJECT="RIMLESS/RPC_REJECT",P}({}),L=Symbol();function o(P={},G,R,J,X){let Q=[];for(let[K,Z]of Object.entries(P)){async function Y(B){let{action:O,callID:q,connectionID:$,callName:U,args:A=[]}=w(B);if(O!==M.RPC_REQUEST||!q||!U||U!==K||$!==G)return;let F={action:M.RPC_RESOLVE,callID:q,callName:U,connectionID:$,error:null,result:null},T;try{F.result=await Z(...A,X),F.result?.[L]&&(T=F.result[L]??[],delete F.result[L])}catch(C){F.action=M.RPC_REJECT,F.error=JSON.parse(JSON.stringify(C,Object.getOwnPropertyNames(C)))}D(J,F,B?.origin,T)}j(R,N.MESSAGE,Y),Q.push(()=>H(R,N.MESSAGE,Y))}return()=>Q.forEach((K)=>K())}function t(P,G,R,J=[],X,Q){return(...K)=>new Promise((Z,Y)=>{let B=r();function O(U){let{callID:A,connectionID:F,callName:T,result:C,error:v,action:I}=w(U);if(!(!A||!T)&&T===P&&A===B&&F===G){if(I===M.RPC_RESOLVE)return Z(C);if(I===M.RPC_REJECT)return Y(v)}}let q={action:M.RPC_REQUEST,args:K,callID:B,callName:P,connectionID:G},$=K.reduce((U,A)=>A[L]?.length?U.concat(A[L]):U,K[L]??[]);j(X,N.MESSAGE,O),J.push(()=>H(X,N.MESSAGE,O)),D(Q,q,R?.origin,$)})}function a(P={},G=[],R,J,X,Q){let K={...P},Z=[];for(let Y of G)l(K,Y,t(Y,R,J,Z,X,Q));return{remote:K,unregisterRemote:()=>Z.forEach((Y)=>Y())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),X=s(),Q=self||window;async function K(Z){let Y=w(Z);if(Y?.action!==M.HANDSHAKE_REPLY)return;let{remote:B,unregisterRemote:O}=a(Y.schema,Y.methodNames,Y.connectionID,Z,Q,X),q=o(J,Y.connectionID,Q,X,B);return await G?.onConnectionSetup?.(B),D(X,{action:M.HANDSHAKE_REPLY,connectionID:Y.connectionID},Z?.origin),R({remote:B,close:()=>{H(Q,N.MESSAGE,K),O(),q()},id:Y.connectionID})}j(Q,N.MESSAGE,K),D(X,{action:M.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P==="object"&&P!==null,y=(P)=>{try{let G=JSON.stringify(P);if(typeof G==="string"&&G.length>0)return G}catch{}try{return String(P)}catch{return"Unknown error"}},k=(P)=>{if(P instanceof Error)return{message:P.message,stack:P.stack};if(typeof P==="string")return{message:P};if(e(P)){let G=typeof P.message==="string"?P.message:null,R=typeof P.stack==="string"?P.stack:void 0;if(G)return R?{message:G,stack:R}:{message:G};return{message:y(P)}}if(P===null||P===void 0)return{message:"Unknown error"};return{message:y(P)}};var z=(P)=>({id:P}),W=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),zP={sidenav:W("project.sidenav",{kind:"panel"}),headerPrimary:W("project.headerPrimary",{kind:"menu"}),headerOverflow:W("project.headerOverflow",{kind:"menu"}),settingsPanels:W("project.settingsPanels",{kind:"settings"})},BP={headerPrimary:W("session.headerPrimary",{kind:"menu"}),headerOverflow:W("session.headerOverflow",{kind:"menu"}),transcriptActions:W("session.transcriptActions",{kind:"menu"})},WP={headerPrimary:W("workspace.headerPrimary",{kind:"menu"}),headerOverflow:W("workspace.headerOverflow",{kind:"menu"}),sidenav:W("workspace.sidenav",{kind:"panel"})},qP={opened:z("project.opened")},FP={started:z("session.started"),resumed:z("session.resumed"),awaitingInput:z("session.awaitingInput"),succeeded:z("session.succeeded"),failed:z("session.failed"),completed:z("session.completed")},MP={created:z("workspace.created"),provision:z("workspace.provision"),ready:z("workspace.ready"),archived:z("workspace.archived"),deleted:z("workspace.deleted")},OP={removed:z("worktree.removed")},UP={committed:z("git.committed"),rebased:z("git.rebased"),merged:z("git.merged"),conflicted:z("git.conflicted")};var PP=["commands.execute","resource.open","notification.show","notification.action","notification.resolve","notification.dismiss","preferences.get","preferences.set","extension.settings.all","extension.settings.get","extension.settings.set","extension.settings.delete","terminal.session","files.upload","files.list","files.delete"],GP=["host.dispatchKeyboardEvent"],AP=[...PP,...GP];var c=(P,G)=>({call:async(R,J)=>await P({method:R,params:J}),onEvent:G}),h=(P)=>{let G=P,R=new Set;return{get:()=>G,subscribe:(J)=>{return R.add(J),()=>R.delete(J)},set:(J)=>{G=J;for(let X of R)X(G)}}};var g="pstdio-extension-mount",RP=()=>{let P=new Map;return{get length(){return P.size},clear:()=>P.clear(),getItem:(G)=>P.get(G)??null,key:(G)=>Array.from(P.keys())[G]??null,removeItem:(G)=>P.delete(G),setItem:(G,R)=>P.set(G,R)}},JP=()=>{for(let P of["localStorage","sessionStorage"])try{window[P]}catch{Object.defineProperty(window,P,{configurable:!0,value:RP()})}},m=(P,G)=>{let R=document.documentElement,J=P==="dark"?"light":"dark";R.classList.remove(J),R.classList.add(P),R.setAttribute("data-theme",P),R.style.colorScheme=P;for(let[X,Q]of Object.entries(G))if(X.startsWith("--"))R.style.setProperty(X,Q)},KP=(P)=>{for(let G of P){let R=document.createElement("link");R.rel="stylesheet",R.href=G,document.head.appendChild(R)}},QP=()=>{let P=document.getElementById(g);if(!P)P=document.createElement("div"),P.id=g,P.style.height="100%",P.style.width="100%",document.body.appendChild(P);return P},XP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,YP=async()=>{JP();let P=h(void 0),G=new Map,R=(K,Z)=>{let Y=G.get(K)??new Set;return Y.add(Z),G.set(K,Y),()=>{Y.delete(Z)}},J,X=!1,Q=await f.connect({init:async(K)=>{try{m(K.theme,K.themeVariables),KP(K.styles),P.set(K.props);let Z=QP(),Y=await import(K.moduleUrl),B=Y.default??(Y.mount?Y:void 0);if(!B?.mount)throw Error("Extension module does not export a default view (defineExtensionView).");let O=c(($)=>Q.remote.call($),R),q=await B.mount(Z,O,P);if(J=typeof q==="function"?q:void 0,!X)X=!0,document.addEventListener("keydown",($)=>{if(!$.ctrlKey&&!$.metaKey&&!$.altKey)return;if(XP($.target)&&!$.shiftKey)return;Q.remote.call({method:"host.dispatchKeyboardEvent",params:{key:$.key,code:$.code,ctrlKey:$.ctrlKey,metaKey:$.metaKey,altKey:$.altKey,shiftKey:$.shiftKey,repeat:$.repeat}}).catch(()=>{})},!0)}catch(Z){let Y=k(Z);throw Q.remote.runtimeError(Y),Z instanceof Error?Z:Error(Y.message)}},themeUpdate:(K)=>{m(K.theme,K.variables)},propsUpdate:(K)=>{P.set(K.props)},hostEvent:(K)=>{for(let Z of G.get(K.scope)??[])Z(K.payload)}});Q.remote.ready({}),window.addEventListener("beforeunload",()=>{J?.()})};YP();\n', t = "pstdio-extension-mount", o = (e) => e.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;"), i = (e) => e.replaceAll("<\/script", "<\\/script").replaceAll("<!--", "<\\!--"), n = (e) => `<!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
@@ -9,6 +9,10 @@ const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\n
9
9
  margin: 0;
10
10
  background: transparent;
11
11
  }
12
+ body {
13
+ overflow-x: hidden !important;
14
+ overflow-y: auto !important;
15
+ }
12
16
  #${t} {
13
17
  height: 100%;
14
18
  width: 100%;
@@ -1 +1 @@
1
- {"version":3,"file":"webview-runtime.js","sources":["../../pstdio-extensions/src/bridge/webview-runtime/runtime.bundle.js?raw","../../pstdio-extensions/src/bridge/webview-runtime/runtime-html.ts","../src/webview-runtime/index.ts"],"sourcesContent":["export default \"// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\\nfunction u(){let G=globalThis;if(G.window!==void 0&&G.document!==void 0)return\\\"browser\\\";if(G.WorkerGlobalScope!==void 0&&G.self!==void 0&&G.self instanceof G.WorkerGlobalScope||G.window===void 0&&G.self!==void 0&&typeof G.importScripts==\\\"function\\\")return\\\"worker\\\";let J=G.process;if(J&&typeof J==\\\"object\\\"){let K=J.versions??{},Q=J.release?.name;if(K.bun||Q===\\\"bun\\\"||G.Bun!==void 0)return\\\"bun\\\";if(K.node&&Q===\\\"node\\\")return\\\"node\\\"}return G.Bun===void 0?\\\"browser\\\":\\\"bun\\\"}function b(){return u()}function k(){return b()===\\\"worker\\\"}function A(){let G=b();return G===\\\"node\\\"||G===\\\"bun\\\"}function v(){return window.self!==window.top}function p(G){let J={};return function K(Q,z=\\\"\\\"){Object.keys(Q).forEach(($)=>{let Z=z?`${z}.${$}`:$;Q[$]===Object(Q[$])&&K(Q[$],Z),typeof Q[$]==\\\"function\\\"&&(J[Z]=Q[$],delete Q[$])})}(G),J}function i(G){return!G||G===\\\"null\\\"?\\\"*\\\":G}function l(G,J,K){if(!G||typeof G!=\\\"object\\\")return G;let Q=Array.isArray(J)?J:J.split(\\\".\\\").map(($)=>$.match(/^\\\\d+$/)?Number($):$),z=G;for(let $=0;$<Q.length;$++){let Z=Q[$];$===Q.length-1?z[Z]=K:((!z[Z]||typeof z[Z]!=\\\"object\\\")&&(z[Z]=typeof Q[$+1]==\\\"number\\\"?[]:{}),z=z[Z])}return G}function r(G=10){let J=\\\"\\\";for(let K=0;K<G;K++)J+=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\\".charAt(Math.floor(Math.random()*62));return J}var y=b(),B=null;if(y===\\\"node\\\"||y===\\\"bun\\\")try{let G=globalThis.require;B=G?.(\\\"node:worker_threads\\\")?.parentPort??null}catch{}function o(){if(A())return B;if(k())return self;if(v())return window.parent;throw Error(\\\"No valid target found for postMessage\\\")}function C(G,J,K,Q){if(!G)throw Error(\\\"Rimless Error: No target specified for postMessage\\\");if(A()&&G===B){G.postMessage(J,{transfer:Q});return}if(k()){G.postMessage(J,{transfer:Q});return}if(G.postMessage){G.postMessage(J,{targetOrigin:i(K),transfer:Q});return}throw Error(\\\"Rimless Error: Invalid target for postMessage\\\")}function I(G){return B!==null&&G===B}function x(G,J,K){I(G)?G.on(J,K):(\\\"addEventListener\\\"in G)&&G.addEventListener(J,K)}function L(G,J,K){I(G)?G.off(J,K):(\\\"removeEventListener\\\"in G)&&G.removeEventListener(J,K)}function R(G){return G.data||G}var N=function(G){return G.MESSAGE=\\\"message\\\",G}({}),D=function(G){return G.HANDSHAKE_REQUEST=\\\"RIMLESS/HANDSHAKE_REQUEST\\\",G.HANDSHAKE_REPLY=\\\"RIMLESS/HANDSHAKE_REPLY\\\",G.RPC_REQUEST=\\\"RIMLESS/RPC_REQUEST\\\",G.RPC_RESOLVE=\\\"RIMLESS/RPC_RESOLVE\\\",G.RPC_REJECT=\\\"RIMLESS/RPC_REJECT\\\",G}({}),w=Symbol();function s(G={},J,K,Q,z){let $=[];for(let[Z,X]of Object.entries(G)){async function P(F){let{action:j,callID:Y,connectionID:q,callName:O,args:W=[]}=R(F);if(j!==D.RPC_REQUEST||!Y||!O||O!==Z||q!==J)return;let H={action:D.RPC_RESOLVE,callID:Y,callName:O,connectionID:q,error:null,result:null},V;try{H.result=await X(...W,z),H.result?.[w]&&(V=H.result[w]??[],delete H.result[w])}catch(T){H.action=D.RPC_REJECT,H.error=JSON.parse(JSON.stringify(T,Object.getOwnPropertyNames(T)))}C(Q,H,F?.origin,V)}x(K,N.MESSAGE,P),$.push(()=>L(K,N.MESSAGE,P))}return()=>$.forEach((Z)=>Z())}function a(G,J,K,Q=[],z,$){return(...Z)=>new Promise((X,P)=>{let F=r();function j(O){let{callID:W,connectionID:H,callName:V,result:T,error:d,action:_}=R(O);if(!(!W||!V)&&V===G&&W===F&&H===J){if(_===D.RPC_RESOLVE)return X(T);if(_===D.RPC_REJECT)return P(d)}}let Y={action:D.RPC_REQUEST,args:Z,callID:F,callName:G,connectionID:J},q=Z.reduce((O,W)=>W[w]?.length?O.concat(W[w]):O,Z[w]??[]);x(z,N.MESSAGE,j),Q.push(()=>L(z,N.MESSAGE,j)),C($,Y,K?.origin,q)})}function t(G={},J=[],K,Q,z,$){let Z={...G},X=[];for(let P of J)l(Z,P,a(P,K,Q,X,z,$));return{remote:Z,unregisterRemote:()=>X.forEach((P)=>P())}}function n(G={},J){return new Promise(async(K)=>{let Q=p(G),z=o(),$=self||window;async function Z(X){let P=R(X);if(P?.action!==D.HANDSHAKE_REPLY)return;let{remote:F,unregisterRemote:j}=t(P.schema,P.methodNames,P.connectionID,X,$,z),Y=s(Q,P.connectionID,$,z,F);return await J?.onConnectionSetup?.(F),C(z,{action:D.HANDSHAKE_REPLY,connectionID:P.connectionID},X?.origin),K({remote:F,close:()=>{L($,N.MESSAGE,Z),j(),Y()},id:P.connectionID})}x($,N.MESSAGE,Z),C(z,{action:D.HANDSHAKE_REQUEST,methodNames:Object.keys(Q),schema:G})})}var S={connect:n};var e=(G)=>typeof G===\\\"object\\\"&&G!==null,E=(G)=>{try{let J=JSON.stringify(G);if(typeof J===\\\"string\\\"&&J.length>0)return J}catch{}try{return String(G)}catch{return\\\"Unknown error\\\"}},f=(G)=>{if(G instanceof Error)return{message:G.message,stack:G.stack};if(typeof G===\\\"string\\\")return{message:G};if(e(G)){let J=typeof G.message===\\\"string\\\"?G.message:null,K=typeof G.stack===\\\"string\\\"?G.stack:void 0;if(J)return K?{message:J,stack:K}:{message:J};return{message:E(G)}}if(G===null||G===void 0)return{message:\\\"Unknown error\\\"};return{message:E(G)}};var U=(G)=>({id:G}),M=(G,J)=>({id:G,kind:J.kind,label:J.label,description:J.description,metadata:J.metadata}),UG={sidebar:M(\\\"project.sidebar\\\",{kind:\\\"view\\\"}),headerPrimary:M(\\\"project.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:M(\\\"project.headerOverflow\\\",{kind:\\\"menu\\\"}),settingsPanels:M(\\\"project.settingsPanels\\\",{kind:\\\"settings\\\"})},FG={headerPrimary:M(\\\"session.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:M(\\\"session.headerOverflow\\\",{kind:\\\"menu\\\"}),transcriptActions:M(\\\"session.transcriptActions\\\",{kind:\\\"menu\\\"})},MG={headerPrimary:M(\\\"workspace.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:M(\\\"workspace.headerOverflow\\\",{kind:\\\"menu\\\"}),sidebar:M(\\\"workspace.sidebar\\\",{kind:\\\"view\\\"})},YG={opened:U(\\\"project.opened\\\")},HG={started:U(\\\"session.started\\\"),resumed:U(\\\"session.resumed\\\"),awaitingInput:U(\\\"session.awaitingInput\\\"),succeeded:U(\\\"session.succeeded\\\"),failed:U(\\\"session.failed\\\"),completed:U(\\\"session.completed\\\")},DG={created:U(\\\"workspace.created\\\"),provision:U(\\\"workspace.provision\\\"),ready:U(\\\"workspace.ready\\\"),archived:U(\\\"workspace.archived\\\"),deleted:U(\\\"workspace.deleted\\\")},jG={removed:U(\\\"worktree.removed\\\")},OG={committed:U(\\\"git.committed\\\"),rebased:U(\\\"git.rebased\\\"),merged:U(\\\"git.merged\\\"),conflicted:U(\\\"git.conflicted\\\")};var GG=[\\\"commands.execute\\\",\\\"resource.open\\\",\\\"notification.show\\\",\\\"notification.action\\\",\\\"notification.resolve\\\",\\\"notification.dismiss\\\",\\\"preferences.get\\\",\\\"preferences.set\\\",\\\"extension.settings.all\\\",\\\"extension.settings.get\\\",\\\"extension.settings.set\\\",\\\"extension.settings.delete\\\",\\\"terminal.session\\\",\\\"files.upload\\\",\\\"files.list\\\",\\\"files.delete\\\"],JG=[\\\"host.dispatchKeyboardEvent\\\"],WG=[...GG,...JG];var g=(G,J)=>({call:async(K,Q)=>await G({method:K,params:Q}),onEvent:J}),h=(G)=>{let J=G,K=new Set;return{get:()=>J,subscribe:(Q)=>{return K.add(Q),()=>K.delete(Q)},set:(Q)=>{J=Q;for(let z of K)z(J)}}};var c=\\\"pstdio-extension-mount\\\",KG=()=>{let G=new Map;return{get length(){return G.size},clear:()=>G.clear(),getItem:(J)=>G.get(J)??null,key:(J)=>Array.from(G.keys())[J]??null,removeItem:(J)=>G.delete(J),setItem:(J,K)=>G.set(J,K)}},QG=()=>{for(let G of[\\\"localStorage\\\",\\\"sessionStorage\\\"])try{window[G]}catch{Object.defineProperty(window,G,{configurable:!0,value:KG()})}},m=(G,J)=>{let K=document.documentElement,Q=G===\\\"dark\\\"?\\\"light\\\":\\\"dark\\\";K.classList.remove(Q),K.classList.add(G),K.setAttribute(\\\"data-theme\\\",G),K.style.colorScheme=G;for(let[z,$]of Object.entries(J))if(z.startsWith(\\\"--\\\"))K.style.setProperty(z,$)},ZG=(G)=>{for(let J of G){let K=document.createElement(\\\"link\\\");K.rel=\\\"stylesheet\\\",K.href=J,document.head.appendChild(K)}},$G=()=>{let G=document.getElementById(c);if(!G)G=document.createElement(\\\"div\\\"),G.id=c,G.style.height=\\\"100%\\\",G.style.width=\\\"100%\\\",document.body.appendChild(G);return G},zG=(G)=>G instanceof HTMLInputElement||G instanceof HTMLTextAreaElement||G instanceof HTMLSelectElement||G instanceof HTMLElement&&G.isContentEditable,PG=async()=>{QG();let G=h(void 0),J=new Map,K=(Z,X)=>{let P=J.get(Z)??new Set;return P.add(X),J.set(Z,P),()=>{P.delete(X)}},Q,z=!1,$=await S.connect({init:async(Z)=>{try{m(Z.theme,Z.themeVariables),ZG(Z.styles),G.set(Z.props);let X=$G(),P=await import(Z.moduleUrl),F=P.default??(P.mount?P:void 0);if(!F?.mount)throw Error(\\\"Extension module does not export a default view (defineExtensionView).\\\");let j=g((q)=>$.remote.call(q),K),Y=await F.mount(X,j,G);if(Q=typeof Y===\\\"function\\\"?Y:void 0,!z)z=!0,document.addEventListener(\\\"keydown\\\",(q)=>{if(!q.ctrlKey&&!q.metaKey&&!q.altKey)return;if(zG(q.target)&&!q.shiftKey)return;$.remote.call({method:\\\"host.dispatchKeyboardEvent\\\",params:{key:q.key,code:q.code,ctrlKey:q.ctrlKey,metaKey:q.metaKey,altKey:q.altKey,shiftKey:q.shiftKey,repeat:q.repeat}}).catch(()=>{})},!0)}catch(X){let P=f(X);throw $.remote.runtimeError(P),X instanceof Error?X:Error(P.message)}},themeUpdate:(Z)=>{m(Z.theme,Z.variables)},propsUpdate:(Z)=>{G.set(Z.props)},hostEvent:(Z)=>{for(let X of J.get(Z.scope)??[])X(Z.payload)}});$.remote.ready({}),window.addEventListener(\\\"beforeunload\\\",()=>{Q?.()})};PG();\\n\"","const MOUNT_ID = \"pstdio-extension-mount\";\n\nconst escapeAttribute = (value: string) =>\n value.replaceAll(\"&\", \"&amp;\").replaceAll('\"', \"&quot;\").replaceAll(\"<\", \"&lt;\");\n\nconst escapeScriptContent = (value: string) => value.replaceAll(\"</script\", \"<\\\\/script\").replaceAll(\"<!--\", \"<\\\\!--\");\n\nconst renderRuntimeHostDocument = (scriptTag: string) => `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style>\n html, body {\n height: 100%;\n margin: 0;\n background: transparent;\n }\n #${MOUNT_ID} {\n height: 100%;\n width: 100%;\n display: block;\n min-height: 0;\n }\n </style>\n </head>\n <body>\n <div id=\"${MOUNT_ID}\"></div>\n ${scriptTag}\n </body>\n</html>\n`;\n\nexport const getExtensionRuntimeScriptUrl = () => new URL(\"./runtime.bundle.js\", import.meta.url).href;\n\nexport const renderExtensionRuntimeHtml = (scriptUrl: string) =>\n renderRuntimeHostDocument(`<script src=\"${escapeAttribute(scriptUrl)}\"></script>`);\n\nexport const renderInlineExtensionRuntimeHtml = (runtimeScript: string) =>\n renderRuntimeHostDocument(`<script>${escapeScriptContent(runtimeScript)}</script>`);\n","import runtimeScript from \"pstdio-extensions/bridge/webview-runtime.bundle.js?raw\";\n\nexport {\n renderExtensionRuntimeHtml,\n renderInlineExtensionRuntimeHtml,\n} from \"pstdio-extensions/bridge/webview-runtime-html\";\n\n// The guest runtime bundle is inlined here so a host app can serve it without\n// depending on the private pstdio-extensions package.\nexport const getExtensionRuntimeScript = () => runtimeScript;\n"],"names":["runtimeScript","MOUNT_ID","escapeAttribute","value","replaceAll","escapeScriptContent","renderRuntimeHostDocument","scriptTag","renderExtensionRuntimeHtml","scriptUrl","renderInlineExtensionRuntimeHtml","getExtensionRuntimeScript"],"mappings":"AAAA,MAAAA,IAAe,m/QCATC,IAAW,0BAEXC,IAAkBA,CAACC,MACvBA,EAAMC,WAAW,KAAK,OAAO,EAAEA,WAAW,KAAK,QAAQ,EAAEA,WAAW,KAAK,MAAM,GAE3EC,IAAsBA,CAACF,MAAkBA,EAAMC,WAAW,aAAY,YAAY,EAAEA,WAAW,QAAQ,QAAQ,GAE/GE,IAA4BA,CAACC,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWhDN,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASFA,CAAQ;AAAA,MACjBM,CAAS;AAAA;AAAA;AAAA,GAOFC,IAA6BA,CAACC,MACzCH,EAA0B,gBAAgBJ,EAAgBO,CAAS,CAAC,cAAa,GAEtEC,IAAmCA,CAACV,MAC/CM,EAA0B,WAAWD,EAAoBL,CAAa,CAAC,YAAW,GC9BvEW,IAA4BA,MAAMX;"}
1
+ {"version":3,"file":"webview-runtime.js","sources":["../../pstdio-extensions/src/bridge/webview-runtime/runtime.bundle.js?raw","../../pstdio-extensions/src/bridge/webview-runtime/runtime-html.ts","../src/webview-runtime/index.ts"],"sourcesContent":["export default \"// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\\nfunction d(){let P=globalThis;if(P.window!==void 0&&P.document!==void 0)return\\\"browser\\\";if(P.WorkerGlobalScope!==void 0&&P.self!==void 0&&P.self instanceof P.WorkerGlobalScope||P.window===void 0&&P.self!==void 0&&typeof P.importScripts==\\\"function\\\")return\\\"worker\\\";let G=P.process;if(G&&typeof G==\\\"object\\\"){let R=G.versions??{},J=G.release?.name;if(R.bun||J===\\\"bun\\\"||P.Bun!==void 0)return\\\"bun\\\";if(R.node&&J===\\\"node\\\")return\\\"node\\\"}return P.Bun===void 0?\\\"browser\\\":\\\"bun\\\"}function V(){return d()}function b(){return V()===\\\"worker\\\"}function x(){let P=V();return P===\\\"node\\\"||P===\\\"bun\\\"}function u(){return window.self!==window.top}function p(P){let G={};return function R(J,X=\\\"\\\"){Object.keys(J).forEach((Q)=>{let K=X?`${X}.${Q}`:Q;J[Q]===Object(J[Q])&&R(J[Q],K),typeof J[Q]==\\\"function\\\"&&(G[K]=J[Q],delete J[Q])})}(P),G}function i(P){return!P||P===\\\"null\\\"?\\\"*\\\":P}function l(P,G,R){if(!P||typeof P!=\\\"object\\\")return P;let J=Array.isArray(G)?G:G.split(\\\".\\\").map((Q)=>Q.match(/^\\\\d+$/)?Number(Q):Q),X=P;for(let Q=0;Q<J.length;Q++){let K=J[Q];Q===J.length-1?X[K]=R:((!X[K]||typeof X[K]!=\\\"object\\\")&&(X[K]=typeof J[Q+1]==\\\"number\\\"?[]:{}),X=X[K])}return P}function r(P=10){let G=\\\"\\\";for(let R=0;R<P;R++)G+=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\\".charAt(Math.floor(Math.random()*62));return G}var E=V(),_=null;if(E===\\\"node\\\"||E===\\\"bun\\\")try{let P=globalThis.require;_=P?.(\\\"node:worker_threads\\\")?.parentPort??null}catch{}function s(){if(x())return _;if(b())return self;if(u())return window.parent;throw Error(\\\"No valid target found for postMessage\\\")}function D(P,G,R,J){if(!P)throw Error(\\\"Rimless Error: No target specified for postMessage\\\");if(x()&&P===_){P.postMessage(G,{transfer:J});return}if(b()){P.postMessage(G,{transfer:J});return}if(P.postMessage){P.postMessage(G,{targetOrigin:i(R),transfer:J});return}throw Error(\\\"Rimless Error: Invalid target for postMessage\\\")}function S(P){return _!==null&&P===_}function j(P,G,R){S(P)?P.on(G,R):(\\\"addEventListener\\\"in P)&&P.addEventListener(G,R)}function H(P,G,R){S(P)?P.off(G,R):(\\\"removeEventListener\\\"in P)&&P.removeEventListener(G,R)}function w(P){return P.data||P}var N=function(P){return P.MESSAGE=\\\"message\\\",P}({}),M=function(P){return P.HANDSHAKE_REQUEST=\\\"RIMLESS/HANDSHAKE_REQUEST\\\",P.HANDSHAKE_REPLY=\\\"RIMLESS/HANDSHAKE_REPLY\\\",P.RPC_REQUEST=\\\"RIMLESS/RPC_REQUEST\\\",P.RPC_RESOLVE=\\\"RIMLESS/RPC_RESOLVE\\\",P.RPC_REJECT=\\\"RIMLESS/RPC_REJECT\\\",P}({}),L=Symbol();function o(P={},G,R,J,X){let Q=[];for(let[K,Z]of Object.entries(P)){async function Y(B){let{action:O,callID:q,connectionID:$,callName:U,args:A=[]}=w(B);if(O!==M.RPC_REQUEST||!q||!U||U!==K||$!==G)return;let F={action:M.RPC_RESOLVE,callID:q,callName:U,connectionID:$,error:null,result:null},T;try{F.result=await Z(...A,X),F.result?.[L]&&(T=F.result[L]??[],delete F.result[L])}catch(C){F.action=M.RPC_REJECT,F.error=JSON.parse(JSON.stringify(C,Object.getOwnPropertyNames(C)))}D(J,F,B?.origin,T)}j(R,N.MESSAGE,Y),Q.push(()=>H(R,N.MESSAGE,Y))}return()=>Q.forEach((K)=>K())}function t(P,G,R,J=[],X,Q){return(...K)=>new Promise((Z,Y)=>{let B=r();function O(U){let{callID:A,connectionID:F,callName:T,result:C,error:v,action:I}=w(U);if(!(!A||!T)&&T===P&&A===B&&F===G){if(I===M.RPC_RESOLVE)return Z(C);if(I===M.RPC_REJECT)return Y(v)}}let q={action:M.RPC_REQUEST,args:K,callID:B,callName:P,connectionID:G},$=K.reduce((U,A)=>A[L]?.length?U.concat(A[L]):U,K[L]??[]);j(X,N.MESSAGE,O),J.push(()=>H(X,N.MESSAGE,O)),D(Q,q,R?.origin,$)})}function a(P={},G=[],R,J,X,Q){let K={...P},Z=[];for(let Y of G)l(K,Y,t(Y,R,J,Z,X,Q));return{remote:K,unregisterRemote:()=>Z.forEach((Y)=>Y())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),X=s(),Q=self||window;async function K(Z){let Y=w(Z);if(Y?.action!==M.HANDSHAKE_REPLY)return;let{remote:B,unregisterRemote:O}=a(Y.schema,Y.methodNames,Y.connectionID,Z,Q,X),q=o(J,Y.connectionID,Q,X,B);return await G?.onConnectionSetup?.(B),D(X,{action:M.HANDSHAKE_REPLY,connectionID:Y.connectionID},Z?.origin),R({remote:B,close:()=>{H(Q,N.MESSAGE,K),O(),q()},id:Y.connectionID})}j(Q,N.MESSAGE,K),D(X,{action:M.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P===\\\"object\\\"&&P!==null,y=(P)=>{try{let G=JSON.stringify(P);if(typeof G===\\\"string\\\"&&G.length>0)return G}catch{}try{return String(P)}catch{return\\\"Unknown error\\\"}},k=(P)=>{if(P instanceof Error)return{message:P.message,stack:P.stack};if(typeof P===\\\"string\\\")return{message:P};if(e(P)){let G=typeof P.message===\\\"string\\\"?P.message:null,R=typeof P.stack===\\\"string\\\"?P.stack:void 0;if(G)return R?{message:G,stack:R}:{message:G};return{message:y(P)}}if(P===null||P===void 0)return{message:\\\"Unknown error\\\"};return{message:y(P)}};var z=(P)=>({id:P}),W=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),zP={sidenav:W(\\\"project.sidenav\\\",{kind:\\\"panel\\\"}),headerPrimary:W(\\\"project.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"project.headerOverflow\\\",{kind:\\\"menu\\\"}),settingsPanels:W(\\\"project.settingsPanels\\\",{kind:\\\"settings\\\"})},BP={headerPrimary:W(\\\"session.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"session.headerOverflow\\\",{kind:\\\"menu\\\"}),transcriptActions:W(\\\"session.transcriptActions\\\",{kind:\\\"menu\\\"})},WP={headerPrimary:W(\\\"workspace.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"workspace.headerOverflow\\\",{kind:\\\"menu\\\"}),sidenav:W(\\\"workspace.sidenav\\\",{kind:\\\"panel\\\"})},qP={opened:z(\\\"project.opened\\\")},FP={started:z(\\\"session.started\\\"),resumed:z(\\\"session.resumed\\\"),awaitingInput:z(\\\"session.awaitingInput\\\"),succeeded:z(\\\"session.succeeded\\\"),failed:z(\\\"session.failed\\\"),completed:z(\\\"session.completed\\\")},MP={created:z(\\\"workspace.created\\\"),provision:z(\\\"workspace.provision\\\"),ready:z(\\\"workspace.ready\\\"),archived:z(\\\"workspace.archived\\\"),deleted:z(\\\"workspace.deleted\\\")},OP={removed:z(\\\"worktree.removed\\\")},UP={committed:z(\\\"git.committed\\\"),rebased:z(\\\"git.rebased\\\"),merged:z(\\\"git.merged\\\"),conflicted:z(\\\"git.conflicted\\\")};var PP=[\\\"commands.execute\\\",\\\"resource.open\\\",\\\"notification.show\\\",\\\"notification.action\\\",\\\"notification.resolve\\\",\\\"notification.dismiss\\\",\\\"preferences.get\\\",\\\"preferences.set\\\",\\\"extension.settings.all\\\",\\\"extension.settings.get\\\",\\\"extension.settings.set\\\",\\\"extension.settings.delete\\\",\\\"terminal.session\\\",\\\"files.upload\\\",\\\"files.list\\\",\\\"files.delete\\\"],GP=[\\\"host.dispatchKeyboardEvent\\\"],AP=[...PP,...GP];var c=(P,G)=>({call:async(R,J)=>await P({method:R,params:J}),onEvent:G}),h=(P)=>{let G=P,R=new Set;return{get:()=>G,subscribe:(J)=>{return R.add(J),()=>R.delete(J)},set:(J)=>{G=J;for(let X of R)X(G)}}};var g=\\\"pstdio-extension-mount\\\",RP=()=>{let P=new Map;return{get length(){return P.size},clear:()=>P.clear(),getItem:(G)=>P.get(G)??null,key:(G)=>Array.from(P.keys())[G]??null,removeItem:(G)=>P.delete(G),setItem:(G,R)=>P.set(G,R)}},JP=()=>{for(let P of[\\\"localStorage\\\",\\\"sessionStorage\\\"])try{window[P]}catch{Object.defineProperty(window,P,{configurable:!0,value:RP()})}},m=(P,G)=>{let R=document.documentElement,J=P===\\\"dark\\\"?\\\"light\\\":\\\"dark\\\";R.classList.remove(J),R.classList.add(P),R.setAttribute(\\\"data-theme\\\",P),R.style.colorScheme=P;for(let[X,Q]of Object.entries(G))if(X.startsWith(\\\"--\\\"))R.style.setProperty(X,Q)},KP=(P)=>{for(let G of P){let R=document.createElement(\\\"link\\\");R.rel=\\\"stylesheet\\\",R.href=G,document.head.appendChild(R)}},QP=()=>{let P=document.getElementById(g);if(!P)P=document.createElement(\\\"div\\\"),P.id=g,P.style.height=\\\"100%\\\",P.style.width=\\\"100%\\\",document.body.appendChild(P);return P},XP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,YP=async()=>{JP();let P=h(void 0),G=new Map,R=(K,Z)=>{let Y=G.get(K)??new Set;return Y.add(Z),G.set(K,Y),()=>{Y.delete(Z)}},J,X=!1,Q=await f.connect({init:async(K)=>{try{m(K.theme,K.themeVariables),KP(K.styles),P.set(K.props);let Z=QP(),Y=await import(K.moduleUrl),B=Y.default??(Y.mount?Y:void 0);if(!B?.mount)throw Error(\\\"Extension module does not export a default view (defineExtensionView).\\\");let O=c(($)=>Q.remote.call($),R),q=await B.mount(Z,O,P);if(J=typeof q===\\\"function\\\"?q:void 0,!X)X=!0,document.addEventListener(\\\"keydown\\\",($)=>{if(!$.ctrlKey&&!$.metaKey&&!$.altKey)return;if(XP($.target)&&!$.shiftKey)return;Q.remote.call({method:\\\"host.dispatchKeyboardEvent\\\",params:{key:$.key,code:$.code,ctrlKey:$.ctrlKey,metaKey:$.metaKey,altKey:$.altKey,shiftKey:$.shiftKey,repeat:$.repeat}}).catch(()=>{})},!0)}catch(Z){let Y=k(Z);throw Q.remote.runtimeError(Y),Z instanceof Error?Z:Error(Y.message)}},themeUpdate:(K)=>{m(K.theme,K.variables)},propsUpdate:(K)=>{P.set(K.props)},hostEvent:(K)=>{for(let Z of G.get(K.scope)??[])Z(K.payload)}});Q.remote.ready({}),window.addEventListener(\\\"beforeunload\\\",()=>{J?.()})};YP();\\n\"","const MOUNT_ID = \"pstdio-extension-mount\";\n\nconst escapeAttribute = (value: string) =>\n value.replaceAll(\"&\", \"&amp;\").replaceAll('\"', \"&quot;\").replaceAll(\"<\", \"&lt;\");\n\nconst escapeScriptContent = (value: string) => value.replaceAll(\"</script\", \"<\\\\/script\").replaceAll(\"<!--\", \"<\\\\!--\");\n\nconst renderRuntimeHostDocument = (scriptTag: string) => `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style>\n html, body {\n height: 100%;\n margin: 0;\n background: transparent;\n }\n body {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n }\n #${MOUNT_ID} {\n height: 100%;\n width: 100%;\n display: block;\n min-height: 0;\n }\n </style>\n </head>\n <body>\n <div id=\"${MOUNT_ID}\"></div>\n ${scriptTag}\n </body>\n</html>\n`;\n\nexport const getExtensionRuntimeScriptUrl = () => new URL(\"./runtime.bundle.js\", import.meta.url).href;\n\nexport const renderExtensionRuntimeHtml = (scriptUrl: string) =>\n renderRuntimeHostDocument(`<script src=\"${escapeAttribute(scriptUrl)}\"></script>`);\n\nexport const renderInlineExtensionRuntimeHtml = (runtimeScript: string) =>\n renderRuntimeHostDocument(`<script>${escapeScriptContent(runtimeScript)}</script>`);\n","import runtimeScript from \"pstdio-extensions/bridge/webview-runtime.bundle.js?raw\";\n\nexport {\n renderExtensionRuntimeHtml,\n renderInlineExtensionRuntimeHtml,\n} from \"pstdio-extensions/bridge/webview-runtime-html\";\n\n// The guest runtime bundle is inlined here so a host app can serve it without\n// depending on the private pstdio-extensions package.\nexport const getExtensionRuntimeScript = () => runtimeScript;\n"],"names":["runtimeScript","MOUNT_ID","escapeAttribute","value","replaceAll","escapeScriptContent","renderRuntimeHostDocument","scriptTag","renderExtensionRuntimeHtml","scriptUrl","renderInlineExtensionRuntimeHtml","getExtensionRuntimeScript"],"mappings":"AAAA,MAAAA,IAAe,q/QCATC,IAAW,0BAEXC,IAAkBA,CAACC,MACvBA,EAAMC,WAAW,KAAK,OAAO,EAAEA,WAAW,KAAK,QAAQ,EAAEA,WAAW,KAAK,MAAM,GAE3EC,IAAsBA,CAACF,MAAkBA,EAAMC,WAAW,aAAY,YAAY,EAAEA,WAAW,QAAQ,QAAQ,GAE/GE,IAA4BA,CAACC,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAehDN,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASFA,CAAQ;AAAA,MACjBM,CAAS;AAAA;AAAA;AAAA,GAOFC,IAA6BA,CAACC,MACzCH,EAA0B,gBAAgBJ,EAAgBO,CAAS,CAAC,cAAa,GAEtEC,IAAmCA,CAACV,MAC/CM,EAA0B,WAAWD,EAAoBL,CAAa,CAAC,YAAW,GClCvEW,IAA4BA,MAAMX;"}
@@ -0,0 +1,12 @@
1
+ const n = (e) => ["workbench", "header", e, "leading"], a = (e) => ["workbench", "header", e, "trailing"], o = (e) => ["workbench", "regionTabs", e, "leading"], r = (e) => ["workbench", "regionTabs", e, "add"], t = ["workbench", "commandPalette"], c = n("nav"), h = a("nav"), s = (e) => ["workbench", "resource", e, "context"];
2
+ export {
3
+ a,
4
+ r as b,
5
+ o as c,
6
+ c as d,
7
+ h as e,
8
+ n as h,
9
+ s as r,
10
+ t as w
11
+ };
12
+ //# sourceMappingURL=workbench-menu-paths-B_QJzcNU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-menu-paths-B_QJzcNU.js","sources":["../src/core/registries/menus/workbench-menu-paths.ts"],"sourcesContent":["import type { MenuPath } from \"./menu-registry\";\n\nexport const headerLeadingMenuPath = (region: string): MenuPath => [\"workbench\", \"header\", region, \"leading\"];\n\nexport const headerTrailingMenuPath = (region: string): MenuPath => [\"workbench\", \"header\", region, \"trailing\"];\n\nexport const workbenchRegionTabLeadingMenuPath = (region: string): MenuPath => [\n \"workbench\",\n \"regionTabs\",\n region,\n \"leading\",\n];\n\nexport const workbenchRegionTabAddMenuPath = (region: string): MenuPath => [\"workbench\", \"regionTabs\", region, \"add\"];\n\nexport const workbenchCommandPaletteMenuPath = [\"workbench\", \"commandPalette\"] as const satisfies MenuPath;\n\nexport const workbenchTopHeaderLeadingMenuPath = headerLeadingMenuPath(\"nav\");\n\nexport const workbenchTopHeaderTrailingMenuPath = headerTrailingMenuPath(\"nav\");\n\nexport const resourceContextMenuPath = (resourceKind: string): MenuPath => [\n \"workbench\",\n \"resource\",\n resourceKind,\n \"context\",\n];\n"],"names":["headerLeadingMenuPath","region","headerTrailingMenuPath","workbenchRegionTabLeadingMenuPath","workbenchRegionTabAddMenuPath","workbenchCommandPaletteMenuPath","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","resourceContextMenuPath","resourceKind"],"mappings":"AAEO,MAAMA,IAAwBA,CAACC,MAA6B,CAAC,aAAa,UAAUA,GAAQ,SAAS,GAE/FC,IAAyBA,CAACD,MAA6B,CAAC,aAAa,UAAUA,GAAQ,UAAU,GAEjGE,IAAoCA,CAACF,MAA6B,CAC7E,aACA,cACAA,GACA,SAAS,GAGEG,IAAgCA,CAACH,MAA6B,CAAC,aAAa,cAAcA,GAAQ,KAAK,GAEvGI,IAAkC,CAAC,aAAa,gBAAgB,GAEhEC,IAAoCN,EAAsB,KAAK,GAE/DO,IAAqCL,EAAuB,KAAK,GAEjEM,IAA0BA,CAACC,MAAmC,CACzE,aACA,YACAA,GACA,SAAS;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pstdio/workbench",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/pufflyai/prompt-studio"
@@ -21,10 +21,6 @@
21
21
  "types": "./dist/index.d.ts",
22
22
  "import": "./dist/index.js"
23
23
  },
24
- "./core": {
25
- "types": "./dist/core.d.ts",
26
- "import": "./dist/core.js"
27
- },
28
24
  "./react": {
29
25
  "types": "./dist/react.d.ts",
30
26
  "import": "./dist/react.js"
@@ -64,8 +60,11 @@
64
60
  "react-dom": "^19.0.0"
65
61
  },
66
62
  "dependencies": {
67
- "@pstdio/sdk": "^0.15.0",
68
- "@pstdio/ui": "^0.16.0",
63
+ "@dnd-kit/core": "^6.3.1",
64
+ "@dnd-kit/sortable": "^10.0.0",
65
+ "@dnd-kit/utilities": "^3.2.2",
66
+ "@pstdio/sdk": "^0.16.0",
67
+ "@pstdio/ui": "^0.17.0",
69
68
  "@tanstack/react-hotkeys": "0.10.0",
70
69
  "lucide-react": "^0.556.0",
71
70
  "rimless": "0.8.2",