diff --git a/README.md b/README.md
index 02d7f7e..ce3f754 100644
--- a/README.md
+++ b/README.md
@@ -1,76 +1,16 @@
# Visualization Framework
-## Installation
+This repository contains two packages.
-You can use yarn to install the core library:
+## @hediet/visualization-core
-```
-yarn add @hediet/visualization-core
-```
+This package provides basic infrastructure for implementing visualizations.
+See its readme [here](./visualization-core/README.md).
-If you want to use the existing visualizations, add the bundle library:
+## @hediet/visualization-bundle
-```
-yarn add @hediet/visualization-bundle
-```
+This package bundles all the visualizations.
+See its readme [here](./visualization-bundle/README.md).
-## Usage
-
-Import `@hediet/visualization-bundle` to register all default visualizations:
-
-```tsx
-// This registers all visualizations
-import "@hediet/visualization-bundle";
-```
-
-Don't forget to import the styles in your scss file:
-
-```scss
-@import "~@hediet/visualization-bundle/style.scss";
-```
-
-Use `globalVisualizationFactory` to visualize some data:
-
-```tsx
-import { globalVisualizationFactory } from "@hediet/visualization-core";
-
-const data = {
- kind: { graph: true as true },
- nodes: [
- { id: "1", label: "1" },
- { id: "2", label: "2", color: "orange" },
- { id: "3", label: "3" },
- ],
- edges: [
- { from: "1", to: "2", color: "red" },
- { from: "1", to: "3" },
- ],
-};
-
-const visualizations = globalVisualizationFactory.getVisualizations(
- data,
- /* preferred visualization id */ undefined
-);
-// `visualizations.bestVisualization` is the visualization that is best suited to visualize the data.
-// `visualiztaions.allVisualizations` contains all suitable visualizations.
-```
-
-If you use react, you can use the `VisualizationView` component to render a visualization:
-
-```tsx
-import { VisualizationView, Theme } from "@hediet/visualization-core";
-
-// const visualizations = ...
-
-function App() {
- if (!visualizations.bestVisualization) {
- return null;
- }
- return (
-
- );
-}
-```
+If you want to add your own visualization to this project, visualization-bundle is the right place!
+The readme documents how to implement your own visualization.
diff --git a/playground/src/visualizations.ts b/playground/src/visualizations.ts
index fa65fbe..7e1c6fd 100644
--- a/playground/src/visualizations.ts
+++ b/playground/src/visualizations.ts
@@ -1,4 +1,5 @@
//// Uncomment the visualization that you work on to increase webpack build speed!
+//// If you create a new visualization, add it here!
// import "@hediet/visualization-bundle/dist/visualizers/ast-visualizer"; /*
// import "@hediet/visualization-bundle/dist/visualizers/graph/dot-graphviz-visualizer" /*
@@ -7,6 +8,7 @@
// import "@hediet/visualization-bundle/dist/visualizers/grid-visualizer" /*
// import "@hediet/visualization-bundle/dist/visualizers/image-visualizer"; /*
// import "@hediet/visualization-bundle/dist/visualizers/monaco-text-visualizer" /*
+// import "@hediet/visualization-bundle/dist/visualizers/monaco-text-diff-visualizer"; /*
// import "@hediet/visualization-bundle/dist/visualizers/perspective-table-visualizer" /*
// import "@hediet/visualization-bundle/dist/visualizers/plotly-visualizer" /*
// import "@hediet/visualization-bundle/dist/visualizers/simple-text-visualizer"; /*
@@ -17,7 +19,9 @@
// This bundles the monaco editor. Uncomment it to load monaco dynamically.
// Dynamic loading increases webpack build speed significantly.
if (typeof process === undefined) {
+ // We check for process so that we don't load monaco from nodejs.
require("monaco-editor");
}
+// This import bundles *all* visualizations. This makes webpack super slow.
import "@hediet/visualization-bundle"; // */
diff --git a/visualization-bundle/README.md b/visualization-bundle/README.md
index 3b9e5ca..7c7ea88 100644
--- a/visualization-bundle/README.md
+++ b/visualization-bundle/README.md
@@ -1,11 +1,17 @@
# Visualization Bundle
+This package registers various visualizations. If you have an idea for a cool visualization, add it here!
+
+## Installation
+
You can use yarn to install this library:
```
yarn add @hediet/visualization-bundle
```
+Install `@hediet/visualization-core` before!
+
## Usage
Import `@hediet/visualization-bundle` to register all default visualizations to `globalVisualizationFactory` of `@hediet/visualization-core`:
@@ -50,7 +56,9 @@ See docs of `@hediet/visualization-core` for how to find and render visualizatio
## Supported Visualizations
-### Origin Visualizations
+You can find a playground that demonstrates all visualizations [here](https://hediet.github.io/visualization/).
+
+### Source Visualizations
- Tree Visualizer
- AST Visualizer (+ Monaco Source Code View)
@@ -59,7 +67,7 @@ See docs of `@hediet/visualization-core` for how to find and render visualizatio
- Image Visualizer
- Simple Text Visualizer
-### Integrated Visualizations
+### Integrated Visualization Libraries
- Plotly Visualizer
- Perspective JS Visualizer
@@ -69,6 +77,12 @@ See docs of `@hediet/visualization-core` for how to find and render visualizatio
- Vis.js Visualizer
- Monaco Editor Source Code Visualizer
-```
+## Setup Local Development Copy
-```
+- Clone this repository.
+- Run `yarn` in the root folder.
+- Run `yarn dev` in the `visualization-bundle` folder to start tsc in watch mode.
+- Edit [./playground/src/visualization.ts](../playground/src/visualizations.ts) to your needs to improve webpack performance.
+- Run `yarn dev` in the `playground` folder to start the playground where you can debug your visualization.
+
+Please use the [`simple-text-visualizer`](./src/visualizers/simple-text-visualizer/index.tsx) as starting point!
diff --git a/visualization-bundle/src/visualizers/simple-text-visualizer/index.tsx b/visualization-bundle/src/visualizers/simple-text-visualizer/index.tsx
index 3fbe590..82620f8 100644
--- a/visualization-bundle/src/visualizers/simple-text-visualizer/index.tsx
+++ b/visualization-bundle/src/visualizers/simple-text-visualizer/index.tsx
@@ -8,27 +8,53 @@ import {
import { visualizationNs } from "../../consts";
export const simpleTextVisualizer = createVisualizer({
+ // The id must be unique
id: "simple-text",
+ // The name can be some display text
name: "Simple Text",
+ // Here you can define the schema for the data that this visualizer can handle.
+ // You must have a kind property of type object whose properties must be `true`.
serializer: sOpenObject({
kind: sOpenObject({
text: sLiteral(true),
}),
text: sString(),
- }).defineAs(visualizationNs("SimpleTextVisualizationData")),
- getVisualization: (data, self) =>
- new ReactVisualization(self, { priority: 100 }, () => (
-
- {data.text}
-
- )),
+ }).defineAs(
+ // This name is important for schema and code generation of the interface types.
+ // Make sure it is unique. It should end with "VisualizationData".
+ visualizationNs("SimpleTextVisualizationData")
+ ),
+ getVisualization: (
+ /* The type of data is specified by the serializer above. */ data,
+ self
+ ) =>
+ // If you want to use react, this is the way to go.
+ // Return your own implementation if you want to render directly to the DOM.
+ new ReactVisualization(
+ self,
+ {
+ // The priority is used for automatically selecting the best visualization
+ // if multiple visualizations can handle the data.
+ priority: 100,
+ },
+ () => (
+
+ {data.text}
+
+ )
+ ),
});
+// This registers the visualizer for automatic discovery.
+// Make sure to import this file in "../index.ts" so that it gets loaded when
+// someone imports "@hediet/visualization-bundle"!
globalVisualizationFactory.addVisualizer(simpleTextVisualizer);
diff --git a/visualization-bundle/src/visualizers/simple-text-visualizer/style.scss b/visualization-bundle/src/visualizers/simple-text-visualizer/style.scss
index 23c9354..5dbeeda 100644
--- a/visualization-bundle/src/visualizers/simple-text-visualizer/style.scss
+++ b/visualization-bundle/src/visualizers/simple-text-visualizer/style.scss
@@ -1,3 +1,5 @@
+// Provide default colors for both the dark and light theme here!
+
.theme-dark {
--visualizer-simple-text-color: white;
}