@j2inn/fin5-ui-utils 6.0.4 → 6.0.5-beta.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 (212) hide show
  1. package/README.md +5 -5
  2. package/dist/fantomProps/createFin5Props/index.d.ts +12 -12
  3. package/dist/fantomProps/createFin5Props/index.js +146 -146
  4. package/dist/fantomProps/createFin5Props/runCreateFin5Props.d.ts +2 -2
  5. package/dist/fantomProps/createFin5Props/runCreateFin5Props.js +16 -16
  6. package/dist/fantomProps/fantomPropsToObject.d.ts +8 -8
  7. package/dist/fantomProps/fantomPropsToObject.js +183 -183
  8. package/dist/fantomProps/generateJsonFromFantomPropsFile.d.ts +4 -4
  9. package/dist/fantomProps/generateJsonFromFantomPropsFile.js +41 -41
  10. package/dist/fantomProps/localePropsToJson.d.ts +1 -1
  11. package/dist/fantomProps/localePropsToJson.js +50 -50
  12. package/dist/fantomProps/readFantomPropsFile.d.ts +5 -5
  13. package/dist/fantomProps/readFantomPropsFile.js +66 -61
  14. package/dist/fantomProps/readFantomPropsFile.js.map +1 -1
  15. package/dist/fin5Top/fin5FileUpload.d.ts +24 -24
  16. package/dist/fin5Top/fin5FileUpload.js +51 -51
  17. package/dist/fin5Top/fin5Top.d.ts +124 -124
  18. package/dist/fin5Top/fin5Top.js +53 -53
  19. package/dist/fin5Top/finEdge2Cloud.d.ts +6 -6
  20. package/dist/fin5Top/finEdge2Cloud.js +15 -15
  21. package/dist/fin5Top/getFin5BinUrl.d.ts +2 -2
  22. package/dist/fin5Top/getFin5BinUrl.js +9 -9
  23. package/dist/fin5Top/openFin5Alarm.d.ts +22 -22
  24. package/dist/fin5Top/openFin5Alarm.js +23 -23
  25. package/dist/fin5Top/openFin5Historian.d.ts +3 -3
  26. package/dist/fin5Top/openFin5Historian.js +19 -19
  27. package/dist/fin5Top/useFin5AppURLHashParameter.d.ts +18 -18
  28. package/dist/fin5Top/useFin5AppURLHashParameter.js +133 -133
  29. package/dist/index.d.ts +35 -35
  30. package/dist/index.js +69 -69
  31. package/dist/jobs/jobUtils.d.ts +14 -14
  32. package/dist/jobs/jobUtils.js +15 -15
  33. package/dist/react/app/Fin5AppContainer.d.ts +36 -36
  34. package/dist/react/app/Fin5AppContainer.js +102 -102
  35. package/dist/react/app/Fin5AppRootStore.d.ts +40 -40
  36. package/dist/react/app/Fin5AppRootStore.js +69 -69
  37. package/dist/react/components/ErrorBoundary.d.ts +57 -57
  38. package/dist/react/components/ErrorBoundary.js +150 -150
  39. package/dist/react/components/ErrorDisplayer.d.ts +19 -19
  40. package/dist/react/components/ErrorDisplayer.js +36 -36
  41. package/dist/react/components/Loader.d.ts +9 -9
  42. package/dist/react/components/Loader.js +17 -17
  43. package/dist/react/components/LoadingSpinner.d.ts +2 -2
  44. package/dist/react/components/LoadingSpinner.js +27 -27
  45. package/dist/react/components/RecordImage.d.ts +20 -20
  46. package/dist/react/components/RecordImage.js +51 -51
  47. package/dist/react/components/charts/QRCode.d.ts +25 -25
  48. package/dist/react/components/charts/QRCode.js +82 -82
  49. package/dist/react/components/charts/line-bar/Chart.d.ts +166 -166
  50. package/dist/react/components/charts/line-bar/Chart.js +442 -442
  51. package/dist/react/components/charts/line-bar/HGridChart.d.ts +58 -58
  52. package/dist/react/components/charts/line-bar/HGridChart.js +285 -285
  53. package/dist/react/components/charts/pie/PieChart.d.ts +94 -94
  54. package/dist/react/components/charts/pie/PieChart.js +204 -204
  55. package/dist/react/components/charts/pie/SimplePieChart.d.ts +21 -21
  56. package/dist/react/components/charts/pie/SimplePieChart.js +55 -55
  57. package/dist/react/components/graphics/GraphicViewer.d.ts +10 -10
  58. package/dist/react/components/graphics/GraphicViewer.js +29 -29
  59. package/dist/react/components/graphics/GraphicsTabViewer.d.ts +17 -17
  60. package/dist/react/components/graphics/GraphicsTabViewer.js +90 -90
  61. package/dist/react/components/makeCustomElement.d.ts +16 -16
  62. package/dist/react/components/makeCustomElement.js +150 -150
  63. package/dist/react/components/navigation/BasicLayout.d.ts +41 -41
  64. package/dist/react/components/navigation/BasicLayout.js +155 -155
  65. package/dist/react/components/navigation/HeaderSiderLayout.d.ts +13 -13
  66. package/dist/react/components/navigation/HeaderSiderLayout.js +110 -110
  67. package/dist/react/components/navigation/MenuPage.d.ts +37 -37
  68. package/dist/react/components/navigation/MenuPage.js +36 -36
  69. package/dist/react/components/navigation/MenuTrigger.d.ts +9 -9
  70. package/dist/react/components/navigation/MenuTrigger.js +33 -33
  71. package/dist/react/components/navigation/ReactRouterHeaderSiderLayout.d.ts +11 -11
  72. package/dist/react/components/navigation/ReactRouterHeaderSiderLayout.js +25 -25
  73. package/dist/react/components/navigation/ReactRouterLayout.d.ts +46 -46
  74. package/dist/react/components/navigation/ReactRouterLayout.js +132 -132
  75. package/dist/react/components/navigation/customRouting/Router.d.ts +12 -12
  76. package/dist/react/components/navigation/customRouting/Router.js +45 -45
  77. package/dist/react/components/navigation/customRouting/RouterLayout.d.ts +11 -11
  78. package/dist/react/components/navigation/customRouting/RouterLayout.js +61 -61
  79. package/dist/react/components/resolvable/configurationForm/ConfigurationForm.d.ts +27 -27
  80. package/dist/react/components/resolvable/configurationForm/ConfigurationForm.js +95 -95
  81. package/dist/react/components/resolvable/configurationForm/ConfigurationFormEntry.d.ts +16 -16
  82. package/dist/react/components/resolvable/configurationForm/ConfigurationFormEntry.js +88 -88
  83. package/dist/react/components/resolvable/configurationForm/getSectionDefault.d.ts +16 -16
  84. package/dist/react/components/resolvable/configurationForm/getSectionDefault.js +99 -99
  85. package/dist/react/hooks/useFin5BinUrl.d.ts +6 -6
  86. package/dist/react/hooks/useFin5BinUrl.js +15 -15
  87. package/dist/react/hooks/useFin5ColorScheme.d.ts +2 -2
  88. package/dist/react/hooks/useFin5ColorScheme.js +49 -49
  89. package/dist/react/hooks/useScreenSize.d.ts +7 -7
  90. package/dist/react/hooks/useScreenSize.js +31 -31
  91. package/dist_es/fantomProps/createFin5Props/index.d.ts +12 -12
  92. package/dist_es/fantomProps/createFin5Props/index.js +140 -140
  93. package/dist_es/fantomProps/createFin5Props/runCreateFin5Props.d.ts +2 -2
  94. package/dist_es/fantomProps/createFin5Props/runCreateFin5Props.js +11 -11
  95. package/dist_es/fantomProps/fantomPropsToObject.d.ts +8 -8
  96. package/dist_es/fantomProps/fantomPropsToObject.js +178 -178
  97. package/dist_es/fantomProps/generateJsonFromFantomPropsFile.d.ts +4 -4
  98. package/dist_es/fantomProps/generateJsonFromFantomPropsFile.js +12 -12
  99. package/dist_es/fantomProps/localePropsToJson.d.ts +1 -1
  100. package/dist_es/fantomProps/localePropsToJson.js +21 -21
  101. package/dist_es/fantomProps/readFantomPropsFile.d.ts +5 -5
  102. package/dist_es/fantomProps/readFantomPropsFile.js +40 -35
  103. package/dist_es/fantomProps/readFantomPropsFile.js.map +1 -1
  104. package/dist_es/fin5Top/fin5FileUpload.d.ts +24 -24
  105. package/dist_es/fin5Top/fin5FileUpload.js +47 -47
  106. package/dist_es/fin5Top/fin5Top.d.ts +124 -124
  107. package/dist_es/fin5Top/fin5Top.js +49 -49
  108. package/dist_es/fin5Top/finEdge2Cloud.d.ts +6 -6
  109. package/dist_es/fin5Top/finEdge2Cloud.js +11 -11
  110. package/dist_es/fin5Top/getFin5BinUrl.d.ts +2 -2
  111. package/dist_es/fin5Top/getFin5BinUrl.js +5 -5
  112. package/dist_es/fin5Top/openFin5Alarm.d.ts +22 -22
  113. package/dist_es/fin5Top/openFin5Alarm.js +19 -19
  114. package/dist_es/fin5Top/openFin5Historian.d.ts +3 -3
  115. package/dist_es/fin5Top/openFin5Historian.js +15 -15
  116. package/dist_es/fin5Top/useFin5AppURLHashParameter.d.ts +18 -18
  117. package/dist_es/fin5Top/useFin5AppURLHashParameter.js +124 -124
  118. package/dist_es/index.d.ts +35 -35
  119. package/dist_es/index.js +53 -53
  120. package/dist_es/jobs/jobUtils.d.ts +14 -14
  121. package/dist_es/jobs/jobUtils.js +9 -9
  122. package/dist_es/react/app/Fin5AppContainer.d.ts +36 -36
  123. package/dist_es/react/app/Fin5AppContainer.js +73 -73
  124. package/dist_es/react/app/Fin5AppContainer.jsx +82 -0
  125. package/dist_es/react/app/Fin5AppContainer.jsx.map +1 -0
  126. package/dist_es/react/app/Fin5AppRootStore.d.ts +40 -40
  127. package/dist_es/react/app/Fin5AppRootStore.js +65 -65
  128. package/dist_es/react/components/ErrorBoundary.d.ts +57 -57
  129. package/dist_es/react/components/ErrorBoundary.js +123 -123
  130. package/dist_es/react/components/ErrorBoundary.jsx +150 -0
  131. package/dist_es/react/components/ErrorBoundary.jsx.map +1 -0
  132. package/dist_es/react/components/ErrorDisplayer.d.ts +19 -19
  133. package/dist_es/react/components/ErrorDisplayer.js +28 -28
  134. package/dist_es/react/components/ErrorDisplayer.jsx +36 -0
  135. package/dist_es/react/components/ErrorDisplayer.jsx.map +1 -0
  136. package/dist_es/react/components/Loader.d.ts +9 -9
  137. package/dist_es/react/components/Loader.js +12 -12
  138. package/dist_es/react/components/Loader.jsx +13 -0
  139. package/dist_es/react/components/Loader.jsx.map +1 -0
  140. package/dist_es/react/components/LoadingSpinner.d.ts +2 -2
  141. package/dist_es/react/components/LoadingSpinner.js +20 -20
  142. package/dist_es/react/components/LoadingSpinner.jsx +22 -0
  143. package/dist_es/react/components/LoadingSpinner.jsx.map +1 -0
  144. package/dist_es/react/components/RecordImage.d.ts +20 -20
  145. package/dist_es/react/components/RecordImage.js +24 -24
  146. package/dist_es/react/components/charts/QRCode.d.ts +25 -25
  147. package/dist_es/react/components/charts/QRCode.js +52 -52
  148. package/dist_es/react/components/charts/line-bar/Chart.d.ts +166 -166
  149. package/dist_es/react/components/charts/line-bar/Chart.js +415 -415
  150. package/dist_es/react/components/charts/line-bar/HGridChart.d.ts +58 -58
  151. package/dist_es/react/components/charts/line-bar/HGridChart.js +250 -250
  152. package/dist_es/react/components/charts/line-bar/ZincGridChart.d.ts +12 -0
  153. package/dist_es/react/components/charts/line-bar/ZincGridChart.js +17 -0
  154. package/dist_es/react/components/charts/line-bar/ZincGridChart.js.map +1 -0
  155. package/dist_es/react/components/charts/pie/PieChart.d.ts +94 -94
  156. package/dist_es/react/components/charts/pie/PieChart.js +177 -177
  157. package/dist_es/react/components/charts/pie/SimplePieChart.d.ts +21 -21
  158. package/dist_es/react/components/charts/pie/SimplePieChart.js +25 -25
  159. package/dist_es/react/components/graphics/GraphicViewer.d.ts +10 -10
  160. package/dist_es/react/components/graphics/GraphicViewer.js +22 -22
  161. package/dist_es/react/components/graphics/GraphicViewer.jsx +23 -0
  162. package/dist_es/react/components/graphics/GraphicViewer.jsx.map +1 -0
  163. package/dist_es/react/components/graphics/GraphicsTabViewer.d.ts +17 -17
  164. package/dist_es/react/components/graphics/GraphicsTabViewer.js +60 -60
  165. package/dist_es/react/components/graphics/GraphicsTabViewer.jsx +63 -0
  166. package/dist_es/react/components/graphics/GraphicsTabViewer.jsx.map +1 -0
  167. package/dist_es/react/components/makeCustomElement.d.ts +16 -16
  168. package/dist_es/react/components/makeCustomElement.js +142 -142
  169. package/dist_es/react/components/navigation/BasicLayout.d.ts +41 -41
  170. package/dist_es/react/components/navigation/BasicLayout.js +124 -124
  171. package/dist_es/react/components/navigation/BasicLayout.jsx +133 -0
  172. package/dist_es/react/components/navigation/BasicLayout.jsx.map +1 -0
  173. package/dist_es/react/components/navigation/HeaderSiderLayout.d.ts +13 -13
  174. package/dist_es/react/components/navigation/HeaderSiderLayout.js +80 -80
  175. package/dist_es/react/components/navigation/MenuPage.d.ts +37 -37
  176. package/dist_es/react/components/navigation/MenuPage.js +30 -30
  177. package/dist_es/react/components/navigation/MenuPage.jsx +31 -0
  178. package/dist_es/react/components/navigation/MenuPage.jsx.map +1 -0
  179. package/dist_es/react/components/navigation/MenuTrigger.d.ts +9 -9
  180. package/dist_es/react/components/navigation/MenuTrigger.js +28 -28
  181. package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.d.ts +11 -11
  182. package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.js +18 -18
  183. package/dist_es/react/components/navigation/ReactRouterLayout.d.ts +46 -46
  184. package/dist_es/react/components/navigation/ReactRouterLayout.js +99 -99
  185. package/dist_es/react/components/navigation/Router.d.ts +12 -0
  186. package/dist_es/react/components/navigation/Router.js +19 -0
  187. package/dist_es/react/components/navigation/Router.js.map +1 -0
  188. package/dist_es/react/components/navigation/Router.jsx +19 -0
  189. package/dist_es/react/components/navigation/Router.jsx.map +1 -0
  190. package/dist_es/react/components/navigation/customRouting/Router.d.ts +12 -12
  191. package/dist_es/react/components/navigation/customRouting/Router.js +18 -18
  192. package/dist_es/react/components/navigation/customRouting/RouterLayout.d.ts +11 -11
  193. package/dist_es/react/components/navigation/customRouting/RouterLayout.js +34 -34
  194. package/dist_es/react/components/navigation/react-router/BasicLayout.d.ts +23 -0
  195. package/dist_es/react/components/navigation/react-router/BasicLayout.js +82 -0
  196. package/dist_es/react/components/navigation/react-router/BasicLayout.js.map +1 -0
  197. package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.d.ts +24 -0
  198. package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.js +82 -0
  199. package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.js.map +1 -0
  200. package/dist_es/react/components/resolvable/configurationForm/ConfigurationForm.d.ts +27 -27
  201. package/dist_es/react/components/resolvable/configurationForm/ConfigurationForm.js +64 -64
  202. package/dist_es/react/components/resolvable/configurationForm/ConfigurationFormEntry.d.ts +16 -16
  203. package/dist_es/react/components/resolvable/configurationForm/ConfigurationFormEntry.js +58 -58
  204. package/dist_es/react/components/resolvable/configurationForm/getSectionDefault.d.ts +16 -16
  205. package/dist_es/react/components/resolvable/configurationForm/getSectionDefault.js +94 -94
  206. package/dist_es/react/hooks/useFin5BinUrl.d.ts +6 -6
  207. package/dist_es/react/hooks/useFin5BinUrl.js +11 -11
  208. package/dist_es/react/hooks/useFin5ColorScheme.d.ts +2 -2
  209. package/dist_es/react/hooks/useFin5ColorScheme.js +45 -45
  210. package/dist_es/react/hooks/useScreenSize.d.ts +7 -7
  211. package/dist_es/react/hooks/useScreenSize.js +27 -27
  212. package/package.json +1 -1
@@ -1,58 +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;
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;
@@ -1,251 +1,251 @@
1
- /*
2
- * Copyright (c) 2025, J2 Innovations. All Rights Reserved
3
- */
4
- import * as am5 from '@amcharts/amcharts5';
5
- import { HDict, HGrid, Kind, valueIsKind, } from 'haystack-core';
6
- import { day, hour, julianMonth, week, year } from 'haystack-units/dist';
7
- import React, { memo, useMemo } from 'react';
8
- import { useTheme } from 'react-jss';
9
- import { useScreenSize } from '../../../hooks/useScreenSize';
10
- import { AxisPlacement, Chart, LegendPlacement, UnitPlacement, } from './Chart';
11
- var SeriesType;
12
- (function (SeriesType) {
13
- SeriesType["line"] = "line";
14
- SeriesType["bar"] = "bar";
15
- SeriesType["stackedBar"] = "stackedBar";
16
- })(SeriesType || (SeriesType = {}));
17
- var SeriesVariant;
18
- (function (SeriesVariant) {
19
- SeriesVariant["dashed"] = "dashed";
20
- })(SeriesVariant || (SeriesVariant = {}));
21
- export const rollupDurationToTimeInterval = (value) => {
22
- let unit;
23
- switch (value?.unit) {
24
- case hour:
25
- unit = 'hour';
26
- break;
27
- case day:
28
- unit = 'day';
29
- break;
30
- case week:
31
- unit = 'week';
32
- break;
33
- case julianMonth:
34
- unit = 'month';
35
- break;
36
- case year:
37
- unit = 'year';
38
- break;
39
- }
40
- return { count: value?.value ?? 1, timeUnit: unit ?? 'hour' };
41
- };
42
- export const isLineSeries = (colMetadata) => colMetadata?.series?.value === SeriesType.line;
43
- export const isStackedBarSeries = (colMetadata) => colMetadata?.series?.value === SeriesType.stackedBar;
44
- export const isBarSeries = (colMetadata) => colMetadata?.series?.value === SeriesType.bar;
45
- const isDottedSeriesVariant = (colMetadata) => SeriesVariant.dashed === colMetadata?.variant?.value;
46
- const getSeriesColor = (colMetadata) => colMetadata?.color ? am5.color(colMetadata.color.value) : undefined;
47
- const getSeriesDis = (colMetadata) => colMetadata?.dis?.value;
48
- const getSeriesUnit = (colMetadata) => colMetadata?.unit?.value;
49
- const getHideAxis = (colMetadata) => colMetadata?.hideAxis?.value;
50
- const getAxisPlacement = (colMetadata) => AxisPlacement[colMetadata?.axisPlacement?.value];
51
- export const colNameToDisProvider = (grid, translateLabel) => (colName) => {
52
- if (translateLabel) {
53
- const label = translateLabel(colName);
54
- if (label) {
55
- return label;
56
- }
57
- }
58
- const colMetadata = grid.getColumn(colName)?.meta;
59
- if (colMetadata?.dis) {
60
- return colMetadata.dis.value;
61
- }
62
- return colName;
63
- };
64
- export const splitBarAndLineSeriesCols = (grid) => {
65
- const barSeries = new Set();
66
- const stackedBarSeries = new Set();
67
- const lineSeries = new Set();
68
- grid.getColumns().forEach((column) => {
69
- const colMetadata = column.meta;
70
- if (isLineSeries(colMetadata)) {
71
- lineSeries.add(column.name);
72
- }
73
- else if (isBarSeries(colMetadata)) {
74
- barSeries.add(column.name);
75
- }
76
- else if (isStackedBarSeries(colMetadata)) {
77
- stackedBarSeries.add(column.name);
78
- }
79
- });
80
- return {
81
- barSeries,
82
- stackedBarSeries,
83
- lineSeries,
84
- };
85
- };
86
- export const getBarSeriesRowData = (row, metadata, colName, barSeriesData) => {
87
- if (!barSeriesData.has(colName)) {
88
- const series = {
89
- seriesName: colName,
90
- dis: getSeriesDis(metadata),
91
- unit: getSeriesUnit(metadata),
92
- hideAxis: getHideAxis(metadata),
93
- axisPlacement: getAxisPlacement(metadata),
94
- data: [],
95
- };
96
- const seriesColor = getSeriesColor(metadata);
97
- if (seriesColor) {
98
- series.stroke = seriesColor;
99
- }
100
- barSeriesData.set(colName, series);
101
- }
102
- barSeriesData.get(colName)?.data.push({
103
- ts: row.get('ts').date.getTime(),
104
- value: row.get(colName)?.value,
105
- });
106
- };
107
- export const addLineSeriesRowData = (row, metadata, colName, lineSeriesData) => {
108
- if (!lineSeriesData.has(colName)) {
109
- const series = {
110
- seriesName: colName,
111
- dis: getSeriesDis(metadata),
112
- unit: getSeriesUnit(metadata),
113
- hideAxis: getHideAxis(metadata),
114
- axisPlacement: getAxisPlacement(metadata),
115
- data: [],
116
- strokeSettings: {
117
- strokeWidth: 2,
118
- strokeDasharray: isDottedSeriesVariant(metadata)
119
- ? [3, 3]
120
- : undefined,
121
- },
122
- };
123
- const seriesColor = getSeriesColor(metadata);
124
- if (seriesColor && series.strokeSettings) {
125
- series.strokeSettings.stroke = seriesColor;
126
- }
127
- lineSeriesData.set(colName, series);
128
- }
129
- lineSeriesData.get(colName)?.data.push({
130
- ts: row.get('ts').date.getTime(),
131
- value: row.get(colName)?.value,
132
- });
133
- };
134
- /**
135
- * Returns the numeric value of an Haystack Value object (if numeric)
136
- * @param val Haystack value
137
- * @returns the numeric value:
138
- * - `HNum` > numeric value
139
- * - `HDate` > time value in milliseconds since midnight, January 1, 1970 UTC
140
- * - `HTime` > time value in milliseconds since midnight, January 1, 1970 UTC
141
- * - `HBool` > 1 if `val` is `true`, `false` otherwise
142
- * - `HDateTime` > time value in milliseconds since midnight, January 1, 1970 UTC
143
- */
144
- const getHValValueNumber = (val) => {
145
- if (valueIsKind(val, Kind.Number)) {
146
- return val.value;
147
- }
148
- if (valueIsKind(val, Kind.Date)) {
149
- return val.date.getTime();
150
- }
151
- if (valueIsKind(val, Kind.Time)) {
152
- return val.date.getTime();
153
- }
154
- if (valueIsKind(val, Kind.Bool)) {
155
- return val.value ? 1 : 0;
156
- }
157
- if (valueIsKind(val, Kind.DateTime)) {
158
- return val.date.getTime();
159
- }
160
- throw new Error(`getHValValue: ${val.getKind()} not supported`);
161
- };
162
- export const calculateDefaultTimeInterval = (timeRange) => {
163
- const diffTime = Math.abs(timeRange[1].getTime() - timeRange[0].getTime());
164
- const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
165
- return { count: diffDays ? diffDays : 1, timeUnit: 'hour' };
166
- };
167
- /**
168
- * A component that renders a chart containing multiple series
169
- * of different kinds, taking all the data and configuration from an HGrid.
170
- */
171
- export const HGridChart = memo(function HGridChartComponent({ className, data, timeRange, timeInterval = calculateDefaultTimeInterval(timeRange), unitPlacement = UnitPlacement.axis, legendPlacement = LegendPlacement.right, translateLabel = undefined, DOMtargetId, }) {
172
- const theme = useTheme();
173
- const { barSeriesData, stackedBarSeriesData, lineSeriesData, rangesData } = useMemo(() => {
174
- if (data === undefined) {
175
- return {
176
- barSeriesData: [],
177
- stackedBarSeriesData: [],
178
- lineSeriesData: [],
179
- rangesData: [],
180
- };
181
- }
182
- const gridMetadata = data.meta;
183
- const { barSeries, stackedBarSeries, lineSeries } = splitBarAndLineSeriesCols(data);
184
- const barSeriesData = new Map();
185
- const stackedBarSeriesData = new Map();
186
- const lineSeriesData = new Map();
187
- data.getRows().forEach((row) => {
188
- if (stackedBarSeries.size > 0) {
189
- stackedBarSeries.forEach((colName) => {
190
- getBarSeriesRowData(row, data.getColumn(colName)?.meta ?? HDict.make(), colName, stackedBarSeriesData);
191
- });
192
- }
193
- if (barSeries.size > 0) {
194
- barSeries.forEach((colName) => {
195
- getBarSeriesRowData(row, data.getColumn(colName)?.meta ?? HDict.make(), colName, barSeriesData);
196
- });
197
- }
198
- if (lineSeries.size > 0) {
199
- lineSeries.forEach((lineSeriesColName) => {
200
- addLineSeriesRowData(row, data.getColumn(lineSeriesColName)?.meta ??
201
- HDict.make(), lineSeriesColName, lineSeriesData);
202
- });
203
- }
204
- });
205
- const rangesData = gridMetadata.ranges?.map((rangeData) => {
206
- const result = {
207
- startValue: getHValValueNumber(rangeData.startValue),
208
- endValue: getHValValueNumber(rangeData.endValue),
209
- color: getSeriesColor(rangeData),
210
- tooltip: rangeData.dis?.value,
211
- opacity: rangeData.opacity?.value,
212
- };
213
- return result;
214
- }) ?? [];
215
- return {
216
- barSeriesData: Array.from(barSeriesData.values()),
217
- stackedBarSeriesData: Array.from(stackedBarSeriesData.values()),
218
- lineSeriesData: Array.from(lineSeriesData.values()),
219
- rangesData,
220
- };
221
- }, [data]);
222
- const screenSize = useScreenSize();
223
- const effectiveLegendPlacement = useMemo(() => {
224
- const MIN_WIDTH = 1024;
225
- if (screenSize.width >= MIN_WIDTH) {
226
- return legendPlacement;
227
- }
228
- switch (legendPlacement) {
229
- case LegendPlacement.left:
230
- return LegendPlacement.top;
231
- case LegendPlacement.right:
232
- return LegendPlacement.bottom;
233
- }
234
- return legendPlacement;
235
- }, [legendPlacement, screenSize.width]);
236
- return (React.createElement("div", { className: className },
237
- React.createElement(Chart, { DOMtargetId: DOMtargetId, cursor: true, legendPlacement: effectiveLegendPlacement, unitPlacement: unitPlacement, numberFormat: { maximumFractionDigits: 0 }, barSeriesData: barSeriesData, rangesData: rangesData, translateLabel: colNameToDisProvider(data ?? HGrid.make(), translateLabel), stackedBarSeriesData: stackedBarSeriesData, lineSeriesData: lineSeriesData, gridSettings: {
238
- stroke: am5.color(theme.borderColor),
239
- }, dateField: 'ts', baseInterval: timeInterval, tooltipSettings: {
240
- fontSize: '0.9rem',
241
- }, legendLabelsSettings: {
242
- fill: am5.color(theme.textColor),
243
- fontSize: '0.9rem',
244
- }, legendMarkersSettings: {
245
- width: 8,
246
- height: 8,
247
- rounded: true,
248
- } })));
249
- });
250
- export default HGridChart;
1
+ /*
2
+ * Copyright (c) 2025, J2 Innovations. All Rights Reserved
3
+ */
4
+ import * as am5 from '@amcharts/amcharts5';
5
+ import { HDict, HGrid, Kind, valueIsKind, } from 'haystack-core';
6
+ import { day, hour, julianMonth, week, year } from 'haystack-units/dist';
7
+ import React, { memo, useMemo } from 'react';
8
+ import { useTheme } from 'react-jss';
9
+ import { useScreenSize } from '../../../hooks/useScreenSize';
10
+ import { AxisPlacement, Chart, LegendPlacement, UnitPlacement, } from './Chart';
11
+ var SeriesType;
12
+ (function (SeriesType) {
13
+ SeriesType["line"] = "line";
14
+ SeriesType["bar"] = "bar";
15
+ SeriesType["stackedBar"] = "stackedBar";
16
+ })(SeriesType || (SeriesType = {}));
17
+ var SeriesVariant;
18
+ (function (SeriesVariant) {
19
+ SeriesVariant["dashed"] = "dashed";
20
+ })(SeriesVariant || (SeriesVariant = {}));
21
+ export const rollupDurationToTimeInterval = (value) => {
22
+ let unit;
23
+ switch (value?.unit) {
24
+ case hour:
25
+ unit = 'hour';
26
+ break;
27
+ case day:
28
+ unit = 'day';
29
+ break;
30
+ case week:
31
+ unit = 'week';
32
+ break;
33
+ case julianMonth:
34
+ unit = 'month';
35
+ break;
36
+ case year:
37
+ unit = 'year';
38
+ break;
39
+ }
40
+ return { count: value?.value ?? 1, timeUnit: unit ?? 'hour' };
41
+ };
42
+ export const isLineSeries = (colMetadata) => colMetadata?.series?.value === SeriesType.line;
43
+ export const isStackedBarSeries = (colMetadata) => colMetadata?.series?.value === SeriesType.stackedBar;
44
+ export const isBarSeries = (colMetadata) => colMetadata?.series?.value === SeriesType.bar;
45
+ const isDottedSeriesVariant = (colMetadata) => SeriesVariant.dashed === colMetadata?.variant?.value;
46
+ const getSeriesColor = (colMetadata) => colMetadata?.color ? am5.color(colMetadata.color.value) : undefined;
47
+ const getSeriesDis = (colMetadata) => colMetadata?.dis?.value;
48
+ const getSeriesUnit = (colMetadata) => colMetadata?.unit?.value;
49
+ const getHideAxis = (colMetadata) => colMetadata?.hideAxis?.value;
50
+ const getAxisPlacement = (colMetadata) => AxisPlacement[colMetadata?.axisPlacement?.value];
51
+ export const colNameToDisProvider = (grid, translateLabel) => (colName) => {
52
+ if (translateLabel) {
53
+ const label = translateLabel(colName);
54
+ if (label) {
55
+ return label;
56
+ }
57
+ }
58
+ const colMetadata = grid.getColumn(colName)?.meta;
59
+ if (colMetadata?.dis) {
60
+ return colMetadata.dis.value;
61
+ }
62
+ return colName;
63
+ };
64
+ export const splitBarAndLineSeriesCols = (grid) => {
65
+ const barSeries = new Set();
66
+ const stackedBarSeries = new Set();
67
+ const lineSeries = new Set();
68
+ grid.getColumns().forEach((column) => {
69
+ const colMetadata = column.meta;
70
+ if (isLineSeries(colMetadata)) {
71
+ lineSeries.add(column.name);
72
+ }
73
+ else if (isBarSeries(colMetadata)) {
74
+ barSeries.add(column.name);
75
+ }
76
+ else if (isStackedBarSeries(colMetadata)) {
77
+ stackedBarSeries.add(column.name);
78
+ }
79
+ });
80
+ return {
81
+ barSeries,
82
+ stackedBarSeries,
83
+ lineSeries,
84
+ };
85
+ };
86
+ export const getBarSeriesRowData = (row, metadata, colName, barSeriesData) => {
87
+ if (!barSeriesData.has(colName)) {
88
+ const series = {
89
+ seriesName: colName,
90
+ dis: getSeriesDis(metadata),
91
+ unit: getSeriesUnit(metadata),
92
+ hideAxis: getHideAxis(metadata),
93
+ axisPlacement: getAxisPlacement(metadata),
94
+ data: [],
95
+ };
96
+ const seriesColor = getSeriesColor(metadata);
97
+ if (seriesColor) {
98
+ series.stroke = seriesColor;
99
+ }
100
+ barSeriesData.set(colName, series);
101
+ }
102
+ barSeriesData.get(colName)?.data.push({
103
+ ts: row.get('ts').date.getTime(),
104
+ value: row.get(colName)?.value,
105
+ });
106
+ };
107
+ export const addLineSeriesRowData = (row, metadata, colName, lineSeriesData) => {
108
+ if (!lineSeriesData.has(colName)) {
109
+ const series = {
110
+ seriesName: colName,
111
+ dis: getSeriesDis(metadata),
112
+ unit: getSeriesUnit(metadata),
113
+ hideAxis: getHideAxis(metadata),
114
+ axisPlacement: getAxisPlacement(metadata),
115
+ data: [],
116
+ strokeSettings: {
117
+ strokeWidth: 2,
118
+ strokeDasharray: isDottedSeriesVariant(metadata)
119
+ ? [3, 3]
120
+ : undefined,
121
+ },
122
+ };
123
+ const seriesColor = getSeriesColor(metadata);
124
+ if (seriesColor && series.strokeSettings) {
125
+ series.strokeSettings.stroke = seriesColor;
126
+ }
127
+ lineSeriesData.set(colName, series);
128
+ }
129
+ lineSeriesData.get(colName)?.data.push({
130
+ ts: row.get('ts').date.getTime(),
131
+ value: row.get(colName)?.value,
132
+ });
133
+ };
134
+ /**
135
+ * Returns the numeric value of an Haystack Value object (if numeric)
136
+ * @param val Haystack value
137
+ * @returns the numeric value:
138
+ * - `HNum` > numeric value
139
+ * - `HDate` > time value in milliseconds since midnight, January 1, 1970 UTC
140
+ * - `HTime` > time value in milliseconds since midnight, January 1, 1970 UTC
141
+ * - `HBool` > 1 if `val` is `true`, `false` otherwise
142
+ * - `HDateTime` > time value in milliseconds since midnight, January 1, 1970 UTC
143
+ */
144
+ const getHValValueNumber = (val) => {
145
+ if (valueIsKind(val, Kind.Number)) {
146
+ return val.value;
147
+ }
148
+ if (valueIsKind(val, Kind.Date)) {
149
+ return val.date.getTime();
150
+ }
151
+ if (valueIsKind(val, Kind.Time)) {
152
+ return val.date.getTime();
153
+ }
154
+ if (valueIsKind(val, Kind.Bool)) {
155
+ return val.value ? 1 : 0;
156
+ }
157
+ if (valueIsKind(val, Kind.DateTime)) {
158
+ return val.date.getTime();
159
+ }
160
+ throw new Error(`getHValValue: ${val.getKind()} not supported`);
161
+ };
162
+ export const calculateDefaultTimeInterval = (timeRange) => {
163
+ const diffTime = Math.abs(timeRange[1].getTime() - timeRange[0].getTime());
164
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
165
+ return { count: diffDays ? diffDays : 1, timeUnit: 'hour' };
166
+ };
167
+ /**
168
+ * A component that renders a chart containing multiple series
169
+ * of different kinds, taking all the data and configuration from an HGrid.
170
+ */
171
+ export const HGridChart = memo(function HGridChartComponent({ className, data, timeRange, timeInterval = calculateDefaultTimeInterval(timeRange), unitPlacement = UnitPlacement.axis, legendPlacement = LegendPlacement.right, translateLabel = undefined, DOMtargetId, }) {
172
+ const theme = useTheme();
173
+ const { barSeriesData, stackedBarSeriesData, lineSeriesData, rangesData } = useMemo(() => {
174
+ if (data === undefined) {
175
+ return {
176
+ barSeriesData: [],
177
+ stackedBarSeriesData: [],
178
+ lineSeriesData: [],
179
+ rangesData: [],
180
+ };
181
+ }
182
+ const gridMetadata = data.meta;
183
+ const { barSeries, stackedBarSeries, lineSeries } = splitBarAndLineSeriesCols(data);
184
+ const barSeriesData = new Map();
185
+ const stackedBarSeriesData = new Map();
186
+ const lineSeriesData = new Map();
187
+ data.getRows().forEach((row) => {
188
+ if (stackedBarSeries.size > 0) {
189
+ stackedBarSeries.forEach((colName) => {
190
+ getBarSeriesRowData(row, data.getColumn(colName)?.meta ?? HDict.make(), colName, stackedBarSeriesData);
191
+ });
192
+ }
193
+ if (barSeries.size > 0) {
194
+ barSeries.forEach((colName) => {
195
+ getBarSeriesRowData(row, data.getColumn(colName)?.meta ?? HDict.make(), colName, barSeriesData);
196
+ });
197
+ }
198
+ if (lineSeries.size > 0) {
199
+ lineSeries.forEach((lineSeriesColName) => {
200
+ addLineSeriesRowData(row, data.getColumn(lineSeriesColName)?.meta ??
201
+ HDict.make(), lineSeriesColName, lineSeriesData);
202
+ });
203
+ }
204
+ });
205
+ const rangesData = gridMetadata.ranges?.map((rangeData) => {
206
+ const result = {
207
+ startValue: getHValValueNumber(rangeData.startValue),
208
+ endValue: getHValValueNumber(rangeData.endValue),
209
+ color: getSeriesColor(rangeData),
210
+ tooltip: rangeData.dis?.value,
211
+ opacity: rangeData.opacity?.value,
212
+ };
213
+ return result;
214
+ }) ?? [];
215
+ return {
216
+ barSeriesData: Array.from(barSeriesData.values()),
217
+ stackedBarSeriesData: Array.from(stackedBarSeriesData.values()),
218
+ lineSeriesData: Array.from(lineSeriesData.values()),
219
+ rangesData,
220
+ };
221
+ }, [data]);
222
+ const screenSize = useScreenSize();
223
+ const effectiveLegendPlacement = useMemo(() => {
224
+ const MIN_WIDTH = 1024;
225
+ if (screenSize.width >= MIN_WIDTH) {
226
+ return legendPlacement;
227
+ }
228
+ switch (legendPlacement) {
229
+ case LegendPlacement.left:
230
+ return LegendPlacement.top;
231
+ case LegendPlacement.right:
232
+ return LegendPlacement.bottom;
233
+ }
234
+ return legendPlacement;
235
+ }, [legendPlacement, screenSize.width]);
236
+ return (React.createElement("div", { className: className },
237
+ React.createElement(Chart, { DOMtargetId: DOMtargetId, cursor: true, legendPlacement: effectiveLegendPlacement, unitPlacement: unitPlacement, numberFormat: { maximumFractionDigits: 0 }, barSeriesData: barSeriesData, rangesData: rangesData, translateLabel: colNameToDisProvider(data ?? HGrid.make(), translateLabel), stackedBarSeriesData: stackedBarSeriesData, lineSeriesData: lineSeriesData, gridSettings: {
238
+ stroke: am5.color(theme.borderColor),
239
+ }, dateField: 'ts', baseInterval: timeInterval, tooltipSettings: {
240
+ fontSize: '0.9rem',
241
+ }, legendLabelsSettings: {
242
+ fill: am5.color(theme.textColor),
243
+ fontSize: '0.9rem',
244
+ }, legendMarkersSettings: {
245
+ width: 8,
246
+ height: 8,
247
+ rounded: true,
248
+ } })));
249
+ });
250
+ export default HGridChart;
251
251
  //# sourceMappingURL=HGridChart.js.map
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { HGridChartProps } from './HGridChart';
3
+ export declare type ZincGridChartProps = Omit<HGridChartProps, 'data'> & {
4
+ data: string;
5
+ };
6
+ /**
7
+ * This component wraps the HGridChart component and allows using Zinc
8
+ * data instead of an HGrid. This should help using the component inside,
9
+ * for example, the Graphic Builder, where finstack returns an HaystackGrid
10
+ * instead of haystack-core types.
11
+ */
12
+ export declare const ZincGridChart: React.FC<ZincGridChartProps>;
@@ -0,0 +1,17 @@
1
+ import { Kind, valueIsKind, ZincReader } from 'haystack-core';
2
+ import React from 'react';
3
+ import HGridChart from './HGridChart';
4
+ /**
5
+ * This component wraps the HGridChart component and allows using Zinc
6
+ * data instead of an HGrid. This should help using the component inside,
7
+ * for example, the Graphic Builder, where finstack returns an HaystackGrid
8
+ * instead of haystack-core types.
9
+ */
10
+ export const ZincGridChart = ({ data, ...props }) => {
11
+ const parsedData = ZincReader.readValue(data);
12
+ if (valueIsKind(parsedData, Kind.Grid)) {
13
+ return React.createElement(HGridChart, { data: parsedData, ...props });
14
+ }
15
+ throw new Error('Invalid Zinc data, could not parse a Grid');
16
+ };
17
+ //# sourceMappingURL=ZincGridChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZincGridChart.js","sourceRoot":"","sources":["../../../../../src/react/components/charts/line-bar/ZincGridChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,UAA+B,MAAM,cAAc,CAAA;AAM1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAC3D,IAAI,EACJ,GAAG,KAAK,EACR,EAAE,EAAE;IACJ,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,WAAW,CAAQ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;QAC9C,OAAO,oBAAC,UAAU,IAAC,IAAI,EAAE,UAAU,KAAM,KAAK,GAAI,CAAA;KAClD;IACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;AAC7D,CAAC,CAAA"}