minerva-design 1.6.1 → 1.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.
@@ -4,31 +4,31 @@ import { linearTicks as l } from "../scale.js";
4
4
  import { followDefaultRenderer as u } from "../renderers/follow.js";
5
5
  import { timeTicks as d } from "../time.js";
6
6
  import { createOrderBookStore as f, decimalsOf as p, inferPriceDecimals as m, inferSizeDecimals as h, inferTickSize as g, roundToStep as _ } from "./book.js";
7
- import { clamp as ee, createFormatters as v, ease as y, fontOf as te, formatClock as ne, roundRect as re, sideColors as ie } from "./format.js";
8
- import { createEmitter as ae, createHost as b, localPoint as oe, tooltipHtml as se } from "./host.js";
9
- import { HEAT_TABLE_SIZE as x, buildHeatGrid as S, createHeatFieldRenderer as C, heatTable as w, paintHeatGrid as ce, percentile as T } from "./field.js";
10
- import { fineCeil as E, fitPriceRange as le, fitTimeRange as ue, layoutAxisLabels as de } from "./layout.js";
7
+ import { clamp as v, createFormatters as y, ease as b, fontOf as x, formatClock as ee, roundRect as te, sideColors as S } from "./format.js";
8
+ import { createEmitter as ne, createHost as C, localPoint as w, tooltipHtml as T } from "./host.js";
9
+ import { HEAT_TABLE_SIZE as E, buildHeatGrid as D, createHeatFieldRenderer as O, heatTable as k, paintHeatGrid as re, percentile as A } from "./field.js";
10
+ import { fineCeil as j, fitPriceRange as ie, fitTimeRange as ae, layoutAxisLabels as oe } from "./layout.js";
11
11
  //#region src/engine/orderbook/heatmap.ts
12
- var D = 256, fe = 4096, pe = .99, O = 2, me = [
12
+ var M = 256, se = 4096, ce = .99, N = 2, le = [
13
13
  [0, "#0b1322"],
14
- [.3, "#0e1c36"],
15
- [.5, "#11306a"],
16
- [.63, "#1556a8"],
17
- [.74, "#1b95c8"],
18
- [.83, "#59d6d0"],
19
- [.9, "#f2e14b"],
14
+ [.3, "#0d1a2e"],
15
+ [.5, "#102a4e"],
16
+ [.65, "#154a8a"],
17
+ [.76, "#1b86b8"],
18
+ [.85, "#3fc3c0"],
19
+ [.91, "#e8d84a"],
20
20
  [.96, "#ff8c2b"],
21
- [1, "#fff6e8"]
22
- ], he = [
23
- [0, "#f7f9fc"],
24
- [.3, "#eef3fa"],
25
- [.5, "#d6e3f5"],
26
- [.63, "#9dbde9"],
27
- [.74, "#4f86d6"],
21
+ [1, "#ffe6c2"]
22
+ ], ue = [
23
+ [0, "#fbfcfe"],
24
+ [.3, "#f3f6fc"],
25
+ [.5, "#dde7f7"],
26
+ [.65, "#a8c4ec"],
27
+ [.76, "#5b8bd6"],
28
28
  [.85, "#2f4fb0"],
29
29
  [.93, "#6a2a9c"],
30
30
  [1, "#c4173f"]
31
- ], ge = 16, _e = 6, ve = 14, k = 3, ye = (t, n = D) => {
31
+ ], de = 16, fe = 6, pe = 14, P = 3, me = (t, n = M) => {
32
32
  let r = new Uint32Array(n);
33
33
  if (!t.length) return r;
34
34
  let a = t.map(([, e]) => s(e)), o = 0;
@@ -44,16 +44,16 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
44
44
  ]));
45
45
  }
46
46
  return r;
47
- }, be = (e) => {
48
- if (!(e > 0) || e >= O) return 1;
49
- let t = O / e;
47
+ }, he = (e) => {
48
+ if (!(e > 0) || e >= N) return 1;
49
+ let t = N / e;
50
50
  for (let e = 1; e < 0xe8d4a51000; e *= 10) for (let n of [
51
51
  1,
52
52
  2,
53
53
  5
54
54
  ]) if (n * e >= t) return n * e;
55
55
  return 1;
56
- }, xe = {
56
+ }, ge = {
57
57
  en: {
58
58
  time: "Time",
59
59
  price: "Price",
@@ -64,6 +64,7 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
64
64
  ask: "Ask",
65
65
  bidSide: "Bid side",
66
66
  askSide: "Ask side",
67
+ bubbleHint: "Bubble area = trade size",
67
68
  name: "Liquidity heatmap"
68
69
  },
69
70
  zh: {
@@ -76,6 +77,7 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
76
77
  ask: "卖一",
77
78
  bidSide: "买盘",
78
79
  askSide: "卖盘",
80
+ bubbleHint: "气泡面积 = 成交量",
79
81
  name: "订单簿热力图"
80
82
  },
81
83
  ja: {
@@ -88,6 +90,7 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
88
90
  ask: "最良売気配",
89
91
  bidSide: "買い板",
90
92
  askSide: "売り板",
93
+ bubbleHint: "バブル面積 = 出来高",
91
94
  name: "板ヒートマップ"
92
95
  },
93
96
  fr: {
@@ -100,18 +103,50 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
100
103
  ask: "Meilleure vente",
101
104
  bidSide: "Côté achat",
102
105
  askSide: "Côté vente",
106
+ bubbleHint: "Aire de la bulle = volume",
103
107
  name: "Carte de chaleur de la liquidité"
104
108
  }
105
- }, Se = (e, t, n, r) => {
109
+ }, _e = (e, t, n, r) => {
106
110
  if (!(e > 0) || !(t > 0)) return 0;
107
111
  let i = Math.min(1, e * r / t);
108
112
  switch (n) {
109
113
  case "linear": return i;
110
- case "log": return Math.log10(1 + 9 * i);
114
+ case "log": return Math.log10(1 + 9 * i) ** 1.2;
111
115
  default: return Math.sqrt(i);
112
116
  }
113
- }, A = (e, i = {}) => {
114
- let s = i, O = f(), A = ae(), j = v(s, 2, 4), M = {
117
+ }, F = 48, I = (e, t) => {
118
+ if (!(t >= e.min) || !(e.max > e.min)) return 0;
119
+ let n = Math.log(t / e.min) / Math.log(e.max / e.min), r = Math.min(47.999999, Math.max(0, n * F)), i = Math.floor(r), a = r - i, o = e.cdf[i] ?? 0;
120
+ return o + ((e.cdf[i + 1] ?? o) - o) * a;
121
+ }, ve = (e, t = 0) => {
122
+ let n = Infinity, r = 0, i = 0;
123
+ for (let t = 0; t < e.length; t++) {
124
+ let a = e[t];
125
+ a > 0 && (i++, a < n && (n = a), a > r && (r = a));
126
+ }
127
+ if (!i || !(r > n)) return null;
128
+ let a = /* @__PURE__ */ new Float32Array(49), o = Math.log(r / n);
129
+ for (let t = 0; t < e.length; t++) {
130
+ let r = e[t];
131
+ if (!(r > 0)) continue;
132
+ let i = Math.log(r / n) / o;
133
+ a[Math.min(F, Math.floor(i * F))] += 1;
134
+ }
135
+ let s = 0;
136
+ for (let e = 0; e <= F; e++) s += a[e], a[e] = s / i;
137
+ return {
138
+ version: t,
139
+ min: n,
140
+ max: r,
141
+ cdf: a
142
+ };
143
+ }, ye = (e, t, n) => (r) => {
144
+ let i = Math.min(1, Math.max(0, n(r)));
145
+ if (!e || !(t > 0)) return i;
146
+ let a = I(e, r * t);
147
+ return Math.min(1, .55 * i + .45 * a);
148
+ }, L = (e, i = {}) => {
149
+ let s = i, N = f(), F = ne(), I = y(s, 2, 4), L = {
115
150
  up: [
116
151
  0,
117
152
  0,
@@ -124,41 +159,41 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
124
159
  0,
125
160
  1
126
161
  ]
127
- }, Ce = new Uint32Array(D), we = new Uint32Array(x + 1), N = [
162
+ }, be = new Uint32Array(M), xe = new Uint32Array(E + 1), Se = (e) => Math.sqrt(e), Ce = null, we = [
128
163
  0,
129
164
  0,
130
165
  0,
131
166
  1
132
- ], P = !1, F = 0, I = [], Te = 0, L = NaN, R = {
167
+ ], Te = !1, R = 0, z = [], Ee = 0, B = NaN, V = {
133
168
  buyVolume: 0,
134
169
  buyNotional: 0,
135
170
  sellVolume: 0,
136
171
  sellNotional: 0
137
- }, Ee = null, z = NaN, De = 0, B = 0, Oe = 0, ke = -Infinity, Ae = 0, V = 0, H = null, je = "", Me = "", Ne = null, U = null, Pe = 0, Fe = !1, Ie = () => {}, Le = new Promise((e) => {
138
- Ie = e;
139
- }), Re = !0, W = NaN, G = [0, 1], K = [0, 1], ze = !1, q = null, J = NaN, Be = NaN, Ve = 0, Y = {
172
+ }, De = null, Oe = NaN, ke = 0, H = 0, Ae = 0, je = -Infinity, Me = 0, Ne = 0, U = null, Pe = "", Fe = "", Ie = null, W = null, Le = 0, Re = !1, ze = () => {}, Be = new Promise((e) => {
173
+ ze = e;
174
+ }), Ve = !0, G = NaN, K = [0, 1], q = [0, 1], He = !1, J = null, Ue = NaN, We = NaN, Ge = 0, Y = {
140
175
  x: 0,
141
176
  y: 0,
142
177
  w: 0,
143
178
  h: 0
144
- }, He = null, Ue = "", X = null, Z = b(e, {
179
+ }, Ke = null, qe = "", X = null, Z = C(e, {
145
180
  className: "minerva-orderbook-heatmap",
146
- draw: vt,
181
+ draw: Tt,
147
182
  onTheme: () => {
148
- Qe(), Z.invalidate();
183
+ nt(), Z.invalidate();
149
184
  }
150
- }), { root: Q, doc: We } = Z;
185
+ }), { root: Q, doc: Je } = Z;
151
186
  Q.tabIndex = 0, Q.setAttribute("role", "figure"), Q.style.touchAction = "none";
152
- let Ge = c(xe, s.locale, s.labels), Ke = () => Ge, qe = () => {
153
- Ge = c(xe, s.locale, s.labels), Q.setAttribute("aria-label", s.ariaLabel ?? Ge.name);
154
- }, $ = () => Math.max(10, s.interval ?? 100), Je = () => Math.max($() * 4, s.history ?? 3e5), Ye = () => Math.max(4, Math.round(s.depth ?? 160)), Xe = () => {
155
- if (!Number.isFinite(z)) return Date.now();
156
- let e = Ze() - De;
157
- return z + Math.min(Math.max(0, e), $() * 3);
158
- }, Ze = () => typeof performance < "u" ? performance.now() : Date.now();
159
- function Qe() {
187
+ let Ye = c(ge, s.locale, s.labels), Xe = () => Ye, Ze = () => {
188
+ Ye = c(ge, s.locale, s.labels), Q.setAttribute("aria-label", s.ariaLabel ?? Ye.name);
189
+ }, $ = () => Math.max(10, s.interval ?? 100), Qe = () => Math.max($() * 4, s.history ?? 3e5), $e = () => Math.max(4, Math.round(s.depth ?? 160)), et = () => {
190
+ if (!Number.isFinite(Oe)) return Date.now();
191
+ let e = tt() - ke;
192
+ return Oe + Math.min(Math.max(0, e), $() * 3);
193
+ }, tt = () => typeof performance < "u" ? performance.now() : Date.now();
194
+ function nt() {
160
195
  let e = Z.theme;
161
- M = ie(e, s);
196
+ L = S(e, s);
162
197
  let n = (t) => {
163
198
  let n = e.resolve ? e.resolve(t, e.primary) : e.primary;
164
199
  return [
@@ -173,24 +208,27 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
173
208
  e.background[2],
174
209
  1
175
210
  ];
176
- if (P = e.background[3] > 0 && t(i) < .4, s.colors?.length) {
211
+ if (Te = e.background[3] > 0 && t(i) < .4, s.colors?.length) {
177
212
  let e = s.colors.map(n);
178
- N = e[0] ?? i, Ce = r(e.length > 1 ? e : [N, N], D);
213
+ we = e[0] ?? i, be = r(e.length > 1 ? e : [we, we], M);
179
214
  } else {
180
- let e = (P ? me : he).map(([e, t]) => [e, a(t) ?? i]);
181
- N = e[0][1], Ce = ye(e, D);
215
+ let e = (Te ? le : ue).map(([e, t]) => [e, a(t) ?? i]);
216
+ we = e[0][1], be = me(e, M);
182
217
  }
183
218
  let o = s.colorScale ?? "sqrt";
184
- we = w(Ce, (e) => Se(e, 1, o, 1)), Me = "";
219
+ Se = (e) => _e(e, 1, o, 1), xe = k(be, Se), Fe = "";
185
220
  }
186
- let $e = () => {
187
- j = v(s, F > 0 ? Math.max(p(F), m(O)) : m(O), h(O));
188
- }, et = () => {
189
- I = [], H = null, je = Me = "", Ne = null, L = NaN, B = Oe = 0, ke = -Infinity, Ae = 0, V = 0, Be = NaN, R.buyVolume = R.buyNotional = R.sellVolume = R.sellNotional = 0;
190
- }, tt = () => {
191
- if (F > 0) return;
192
- let e = g(O), t = O.mid();
193
- if (s.tickSize && s.tickSize > 0) F = s.tickSize;
221
+ let rt = () => {
222
+ I = y(s, R > 0 ? Math.max(p(R), m(N)) : m(N), h(N));
223
+ }, it = (e) => {
224
+ let t = s.sizeUnit?.trim();
225
+ return t ? `${e} ${t}` : e;
226
+ }, at = () => {
227
+ z = [], U = null, Pe = Fe = "", Ie = null, Ce = null, B = NaN, H = Ae = 0, je = -Infinity, Me = 0, Ne = 0, We = NaN, V.buyVolume = V.buyNotional = V.sellVolume = V.sellNotional = 0;
228
+ }, ot = () => {
229
+ if (R > 0) return;
230
+ let e = g(N), t = N.mid();
231
+ if (s.tickSize && s.tickSize > 0) R = s.tickSize;
194
232
  else if (e > 0 && Number.isFinite(t)) {
195
233
  let n = t * 1e-5 / e, r = 1;
196
234
  for (let e = 1; e <= 1e9 && r < n * .75; e *= 10) for (let t of [
@@ -198,15 +236,15 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
198
236
  2,
199
237
  5
200
238
  ]) if (r = t * e, r >= n * .75) break;
201
- F = _(e * r, e);
202
- } else F = Number.isFinite(t) ? Math.max(1e-8, t * 1e-5) : 0;
203
- F > 0 && $e();
204
- }, nt = () => {
205
- let e = Ye(), t = new Float64Array(e * 2), n = new Float32Array(e * 2), r = 0;
239
+ R = _(e * r, e);
240
+ } else R = Number.isFinite(t) ? Math.max(1e-8, t * 1e-5) : 0;
241
+ R > 0 && rt();
242
+ }, st = () => {
243
+ let e = $e(), t = new Float64Array(e * 2), n = new Float32Array(e * 2), r = 0;
206
244
  for (let i of ["bid", "ask"]) {
207
- let a = O.count(i), o = 0;
245
+ let a = N.count(i), o = 0;
208
246
  for (let s = 0; s < a; s++) {
209
- let a = Math.round(O.priceAt(i, s) / F), c = O.sizeAt(i, s);
247
+ let a = Math.round(N.priceAt(i, s) / R), c = N.sizeAt(i, s);
210
248
  if (r > 0 && t[r - 1] === a && o > 0) {
211
249
  n[r - 1] += c;
212
250
  continue;
@@ -219,76 +257,76 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
219
257
  bins: t.slice(0, r),
220
258
  sizes: n.slice(0, r)
221
259
  };
222
- }, rt = (e) => {
223
- if (!(F > 0)) return;
224
- let { bins: t, sizes: n } = nt(), r = {
225
- seq: Te++,
260
+ }, ct = (e) => {
261
+ if (!(R > 0)) return;
262
+ let { bins: t, sizes: n } = st(), r = {
263
+ seq: Ee++,
226
264
  time: e,
227
265
  bins: t,
228
266
  sizes: n,
229
- bestBid: O.bestBid(),
230
- bestAsk: O.bestAsk(),
231
- buyVolume: R.buyVolume,
232
- buyNotional: R.buyNotional,
233
- sellVolume: R.sellVolume,
234
- sellNotional: R.sellNotional
267
+ bestBid: N.bestBid(),
268
+ bestAsk: N.bestAsk(),
269
+ buyVolume: V.buyVolume,
270
+ buyNotional: V.buyNotional,
271
+ sellVolume: V.sellVolume,
272
+ sellNotional: V.sellNotional
235
273
  };
236
- R.buyVolume = R.buyNotional = R.sellVolume = R.sellNotional = 0, I.push(r);
237
- let i = e - Je(), a = 0;
238
- for (; a < I.length && I[a].time < i;) a++;
239
- a && (I = I.slice(a));
240
- }, it = (e) => {
274
+ V.buyVolume = V.buyNotional = V.sellVolume = V.sellNotional = 0, z.push(r);
275
+ let i = e - Qe(), a = 0;
276
+ for (; a < z.length && z[a].time < i;) a++;
277
+ a && (z = z.slice(a));
278
+ }, lt = (e) => {
241
279
  if (!Number.isFinite(e)) return;
242
280
  let t = $();
243
- if (!Number.isFinite(L)) {
244
- L = Math.floor(e / t) * t;
281
+ if (!Number.isFinite(B)) {
282
+ B = Math.floor(e / t) * t;
245
283
  return;
246
284
  }
247
- if (e - L > Je()) {
248
- rt(L), L = Math.floor(e / t) * t;
285
+ if (e - B > Qe()) {
286
+ ct(B), B = Math.floor(e / t) * t;
249
287
  return;
250
288
  }
251
- for (; e >= L + t;) rt(L), L += t;
252
- }, at = (e) => e === void 0 || !Number.isFinite(e) ? Date.now() : ((!Number.isFinite(z) || e >= z) && (z = e, De = Ze()), e), ot = (e) => {
253
- if (Number.isFinite(L) && e >= L) return null;
254
- let t = 0, n = I.length;
289
+ for (; e >= B + t;) ct(B), B += t;
290
+ }, ut = (e) => e === void 0 || !Number.isFinite(e) ? Date.now() : ((!Number.isFinite(Oe) || e >= Oe) && (Oe = e, ke = tt()), e), dt = (e) => {
291
+ if (Number.isFinite(B) && e >= B) return null;
292
+ let t = 0, n = z.length;
255
293
  for (; t < n;) {
256
294
  let r = t + n >>> 1;
257
- I[r].time <= e ? t = r + 1 : n = r;
295
+ z[r].time <= e ? t = r + 1 : n = r;
258
296
  }
259
- return t > 0 ? I[t - 1] : null;
260
- }, st = () => {
261
- if (!Number.isFinite(L) || !(F > 0)) return null;
262
- let e = O.version();
263
- return (!Ne || Ne.version !== e) && (Ne = {
297
+ return t > 0 ? z[t - 1] : null;
298
+ }, ft = () => {
299
+ if (!Number.isFinite(B) || !(R > 0)) return null;
300
+ let e = N.version();
301
+ return (!Ie || Ie.version !== e) && (Ie = {
264
302
  version: e,
265
- ...nt()
303
+ ...st()
266
304
  }), {
267
- time: L,
268
- bins: Ne.bins,
269
- sizes: Ne.sizes
305
+ time: B,
306
+ bins: Ie.bins,
307
+ sizes: Ie.sizes
270
308
  };
271
- }, ct = (e, t, n, r, i, a) => {
272
- let o = $(), c = st(), l = Math.min(fe, Math.ceil(Y.w)), u = Math.min(fe, Math.ceil(Y.h)), d = be(F / (r - n) * Y.h), f = I.length ? I[I.length - 1].seq : -1, p = [
309
+ }, pt = (e, t, n, r, i, a) => {
310
+ let o = $(), c = ft(), l = Math.min(se, Math.ceil(Y.w)), u = Math.min(se, Math.ceil(Y.h)), d = he(R / (r - n) * Y.h), f = z.length ? z[z.length - 1].seq : -1, p = [
273
311
  e,
274
312
  t,
275
313
  n,
276
314
  r,
277
315
  Math.floor(i / o),
278
- I.length,
316
+ z.length,
279
317
  f,
280
- Ne?.version ?? -1,
318
+ Ie?.version ?? -1,
281
319
  l,
282
320
  u,
283
321
  d,
284
- F
322
+ R
285
323
  ].join("|");
286
- if (p !== je) {
287
- let a = c ? [...I, c] : I;
288
- H = S({
324
+ if (p !== Pe) {
325
+ let a = c ? [...z, c] : z;
326
+ U = D({
289
327
  sources: a,
290
328
  step: o,
291
- tick: F,
329
+ tick: R,
292
330
  x0: e,
293
331
  x1: t,
294
332
  y0: n,
@@ -297,35 +335,35 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
297
335
  maxWidth: l,
298
336
  maxHeight: u,
299
337
  rowBins: d
300
- }, H), je = p, Me = "";
338
+ }, U), Pe = p, Fe = "";
301
339
  }
302
- if (!H) return null;
340
+ if (!U) return null;
303
341
  let m = s.maxSize;
304
- if (m !== void 0 && m > 0) B = m;
342
+ if (m !== void 0 && m > 0) H = m;
305
343
  else {
306
- let e = Ze();
307
- if (e - ke > 250 || !(Oe > 0)) {
308
- let t = T(H.cells, pe);
309
- t > 0 && (Oe = t), ke = e;
344
+ let e = tt();
345
+ if (e - je > 250 || !(Ae > 0)) {
346
+ let t = A(U.cells, ce);
347
+ t > 0 && (Ae = t), je = e, Ce = ve(U.cells, U.version);
310
348
  }
311
- B > 0 ? Oe > 0 && Math.abs(Oe / B - 1) > .001 && (B += (Oe - B) * y(a, 700)) : B = Oe;
349
+ H > 0 ? Ae > 0 && Math.abs(Ae / H - 1) > .001 && (H += (Ae - H) * b(a, 700)) : H = Ae;
312
350
  }
313
- let h = Math.max(.01, s.contrast ?? 1), g = B > 0 ? x * h / B : 0;
314
- return `${H.version}|${g}` !== Me && (ce(H, we, g), Me = `${H.version}|${g}`), H;
315
- }, lt = () => {
316
- let e = $(), t = [], n = 0, r = I.length;
351
+ let h = Math.max(.01, s.contrast ?? 1), g = H > 0 ? E * h / H : 0, _ = `${U.version}|${g}|${Ce?.version ?? -1}`;
352
+ return _ !== Fe && (xe = k(be, ye(Ce, H / h, Se)), re(U, xe, g), Fe = _), U;
353
+ }, mt = () => {
354
+ let e = $(), t = [], n = 0, r = z.length;
317
355
  for (; n < r;) {
318
356
  let t = n + r >>> 1;
319
- I[t].time + e < G[0] ? n = t + 1 : r = t;
357
+ z[t].time + e < K[0] ? n = t + 1 : r = t;
320
358
  }
321
- for (let e = n; e < I.length; e++) {
322
- let n = I[e];
323
- if (n.time > G[1]) break;
359
+ for (let e = n; e < z.length; e++) {
360
+ let n = z[e];
361
+ if (n.time > K[1]) break;
324
362
  t.push(n);
325
363
  }
326
364
  return t;
327
- }, ut = (e, t) => {
328
- let n = $(), r = Math.max(1, Math.ceil(_e / Math.max(1e-6, t))), i = [], a = NaN, o = 0, s = 0, c = {
365
+ }, ht = (e, t) => {
366
+ let n = $(), r = Math.max(1, Math.ceil(fe / Math.max(1e-6, t))), i = [], a = NaN, o = 0, s = 0, c = {
329
367
  bv: 0,
330
368
  bn: 0,
331
369
  sv: 0,
@@ -348,10 +386,10 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
348
386
  u !== a && (Number.isFinite(a) && l(), a = u, o = t), s = t + n, c.bv += i.buyVolume, c.bn += i.buyNotional, c.sv += i.sellVolume, c.sn += i.sellNotional;
349
387
  };
350
388
  for (let t of e) u(t.seq, t.time, t);
351
- return Number.isFinite(L) && L <= G[1] && u(Te, L, R), Number.isFinite(a) && l(), i;
352
- }, dt = (e) => {
389
+ return Number.isFinite(B) && B <= K[1] && u(Ee, B, V), Number.isFinite(a) && l(), i;
390
+ }, gt = (e) => {
353
391
  e.save(), e.beginPath(), e.rect(Y.x, Y.y, Y.w, Y.h), e.clip();
354
- }, ft = (e, t, n, r, i) => {
392
+ }, _t = (e, t, n, r, i) => {
355
393
  if (s.bestLines === !1) return;
356
394
  let a = $(), c = t.map((e) => [
357
395
  e.time,
@@ -359,18 +397,18 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
359
397
  e.bestBid,
360
398
  e.bestAsk
361
399
  ]);
362
- if (Number.isFinite(L) && c.push([
363
- L,
364
- L + a,
365
- O.bestBid(),
366
- O.bestAsk()
400
+ if (Number.isFinite(B) && c.push([
401
+ B,
402
+ B + a,
403
+ N.bestBid(),
404
+ N.bestAsk()
367
405
  ]), !c.length) return;
368
406
  for (let e = 0; e + 1 < c.length; e++) c[e][1] = c[e + 1][0];
369
407
  let l = i >= 2, u = (e) => {
370
408
  let t = n(e[0]), r = n(e[1]);
371
409
  return l ? [t, r] : [(t + r) / 2, (t + r) / 2];
372
410
  };
373
- dt(e), e.beginPath();
411
+ gt(e), e.beginPath();
374
412
  let d = [], f = () => {
375
413
  if (d.length) {
376
414
  d.forEach((t, n) => {
@@ -388,8 +426,8 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
388
426
  let [, , t, n] = e;
389
427
  Number.isFinite(t) && Number.isFinite(n) && n > t ? d.push(e) : f();
390
428
  }
391
- f(), e.fillStyle = o(Z.theme.text, P ? .08 : .07), e.fill(), e.lineJoin = "round";
392
- for (let [t, n] of [[2, M.up], [3, M.down]]) {
429
+ f(), e.fillStyle = o(Z.theme.text, Te ? .08 : .07), e.fill(), e.lineJoin = "round";
430
+ for (let [t, n] of [[2, L.up], [3, L.down]]) {
393
431
  e.beginPath();
394
432
  let i = !1;
395
433
  for (let n of c) {
@@ -401,25 +439,25 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
401
439
  let o = r(a), [s, c] = u(n);
402
440
  i ? e.lineTo(s, o) : e.moveTo(s, o), l && e.lineTo(c, o), i = !0;
403
441
  }
404
- e.strokeStyle = o(N, .55), e.lineWidth = 3.5, e.stroke(), e.strokeStyle = o(n), e.lineWidth = 1.5, e.stroke();
442
+ e.strokeStyle = o(we, .55), e.lineWidth = 3.5, e.stroke(), e.strokeStyle = o(n), e.lineWidth = 1.5, e.stroke();
405
443
  }
406
444
  e.restore();
407
- }, pt = (e, t, r, i, a) => {
445
+ }, vt = (e, t, r, i, a) => {
408
446
  if (!t.length) return;
409
447
  let c = 0;
410
448
  for (let e of t) {
411
449
  let t = r(e.time);
412
450
  t >= Y.x && t <= Y.x + Y.w && (c = Math.max(c, e.volume));
413
451
  }
414
- c > 0 && (Ae = Ae > 0 ? Math.max(c, Ae * .995) : c);
415
- let l = s.bubbleVolume ?? Ae;
452
+ c > 0 && (Me = Me > 0 ? Math.max(c, Me * .995) : c);
453
+ let l = s.bubbleVolume ?? Me;
416
454
  if (!(l > 0)) return;
417
- let u = Math.max(k, s.bubbleSize ?? ve), d = Math.min(k, u), f = t.map((e) => ({
455
+ let u = Math.max(P, s.bubbleSize ?? pe), d = Math.min(P, u), f = t.map((e) => ({
418
456
  ...e,
419
- d: ee(Math.sqrt(e.volume / l) * u, d, u)
457
+ d: v(Math.sqrt(e.volume / l) * u, d, u)
420
458
  })).sort((e, t) => e.d - t.d);
421
- dt(e), e.lineWidth = 1, e.textAlign = "center", e.textBaseline = "middle", e.font = te(Z.theme, s, 600, Math.max(8, a - 1));
422
- let p = P ? [
459
+ gt(e), e.lineWidth = 1, e.textAlign = "center", e.textBaseline = "middle", e.font = x(Z.theme, s, 600, Math.max(8, a - 1));
460
+ let p = Te ? [
423
461
  1,
424
462
  1,
425
463
  1,
@@ -433,10 +471,10 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
433
471
  for (let t of f) {
434
472
  let a = r(t.time), s = i(t.price), c = t.d / 2;
435
473
  if (a < Y.x - c || a > Y.x + Y.w + c || s < Y.y - c || s > Y.y + Y.h + c) continue;
436
- let l = t.buy ? M.up : M.down;
474
+ let l = t.buy ? L.up : L.down;
437
475
  if (e.beginPath(), e.arc(a, s, Math.max(1, c - .5), 0, Math.PI * 2), e.fillStyle = o(l, .35), e.fill(), e.strokeStyle = o(n(l, p, .2), .9), e.stroke(), t.d >= 26) {
438
- let n = j.compact(t.volume);
439
- e.measureText(n).width <= t.d - 6 && (e.fillStyle = o(P ? [
476
+ let n = I.compact(t.volume);
477
+ e.measureText(n).width <= t.d - 6 && (e.fillStyle = o(Te ? [
440
478
  1,
441
479
  1,
442
480
  1,
@@ -450,15 +488,15 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
450
488
  }
451
489
  }
452
490
  e.restore();
453
- }, mt = (e, t) => {
454
- let n = [], r = [], i = O.count(e), a = 0, o = NaN;
491
+ }, yt = (e, t) => {
492
+ let n = [], r = [], i = N.count(e), a = 0, o = NaN;
455
493
  for (let s = 0; s < i; s++) {
456
- let i = Math.round(O.priceAt(e, s) / F);
494
+ let i = Math.round(N.priceAt(e, s) / R);
457
495
  if (i !== o) {
458
- if (++a > Ye()) break;
496
+ if (++a > $e()) break;
459
497
  o = i;
460
498
  }
461
- let c = Math.floor(i / t), l = O.sizeAt(e, s);
499
+ let c = Math.floor(i / t), l = N.sizeAt(e, s);
462
500
  n.length && n[n.length - 1] === c ? r[r.length - 1] += l : (n.push(c), r.push(l));
463
501
  }
464
502
  return {
@@ -466,14 +504,14 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
466
504
  buckets: n,
467
505
  sizes: r
468
506
  };
469
- }, ht = (e, t, n, r, i, a) => {
470
- let c = Z.theme, [l, u] = K, d = Math.max(1, F * a / (u - l) * Y.h), f = (e) => (e * a - .5) * F, p = (e) => (e * a + a - .5) * F, m = 0, h = ["bid", "ask"].map((e) => {
471
- let t = mt(e, a);
507
+ }, bt = (e, t, n, r, i, a) => {
508
+ let c = Z.theme, [l, u] = q, d = Math.max(1, R * a / (u - l) * Y.h), f = (e) => (e * a - .5) * R, p = (e) => (e * a + a - .5) * R, m = 0, h = ["bid", "ask"].map((e) => {
509
+ let t = yt(e, a);
472
510
  return t.buckets.forEach((e, n) => {
473
511
  p(e) >= l && f(e) <= u && (m = Math.max(m, t.sizes[n]));
474
512
  }), t;
475
513
  });
476
- if ((m > V || m < V * .6 || !(V > 0)) && (V = E(m)), !(V > 0)) return;
514
+ if ((m > Ne || m < Ne * .6 || !(Ne > 0)) && (Ne = j(m)), !(Ne > 0)) return;
477
515
  let g = t + 2, _ = Math.max(4, n - 6);
478
516
  e.strokeStyle = o(c.text, .07), e.lineWidth = 1, e.setLineDash([2, 3]), e.beginPath();
479
517
  for (let t of [.5, 1]) {
@@ -481,45 +519,45 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
481
519
  e.moveTo(n, Y.y), e.lineTo(n, Y.y + Y.h);
482
520
  }
483
521
  e.stroke(), e.setLineDash([]), e.save(), e.beginPath(), e.rect(t, Y.y, n, Y.h), e.clip();
484
- let ee = +(d >= 4), v = (t, n) => {
485
- let i = Math.round(r(p(t))), a = Math.max(i + 1, Math.round(r(f(t))) - ee), o = Math.max(1, Math.min(_, n / V * _));
522
+ let v = +(d >= 4), y = (t, n) => {
523
+ let i = Math.round(r(p(t))), a = Math.max(i + 1, Math.round(r(f(t))) - v), o = Math.max(1, Math.min(_, n / Ne * _));
486
524
  e.rect(g, i, o, a - i);
487
525
  };
488
526
  for (let { side: t, buckets: n, sizes: r } of h) {
489
- let i = t === "bid" ? M.up : M.down;
527
+ let i = t === "bid" ? L.up : L.down;
490
528
  e.beginPath();
491
529
  for (let e = 1; e < n.length; e++) {
492
530
  let t = n[e];
493
- p(t) >= l && f(t) <= u && v(t, r[e]);
531
+ p(t) >= l && f(t) <= u && y(t, r[e]);
494
532
  }
495
- e.fillStyle = o(i, P ? .62 : .55), e.fill();
533
+ e.fillStyle = o(i, Te ? .62 : .55), e.fill();
496
534
  let a = n[0];
497
- a !== void 0 && p(a) >= l && f(a) <= u && (e.beginPath(), v(a, r[0]), e.fillStyle = o(i), e.fill());
535
+ a !== void 0 && p(a) >= l && f(a) <= u && (e.beginPath(), y(a, r[0]), e.fillStyle = o(i), e.fill());
498
536
  }
499
537
  e.restore();
500
- let y = Math.round(Y.y + Y.h + 4) + .5;
501
- e.strokeStyle = o(c.textMuted, .7), e.beginPath(), e.moveTo(g, y), e.lineTo(g + _, y);
538
+ let b = Math.round(Y.y + Y.h + 4) + .5;
539
+ e.strokeStyle = o(c.textMuted, .7), e.beginPath(), e.moveTo(g, b), e.lineTo(g + _, b);
502
540
  for (let t of [
503
541
  0,
504
542
  .5,
505
543
  1
506
544
  ]) {
507
545
  let n = Math.round(g + _ * t) + .5;
508
- e.moveTo(n, y), e.lineTo(n, y + 3);
546
+ e.moveTo(n, b), e.lineTo(n, b + 3);
509
547
  }
510
- e.stroke(), e.font = te(c, s, 400, Math.max(8, i - 1)), e.fillStyle = o(c.textMuted), e.textBaseline = "top";
511
- let ne = j.compact(V), re = e.measureText(ne).width;
512
- e.textAlign = "right", e.fillText(ne, g + _ + 2, y + 4), re + e.measureText("0").width + 8 < _ && (e.textAlign = "left", e.fillText("0", g - 1, y + 4));
513
- }, gt = (e) => {
514
- if (!He || s.tooltip === !1 || !(F > 0) || X || !ze) return null;
515
- let [t, n] = He;
548
+ e.stroke(), e.font = x(c, s, 400, Math.max(8, i - 1)), e.fillStyle = o(c.textMuted), e.textBaseline = "top";
549
+ let ee = I.compact(Ne), te = e.measureText(ee).width;
550
+ e.textAlign = "right", e.fillText(ee, g + _ + 2, b + 4), te + e.measureText("0").width + 8 < _ && (e.textAlign = "left", e.fillText("0", g - 1, b + 4));
551
+ }, xt = (e) => {
552
+ if (!Ke || s.tooltip === !1 || !(R > 0) || X || !He) return null;
553
+ let [t, n] = Ke;
516
554
  if (t < Y.x || t > Y.x + Y.w || n < Y.y || n > Y.y + Y.h) return null;
517
- let [r, i] = G, [a, o] = K, c = r + (t - Y.x) / Y.w * (i - r), l = a + (Y.y + Y.h - n) / Y.h * (o - a), u = Math.floor(Math.round(l / F) / e), d = Math.min(12, p(F) + 2), f = +(u * e * F).toFixed(d), m = +((u * e + e - 1) * F).toFixed(d), h = +((f + m) / 2).toFixed(d), g = ot(c);
555
+ let [r, i] = K, [a, o] = q, c = r + (t - Y.x) / Y.w * (i - r), l = a + (Y.y + Y.h - n) / Y.h * (o - a), u = Math.floor(Math.round(l / R) / e), d = Math.min(12, p(R) + 2), f = +(u * e * R).toFixed(d), m = +((u * e + e - 1) * R).toFixed(d), h = +((f + m) / 2).toFixed(d), g = dt(c);
518
556
  return {
519
557
  hx: t,
520
558
  hy: n,
521
559
  time: c,
522
- start: g ? g.time : Number.isFinite(L) && c >= L ? L : NaN,
560
+ start: g ? g.time : Number.isFinite(B) && c >= B ? B : NaN,
523
561
  column: g,
524
562
  bucket: u,
525
563
  ry: e,
@@ -527,177 +565,201 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
527
565
  high: m,
528
566
  rowPrice: h
529
567
  };
530
- }, _t = (e, n, r, i, a, s, c, l = "left") => {
568
+ }, St = (e, n, r, i, a, s, c, l = "left") => {
531
569
  let u = Math.min(e.measureText(n).width + 10, a), d = l === "center" ? r - u / 2 : r;
532
- e.fillStyle = o(c ? s : N), re(e, d, i - ge / 2, u, ge, 3), e.fill(), c || (e.strokeStyle = o(s), e.lineWidth = 1, e.stroke()), e.fillStyle = c ? t(s) > .6 ? "#111" : "#fff" : o(s), e.textAlign = l, e.textBaseline = "middle", e.fillText(n, l === "center" ? r : d + 5, i + .5);
570
+ e.fillStyle = o(c ? s : we), te(e, d, i - de / 2, u, de, 3), e.fill(), c || (e.strokeStyle = o(s), e.lineWidth = 1, e.stroke()), e.fillStyle = c ? t(s) > .6 ? "#111" : "#fff" : o(s), e.textAlign = l, e.textBaseline = "middle", e.fillText(n, l === "center" ? r : d + 5, i + .5);
571
+ }, Ct = (e) => `rgb(${e & 255}, ${e >>> 8 & 255}, ${e >>> 16 & 255})`, wt = (e, t) => {
572
+ if (Y.w < 200 || Y.h < 96) return;
573
+ let n = Z.theme, r = Xe(), i = s.sizeUnit?.trim(), a = i ? `${r.liquidity} · ${i}` : r.liquidity, c = x(n, s, 600, t - 1), l = x(n, s, 400, t - 1), u = t - 2, d = H > 0 ? I.size(H) : "–";
574
+ e.font = c;
575
+ let f = e.measureText(a).width;
576
+ e.font = x(n, s, 400, u);
577
+ let p = e.measureText("0").width, m = e.measureText(d).width;
578
+ e.font = l;
579
+ let h = e.measureText(r.bubbleHint).width, g = u + 10, _ = Math.max(76, f, h + g) + 14, v = t - 1, y = 14 + v + 3 + 7 + 2 + u + 6 + v, b = Y.x + 8, ee = Y.y + 8;
580
+ if (b + _ > Y.x + Y.w - 8) return;
581
+ e.fillStyle = o(n.background, Te ? .82 : .88), e.strokeStyle = o(n.axis, .6), e.lineWidth = 1, te(e, b + .5, ee + .5, _, y, 6), e.fill(), e.stroke();
582
+ let S = b + 7;
583
+ e.textAlign = "left", e.textBaseline = "middle", e.font = c, e.fillStyle = o(n.textMuted), e.fillText(a, S, ee + 7 + v / 2);
584
+ let ne = ee + 7 + v + 3, C = e.createLinearGradient(S, ne, S + 76, ne);
585
+ for (let e = 0; e <= 8; e++) {
586
+ let t = e / 8, n = be[Math.round(t * (be.length - 1))] ?? 0;
587
+ C.addColorStop(t, Ct(n));
588
+ }
589
+ e.fillStyle = C, te(e, S, ne, 76, 7, 2), e.fill(), e.font = x(n, s, 400, u), e.fillStyle = o(n.textMuted);
590
+ let w = ne + 7 + 2 + u / 2;
591
+ e.fillText("0", S, w), e.textAlign = "right", e.fillText(d, S + Math.max(76, m + p), w), e.textAlign = "left";
592
+ let T = w + u / 2 + 6 + v / 2, E = u / 2;
593
+ for (let [t, n] of [L.up, L.down].entries()) e.fillStyle = o(n, .9), e.beginPath(), e.arc(S + E + t * (u + 4), T, E, 0, Math.PI * 2), e.fill();
594
+ e.font = l, e.fillStyle = o(n.textMuted), e.fillText(r.bubbleHint, S + g, T);
533
595
  };
534
- function vt(e) {
596
+ function Tt(e) {
535
597
  let t = Z.ctx;
536
598
  if (!t) return !1;
537
- let { width: n, height: r, dpr: i, theme: a } = Z, c = Ve ? e - Ve : 0;
538
- Ve = e;
539
- let u = Ke(), f = s.fontSize ?? (n < 420 ? 10 : 11), p = te(a, s, 400, f), m = te(a, s, 600, f), h = $(), g = !Number.isFinite(z);
540
- g && O.count("bid") + O.count("ask") > 0 && it(Date.now());
541
- let _ = Xe();
542
- Be = Number.isFinite(Be) && _ > Be - h * 4 ? Math.max(Be, _) : _;
543
- let v = Be;
544
- t.setTransform(i, 0, 0, i, 0, 0), t.clearRect(0, 0, n, r), tt();
545
- let re = O.mid();
599
+ let { width: n, height: r, dpr: i, theme: a } = Z, c = Ge ? e - Ge : 0;
600
+ Ge = e;
601
+ let u = Xe(), f = s.fontSize ?? (n < 420 ? 10 : 11), p = x(a, s, 400, f), m = x(a, s, 600, f), h = $(), g = !Number.isFinite(Oe);
602
+ g && N.count("bid") + N.count("ask") > 0 && lt(Date.now());
603
+ let _ = et();
604
+ We = Number.isFinite(We) && _ > We - h * 4 ? Math.max(We, _) : _;
605
+ let y = We;
606
+ t.setTransform(i, 0, 0, i, 0, 0), t.clearRect(0, 0, n, r), ot();
607
+ let te = N.mid();
546
608
  t.font = m;
547
- let ie = j.price(Number.isFinite(re) ? re * 1.0001 : 0), ae = Math.ceil(t.measureText(ie).width) + 18;
609
+ let S = I.price(Number.isFinite(te) ? te * 1.0001 : 0), ne = Math.ceil(t.measureText(S).width) + 18;
548
610
  t.font = p;
549
- let b = s.profile === !1 ? 0 : Math.round(ee(n * .12, 56, 120)), oe = f + 12;
611
+ let C = s.profile === !1 ? 0 : Math.round(v(n * .12, 56, 120)), w = f + 12;
550
612
  Y = {
551
613
  x: 0,
552
614
  y: 0,
553
- w: Math.max(10, n - ae - b),
554
- h: Math.max(10, r - oe)
615
+ w: Math.max(10, n - ne - C),
616
+ h: Math.max(10, r - w)
555
617
  };
556
- let se = Y.x + Y.w, x = se + b;
557
- if (Number.isFinite(W) || (W = Math.max(h * 10, s.window ?? 6e4)), Re) {
558
- let e = I.length ? I[0].time : L;
559
- G = ue(e, v, W, Math.min(W, h * 60));
560
- let t = O.bestBid(), n = O.bestAsk();
561
- for (let e of lt()) Number.isFinite(e.bestBid) && !(e.bestBid >= t) && (t = e.bestBid), Number.isFinite(e.bestAsk) && !(e.bestAsk <= n) && (n = e.bestAsk);
618
+ let T = Y.x + Y.w, E = T + C;
619
+ if (Number.isFinite(G) || (G = Math.max(h * 10, s.window ?? 6e4)), Ve) {
620
+ let e = z.length ? z[0].time : B;
621
+ K = ae(e, y, G, Math.min(G, h * 60));
622
+ let t = N.bestBid(), n = N.bestAsk();
623
+ for (let e of mt()) Number.isFinite(e.bestBid) && !(e.bestBid >= t) && (t = e.bestBid), Number.isFinite(e.bestAsk) && !(e.bestAsk <= n) && (n = e.bestAsk);
562
624
  Number.isFinite(t) || (t = n), Number.isFinite(n) || (n = t);
563
- let r = F > 0 ? F * Math.max(40, Y.h / 6) : 0, i = s.priceSpan ?? (Number.isFinite(J) ? J : void 0);
625
+ let r = R > 0 ? R * Math.max(40, Y.h / 6) : 0, i = s.priceSpan ?? (Number.isFinite(Ue) ? Ue : void 0);
564
626
  if (r > 0 || i !== void 0) {
565
- q = le(q, t, n, r, i);
566
- let [e, a] = q;
627
+ J = ie(J, t, n, r, i);
628
+ let [e, a] = J;
567
629
  if (Number.isFinite(e) && Number.isFinite(a)) {
568
- if (!ze) K = [e, a], ze = !0;
630
+ if (!He) q = [e, a], He = !0;
569
631
  else {
570
- let t = y(c, 280);
571
- K = [K[0] + (e - K[0]) * t, K[1] + (a - K[1]) * t];
632
+ let t = b(c, 280);
633
+ q = [q[0] + (e - q[0]) * t, q[1] + (a - q[1]) * t];
572
634
  }
573
635
  }
574
636
  }
575
637
  }
576
- let [S, C] = G, [w, ce] = K, T = (e) => Y.x + (e - S) / (C - S) * Y.w, E = (e) => Y.y + Y.h - (e - w) / (ce - w) * Y.h, D = ze && F > 0, fe = lt(), pe = h / (C - S) * Y.w, me = D ? be(F / (ce - w) * Y.h) : 1, he = o(N);
577
- if (U) {
578
- let e = U.canvas;
638
+ let [D, O] = K, [k, re] = q, A = (e) => Y.x + (e - D) / (O - D) * Y.w, j = (e) => Y.y + Y.h - (e - k) / (re - k) * Y.h, M = He && R > 0, se = mt(), ce = h / (O - D) * Y.w, le = M ? he(R / (re - k) * Y.h) : 1, ue = o(we);
639
+ if (W) {
640
+ let e = W.canvas;
579
641
  e.style.left = `${Y.x}px`, e.style.top = `${Y.y}px`, e.style.width = `${Y.w}px`, e.style.height = `${Y.h}px`;
580
642
  let t = Math.max(1, Math.round(Y.w * i)), n = Math.max(1, Math.round(Y.h * i));
581
- (e.width !== t || e.height !== n) && U.resize(t, n);
582
- let r = D && Number.isFinite(L) ? ct(S, C, w, ce, v, c) : null;
583
- r && (me = r.rowBins);
643
+ (e.width !== t || e.height !== n) && W.resize(t, n);
644
+ let r = M && Number.isFinite(B) ? pt(D, O, k, re, y, c) : null;
645
+ r && (le = r.rowBins);
584
646
  let a = t / Y.w, o = n / Y.h, s = r ? [
585
- (T(r.t0) - Y.x) * a,
586
- (E(r.p1) - Y.y) * o,
587
- (T(r.t1) - Y.x) * a,
588
- (E(r.p0) - Y.y) * o
647
+ (A(r.t0) - Y.x) * a,
648
+ (j(r.p1) - Y.y) * o,
649
+ (A(r.t1) - Y.x) * a,
650
+ (j(r.p0) - Y.y) * o
589
651
  ] : [
590
652
  0,
591
653
  0,
592
654
  0,
593
655
  0
594
656
  ];
595
- U.render(r, s, N);
596
- } else t.fillStyle = he, t.fillRect(Y.x, Y.y, Y.w, Y.h);
597
- let _e = D ? l(w, ce, Math.max(2, Math.floor(Y.h / 44))) : [], ve = d(S, C, Math.max(2, Math.floor(Y.w / 75)), void 0, s.timeZone ?? "local");
657
+ W.render(r, s, we);
658
+ } else t.fillStyle = ue, t.fillRect(Y.x, Y.y, Y.w, Y.h);
659
+ let fe = M ? l(k, re, Math.max(2, Math.floor(Y.h / 44))) : [], pe = d(D, O, Math.max(2, Math.floor(Y.w / 75)), void 0, s.timeZone ?? "local");
598
660
  t.strokeStyle = o(a.axis), t.lineWidth = 1, t.beginPath();
599
- for (let e of _e) {
600
- let n = Math.round(E(e)) + .5;
601
- t.moveTo(x, n), t.lineTo(x + 4, n);
661
+ for (let e of fe) {
662
+ let n = Math.round(j(e)) + .5;
663
+ t.moveTo(E, n), t.lineTo(E + 4, n);
602
664
  }
603
- for (let e of ve.values) {
604
- let n = Math.round(T(e)) + .5;
605
- n <= Y.x + 1 || n >= se - 1 || (t.moveTo(n, Y.y + Y.h), t.lineTo(n, Y.y + Y.h + 4));
665
+ for (let e of pe.values) {
666
+ let n = Math.round(A(e)) + .5;
667
+ n <= Y.x + 1 || n >= T - 1 || (t.moveTo(n, Y.y + Y.h), t.lineTo(n, Y.y + Y.h + 4));
606
668
  }
607
- t.stroke(), D && (s.bubbles !== !1 && pt(t, ut(fe, pe), T, E, f), ft(t, fe, T, E, pe), b && ht(t, se, b, E, f, me)), t.strokeStyle = o(a.axis), t.lineWidth = 1, t.beginPath(), t.moveTo(0, Math.round(Y.y + Y.h) + .5), t.lineTo(n, Math.round(Y.y + Y.h) + .5), b && (t.moveTo(Math.round(se) + .5, Y.y), t.lineTo(Math.round(se) + .5, Y.y + Y.h)), t.moveTo(Math.round(x) + .5, Y.y), t.lineTo(Math.round(x) + .5, Y.y + Y.h), t.stroke();
608
- let k = D ? gt(me) : null;
669
+ t.stroke(), M && (s.bubbles !== !1 && vt(t, ht(se, ce), A, j, f), _t(t, se, A, j, ce), C && bt(t, T, C, j, f, le)), t.strokeStyle = o(a.axis), t.lineWidth = 1, t.beginPath(), t.moveTo(0, Math.round(Y.y + Y.h) + .5), t.lineTo(n, Math.round(Y.y + Y.h) + .5), C && (t.moveTo(Math.round(T) + .5, Y.y), t.lineTo(Math.round(T) + .5, Y.y + Y.h)), t.moveTo(Math.round(E) + .5, Y.y), t.lineTo(Math.round(E) + .5, Y.y + Y.h), t.stroke(), s.legend !== !1 && wt(t, f);
670
+ let P = M ? xt(le) : null;
609
671
  t.font = p;
610
- let ye = k ? ne(Number.isFinite(k.start) ? k.start : k.time, h < 1e3, s.timeZone) : "", xe = k ? t.measureText(ye).width / 2 + 8 : 0;
672
+ let me = P ? ee(Number.isFinite(P.start) ? P.start : P.time, h < 1e3, s.timeZone) : "", ge = P ? t.measureText(me).width / 2 + 8 : 0;
611
673
  t.fillStyle = o(a.textMuted), t.textAlign = "center", t.textBaseline = "top";
612
- for (let e of ve.values) {
613
- let n = T(e), r = ve.format(e), i = t.measureText(r).width / 2;
614
- n - i < Y.x + 2 || n + i > se - 2 || k && Math.abs(n - k.hx) < xe + i || t.fillText(r, n, Y.y + Y.h + 6);
674
+ for (let e of pe.values) {
675
+ let n = A(e), r = pe.format(e), i = t.measureText(r).width / 2;
676
+ n - i < Y.x + 2 || n + i > T - 2 || P && Math.abs(n - P.hx) < ge + i || t.fillText(r, n, Y.y + Y.h + 6);
615
677
  }
616
- let Se = Ee, A = [{
617
- price: O.bestAsk(),
618
- color: M.down,
678
+ let _e = De, F = [{
679
+ price: N.bestAsk(),
680
+ color: L.down,
619
681
  filled: !0
620
682
  }, {
621
- price: O.bestBid(),
622
- color: M.up,
683
+ price: N.bestBid(),
684
+ color: L.up,
623
685
  filled: !0
624
686
  }];
625
- Se && Se.price !== O.bestBid() && Se.price !== O.bestAsk() && A.push({
626
- price: Se.price,
627
- color: Se.side === "buy" ? M.up : M.down,
687
+ _e && _e.price !== N.bestBid() && _e.price !== N.bestAsk() && F.push({
688
+ price: _e.price,
689
+ color: _e.side === "buy" ? L.up : L.down,
628
690
  filled: !1
629
691
  });
630
- let Ce = D ? A.filter((e) => Number.isFinite(e.price) && e.price >= w && e.price <= ce) : [], we = k ? Math.round(E(k.rowPrice)) + .5 : NaN, P = de(Ce.map((e) => ({
631
- y: E(e.price),
632
- h: ge
633
- })), k ? {
634
- y: we,
635
- h: ge
636
- } : null, _e.map(E), f + 2, [Y.y, Y.y + Y.h]);
637
- t.fillStyle = o(a.textMuted), t.textAlign = "left", t.textBaseline = "middle", _e.forEach((e, n) => {
638
- P.ticks[n] && t.fillText(j.price(e), x + 6, E(e));
639
- }), t.font = m, Ce.forEach((e, r) => {
640
- let i = P.pinned[r];
692
+ let ve = M ? F.filter((e) => Number.isFinite(e.price) && e.price >= k && e.price <= re) : [], ye = P ? Math.round(j(P.rowPrice)) + .5 : NaN, be = oe(ve.map((e) => ({
693
+ y: j(e.price),
694
+ h: de
695
+ })), P ? {
696
+ y: ye,
697
+ h: de
698
+ } : null, fe.map(j), f + 2, [Y.y, Y.y + Y.h]);
699
+ t.fillStyle = o(a.textMuted), t.textAlign = "left", t.textBaseline = "middle", fe.forEach((e, n) => {
700
+ be.ticks[n] && t.fillText(I.price(e), E + 6, j(e));
701
+ }), t.font = m, ve.forEach((e, r) => {
702
+ let i = be.pinned[r];
641
703
  if (i == null) return;
642
- let a = E(e.price);
643
- Math.abs(i - a) > 1 && (t.strokeStyle = o(e.color), t.lineWidth = 1, t.beginPath(), t.moveTo(x - 4, a), t.lineTo(x + 1, i), t.stroke()), _t(t, j.price(e.price), x + 1, i, n - x - 2, e.color, e.filled);
644
- }), yt(t, T, E, x, u, k, we, ye), t.font = p, Z.describe(`${s.ariaLabel ?? u.name}. ${u.bid} ${j.price(O.bestBid())}, ${u.ask} ${j.price(O.bestAsk())}.`);
645
- let Te = g || Ze() - De < 2e3;
646
- return Re && Te && Number.isFinite(L) || ze && q !== null && Math.abs(K[0] - q[0]) > 1e-9;
704
+ let a = j(e.price);
705
+ Math.abs(i - a) > 1 && (t.strokeStyle = o(e.color), t.lineWidth = 1, t.beginPath(), t.moveTo(E - 4, a), t.lineTo(E + 1, i), t.stroke()), St(t, I.price(e.price), E + 1, i, n - E - 2, e.color, e.filled);
706
+ }), Et(t, A, j, E, u, P, ye, me), t.font = p, Z.describe(`${s.ariaLabel ?? u.name}. ${u.bid} ${I.price(N.bestBid())}, ${u.ask} ${I.price(N.bestAsk())}.`);
707
+ let xe = g || tt() - ke < 2e3;
708
+ return Ve && xe && Number.isFinite(B) || He && J !== null && Math.abs(q[0] - J[0]) > 1e-9;
647
709
  }
648
- function yt(e, t, n, r, i, a, c, l) {
710
+ function Et(e, t, n, r, i, a, c, l) {
649
711
  let { theme: u } = Z;
650
712
  if (!a) {
651
- Z.tooltip.style.display = "none", Ue && (Ue = "", A.emit("hover", null));
713
+ Z.tooltip.style.display = "none", qe && (qe = "", F.emit("hover", null));
652
714
  return;
653
715
  }
654
- let { hx: d, hy: f, time: p, start: m, column: h, bucket: g, ry: _, low: v, high: y, rowPrice: re } = a, ie = (e) => Math.floor(e / _) === g, ae = $(), b = 0, oe = NaN, x = NaN, S = 0, C = 0;
716
+ let { hx: d, hy: f, time: p, start: m, column: h, bucket: g, ry: _, low: y, high: b, rowPrice: te } = a, S = (e) => Math.floor(e / _) === g, ne = $(), C = 0, w = NaN, E = NaN, D = 0, O = 0;
655
717
  if (h) {
656
- for (let e = 0; e < h.bins.length; e++) ie(h.bins[e]) && (b += h.sizes[e]);
657
- ({bestBid: oe, bestAsk: x, buyVolume: S, sellVolume: C} = h);
718
+ for (let e = 0; e < h.bins.length; e++) S(h.bins[e]) && (C += h.sizes[e]);
719
+ ({bestBid: w, bestAsk: E, buyVolume: D, sellVolume: O} = h);
658
720
  } else if (Number.isFinite(m)) {
659
- let e = st();
660
- if (e) for (let t = 0; t < e.bins.length; t++) ie(e.bins[t]) && (b += e.sizes[t]);
661
- oe = O.bestBid(), x = O.bestAsk(), S = R.buyVolume, C = R.sellVolume;
721
+ let e = ft();
722
+ if (e) for (let t = 0; t < e.bins.length; t++) S(e.bins[t]) && (C += e.sizes[t]);
723
+ w = N.bestBid(), E = N.bestAsk(), D = V.buyVolume, O = V.sellVolume;
662
724
  }
663
- let w = y <= oe ? "bid" : v >= x ? "ask" : null;
725
+ let k = b <= w ? "bid" : y >= E ? "ask" : null;
664
726
  if (e.strokeStyle = o(u.text, .5), e.lineWidth = 1, e.setLineDash([3, 3]), e.beginPath(), e.moveTo(Math.round(d) + .5, Y.y), e.lineTo(Math.round(d) + .5, Y.y + Y.h), e.moveTo(Y.x, c), e.lineTo(r, c), e.stroke(), e.setLineDash([]), Number.isFinite(m)) {
665
- let r = t(m), i = t(m + ae), a = n((g * _ + _ - .5) * F), s = n((g * _ - .5) * F);
727
+ let r = t(m), i = t(m + ne), a = n((g * _ + _ - .5) * R), s = n((g * _ - .5) * R);
666
728
  e.strokeStyle = o(u.text, .85), e.strokeRect(r, a, Math.max(2, i - r), Math.max(2, s - a));
667
729
  }
668
- e.font = te(u, s, 600, s.fontSize ?? (Z.width < 420 ? 10 : 11)), _t(e, j.price(re), r + 1, c, Z.width - r - 2, u.text, !0), _t(e, l, ee(d, Y.x + 40, Y.x + Y.w - 40), Y.y + Y.h + ge / 2 + 2, Y.w, u.text, !0, "center");
669
- let ce = w === "bid" ? M.up : w === "ask" ? M.down : null;
670
- se(We, Z.tooltip, {
671
- text: ne(Number.isFinite(m) ? m : p, !0, s.timeZone),
730
+ e.font = x(u, s, 600, s.fontSize ?? (Z.width < 420 ? 10 : 11)), St(e, I.price(te), r + 1, c, Z.width - r - 2, u.text, !0), St(e, l, v(d, Y.x + 40, Y.x + Y.w - 40), Y.y + Y.h + de / 2 + 2, Y.w, u.text, !0, "center");
731
+ let re = k === "bid" ? L.up : k === "ask" ? L.down : null;
732
+ T(Je, Z.tooltip, {
733
+ text: ee(Number.isFinite(m) ? m : p, !0, s.timeZone),
672
734
  color: void 0,
673
- badge: w && ce ? {
674
- text: w === "bid" ? i.bidSide : i.askSide,
675
- color: o(ce)
735
+ badge: k && re ? {
736
+ text: k === "bid" ? i.bidSide : i.askSide,
737
+ color: o(re)
676
738
  } : void 0
677
739
  }, [
678
- [i.price, _ > 1 ? `${j.price(v)} – ${j.price(y)}` : j.price(re)],
679
- [i.liquidity, j.size(b)],
680
- [i.buys, j.size(S)],
681
- [i.sells, j.size(C)]
740
+ [i.price, _ > 1 ? `${I.price(y)} – ${I.price(b)}` : I.price(te)],
741
+ [i.liquidity, it(I.size(C))],
742
+ [i.buys, it(I.size(D))],
743
+ [i.sells, it(I.size(O))]
682
744
  ]), Z.tooltip.style.display = "block", Z.placeTooltip(Z.tooltip, d, f, d > Y.w * .6 ? "left" : "right");
683
- let T = `${m}|${g}|${_}|${b}|${S}|${C}`;
684
- if (T !== Ue) {
685
- Ue = T;
745
+ let A = `${m}|${g}|${_}|${C}|${D}|${O}`;
746
+ if (A !== qe) {
747
+ qe = A;
686
748
  let e = {
687
749
  time: Number.isFinite(m) ? m : p,
688
- price: v,
689
- priceHigh: y,
690
- size: b,
691
- side: w,
692
- buyVolume: S,
693
- sellVolume: C
750
+ price: y,
751
+ priceHigh: b,
752
+ size: C,
753
+ side: k,
754
+ buyVolume: D,
755
+ sellVolume: O
694
756
  };
695
- A.emit("hover", e);
757
+ F.emit("hover", e);
696
758
  }
697
759
  }
698
- let bt = async (e = /* @__PURE__ */ new Set()) => {
699
- let t = ++Pe, n = await C(s.renderer ?? "auto", () => {
700
- let e = We.createElement("canvas");
760
+ let Dt = async (e = /* @__PURE__ */ new Set()) => {
761
+ let t = ++Le, n = await O(s.renderer ?? "auto", () => {
762
+ let e = Je.createElement("canvas");
701
763
  return Object.assign(e.style, {
702
764
  position: "absolute",
703
765
  left: "0",
@@ -705,151 +767,151 @@ var D = 256, fe = 4096, pe = .99, O = 2, me = [
705
767
  pointerEvents: "none"
706
768
  }), e.setAttribute("aria-hidden", "true"), e;
707
769
  }, (t) => {
708
- Fe || U?.kind !== t || (U.destroy(), U.canvas.remove(), U = null, bt(/* @__PURE__ */ new Set([...e, t])));
770
+ Re || W?.kind !== t || (W.destroy(), W.canvas.remove(), W = null, Dt(/* @__PURE__ */ new Set([...e, t])));
709
771
  }, e);
710
- if (Fe || t !== Pe) {
772
+ if (Re || t !== Le) {
711
773
  n?.destroy();
712
774
  return;
713
775
  }
714
- U && (U.destroy(), U.canvas.remove()), U = n, n ? (Q.dataset.renderer = n.kind, Q.insertBefore(n.canvas, Z.canvas), A.emit("renderer", n.kind)) : delete Q.dataset.renderer, Ie(n?.kind ?? null), Z.invalidate();
715
- }, xt = u(() => s.renderer, () => void bt()), St = (e) => {
716
- Re !== e && (Re = e, A.emit("follow", e));
717
- }, Ct = (e) => {
718
- let t = I.length ? I[0].time : L;
776
+ W && (W.destroy(), W.canvas.remove()), W = n, n ? (Q.dataset.renderer = n.kind, Q.insertBefore(n.canvas, Z.canvas), F.emit("renderer", n.kind)) : delete Q.dataset.renderer, ze(n?.kind ?? null), Z.invalidate();
777
+ }, Ot = u(() => s.renderer, () => void Dt()), kt = (e) => {
778
+ Ve !== e && (Ve = e, F.emit("follow", e));
779
+ }, At = (e) => {
780
+ let t = z.length ? z[0].time : B;
719
781
  if (!Number.isFinite(t)) return e;
720
- let n = e[1] - e[0], r = (Number.isFinite(Be) ? Be : Xe()) + $() + n / 2, i = Math.max(t - n / 2, Math.min(e[0], r - n));
782
+ let n = e[1] - e[0], r = (Number.isFinite(We) ? We : et()) + $() + n / 2, i = Math.max(t - n / 2, Math.min(e[0], r - n));
721
783
  return [i, i + n];
722
- }, wt = (e) => {
784
+ }, jt = (e) => {
723
785
  if (s.interactive === !1) return;
724
- let [t, n] = oe(Q, e);
786
+ let [t, n] = w(Q, e);
725
787
  Q.setPointerCapture?.(e.pointerId), X = {
726
788
  x: t,
727
789
  y: n,
728
- viewX: [...G],
729
- viewY: [...K],
790
+ viewX: [...K],
791
+ viewY: [...q],
730
792
  axis: t > Y.x + Y.w,
731
- span: K[1] - K[0]
793
+ span: q[1] - q[0]
732
794
  };
733
- }, Tt = (e) => {
734
- let [t, n] = oe(Q, e);
735
- if (He = [t, n], X) {
795
+ }, Mt = (e) => {
796
+ let [t, n] = w(Q, e);
797
+ if (Ke = [t, n], X) {
736
798
  let e = t - X.x, r = n - X.y;
737
799
  if (X.axis) {
738
800
  let e = X.span * Math.exp(r * .006), t = (X.viewY[0] + X.viewY[1]) / 2;
739
- J = e, K = [t - e / 2, t + e / 2], q = [K[0], K[1]];
801
+ Ue = e, q = [t - e / 2, t + e / 2], J = [q[0], q[1]];
740
802
  } else if (Math.abs(e) + Math.abs(r) > 3) {
741
- St(!1);
803
+ kt(!1);
742
804
  let t = (X.viewX[1] - X.viewX[0]) / Y.w * e, n = (X.viewY[1] - X.viewY[0]) / Y.h * r;
743
- G = Ct([X.viewX[0] - t, X.viewX[1] - t]), K = [X.viewY[0] + n, X.viewY[1] + n];
805
+ K = At([X.viewX[0] - t, X.viewX[1] - t]), q = [X.viewY[0] + n, X.viewY[1] + n];
744
806
  }
745
807
  }
746
808
  Z.invalidate();
747
- }, Et = (e) => {
809
+ }, Nt = (e) => {
748
810
  Q.releasePointerCapture?.(e.pointerId), X = null, Z.invalidate();
749
- }, Dt = () => {
750
- X || (He = null, Z.invalidate());
751
- }, Ot = (e, t) => {
752
- let [n, r] = G, i = ee((Re ? W : r - n) * e, $() * 10, Je());
753
- if (W = i, !Re) {
811
+ }, Pt = () => {
812
+ X || (Ke = null, Z.invalidate());
813
+ }, Ft = (e, t) => {
814
+ let [n, r] = K, i = v((Ve ? G : r - n) * e, $() * 10, Qe());
815
+ if (G = i, !Ve) {
754
816
  let e = n + (t - Y.x) / Y.w * (r - n), a = (e - n) / (r - n);
755
- G = Ct([e - i * a, e + i * (1 - a)]);
817
+ K = At([e - i * a, e + i * (1 - a)]);
756
818
  }
757
819
  Z.invalidate();
758
- }, kt = (e) => {
759
- let t = ee((K[1] - K[0]) * e, F * 6 || 1e-9, Infinity), n = (K[0] + K[1]) / 2;
760
- J = t, K = [n - t / 2, n + t / 2], q = [K[0], K[1]], Z.invalidate();
761
- }, At = (e) => {
820
+ }, It = (e) => {
821
+ let t = v((q[1] - q[0]) * e, R * 6 || 1e-9, Infinity), n = (q[0] + q[1]) / 2;
822
+ Ue = t, q = [n - t / 2, n + t / 2], J = [q[0], q[1]], Z.invalidate();
823
+ }, Lt = (e) => {
762
824
  if (s.interactive === !1 || !(e.ctrlKey || e.metaKey)) return;
763
825
  e.preventDefault();
764
- let [t] = oe(Q, e), n = Math.exp(e.deltaY * .002);
765
- e.shiftKey || t > Y.x + Y.w ? kt(n) : Ot(n, t);
766
- }, jt = () => {
767
- s.interactive !== !1 && Pt.resetView();
768
- }, Mt = (e) => {
826
+ let [t] = w(Q, e), n = Math.exp(e.deltaY * .002);
827
+ e.shiftKey || t > Y.x + Y.w ? It(n) : Ft(n, t);
828
+ }, Rt = () => {
829
+ s.interactive !== !1 && Vt.resetView();
830
+ }, zt = (e) => {
769
831
  if (s.interactive !== !1) {
770
832
  switch (e.key) {
771
833
  case "+":
772
834
  case "=":
773
- Ot(.8, Y.x + Y.w);
835
+ Ft(.8, Y.x + Y.w);
774
836
  break;
775
837
  case "-":
776
- Ot(1.25, Y.x + Y.w);
838
+ Ft(1.25, Y.x + Y.w);
777
839
  break;
778
840
  case "ArrowUp":
779
841
  case "ArrowDown": {
780
842
  if (e.shiftKey) {
781
- kt(e.key === "ArrowUp" ? .8 : 1.25);
843
+ It(e.key === "ArrowUp" ? .8 : 1.25);
782
844
  break;
783
845
  }
784
- St(!1);
785
- let t = (K[1] - K[0]) * .1 * (e.key === "ArrowUp" ? 1 : -1);
786
- K = [K[0] + t, K[1] + t], Z.invalidate();
846
+ kt(!1);
847
+ let t = (q[1] - q[0]) * .1 * (e.key === "ArrowUp" ? 1 : -1);
848
+ q = [q[0] + t, q[1] + t], Z.invalidate();
787
849
  break;
788
850
  }
789
851
  case "ArrowLeft":
790
852
  case "ArrowRight": {
791
- St(!1);
792
- let t = (G[1] - G[0]) * .1 * (e.key === "ArrowLeft" ? -1 : 1);
793
- G = Ct([G[0] + t, G[1] + t]), Z.invalidate();
853
+ kt(!1);
854
+ let t = (K[1] - K[0]) * .1 * (e.key === "ArrowLeft" ? -1 : 1);
855
+ K = At([K[0] + t, K[1] + t]), Z.invalidate();
794
856
  break;
795
857
  }
796
858
  case "0":
797
859
  case "Home":
798
- Pt.resetView();
860
+ Vt.resetView();
799
861
  break;
800
862
  default: return;
801
863
  }
802
864
  e.preventDefault();
803
865
  }
804
866
  };
805
- Q.addEventListener("pointerdown", wt), Q.addEventListener("pointermove", Tt), Q.addEventListener("pointerup", Et), Q.addEventListener("pointercancel", Et), Q.addEventListener("pointerleave", Dt), Q.addEventListener("wheel", At, { passive: !1 }), Q.addEventListener("dblclick", jt), Q.addEventListener("keydown", Mt);
806
- let Nt = (e) => {
807
- let t = at(e.time);
808
- O.count("bid") + O.count("ask") > 0 && (tt(), it(t)), O.applyDelta(e);
809
- }, Pt = {
867
+ Q.addEventListener("pointerdown", jt), Q.addEventListener("pointermove", Mt), Q.addEventListener("pointerup", Nt), Q.addEventListener("pointercancel", Nt), Q.addEventListener("pointerleave", Pt), Q.addEventListener("wheel", Lt, { passive: !1 }), Q.addEventListener("dblclick", Rt), Q.addEventListener("keydown", zt);
868
+ let Bt = (e) => {
869
+ let t = ut(e.time);
870
+ N.count("bid") + N.count("ask") > 0 && (ot(), lt(t)), N.applyDelta(e);
871
+ }, Vt = {
810
872
  setBook(e) {
811
- let t = at(e.time);
812
- O.count("bid") + O.count("ask") > 0 && it(t), O.setSnapshot(e), tt(), $e(), Number.isFinite(L) || it(t), Z.invalidate();
873
+ let t = ut(e.time);
874
+ N.count("bid") + N.count("ask") > 0 && lt(t), N.setSnapshot(e), ot(), rt(), Number.isFinite(B) || lt(t), Z.invalidate();
813
875
  },
814
876
  applyDeltas(e) {
815
- if (Array.isArray(e)) for (let t of e) Nt(t);
816
- else Nt(e);
817
- !Number.isFinite(L) && F > 0 && it(Xe()), Z.invalidate();
877
+ if (Array.isArray(e)) for (let t of e) Bt(t);
878
+ else Bt(e);
879
+ !Number.isFinite(B) && R > 0 && lt(et()), Z.invalidate();
818
880
  },
819
881
  addTrades(e) {
820
882
  let t = Array.isArray(e) ? e : [e];
821
883
  for (let e of t) {
822
884
  if (!(e.size > 0) || !Number.isFinite(e.price)) continue;
823
- Number.isFinite(z) && (at(e.time), it(e.time));
824
- let t = !Number.isFinite(L) || e.time >= L ? R : ot(e.time);
825
- t && (e.side === "buy" ? (t.buyVolume += e.size, t.buyNotional += e.size * e.price) : (t.sellVolume += e.size, t.sellNotional += e.size * e.price)), (!Ee || e.time >= Ee.time) && (Ee = e);
885
+ Number.isFinite(Oe) && (ut(e.time), lt(e.time));
886
+ let t = !Number.isFinite(B) || e.time >= B ? V : dt(e.time);
887
+ t && (e.side === "buy" ? (t.buyVolume += e.size, t.buyNotional += e.size * e.price) : (t.sellVolume += e.size, t.sellNotional += e.size * e.price)), (!De || e.time >= De.time) && (De = e);
826
888
  }
827
889
  Z.invalidate();
828
890
  },
829
891
  clear() {
830
- O.clear(), et(), Ee = null, z = NaN, F = 0, J = NaN, q = null, ze = !1, Z.invalidate();
892
+ N.clear(), at(), De = null, Oe = NaN, R = 0, Ue = NaN, J = null, He = !1, Z.invalidate();
831
893
  },
832
894
  setOptions(e) {
833
895
  let t = s;
834
- s = e, qe(), (e.tickSize !== t.tickSize || (e.interval ?? 100) !== (t.interval ?? 100)) && (et(), F = 0, J = NaN, tt()), e.window !== t.window && (W = NaN), e.priceSpan !== t.priceSpan && (J = NaN), (e.renderer ?? "auto") !== (t.renderer ?? "auto") && bt(), Qe(), $e(), Z.invalidate();
896
+ s = e, Ze(), (e.tickSize !== t.tickSize || (e.interval ?? 100) !== (t.interval ?? 100)) && (at(), R = 0, Ue = NaN, ot()), e.window !== t.window && (G = NaN), e.priceSpan !== t.priceSpan && (Ue = NaN), (e.renderer ?? "auto") !== (t.renderer ?? "auto") && Dt(), nt(), rt(), Z.invalidate();
835
897
  },
836
898
  resetView() {
837
- W = NaN, J = NaN, q = null, St(!0), Z.invalidate();
899
+ G = NaN, Ue = NaN, J = null, kt(!0), Z.invalidate();
838
900
  },
839
- getRenderer: () => U?.kind ?? null,
840
- ready: Le,
841
- getStore: () => O,
842
- on: (e, t) => A.on(e, t),
901
+ getRenderer: () => W?.kind ?? null,
902
+ ready: Be,
903
+ getStore: () => N,
904
+ on: (e, t) => F.on(e, t),
843
905
  resize() {
844
906
  Z.invalidate();
845
907
  },
846
908
  destroy() {
847
- Fe = !0, xt(), Q.removeEventListener("pointerdown", wt), Q.removeEventListener("pointermove", Tt), Q.removeEventListener("pointerup", Et), Q.removeEventListener("pointercancel", Et), Q.removeEventListener("pointerleave", Dt), Q.removeEventListener("wheel", At), Q.removeEventListener("dblclick", jt), Q.removeEventListener("keydown", Mt), U?.destroy(), U = null, A.clear(), Z.destroy(), Ie(null);
909
+ Re = !0, Ot(), Q.removeEventListener("pointerdown", jt), Q.removeEventListener("pointermove", Mt), Q.removeEventListener("pointerup", Nt), Q.removeEventListener("pointercancel", Nt), Q.removeEventListener("pointerleave", Pt), Q.removeEventListener("wheel", Lt), Q.removeEventListener("dblclick", Rt), Q.removeEventListener("keydown", zt), W?.destroy(), W = null, F.clear(), Z.destroy(), ze(null);
848
910
  }
849
911
  };
850
- return qe(), Qe(), bt(), Pt;
912
+ return Ze(), nt(), Dt(), Vt;
851
913
  };
852
914
  //#endregion
853
- export { A as createOrderBookHeatmap, Se as heatIntensity, ye as positionedRamp, be as rowBucket };
915
+ export { L as createOrderBookHeatmap, ye as heatCurve, _e as heatIntensity, me as positionedRamp, he as rowBucket, ve as sizeCdf };
854
916
 
855
917
  //# sourceMappingURL=heatmap.js.map