diff --git a/extension/CHANGELOG.md b/extension/CHANGELOG.md
index c04fb31..4566373 100644
--- a/extension/CHANGELOG.md
+++ b/extension/CHANGELOG.md
@@ -1,5 +1,12 @@
# Change Log
+## 2.0.0
+
+- New Logo
+- Support for the new JS debug adapters
+- Moved visualizations to [github.com/hediet/visualization](https://github.com/hediet/visualization).
+- New Visualizations / Improved design
+
## 1.1.0
- Fixes a bug that occurs when the debug visualizer is opened after the debug session has started.
diff --git a/extension/docs/logo.drawio.png b/extension/docs/logo.drawio.png
new file mode 100644
index 0000000..4be8538
Binary files /dev/null and b/extension/docs/logo.drawio.png differ
diff --git a/extension/docs/logo.png b/extension/docs/logo.png
deleted file mode 100644
index 2d9f7d9..0000000
Binary files a/extension/docs/logo.png and /dev/null differ
diff --git a/extension/package.json b/extension/package.json
index d33b4cf..f732050 100644
--- a/extension/package.json
+++ b/extension/package.json
@@ -2,9 +2,9 @@
"name": "debug-visualizer",
"private": true,
"displayName": "Debug Visualizer",
- "description": "An extension that visualizes values while debugging.",
+ "description": "A visual watch window that lets you visualize your data structures while debugging.",
"icon": "docs/logo.png",
- "version": "1.1.0",
+ "version": "2.0.0",
"license": "GPL-3.0",
"engines": {
"vscode": "^1.35.0"
@@ -17,7 +17,8 @@
"visual",
"javascript",
"graph",
- "ast"
+ "ast",
+ "visualization"
],
"bugs": {
"url": "https://github.com/hediet/vscode-debug-visualizer/issues"
diff --git a/extension/src/WebViews.ts b/extension/src/WebViews.ts
index e2790a1..25e4b1d 100644
--- a/extension/src/WebViews.ts
+++ b/extension/src/WebViews.ts
@@ -55,7 +55,7 @@ export class WebViews {
webviewPanel: WebviewPanel,
expression: string | undefined = undefined
) {
- webviewPanel.webview.html = getHtml(this.server, expression);
+ webviewPanel.webview.html = getWebviewHtml(this.server, expression);
const view = new WebView(webviewPanel);
this.debugVisualizations.set(webviewPanel, view);
webviewPanel.onDidDispose(() => {
@@ -68,7 +68,7 @@ export class WebView {
constructor(private readonly webviewPanel: WebviewPanel) {}
}
-export function getHtml(
+export function getWebviewHtml(
server: Server,
expression: string | undefined = undefined
) {
diff --git a/webview/src/components/App.tsx b/webview/src/components/App.tsx
new file mode 100644
index 0000000..c455c22
--- /dev/null
+++ b/webview/src/components/App.tsx
@@ -0,0 +1,25 @@
+import * as React from "react";
+import { hotComponent } from "../hotComponent";
+import { GUI } from "./GUI";
+import { Model } from "../model/Model";
+
+@hotComponent(module)
+export class App extends React.Component {
+ private readonly model = new Model();
+
+ constructor(props: any) {
+ super(props);
+
+ if (this.model.runningMode !== "webView") {
+ if (this.model.theme === "light") {
+ require("../vscode-light.scss");
+ } else {
+ require("../vscode-dark.scss");
+ }
+ }
+ }
+
+ render() {
+ return ;
+ }
+}
diff --git a/webview/src/components/Visualizer.tsx b/webview/src/components/Visualizer.tsx
index 400e2e7..484e484 100644
--- a/webview/src/components/Visualizer.tsx
+++ b/webview/src/components/Visualizer.tsx
@@ -9,7 +9,9 @@ import { VisualizationView, Theme } from "@hediet/visualization-core";
export class Visualizer extends React.Component<{ model: Model }> {
render() {
return (
-
{this.renderContent()}
+
+ {this.renderContent()}
+
);
}
@@ -36,7 +38,11 @@ export class Visualizer extends React.Component<{ model: Model }> {
}
return (
);
diff --git a/webview/src/hotComponent.tsx b/webview/src/hotComponent.tsx
new file mode 100644
index 0000000..520f54a
--- /dev/null
+++ b/webview/src/hotComponent.tsx
@@ -0,0 +1,49 @@
+import Module = require("module");
+import { observer } from "mobx-react";
+import * as React from "react";
+import { observable, runInAction } from "mobx";
+
+type ReactComponent =
+ | React.ComponentClass
+ | React.FunctionComponent
;
+
+const allComponents = new Map();
+
+export function hotComponent(
+ module: Module
+): (Component: T) => T {
+ return (component: T): T => {
+ const key = JSON.stringify({ id: module.id, name: component.name });
+
+ let result = allComponents.get(key);
+ if (!result) {
+ result = observable({ component: component });
+ allComponents.set(key, result);
+ } else {
+ setTimeout(() => {
+ runInAction(`Update Component ${component.name}`, () => {
+ result!.component = component;
+ });
+ }, 0);
+ }
+
+ const m = module as {
+ hot?: {
+ accept: ((
+ componentName: string,
+ callback: () => void
+ ) => void) &
+ ((callback: () => void) => void);
+ };
+ };
+
+ if (m.hot) {
+ m.hot.accept(() => {});
+ }
+
+ return observer((props: any) => {
+ const C = result!.component;
+ return ;
+ }) as any;
+ };
+}
diff --git a/webview/src/index.tsx b/webview/src/index.tsx
index b567caf..f7a90c5 100644
--- a/webview/src/index.tsx
+++ b/webview/src/index.tsx
@@ -1,38 +1,9 @@
import * as React from "react";
import * as ReactDOM from "react-dom";
import "./style.scss";
-import { Model } from "./model/Model";
-import Components = require("./components/GUI");
-import * as mobx from "mobx";
+import { App } from "./components/App";
-const model = new Model();
-
-if (model.runningMode !== "webView") {
- if (model.theme === "light") {
- require("./vscode-light.scss");
- } else {
- require("./vscode-dark.scss");
- }
-}
-
-function render(target: HTMLDivElement) {
- const c = require("./components/GUI") as typeof Components;
- ReactDOM.render(, target);
-}
-
-const target = document.createElement("div");
-target.className = "target";
-document.body.appendChild(target);
-
-render(target);
-
-declare var module: {
- hot?: { accept: (componentName: string, callback: () => void) => void };
-};
-declare var require: (name: string) => any;
-
-if (module.hot) {
- module.hot.accept("./components/GUI", () => {
- render(target);
- });
-}
+const elem = document.createElement("div");
+elem.className = "react-root";
+document.body.append(elem);
+ReactDOM.render(, elem);
diff --git a/webview/src/style.scss b/webview/src/style.scss
index c05d2f6..8d44f97 100644
--- a/webview/src/style.scss
+++ b/webview/src/style.scss
@@ -5,7 +5,7 @@
html,
body,
-.target {
+.react-root {
height: 100%;
}
@@ -124,12 +124,6 @@ body {
}
}
-.component-Visualizer {
- width: 100%;
- height: 100%;
- overflow: auto;
-}
-
.component-NoData {
width: 100%;
height: 100%;