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
package/docs/docs/_404.md CHANGED
@@ -1,52 +1,52 @@
1
- <style>
2
- body {
3
- font-family: Arial, sans-serif;
4
- display: flex;
5
- justify-content: center;
6
- align-items: center;
7
- height: 100vh;
8
- margin: 0;
9
- }
10
-
11
- .container {
12
- text-align: center;
13
- background-color: #ffffff;
14
- padding: 50px;
15
- margin-top: 5vh;
16
- border-radius: 10px;
17
- box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
18
- }
19
-
20
- .container h1 {
21
- font-size: 72px;
22
- margin-bottom: 20px;
23
- color: #ff5252;
24
- }
25
-
26
- .container p {
27
- font-size: 24px;
28
- margin-bottom: 30px;
29
- }
30
-
31
- .container a {
32
- font-size: 18px;
33
- text-decoration: none;
34
- color: #2196f3;
35
- border: 1px solid #2196f3;
36
- padding: 10px 15px;
37
- border-radius: 5px;
38
- transition: background-color 0.3s, color 0.3s;
39
- }
40
-
41
- .container a:hover {
42
- background-color: #2196f3;
43
- color: #ffffff;
44
- }
45
-
46
- </style>
47
-
48
- <div class="container">
49
- <h1>404</h1>
50
- <p>Oops! The page you're looking for doesn't exist.</p>
51
- <a href="/">Go Home</a>
1
+ <style>
2
+ body {
3
+ font-family: Arial, sans-serif;
4
+ display: flex;
5
+ justify-content: center;
6
+ align-items: center;
7
+ height: 100vh;
8
+ margin: 0;
9
+ }
10
+
11
+ .container {
12
+ text-align: center;
13
+ background-color: #ffffff;
14
+ padding: 50px;
15
+ margin-top: 5vh;
16
+ border-radius: 10px;
17
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
18
+ }
19
+
20
+ .container h1 {
21
+ font-size: 72px;
22
+ margin-bottom: 20px;
23
+ color: #ff5252;
24
+ }
25
+
26
+ .container p {
27
+ font-size: 24px;
28
+ margin-bottom: 30px;
29
+ }
30
+
31
+ .container a {
32
+ font-size: 18px;
33
+ text-decoration: none;
34
+ color: #2196f3;
35
+ border: 1px solid #2196f3;
36
+ padding: 10px 15px;
37
+ border-radius: 5px;
38
+ transition: background-color 0.3s, color 0.3s;
39
+ }
40
+
41
+ .container a:hover {
42
+ background-color: #2196f3;
43
+ color: #ffffff;
44
+ }
45
+
46
+ </style>
47
+
48
+ <div class="container">
49
+ <h1>404</h1>
50
+ <p>Oops! The page you're looking for doesn't exist.</p>
51
+ <a href="/">Go Home</a>
52
52
  </div>
@@ -1,11 +1,11 @@
1
- <!-- _coverpage.md -->
2
-
3
- ![logo](./static/logo/logo_256x256.png)
4
-
5
- # visualify.js <small>2.5.3</small>
6
-
7
- > A magical data portal generator
8
-
9
- [GitHub](https://github.com/visualify)
10
- [Getting Started](#visualify)
11
-
1
+ <!-- _coverpage.md -->
2
+
3
+ ![logo](./static/logo/logo_256x256.png)
4
+
5
+ # visualify.js <small>3.0.0</small>
6
+
7
+ > A magical data portal generator
8
+
9
+ [GitHub](https://github.com/visualify)
10
+ [Getting Started](#visualify)
11
+
@@ -1,44 +1,54 @@
1
- - Getting started
2
-
3
- - [Introduction](/README.md)
4
- - [Quick start](/quickstart.md)
5
- - [More pages](/more-pages.md)
6
-
7
- - Visualify.Recharts
8
-
9
- - [Usage](/rechart-basic-usage.md)
10
- - [Attributes](/rechart-attributes.md)
11
- - [Line Chart](/Rechart/line.md)
12
- - [Bar Chart](/Rechart/bar.md)
13
- - [Pie Chart](/Rechart/pie.md)
14
- - [Radar Chart](/Rechart/radar.md)
15
- - [Funnel Chart](/Rechart/funnel.md)
16
- - [Scatter Chart](/Rechart/scatter.md)
17
-
18
-
19
- - Page Mode
20
-
21
- - [ScatterL](/components/scatterL.md)
22
- - [Visium](/components/visium.md)
23
- - [DotBio](/components/dotBio.md)
24
- - [Echart](/components/echart.md)
25
- - [Plotly](/components/plotly.md)
26
- - [Macaron](/components/macaron.md)
27
- - [More...](/components/more.md)
28
-
29
- - Customization
30
-
31
- - [Configuration](/configuration.md)
32
- - [Theme](/theme.md)
33
-
34
- - Guide
35
-
36
- - [CLI](/CLI.md)
37
- - [Deploy](/deploy.md)
38
-
39
- - Showcase
40
-
41
- - [MmTrBC](https://visualify.pharmacy.arizona.edu/MmTrBC/)
42
- - [EsoDev](https://visualify.pharmacy.arizona.edu/EsoDev/)
43
-
44
- - [UpdateLog](/log.md)
1
+ - Getting Started
2
+
3
+ - [Introduction](/README.md)
4
+ - [Quick Start](/quickstart.md)
5
+ - [Docsify Plugin](/docsify-plugin.md)
6
+
7
+ - Charts (2D)
8
+
9
+ - [Usage](/rechart-basic-usage.md)
10
+ - [Attributes](/rechart-attributes.md)
11
+ - [Line Chart](/Rechart/line.md)
12
+ - [Bar Chart](/Rechart/bar.md)
13
+ - [Pie Chart](/Rechart/pie.md)
14
+ - [Radar Chart](/Rechart/radar.md)
15
+ - [Funnel Chart](/Rechart/funnel.md)
16
+ - [Scatter Chart](/Rechart/scatter.md)
17
+
18
+ - Charts (3D)
19
+
20
+ - [3D Visualization](/3d-visualization.md)
21
+
22
+ - Page Mode
23
+
24
+ - [ScatterL](/components/scatterL.md)
25
+ - [Visium](/components/visium.md)
26
+ - [DotBio](/components/dotBio.md)
27
+ - [Echart](/components/echart.md)
28
+ - [Plotly](/components/plotly.md)
29
+ - [Macaron](/components/macaron.md)
30
+ - [More...](/components/more.md)
31
+
32
+ - Customization
33
+
34
+ - [Configuration](/configuration.md)
35
+ - [Theme](/theme.md)
36
+
37
+ - Developer Experience
38
+
39
+ - [Hot Module Replacement](/hmr.md)
40
+ - [TypeScript](/typescript.md)
41
+ - [Visual Editor](/visual-editor.md)
42
+ - [Internationalization](/i18n.md)
43
+
44
+ - Guide
45
+
46
+ - [CLI](/CLI.md)
47
+ - [Deploy](/deploy.md)
48
+
49
+ - Showcase
50
+
51
+ - [MmTrBC](https://visualify.pharmacy.arizona.edu/MmTrBC/)
52
+ - [EsoDev](https://visualify.pharmacy.arizona.edu/EsoDev/)
53
+
54
+ - [UpdateLog](/log.md)
@@ -1,34 +1,87 @@
1
- # DotBio Component
2
-
3
- The DotBio component is a dot plot that
4
- displays the expression of genes in different cell types.
5
-
6
-
7
- ## Properties
8
-
9
- The DotBio component has the following properties:
10
-
11
- - `type` (string): The type of the component, in this case `DotBio`.
12
- - `id` (string): The unique identifier of the component.
13
- - `row` (int): The row in which the component is to be displayed.
14
- - `col` (int): The column in which the component is to be displayed.
15
- - `rowspan` (int): The number of rows the component is to span.
16
- - `colspan` (int): The number of columns the component is to span.
17
- - `settings` (object): The settings of the component.
18
- - `meta` (object): The metadata API of the component.
19
- - `name` (string): The name of the metadata.
20
- - `url` (string): The URL of the metadata.
21
- - `exclude_celltype` (array): The cell types to be excluded.
22
- - `gene` (string): The gene API.
23
- - `genelist` (string): The genelist variable name we want to use.
24
-
25
- ### settings Properties
26
-
27
- The `settings` object has the following properties:
28
-
29
- - `preset` (string): The preset of the component.
30
- - `ignoreEmptyData` (boolean): Whether to ignore empty data or not.
31
- - `showscale` (boolean): Whether to show the scale or not.
32
- - `showlegend` (boolean): Whether to show the legend or not.
33
-
34
-
1
+ # DotBio Component
2
+
3
+ The DotBio component creates dot plots (also known as bubble plots) commonly used in bioinformatics to display gene expression patterns across cell types. Each dot represents the expression of a gene in a specific cell type, with size indicating the percentage of expressing cells and color indicating expression level.
4
+
5
+ > **Note:** This component requires a backend API to supply gene expression and metadata. A live demo is not available in this documentation.
6
+
7
+ ## How It Works
8
+
9
+ The DotBio component fetches cell-type metadata and gene expression data from backend APIs, then renders a matrix of dots where rows are cell types and columns are genes.
10
+
11
+ ```
12
+ Gene A Gene B Gene C Gene D
13
+ Cell Type 1 ● ◉ ○ ●
14
+ Cell Type 2 ○ ● ◉ ○
15
+ Cell Type 3 ◉ ○ ● ◉
16
+ Cell Type 4 ● ● ○ ○
17
+
18
+ = high expression (large, dark)
19
+ = medium expression
20
+ = low expression (small, light)
21
+ ```
22
+
23
+ The dot size encodes the percentage of cells expressing the gene, while the dot color encodes the average expression level. This dual encoding lets researchers quickly identify which genes are active in which cell populations.
24
+
25
+ ## Properties
26
+
27
+ | Property | Type | Required | Description |
28
+ |---|---|---|---|
29
+ | `type` | string | Yes | Must be set to `"DotBio"`. |
30
+ | `id` | string | Yes | A unique identifier for this component instance. Used for cross-component references and event targeting. |
31
+ | `row` | int | No | The grid row position where the component is placed (1-based). |
32
+ | `col` | int | No | The grid column position where the component is placed (1-based). |
33
+ | `rowspan` | int | No | The number of grid rows this component spans. Defaults to 1. |
34
+ | `colspan` | int | No | The number of grid columns this component spans. Defaults to 1. |
35
+ | `settings` | object | No | Display and behavior settings. See the **Settings** table below. |
36
+ | `meta` | object | Yes | Defines the metadata API endpoint that provides cell-type information. |
37
+ | `meta.name` | string | Yes | A label for the metadata source (e.g., `"metadata"`). |
38
+ | `meta.url` | string | Yes | The backend URL that returns cell-type metadata. |
39
+ | `exclude_celltype` | array | No | An array of cell-type names to exclude from the plot. Useful for filtering out irrelevant or noisy populations. |
40
+ | `gene` | string | Yes | The backend API URL that returns gene expression data for the selected genes. |
41
+ | `genelist` | string | Yes | The name of the gene list variable to use. This should match a gene list defined elsewhere in the page configuration. |
42
+
43
+ ### Settings
44
+
45
+ | Property | Type | Default | Description |
46
+ |---|---|---|---|
47
+ | `preset` | string | - | A named preset that applies predefined styling and layout options (e.g., `"mmtrbc"`). |
48
+ | `ignoreEmptyData` | boolean | `false` | When `true`, the component will not render an error or placeholder if the API returns empty data. |
49
+ | `showscale` | boolean | `true` | Whether to display the color scale legend alongside the plot. |
50
+ | `showlegend` | boolean | `true` | Whether to display the size legend indicating percentage of expressing cells. |
51
+
52
+ ## Example
53
+
54
+ ```json
55
+ {
56
+ "id": "dotbio_expression",
57
+ "type": "DotBio",
58
+ "col": 1,
59
+ "rowspan": 4,
60
+ "colspan": 2,
61
+ "settings": {
62
+ "preset": "mmtrbc",
63
+ "ignoreEmptyData": true,
64
+ "showscale": true,
65
+ "showlegend": true
66
+ },
67
+ "meta": {
68
+ // Label for this metadata source
69
+ "name": "metadata",
70
+ // Backend endpoint returning cell-type information
71
+ "url": "<your-backend-url>/api/metadata"
72
+ },
73
+ // Cell types to exclude from the visualization
74
+ "exclude_celltype": ["BC-Mes", "BC-NE"],
75
+ // Backend endpoint returning gene expression values
76
+ "gene": "<your-backend-url>/api/gene",
77
+ // References a gene list defined in the page configuration
78
+ "genelist": "selected_genes"
79
+ }
80
+ ```
81
+
82
+ ## See Also
83
+
84
+ - [Plotly Component](/components/plotly.md) - For scatter and violin plots of expression data
85
+ - [Echart Component](/components/echart.md) - General-purpose chart component
86
+ - [Configuration](/configuration.md) - How to set up page mode
87
+ - [MmTrBC Showcase](https://visualify.pharmacy.arizona.edu/MmTrBC/) - Live project using DotBio and other components
@@ -1,82 +1,171 @@
1
- # Echart Component
2
-
3
- The Echart component is a wrapper around the
4
- [Apache ECharts](https://echarts.apache.org/en/index.html) library. It is used
5
- to create a variety of visualizations including scatter plots, line charts, bar
6
- charts, and more.
7
-
8
- This Echart Component is same as the Rechart Component, but it is used for the
9
- page mode, which enable the user to create a page with multiple components. And
10
- it also **support the API to fetch the data**.
11
-
12
- ## Properties
13
-
14
- The Echart component has the following properties:
15
-
16
- - `type` (string): The type of the component, in this case `Echart`.
17
- - `id` (string): The unique identifier of the component.
18
- - `row` (int): The row in which the component is to be displayed.
19
- - `col` (int): The column in which the component is to be displayed.
20
- - `rowspan` (int): The number of rows the component is to span.
21
- - `colspan` (int): The number of columns the component is to span.
22
- - `config` (object): The configuration of the component.
23
- - `parser` (object): The parser of the component.
24
- - `trigger` (object): The trigger of the component.
25
-
26
- ### config Properties
27
-
28
- The `config` object has the following properties:
29
-
30
- - `width` (int): The width of the component.
31
- - `height` (int): The height of the component.
32
- - `preset` (string): The preset of the component.
33
- - `title` (string): The title of the component.
34
- - `xAxis` (string): The x-axis of the component.
35
- - `yAxis` (string): The y-axis of the component.
36
- - `legend` (string): The legend of the component.
37
- - `tooltip` (string): The tooltip of the component.
38
- - `data` (string): The data of the component.
39
-
40
- ### parser Properties
41
-
42
- The `parser` object has the following properties:
43
-
44
- - `sources` (array): The sources of the component.
45
- - `name` (string): The name of the trigger.
46
- - `url` (string): The URL of the data.
47
- - `type` (string): The type of the component.
48
- - `responseKey` (string): The response key of the component.
49
- - `trigger` (object): The trigger of the component.
50
- - `title` (boolean): set the title to the triiger value.
51
-
52
- ### Example
53
-
54
- ```json
55
- {
56
- "id": "mmtrbc_tsne",
57
- "type": "Echart",
58
- "col": 2,
59
- "rowspan": 3,
60
- "config": {
61
- "width": 600,
62
- "height": 600,
63
- "preset": "mmtrbc",
64
- "title": " "
65
- },
66
- "parser": {
67
- "sources": [{
68
- "name": "metadata",
69
- "url": "<your-backend-url>"
70
- }, {
71
- "name": "gene",
72
- "url": "<your-backend-url>",
73
- "responseKey": "gene",
74
- "trigger": {
75
- "name": "mmtrbc_gene",
76
- "title": true
77
- }
78
- }],
79
- "type": "scatter"
80
- }
81
- }
82
- ```
1
+ # Echart Component
2
+
3
+ The Echart component is a wrapper around the [Apache ECharts](https://echarts.apache.org/en/index.html) library. It provides the same charting capabilities as [Charts (2D)](/rechart-basic-usage.md) but is designed for **page mode**, enabling multi-component layouts with API data fetching.
4
+
5
+ ## Live Demo
6
+
7
+ The Echart component uses the same rendering engine as the standard charts. Here's a scatter plot example:
8
+
9
+ ```visualify
10
+ {
11
+ "type": "scatter",
12
+ "title": "Gene Expression Scatter Plot",
13
+ "data": {
14
+ "categories": [],
15
+ "series": [
16
+ {
17
+ "name": "Cluster A",
18
+ "data": [[10.0, 8.04], [8.0, 6.95], [13.0, 7.58], [9.0, 8.81], [11.0, 8.33], [14.0, 9.96], [6.0, 7.24], [4.0, 4.26], [12.0, 10.84], [7.0, 4.82], [5.0, 5.68]]
19
+ },
20
+ {
21
+ "name": "Cluster B",
22
+ "data": [[8.0, 3.04], [8.0, 3.95], [8.0, 4.58], [8.0, 3.81], [8.0, 4.33], [8.0, 3.96], [8.0, 4.24], [19.0, 12.5], [8.0, 3.26], [8.0, 3.84], [8.0, 3.68]]
23
+ }
24
+ ]
25
+ }
26
+ }
27
+ ```
28
+
29
+ And a line chart with multiple series:
30
+
31
+ ```visualify
32
+ {
33
+ "type": "line",
34
+ "title": "Time-Series Expression Data",
35
+ "smooth": true,
36
+ "data": {
37
+ "categories": ["0h", "2h", "4h", "8h", "12h", "24h", "48h"],
38
+ "series": [
39
+ { "name": "Gene A", "data": [2.1, 3.5, 5.2, 8.1, 6.3, 4.2, 3.0] },
40
+ { "name": "Gene B", "data": [1.0, 1.2, 2.8, 7.5, 12.1, 9.8, 5.4] },
41
+ { "name": "Gene C", "data": [5.5, 5.0, 4.2, 3.1, 2.5, 2.0, 1.8] }
42
+ ]
43
+ },
44
+ "yAxis": { "name": "Expression Level" }
45
+ }
46
+ ```
47
+
48
+ ## How It Works
49
+
50
+ In page mode, the Echart component connects to **backend APIs** to fetch data dynamically. The data flow is:
51
+
52
+ ```
53
+ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐
54
+ │ visualify │────>│ Parser │────>│ ECharts │
55
+ │ .json │ │ (fetch + │ │ (render) │
56
+ │ config │ │ transform)│ │ │
57
+ └─────────────┘ └─────────────┘ └──────────────┘
58
+ │ │
59
+ │ parser.sources │ fetched_data
60
+ v v
61
+ ┌─────────────┐ ┌─────────────┐
62
+ │ Backend │────>│ Data │
63
+ │ API │ │ Transform │
64
+ └─────────────┘ └─────────────┘
65
+ ```
66
+
67
+ ## Properties
68
+
69
+ | Property | Type | Required | Description |
70
+ |----------|------|----------|-------------|
71
+ | `type` | string | Yes | Must be `"Echart"` |
72
+ | `id` | string | Yes | Unique identifier for the component |
73
+ | `row` | int | No | Grid row position |
74
+ | `col` | int | No | Grid column position |
75
+ | `rowspan` | int | No | Number of rows to span |
76
+ | `colspan` | int | No | Number of columns to span |
77
+ | `config` | object | Yes | Chart configuration (see below) |
78
+ | `parser` | object | No | Data fetching configuration |
79
+ | `trigger` | object | No | Event trigger configuration |
80
+
81
+ ### config Properties
82
+
83
+ | Property | Type | Description |
84
+ |----------|------|-------------|
85
+ | `width` | int | Chart width in pixels |
86
+ | `height` | int | Chart height in pixels |
87
+ | `preset` | string | Named preset configuration |
88
+ | `title` | string | Chart title |
89
+ | `xAxis` | string/array | X-axis configuration |
90
+ | `yAxis` | string/array | Y-axis configuration |
91
+ | `legend` | object | Legend configuration |
92
+ | `tooltip` | object | Tooltip configuration |
93
+ | `data` | object | Inline data (when not using parser) |
94
+
95
+ ### parser Properties
96
+
97
+ The `parser` object configures dynamic data fetching:
98
+
99
+ | Property | Type | Description |
100
+ |----------|------|-------------|
101
+ | `sources` | array | Array of data source configurations |
102
+ | `sources[].name` | string | Source identifier |
103
+ | `sources[].url` | string | Backend API URL |
104
+ | `sources[].type` | string | Chart type (e.g., `"scatter"`) |
105
+ | `sources[].responseKey` | string | Key to extract from API response |
106
+ | `sources[].trigger` | object | Trigger configuration for interactivity |
107
+ | `sources[].trigger.name` | string | Trigger name (links to other components) |
108
+ | `sources[].trigger.title` | boolean | Whether to update the chart title |
109
+
110
+ ## Example
111
+
112
+ ### Page Mode with API Data
113
+
114
+ ```json
115
+ {
116
+ "id": "expression_tsne",
117
+ "type": "Echart",
118
+ "col": 2,
119
+ "rowspan": 3,
120
+ "config": {
121
+ "width": 600,
122
+ "height": 600,
123
+ "preset": "mmtrbc",
124
+ "title": "t-SNE Visualization"
125
+ },
126
+ "parser": {
127
+ "sources": [
128
+ {
129
+ "name": "metadata",
130
+ "url": "https://your-api.com/metadata"
131
+ },
132
+ {
133
+ "name": "gene",
134
+ "url": "https://your-api.com/gene",
135
+ "responseKey": "gene",
136
+ "trigger": {
137
+ "name": "gene_search",
138
+ "title": true
139
+ }
140
+ }
141
+ ],
142
+ "type": "scatter"
143
+ }
144
+ }
145
+ ```
146
+
147
+ ### Static Data (No API)
148
+
149
+ ```json
150
+ {
151
+ "id": "static_chart",
152
+ "type": "Echart",
153
+ "row": 1,
154
+ "col": 1,
155
+ "config": {
156
+ "title": "Static Bar Chart",
157
+ "type": "bar",
158
+ "data": {
159
+ "Series A": [120, 200, 150, 80, 70],
160
+ "Series B": [60, 120, 90, 140, 130]
161
+ },
162
+ "xAxis": ["Mon", "Tue", "Wed", "Thu", "Fri"]
163
+ }
164
+ }
165
+ ```
166
+
167
+ ## See Also
168
+
169
+ - [Charts (2D)](/rechart-basic-usage.md) - Same engine, simpler usage for standalone charts
170
+ - [Configuration](/configuration.md) - How to set up page mode
171
+ - [MmTrBC Showcase](https://visualify.pharmacy.arizona.edu/MmTrBC/) - Live example using Echart components