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
@@ -1,142 +1,183 @@
1
- # More components
2
-
3
- ## Markdown
4
-
5
- The Markdown component is used to render markdown content on the page.
6
-
7
-
8
-
9
- ## SearchBar
10
-
11
- The SearchBar component is used to search for a specific gene.
12
-
13
- ### Properties
14
-
15
- The SearchBar component has the following properties:
16
-
17
- - `type` (string): The type of the component, in this case `SearchBar`.
18
- - `id` (string): The unique identifier of the component.
19
- - `row` (int): The row in which the component is to be displayed.
20
- - `col` (int): The column in which the component is to be displayed.
21
- - `config` (object): The configuration of the component.
22
- - `style` (object): The style of the component.
23
- - `title` (string): The title of the component.
24
-
25
- ### config Properties
26
-
27
- The `config` object has the following properties:
28
-
29
- - `save` (boolean/String): Whether to save the search or not.
30
- - (string): The name to be saved at global data.
31
- - `source` (object): The source of the component.
32
- - `name` (string): The name of the source.
33
- - `url` (string): The URL of the source.
34
- - `responseKey` (string): The response key of the source.
35
-
36
- ### Example
37
-
38
- ```json
39
- {
40
- "id": "mmtrbc_gene",
41
- "type": "SearchBar",
42
- "title": "Search Gene",
43
- "config": {
44
- "save": true,
45
- "source": {
46
- "name": "genelist",
47
- "url": "https://visualify.pharmacy.arizona.edu/api/mmtrbc/genelist",
48
- "responseKey": "gene"
49
- }
50
- }
51
- }
52
- ```
53
-
54
- ## List
55
-
56
- The List component is used to display a list of genes.
57
-
58
- ### Properties
59
-
60
- The List component has the following properties:
61
-
62
- - `type` (string): The type of the component, in this case `List`.
63
- - `id` (string): The unique identifier of the component.
64
- - `row` (int): The row in which the component is to be displayed.
65
- - `col` (int): The column in which the component is to be displayed.
66
- - `rowspan` (int): The number of rows the component is to span.
67
- - `btn` (object): The button of the component.
68
- - `style` (object): The style of the component.
69
- - `title` (string): The title of the component.
70
-
71
- ### example
72
-
73
- ```json
74
- {
75
- "id": "genelist",
76
- "type": "List",
77
- "row": 2,
78
- "col": 1,
79
- "rowspan": 3,
80
- "btn": {
81
- "add": {
82
- "text": "Add",
83
- "show": true,
84
- "style": {
85
- "color": "white",
86
- "backgroundColor": "#FF8E8E",
87
- "fontSize": "12px",
88
- "border": "none",
89
- "cursor": "pointer"
90
- },
91
- "addfrom": "mmtrbc_gene"
92
- },
93
- "clear": {
94
- "text": "Clear",
95
- "show": true,
96
- "msg": "Successfully cleared the list",
97
- "style": {
98
- }
99
- },
100
- "remove": {
101
- "show": true,
102
- "style": {
103
- "color": "white",
104
- "backgroundColor": "#f44336",
105
- }
106
- }
107
- }
108
- }
109
- ```
110
-
111
- ## RatioBox
112
-
113
- The RatioBox component is used to display a ratio box on the page.
114
-
115
- ### Properties
116
-
117
- The RatioBox component has the following properties:
118
-
119
- - `type` (string): The type of the component, in this case `RatioBox`.
120
- - `id` (string): The unique identifier of the component.
121
- - `row` (int): The row in which the component is to be displayed.
122
- - `col` (int): The column in which the component is to be displayed.
123
- - `choice` (array): The choice of the component.
124
- - `style` (object): The style of the component.
125
- - `val` (string): Will save the choices to the name of global variable.
126
-
127
- ### Example
128
-
129
- ```json
130
- {
131
- "type": "RatioBox",
132
- "id": "chrom_colour",
133
- "row": 2,
134
- "col": 1,
135
- "choice": ["Cell Type", "Stage"],
136
- "style": {
137
- "width": "350px"
138
- },
139
- "val": "chrom_colour",
140
- "title": "Colour by"
141
- }
142
- ```
1
+ # Utility Components
2
+
3
+ These components provide UI controls and interactive elements for page mode layouts. They work alongside visualization components to create complete data exploration interfaces.
4
+
5
+ ## Overview
6
+
7
+ | Component | Purpose | Interactive |
8
+ |-----------|---------|-------------|
9
+ | SearchBar | Gene/item search with autocomplete | Yes - triggers other components |
10
+ | List | Display and manage a list of items | Yes - add/remove/clear |
11
+ | RatioBox | Radio button selector for options | Yes - stores selection globally |
12
+
13
+ ---
14
+
15
+ ## SearchBar
16
+
17
+ The SearchBar component provides a search input with autocomplete, powered by an external data source. When a user selects a result, the value can be saved to the global data store for use by other components.
18
+
19
+ ### Properties
20
+
21
+ | Property | Type | Required | Description |
22
+ |----------|------|----------|-------------|
23
+ | `type` | string | Yes | Must be `"SearchBar"`. |
24
+ | `id` | string | Yes | Unique identifier for the component. |
25
+ | `row` | int | No | The row in which the component is displayed. |
26
+ | `col` | int | No | The column in which the component is displayed. |
27
+ | `title` | string | No | Label displayed above the search input. |
28
+ | `config` | object | Yes | Configuration for data source and behavior. See below. |
29
+ | `style` | object | No | CSS styles applied to the component container. |
30
+
31
+ #### Config Properties
32
+
33
+ | Property | Type | Description |
34
+ |----------|------|-------------|
35
+ | `save` | boolean / string | If `true`, saves the selected value to global data using the component `id` as the key. If a string, uses that string as the global data key instead. |
36
+ | `source` | object | Defines the autocomplete data source. |
37
+ | `source.name` | string | Name identifier for the data source. |
38
+ | `source.url` | string | API endpoint that returns the list of searchable items. |
39
+ | `source.responseKey` | string | Key in the API response that contains the list of items. |
40
+
41
+ ### Example
42
+
43
+ ```json
44
+ {
45
+ "id": "mmtrbc_gene",
46
+ "type": "SearchBar",
47
+ "title": "Search Gene",
48
+ "config": {
49
+ "save": true,
50
+ "source": {
51
+ "name": "genelist",
52
+ "url": "https://visualify.pharmacy.arizona.edu/api/mmtrbc/genelist",
53
+ "responseKey": "gene"
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ ### Interaction with Other Components
60
+
61
+ When `save` is enabled, the selected search result is stored in the global data store. Other components (such as charts or tables) can reference this value to filter or update their displayed data. For example, a SearchBar with `id: "mmtrbc_gene"` makes the selected gene available to any component that reads from the `mmtrbc_gene` global key.
62
+
63
+ ---
64
+
65
+ ## List
66
+
67
+ The List component displays a managed list of items. Users can add items (typically from a SearchBar), remove individual items, or clear the entire list. It is commonly used to build a working set of genes or other entities for downstream analysis.
68
+
69
+ ### Properties
70
+
71
+ | Property | Type | Required | Description |
72
+ |----------|------|----------|-------------|
73
+ | `type` | string | Yes | Must be `"List"`. |
74
+ | `id` | string | Yes | Unique identifier for the component. |
75
+ | `row` | int | No | The row in which the component is displayed. |
76
+ | `col` | int | No | The column in which the component is displayed. |
77
+ | `rowspan` | int | No | The number of rows the component spans. |
78
+ | `title` | string | No | Label displayed above the list. |
79
+ | `btn` | object | No | Configuration for action buttons (add, remove, clear). See below. |
80
+ | `style` | object | No | CSS styles applied to the component container. |
81
+
82
+ #### Button Properties
83
+
84
+ Each button (`add`, `remove`, `clear`) accepts the following:
85
+
86
+ | Property | Type | Description |
87
+ |----------|------|-------------|
88
+ | `text` | string | Label displayed on the button. |
89
+ | `show` | boolean | Whether the button is visible. |
90
+ | `style` | object | CSS styles for the button. |
91
+ | `msg` | string | Confirmation or success message (used by `clear`). |
92
+ | `addfrom` | string | ID of the SearchBar component to pull values from (used by `add`). |
93
+
94
+ ### Example
95
+
96
+ ```json
97
+ {
98
+ "id": "genelist",
99
+ "type": "List",
100
+ "row": 2,
101
+ "col": 1,
102
+ "rowspan": 3,
103
+ "btn": {
104
+ "add": {
105
+ "text": "Add",
106
+ "show": true,
107
+ "style": {
108
+ "color": "white",
109
+ "backgroundColor": "#FF8E8E",
110
+ "fontSize": "12px",
111
+ "border": "none",
112
+ "cursor": "pointer"
113
+ },
114
+ "addfrom": "mmtrbc_gene"
115
+ },
116
+ "clear": {
117
+ "text": "Clear",
118
+ "show": true,
119
+ "msg": "Successfully cleared the list",
120
+ "style": {}
121
+ },
122
+ "remove": {
123
+ "show": true,
124
+ "style": {
125
+ "color": "white",
126
+ "backgroundColor": "#f44336"
127
+ }
128
+ }
129
+ }
130
+ }
131
+ ```
132
+
133
+ ### Interaction with Other Components
134
+
135
+ The List component connects to a SearchBar through the `addfrom` property on the `add` button. In the example above, `"addfrom": "mmtrbc_gene"` pulls the currently selected value from the SearchBar with `id: "mmtrbc_gene"`. The list contents can then be consumed by visualization components that need a set of items to display.
136
+
137
+ ---
138
+
139
+ ## RatioBox
140
+
141
+ The RatioBox component renders a group of radio buttons, allowing the user to select one option from a predefined set. The selected value is stored in the global data store so that other components can react to the user's choice.
142
+
143
+ ### Properties
144
+
145
+ | Property | Type | Required | Description |
146
+ |----------|------|----------|-------------|
147
+ | `type` | string | Yes | Must be `"RatioBox"`. |
148
+ | `id` | string | Yes | Unique identifier for the component. |
149
+ | `row` | int | No | The row in which the component is displayed. |
150
+ | `col` | int | No | The column in which the component is displayed. |
151
+ | `title` | string | No | Label displayed above the radio buttons. |
152
+ | `choice` | array | Yes | Array of strings representing the available options. |
153
+ | `val` | string | Yes | Name of the global variable where the selected choice is stored. |
154
+ | `style` | object | No | CSS styles applied to the component container. |
155
+
156
+ ### Example
157
+
158
+ ```json
159
+ {
160
+ "type": "RatioBox",
161
+ "id": "chrom_colour",
162
+ "row": 2,
163
+ "col": 1,
164
+ "choice": ["Cell Type", "Stage"],
165
+ "style": {
166
+ "width": "350px"
167
+ },
168
+ "val": "chrom_colour",
169
+ "title": "Colour by"
170
+ }
171
+ ```
172
+
173
+ ### Interaction with Other Components
174
+
175
+ The selected option is saved to the global variable specified by `val`. In the example above, choosing "Cell Type" or "Stage" updates the `chrom_colour` global variable. Visualization components (such as scatter plots or UMAP charts) can reference this variable to change their color mapping dynamically.
176
+
177
+ ---
178
+
179
+ ## See Also
180
+
181
+ - [HTML Component](components/html.md) -- Render raw HTML content in page layouts.
182
+ - [Markdown Component](components/markdown.md) -- Render Markdown content in page layouts.
183
+ - [Page Mode Overview](bindData/bindPage.md) -- How components are arranged in page layouts.
@@ -1,62 +1,132 @@
1
- # Plotly Component
2
-
3
- The Plotly component is used to display a plotly plot on the page.
4
-
5
- ## Properties
6
-
7
- The Plotly component has the following properties:
8
-
9
- - `type` (string): The type of the component, in this case `Plotly`.
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
- - `colspan` (int): The number of columns the component is to span.
15
- - `settings` (object): The settings of the component.
16
- - `parser` (object): The parser of the component.
17
- - `trigger` (object): The trigger of the component.
18
-
19
- ### settings Properties
20
-
21
- The `settings` object has the following properties:
22
-
23
- - `preset` (string): The preset of the component.
24
- - `ignoreEmptyData` (boolean): Whether to ignore empty data or not.
25
-
26
- ### parser Properties
27
-
28
- The `parser` object has the following properties:
29
-
30
- - `sources` (array): The sources of the component.
31
- - `name` (string): The name of the trigger.
32
- - `url` (string): The URL of the data.
33
- - `responseKey` (string): The response key of the component.
34
- - `exclude` (array): The data to be excluded.
35
- - `type` (string): The type of the component.
36
-
37
- ### Example
38
-
39
- ```json
40
- {
41
- "id": "mmtrbc_tsne",
42
- "type": "Plotly",
43
- "col": 2,
44
- "rowspan": 3,
45
- "settings": {
46
- "preset": "mmtrbc",
47
- "ignoreEmptyData": true
48
- },
49
- "parser": {
50
- "sources": [{
51
- "name": "metadata",
52
- "url": "<your-backend-url>"
53
- }, {
54
- "name": "gene",
55
- "url": "<your-backend-url>",
56
- "responseKey": "gene"
57
- }],
58
- "exclude": ["BC-Mes", "BC-NE", "BC-Im"],
59
- "type": "scatter"
60
- }
61
- }
62
- ```
1
+ # Plotly Component
2
+
3
+ The Plotly component integrates Plotly.js for advanced interactive visualizations. It supports scatter plots, violin plots, and other Plotly chart types with dynamic data fetching from backend APIs. Plotly provides additional interactivity like zoom, pan, hover tooltips, and data selection that complement the ECharts-based visualizations.
4
+
5
+ > **Note:** This component requires a backend API to supply data. A live demo is not available in this documentation.
6
+
7
+ ## How It Works
8
+
9
+ The Plotly component uses a parser-based data pipeline. It fetches data from one or more backend sources, transforms the responses based on the configured parser type, and renders the result as an interactive Plotly chart.
10
+
11
+ ```
12
+ +-----------+ +------------+ +-----------+ +----------------+
13
+ | Backend | ---> | Parser | ---> | Plotly | ---> | Interactive |
14
+ | API(s) | | (transform)| | Render | | Chart Output |
15
+ +-----------+ +------------+ +-----------+ +----------------+
16
+ | |
17
+ | sources[] | type: "scatter" | "violin" | ...
18
+ | responseKey | exclude: [...]
19
+ +------------------+
20
+
21
+ Trigger (optional)
22
+ +------------+ Listens for events from other components
23
+ | Event | ---> to refresh or filter the chart dynamically
24
+ +------------+
25
+ ```
26
+
27
+ When multiple sources are defined, the parser merges them before rendering. For example, a scatter plot may combine cell metadata (coordinates, cell types) with gene expression values (color overlay).
28
+
29
+ ## Properties
30
+
31
+ | Property | Type | Required | Description |
32
+ |---|---|---|---|
33
+ | `type` | string | Yes | Must be set to `"Plotly"`. |
34
+ | `id` | string | Yes | A unique identifier for this component instance. Used for cross-component references and event targeting. |
35
+ | `row` | int | No | The grid row position where the component is placed (1-based). |
36
+ | `col` | int | No | The grid column position where the component is placed (1-based). |
37
+ | `rowspan` | int | No | The number of grid rows this component spans. Defaults to 1. |
38
+ | `colspan` | int | No | The number of grid columns this component spans. Defaults to 1. |
39
+ | `settings` | object | No | Display and behavior settings. See the **Settings** table below. |
40
+ | `parser` | object | Yes | Defines data sources, transformations, and chart type. See the **Parser** table below. |
41
+ | `trigger` | object | No | Configures event listeners so this component reacts to changes in other components (e.g., gene selection). |
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
+
50
+ ### Parser
51
+
52
+ | Property | Type | Required | Description |
53
+ |---|---|---|---|
54
+ | `sources` | array | Yes | An array of data source objects. Each source defines a backend endpoint to fetch data from. |
55
+ | `sources[].name` | string | Yes | A label identifying this data source (e.g., `"metadata"`, `"gene"`). Used internally for data merging. |
56
+ | `sources[].url` | string | Yes | The backend URL that returns the data for this source. |
57
+ | `sources[].responseKey` | string | No | A dot-path key to extract a specific field from the API response. For example, `"gene"` extracts `response.gene`. |
58
+ | `exclude` | array | No | An array of category names to exclude from the rendered chart. Useful for filtering out unwanted groups. |
59
+ | `type` | string | Yes | The Plotly chart type to render. Supported values include `"scatter"` and `"violin"`. |
60
+
61
+ ## Example
62
+
63
+ ### Scatter Plot (t-SNE / UMAP)
64
+
65
+ ```json
66
+ {
67
+ "id": "mmtrbc_tsne",
68
+ "type": "Plotly",
69
+ "col": 2,
70
+ "rowspan": 3,
71
+ "settings": {
72
+ "preset": "mmtrbc",
73
+ "ignoreEmptyData": true
74
+ },
75
+ "parser": {
76
+ "sources": [
77
+ {
78
+ // Cell-type metadata with x/y coordinates
79
+ "name": "metadata",
80
+ "url": "<your-backend-url>/api/metadata"
81
+ },
82
+ {
83
+ // Gene expression values overlaid as color
84
+ "name": "gene",
85
+ "url": "<your-backend-url>/api/gene",
86
+ "responseKey": "gene"
87
+ }
88
+ ],
89
+ // Exclude specific cell-type categories from the plot
90
+ "exclude": ["BC-Mes", "BC-NE", "BC-Im"],
91
+ "type": "scatter"
92
+ }
93
+ }
94
+ ```
95
+
96
+ ### Violin Plot
97
+
98
+ ```json
99
+ {
100
+ "id": "mmtrbc_violin",
101
+ "type": "Plotly",
102
+ "col": 1,
103
+ "rowspan": 3,
104
+ "settings": {
105
+ "preset": "mmtrbc",
106
+ "ignoreEmptyData": true
107
+ },
108
+ "parser": {
109
+ "sources": [
110
+ {
111
+ "name": "metadata",
112
+ "url": "<your-backend-url>/api/metadata"
113
+ },
114
+ {
115
+ "name": "gene",
116
+ "url": "<your-backend-url>/api/gene",
117
+ "responseKey": "gene"
118
+ }
119
+ ],
120
+ "exclude": ["BC-Mes", "BC-NE"],
121
+ // Renders a violin plot showing expression distribution per cell type
122
+ "type": "violin"
123
+ }
124
+ }
125
+ ```
126
+
127
+ ## See Also
128
+
129
+ - [DotBio Component](/components/dotBio.md) - Dot plot for gene expression across cell types
130
+ - [Echart Component](/components/echart.md) - General-purpose chart component using ECharts
131
+ - [Configuration](/configuration.md) - How to set up page mode
132
+ - [MmTrBC Showcase](https://visualify.pharmacy.arizona.edu/MmTrBC/) - Live project using Plotly scatter and violin plots