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.
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 -193
  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 -0
  63. package/docs/docs/_404.md +51 -51
  64. package/docs/docs/_coverpage.md +11 -11
  65. package/docs/docs/_sidebar.md +54 -43
  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 -123
  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 -1
  81. package/docs/docs/more-pages.md +23 -23
  82. package/docs/docs/quickstart.md +148 -119
  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 -579
  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 -143
  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
@@ -1,18 +1,18 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2024-01-14 14:55:51
4
- * @FilePath : /visualifyjs/src/core/modules/replotly/presets/minimum.js
5
- * @Description :
6
- * Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
- const minimumPreset = {
9
- data: [],
10
- config: {},
11
- layout: {
12
- title: 'Minimum Preset of RePlotly',
13
- chartWidth: 800,
14
- chartHeight: 400,
15
- },
16
- };
17
-
18
- export default minimumPreset;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2024-01-14 14:55:51
4
+ * @FilePath : /visualifyjs/src/core/modules/replotly/presets/minimum.js
5
+ * @Description :
6
+ * Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+ const minimumPreset = {
9
+ data: [],
10
+ config: {},
11
+ layout: {
12
+ title: 'Minimum Preset of RePlotly',
13
+ chartWidth: 800,
14
+ chartHeight: 400,
15
+ },
16
+ };
17
+
18
+ export default minimumPreset;
@@ -1,114 +1,114 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2024-01-14 15:25:40
4
- * @FilePath : /visualifyjs/src/core/modules/replotly/presets/mmtrbc.dot.js
5
- * @Description :
6
- * Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
-
9
- import Plotly from 'react-plotly.js';
10
-
11
- const DownloadIcon = {
12
- width: 32,
13
- height: 40,
14
- path: `M30 20.75c-0.69 0.001-1.249 0.56-1.25 1.25v6.75h-25.5v-6.75c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25v0 8c0 0.69 0.56 1.25 1.25 1.25h28c0.69-0.001 1.249-0.56 1.25-1.25v-8c-0.001-0.69-0.56-1.249-1.25-1.25h-0zM15.116 24.885c0.012 0.012 0.029 0.016 0.041 0.027 0.103 0.099 0.223 0.18 0.356 0.239l0.008 0.003 0.001 0c0.141 0.060 0.306 0.095 0.478 0.095 0.345 0 0.657-0.139 0.883-0.365l5.001-5c0.226-0.226 0.366-0.539 0.366-0.884 0-0.691-0.56-1.251-1.251-1.251-0.345 0-0.658 0.14-0.884 0.366l-2.865 2.867v-18.982c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25v0 18.981l-2.866-2.866c-0.226-0.226-0.539-0.366-0.884-0.366-0.691 0-1.251 0.56-1.251 1.251 0 0.346 0.14 0.658 0.367 0.885v0z`,
15
- };
16
-
17
- const mmtrbc_dot = {
18
- data: [],
19
- config: {
20
- displaylogo: false,
21
- modeBarButtonsToRemove: [
22
- 'toImage',
23
- 'zoom2d',
24
- 'pan2d',
25
- 'zoomIn2d',
26
- 'zoomOut2d',
27
- 'boxSelect',
28
- 'select2d',
29
- 'lasso2d',
30
- 'resetScale2d',
31
- 'hoverClosestCartesian',
32
- 'hoverCompareCartesian',
33
- 'toggleSpikelines',
34
- ],
35
- modeBarButtonsToAdd: [
36
- {
37
- name: 'Save As Image',
38
- icon: DownloadIcon, // Your custom SVG or base64 encoded image
39
- click: function (gd) {
40
- Plotly.downloadImage(gd, { format: 'png' });
41
- },
42
- },
43
- ],
44
- },
45
- layout: {
46
- title: {
47
- text: 'Add genes to update Dot Plot',
48
- font: {
49
- family: 'Arial, sans-serif',
50
- size: 24,
51
- color: 'black',
52
- },
53
- },
54
- margin: {
55
- l: 110,
56
- r: 40,
57
- b: 30,
58
- t: 80,
59
- },
60
- legend: {
61
- //hide the legend
62
- x: 0.5, // left align
63
- y: -0.5, // top align
64
- xanchor: 'center', // anchor the legend to the left
65
- yanchor: 'bottom', // anchor the legend to the top
66
- orientation: 'h', // horizontal legend
67
- font: {
68
- size: 16,
69
- family: 'Arial, sans-serif',
70
- color: '#6699CC',
71
- },
72
- },
73
- xaxis: {
74
- showgrid: false,
75
- showline: false,
76
- showticklabels: true,
77
- linecolor: 'rgb(102, 102, 102)',
78
- tickcolor: 'rgb(102, 102, 102)',
79
- },
80
- yaxis: {
81
- showgrid: true,
82
- showline: false,
83
- showticklabels: true,
84
- gridcolor: '#E5ECF6',
85
- tickfont: {
86
- size: 16,
87
- family: 'Arial',
88
- color: '#037e8c',
89
- },
90
- },
91
- width: 500,
92
- height: 300,
93
- hovermode: 'closest',
94
- },
95
- visualify: {
96
- mapping: {
97
- extra: {
98
- UMI: 'N_UMI',
99
- N_gene: 'N_gene',
100
- Frac_MT: 'Frac_MT',
101
- Cell_ID: 'Cell_ID',
102
- },
103
- },
104
- merger: {
105
- gene: {
106
- item: 'Cell_ID',
107
- label: 'Expression',
108
- visualMap: true,
109
- },
110
- },
111
- },
112
- };
113
-
114
- export default mmtrbc_dot;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2024-01-14 15:25:40
4
+ * @FilePath : /visualifyjs/src/core/modules/replotly/presets/mmtrbc.dot.js
5
+ * @Description :
6
+ * Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+
9
+ import Plotly from 'react-plotly.js';
10
+
11
+ const DownloadIcon = {
12
+ width: 32,
13
+ height: 40,
14
+ path: `M30 20.75c-0.69 0.001-1.249 0.56-1.25 1.25v6.75h-25.5v-6.75c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25v0 8c0 0.69 0.56 1.25 1.25 1.25h28c0.69-0.001 1.249-0.56 1.25-1.25v-8c-0.001-0.69-0.56-1.249-1.25-1.25h-0zM15.116 24.885c0.012 0.012 0.029 0.016 0.041 0.027 0.103 0.099 0.223 0.18 0.356 0.239l0.008 0.003 0.001 0c0.141 0.060 0.306 0.095 0.478 0.095 0.345 0 0.657-0.139 0.883-0.365l5.001-5c0.226-0.226 0.366-0.539 0.366-0.884 0-0.691-0.56-1.251-1.251-1.251-0.345 0-0.658 0.14-0.884 0.366l-2.865 2.867v-18.982c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25v0 18.981l-2.866-2.866c-0.226-0.226-0.539-0.366-0.884-0.366-0.691 0-1.251 0.56-1.251 1.251 0 0.346 0.14 0.658 0.367 0.885v0z`,
15
+ };
16
+
17
+ const mmtrbc_dot = {
18
+ data: [],
19
+ config: {
20
+ displaylogo: false,
21
+ modeBarButtonsToRemove: [
22
+ 'toImage',
23
+ 'zoom2d',
24
+ 'pan2d',
25
+ 'zoomIn2d',
26
+ 'zoomOut2d',
27
+ 'boxSelect',
28
+ 'select2d',
29
+ 'lasso2d',
30
+ 'resetScale2d',
31
+ 'hoverClosestCartesian',
32
+ 'hoverCompareCartesian',
33
+ 'toggleSpikelines',
34
+ ],
35
+ modeBarButtonsToAdd: [
36
+ {
37
+ name: 'Save As Image',
38
+ icon: DownloadIcon, // Your custom SVG or base64 encoded image
39
+ click: function (gd) {
40
+ Plotly.downloadImage(gd, { format: 'png' });
41
+ },
42
+ },
43
+ ],
44
+ },
45
+ layout: {
46
+ title: {
47
+ text: 'Add genes to update Dot Plot',
48
+ font: {
49
+ family: 'Arial, sans-serif',
50
+ size: 24,
51
+ color: 'black',
52
+ },
53
+ },
54
+ margin: {
55
+ l: 110,
56
+ r: 40,
57
+ b: 30,
58
+ t: 80,
59
+ },
60
+ legend: {
61
+ //hide the legend
62
+ x: 0.5, // left align
63
+ y: -0.5, // top align
64
+ xanchor: 'center', // anchor the legend to the left
65
+ yanchor: 'bottom', // anchor the legend to the top
66
+ orientation: 'h', // horizontal legend
67
+ font: {
68
+ size: 16,
69
+ family: 'Arial, sans-serif',
70
+ color: '#6699CC',
71
+ },
72
+ },
73
+ xaxis: {
74
+ showgrid: false,
75
+ showline: false,
76
+ showticklabels: true,
77
+ linecolor: 'rgb(102, 102, 102)',
78
+ tickcolor: 'rgb(102, 102, 102)',
79
+ },
80
+ yaxis: {
81
+ showgrid: true,
82
+ showline: false,
83
+ showticklabels: true,
84
+ gridcolor: '#E5ECF6',
85
+ tickfont: {
86
+ size: 16,
87
+ family: 'Arial',
88
+ color: '#037e8c',
89
+ },
90
+ },
91
+ width: 500,
92
+ height: 300,
93
+ hovermode: 'closest',
94
+ },
95
+ visualify: {
96
+ mapping: {
97
+ extra: {
98
+ UMI: 'N_UMI',
99
+ N_gene: 'N_gene',
100
+ Frac_MT: 'Frac_MT',
101
+ Cell_ID: 'Cell_ID',
102
+ },
103
+ },
104
+ merger: {
105
+ gene: {
106
+ item: 'Cell_ID',
107
+ label: 'Expression',
108
+ visualMap: true,
109
+ },
110
+ },
111
+ },
112
+ };
113
+
114
+ export default mmtrbc_dot;
@@ -1,100 +1,100 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2024-01-14 15:25:40
4
- * @FilePath : /visualifyjs/src/core/modules/replotly/presets/mmtrbc.violin.js
5
- * @Description :
6
- * Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
-
9
- import Plotly from 'react-plotly.js';
10
-
11
- const DownloadIcon = {
12
- width: 32,
13
- height: 40,
14
- path: `M30 20.75c-0.69 0.001-1.249 0.56-1.25 1.25v6.75h-25.5v-6.75c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25v0 8c0 0.69 0.56 1.25 1.25 1.25h28c0.69-0.001 1.249-0.56 1.25-1.25v-8c-0.001-0.69-0.56-1.249-1.25-1.25h-0zM15.116 24.885c0.012 0.012 0.029 0.016 0.041 0.027 0.103 0.099 0.223 0.18 0.356 0.239l0.008 0.003 0.001 0c0.141 0.060 0.306 0.095 0.478 0.095 0.345 0 0.657-0.139 0.883-0.365l5.001-5c0.226-0.226 0.366-0.539 0.366-0.884 0-0.691-0.56-1.251-1.251-1.251-0.345 0-0.658 0.14-0.884 0.366l-2.865 2.867v-18.982c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25v0 18.981l-2.866-2.866c-0.226-0.226-0.539-0.366-0.884-0.366-0.691 0-1.251 0.56-1.251 1.251 0 0.346 0.14 0.658 0.367 0.885v0z`,
15
- };
16
-
17
- const mmtrbc_violin = {
18
- data: [],
19
- config: {
20
- displaylogo: false,
21
- modeBarButtonsToRemove: [
22
- 'toImage',
23
- 'zoom2d',
24
- 'pan2d',
25
- 'zoomIn2d',
26
- 'zoomOut2d',
27
- 'autoScale2d',
28
- //"resetScale2d",
29
- 'hoverClosestCartesian',
30
- 'hoverCompareCartesian',
31
- 'toggleSpikelines',
32
- ],
33
- modeBarButtonsToAdd: [
34
- {
35
- name: 'Save As Image',
36
- icon: DownloadIcon, // Your custom SVG or base64 encoded image
37
- click: function (gd) {
38
- Plotly.downloadImage(gd, { format: 'png' });
39
- },
40
- },
41
- ],
42
- },
43
- layout: {
44
- title: {
45
- text: 'Search a gene to update Violin Plot',
46
- font: {
47
- family: 'Arial, sans-serif',
48
- size: 24,
49
- color: 'black',
50
- },
51
- },
52
- margin: {
53
- l: 10,
54
- r: 10,
55
- b: 20,
56
- t: 60,
57
- },
58
- legend: {
59
- font: {
60
- size: 13,
61
- family: 'Arial, sans-serif',
62
- color: '#6699CC',
63
- },
64
- x: 0.5, // left align
65
- y: -0.3, // top align
66
- xanchor: 'center', // anchor the legend to the left
67
- yanchor: 'bottom', // anchor the legend to the top
68
- orientation: 'h', // horizontal legend
69
- },
70
- xaxis: {
71
- tickvals: [],
72
- showgrid: false,
73
- showline: true,
74
- linecolor: 'rgb(102, 102, 102)',
75
- tickcolor: 'rgb(102, 102, 102)',
76
- type: 'category',
77
- },
78
- width: 500,
79
- height: 300,
80
- },
81
- visualify: {
82
- mapping: {
83
- extra: {
84
- UMI: 'N_UMI',
85
- N_gene: 'N_gene',
86
- Frac_MT: 'Frac_MT',
87
- Cell_ID: 'Cell_ID',
88
- },
89
- },
90
- merger: {
91
- gene: {
92
- item: 'Cell_ID',
93
- label: 'Expression',
94
- visualMap: true,
95
- },
96
- },
97
- },
98
- };
99
-
100
- export default mmtrbc_violin;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2024-01-14 15:25:40
4
+ * @FilePath : /visualifyjs/src/core/modules/replotly/presets/mmtrbc.violin.js
5
+ * @Description :
6
+ * Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+
9
+ import Plotly from 'react-plotly.js';
10
+
11
+ const DownloadIcon = {
12
+ width: 32,
13
+ height: 40,
14
+ path: `M30 20.75c-0.69 0.001-1.249 0.56-1.25 1.25v6.75h-25.5v-6.75c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25v0 8c0 0.69 0.56 1.25 1.25 1.25h28c0.69-0.001 1.249-0.56 1.25-1.25v-8c-0.001-0.69-0.56-1.249-1.25-1.25h-0zM15.116 24.885c0.012 0.012 0.029 0.016 0.041 0.027 0.103 0.099 0.223 0.18 0.356 0.239l0.008 0.003 0.001 0c0.141 0.060 0.306 0.095 0.478 0.095 0.345 0 0.657-0.139 0.883-0.365l5.001-5c0.226-0.226 0.366-0.539 0.366-0.884 0-0.691-0.56-1.251-1.251-1.251-0.345 0-0.658 0.14-0.884 0.366l-2.865 2.867v-18.982c0-0.69-0.56-1.25-1.25-1.25s-1.25 0.56-1.25 1.25v0 18.981l-2.866-2.866c-0.226-0.226-0.539-0.366-0.884-0.366-0.691 0-1.251 0.56-1.251 1.251 0 0.346 0.14 0.658 0.367 0.885v0z`,
15
+ };
16
+
17
+ const mmtrbc_violin = {
18
+ data: [],
19
+ config: {
20
+ displaylogo: false,
21
+ modeBarButtonsToRemove: [
22
+ 'toImage',
23
+ 'zoom2d',
24
+ 'pan2d',
25
+ 'zoomIn2d',
26
+ 'zoomOut2d',
27
+ 'autoScale2d',
28
+ //"resetScale2d",
29
+ 'hoverClosestCartesian',
30
+ 'hoverCompareCartesian',
31
+ 'toggleSpikelines',
32
+ ],
33
+ modeBarButtonsToAdd: [
34
+ {
35
+ name: 'Save As Image',
36
+ icon: DownloadIcon, // Your custom SVG or base64 encoded image
37
+ click: function (gd) {
38
+ Plotly.downloadImage(gd, { format: 'png' });
39
+ },
40
+ },
41
+ ],
42
+ },
43
+ layout: {
44
+ title: {
45
+ text: 'Search a gene to update Violin Plot',
46
+ font: {
47
+ family: 'Arial, sans-serif',
48
+ size: 24,
49
+ color: 'black',
50
+ },
51
+ },
52
+ margin: {
53
+ l: 10,
54
+ r: 10,
55
+ b: 20,
56
+ t: 60,
57
+ },
58
+ legend: {
59
+ font: {
60
+ size: 13,
61
+ family: 'Arial, sans-serif',
62
+ color: '#6699CC',
63
+ },
64
+ x: 0.5, // left align
65
+ y: -0.3, // top align
66
+ xanchor: 'center', // anchor the legend to the left
67
+ yanchor: 'bottom', // anchor the legend to the top
68
+ orientation: 'h', // horizontal legend
69
+ },
70
+ xaxis: {
71
+ tickvals: [],
72
+ showgrid: false,
73
+ showline: true,
74
+ linecolor: 'rgb(102, 102, 102)',
75
+ tickcolor: 'rgb(102, 102, 102)',
76
+ type: 'category',
77
+ },
78
+ width: 500,
79
+ height: 300,
80
+ },
81
+ visualify: {
82
+ mapping: {
83
+ extra: {
84
+ UMI: 'N_UMI',
85
+ N_gene: 'N_gene',
86
+ Frac_MT: 'Frac_MT',
87
+ Cell_ID: 'Cell_ID',
88
+ },
89
+ },
90
+ merger: {
91
+ gene: {
92
+ item: 'Cell_ID',
93
+ label: 'Expression',
94
+ visualMap: true,
95
+ },
96
+ },
97
+ },
98
+ };
99
+
100
+ export default mmtrbc_violin;
@@ -1,71 +1,74 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2024-01-14 14:39:52
4
- * @FilePath : /visualifyjs/src/core/modules/replotly.js
5
- * @Description :
6
- * Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
- import React, { useEffect, useState } from 'react';
9
- import Plot from 'react-plotly.js';
10
- import { getPreset } from './replotly/presetHandler';
11
- import { useAppContext } from '../appContext';
12
- import handle_Data, { __process_fetched_data } from '../parser/plotly.data';
13
- import { handle_violin_plot } from '../parser/plotly.violin';
14
-
15
- const RePlotly = ({ props, style }) => {
16
- const [data, setData] = useState(props.data ?? []);
17
- const [layout, setLayout] = useState(props.layout ?? {});
18
- const [config, setConfig] = useState(props.config ?? {});
19
- const { sharedData } = useAppContext();
20
-
21
- useEffect(() => {
22
- const updatePlot = async () => {
23
- const { settings, parser } = props;
24
- let preset = getPreset(settings?.preset);
25
- if (parser) {
26
- try {
27
- // fetch data from api
28
- const fetched_data = await handle_Data(
29
- parser,
30
- preset.layout,
31
- sharedData,
32
- );
33
- const processed_data = __process_fetched_data(
34
- fetched_data,
35
- parser,
36
- preset.visualify,
37
- );
38
-
39
- if (parser.type === 'violin') {
40
- preset.data = handle_violin_plot(processed_data);
41
- setData(() => preset.data);
42
- }
43
- } catch (err) {
44
- if (
45
- err.message === 'No data fetched from api' &&
46
- settings?.ignoreEmptyData
47
- ) {
48
- } else console.log(err.message);
49
- }
50
- }
51
-
52
- setData((data) => [...preset.data]);
53
- setLayout((layout) => ({ ...preset.layout }));
54
- setConfig((config) => ({ ...preset.config }));
55
- };
56
-
57
- updatePlot();
58
- }, [props, sharedData]);
59
-
60
- return (
61
- <div style={style}>
62
- <Plot
63
- data={data}
64
- layout={layout}
65
- config={config}
66
- />
67
- </div>
68
- );
69
- };
70
-
71
- export default RePlotly;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2024-01-14 14:39:52
4
+ * @FilePath : /visualifyjs/src/core/modules/replotly.js
5
+ * @Description :
6
+ * Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+ import React, { useEffect, useState } from 'react';
9
+ import Plot from 'react-plotly.js';
10
+ import { getPreset } from './replotly/presetHandler';
11
+ import { useAppContext } from '../appContext';
12
+ import handle_Data, { __process_fetched_data } from '../parser/plotly.data';
13
+ import { handle_violin_plot } from '../parser/plotly.violin';
14
+
15
+ const RePlotly = ({ props, style }) => {
16
+ const [data, setData] = useState(props.data ?? []);
17
+ const [layout, setLayout] = useState(props.layout ?? {});
18
+ const [config, setConfig] = useState(props.config ?? {});
19
+ const { sharedData } = useAppContext();
20
+
21
+ useEffect(() => {
22
+ const updatePlot = async () => {
23
+ const { settings, parser } = props;
24
+ let preset = getPreset(settings?.preset);
25
+
26
+ if (parser) {
27
+ try {
28
+ const fetched_data = await handle_Data(
29
+ parser,
30
+ preset.layout,
31
+ sharedData,
32
+ );
33
+ const processed_data = __process_fetched_data(
34
+ fetched_data,
35
+ parser,
36
+ preset.visualify,
37
+ );
38
+
39
+ if (parser.type === 'violin') {
40
+ preset.data = handle_violin_plot(processed_data);
41
+ }
42
+ } catch (err) {
43
+ if (
44
+ err.message === 'No data fetched from api' &&
45
+ settings?.ignoreEmptyData
46
+ ) {
47
+ // silently ignore empty data when configured
48
+ } else console.error(err.message);
49
+ }
50
+ }
51
+
52
+ // Use props.data if provided directly (e.g., from DotBio),
53
+ // otherwise fall back to preset data
54
+ const finalData = props.data?.length ? props.data : preset.data;
55
+ setData([...finalData]);
56
+ setLayout({ ...preset.layout });
57
+ setConfig({ ...preset.config });
58
+ };
59
+
60
+ updatePlot();
61
+ }, [props, sharedData]);
62
+
63
+ return (
64
+ <div style={style}>
65
+ <Plot
66
+ data={data}
67
+ layout={layout}
68
+ config={config}
69
+ />
70
+ </div>
71
+ );
72
+ };
73
+
74
+ export default RePlotly;