@qtsurfer/sveltecharts 0.6.0 → 0.7.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.
- package/dist/LightweightTimeSeriesChartBuilder.d.ts +2 -0
- package/dist/LightweightTimeSeriesChartBuilder.d.ts.map +1 -1
- package/dist/LightweightTimeSeriesChartBuilder.js +38 -1
- package/dist/SVELightweightCharts.svelte +2 -1
- package/dist/SVELightweightCharts.svelte.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,8 @@ import type { ChartDataset, ChartDatasetFormatSimpleObject, ChartMarkerPointOpti
|
|
|
3
3
|
type ConfigBuilder = {
|
|
4
4
|
externalManagerLegend?: boolean;
|
|
5
5
|
};
|
|
6
|
+
export declare function getPricePrecision(values: number[]): number;
|
|
7
|
+
export declare function formatPreciseValue(value: number): string;
|
|
6
8
|
export declare class LightweightTimeSeriesChartBuilder implements TimeSeriesChartAdapter {
|
|
7
9
|
LightweightChart: IChartApi;
|
|
8
10
|
private builderConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightweightTimeSeriesChartBuilder.d.ts","sourceRoot":"","sources":["../src/lib/LightweightTimeSeriesChartBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,SAAS,EASd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACX,YAAY,EAGZ,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,MAAM,gBAAgB,CAAC;AAExB,KAAK,aAAa,GAAG;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"LightweightTimeSeriesChartBuilder.d.ts","sourceRoot":"","sources":["../src/lib/LightweightTimeSeriesChartBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,SAAS,EASd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACX,YAAY,EAGZ,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,MAAM,gBAAgB,CAAC;AAExB,KAAK,aAAa,GAAG;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AA6BF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAWjD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,UAW/C;AAED,qBAAa,iCAAkC,YAAW,sBAAsB;IACxE,gBAAgB,EAAE,SAAS,CAAC;IACnC,OAAO,CAAC,aAAa,CAEnB;IACF,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,cAAc,CAAoD;IAC1E,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,aAAa;IAK9D,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAejE,YAAY,CAAC,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,MAAM;IAclE,cAAc,CACb,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;KACd,EACD,OAAO,CAAC,EAAE,uBAAuB,GAC/B,IAAI;IAmBP,KAAK;IAqCL,eAAe;IAIf,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAWlC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAuB1C,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAqBrC,YAAY;IAIZ,cAAc,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAQlC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAmBxD,YAAY,IAAI,IAAI;IAQpB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,yBAAyB;IA4BjC,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;CAWzB"}
|
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
import { LineSeries, createSeriesMarkers } from 'lightweight-charts';
|
|
2
2
|
const SERIES_COLORS = ['#2563eb', '#16a34a', '#dc2626', '#7c3aed', '#d97706', '#0891b2'];
|
|
3
|
+
const DEFAULT_PRICE_PRECISION = 2;
|
|
4
|
+
const MAX_PRICE_PRECISION = 12;
|
|
5
|
+
function getDecimalPrecision(value) {
|
|
6
|
+
if (!Number.isFinite(value) || value === 0) {
|
|
7
|
+
return 0;
|
|
8
|
+
}
|
|
9
|
+
const [mantissa, exponentValue] = Math.abs(value).toExponential(MAX_PRICE_PRECISION).split('e');
|
|
10
|
+
const exponent = Number(exponentValue);
|
|
11
|
+
const significantDecimals = (mantissa.split('.')[1] ?? '').replace(/0+$/, '').length;
|
|
12
|
+
return Math.max(0, Math.min(MAX_PRICE_PRECISION, significantDecimals - exponent));
|
|
13
|
+
}
|
|
14
|
+
export function getPricePrecision(values) {
|
|
15
|
+
let precision = DEFAULT_PRICE_PRECISION;
|
|
16
|
+
for (const value of values) {
|
|
17
|
+
precision = Math.max(precision, getDecimalPrecision(value));
|
|
18
|
+
if (precision >= MAX_PRICE_PRECISION) {
|
|
19
|
+
return MAX_PRICE_PRECISION;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return precision;
|
|
23
|
+
}
|
|
24
|
+
export function formatPreciseValue(value) {
|
|
25
|
+
if (!Number.isFinite(value)) {
|
|
26
|
+
return String(value);
|
|
27
|
+
}
|
|
28
|
+
const precision = getDecimalPrecision(value);
|
|
29
|
+
if (precision === 0) {
|
|
30
|
+
return value.toString();
|
|
31
|
+
}
|
|
32
|
+
return value.toFixed(precision).replace(/\.?0+$/, '');
|
|
33
|
+
}
|
|
3
34
|
export class LightweightTimeSeriesChartBuilder {
|
|
4
35
|
LightweightChart;
|
|
5
36
|
builderConfig = {
|
|
@@ -264,6 +295,7 @@ export class LightweightTimeSeriesChartBuilder {
|
|
|
264
295
|
});
|
|
265
296
|
}
|
|
266
297
|
addSeries(dim, dimName, isSelected, index) {
|
|
298
|
+
const pricePrecision = getPricePrecision(this.dataset[dim] ?? []);
|
|
267
299
|
const series = this.LightweightChart.addSeries(LineSeries, {
|
|
268
300
|
color: SERIES_COLORS[(index ?? this.series.size) % SERIES_COLORS.length],
|
|
269
301
|
lineWidth: 1,
|
|
@@ -271,7 +303,12 @@ export class LightweightTimeSeriesChartBuilder {
|
|
|
271
303
|
priceScaleId: this.isPercentageDimension(dim) ? 'left' : 'right',
|
|
272
304
|
visible: isSelected,
|
|
273
305
|
crosshairMarkerVisible: false,
|
|
274
|
-
lastValueVisible: true
|
|
306
|
+
lastValueVisible: true,
|
|
307
|
+
priceFormat: {
|
|
308
|
+
type: 'price',
|
|
309
|
+
precision: pricePrecision,
|
|
310
|
+
minMove: 10 ** -pricePrecision
|
|
311
|
+
}
|
|
275
312
|
});
|
|
276
313
|
this.series.set(dim, series);
|
|
277
314
|
this.selected[dim] = isSelected;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
type MouseEventParams,
|
|
10
10
|
type Time
|
|
11
11
|
} from 'lightweight-charts';
|
|
12
|
+
import { formatPreciseValue } from './LightweightTimeSeriesChartBuilder';
|
|
12
13
|
|
|
13
14
|
type LightweightChartsConfig = {
|
|
14
15
|
options?: DeepPartial<ChartOptions>;
|
|
@@ -100,7 +101,7 @@
|
|
|
100
101
|
const value = data?.value;
|
|
101
102
|
if (value === undefined || value === null) continue;
|
|
102
103
|
const label = (series.options() as { title?: string }).title ?? '';
|
|
103
|
-
rows.push({ label, value: value
|
|
104
|
+
rows.push({ label, value: formatPreciseValue(value) });
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
if (rows.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SVELightweightCharts.svelte.d.ts","sourceRoot":"","sources":["../src/lib/SVELightweightCharts.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EAKd,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SVELightweightCharts.svelte.d.ts","sourceRoot":"","sources":["../src/lib/SVELightweightCharts.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EAKd,MAAM,oBAAoB,CAAC;AAI5B,KAAK,uBAAuB,GAAG;IAC9B,OAAO,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;CACpC,CAAC;AAGF,KAAK,gBAAgB,GAAI;IACxB,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AA+KH,QAAA,MAAM,oBAAoB,yEAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"private": false,
|
|
3
3
|
"name": "@qtsurfer/sveltecharts",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.7.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "QTSurfer (https://github.com/QTSurfer)",
|
|
7
7
|
"homepage": "https://github.com/QTSurfer/svelte-timeseries/tree/main/packages/sveltecharts",
|