@impulse-ui-native/charts 2.1.1 → 2.3.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/README.md +97 -6
- package/dist/components/bar-chart/bar-chart-body.d.mts +15 -0
- package/dist/components/bar-chart/bar-chart-body.js +50 -0
- package/dist/components/bar-chart/bar-chart-body.js.map +1 -0
- package/dist/components/bar-chart/bar-chart.d.mts +11 -0
- package/dist/components/bar-chart/bar-chart.js +21 -0
- package/dist/components/bar-chart/bar-chart.js.map +1 -0
- package/dist/components/bar-chart/index.d.mts +8 -0
- package/dist/components/bar-chart/index.js +5 -0
- package/dist/components/bar-chart/index.js.map +1 -0
- package/dist/components/chart-axes/chart-axes.d.mts +22 -0
- package/dist/components/chart-axes/chart-axes.js +64 -0
- package/dist/components/chart-axes/chart-axes.js.map +1 -0
- package/dist/components/chart-axes/index.d.mts +7 -0
- package/dist/components/chart-axes/index.js +5 -0
- package/dist/components/chart-axes/index.js.map +1 -0
- package/dist/components/index.d.mts +14 -2
- package/dist/components/index.js +9 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/line-chart/index.d.mts +7 -0
- package/dist/components/line-chart/index.js +5 -0
- package/dist/components/line-chart/index.js.map +1 -0
- package/dist/components/{line-chart-body.d.mts → line-chart/line-chart-body.d.mts} +3 -3
- package/dist/components/{line-chart-body.js → line-chart/line-chart-body.js} +5 -9
- package/dist/components/line-chart/line-chart-body.js.map +1 -0
- package/dist/components/{line-chart.d.mts → line-chart/line-chart.d.mts} +3 -3
- package/dist/components/{line-chart.js → line-chart/line-chart.js} +1 -1
- package/dist/components/line-chart/line-chart.js.map +1 -0
- package/dist/components/multi-bar-chart/index.d.mts +9 -0
- package/dist/components/multi-bar-chart/index.js +5 -0
- package/dist/components/multi-bar-chart/index.js.map +1 -0
- package/dist/components/multi-bar-chart/multi-bar-chart-body.d.mts +16 -0
- package/dist/components/multi-bar-chart/multi-bar-chart-body.js +72 -0
- package/dist/components/multi-bar-chart/multi-bar-chart-body.js.map +1 -0
- package/dist/components/multi-bar-chart/multi-bar-chart.d.mts +12 -0
- package/dist/components/multi-bar-chart/multi-bar-chart.js +21 -0
- package/dist/components/multi-bar-chart/multi-bar-chart.js.map +1 -0
- package/dist/components/multi-line-chart/index.d.mts +8 -0
- package/dist/components/multi-line-chart/index.js +5 -0
- package/dist/components/multi-line-chart/index.js.map +1 -0
- package/dist/components/{multi-line-chart-body.d.mts → multi-line-chart/multi-line-chart-body.d.mts} +4 -4
- package/dist/components/{multi-line-chart-body.js → multi-line-chart/multi-line-chart-body.js} +4 -7
- package/dist/components/multi-line-chart/multi-line-chart-body.js.map +1 -0
- package/dist/components/{multi-line-chart.d.mts → multi-line-chart/multi-line-chart.d.mts} +4 -4
- package/dist/components/{multi-line-chart.js → multi-line-chart/multi-line-chart.js} +1 -1
- package/dist/components/multi-line-chart/multi-line-chart.js.map +1 -0
- package/dist/components/multi-pie-chart/index.d.mts +7 -0
- package/dist/components/multi-pie-chart/index.js +5 -0
- package/dist/components/multi-pie-chart/index.js.map +1 -0
- package/dist/components/multi-pie-chart/multi-pie-chart-body.d.mts +13 -0
- package/dist/components/multi-pie-chart/multi-pie-chart-body.js +40 -0
- package/dist/components/multi-pie-chart/multi-pie-chart-body.js.map +1 -0
- package/dist/components/multi-pie-chart/multi-pie-chart.d.mts +10 -0
- package/dist/components/multi-pie-chart/multi-pie-chart.js +19 -0
- package/dist/components/multi-pie-chart/multi-pie-chart.js.map +1 -0
- package/dist/components/pie-chart/index.d.mts +6 -0
- package/dist/components/pie-chart/index.js +5 -0
- package/dist/components/pie-chart/index.js.map +1 -0
- package/dist/components/pie-chart/pie-chart-body.d.mts +12 -0
- package/dist/components/pie-chart/pie-chart-body.js +32 -0
- package/dist/components/pie-chart/pie-chart-body.js.map +1 -0
- package/dist/components/pie-chart/pie-chart.d.mts +9 -0
- package/dist/components/pie-chart/pie-chart.js +19 -0
- package/dist/components/pie-chart/pie-chart.js.map +1 -0
- package/dist/components/primitives/bar.d.mts +12 -0
- package/dist/components/primitives/bar.js +44 -0
- package/dist/components/primitives/bar.js.map +1 -0
- package/dist/components/primitives/index.d.mts +6 -0
- package/dist/components/primitives/index.js +4 -0
- package/dist/components/primitives/index.js.map +1 -1
- package/dist/components/primitives/pie.d.mts +10 -0
- package/dist/components/primitives/pie.js +63 -0
- package/dist/components/primitives/pie.js.map +1 -0
- package/dist/constants/bar-chart.constants.d.mts +4 -0
- package/dist/constants/bar-chart.constants.js +7 -0
- package/dist/constants/bar-chart.constants.js.map +1 -0
- package/dist/constants/bar.constants.d.mts +8 -0
- package/dist/constants/bar.constants.js +12 -0
- package/dist/constants/bar.constants.js.map +1 -0
- package/dist/constants/index.d.mts +4 -1
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/pie.constants.d.mts +15 -0
- package/dist/constants/pie.constants.js +26 -0
- package/dist/constants/pie.constants.js.map +1 -0
- package/dist/hooks/index.d.mts +14 -1
- package/dist/hooks/index.js +11 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-bar-chart.hook.d.mts +11 -0
- package/dist/hooks/use-bar-chart.hook.js +13 -0
- package/dist/hooks/use-bar-chart.hook.js.map +1 -0
- package/dist/hooks/use-chart-layout.hook.d.mts +7 -0
- package/dist/hooks/use-chart-layout.hook.js +9 -0
- package/dist/hooks/use-chart-layout.hook.js.map +1 -0
- package/dist/hooks/use-multi-bar-chart.hook.d.mts +13 -0
- package/dist/hooks/use-multi-bar-chart.hook.js +20 -0
- package/dist/hooks/use-multi-bar-chart.hook.js.map +1 -0
- package/dist/hooks/use-multi-pie-chart.hook.d.mts +10 -0
- package/dist/hooks/use-multi-pie-chart.hook.js +40 -0
- package/dist/hooks/use-multi-pie-chart.hook.js.map +1 -0
- package/dist/hooks/use-pie-chart.hook.d.mts +9 -0
- package/dist/hooks/use-pie-chart.hook.js +29 -0
- package/dist/hooks/use-pie-chart.hook.js.map +1 -0
- package/dist/index.d.mts +32 -3
- package/dist/types/bar-chart.types.d.mts +38 -0
- package/dist/types/bar-chart.types.js +1 -0
- package/dist/types/bar-chart.types.js.map +1 -0
- package/dist/types/bar.types.d.mts +12 -0
- package/dist/types/bar.types.js +1 -0
- package/dist/types/bar.types.js.map +1 -0
- package/dist/types/index.d.mts +10 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/multi-bar-chart.types.d.mts +21 -0
- package/dist/types/multi-bar-chart.types.js +1 -0
- package/dist/types/multi-bar-chart.types.js.map +1 -0
- package/dist/types/multi-pie-chart.types.d.mts +20 -0
- package/dist/types/multi-pie-chart.types.js +1 -0
- package/dist/types/multi-pie-chart.types.js.map +1 -0
- package/dist/types/pie-chart.types.d.mts +46 -0
- package/dist/types/pie-chart.types.js +1 -0
- package/dist/types/pie-chart.types.js.map +1 -0
- package/dist/types/pie.types.d.mts +10 -0
- package/dist/types/pie.types.js +1 -0
- package/dist/types/pie.types.js.map +1 -0
- package/dist/types/use-bar-chart.types.d.mts +26 -0
- package/dist/types/use-bar-chart.types.js +1 -0
- package/dist/types/use-bar-chart.types.js.map +1 -0
- package/dist/types/use-multi-bar-chart.types.d.mts +17 -0
- package/dist/types/use-multi-bar-chart.types.js +1 -0
- package/dist/types/use-multi-bar-chart.types.js.map +1 -0
- package/dist/types/use-multi-pie-chart.types.d.mts +14 -0
- package/dist/types/use-multi-pie-chart.types.js +1 -0
- package/dist/types/use-multi-pie-chart.types.js.map +1 -0
- package/dist/types/use-pie-chart.types.d.mts +12 -0
- package/dist/types/use-pie-chart.types.js +1 -0
- package/dist/types/use-pie-chart.types.js.map +1 -0
- package/dist/utils/bar-chart.util.d.mts +25 -0
- package/dist/utils/bar-chart.util.js +145 -0
- package/dist/utils/bar-chart.util.js.map +1 -0
- package/dist/utils/grid.util.js +4 -4
- package/dist/utils/grid.util.js.map +1 -1
- package/dist/utils/index.d.mts +13 -0
- package/dist/utils/index.js +24 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/multi-bar-chart.util.d.mts +14 -0
- package/dist/utils/multi-bar-chart.util.js +62 -0
- package/dist/utils/multi-bar-chart.util.js.map +1 -0
- package/dist/utils/multi-pie-chart.util.d.mts +10 -0
- package/dist/utils/multi-pie-chart.util.js +59 -0
- package/dist/utils/multi-pie-chart.util.js.map +1 -0
- package/dist/utils/pie-chart.util.d.mts +18 -0
- package/dist/utils/pie-chart.util.js +82 -0
- package/dist/utils/pie-chart.util.js.map +1 -0
- package/dist/utils/pie.util.d.mts +8 -0
- package/dist/utils/pie.util.js +19 -0
- package/dist/utils/pie.util.js.map +1 -0
- package/package.json +5 -5
- package/dist/components/line-chart-body.js.map +0 -1
- package/dist/components/line-chart.js.map +0 -1
- package/dist/components/multi-line-chart-body.js.map +0 -1
- package/dist/components/multi-line-chart.js.map +0 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ChartInsets, ChartPoint } from './common.types.mjs';
|
|
2
|
+
import './style.types.mjs';
|
|
3
|
+
import '@shopify/react-native-skia';
|
|
4
|
+
|
|
5
|
+
interface PieChartPoint {
|
|
6
|
+
id: string;
|
|
7
|
+
value: number;
|
|
8
|
+
color?: string;
|
|
9
|
+
}
|
|
10
|
+
interface PieChartCoordinate {
|
|
11
|
+
datum: PieChartPoint;
|
|
12
|
+
index: number;
|
|
13
|
+
center: ChartPoint;
|
|
14
|
+
startAngle: number;
|
|
15
|
+
endAngle: number;
|
|
16
|
+
padAngle: number;
|
|
17
|
+
padRadius: number;
|
|
18
|
+
innerRadius: number;
|
|
19
|
+
outerRadius: number;
|
|
20
|
+
}
|
|
21
|
+
interface PieChartSliceOptions {
|
|
22
|
+
visible?: boolean;
|
|
23
|
+
colors?: readonly string[];
|
|
24
|
+
opacity?: number;
|
|
25
|
+
cornerRadius?: number;
|
|
26
|
+
strokeColor?: string;
|
|
27
|
+
strokeWidth?: number;
|
|
28
|
+
}
|
|
29
|
+
interface PieChartCommonProps {
|
|
30
|
+
insets?: Partial<ChartInsets>;
|
|
31
|
+
innerRadius?: number;
|
|
32
|
+
outerRadius?: number;
|
|
33
|
+
padAngle?: number;
|
|
34
|
+
startAngle?: number;
|
|
35
|
+
endAngle?: number;
|
|
36
|
+
}
|
|
37
|
+
interface PieChartProps extends PieChartCommonProps {
|
|
38
|
+
data: readonly PieChartPoint[];
|
|
39
|
+
slice?: PieChartSliceOptions;
|
|
40
|
+
}
|
|
41
|
+
interface PieChartModel {
|
|
42
|
+
coordinates: readonly PieChartCoordinate[];
|
|
43
|
+
total: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type { PieChartCommonProps, PieChartCoordinate, PieChartModel, PieChartPoint, PieChartProps, PieChartSliceOptions };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=pie-chart.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PieChartSliceOptions, PieChartCoordinate } from './pie-chart.types.mjs';
|
|
2
|
+
import './common.types.mjs';
|
|
3
|
+
import './style.types.mjs';
|
|
4
|
+
import '@shopify/react-native-skia';
|
|
5
|
+
|
|
6
|
+
interface PieProps extends PieChartSliceOptions {
|
|
7
|
+
coordinates: readonly PieChartCoordinate[];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type { PieProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=pie.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BarChartPoint, BarChartCoordinate } from './bar-chart.types.mjs';
|
|
2
|
+
import { ChartRect, ChartXAxisOptions, ChartYAxisOptions, ChartNumericDomain } from './common.types.mjs';
|
|
3
|
+
import { b as ChartXValue, h as LineChartScale } from '../line-chart.types-yxru5uWc.mjs';
|
|
4
|
+
import '@shopify/react-native-skia';
|
|
5
|
+
import './style.types.mjs';
|
|
6
|
+
import '@impulse-ui-native/theme';
|
|
7
|
+
|
|
8
|
+
interface UseBarChartProps<X extends ChartXValue = string> {
|
|
9
|
+
data: readonly BarChartPoint<X>[];
|
|
10
|
+
plot: ChartRect;
|
|
11
|
+
xAxis?: ChartXAxisOptions<X>;
|
|
12
|
+
yAxis?: ChartYAxisOptions;
|
|
13
|
+
categoryPadding?: number;
|
|
14
|
+
}
|
|
15
|
+
interface UseBarChartResult<X extends ChartXValue = string> {
|
|
16
|
+
xDomain: readonly X[];
|
|
17
|
+
yDomain: ChartNumericDomain;
|
|
18
|
+
xTicks: readonly X[];
|
|
19
|
+
yTicks: readonly number[];
|
|
20
|
+
coordinates: readonly BarChartCoordinate<X>[];
|
|
21
|
+
xScale: LineChartScale<X>;
|
|
22
|
+
yScale: LineChartScale<number>;
|
|
23
|
+
bandwidth: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type { UseBarChartProps, UseBarChartResult };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=use-bar-chart.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ChartRect } from './common.types.mjs';
|
|
2
|
+
import { b as ChartXValue } from '../line-chart.types-yxru5uWc.mjs';
|
|
3
|
+
import { MultiBarChartProps, MultiBarChartSeriesModel } from './multi-bar-chart.types.mjs';
|
|
4
|
+
import { UseBarChartResult } from './use-bar-chart.types.mjs';
|
|
5
|
+
import './style.types.mjs';
|
|
6
|
+
import '@shopify/react-native-skia';
|
|
7
|
+
import '@impulse-ui-native/theme';
|
|
8
|
+
import './bar-chart.types.mjs';
|
|
9
|
+
|
|
10
|
+
interface UseMultiBarChartProps<X extends ChartXValue = string> extends Pick<MultiBarChartProps<X>, "categoryPadding" | "series" | "seriesPadding" | "xAxis" | "yAxis"> {
|
|
11
|
+
plot: ChartRect;
|
|
12
|
+
}
|
|
13
|
+
interface UseMultiBarChartResult<X extends ChartXValue = string> extends Omit<UseBarChartResult<X>, "coordinates"> {
|
|
14
|
+
series: readonly MultiBarChartSeriesModel<X>[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type { UseMultiBarChartProps, UseMultiBarChartResult };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=use-multi-bar-chart.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChartRect } from './common.types.mjs';
|
|
2
|
+
import { MultiPieChartProps, MultiPieChartSeriesModel } from './multi-pie-chart.types.mjs';
|
|
3
|
+
import { PieChartCommonProps } from './pie-chart.types.mjs';
|
|
4
|
+
import './style.types.mjs';
|
|
5
|
+
import '@shopify/react-native-skia';
|
|
6
|
+
|
|
7
|
+
interface UseMultiPieChartProps extends Pick<PieChartCommonProps, "endAngle" | "innerRadius" | "outerRadius" | "padAngle" | "startAngle">, Pick<MultiPieChartProps, "ringPadding" | "series"> {
|
|
8
|
+
plot: ChartRect;
|
|
9
|
+
}
|
|
10
|
+
interface UseMultiPieChartResult {
|
|
11
|
+
series: readonly MultiPieChartSeriesModel[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type { UseMultiPieChartProps, UseMultiPieChartResult };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=use-multi-pie-chart.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ChartRect } from './common.types.mjs';
|
|
2
|
+
import { PieChartCommonProps, PieChartPoint, PieChartModel } from './pie-chart.types.mjs';
|
|
3
|
+
import './style.types.mjs';
|
|
4
|
+
import '@shopify/react-native-skia';
|
|
5
|
+
|
|
6
|
+
interface UsePieChartProps extends Pick<PieChartCommonProps, "endAngle" | "innerRadius" | "outerRadius" | "padAngle" | "startAngle"> {
|
|
7
|
+
data: readonly PieChartPoint[];
|
|
8
|
+
plot: ChartRect;
|
|
9
|
+
}
|
|
10
|
+
type UsePieChartResult = PieChartModel;
|
|
11
|
+
|
|
12
|
+
export type { UsePieChartProps, UsePieChartResult };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=use-pie-chart.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ChartNumericDomain } from '../types/common.types.mjs';
|
|
2
|
+
import { b as ChartXValue, h as LineChartScale } from '../line-chart.types-yxru5uWc.mjs';
|
|
3
|
+
import { BarChartPoint, BarChartCoordinate } from '../types/bar-chart.types.mjs';
|
|
4
|
+
import { UseBarChartProps, UseBarChartResult } from '../types/use-bar-chart.types.mjs';
|
|
5
|
+
import '../types/style.types.mjs';
|
|
6
|
+
import '@shopify/react-native-skia';
|
|
7
|
+
import '@impulse-ui-native/theme';
|
|
8
|
+
|
|
9
|
+
interface BarChartScaleModel<X extends ChartXValue> {
|
|
10
|
+
xDomain: readonly X[];
|
|
11
|
+
yDomain: ChartNumericDomain;
|
|
12
|
+
xTicks: readonly X[];
|
|
13
|
+
yTicks: readonly number[];
|
|
14
|
+
xScale: LineChartScale<X>;
|
|
15
|
+
xStartScale: LineChartScale<X>;
|
|
16
|
+
yScale: LineChartScale<number>;
|
|
17
|
+
bandwidth: number;
|
|
18
|
+
baseline: number;
|
|
19
|
+
}
|
|
20
|
+
declare function createBarChartModel<X extends ChartXValue>(props: UseBarChartProps<X>): UseBarChartResult<X>;
|
|
21
|
+
declare function createBarChartCoordinates<X extends ChartXValue>(data: readonly BarChartPoint<X>[], xStartScale: LineChartScale<X>, yScale: LineChartScale<number>, baseline: number, width: number, offset?: number): BarChartCoordinate<X>[];
|
|
22
|
+
declare function createBarChartScaleModel<X extends ChartXValue>(props: UseBarChartProps<X>): BarChartScaleModel<X>;
|
|
23
|
+
declare function normalizeBarChartPadding(value: number | undefined, fallback: number): number;
|
|
24
|
+
|
|
25
|
+
export { type BarChartScaleModel, createBarChartCoordinates, createBarChartModel, createBarChartScaleModel, normalizeBarChartPadding };
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { extent } from "d3-array";
|
|
2
|
+
import { scaleBand, scaleLinear } from "d3-scale";
|
|
3
|
+
import { BarChartDefaultCategoryPadding } from "../constants/bar-chart.constants";
|
|
4
|
+
import {
|
|
5
|
+
LineChartDefaultNumericDomain,
|
|
6
|
+
LineChartDefaultTickCount
|
|
7
|
+
} from "../constants/line-chart.constants";
|
|
8
|
+
function createBarChartModel(props) {
|
|
9
|
+
const model = createBarChartScaleModel(props);
|
|
10
|
+
return {
|
|
11
|
+
xDomain: model.xDomain,
|
|
12
|
+
yDomain: model.yDomain,
|
|
13
|
+
xTicks: model.xTicks,
|
|
14
|
+
yTicks: model.yTicks,
|
|
15
|
+
xScale: model.xScale,
|
|
16
|
+
yScale: model.yScale,
|
|
17
|
+
bandwidth: model.bandwidth,
|
|
18
|
+
coordinates: createBarChartCoordinates(
|
|
19
|
+
props.data,
|
|
20
|
+
model.xStartScale,
|
|
21
|
+
model.yScale,
|
|
22
|
+
model.baseline,
|
|
23
|
+
model.bandwidth
|
|
24
|
+
)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function createBarChartCoordinates(data, xStartScale, yScale, baseline, width, offset = 0) {
|
|
28
|
+
const baselineY = yScale(baseline);
|
|
29
|
+
if (!isFiniteCoordinate(baselineY) || width <= 0) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
return data.reduce((coordinates, datum, index) => {
|
|
33
|
+
const x = xStartScale(datum.x);
|
|
34
|
+
const valueY = datum.y === null ? void 0 : yScale(datum.y);
|
|
35
|
+
if (!isFiniteCoordinate(x) || !isFiniteCoordinate(valueY)) {
|
|
36
|
+
return coordinates;
|
|
37
|
+
}
|
|
38
|
+
coordinates.push({
|
|
39
|
+
datum,
|
|
40
|
+
index,
|
|
41
|
+
x: x + offset,
|
|
42
|
+
y: Math.min(valueY, baselineY),
|
|
43
|
+
width,
|
|
44
|
+
height: Math.abs(baselineY - valueY)
|
|
45
|
+
});
|
|
46
|
+
return coordinates;
|
|
47
|
+
}, []);
|
|
48
|
+
}
|
|
49
|
+
function createBarChartScaleModel(props) {
|
|
50
|
+
const xTickCount = getTickCount(props.xAxis?.tickCount);
|
|
51
|
+
const yTickCount = getTickCount(props.yAxis?.tickCount);
|
|
52
|
+
const categoryPadding = normalizeBarChartPadding(
|
|
53
|
+
props.categoryPadding,
|
|
54
|
+
BarChartDefaultCategoryPadding
|
|
55
|
+
);
|
|
56
|
+
const xBandScale = scaleBand().domain(
|
|
57
|
+
props.data.map((point) => point.x).filter((value) => isValidXValue(value))
|
|
58
|
+
).range([props.plot.x, props.plot.x + props.plot.width]).paddingInner(categoryPadding).paddingOuter(categoryPadding / 2);
|
|
59
|
+
const xDomain = xBandScale.domain();
|
|
60
|
+
const bandwidth = xDomain.length === 0 ? 0 : xBandScale.bandwidth();
|
|
61
|
+
const xStartScale = (value) => xBandScale(value);
|
|
62
|
+
const xScale = (value) => {
|
|
63
|
+
const start = xBandScale(value);
|
|
64
|
+
return start === void 0 ? void 0 : start + bandwidth / 2;
|
|
65
|
+
};
|
|
66
|
+
const values = props.data.reduce((result, point) => {
|
|
67
|
+
if (point.y !== null && Number.isFinite(point.y)) {
|
|
68
|
+
result.push(point.y);
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}, []);
|
|
72
|
+
const yDomain = props.yAxis?.domain ?? getBarNumericDomain(values);
|
|
73
|
+
const d3YScale = scaleLinear().domain(yDomain).range([props.plot.y + props.plot.height, props.plot.y]);
|
|
74
|
+
if (!props.yAxis?.domain && yTickCount > 0) {
|
|
75
|
+
d3YScale.nice(yTickCount);
|
|
76
|
+
}
|
|
77
|
+
const resolvedYDomain = d3YScale.domain();
|
|
78
|
+
const yScale = (value) => d3YScale(value);
|
|
79
|
+
return {
|
|
80
|
+
xDomain,
|
|
81
|
+
yDomain: resolvedYDomain,
|
|
82
|
+
xTicks: selectTicks(xDomain, xTickCount),
|
|
83
|
+
yTicks: d3YScale.ticks(yTickCount),
|
|
84
|
+
xScale,
|
|
85
|
+
xStartScale,
|
|
86
|
+
yScale,
|
|
87
|
+
bandwidth,
|
|
88
|
+
baseline: getBaseline(resolvedYDomain)
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function getBarNumericDomain(values) {
|
|
92
|
+
const [minimum, maximum] = extent(values);
|
|
93
|
+
if (minimum === void 0 || maximum === void 0) {
|
|
94
|
+
return LineChartDefaultNumericDomain;
|
|
95
|
+
}
|
|
96
|
+
const domain = [Math.min(0, minimum), Math.max(0, maximum)];
|
|
97
|
+
return domain[0] === domain[1] ? LineChartDefaultNumericDomain : domain;
|
|
98
|
+
}
|
|
99
|
+
function getBaseline(domain) {
|
|
100
|
+
const minimum = Math.min(...domain);
|
|
101
|
+
const maximum = Math.max(...domain);
|
|
102
|
+
if (minimum > 0) {
|
|
103
|
+
return minimum;
|
|
104
|
+
}
|
|
105
|
+
if (maximum < 0) {
|
|
106
|
+
return maximum;
|
|
107
|
+
}
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
function getTickCount(tickCount) {
|
|
111
|
+
return tickCount === void 0 || !Number.isFinite(tickCount) ? LineChartDefaultTickCount : Math.max(0, Math.floor(tickCount));
|
|
112
|
+
}
|
|
113
|
+
function normalizeBarChartPadding(value, fallback) {
|
|
114
|
+
const padding = value === void 0 || !Number.isFinite(value) ? fallback : value;
|
|
115
|
+
return Math.min(1, Math.max(0, padding));
|
|
116
|
+
}
|
|
117
|
+
function selectTicks(values, tickCount) {
|
|
118
|
+
if (tickCount <= 0 || values.length === 0) {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
if (values.length <= tickCount) {
|
|
122
|
+
return [...values];
|
|
123
|
+
}
|
|
124
|
+
if (tickCount === 1) {
|
|
125
|
+
return [values[0]];
|
|
126
|
+
}
|
|
127
|
+
const lastIndex = values.length - 1;
|
|
128
|
+
return Array.from(
|
|
129
|
+
{ length: tickCount },
|
|
130
|
+
(_, index) => values[Math.round(index * lastIndex / (tickCount - 1))]
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
function isFiniteCoordinate(value) {
|
|
134
|
+
return value !== void 0 && Number.isFinite(value);
|
|
135
|
+
}
|
|
136
|
+
function isValidXValue(value) {
|
|
137
|
+
return value instanceof Date ? Number.isFinite(value.getTime()) : typeof value === "string" || Number.isFinite(value);
|
|
138
|
+
}
|
|
139
|
+
export {
|
|
140
|
+
createBarChartCoordinates,
|
|
141
|
+
createBarChartModel,
|
|
142
|
+
createBarChartScaleModel,
|
|
143
|
+
normalizeBarChartPadding
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=bar-chart.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/bar-chart.util.ts"],"sourcesContent":["import { extent } from \"d3-array\";\nimport { scaleBand, scaleLinear } from \"d3-scale\";\n\nimport { BarChartDefaultCategoryPadding } from \"../constants/bar-chart.constants\";\nimport {\n LineChartDefaultNumericDomain,\n LineChartDefaultTickCount,\n} from \"../constants/line-chart.constants\";\nimport {\n BarChartCoordinate,\n BarChartPoint,\n ChartNumericDomain,\n ChartXValue,\n LineChartScale,\n UseBarChartProps,\n UseBarChartResult,\n} from \"../types\";\n\nexport interface BarChartScaleModel<X extends ChartXValue> {\n xDomain: readonly X[];\n yDomain: ChartNumericDomain;\n xTicks: readonly X[];\n yTicks: readonly number[];\n xScale: LineChartScale<X>;\n xStartScale: LineChartScale<X>;\n yScale: LineChartScale<number>;\n bandwidth: number;\n baseline: number;\n}\n\nexport function createBarChartModel<X extends ChartXValue>(\n props: UseBarChartProps<X>,\n): UseBarChartResult<X> {\n const model = createBarChartScaleModel(props);\n\n return {\n xDomain: model.xDomain,\n yDomain: model.yDomain,\n xTicks: model.xTicks,\n yTicks: model.yTicks,\n xScale: model.xScale,\n yScale: model.yScale,\n bandwidth: model.bandwidth,\n coordinates: createBarChartCoordinates(\n props.data,\n model.xStartScale,\n model.yScale,\n model.baseline,\n model.bandwidth,\n ),\n };\n}\n\nexport function createBarChartCoordinates<X extends ChartXValue>(\n data: readonly BarChartPoint<X>[],\n xStartScale: LineChartScale<X>,\n yScale: LineChartScale<number>,\n baseline: number,\n width: number,\n offset = 0,\n): BarChartCoordinate<X>[] {\n const baselineY = yScale(baseline);\n\n if (!isFiniteCoordinate(baselineY) || width <= 0) {\n return [];\n }\n\n return data.reduce<BarChartCoordinate<X>[]>((coordinates, datum, index) => {\n const x = xStartScale(datum.x);\n const valueY = datum.y === null ? undefined : yScale(datum.y);\n\n if (!isFiniteCoordinate(x) || !isFiniteCoordinate(valueY)) {\n return coordinates;\n }\n\n coordinates.push({\n datum,\n index,\n x: x + offset,\n y: Math.min(valueY, baselineY),\n width,\n height: Math.abs(baselineY - valueY),\n });\n\n return coordinates;\n }, []);\n}\n\nexport function createBarChartScaleModel<X extends ChartXValue>(\n props: UseBarChartProps<X>,\n): BarChartScaleModel<X> {\n const xTickCount = getTickCount(props.xAxis?.tickCount);\n const yTickCount = getTickCount(props.yAxis?.tickCount);\n const categoryPadding = normalizeBarChartPadding(\n props.categoryPadding,\n BarChartDefaultCategoryPadding,\n );\n const xBandScale = scaleBand<X>()\n .domain(\n props.data\n .map((point) => point.x)\n .filter((value) => isValidXValue(value)),\n )\n .range([props.plot.x, props.plot.x + props.plot.width])\n .paddingInner(categoryPadding)\n .paddingOuter(categoryPadding / 2);\n const xDomain = xBandScale.domain();\n const bandwidth = xDomain.length === 0 ? 0 : xBandScale.bandwidth();\n const xStartScale: LineChartScale<X> = (value) => xBandScale(value);\n const xScale: LineChartScale<X> = (value) => {\n const start = xBandScale(value);\n\n return start === undefined ? undefined : start + bandwidth / 2;\n };\n const values = props.data.reduce<number[]>((result, point) => {\n if (point.y !== null && Number.isFinite(point.y)) {\n result.push(point.y);\n }\n\n return result;\n }, []);\n const yDomain = props.yAxis?.domain ?? getBarNumericDomain(values);\n const d3YScale = scaleLinear()\n .domain(yDomain)\n .range([props.plot.y + props.plot.height, props.plot.y]);\n\n if (!props.yAxis?.domain && yTickCount > 0) {\n d3YScale.nice(yTickCount);\n }\n\n const resolvedYDomain = d3YScale.domain() as [number, number];\n const yScale: LineChartScale<number> = (value) => d3YScale(value);\n\n return {\n xDomain,\n yDomain: resolvedYDomain,\n xTicks: selectTicks(xDomain, xTickCount),\n yTicks: d3YScale.ticks(yTickCount),\n xScale,\n xStartScale,\n yScale,\n bandwidth,\n baseline: getBaseline(resolvedYDomain),\n };\n}\n\nfunction getBarNumericDomain(values: readonly number[]): ChartNumericDomain {\n const [minimum, maximum] = extent(values);\n\n if (minimum === undefined || maximum === undefined) {\n return LineChartDefaultNumericDomain;\n }\n\n const domain = [Math.min(0, minimum), Math.max(0, maximum)] as const;\n\n return domain[0] === domain[1] ? LineChartDefaultNumericDomain : domain;\n}\n\nfunction getBaseline(domain: ChartNumericDomain): number {\n const minimum = Math.min(...domain);\n const maximum = Math.max(...domain);\n\n if (minimum > 0) {\n return minimum;\n }\n\n if (maximum < 0) {\n return maximum;\n }\n\n return 0;\n}\n\nfunction getTickCount(tickCount: number | undefined): number {\n return tickCount === undefined || !Number.isFinite(tickCount)\n ? LineChartDefaultTickCount\n : Math.max(0, Math.floor(tickCount));\n}\n\nexport function normalizeBarChartPadding(\n value: number | undefined,\n fallback: number,\n): number {\n const padding =\n value === undefined || !Number.isFinite(value) ? fallback : value;\n\n return Math.min(1, Math.max(0, padding));\n}\n\nfunction selectTicks<X>(values: readonly X[], tickCount: number): X[] {\n if (tickCount <= 0 || values.length === 0) {\n return [];\n }\n\n if (values.length <= tickCount) {\n return [...values];\n }\n\n if (tickCount === 1) {\n return [values[0]!];\n }\n\n const lastIndex = values.length - 1;\n\n return Array.from(\n { length: tickCount },\n (_, index) => values[Math.round((index * lastIndex) / (tickCount - 1))]!,\n );\n}\n\nfunction isFiniteCoordinate(value: number | undefined): value is number {\n return value !== undefined && Number.isFinite(value);\n}\n\nfunction isValidXValue<X extends ChartXValue>(value: X): boolean {\n return value instanceof Date\n ? Number.isFinite(value.getTime())\n : typeof value === \"string\" || Number.isFinite(value);\n}\n"],"mappings":"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","names":[]}
|
package/dist/utils/grid.util.js
CHANGED
|
@@ -6,24 +6,24 @@ function createVerticalGridPath(values, scale, plot) {
|
|
|
6
6
|
if (ticks.length === 0) {
|
|
7
7
|
return null;
|
|
8
8
|
}
|
|
9
|
-
const path = Skia.
|
|
9
|
+
const path = Skia.PathBuilder.Make();
|
|
10
10
|
ticks.forEach(({ position }) => {
|
|
11
11
|
path.moveTo(position, plot.y);
|
|
12
12
|
path.lineTo(position, plot.y + plot.height);
|
|
13
13
|
});
|
|
14
|
-
return path;
|
|
14
|
+
return path.detach();
|
|
15
15
|
}
|
|
16
16
|
function createHorizontalGridPath(values, scale, plot) {
|
|
17
17
|
const ticks = createAxisTicks(values, scale);
|
|
18
18
|
if (ticks.length === 0) {
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
|
-
const path = Skia.
|
|
21
|
+
const path = Skia.PathBuilder.Make();
|
|
22
22
|
ticks.forEach(({ position }) => {
|
|
23
23
|
path.moveTo(plot.x, position);
|
|
24
24
|
path.lineTo(plot.x + plot.width, position);
|
|
25
25
|
});
|
|
26
|
-
return path;
|
|
26
|
+
return path.detach();
|
|
27
27
|
}
|
|
28
28
|
function resolveGridLineOptions(options, defaultVisible, defaultColor) {
|
|
29
29
|
if (typeof options === "boolean") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/grid.util.ts"],"sourcesContent":["import { Skia, SkPath } from \"@shopify/react-native-skia\";\n\nimport { GridDefaultOpacity, GridDefaultWidth } from \"../constants\";\nimport {\n ChartGridLineOptions,\n ChartRect,\n LineChartScale,\n ResolvedGridLineOptions,\n} from \"../types\";\nimport { createAxisTicks } from \"./axis.util\";\n\nexport function createVerticalGridPath<Value>(\n values: readonly Value[],\n scale: LineChartScale<Value>,\n plot: ChartRect,\n): SkPath | null {\n const ticks = createAxisTicks(values, scale);\n\n if (ticks.length === 0) {\n return null;\n }\n\n const path = Skia.
|
|
1
|
+
{"version":3,"sources":["../../src/utils/grid.util.ts"],"sourcesContent":["import { Skia, SkPath } from \"@shopify/react-native-skia\";\n\nimport { GridDefaultOpacity, GridDefaultWidth } from \"../constants\";\nimport {\n ChartGridLineOptions,\n ChartRect,\n LineChartScale,\n ResolvedGridLineOptions,\n} from \"../types\";\nimport { createAxisTicks } from \"./axis.util\";\n\nexport function createVerticalGridPath<Value>(\n values: readonly Value[],\n scale: LineChartScale<Value>,\n plot: ChartRect,\n): SkPath | null {\n const ticks = createAxisTicks(values, scale);\n\n if (ticks.length === 0) {\n return null;\n }\n\n const path = Skia.PathBuilder.Make();\n\n ticks.forEach(({ position }) => {\n path.moveTo(position, plot.y);\n path.lineTo(position, plot.y + plot.height);\n });\n\n return path.detach();\n}\n\nexport function createHorizontalGridPath<Value>(\n values: readonly Value[],\n scale: LineChartScale<Value>,\n plot: ChartRect,\n): SkPath | null {\n const ticks = createAxisTicks(values, scale);\n\n if (ticks.length === 0) {\n return null;\n }\n\n const path = Skia.PathBuilder.Make();\n\n ticks.forEach(({ position }) => {\n path.moveTo(plot.x, position);\n path.lineTo(plot.x + plot.width, position);\n });\n\n return path.detach();\n}\n\nexport function resolveGridLineOptions(\n options: boolean | ChartGridLineOptions | undefined,\n defaultVisible: boolean,\n defaultColor: string,\n): ResolvedGridLineOptions {\n if (typeof options === \"boolean\") {\n return {\n visible: options,\n color: defaultColor,\n width: GridDefaultWidth,\n opacity: GridDefaultOpacity,\n };\n }\n\n return {\n visible: isGridLineVisible(options, defaultVisible),\n color: options?.color ?? defaultColor,\n width: options?.width ?? GridDefaultWidth,\n opacity: options?.opacity ?? GridDefaultOpacity,\n dash: options?.dash,\n };\n}\n\nfunction isGridLineVisible(\n options: boolean | ChartGridLineOptions | undefined,\n defaultVisible: boolean,\n): boolean {\n if (typeof options === \"boolean\") {\n return options;\n }\n\n return options?.visible ?? defaultVisible;\n}\n"],"mappings":"AAAA,SAAS,YAAoB;AAE7B,SAAS,oBAAoB,wBAAwB;AAOrD,SAAS,uBAAuB;AAEzB,SAAS,uBACd,QACA,OACA,MACe;AACf,QAAM,QAAQ,gBAAgB,QAAQ,KAAK;AAE3C,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,KAAK,YAAY,KAAK;AAEnC,QAAM,QAAQ,CAAC,EAAE,SAAS,MAAM;AAC9B,SAAK,OAAO,UAAU,KAAK,CAAC;AAC5B,SAAK,OAAO,UAAU,KAAK,IAAI,KAAK,MAAM;AAAA,EAC5C,CAAC;AAED,SAAO,KAAK,OAAO;AACrB;AAEO,SAAS,yBACd,QACA,OACA,MACe;AACf,QAAM,QAAQ,gBAAgB,QAAQ,KAAK;AAE3C,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,KAAK,YAAY,KAAK;AAEnC,QAAM,QAAQ,CAAC,EAAE,SAAS,MAAM;AAC9B,SAAK,OAAO,KAAK,GAAG,QAAQ;AAC5B,SAAK,OAAO,KAAK,IAAI,KAAK,OAAO,QAAQ;AAAA,EAC3C,CAAC;AAED,SAAO,KAAK,OAAO;AACrB;AAEO,SAAS,uBACd,SACA,gBACA,cACyB;AACzB,MAAI,OAAO,YAAY,WAAW;AAChC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,kBAAkB,SAAS,cAAc;AAAA,IAClD,OAAO,SAAS,SAAS;AAAA,IACzB,OAAO,SAAS,SAAS;AAAA,IACzB,SAAS,SAAS,WAAW;AAAA,IAC7B,MAAM,SAAS;AAAA,EACjB;AACF;AAEA,SAAS,kBACP,SACA,gBACS;AACT,MAAI,OAAO,YAAY,WAAW;AAChC,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,WAAW;AAC7B;","names":[]}
|
package/dist/utils/index.d.mts
CHANGED
|
@@ -1,17 +1,30 @@
|
|
|
1
1
|
export { createAxisTicks, createXAxisLabelRect, createXAxisLayout, createYAxisLabelRect, createYAxisLayout, formatAxisTick } from './axis.util.mjs';
|
|
2
|
+
export { createBarChartCoordinates, createBarChartModel } from './bar-chart.util.mjs';
|
|
2
3
|
export { createChartLayout, createInsetRect } from './chart-layout.util.mjs';
|
|
3
4
|
export { createHorizontalGridPath, createVerticalGridPath, resolveGridLineOptions } from './grid.util.mjs';
|
|
4
5
|
export { getLabelTextAlign, getLabelY } from './label.util.mjs';
|
|
5
6
|
export { createLinePath, fitLineCoordinatesToRect } from './line.util.mjs';
|
|
6
7
|
export { createLineChartCoordinates, createLineChartModel } from './line-chart.util.mjs';
|
|
7
8
|
export { createDrawableMultiLineChartSeries } from './multi-line-chart.util.mjs';
|
|
9
|
+
export { createDrawableMultiBarChartSeries, createMultiBarChartModel } from './multi-bar-chart.util.mjs';
|
|
8
10
|
export { createParagraphBuilder } from './paragraph-builder.util.mjs';
|
|
11
|
+
export { createMultiPieChartModel } from './multi-pie-chart.util.mjs';
|
|
12
|
+
export { createPieChartModel, createPieChartRadii, normalizeRadiusRatio } from './pie-chart.util.mjs';
|
|
13
|
+
export { createPieSlicePath } from './pie.util.mjs';
|
|
9
14
|
import '../types/axis.types.mjs';
|
|
10
15
|
import '@shopify/react-native-skia';
|
|
11
16
|
import '@impulse-ui-native/theme';
|
|
12
17
|
import '../types/common.types.mjs';
|
|
13
18
|
import '../types/style.types.mjs';
|
|
14
19
|
import '../line-chart.types-yxru5uWc.mjs';
|
|
20
|
+
import '../types/bar-chart.types.mjs';
|
|
21
|
+
import '../types/use-bar-chart.types.mjs';
|
|
15
22
|
import '../types/label.types.mjs';
|
|
16
23
|
import '../types/use-line-chart.types.mjs';
|
|
17
24
|
import '../types/multi-line-chart.types.mjs';
|
|
25
|
+
import '../types/multi-bar-chart.types.mjs';
|
|
26
|
+
import '../types/use-multi-bar-chart.types.mjs';
|
|
27
|
+
import '../types/use-multi-pie-chart.types.mjs';
|
|
28
|
+
import '../types/multi-pie-chart.types.mjs';
|
|
29
|
+
import '../types/pie-chart.types.mjs';
|
|
30
|
+
import '../types/use-pie-chart.types.mjs';
|
package/dist/utils/index.js
CHANGED
|
@@ -6,6 +6,10 @@ import {
|
|
|
6
6
|
createYAxisLabelRect,
|
|
7
7
|
formatAxisTick
|
|
8
8
|
} from "./axis.util";
|
|
9
|
+
import {
|
|
10
|
+
createBarChartCoordinates,
|
|
11
|
+
createBarChartModel
|
|
12
|
+
} from "./bar-chart.util";
|
|
9
13
|
import { createChartLayout, createInsetRect } from "./chart-layout.util";
|
|
10
14
|
import {
|
|
11
15
|
createHorizontalGridPath,
|
|
@@ -19,17 +23,36 @@ import {
|
|
|
19
23
|
createLineChartModel
|
|
20
24
|
} from "./line-chart.util";
|
|
21
25
|
import { createDrawableMultiLineChartSeries } from "./multi-line-chart.util";
|
|
26
|
+
import {
|
|
27
|
+
createDrawableMultiBarChartSeries,
|
|
28
|
+
createMultiBarChartModel
|
|
29
|
+
} from "./multi-bar-chart.util";
|
|
22
30
|
import { createParagraphBuilder } from "./paragraph-builder.util";
|
|
31
|
+
import { createMultiPieChartModel } from "./multi-pie-chart.util";
|
|
32
|
+
import {
|
|
33
|
+
createPieChartModel,
|
|
34
|
+
createPieChartRadii,
|
|
35
|
+
normalizeRadiusRatio
|
|
36
|
+
} from "./pie-chart.util";
|
|
37
|
+
import { createPieSlicePath } from "./pie.util";
|
|
23
38
|
export {
|
|
24
39
|
createAxisTicks,
|
|
40
|
+
createBarChartCoordinates,
|
|
41
|
+
createBarChartModel,
|
|
25
42
|
createChartLayout,
|
|
43
|
+
createDrawableMultiBarChartSeries,
|
|
26
44
|
createDrawableMultiLineChartSeries,
|
|
27
45
|
createHorizontalGridPath,
|
|
28
46
|
createInsetRect,
|
|
29
47
|
createLineChartCoordinates,
|
|
30
48
|
createLineChartModel,
|
|
31
49
|
createLinePath,
|
|
50
|
+
createMultiBarChartModel,
|
|
51
|
+
createMultiPieChartModel,
|
|
32
52
|
createParagraphBuilder,
|
|
53
|
+
createPieChartModel,
|
|
54
|
+
createPieChartRadii,
|
|
55
|
+
createPieSlicePath,
|
|
33
56
|
createVerticalGridPath,
|
|
34
57
|
createXAxisLabelRect,
|
|
35
58
|
createXAxisLayout,
|
|
@@ -39,6 +62,7 @@ export {
|
|
|
39
62
|
formatAxisTick,
|
|
40
63
|
getLabelTextAlign,
|
|
41
64
|
getLabelY,
|
|
65
|
+
normalizeRadiusRatio,
|
|
42
66
|
resolveGridLineOptions
|
|
43
67
|
};
|
|
44
68
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export {\n createAxisTicks,\n createXAxisLayout,\n createXAxisLabelRect,\n createYAxisLayout,\n createYAxisLabelRect,\n formatAxisTick,\n} from \"./axis.util\";\nexport { createChartLayout, createInsetRect } from \"./chart-layout.util\";\nexport {\n createHorizontalGridPath,\n createVerticalGridPath,\n resolveGridLineOptions,\n} from \"./grid.util\";\nexport { getLabelTextAlign, getLabelY } from \"./label.util\";\nexport { createLinePath, fitLineCoordinatesToRect } from \"./line.util\";\nexport {\n createLineChartCoordinates,\n createLineChartModel,\n} from \"./line-chart.util\";\nexport { createDrawableMultiLineChartSeries } from \"./multi-line-chart.util\";\nexport { createParagraphBuilder } from \"./paragraph-builder.util\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB,uBAAuB;AACnD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB,iBAAiB;AAC7C,SAAS,gBAAgB,gCAAgC;AACzD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,0CAA0C;AACnD,SAAS,8BAA8B;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export {\n createAxisTicks,\n createXAxisLayout,\n createXAxisLabelRect,\n createYAxisLayout,\n createYAxisLabelRect,\n formatAxisTick,\n} from \"./axis.util\";\nexport {\n createBarChartCoordinates,\n createBarChartModel,\n} from \"./bar-chart.util\";\nexport { createChartLayout, createInsetRect } from \"./chart-layout.util\";\nexport {\n createHorizontalGridPath,\n createVerticalGridPath,\n resolveGridLineOptions,\n} from \"./grid.util\";\nexport { getLabelTextAlign, getLabelY } from \"./label.util\";\nexport { createLinePath, fitLineCoordinatesToRect } from \"./line.util\";\nexport {\n createLineChartCoordinates,\n createLineChartModel,\n} from \"./line-chart.util\";\nexport { createDrawableMultiLineChartSeries } from \"./multi-line-chart.util\";\nexport {\n createDrawableMultiBarChartSeries,\n createMultiBarChartModel,\n} from \"./multi-bar-chart.util\";\nexport { createParagraphBuilder } from \"./paragraph-builder.util\";\nexport { createMultiPieChartModel } from \"./multi-pie-chart.util\";\nexport {\n createPieChartModel,\n createPieChartRadii,\n normalizeRadiusRatio,\n} from \"./pie-chart.util\";\nexport { createPieSlicePath } from \"./pie.util\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB,uBAAuB;AACnD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB,iBAAiB;AAC7C,SAAS,gBAAgB,gCAAgC;AACzD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,0CAA0C;AACnD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,8BAA8B;AACvC,SAAS,gCAAgC;AACzC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,0BAA0B;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { b as ChartXValue } from '../line-chart.types-yxru5uWc.mjs';
|
|
2
|
+
import { MultiBarChartSeriesModel } from '../types/multi-bar-chart.types.mjs';
|
|
3
|
+
import { UseMultiBarChartProps, UseMultiBarChartResult } from '../types/use-multi-bar-chart.types.mjs';
|
|
4
|
+
import '@shopify/react-native-skia';
|
|
5
|
+
import '../types/common.types.mjs';
|
|
6
|
+
import '../types/style.types.mjs';
|
|
7
|
+
import '@impulse-ui-native/theme';
|
|
8
|
+
import '../types/bar-chart.types.mjs';
|
|
9
|
+
import '../types/use-bar-chart.types.mjs';
|
|
10
|
+
|
|
11
|
+
declare function createMultiBarChartModel<X extends ChartXValue>(props: UseMultiBarChartProps<X>): UseMultiBarChartResult<X>;
|
|
12
|
+
declare function createDrawableMultiBarChartSeries<X extends ChartXValue>(series: MultiBarChartSeriesModel<X>, index: number): MultiBarChartSeriesModel<X>;
|
|
13
|
+
|
|
14
|
+
export { createDrawableMultiBarChartSeries, createMultiBarChartModel };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { scaleBand } from "d3-scale";
|
|
2
|
+
import { MultiBarChartDefaultSeriesPadding } from "../constants/bar-chart.constants";
|
|
3
|
+
import { BarDefaultColor, BarDefaultColors } from "../constants/bar.constants";
|
|
4
|
+
import {
|
|
5
|
+
createBarChartCoordinates,
|
|
6
|
+
createBarChartScaleModel,
|
|
7
|
+
normalizeBarChartPadding
|
|
8
|
+
} from "./bar-chart.util";
|
|
9
|
+
function createMultiBarChartModel(props) {
|
|
10
|
+
const data = props.series.flatMap((series2) => series2.data);
|
|
11
|
+
const model = createBarChartScaleModel({
|
|
12
|
+
data,
|
|
13
|
+
plot: props.plot,
|
|
14
|
+
xAxis: props.xAxis,
|
|
15
|
+
yAxis: props.yAxis,
|
|
16
|
+
categoryPadding: props.categoryPadding
|
|
17
|
+
});
|
|
18
|
+
const seriesScale = scaleBand().domain(props.series.map((_, index) => index)).range([0, model.bandwidth]).paddingInner(
|
|
19
|
+
normalizeBarChartPadding(
|
|
20
|
+
props.seriesPadding,
|
|
21
|
+
MultiBarChartDefaultSeriesPadding
|
|
22
|
+
)
|
|
23
|
+
);
|
|
24
|
+
const seriesBandwidth = seriesScale.bandwidth();
|
|
25
|
+
const series = props.series.map(
|
|
26
|
+
(currentSeries, index) => ({
|
|
27
|
+
...currentSeries,
|
|
28
|
+
coordinates: createBarChartCoordinates(
|
|
29
|
+
currentSeries.data,
|
|
30
|
+
model.xStartScale,
|
|
31
|
+
model.yScale,
|
|
32
|
+
model.baseline,
|
|
33
|
+
seriesBandwidth,
|
|
34
|
+
seriesScale(index) ?? 0
|
|
35
|
+
)
|
|
36
|
+
})
|
|
37
|
+
);
|
|
38
|
+
return {
|
|
39
|
+
series,
|
|
40
|
+
xDomain: model.xDomain,
|
|
41
|
+
yDomain: model.yDomain,
|
|
42
|
+
xTicks: model.xTicks,
|
|
43
|
+
yTicks: model.yTicks,
|
|
44
|
+
xScale: model.xScale,
|
|
45
|
+
yScale: model.yScale,
|
|
46
|
+
bandwidth: model.bandwidth
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function createDrawableMultiBarChartSeries(series, index) {
|
|
50
|
+
return {
|
|
51
|
+
...series,
|
|
52
|
+
bar: {
|
|
53
|
+
...series.bar,
|
|
54
|
+
color: series.bar?.color ?? BarDefaultColors[index % BarDefaultColors.length] ?? BarDefaultColor
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
createDrawableMultiBarChartSeries,
|
|
60
|
+
createMultiBarChartModel
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=multi-bar-chart.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/multi-bar-chart.util.ts"],"sourcesContent":["import { scaleBand } from \"d3-scale\";\n\nimport { MultiBarChartDefaultSeriesPadding } from \"../constants/bar-chart.constants\";\nimport { BarDefaultColor, BarDefaultColors } from \"../constants/bar.constants\";\nimport {\n ChartXValue,\n MultiBarChartSeriesModel,\n UseMultiBarChartProps,\n UseMultiBarChartResult,\n} from \"../types\";\nimport {\n createBarChartCoordinates,\n createBarChartScaleModel,\n normalizeBarChartPadding,\n} from \"./bar-chart.util\";\n\nexport function createMultiBarChartModel<X extends ChartXValue>(\n props: UseMultiBarChartProps<X>,\n): UseMultiBarChartResult<X> {\n const data = props.series.flatMap((series) => series.data);\n const model = createBarChartScaleModel({\n data,\n plot: props.plot,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n categoryPadding: props.categoryPadding,\n });\n const seriesScale = scaleBand<number>()\n .domain(props.series.map((_, index) => index))\n .range([0, model.bandwidth])\n .paddingInner(\n normalizeBarChartPadding(\n props.seriesPadding,\n MultiBarChartDefaultSeriesPadding,\n ),\n );\n const seriesBandwidth = seriesScale.bandwidth();\n const series: MultiBarChartSeriesModel<X>[] = props.series.map(\n (currentSeries, index) => ({\n ...currentSeries,\n coordinates: createBarChartCoordinates(\n currentSeries.data,\n model.xStartScale,\n model.yScale,\n model.baseline,\n seriesBandwidth,\n seriesScale(index) ?? 0,\n ),\n }),\n );\n\n return {\n series,\n xDomain: model.xDomain,\n yDomain: model.yDomain,\n xTicks: model.xTicks,\n yTicks: model.yTicks,\n xScale: model.xScale,\n yScale: model.yScale,\n bandwidth: model.bandwidth,\n };\n}\n\nexport function createDrawableMultiBarChartSeries<X extends ChartXValue>(\n series: MultiBarChartSeriesModel<X>,\n index: number,\n): MultiBarChartSeriesModel<X> {\n return {\n ...series,\n bar: {\n ...series.bar,\n color:\n series.bar?.color ??\n BarDefaultColors[index % BarDefaultColors.length] ??\n BarDefaultColor,\n },\n };\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAE1B,SAAS,yCAAyC;AAClD,SAAS,iBAAiB,wBAAwB;AAOlD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,SAAS,yBACd,OAC2B;AAC3B,QAAM,OAAO,MAAM,OAAO,QAAQ,CAACA,YAAWA,QAAO,IAAI;AACzD,QAAM,QAAQ,yBAAyB;AAAA,IACrC;AAAA,IACA,MAAM,MAAM;AAAA,IACZ,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,IACb,iBAAiB,MAAM;AAAA,EACzB,CAAC;AACD,QAAM,cAAc,UAAkB,EACnC,OAAO,MAAM,OAAO,IAAI,CAAC,GAAG,UAAU,KAAK,CAAC,EAC5C,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,EAC1B;AAAA,IACC;AAAA,MACE,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF,QAAM,kBAAkB,YAAY,UAAU;AAC9C,QAAM,SAAwC,MAAM,OAAO;AAAA,IACzD,CAAC,eAAe,WAAW;AAAA,MACzB,GAAG;AAAA,MACH,aAAa;AAAA,QACX,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA,YAAY,KAAK,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM;AAAA,EACnB;AACF;AAEO,SAAS,kCACd,QACA,OAC6B;AAC7B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,KAAK;AAAA,MACH,GAAG,OAAO;AAAA,MACV,OACE,OAAO,KAAK,SACZ,iBAAiB,QAAQ,iBAAiB,MAAM,KAChD;AAAA,IACJ;AAAA,EACF;AACF;","names":["series"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { UseMultiPieChartProps, UseMultiPieChartResult } from '../types/use-multi-pie-chart.types.mjs';
|
|
2
|
+
import '../types/common.types.mjs';
|
|
3
|
+
import '../types/style.types.mjs';
|
|
4
|
+
import '@shopify/react-native-skia';
|
|
5
|
+
import '../types/multi-pie-chart.types.mjs';
|
|
6
|
+
import '../types/pie-chart.types.mjs';
|
|
7
|
+
|
|
8
|
+
declare function createMultiPieChartModel(props: UseMultiPieChartProps): UseMultiPieChartResult;
|
|
9
|
+
|
|
10
|
+
export { createMultiPieChartModel };
|