@j2inn/fin5-ui-utils 6.0.0 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) 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/useFin5ColorScheme.js +30 -23
  22. package/dist/react/hooks/useFin5ColorScheme.js.map +1 -1
  23. package/dist/react/hooks/useScreenSize.d.ts +7 -0
  24. package/dist/react/hooks/useScreenSize.js +32 -0
  25. package/dist/react/hooks/useScreenSize.js.map +1 -0
  26. package/dist_es/index.d.ts +4 -0
  27. package/dist_es/index.js +4 -0
  28. package/dist_es/index.js.map +1 -1
  29. package/dist_es/react/components/charts/QRCode.d.ts +2 -2
  30. package/dist_es/react/components/charts/QRCode.js +1 -2
  31. package/dist_es/react/components/charts/QRCode.js.map +1 -1
  32. package/dist_es/react/components/charts/line-bar/Chart.d.ts +166 -0
  33. package/dist_es/react/components/charts/line-bar/Chart.js +416 -0
  34. package/dist_es/react/components/charts/line-bar/Chart.js.map +1 -0
  35. package/dist_es/react/components/charts/line-bar/HGridChart.d.ts +58 -0
  36. package/dist_es/react/components/charts/line-bar/HGridChart.js +251 -0
  37. package/dist_es/react/components/charts/line-bar/HGridChart.js.map +1 -0
  38. package/dist_es/react/components/charts/pie/PieChart.d.ts +3 -2
  39. package/dist_es/react/components/charts/pie/PieChart.js +3 -1
  40. package/dist_es/react/components/charts/pie/PieChart.js.map +1 -1
  41. package/dist_es/react/components/charts/pie/SimplePieChart.d.ts +3 -2
  42. package/dist_es/react/components/charts/pie/SimplePieChart.js.map +1 -1
  43. package/dist_es/react/components/makeCustomElement.d.ts +16 -0
  44. package/dist_es/react/components/makeCustomElement.js +143 -0
  45. package/dist_es/react/components/makeCustomElement.js.map +1 -0
  46. package/dist_es/react/hooks/useFin5ColorScheme.js +30 -23
  47. package/dist_es/react/hooks/useFin5ColorScheme.js.map +1 -1
  48. package/dist_es/react/hooks/useScreenSize.d.ts +7 -0
  49. package/dist_es/react/hooks/useScreenSize.js +28 -0
  50. package/dist_es/react/hooks/useScreenSize.js.map +1 -0
  51. package/package.json +5 -2
@@ -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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"}
@@ -0,0 +1,58 @@
1
+ import * as am5 from '@amcharts/amcharts5';
2
+ import { ITimeInterval } from '@amcharts/amcharts5/.internal/core/util/Time';
3
+ import { HBool, HDict, HGrid, HNum, HStr, HVal } from 'haystack-core';
4
+ import React from 'react';
5
+ import { BarChartSeriesData, LegendPlacement, LineChartSeriesData, UnitPlacement } from './Chart';
6
+ export declare const rollupDurationToTimeInterval: (value?: HNum) => ITimeInterval;
7
+ export interface HGridChartRange extends HGridChartItemProps {
8
+ startValue: HVal;
9
+ endValue: HVal;
10
+ }
11
+ export interface HGridChartMetadata extends HDict {
12
+ ranges?: HGridChartRange[];
13
+ hisRollupInterval?: HNum;
14
+ }
15
+ export interface HGridChartItemProps extends HDict {
16
+ dis?: HStr;
17
+ color?: HStr;
18
+ opacity?: HNum;
19
+ }
20
+ export interface HGridChartSeriesProps extends HGridChartItemProps {
21
+ series?: HStr;
22
+ variant?: HStr;
23
+ unit?: HStr;
24
+ hideAxis?: HBool;
25
+ axisPlacement?: HStr;
26
+ }
27
+ export interface HGridChartProps {
28
+ className?: string;
29
+ data: HGrid;
30
+ timeRange: [Date, Date];
31
+ timeInterval?: am5.time.ITimeInterval;
32
+ unitPlacement?: UnitPlacement;
33
+ legendPlacement?: LegendPlacement;
34
+ translateLabel?: (name: string) => string | undefined;
35
+ /**
36
+ * Optional DOM id for the chart container, if not specified it will be automatically generated.
37
+ * It can also be an HTMLElement, in that case the element will be used as a parent.
38
+ */
39
+ DOMtargetId?: string | HTMLElement;
40
+ }
41
+ export declare const isLineSeries: (colMetadata?: HGridChartSeriesProps) => boolean;
42
+ export declare const isStackedBarSeries: (colMetadata?: HGridChartSeriesProps) => boolean;
43
+ export declare const isBarSeries: (colMetadata?: HGridChartSeriesProps) => boolean;
44
+ export declare const colNameToDisProvider: (grid: HGrid, translateLabel?: ((name: string) => string | undefined) | undefined) => (colName: string) => string;
45
+ export declare const splitBarAndLineSeriesCols: (grid: HGrid) => {
46
+ barSeries: Set<string>;
47
+ stackedBarSeries: Set<string>;
48
+ lineSeries: Set<string>;
49
+ };
50
+ export declare const getBarSeriesRowData: (row: HDict, metadata: HDict, colName: string, barSeriesData: Map<string, BarChartSeriesData>) => void;
51
+ export declare const addLineSeriesRowData: (row: HDict, metadata: HDict, colName: string, lineSeriesData: Map<string, LineChartSeriesData>) => void;
52
+ export declare const calculateDefaultTimeInterval: (timeRange: [Date, Date]) => am5.time.ITimeInterval;
53
+ /**
54
+ * A component that renders a chart containing multiple series
55
+ * of different kinds, taking all the data and configuration from an HGrid.
56
+ */
57
+ export declare const HGridChart: React.NamedExoticComponent<HGridChartProps>;
58
+ export default HGridChart;