@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
@@ -1,101 +0,0 @@
1
- import { EventEmitter, Range, buildColumnMap, metadataKeys } from "@vuu-ui/vuu-utils";
2
- import { MovingDataRowWindow } from "./DataRowMovingWindow.js";
3
- const defaultItemColorFunction = ({ color })=>color;
4
- const { KEY: KEY } = metadataKeys;
5
- function DataSourceValue(key, row, value) {
6
- return {
7
- key,
8
- row,
9
- value
10
- };
11
- }
12
- function getCategoriesAndSeries(columnMap, data, categoryColumn, seriesColumns, itemColorFunction = defaultItemColorFunction) {
13
- const categoryValues = [];
14
- const seriesMap = new Map();
15
- data.forEach((row)=>{
16
- const categoryValue = row[columnMap[categoryColumn]];
17
- categoryValues.push(categoryValue);
18
- for (const seriesColumn of seriesColumns){
19
- let series = seriesMap.get(seriesColumn);
20
- if (!series) {
21
- series = {
22
- id: seriesColumn,
23
- name: seriesColumn,
24
- label: seriesColumn,
25
- data: [],
26
- type: "line",
27
- itemStyle: {
28
- color: itemColorFunction
29
- },
30
- lineStyle: {
31
- width: 1.5
32
- },
33
- symbol: "circle"
34
- };
35
- seriesMap.set(seriesColumn, series);
36
- }
37
- const key = row[KEY];
38
- const value = row[columnMap[seriesColumn]];
39
- series.data.push(DataSourceValue(key, row, value));
40
- }
41
- });
42
- return [
43
- categoryValues,
44
- Array.from(seriesMap.values())
45
- ];
46
- }
47
- class ChartSeries extends EventEmitter {
48
- #categoryColumn = "";
49
- #columnMap = {};
50
- #itemColorFunction;
51
- #dataWindow = new MovingDataRowWindow(Range(0, 1000));
52
- #dates = [];
53
- #series = [];
54
- #seriesColumns = [];
55
- handleData = (message)=>{
56
- if ("subscribed" === message.type) this.#columnMap = buildColumnMap(message.tableSchema.columns);
57
- else if ("viewport-update" === message.type) {
58
- if ("size-only" === message.mode) ;
59
- else if (message.rows) {
60
- for (const row of message.rows)this.#dataWindow.add(row);
61
- this.buildCategoriesAndSeries();
62
- }
63
- } else console.warn(JSON.stringify(message));
64
- };
65
- buildCategoriesAndSeries() {
66
- if (this.#categoryColumn && this.#seriesColumns.length > 0) {
67
- const [dates, series] = getCategoriesAndSeries(this.#columnMap, this.#dataWindow.data, this.#categoryColumn, this.#seriesColumns, this.#itemColorFunction);
68
- this.#dates = dates;
69
- this.#series = series;
70
- this.emit("update");
71
- }
72
- }
73
- constructor({ dataSource, itemColorFunction }){
74
- super();
75
- this.#itemColorFunction = itemColorFunction;
76
- dataSource.subscribe({
77
- range: Range(0, 1000)
78
- }, this.handleData);
79
- }
80
- get categoryColumn() {
81
- return this.#categoryColumn;
82
- }
83
- set categoryColumn(categoryColumn) {
84
- this.#categoryColumn = categoryColumn;
85
- if (this.#seriesColumns.length > 0) this.buildCategoriesAndSeries();
86
- }
87
- get seriesColumnNames() {
88
- return this.#seriesColumns;
89
- }
90
- set seriesColumnNames(seriesColumnNames) {
91
- this.#seriesColumns = seriesColumnNames;
92
- if (this.#categoryColumn) this.buildCategoriesAndSeries();
93
- }
94
- get categories() {
95
- return this.#dates;
96
- }
97
- get series() {
98
- return this.#series;
99
- }
100
- }
101
- export { ChartSeries };
@@ -1,64 +0,0 @@
1
- import { WindowRange, metadataKeys } from "@vuu-ui/vuu-utils";
2
- const { IDX: IDX, KEY: KEY } = metadataKeys;
3
- class MovingDataRowWindow {
4
- data;
5
- rowCount = 0;
6
- #range;
7
- constructor({ from, to }){
8
- this.#range = new WindowRange(from, to);
9
- this.data = new Array(Math.max(0, to - from));
10
- this.rowCount = 0;
11
- }
12
- setRowCount = (rowCount)=>{
13
- if (rowCount < this.data.length) this.data.length = rowCount;
14
- this.rowCount = rowCount;
15
- };
16
- add(data) {
17
- const index = data[IDX];
18
- if (this.isWithinRange(index)) {
19
- const internalIndex = index - this.#range.from;
20
- this.data[internalIndex] = data;
21
- }
22
- }
23
- getAtIndex(index) {
24
- return this.#range.isWithin(index) && null != this.data[index - this.#range.from] ? this.data[index - this.#range.from] : void 0;
25
- }
26
- getByKey(key) {
27
- return this.data.find((row)=>row[KEY] === key);
28
- }
29
- isWithinRange(index) {
30
- return this.#range.isWithin(index);
31
- }
32
- setRange({ from, to }) {
33
- if (from !== this.#range.from || to !== this.#range.to) {
34
- const [overlapFrom, overlapTo] = this.#range.overlap(from, to);
35
- const newData = new Array(Math.max(0, to - from));
36
- for(let i = overlapFrom; i < overlapTo; i++){
37
- const data = this.getAtIndex(i);
38
- if (data) {
39
- const index = i - from;
40
- newData[index] = data;
41
- }
42
- }
43
- this.data = newData;
44
- this.#range.from = from;
45
- this.#range.to = to;
46
- }
47
- }
48
- get hasData() {
49
- return this.data.some((d)=>void 0 !== d);
50
- }
51
- get firstRow() {
52
- for(let i = 0; i < this.data.length; i++)if (this.data[i]) return this.data[i];
53
- throw Error("[DataRowMovingWinddow] firstRow, no data");
54
- }
55
- get range() {
56
- return this.#range;
57
- }
58
- get hasAllRowsWithinRange() {
59
- const { from, to } = this.#range;
60
- for(let i = from; i < to; i++)if (void 0 === this.getAtIndex(i)) return false;
61
- return true;
62
- }
63
- }
64
- export { MovingDataRowWindow };
package/src/index.js DELETED
@@ -1,2 +0,0 @@
1
- export { Chart } from "./Chart.js";
2
- export { ChartSeries } from "./ChartSeries.js";
@@ -1,29 +0,0 @@
1
- import { useContextMenu } from "@vuu-ui/vuu-context-menu";
2
- import { useCallback } from "react";
3
- const useChartContextMenu = ({ categoryColumnName })=>{
4
- const showContextMenu = useContextMenu();
5
- const onContextMenu = useCallback(({ data, event, name: categoryValue, seriesName: valueColumn, value: keyedValue, ...rest })=>{
6
- event.stop();
7
- console.log({
8
- rest
9
- });
10
- const { row, value } = data;
11
- const menuOptions = {
12
- categoryColumn: categoryColumnName,
13
- categoryValue,
14
- row,
15
- valueColumn,
16
- value
17
- };
18
- showContextMenu(event.event, "series", menuOptions, {
19
- onOpenChange: (isOpen)=>{
20
- console.log(`[useTableContextMenu] onOpenChange ${isOpen}`);
21
- }
22
- });
23
- }, [
24
- categoryColumnName,
25
- showContextMenu
26
- ]);
27
- return onContextMenu;
28
- };
29
- export { useChartContextMenu };
@@ -1,76 +0,0 @@
1
- import { useMemo, useState } from "react";
2
- import { ChartSeries } from "./ChartSeries.js";
3
- import { itemsChanged } from "@vuu-ui/vuu-utils";
4
- const defaultPalette = [
5
- "#4676bf",
6
- "#ab6528",
7
- "#9f55c2",
8
- "#2a8285",
9
- "#697694",
10
- "#B0549d"
11
- ];
12
- const useChartOptions = ({ categoryColumnName, dataSource, itemColorFunction, palette = defaultPalette, seriesColumnNames, showTooltip = true })=>{
13
- const [, forceRender] = useState({});
14
- const chartSeries = useMemo(()=>{
15
- console.log("new ChartSeries");
16
- const cs = new ChartSeries({
17
- itemColorFunction,
18
- dataSource
19
- });
20
- cs.on("update", ()=>forceRender({}));
21
- return cs;
22
- }, [
23
- dataSource,
24
- itemColorFunction
25
- ]);
26
- useMemo(()=>{
27
- if (categoryColumnName !== chartSeries.categoryColumn) chartSeries.categoryColumn = categoryColumnName;
28
- if (itemsChanged(seriesColumnNames, chartSeries.seriesColumnNames)) chartSeries.seriesColumnNames = seriesColumnNames;
29
- }, [
30
- categoryColumnName,
31
- chartSeries,
32
- seriesColumnNames
33
- ]);
34
- return {
35
- animation: false,
36
- color: palette,
37
- dataZoom: [
38
- {
39
- backgroundColor: "var(--vuuChart-zoom-background, transparent)",
40
- borderColor: "var(--vuuChart-zoom-borderColor, white)",
41
- handleStyle: {
42
- color: "var(--vuuChart-zoom-handleColor, white)"
43
- },
44
- moveHandleStyle: {
45
- color: "var(--vuuChart-zoom-slideColor, white)"
46
- },
47
- type: "slider",
48
- start: 0,
49
- end: 100
50
- }
51
- ],
52
- grid: {
53
- left: "0",
54
- bottom: 0,
55
- right: 5
56
- },
57
- series: chartSeries.series,
58
- tooltip: showTooltip ? {
59
- backgroundColor: "",
60
- borderColor: "",
61
- className: "vuuChartTooltip",
62
- trigger: "axis"
63
- } : void 0,
64
- xAxis: {
65
- data: chartSeries.categories
66
- },
67
- yAxis: {
68
- splitLine: {
69
- lineStyle: {
70
- color: "var(--salt-separable-tertiary-borderColor)"
71
- }
72
- }
73
- }
74
- };
75
- };
76
- export { useChartOptions };