@j2inn/fin5-ui-utils 6.0.0 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.js +4 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/react/components/charts/QRCode.d.ts +2 -2
  5. package/dist/react/components/charts/QRCode.js +2 -1
  6. package/dist/react/components/charts/QRCode.js.map +1 -1
  7. package/dist/react/components/charts/line-bar/Chart.d.ts +166 -0
  8. package/dist/react/components/charts/line-bar/Chart.js +443 -0
  9. package/dist/react/components/charts/line-bar/Chart.js.map +1 -0
  10. package/dist/react/components/charts/line-bar/HGridChart.d.ts +58 -0
  11. package/dist/react/components/charts/line-bar/HGridChart.js +286 -0
  12. package/dist/react/components/charts/line-bar/HGridChart.js.map +1 -0
  13. package/dist/react/components/charts/pie/PieChart.d.ts +3 -2
  14. package/dist/react/components/charts/pie/PieChart.js +3 -1
  15. package/dist/react/components/charts/pie/PieChart.js.map +1 -1
  16. package/dist/react/components/charts/pie/SimplePieChart.d.ts +3 -2
  17. package/dist/react/components/charts/pie/SimplePieChart.js.map +1 -1
  18. package/dist/react/components/makeCustomElement.d.ts +16 -0
  19. package/dist/react/components/makeCustomElement.js +151 -0
  20. package/dist/react/components/makeCustomElement.js.map +1 -0
  21. package/dist/react/hooks/useScreenSize.d.ts +7 -0
  22. package/dist/react/hooks/useScreenSize.js +32 -0
  23. package/dist/react/hooks/useScreenSize.js.map +1 -0
  24. package/dist_es/index.d.ts +4 -0
  25. package/dist_es/index.js +4 -0
  26. package/dist_es/index.js.map +1 -1
  27. package/dist_es/react/components/charts/QRCode.d.ts +2 -2
  28. package/dist_es/react/components/charts/QRCode.js +1 -2
  29. package/dist_es/react/components/charts/QRCode.js.map +1 -1
  30. package/dist_es/react/components/charts/line-bar/Chart.d.ts +166 -0
  31. package/dist_es/react/components/charts/line-bar/Chart.js +416 -0
  32. package/dist_es/react/components/charts/line-bar/Chart.js.map +1 -0
  33. package/dist_es/react/components/charts/line-bar/HGridChart.d.ts +58 -0
  34. package/dist_es/react/components/charts/line-bar/HGridChart.js +251 -0
  35. package/dist_es/react/components/charts/line-bar/HGridChart.js.map +1 -0
  36. package/dist_es/react/components/charts/pie/PieChart.d.ts +3 -2
  37. package/dist_es/react/components/charts/pie/PieChart.js +3 -1
  38. package/dist_es/react/components/charts/pie/PieChart.js.map +1 -1
  39. package/dist_es/react/components/charts/pie/SimplePieChart.d.ts +3 -2
  40. package/dist_es/react/components/charts/pie/SimplePieChart.js.map +1 -1
  41. package/dist_es/react/components/makeCustomElement.d.ts +16 -0
  42. package/dist_es/react/components/makeCustomElement.js +143 -0
  43. package/dist_es/react/components/makeCustomElement.js.map +1 -0
  44. package/dist_es/react/hooks/useScreenSize.d.ts +7 -0
  45. package/dist_es/react/hooks/useScreenSize.js +28 -0
  46. package/dist_es/react/hooks/useScreenSize.js.map +1 -0
  47. package/package.json +5 -2
@@ -21,5 +21,5 @@ interface QRCodeProps {
21
21
  size?: number;
22
22
  className?: string;
23
23
  }
24
- declare const QRCode: React.FC<QRCodeProps>;
25
- export default QRCode;
24
+ export declare const QRCode: React.FC<QRCodeProps>;
25
+ export {};
@@ -13,7 +13,7 @@ const useStyles = createUseStyles({
13
13
  },
14
14
  },
15
15
  });
16
- const QRCode = ({ value, size = 350, copyable = true, copyText = 'Copy QR code to clipboard', className, }) => {
16
+ export const QRCode = ({ value, size = 350, copyable = true, copyText = 'Copy QR code to clipboard', className, }) => {
17
17
  const classes = useStyles();
18
18
  const canvasRef = useRef(null);
19
19
  const [qrCode, setQrCode] = useState();
@@ -50,5 +50,4 @@ const QRCode = ({ value, size = 350, copyable = true, copyText = 'Copy QR code t
50
50
  } }, copyText)),
51
51
  React.createElement("canvas", { ref: canvasRef })));
52
52
  };
53
- export default QRCode;
54
53
  //# sourceMappingURL=QRCode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QRCode.js","sourceRoot":"","sources":["../../../../src/react/components/charts/QRCode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,KAAK,EAAE,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,MAAM,EACN,QAAQ,GACR,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,SAAS,GAAG,eAAe,CAAC;IACjC,MAAM,EAAE;QACP,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,CAAC,MAAM,UAAU,aAAa,CAAC,EAAE;YAChC,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,OAAO;SACtB;KACD;CACD,CAAC,CAAA;AAyBF,MAAM,MAAM,GAA0B,CAAC,EACtC,KAAK,EACL,IAAI,GAAG,GAAG,EACV,QAAQ,GAAG,IAAI,EACf,QAAQ,GAAG,2BAA2B,EACtC,SAAS,GACT,EAAE,EAAE;IACJ,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAA;IACjD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAiB,CAAA;IAErD,eAAe,CAAC,GAAG,EAAE;QACpB,IAAI,SAAS,CAAC,OAAO,EAAE;YACtB,SAAS,CACR,IAAI,MAAM,CAAC;gBACV,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,KAAK;gBACL,IAAI;aACJ,CAAC,CACF,CAAA;SACD;IACF,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAE9B,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;YACnC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;SAClB;IACF,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,qBAAqB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACpD,IAAI,SAAS,CAAC,OAAO,EAAE;YACtB,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACvC,IAAI,IAAI,EAAE;oBACT,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;wBACzB,IAAI,aAAa,CAAC;4BACjB,WAAW,EAAE,IAAI;yBACjB,CAAC;qBACF,CAAC,CAAA;iBACF;YACF,CAAC,CAAC,CAAA;SACF;IACF,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAEvB,OAAO,CACN,6BAAK,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;QAC3C,QAAQ,IAAI,CACZ,oBAAC,UAAU,CAAC,IAAI,IACf,QAAQ,EAAE;gBACT,MAAM,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE;aACrC,IACA,QAAQ,CACQ,CAClB;QACD,gCAAQ,GAAG,EAAE,SAAS,GAAW,CAC5B,CACN,CAAA;AACF,CAAC,CAAA;AAED,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"QRCode.js","sourceRoot":"","sources":["../../../../src/react/components/charts/QRCode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,KAAK,EAAE,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,MAAM,EACN,QAAQ,GACR,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,SAAS,GAAG,eAAe,CAAC;IACjC,MAAM,EAAE;QACP,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,CAAC,MAAM,UAAU,aAAa,CAAC,EAAE;YAChC,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,OAAO;SACtB;KACD;CACD,CAAC,CAAA;AAyBF,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC7C,KAAK,EACL,IAAI,GAAG,GAAG,EACV,QAAQ,GAAG,IAAI,EACf,QAAQ,GAAG,2BAA2B,EACtC,SAAS,GACT,EAAE,EAAE;IACJ,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAA;IACjD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAiB,CAAA;IAErD,eAAe,CAAC,GAAG,EAAE;QACpB,IAAI,SAAS,CAAC,OAAO,EAAE;YACtB,SAAS,CACR,IAAI,MAAM,CAAC;gBACV,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,KAAK;gBACL,IAAI;aACJ,CAAC,CACF,CAAA;SACD;IACF,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAE9B,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;YACnC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;SAClB;IACF,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,qBAAqB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACpD,IAAI,SAAS,CAAC,OAAO,EAAE;YACtB,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACvC,IAAI,IAAI,EAAE;oBACT,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;wBACzB,IAAI,aAAa,CAAC;4BACjB,WAAW,EAAE,IAAI;yBACjB,CAAC;qBACF,CAAC,CAAA;iBACF;YACF,CAAC,CAAC,CAAA;SACF;IACF,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAEvB,OAAO,CACN,6BAAK,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;QAC3C,QAAQ,IAAI,CACZ,oBAAC,UAAU,CAAC,IAAI,IACf,QAAQ,EAAE;gBACT,MAAM,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE;aACrC,IACA,QAAQ,CACQ,CAClB;QACD,gCAAQ,GAAG,EAAE,SAAS,GAAW,CAC5B,CACN,CAAA;AACF,CAAC,CAAA"}
@@ -0,0 +1,166 @@
1
+ import * as am5 from '@amcharts/amcharts5';
2
+ import { ITimeInterval } from '@amcharts/amcharts5/.internal/core/util/Time';
3
+ import * as am5xy from '@amcharts/amcharts5/xy';
4
+ import React from 'react';
5
+ export declare type StackedColumnChartInterfaceColors = {
6
+ [Property in keyof am5.IInterfaceColorsSettings]: string;
7
+ };
8
+ export interface StackedColumnChartColorPalette {
9
+ interfaceColors?: Partial<StackedColumnChartInterfaceColors>;
10
+ series?: string[];
11
+ }
12
+ export declare enum UnitPlacement {
13
+ none = "none",
14
+ top = "top",
15
+ axis = "axis"
16
+ }
17
+ export declare enum AxisPlacement {
18
+ left = "left",
19
+ right = "right"
20
+ }
21
+ export declare enum LegendPlacement {
22
+ top = "top",
23
+ bottom = "bottom",
24
+ left = "left",
25
+ right = "right",
26
+ hidden = "hidden"
27
+ }
28
+ interface BaseChartSeriesProps {
29
+ seriesName: string;
30
+ dis?: string;
31
+ unit?: string;
32
+ axisPlacement?: AxisPlacement;
33
+ hideAxis?: boolean;
34
+ }
35
+ export interface BarChartSeriesData extends BaseChartSeriesProps {
36
+ stroke?: am5.Color;
37
+ data: LineChartSeriesPoint[];
38
+ }
39
+ export interface LineChartSeriesPoint {
40
+ ts: number;
41
+ value: number | undefined | null;
42
+ }
43
+ export interface LineChartSeriesData extends BaseChartSeriesProps {
44
+ strokeSettings?: {
45
+ stroke?: am5.Color;
46
+ strokeDasharray?: number[];
47
+ strokeWidth?: number;
48
+ };
49
+ data: LineChartSeriesPoint[];
50
+ }
51
+ export interface ChartAxisRangeData {
52
+ startValue?: number;
53
+ endValue?: number;
54
+ foreground?: am5.Color;
55
+ color?: am5.Color;
56
+ opacity?: number;
57
+ text?: string;
58
+ html?: string;
59
+ tooltip?: string;
60
+ showText?: boolean;
61
+ placeBelow?: boolean;
62
+ }
63
+ export interface ChartProps {
64
+ /**
65
+ * Data used to populate the chart with columns
66
+ */
67
+ barSeriesData?: BarChartSeriesData[];
68
+ /**
69
+ * Data used to populate the chart with stacked columns
70
+ */
71
+ stackedBarSeriesData?: BarChartSeriesData[];
72
+ /**
73
+ * Data used to populate the chart with line series
74
+ */
75
+ lineSeriesData?: LineChartSeriesData[];
76
+ rangesData?: ChartAxisRangeData[];
77
+ /**
78
+ * The name of the prop in the data that contains the timestamp
79
+ */
80
+ dateField: string;
81
+ /**
82
+ * True to activate the cursor
83
+ */
84
+ cursor?: boolean;
85
+ /**
86
+ * The time interval for the Date Axis @see https://www.amcharts.com/docs/v5/charts/xy-chart/axes/date-axis/#data-granularity
87
+ */
88
+ baseInterval: ITimeInterval;
89
+ /**
90
+ * Color palette for the chart slices and interface colors @see https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Interface_colors
91
+ */
92
+ colorPalette?: Partial<StackedColumnChartColorPalette>;
93
+ /**
94
+ * Number formatting options @see https://www.amcharts.com/docs/v5/tutorials/formatting-date-time-and-numbers-using-intl-object/#Formatting_numbers
95
+ */
96
+ numberFormat?: Intl.NumberFormatOptions;
97
+ /**
98
+ * amcharts5 theme classes to be used by the chart @see https://www.amcharts.com/docs/v5/concepts/themes/
99
+ */
100
+ chartThemes?: typeof am5.Theme[];
101
+ /**
102
+ * Settings for chart customization @see https://www.amcharts.com/docs/v5/reference/xychart/#Settings
103
+ */
104
+ chartSettings?: am5xy.IXYChartSettings;
105
+ /**
106
+ * Settings for legend customization @see https://www.amcharts.com/docs/v5/reference/legend/#Settings
107
+ */
108
+ legendSettings?: am5.ILegendSettings;
109
+ /**
110
+ * Settings for legend labels customization @see https://www.amcharts.com/docs/v5/concepts/legend/#labels
111
+ */
112
+ legendLabelsSettings?: am5.ILabelSettings;
113
+ /**
114
+ * Settings for legend markers customization @see https://www.amcharts.com/docs/v5/concepts/legend/#labels
115
+ */
116
+ legendMarkersSettings?: am5.ILabelSettings & {
117
+ rounded?: boolean;
118
+ };
119
+ /**
120
+ * Settings for date axis @see https://www.amcharts.com/docs/v5/reference/dateaxis/#Settings
121
+ */
122
+ dateAxisSettings?: Omit<am5xy.IDateAxisSettings<am5xy.AxisRenderer>, 'baseInterval' | 'renderer'>;
123
+ /**
124
+ * Settings for date axis renderer @see https://www.amcharts.com/docs/v5/reference/iaxisrendererxsettings/
125
+ */
126
+ dateAxisRendererSettings?: am5xy.IAxisRendererXSettings;
127
+ /**
128
+ * Settings for category axis @see https://www.amcharts.com/docs/v5/reference/valueaxis/#Settings
129
+ */
130
+ valueAxisSettings?: Omit<am5xy.IValueAxisSettings<am5xy.AxisRenderer>, 'renderer'>;
131
+ /**
132
+ * Settings for chart series customization @see https://www.amcharts.com/docs/v5/reference/grid/#Settings
133
+ */
134
+ gridSettings?: Partial<am5xy.IGridSettings>;
135
+ /**
136
+ * Settings for chart column series customization @see https://www.amcharts.com/docs/v5/reference/columnseries/#Settings
137
+ */
138
+ barSeriesSettings?: am5xy.IColumnSeriesSettings;
139
+ /**
140
+ * Settings for chart line series customization @see https://www.amcharts.com/docs/v5/reference/lineseries/#Settings
141
+ */
142
+ lineSeriesSettings?: Partial<am5xy.ILineSeriesSettings>;
143
+ /**
144
+ * Settings for series column customization @see https://www.amcharts.com/docs/v5/reference/roundedrectangle/#Settings
145
+ */
146
+ columnSettings?: Partial<am5.IRoundedRectangleSettings>;
147
+ /**
148
+ * Settings for tooltips label customization @see https://www.amcharts.com/docs/v5/reference/ilabelsettings/
149
+ */
150
+ tooltipSettings?: Partial<am5.ILabelSettings>;
151
+ unitPlacement?: UnitPlacement;
152
+ legendPlacement?: LegendPlacement;
153
+ translateLabel?: (name: string) => string;
154
+ /**
155
+ * Optional DOM id for the chart container, if not specified it will be automatically generated.
156
+ * It can also be an HTMLElement, in that case the element will be used as a parent.
157
+ */
158
+ DOMtargetId?: string | HTMLElement;
159
+ }
160
+ /**
161
+ * Customizable stacked column and line chart component based on amcharts5
162
+ *
163
+ * This component wraps some of the chart configuration trying to make it more react-friendly
164
+ */
165
+ export declare const Chart: React.FC<ChartProps>;
166
+ export {};
@@ -0,0 +1,416 @@
1
+ /*
2
+ * Copyright (c) 2025, J2 Innovations. All Rights Reserved
3
+ */
4
+ import * as am5 from '@amcharts/amcharts5';
5
+ import * as am5xy from '@amcharts/amcharts5/xy';
6
+ import { debounce } from 'lodash';
7
+ import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';
8
+ import { createUseStyles, useTheme } from 'react-jss';
9
+ const useStyles = createUseStyles({
10
+ root: {
11
+ width: '100%',
12
+ height: '100%',
13
+ },
14
+ });
15
+ /**
16
+ * Returns a color palette selecting some colors from the theme.
17
+ * @param theme The theme
18
+ * @returns An array of colors
19
+ */
20
+ const getDefaultChartColors = (theme) => {
21
+ return {
22
+ interfaceColors: {
23
+ text: theme.textColor,
24
+ },
25
+ series: [
26
+ theme.palette.lime,
27
+ theme.palette.cyan,
28
+ theme.palette.orange,
29
+ theme.palette.blue,
30
+ theme.palette.volcano,
31
+ theme.palette.green,
32
+ theme.palette.purple,
33
+ theme.palette.magenta,
34
+ theme.palette.grey,
35
+ theme.palette.gold,
36
+ theme.palette.red,
37
+ theme.palette.yellow,
38
+ ],
39
+ };
40
+ };
41
+ const buildYRenderer = (root, opposite = false, gridSettings) => {
42
+ const yRenderer = am5xy.AxisRendererY.new(root, {
43
+ strokeOpacity: 0,
44
+ forceHidden: true,
45
+ opposite,
46
+ });
47
+ yRenderer.grid.template.setAll({
48
+ strokeOpacity: 1,
49
+ ...gridSettings,
50
+ });
51
+ yRenderer.labels.template.setAll({
52
+ fontSize: '0.7rem',
53
+ });
54
+ return yRenderer;
55
+ };
56
+ const buildValueAxis = (root, chart, axes, chartSeriesProps, unitPlacement, gridSettings, valueAxisSettings) => {
57
+ const unit = chartSeriesProps.unit ?? '';
58
+ const cachedAxis = axes.get(unit);
59
+ if (cachedAxis) {
60
+ return cachedAxis;
61
+ }
62
+ const opposite = (chartSeriesProps.axisPlacement ?? AxisPlacement.left) ==
63
+ AxisPlacement.right;
64
+ const renderer = buildYRenderer(root, opposite, gridSettings);
65
+ const axisToSync = axes.values().next()?.value;
66
+ const axis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
67
+ renderer: renderer,
68
+ numberFormat: unitPlacement == UnitPlacement.axis && unit
69
+ ? `#' ${unit}'`
70
+ : undefined,
71
+ marginTop: unitPlacement == UnitPlacement.top ? 15 : 0,
72
+ syncWithAxis: axisToSync,
73
+ visible: chartSeriesProps.hideAxis
74
+ ? !chartSeriesProps.hideAxis
75
+ : true,
76
+ ...valueAxisSettings,
77
+ }));
78
+ if (unitPlacement == UnitPlacement.top) {
79
+ addUnitTextLabels(root, chart, unit, opposite);
80
+ }
81
+ axes.set(unit, axis);
82
+ return axis;
83
+ };
84
+ const addUnitTextLabels = (root, chart, unit, opposite) => {
85
+ if (unit) {
86
+ const unitTextStyle = {
87
+ ignoreFormatting: true,
88
+ fontSize: '0.7rem',
89
+ height: 18,
90
+ marginBottom: 15,
91
+ position: 'absolute',
92
+ };
93
+ const x = am5.percent(!opposite ? 0 : 100);
94
+ const centerX = am5.percent(!opposite ? 0 : 100);
95
+ chart.children.unshift(am5.Label.new(root, {
96
+ text: `[${unit}]`,
97
+ x: x,
98
+ centerX: centerX,
99
+ ...unitTextStyle,
100
+ }));
101
+ }
102
+ };
103
+ const buildLabelText = (unit, numberFormat) => `[bold]{name}[/]: {valueY.formatNumber(${numberFormat ? `"${numberFormat}"` : ''})}${unit ? ` ${unit}` : ''}\n{valueX.formatDate("d MMM HH:mm")}`;
104
+ const addLineSeries = (data, root, chart, xAxis, yAxes, dateField, unitPlacement, legendRef, gridSettings, valueAxisSettings, translateLabel, lineSeriesSettings, tooltipSettings) => {
105
+ data.forEach((lineSeries) => {
106
+ const lineYAxis = buildValueAxis(root, chart, yAxes, lineSeries, unitPlacement, gridSettings, valueAxisSettings);
107
+ const series = chart.series.push(am5xy.LineSeries.new(root, {
108
+ name: lineSeries.dis ??
109
+ translateLabel?.(lineSeries.seriesName) ??
110
+ lineSeries.seriesName,
111
+ xAxis: xAxis,
112
+ yAxis: lineYAxis,
113
+ valueYField: 'value',
114
+ valueXField: dateField,
115
+ fill: lineSeries.strokeSettings?.stroke,
116
+ tooltip: am5.Tooltip.new(root, {
117
+ labelText: buildLabelText(lineSeries.unit, '#.##'),
118
+ }),
119
+ ...lineSeriesSettings,
120
+ ...lineSeries.strokeSettings,
121
+ }));
122
+ if (tooltipSettings) {
123
+ series.get('tooltip')?.label.setAll(tooltipSettings);
124
+ }
125
+ if (lineSeries.strokeSettings) {
126
+ series.strokes.template.setAll(lineSeries.strokeSettings);
127
+ series.fills.template.setAll(lineSeries.strokeSettings);
128
+ }
129
+ series.data.setAll(lineSeries.data);
130
+ legendRef.current?.data.push(series);
131
+ });
132
+ };
133
+ const addBarSeries = (data, root, chart, xAxis, yAxes, dateField, unitPlacement, stacked = false, legendRef, gridSettings, valueAxisSettings, translateLabel, barSeriesSettings, columnSettings, tooltipSettings) => {
134
+ data.forEach((barSeries) => {
135
+ const seriesName = barSeries.seriesName;
136
+ // Setup Y axes, one on the left and one on the right
137
+ const barYAxis = buildValueAxis(root, chart, yAxes, barSeries, unitPlacement, gridSettings, valueAxisSettings);
138
+ const seriesOptions = {
139
+ name: translateLabel?.(seriesName) ?? barSeries.dis ?? seriesName,
140
+ xAxis: xAxis,
141
+ yAxis: barYAxis,
142
+ stacked: stacked,
143
+ tooltip: am5.Tooltip.new(root, {
144
+ labelText: buildLabelText(barSeries.unit),
145
+ }),
146
+ valueYField: 'value',
147
+ valueXField: dateField,
148
+ };
149
+ if (barSeries.stroke) {
150
+ seriesOptions.fill = barSeries.stroke;
151
+ }
152
+ const series = chart.series.push(am5xy.ColumnSeries.new(root, {
153
+ ...seriesOptions,
154
+ ...barSeriesSettings,
155
+ }));
156
+ series.columns.template.setAll({
157
+ ...columnSettings,
158
+ });
159
+ if (tooltipSettings) {
160
+ series.columns.template
161
+ .get('tooltip')
162
+ ?.label.setAll(tooltipSettings);
163
+ }
164
+ series.data.setAll(barSeries.data);
165
+ legendRef.current?.data.push(series);
166
+ });
167
+ };
168
+ const addRanges = (root, axis, rangesData) => {
169
+ rangesData?.forEach((rangeData) => {
170
+ addRange(root, axis, rangeData, rangeData.placeBelow);
171
+ });
172
+ };
173
+ const addRange = (root, axis, rangeData, shifted = false) => {
174
+ const rangeDataItem = axis.makeDataItem({
175
+ value: rangeData.startValue,
176
+ endValue: rangeData.endValue,
177
+ isRange: true,
178
+ });
179
+ axis.createAxisRange(rangeDataItem);
180
+ const axisFill = rangeDataItem.get('axisFill');
181
+ axisFill?.setAll({
182
+ fill: rangeData.color,
183
+ fillOpacity: 0,
184
+ visible: true,
185
+ });
186
+ const label = rangeDataItem.get('label');
187
+ label?.setAll({
188
+ text: rangeData.showText ? rangeData.text : '',
189
+ fill: rangeData.foreground,
190
+ html: rangeData.html,
191
+ fontSize: '0.8rem',
192
+ height: 24,
193
+ location: 0,
194
+ centerX: 0,
195
+ tooltipText: rangeData.tooltip,
196
+ layer: -1,
197
+ background: am5.Rectangle.new(root, {
198
+ fill: rangeData.color,
199
+ fillOpacity: rangeData.opacity ?? 0.2,
200
+ strokeWidth: 1,
201
+ stroke: rangeData.foreground,
202
+ }),
203
+ });
204
+ axisFill?.events.on('boundschanged', (e) => {
205
+ label?.setAll({
206
+ width: e.target.width(),
207
+ maxWidth: e.target.width(),
208
+ oversizedBehavior: 'truncate',
209
+ y: shifted ? 24 : 0,
210
+ });
211
+ });
212
+ };
213
+ const setupLegend = (root, chart, legendPlacement, legendSettings, legendLabelsSettings, legendMarkersSettings) => {
214
+ const legendItem = am5.Legend.new(root, {
215
+ paddingTop: legendPlacement == LegendPlacement.bottom ? 20 : 0,
216
+ paddingBottom: legendPlacement == LegendPlacement.top ? 20 : 0,
217
+ forceHidden: legendPlacement == LegendPlacement.hidden,
218
+ layout: legendPlacement == LegendPlacement.left ||
219
+ legendPlacement == LegendPlacement.right
220
+ ? root.verticalLayout
221
+ : root.gridLayout,
222
+ ...legendSettings,
223
+ });
224
+ // Setup legend
225
+ const legend = legendPlacement == LegendPlacement.left ||
226
+ legendPlacement == LegendPlacement.top
227
+ ? chart.children.unshift(legendItem)
228
+ : chart.children.push(legendItem);
229
+ legend.labels.template.setAll({
230
+ fontSize: '0.8rem',
231
+ ...legendLabelsSettings,
232
+ });
233
+ legend.valueLabels.template.setAll({
234
+ forceHidden: true,
235
+ });
236
+ legend.markers.template.setAll({
237
+ width: 12,
238
+ height: 12,
239
+ ...legendMarkersSettings,
240
+ });
241
+ if (legendMarkersSettings?.rounded) {
242
+ legend.markerRectangles.template.setAll({
243
+ cornerRadiusTL: 100,
244
+ cornerRadiusTR: 100,
245
+ cornerRadiusBL: 100,
246
+ cornerRadiusBR: 100,
247
+ });
248
+ }
249
+ return legend;
250
+ };
251
+ export var UnitPlacement;
252
+ (function (UnitPlacement) {
253
+ UnitPlacement["none"] = "none";
254
+ UnitPlacement["top"] = "top";
255
+ UnitPlacement["axis"] = "axis";
256
+ })(UnitPlacement || (UnitPlacement = {}));
257
+ export var AxisPlacement;
258
+ (function (AxisPlacement) {
259
+ AxisPlacement["left"] = "left";
260
+ AxisPlacement["right"] = "right";
261
+ })(AxisPlacement || (AxisPlacement = {}));
262
+ export var LegendPlacement;
263
+ (function (LegendPlacement) {
264
+ LegendPlacement["top"] = "top";
265
+ LegendPlacement["bottom"] = "bottom";
266
+ LegendPlacement["left"] = "left";
267
+ LegendPlacement["right"] = "right";
268
+ LegendPlacement["hidden"] = "hidden";
269
+ })(LegendPlacement || (LegendPlacement = {}));
270
+ /**
271
+ * Customizable stacked column and line chart component based on amcharts5
272
+ *
273
+ * This component wraps some of the chart configuration trying to make it more react-friendly
274
+ */
275
+ export const Chart = ({ DOMtargetId, baseInterval, barSeriesData, stackedBarSeriesData, lineSeriesData, rangesData, dateField, colorPalette, numberFormat, chartThemes, chartSettings, legendSettings, legendLabelsSettings, legendMarkersSettings, dateAxisSettings, dateAxisRendererSettings, valueAxisSettings, gridSettings, barSeriesSettings, lineSeriesSettings, columnSettings, tooltipSettings, cursor = false, unitPlacement = UnitPlacement.none, legendPlacement = LegendPlacement.bottom, translateLabel, }) => {
276
+ // Colors configuration
277
+ const theme = useTheme();
278
+ const colors = { ...getDefaultChartColors(theme), ...colorPalette };
279
+ // Chart lifecycle
280
+ const [id, setId] = useState(DOMtargetId ?? `amchart-${Math.random()}`);
281
+ const containerRef = useRef(null);
282
+ const rootRef = useRef(null);
283
+ const chartRef = useRef(null);
284
+ const legendRef = useRef(null);
285
+ useEffect(() => {
286
+ if (DOMtargetId && DOMtargetId !== id) {
287
+ setId(DOMtargetId);
288
+ }
289
+ }, [DOMtargetId]);
290
+ // Chart setup
291
+ useLayoutEffect(() => {
292
+ const root = am5.Root.new(id);
293
+ root.autoResize = false;
294
+ // Setup amcharts theme
295
+ if (chartThemes) {
296
+ root.setThemes(chartThemes.map((t) => t.new(root)));
297
+ }
298
+ // Setup interface colors, see https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Interface_colors
299
+ if (colors.interfaceColors) {
300
+ // Remap settings to use amcharts Color objects
301
+ for (const setting in colors.interfaceColors) {
302
+ const color = colors.interfaceColors[setting];
303
+ // Apply defined interfaceColor on the chart
304
+ root.interfaceColors.set(setting, am5.color(color));
305
+ }
306
+ }
307
+ // Setup chart settings
308
+ const chart = root.container.children.push(am5xy.XYChart.new(root, {
309
+ layout: legendPlacement == LegendPlacement.left ||
310
+ legendPlacement == LegendPlacement.right
311
+ ? root.horizontalLayout
312
+ : root.verticalLayout,
313
+ paddingLeft: 0,
314
+ paddingRight: 0,
315
+ paddingBottom: 0,
316
+ paddingTop: legendPlacement == LegendPlacement.top ||
317
+ unitPlacement == UnitPlacement.top
318
+ ? 35
319
+ : 10,
320
+ ...chartSettings,
321
+ }));
322
+ // Setup cursor
323
+ if (cursor) {
324
+ chart.set('cursor', am5xy.XYCursor.new(root, {}));
325
+ }
326
+ // Setup series colors
327
+ if (colors?.series) {
328
+ chart.get('colors')?.set('colors', colors.series.map((c) => am5.color(c)));
329
+ }
330
+ const legend = setupLegend(root, chart, legendPlacement, legendSettings, legendLabelsSettings, legendMarkersSettings);
331
+ rootRef.current = root;
332
+ chartRef.current = chart;
333
+ legendRef.current = legend;
334
+ // Clean up before component removal from the DOM
335
+ return () => {
336
+ legendRef.current?.dispose();
337
+ legendRef.current = null;
338
+ chartRef.current?.dispose();
339
+ chartRef.current = null;
340
+ root?.dispose();
341
+ rootRef.current = null;
342
+ };
343
+ }, [id, colors, chartThemes, chartSettings, legendSettings]);
344
+ // Set data
345
+ useEffect(() => {
346
+ const root = rootRef.current;
347
+ const chart = chartRef.current;
348
+ if (chart && root) {
349
+ chart.series.clear();
350
+ if (barSeriesData?.length == 0 &&
351
+ stackedBarSeriesData?.length == 0 &&
352
+ lineSeriesData?.length == 0) {
353
+ return;
354
+ }
355
+ // Setup axes
356
+ const xRenderer = am5xy.AxisRendererX.new(root, {
357
+ strokeWidth: 0,
358
+ minGridDistance: 30,
359
+ ...dateAxisRendererSettings,
360
+ });
361
+ const xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, {
362
+ baseInterval,
363
+ renderer: xRenderer,
364
+ ...dateAxisSettings,
365
+ }));
366
+ xRenderer.grid.template.setAll({
367
+ strokeWidth: 0,
368
+ forceHidden: true,
369
+ });
370
+ xRenderer.labels.template.setAll({
371
+ location: 0.5,
372
+ fontSize: '0.7rem',
373
+ textAlign: 'center',
374
+ });
375
+ xAxis.data.setAll(Array.prototype.concat(stackedBarSeriesData ?? [], lineSeriesData ?? [], barSeriesData ?? []));
376
+ addRanges(root, xAxis, rangesData);
377
+ const yAxes = new Map();
378
+ if (barSeriesData) {
379
+ addBarSeries(barSeriesData, root, chart, xAxis, yAxes, dateField, unitPlacement, false, legendRef, gridSettings, valueAxisSettings, translateLabel, barSeriesSettings, columnSettings, tooltipSettings);
380
+ }
381
+ if (stackedBarSeriesData) {
382
+ addBarSeries(stackedBarSeriesData, root, chart, xAxis, yAxes, dateField, unitPlacement, true, legendRef, gridSettings, valueAxisSettings, translateLabel, barSeriesSettings, columnSettings, tooltipSettings);
383
+ }
384
+ if (lineSeriesData) {
385
+ addLineSeries(lineSeriesData, root, chart, xAxis, yAxes, dateField, unitPlacement, legendRef, gridSettings, valueAxisSettings, translateLabel, lineSeriesSettings, tooltipSettings);
386
+ }
387
+ }
388
+ }, [
389
+ stackedBarSeriesData,
390
+ barSeriesData,
391
+ lineSeriesData,
392
+ chartRef.current,
393
+ colors?.series,
394
+ barSeriesSettings,
395
+ lineSeriesSettings,
396
+ ]);
397
+ useEffect(() => {
398
+ if (numberFormat) {
399
+ rootRef.current?.numberFormatter.set('numberFormat', numberFormat);
400
+ }
401
+ }, [rootRef.current, numberFormat]);
402
+ useEffect(() => {
403
+ let resizeObserver;
404
+ if (containerRef.current) {
405
+ const onResize = debounce(() => rootRef.current?.resize(), 100);
406
+ resizeObserver = new ResizeObserver(onResize);
407
+ resizeObserver.observe(containerRef.current);
408
+ }
409
+ return () => resizeObserver?.disconnect();
410
+ }, [containerRef.current, rootRef.current]);
411
+ const classes = useStyles();
412
+ return typeof id === 'string' ? (React.createElement("div", { id: id, className: classes.root })) : (
413
+ // If the DOM target is an HTML element, do not render another div. The chart will be attached to the existing element.
414
+ React.createElement(React.Fragment, null));
415
+ };
416
+ //# sourceMappingURL=Chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chart.js","sourceRoot":"","sources":["../../../../../src/react/components/charts/line-bar/Chart.tsx"],"names":[],"mappings":"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"}