visualifyjs 2.5.3-2.dev → 2.5.3-9-dev
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of visualifyjs might be problematic. Click here for more details.
- package/.github/workflows/{static.yml.bak → build.yaml} +51 -51
- package/LICENSE +674 -674
- package/README.md +40 -58
- package/config-overrides.js +31 -31
- package/dist/visualify.js +3 -3
- package/docs/CLI.md +15 -0
- package/docs/{docs/README.md → README.md} +41 -65
- package/docs/{docs/Rechart → Rechart}/bar.md +190 -190
- package/docs/{docs/Rechart → Rechart}/funnel.md +193 -241
- package/docs/{docs/Rechart → Rechart}/line.md +355 -355
- package/docs/{docs/Rechart → Rechart}/pie.md +225 -225
- package/docs/{docs/Rechart → Rechart}/radar.md +253 -253
- package/docs/{docs/_404.md → _404.md} +51 -51
- package/docs/{docs/_coverpage.md → _coverpage.md} +11 -11
- package/docs/{docs/_sidebar.md → _sidebar.md} +42 -44
- package/docs/{docs/components → components}/dotBio.md +34 -34
- package/docs/{docs/components → components}/echart.md +82 -82
- package/docs/{docs/components → components}/html.md +34 -34
- package/docs/{docs/components → components}/macaron.md +145 -145
- package/docs/components/markdown.md +0 -0
- package/docs/{docs/components → components}/more.md +142 -142
- package/docs/{docs/components → components}/plotly.md +62 -62
- package/docs/{docs/components → components}/scatterL.md +70 -70
- package/docs/{docs/components → components}/visium.md +56 -56
- package/docs/{docs/configuration.md → configuration.md} +123 -121
- package/docs/{docs/deploy.md → deploy.md} +23 -31
- package/docs/index.html +70 -70
- package/docs/log.md +1 -0
- package/docs/manifest.json +23 -23
- package/docs/{docs/more-pages.md → more-pages.md} +23 -23
- package/docs/{docs/quickstart.md → quickstart.md} +115 -124
- package/docs/{docs/rechart-attributes.md → rechart-attributes.md} +74 -74
- package/docs/{docs/rechart-basic-usage.md → rechart-basic-usage.md} +162 -162
- 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 +25 -25
- package/docs/static/js/configuration.js +448 -448
- package/docs/static/js/visualify.js +24 -23
- package/docs/theme.md +3 -0
- package/package.json +74 -83
- package/rollup.config.mjs +75 -75
- 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 +24 -24
- 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/core/appContext.js +27 -27
- package/src/core/components/Scatter.js +188 -188
- package/src/core/components/ScatterBio.js +572 -572
- package/src/core/components/VisiumPlot.js +165 -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 +201 -201
- package/src/core/components/markdown.js +56 -56
- package/src/core/components/parser.scatterBio.js +579 -587
- package/src/core/components/ratio.js +80 -80
- package/src/core/components/scatterL.js +173 -173
- package/src/core/components/searchbar.js +131 -131
- package/src/core/components/selection.js +193 -193
- package/src/core/components/timeline.js +281 -281
- package/src/core/components/visium.js +97 -97
- 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/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/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 +71 -71
- package/src/core/modules/echartsUtils.js +43 -43
- package/src/core/modules/echartswitcher.js +152 -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 +71 -71
- 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 +183 -183
- package/src/core/parser/echart.features.js +125 -125
- package/src/core/parser/echart.general.js +143 -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 +62 -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 +47 -47
- package/src/core/widgets/circularProgress.js +23 -23
- package/src/core/widgets/controller.js +83 -83
- package/src/core/widgets/errorBoundary.js +36 -36
- package/src/core/widgets/footer.js +177 -177
- package/src/core/widgets/header.js +234 -234
- package/src/core/widgets/layout/Grid.js +31 -31
- package/src/core/widgets/layout.js +36 -36
- package/src/core/widgets/mapping.js +42 -42
- package/src/index.js +62 -62
- package/src/setupTests.js +5 -5
- package/docs/docs/CLI.md +0 -34
- package/docs/docs/Rechart/scatter.md +0 -298
- package/docs/docs/log.md +0 -9
- package/docs/docs/static/logo/favicon.ico +0 -0
- package/docs/docs/static/logo/logo_128x128.png +0 -0
- package/docs/docs/static/logo/logo_192x192.png +0 -0
- package/docs/docs/static/logo/logo_256x256.png +0 -0
- package/docs/docs/static/logo/logo_512x512.png +0 -0
- package/docs/docs/static/logo/logo_64x64.png +0 -0
- package/docs/docs/theme.md +0 -5
- /package/docs/{docs/Rechart → Rechart}/geo.md +0 -0
- /package/docs/{docs/Rechart → Rechart}/liquidfill.md +0 -0
- /package/docs/{docs/Rechart → Rechart}/polar.md +0 -0
- /package/docs/{docs/Rechart → Rechart}/sankey.md +0 -0
- /package/docs/{docs/Rechart/sunburst.md → Rechart/scatter.md} +0 -0
- /package/docs/{docs/Rechart/tree.md → Rechart/sunburst.md} +0 -0
- /package/docs/{docs/Rechart/wordcloud.md → Rechart/tree.md} +0 -0
- /package/docs/{docs/components/markdown.md → Rechart/wordcloud.md} +0 -0
- /package/docs/{docs/static → static}/_images/deploy-github-pages.png +0 -0
package/src/core/router/alias.js
CHANGED
@@ -1,49 +1,49 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-12-04 12:47:02
|
4
|
-
* @FilePath : /visualifyjs/src/core/router/alias.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import { Navigate, useLocation } from 'react-router-dom';
|
9
|
-
|
10
|
-
const AliasRoute = ({ alias, children }) => {
|
11
|
-
const location = useLocation();
|
12
|
-
|
13
|
-
for (const pattern in alias) {
|
14
|
-
const regex = new RegExp(pattern);
|
15
|
-
if (regex.test(location.pathname)) {
|
16
|
-
const target = alias[pattern];
|
17
|
-
|
18
|
-
// Check if the target is defined and is a string
|
19
|
-
if (typeof target === 'string') {
|
20
|
-
// Check if target is a URL or a path
|
21
|
-
if (
|
22
|
-
target.startsWith('http://') ||
|
23
|
-
target.startsWith('https://')
|
24
|
-
) {
|
25
|
-
window.location.href = target;
|
26
|
-
return null;
|
27
|
-
}
|
28
|
-
|
29
|
-
// Redirect to the matched route
|
30
|
-
const newPath = location.pathname.replace(regex, target);
|
31
|
-
return (
|
32
|
-
<Navigate
|
33
|
-
to={newPath}
|
34
|
-
replace
|
35
|
-
/>
|
36
|
-
);
|
37
|
-
} else {
|
38
|
-
console.error(
|
39
|
-
`Alias target for pattern '${pattern}' is not defined or not a string.`,
|
40
|
-
);
|
41
|
-
continue; // Skip to the next pattern
|
42
|
-
}
|
43
|
-
}
|
44
|
-
}
|
45
|
-
|
46
|
-
return children;
|
47
|
-
};
|
48
|
-
|
49
|
-
export default AliasRoute;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-12-04 12:47:02
|
4
|
+
* @FilePath : /visualifyjs/src/core/router/alias.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import { Navigate, useLocation } from 'react-router-dom';
|
9
|
+
|
10
|
+
const AliasRoute = ({ alias, children }) => {
|
11
|
+
const location = useLocation();
|
12
|
+
|
13
|
+
for (const pattern in alias) {
|
14
|
+
const regex = new RegExp(pattern);
|
15
|
+
if (regex.test(location.pathname)) {
|
16
|
+
const target = alias[pattern];
|
17
|
+
|
18
|
+
// Check if the target is defined and is a string
|
19
|
+
if (typeof target === 'string') {
|
20
|
+
// Check if target is a URL or a path
|
21
|
+
if (
|
22
|
+
target.startsWith('http://') ||
|
23
|
+
target.startsWith('https://')
|
24
|
+
) {
|
25
|
+
window.location.href = target;
|
26
|
+
return null;
|
27
|
+
}
|
28
|
+
|
29
|
+
// Redirect to the matched route
|
30
|
+
const newPath = location.pathname.replace(regex, target);
|
31
|
+
return (
|
32
|
+
<Navigate
|
33
|
+
to={newPath}
|
34
|
+
replace
|
35
|
+
/>
|
36
|
+
);
|
37
|
+
} else {
|
38
|
+
console.error(
|
39
|
+
`Alias target for pattern '${pattern}' is not defined or not a string.`,
|
40
|
+
);
|
41
|
+
continue; // Skip to the next pattern
|
42
|
+
}
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
return children;
|
47
|
+
};
|
48
|
+
|
49
|
+
export default AliasRoute;
|
@@ -1,31 +1,31 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-11-29 21:58:14
|
4
|
-
* @FilePath : /visualifyjs/src/core/router/jsonRouter.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import React from 'react';
|
9
|
-
import { HashRouter, Route, Routes } from 'react-router-dom';
|
10
|
-
import AliasRoute from './alias';
|
11
|
-
|
12
|
-
function JsonRouter({ config, children }) {
|
13
|
-
const { alias } = config;
|
14
|
-
|
15
|
-
return (
|
16
|
-
<HashRouter>
|
17
|
-
<Routes>
|
18
|
-
<Route
|
19
|
-
path='/'
|
20
|
-
element={children}
|
21
|
-
/>
|
22
|
-
<Route
|
23
|
-
path='/*'
|
24
|
-
element={<AliasRoute alias={alias}>{children}</AliasRoute>}
|
25
|
-
/>
|
26
|
-
</Routes>
|
27
|
-
</HashRouter>
|
28
|
-
);
|
29
|
-
}
|
30
|
-
|
31
|
-
export default JsonRouter;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-11-29 21:58:14
|
4
|
+
* @FilePath : /visualifyjs/src/core/router/jsonRouter.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import React from 'react';
|
9
|
+
import { HashRouter, Route, Routes } from 'react-router-dom';
|
10
|
+
import AliasRoute from './alias';
|
11
|
+
|
12
|
+
function JsonRouter({ config, children }) {
|
13
|
+
const { alias } = config;
|
14
|
+
|
15
|
+
return (
|
16
|
+
<HashRouter>
|
17
|
+
<Routes>
|
18
|
+
<Route
|
19
|
+
path='/'
|
20
|
+
element={children}
|
21
|
+
/>
|
22
|
+
<Route
|
23
|
+
path='/*'
|
24
|
+
element={<AliasRoute alias={alias}>{children}</AliasRoute>}
|
25
|
+
/>
|
26
|
+
</Routes>
|
27
|
+
</HashRouter>
|
28
|
+
);
|
29
|
+
}
|
30
|
+
|
31
|
+
export default JsonRouter;
|
@@ -1,32 +1,32 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-11-29 22:03:28
|
4
|
-
* @FilePath : /visualifyjs/src/core/themes/modern.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
|
9
|
-
import React from 'react';
|
10
|
-
import Vheader from '../widgets/header';
|
11
|
-
import Vfooter from '../widgets/footer';
|
12
|
-
import { Container } from 'react-bootstrap';
|
13
|
-
import JsonPage from '../pages/jsonPage';
|
14
|
-
|
15
|
-
import '../../_css/modern.css';
|
16
|
-
|
17
|
-
function Modern({ config, children }) {
|
18
|
-
//console.log('Modern config', config);
|
19
|
-
const { homepage = 'home.json' } = config;
|
20
|
-
return (
|
21
|
-
<>
|
22
|
-
<Vheader config={config} />
|
23
|
-
<Container className='text-center'>
|
24
|
-
<JsonPage homepage={homepage} />
|
25
|
-
{children}
|
26
|
-
</Container>
|
27
|
-
<Vfooter config={config} />
|
28
|
-
</>
|
29
|
-
);
|
30
|
-
}
|
31
|
-
|
32
|
-
export default Modern;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-11-29 22:03:28
|
4
|
+
* @FilePath : /visualifyjs/src/core/themes/modern.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
|
9
|
+
import React from 'react';
|
10
|
+
import Vheader from '../widgets/header';
|
11
|
+
import Vfooter from '../widgets/footer';
|
12
|
+
import { Container } from 'react-bootstrap';
|
13
|
+
import JsonPage from '../pages/jsonPage';
|
14
|
+
|
15
|
+
import '../../_css/modern.css';
|
16
|
+
|
17
|
+
function Modern({ config, children }) {
|
18
|
+
//console.log('Modern config', config);
|
19
|
+
const { homepage = 'home.json' } = config;
|
20
|
+
return (
|
21
|
+
<>
|
22
|
+
<Vheader config={config} />
|
23
|
+
<Container className='text-center'>
|
24
|
+
<JsonPage homepage={homepage} />
|
25
|
+
{children}
|
26
|
+
</Container>
|
27
|
+
<Vfooter config={config} />
|
28
|
+
</>
|
29
|
+
);
|
30
|
+
}
|
31
|
+
|
32
|
+
export default Modern;
|
@@ -1,33 +1,33 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-11-29 22:52:11
|
4
|
-
* @FilePath : /visualifyjs/src/core/themes/themeSelector.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import React from 'react';
|
9
|
-
import Modern from './modern';
|
10
|
-
|
11
|
-
function ThemeSelector({ theme, config, children }) {
|
12
|
-
switch (theme) {
|
13
|
-
case 'modern':
|
14
|
-
return (
|
15
|
-
<Modern
|
16
|
-
config={config}
|
17
|
-
children={children}
|
18
|
-
/>
|
19
|
-
);
|
20
|
-
// ... more cases as needed
|
21
|
-
default:
|
22
|
-
console.warn('Unsupported theme:', theme, 'using default theme');
|
23
|
-
// Fallback to default theme
|
24
|
-
return (
|
25
|
-
<Modern
|
26
|
-
config={config}
|
27
|
-
children={children}
|
28
|
-
/>
|
29
|
-
);
|
30
|
-
}
|
31
|
-
}
|
32
|
-
|
33
|
-
export default ThemeSelector;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-11-29 22:52:11
|
4
|
+
* @FilePath : /visualifyjs/src/core/themes/themeSelector.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import React from 'react';
|
9
|
+
import Modern from './modern';
|
10
|
+
|
11
|
+
function ThemeSelector({ theme, config, children }) {
|
12
|
+
switch (theme) {
|
13
|
+
case 'modern':
|
14
|
+
return (
|
15
|
+
<Modern
|
16
|
+
config={config}
|
17
|
+
children={children}
|
18
|
+
/>
|
19
|
+
);
|
20
|
+
// ... more cases as needed
|
21
|
+
default:
|
22
|
+
console.warn('Unsupported theme:', theme, 'using default theme');
|
23
|
+
// Fallback to default theme
|
24
|
+
return (
|
25
|
+
<Modern
|
26
|
+
config={config}
|
27
|
+
children={children}
|
28
|
+
/>
|
29
|
+
);
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
export default ThemeSelector;
|
package/src/core/visualify.js
CHANGED
@@ -1,47 +1,47 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-11-29 15:35:28
|
4
|
-
* @FilePath : /visualifyjs/src/core/visualify.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import React from 'react';
|
9
|
-
import ReactDOM from 'react-dom/client';
|
10
|
-
import ThemeSelector from './themes/themeSelector';
|
11
|
-
import JsonRouter from './router/jsonRouter';
|
12
|
-
import { VisualifyProvider } from './appContext';
|
13
|
-
|
14
|
-
function Visualify({ config }) {
|
15
|
-
// global variable
|
16
|
-
const { theme = 'modern' } = config;
|
17
|
-
|
18
|
-
return (
|
19
|
-
<VisualifyProvider>
|
20
|
-
<JsonRouter config={config}>
|
21
|
-
<ThemeSelector
|
22
|
-
theme={theme}
|
23
|
-
config={config}
|
24
|
-
/>
|
25
|
-
</JsonRouter>
|
26
|
-
</VisualifyProvider>
|
27
|
-
);
|
28
|
-
}
|
29
|
-
|
30
|
-
function CreateApp(config) {
|
31
|
-
if (!config) throw new Error('Missing configuration.');
|
32
|
-
const el = document.querySelector(config.el || '#root');
|
33
|
-
if (!el) throw new Error('el not found. Please check your `el` option.');
|
34
|
-
const app = ReactDOM.createRoot(el);
|
35
|
-
|
36
|
-
// deletion used configuration
|
37
|
-
delete config.el;
|
38
|
-
delete config.mode;
|
39
|
-
|
40
|
-
app.render(
|
41
|
-
<React.StrictMode>
|
42
|
-
<Visualify config={{ ...config }} />
|
43
|
-
</React.StrictMode>,
|
44
|
-
);
|
45
|
-
}
|
46
|
-
|
47
|
-
export default CreateApp;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-11-29 15:35:28
|
4
|
+
* @FilePath : /visualifyjs/src/core/visualify.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import React from 'react';
|
9
|
+
import ReactDOM from 'react-dom/client';
|
10
|
+
import ThemeSelector from './themes/themeSelector';
|
11
|
+
import JsonRouter from './router/jsonRouter';
|
12
|
+
import { VisualifyProvider } from './appContext';
|
13
|
+
|
14
|
+
function Visualify({ config }) {
|
15
|
+
// global variable
|
16
|
+
const { theme = 'modern' } = config;
|
17
|
+
|
18
|
+
return (
|
19
|
+
<VisualifyProvider>
|
20
|
+
<JsonRouter config={config}>
|
21
|
+
<ThemeSelector
|
22
|
+
theme={theme}
|
23
|
+
config={config}
|
24
|
+
/>
|
25
|
+
</JsonRouter>
|
26
|
+
</VisualifyProvider>
|
27
|
+
);
|
28
|
+
}
|
29
|
+
|
30
|
+
function CreateApp(config) {
|
31
|
+
if (!config) throw new Error('Missing configuration.');
|
32
|
+
const el = document.querySelector(config.el || '#root');
|
33
|
+
if (!el) throw new Error('el not found. Please check your `el` option.');
|
34
|
+
const app = ReactDOM.createRoot(el);
|
35
|
+
|
36
|
+
// deletion used configuration
|
37
|
+
delete config.el;
|
38
|
+
delete config.mode;
|
39
|
+
|
40
|
+
app.render(
|
41
|
+
<React.StrictMode>
|
42
|
+
<Visualify config={{ ...config }} />
|
43
|
+
</React.StrictMode>,
|
44
|
+
);
|
45
|
+
}
|
46
|
+
|
47
|
+
export default CreateApp;
|
@@ -1,24 +1,24 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-12-23 13:24:11
|
4
|
-
* @FilePath : /visualifyjs/src/core/widgets/CircularProgress.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import React from 'react';
|
9
|
-
import PropTypes from 'prop-types';
|
10
|
-
import '../../_css/circular-progress.css';
|
11
|
-
|
12
|
-
function CircularProgress({ color }) {
|
13
|
-
return (
|
14
|
-
<div className='circular-progress'>
|
15
|
-
<div className={`spinner ${color}`} />
|
16
|
-
</div>
|
17
|
-
);
|
18
|
-
}
|
19
|
-
|
20
|
-
CircularProgress.propTypes = {
|
21
|
-
color: PropTypes.oneOf(['primary', 'secondary']),
|
22
|
-
};
|
23
|
-
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-12-23 13:24:11
|
4
|
+
* @FilePath : /visualifyjs/src/core/widgets/CircularProgress.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import React from 'react';
|
9
|
+
import PropTypes from 'prop-types';
|
10
|
+
import '../../_css/circular-progress.css';
|
11
|
+
|
12
|
+
function CircularProgress({ color }) {
|
13
|
+
return (
|
14
|
+
<div className='circular-progress'>
|
15
|
+
<div className={`spinner ${color}`} />
|
16
|
+
</div>
|
17
|
+
);
|
18
|
+
}
|
19
|
+
|
20
|
+
CircularProgress.propTypes = {
|
21
|
+
color: PropTypes.oneOf(['primary', 'secondary']),
|
22
|
+
};
|
23
|
+
|
24
24
|
export default CircularProgress;
|
@@ -1,83 +1,83 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-12-21 13:07:59
|
4
|
-
* @FilePath : /visualifyjs/src/core/widgets/controller.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import React from 'react';
|
9
|
-
import widgetMapping from './mapping';
|
10
|
-
|
11
|
-
function Vcontroller({ components = [], layout }) {
|
12
|
-
// ----------------------------------------------------------------------
|
13
|
-
const UUIDs = new Set();
|
14
|
-
function generateUniqueId() {
|
15
|
-
let uniqueId;
|
16
|
-
do {
|
17
|
-
uniqueId = 'xxxx-xxxx-4xxx-yxxx-xxxx-xxxx'.replace(
|
18
|
-
/[xy]/g,
|
19
|
-
function (c) {
|
20
|
-
const r = (Math.random() * 16) | 0;
|
21
|
-
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
22
|
-
return v.toString(16);
|
23
|
-
},
|
24
|
-
);
|
25
|
-
} while (UUIDs.has(uniqueId));
|
26
|
-
UUIDs.add(uniqueId);
|
27
|
-
return uniqueId;
|
28
|
-
}
|
29
|
-
|
30
|
-
const _components = {};
|
31
|
-
// ----------------------------------------------------------------------
|
32
|
-
// Iterate over the config array and render the components based on their type and position
|
33
|
-
const Allcomponents = components.map((componentConfig, index) => {
|
34
|
-
const {
|
35
|
-
row = 1,
|
36
|
-
col = 1,
|
37
|
-
colspan = 1,
|
38
|
-
rowspan = 1,
|
39
|
-
debug = false,
|
40
|
-
} = componentConfig;
|
41
|
-
|
42
|
-
const componentStyle =
|
43
|
-
layout === 'grid'
|
44
|
-
? {
|
45
|
-
gridColumn: `${col} / span ${colspan}`,
|
46
|
-
gridRow: `${row} / span ${rowspan}`,
|
47
|
-
border: debug ? '1px solid red' : 'none',
|
48
|
-
}
|
49
|
-
: {};
|
50
|
-
|
51
|
-
const Component = widgetMapping[componentConfig.type];
|
52
|
-
|
53
|
-
// Generate a unique ID for the component using both ID and index
|
54
|
-
const uniqueId = generateUniqueId();
|
55
|
-
|
56
|
-
//console.log(uniqueId);
|
57
|
-
|
58
|
-
if (!Component) {
|
59
|
-
return (
|
60
|
-
<span
|
61
|
-
key={uniqueId}
|
62
|
-
style={componentStyle}>
|
63
|
-
Error: Component{' '}
|
64
|
-
<b style={{ color: 'red' }}>{componentConfig.type}</b> not
|
65
|
-
found.
|
66
|
-
</span>
|
67
|
-
);
|
68
|
-
}
|
69
|
-
|
70
|
-
const _Component = React.cloneElement(<Component key={uniqueId} />, {
|
71
|
-
style: componentStyle,
|
72
|
-
props: componentConfig,
|
73
|
-
});
|
74
|
-
|
75
|
-
_components[uniqueId] = _Component;
|
76
|
-
// Clone the Component element with the necessary styles and props
|
77
|
-
return _Component;
|
78
|
-
});
|
79
|
-
|
80
|
-
return <>{Allcomponents}</>;
|
81
|
-
}
|
82
|
-
|
83
|
-
export default Vcontroller;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-12-21 13:07:59
|
4
|
+
* @FilePath : /visualifyjs/src/core/widgets/controller.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import React from 'react';
|
9
|
+
import widgetMapping from './mapping';
|
10
|
+
|
11
|
+
function Vcontroller({ components = [], layout }) {
|
12
|
+
// ----------------------------------------------------------------------
|
13
|
+
const UUIDs = new Set();
|
14
|
+
function generateUniqueId() {
|
15
|
+
let uniqueId;
|
16
|
+
do {
|
17
|
+
uniqueId = 'xxxx-xxxx-4xxx-yxxx-xxxx-xxxx'.replace(
|
18
|
+
/[xy]/g,
|
19
|
+
function (c) {
|
20
|
+
const r = (Math.random() * 16) | 0;
|
21
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
22
|
+
return v.toString(16);
|
23
|
+
},
|
24
|
+
);
|
25
|
+
} while (UUIDs.has(uniqueId));
|
26
|
+
UUIDs.add(uniqueId);
|
27
|
+
return uniqueId;
|
28
|
+
}
|
29
|
+
|
30
|
+
const _components = {};
|
31
|
+
// ----------------------------------------------------------------------
|
32
|
+
// Iterate over the config array and render the components based on their type and position
|
33
|
+
const Allcomponents = components.map((componentConfig, index) => {
|
34
|
+
const {
|
35
|
+
row = 1,
|
36
|
+
col = 1,
|
37
|
+
colspan = 1,
|
38
|
+
rowspan = 1,
|
39
|
+
debug = false,
|
40
|
+
} = componentConfig;
|
41
|
+
|
42
|
+
const componentStyle =
|
43
|
+
layout === 'grid'
|
44
|
+
? {
|
45
|
+
gridColumn: `${col} / span ${colspan}`,
|
46
|
+
gridRow: `${row} / span ${rowspan}`,
|
47
|
+
border: debug ? '1px solid red' : 'none',
|
48
|
+
}
|
49
|
+
: {};
|
50
|
+
|
51
|
+
const Component = widgetMapping[componentConfig.type];
|
52
|
+
|
53
|
+
// Generate a unique ID for the component using both ID and index
|
54
|
+
const uniqueId = generateUniqueId();
|
55
|
+
|
56
|
+
//console.log(uniqueId);
|
57
|
+
|
58
|
+
if (!Component) {
|
59
|
+
return (
|
60
|
+
<span
|
61
|
+
key={uniqueId}
|
62
|
+
style={componentStyle}>
|
63
|
+
Error: Component{' '}
|
64
|
+
<b style={{ color: 'red' }}>{componentConfig.type}</b> not
|
65
|
+
found.
|
66
|
+
</span>
|
67
|
+
);
|
68
|
+
}
|
69
|
+
|
70
|
+
const _Component = React.cloneElement(<Component key={uniqueId} />, {
|
71
|
+
style: componentStyle,
|
72
|
+
props: componentConfig,
|
73
|
+
});
|
74
|
+
|
75
|
+
_components[uniqueId] = _Component;
|
76
|
+
// Clone the Component element with the necessary styles and props
|
77
|
+
return _Component;
|
78
|
+
});
|
79
|
+
|
80
|
+
return <>{Allcomponents}</>;
|
81
|
+
}
|
82
|
+
|
83
|
+
export default Vcontroller;
|
@@ -1,36 +1,36 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-12-02 16:34:41
|
4
|
-
* @FilePath : /visualifyjs/src/core/widgets/errorBoundary.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import React from 'react';
|
9
|
-
|
10
|
-
class ErrorBoundary extends React.Component {
|
11
|
-
constructor(props) {
|
12
|
-
super(props);
|
13
|
-
this.state = { hasError: false, error: null };
|
14
|
-
}
|
15
|
-
|
16
|
-
static getDerivedStateFromError(error) {
|
17
|
-
// Update state so the next render will show the fallback UI.
|
18
|
-
return { hasError: true, error };
|
19
|
-
}
|
20
|
-
|
21
|
-
componentDidCatch(error, errorInfo) {
|
22
|
-
// You can also log the error to an error reporting service
|
23
|
-
console.error('Caught an error:', error, errorInfo);
|
24
|
-
}
|
25
|
-
|
26
|
-
render() {
|
27
|
-
if (this.state.hasError) {
|
28
|
-
// You can render any custom fallback UI
|
29
|
-
return <h1>Something went wrong: {this.state.error.message}</h1>;
|
30
|
-
}
|
31
|
-
|
32
|
-
return this.props.children;
|
33
|
-
}
|
34
|
-
}
|
35
|
-
|
36
|
-
export default ErrorBoundary;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-12-02 16:34:41
|
4
|
+
* @FilePath : /visualifyjs/src/core/widgets/errorBoundary.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import React from 'react';
|
9
|
+
|
10
|
+
class ErrorBoundary extends React.Component {
|
11
|
+
constructor(props) {
|
12
|
+
super(props);
|
13
|
+
this.state = { hasError: false, error: null };
|
14
|
+
}
|
15
|
+
|
16
|
+
static getDerivedStateFromError(error) {
|
17
|
+
// Update state so the next render will show the fallback UI.
|
18
|
+
return { hasError: true, error };
|
19
|
+
}
|
20
|
+
|
21
|
+
componentDidCatch(error, errorInfo) {
|
22
|
+
// You can also log the error to an error reporting service
|
23
|
+
console.error('Caught an error:', error, errorInfo);
|
24
|
+
}
|
25
|
+
|
26
|
+
render() {
|
27
|
+
if (this.state.hasError) {
|
28
|
+
// You can render any custom fallback UI
|
29
|
+
return <h1>Something went wrong: {this.state.error.message}</h1>;
|
30
|
+
}
|
31
|
+
|
32
|
+
return this.props.children;
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
export default ErrorBoundary;
|