@qtsurfer/sveltecharts 0.3.5 → 0.4.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Svelte ECharts component
2
2
 
3
- ![NPM Version](https://img.shields.io/npm/v/%40qtsurfer%2Fsveltecharts?registry_uri=https%3A%2F%2Fregistry.npmjs.com&style=flat&logo=npm&label=QTSurfer%2Fsveltecharts)
4
- [![license](https://img.shields.io/npm/l/%40qtsurfer%2Fsveltecharts?registry_uri=https%3A%2F%2Fregistry.npmjs.com&style=flat)](LICENSE.md)
3
+ ![NPM Version](https://img.shields.io/npm/v/%40qtsurfer%2Fsveltecharts?label=version&style=flat-square)
4
+ [![license](https://img.shields.io/npm/l/%40qtsurfer%2Fsveltecharts?style=flat-square)](https://npmjs.com/package/@qtsurfer/sveltecharts)
5
5
 
6
6
  [Svelte](https://svelte.dev) (v4) [Apache ECharts](https://echarts.apache.org/) basic wrapper component.
@@ -1,91 +1,157 @@
1
- <script context="module">import { init, use } from "echarts/core";
2
- import { LineChart } from "echarts/charts";
3
- import {
4
- DataZoomComponent,
5
- LegendComponent,
6
- TitleComponent,
7
- TooltipComponent,
8
- GridComponent,
9
- DatasetComponent
10
- } from "echarts/components";
11
- import { LabelLayout } from "echarts/features";
12
- import { CanvasRenderer } from "echarts/renderers";
13
- use([
14
- LineChart,
15
- DataZoomComponent,
16
- LegendComponent,
17
- TitleComponent,
18
- TooltipComponent,
19
- GridComponent,
20
- DatasetComponent,
21
- LabelLayout,
22
- CanvasRenderer
23
- ]);
24
- const DEFAULT_CONFIG = {
25
- theme: void 0,
26
- renderer: "canvas"
27
- };
1
+ <script lang="ts" module>
2
+ import { init, use } from 'echarts/core';
3
+ import { LineChart, BarChart } from 'echarts/charts';
4
+ import {
5
+ DataZoomComponent,
6
+ LegendComponent,
7
+ TitleComponent,
8
+ TooltipComponent,
9
+ GridComponent,
10
+ DatasetComponent,
11
+ MarkLineComponent,
12
+ MarkPointComponent,
13
+ MarkAreaComponent
14
+ } from 'echarts/components';
15
+ import { LabelLayout } from 'echarts/features';
16
+ import { CanvasRenderer } from 'echarts/renderers';
17
+ import type { ECharts, EChartsOption } from './types';
18
+
19
+ // Register the required components
20
+ use([
21
+ LineChart,
22
+ BarChart,
23
+ DataZoomComponent,
24
+ LegendComponent,
25
+ TitleComponent,
26
+ TooltipComponent,
27
+ GridComponent,
28
+ DatasetComponent,
29
+ LabelLayout,
30
+ CanvasRenderer,
31
+ MarkLineComponent,
32
+ MarkPointComponent,
33
+ MarkAreaComponent
34
+ ]);
35
+
36
+ export type EChartsTheme = string | object;
37
+ export type EChartsRenderer = 'canvas' | 'svg';
38
+
39
+ export type EChartsConfig = {
40
+ theme?: EChartsTheme;
41
+ renderer?: EChartsRenderer;
42
+ option: EChartsOption;
43
+ };
44
+
45
+ export type DataRange = { start: number; end: number };
46
+ export type DataZoomEventSingle = { batch?: never } & DataRange;
47
+ export type DataZoomEventBatch = { batch: DataRange[]; start?: never; end?: never };
48
+
49
+ export type DataZoomEvent = DataZoomEventBatch | DataZoomEventSingle;
50
+
51
+ const DEFAULT_CONFIG: EChartsConfig = {
52
+ theme: undefined,
53
+ renderer: 'canvas',
54
+ option: {}
55
+ };
28
56
  </script>
29
57
 
30
- <script>import { createEventDispatcher } from "svelte";
31
- export let option;
32
- export let { theme, renderer } = DEFAULT_CONFIG;
33
- let instance;
34
- const dispatch = createEventDispatcher();
35
- const handleDataZoom = (event) => {
36
- let start, end;
37
- if (event.batch) {
38
- const [info] = event.batch;
39
- start = info.start;
40
- end = info.end;
41
- } else {
42
- start = event.start;
43
- end = event.end;
44
- }
45
- dispatch("datazoom", { event, start, end });
46
- };
47
- export function chartAction(element, echartsConfig) {
48
- const { theme: theme2, renderer: renderer2, option: option2 } = {
49
- ...DEFAULT_CONFIG,
50
- ...echartsConfig
51
- };
52
- instance = init(element, theme2, { renderer: renderer2 });
53
- const handleResize = () => {
54
- instance.resize();
55
- };
56
- window.addEventListener("resize", handleResize);
57
- instance.setOption(option2);
58
- instance.on("datazoom", handleDataZoom);
59
- return {
60
- destroy() {
61
- instance.off("datazoom", handleDataZoom);
62
- window.removeEventListener("resize", handleResize);
63
- instance.dispose();
64
- },
65
- update(config) {
66
- instance.setOption({
67
- ...echartsConfig.option,
68
- ...config.option
69
- });
70
- }
71
- };
72
- }
73
- export function clear() {
74
- instance.clear();
75
- }
76
- export function showLoading(text) {
77
- instance.showLoading({ text: text || "" });
78
- }
79
- export function hideLoading() {
80
- instance.hideLoading();
81
- }
58
+ <script lang="ts">
59
+ let {
60
+ onLoad,
61
+ config,
62
+ onDataZoom,
63
+ loading = $bindable(false),
64
+ onClear = $bindable(),
65
+ isDark = false
66
+ }: {
67
+ onLoad: (instance: ECharts) => Promise<void>;
68
+ config?: Partial<EChartsConfig>;
69
+ onDataZoom?: (event: DataZoomEventSingle) => void;
70
+ loading?: boolean;
71
+ onClear?: () => void;
72
+ isDark?: boolean;
73
+ } = $props();
74
+
75
+ let instance: ECharts;
76
+
77
+ const { theme, renderer, option } = {
78
+ ...DEFAULT_CONFIG,
79
+ ...config
80
+ };
81
+
82
+ const handleDataZoom = (zoomEvent: unknown) => {
83
+ if (!onDataZoom) {
84
+ return;
85
+ }
86
+
87
+ const event = zoomEvent as DataZoomEvent;
88
+ let start: number, end: number;
89
+
90
+ if (event.batch) {
91
+ const [info] = event.batch;
92
+ start = info.start;
93
+ end = info.end;
94
+ } else {
95
+ start = event.start;
96
+ end = event.end;
97
+ }
98
+
99
+ onDataZoom({ start, end });
100
+ };
101
+
102
+ function chartAction(element: HTMLElement) {
103
+ instance = init(element, undefined, { renderer });
104
+
105
+ const handleResize = () => {
106
+ instance.resize();
107
+ };
108
+ window.addEventListener('resize', handleResize);
109
+ instance.on('datazoom', handleDataZoom);
110
+
111
+ if (Object.keys(option).length) {
112
+ instance.setOption(option);
113
+ }
114
+
115
+ onClear = () => instance.clear();
116
+
117
+ onLoad(instance);
118
+
119
+ return {
120
+ destroy() {
121
+ instance.off('datazoom', handleDataZoom);
122
+ window.removeEventListener('resize', handleResize);
123
+ instance.dispose();
124
+ }
125
+ /**
126
+ * @todo
127
+ * Limiting option assignment. Review implementation
128
+ */
129
+ // update(config: EChartsConfig) {
130
+ // instance.setOption({
131
+ // ...echartsConfig.option,
132
+ // ...config.option
133
+ // });
134
+ // }
135
+ };
136
+ }
137
+
138
+ $effect(() => {
139
+ if (instance) {
140
+ instance.setTheme({ backgroundColor: isDark ? '#100c2a' : '#fff' });
141
+ }
142
+ });
82
143
  </script>
83
144
 
84
- <div id="chart" class="echarts" use:chartAction={{ renderer, theme, option }}></div>
145
+ <div style="position: relative; width: 100%; height: 100%;">
146
+ <div id="chart" class="echarts" use:chartAction></div>
147
+ </div>
85
148
 
86
149
  <style>
87
150
  .echarts {
88
151
  width: 100%;
89
- height: 75vh;
152
+ height: 100%;
153
+ min-height: 300px;
154
+ position: relative;
155
+ z-index: 1;
90
156
  }
91
157
  </style>
@@ -1,5 +1,4 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { EChartsOption } from './types';
1
+ import type { ECharts, EChartsOption } from './types';
3
2
  export type EChartsTheme = string | object;
4
3
  export type EChartsRenderer = 'canvas' | 'svg';
5
4
  export type EChartsConfig = {
@@ -11,40 +10,24 @@ export type DataRange = {
11
10
  start: number;
12
11
  end: number;
13
12
  };
14
- export type DataZoomEvent = CustomEvent<DataRange>;
15
- declare const __propDef: {
16
- props: {
17
- option: EChartsOption;
18
- theme?: EChartsTheme | undefined;
19
- renderer?: EChartsRenderer | undefined;
20
- chartAction?: (element: HTMLElement, echartsConfig: EChartsConfig) => {
21
- destroy(): void;
22
- update(config: EChartsConfig): void;
23
- };
24
- clear?: () => void;
25
- showLoading?: (text?: string) => void;
26
- hideLoading?: () => void;
27
- };
28
- events: {
29
- datazoom: CustomEvent<any>;
30
- } & {
31
- [evt: string]: CustomEvent<any>;
32
- };
33
- slots: {};
34
- exports?: {} | undefined;
35
- bindings?: string | undefined;
13
+ export type DataZoomEventSingle = {
14
+ batch?: never;
15
+ } & DataRange;
16
+ export type DataZoomEventBatch = {
17
+ batch: DataRange[];
18
+ start?: never;
19
+ end?: never;
36
20
  };
37
- export type SveChartsProps = typeof __propDef.props;
38
- export type SveChartsEvents = typeof __propDef.events;
39
- export type SveChartsSlots = typeof __propDef.slots;
40
- export default class SveCharts extends SvelteComponent<SveChartsProps, SveChartsEvents, SveChartsSlots> {
41
- get chartAction(): (element: HTMLElement, echartsConfig: EChartsConfig) => {
42
- destroy(): void;
43
- update(config: EChartsConfig): void;
44
- };
45
- get clear(): () => void;
46
- get showLoading(): (text?: string) => void;
47
- get hideLoading(): () => void;
48
- }
49
- export {};
21
+ export type DataZoomEvent = DataZoomEventBatch | DataZoomEventSingle;
22
+ type $$ComponentProps = {
23
+ onLoad: (instance: ECharts) => Promise<void>;
24
+ config?: Partial<EChartsConfig>;
25
+ onDataZoom?: (event: DataZoomEventSingle) => void;
26
+ loading?: boolean;
27
+ onClear?: () => void;
28
+ isDark?: boolean;
29
+ };
30
+ declare const SVECharts: import("svelte").Component<$$ComponentProps, {}, "loading" | "onClear">;
31
+ type SVECharts = ReturnType<typeof SVECharts>;
32
+ export default SVECharts;
50
33
  //# sourceMappingURL=SVECharts.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SVECharts.svelte.d.ts","sourceRoot":"","sources":["../src/lib/SVECharts.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAEvC;AAaA,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,SAAS,CAAC;AActD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAC3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AAiFpD,QAAA,MAAM,SAAS;;gBADkK,aAAa;;;gCAjD9J,WAAW,iBAAiB,aAAa;;2BAoBvD,aAAa;;;8BAaD,MAAM;;;;;;;;;;;CAiBmB,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACpD,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACtD,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,eAAe,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC;IACnG,IAAI,WAAW,cAxDa,WAAW,iBAAiB,aAAa;;uBAoBvD,aAAa;MAoCuD;IAClF,IAAI,KAAK,eAA6D;IACtE,IAAI,WAAW,YAzBW,MAAM,UAyBkD;IAClF,IAAI,WAAW,eAAmE;CACrF"}
1
+ {"version":3,"file":"SVECharts.svelte.d.ts","sourceRoot":"","sources":["../src/lib/SVECharts.svelte.ts"],"names":[],"mappings":"AAkBC,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAmBtD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAC3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AACvD,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,SAAS,CAAC;AAChE,MAAM,MAAM,kBAAkB,GAAG;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,GAAG,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAQrE,KAAK,gBAAgB,GAAI;IACxB,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AA2FH,QAAA,MAAM,SAAS,yEAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { type LineSeriesOption, type DataZoomComponentOption } from 'echarts';
2
+ import { type ECharts } from './';
3
+ import type { GridOption } from 'echarts/types/dist/shared';
4
+ import type { ZRColor } from 'echarts/types/src/util/types.js';
5
+ type IconType = 'circle' | 'rect' | 'roundRect' | 'triangle' | 'diamond' | 'pin' | 'arrowUp' | 'arrowDown' | 'none';
6
+ type LabelPosition = 'top' | 'left' | 'right' | 'bottom' | 'inside' | 'insideLeft' | 'insideRight' | 'insideTop' | 'insideBottom' | 'insideTopLeft' | 'insideBottomLeft' | 'insideTopRight' | 'insideBottomRight';
7
+ type MarkerPointOption = {
8
+ icon: IconType;
9
+ color: ZRColor;
10
+ position: LabelPosition;
11
+ symbolSize: number;
12
+ };
13
+ type DatasetFormatSimpleObject = Record<string, number[]>;
14
+ type DatasetFormatObject = Record<string, any>[];
15
+ type DatasetFormatArray = number[][];
16
+ /**
17
+ *
18
+ * ConfigBuilder:
19
+ * externalManagerLegend: Hides EChart legends to allow external management
20
+ *
21
+ */
22
+ type ConfigBuilder = {
23
+ externalManagerLegend?: boolean;
24
+ };
25
+ export type MarkerEvent = {
26
+ name?: string;
27
+ xAxis: number[];
28
+ icon?: IconType;
29
+ color?: ZRColor;
30
+ position?: 'aboveBar' | 'belowBar';
31
+ };
32
+ export type MarkArea = {
33
+ name?: string;
34
+ xAxis: [number, number];
35
+ color?: ZRColor;
36
+ };
37
+ export declare class TimeSeriesChartBuilder {
38
+ ECharts: ECharts;
39
+ private builderConfig;
40
+ private option;
41
+ private yDimensions;
42
+ private yDimensionNames?;
43
+ private _tsColumn;
44
+ constructor(instance: ECharts, builderConfig?: ConfigBuilder);
45
+ /**
46
+ * Accepts data as rows: [timestamp, v1, v2, ...]
47
+ * Automatically generates line series for each value column (>=1).
48
+ */
49
+ setDataset(data: DatasetFormatArray | DatasetFormatObject | DatasetFormatSimpleObject, yDimensionsNames?: string[]): this;
50
+ toggleLegend(column: string): this;
51
+ goToZoom(start: number, end: number): this;
52
+ /**
53
+ * data: [1658870400, 823, 95.8, ...]
54
+ * dimensionsNames: ['_ts', 'price', 'otherColumn', ...]
55
+ */
56
+ private setDatasetByArray;
57
+ /**
58
+ * Data is an array of objects.
59
+ * [
60
+ * {_ts: 1658870400, price: 823, otherColumn: 95.8},
61
+ * {...}
62
+ * ]
63
+ */
64
+ private setDataByObject;
65
+ private setDataByObjectSimple;
66
+ addDimension(data: DatasetFormatSimpleObject, dimName: string): this;
67
+ private getColumnsSelected;
68
+ addSeries(dim: string, dimName: string, isSelected: boolean): void;
69
+ /**
70
+ * Tooltip bound to axis with a crosshair pointer.
71
+ */
72
+ setAxisTooltip(): this;
73
+ /**
74
+ * Legend with a custom icon (e.g., 'circle', 'rect').
75
+ */
76
+ setLegendIcon(icon: IconType): this;
77
+ /**
78
+ * Adds both inside and slider dataZoom.
79
+ */
80
+ setDataZoom(zoomOptions: DataZoomComponentOption): this;
81
+ setGrid(gridOption: GridOption): this;
82
+ /**
83
+ * Sets chart title and optional subtitle, centered.
84
+ */
85
+ setTitle(text: string, subtext?: string): this;
86
+ /**
87
+ * Applies a partial style to all existing series (e.g., { smooth: true, symbol: 'none' }).
88
+ */
89
+ setSeriesStyle(style: Partial<LineSeriesOption>): this;
90
+ /**
91
+ * Adds a marker event to the chart.
92
+ */
93
+ addMarkerEvents(data: MarkerEvent[], widthLine?: number): this;
94
+ /**
95
+ * Adds a marker area event to the chart.
96
+ */
97
+ addMarkArea(data: MarkArea[]): this;
98
+ private getIcon;
99
+ addMarkerPoint(id: number, data: {
100
+ dimName: string;
101
+ timestamp: number;
102
+ name?: string;
103
+ }, options?: Partial<MarkerPointOption>): this;
104
+ private isNumberArray;
105
+ /**
106
+ * Creates the series data
107
+ */
108
+ private createSeriesData;
109
+ /**
110
+ * Search for the dimension key and timestamp
111
+ */
112
+ private searchValueByDimensionKeyAndTimestamp;
113
+ /**
114
+ * Return the percentage fields in the dataset
115
+ */
116
+ private detectPercentageFields;
117
+ build(): this;
118
+ getDimensionKeys(): {
119
+ y: string[];
120
+ x: string;
121
+ };
122
+ getLegendStatus(): Record<string, boolean>;
123
+ getTotalRows(): number;
124
+ private isSimpleObject;
125
+ private isRecordArray;
126
+ private isNumberMatrix;
127
+ getRangeValues(): any[];
128
+ toggleMarkers(id: number, dimName: string, shape: string): this | undefined;
129
+ }
130
+ export {};
131
+ //# sourceMappingURL=TimeSeriesChartBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeSeriesChartBuilder.d.ts","sourceRoot":"","sources":["../src/lib/TimeSeriesChartBuilder.ts"],"names":[],"mappings":"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"}