@oliasoft-open-source/charts-library 2.1.0 → 2.1.2
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/.storybook/main.js +18 -22
- package/.storybook/preview.js +37 -0
- package/.storybook/storybook.less +8 -0
- package/package.json +2 -1
- package/src/components/bar-chart/bar-chart-prop-types.js +7 -0
- package/src/components/bar-chart/bar-chart.jsx +7 -2
- package/src/components/bar-chart/{basic.stories.jsx → bar-chart.stories.jsx} +108 -371
- package/src/components/line-chart/Controls/Controls.jsx +2 -0
- package/src/components/line-chart/Controls/Layer.jsx +52 -49
- package/src/components/line-chart/line-chart-prop-types.js +10 -0
- package/src/components/line-chart/line-chart.jsx +91 -10
- package/src/components/line-chart/line-chart.module.less +6 -0
- package/src/components/line-chart/line-chart.stories.jsx +393 -0
- package/src/components/line-chart/state/line-chart-reducer.js +26 -15
- package/src/components/pie-chart/pie-chart.stories.jsx +234 -0
- package/src/components/scatter-chart/{scatter.stories.jsx → scatter-chart.stories.jsx} +25 -79
- package/src/helpers/chart-consts.js +2 -0
- package/src/helpers/chart-interface.ts +9 -0
- package/src/helpers/chart-utils.js +24 -4
- package/src/helpers/get-custom-legend-plugin-example.js +81 -0
- package/src/components/bar-chart/charts.stories.jsx +0 -119
- package/src/components/line-chart/basic.stories.jsx +0 -735
- package/src/components/line-chart/charts.stories.jsx +0 -264
- package/src/components/line-chart/stories/shapes/cubes.stories.jsx +0 -326
- package/src/components/line-chart/stories/shapes/pyramid.stories.jsx +0 -189
- package/src/components/line-chart/stories/shapes/round.stories.jsx +0 -339
- package/src/components/line-chart/stories/shapes/triangle.stories.jsx +0 -166
- package/src/components/pie-chart/basic.stories.jsx +0 -390
- package/src/components/pie-chart/charts.stories.jsx +0 -66
package/.storybook/main.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const { merge } = require('webpack-merge');
|
|
1
2
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
2
3
|
const getRules = require('../webpack/webpack.common.rules.js');
|
|
3
4
|
const resolve = require('../webpack/webpack.resolve.js').resolve;
|
|
@@ -5,36 +6,31 @@ const resolve = require('../webpack/webpack.resolve.js').resolve;
|
|
|
5
6
|
module.exports = {
|
|
6
7
|
stories: ['../src/components/**/*.stories.@(js|jsx|mdx)'],
|
|
7
8
|
addons: [
|
|
8
|
-
'@storybook/addon-actions
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
'@storybook/addon-actions',
|
|
10
|
+
{
|
|
11
|
+
name: '@storybook/addon-docs',
|
|
12
|
+
options: {
|
|
13
|
+
sourceLoaderOptions: {
|
|
14
|
+
injectStoryParameters: false,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
'storybook-dark-mode',
|
|
12
19
|
],
|
|
20
|
+
features: {
|
|
21
|
+
modernInlineRender: true,
|
|
22
|
+
},
|
|
13
23
|
core: {
|
|
14
24
|
builder: 'webpack5',
|
|
15
25
|
},
|
|
16
|
-
webpackFinal: (config) =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
config.module.rules = []; //delete default storybook rules because they conflict (postcss causes a conflict)
|
|
20
|
-
|
|
21
|
-
rules.forEach((r) => {
|
|
22
|
-
config.module.rules.push(r);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
return {
|
|
26
|
-
...config,
|
|
27
|
-
module: {
|
|
28
|
-
...config.module,
|
|
29
|
-
rules: [...rules], //attach our own rules from the application webpack config
|
|
30
|
-
},
|
|
26
|
+
webpackFinal: (config) =>
|
|
27
|
+
merge(config, {
|
|
28
|
+
module: { rules: getRules('development') },
|
|
31
29
|
plugins: [
|
|
32
|
-
...config.plugins,
|
|
33
30
|
new MiniCssExtractPlugin({
|
|
34
31
|
filename: '[name].css',
|
|
35
32
|
}),
|
|
36
33
|
],
|
|
37
34
|
resolve,
|
|
38
|
-
}
|
|
39
|
-
},
|
|
35
|
+
}),
|
|
40
36
|
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useDarkMode } from 'storybook-dark-mode';
|
|
3
|
+
import { themes } from '@storybook/theming';
|
|
4
|
+
import { DocsContainer } from '@storybook/addon-docs';
|
|
5
|
+
import '@oliasoft-open-source/react-ui-library/src/style/global.less';
|
|
6
|
+
import './storybook.less';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Dark mode for GUI Library components (i.e. Controls)
|
|
10
|
+
*/
|
|
11
|
+
export const decorators = [
|
|
12
|
+
(Story) => {
|
|
13
|
+
document.documentElement.setAttribute(
|
|
14
|
+
'data-theme',
|
|
15
|
+
useDarkMode() ? 'dark' : 'default',
|
|
16
|
+
);
|
|
17
|
+
return <Story />;
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
export const parameters = {
|
|
22
|
+
/**
|
|
23
|
+
* Fix for dark mode docs from https://github.com/hipstersmoothie/storybook-dark-mode/issues/180
|
|
24
|
+
*/
|
|
25
|
+
docs: {
|
|
26
|
+
container: (props) => {
|
|
27
|
+
const isDark = useDarkMode();
|
|
28
|
+
const { id: storyId, storyById } = props.context;
|
|
29
|
+
const {
|
|
30
|
+
parameters: { docs = {} },
|
|
31
|
+
} = storyById(storyId);
|
|
32
|
+
docs.theme = isDark ? themes.dark : themes.light;
|
|
33
|
+
|
|
34
|
+
return React.createElement(DocsContainer, props);
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oliasoft-open-source/charts-library",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "React Chart Library (based on Chart.js and react-chart-js-2)",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
"prettier": "2.7.1",
|
|
70
70
|
"react": "^17.0.2",
|
|
71
71
|
"react-dom": "^17.0.2",
|
|
72
|
+
"storybook-dark-mode": "^1.1.0",
|
|
72
73
|
"terser-webpack-plugin": "^5.3.6",
|
|
73
74
|
"webpack": "^5.74.0",
|
|
74
75
|
"webpack-cli": "^4.10.0",
|
|
@@ -71,6 +71,10 @@ export const BarChartPropTypes = {
|
|
|
71
71
|
display: PropTypes.bool,
|
|
72
72
|
position: PropTypes.oneOf(['top', 'bottom', 'right']),
|
|
73
73
|
align: PropTypes.oneOf(['start', 'center', 'end']),
|
|
74
|
+
customLegend: PropTypes.shape({
|
|
75
|
+
customLegendPlugin: PropTypes.object,
|
|
76
|
+
customLegendContainerID: PropTypes.string,
|
|
77
|
+
}),
|
|
74
78
|
}),
|
|
75
79
|
chartOptions: PropTypes.shape({
|
|
76
80
|
enableZoom: PropTypes.bool,
|
|
@@ -96,6 +100,8 @@ export const getDefaultProps = (props) => {
|
|
|
96
100
|
props.chart.options.graph = props.chart.options.graph || {};
|
|
97
101
|
props.chart.options.annotations = props.chart.options.annotations || {};
|
|
98
102
|
props.chart.options.legend = props.chart.options.legend || {};
|
|
103
|
+
props.chart.options.legend.customLegend = props.chart.options.legend
|
|
104
|
+
.customLegend || { customLegendPlugin: null, customLegendContainerID: '' };
|
|
99
105
|
props.chart.options.chartOptions = props.chart.options.chartOptions || {};
|
|
100
106
|
props.chart.options.interactions = props.chart.options.interactions || {};
|
|
101
107
|
// Set defaults for missing properties
|
|
@@ -165,6 +171,7 @@ export const getDefaultProps = (props) => {
|
|
|
165
171
|
: true,
|
|
166
172
|
position: props.chart.options.legend.position || 'bottom',
|
|
167
173
|
align: props.chart.options.legend.align || 'center',
|
|
174
|
+
customLegend: props.chart.options.legend.customLegend,
|
|
168
175
|
},
|
|
169
176
|
chartOptions: {
|
|
170
177
|
enableZoom: props.chart.options.chartOptions.enableZoom || false,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useRef, useState } from 'react';
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
BarElement,
|
|
4
4
|
CategoryScale,
|
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
ANIMATION_DURATION,
|
|
37
37
|
AUTO,
|
|
38
38
|
COLORS,
|
|
39
|
+
CUSTOM_LEGEND_PLUGIN_NAME,
|
|
39
40
|
DARK_MODE_COLORS,
|
|
40
41
|
DEFAULT_COLOR,
|
|
41
42
|
DEFAULT_DARK_MODE_BORDER_COLOR,
|
|
@@ -234,9 +235,13 @@ const BarChart = (props) => {
|
|
|
234
235
|
}),
|
|
235
236
|
tooltip: getBarChartToolTips(options),
|
|
236
237
|
legend: getLegend(options, legendClick),
|
|
238
|
+
[CUSTOM_LEGEND_PLUGIN_NAME]: options.legend.customLegend
|
|
239
|
+
.customLegendPlugin && {
|
|
240
|
+
containerID: options.legend.customLegend.customLegendContainerID,
|
|
241
|
+
},
|
|
237
242
|
},
|
|
238
243
|
}}
|
|
239
|
-
plugins={getPlugins(graph)}
|
|
244
|
+
plugins={getPlugins(graph, options.legend)}
|
|
240
245
|
/>
|
|
241
246
|
</div>
|
|
242
247
|
);
|