visualifyjs 2.5.3 → 3.0.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.
- package/.claude/mem/TIMELINE.md +36 -0
- package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-external-script-solution.md +24 -0
- package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-session-summary.md +43 -0
- package/.claude/mem/notes/2026-02-11-cli-fix-editor-command-alias.md +26 -0
- package/.claude/mem/notes/2026-02-11-phase-3-developer-experience-completed.md +51 -0
- package/.claude/mem/notes/2026-02-11-phase-4-web-workers-implementation-complete.md +59 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-2-3d-visualization-complete.md +50 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-2-committed-ready-for-phase-3.md +33 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-3-complete-developer-experience.md +52 -0
- package/.claude/mem/notes/2026-02-11-visualify-repository-cleanup-complete.md +28 -0
- package/.claude/mem/notes/2026-02-18-codebase-cleanup-docsify-plugin-documentation.md +37 -0
- package/.claude/mem/notes/2026-02-19-css-grid-layout-fix-displaycontents-on-vcontroller.md +18 -0
- package/.claude/mem/notes/2026-02-19-docsify-plugin-fixes-latex-and-visualify-code-bloc.md +26 -0
- package/.claude/mem/notes/2026-02-19-page-mode-docs-update-decisions.md +23 -0
- package/.claude/mem/notes/2026-02-19-react-context-infinite-re-render-loop-fix-pattern.md +31 -0
- package/.claude/mem/notes/2026-02-19-version-300-bump-and-build-fixes.md +32 -0
- package/.claude/mem/notes/2026-02-19-visualify-build-deployment-architecture-bug-fixes.md +25 -0
- package/.claude/mem/notes/2026-02-19-visualify-dist-iife-self-contained-build-config.md +30 -0
- package/.claude/mem/notes/2026-02-19-visualify-infinite-loop-i18n-fixes.md +31 -0
- package/.claude/mem/notes/2026-02-19-visualify-v3-bundle-splitting-docs-restructuring.md +32 -0
- package/.claude/mem/notes/2026-02-20-bundle-externalization-final-architecture.md +29 -0
- package/.claude/mem/notes/2026-02-20-chromium-page-fix-unstable-keys-and-double-event-b.md +27 -0
- package/.claude/mem/notes/2026-02-20-console-cleanup-bundle-optimization-commit.md +20 -0
- package/.claude/mem/notes/2026-02-20-dotbio-dot-plot-fix-useeffect-dependency.md +21 -0
- package/.claude/mem/notes/2026-02-20-public-folder-cleanup-and-readme-rewrite.md +25 -0
- package/.claude/mem/notes/2026-02-20-v300-release-and-beta-channel-strategy.md +29 -0
- package/.claude/mem/notes/2026-02-20-visium-background-image-unknown-legend-fix.md +19 -0
- package/.claude/mem/notes/2026-02-20-visualify-cdn-loader-bundle-externalization.md +34 -0
- package/.claude/mem/sessions/session-2026-02-20-031524.md +54 -0
- package/.claude/settings.local.json +21 -0
- package/.github/workflows/static.yml.bak +51 -51
- package/.sisyphus/boulder.json +65 -0
- package/.sisyphus/plans/phase-4-advanced-optimizations.md +217 -0
- package/LICENSE +674 -674
- package/README.md +94 -59
- package/config-overrides.js +31 -31
- package/dist/stats.html +4949 -0
- package/dist/visualify-3d.esm.js +1 -0
- package/dist/visualify-3d.js +1 -0
- package/dist/visualify-core.esm.js +1 -0
- package/dist/visualify-core.js +1 -0
- package/dist/visualify-docs.esm.js +1 -0
- package/dist/visualify-docs.js +1 -0
- package/dist/visualify-loader.js +1 -0
- package/dist/visualify-pages.esm.js +1 -0
- package/dist/visualify-pages.js +1 -0
- package/dist/visualify-portal.esm.js +1 -0
- package/dist/visualify-portal.js +1 -0
- package/dist/visualify-shared.js +26571 -0
- package/dist/visualify.js +1 -188
- package/docs/CHANGELOG.md +148 -0
- package/docs/cli/commands.md +513 -0
- package/docs/configuration/visualify-json.md +474 -0
- package/docs/docs/3d-visualization.md +374 -0
- package/docs/docs/CLI.md +303 -34
- package/docs/docs/README.md +65 -65
- package/docs/docs/Rechart/bar.md +190 -190
- package/docs/docs/Rechart/funnel.md +241 -193
- package/docs/docs/Rechart/line.md +355 -355
- package/docs/docs/Rechart/pie.md +225 -225
- package/docs/docs/Rechart/radar.md +253 -253
- package/docs/docs/Rechart/scatter.md +298 -0
- package/docs/docs/_404.md +51 -51
- package/docs/docs/_coverpage.md +11 -11
- package/docs/docs/_sidebar.md +54 -43
- package/docs/docs/components/dotBio.md +87 -34
- package/docs/docs/components/echart.md +171 -82
- package/docs/docs/components/html.md +61 -34
- package/docs/docs/components/macaron.md +156 -145
- package/docs/docs/components/markdown.md +42 -0
- package/docs/docs/components/more.md +183 -142
- package/docs/docs/components/plotly.md +132 -62
- package/docs/docs/components/scatterL.md +171 -70
- package/docs/docs/components/visium.md +112 -57
- package/docs/docs/configuration.md +121 -123
- package/docs/docs/deploy.md +31 -31
- package/docs/docs/docsify-plugin.md +655 -0
- package/docs/docs/hmr.md +165 -0
- package/docs/docs/i18n.md +332 -0
- package/docs/docs/log.md +30 -1
- package/docs/docs/more-pages.md +23 -23
- package/docs/docs/quickstart.md +148 -119
- package/docs/docs/rechart-attributes.md +74 -74
- package/docs/docs/rechart-basic-usage.md +160 -162
- package/docs/docs/theme.md +5 -5
- package/docs/docs/typescript.md +306 -0
- package/docs/docs/visual-editor.md +359 -0
- package/docs/index.html +85 -71
- package/docs/manifest.json +23 -23
- package/docs/migration/v3-migration.md +392 -0
- package/docs/static/css/fluff-stuff.css +169 -169
- package/docs/static/css/font-awesome.min.css +4 -4
- package/docs/static/css/visualify.css +6 -25
- package/docs/static/js/3d-viz-examples.js +181 -0
- package/docs/static/js/configuration.js +630 -448
- package/docs/static/js/visualify.js +1 -188
- package/package.json +106 -84
- package/rollup.config.mjs +766 -76
- package/src/_css/404.css +115 -115
- package/src/_css/App.css +37 -37
- package/src/_css/autoSuggestion.css +26 -26
- package/src/_css/circular-progress.css +32 -32
- package/src/_css/index.css +36 -36
- package/src/_css/modern.css +350 -25
- package/src/_media/corner.svg +8 -8
- package/src/_media/download.svg +3 -3
- package/src/_media/logo.svg +14 -14
- package/src/_test/App.test.js +15 -15
- package/src/_utils/reportWebVitals.js +13 -13
- package/src/a11y/README.md +177 -0
- package/src/a11y/aria-labels.js +339 -0
- package/src/a11y/color-contrast.js +535 -0
- package/src/a11y/index.js +197 -0
- package/src/a11y/keyboard-nav.js +523 -0
- package/src/a11y/styles.css +165 -0
- package/src/cli/commands/dev.js +214 -0
- package/src/cli/commands/docs.js +521 -0
- package/src/cli/commands/edit.js +379 -0
- package/src/cli/commands/init.js +213 -0
- package/src/cli/commands/portal.js +236 -0
- package/src/cli/dev-server.js +530 -0
- package/src/cli/hmr.js +456 -0
- package/src/cli/index.js +180 -0
- package/src/cli/utils/config.js +207 -0
- package/src/cli/utils/logger.js +241 -0
- package/src/config/defaults.ts +122 -0
- package/src/config/index.ts +72 -0
- package/src/config/loader.ts +478 -0
- package/src/config/schema.ts +227 -0
- package/src/config/validator.ts +337 -0
- package/src/core/appContext.js +34 -27
- package/src/core/components/Bar.js +383 -0
- package/src/core/components/Bar3D.js +473 -0
- package/src/core/components/LargeDatasetChart.js +296 -0
- package/src/core/components/Line3D.js +310 -0
- package/src/core/components/Scatter.js +392 -188
- package/src/core/components/Scatter3D.js +455 -0
- package/src/core/components/ScatterBio.js +601 -572
- package/src/core/components/Surface3D.js +326 -0
- package/src/core/components/ThreeCustom.js +648 -0
- package/src/core/components/ThreeScene.js +459 -0
- package/src/core/components/VisiumPlot.js +191 -165
- package/src/core/components/browser.js +42 -42
- package/src/core/components/dotplot.js +413 -413
- package/src/core/components/html.js +29 -29
- package/src/core/components/list.js +178 -178
- package/src/core/components/macaron.js +206 -201
- package/src/core/components/markdown.js +56 -56
- package/src/core/components/parser.scatterBio.js +582 -579
- package/src/core/components/ratio.js +82 -80
- package/src/core/components/scatterL.js +206 -173
- package/src/core/components/searchbar.js +156 -131
- package/src/core/components/selection.js +310 -193
- package/src/core/components/timeline.js +236 -281
- package/src/core/components/visium.js +114 -97
- package/src/core/data-processor.js +413 -0
- package/src/core/fetch/condfetch.js +82 -82
- package/src/core/fetch/fetch.js +92 -92
- package/src/core/fetch/json.js +29 -29
- package/src/core/fetch/vfetch.js +42 -42
- package/src/core/hmr-client.js +724 -0
- package/src/core/liveEditor.js +44 -44
- package/src/core/modules/codeEditorWithPreview.js +104 -104
- package/src/core/modules/echarts/common.js +20 -20
- package/src/core/modules/echarts/gl.js +228 -0
- package/src/core/modules/echarts/presetHandler.js +41 -41
- package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
- package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
- package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
- package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
- package/src/core/modules/echarts.js +70 -71
- package/src/core/modules/echartsUtils.js +43 -43
- package/src/core/modules/echartswitcher.js +227 -152
- package/src/core/modules/replotly/presetHandler.js +24 -24
- package/src/core/modules/replotly/presets/minimum.js +18 -18
- package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
- package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
- package/src/core/modules/replotly.js +74 -71
- package/src/core/modules/threejs/Camera.js +373 -0
- package/src/core/modules/threejs/Lighting.js +459 -0
- package/src/core/modules/threejs/Renderer.js +364 -0
- package/src/core/modules/threejs/Scene.js +266 -0
- package/src/core/modules/threejs/index.js +155 -0
- package/src/core/pages/404.js +50 -50
- package/src/core/pages/error.js +27 -27
- package/src/core/pages/jsonPage.js +62 -62
- package/src/core/pages/loading.js +44 -44
- package/src/core/parser/echart.data.js +204 -183
- package/src/core/parser/echart.features.js +125 -125
- package/src/core/parser/echart.general.js +147 -143
- package/src/core/parser/echart.hilbert.js +57 -57
- package/src/core/parser/echart.parser.js +210 -210
- package/src/core/parser/echart.series.js +67 -67
- package/src/core/parser/echart.types.js +76 -76
- package/src/core/parser/plotly.config.js +10 -10
- package/src/core/parser/plotly.data.js +132 -132
- package/src/core/parser/plotly.layout.js +9 -9
- package/src/core/parser/plotly.violin.js +18 -18
- package/src/core/recharts.js +361 -62
- package/src/core/router/alias.js +49 -49
- package/src/core/router/jsonRouter.js +31 -31
- package/src/core/themes/modern.js +32 -32
- package/src/core/themes/themeSelector.js +33 -33
- package/src/core/visualify.js +213 -47
- package/src/core/widgets/circularProgress.js +23 -23
- package/src/core/widgets/controller.js +116 -83
- package/src/core/widgets/errorBoundary.js +36 -36
- package/src/core/widgets/footer.js +185 -177
- package/src/core/widgets/header.js +238 -234
- package/src/core/widgets/layout/Grid.js +31 -31
- package/src/core/widgets/layout.js +36 -36
- package/src/core/widgets/mapping.js +56 -42
- package/src/core/workers/data-worker.js +349 -0
- package/src/core/workers/worker-pool.js +396 -0
- package/src/docsify/bundle.js +215 -0
- package/src/docsify/markdown.js +271 -0
- package/src/docsify/plugin.js +268 -0
- package/src/editor/README.md +172 -0
- package/src/editor/components/ChartBuilder.jsx +341 -0
- package/src/editor/components/ChartTypeSidebar.jsx +91 -0
- package/src/editor/components/Editor.jsx +367 -0
- package/src/editor/components/Preview.jsx +446 -0
- package/src/editor/components/PropertyPanel.jsx +468 -0
- package/src/editor/components/StatusBar.jsx +85 -0
- package/src/editor/context/EditorContext.js +248 -0
- package/src/editor/hooks/useDebounce.js +32 -0
- package/src/editor/index.js +315 -0
- package/src/editor/styles/editor.css +637 -0
- package/src/editor/utils/chartValidator.js +263 -0
- package/src/entries/charts3d.js +70 -0
- package/src/entries/core.js +78 -0
- package/src/entries/docs.js +154 -0
- package/src/entries/pages.js +93 -0
- package/src/entries/portal.js +204 -0
- package/src/entries/shared.js +50 -0
- package/src/i18n/formatters.js +455 -0
- package/src/i18n/index.js +169 -0
- package/src/i18n/locales/ar.json +137 -0
- package/src/i18n/locales/de.json +137 -0
- package/src/i18n/locales/en.json +137 -0
- package/src/i18n/locales/es.json +137 -0
- package/src/i18n/locales/he.json +137 -0
- package/src/i18n/locales/zh.json +137 -0
- package/src/i18n/rtl.css +183 -0
- package/src/index.js +82 -62
- package/src/loader.js +103 -0
- package/src/setupTests.js +5 -5
- package/tsconfig.json +51 -0
- package/types/charts.d.ts +569 -0
- package/types/components.d.ts +441 -0
- package/types/config.d.ts +199 -0
- package/types/index.d.ts +353 -0
|
@@ -0,0 +1,655 @@
|
|
|
1
|
+
# Docsify Plugin
|
|
2
|
+
|
|
3
|
+
The Visualify Docsify Plugin enables seamless embedding of interactive charts directly in your Docsify documentation using simple markdown code blocks.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Visualify Docsify Plugin extends Docsify's markdown rendering to support ` ```visualify ` code blocks that automatically render as interactive charts. It provides:
|
|
8
|
+
|
|
9
|
+
- **Zero-configuration setup** - Works out of the box with auto-mounting
|
|
10
|
+
- **Multiple chart types** - Line, bar, pie, scatter, 3D charts, and more
|
|
11
|
+
- **External data support** - Load chart data from JSON files
|
|
12
|
+
- **SPA navigation aware** - Charts persist and remount during route changes
|
|
13
|
+
- **Lazy loading** - Visualify components load only when needed
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
### CDN Method (Recommended)
|
|
18
|
+
|
|
19
|
+
Add the Visualify Docsify Plugin script to your `index.html` after the Docsify script:
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<!-- Docsify -->
|
|
23
|
+
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
|
|
24
|
+
|
|
25
|
+
<!-- Visualify Docsify Plugin -->
|
|
26
|
+
<script src="https://unpkg.com/visualify@latest/dist/docsify-plugin.js"></script>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### npm Method
|
|
30
|
+
|
|
31
|
+
If you're building a custom Docsify setup with a bundler:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install visualify
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Then import and register the plugin:
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
import VisualifyDocs from 'visualify/docsify';
|
|
41
|
+
|
|
42
|
+
window["$docsify"] = {
|
|
43
|
+
plugins: [
|
|
44
|
+
VisualifyDocs.plugin.install,
|
|
45
|
+
// ... other plugins
|
|
46
|
+
]
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Manual Registration
|
|
51
|
+
|
|
52
|
+
The plugin auto-registers with Docsify if `window["$docsify"]` exists, but you can also manually register it:
|
|
53
|
+
|
|
54
|
+
```javascript
|
|
55
|
+
window["$docsify"] = window["$docsify"] || {};
|
|
56
|
+
window["$docsify"].plugins = [].concat(
|
|
57
|
+
window["$docsify"].plugins || [],
|
|
58
|
+
VisualifyDocs.plugin.install
|
|
59
|
+
);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Basic Usage
|
|
63
|
+
|
|
64
|
+
### Using Visualify Code Blocks
|
|
65
|
+
|
|
66
|
+
Embed charts in your markdown using ` ```visualify ` code blocks with JSON configuration:
|
|
67
|
+
|
|
68
|
+
<pre lang="markdown">
|
|
69
|
+
```visualify
|
|
70
|
+
{
|
|
71
|
+
"type": "line",
|
|
72
|
+
"title": "Monthly Sales",
|
|
73
|
+
"data": {
|
|
74
|
+
"categories": ["Jan", "Feb", "Mar", "Apr", "May"],
|
|
75
|
+
"series": [{
|
|
76
|
+
"name": "Revenue",
|
|
77
|
+
"data": [120, 200, 150, 280, 220]
|
|
78
|
+
}]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
</pre>
|
|
83
|
+
|
|
84
|
+
### Configuration Format
|
|
85
|
+
|
|
86
|
+
The configuration inside visualify blocks is standard JSON with the following structure:
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"type": "line",
|
|
91
|
+
"title": "Chart Title",
|
|
92
|
+
"data": {
|
|
93
|
+
"categories": ["A", "B", "C"],
|
|
94
|
+
"series": [{
|
|
95
|
+
"name": "Series 1",
|
|
96
|
+
"data": [10, 20, 30]
|
|
97
|
+
}]
|
|
98
|
+
},
|
|
99
|
+
"xAxis": { "name": "X Axis" },
|
|
100
|
+
"yAxis": { "name": "Y Axis" }
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Auto-Mounting Behavior
|
|
105
|
+
|
|
106
|
+
The plugin automatically:
|
|
107
|
+
|
|
108
|
+
1. Detects ` ```visualify ` code blocks during markdown rendering
|
|
109
|
+
2. Converts them to chart containers with `data-visualify` attributes
|
|
110
|
+
3. Lazily loads Visualify components on first use
|
|
111
|
+
4. Mounts charts when the DOM is ready
|
|
112
|
+
5. Handles cleanup and remounting during SPA navigation
|
|
113
|
+
|
|
114
|
+
## Configuration Options
|
|
115
|
+
|
|
116
|
+
### Chart Types
|
|
117
|
+
|
|
118
|
+
The following chart types are supported:
|
|
119
|
+
|
|
120
|
+
| Type | Description |
|
|
121
|
+
|------|-------------|
|
|
122
|
+
| `line` | Line charts with area fill options |
|
|
123
|
+
| `bar` | Vertical and horizontal bar charts |
|
|
124
|
+
| `pie` | Pie and donut charts |
|
|
125
|
+
| `scatter` | Scatter plots with bubble options |
|
|
126
|
+
| `scatter3d` | 3D scatter plots (requires WebGL) |
|
|
127
|
+
| `bar3d` | 3D bar charts (requires WebGL) |
|
|
128
|
+
| `surface3d` | 3D surface plots (requires WebGL) |
|
|
129
|
+
| `line3d` | 3D line charts (requires WebGL) |
|
|
130
|
+
| `heatmap` | Heatmap visualization |
|
|
131
|
+
| `violin` | Violin plots for distribution |
|
|
132
|
+
| `dotplot` | Dot plots for categorical data |
|
|
133
|
+
| `hilbert` | Hilbert curve visualization |
|
|
134
|
+
| `visium` | Spatial transcriptomics visualization |
|
|
135
|
+
|
|
136
|
+
### Data Format
|
|
137
|
+
|
|
138
|
+
#### Standard Charts (line, bar, pie, scatter)
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"type": "bar",
|
|
143
|
+
"data": {
|
|
144
|
+
"categories": ["A", "B", "C", "D"],
|
|
145
|
+
"series": [
|
|
146
|
+
{
|
|
147
|
+
"name": "Series 1",
|
|
148
|
+
"data": [120, 200, 150, 80]
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "Series 2",
|
|
152
|
+
"data": [90, 150, 200, 120]
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Live Demo:**
|
|
160
|
+
|
|
161
|
+
```visualify
|
|
162
|
+
{
|
|
163
|
+
"type": "bar",
|
|
164
|
+
"title": "Standard Bar Chart Demo",
|
|
165
|
+
"data": {
|
|
166
|
+
"categories": ["A", "B", "C", "D"],
|
|
167
|
+
"series": [
|
|
168
|
+
{
|
|
169
|
+
"name": "Series 1",
|
|
170
|
+
"data": [120, 200, 150, 80]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"name": "Series 2",
|
|
174
|
+
"data": [90, 150, 200, 120]
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### 3D Charts
|
|
182
|
+
|
|
183
|
+
For 3D scatter plots:
|
|
184
|
+
|
|
185
|
+
```json
|
|
186
|
+
{
|
|
187
|
+
"type": "scatter3d",
|
|
188
|
+
"data": {
|
|
189
|
+
"x": [1, 2, 3, 4, 5],
|
|
190
|
+
"y": [10, 15, 8, 20, 12],
|
|
191
|
+
"z": [5, 8, 12, 7, 9]
|
|
192
|
+
},
|
|
193
|
+
"xAxis3D": { "name": "X" },
|
|
194
|
+
"yAxis3D": { "name": "Y" },
|
|
195
|
+
"zAxis3D": { "name": "Z" }
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Live Demo:**
|
|
200
|
+
|
|
201
|
+
```visualify
|
|
202
|
+
{
|
|
203
|
+
"type": "scatter3d",
|
|
204
|
+
"title": "3D Scatter Demo",
|
|
205
|
+
"data": {
|
|
206
|
+
"x": [1, 2, 3, 4, 5],
|
|
207
|
+
"y": [10, 15, 8, 20, 12],
|
|
208
|
+
"z": [5, 8, 12, 7, 9]
|
|
209
|
+
},
|
|
210
|
+
"xAxis3D": { "name": "X" },
|
|
211
|
+
"yAxis3D": { "name": "Y" },
|
|
212
|
+
"zAxis3D": { "name": "Z" }
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Styling Options
|
|
217
|
+
|
|
218
|
+
Control chart appearance with these common options:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"type": "line",
|
|
223
|
+
"title": {
|
|
224
|
+
"text": "Styled Chart",
|
|
225
|
+
"left": "center"
|
|
226
|
+
},
|
|
227
|
+
"theme": {
|
|
228
|
+
"color": ["#5470c6", "#91cc75", "#fac858"]
|
|
229
|
+
},
|
|
230
|
+
"grid": {
|
|
231
|
+
"left": "10%",
|
|
232
|
+
"right": "10%",
|
|
233
|
+
"bottom": "15%"
|
|
234
|
+
},
|
|
235
|
+
"legend": {
|
|
236
|
+
"bottom": 10
|
|
237
|
+
},
|
|
238
|
+
"tooltip": {
|
|
239
|
+
"trigger": "axis"
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### External Data Sources
|
|
245
|
+
|
|
246
|
+
Load chart configuration from external JSON files using the `src` property:
|
|
247
|
+
|
|
248
|
+
<pre lang="markdown">
|
|
249
|
+
```visualify
|
|
250
|
+
{
|
|
251
|
+
"src": "./data/sales-chart.json"
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
</pre>
|
|
255
|
+
|
|
256
|
+
The external JSON file should contain the complete chart configuration:
|
|
257
|
+
|
|
258
|
+
```json
|
|
259
|
+
{
|
|
260
|
+
"type": "pie",
|
|
261
|
+
"title": "Sales Distribution",
|
|
262
|
+
"data": {
|
|
263
|
+
"series": [{
|
|
264
|
+
"name": "Sales",
|
|
265
|
+
"data": [
|
|
266
|
+
{ "name": "Product A", "value": 435 },
|
|
267
|
+
{ "name": "Product B", "value": 310 },
|
|
268
|
+
{ "name": "Product C", "value": 234 }
|
|
269
|
+
]
|
|
270
|
+
}]
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Advanced Features
|
|
276
|
+
|
|
277
|
+
### 3D Visualization Support
|
|
278
|
+
|
|
279
|
+
3D charts are automatically detected and rendered using ECharts GL. No additional configuration is required:
|
|
280
|
+
|
|
281
|
+
<pre lang="markdown">
|
|
282
|
+
```visualify
|
|
283
|
+
{
|
|
284
|
+
"type": "scatter3d",
|
|
285
|
+
"title": "3D Data Visualization",
|
|
286
|
+
"data": {
|
|
287
|
+
"x": [1, 2, 3, 4, 5],
|
|
288
|
+
"y": [10, 15, 8, 20, 12],
|
|
289
|
+
"z": [5, 8, 12, 7, 9]
|
|
290
|
+
},
|
|
291
|
+
"xAxis3D": { "name": "X Dimension" },
|
|
292
|
+
"yAxis3D": { "name": "Y Dimension" },
|
|
293
|
+
"zAxis3D": { "name": "Z Dimension" },
|
|
294
|
+
"grid3D": {
|
|
295
|
+
"viewControl": {
|
|
296
|
+
"autoRotate": true,
|
|
297
|
+
"autoRotateSpeed": 10
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
</pre>
|
|
303
|
+
|
|
304
|
+
### Live Editor Integration
|
|
305
|
+
|
|
306
|
+
Create interactive chart editors for documentation examples:
|
|
307
|
+
|
|
308
|
+
```html
|
|
309
|
+
<div id="live-editor"></div>
|
|
310
|
+
<script>
|
|
311
|
+
const editor = new VisualifyDocs.createEditor({
|
|
312
|
+
container: '#live-editor',
|
|
313
|
+
initialConfig: {
|
|
314
|
+
type: 'line',
|
|
315
|
+
data: {
|
|
316
|
+
categories: ['A', 'B', 'C'],
|
|
317
|
+
series: [{ name: 'Data', data: [10, 20, 30] }]
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
</script>
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Custom Themes
|
|
325
|
+
|
|
326
|
+
Apply custom themes to charts:
|
|
327
|
+
|
|
328
|
+
```json
|
|
329
|
+
{
|
|
330
|
+
"type": "bar",
|
|
331
|
+
"theme": {
|
|
332
|
+
"color": ["#ff6b6b", "#4ecdc4", "#45b7d1"],
|
|
333
|
+
"backgroundColor": "#f8f9fa"
|
|
334
|
+
},
|
|
335
|
+
"data": { ... }
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Event Handling
|
|
340
|
+
|
|
341
|
+
Access chart instances for custom event handling:
|
|
342
|
+
|
|
343
|
+
```javascript
|
|
344
|
+
// After chart is mounted, access via DOM
|
|
345
|
+
document.querySelectorAll('[data-visualify]').forEach(el => {
|
|
346
|
+
const chart = VisualifyDocs.plugin.getChart(el);
|
|
347
|
+
if (chart) {
|
|
348
|
+
// Add custom event listeners
|
|
349
|
+
console.log('Chart mounted:', chart.getId());
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Examples
|
|
355
|
+
|
|
356
|
+
### Simple Line Chart
|
|
357
|
+
|
|
358
|
+
<pre lang="markdown">
|
|
359
|
+
```visualify
|
|
360
|
+
{
|
|
361
|
+
"type": "line",
|
|
362
|
+
"title": "Monthly Revenue",
|
|
363
|
+
"data": {
|
|
364
|
+
"categories": ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
|
|
365
|
+
"series": [{
|
|
366
|
+
"name": "Revenue ($K)",
|
|
367
|
+
"data": [65, 78, 90, 85, 95, 110],
|
|
368
|
+
"smooth": true,
|
|
369
|
+
"areaStyle": { "opacity": 0.3 }
|
|
370
|
+
}]
|
|
371
|
+
},
|
|
372
|
+
"yAxis": { "name": "Revenue ($K)" }
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
</pre>
|
|
376
|
+
|
|
377
|
+
### Bar Chart with Multiple Series
|
|
378
|
+
|
|
379
|
+
<pre lang="markdown">
|
|
380
|
+
```visualify
|
|
381
|
+
{
|
|
382
|
+
"type": "bar",
|
|
383
|
+
"title": {
|
|
384
|
+
"text": "Quarterly Comparison",
|
|
385
|
+
"left": "center"
|
|
386
|
+
},
|
|
387
|
+
"data": {
|
|
388
|
+
"categories": ["Q1", "Q2", "Q3", "Q4"],
|
|
389
|
+
"series": [
|
|
390
|
+
{
|
|
391
|
+
"name": "2023",
|
|
392
|
+
"data": [320, 332, 301, 334]
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"name": "2024",
|
|
396
|
+
"data": [420, 452, 401, 474]
|
|
397
|
+
}
|
|
398
|
+
]
|
|
399
|
+
},
|
|
400
|
+
"legend": { "bottom": 10 }
|
|
401
|
+
}
|
|
402
|
+
```
|
|
403
|
+
</pre>
|
|
404
|
+
|
|
405
|
+
### 3D Scatter Plot
|
|
406
|
+
|
|
407
|
+
<pre lang="markdown">
|
|
408
|
+
```visualify
|
|
409
|
+
{
|
|
410
|
+
"type": "scatter3d",
|
|
411
|
+
"title": "3D Point Cloud",
|
|
412
|
+
"data": {
|
|
413
|
+
"x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
|
|
414
|
+
"y": [10, 15, 8, 20, 12, 18, 22, 16, 14, 25],
|
|
415
|
+
"z": [5, 8, 12, 7, 9, 11, 6, 13, 10, 15]
|
|
416
|
+
},
|
|
417
|
+
"xAxis3D": { "name": "X", "type": "value" },
|
|
418
|
+
"yAxis3D": { "name": "Y", "type": "value" },
|
|
419
|
+
"zAxis3D": { "name": "Z", "type": "value" },
|
|
420
|
+
"grid3D": {
|
|
421
|
+
"boxWidth": 100,
|
|
422
|
+
"boxDepth": 80,
|
|
423
|
+
"viewControl": {
|
|
424
|
+
"autoRotate": true,
|
|
425
|
+
"autoRotateSpeed": 10
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
"visualMap": {
|
|
429
|
+
"dimension": 2,
|
|
430
|
+
"max": 25,
|
|
431
|
+
"inRange": {
|
|
432
|
+
"color": ["#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8"]
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
</pre>
|
|
438
|
+
|
|
439
|
+
### Using External JSON File
|
|
440
|
+
|
|
441
|
+
Create a `chart-data.json` file:
|
|
442
|
+
|
|
443
|
+
```json
|
|
444
|
+
{
|
|
445
|
+
"type": "pie",
|
|
446
|
+
"title": "Market Share",
|
|
447
|
+
"radius": ["40%", "70%"],
|
|
448
|
+
"data": {
|
|
449
|
+
"series": [{
|
|
450
|
+
"name": "Market Share",
|
|
451
|
+
"data": [
|
|
452
|
+
{ "value": 1048, "name": "Product A" },
|
|
453
|
+
{ "value": 735, "name": "Product B" },
|
|
454
|
+
{ "value": 580, "name": "Product C" },
|
|
455
|
+
{ "value": 484, "name": "Product D" },
|
|
456
|
+
{ "value": 300, "name": "Product E" }
|
|
457
|
+
]
|
|
458
|
+
}]
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
Reference it in markdown:
|
|
464
|
+
|
|
465
|
+
<pre lang="markdown">
|
|
466
|
+
```visualify
|
|
467
|
+
{
|
|
468
|
+
"src": "./chart-data.json"
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
</pre>
|
|
472
|
+
|
|
473
|
+
## Troubleshooting
|
|
474
|
+
|
|
475
|
+
### Charts Not Rendering
|
|
476
|
+
|
|
477
|
+
**Problem**: Chart container appears but no chart is displayed.
|
|
478
|
+
|
|
479
|
+
**Solutions**:
|
|
480
|
+
|
|
481
|
+
1. **Check JSON syntax** - Ensure your configuration is valid JSON:
|
|
482
|
+
```bash
|
|
483
|
+
# Validate JSON
|
|
484
|
+
cat your-config.json | python -m json.tool
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
2. **Check browser console** - Look for JavaScript errors
|
|
488
|
+
|
|
489
|
+
3. **Verify plugin is loaded** - Check that the script tag is present:
|
|
490
|
+
```javascript
|
|
491
|
+
console.log(window.VisualifyDocs); // Should output the plugin object
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
4. **Check data format** - Ensure `data` property exists and matches the chart type requirements
|
|
495
|
+
|
|
496
|
+
### WebGL Issues for 3D Charts
|
|
497
|
+
|
|
498
|
+
**Problem**: 3D charts show a warning or don't render.
|
|
499
|
+
|
|
500
|
+
**Solutions**:
|
|
501
|
+
|
|
502
|
+
1. **Verify WebGL support**:
|
|
503
|
+
```javascript
|
|
504
|
+
const canvas = document.createElement('canvas');
|
|
505
|
+
const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
|
|
506
|
+
console.log('WebGL supported:', !!gl);
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
2. **Update graphics drivers** - Outdated drivers can cause WebGL issues
|
|
510
|
+
|
|
511
|
+
3. **Check browser compatibility**:
|
|
512
|
+
- Chrome 9+
|
|
513
|
+
- Firefox 4+
|
|
514
|
+
- Safari 5.1+
|
|
515
|
+
- Edge 12+
|
|
516
|
+
|
|
517
|
+
4. **Disable hardware acceleration** (for testing):
|
|
518
|
+
- Chrome: Settings > Advanced > System > Use hardware acceleration when available
|
|
519
|
+
|
|
520
|
+
### CORS Issues with External Data
|
|
521
|
+
|
|
522
|
+
**Problem**: External JSON files fail to load with CORS errors.
|
|
523
|
+
|
|
524
|
+
**Solutions**:
|
|
525
|
+
|
|
526
|
+
1. **Enable CORS on your server** - Add headers:
|
|
527
|
+
```
|
|
528
|
+
Access-Control-Allow-Origin: *
|
|
529
|
+
Access-Control-Allow-Methods: GET
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
2. **Use relative paths** - For local files:
|
|
533
|
+
```json
|
|
534
|
+
{ "src": "./data/chart.json" }
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
3. **Host data on same origin** - Place JSON files in your docs folder
|
|
538
|
+
|
|
539
|
+
4. **Use a CORS proxy** (for development only):
|
|
540
|
+
```json
|
|
541
|
+
{ "src": "https://cors-anywhere.herokuapp.com/https://example.com/data.json" }
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### Performance Issues
|
|
545
|
+
|
|
546
|
+
**Problem**: Page becomes slow with multiple charts.
|
|
547
|
+
|
|
548
|
+
**Solutions**:
|
|
549
|
+
|
|
550
|
+
1. **Limit concurrent charts** - Consider using tabs or accordions
|
|
551
|
+
2. **Use external data** - Load large datasets from separate files
|
|
552
|
+
3. **Enable lazy loading** - Charts load only when scrolled into view
|
|
553
|
+
4. **Optimize data size** - Sample large datasets before visualization
|
|
554
|
+
|
|
555
|
+
## API Reference
|
|
556
|
+
|
|
557
|
+
### window.$visualify
|
|
558
|
+
|
|
559
|
+
The global Visualify configuration object (if using Visualify as a chart module):
|
|
560
|
+
|
|
561
|
+
```javascript
|
|
562
|
+
window["$visualify"] = {
|
|
563
|
+
mode: 'charts',
|
|
564
|
+
theme: 'modern',
|
|
565
|
+
// ... other options
|
|
566
|
+
};
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
### Recharts Class Methods
|
|
570
|
+
|
|
571
|
+
When creating charts programmatically:
|
|
572
|
+
|
|
573
|
+
```javascript
|
|
574
|
+
const chart = new VisualifyDocs.Recharts(config);
|
|
575
|
+
|
|
576
|
+
// Mount to DOM element
|
|
577
|
+
chart.mount('#chart-container');
|
|
578
|
+
|
|
579
|
+
// Mount to element reference
|
|
580
|
+
const el = document.getElementById('chart');
|
|
581
|
+
chart.mount(el);
|
|
582
|
+
|
|
583
|
+
// Update configuration
|
|
584
|
+
chart.update(newConfig);
|
|
585
|
+
|
|
586
|
+
// Unmount and cleanup
|
|
587
|
+
chart.unmount();
|
|
588
|
+
|
|
589
|
+
// Get chart ID
|
|
590
|
+
const id = chart.getId();
|
|
591
|
+
|
|
592
|
+
// Check if mounted
|
|
593
|
+
const isMounted = chart.getIsMounted();
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
### Plugin Hooks
|
|
597
|
+
|
|
598
|
+
Access the plugin's lifecycle methods:
|
|
599
|
+
|
|
600
|
+
```javascript
|
|
601
|
+
// Mount a single chart element
|
|
602
|
+
VisualifyDocs.plugin.mountChart(element, config);
|
|
603
|
+
|
|
604
|
+
// Mount all charts in a container
|
|
605
|
+
VisualifyDocs.plugin.mountAllCharts(document);
|
|
606
|
+
|
|
607
|
+
// Cleanup charts (useful for SPA navigation)
|
|
608
|
+
VisualifyDocs.plugin.cleanupCharts(document);
|
|
609
|
+
|
|
610
|
+
// Check if element has mounted chart
|
|
611
|
+
const isMounted = VisualifyDocs.plugin.isMounted(element);
|
|
612
|
+
|
|
613
|
+
// Get chart instance for element
|
|
614
|
+
const chart = VisualifyDocs.plugin.getChart(element);
|
|
615
|
+
|
|
616
|
+
// Preload components
|
|
617
|
+
await VisualifyDocs.plugin.loadVisualifyComponents();
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
### Plugin Lifecycle
|
|
621
|
+
|
|
622
|
+
The plugin integrates with Docsify's lifecycle hooks:
|
|
623
|
+
|
|
624
|
+
| Hook | Description |
|
|
625
|
+
|------|-------------|
|
|
626
|
+
| `init` | Registers the markdown renderer |
|
|
627
|
+
| `beforeEach` | Preloads components if visualify blocks detected |
|
|
628
|
+
| `afterEach` | Fallback processing for any missed blocks |
|
|
629
|
+
| `mounted` | Initial chart mounting |
|
|
630
|
+
| `doneEach` | Re-mount charts after SPA navigation |
|
|
631
|
+
| `destroyed` | Cleanup charts when leaving page |
|
|
632
|
+
|
|
633
|
+
### Markdown Processing Utilities
|
|
634
|
+
|
|
635
|
+
Process visualify blocks programmatically:
|
|
636
|
+
|
|
637
|
+
```javascript
|
|
638
|
+
// Process a single code block
|
|
639
|
+
const html = VisualifyDocs.markdown.process(jsonString);
|
|
640
|
+
|
|
641
|
+
// Process all blocks in markdown content
|
|
642
|
+
const processed = VisualifyDocs.markdown.processBlocks(markdownContent);
|
|
643
|
+
|
|
644
|
+
// Extract configurations (useful for search indexing)
|
|
645
|
+
const configs = VisualifyDocs.markdown.extractConfigs(markdownContent);
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
## See Also
|
|
651
|
+
|
|
652
|
+
- [3D Visualization](./3d-visualization.md)
|
|
653
|
+
- [Configuration](./configuration.md)
|
|
654
|
+
- [Recharts Basic Usage](./rechart-basic-usage.md)
|
|
655
|
+
- [Rechart Attributes](./rechart-attributes.md)
|