@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.
Files changed (162) hide show
  1. package/README.md +97 -6
  2. package/dist/components/bar-chart/bar-chart-body.d.mts +15 -0
  3. package/dist/components/bar-chart/bar-chart-body.js +50 -0
  4. package/dist/components/bar-chart/bar-chart-body.js.map +1 -0
  5. package/dist/components/bar-chart/bar-chart.d.mts +11 -0
  6. package/dist/components/bar-chart/bar-chart.js +21 -0
  7. package/dist/components/bar-chart/bar-chart.js.map +1 -0
  8. package/dist/components/bar-chart/index.d.mts +8 -0
  9. package/dist/components/bar-chart/index.js +5 -0
  10. package/dist/components/bar-chart/index.js.map +1 -0
  11. package/dist/components/chart-axes/chart-axes.d.mts +22 -0
  12. package/dist/components/chart-axes/chart-axes.js +64 -0
  13. package/dist/components/chart-axes/chart-axes.js.map +1 -0
  14. package/dist/components/chart-axes/index.d.mts +7 -0
  15. package/dist/components/chart-axes/index.js +5 -0
  16. package/dist/components/chart-axes/index.js.map +1 -0
  17. package/dist/components/index.d.mts +14 -2
  18. package/dist/components/index.js +9 -1
  19. package/dist/components/index.js.map +1 -1
  20. package/dist/components/line-chart/index.d.mts +7 -0
  21. package/dist/components/line-chart/index.js +5 -0
  22. package/dist/components/line-chart/index.js.map +1 -0
  23. package/dist/components/{line-chart-body.d.mts → line-chart/line-chart-body.d.mts} +3 -3
  24. package/dist/components/{line-chart-body.js → line-chart/line-chart-body.js} +5 -9
  25. package/dist/components/line-chart/line-chart-body.js.map +1 -0
  26. package/dist/components/{line-chart.d.mts → line-chart/line-chart.d.mts} +3 -3
  27. package/dist/components/{line-chart.js → line-chart/line-chart.js} +1 -1
  28. package/dist/components/line-chart/line-chart.js.map +1 -0
  29. package/dist/components/multi-bar-chart/index.d.mts +9 -0
  30. package/dist/components/multi-bar-chart/index.js +5 -0
  31. package/dist/components/multi-bar-chart/index.js.map +1 -0
  32. package/dist/components/multi-bar-chart/multi-bar-chart-body.d.mts +16 -0
  33. package/dist/components/multi-bar-chart/multi-bar-chart-body.js +72 -0
  34. package/dist/components/multi-bar-chart/multi-bar-chart-body.js.map +1 -0
  35. package/dist/components/multi-bar-chart/multi-bar-chart.d.mts +12 -0
  36. package/dist/components/multi-bar-chart/multi-bar-chart.js +21 -0
  37. package/dist/components/multi-bar-chart/multi-bar-chart.js.map +1 -0
  38. package/dist/components/multi-line-chart/index.d.mts +8 -0
  39. package/dist/components/multi-line-chart/index.js +5 -0
  40. package/dist/components/multi-line-chart/index.js.map +1 -0
  41. package/dist/components/{multi-line-chart-body.d.mts → multi-line-chart/multi-line-chart-body.d.mts} +4 -4
  42. package/dist/components/{multi-line-chart-body.js → multi-line-chart/multi-line-chart-body.js} +4 -7
  43. package/dist/components/multi-line-chart/multi-line-chart-body.js.map +1 -0
  44. package/dist/components/{multi-line-chart.d.mts → multi-line-chart/multi-line-chart.d.mts} +4 -4
  45. package/dist/components/{multi-line-chart.js → multi-line-chart/multi-line-chart.js} +1 -1
  46. package/dist/components/multi-line-chart/multi-line-chart.js.map +1 -0
  47. package/dist/components/multi-pie-chart/index.d.mts +7 -0
  48. package/dist/components/multi-pie-chart/index.js +5 -0
  49. package/dist/components/multi-pie-chart/index.js.map +1 -0
  50. package/dist/components/multi-pie-chart/multi-pie-chart-body.d.mts +13 -0
  51. package/dist/components/multi-pie-chart/multi-pie-chart-body.js +40 -0
  52. package/dist/components/multi-pie-chart/multi-pie-chart-body.js.map +1 -0
  53. package/dist/components/multi-pie-chart/multi-pie-chart.d.mts +10 -0
  54. package/dist/components/multi-pie-chart/multi-pie-chart.js +19 -0
  55. package/dist/components/multi-pie-chart/multi-pie-chart.js.map +1 -0
  56. package/dist/components/pie-chart/index.d.mts +6 -0
  57. package/dist/components/pie-chart/index.js +5 -0
  58. package/dist/components/pie-chart/index.js.map +1 -0
  59. package/dist/components/pie-chart/pie-chart-body.d.mts +12 -0
  60. package/dist/components/pie-chart/pie-chart-body.js +32 -0
  61. package/dist/components/pie-chart/pie-chart-body.js.map +1 -0
  62. package/dist/components/pie-chart/pie-chart.d.mts +9 -0
  63. package/dist/components/pie-chart/pie-chart.js +19 -0
  64. package/dist/components/pie-chart/pie-chart.js.map +1 -0
  65. package/dist/components/primitives/bar.d.mts +12 -0
  66. package/dist/components/primitives/bar.js +44 -0
  67. package/dist/components/primitives/bar.js.map +1 -0
  68. package/dist/components/primitives/index.d.mts +6 -0
  69. package/dist/components/primitives/index.js +4 -0
  70. package/dist/components/primitives/index.js.map +1 -1
  71. package/dist/components/primitives/pie.d.mts +10 -0
  72. package/dist/components/primitives/pie.js +63 -0
  73. package/dist/components/primitives/pie.js.map +1 -0
  74. package/dist/constants/bar-chart.constants.d.mts +4 -0
  75. package/dist/constants/bar-chart.constants.js +7 -0
  76. package/dist/constants/bar-chart.constants.js.map +1 -0
  77. package/dist/constants/bar.constants.d.mts +8 -0
  78. package/dist/constants/bar.constants.js +12 -0
  79. package/dist/constants/bar.constants.js.map +1 -0
  80. package/dist/constants/index.d.mts +4 -1
  81. package/dist/constants/index.js +3 -0
  82. package/dist/constants/index.js.map +1 -1
  83. package/dist/constants/pie.constants.d.mts +15 -0
  84. package/dist/constants/pie.constants.js +26 -0
  85. package/dist/constants/pie.constants.js.map +1 -0
  86. package/dist/hooks/index.d.mts +14 -1
  87. package/dist/hooks/index.js +11 -1
  88. package/dist/hooks/index.js.map +1 -1
  89. package/dist/hooks/use-bar-chart.hook.d.mts +11 -0
  90. package/dist/hooks/use-bar-chart.hook.js +13 -0
  91. package/dist/hooks/use-bar-chart.hook.js.map +1 -0
  92. package/dist/hooks/use-chart-layout.hook.d.mts +7 -0
  93. package/dist/hooks/use-chart-layout.hook.js +9 -0
  94. package/dist/hooks/use-chart-layout.hook.js.map +1 -0
  95. package/dist/hooks/use-multi-bar-chart.hook.d.mts +13 -0
  96. package/dist/hooks/use-multi-bar-chart.hook.js +20 -0
  97. package/dist/hooks/use-multi-bar-chart.hook.js.map +1 -0
  98. package/dist/hooks/use-multi-pie-chart.hook.d.mts +10 -0
  99. package/dist/hooks/use-multi-pie-chart.hook.js +40 -0
  100. package/dist/hooks/use-multi-pie-chart.hook.js.map +1 -0
  101. package/dist/hooks/use-pie-chart.hook.d.mts +9 -0
  102. package/dist/hooks/use-pie-chart.hook.js +29 -0
  103. package/dist/hooks/use-pie-chart.hook.js.map +1 -0
  104. package/dist/index.d.mts +32 -3
  105. package/dist/types/bar-chart.types.d.mts +38 -0
  106. package/dist/types/bar-chart.types.js +1 -0
  107. package/dist/types/bar-chart.types.js.map +1 -0
  108. package/dist/types/bar.types.d.mts +12 -0
  109. package/dist/types/bar.types.js +1 -0
  110. package/dist/types/bar.types.js.map +1 -0
  111. package/dist/types/index.d.mts +10 -0
  112. package/dist/types/index.js +10 -0
  113. package/dist/types/index.js.map +1 -1
  114. package/dist/types/multi-bar-chart.types.d.mts +21 -0
  115. package/dist/types/multi-bar-chart.types.js +1 -0
  116. package/dist/types/multi-bar-chart.types.js.map +1 -0
  117. package/dist/types/multi-pie-chart.types.d.mts +20 -0
  118. package/dist/types/multi-pie-chart.types.js +1 -0
  119. package/dist/types/multi-pie-chart.types.js.map +1 -0
  120. package/dist/types/pie-chart.types.d.mts +46 -0
  121. package/dist/types/pie-chart.types.js +1 -0
  122. package/dist/types/pie-chart.types.js.map +1 -0
  123. package/dist/types/pie.types.d.mts +10 -0
  124. package/dist/types/pie.types.js +1 -0
  125. package/dist/types/pie.types.js.map +1 -0
  126. package/dist/types/use-bar-chart.types.d.mts +26 -0
  127. package/dist/types/use-bar-chart.types.js +1 -0
  128. package/dist/types/use-bar-chart.types.js.map +1 -0
  129. package/dist/types/use-multi-bar-chart.types.d.mts +17 -0
  130. package/dist/types/use-multi-bar-chart.types.js +1 -0
  131. package/dist/types/use-multi-bar-chart.types.js.map +1 -0
  132. package/dist/types/use-multi-pie-chart.types.d.mts +14 -0
  133. package/dist/types/use-multi-pie-chart.types.js +1 -0
  134. package/dist/types/use-multi-pie-chart.types.js.map +1 -0
  135. package/dist/types/use-pie-chart.types.d.mts +12 -0
  136. package/dist/types/use-pie-chart.types.js +1 -0
  137. package/dist/types/use-pie-chart.types.js.map +1 -0
  138. package/dist/utils/bar-chart.util.d.mts +25 -0
  139. package/dist/utils/bar-chart.util.js +145 -0
  140. package/dist/utils/bar-chart.util.js.map +1 -0
  141. package/dist/utils/grid.util.js +4 -4
  142. package/dist/utils/grid.util.js.map +1 -1
  143. package/dist/utils/index.d.mts +13 -0
  144. package/dist/utils/index.js +24 -0
  145. package/dist/utils/index.js.map +1 -1
  146. package/dist/utils/multi-bar-chart.util.d.mts +14 -0
  147. package/dist/utils/multi-bar-chart.util.js +62 -0
  148. package/dist/utils/multi-bar-chart.util.js.map +1 -0
  149. package/dist/utils/multi-pie-chart.util.d.mts +10 -0
  150. package/dist/utils/multi-pie-chart.util.js +59 -0
  151. package/dist/utils/multi-pie-chart.util.js.map +1 -0
  152. package/dist/utils/pie-chart.util.d.mts +18 -0
  153. package/dist/utils/pie-chart.util.js +82 -0
  154. package/dist/utils/pie-chart.util.js.map +1 -0
  155. package/dist/utils/pie.util.d.mts +8 -0
  156. package/dist/utils/pie.util.js +19 -0
  157. package/dist/utils/pie.util.js.map +1 -0
  158. package/package.json +5 -5
  159. package/dist/components/line-chart-body.js.map +0 -1
  160. package/dist/components/line-chart.js.map +0 -1
  161. package/dist/components/multi-line-chart-body.js.map +0 -1
  162. 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":[]}
@@ -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.Path.Make();
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.Path.Make();
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.Path.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;\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.Path.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;\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,KAAK,KAAK;AAE5B,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;AACT;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,KAAK,KAAK;AAE5B,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;AACT;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":[]}
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":[]}
@@ -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';
@@ -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
@@ -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 };