@semcore/d3-chart 2.0.10 → 2.2.1
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/CHANGELOG.md +27 -0
- package/README.md +113 -0
- package/lib/cjs/Area.js +70 -29
- package/lib/cjs/Area.js.map +1 -1
- package/lib/cjs/Bar.js +6 -4
- package/lib/cjs/Bar.js.map +1 -1
- package/lib/cjs/Bubble.js +1 -0
- package/lib/cjs/Bubble.js.map +1 -1
- package/lib/cjs/Donut.js +120 -44
- package/lib/cjs/Donut.js.map +1 -1
- package/lib/cjs/Dots.js +24 -25
- package/lib/cjs/Dots.js.map +1 -1
- package/lib/cjs/GroupBar.js +7 -7
- package/lib/cjs/GroupBar.js.map +1 -1
- package/lib/cjs/Line.js +4 -2
- package/lib/cjs/Line.js.map +1 -1
- package/lib/cjs/ReferenceLine.js +258 -0
- package/lib/cjs/ReferenceLine.js.map +1 -0
- package/lib/cjs/ResponsiveContainer.js +1 -1
- package/lib/cjs/ResponsiveContainer.js.map +1 -1
- package/lib/cjs/ScatterPlot.js +1 -0
- package/lib/cjs/ScatterPlot.js.map +1 -1
- package/lib/cjs/StackBar.js +6 -6
- package/lib/cjs/StackedArea.js +7 -7
- package/lib/cjs/Tooltip.js +3 -2
- package/lib/cjs/Tooltip.js.map +1 -1
- package/lib/cjs/createElement.js +4 -3
- package/lib/cjs/createElement.js.map +1 -1
- package/lib/cjs/index.js +8 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/style/dot.shadow.css +10 -5
- package/lib/cjs/style/reference-line.shadow.css +37 -0
- package/lib/cjs/types/Area.d.ts +1 -0
- package/lib/cjs/types/Bar.d.ts +4 -0
- package/lib/cjs/types/Bubble.d.ts +6 -1
- package/lib/cjs/types/Donut.d.ts +4 -0
- package/lib/cjs/types/ReferenceLine.d.ts +31 -0
- package/lib/cjs/types/Tooltip.d.ts +5 -3
- package/lib/cjs/types/index.d.ts +3 -0
- package/lib/es6/Area.js +68 -27
- package/lib/es6/Area.js.map +1 -1
- package/lib/es6/Bar.js +6 -4
- package/lib/es6/Bar.js.map +1 -1
- package/lib/es6/Bubble.js +1 -0
- package/lib/es6/Bubble.js.map +1 -1
- package/lib/es6/Donut.js +114 -44
- package/lib/es6/Donut.js.map +1 -1
- package/lib/es6/Dots.js +24 -23
- package/lib/es6/Dots.js.map +1 -1
- package/lib/es6/GroupBar.js +7 -7
- package/lib/es6/GroupBar.js.map +1 -1
- package/lib/es6/Line.js +4 -2
- package/lib/es6/Line.js.map +1 -1
- package/lib/es6/ReferenceLine.js +244 -0
- package/lib/es6/ReferenceLine.js.map +1 -0
- package/lib/es6/ResponsiveContainer.js +1 -1
- package/lib/es6/ResponsiveContainer.js.map +1 -1
- package/lib/es6/ScatterPlot.js +1 -0
- package/lib/es6/ScatterPlot.js.map +1 -1
- package/lib/es6/StackBar.js +6 -6
- package/lib/es6/StackedArea.js +7 -7
- package/lib/es6/Tooltip.js +3 -2
- package/lib/es6/Tooltip.js.map +1 -1
- package/lib/es6/createElement.js +3 -3
- package/lib/es6/createElement.js.map +1 -1
- package/lib/es6/index.js +1 -0
- package/lib/es6/index.js.map +1 -1
- package/lib/es6/style/dot.shadow.css +10 -5
- package/lib/es6/style/reference-line.shadow.css +37 -0
- package/lib/es6/types/Area.d.ts +1 -0
- package/lib/es6/types/Bar.d.ts +4 -0
- package/lib/es6/types/Bubble.d.ts +6 -1
- package/lib/es6/types/Donut.d.ts +4 -0
- package/lib/es6/types/ReferenceLine.d.ts +31 -0
- package/lib/es6/types/Tooltip.d.ts +5 -3
- package/lib/es6/types/index.d.ts +3 -0
- package/lib/types/Area.d.ts +1 -0
- package/lib/types/Bar.d.ts +4 -0
- package/lib/types/Bubble.d.ts +6 -1
- package/lib/types/Donut.d.ts +4 -0
- package/lib/types/ReferenceLine.d.ts +31 -0
- package/lib/types/Tooltip.d.ts +5 -3
- package/lib/types/index.d.ts +3 -0
- package/package.json +12 -12
- package/src/Area.jsx +41 -8
- package/src/Bar.jsx +6 -5
- package/src/Bubble.jsx +1 -0
- package/src/Donut.jsx +96 -29
- package/src/Dots.jsx +11 -14
- package/src/GroupBar.jsx +1 -1
- package/src/Line.jsx +2 -1
- package/src/ReferenceLine.jsx +146 -0
- package/src/ResponsiveContainer.jsx +1 -1
- package/src/ScatterPlot.jsx +1 -0
- package/src/Tooltip.jsx +2 -3
- package/src/createElement.jsx +4 -2
- package/src/index.js +1 -0
- package/src/style/dot.shadow.css +10 -5
- package/src/style/reference-line.shadow.css +37 -0
- package/src/types/Area.d.ts +1 -0
- package/src/types/Bar.d.ts +4 -0
- package/src/types/Bubble.d.ts +6 -1
- package/src/types/Donut.d.ts +4 -0
- package/src/types/ReferenceLine.d.ts +31 -0
- package/src/types/Tooltip.d.ts +5 -3
- package/src/types/index.d.ts +3 -0
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
@import '@semcore/utils/style/var.css';
|
|
2
2
|
@import '@semcore/d3-chart/src/style/var.css';
|
|
3
3
|
|
|
4
|
+
SDots {
|
|
5
|
+
& SDot {
|
|
6
|
+
transition-duration: var(--duration);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
4
10
|
SDot {
|
|
5
11
|
stroke-width: 2px;
|
|
6
12
|
stroke: #fff;
|
|
7
13
|
r: 6px;
|
|
8
14
|
fill: var(--blue-03);
|
|
9
15
|
transition-property: cx, cy;
|
|
10
|
-
transition-duration: var(--duration);
|
|
11
16
|
transition-timing-function: ease-in-out;
|
|
12
17
|
}
|
|
13
18
|
|
|
14
|
-
SDot[color] {
|
|
15
|
-
fill: var(--color);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
19
|
SDot[hide] {
|
|
19
20
|
display: none;
|
|
20
21
|
}
|
|
@@ -22,3 +23,7 @@ SDot[hide] {
|
|
|
22
23
|
SDot[active] {
|
|
23
24
|
r: 8px;
|
|
24
25
|
}
|
|
26
|
+
|
|
27
|
+
SDot[color] {
|
|
28
|
+
fill: var(--color);
|
|
29
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
@import '@semcore/utils/style/var.css';
|
|
2
|
+
|
|
3
|
+
SReferenceLine {
|
|
4
|
+
fill: none;
|
|
5
|
+
stroke: var(--gray-300);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
STitle {
|
|
9
|
+
font-size: var(--fs-100);
|
|
10
|
+
fill: var(--gray-500);
|
|
11
|
+
transform-origin: var(--transform-origin);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
STitle[position='top'] {
|
|
15
|
+
text-anchor: middle;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
STitle[position='bottom'] {
|
|
19
|
+
text-anchor: middle;
|
|
20
|
+
alignment-baseline: hanging;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
STitle[position='right'] {
|
|
24
|
+
transform: rotate(-90deg);
|
|
25
|
+
alignment-baseline: middle;
|
|
26
|
+
text-anchor: middle;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
STitle[position='left'] {
|
|
30
|
+
transform: rotate(-90deg);
|
|
31
|
+
text-anchor: middle;
|
|
32
|
+
alignment-baseline: middle;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
SBackground {
|
|
36
|
+
fill: color-mod(var(--gray-200) a(20%));
|
|
37
|
+
}
|
package/lib/es6/types/Area.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export interface IAreaNullProps extends IContext {
|
|
|
42
42
|
declare const Area: (<T>(props: CProps<IAreaProps & T>) => ReturnEl) & {
|
|
43
43
|
Dots: <T>(props: CProps<IAreaDotsProps & T, IAreaDotsContext>) => ReturnEl;
|
|
44
44
|
Null: <T>(props: CProps<IAreaNullProps & T>) => ReturnEl;
|
|
45
|
+
Line: <T>(props: CProps<IContext & T>) => ReturnEl;
|
|
45
46
|
};
|
|
46
47
|
|
|
47
48
|
export default Area;
|
package/lib/es6/types/Bar.d.ts
CHANGED
|
@@ -22,6 +22,11 @@ export interface IBubbleProps extends IContext {
|
|
|
22
22
|
duration?: number;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
export interface IBubbleContext {
|
|
26
|
+
/** Index element of data */
|
|
27
|
+
index: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
declare const Bubble: <T>(props: CProps<IBubbleProps & T, IBubbleContext>) => ReturnEl;
|
|
26
31
|
|
|
27
32
|
export default Bubble;
|
package/lib/es6/types/Donut.d.ts
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CProps, ReturnEl } from '@semcore/core';
|
|
2
|
+
import IContext from './context';
|
|
3
|
+
|
|
4
|
+
export interface IReferenceLineProps extends IContext {
|
|
5
|
+
/** The position of the title relative reference line
|
|
6
|
+
* @default 'left' */
|
|
7
|
+
position?: 'top' | 'right' | 'bottom' | 'left';
|
|
8
|
+
/** Value element of data */
|
|
9
|
+
value: any;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface IReferenceLineTitleProps extends IContext {
|
|
13
|
+
/** The position of the axis relative reference line */
|
|
14
|
+
position?: 'top' | 'right' | 'bottom' | 'left';
|
|
15
|
+
/** Value element of data */
|
|
16
|
+
value: any;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface IReferenceLineBackgroundProps extends IContext {
|
|
20
|
+
/** The position of the axis relative reference line */
|
|
21
|
+
position?: 'top' | 'right' | 'bottom' | 'left';
|
|
22
|
+
/** Value element of data */
|
|
23
|
+
value: any;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare const ReferenceLine: (<T>(props: CProps<IReferenceLineProps & T>) => ReturnEl) & {
|
|
27
|
+
Title: <T>(props: CProps<IReferenceLineTitleProps & T>) => ReturnEl;
|
|
28
|
+
Background: <T>(props: CProps<IReferenceLineBackgroundProps & T>) => ReturnEl;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default ReferenceLine;
|
|
@@ -4,14 +4,14 @@ import { CProps, PropGetterFn, ReturnEl } from '@semcore/core';
|
|
|
4
4
|
import { IBoxProps } from '@semcore/flex-box';
|
|
5
5
|
import IContext from './context';
|
|
6
6
|
|
|
7
|
-
export interface
|
|
7
|
+
export interface ITooltipChartProps extends IPopperProps, IPopperTriggerProps, IContext {
|
|
8
8
|
/** Field from data for XAxis */
|
|
9
9
|
x?: string;
|
|
10
10
|
/** Field from data for YAxis */
|
|
11
11
|
y?: string;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
export interface
|
|
14
|
+
export interface ITooltipChartContext {
|
|
15
15
|
getTriggerProps: PropGetterFn;
|
|
16
16
|
getPopperProps: PropGetterFn;
|
|
17
17
|
/** Index active value for Axis x */
|
|
@@ -20,7 +20,9 @@ export interface ITooltipContext {
|
|
|
20
20
|
yIndex: number | null;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
declare const Tooltip: (<T>(
|
|
23
|
+
declare const Tooltip: (<T>(
|
|
24
|
+
props: CProps<ITooltipChartProps & T, ITooltipChartContext>,
|
|
25
|
+
) => ReturnEl) & {
|
|
24
26
|
Trigger: <T>(props: CProps<ComponentProps<typeof Popper.Trigger> & T>) => ReturnEl;
|
|
25
27
|
Popper: <T>(props: CProps<ComponentProps<typeof Popper.Popper> & T>) => ReturnEl;
|
|
26
28
|
Title: <T>(props: CProps<IBoxProps & T>) => ReturnEl;
|
package/lib/es6/types/index.d.ts
CHANGED
package/lib/types/Area.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export interface IAreaNullProps extends IContext {
|
|
|
42
42
|
declare const Area: (<T>(props: CProps<IAreaProps & T>) => ReturnEl) & {
|
|
43
43
|
Dots: <T>(props: CProps<IAreaDotsProps & T, IAreaDotsContext>) => ReturnEl;
|
|
44
44
|
Null: <T>(props: CProps<IAreaNullProps & T>) => ReturnEl;
|
|
45
|
+
Line: <T>(props: CProps<IContext & T>) => ReturnEl;
|
|
45
46
|
};
|
|
46
47
|
|
|
47
48
|
export default Area;
|
package/lib/types/Bar.d.ts
CHANGED
package/lib/types/Bubble.d.ts
CHANGED
|
@@ -22,6 +22,11 @@ export interface IBubbleProps extends IContext {
|
|
|
22
22
|
duration?: number;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
export interface IBubbleContext {
|
|
26
|
+
/** Index element of data */
|
|
27
|
+
index: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
declare const Bubble: <T>(props: CProps<IBubbleProps & T, IBubbleContext>) => ReturnEl;
|
|
26
31
|
|
|
27
32
|
export default Bubble;
|
package/lib/types/Donut.d.ts
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CProps, ReturnEl } from '@semcore/core';
|
|
2
|
+
import IContext from './context';
|
|
3
|
+
|
|
4
|
+
export interface IReferenceLineProps extends IContext {
|
|
5
|
+
/** The position of the title relative reference line
|
|
6
|
+
* @default 'left' */
|
|
7
|
+
position?: 'top' | 'right' | 'bottom' | 'left';
|
|
8
|
+
/** Value element of data */
|
|
9
|
+
value: any;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface IReferenceLineTitleProps extends IContext {
|
|
13
|
+
/** The position of the axis relative reference line */
|
|
14
|
+
position?: 'top' | 'right' | 'bottom' | 'left';
|
|
15
|
+
/** Value element of data */
|
|
16
|
+
value: any;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface IReferenceLineBackgroundProps extends IContext {
|
|
20
|
+
/** The position of the axis relative reference line */
|
|
21
|
+
position?: 'top' | 'right' | 'bottom' | 'left';
|
|
22
|
+
/** Value element of data */
|
|
23
|
+
value: any;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare const ReferenceLine: (<T>(props: CProps<IReferenceLineProps & T>) => ReturnEl) & {
|
|
27
|
+
Title: <T>(props: CProps<IReferenceLineTitleProps & T>) => ReturnEl;
|
|
28
|
+
Background: <T>(props: CProps<IReferenceLineBackgroundProps & T>) => ReturnEl;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default ReferenceLine;
|
package/lib/types/Tooltip.d.ts
CHANGED
|
@@ -4,14 +4,14 @@ import { CProps, PropGetterFn, ReturnEl } from '@semcore/core';
|
|
|
4
4
|
import { IBoxProps } from '@semcore/flex-box';
|
|
5
5
|
import IContext from './context';
|
|
6
6
|
|
|
7
|
-
export interface
|
|
7
|
+
export interface ITooltipChartProps extends IPopperProps, IPopperTriggerProps, IContext {
|
|
8
8
|
/** Field from data for XAxis */
|
|
9
9
|
x?: string;
|
|
10
10
|
/** Field from data for YAxis */
|
|
11
11
|
y?: string;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
export interface
|
|
14
|
+
export interface ITooltipChartContext {
|
|
15
15
|
getTriggerProps: PropGetterFn;
|
|
16
16
|
getPopperProps: PropGetterFn;
|
|
17
17
|
/** Index active value for Axis x */
|
|
@@ -20,7 +20,9 @@ export interface ITooltipContext {
|
|
|
20
20
|
yIndex: number | null;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
declare const Tooltip: (<T>(
|
|
23
|
+
declare const Tooltip: (<T>(
|
|
24
|
+
props: CProps<ITooltipChartProps & T, ITooltipChartContext>,
|
|
25
|
+
) => ReturnEl) & {
|
|
24
26
|
Trigger: <T>(props: CProps<ComponentProps<typeof Popper.Trigger> & T>) => ReturnEl;
|
|
25
27
|
Popper: <T>(props: CProps<ComponentProps<typeof Popper.Popper> & T>) => ReturnEl;
|
|
26
28
|
Title: <T>(props: CProps<IBoxProps & T>) => ReturnEl;
|
package/lib/types/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semcore/d3-chart",
|
|
3
3
|
"description": "SEMRush D3 Chart Component",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.1",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/es6/index.js",
|
|
7
7
|
"typings": "lib/types/index.d.ts",
|
|
8
8
|
"sideEffects": false,
|
|
9
|
-
"author": "
|
|
9
|
+
"author": "UI-kit team <ui-kit-team@semrush.com>",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "build --source=js,ts",
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
"@semcore/utils": "^3.15",
|
|
20
20
|
"@upsetjs/venn.js": "1.4.1",
|
|
21
21
|
"d3-array": "3.1.6",
|
|
22
|
-
"d3-shape": "3.1.0",
|
|
23
|
-
"d3-scale": "3.3.0",
|
|
24
22
|
"d3-interpolate": "3.0.1",
|
|
23
|
+
"d3-scale": "3.3.0",
|
|
24
|
+
"d3-shape": "3.1.0",
|
|
25
25
|
"d3-transition": "3.0.1",
|
|
26
|
-
"
|
|
27
|
-
"
|
|
26
|
+
"hoist-non-react-statics": "3.3.2",
|
|
27
|
+
"resize-observer-polyfill": "1.5.1"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
30
|
"@semcore/core": "^1.11",
|
|
@@ -39,14 +39,14 @@
|
|
|
39
39
|
"directory": "semcore/d3-chart"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
+
"@semcore/button": "*",
|
|
43
|
+
"@semcore/checkbox": "*",
|
|
44
|
+
"@semcore/dropdown-menu": "*",
|
|
45
|
+
"@semcore/icon": "*",
|
|
42
46
|
"@semcore/jest-preset-ui": "1.0.0",
|
|
47
|
+
"@semcore/typography": "*",
|
|
43
48
|
"@types/d3-array": "^3.0.2",
|
|
44
49
|
"@types/d3-scale": "^4.0.2",
|
|
45
|
-
"@types/d3-transition": "^3.0.1"
|
|
46
|
-
"@semcore/typography": "*",
|
|
47
|
-
"@semcore/dropdown-menu": "*",
|
|
48
|
-
"@semcore/button": "*",
|
|
49
|
-
"@semcore/checkbox": "*",
|
|
50
|
-
"@semcore/icon": "*"
|
|
50
|
+
"@types/d3-transition": "^3.0.1"
|
|
51
51
|
}
|
|
52
52
|
}
|
package/src/Area.jsx
CHANGED
|
@@ -6,6 +6,7 @@ import createElement from './createElement';
|
|
|
6
6
|
import { definedData, scaleOfBandwidth, getNullData, definedNullData } from './utils';
|
|
7
7
|
import ClipPath from './ClipPath';
|
|
8
8
|
import uniqueIDEnhancement from '@semcore/utils/lib/uniqueID';
|
|
9
|
+
import findComponent from '@semcore/utils/lib/findComponent';
|
|
9
10
|
|
|
10
11
|
import style from './style/area.shadow.css';
|
|
11
12
|
|
|
@@ -55,18 +56,34 @@ class AreaRoot extends Component {
|
|
|
55
56
|
};
|
|
56
57
|
}
|
|
57
58
|
|
|
59
|
+
getLineProps() {
|
|
60
|
+
const { duration, color, data, d3Line, uid } = this.asProps;
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
uid,
|
|
64
|
+
data,
|
|
65
|
+
d3: d3Line,
|
|
66
|
+
color,
|
|
67
|
+
duration,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
58
71
|
render() {
|
|
59
72
|
const SArea = this.Element;
|
|
60
73
|
const SAreaLine = 'path';
|
|
61
|
-
const { styles, hide, d3, d3Line, data, color, uid, size, duration } = this.asProps;
|
|
74
|
+
const { styles, hide, d3, d3Line, data, color, uid, size, duration, Children } = this.asProps;
|
|
75
|
+
const advanceMode = !!findComponent(Children, [Area.Line.displayName]);
|
|
76
|
+
|
|
62
77
|
return sstyled(styles)(
|
|
63
78
|
<>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
79
|
+
{!advanceMode && (
|
|
80
|
+
<SAreaLine
|
|
81
|
+
clipPath={`url(#${uid})`}
|
|
82
|
+
d={d3Line(data)}
|
|
83
|
+
color={color}
|
|
84
|
+
use:duration={`${duration}ms`}
|
|
85
|
+
/>
|
|
86
|
+
)}
|
|
70
87
|
<SArea
|
|
71
88
|
clipPath={`url(#${uid})`}
|
|
72
89
|
render="path"
|
|
@@ -93,12 +110,28 @@ class AreaRoot extends Component {
|
|
|
93
110
|
}
|
|
94
111
|
}
|
|
95
112
|
|
|
113
|
+
function Line(props) {
|
|
114
|
+
const { Element: SAreaLine, styles, d3, data, color, duration, uid } = props;
|
|
115
|
+
return sstyled(styles)(
|
|
116
|
+
<SAreaLine
|
|
117
|
+
render="path"
|
|
118
|
+
clipPath={`url(#${uid})`}
|
|
119
|
+
d={d3(data)}
|
|
120
|
+
color={color}
|
|
121
|
+
use:duration={`${duration}ms`}
|
|
122
|
+
/>,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
96
126
|
function Null(props) {
|
|
97
127
|
const { Element: SNull, styles, d3, data, hide, color } = props;
|
|
98
128
|
return sstyled(styles)(<SNull render="path" d={d3(data)} hide={hide} color={color} />);
|
|
99
129
|
}
|
|
100
130
|
|
|
101
|
-
|
|
131
|
+
const Area = createElement(AreaRoot, {
|
|
102
132
|
Dots,
|
|
103
133
|
Null,
|
|
134
|
+
Line,
|
|
104
135
|
});
|
|
136
|
+
|
|
137
|
+
export default Area;
|
package/src/Bar.jsx
CHANGED
|
@@ -17,6 +17,7 @@ class BarRoot extends Component {
|
|
|
17
17
|
offset: [0, 0],
|
|
18
18
|
duration: 500,
|
|
19
19
|
r: 2,
|
|
20
|
+
hMin: 4,
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
getBackgroundProps(props, index) {
|
|
@@ -58,15 +59,15 @@ class BarRoot extends Component {
|
|
|
58
59
|
duration,
|
|
59
60
|
uid,
|
|
60
61
|
r,
|
|
62
|
+
hMin,
|
|
61
63
|
width: widthProps,
|
|
62
64
|
} = this.asProps;
|
|
63
65
|
|
|
64
66
|
const [xScale, yScale] = scale;
|
|
65
|
-
const barY = yScale(Math.max(d[y0] ?? 0, d[y])) + offset[1];
|
|
67
|
+
const barY = yScale(Math.max(d[y0] ?? 0, d[y])) + offset[1] - (Object.is(d[y], 0) ? hMin : 0);
|
|
66
68
|
const barX = xScale(d[x]) + offset[0];
|
|
67
|
-
const height =
|
|
68
|
-
yScale(d[y]) - Math.min(yScale(yScale.domain()[0]), yScale(d[y0] ?? 0))
|
|
69
|
-
);
|
|
69
|
+
const height =
|
|
70
|
+
Math.abs(yScale(d[y]) - Math.min(yScale(yScale.domain()[0]), yScale(d[y0] ?? 0))) || hMin;
|
|
70
71
|
const width = widthProps || getBandwidth(xScale);
|
|
71
72
|
const dSvg = getRect({
|
|
72
73
|
x: barX,
|
|
@@ -74,7 +75,7 @@ class BarRoot extends Component {
|
|
|
74
75
|
width,
|
|
75
76
|
height,
|
|
76
77
|
radius: Array.isArray(r) ? r[i] : r,
|
|
77
|
-
position: d[y] > 0 ? 'top' : 'bottom',
|
|
78
|
+
position: d[y] > 0 || Object.is(d[y], 0) ? 'top' : 'bottom',
|
|
78
79
|
});
|
|
79
80
|
|
|
80
81
|
return sstyled(styles)(
|