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
|
@@ -1,162 +1,160 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
<!-- tabs:end -->
|
|
1
|
+
# Charts
|
|
2
|
+
|
|
3
|
+
Visualify's charting engine is built on `React` and `ECharts` to simplify complex chart configuration. You only need to provide **data** and minimal **options** to generate interactive charts.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
The easiest way to create charts is using ` ```visualify ` code blocks in your Docsify markdown:
|
|
8
|
+
|
|
9
|
+
<pre lang="markdown">
|
|
10
|
+
```visualify
|
|
11
|
+
{
|
|
12
|
+
"type": "bar",
|
|
13
|
+
"title": "My Chart",
|
|
14
|
+
"data": {
|
|
15
|
+
"categories": ["A", "B", "C"],
|
|
16
|
+
"series": [{ "name": "Data", "data": [10, 20, 30] }]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
</pre>
|
|
21
|
+
|
|
22
|
+
See the [Docsify Plugin](/docsify-plugin.md) documentation for full setup instructions.
|
|
23
|
+
|
|
24
|
+
## Example: Bar Chart
|
|
25
|
+
|
|
26
|
+
```visualify
|
|
27
|
+
{
|
|
28
|
+
"type": "bar",
|
|
29
|
+
"title": "The Popular Web Frameworks Before 2017",
|
|
30
|
+
"subtitle": "GitHub New Star Number",
|
|
31
|
+
"data": {
|
|
32
|
+
"categories": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
|
|
33
|
+
"series": [
|
|
34
|
+
{
|
|
35
|
+
"name": "Vue",
|
|
36
|
+
"data": [3000, 3500, 3900, 3100, 3200, 3100, 3600, 3300, 3600, 3400, 3100, 3000]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "React",
|
|
40
|
+
"data": [4000, 4500, 4900, 4300, 4400, 4300, 4800, 4500, 4800, 4600, 4300, 4000]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "Angular",
|
|
44
|
+
"data": [827, 949, 1400, 1000, 884, 911, 983, 989, 925, 1100, 1200, 930]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Data Formats
|
|
52
|
+
|
|
53
|
+
### Structured Format (Recommended)
|
|
54
|
+
|
|
55
|
+
The structured format separates categories and series explicitly:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"type": "line",
|
|
60
|
+
"data": {
|
|
61
|
+
"categories": ["Jan", "Feb", "Mar"],
|
|
62
|
+
"series": [
|
|
63
|
+
{ "name": "Sales", "data": [100, 200, 150] },
|
|
64
|
+
{ "name": "Costs", "data": [80, 120, 90] }
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Flat Object Format
|
|
71
|
+
|
|
72
|
+
The flat format uses keys as series names (legacy, still supported):
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"type": "line",
|
|
77
|
+
"data": {
|
|
78
|
+
"Sales": [100, 200, 150],
|
|
79
|
+
"Costs": [80, 120, 90]
|
|
80
|
+
},
|
|
81
|
+
"xAxis": ["Jan", "Feb", "Mar"]
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Hybrid Types & Smooth
|
|
86
|
+
|
|
87
|
+
Support hybrid types such as `line`, `bar`, `scatter` by setting `type` as an array:
|
|
88
|
+
|
|
89
|
+
```visualify
|
|
90
|
+
{
|
|
91
|
+
"type": ["line", "bar"],
|
|
92
|
+
"title": "Hybrid Chart: Line + Bar",
|
|
93
|
+
"smooth": [true, false],
|
|
94
|
+
"data": {
|
|
95
|
+
"categories": ["Jan", "Feb", "Mar", "Apr", "May"],
|
|
96
|
+
"series": [
|
|
97
|
+
{ "name": "Revenue", "data": [3000, 3500, 3900, 3100, 3200], "smooth": true },
|
|
98
|
+
{ "name": "Orders", "data": [200, 250, 280, 220, 240] }
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
More options can be found in the [Attributes](/rechart-attributes.md).
|
|
105
|
+
|
|
106
|
+
## Overrides Configuration
|
|
107
|
+
|
|
108
|
+
The preset configuration can be overridden to match the original ECharts configuration. For example, setting `smooth` on specific series:
|
|
109
|
+
|
|
110
|
+
```visualify
|
|
111
|
+
{
|
|
112
|
+
"type": "bar",
|
|
113
|
+
"title": "The Popular Web Frameworks Before 2017",
|
|
114
|
+
"data": {
|
|
115
|
+
"categories": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
|
|
116
|
+
"series": [
|
|
117
|
+
{ "name": "Vue", "data": [3000, 3500, 3900, 3100, 3200, 3100, 3600, 3300, 3600, 3400, 3100, 3000] },
|
|
118
|
+
{ "name": "React", "data": [4000, 4500, 4900, 4300, 4400, 4300, 4800, 4500, 4800, 4600, 4300, 4000] },
|
|
119
|
+
{ "name": "Angular", "data": [827, 949, 1400, 1000, 884, 911, 983, 989, 925, 1100, 1200, 930] }
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
"overrides": {
|
|
123
|
+
"series": [{ "type": "line", "smooth": true }]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
More advanced usage can be found in the [ECharts documentation](https://echarts.apache.org/en/index.html).
|
|
129
|
+
|
|
130
|
+
## Programmatic API
|
|
131
|
+
|
|
132
|
+
For advanced use cases, you can create charts programmatically using JavaScript:
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<head>
|
|
136
|
+
<script src="https://unpkg.com/visualify@latest/dist/visualify.js"></script>
|
|
137
|
+
</head>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Initialize and mount:
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
// Initialize Visualify in charts mode
|
|
144
|
+
window.$visualify = { mode: 'charts' };
|
|
145
|
+
|
|
146
|
+
// Create and mount a chart
|
|
147
|
+
const chart = new $visualify.Recharts({
|
|
148
|
+
title: 'My Chart',
|
|
149
|
+
type: 'bar',
|
|
150
|
+
data: {
|
|
151
|
+
'Series A': [10, 20, 30],
|
|
152
|
+
'Series B': [15, 25, 35],
|
|
153
|
+
},
|
|
154
|
+
xAxis: ['Jan', 'Feb', 'Mar'],
|
|
155
|
+
}).mount('#my-chart');
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```html
|
|
159
|
+
<div id="my-chart"></div>
|
|
160
|
+
```
|
package/docs/docs/theme.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Theme
|
|
2
|
-
|
|
3
|
-
## Modern
|
|
4
|
-
|
|
5
|
-
The modern theme is a modern, responsive theme that is based on the [Bootstrap](https://getbootstrap.com/) framework. It is a clean, modern and professional theme that is suitable for a wide range of applications.
|
|
1
|
+
# Theme
|
|
2
|
+
|
|
3
|
+
## Modern
|
|
4
|
+
|
|
5
|
+
The modern theme is a modern, responsive theme that is based on the [Bootstrap](https://getbootstrap.com/) framework. It is a clean, modern and professional theme that is suitable for a wide range of applications.
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# TypeScript Migration Guide
|
|
2
|
+
|
|
3
|
+
Visualify.js provides first-class TypeScript support with comprehensive type definitions for all chart configurations and APIs.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install visualify
|
|
9
|
+
npm install --save-dev @types/react @types/react-dom
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Type Definitions
|
|
13
|
+
|
|
14
|
+
### Chart Configuration Types
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { ChartConfig, ChartType, AxisConfig, DataSeries } from 'visualify';
|
|
18
|
+
|
|
19
|
+
// Basic chart configuration
|
|
20
|
+
const config: ChartConfig = {
|
|
21
|
+
type: 'line' as ChartType,
|
|
22
|
+
title: 'Sales Overview',
|
|
23
|
+
data: {
|
|
24
|
+
categories: ['Jan', 'Feb', 'Mar'],
|
|
25
|
+
series: [{
|
|
26
|
+
name: 'Revenue',
|
|
27
|
+
data: [120, 200, 150]
|
|
28
|
+
}]
|
|
29
|
+
},
|
|
30
|
+
xAxis: {
|
|
31
|
+
type: 'category',
|
|
32
|
+
name: 'Month'
|
|
33
|
+
} as AxisConfig,
|
|
34
|
+
yAxis: {
|
|
35
|
+
type: 'value',
|
|
36
|
+
name: 'Amount ($)'
|
|
37
|
+
} as AxisConfig
|
|
38
|
+
};
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Component Props
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { RechartsProps, ChartComponent } from 'visualify';
|
|
45
|
+
|
|
46
|
+
interface MyChartProps extends RechartsProps {
|
|
47
|
+
customTitle?: string;
|
|
48
|
+
onDataSelect?: (data: DataPoint) => void;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const MyChart: React.FC<MyChartProps> = ({ config, style, onDataSelect }) => {
|
|
52
|
+
return (
|
|
53
|
+
<ChartComponent
|
|
54
|
+
config={config}
|
|
55
|
+
style={style}
|
|
56
|
+
onClick={onDataSelect}
|
|
57
|
+
/>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 3D Chart Types
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { Scatter3DConfig, Bar3DConfig, Surface3DConfig } from 'visualify';
|
|
66
|
+
|
|
67
|
+
const scatter3D: Scatter3DConfig = {
|
|
68
|
+
type: 'scatter3d',
|
|
69
|
+
data: {
|
|
70
|
+
x: [1, 2, 3],
|
|
71
|
+
y: [4, 5, 6],
|
|
72
|
+
z: [7, 8, 9]
|
|
73
|
+
},
|
|
74
|
+
xAxis3D: { name: 'X', type: 'value' },
|
|
75
|
+
yAxis3D: { name: 'Y', type: 'value' },
|
|
76
|
+
zAxis3D: { name: 'Z', type: 'value' },
|
|
77
|
+
grid3D: {
|
|
78
|
+
viewControl: { autoRotate: true }
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Generic Types
|
|
84
|
+
|
|
85
|
+
### Data Types
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { ChartData, DataPoint, SeriesData } from 'visualify';
|
|
89
|
+
|
|
90
|
+
// Typed data points
|
|
91
|
+
interface SalesData extends DataPoint {
|
|
92
|
+
date: string;
|
|
93
|
+
revenue: number;
|
|
94
|
+
units: number;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const salesData: ChartData<SalesData> = {
|
|
98
|
+
categories: ['Q1', 'Q2', 'Q3'],
|
|
99
|
+
series: [{
|
|
100
|
+
name: 'Sales',
|
|
101
|
+
data: [
|
|
102
|
+
{ date: '2024-01', revenue: 10000, units: 100 },
|
|
103
|
+
{ date: '2024-02', revenue: 15000, units: 150 }
|
|
104
|
+
]
|
|
105
|
+
}]
|
|
106
|
+
};
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Event Handlers
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { ChartEvent, ChartEventHandler } from 'visualify';
|
|
113
|
+
|
|
114
|
+
const handleClick: ChartEventHandler = (event: ChartEvent) => {
|
|
115
|
+
console.log('Clicked:', event.dataIndex, event.seriesIndex);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const handleHover = (event: ChartEvent<{ value: number; name: string }>) => {
|
|
119
|
+
console.log('Hovering over:', event.data.name);
|
|
120
|
+
};
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Configuration Interfaces
|
|
124
|
+
|
|
125
|
+
### Complete Chart Configuration
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import {
|
|
129
|
+
VisualifyConfig,
|
|
130
|
+
ThemeConfig,
|
|
131
|
+
AnimationConfig,
|
|
132
|
+
TooltipConfig
|
|
133
|
+
} from 'visualify';
|
|
134
|
+
|
|
135
|
+
const fullConfig: VisualifyConfig = {
|
|
136
|
+
type: 'bar',
|
|
137
|
+
title: {
|
|
138
|
+
text: 'Annual Report',
|
|
139
|
+
subtext: '2024',
|
|
140
|
+
left: 'center'
|
|
141
|
+
},
|
|
142
|
+
theme: {
|
|
143
|
+
color: ['#5470c6', '#91cc75', '#fac858'],
|
|
144
|
+
backgroundColor: '#fff'
|
|
145
|
+
} as ThemeConfig,
|
|
146
|
+
animation: {
|
|
147
|
+
duration: 1000,
|
|
148
|
+
easing: 'cubicOut'
|
|
149
|
+
} as AnimationConfig,
|
|
150
|
+
tooltip: {
|
|
151
|
+
trigger: 'axis',
|
|
152
|
+
formatter: (params) => {
|
|
153
|
+
return `${params[0].name}: ${params[0].value}`;
|
|
154
|
+
}
|
|
155
|
+
} as TooltipConfig,
|
|
156
|
+
data: {
|
|
157
|
+
categories: ['A', 'B', 'C'],
|
|
158
|
+
series: [{
|
|
159
|
+
name: 'Series 1',
|
|
160
|
+
data: [120, 200, 150]
|
|
161
|
+
}]
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Utility Types
|
|
167
|
+
|
|
168
|
+
### Chart Type Union
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
import { ChartType } from 'visualify';
|
|
172
|
+
|
|
173
|
+
type SupportedCharts = Extract<ChartType, 'line' | 'bar' | 'pie'>;
|
|
174
|
+
|
|
175
|
+
function createChart(type: SupportedCharts, data: unknown) {
|
|
176
|
+
// Type-safe chart creation
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Deep Partial for Configuration
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
import { DeepPartial, ChartConfig } from 'visualify';
|
|
184
|
+
|
|
185
|
+
// Useful for configuration merging
|
|
186
|
+
type PartialConfig = DeepPartial<ChartConfig>;
|
|
187
|
+
|
|
188
|
+
const overrides: PartialConfig = {
|
|
189
|
+
title: { text: 'Updated Title' },
|
|
190
|
+
// Other partial properties
|
|
191
|
+
};
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## React Integration
|
|
195
|
+
|
|
196
|
+
### Hook Types
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
import { useChart, UseChartOptions, UseChartReturn } from 'visualify';
|
|
200
|
+
|
|
201
|
+
const options: UseChartOptions = {
|
|
202
|
+
config: chartConfig,
|
|
203
|
+
onReady: (chart) => {
|
|
204
|
+
console.log('Chart ready');
|
|
205
|
+
},
|
|
206
|
+
onError: (error) => {
|
|
207
|
+
console.error('Chart error:', error);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const { chartRef, updateChart, resizeChart }: UseChartReturn = useChart(options);
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Ref Forwarding
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
import { ChartRef } from 'visualify';
|
|
218
|
+
|
|
219
|
+
const MyChartComponent = React.forwardRef<ChartRef, ChartProps>(
|
|
220
|
+
(props, ref) => {
|
|
221
|
+
return <Recharts ref={ref} {...props} />;
|
|
222
|
+
}
|
|
223
|
+
);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Migration from JavaScript
|
|
227
|
+
|
|
228
|
+
### Step 1: Add TypeScript Configuration
|
|
229
|
+
|
|
230
|
+
```json
|
|
231
|
+
{
|
|
232
|
+
"compilerOptions": {
|
|
233
|
+
"target": "ES2020",
|
|
234
|
+
"module": "ESNext",
|
|
235
|
+
"moduleResolution": "node",
|
|
236
|
+
"jsx": "react-jsx",
|
|
237
|
+
"strict": true,
|
|
238
|
+
"esModuleInterop": true,
|
|
239
|
+
"skipLibCheck": true
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Step 2: Rename Files
|
|
245
|
+
|
|
246
|
+
Rename `.js` files to `.tsx` (for React components) or `.ts` (for utilities).
|
|
247
|
+
|
|
248
|
+
### Step 3: Add Type Annotations
|
|
249
|
+
|
|
250
|
+
```typescript
|
|
251
|
+
// Before (JavaScript)
|
|
252
|
+
const config = {
|
|
253
|
+
type: 'line',
|
|
254
|
+
data: { ... }
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
// After (TypeScript)
|
|
258
|
+
import { ChartConfig } from 'visualify';
|
|
259
|
+
|
|
260
|
+
const config: ChartConfig = {
|
|
261
|
+
type: 'line',
|
|
262
|
+
data: { ... }
|
|
263
|
+
};
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Step 4: Fix Type Errors
|
|
267
|
+
|
|
268
|
+
Common issues during migration:
|
|
269
|
+
|
|
270
|
+
1. **Implicit any** - Add explicit types or enable `strict: false` temporarily
|
|
271
|
+
2. **Missing properties** - Use `Partial<T>` for incremental configurations
|
|
272
|
+
3. **Event types** - Cast event handlers to expected types
|
|
273
|
+
|
|
274
|
+
## Best Practices
|
|
275
|
+
|
|
276
|
+
1. **Use strict mode** - Enable `strict: true` in tsconfig.json
|
|
277
|
+
2. **Define custom types** - Extend Visualify interfaces for your data
|
|
278
|
+
3. **Type event handlers** - Avoid implicit `any` in callbacks
|
|
279
|
+
4. **Leverage generics** - Use generic types for reusable components
|
|
280
|
+
|
|
281
|
+
## Troubleshooting
|
|
282
|
+
|
|
283
|
+
### Type Definitions Not Found
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# Ensure types are installed
|
|
287
|
+
npm install --save-dev @types/visualify
|
|
288
|
+
|
|
289
|
+
# Or add to tsconfig.json
|
|
290
|
+
{
|
|
291
|
+
"compilerOptions": {
|
|
292
|
+
"typeRoots": ["./node_modules/@types", "./types"]
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Strict Type Errors
|
|
298
|
+
|
|
299
|
+
Use type assertions sparingly:
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
const config = {
|
|
303
|
+
type: 'custom' as unknown as ChartType,
|
|
304
|
+
// ...
|
|
305
|
+
};
|
|
306
|
+
```
|