visualifyjs 2.5.3-2.dev → 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.
Files changed (252) hide show
  1. package/.claude/mem/TIMELINE.md +36 -0
  2. package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-external-script-solution.md +24 -0
  3. package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-session-summary.md +43 -0
  4. package/.claude/mem/notes/2026-02-11-cli-fix-editor-command-alias.md +26 -0
  5. package/.claude/mem/notes/2026-02-11-phase-3-developer-experience-completed.md +51 -0
  6. package/.claude/mem/notes/2026-02-11-phase-4-web-workers-implementation-complete.md +59 -0
  7. package/.claude/mem/notes/2026-02-11-visualify-phase-2-3d-visualization-complete.md +50 -0
  8. package/.claude/mem/notes/2026-02-11-visualify-phase-2-committed-ready-for-phase-3.md +33 -0
  9. package/.claude/mem/notes/2026-02-11-visualify-phase-3-complete-developer-experience.md +52 -0
  10. package/.claude/mem/notes/2026-02-11-visualify-repository-cleanup-complete.md +28 -0
  11. package/.claude/mem/notes/2026-02-18-codebase-cleanup-docsify-plugin-documentation.md +37 -0
  12. package/.claude/mem/notes/2026-02-19-css-grid-layout-fix-displaycontents-on-vcontroller.md +18 -0
  13. package/.claude/mem/notes/2026-02-19-docsify-plugin-fixes-latex-and-visualify-code-bloc.md +26 -0
  14. package/.claude/mem/notes/2026-02-19-page-mode-docs-update-decisions.md +23 -0
  15. package/.claude/mem/notes/2026-02-19-react-context-infinite-re-render-loop-fix-pattern.md +31 -0
  16. package/.claude/mem/notes/2026-02-19-version-300-bump-and-build-fixes.md +32 -0
  17. package/.claude/mem/notes/2026-02-19-visualify-build-deployment-architecture-bug-fixes.md +25 -0
  18. package/.claude/mem/notes/2026-02-19-visualify-dist-iife-self-contained-build-config.md +30 -0
  19. package/.claude/mem/notes/2026-02-19-visualify-infinite-loop-i18n-fixes.md +31 -0
  20. package/.claude/mem/notes/2026-02-19-visualify-v3-bundle-splitting-docs-restructuring.md +32 -0
  21. package/.claude/mem/notes/2026-02-20-bundle-externalization-final-architecture.md +29 -0
  22. package/.claude/mem/notes/2026-02-20-chromium-page-fix-unstable-keys-and-double-event-b.md +27 -0
  23. package/.claude/mem/notes/2026-02-20-console-cleanup-bundle-optimization-commit.md +20 -0
  24. package/.claude/mem/notes/2026-02-20-dotbio-dot-plot-fix-useeffect-dependency.md +21 -0
  25. package/.claude/mem/notes/2026-02-20-public-folder-cleanup-and-readme-rewrite.md +25 -0
  26. package/.claude/mem/notes/2026-02-20-v300-release-and-beta-channel-strategy.md +29 -0
  27. package/.claude/mem/notes/2026-02-20-visium-background-image-unknown-legend-fix.md +19 -0
  28. package/.claude/mem/notes/2026-02-20-visualify-cdn-loader-bundle-externalization.md +34 -0
  29. package/.claude/mem/sessions/session-2026-02-20-031524.md +54 -0
  30. package/.claude/settings.local.json +21 -0
  31. package/.github/workflows/static.yml.bak +51 -51
  32. package/.sisyphus/boulder.json +65 -0
  33. package/.sisyphus/plans/phase-4-advanced-optimizations.md +217 -0
  34. package/LICENSE +674 -674
  35. package/README.md +94 -59
  36. package/config-overrides.js +31 -31
  37. package/dist/stats.html +4949 -0
  38. package/dist/visualify-3d.esm.js +1 -0
  39. package/dist/visualify-3d.js +1 -0
  40. package/dist/visualify-core.esm.js +1 -0
  41. package/dist/visualify-core.js +1 -0
  42. package/dist/visualify-docs.esm.js +1 -0
  43. package/dist/visualify-docs.js +1 -0
  44. package/dist/visualify-loader.js +1 -0
  45. package/dist/visualify-pages.esm.js +1 -0
  46. package/dist/visualify-pages.js +1 -0
  47. package/dist/visualify-portal.esm.js +1 -0
  48. package/dist/visualify-portal.js +1 -0
  49. package/dist/visualify-shared.js +26571 -0
  50. package/dist/visualify.js +1 -188
  51. package/docs/CHANGELOG.md +148 -0
  52. package/docs/cli/commands.md +513 -0
  53. package/docs/configuration/visualify-json.md +474 -0
  54. package/docs/docs/3d-visualization.md +374 -0
  55. package/docs/docs/CLI.md +303 -34
  56. package/docs/docs/README.md +65 -65
  57. package/docs/docs/Rechart/bar.md +190 -190
  58. package/docs/docs/Rechart/funnel.md +241 -241
  59. package/docs/docs/Rechart/line.md +355 -355
  60. package/docs/docs/Rechart/pie.md +225 -225
  61. package/docs/docs/Rechart/radar.md +253 -253
  62. package/docs/docs/Rechart/scatter.md +298 -298
  63. package/docs/docs/_404.md +51 -51
  64. package/docs/docs/_coverpage.md +11 -11
  65. package/docs/docs/_sidebar.md +54 -44
  66. package/docs/docs/components/dotBio.md +87 -34
  67. package/docs/docs/components/echart.md +171 -82
  68. package/docs/docs/components/html.md +61 -34
  69. package/docs/docs/components/macaron.md +156 -145
  70. package/docs/docs/components/markdown.md +42 -0
  71. package/docs/docs/components/more.md +183 -142
  72. package/docs/docs/components/plotly.md +132 -62
  73. package/docs/docs/components/scatterL.md +171 -70
  74. package/docs/docs/components/visium.md +112 -57
  75. package/docs/docs/configuration.md +121 -121
  76. package/docs/docs/deploy.md +31 -31
  77. package/docs/docs/docsify-plugin.md +655 -0
  78. package/docs/docs/hmr.md +165 -0
  79. package/docs/docs/i18n.md +332 -0
  80. package/docs/docs/log.md +30 -9
  81. package/docs/docs/more-pages.md +23 -23
  82. package/docs/docs/quickstart.md +148 -124
  83. package/docs/docs/rechart-attributes.md +74 -74
  84. package/docs/docs/rechart-basic-usage.md +160 -162
  85. package/docs/docs/theme.md +5 -5
  86. package/docs/docs/typescript.md +306 -0
  87. package/docs/docs/visual-editor.md +359 -0
  88. package/docs/index.html +85 -71
  89. package/docs/manifest.json +23 -23
  90. package/docs/migration/v3-migration.md +392 -0
  91. package/docs/static/css/fluff-stuff.css +169 -169
  92. package/docs/static/css/font-awesome.min.css +4 -4
  93. package/docs/static/css/visualify.css +6 -25
  94. package/docs/static/js/3d-viz-examples.js +181 -0
  95. package/docs/static/js/configuration.js +630 -448
  96. package/docs/static/js/visualify.js +1 -188
  97. package/package.json +106 -84
  98. package/rollup.config.mjs +766 -76
  99. package/src/_css/404.css +115 -115
  100. package/src/_css/App.css +37 -37
  101. package/src/_css/autoSuggestion.css +26 -26
  102. package/src/_css/circular-progress.css +32 -32
  103. package/src/_css/index.css +36 -36
  104. package/src/_css/modern.css +350 -25
  105. package/src/_media/corner.svg +8 -8
  106. package/src/_media/download.svg +3 -3
  107. package/src/_media/logo.svg +14 -14
  108. package/src/_test/App.test.js +15 -15
  109. package/src/_utils/reportWebVitals.js +13 -13
  110. package/src/a11y/README.md +177 -0
  111. package/src/a11y/aria-labels.js +339 -0
  112. package/src/a11y/color-contrast.js +535 -0
  113. package/src/a11y/index.js +197 -0
  114. package/src/a11y/keyboard-nav.js +523 -0
  115. package/src/a11y/styles.css +165 -0
  116. package/src/cli/commands/dev.js +214 -0
  117. package/src/cli/commands/docs.js +521 -0
  118. package/src/cli/commands/edit.js +379 -0
  119. package/src/cli/commands/init.js +213 -0
  120. package/src/cli/commands/portal.js +236 -0
  121. package/src/cli/dev-server.js +530 -0
  122. package/src/cli/hmr.js +456 -0
  123. package/src/cli/index.js +180 -0
  124. package/src/cli/utils/config.js +207 -0
  125. package/src/cli/utils/logger.js +241 -0
  126. package/src/config/defaults.ts +122 -0
  127. package/src/config/index.ts +72 -0
  128. package/src/config/loader.ts +478 -0
  129. package/src/config/schema.ts +227 -0
  130. package/src/config/validator.ts +337 -0
  131. package/src/core/appContext.js +34 -27
  132. package/src/core/components/Bar.js +383 -0
  133. package/src/core/components/Bar3D.js +473 -0
  134. package/src/core/components/LargeDatasetChart.js +296 -0
  135. package/src/core/components/Line3D.js +310 -0
  136. package/src/core/components/Scatter.js +392 -188
  137. package/src/core/components/Scatter3D.js +455 -0
  138. package/src/core/components/ScatterBio.js +601 -572
  139. package/src/core/components/Surface3D.js +326 -0
  140. package/src/core/components/ThreeCustom.js +648 -0
  141. package/src/core/components/ThreeScene.js +459 -0
  142. package/src/core/components/VisiumPlot.js +191 -165
  143. package/src/core/components/browser.js +42 -42
  144. package/src/core/components/dotplot.js +413 -413
  145. package/src/core/components/html.js +29 -29
  146. package/src/core/components/list.js +178 -178
  147. package/src/core/components/macaron.js +206 -201
  148. package/src/core/components/markdown.js +56 -56
  149. package/src/core/components/parser.scatterBio.js +582 -587
  150. package/src/core/components/ratio.js +82 -80
  151. package/src/core/components/scatterL.js +206 -173
  152. package/src/core/components/searchbar.js +156 -131
  153. package/src/core/components/selection.js +310 -193
  154. package/src/core/components/timeline.js +236 -281
  155. package/src/core/components/visium.js +114 -97
  156. package/src/core/data-processor.js +413 -0
  157. package/src/core/fetch/condfetch.js +82 -82
  158. package/src/core/fetch/fetch.js +92 -92
  159. package/src/core/fetch/json.js +29 -29
  160. package/src/core/fetch/vfetch.js +42 -42
  161. package/src/core/hmr-client.js +724 -0
  162. package/src/core/liveEditor.js +44 -44
  163. package/src/core/modules/codeEditorWithPreview.js +104 -104
  164. package/src/core/modules/echarts/common.js +20 -20
  165. package/src/core/modules/echarts/gl.js +228 -0
  166. package/src/core/modules/echarts/presetHandler.js +41 -41
  167. package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
  168. package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
  169. package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
  170. package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
  171. package/src/core/modules/echarts.js +70 -71
  172. package/src/core/modules/echartsUtils.js +43 -43
  173. package/src/core/modules/echartswitcher.js +227 -152
  174. package/src/core/modules/replotly/presetHandler.js +24 -24
  175. package/src/core/modules/replotly/presets/minimum.js +18 -18
  176. package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
  177. package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
  178. package/src/core/modules/replotly.js +74 -71
  179. package/src/core/modules/threejs/Camera.js +373 -0
  180. package/src/core/modules/threejs/Lighting.js +459 -0
  181. package/src/core/modules/threejs/Renderer.js +364 -0
  182. package/src/core/modules/threejs/Scene.js +266 -0
  183. package/src/core/modules/threejs/index.js +155 -0
  184. package/src/core/pages/404.js +50 -50
  185. package/src/core/pages/error.js +27 -27
  186. package/src/core/pages/jsonPage.js +62 -62
  187. package/src/core/pages/loading.js +44 -44
  188. package/src/core/parser/echart.data.js +204 -183
  189. package/src/core/parser/echart.features.js +125 -125
  190. package/src/core/parser/echart.general.js +147 -147
  191. package/src/core/parser/echart.hilbert.js +57 -57
  192. package/src/core/parser/echart.parser.js +210 -210
  193. package/src/core/parser/echart.series.js +67 -67
  194. package/src/core/parser/echart.types.js +76 -76
  195. package/src/core/parser/plotly.config.js +10 -10
  196. package/src/core/parser/plotly.data.js +132 -132
  197. package/src/core/parser/plotly.layout.js +9 -9
  198. package/src/core/parser/plotly.violin.js +18 -18
  199. package/src/core/recharts.js +361 -62
  200. package/src/core/router/alias.js +49 -49
  201. package/src/core/router/jsonRouter.js +31 -31
  202. package/src/core/themes/modern.js +32 -32
  203. package/src/core/themes/themeSelector.js +33 -33
  204. package/src/core/visualify.js +213 -47
  205. package/src/core/widgets/circularProgress.js +23 -23
  206. package/src/core/widgets/controller.js +116 -83
  207. package/src/core/widgets/errorBoundary.js +36 -36
  208. package/src/core/widgets/footer.js +185 -177
  209. package/src/core/widgets/header.js +238 -234
  210. package/src/core/widgets/layout/Grid.js +31 -31
  211. package/src/core/widgets/layout.js +36 -36
  212. package/src/core/widgets/mapping.js +56 -42
  213. package/src/core/workers/data-worker.js +349 -0
  214. package/src/core/workers/worker-pool.js +396 -0
  215. package/src/docsify/bundle.js +215 -0
  216. package/src/docsify/markdown.js +271 -0
  217. package/src/docsify/plugin.js +268 -0
  218. package/src/editor/README.md +172 -0
  219. package/src/editor/components/ChartBuilder.jsx +341 -0
  220. package/src/editor/components/ChartTypeSidebar.jsx +91 -0
  221. package/src/editor/components/Editor.jsx +367 -0
  222. package/src/editor/components/Preview.jsx +446 -0
  223. package/src/editor/components/PropertyPanel.jsx +468 -0
  224. package/src/editor/components/StatusBar.jsx +85 -0
  225. package/src/editor/context/EditorContext.js +248 -0
  226. package/src/editor/hooks/useDebounce.js +32 -0
  227. package/src/editor/index.js +315 -0
  228. package/src/editor/styles/editor.css +637 -0
  229. package/src/editor/utils/chartValidator.js +263 -0
  230. package/src/entries/charts3d.js +70 -0
  231. package/src/entries/core.js +78 -0
  232. package/src/entries/docs.js +154 -0
  233. package/src/entries/pages.js +93 -0
  234. package/src/entries/portal.js +204 -0
  235. package/src/entries/shared.js +50 -0
  236. package/src/i18n/formatters.js +455 -0
  237. package/src/i18n/index.js +169 -0
  238. package/src/i18n/locales/ar.json +137 -0
  239. package/src/i18n/locales/de.json +137 -0
  240. package/src/i18n/locales/en.json +137 -0
  241. package/src/i18n/locales/es.json +137 -0
  242. package/src/i18n/locales/he.json +137 -0
  243. package/src/i18n/locales/zh.json +137 -0
  244. package/src/i18n/rtl.css +183 -0
  245. package/src/index.js +82 -62
  246. package/src/loader.js +103 -0
  247. package/src/setupTests.js +5 -5
  248. package/tsconfig.json +51 -0
  249. package/types/charts.d.ts +569 -0
  250. package/types/components.d.ts +441 -0
  251. package/types/config.d.ts +199 -0
  252. 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)