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.
- 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 -193
- 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 -0
- package/docs/docs/_404.md +51 -51
- package/docs/docs/_coverpage.md +11 -11
- package/docs/docs/_sidebar.md +54 -43
- 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 -123
- 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 -1
- package/docs/docs/more-pages.md +23 -23
- package/docs/docs/quickstart.md +148 -119
- 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 -579
- 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 -143
- 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
|
@@ -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
|
+
};
|
package/src/core/pages/404.js
CHANGED
|
@@ -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;
|
package/src/core/pages/error.js
CHANGED
|
@@ -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;
|