@vuu-ui/vuu-chart 2.1.19-beta.2 → 2.1.19-beta.3

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 (56) hide show
  1. package/cjs/Chart.css.js +6 -0
  2. package/cjs/Chart.css.js.map +1 -0
  3. package/cjs/Chart.js +89 -0
  4. package/cjs/Chart.js.map +1 -0
  5. package/cjs/ChartSeries.js +183 -0
  6. package/cjs/ChartSeries.js.map +1 -0
  7. package/cjs/DataRowMovingWindow.js +97 -0
  8. package/cjs/DataRowMovingWindow.js.map +1 -0
  9. package/cjs/chart-types.js +6 -0
  10. package/cjs/chart-types.js.map +1 -0
  11. package/cjs/chartTooltip.js +27 -0
  12. package/cjs/chartTooltip.js.map +1 -0
  13. package/cjs/index.js +10 -0
  14. package/cjs/index.js.map +1 -0
  15. package/cjs/useChartContextMenu.js +29 -0
  16. package/cjs/useChartContextMenu.js.map +1 -0
  17. package/cjs/useChartOptions.js +101 -0
  18. package/cjs/useChartOptions.js.map +1 -0
  19. package/cjs/useChartSelection.js +72 -0
  20. package/cjs/useChartSelection.js.map +1 -0
  21. package/esm/Chart.css.js +4 -0
  22. package/esm/Chart.css.js.map +1 -0
  23. package/esm/Chart.js +87 -0
  24. package/esm/Chart.js.map +1 -0
  25. package/esm/ChartSeries.js +181 -0
  26. package/esm/ChartSeries.js.map +1 -0
  27. package/esm/DataRowMovingWindow.js +95 -0
  28. package/esm/DataRowMovingWindow.js.map +1 -0
  29. package/esm/chart-types.js +4 -0
  30. package/esm/chart-types.js.map +1 -0
  31. package/esm/chartTooltip.js +25 -0
  32. package/esm/chartTooltip.js.map +1 -0
  33. package/esm/index.js +3 -0
  34. package/esm/index.js.map +1 -0
  35. package/esm/useChartContextMenu.js +27 -0
  36. package/esm/useChartContextMenu.js.map +1 -0
  37. package/esm/useChartOptions.js +99 -0
  38. package/esm/useChartOptions.js.map +1 -0
  39. package/esm/useChartSelection.js +70 -0
  40. package/esm/useChartSelection.js.map +1 -0
  41. package/package.json +13 -9
  42. package/types/Chart.d.ts +13 -4
  43. package/types/ChartSeries.d.ts +10 -27
  44. package/types/chart-types.d.ts +42 -0
  45. package/types/chartTooltip.d.ts +12 -0
  46. package/types/index.d.ts +4 -2
  47. package/types/useChartContextMenu.d.ts +7 -7
  48. package/types/useChartOptions.d.ts +19 -3
  49. package/types/useChartSelection.d.ts +14 -0
  50. package/src/Chart.css.js +0 -42
  51. package/src/Chart.js +0 -64
  52. package/src/ChartSeries.js +0 -101
  53. package/src/DataRowMovingWindow.js +0 -64
  54. package/src/index.js +0 -2
  55. package/src/useChartContextMenu.js +0 -29
  56. package/src/useChartOptions.js +0 -76
@@ -0,0 +1,99 @@
1
+ import { itemsChanged } from '@vuu-ui/vuu-utils';
2
+ import { useState, useMemo } from 'react';
3
+ import { ChartSeries } from './ChartSeries.js';
4
+ import { chartTooltip } from './chartTooltip.js';
5
+
6
+ const defaultPalette = [
7
+ "#4676bf",
8
+ "#ab6528",
9
+ "#9f55c2",
10
+ "#2a8285",
11
+ "#697694",
12
+ "#B0549d"
13
+ ];
14
+ const combineConfig = (config, overrides) => {
15
+ return {
16
+ ...config,
17
+ ...overrides
18
+ };
19
+ };
20
+ const useChartOptions = ({
21
+ categoryColumnName,
22
+ config,
23
+ dataExclusions,
24
+ dataSource,
25
+ itemColorFunction,
26
+ palette = defaultPalette,
27
+ seriesColumnNames,
28
+ showTooltip = true,
29
+ symbolSizeFunction: symbolSize
30
+ }) => {
31
+ const [, forceRender] = useState({});
32
+ const chartSeries = useMemo(() => {
33
+ const cs = new ChartSeries({
34
+ config: combineConfig(config, { itemColorFunction, symbolSize }),
35
+ dataExclusions,
36
+ dataSource,
37
+ palette
38
+ });
39
+ cs.on("update", () => forceRender({}));
40
+ return cs;
41
+ }, [dataSource, config]);
42
+ useMemo(() => {
43
+ if (categoryColumnName !== chartSeries.categoryColumn) {
44
+ chartSeries.categoryColumn = categoryColumnName;
45
+ }
46
+ if (itemsChanged(seriesColumnNames, chartSeries.seriesColumnNames)) {
47
+ chartSeries.seriesColumnNames = seriesColumnNames;
48
+ }
49
+ }, [categoryColumnName, chartSeries, seriesColumnNames]);
50
+ return {
51
+ animation: false,
52
+ color: chartSeries.palette,
53
+ dataZoom: [
54
+ {
55
+ backgroundColor: "var(--vuuChart-zoom-background, transparent)",
56
+ borderColor: "var(--vuuChart-zoom-borderColor, white)",
57
+ handleStyle: {
58
+ color: "var(--vuuChart-zoom-handleColor, white)"
59
+ },
60
+ moveHandleStyle: {
61
+ color: "var(--vuuChart-zoom-slideColor, white)"
62
+ },
63
+ type: "slider",
64
+ start: 0,
65
+ end: 100
66
+ }
67
+ ],
68
+ grid: {
69
+ left: "0",
70
+ bottom: 0,
71
+ right: 5
72
+ },
73
+ series: chartSeries.series,
74
+ tooltip: showTooltip ? {
75
+ alwaysShowContent: true,
76
+ backgroundColor: "",
77
+ borderColor: "",
78
+ // borderWidth: "",
79
+ className: "vuuChartTooltip",
80
+ enterable: true,
81
+ formatter: chartTooltip,
82
+ // padding: "",
83
+ trigger: "axis"
84
+ } : void 0,
85
+ xAxis: {
86
+ data: chartSeries.categories
87
+ },
88
+ yAxis: {
89
+ splitLine: {
90
+ lineStyle: {
91
+ color: "var(--salt-separable-tertiary-borderColor)"
92
+ }
93
+ }
94
+ }
95
+ };
96
+ };
97
+
98
+ export { useChartOptions };
99
+ //# sourceMappingURL=useChartOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChartOptions.js","sources":["../../../packages/vuu-chart/src/useChartOptions.ts"],"sourcesContent":["import { DataSource, DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { ColumnMap, itemsChanged } from \"@vuu-ui/vuu-utils\";\nimport { type EChartsCoreOption } from \"echarts\";\nimport { useMemo, useState } from \"react\";\nimport type {\n ChartSelectionModel,\n ItemColorFunction,\n SymbolSize,\n SymbolSizeFunction,\n SymbolType,\n} from \"./chart-types\";\nimport { ChartSeries } from \"./ChartSeries\";\nimport { chartTooltip } from \"./chartTooltip\";\n\nconst defaultPalette = [\n \"#4676bf\",\n \"#ab6528\",\n \"#9f55c2\",\n \"#2a8285\",\n \"#697694\",\n \"#B0549d\",\n];\n\nexport interface ChartConfig {\n itemColorFunction?: ItemColorFunction;\n selectionModel?: ChartSelectionModel;\n symbolSize?: SymbolSize;\n}\n\nexport interface DataExclusionOptions {\n isExcludedData: (\n row: DataSourceRow,\n columnMap: ColumnMap,\n column: string,\n ) => boolean;\n /**\n * An embedded SVG path. If provided, will be used to render excluded values.\n */\n symbol?: SymbolType;\n}\n\nexport interface ChartOptionsProps {\n categoryColumnName: string;\n config: ChartConfig;\n dataExclusions?: DataExclusionOptions;\n dataSource: DataSource;\n itemColorFunction?: ItemColorFunction;\n palette?: string[];\n seriesColumnNames: string[];\n showTooltip?: boolean;\n symbolSizeFunction?: SymbolSizeFunction;\n}\n\nconst combineConfig = (config: ChartConfig, overrides: ChartConfig) => {\n return {\n ...config,\n ...overrides,\n };\n};\n\nexport const useChartOptions = ({\n categoryColumnName,\n config,\n dataExclusions,\n dataSource,\n itemColorFunction,\n palette = defaultPalette,\n seriesColumnNames,\n showTooltip = true,\n symbolSizeFunction: symbolSize,\n}: ChartOptionsProps) => {\n const [, forceRender] = useState({});\n\n const chartSeries = useMemo(() => {\n const cs = new ChartSeries({\n config: combineConfig(config, { itemColorFunction, symbolSize }),\n dataExclusions,\n dataSource,\n palette,\n });\n cs.on(\"update\", () => forceRender({}));\n return cs;\n }, [dataSource, config]);\n\n useMemo(() => {\n if (categoryColumnName !== chartSeries.categoryColumn) {\n chartSeries.categoryColumn = categoryColumnName;\n }\n if (itemsChanged(seriesColumnNames, chartSeries.seriesColumnNames)) {\n chartSeries.seriesColumnNames = seriesColumnNames;\n }\n }, [categoryColumnName, chartSeries, seriesColumnNames]);\n\n return {\n animation: false,\n color: chartSeries.palette,\n dataZoom: [\n {\n backgroundColor: \"var(--vuuChart-zoom-background, transparent)\",\n borderColor: \"var(--vuuChart-zoom-borderColor, white)\",\n handleStyle: {\n color: \"var(--vuuChart-zoom-handleColor, white)\",\n },\n moveHandleStyle: {\n color: \"var(--vuuChart-zoom-slideColor, white)\",\n },\n type: \"slider\",\n start: 0,\n end: 100,\n },\n ],\n grid: {\n left: \"0\",\n bottom: 0,\n right: 5,\n },\n series: chartSeries.series,\n tooltip: showTooltip\n ? {\n alwaysShowContent: true,\n backgroundColor: \"\",\n borderColor: \"\",\n // borderWidth: \"\",\n className: \"vuuChartTooltip\",\n enterable: true,\n formatter: chartTooltip,\n // padding: \"\",\n trigger: \"axis\",\n }\n : undefined,\n xAxis: {\n data: chartSeries.categories,\n },\n yAxis: {\n splitLine: {\n lineStyle: {\n color: \"var(--salt-separable-tertiary-borderColor)\",\n },\n },\n },\n } as EChartsCoreOption;\n};\n"],"names":[],"mappings":";;;;;AAcA,MAAM,cAAiB,GAAA;AAAA,EACrB,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAgCA,MAAM,aAAA,GAAgB,CAAC,MAAA,EAAqB,SAA2B,KAAA;AACrE,EAAO,OAAA;AAAA,IACL,GAAG,MAAA;AAAA,IACH,GAAG;AAAA,GACL;AACF,CAAA;AAEO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,kBAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,OAAU,GAAA,cAAA;AAAA,EACV,iBAAA;AAAA,EACA,WAAc,GAAA,IAAA;AAAA,EACd,kBAAoB,EAAA;AACtB,CAAyB,KAAA;AACvB,EAAA,MAAM,GAAG,WAAW,CAAI,GAAA,QAAA,CAAS,EAAE,CAAA;AAEnC,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAM,MAAA,EAAA,GAAK,IAAI,WAAY,CAAA;AAAA,MACzB,QAAQ,aAAc,CAAA,MAAA,EAAQ,EAAE,iBAAA,EAAmB,YAAY,CAAA;AAAA,MAC/D,cAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,EAAA,CAAG,GAAG,QAAU,EAAA,MAAM,WAAY,CAAA,EAAE,CAAC,CAAA;AACrC,IAAO,OAAA,EAAA;AAAA,GACN,EAAA,CAAC,UAAY,EAAA,MAAM,CAAC,CAAA;AAEvB,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAI,IAAA,kBAAA,KAAuB,YAAY,cAAgB,EAAA;AACrD,MAAA,WAAA,CAAY,cAAiB,GAAA,kBAAA;AAAA;AAE/B,IAAA,IAAI,YAAa,CAAA,iBAAA,EAAmB,WAAY,CAAA,iBAAiB,CAAG,EAAA;AAClE,MAAA,WAAA,CAAY,iBAAoB,GAAA,iBAAA;AAAA;AAClC,GACC,EAAA,CAAC,kBAAoB,EAAA,WAAA,EAAa,iBAAiB,CAAC,CAAA;AAEvD,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,KAAA;AAAA,IACX,OAAO,WAAY,CAAA,OAAA;AAAA,IACnB,QAAU,EAAA;AAAA,MACR;AAAA,QACE,eAAiB,EAAA,8CAAA;AAAA,QACjB,WAAa,EAAA,yCAAA;AAAA,QACb,WAAa,EAAA;AAAA,UACX,KAAO,EAAA;AAAA,SACT;AAAA,QACA,eAAiB,EAAA;AAAA,UACf,KAAO,EAAA;AAAA,SACT;AAAA,QACA,IAAM,EAAA,QAAA;AAAA,QACN,KAAO,EAAA,CAAA;AAAA,QACP,GAAK,EAAA;AAAA;AACP,KACF;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA,GAAA;AAAA,MACN,MAAQ,EAAA,CAAA;AAAA,MACR,KAAO,EAAA;AAAA,KACT;AAAA,IACA,QAAQ,WAAY,CAAA,MAAA;AAAA,IACpB,SAAS,WACL,GAAA;AAAA,MACE,iBAAmB,EAAA,IAAA;AAAA,MACnB,eAAiB,EAAA,EAAA;AAAA,MACjB,WAAa,EAAA,EAAA;AAAA;AAAA,MAEb,SAAW,EAAA,iBAAA;AAAA,MACX,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,YAAA;AAAA;AAAA,MAEX,OAAS,EAAA;AAAA,KAEX,GAAA,KAAA,CAAA;AAAA,IACJ,KAAO,EAAA;AAAA,MACL,MAAM,WAAY,CAAA;AAAA,KACpB;AAAA,IACA,KAAO,EAAA;AAAA,MACL,SAAW,EAAA;AAAA,QACT,SAAW,EAAA;AAAA,UACT,KAAO,EAAA;AAAA;AACT;AACF;AACF,GACF;AACF;;;;"}
@@ -0,0 +1,70 @@
1
+ import { useState, useRef, useCallback } from 'react';
2
+
3
+ const dataItemMatch = (dataItem, targetSeries, targetKey) => dataItem?.column === targetSeries && dataItem?.key === targetKey;
4
+ const dataItemInList = (dataItems, targetColumn, targetKey) => dataItems.some(
5
+ (dataItem) => dataItemMatch(dataItem, targetColumn, targetKey)
6
+ );
7
+ const useChartSelection = (_props) => {
8
+ const [selectedKeys, setSelectedKeys] = useState([]);
9
+ const [, setHighlightedKey] = useState();
10
+ const selectedKeysRef = useRef(selectedKeys);
11
+ const highlightedKeyRef = useRef(void 0);
12
+ const handleClick = useCallback(
13
+ ({ data, event, seriesName: column }) => {
14
+ if (column) {
15
+ event?.stop();
16
+ const { row } = data;
17
+ const key = row[6];
18
+ setSelectedKeys((currentSelection) => {
19
+ return selectedKeysRef.current = dataItemInList(
20
+ currentSelection,
21
+ column,
22
+ key
23
+ ) ? [] : [{ column, key }];
24
+ });
25
+ }
26
+ },
27
+ []
28
+ );
29
+ const handleMouseOver = useCallback(
30
+ ({ data, seriesName }) => {
31
+ if (seriesName) {
32
+ const { row } = data;
33
+ setHighlightedKey(
34
+ highlightedKeyRef.current = { column: seriesName, key: row[6] }
35
+ );
36
+ }
37
+ },
38
+ []
39
+ );
40
+ const handleMouseOut = useCallback(() => {
41
+ setHighlightedKey(highlightedKeyRef.current = void 0);
42
+ }, []);
43
+ const itemColorFunction = useCallback(
44
+ ({ color, data, seriesName }) => {
45
+ return dataItemInList(selectedKeysRef.current, seriesName, data.key) ? "purple" : color;
46
+ },
47
+ []
48
+ );
49
+ const symbolSizeFunction = useCallback(
50
+ (value, { data, seriesName }) => {
51
+ const isSelected = dataItemInList(
52
+ selectedKeysRef.current,
53
+ seriesName,
54
+ data.key
55
+ );
56
+ return isSelected || dataItemMatch(highlightedKeyRef.current, seriesName, data.key) ? 16 : 6;
57
+ },
58
+ []
59
+ );
60
+ return {
61
+ onClick: handleClick,
62
+ onMouseOver: handleMouseOver,
63
+ onMouseOut: handleMouseOut,
64
+ itemColorFunction,
65
+ symbolSizeFunction
66
+ };
67
+ };
68
+
69
+ export { useChartSelection };
70
+ //# sourceMappingURL=useChartSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChartSelection.js","sources":["../../../packages/vuu-chart/src/useChartSelection.ts"],"sourcesContent":["import { ECElementEvent } from \"echarts\";\nimport { useCallback, useRef, useState } from \"react\";\nimport {\n ChartSelectionModel,\n EChartsCallbackParams,\n ItemColorFunction,\n SymbolSizeFunction,\n} from \"./chart-types\";\nimport { DataSourceValue } from \"./ChartSeries\";\n\ninterface ChartSelectionHookProps {\n selectionModel?: ChartSelectionModel;\n categoryColumnName: string;\n}\n\ntype DataItem = {\n column: string;\n key: string;\n};\n\nconst dataItemMatch = (\n dataItem: DataItem | undefined,\n targetSeries: string,\n targetKey: string,\n) => dataItem?.column === targetSeries && dataItem?.key === targetKey;\nconst dataItemInList = (\n dataItems: DataItem[],\n targetColumn: string,\n targetKey: string,\n) =>\n dataItems.some((dataItem) =>\n dataItemMatch(dataItem, targetColumn, targetKey),\n );\n\nexport const useChartSelection = (_props: ChartSelectionHookProps) => {\n const [selectedKeys, setSelectedKeys] = useState<DataItem[]>([]);\n const [, setHighlightedKey] = useState<DataItem | undefined>();\n const selectedKeysRef = useRef<DataItem[]>(selectedKeys);\n const highlightedKeyRef = useRef<DataItem | undefined>(undefined);\n\n const handleClick = useCallback(\n ({ data, event, seriesName: column }: ECElementEvent) => {\n if (column) {\n event?.stop();\n\n const { row } = data as DataSourceValue;\n const key = row[6];\n\n setSelectedKeys((currentSelection) => {\n return (selectedKeysRef.current = dataItemInList(\n currentSelection,\n column,\n key,\n )\n ? []\n : [{ column, key }]);\n });\n }\n },\n [],\n );\n\n const handleMouseOver = useCallback(\n ({ data, seriesName }: ECElementEvent) => {\n if (seriesName) {\n const { row } = data as DataSourceValue;\n setHighlightedKey(\n (highlightedKeyRef.current = { column: seriesName, key: row[6] }),\n );\n }\n },\n [],\n );\n\n const handleMouseOut = useCallback(() => {\n setHighlightedKey((highlightedKeyRef.current = undefined));\n }, []);\n\n const itemColorFunction = useCallback<ItemColorFunction>(\n ({ color, data, seriesName }) => {\n return dataItemInList(selectedKeysRef.current, seriesName, data.key)\n ? \"purple\"\n : color;\n },\n [],\n );\n\n const symbolSizeFunction = useCallback<SymbolSizeFunction>(\n (value: number, { data, seriesName }: EChartsCallbackParams) => {\n const isSelected = dataItemInList(\n selectedKeysRef.current,\n seriesName,\n data.key,\n );\n return isSelected ||\n dataItemMatch(highlightedKeyRef.current, seriesName, data.key)\n ? 16\n : 6;\n },\n [],\n );\n\n return {\n onClick: handleClick,\n onMouseOver: handleMouseOver,\n onMouseOut: handleMouseOut,\n itemColorFunction,\n symbolSizeFunction,\n };\n};\n"],"names":[],"mappings":";;AAoBA,MAAM,aAAA,GAAgB,CACpB,QACA,EAAA,YAAA,EACA,cACG,QAAU,EAAA,MAAA,KAAW,YAAgB,IAAA,QAAA,EAAU,GAAQ,KAAA,SAAA;AAC5D,MAAM,cAAiB,GAAA,CACrB,SACA,EAAA,YAAA,EACA,cAEA,SAAU,CAAA,IAAA;AAAA,EAAK,CAAC,QAAA,KACd,aAAc,CAAA,QAAA,EAAU,cAAc,SAAS;AACjD,CAAA;AAEW,MAAA,iBAAA,GAAoB,CAAC,MAAoC,KAAA;AACpE,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAAqB,EAAE,CAAA;AAC/D,EAAA,MAAM,GAAG,iBAAiB,CAAA,GAAI,QAA+B,EAAA;AAC7D,EAAM,MAAA,eAAA,GAAkB,OAAmB,YAAY,CAAA;AACvD,EAAM,MAAA,iBAAA,GAAoB,OAA6B,KAAS,CAAA,CAAA;AAEhE,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,EAAE,IAAA,EAAM,KAAO,EAAA,UAAA,EAAY,QAA6B,KAAA;AACvD,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,KAAA,EAAO,IAAK,EAAA;AAEZ,QAAM,MAAA,EAAE,KAAQ,GAAA,IAAA;AAChB,QAAM,MAAA,GAAA,GAAM,IAAI,CAAC,CAAA;AAEjB,QAAA,eAAA,CAAgB,CAAC,gBAAqB,KAAA;AACpC,UAAA,OAAQ,gBAAgB,OAAU,GAAA,cAAA;AAAA,YAChC,gBAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,cAEE,EAAC,GACD,CAAC,EAAE,MAAA,EAAQ,KAAK,CAAA;AAAA,SACrB,CAAA;AAAA;AACH,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,eAAkB,GAAA,WAAA;AAAA,IACtB,CAAC,EAAE,IAAM,EAAA,UAAA,EAAiC,KAAA;AACxC,MAAA,IAAI,UAAY,EAAA;AACd,QAAM,MAAA,EAAE,KAAQ,GAAA,IAAA;AAChB,QAAA,iBAAA;AAAA,UACG,iBAAA,CAAkB,UAAU,EAAE,MAAA,EAAQ,YAAY,GAAK,EAAA,GAAA,CAAI,CAAC,CAAE;AAAA,SACjE;AAAA;AACF,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAM,MAAA,cAAA,GAAiB,YAAY,MAAM;AACvC,IAAmB,iBAAA,CAAA,iBAAA,CAAkB,UAAU,KAAU,CAAA,CAAA;AAAA,GAC3D,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,EAAE,KAAO,EAAA,IAAA,EAAM,YAAiB,KAAA;AAC/B,MAAA,OAAO,eAAe,eAAgB,CAAA,OAAA,EAAS,YAAY,IAAK,CAAA,GAAG,IAC/D,QACA,GAAA,KAAA;AAAA,KACN;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,IACzB,CAAC,KAAA,EAAe,EAAE,IAAA,EAAM,YAAwC,KAAA;AAC9D,MAAA,MAAM,UAAa,GAAA,cAAA;AAAA,QACjB,eAAgB,CAAA,OAAA;AAAA,QAChB,UAAA;AAAA,QACA,IAAK,CAAA;AAAA,OACP;AACA,MAAO,OAAA,UAAA,IACL,cAAc,iBAAkB,CAAA,OAAA,EAAS,YAAY,IAAK,CAAA,GAAG,IAC3D,EACA,GAAA,CAAA;AAAA,KACN;AAAA,IACA;AAAC,GACH;AAEA,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,WAAA;AAAA,IACT,WAAa,EAAA,eAAA;AAAA,IACb,UAAY,EAAA,cAAA;AAAA,IACZ,iBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
- "version": "2.1.19-beta.2",
2
+ "version": "2.1.19-beta.3",
3
3
  "description": "support for apache echarts using vuu data",
4
- "type": "module",
5
4
  "license": "Apache-2.0",
6
5
  "devDependencies": {
7
- "@vuu-ui/vuu-data-types": "2.1.19-beta.2",
8
- "@vuu-ui/vuu-protocol-types": "2.1.19-beta.2"
6
+ "@vuu-ui/vuu-data-types": "2.1.19-beta.3",
7
+ "@vuu-ui/vuu-protocol-types": "2.1.19-beta.3",
8
+ "@vuu-ui/vuu-data-local": "2.1.19-beta.3"
9
9
  },
10
10
  "dependencies": {
11
11
  "@salt-ds/styles": "0.2.1",
12
12
  "@salt-ds/window": "0.1.1",
13
- "@vuu-ui/vuu-context-menu": "2.1.19-beta.2",
14
- "@vuu-ui/vuu-utils": "2.1.19-beta.2",
13
+ "@vuu-ui/vuu-context-menu": "2.1.19-beta.3",
14
+ "@vuu-ui/vuu-utils": "2.1.19-beta.3",
15
15
  "clsx": "^2.0.0"
16
16
  },
17
17
  "peerDependencies": {
@@ -21,16 +21,20 @@
21
21
  },
22
22
  "files": [
23
23
  "README.md",
24
- "src",
24
+ "esm",
25
+ "cjs",
25
26
  "/types"
26
27
  ],
27
28
  "exports": {
28
29
  ".": {
29
- "import": "./src/index.js",
30
+ "require": "./cjs/index.js",
31
+ "import": "./esm/index.js",
30
32
  "types": "./types/index.d.ts"
31
33
  }
32
34
  },
33
- "module": "index.js",
35
+ "main": "cjs/index.js",
36
+ "module": "esm/index.js",
34
37
  "name": "@vuu-ui/vuu-chart",
38
+ "type": "module",
35
39
  "types": "types/index.d.ts"
36
40
  }
package/types/Chart.d.ts CHANGED
@@ -1,19 +1,28 @@
1
1
  import { HTMLAttributes } from "react";
2
2
  import { ChartOptionsProps } from "./useChartOptions";
3
- import { ItemColorFunction } from "./ChartSeries";
4
3
  type OptionSettings = {
5
4
  notMerge: boolean;
6
5
  };
7
6
  type ChartSettings = {
7
+ /**
8
+ * Default value will be svg
9
+ */
8
10
  renderer: "svg" | "canvas";
11
+ /**
12
+ * Enlarges 'click zone' around interactive elements.
13
+ * Default value true;
14
+ */
9
15
  useCoarsePointer: boolean;
10
16
  };
11
17
  export interface ChartProps extends ChartOptionsProps, HTMLAttributes<HTMLDivElement> {
12
- chartSettings?: ChartSettings;
13
- itemColorFunction?: ItemColorFunction;
18
+ chartSettings?: Partial<ChartSettings>;
14
19
  optionSettings?: OptionSettings;
20
+ /**
21
+ * An array of color values that will be assigned, in the order given
22
+ * to rendered series.
23
+ */
15
24
  palette?: string[];
16
25
  showTooltip?: boolean;
17
26
  }
18
- export declare const Chart: ({ categoryColumnName, chartSettings, className, dataSource, itemColorFunction, optionSettings, palette, showTooltip, style, seriesColumnNames, ...htmlAttributes }: ChartProps) => import("react/jsx-runtime").JSX.Element;
27
+ export declare const Chart: ({ categoryColumnName, chartSettings, className, config, dataExclusions, dataSource, optionSettings, palette, showTooltip, style, seriesColumnNames, ...htmlAttributes }: ChartProps) => import("react/jsx-runtime").JSX.Element;
19
28
  export {};
@@ -1,49 +1,32 @@
1
1
  import { DataSource, DataSourceRow, DataSourceSubscribeCallback } from "@vuu-ui/vuu-data-types";
2
- import { VuuRowDataItemType } from "@vuu-ui/vuu-protocol-types";
3
2
  import { EventEmitter } from "@vuu-ui/vuu-utils";
4
- type Series = {
5
- id: string;
6
- name: string;
7
- label: string;
8
- data: DataSourceValue<number>[];
9
- lineStyle: {
10
- width: number;
11
- };
12
- itemStyle: {
13
- color: string | ItemColorFunction;
14
- };
15
- symbol: "emptyCircle" | "circle";
16
- type: "line";
17
- };
18
- export type ItemColorFunction = (params: {
19
- color: string;
20
- data: DataSourceValue;
21
- dataIndex: number;
22
- name: string;
23
- seriesName: string;
24
- }) => string;
25
- export type DataSourceValue<T extends VuuRowDataItemType = number> = {
3
+ import { Series } from "./chart-types";
4
+ import { ChartConfig, DataExclusionOptions } from "./useChartOptions";
5
+ export type DataSourceValue = {
26
6
  key: string;
27
7
  readonly row: DataSourceRow;
28
- value: T;
8
+ value: number | null;
29
9
  };
30
10
  export type ChartEvents = {
31
11
  update: () => void;
32
12
  };
33
13
  export interface ChartSeriesConstructorProps {
14
+ dataExclusions?: DataExclusionOptions;
34
15
  dataSource: DataSource;
35
- itemColorFunction?: ItemColorFunction;
16
+ config: ChartConfig;
17
+ palette: string[];
36
18
  }
37
19
  export declare class ChartSeries extends EventEmitter<ChartEvents> {
38
20
  #private;
39
21
  handleData: DataSourceSubscribeCallback;
40
22
  buildCategoriesAndSeries(): void;
41
- constructor({ dataSource, itemColorFunction }: ChartSeriesConstructorProps);
23
+ constructor({ config, dataExclusions, dataSource, palette, }: ChartSeriesConstructorProps);
24
+ get palette(): (string | undefined)[];
42
25
  get categoryColumn(): string;
43
26
  set categoryColumn(categoryColumn: string);
44
27
  get seriesColumnNames(): string[];
45
28
  set seriesColumnNames(seriesColumnNames: string[]);
46
29
  get categories(): string[];
47
30
  get series(): Series[];
31
+ private getCategoriesAndSeries;
48
32
  }
49
- export {};
@@ -0,0 +1,42 @@
1
+ import { DataSourceValue } from "./ChartSeries";
2
+ export declare const defaultItemColorFunction: ItemColorFunction;
3
+ export type EChartsCallbackParams = {
4
+ color: string;
5
+ data: DataSourceValue;
6
+ dataIndex: number;
7
+ name: string;
8
+ /**
9
+ * This is the Vuu column name
10
+ */
11
+ seriesName: string;
12
+ };
13
+ export type SymbolSizeFunction = (value: number, params: EChartsCallbackParams) => number | [number, number];
14
+ export type SymbolSize = number | [number, number] | SymbolSizeFunction;
15
+ export type SymbolType = "emptyCircle" | "circle" | `path://${string}`;
16
+ export type ItemColorFunction = (params: EChartsCallbackParams) => string;
17
+ export interface SeriesBase {
18
+ data: DataSourceValue[];
19
+ id: string;
20
+ itemStyle?: {
21
+ borderColor?: string;
22
+ color: string | ItemColorFunction;
23
+ borderWidth?: number;
24
+ };
25
+ label: string;
26
+ name: string;
27
+ symbol?: SymbolType;
28
+ symbolSize: SymbolSize;
29
+ }
30
+ export interface LineSeries extends SeriesBase {
31
+ connectNulls?: boolean;
32
+ lineStyle: {
33
+ color?: string;
34
+ width: number;
35
+ };
36
+ type: "line";
37
+ }
38
+ export interface ScatterSeries extends SeriesBase {
39
+ type: "scatter";
40
+ }
41
+ export type Series = LineSeries | ScatterSeries;
42
+ export type ChartSelectionModel = "none" | "single" | "single-no-deselect" | "extended";
@@ -0,0 +1,12 @@
1
+ import { DataSourceValue } from "./ChartSeries";
2
+ export interface TooltipParams {
3
+ axisValueLabel: string;
4
+ color: string;
5
+ componentType: string;
6
+ componentSubType: string;
7
+ data: DataSourceValue;
8
+ seriesName: string;
9
+ seriesType: 'line' | 'scatter';
10
+ value: number;
11
+ }
12
+ export declare const chartTooltip: (params: TooltipParams[]) => string | undefined;
package/types/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export { Chart, type ChartProps } from "./Chart";
2
- export { ChartSeries, type DataSourceValue, type ItemColorFunction, } from "./ChartSeries";
3
- export type { ChartContextMenuOptions, ChartMenuLocation, } from "./useChartContextMenu";
2
+ export type { ItemColorFunction, LineSeries as Series } from './chart-types';
3
+ export { ChartSeries, type DataSourceValue } from "./ChartSeries";
4
+ export type { ChartContextMenuOptions, ChartMenuLocation } from "./useChartContextMenu";
5
+ export type { ChartConfig, DataExclusionOptions } from './useChartOptions';
@@ -1,16 +1,16 @@
1
1
  import { DataSourceRow } from "@vuu-ui/vuu-data-types";
2
- import { VuuRowDataItemType } from "@vuu-ui/vuu-protocol-types";
2
+ import { ECElementEvent } from "echarts";
3
+ import { ColumnMap } from "@vuu-ui/vuu-utils";
3
4
  export type ChartMenuLocation = "canvas" | "series";
4
5
  export type ChartContextMenuOptions = {
5
- categoryColumn: string;
6
- categoryValue: VuuRowDataItemType;
6
+ column: string;
7
+ columnMap: ColumnMap;
7
8
  row: DataSourceRow;
8
- valueColumn: string;
9
- value: VuuRowDataItemType;
10
9
  };
11
10
  interface ChartContextMenuHookProps {
12
11
  allowContextMenu?: boolean;
13
- categoryColumnName: string;
12
+ categoryColumnName?: string;
13
+ columnMap: ColumnMap;
14
14
  }
15
- export declare const useChartContextMenu: ({ categoryColumnName, }: ChartContextMenuHookProps) => any;
15
+ export declare const useChartContextMenu: ({ columnMap, }: ChartContextMenuHookProps) => ({ data, event, seriesName }: ECElementEvent) => void;
16
16
  export {};
@@ -1,12 +1,28 @@
1
+ import { DataSource, DataSourceRow } from "@vuu-ui/vuu-data-types";
2
+ import { ColumnMap } from "@vuu-ui/vuu-utils";
1
3
  import { type EChartsCoreOption } from "echarts";
2
- import { ItemColorFunction } from "./ChartSeries";
3
- import { DataSource } from "@vuu-ui/vuu-data-types";
4
+ import type { ChartSelectionModel, ItemColorFunction, SymbolSize, SymbolSizeFunction, SymbolType } from "./chart-types";
5
+ export interface ChartConfig {
6
+ itemColorFunction?: ItemColorFunction;
7
+ selectionModel?: ChartSelectionModel;
8
+ symbolSize?: SymbolSize;
9
+ }
10
+ export interface DataExclusionOptions {
11
+ isExcludedData: (row: DataSourceRow, columnMap: ColumnMap, column: string) => boolean;
12
+ /**
13
+ * An embedded SVG path. If provided, will be used to render excluded values.
14
+ */
15
+ symbol?: SymbolType;
16
+ }
4
17
  export interface ChartOptionsProps {
5
18
  categoryColumnName: string;
19
+ config: ChartConfig;
20
+ dataExclusions?: DataExclusionOptions;
6
21
  dataSource: DataSource;
7
22
  itemColorFunction?: ItemColorFunction;
8
23
  palette?: string[];
9
24
  seriesColumnNames: string[];
10
25
  showTooltip?: boolean;
26
+ symbolSizeFunction?: SymbolSizeFunction;
11
27
  }
12
- export declare const useChartOptions: ({ categoryColumnName, dataSource, itemColorFunction, palette, seriesColumnNames, showTooltip, }: ChartOptionsProps) => EChartsCoreOption;
28
+ export declare const useChartOptions: ({ categoryColumnName, config, dataExclusions, dataSource, itemColorFunction, palette, seriesColumnNames, showTooltip, symbolSizeFunction: symbolSize, }: ChartOptionsProps) => EChartsCoreOption;
@@ -0,0 +1,14 @@
1
+ import { ECElementEvent } from "echarts";
2
+ import { ChartSelectionModel, ItemColorFunction, SymbolSizeFunction } from "./chart-types";
3
+ interface ChartSelectionHookProps {
4
+ selectionModel?: ChartSelectionModel;
5
+ categoryColumnName: string;
6
+ }
7
+ export declare const useChartSelection: (_props: ChartSelectionHookProps) => {
8
+ onClick: ({ data, event, seriesName: column }: ECElementEvent) => void;
9
+ onMouseOver: ({ data, seriesName }: ECElementEvent) => void;
10
+ onMouseOut: () => void;
11
+ itemColorFunction: ItemColorFunction;
12
+ symbolSizeFunction: SymbolSizeFunction;
13
+ };
14
+ export {};
package/src/Chart.css.js DELETED
@@ -1,42 +0,0 @@
1
- const css = `
2
- .vuuChartTooltip {
3
- background-color: var(--salt-container-primary-background) !important;
4
- border-color: var(--salt-selectable-borderColor-selected) !important;
5
- font-family: var(--salt-text-fontFamily) !important;
6
- border-radius: 6px !important;
7
-
8
- & > div > div {
9
- & > div:first-child {
10
- color: var(--salt-content-primary-foreground) !important;
11
- }
12
-
13
- & > div:nth-child(2) > div {
14
- & > div {
15
- align-items: center;
16
- display: flex;
17
-
18
- & span:first-child {
19
- flex: 0 0 12px;
20
- }
21
-
22
- & span:nth-child(2) {
23
- text-transform: capitalize;
24
- flex: none;
25
- color: var(--salt-content-secondary-foreground) !important;
26
- font-size: var(--salt-text-label-fontSize) !important;
27
- }
28
-
29
- & span:nth-child(3) {
30
- text-align: right;
31
- flex: auto;
32
- color: var(--salt-content-primary-foreground) !important;
33
- font-size: var(--salt-text-label-fontSize) !important;
34
- }
35
- }
36
- }
37
- }
38
- }
39
-
40
-
41
- `;
42
- export default css;
package/src/Chart.js DELETED
@@ -1,64 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { useEffect, useRef } from "react";
3
- import { getInstanceByDom, init } from "echarts";
4
- import { useComponentCssInjection } from "@salt-ds/styles";
5
- import { useWindow } from "@salt-ds/window";
6
- import { useChartOptions } from "./useChartOptions.js";
7
- import { useChartContextMenu } from "./useChartContextMenu.js";
8
- import clsx from "clsx";
9
- import Chart from "./Chart.css";
10
- const classBase = "vuuChart";
11
- const Chart_Chart = ({ categoryColumnName, chartSettings = {
12
- useCoarsePointer: true,
13
- renderer: "svg"
14
- }, className, dataSource, itemColorFunction, optionSettings = {
15
- notMerge: true
16
- }, palette, showTooltip, style = {
17
- width: "100%",
18
- height: "100%"
19
- }, seriesColumnNames, ...htmlAttributes })=>{
20
- const targetWindow = useWindow();
21
- useComponentCssInjection({
22
- testId: "vuu-toast-notification",
23
- css: Chart,
24
- window: targetWindow
25
- });
26
- const chartRef = useRef(null);
27
- const option = useChartOptions({
28
- categoryColumnName,
29
- itemColorFunction,
30
- palette,
31
- dataSource,
32
- seriesColumnNames,
33
- showTooltip
34
- });
35
- const onContextMenu = useChartContextMenu({
36
- categoryColumnName
37
- });
38
- useEffect(()=>{
39
- const chart = init(chartRef.current, null, chartSettings);
40
- chart.on("contextmenu", onContextMenu);
41
- return ()=>{
42
- chart?.dispose();
43
- };
44
- }, [
45
- chartSettings,
46
- onContextMenu
47
- ]);
48
- useEffect(()=>{
49
- if (chartRef.current) {
50
- const chart = getInstanceByDom(chartRef.current);
51
- chart?.setOption(option, optionSettings);
52
- }
53
- }, [
54
- option,
55
- optionSettings
56
- ]);
57
- return /*#__PURE__*/ jsx("div", {
58
- ...htmlAttributes,
59
- className: clsx(classBase, className),
60
- ref: chartRef,
61
- style: style
62
- });
63
- };
64
- export { Chart_Chart as Chart };