@pstdio/workbench 0.6.0 → 0.7.1
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.
- package/dist/extensions.d.ts +36 -1
- package/dist/extensions.js +7 -2
- package/dist/extensions.js.map +1 -1
- package/dist/file-renderer-view-B6_iR4EN.js +496 -0
- package/dist/file-renderer-view-B6_iR4EN.js.map +1 -0
- package/dist/index.d.ts +37 -2
- package/dist/index.js +267 -259
- package/dist/index.js.map +1 -1
- package/dist/react.d.ts +49 -3
- package/dist/react.js +2267 -2143
- package/dist/react.js.map +1 -1
- package/dist/testing.d.ts +36 -1
- package/dist/webview-runtime.js +1 -1
- package/dist/webview-runtime.js.map +1 -1
- package/dist/{workbench-built-ins-BtgeB274.js → workbench-built-ins-BncLJfQA.js} +382 -378
- package/dist/workbench-built-ins-BncLJfQA.js.map +1 -0
- package/package.json +4 -4
- package/dist/file-renderer-view-zpunbE4I.js +0 -432
- package/dist/file-renderer-view-zpunbE4I.js.map +0 -1
- package/dist/workbench-built-ins-BtgeB274.js.map +0 -1
package/dist/testing.d.ts
CHANGED
|
@@ -91,6 +91,7 @@ declare interface Command {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
declare interface CommandHandler<TArgs = unknown, TResult = unknown> {
|
|
94
|
+
prepareArgs?(args: TArgs, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: TArgs) => void): TArgs | Promise<TArgs>;
|
|
94
95
|
execute(args: TArgs, context?: WorkbenchCommandExecutionContext): TResult | Promise<TResult>;
|
|
95
96
|
isEnabled?(args: TArgs): boolean;
|
|
96
97
|
isVisible?(args: TArgs): boolean;
|
|
@@ -147,6 +148,8 @@ declare interface CommandParamDescriptor {
|
|
|
147
148
|
options?: CommandParamOption[];
|
|
148
149
|
templateType?: string;
|
|
149
150
|
resourceType?: string;
|
|
151
|
+
accept?: string;
|
|
152
|
+
multiple?: boolean;
|
|
150
153
|
metadata?: Record<string, unknown>;
|
|
151
154
|
}
|
|
152
155
|
|
|
@@ -166,6 +169,7 @@ declare interface CommandRegistry {
|
|
|
166
169
|
isCommandEnabled(id: string, args?: unknown): boolean;
|
|
167
170
|
isCommandVisible(id: string, args?: unknown): boolean;
|
|
168
171
|
isCommandToggled(id: string, args?: unknown): boolean;
|
|
172
|
+
prepareCommandArgs(id: string, args: unknown, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: unknown) => void): Promise<unknown>;
|
|
169
173
|
executeCommand(id: string, args?: unknown, context?: WorkbenchCommandExecutionContext): Promise<unknown>;
|
|
170
174
|
onDidExecuteError(listener: WorkbenchCommandExecutionErrorListener): Disposable_2;
|
|
171
175
|
}
|
|
@@ -470,10 +474,21 @@ declare interface FileIconThemeRegistry {
|
|
|
470
474
|
|
|
471
475
|
declare interface FileRendererContent {
|
|
472
476
|
fileName?: string;
|
|
477
|
+
/** Workspace-relative path shown above the file preview. */
|
|
478
|
+
filePath?: string;
|
|
473
479
|
mimeType?: string;
|
|
474
480
|
content?: string;
|
|
475
481
|
dataUrl?: string;
|
|
476
482
|
placeholder?: string;
|
|
483
|
+
/** Override contribution-level save support for one loaded file. */
|
|
484
|
+
editable?: boolean;
|
|
485
|
+
/** Request Monaco for text that automatic dispatch would open as markdown. */
|
|
486
|
+
textRenderer?: "automatic" | "monaco";
|
|
487
|
+
/** Represent a deliberate no-file selection without an editable blank document. */
|
|
488
|
+
emptyState?: {
|
|
489
|
+
title: string;
|
|
490
|
+
description?: string;
|
|
491
|
+
};
|
|
477
492
|
/** Ordered backing-store revision when one is available. */
|
|
478
493
|
revision?: string;
|
|
479
494
|
}
|
|
@@ -1057,7 +1072,9 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
|
|
|
1057
1072
|
|
|
1058
1073
|
declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
|
|
1059
1074
|
|
|
1060
|
-
declare type ResolvedResourcePresenter =
|
|
1075
|
+
declare type ResolvedResourcePresenter = Omit<ResourcePresenter, "priority"> & {
|
|
1076
|
+
priority: number;
|
|
1077
|
+
};
|
|
1061
1078
|
|
|
1062
1079
|
declare interface ResourceBrowseEntry {
|
|
1063
1080
|
resource: ResourceRef;
|
|
@@ -1119,6 +1136,7 @@ declare interface ResourcePresenter {
|
|
|
1119
1136
|
priority?: number;
|
|
1120
1137
|
canOpen(resource: ResourceRef): boolean;
|
|
1121
1138
|
open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
|
|
1139
|
+
afterOpen?(resource: ResourceRef, instance: WorkbenchPanelInstance, input: OpenResourceInput): void;
|
|
1122
1140
|
}
|
|
1123
1141
|
|
|
1124
1142
|
declare interface ResourceProvider {
|
|
@@ -1324,11 +1342,13 @@ declare interface TreeNode {
|
|
|
1324
1342
|
target?: NavigationTarget;
|
|
1325
1343
|
/** Visual row variant for non-data rows such as placeholders. */
|
|
1326
1344
|
rowVariant?: TreeNodeRowVariant;
|
|
1345
|
+
inlineInput?: TreeNodeInlineInput;
|
|
1327
1346
|
actions?: TreeAction[];
|
|
1328
1347
|
contextMenuActions?: TreeAction[];
|
|
1329
1348
|
contextMenuPath?: MenuPath;
|
|
1330
1349
|
menuPath?: MenuPath;
|
|
1331
1350
|
menuPlacement?: "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "left-start";
|
|
1351
|
+
showContextMenuTrigger?: boolean;
|
|
1332
1352
|
collapsible?: boolean;
|
|
1333
1353
|
disabled?: boolean;
|
|
1334
1354
|
children?: TreeNode[];
|
|
@@ -1339,6 +1359,18 @@ declare interface TreeNode {
|
|
|
1339
1359
|
canHide?: boolean;
|
|
1340
1360
|
/** When false, the node stays fixed within its Sidenav group. */
|
|
1341
1361
|
canReorder?: boolean;
|
|
1362
|
+
/** Allow this node to be moved to another tree location. */
|
|
1363
|
+
canDrag?: boolean;
|
|
1364
|
+
/** Allow movable nodes to be dropped on this node. */
|
|
1365
|
+
canDrop?: boolean;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
declare interface TreeNodeInlineInput {
|
|
1369
|
+
ariaLabel: string;
|
|
1370
|
+
defaultValue?: string;
|
|
1371
|
+
placeholder?: string;
|
|
1372
|
+
onCommit(value: string): Promise<void> | void;
|
|
1373
|
+
onCancel?(): void;
|
|
1342
1374
|
}
|
|
1343
1375
|
|
|
1344
1376
|
declare type TreeNodeRowVariant = "empty-state";
|
|
@@ -1347,6 +1379,8 @@ declare interface TreeRendererContribution {
|
|
|
1347
1379
|
id: string;
|
|
1348
1380
|
title: string;
|
|
1349
1381
|
icon?: string;
|
|
1382
|
+
searchable?: boolean;
|
|
1383
|
+
searchPlaceholder?: string;
|
|
1350
1384
|
when?: string;
|
|
1351
1385
|
defaultExpandedSectionIds?: string[];
|
|
1352
1386
|
defaultExpandedNodeIds?: string[];
|
|
@@ -1354,6 +1388,7 @@ declare interface TreeRendererContribution {
|
|
|
1354
1388
|
getHeader?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
|
|
1355
1389
|
getFooter?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
|
|
1356
1390
|
getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
|
|
1391
|
+
moveNode?(source: TreeNode, target: TreeNode | undefined, ctx: TreeContext): Promise<void> | void;
|
|
1357
1392
|
}
|
|
1358
1393
|
|
|
1359
1394
|
declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
|
package/dist/webview-runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction
|
|
1
|
+
const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction u(){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 j(){return u()}function b(){return j()==="worker"}function x(){let P=j();return P==="node"||P==="bun"}function d(){return window.self!==window.top}function p(P){let G={};return function R(J,Y=""){Object.keys(J).forEach((X)=>{let Q=Y?`${Y}.${X}`:X;J[X]===Object(J[X])&&R(J[X],Q),typeof J[X]=="function"&&(G[Q]=J[X],delete J[X])})}(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((X)=>X.match(/^\\d+$/)?Number(X):X),Y=P;for(let X=0;X<J.length;X++){let Q=J[X];X===J.length-1?Y[Q]=R:((!Y[Q]||typeof Y[Q]!="object")&&(Y[Q]=typeof J[X+1]=="number"?[]:{}),Y=Y[Q])}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=j(),D=null;if(E==="node"||E==="bun")try{let P=globalThis.require;D=P?.("node:worker_threads")?.parentPort??null}catch{}function s(){if(x())return D;if(b())return self;if(d())return window.parent;throw Error("No valid target found for postMessage")}function V(P,G,R,J){if(!P)throw Error("Rimless Error: No target specified for postMessage");if(x()&&P===D){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 D!==null&&P===D}function C(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 T=function(P){return P.MESSAGE="message",P}({}),N=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,Y){let X=[];for(let[Q,$]of Object.entries(P)){async function Z(W){let{action:O,callID:F,connectionID:z,callName:U,args:A=[]}=w(W);if(O!==N.RPC_REQUEST||!F||!U||U!==Q||z!==G)return;let M={action:N.RPC_RESOLVE,callID:F,callName:U,connectionID:z,error:null,result:null},_;try{M.result=await $(...A,Y),M.result?.[L]&&(_=M.result[L]??[],delete M.result[L])}catch(K){M.action=N.RPC_REJECT,M.error=JSON.parse(JSON.stringify(K,Object.getOwnPropertyNames(K)))}V(J,M,W?.origin,_)}C(R,T.MESSAGE,Z),X.push(()=>H(R,T.MESSAGE,Z))}return()=>X.forEach((Q)=>Q())}function t(P,G,R,J=[],Y,X){return(...Q)=>new Promise(($,Z)=>{let W=r();function O(U){let{callID:A,connectionID:M,callName:_,result:K,error:v,action:I}=w(U);if(!(!A||!_)&&_===P&&A===W&&M===G){if(I===N.RPC_RESOLVE)return $(K);if(I===N.RPC_REJECT)return Z(v)}}let F={action:N.RPC_REQUEST,args:Q,callID:W,callName:P,connectionID:G},z=Q.reduce((U,A)=>A[L]?.length?U.concat(A[L]):U,Q[L]??[]);C(Y,T.MESSAGE,O),J.push(()=>H(Y,T.MESSAGE,O)),V(X,F,R?.origin,z)})}function a(P={},G=[],R,J,Y,X){let Q={...P},$=[];for(let Z of G)l(Q,Z,t(Z,R,J,$,Y,X));return{remote:Q,unregisterRemote:()=>$.forEach((Z)=>Z())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),Y=s(),X=self||window;async function Q($){let Z=w($);if(Z?.action!==N.HANDSHAKE_REPLY)return;let{remote:W,unregisterRemote:O}=a(Z.schema,Z.methodNames,Z.connectionID,$,X,Y),F=o(J,Z.connectionID,X,Y,W);return await G?.onConnectionSetup?.(W),V(Y,{action:N.HANDSHAKE_REPLY,connectionID:Z.connectionID},$?.origin),R({remote:W,close:()=>{H(X,T.MESSAGE,Q),O(),F()},id:Z.connectionID})}C(X,T.MESSAGE,Q),V(Y,{action:N.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P==="object"&&P!==null,k=(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"}},y=(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:k(P)}}if(P===null||P===void 0)return{message:"Unknown error"};return{message:k(P)}};var B=(P)=>({id:P}),q=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),BP={sidenav:q("project.sidenav",{kind:"panel"}),headerPrimary:q("project.headerPrimary",{kind:"menu"}),headerOverflow:q("project.headerOverflow",{kind:"menu"}),settingsPanels:q("project.settingsPanels",{kind:"settings"})},WP={headerPrimary:q("session.headerPrimary",{kind:"menu"}),headerOverflow:q("session.headerOverflow",{kind:"menu"}),transcriptActions:q("session.transcriptActions",{kind:"menu"})},qP={headerPrimary:q("workspace.headerPrimary",{kind:"menu"}),headerOverflow:q("workspace.headerOverflow",{kind:"menu"}),sidenav:q("workspace.sidenav",{kind:"panel"})},FP={opened:B("project.opened")},MP={started:B("session.started"),resumed:B("session.resumed"),awaitingInput:B("session.awaitingInput"),succeeded:B("session.succeeded"),failed:B("session.failed"),completed:B("session.completed")},NP={created:B("workspace.created"),provision:B("workspace.provision"),ready:B("workspace.ready"),archived:B("workspace.archived"),deleted:B("workspace.deleted")},OP={removed:B("worktree.removed")},UP={committed:B("git.committed"),rebased:B("git.rebased"),merged:B("git.merged"),conflicted:B("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,R)=>({call:async(J,Y)=>await P({method:J,params:Y}),onEvent:G,extensionId:R}),g=(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 Y of R)Y(G)}}};var h="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[Y,X]of Object.entries(G))if(Y.startsWith("--"))R.style.setProperty(Y,X)},QP=(P)=>{for(let G of P){let R=document.createElement("link");R.rel="stylesheet",R.href=G,document.head.appendChild(R)}},XP=()=>{let P=document.getElementById(h);if(!P)P=document.createElement("div"),P.id=h,P.style.height="100%",P.style.width="100%",document.body.appendChild(P);return P},YP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,ZP=async()=>{JP();let P=g(void 0),G=new Map,R=(Q,$)=>{let Z=G.get(Q)??new Set;return Z.add($),G.set(Q,Z),()=>{Z.delete($)}},J,Y=!1,X=await f.connect({init:async(Q)=>{try{m(Q.theme,Q.themeVariables),QP(Q.styles),P.set(Q.props);let $=XP(),Z=await import(Q.moduleUrl),W=Z.default??(Z.mount?Z:void 0);if(!W?.mount)throw Error("Extension module does not export a default view (defineExtensionView).");let O=c((z)=>X.remote.call(z),R,Q.extensionId),F=await W.mount($,O,P);if(J=typeof F==="function"?F:void 0,!Y)Y=!0,document.addEventListener("keydown",(z)=>{if(!z.ctrlKey&&!z.metaKey&&!z.altKey)return;if(YP(z.target)&&!z.shiftKey)return;X.remote.call({method:"host.dispatchKeyboardEvent",params:{key:z.key,code:z.code,ctrlKey:z.ctrlKey,metaKey:z.metaKey,altKey:z.altKey,shiftKey:z.shiftKey,repeat:z.repeat}}).catch(()=>{})},!0)}catch($){let Z=y($);throw X.remote.runtimeError(Z),$ instanceof Error?$:Error(Z.message)}},themeUpdate:(Q)=>{m(Q.theme,Q.variables)},propsUpdate:(Q)=>{P.set(Q.props)},hostEvent:(Q)=>{for(let $ of G.get(Q.scope)??[])$(Q.payload)}});X.remote.ready({}),window.addEventListener("beforeunload",()=>{J?.()})};ZP();\n', t = "pstdio-extension-mount", o = (e) => e.replaceAll("&", "&").replaceAll('"', """).replaceAll("<", "<"), 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" />
|
|
@@ -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 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 L=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}({}),A=Symbol();function o(P={},G,R,J,X){let Q=[];for(let[K,Z]of Object.entries(P)){async function Y(B){let{action:N,callID:q,connectionID:$,callName:O,args:U=[]}=w(B);if(N!==M.RPC_REQUEST||!q||!O||O!==K||$!==G)return;let F={action:M.RPC_RESOLVE,callID:q,callName:O,connectionID:$,error:null,result:null},T;try{F.result=await Z(...U,X),F.result?.[A]&&(T=F.result[A]??[],delete F.result[A])}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,L.MESSAGE,Y),Q.push(()=>H(R,L.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 N(O){let{callID:U,connectionID:F,callName:T,result:C,error:v,action:I}=w(O);if(!(!U||!T)&&T===P&&U===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((O,U)=>U[A]?.length?O.concat(U[A]):O,K[A]??[]);j(X,L.MESSAGE,N),J.push(()=>H(X,L.MESSAGE,N)),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:N}=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,L.MESSAGE,K),N(),q()},id:Y.connectionID})}j(Q,L.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\\\")},NP={removed:z(\\\"worktree.removed\\\")},OP={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\\\"],UP=[...PP,...GP];var c=(P,G)=>({call:async(R,J)=>await P({method:R,params:J}),onEvent:G}),g=(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 h=\\\"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(h);if(!P)P=document.createElement(\\\"div\\\"),P.id=h,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=g(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 N=c(($)=>Q.remote.call($),R),q=await B.mount(Z,N,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(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"<\", \"<\");\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;"}
|
|
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 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 j(){return u()}function b(){return j()===\\\"worker\\\"}function x(){let P=j();return P===\\\"node\\\"||P===\\\"bun\\\"}function d(){return window.self!==window.top}function p(P){let G={};return function R(J,Y=\\\"\\\"){Object.keys(J).forEach((X)=>{let Q=Y?`${Y}.${X}`:X;J[X]===Object(J[X])&&R(J[X],Q),typeof J[X]==\\\"function\\\"&&(G[Q]=J[X],delete J[X])})}(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((X)=>X.match(/^\\\\d+$/)?Number(X):X),Y=P;for(let X=0;X<J.length;X++){let Q=J[X];X===J.length-1?Y[Q]=R:((!Y[Q]||typeof Y[Q]!=\\\"object\\\")&&(Y[Q]=typeof J[X+1]==\\\"number\\\"?[]:{}),Y=Y[Q])}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=j(),D=null;if(E===\\\"node\\\"||E===\\\"bun\\\")try{let P=globalThis.require;D=P?.(\\\"node:worker_threads\\\")?.parentPort??null}catch{}function s(){if(x())return D;if(b())return self;if(d())return window.parent;throw Error(\\\"No valid target found for postMessage\\\")}function V(P,G,R,J){if(!P)throw Error(\\\"Rimless Error: No target specified for postMessage\\\");if(x()&&P===D){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 D!==null&&P===D}function C(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 T=function(P){return P.MESSAGE=\\\"message\\\",P}({}),N=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,Y){let X=[];for(let[Q,$]of Object.entries(P)){async function Z(W){let{action:O,callID:F,connectionID:z,callName:U,args:A=[]}=w(W);if(O!==N.RPC_REQUEST||!F||!U||U!==Q||z!==G)return;let M={action:N.RPC_RESOLVE,callID:F,callName:U,connectionID:z,error:null,result:null},_;try{M.result=await $(...A,Y),M.result?.[L]&&(_=M.result[L]??[],delete M.result[L])}catch(K){M.action=N.RPC_REJECT,M.error=JSON.parse(JSON.stringify(K,Object.getOwnPropertyNames(K)))}V(J,M,W?.origin,_)}C(R,T.MESSAGE,Z),X.push(()=>H(R,T.MESSAGE,Z))}return()=>X.forEach((Q)=>Q())}function t(P,G,R,J=[],Y,X){return(...Q)=>new Promise(($,Z)=>{let W=r();function O(U){let{callID:A,connectionID:M,callName:_,result:K,error:v,action:I}=w(U);if(!(!A||!_)&&_===P&&A===W&&M===G){if(I===N.RPC_RESOLVE)return $(K);if(I===N.RPC_REJECT)return Z(v)}}let F={action:N.RPC_REQUEST,args:Q,callID:W,callName:P,connectionID:G},z=Q.reduce((U,A)=>A[L]?.length?U.concat(A[L]):U,Q[L]??[]);C(Y,T.MESSAGE,O),J.push(()=>H(Y,T.MESSAGE,O)),V(X,F,R?.origin,z)})}function a(P={},G=[],R,J,Y,X){let Q={...P},$=[];for(let Z of G)l(Q,Z,t(Z,R,J,$,Y,X));return{remote:Q,unregisterRemote:()=>$.forEach((Z)=>Z())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),Y=s(),X=self||window;async function Q($){let Z=w($);if(Z?.action!==N.HANDSHAKE_REPLY)return;let{remote:W,unregisterRemote:O}=a(Z.schema,Z.methodNames,Z.connectionID,$,X,Y),F=o(J,Z.connectionID,X,Y,W);return await G?.onConnectionSetup?.(W),V(Y,{action:N.HANDSHAKE_REPLY,connectionID:Z.connectionID},$?.origin),R({remote:W,close:()=>{H(X,T.MESSAGE,Q),O(),F()},id:Z.connectionID})}C(X,T.MESSAGE,Q),V(Y,{action:N.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P===\\\"object\\\"&&P!==null,k=(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\\\"}},y=(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:k(P)}}if(P===null||P===void 0)return{message:\\\"Unknown error\\\"};return{message:k(P)}};var B=(P)=>({id:P}),q=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),BP={sidenav:q(\\\"project.sidenav\\\",{kind:\\\"panel\\\"}),headerPrimary:q(\\\"project.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:q(\\\"project.headerOverflow\\\",{kind:\\\"menu\\\"}),settingsPanels:q(\\\"project.settingsPanels\\\",{kind:\\\"settings\\\"})},WP={headerPrimary:q(\\\"session.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:q(\\\"session.headerOverflow\\\",{kind:\\\"menu\\\"}),transcriptActions:q(\\\"session.transcriptActions\\\",{kind:\\\"menu\\\"})},qP={headerPrimary:q(\\\"workspace.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:q(\\\"workspace.headerOverflow\\\",{kind:\\\"menu\\\"}),sidenav:q(\\\"workspace.sidenav\\\",{kind:\\\"panel\\\"})},FP={opened:B(\\\"project.opened\\\")},MP={started:B(\\\"session.started\\\"),resumed:B(\\\"session.resumed\\\"),awaitingInput:B(\\\"session.awaitingInput\\\"),succeeded:B(\\\"session.succeeded\\\"),failed:B(\\\"session.failed\\\"),completed:B(\\\"session.completed\\\")},NP={created:B(\\\"workspace.created\\\"),provision:B(\\\"workspace.provision\\\"),ready:B(\\\"workspace.ready\\\"),archived:B(\\\"workspace.archived\\\"),deleted:B(\\\"workspace.deleted\\\")},OP={removed:B(\\\"worktree.removed\\\")},UP={committed:B(\\\"git.committed\\\"),rebased:B(\\\"git.rebased\\\"),merged:B(\\\"git.merged\\\"),conflicted:B(\\\"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,R)=>({call:async(J,Y)=>await P({method:J,params:Y}),onEvent:G,extensionId:R}),g=(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 Y of R)Y(G)}}};var h=\\\"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[Y,X]of Object.entries(G))if(Y.startsWith(\\\"--\\\"))R.style.setProperty(Y,X)},QP=(P)=>{for(let G of P){let R=document.createElement(\\\"link\\\");R.rel=\\\"stylesheet\\\",R.href=G,document.head.appendChild(R)}},XP=()=>{let P=document.getElementById(h);if(!P)P=document.createElement(\\\"div\\\"),P.id=h,P.style.height=\\\"100%\\\",P.style.width=\\\"100%\\\",document.body.appendChild(P);return P},YP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,ZP=async()=>{JP();let P=g(void 0),G=new Map,R=(Q,$)=>{let Z=G.get(Q)??new Set;return Z.add($),G.set(Q,Z),()=>{Z.delete($)}},J,Y=!1,X=await f.connect({init:async(Q)=>{try{m(Q.theme,Q.themeVariables),QP(Q.styles),P.set(Q.props);let $=XP(),Z=await import(Q.moduleUrl),W=Z.default??(Z.mount?Z:void 0);if(!W?.mount)throw Error(\\\"Extension module does not export a default view (defineExtensionView).\\\");let O=c((z)=>X.remote.call(z),R,Q.extensionId),F=await W.mount($,O,P);if(J=typeof F===\\\"function\\\"?F:void 0,!Y)Y=!0,document.addEventListener(\\\"keydown\\\",(z)=>{if(!z.ctrlKey&&!z.metaKey&&!z.altKey)return;if(YP(z.target)&&!z.shiftKey)return;X.remote.call({method:\\\"host.dispatchKeyboardEvent\\\",params:{key:z.key,code:z.code,ctrlKey:z.ctrlKey,metaKey:z.metaKey,altKey:z.altKey,shiftKey:z.shiftKey,repeat:z.repeat}}).catch(()=>{})},!0)}catch($){let Z=y($);throw X.remote.runtimeError(Z),$ instanceof Error?$:Error(Z.message)}},themeUpdate:(Q)=>{m(Q.theme,Q.variables)},propsUpdate:(Q)=>{P.set(Q.props)},hostEvent:(Q)=>{for(let $ of G.get(Q.scope)??[])$(Q.payload)}});X.remote.ready({}),window.addEventListener(\\\"beforeunload\\\",()=>{J?.()})};ZP();\\n\"","const MOUNT_ID = \"pstdio-extension-mount\";\n\nconst escapeAttribute = (value: string) =>\n value.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"<\", \"<\");\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,mhRCATC,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;"}
|