velo-plot 1.19.0 → 2.0.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 (49) hide show
  1. package/dist/{ChartCore-DQ691eXH.js → ChartCore-BhQ4j7f5.js} +1299 -1102
  2. package/dist/ChartCore-BhQ4j7f5.js.map +1 -0
  3. package/dist/SciPlot-GJvw7GJo.js +463 -0
  4. package/dist/SciPlot-GJvw7GJo.js.map +1 -0
  5. package/dist/axisFormat-SPX-CD5s.js +200 -0
  6. package/dist/axisFormat-SPX-CD5s.js.map +1 -0
  7. package/dist/core/InteractionManager.d.ts +1 -0
  8. package/dist/core/OverlayRenderer.d.ts +11 -0
  9. package/dist/core/chart/ChartCore.d.ts +5 -0
  10. package/dist/core/chart/ChartRenderLoop.d.ts +5 -0
  11. package/dist/core/chart/ChartRenderer.d.ts +5 -0
  12. package/dist/core/chart/positionLines.d.ts +12 -0
  13. package/dist/core/chart/types.d.ts +2 -0
  14. package/dist/core/format/axisFormat.d.ts +2 -1
  15. package/dist/core/indicator/addIndicator.d.ts +1 -1
  16. package/dist/core/indicator/indicatorPresets.d.ts +10 -2
  17. package/dist/core/time/TimeScale.d.ts +2 -2
  18. package/dist/core/time/applyTimeScale.d.ts +10 -0
  19. package/dist/createStackedChart-DJSmqerD.js +706 -0
  20. package/dist/createStackedChart-DJSmqerD.js.map +1 -0
  21. package/dist/{index-DjeWClO9.js → index-CWipqOLP.js} +2 -2
  22. package/dist/{index-DjeWClO9.js.map → index-CWipqOLP.js.map} +1 -1
  23. package/dist/{index.core-BtGFYMOu.js → index.core-fpZ1dYN0.js} +3 -3
  24. package/dist/{index.core-BtGFYMOu.js.map → index.core-fpZ1dYN0.js.map} +1 -1
  25. package/dist/index.d.ts +5 -0
  26. package/dist/mockDatafeed-Cdg5hKEo.js +511 -0
  27. package/dist/mockDatafeed-Cdg5hKEo.js.map +1 -0
  28. package/dist/plugins/drawing-tools/index.d.ts +14 -1
  29. package/dist/plugins/drawing-tools/measure.d.ts +21 -0
  30. package/dist/plugins/drawing-tools/snapToCandle.d.ts +21 -0
  31. package/dist/plugins/tools.js +1 -1
  32. package/dist/react.js +5 -5
  33. package/dist/trading/datafeed.d.ts +48 -0
  34. package/dist/trading/index.d.ts +29 -0
  35. package/dist/trading/mockDatafeed.d.ts +9 -0
  36. package/dist/trading/ohlcvGenerator.d.ts +25 -0
  37. package/dist/trading.d.ts +1 -0
  38. package/dist/trading.js +95 -0
  39. package/dist/trading.js.map +1 -0
  40. package/dist/types.d.ts +1 -1
  41. package/dist/velo-plot.full.js +833 -1054
  42. package/dist/velo-plot.full.js.map +1 -1
  43. package/dist/velo-plot.js +13 -13
  44. package/package.json +13 -1
  45. package/dist/ChartCore-DQ691eXH.js.map +0 -1
  46. package/dist/axisFormat-B7o_uIEA.js +0 -127
  47. package/dist/axisFormat-B7o_uIEA.js.map +0 -1
  48. package/dist/createStackedChart-BPooTQ9z.js +0 -1164
  49. package/dist/createStackedChart-BPooTQ9z.js.map +0 -1
@@ -1,127 +0,0 @@
1
- var l = Object.defineProperty;
2
- var h = (r, e, t) => e in r ? l(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
- var s = (r, e, t) => h(r, typeof e != "symbol" ? e + "" : e, t);
4
- class S {
5
- constructor() {
6
- s(this, "listeners", /* @__PURE__ */ new Map());
7
- }
8
- /**
9
- * Subscribe to an event
10
- */
11
- on(e, t) {
12
- this.listeners.has(e) || this.listeners.set(e, /* @__PURE__ */ new Set()), this.listeners.get(e).add(t);
13
- }
14
- /**
15
- * Unsubscribe from an event
16
- */
17
- off(e, t) {
18
- const i = this.listeners.get(e);
19
- i && i.delete(t);
20
- }
21
- /**
22
- * Emit an event with data
23
- */
24
- emit(e, t) {
25
- const i = this.listeners.get(e);
26
- i && i.forEach((n) => {
27
- try {
28
- n(t);
29
- } catch (c) {
30
- console.error(`[EventEmitter] Error in handler for "${String(e)}":`, c);
31
- }
32
- });
33
- }
34
- /**
35
- * Subscribe to an event once
36
- */
37
- once(e, t) {
38
- const i = (n) => {
39
- this.off(e, i), t(n);
40
- };
41
- this.on(e, i);
42
- }
43
- /**
44
- * Remove all listeners
45
- */
46
- clear() {
47
- this.listeners.clear();
48
- }
49
- /**
50
- * Get listener count for an event
51
- */
52
- listenerCount(e) {
53
- var t;
54
- return ((t = this.listeners.get(e)) == null ? void 0 : t.size) ?? 0;
55
- }
56
- }
57
- const m = {
58
- n: 1e-9,
59
- µ: 1e-6,
60
- m: 1e-3,
61
- "": 1,
62
- k: 1e3,
63
- M: 1e6
64
- };
65
- function g(r) {
66
- const e = Math.abs(r);
67
- return e >= 1e6 ? "M" : e >= 1e3 ? "k" : e > 0 && e < 1e-6 ? "n" : e > 0 && e < 1e-3 ? "µ" : e > 0 && e < 1 ? "m" : "";
68
- }
69
- function u(r, e) {
70
- const t = e === "auto" ? g(r) : e, i = m[t] ?? 1;
71
- return `${(r / i).toPrecision(3)}${t}`;
72
- }
73
- function E(r) {
74
- return r <= 1e3 * 60 * 60 * 36 ? new Intl.DateTimeFormat(void 0, {
75
- day: "2-digit",
76
- month: "2-digit",
77
- hour: "2-digit",
78
- minute: "2-digit"
79
- }) : r <= 1e3 * 60 * 60 * 24 * 90 ? new Intl.DateTimeFormat(void 0, { day: "2-digit", month: "2-digit" }) : new Intl.DateTimeFormat(void 0, { month: "short", year: "2-digit" });
80
- }
81
- function T(r, e) {
82
- return E(e ?? 864e5).format(new Date(r));
83
- }
84
- function a(r, e) {
85
- const t = r.toExponential(e), [i, n] = t.split("e"), c = {
86
- 0: "⁰",
87
- 1: "¹",
88
- 2: "²",
89
- 3: "³",
90
- 4: "⁴",
91
- 5: "⁵",
92
- 6: "⁶",
93
- 7: "⁷",
94
- 8: "⁸",
95
- 9: "⁹",
96
- "-": "⁻",
97
- "+": "⁺"
98
- }, d = n.replace("+", "").replace(/[0-9\-]/g, (f) => c[f] || f);
99
- return `${i}e${d}`;
100
- }
101
- function b(r, e, t) {
102
- if ((e == null ? void 0 : e.type) === "time")
103
- return T(r, t);
104
- if ((e == null ? void 0 : e.prefix) !== void 0 && e.prefix !== "")
105
- return u(r, e.prefix);
106
- const i = (e == null ? void 0 : e.scientific) === !0, n = (e == null ? void 0 : e.scientific) === !1, c = Math.abs(r);
107
- return i || !n && c !== 0 && c < 1e-3 ? a(r, 1) : r.toFixed(3).replace(/\.?0+$/, "");
108
- }
109
- function w(r, e) {
110
- if (r === 0) return "0";
111
- const t = (e == null ? void 0 : e.scientific) === !0, i = (e == null ? void 0 : e.scientific) === !1, n = Math.abs(r);
112
- return (e == null ? void 0 : e.prefix) !== void 0 && e.prefix !== "" ? u(r, e.prefix) : t || !i && (n < 1e-4 || n >= 1e6) ? a(r, 1) : n >= 1e3 ? r.toLocaleString(void 0, { maximumFractionDigits: 2 }) : r.toPrecision(3);
113
- }
114
- function k(r, e) {
115
- return b(r, e == null ? void 0 : e.x, e == null ? void 0 : e.xSpan);
116
- }
117
- function D(r, e) {
118
- return w(r, e == null ? void 0 : e.y);
119
- }
120
- export {
121
- S as E,
122
- D as a,
123
- b,
124
- w as c,
125
- k as f
126
- };
127
- //# sourceMappingURL=axisFormat-B7o_uIEA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"axisFormat-B7o_uIEA.js","sources":["../src/core/EventEmitter.ts","../src/core/format/axisFormat.ts"],"sourcesContent":["/**\n * Type-safe event emitter for chart events\n */\n\nexport class EventEmitter<EventMap extends object> {\n private listeners: Map<keyof EventMap, Set<(data: unknown) => void>> =\n new Map();\n\n /**\n * Subscribe to an event\n */\n on<K extends keyof EventMap>(\n event: K,\n handler: (data: EventMap[K]) => void\n ): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler as (data: unknown) => void);\n }\n\n /**\n * Unsubscribe from an event\n */\n off<K extends keyof EventMap>(\n event: K,\n handler: (data: EventMap[K]) => void\n ): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n handlers.delete(handler as (data: unknown) => void);\n }\n }\n\n /**\n * Emit an event with data\n */\n emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n handlers.forEach((handler) => {\n try {\n handler(data);\n } catch (error) {\n console.error(`[EventEmitter] Error in handler for \"${String(event)}\":`, error);\n }\n });\n }\n }\n\n /**\n * Subscribe to an event once\n */\n once<K extends keyof EventMap>(\n event: K,\n handler: (data: EventMap[K]) => void\n ): void {\n const wrappedHandler = (data: EventMap[K]) => {\n this.off(event, wrappedHandler);\n handler(data);\n };\n this.on(event, wrappedHandler);\n }\n\n /**\n * Remove all listeners\n */\n clear(): void {\n this.listeners.clear();\n }\n\n /**\n * Get listener count for an event\n */\n listenerCount(event: keyof EventMap): number {\n return this.listeners.get(event)?.size ?? 0;\n }\n}\n","/**\n * Shared axis tick and tooltip value formatting.\n */\nimport type { AxisOptions } from \"../../types\";\n\nconst PREFIXDivisors: Record<string, number> = {\n n: 1e-9,\n µ: 1e-6,\n m: 1e-3,\n \"\": 1,\n k: 1e3,\n M: 1e6,\n};\n\nexport function autoPrefixFor(value: number): NonNullable<AxisOptions[\"prefix\"]> {\n const absVal = Math.abs(value);\n if (absVal >= 1e6) return \"M\";\n if (absVal >= 1e3) return \"k\";\n if (absVal > 0 && absVal < 1e-6) return \"n\";\n if (absVal > 0 && absVal < 1e-3) return \"µ\";\n if (absVal > 0 && absVal < 1) return \"m\";\n return \"\";\n}\n\nexport function applyPrefix(\n value: number,\n prefix: NonNullable<AxisOptions[\"prefix\"]>,\n): string {\n const resolved = prefix === \"auto\" ? autoPrefixFor(value) : prefix;\n const divisor = PREFIXDivisors[resolved] ?? 1;\n const scaled = value / divisor;\n return `${scaled.toPrecision(3)}${resolved}`;\n}\n\nexport function pickTimeFormatter(spanMs: number): Intl.DateTimeFormat {\n if (spanMs <= 1000 * 60 * 60 * 36) {\n return new Intl.DateTimeFormat(undefined, {\n day: \"2-digit\",\n month: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n }\n if (spanMs <= 1000 * 60 * 60 * 24 * 90) {\n return new Intl.DateTimeFormat(undefined, { day: \"2-digit\", month: \"2-digit\" });\n }\n return new Intl.DateTimeFormat(undefined, { month: \"short\", year: \"2-digit\" });\n}\n\nexport function formatTimeTick(value: number, spanMs?: number): string {\n const span = spanMs ?? 1000 * 60 * 60 * 24;\n return pickTimeFormatter(span).format(new Date(value));\n}\n\nexport function toScientificUnicode(value: number, precision: number): string {\n const str = value.toExponential(precision);\n const [mantissa, exponent] = str.split(\"e\");\n\n const superscriptMap: Record<string, string> = {\n \"0\": \"⁰\",\n \"1\": \"¹\",\n \"2\": \"²\",\n \"3\": \"³\",\n \"4\": \"⁴\",\n \"5\": \"⁵\",\n \"6\": \"⁶\",\n \"7\": \"⁷\",\n \"8\": \"⁸\",\n \"9\": \"⁹\",\n \"-\": \"⁻\",\n \"+\": \"⁺\",\n };\n\n const unicodeExp = exponent\n .replace(\"+\", \"\")\n .replace(/[0-9\\-]/g, (char) => superscriptMap[char] || char);\n\n return `${mantissa}e${unicodeExp}`;\n}\n\nexport function formatXTickValue(\n value: number,\n options?: AxisOptions,\n domainSpan?: number,\n): string {\n if (options?.type === \"time\") {\n return formatTimeTick(value, domainSpan);\n }\n\n if (options?.prefix !== undefined && options.prefix !== \"\") {\n return applyPrefix(value, options.prefix);\n }\n\n const forceScientific = options?.scientific === true;\n const forceLinear = options?.scientific === false;\n const absVal = Math.abs(value);\n\n if (forceScientific || (!forceLinear && absVal !== 0 && absVal < 0.001)) {\n return toScientificUnicode(value, 1);\n }\n\n return value.toFixed(3).replace(/\\.?0+$/, \"\");\n}\n\nexport function formatYTickValue(value: number, options?: AxisOptions): string {\n if (value === 0) return \"0\";\n\n const forceScientific = options?.scientific === true;\n const forceLinear = options?.scientific === false;\n const absVal = Math.abs(value);\n\n if (options?.prefix !== undefined && options.prefix !== \"\") {\n return applyPrefix(value, options.prefix);\n }\n\n if (forceScientific || (!forceLinear && (absVal < 0.0001 || absVal >= 1e6))) {\n return toScientificUnicode(value, 1);\n }\n\n if (absVal >= 1000) {\n return value.toLocaleString(undefined, { maximumFractionDigits: 2 });\n }\n\n return value.toPrecision(3);\n}\n\nexport interface TooltipAxisFormat {\n x?: Partial<AxisOptions>;\n y?: Partial<AxisOptions>;\n xSpan?: number;\n}\n\nexport function formatTooltipX(value: number, axisFormat?: TooltipAxisFormat): string {\n return formatXTickValue(value, axisFormat?.x as AxisOptions | undefined, axisFormat?.xSpan);\n}\n\nexport function formatTooltipY(value: number, axisFormat?: TooltipAxisFormat): string {\n return formatYTickValue(value, axisFormat?.y as AxisOptions | undefined);\n}\n"],"names":["EventEmitter","__publicField","event","handler","handlers","data","error","wrappedHandler","_a","PREFIXDivisors","autoPrefixFor","value","absVal","applyPrefix","prefix","resolved","divisor","pickTimeFormatter","spanMs","formatTimeTick","toScientificUnicode","precision","str","mantissa","exponent","superscriptMap","unicodeExp","char","formatXTickValue","options","domainSpan","forceScientific","forceLinear","formatYTickValue","formatTooltipX","axisFormat","formatTooltipY"],"mappings":";;;AAIO,MAAMA,EAAsC;AAAA,EAA5C;AACG,IAAAC,EAAA,uCACF,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKN,GACEC,GACAC,GACM;AACN,IAAK,KAAK,UAAU,IAAID,CAAK,KAC3B,KAAK,UAAU,IAAIA,GAAO,oBAAI,KAAK,GAErC,KAAK,UAAU,IAAIA,CAAK,EAAG,IAAIC,CAAkC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,IACED,GACAC,GACM;AACN,UAAMC,IAAW,KAAK,UAAU,IAAIF,CAAK;AACzC,IAAIE,KACFA,EAAS,OAAOD,CAAkC;AAAA,EAEtD;AAAA;AAAA;AAAA;AAAA,EAKA,KAA+BD,GAAUG,GAAyB;AAChE,UAAMD,IAAW,KAAK,UAAU,IAAIF,CAAK;AACzC,IAAIE,KACFA,EAAS,QAAQ,CAACD,MAAY;AAC5B,UAAI;AACF,QAAAA,EAAQE,CAAI;AAAA,MACd,SAASC,GAAO;AACd,gBAAQ,MAAM,wCAAwC,OAAOJ,CAAK,CAAC,MAAMI,CAAK;AAAA,MAChF;AAAA,IACF,CAAC;AAAA,EAEL;AAAA;AAAA;AAAA;AAAA,EAKA,KACEJ,GACAC,GACM;AACN,UAAMI,IAAiB,CAACF,MAAsB;AAC5C,WAAK,IAAIH,GAAOK,CAAc,GAC9BJ,EAAQE,CAAI;AAAA,IACd;AACA,SAAK,GAAGH,GAAOK,CAAc;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,UAAU,MAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAcL,GAA+B;AAtExC,QAAAM;AAuEH,aAAOA,IAAA,KAAK,UAAU,IAAIN,CAAK,MAAxB,gBAAAM,EAA2B,SAAQ;AAAA,EAC5C;AACF;ACxEA,MAAMC,IAAyC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,GAAG;AAAA,EACH,GAAG;AACL;AAEO,SAASC,EAAcC,GAAmD;AAC/E,QAAMC,IAAS,KAAK,IAAID,CAAK;AAC7B,SAAIC,KAAU,MAAY,MACtBA,KAAU,MAAY,MACtBA,IAAS,KAAKA,IAAS,OAAa,MACpCA,IAAS,KAAKA,IAAS,OAAa,MACpCA,IAAS,KAAKA,IAAS,IAAU,MAC9B;AACT;AAEO,SAASC,EACdF,GACAG,GACQ;AACR,QAAMC,IAAWD,MAAW,SAASJ,EAAcC,CAAK,IAAIG,GACtDE,IAAUP,EAAeM,CAAQ,KAAK;AAE5C,SAAO,IADQJ,IAAQK,GACN,YAAY,CAAC,CAAC,GAAGD,CAAQ;AAC5C;AAEO,SAASE,EAAkBC,GAAqC;AACrE,SAAIA,KAAU,MAAO,KAAK,KAAK,KACtB,IAAI,KAAK,eAAe,QAAW;AAAA,IACxC,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA,CACT,IAECA,KAAU,MAAO,KAAK,KAAK,KAAK,KAC3B,IAAI,KAAK,eAAe,QAAW,EAAE,KAAK,WAAW,OAAO,WAAW,IAEzE,IAAI,KAAK,eAAe,QAAW,EAAE,OAAO,SAAS,MAAM,WAAW;AAC/E;AAEO,SAASC,EAAeR,GAAeO,GAAyB;AAErE,SAAOD,EADMC,KAAU,KACM,EAAE,OAAO,IAAI,KAAKP,CAAK,CAAC;AACvD;AAEO,SAASS,EAAoBT,GAAeU,GAA2B;AAC5E,QAAMC,IAAMX,EAAM,cAAcU,CAAS,GACnC,CAACE,GAAUC,CAAQ,IAAIF,EAAI,MAAM,GAAG,GAEpCG,IAAyC;AAAA,IAC7C,GAAK;AAAA,IACL,GAAK;AAAA,IACL,GAAK;AAAA,IACL,GAAK;AAAA,IACL,GAAK;AAAA,IACL,GAAK;AAAA,IACL,GAAK;AAAA,IACL,GAAK;AAAA,IACL,GAAK;AAAA,IACL,GAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EAAA,GAGDC,IAAaF,EAChB,QAAQ,KAAK,EAAE,EACf,QAAQ,YAAY,CAACG,MAASF,EAAeE,CAAI,KAAKA,CAAI;AAE7D,SAAO,GAAGJ,CAAQ,IAAIG,CAAU;AAClC;AAEO,SAASE,EACdjB,GACAkB,GACAC,GACQ;AACR,OAAID,KAAA,gBAAAA,EAAS,UAAS;AACpB,WAAOV,EAAeR,GAAOmB,CAAU;AAGzC,OAAID,KAAA,gBAAAA,EAAS,YAAW,UAAaA,EAAQ,WAAW;AACtD,WAAOhB,EAAYF,GAAOkB,EAAQ,MAAM;AAG1C,QAAME,KAAkBF,KAAA,gBAAAA,EAAS,gBAAe,IAC1CG,KAAcH,KAAA,gBAAAA,EAAS,gBAAe,IACtCjB,IAAS,KAAK,IAAID,CAAK;AAE7B,SAAIoB,KAAoB,CAACC,KAAepB,MAAW,KAAKA,IAAS,OACxDQ,EAAoBT,GAAO,CAAC,IAG9BA,EAAM,QAAQ,CAAC,EAAE,QAAQ,UAAU,EAAE;AAC9C;AAEO,SAASsB,EAAiBtB,GAAekB,GAA+B;AAC7E,MAAIlB,MAAU,EAAG,QAAO;AAExB,QAAMoB,KAAkBF,KAAA,gBAAAA,EAAS,gBAAe,IAC1CG,KAAcH,KAAA,gBAAAA,EAAS,gBAAe,IACtCjB,IAAS,KAAK,IAAID,CAAK;AAE7B,UAAIkB,KAAA,gBAAAA,EAAS,YAAW,UAAaA,EAAQ,WAAW,KAC/ChB,EAAYF,GAAOkB,EAAQ,MAAM,IAGtCE,KAAoB,CAACC,MAAgBpB,IAAS,QAAUA,KAAU,OAC7DQ,EAAoBT,GAAO,CAAC,IAGjCC,KAAU,MACLD,EAAM,eAAe,QAAW,EAAE,uBAAuB,GAAG,IAG9DA,EAAM,YAAY,CAAC;AAC5B;AAQO,SAASuB,EAAevB,GAAewB,GAAwC;AACpF,SAAOP,EAAiBjB,GAAOwB,KAAA,gBAAAA,EAAY,GAA8BA,KAAA,gBAAAA,EAAY,KAAK;AAC5F;AAEO,SAASC,EAAezB,GAAewB,GAAwC;AACpF,SAAOF,EAAiBtB,GAAOwB,KAAA,gBAAAA,EAAY,CAA4B;AACzE;"}