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,70 +1,171 @@
1
- # ScatterL Components
2
-
3
- The ScatterL component is a scatter plot that is used to visualize the data in
4
- 2D. It is a part of the Plotly library and is used to visualize the data in 2D.
5
- The ScatterL component is used to visualize the data in 2D.
6
-
7
- The ScatterL component is designed for a specified data Format, like R-tree, to
8
- visualize a large data set in 2D.
9
-
10
- ## Requirements
11
-
12
- The ScatterL component requires the specified API to fetch the data. Currently,
13
- the ScatterL component supports the API for fetching the data - in the format of
14
- JSON, - and it need API to consist as
15
- `your-backend-server-url/xxx/<x-min>/<y-min>/<x-max>/<y-max>`
16
-
17
- We will provide an example of the backend to show you how to implement our
18
- customized Rtree API.
19
-
20
- ## Properties
21
-
22
- The ScatterL component has the following properties:
23
-
24
- - `type` (string): The type of the component, in this case `ScatterL`.
25
- - `id` (string): The unique identifier of the component.
26
- - `row` (int): The row in which the component is to be displayed.
27
- - `col` (int): The column in which the component is to be displayed.
28
- - `rowspan` (int): The number of rows the component is to span.
29
- - `config` (object): The configuration of the component.
30
-
31
- ### config Properties
32
-
33
- The `config` object has the following properties:
34
-
35
- - `merge` (boolean): Whether to merge the data or not.
36
- - `startup_msg` (string): The message to be displayed when the component is
37
- started.
38
- - `size` (object): The size of the component.
39
- - `width` (int): The width of the component.
40
- - `height` (int): The height of the component.
41
- - `dotsize` (object): The size of the dots in the scatter plot.
42
- - `dotFactor` (int): The factor by which the dot size is to be multiplied.
43
- - `min` (int): The minimum size of the dot.
44
- - `max` (int): The maximum size of the dot.
45
- - `colourby` (string): The property by which the dots are to be coloured.
46
- - `exclusion` (array): The properties to be excluded.
47
- - `api` (object): The API to be used to fetch the data.
48
- - `metadata` (object): The metadata API.
49
- - `href` (string): The URL of the metadata API.
50
- - `val` (string): The value of the metadata API.
51
- - `gene` (object): The gene API.
52
- - `href` (string): The URL of the gene API.
53
- - `val` (string): The value of the gene API.
54
- - `dep` (string): The dependent property of the gene API.
55
- - `mapping` (object): The mapping of the data.
56
- - `api` (object): The API to be used for mapping.
57
- - Example:
58
- - `ENS (S): 'ens_iter_2'` (string): Maps ENS (S) to endo_iter_2 API.
59
- - `IM (S): 'im_iter_2'` (string): Maps IM (S) to im_iter_2 API.
60
- - `MES (S): 'mes_iter_2'` (string): Maps MES (S) to mes_iter_2 API.
61
- - `axis` (object): The axis to be used for mapping.
62
- - `x: X_Coord` (string): Maps x-axis to specified value name.
63
- - `y: Y_Coord` (string): Maps y-axis to specified value name.
64
- - `extra` (object): The extra properties.
65
- - Example:
66
- - `Stage : Stage` (string): Mapes the Stage to the stage property.
67
- - `MT : MT` (string): Maps the MT to the MT property.
68
- - `Gene : Gene` (string): Maps the Gene to the gene property.
69
- - `Cell_Type : Cell_Type` (string): Maps the Cell_Type to the cell type property.
70
- - `Cell_ID : Cell_ID` (string): Maps the Cell_ID to the cell ID property.
1
+ # ScatterL Component
2
+
3
+ ScatterL is a high-performance 2D scatter plot built on Plotly, optimized for large datasets using R-tree spatial indexing. It supports viewport-based data loading, meaning only visible data points are fetched from the backend. This makes it suitable for datasets with millions of points where loading everything at once would be impractical.
4
+
5
+ > **Note:** ScatterL requires a backend API and cannot be used as an inline docsify component. See [MmTrBC](https://visualify.pharmacy.arizona.edu/MmTrBC/) for a live example.
6
+
7
+ ## How It Works
8
+
9
+ ScatterL uses a viewport-based loading strategy. As the user pans and zooms, the component calculates the visible coordinate range and requests only the data points within that region from the backend API.
10
+
11
+ ```
12
+ ┌──────────────────────────────────┐
13
+ │ Full Dataset │
14
+ │ ┌────────────────┐ │
15
+ │ │ Viewport │ Only this │
16
+ │ │ (visible) │ region is │
17
+ │ │ │ loaded via │
18
+ │ │ ● ● ● │ API call │
19
+ │ │ ● ● ● │ │
20
+ │ └────────────────┘ │
21
+ │ ● ● ● │
22
+ │ ● ● ● │
23
+ └──────────────────────────────────┘
24
+ API: /api/<x-min>/<y-min>/<x-max>/<y-max>
25
+ ```
26
+
27
+ **Loading flow:**
28
+
29
+ 1. The component renders with an initial viewport.
30
+ 2. On pan/zoom, the new bounding box coordinates are computed.
31
+ 3. A request is sent to the R-tree API with the bounding box: `<x-min>/<y-min>/<x-max>/<y-max>`.
32
+ 4. The API returns only the data points within that region.
33
+ 5. The scatter plot updates with the new data.
34
+
35
+ ## Properties
36
+
37
+ ### Top-Level Properties
38
+
39
+ | Property | Type | Required | Description |
40
+ |------------|----------|----------|----------------------------------------------------|
41
+ | `type` | string | Yes | Must be `"ScatterL"`. |
42
+ | `id` | string | Yes | Unique identifier for the component. |
43
+ | `row` | int | Yes | Grid row position for layout. |
44
+ | `col` | int | Yes | Grid column position for layout. |
45
+ | `rowspan` | int | No | Number of rows the component spans. |
46
+ | `config` | object | Yes | Configuration object (see below). |
47
+
48
+ ### Config Properties
49
+
50
+ | Property | Type | Required | Description |
51
+ |----------------|----------|----------|----------------------------------------------------------------|
52
+ | `merge` | boolean | No | Whether to merge data from multiple API responses. |
53
+ | `startup_msg` | string | No | Message displayed while the component initializes. |
54
+ | `size` | object | No | Dimensions of the component (see Size below). |
55
+ | `colourby` | string | No | Property name used to colour the data points. |
56
+ | `exclusion` | array | No | List of property names to exclude from display. |
57
+ | `api` | object | Yes | API endpoints for data fetching (see API below). |
58
+ | `mapping` | object | Yes | Data mapping configuration (see Mapping below). |
59
+
60
+ ### Size Properties
61
+
62
+ | Property | Type | Description |
63
+ |-------------|--------|---------------------------------------------------|
64
+ | `width` | int | Width of the component in pixels. |
65
+ | `height` | int | Height of the component in pixels. |
66
+ | `dotsize` | object | Controls dot rendering size. |
67
+ | `dotFactor` | int | Multiplier applied to dot size. |
68
+ | `min` | int | Minimum dot size in pixels. |
69
+ | `max` | int | Maximum dot size in pixels. |
70
+
71
+ ### API Properties
72
+
73
+ | Property | Type | Description |
74
+ |------------------|--------|---------------------------------------------------------------------|
75
+ | `api.metadata` | object | Metadata endpoint configuration. |
76
+ | `metadata.href` | string | URL of the metadata API. |
77
+ | `metadata.val` | string | Variable name used to reference the metadata. |
78
+ | `api.gene` | object | Gene expression endpoint configuration. |
79
+ | `gene.href` | string | URL of the gene API. |
80
+ | `gene.val` | string | Variable name used to reference the gene data. |
81
+ | `gene.dep` | string | Dependent property that triggers gene data loading. |
82
+
83
+ ### Mapping Properties
84
+
85
+ | Property | Type | Description |
86
+ |-----------------|--------|----------------------------------------------------------------------------|
87
+ | `mapping.api` | object | Maps display labels to R-tree API endpoint names. |
88
+ | `mapping.axis` | object | Maps axis identifiers to data property names. |
89
+ | `axis.x` | string | Data property name mapped to the x-axis (e.g., `"X_Coord"`). |
90
+ | `axis.y` | string | Data property name mapped to the y-axis (e.g., `"Y_Coord"`). |
91
+ | `axis.extra` | object | Additional data properties to include (key-value pairs of label to name). |
92
+
93
+ ## API Requirements
94
+
95
+ ScatterL expects a backend API that serves data using R-tree spatial indexing. The API must accept bounding box coordinates in the URL path:
96
+
97
+ ```
98
+ <base-url>/<endpoint>/<x-min>/<y-min>/<x-max>/<y-max>
99
+ ```
100
+
101
+ **Response format:** The API should return a JSON object containing arrays for each mapped property. For example:
102
+
103
+ ```json
104
+ {
105
+ "X_Coord": [1.2, 3.4, 5.6],
106
+ "Y_Coord": [7.8, 9.0, 1.1],
107
+ "Cell_Type": ["TypeA", "TypeB", "TypeA"],
108
+ "Gene": [0.5, 1.2, 0.8]
109
+ }
110
+ ```
111
+
112
+ The `mapping.api` object maps user-facing labels to specific R-tree endpoints. Each endpoint returns data for a particular subset or iteration of the dataset.
113
+
114
+ ## Example
115
+
116
+ ```json
117
+ {
118
+ "id": "scatter_large",
119
+ "type": "ScatterL",
120
+ "row": 1,
121
+ "col": 1,
122
+ "rowspan": 3,
123
+ "config": {
124
+ "merge": false,
125
+ "startup_msg": "Loading scatter plot...",
126
+ "size": {
127
+ "width": 800,
128
+ "height": 600,
129
+ "dotsize": { "min": 2, "max": 10 },
130
+ "dotFactor": 1
131
+ },
132
+ "colourby": "Cell_Type",
133
+ "exclusion": ["Cell_ID"],
134
+ "api": {
135
+ "metadata": {
136
+ "href": "https://your-api.example.com/metadata",
137
+ "val": "scatter_meta"
138
+ },
139
+ "gene": {
140
+ "href": "https://your-api.example.com/gene",
141
+ "val": "scatter_gene",
142
+ "dep": "Gene"
143
+ }
144
+ },
145
+ "mapping": {
146
+ "api": {
147
+ "ENS (S)": "ens_iter_2",
148
+ "IM (S)": "im_iter_2",
149
+ "MES (S)": "mes_iter_2"
150
+ },
151
+ "axis": {
152
+ "x": "X_Coord",
153
+ "y": "Y_Coord",
154
+ "extra": {
155
+ "Stage": "Stage",
156
+ "MT": "MT",
157
+ "Gene": "Gene",
158
+ "Cell_Type": "Cell_Type",
159
+ "Cell_ID": "Cell_ID"
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ ```
166
+
167
+ ## See Also
168
+
169
+ - [MmTrBC Showcase](https://visualify.pharmacy.arizona.edu/MmTrBC/) -- live example using ScatterL with R-tree spatial indexing
170
+ - [Visium Component](/components/visium.md) -- spatial transcriptomics visualization with image overlay
171
+ - [Plotly Component](/components/plotly.md) -- general-purpose Plotly charts in page mode
@@ -1,57 +1,112 @@
1
- # Visium Component
2
-
3
- The Visium component is used to display the Visium data on the page.
4
-
5
- ## Properties
6
-
7
- The Visium component has the following properties:
8
-
9
- - `type` (string): The type of the component, in this case `Visium`.
10
- - `id` (string): The unique identifier of the component.
11
- - `row` (int): The row in which the component is to be displayed.
12
- - `col` (int): The column in which the component is to be displayed.
13
- - `rowspan` (int): The number of rows the component is to span.
14
- - `startup_msg` (string): The startup message of the component.
15
- - `meta` (string): The metadata API of the component.
16
- - `simpleload` (boolean): Whether to load the data simply or not.
17
- - `metaval` (string): The metadata variable name we want to use.
18
- - `gene` (string): The gene API.
19
- - `geneval` (string): The gene variable name we want to use.
20
- - `image` (string): The image API.
21
- - `cellval` (string): The celltype variable name we want to use.
22
- - `axis_mapping` (object): The axis mapping of the component.
23
- - `x: X_Coord` (string): Maps the X_Coord to the x-axis.
24
- - `y: Y_Coord` (string): Maps the Y_Coord to the y-axis.
25
- - `extra` (object): The extra properties.
26
- - Example:
27
- - `BC : BC` (string): Maps the BC to the BC property.
28
- - `SB-1 : SB-1` (string): Maps the SB-1 to the SB-1 property.
29
-
30
-
31
- ### Example
32
-
33
- ```json
34
- {
35
- "id": "visium_scatter2d",
36
- "type": "Visium",
37
- "row": 1,
38
- "col": 2,
39
- "rowspan": 3,
40
- "startup_msg": "Section",
41
- "meta": "<your-api-for-metadata>",
42
- "simpleload": false,
43
- "metaval": "visium_section",
44
- "gene": "<your-api-for-gene-data>",
45
- "geneval": "visium_gene",
46
- "image": "<your-api-for-image>",
47
- "cellval": "visium_celltype",
48
- "axis_mapping": {
49
- "x": "X_Coord",
50
- "y": "Y_Coord",
51
- "extra": {
52
- "BC": "BC",
53
- "SB-1": "SB-1",
54
- }
55
- }
56
- }
57
- ```
1
+ # Visium Component
2
+
3
+ The Visium component visualizes spatial transcriptomics data from the 10x Genomics Visium platform. It overlays gene expression data on tissue section images, allowing researchers to explore spatial patterns of gene expression. Each spot on the tissue is rendered as a colored dot, where the color represents either gene expression levels or cell type annotations.
4
+
5
+ > **Note:** Visium requires backend APIs for metadata, gene expression, and tissue images. It cannot be used as an inline docsify component. See [EsoDev](https://visualify.pharmacy.arizona.edu/EsoDev/) for a live example.
6
+
7
+ ## How It Works
8
+
9
+ The Visium component combines three data sources to produce a spatial overlay visualization:
10
+
11
+ ```
12
+ ┌─────────────────────────────────────┐
13
+ │ Tissue Section Image │
14
+ │ │
15
+ │ ●(red) ●(blue) (green)
16
+ │ ●(yellow) ●(blue) │
17
+ │ ●(green) ●(red) (blue)
18
+ │ │
19
+ │ Spots colored by gene expression │
20
+ │ or cell type annotation │
21
+ └─────────────────────────────────────┘
22
+
23
+ Data Sources:
24
+ metadata API cell annotations
25
+ gene API → expression values
26
+ image API → tissue image
27
+ ```
28
+
29
+ **Rendering flow:**
30
+
31
+ 1. The tissue section image is loaded from the image API and displayed as the background.
32
+ 2. Cell metadata (annotations, barcodes, coordinates) is fetched from the metadata API.
33
+ 3. Spots are plotted at their spatial coordinates on top of the tissue image.
34
+ 4. When a gene is selected, expression values are fetched from the gene API and used to colour the spots.
35
+ 5. Users can switch between colouring by cell type annotation or gene expression.
36
+
37
+ ## Properties
38
+
39
+ | Property | Type | Required | Description |
40
+ |----------------|----------|----------|-----------------------------------------------------------------------------|
41
+ | `type` | string | Yes | Must be `"Visium"`. |
42
+ | `id` | string | Yes | Unique identifier for the component. |
43
+ | `row` | int | Yes | Grid row position for layout. |
44
+ | `col` | int | Yes | Grid column position for layout. |
45
+ | `rowspan` | int | No | Number of rows the component spans. |
46
+ | `startup_msg` | string | No | Message displayed while the component initializes. |
47
+ | `meta` | string | Yes | URL of the metadata API endpoint. |
48
+ | `metaval` | string | Yes | Variable name used to reference the metadata. |
49
+ | `gene` | string | Yes | URL of the gene expression API endpoint. |
50
+ | `geneval` | string | Yes | Variable name used to reference the gene data. |
51
+ | `image` | string | Yes | URL of the tissue section image API endpoint. |
52
+ | `cellval` | string | Yes | Variable name used to reference cell type annotations. |
53
+ | `simpleload` | boolean | No | When `true`, loads all data at once. When `false`, uses incremental loading.|
54
+ | `axis_mapping` | object | Yes | Maps data properties to axes and extra display fields (see below). |
55
+
56
+ ### Axis Mapping Properties
57
+
58
+ | Property | Type | Description |
59
+ |-------------------|--------|----------------------------------------------------------------------|
60
+ | `axis_mapping.x` | string | Data property name mapped to the x-axis (e.g., `"X_Coord"`). |
61
+ | `axis_mapping.y` | string | Data property name mapped to the y-axis (e.g., `"Y_Coord"`). |
62
+ | `axis_mapping.extra` | object | Additional data properties to display. Key-value pairs where the key is the display label and the value is the property name in the data. |
63
+
64
+ ## Example
65
+
66
+ ```json
67
+ {
68
+ "id": "visium_scatter2d",
69
+ "type": "Visium",
70
+ "row": 1,
71
+ "col": 2,
72
+ "rowspan": 3,
73
+
74
+ // Message shown during initial load
75
+ "startup_msg": "Section",
76
+
77
+ // Metadata API: provides cell annotations and coordinates
78
+ "meta": "https://your-api.example.com/metadata",
79
+ "metaval": "visium_section",
80
+
81
+ // Gene expression API: provides per-spot expression values
82
+ "gene": "https://your-api.example.com/gene",
83
+ "geneval": "visium_gene",
84
+
85
+ // Tissue image API: serves the H&E stained tissue image
86
+ "image": "https://your-api.example.com/tissue-image",
87
+
88
+ // Cell type variable name for annotation colouring
89
+ "cellval": "visium_celltype",
90
+
91
+ // Load data incrementally (false) or all at once (true)
92
+ "simpleload": false,
93
+
94
+ // Map data properties to axes and tooltip fields
95
+ "axis_mapping": {
96
+ "x": "X_Coord",
97
+ "y": "Y_Coord",
98
+ "extra": {
99
+ "BC": "BC",
100
+ "SB-1": "SB-1"
101
+ }
102
+ }
103
+ }
104
+ ```
105
+
106
+ > **Note:** JSON does not support comments. The comments above are included for explanation only. Remove them in your actual configuration.
107
+
108
+ ## See Also
109
+
110
+ - [EsoDev Showcase](https://visualify.pharmacy.arizona.edu/EsoDev/) -- live example using the Visium component
111
+ - [ScatterL Component](/components/scatterL.md) -- high-performance scatter plot with R-tree spatial indexing
112
+ - [DotBio Component](/components/dotBio.md) -- another biology-focused visualization component