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.
- package/.claude/mem/TIMELINE.md +36 -0
- package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-external-script-solution.md +24 -0
- package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-session-summary.md +43 -0
- package/.claude/mem/notes/2026-02-11-cli-fix-editor-command-alias.md +26 -0
- package/.claude/mem/notes/2026-02-11-phase-3-developer-experience-completed.md +51 -0
- package/.claude/mem/notes/2026-02-11-phase-4-web-workers-implementation-complete.md +59 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-2-3d-visualization-complete.md +50 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-2-committed-ready-for-phase-3.md +33 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-3-complete-developer-experience.md +52 -0
- package/.claude/mem/notes/2026-02-11-visualify-repository-cleanup-complete.md +28 -0
- package/.claude/mem/notes/2026-02-18-codebase-cleanup-docsify-plugin-documentation.md +37 -0
- package/.claude/mem/notes/2026-02-19-css-grid-layout-fix-displaycontents-on-vcontroller.md +18 -0
- package/.claude/mem/notes/2026-02-19-docsify-plugin-fixes-latex-and-visualify-code-bloc.md +26 -0
- package/.claude/mem/notes/2026-02-19-page-mode-docs-update-decisions.md +23 -0
- package/.claude/mem/notes/2026-02-19-react-context-infinite-re-render-loop-fix-pattern.md +31 -0
- package/.claude/mem/notes/2026-02-19-version-300-bump-and-build-fixes.md +32 -0
- package/.claude/mem/notes/2026-02-19-visualify-build-deployment-architecture-bug-fixes.md +25 -0
- package/.claude/mem/notes/2026-02-19-visualify-dist-iife-self-contained-build-config.md +30 -0
- package/.claude/mem/notes/2026-02-19-visualify-infinite-loop-i18n-fixes.md +31 -0
- package/.claude/mem/notes/2026-02-19-visualify-v3-bundle-splitting-docs-restructuring.md +32 -0
- package/.claude/mem/notes/2026-02-20-bundle-externalization-final-architecture.md +29 -0
- package/.claude/mem/notes/2026-02-20-chromium-page-fix-unstable-keys-and-double-event-b.md +27 -0
- package/.claude/mem/notes/2026-02-20-console-cleanup-bundle-optimization-commit.md +20 -0
- package/.claude/mem/notes/2026-02-20-dotbio-dot-plot-fix-useeffect-dependency.md +21 -0
- package/.claude/mem/notes/2026-02-20-public-folder-cleanup-and-readme-rewrite.md +25 -0
- package/.claude/mem/notes/2026-02-20-v300-release-and-beta-channel-strategy.md +29 -0
- package/.claude/mem/notes/2026-02-20-visium-background-image-unknown-legend-fix.md +19 -0
- package/.claude/mem/notes/2026-02-20-visualify-cdn-loader-bundle-externalization.md +34 -0
- package/.claude/mem/sessions/session-2026-02-20-031524.md +54 -0
- package/.claude/settings.local.json +21 -0
- package/.github/workflows/static.yml.bak +51 -51
- package/.sisyphus/boulder.json +65 -0
- package/.sisyphus/plans/phase-4-advanced-optimizations.md +217 -0
- package/LICENSE +674 -674
- package/README.md +94 -59
- package/config-overrides.js +31 -31
- package/dist/stats.html +4949 -0
- package/dist/visualify-3d.esm.js +1 -0
- package/dist/visualify-3d.js +1 -0
- package/dist/visualify-core.esm.js +1 -0
- package/dist/visualify-core.js +1 -0
- package/dist/visualify-docs.esm.js +1 -0
- package/dist/visualify-docs.js +1 -0
- package/dist/visualify-loader.js +1 -0
- package/dist/visualify-pages.esm.js +1 -0
- package/dist/visualify-pages.js +1 -0
- package/dist/visualify-portal.esm.js +1 -0
- package/dist/visualify-portal.js +1 -0
- package/dist/visualify-shared.js +26571 -0
- package/dist/visualify.js +1 -188
- package/docs/CHANGELOG.md +148 -0
- package/docs/cli/commands.md +513 -0
- package/docs/configuration/visualify-json.md +474 -0
- package/docs/docs/3d-visualization.md +374 -0
- package/docs/docs/CLI.md +303 -34
- package/docs/docs/README.md +65 -65
- package/docs/docs/Rechart/bar.md +190 -190
- package/docs/docs/Rechart/funnel.md +241 -241
- package/docs/docs/Rechart/line.md +355 -355
- package/docs/docs/Rechart/pie.md +225 -225
- package/docs/docs/Rechart/radar.md +253 -253
- package/docs/docs/Rechart/scatter.md +298 -298
- package/docs/docs/_404.md +51 -51
- package/docs/docs/_coverpage.md +11 -11
- package/docs/docs/_sidebar.md +54 -44
- package/docs/docs/components/dotBio.md +87 -34
- package/docs/docs/components/echart.md +171 -82
- package/docs/docs/components/html.md +61 -34
- package/docs/docs/components/macaron.md +156 -145
- package/docs/docs/components/markdown.md +42 -0
- package/docs/docs/components/more.md +183 -142
- package/docs/docs/components/plotly.md +132 -62
- package/docs/docs/components/scatterL.md +171 -70
- package/docs/docs/components/visium.md +112 -57
- package/docs/docs/configuration.md +121 -121
- package/docs/docs/deploy.md +31 -31
- package/docs/docs/docsify-plugin.md +655 -0
- package/docs/docs/hmr.md +165 -0
- package/docs/docs/i18n.md +332 -0
- package/docs/docs/log.md +30 -9
- package/docs/docs/more-pages.md +23 -23
- package/docs/docs/quickstart.md +148 -124
- package/docs/docs/rechart-attributes.md +74 -74
- package/docs/docs/rechart-basic-usage.md +160 -162
- package/docs/docs/theme.md +5 -5
- package/docs/docs/typescript.md +306 -0
- package/docs/docs/visual-editor.md +359 -0
- package/docs/index.html +85 -71
- package/docs/manifest.json +23 -23
- package/docs/migration/v3-migration.md +392 -0
- package/docs/static/css/fluff-stuff.css +169 -169
- package/docs/static/css/font-awesome.min.css +4 -4
- package/docs/static/css/visualify.css +6 -25
- package/docs/static/js/3d-viz-examples.js +181 -0
- package/docs/static/js/configuration.js +630 -448
- package/docs/static/js/visualify.js +1 -188
- package/package.json +106 -84
- package/rollup.config.mjs +766 -76
- package/src/_css/404.css +115 -115
- package/src/_css/App.css +37 -37
- package/src/_css/autoSuggestion.css +26 -26
- package/src/_css/circular-progress.css +32 -32
- package/src/_css/index.css +36 -36
- package/src/_css/modern.css +350 -25
- package/src/_media/corner.svg +8 -8
- package/src/_media/download.svg +3 -3
- package/src/_media/logo.svg +14 -14
- package/src/_test/App.test.js +15 -15
- package/src/_utils/reportWebVitals.js +13 -13
- package/src/a11y/README.md +177 -0
- package/src/a11y/aria-labels.js +339 -0
- package/src/a11y/color-contrast.js +535 -0
- package/src/a11y/index.js +197 -0
- package/src/a11y/keyboard-nav.js +523 -0
- package/src/a11y/styles.css +165 -0
- package/src/cli/commands/dev.js +214 -0
- package/src/cli/commands/docs.js +521 -0
- package/src/cli/commands/edit.js +379 -0
- package/src/cli/commands/init.js +213 -0
- package/src/cli/commands/portal.js +236 -0
- package/src/cli/dev-server.js +530 -0
- package/src/cli/hmr.js +456 -0
- package/src/cli/index.js +180 -0
- package/src/cli/utils/config.js +207 -0
- package/src/cli/utils/logger.js +241 -0
- package/src/config/defaults.ts +122 -0
- package/src/config/index.ts +72 -0
- package/src/config/loader.ts +478 -0
- package/src/config/schema.ts +227 -0
- package/src/config/validator.ts +337 -0
- package/src/core/appContext.js +34 -27
- package/src/core/components/Bar.js +383 -0
- package/src/core/components/Bar3D.js +473 -0
- package/src/core/components/LargeDatasetChart.js +296 -0
- package/src/core/components/Line3D.js +310 -0
- package/src/core/components/Scatter.js +392 -188
- package/src/core/components/Scatter3D.js +455 -0
- package/src/core/components/ScatterBio.js +601 -572
- package/src/core/components/Surface3D.js +326 -0
- package/src/core/components/ThreeCustom.js +648 -0
- package/src/core/components/ThreeScene.js +459 -0
- package/src/core/components/VisiumPlot.js +191 -165
- package/src/core/components/browser.js +42 -42
- package/src/core/components/dotplot.js +413 -413
- package/src/core/components/html.js +29 -29
- package/src/core/components/list.js +178 -178
- package/src/core/components/macaron.js +206 -201
- package/src/core/components/markdown.js +56 -56
- package/src/core/components/parser.scatterBio.js +582 -587
- package/src/core/components/ratio.js +82 -80
- package/src/core/components/scatterL.js +206 -173
- package/src/core/components/searchbar.js +156 -131
- package/src/core/components/selection.js +310 -193
- package/src/core/components/timeline.js +236 -281
- package/src/core/components/visium.js +114 -97
- package/src/core/data-processor.js +413 -0
- package/src/core/fetch/condfetch.js +82 -82
- package/src/core/fetch/fetch.js +92 -92
- package/src/core/fetch/json.js +29 -29
- package/src/core/fetch/vfetch.js +42 -42
- package/src/core/hmr-client.js +724 -0
- package/src/core/liveEditor.js +44 -44
- package/src/core/modules/codeEditorWithPreview.js +104 -104
- package/src/core/modules/echarts/common.js +20 -20
- package/src/core/modules/echarts/gl.js +228 -0
- package/src/core/modules/echarts/presetHandler.js +41 -41
- package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
- package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
- package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
- package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
- package/src/core/modules/echarts.js +70 -71
- package/src/core/modules/echartsUtils.js +43 -43
- package/src/core/modules/echartswitcher.js +227 -152
- package/src/core/modules/replotly/presetHandler.js +24 -24
- package/src/core/modules/replotly/presets/minimum.js +18 -18
- package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
- package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
- package/src/core/modules/replotly.js +74 -71
- package/src/core/modules/threejs/Camera.js +373 -0
- package/src/core/modules/threejs/Lighting.js +459 -0
- package/src/core/modules/threejs/Renderer.js +364 -0
- package/src/core/modules/threejs/Scene.js +266 -0
- package/src/core/modules/threejs/index.js +155 -0
- package/src/core/pages/404.js +50 -50
- package/src/core/pages/error.js +27 -27
- package/src/core/pages/jsonPage.js +62 -62
- package/src/core/pages/loading.js +44 -44
- package/src/core/parser/echart.data.js +204 -183
- package/src/core/parser/echart.features.js +125 -125
- package/src/core/parser/echart.general.js +147 -147
- package/src/core/parser/echart.hilbert.js +57 -57
- package/src/core/parser/echart.parser.js +210 -210
- package/src/core/parser/echart.series.js +67 -67
- package/src/core/parser/echart.types.js +76 -76
- package/src/core/parser/plotly.config.js +10 -10
- package/src/core/parser/plotly.data.js +132 -132
- package/src/core/parser/plotly.layout.js +9 -9
- package/src/core/parser/plotly.violin.js +18 -18
- package/src/core/recharts.js +361 -62
- package/src/core/router/alias.js +49 -49
- package/src/core/router/jsonRouter.js +31 -31
- package/src/core/themes/modern.js +32 -32
- package/src/core/themes/themeSelector.js +33 -33
- package/src/core/visualify.js +213 -47
- package/src/core/widgets/circularProgress.js +23 -23
- package/src/core/widgets/controller.js +116 -83
- package/src/core/widgets/errorBoundary.js +36 -36
- package/src/core/widgets/footer.js +185 -177
- package/src/core/widgets/header.js +238 -234
- package/src/core/widgets/layout/Grid.js +31 -31
- package/src/core/widgets/layout.js +36 -36
- package/src/core/widgets/mapping.js +56 -42
- package/src/core/workers/data-worker.js +349 -0
- package/src/core/workers/worker-pool.js +396 -0
- package/src/docsify/bundle.js +215 -0
- package/src/docsify/markdown.js +271 -0
- package/src/docsify/plugin.js +268 -0
- package/src/editor/README.md +172 -0
- package/src/editor/components/ChartBuilder.jsx +341 -0
- package/src/editor/components/ChartTypeSidebar.jsx +91 -0
- package/src/editor/components/Editor.jsx +367 -0
- package/src/editor/components/Preview.jsx +446 -0
- package/src/editor/components/PropertyPanel.jsx +468 -0
- package/src/editor/components/StatusBar.jsx +85 -0
- package/src/editor/context/EditorContext.js +248 -0
- package/src/editor/hooks/useDebounce.js +32 -0
- package/src/editor/index.js +315 -0
- package/src/editor/styles/editor.css +637 -0
- package/src/editor/utils/chartValidator.js +263 -0
- package/src/entries/charts3d.js +70 -0
- package/src/entries/core.js +78 -0
- package/src/entries/docs.js +154 -0
- package/src/entries/pages.js +93 -0
- package/src/entries/portal.js +204 -0
- package/src/entries/shared.js +50 -0
- package/src/i18n/formatters.js +455 -0
- package/src/i18n/index.js +169 -0
- package/src/i18n/locales/ar.json +137 -0
- package/src/i18n/locales/de.json +137 -0
- package/src/i18n/locales/en.json +137 -0
- package/src/i18n/locales/es.json +137 -0
- package/src/i18n/locales/he.json +137 -0
- package/src/i18n/locales/zh.json +137 -0
- package/src/i18n/rtl.css +183 -0
- package/src/index.js +82 -62
- package/src/loader.js +103 -0
- package/src/setupTests.js +5 -5
- package/tsconfig.json +51 -0
- package/types/charts.d.ts +569 -0
- package/types/components.d.ts +441 -0
- package/types/config.d.ts +199 -0
- package/types/index.d.ts +353 -0
|
@@ -1,34 +1,61 @@
|
|
|
1
|
-
# HTML Component
|
|
2
|
-
|
|
3
|
-
The HTML component
|
|
4
|
-
|
|
5
|
-
## Properties
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
1
|
+
# HTML Component
|
|
2
|
+
|
|
3
|
+
The HTML component renders raw HTML content within a page mode layout. Use it for custom content like images, iframes, embedded widgets, or any HTML that doesn't fit into other component types.
|
|
4
|
+
|
|
5
|
+
## Properties
|
|
6
|
+
|
|
7
|
+
| Property | Type | Required | Description |
|
|
8
|
+
|----------|------|----------|-------------|
|
|
9
|
+
| `type` | string | Yes | Must be `"HTML"`. |
|
|
10
|
+
| `id` | string | No | Unique identifier for the component. |
|
|
11
|
+
| `row` | int | Yes | The row in which the component is displayed. |
|
|
12
|
+
| `col` | int | Yes | The column in which the component is displayed. |
|
|
13
|
+
| `colspan` | int | No | The number of columns the component spans. |
|
|
14
|
+
| `html` | string | Yes | The HTML content to render. |
|
|
15
|
+
|
|
16
|
+
## Examples
|
|
17
|
+
|
|
18
|
+
### Displaying an Image
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"type": "HTML",
|
|
23
|
+
"row": 1,
|
|
24
|
+
"col": 2,
|
|
25
|
+
"colspan": 3,
|
|
26
|
+
"html": "<img style='width: 100%' src='./mainpage.png' alt='Abstract'>"
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Embedding an Iframe
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"type": "HTML",
|
|
35
|
+
"row": 2,
|
|
36
|
+
"col": 1,
|
|
37
|
+
"colspan": 4,
|
|
38
|
+
"html": "<iframe src='https://example.com/embed' style='width: 100%; height: 400px; border: none;'></iframe>"
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Styled Content Block
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"type": "HTML",
|
|
47
|
+
"id": "welcome-banner",
|
|
48
|
+
"row": 1,
|
|
49
|
+
"col": 1,
|
|
50
|
+
"colspan": 4,
|
|
51
|
+
"html": "<div style='padding: 20px; background: #f0f4f8; border-radius: 8px;'><h2>Welcome</h2><p>This dashboard displays gene expression data.</p></div>"
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Future Work
|
|
56
|
+
|
|
57
|
+
The following properties are planned for future releases:
|
|
58
|
+
|
|
59
|
+
- `script` (string) -- Inline JavaScript to execute within the component context.
|
|
60
|
+
- `style` (string) -- CSS styles to apply to the component container.
|
|
61
|
+
- Support for fetching HTML content from an external API endpoint.
|
|
@@ -1,145 +1,156 @@
|
|
|
1
|
-
# Macaron Component
|
|
2
|
-
|
|
3
|
-
The Macaron component
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
1
|
+
# Macaron Component
|
|
2
|
+
|
|
3
|
+
The Macaron component renders an interactive **graph visualization** showing relationships between nodes. It's ideal for displaying hierarchical data, network graphs, and taxonomy trees with drag-and-drop interactivity.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Interactive node selection with click events
|
|
8
|
+
- Drag-and-drop repositioning of nodes
|
|
9
|
+
- Configurable node sizes based on data values
|
|
10
|
+
- Category-based coloring
|
|
11
|
+
- Hierarchical edge relationships
|
|
12
|
+
|
|
13
|
+
## Architecture
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
┌─────────────────────────────────────────┐
|
|
17
|
+
│ Macaron Graph │
|
|
18
|
+
│ │
|
|
19
|
+
│ ┌───────┐ │
|
|
20
|
+
│ │ Root │──────────┐ │
|
|
21
|
+
│ │ Node │ │ │
|
|
22
|
+
│ └───┬───┘ ┌────┴────┐ │
|
|
23
|
+
│ │ │ Child B │ │
|
|
24
|
+
│ ┌────┴────┐ └────┬────┘ │
|
|
25
|
+
│ │ Child A │ │ │
|
|
26
|
+
│ └────┬────┘ ┌────┴────┐ │
|
|
27
|
+
│ │ │ Leaf D │ │
|
|
28
|
+
│ ┌────┴────┐ └─────────┘ │
|
|
29
|
+
│ │ Leaf C │ │
|
|
30
|
+
│ └─────────┘ │
|
|
31
|
+
│ │
|
|
32
|
+
│ Nodes: sized by value, colored by │
|
|
33
|
+
│ category, draggable, selectable │
|
|
34
|
+
└─────────────────────────────────────────┘
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Properties
|
|
38
|
+
|
|
39
|
+
| Property | Type | Required | Description |
|
|
40
|
+
|----------|------|----------|-------------|
|
|
41
|
+
| `type` | string | Yes | Must be `"Macaron"` |
|
|
42
|
+
| `id` | string | Yes | Unique identifier for the component |
|
|
43
|
+
| `title` | string | No | Title displayed above the graph |
|
|
44
|
+
| `row` | int | No | Grid row position |
|
|
45
|
+
| `col` | int | No | Grid column position |
|
|
46
|
+
| `style` | object | No | CSS styles (height, width, font, border) |
|
|
47
|
+
| `config` | object | Yes | Graph configuration (see below) |
|
|
48
|
+
| `data` | object | Yes | Graph data: nodes, edges, categories |
|
|
49
|
+
|
|
50
|
+
### config Properties
|
|
51
|
+
|
|
52
|
+
| Property | Type | Default | Description |
|
|
53
|
+
|----------|------|---------|-------------|
|
|
54
|
+
| `animation` | boolean | `true` | Enable/disable animation |
|
|
55
|
+
| `draggable` | boolean | `false` | Allow drag-and-drop of nodes |
|
|
56
|
+
| `height` | string | `"100%"` | Graph height |
|
|
57
|
+
| `unclickable` | array | `[]` | Node names that cannot be clicked |
|
|
58
|
+
| `symbolSize` | string | `"value"` | Size basis: `"value"` for data-driven |
|
|
59
|
+
| `color.selected` | string | - | Color for selected nodes |
|
|
60
|
+
| `color.unselectable` | string | - | Color for unclickable nodes |
|
|
61
|
+
|
|
62
|
+
### data Properties
|
|
63
|
+
|
|
64
|
+
| Property | Type | Description |
|
|
65
|
+
|----------|------|-------------|
|
|
66
|
+
| `nodes` | array | Array of `{ name, category, value }` objects |
|
|
67
|
+
| `edges` | array | Array of `{ source, target, level }` objects |
|
|
68
|
+
| `categories` | array | Array of `{ name }` objects for node coloring |
|
|
69
|
+
|
|
70
|
+
## Example
|
|
71
|
+
|
|
72
|
+
### Cell Type Hierarchy
|
|
73
|
+
|
|
74
|
+
This example shows a biological cell type taxonomy tree:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"id": "celltype",
|
|
79
|
+
"type": "Macaron",
|
|
80
|
+
"title": "Select Cell Type",
|
|
81
|
+
"row": 1,
|
|
82
|
+
"col": 1,
|
|
83
|
+
"style": {
|
|
84
|
+
"height": "350px",
|
|
85
|
+
"width": "350px"
|
|
86
|
+
},
|
|
87
|
+
"data": {
|
|
88
|
+
"nodes": [
|
|
89
|
+
{ "name": "Esophagus", "category": 1, "value": 216229 },
|
|
90
|
+
{ "name": "Epithelium", "category": 2, "value": 108800 },
|
|
91
|
+
{ "name": "Stroma", "category": 2, "value": 107429 },
|
|
92
|
+
{ "name": "EPI (E)", "category": 3, "value": 97799 },
|
|
93
|
+
{ "name": "ST (E)", "category": 3, "value": 1760 },
|
|
94
|
+
{ "name": "IM (E)", "category": 3, "value": 5200 },
|
|
95
|
+
{ "name": "MES (S)", "category": 3, "value": 45000 },
|
|
96
|
+
{ "name": "ENS (S)", "category": 3, "value": 32000 },
|
|
97
|
+
{ "name": "ENDO (S)", "category": 3, "value": 30429 }
|
|
98
|
+
],
|
|
99
|
+
"edges": [
|
|
100
|
+
{ "source": "Esophagus", "target": "Epithelium", "level": 1 },
|
|
101
|
+
{ "source": "Esophagus", "target": "Stroma", "level": 1 },
|
|
102
|
+
{ "source": "Epithelium", "target": "EPI (E)", "level": 2 },
|
|
103
|
+
{ "source": "Epithelium", "target": "ST (E)", "level": 2 },
|
|
104
|
+
{ "source": "Epithelium", "target": "IM (E)", "level": 2 },
|
|
105
|
+
{ "source": "Stroma", "target": "MES (S)", "level": 2 },
|
|
106
|
+
{ "source": "Stroma", "target": "ENS (S)", "level": 2 },
|
|
107
|
+
{ "source": "Stroma", "target": "ENDO (S)", "level": 2 }
|
|
108
|
+
],
|
|
109
|
+
"categories": [
|
|
110
|
+
{ "name": "Root" },
|
|
111
|
+
{ "name": "Tissue" },
|
|
112
|
+
{ "name": "Cell Type" }
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"config": {
|
|
116
|
+
"animation": false,
|
|
117
|
+
"draggable": true,
|
|
118
|
+
"height": "88%",
|
|
119
|
+
"unclickable": ["Esophagus"],
|
|
120
|
+
"symbolSize": "value",
|
|
121
|
+
"color": {
|
|
122
|
+
"selected": "skyblue",
|
|
123
|
+
"unselectable": "black"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### How Selection Works
|
|
130
|
+
|
|
131
|
+
When a user clicks a node in the Macaron graph:
|
|
132
|
+
|
|
133
|
+
1. The node becomes **highlighted** with the `selected` color
|
|
134
|
+
2. The selection is stored in the global state under the component's `id`
|
|
135
|
+
3. Other components (e.g., Echart, ScatterL) can **trigger** on this selection to update their data
|
|
136
|
+
4. `unclickable` nodes are displayed with the `unselectable` color and do not respond to clicks
|
|
137
|
+
|
|
138
|
+
This creates an interactive filtering workflow:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
User clicks "EPI (E)" in Macaron
|
|
142
|
+
│
|
|
143
|
+
v
|
|
144
|
+
Global state: celltype = "EPI (E)"
|
|
145
|
+
│
|
|
146
|
+
v
|
|
147
|
+
Echart component triggers API call with "EPI (E)"
|
|
148
|
+
│
|
|
149
|
+
v
|
|
150
|
+
Scatter plot updates to show only EPI cells
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## See Also
|
|
154
|
+
|
|
155
|
+
- [EsoDev Showcase](https://visualify.pharmacy.arizona.edu/EsoDev/) - Live example with Macaron cell type selector
|
|
156
|
+
- [Configuration](/configuration.md) - Page mode setup
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Markdown Component
|
|
2
|
+
|
|
3
|
+
The Markdown component renders Markdown content within a page mode layout. Use it for text-heavy content like descriptions, documentation, or README-style content alongside visualizations.
|
|
4
|
+
|
|
5
|
+
## Properties
|
|
6
|
+
|
|
7
|
+
| Property | Type | Required | Description |
|
|
8
|
+
|----------|------|----------|-------------|
|
|
9
|
+
| `type` | string | Yes | Must be `"Markdown"`. |
|
|
10
|
+
| `id` | string | No | Unique identifier for the component. |
|
|
11
|
+
| `row` | int | Yes | The row in which the component is displayed. |
|
|
12
|
+
| `col` | int | Yes | The column in which the component is displayed. |
|
|
13
|
+
| `content` | string | No | Inline Markdown string to render. Use this for short content. |
|
|
14
|
+
| `src` | string | No | Path or URL to a Markdown file to load and render. Use this for longer content. |
|
|
15
|
+
|
|
16
|
+
> **Note:** Provide either `content` or `src`, not both. If both are specified, `content` takes precedence.
|
|
17
|
+
|
|
18
|
+
## Example
|
|
19
|
+
|
|
20
|
+
### Inline Content
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"type": "Markdown",
|
|
25
|
+
"id": "description",
|
|
26
|
+
"row": 1,
|
|
27
|
+
"col": 1,
|
|
28
|
+
"content": "## About This Dataset\n\nThis dataset contains gene expression profiles across **12 tissue types**.\n\n- Source: GEO Database\n- Samples: 240\n- Platform: RNA-seq"
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Loading from a File
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"type": "Markdown",
|
|
37
|
+
"id": "readme",
|
|
38
|
+
"row": 1,
|
|
39
|
+
"col": 1,
|
|
40
|
+
"src": "./data/description.md"
|
|
41
|
+
}
|
|
42
|
+
```
|