import * as vscode from "vscode"; import { getExtensionUri } from "../../context"; import { getNonce, getUniqueId } from "../util/vscode"; import { getTheme } from "../util/getTheme"; import { AutoDevWebviewProtocol } from "./AutoDevWebviewProtocol"; export class AutoDevWebviewViewProvider implements vscode.WebviewViewProvider { private _webview?: vscode.Webview; public webviewProtocol!: AutoDevWebviewProtocol; constructor( private readonly _context: vscode.ExtensionContext, private readonly windowId: string = "" ) {} get webview() { return this._webview; } public static readonly viewType = "autodev.autodevGUIView"; async resolveWebviewView( webviewView: vscode.WebviewView, _context: vscode.WebviewViewResolveContext, _token: vscode.CancellationToken ): Promise { this._webview = webviewView.webview; this.webviewProtocol = new AutoDevWebviewProtocol( this._webview, ); webviewView.webview.html = await this.getSidebarContent( this._context, webviewView ); } async getSidebarContent( context: vscode.ExtensionContext | undefined, panel: vscode.WebviewPanel | vscode.WebviewView, page: string | undefined = undefined, edits: any[] | undefined = undefined, isFullScreen: boolean = false ): Promise { let extensionUri = getExtensionUri()!; let scriptUri: string; let styleMainUri: string; let vscMediaUrl: string = panel.webview .asWebviewUri(vscode.Uri.joinPath(extensionUri, "gui")) .toString(); const inDevelopmentMode = context?.extensionMode === vscode.ExtensionMode.Development; // if (!inDevelopmentMode) { scriptUri = panel.webview .asWebviewUri( vscode.Uri.joinPath(extensionUri, "gui-sidebar/dist/assets/index.js") ) .toString(); styleMainUri = panel.webview .asWebviewUri( vscode.Uri.joinPath(extensionUri, "gui-sidebar/dist/assets/index.css") ) .toString(); // } else { // scriptUri = "http://localhost:5173/src/main.tsx"; // styleMainUri = "http://localhost:5173/src/index.css"; // } panel.webview.options = { enableScripts: true, localResourceRoots: [ vscode.Uri.joinPath(extensionUri, "gui-sidebar"), vscode.Uri.joinPath(extensionUri, "dist", "assets"), ], enableCommandUris: true, portMapping: [ { webviewPort: 65433, extensionHostPort: 65433, }, ], }; const nonce = getNonce(); const currentTheme = getTheme(); vscode.workspace.onDidChangeConfiguration((e) => { if (e.affectsConfiguration("workbench.colorTheme")) { // Send new theme to GUI to update embedded Monaco themes this.webviewProtocol?.request("setTheme", { theme: getTheme() }); } }); this.webviewProtocol._webview = panel.webview; return ` Continue
${ inDevelopmentMode ? `` : "" } ${ edits ? `` : "" } ${page ? `` : ""} `; } }