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.

Files changed (139) hide show
  1. package/.github/workflows/{static.yml.bak → build.yaml} +51 -51
  2. package/LICENSE +674 -674
  3. package/README.md +40 -58
  4. package/config-overrides.js +31 -31
  5. package/dist/visualify.js +3 -3
  6. package/docs/CLI.md +15 -0
  7. package/docs/{docs/README.md → README.md} +41 -65
  8. package/docs/{docs/Rechart → Rechart}/bar.md +190 -190
  9. package/docs/{docs/Rechart → Rechart}/funnel.md +193 -241
  10. package/docs/{docs/Rechart → Rechart}/line.md +355 -355
  11. package/docs/{docs/Rechart → Rechart}/pie.md +225 -225
  12. package/docs/{docs/Rechart → Rechart}/radar.md +253 -253
  13. package/docs/{docs/_404.md → _404.md} +51 -51
  14. package/docs/{docs/_coverpage.md → _coverpage.md} +11 -11
  15. package/docs/{docs/_sidebar.md → _sidebar.md} +42 -44
  16. package/docs/{docs/components → components}/dotBio.md +34 -34
  17. package/docs/{docs/components → components}/echart.md +82 -82
  18. package/docs/{docs/components → components}/html.md +34 -34
  19. package/docs/{docs/components → components}/macaron.md +145 -145
  20. package/docs/components/markdown.md +0 -0
  21. package/docs/{docs/components → components}/more.md +142 -142
  22. package/docs/{docs/components → components}/plotly.md +62 -62
  23. package/docs/{docs/components → components}/scatterL.md +70 -70
  24. package/docs/{docs/components → components}/visium.md +56 -56
  25. package/docs/{docs/configuration.md → configuration.md} +123 -121
  26. package/docs/{docs/deploy.md → deploy.md} +23 -31
  27. package/docs/index.html +70 -70
  28. package/docs/log.md +1 -0
  29. package/docs/manifest.json +23 -23
  30. package/docs/{docs/more-pages.md → more-pages.md} +23 -23
  31. package/docs/{docs/quickstart.md → quickstart.md} +115 -124
  32. package/docs/{docs/rechart-attributes.md → rechart-attributes.md} +74 -74
  33. package/docs/{docs/rechart-basic-usage.md → rechart-basic-usage.md} +162 -162
  34. package/docs/static/css/fluff-stuff.css +169 -169
  35. package/docs/static/css/font-awesome.min.css +4 -4
  36. package/docs/static/css/visualify.css +25 -25
  37. package/docs/static/js/configuration.js +448 -448
  38. package/docs/static/js/visualify.js +24 -23
  39. package/docs/theme.md +3 -0
  40. package/package.json +74 -83
  41. package/rollup.config.mjs +75 -75
  42. package/src/_css/404.css +115 -115
  43. package/src/_css/App.css +37 -37
  44. package/src/_css/autoSuggestion.css +26 -26
  45. package/src/_css/circular-progress.css +32 -32
  46. package/src/_css/index.css +36 -36
  47. package/src/_css/modern.css +24 -24
  48. package/src/_media/corner.svg +8 -8
  49. package/src/_media/download.svg +3 -3
  50. package/src/_media/logo.svg +14 -14
  51. package/src/_test/App.test.js +15 -15
  52. package/src/_utils/reportWebVitals.js +13 -13
  53. package/src/core/appContext.js +27 -27
  54. package/src/core/components/Scatter.js +188 -188
  55. package/src/core/components/ScatterBio.js +572 -572
  56. package/src/core/components/VisiumPlot.js +165 -165
  57. package/src/core/components/browser.js +42 -42
  58. package/src/core/components/dotplot.js +413 -413
  59. package/src/core/components/html.js +29 -29
  60. package/src/core/components/list.js +178 -178
  61. package/src/core/components/macaron.js +201 -201
  62. package/src/core/components/markdown.js +56 -56
  63. package/src/core/components/parser.scatterBio.js +579 -587
  64. package/src/core/components/ratio.js +80 -80
  65. package/src/core/components/scatterL.js +173 -173
  66. package/src/core/components/searchbar.js +131 -131
  67. package/src/core/components/selection.js +193 -193
  68. package/src/core/components/timeline.js +281 -281
  69. package/src/core/components/visium.js +97 -97
  70. package/src/core/fetch/condfetch.js +82 -82
  71. package/src/core/fetch/fetch.js +92 -92
  72. package/src/core/fetch/json.js +29 -29
  73. package/src/core/fetch/vfetch.js +42 -42
  74. package/src/core/liveEditor.js +44 -44
  75. package/src/core/modules/codeEditorWithPreview.js +104 -104
  76. package/src/core/modules/echarts/common.js +20 -20
  77. package/src/core/modules/echarts/presetHandler.js +41 -41
  78. package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
  79. package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
  80. package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
  81. package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
  82. package/src/core/modules/echarts.js +71 -71
  83. package/src/core/modules/echartsUtils.js +43 -43
  84. package/src/core/modules/echartswitcher.js +152 -152
  85. package/src/core/modules/replotly/presetHandler.js +24 -24
  86. package/src/core/modules/replotly/presets/minimum.js +18 -18
  87. package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
  88. package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
  89. package/src/core/modules/replotly.js +71 -71
  90. package/src/core/pages/404.js +50 -50
  91. package/src/core/pages/error.js +27 -27
  92. package/src/core/pages/jsonPage.js +62 -62
  93. package/src/core/pages/loading.js +44 -44
  94. package/src/core/parser/echart.data.js +183 -183
  95. package/src/core/parser/echart.features.js +125 -125
  96. package/src/core/parser/echart.general.js +143 -147
  97. package/src/core/parser/echart.hilbert.js +57 -57
  98. package/src/core/parser/echart.parser.js +210 -210
  99. package/src/core/parser/echart.series.js +67 -67
  100. package/src/core/parser/echart.types.js +76 -76
  101. package/src/core/parser/plotly.config.js +10 -10
  102. package/src/core/parser/plotly.data.js +132 -132
  103. package/src/core/parser/plotly.layout.js +9 -9
  104. package/src/core/parser/plotly.violin.js +18 -18
  105. package/src/core/recharts.js +62 -62
  106. package/src/core/router/alias.js +49 -49
  107. package/src/core/router/jsonRouter.js +31 -31
  108. package/src/core/themes/modern.js +32 -32
  109. package/src/core/themes/themeSelector.js +33 -33
  110. package/src/core/visualify.js +47 -47
  111. package/src/core/widgets/circularProgress.js +23 -23
  112. package/src/core/widgets/controller.js +83 -83
  113. package/src/core/widgets/errorBoundary.js +36 -36
  114. package/src/core/widgets/footer.js +177 -177
  115. package/src/core/widgets/header.js +234 -234
  116. package/src/core/widgets/layout/Grid.js +31 -31
  117. package/src/core/widgets/layout.js +36 -36
  118. package/src/core/widgets/mapping.js +42 -42
  119. package/src/index.js +62 -62
  120. package/src/setupTests.js +5 -5
  121. package/docs/docs/CLI.md +0 -34
  122. package/docs/docs/Rechart/scatter.md +0 -298
  123. package/docs/docs/log.md +0 -9
  124. package/docs/docs/static/logo/favicon.ico +0 -0
  125. package/docs/docs/static/logo/logo_128x128.png +0 -0
  126. package/docs/docs/static/logo/logo_192x192.png +0 -0
  127. package/docs/docs/static/logo/logo_256x256.png +0 -0
  128. package/docs/docs/static/logo/logo_512x512.png +0 -0
  129. package/docs/docs/static/logo/logo_64x64.png +0 -0
  130. package/docs/docs/theme.md +0 -5
  131. /package/docs/{docs/Rechart → Rechart}/geo.md +0 -0
  132. /package/docs/{docs/Rechart → Rechart}/liquidfill.md +0 -0
  133. /package/docs/{docs/Rechart → Rechart}/polar.md +0 -0
  134. /package/docs/{docs/Rechart → Rechart}/sankey.md +0 -0
  135. /package/docs/{docs/Rechart/sunburst.md → Rechart/scatter.md} +0 -0
  136. /package/docs/{docs/Rechart/tree.md → Rechart/sunburst.md} +0 -0
  137. /package/docs/{docs/Rechart/wordcloud.md → Rechart/tree.md} +0 -0
  138. /package/docs/{docs/components/markdown.md → Rechart/wordcloud.md} +0 -0
  139. /package/docs/{docs/static → static}/_images/deploy-github-pages.png +0 -0
@@ -1,80 +1,80 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2023-12-30 15:11:35
4
- * @FilePath : /visualifyjs/src/core/components/ratio.js
5
- * @Description :
6
- * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
- import React, { useState, useEffect } from 'react';
9
- import { useAppContext } from '../appContext';
10
-
11
- function RatioBox({ props, style }) {
12
- const { debug } = props;
13
-
14
- const { style: blockStyle } = props;
15
- // if debug is true, then border is red, else no border
16
- style = {
17
- ...style,
18
- ...blockStyle,
19
- border: debug ? '1px solid red' : 'none',
20
- };
21
-
22
- const { title } = props;
23
- const renderTitle = () => {
24
- return title && <h3>{title}</h3>;
25
- };
26
-
27
- const { setSharedData } = useAppContext();
28
- const { choice = [] } = props;
29
-
30
- // State to keep track of selected choice
31
- const [selectedChoice, setSelectedChoice] = useState(
32
- choice.length > 0 ? choice[0] : null,
33
- );
34
-
35
- // Handler for radio button change
36
- const handleRadioChange = (event) => {
37
- setSelectedChoice(event.target.value);
38
- };
39
-
40
- const {
41
- id,
42
- val,
43
- ratio_style = {
44
- margin: 'auto 15px',
45
- },
46
- } = props;
47
-
48
- // Store the selected choice in shared data whenever it changes
49
- useEffect(() => {
50
- if (val) {
51
- setSharedData((prevSharedData) => {
52
- return { ...prevSharedData, [val]: selectedChoice };
53
- });
54
- }
55
- }, [selectedChoice, val, setSharedData]);
56
-
57
- return (
58
- <div
59
- key={id}
60
- style={style}
61
- className='ratio-box-container'>
62
- {renderTitle()}
63
- {choice.map((item, index) => (
64
- <label
65
- key={index}
66
- style={ratio_style}>
67
- <input
68
- type='radio'
69
- value={item}
70
- checked={selectedChoice === item}
71
- onChange={handleRadioChange}
72
- />
73
- {item}
74
- </label>
75
- ))}
76
- </div>
77
- );
78
- }
79
-
80
- export default RatioBox;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2023-12-30 15:11:35
4
+ * @FilePath : /visualifyjs/src/core/components/ratio.js
5
+ * @Description :
6
+ * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+ import React, { useState, useEffect } from 'react';
9
+ import { useAppContext } from '../appContext';
10
+
11
+ function RatioBox({ props, style }) {
12
+ const { debug } = props;
13
+
14
+ const { style: blockStyle } = props;
15
+ // if debug is true, then border is red, else no border
16
+ style = {
17
+ ...style,
18
+ ...blockStyle,
19
+ border: debug ? '1px solid red' : 'none',
20
+ };
21
+
22
+ const { title } = props;
23
+ const renderTitle = () => {
24
+ return title && <h3>{title}</h3>;
25
+ };
26
+
27
+ const { setSharedData } = useAppContext();
28
+ const { choice = [] } = props;
29
+
30
+ // State to keep track of selected choice
31
+ const [selectedChoice, setSelectedChoice] = useState(
32
+ choice.length > 0 ? choice[0] : null,
33
+ );
34
+
35
+ // Handler for radio button change
36
+ const handleRadioChange = (event) => {
37
+ setSelectedChoice(event.target.value);
38
+ };
39
+
40
+ const {
41
+ id,
42
+ val,
43
+ ratio_style = {
44
+ margin: 'auto 15px',
45
+ },
46
+ } = props;
47
+
48
+ // Store the selected choice in shared data whenever it changes
49
+ useEffect(() => {
50
+ if (val) {
51
+ setSharedData((prevSharedData) => {
52
+ return { ...prevSharedData, [val]: selectedChoice };
53
+ });
54
+ }
55
+ }, [selectedChoice, val, setSharedData]);
56
+
57
+ return (
58
+ <div
59
+ key={id}
60
+ style={style}
61
+ className='ratio-box-container'>
62
+ {renderTitle()}
63
+ {choice.map((item, index) => (
64
+ <label
65
+ key={index}
66
+ style={ratio_style}>
67
+ <input
68
+ type='radio'
69
+ value={item}
70
+ checked={selectedChoice === item}
71
+ onChange={handleRadioChange}
72
+ />
73
+ {item}
74
+ </label>
75
+ ))}
76
+ </div>
77
+ );
78
+ }
79
+
80
+ export default RatioBox;
@@ -1,173 +1,173 @@
1
- /*
2
- * @Author : Lihao leolihao@arizona.edu
3
- * @Date : 2023-11-06 17:23:59
4
- * @FilePath : /visualify.js/src/core/components/scatterL.js
5
- * @Description :
6
- * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
- */
8
- import React, { useEffect, useRef, useState } from 'react';
9
- import { useAppContext } from '../appContext';
10
- import Loading from '../pages/loading';
11
- import {
12
- initChart,
13
- handleChartForSharedDataChange,
14
- } from '../modules/echartsUtils';
15
- import {
16
- parseConfig,
17
- validateConfig,
18
- handleAPI,
19
- handleSimplyLoad,
20
- onDataZoom,
21
- parseData,
22
- outputAxisValues,
23
- } from './parser.scatterBio';
24
-
25
- function ScatterBio({ props, style }) {
26
- const chartRef = useRef(null);
27
- const { sharedData } = useAppContext();
28
- const [loading, setLoading] = useState({ active: true, message: null });
29
-
30
- // Store the previous sharedData value using a ref
31
- const previousSharedDataRef = useRef(null);
32
-
33
- useEffect(() => {
34
- let option = parseConfig(props);
35
- //console.log('option: ', option);
36
- let fetched_dat = null;
37
-
38
- // Check if the sharedData has changed
39
- handleChartForSharedDataChange(
40
- chartRef,
41
- sharedData,
42
- previousSharedDataRef,
43
- () => {
44
- option.xAxis.min = props?.echart?.xAxis?.min;
45
- option.xAxis.max = props?.echart?.xAxis?.max;
46
- option.yAxis.min = props?.echart?.yAxis?.min;
47
- option.yAxis.max = props?.echart?.yAxis?.max;
48
- },
49
- );
50
-
51
- // Simulate fetching data asynchronously (replace with your data fetching logic)
52
- const updatePlot = async () => {
53
- try {
54
- setLoading({ active: true, message: null });
55
- validateConfig(props.config);
56
- const myChart = initChart(chartRef, option);
57
- if (props.config.simpleload)
58
- handleSimplyLoad(props.config.simpleload);
59
- else {
60
- const ibox = props.config?.ibox ?? {
61
- xMin: -9999,
62
- yMin: -9999,
63
- xMax: 9999,
64
- yMax: 9999,
65
- };
66
- fetched_dat = await handleAPI(
67
- props.config,
68
- sharedData,
69
- ibox,
70
- );
71
- //console.log(fetched_dat, 'fetched_dat');
72
- }
73
- var { series, legend, visualMap, title } = parseData(
74
- fetched_dat,
75
- props.config,
76
- sharedData,
77
- );
78
- // Chart options
79
- option.series = props?.echart?.series ?? series;
80
- option.legend = {
81
- ...option.legend,
82
- ...legend,
83
- };
84
-
85
- option.visualMap = visualMap;
86
- option.title = {
87
- ...option.title,
88
- text: title,
89
- };
90
-
91
- // Set the initial option
92
- myChart.setOption(option);
93
-
94
- let zoomTimeout;
95
- const zoom_action = () => {
96
- clearTimeout(zoomTimeout);
97
- zoomTimeout = setTimeout(async () => {
98
- await onDataZoom(
99
- props,
100
- sharedData,
101
- fetched_dat,
102
- myChart,
103
- option,
104
- );
105
- }, 500);
106
- };
107
-
108
- myChart.on('dataZoom', zoom_action);
109
-
110
- setLoading({ active: false, message: null });
111
-
112
- let bbox = outputAxisValues(myChart);
113
- option.xAxis.min = option.xAxis.min ?? bbox.xMin;
114
- option.xAxis.max = option.xAxis.max ?? bbox.xMax;
115
- option.yAxis.min = option.yAxis.min ?? bbox.yMin;
116
- option.yAxis.max = option.yAxis.max ?? bbox.yMax;
117
-
118
- // Cleanup event listeners on component unmount
119
- return () => {
120
- myChart.off('dataZoom', zoom_action);
121
- myChart.dispose();
122
- };
123
- } catch (error) {
124
- setLoading({ active: true, message: error.message });
125
- }
126
- };
127
-
128
- // Execute the updatePlot function
129
- updatePlot();
130
-
131
- // Observe changes to the size of the chart container
132
- const resizeObserver = new ResizeObserver((entries) => {
133
- for (let entry of entries) {
134
- if (entry.contentRect.width && entry.contentRect.height) {
135
- updatePlot();
136
- resizeObserver.disconnect();
137
- }
138
- }
139
- });
140
-
141
- if (chartRef.current) {
142
- resizeObserver.observe(chartRef.current);
143
- }
144
-
145
- // Cleanup function
146
- return () => {
147
- resizeObserver.disconnect();
148
- };
149
- }, [props, sharedData]);
150
-
151
- return (
152
- <div
153
- id={props.id}
154
- style={{ ...style, position: 'relative' }}>
155
- {loading.active && (
156
- <Loading
157
- message={loading.message}
158
- style={{ marginTop: '10px' }}
159
- />
160
- )}
161
- <div
162
- ref={chartRef}
163
- style={{
164
- opacity: loading.active ? 0 : 1,
165
- width: props.config?.size?.width || '100%',
166
- height: props.config?.size?.height || '100%',
167
- }}
168
- />
169
- </div>
170
- );
171
- }
172
-
173
- export default ScatterBio;
1
+ /*
2
+ * @Author : Lihao leolihao@arizona.edu
3
+ * @Date : 2023-11-06 17:23:59
4
+ * @FilePath : /visualifyjs/src/core/components/scatterL.js
5
+ * @Description :
6
+ * Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
7
+ */
8
+ import React, { useEffect, useRef, useState } from 'react';
9
+ import { useAppContext } from '../appContext';
10
+ import Loading from '../pages/loading';
11
+ import {
12
+ initChart,
13
+ handleChartForSharedDataChange,
14
+ } from '../modules/echartsUtils';
15
+ import {
16
+ parseConfig,
17
+ validateConfig,
18
+ handleAPI,
19
+ handleSimplyLoad,
20
+ onDataZoom,
21
+ parseData,
22
+ outputAxisValues,
23
+ } from './parser.scatterBio';
24
+
25
+ function ScatterBio({ props, style }) {
26
+ const chartRef = useRef(null);
27
+ const { sharedData } = useAppContext();
28
+ const [loading, setLoading] = useState({ active: true, message: null });
29
+
30
+ // Store the previous sharedData value using a ref
31
+ const previousSharedDataRef = useRef(null);
32
+
33
+ useEffect(() => {
34
+ let option = parseConfig(props);
35
+ console.log('option: ', option);
36
+ let fetched_dat = null;
37
+
38
+ // Check if the sharedData has changed
39
+ handleChartForSharedDataChange(
40
+ chartRef,
41
+ sharedData,
42
+ previousSharedDataRef,
43
+ () => {
44
+ option.xAxis.min = props?.echart?.xAxis?.min;
45
+ option.xAxis.max = props?.echart?.xAxis?.max;
46
+ option.yAxis.min = props?.echart?.yAxis?.min;
47
+ option.yAxis.max = props?.echart?.yAxis?.max;
48
+ },
49
+ );
50
+
51
+ // Simulate fetching data asynchronously (replace with your data fetching logic)
52
+ const updatePlot = async () => {
53
+ try {
54
+ setLoading({ active: true, message: null });
55
+ validateConfig(props.config);
56
+ const myChart = initChart(chartRef, option);
57
+ if (props.config.simpleload)
58
+ handleSimplyLoad(props.config.simpleload);
59
+ else {
60
+ const ibox = props.config?.ibox ?? {
61
+ xMin: -9999,
62
+ yMin: -9999,
63
+ xMax: 9999,
64
+ yMax: 9999,
65
+ };
66
+ fetched_dat = await handleAPI(
67
+ props.config,
68
+ sharedData,
69
+ ibox,
70
+ );
71
+ console.log(fetched_dat, 'fetched_dat');
72
+ }
73
+ var { series, legend, visualMap, title } = parseData(
74
+ fetched_dat,
75
+ props.config,
76
+ sharedData,
77
+ );
78
+ // Chart options
79
+ option.series = props?.echart?.series ?? series;
80
+ option.legend = {
81
+ ...option.legend,
82
+ ...legend,
83
+ };
84
+
85
+ option.visualMap = visualMap;
86
+ option.title = {
87
+ ...option.title,
88
+ text: title,
89
+ };
90
+
91
+ // Set the initial option
92
+ myChart.setOption(option);
93
+
94
+ let zoomTimeout;
95
+ const zoom_action = () => {
96
+ clearTimeout(zoomTimeout);
97
+ zoomTimeout = setTimeout(async () => {
98
+ await onDataZoom(
99
+ props,
100
+ sharedData,
101
+ fetched_dat,
102
+ myChart,
103
+ option,
104
+ );
105
+ }, 500);
106
+ };
107
+
108
+ myChart.on('dataZoom', zoom_action);
109
+
110
+ setLoading({ active: false, message: null });
111
+
112
+ let bbox = outputAxisValues(myChart);
113
+ option.xAxis.min = option.xAxis.min ?? bbox.xMin;
114
+ option.xAxis.max = option.xAxis.max ?? bbox.xMax;
115
+ option.yAxis.min = option.yAxis.min ?? bbox.yMin;
116
+ option.yAxis.max = option.yAxis.max ?? bbox.yMax;
117
+
118
+ // Cleanup event listeners on component unmount
119
+ return () => {
120
+ myChart.off('dataZoom', zoom_action);
121
+ myChart.dispose();
122
+ };
123
+ } catch (error) {
124
+ setLoading({ active: true, message: error.message });
125
+ }
126
+ };
127
+
128
+ // Execute the updatePlot function
129
+ updatePlot();
130
+
131
+ // Observe changes to the size of the chart container
132
+ const resizeObserver = new ResizeObserver((entries) => {
133
+ for (let entry of entries) {
134
+ if (entry.contentRect.width && entry.contentRect.height) {
135
+ updatePlot();
136
+ resizeObserver.disconnect();
137
+ }
138
+ }
139
+ });
140
+
141
+ if (chartRef.current) {
142
+ resizeObserver.observe(chartRef.current);
143
+ }
144
+
145
+ // Cleanup function
146
+ return () => {
147
+ resizeObserver.disconnect();
148
+ };
149
+ }, [props, sharedData]);
150
+
151
+ return (
152
+ <div
153
+ id={props.id}
154
+ style={{ ...style, position: 'relative' }}>
155
+ {loading.active && (
156
+ <Loading
157
+ message={loading.message}
158
+ style={{ marginTop: '10px' }}
159
+ />
160
+ )}
161
+ <div
162
+ ref={chartRef}
163
+ style={{
164
+ opacity: loading.active ? 0 : 1,
165
+ width: props.config?.size?.width || '100%',
166
+ height: props.config?.size?.height || '100%',
167
+ }}
168
+ />
169
+ </div>
170
+ );
171
+ }
172
+
173
+ export default ScatterBio;