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
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Three.js Module for Visualify.js
3
+ * Provides foundation for custom 3D visualizations
4
+ * @version 0.1.0
5
+ */
6
+
7
+ import * as THREE from 'three';
8
+
9
+ // Core managers
10
+ export { SceneManager, createSceneFromConfig } from './Scene';
11
+ export { CameraManager, CameraType, createCameraFromConfig } from './Camera';
12
+ export { LightingManager, LightType, createLightsFromConfig, createDefaultLighting } from './Lighting';
13
+ export { RendererManager, createRendererFromConfig, handleResize } from './Renderer';
14
+
15
+ // Re-export Three.js for convenience
16
+ export { THREE };
17
+
18
+ // Version information
19
+ export const VERSION = '0.1.0';
20
+
21
+ /**
22
+ * ThreeJSManager - Unified manager for Three.js scenes
23
+ * Combines scene, camera, lighting, and renderer management
24
+ */
25
+ export class ThreeJSManager {
26
+ constructor(options = {}) {
27
+ // Managers are lazily initialized in init() to avoid top-level await
28
+ this.sceneManager = null;
29
+ this.cameraManager = null;
30
+ this.lightingManager = null;
31
+ this.rendererManager = null;
32
+
33
+ this.options = {
34
+ autoRender: true,
35
+ ...options,
36
+ };
37
+
38
+ this.animationId = null;
39
+ this.isRendering = false;
40
+ }
41
+
42
+ /**
43
+ * Initialize a complete Three.js setup
44
+ * @param {string} id - Setup identifier
45
+ * @param {HTMLCanvasElement} canvas
46
+ * @param {Object} config
47
+ * @returns {Object} Setup objects
48
+ */
49
+ async init(id, canvas, config = {}) {
50
+ // Ensure managers are loaded
51
+ if (!this.sceneManager) {
52
+ const { SceneManager } = await import('./Scene');
53
+ this.sceneManager = new SceneManager();
54
+ }
55
+ if (!this.cameraManager) {
56
+ const { CameraManager } = await import('./Camera');
57
+ this.cameraManager = new CameraManager();
58
+ }
59
+ if (!this.lightingManager) {
60
+ const { LightingManager } = await import('./Lighting');
61
+ this.lightingManager = new LightingManager();
62
+ }
63
+ if (!this.rendererManager) {
64
+ const { RendererManager } = await import('./Renderer');
65
+ this.rendererManager = new RendererManager();
66
+ }
67
+
68
+ // Create scene
69
+ const scene = this.sceneManager.createScene(`${id}_scene`, config.scene);
70
+
71
+ // Create camera
72
+ const camera = this.cameraManager.createCamera(`${id}_camera`, config.camera);
73
+
74
+ // Create lights
75
+ if (config.lights) {
76
+ config.lights.forEach((lightConfig, index) => {
77
+ const light = this.lightingManager.createLight(`${id}_light_${index}`, lightConfig);
78
+ scene.add(light);
79
+ });
80
+ }
81
+
82
+ // Create renderer
83
+ const renderer = this.rendererManager.createRenderer(`${id}_renderer`, canvas, config.renderer);
84
+
85
+ return { scene, camera, renderer };
86
+ }
87
+
88
+ /**
89
+ * Start render loop
90
+ * @param {Function} callback - Optional callback for each frame
91
+ */
92
+ startRenderLoop(callback) {
93
+ if (this.isRendering) return;
94
+
95
+ this.isRendering = true;
96
+
97
+ const render = () => {
98
+ if (!this.isRendering) return;
99
+
100
+ this.animationId = requestAnimationFrame(render);
101
+
102
+ // Call user callback
103
+ if (callback) {
104
+ callback();
105
+ }
106
+ };
107
+
108
+ render();
109
+ }
110
+
111
+ /**
112
+ * Stop render loop
113
+ */
114
+ stopRenderLoop() {
115
+ this.isRendering = false;
116
+ if (this.animationId) {
117
+ cancelAnimationFrame(this.animationId);
118
+ this.animationId = null;
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Render a single frame
124
+ * @param {string} sceneId
125
+ * @param {string} cameraId
126
+ * @param {string} rendererId
127
+ */
128
+ render(sceneId, cameraId, rendererId) {
129
+ const scene = this.sceneManager.getScene(sceneId);
130
+ const camera = this.cameraManager.getCamera(cameraId);
131
+
132
+ if (scene && camera) {
133
+ this.rendererManager.render(rendererId, scene, camera);
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Dispose all resources
139
+ */
140
+ dispose() {
141
+ this.stopRenderLoop();
142
+
143
+ if (this.sceneManager) this.sceneManager.dispose();
144
+ if (this.cameraManager) this.cameraManager.dispose();
145
+ if (this.lightingManager) this.lightingManager.dispose();
146
+ if (this.rendererManager) this.rendererManager.dispose();
147
+ }
148
+ }
149
+
150
+ // Default export
151
+ export default {
152
+ THREE,
153
+ VERSION,
154
+ ThreeJSManager,
155
+ };
@@ -1,50 +1,50 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2023-11-30 21:58:47
4
- * @FilePath : /visualifyjs/src/core/pages/404.js
5
- * @Description :
6
- * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
- import React from 'react';
9
- import '../../_css/404.css';
10
-
11
- const NotFoundPage = ({ page, config = {} }) => {
12
- const {
13
- heading = (
14
- <span>
15
- Oops! This Page <span style={{ color: 'red' }}>{page}</span>{' '}
16
- Could Not Be Found
17
- </span>
18
- ),
19
- content = 'SORRY BUT THE PAGE YOU ARE LOOKING FOR DOES NOT EXIST, HAVE BEEN REMOVED, NAME CHANGED, OR IS TEMPORARILY UNAVAILABLE',
20
- button_text = 'BACK TO HOME',
21
- } = config;
22
-
23
- return (
24
- <div id='colorlib-notfound'>
25
- <div className='colorlib-notfound'>
26
- <div className='colorlib-notfound-404'>
27
- <h1>404</h1>
28
- </div>
29
- <h2 id='colorlib_404_customizer_page_heading'>{heading}</h2>
30
- <div id='colorlib_404_customizer_content'>{content}</div>
31
- <a
32
- href={window.location.origin}
33
- id='colorlib_404_customizer_button_text'>
34
- {button_text}
35
- </a>
36
- </div>
37
- <p className='colorlib-copyrigh'>
38
- <span>404 Page Template designed by </span>
39
- <a
40
- href='https://colorlib.com/'
41
- target='_blank'
42
- rel='noopener noreferrer'>
43
- Colorlib.
44
- </a>
45
- </p>
46
- </div>
47
- );
48
- };
49
-
50
- export default NotFoundPage;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2023-11-30 21:58:47
4
+ * @FilePath : /visualifyjs/src/core/pages/404.js
5
+ * @Description :
6
+ * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+ import React from 'react';
9
+ import '../../_css/404.css';
10
+
11
+ const NotFoundPage = ({ page, config = {} }) => {
12
+ const {
13
+ heading = (
14
+ <span>
15
+ Oops! This Page <span style={{ color: 'red' }}>{page}</span>{' '}
16
+ Could Not Be Found
17
+ </span>
18
+ ),
19
+ content = 'SORRY BUT THE PAGE YOU ARE LOOKING FOR DOES NOT EXIST, HAVE BEEN REMOVED, NAME CHANGED, OR IS TEMPORARILY UNAVAILABLE',
20
+ button_text = 'BACK TO HOME',
21
+ } = config;
22
+
23
+ return (
24
+ <div id='colorlib-notfound'>
25
+ <div className='colorlib-notfound'>
26
+ <div className='colorlib-notfound-404'>
27
+ <h1>404</h1>
28
+ </div>
29
+ <h2 id='colorlib_404_customizer_page_heading'>{heading}</h2>
30
+ <div id='colorlib_404_customizer_content'>{content}</div>
31
+ <a
32
+ href={window.location.origin}
33
+ id='colorlib_404_customizer_button_text'>
34
+ {button_text}
35
+ </a>
36
+ </div>
37
+ <p className='colorlib-copyrigh'>
38
+ <span>404 Page Template designed by </span>
39
+ <a
40
+ href='https://colorlib.com/'
41
+ target='_blank'
42
+ rel='noopener noreferrer'>
43
+ Colorlib.
44
+ </a>
45
+ </p>
46
+ </div>
47
+ );
48
+ };
49
+
50
+ export default NotFoundPage;
@@ -1,27 +1,27 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2023-12-23 13:22:50
4
- * @FilePath : /visualifyjs/src/core/pages/error.js
5
- * @Description :
6
- * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
- import React from 'react';
9
-
10
- function Error({ message, style }) {
11
- return (
12
- <div
13
- style={{
14
- display: 'flex',
15
- alignItems: 'center',
16
- justifyContent: 'center',
17
- height: '100%',
18
- color: 'red',
19
- ...style,
20
- }}>
21
- {/* Display the error message */}
22
- <p>{message}</p>
23
- </div>
24
- );
25
- }
26
-
27
- export default Error;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2023-12-23 13:22:50
4
+ * @FilePath : /visualifyjs/src/core/pages/error.js
5
+ * @Description :
6
+ * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+ import React from 'react';
9
+
10
+ function Error({ message, style }) {
11
+ return (
12
+ <div
13
+ style={{
14
+ display: 'flex',
15
+ alignItems: 'center',
16
+ justifyContent: 'center',
17
+ height: '100%',
18
+ color: 'red',
19
+ ...style,
20
+ }}>
21
+ {/* Display the error message */}
22
+ <p>{message}</p>
23
+ </div>
24
+ );
25
+ }
26
+
27
+ export default Error;
@@ -1,62 +1,62 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2023-11-29 21:20:55
4
- * @FilePath : /visualifyjs/src/core/pages/jsonPage.js
5
- * @Description :
6
- * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
- import React, { useEffect, useState } from 'react';
9
- import { useLocation } from 'react-router-dom';
10
- import NotFoundPage from './404';
11
- import fetchJson from '../fetch/json';
12
- import LayoutParser from '../widgets/layout';
13
- import Vcontroller from '../widgets/controller';
14
-
15
- const JsonPage = () => {
16
- const [jsonData, setJsonData] = useState(null);
17
- const [loading, setLoading] = useState(true);
18
- const [error, setError] = useState(null);
19
- const location = useLocation();
20
-
21
- useEffect(() => {
22
- const routerpath = location.pathname.replace(/^\/|\.json$/g, '');
23
- const jsonurl =
24
- routerpath === ''
25
- ? 'home'
26
- : routerpath.endsWith('/')
27
- ? routerpath + 'home'
28
- : routerpath;
29
- //console.log('JsonPage jsonurl:', jsonurl);
30
- if (jsonurl) {
31
- setLoading(true);
32
- setError(null);
33
-
34
- fetchJson(jsonurl)
35
- .then((data) => {
36
- setJsonData(data);
37
- setLoading(false);
38
- })
39
- .catch((err) => {
40
- setError(err);
41
- setLoading(false);
42
- });
43
- }
44
- }, [location.pathname]); // React to changes in pathname
45
-
46
- if (loading) {
47
- return <div>Loading...</div>;
48
- }
49
- if (error || !jsonData) {
50
- return <NotFoundPage page={location.pathname} />;
51
- }
52
-
53
- return (
54
- <>
55
- <LayoutParser config={jsonData.layout}>
56
- <Vcontroller components={jsonData.components} />
57
- </LayoutParser>
58
- </>
59
- );
60
- };
61
-
62
- export default JsonPage;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2023-11-29 21:20:55
4
+ * @FilePath : /visualifyjs/src/core/pages/jsonPage.js
5
+ * @Description :
6
+ * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+ import React, { useEffect, useState } from 'react';
9
+ import { useLocation } from 'react-router-dom';
10
+ import NotFoundPage from './404';
11
+ import fetchJson from '../fetch/json';
12
+ import LayoutParser from '../widgets/layout';
13
+ import Vcontroller from '../widgets/controller';
14
+
15
+ const JsonPage = () => {
16
+ const [jsonData, setJsonData] = useState(null);
17
+ const [loading, setLoading] = useState(true);
18
+ const [error, setError] = useState(null);
19
+ const location = useLocation();
20
+
21
+ useEffect(() => {
22
+ const routerpath = location.pathname.replace(/^\/|\.json$/g, '');
23
+ const jsonurl =
24
+ routerpath === ''
25
+ ? 'home'
26
+ : routerpath.endsWith('/')
27
+ ? routerpath + 'home'
28
+ : routerpath;
29
+ //console.log('JsonPage jsonurl:', jsonurl);
30
+ if (jsonurl) {
31
+ setLoading(true);
32
+ setError(null);
33
+
34
+ fetchJson(jsonurl)
35
+ .then((data) => {
36
+ setJsonData(data);
37
+ setLoading(false);
38
+ })
39
+ .catch((err) => {
40
+ setError(err);
41
+ setLoading(false);
42
+ });
43
+ }
44
+ }, [location.pathname]); // React to changes in pathname
45
+
46
+ if (loading) {
47
+ return <div>Loading...</div>;
48
+ }
49
+ if (error || !jsonData) {
50
+ return <NotFoundPage page={location.pathname} />;
51
+ }
52
+
53
+ return (
54
+ <>
55
+ <LayoutParser config={jsonData.layout}>
56
+ <Vcontroller components={jsonData.components} />
57
+ </LayoutParser>
58
+ </>
59
+ );
60
+ };
61
+
62
+ export default JsonPage;
@@ -1,44 +1,44 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2023-12-23 13:22:33
4
- * @FilePath : /visualifyjs/src/core/pages/Loading.js
5
- * @Description :
6
- * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
- import React from 'react';
9
- import Error from './error';
10
- import CircularProgress from '../widgets/circularProgress';
11
-
12
- function Loading({
13
- message,
14
- style,
15
- msgStyle,
16
- ProgressColor = 'primary',
17
- error = false,
18
- }) {
19
- return (
20
- <div
21
- style={{
22
- display: 'flex',
23
- flexDirection: 'column', // Added to stack elements vertically
24
- alignItems: 'center',
25
- justifyContent: 'center',
26
- height: '100%',
27
- ...style,
28
- }}>
29
- <CircularProgress color={ProgressColor} />
30
- <div style={{ marginTop: '10px', ...msgStyle }}>
31
- {error ? (
32
- <Error
33
- message={message}
34
- style={msgStyle}
35
- />
36
- ) : (
37
- <p>{message}</p>
38
- )}
39
- </div>
40
- </div>
41
- );
42
- }
43
-
44
- export default Loading;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2023-12-23 13:22:33
4
+ * @FilePath : /visualifyjs/src/core/pages/Loading.js
5
+ * @Description :
6
+ * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+ import React from 'react';
9
+ import Error from './error';
10
+ import CircularProgress from '../widgets/circularProgress';
11
+
12
+ function Loading({
13
+ message,
14
+ style,
15
+ msgStyle,
16
+ ProgressColor = 'primary',
17
+ error = false,
18
+ }) {
19
+ return (
20
+ <div
21
+ style={{
22
+ display: 'flex',
23
+ flexDirection: 'column', // Added to stack elements vertically
24
+ alignItems: 'center',
25
+ justifyContent: 'center',
26
+ height: '100%',
27
+ ...style,
28
+ }}>
29
+ <CircularProgress color={ProgressColor} />
30
+ <div style={{ marginTop: '10px', ...msgStyle }}>
31
+ {error ? (
32
+ <Error
33
+ message={message}
34
+ style={msgStyle}
35
+ />
36
+ ) : (
37
+ <p>{message}</p>
38
+ )}
39
+ </div>
40
+ </div>
41
+ );
42
+ }
43
+
44
+ export default Loading;