@363045841yyt/klinechart 0.8.1-alpha.3 → 0.8.1

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/index.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import { Fragment as e, Teleport as t, Transition as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, createVNode as l, defineComponent as u, effectScope as d, h as f, inject as p, markRaw as m, nextTick as h, normalizeClass as g, normalizeStyle as _, onBeforeUnmount as v, onMounted as y, onScopeDispose as b, onUnmounted as x, openBlock as S, provide as C, ref as w, renderList as T, resolveDynamicComponent as E, shallowRef as D, toDisplayString as O, unref as k, vModelCheckbox as A, vModelText as j, watch as M, withCtx as N, withDirectives as P, withKeys as F, withModifiers as I } from "vue";
2
2
  import { COLOR_PRESET_ITEMS as L, VERSION as R, createChartController as ee, createIndicatorSelectorController as te, darkTheme as ne, lightTheme as re, normalizeColorPresetSettings as ie, resolveThemeColors as ae, themeToCssVars as oe } from "@363045841yyt/klinechart-core";
3
- import { DrawingInteractionController as se, allIndicators as ce, createChartController as le, createIndicatorSelectorController as z, findIndicator as ue, getPhysicalKLineConfig as de, kGapFromKWidth as fe, zoomLevelToKWidth as pe } from "@363045841yyt/klinechart-core/controllers";
4
- import { SemanticChartController as me } from "@363045841yyt/klinechart-core/semantic";
5
- import { getRegisteredIndicatorDefinition as he } from "@363045841yyt/klinechart-core/indicators";
6
- import { DEFAULT_SETTINGS as B, SETTINGS_STORAGE_KEY as ge } from "@363045841yyt/klinechart-core/config";
3
+ import { DrawingInteractionController as se, allIndicators as ce, createChartController as le, createIndicatorSelectorController as z, findIndicator as ue, kGapFromKWidth as de, zoomLevelToKWidth as fe } from "@363045841yyt/klinechart-core/controllers";
4
+ import { SemanticChartController as pe } from "@363045841yyt/klinechart-core/semantic";
5
+ import { getRegisteredIndicatorDefinition as me } from "@363045841yyt/klinechart-core/indicators";
6
+ import { DEFAULT_SETTINGS as B, SETTINGS_STORAGE_KEY as he } from "@363045841yyt/klinechart-core/config";
7
7
  //#region src/components/ColorPresetPanel.vue?vue&type=script&setup=true&lang.ts
8
- var V = { class: "color-preset-tools" }, H = {
8
+ var ge = { class: "color-preset-tools" }, V = {
9
9
  class: "theme-tabs",
10
10
  role: "tablist",
11
11
  "aria-label": "颜色主题"
12
- }, U = ["onClick"], _e = { class: "color-group-label" }, ve = { class: "color-grid" }, ye = ["value", "onInput"], be = /*@__PURE__*/ u({
12
+ }, H = ["onClick"], _e = { class: "color-group-label" }, ve = { class: "color-grid" }, ye = ["value", "onInput"], be = /*@__PURE__*/ u({
13
13
  __name: "ColorPresetPanel",
14
14
  props: { colorPresetSettings: {} },
15
15
  emits: ["update:colorPresetSettings"],
@@ -50,12 +50,12 @@ var V = { class: "color-preset-tools" }, H = {
50
50
  let e = { ...ie(i.colorPresetSettings) };
51
51
  delete e[d.value], a("update:colorPresetSettings", e);
52
52
  }
53
- return (t, n) => (S(), o("div", null, [s("div", V, [s("div", H, [(S(), o(e, null, T(c, (e) => s("button", {
53
+ return (t, n) => (S(), o("div", null, [s("div", ge, [s("div", V, [(S(), o(e, null, T(c, (e) => s("button", {
54
54
  key: e.value,
55
55
  type: "button",
56
56
  class: g(["theme-tab", { active: d.value === e.value }]),
57
57
  onClick: (t) => d.value = e.value
58
- }, O(e.label), 11, U)), 64))]), s("button", {
58
+ }, O(e.label), 11, H)), 64))]), s("button", {
59
59
  type: "button",
60
60
  class: "color-reset-btn",
61
61
  onClick: h
@@ -69,18 +69,18 @@ var V = { class: "color-preset-tools" }, H = {
69
69
  onInput: (t) => m(e.key, t.target.value)
70
70
  }, null, 40, ye)]))), 128))])], 64))), 128))]));
71
71
  }
72
- }), W = (e, t) => {
72
+ }), U = (e, t) => {
73
73
  let n = e.__vccOpts || e;
74
74
  for (let [e, r] of t) n[e] = r;
75
75
  return n;
76
- }, xe = /*#__PURE__*/ W(be, [["__scopeId", "data-v-a52947a4"]]), Se = [
76
+ }, W = /*#__PURE__*/ U(be, [["__scopeId", "data-v-a52947a4"]]), xe = [
77
77
  "title",
78
78
  "aria-expanded",
79
79
  "onKeydown"
80
- ], G = {
80
+ ], Se = {
81
81
  key: 0,
82
82
  class: "dropdown__label"
83
- }, Ce = { class: "dropdown__value" }, we = ["aria-selected", "onClick"], K = 0, q = null, Te = 0, Ee = /*#__PURE__*/ W(/* @__PURE__ */ u({
83
+ }, Ce = { class: "dropdown__value" }, we = ["aria-selected", "onClick"], G = 0, Te = null, Ee = 0, K = /*#__PURE__*/ U(/* @__PURE__ */ u({
84
84
  __name: "Dropdown",
85
85
  props: {
86
86
  modelValue: {},
@@ -92,7 +92,7 @@ var V = { class: "color-preset-tools" }, H = {
92
92
  },
93
93
  emits: ["update:modelValue"],
94
94
  setup(t, { emit: n }) {
95
- let i = t, c = n, l = w(null), u = w(null), d = w(!1), f = w(0), p = ++Te, m = r(() => i.minWidth ? { minWidth: i.minWidth } : {}), h = r(() => {
95
+ let i = t, c = n, l = w(null), u = w(null), d = w(!1), f = w(0), p = ++Ee, m = r(() => i.minWidth ? { minWidth: i.minWidth } : {}), h = r(() => {
96
96
  if (!d.value) return;
97
97
  let e = f.value || (i.minWidth ? parseInt(i.minWidth) : 0);
98
98
  return { width: e ? `${e}px` : void 0 };
@@ -101,10 +101,10 @@ var V = { class: "color-preset-tools" }, H = {
101
101
  return e && i.options.some((t) => t.value === e) ? e : i.options[0]?.value ?? "";
102
102
  }), b = r(() => i.options.find((e) => e.value === y.value) ?? i.options[0]);
103
103
  function x() {
104
- K !== p && q && q(), !d.value && (K = p, q = C, f.value = u.value?.offsetWidth ?? 0, d.value = !0, document.addEventListener("pointerdown", k));
104
+ G !== p && Te && Te(), !d.value && (G = p, Te = C, f.value = u.value?.offsetWidth ?? 0, d.value = !0, document.addEventListener("pointerdown", k));
105
105
  }
106
106
  function C() {
107
- d.value && (d.value = !1, K === p && (K = 0, q = null), document.removeEventListener("pointerdown", k));
107
+ d.value && (d.value = !1, G === p && (G = 0, Te = null), document.removeEventListener("pointerdown", k));
108
108
  }
109
109
  function E() {
110
110
  d.value ? C() : x();
@@ -137,13 +137,13 @@ var V = { class: "color-preset-tools" }, H = {
137
137
  F(I(E, ["prevent"]), ["space"])
138
138
  ]
139
139
  }, [
140
- t.label ? (S(), o("span", G, O(t.label), 1)) : a("", !0),
140
+ t.label ? (S(), o("span", Se, O(t.label), 1)) : a("", !0),
141
141
  s("span", Ce, O(b.value.label), 1),
142
142
  r[0] ||= s("span", {
143
143
  class: "dropdown__chevron",
144
144
  "aria-hidden": "true"
145
145
  }, null, -1)
146
- ], 44, Se), d.value ? (S(), o("div", {
146
+ ], 44, xe), d.value ? (S(), o("div", {
147
147
  key: 0,
148
148
  class: "dropdown__menu",
149
149
  style: _(h.value),
@@ -161,7 +161,7 @@ var V = { class: "color-preset-tools" }, H = {
161
161
  }), [["__scopeId", "data-v-126e11f2"]]), De = {
162
162
  class: "toolbar-item color-item",
163
163
  title: "颜色"
164
- }, Oe = ["value"], ke = /*#__PURE__*/ W(/* @__PURE__ */ u({
164
+ }, Oe = ["value"], ke = /*#__PURE__*/ U(/* @__PURE__ */ u({
165
165
  __name: "DrawingStyleToolbar",
166
166
  props: { drawing: {} },
167
167
  emits: ["updateStyle", "delete"],
@@ -225,14 +225,14 @@ var V = { class: "color-preset-tools" }, H = {
225
225
  value: e.drawing.style.stroke ?? "#2962ff",
226
226
  onInput: i[0] ||= (e) => c(e.target.value)
227
227
  }, null, 40, Oe)]),
228
- l(Ee, {
228
+ l(K, {
229
229
  "model-value": String(e.drawing.style.strokeWidth ?? 1),
230
230
  options: n,
231
231
  size: "sm",
232
232
  title: "线宽",
233
233
  "onUpdate:modelValue": i[1] ||= (e) => u(Number(e))
234
234
  }, null, 8, ["model-value"]),
235
- l(Ee, {
235
+ l(K, {
236
236
  "model-value": e.drawing.style.strokeStyle ?? "solid",
237
237
  options: r,
238
238
  size: "sm",
@@ -270,22 +270,22 @@ function Me() {
270
270
  }
271
271
  //#endregion
272
272
  //#region src/components/IndicatorParams.vue?vue&type=script&setup=true&lang.ts
273
- var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class: "params-title" }, Ie = { class: "header-right" }, Le = {
273
+ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class: "params-title" }, Ie = { class: "header-right" }, q = {
274
274
  key: 0,
275
275
  class: "indicator-description"
276
- }, J = { class: "params-body" }, Y = { class: "param-header" }, Re = { class: "param-label" }, ze = { class: "param-label-text" }, Be = {
276
+ }, Le = { class: "params-body" }, Re = { class: "param-header" }, ze = { class: "param-label" }, J = { class: "param-label-text" }, Y = {
277
277
  key: 0,
278
278
  class: "param-range"
279
- }, Ve = { class: "input-wrapper" }, He = ["disabled", "onClick"], Ue = [
279
+ }, Be = { class: "input-wrapper" }, Ve = ["disabled", "onClick"], He = [
280
280
  "value",
281
281
  "min",
282
282
  "max",
283
283
  "step",
284
284
  "onInput"
285
- ], We = ["disabled", "onClick"], Ge = {
285
+ ], Ue = ["disabled", "onClick"], We = {
286
286
  key: 0,
287
287
  class: "param-description"
288
- }, Ke = { class: "params-footer" }, qe = { class: "footer-right" }, Je = /*#__PURE__*/ W(/* @__PURE__ */ u({
288
+ }, Ge = { class: "params-footer" }, Ke = { class: "footer-right" }, qe = /*#__PURE__*/ U(/* @__PURE__ */ u({
289
289
  __name: "IndicatorParams",
290
290
  props: {
291
291
  visible: { type: Boolean },
@@ -350,18 +350,18 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
350
350
  "stroke-width": "2"
351
351
  }, [s("path", { d: "M18 6L6 18M6 6l12 12" })], -1)]])])]),
352
352
  l(n, { name: "slide" }, {
353
- default: N(() => [m.value && r.indicatorDescription ? (S(), o("div", Le, [s("p", null, O(r.indicatorDescription), 1)])) : a("", !0)]),
353
+ default: N(() => [m.value && r.indicatorDescription ? (S(), o("div", q, [s("p", null, O(r.indicatorDescription), 1)])) : a("", !0)]),
354
354
  _: 1
355
355
  }),
356
- s("div", J, [(S(!0), o(e, null, T(r.params, (e) => (S(), o("div", {
356
+ s("div", Le, [(S(!0), o(e, null, T(r.params, (e) => (S(), o("div", {
357
357
  key: e.key,
358
358
  class: g(["param-item", { "has-desc": m.value && e.description }])
359
- }, [s("div", Y, [s("label", Re, [s("span", ze, O(e.label), 1), e.min !== void 0 || e.max !== void 0 ? (S(), o("span", Be, O(e.min ?? "-∞") + " ~ " + O(e.max ?? "+∞"), 1)) : a("", !0)]), s("div", Ve, [
359
+ }, [s("div", Re, [s("label", ze, [s("span", J, O(e.label), 1), e.min !== void 0 || e.max !== void 0 ? (S(), o("span", Y, O(e.min ?? "-∞") + " ~ " + O(e.max ?? "+∞"), 1)) : a("", !0)]), s("div", Be, [
360
360
  s("button", {
361
361
  class: "stepper-btn",
362
362
  disabled: e.min !== void 0 && (p.value[e.key] ?? 0) <= e.min,
363
363
  onClick: (t) => v(e, -1)
364
- }, " − ", 8, He),
364
+ }, " − ", 8, Ve),
365
365
  e.type === "number" ? (S(), o("input", {
366
366
  key: 0,
367
367
  type: "number",
@@ -371,17 +371,17 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
371
371
  max: e.max,
372
372
  step: e.step || 1,
373
373
  onInput: (t) => _(e.key, t)
374
- }, null, 40, Ue)) : a("", !0),
374
+ }, null, 40, He)) : a("", !0),
375
375
  s("button", {
376
376
  class: "stepper-btn",
377
377
  disabled: e.max !== void 0 && (p.value[e.key] ?? 0) >= e.max,
378
378
  onClick: (t) => v(e, 1)
379
- }, " + ", 8, We)
379
+ }, " + ", 8, Ue)
380
380
  ])]), l(n, { name: "slide" }, {
381
- default: N(() => [m.value && e.description ? (S(), o("div", Ge, O(e.description), 1)) : a("", !0)]),
381
+ default: N(() => [m.value && e.description ? (S(), o("div", We, O(e.description), 1)) : a("", !0)]),
382
382
  _: 2
383
383
  }, 1024)], 2))), 128))]),
384
- s("div", Ke, [s("button", {
384
+ s("div", Ge, [s("button", {
385
385
  class: "params-btn reset",
386
386
  onClick: y
387
387
  }, [...d[8] ||= [s("svg", {
@@ -389,7 +389,7 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
389
389
  fill: "none",
390
390
  stroke: "currentColor",
391
391
  "stroke-width": "2"
392
- }, [s("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }), s("path", { d: "M3 3v5h5" })], -1), c(" 重置 ", -1)]]), s("div", qe, [s("button", {
392
+ }, [s("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }), s("path", { d: "M3 3v5h5" })], -1), c(" 重置 ", -1)]]), s("div", Ke, [s("button", {
393
393
  class: "params-btn cancel",
394
394
  onClick: d[2] ||= (e) => u.$emit("close")
395
395
  }, "取消"), s("button", {
@@ -407,31 +407,31 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
407
407
  _: 1
408
408
  })], 8, ["to"]));
409
409
  }
410
- }), [["__scopeId", "data-v-30f2f611"]]), Ye = { class: "indicator-selector" }, Xe = { class: "modal-header" }, Ze = { class: "header-title" }, Qe = { class: "title-sub" }, $e = { class: "header-actions" }, et = {
410
+ }), [["__scopeId", "data-v-30f2f611"]]), Je = { class: "indicator-selector" }, Ye = { class: "modal-header" }, Xe = { class: "header-title" }, Ze = { class: "title-sub" }, Qe = { class: "header-actions" }, $e = {
411
411
  key: 0,
412
412
  viewBox: "0 0 24 24",
413
413
  width: "16",
414
414
  height: "16",
415
415
  fill: "currentColor"
416
- }, tt = {
416
+ }, et = {
417
417
  key: 1,
418
418
  viewBox: "0 0 24 24",
419
419
  width: "16",
420
420
  height: "16",
421
421
  fill: "currentColor"
422
- }, nt = { class: "modal-search-area" }, rt = { class: "search-box" }, it = ["value"], at = { class: "modal-body" }, ot = {
422
+ }, tt = { class: "modal-search-area" }, nt = { class: "search-box" }, rt = ["value"], it = { class: "modal-body" }, at = {
423
423
  key: 0,
424
424
  class: "indicator-section"
425
- }, st = { class: "section-header" }, ct = { class: "section-count" }, lt = ["onClick"], ut = { class: "card-label" }, dt = { class: "card-tooltip" }, ft = { class: "card-header" }, pt = { class: "card-label" }, mt = { class: "card-header-actions" }, ht = ["onClick"], gt = { class: "card-name" }, _t = {
425
+ }, ot = { class: "section-header" }, st = { class: "section-count" }, ct = ["onClick"], lt = { class: "card-label" }, ut = { class: "card-tooltip" }, dt = { class: "card-header" }, ft = { class: "card-label" }, pt = { class: "card-header-actions" }, mt = ["onClick"], ht = { class: "card-name" }, gt = {
426
426
  key: 1,
427
427
  class: "section-divider"
428
- }, vt = {
428
+ }, _t = {
429
429
  key: 2,
430
430
  class: "no-results"
431
- }, yt = {
431
+ }, vt = {
432
432
  key: 3,
433
433
  class: "indicator-section"
434
- }, bt = { class: "section-header" }, xt = { class: "section-count" }, St = ["onClick"], X = { class: "card-label" }, Z = { class: "card-tooltip" }, Ct = { class: "card-header" }, wt = { class: "card-label" }, Tt = { class: "card-header-actions" }, Et = ["onClick"], Dt = { class: "card-name" }, Ot = { class: "modal-footer" }, kt = { class: "footer-info" }, At = { class: "info-text" }, jt = /*#__PURE__*/ W(/* @__PURE__ */ u({
434
+ }, yt = { class: "section-header" }, bt = { class: "section-count" }, xt = ["onClick"], St = { class: "card-label" }, Ct = { class: "card-tooltip" }, wt = { class: "card-header" }, X = { class: "card-label" }, Z = { class: "card-header-actions" }, Tt = ["onClick"], Et = { class: "card-name" }, Dt = { class: "modal-footer" }, Ot = { class: "footer-info" }, kt = { class: "info-text" }, At = /*#__PURE__*/ U(/* @__PURE__ */ u({
435
435
  __name: "IndicatorSelector",
436
436
  props: {
437
437
  activeIndicators: {},
@@ -498,7 +498,7 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
498
498
  openMenu: () => h.openMenu(),
499
499
  closeMenu: () => h.closeMenu(),
500
500
  toggleMenu: () => h.toggleMenu()
501
- }), (r, c) => (S(), o("div", Ye, [(S(), i(t, { to: k(P) }, [l(n, { name: "overlay" }, {
501
+ }), (r, c) => (S(), o("div", Je, [(S(), i(t, { to: k(P) }, [l(n, { name: "overlay" }, {
502
502
  default: N(() => [k(_) ? (S(), o("div", {
503
503
  key: 0,
504
504
  class: "selector-overlay",
@@ -509,11 +509,11 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
509
509
  class: "selector-modal",
510
510
  onClick: c[4] ||= I(() => {}, ["stop"])
511
511
  }, [
512
- s("div", Xe, [s("div", Ze, [c[7] ||= s("span", { class: "title-text" }, "添加指标", -1), s("span", Qe, O(k(D)) + " 个可用指标", 1)]), s("div", $e, [s("button", {
512
+ s("div", Ye, [s("div", Xe, [c[7] ||= s("span", { class: "title-text" }, "添加指标", -1), s("span", Ze, O(k(D)) + " 个可用指标", 1)]), s("div", Qe, [s("button", {
513
513
  class: g(["view-toggle-btn", { active: M.value }]),
514
514
  onClick: c[0] ||= (e) => M.value = !M.value,
515
515
  title: "简洁模式"
516
- }, [M.value ? (S(), o("svg", tt, [...c[9] ||= [s("path", { d: "M3 3h18v18H3V3zm16 16V5H5v14h14zM7 7h4v4H7V7zm0 6h4v4H7v-4zm6-6h4v4h-4V7zm0 6h4v4h-4v-4z" }, null, -1)]])) : (S(), o("svg", et, [...c[8] ||= [s("path", { d: "M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z" }, null, -1)]]))], 2), s("button", {
516
+ }, [M.value ? (S(), o("svg", et, [...c[9] ||= [s("path", { d: "M3 3h18v18H3V3zm16 16V5H5v14h14zM7 7h4v4H7V7zm0 6h4v4H7v-4zm6-6h4v4h-4V7zm0 6h4v4h-4v-4z" }, null, -1)]])) : (S(), o("svg", $e, [...c[8] ||= [s("path", { d: "M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z" }, null, -1)]]))], 2), s("button", {
517
517
  class: "modal-close",
518
518
  onClick: c[1] ||= (e) => k(h).closeMenu(),
519
519
  title: "关闭"
@@ -523,7 +523,7 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
523
523
  height: "14",
524
524
  fill: "currentColor"
525
525
  }, [s("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" })], -1)]])])]),
526
- s("div", nt, [s("div", rt, [c[11] ||= s("svg", {
526
+ s("div", tt, [s("div", nt, [c[11] ||= s("svg", {
527
527
  class: "search-icon",
528
528
  viewBox: "0 0 24 24",
529
529
  width: "16",
@@ -535,16 +535,16 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
535
535
  type: "text",
536
536
  class: "search-input",
537
537
  placeholder: "搜索指标名称..."
538
- }, null, 40, it)])]),
539
- s("div", at, [
540
- k(b).length > 0 ? (S(), o("div", ot, [s("div", st, [c[12] ||= s("span", { class: "section-title" }, "主图指标", -1), s("span", ct, O(k(b).length), 1)]), s("div", { class: g(["indicator-grid", { compact: M.value }]) }, [(S(!0), o(e, null, T(k(b), (t) => (S(), o("button", {
538
+ }, null, 40, rt)])]),
539
+ s("div", it, [
540
+ k(b).length > 0 ? (S(), o("div", at, [s("div", ot, [c[12] ||= s("span", { class: "section-title" }, "主图指标", -1), s("span", st, O(k(b).length), 1)]), s("div", { class: g(["indicator-grid", { compact: M.value }]) }, [(S(!0), o(e, null, T(k(b), (t) => (S(), o("button", {
541
541
  key: t.id,
542
542
  class: g(["indicator-card", {
543
543
  active: R(t.id),
544
544
  compact: M.value
545
545
  }]),
546
546
  onClick: (e) => R(t.id) ? te(t.id) : ee(t.id)
547
- }, [M.value ? (S(), o(e, { key: 0 }, [s("span", ut, O(t.label), 1), s("span", dt, O(t.name), 1)], 64)) : (S(), o(e, { key: 1 }, [s("div", ft, [s("span", pt, O(t.label), 1), s("div", mt, [t.params?.length ? (S(), o("button", {
547
+ }, [M.value ? (S(), o(e, { key: 0 }, [s("span", lt, O(t.label), 1), s("span", ut, O(t.name), 1)], 64)) : (S(), o(e, { key: 1 }, [s("div", dt, [s("span", ft, O(t.label), 1), s("div", pt, [t.params?.length ? (S(), o("button", {
548
548
  key: 0,
549
549
  class: "card-settings-btn",
550
550
  onClick: I((e) => ne(t.id), ["stop"]),
@@ -554,9 +554,9 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
554
554
  width: "14",
555
555
  height: "14",
556
556
  fill: "currentColor"
557
- }, [s("path", { d: "M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z" })], -1)]], 8, ht)) : a("", !0)])]), s("div", gt, O(t.name), 1)], 64))], 10, lt))), 128))], 2)])) : a("", !0),
558
- k(b).length > 0 && k(C).length > 0 ? (S(), o("div", _t)) : a("", !0),
559
- !E.value && k(v).trim() ? (S(), o("div", vt, [...c[14] ||= [
557
+ }, [s("path", { d: "M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z" })], -1)]], 8, mt)) : a("", !0)])]), s("div", ht, O(t.name), 1)], 64))], 10, ct))), 128))], 2)])) : a("", !0),
558
+ k(b).length > 0 && k(C).length > 0 ? (S(), o("div", gt)) : a("", !0),
559
+ !E.value && k(v).trim() ? (S(), o("div", _t, [...c[14] ||= [
560
560
  s("svg", {
561
561
  viewBox: "0 0 24 24",
562
562
  width: "48",
@@ -566,14 +566,14 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
566
566
  s("p", null, "未找到匹配的指标", -1),
567
567
  s("span", { class: "no-results-hint" }, "请尝试其他关键词", -1)
568
568
  ]])) : a("", !0),
569
- k(C).length > 0 ? (S(), o("div", yt, [s("div", bt, [c[15] ||= s("span", { class: "section-title" }, "副图指标", -1), s("span", xt, O(k(C).length), 1)]), s("div", { class: g(["indicator-grid", { compact: M.value }]) }, [(S(!0), o(e, null, T(k(C), (t) => (S(), o("button", {
569
+ k(C).length > 0 ? (S(), o("div", vt, [s("div", yt, [c[15] ||= s("span", { class: "section-title" }, "副图指标", -1), s("span", bt, O(k(C).length), 1)]), s("div", { class: g(["indicator-grid", { compact: M.value }]) }, [(S(!0), o(e, null, T(k(C), (t) => (S(), o("button", {
570
570
  key: t.id,
571
571
  class: g(["indicator-card", {
572
572
  active: R(t.id),
573
573
  compact: M.value
574
574
  }]),
575
575
  onClick: (e) => R(t.id) ? te(t.id) : ee(t.id)
576
- }, [M.value ? (S(), o(e, { key: 0 }, [s("span", X, O(t.label), 1), s("span", Z, O(t.name), 1)], 64)) : (S(), o(e, { key: 1 }, [s("div", Ct, [s("span", wt, O(t.label), 1), s("div", Tt, [t.params?.length ? (S(), o("button", {
576
+ }, [M.value ? (S(), o(e, { key: 0 }, [s("span", St, O(t.label), 1), s("span", Ct, O(t.name), 1)], 64)) : (S(), o(e, { key: 1 }, [s("div", wt, [s("span", X, O(t.label), 1), s("div", Z, [t.params?.length ? (S(), o("button", {
577
577
  key: 0,
578
578
  class: "card-settings-btn",
579
579
  onClick: I((e) => ne(t.id), ["stop"]),
@@ -583,9 +583,9 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
583
583
  width: "14",
584
584
  height: "14",
585
585
  fill: "currentColor"
586
- }, [s("path", { d: "M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z" })], -1)]], 8, Et)) : a("", !0)])]), s("div", Dt, O(t.name), 1)], 64))], 10, St))), 128))], 2)])) : a("", !0)
586
+ }, [s("path", { d: "M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z" })], -1)]], 8, Tt)) : a("", !0)])]), s("div", Et, O(t.name), 1)], 64))], 10, xt))), 128))], 2)])) : a("", !0)
587
587
  ]),
588
- s("div", Ot, [s("div", kt, [s("span", At, "已激活 " + O(L.value) + " 个指标", 1)]), s("button", {
588
+ s("div", Dt, [s("div", Ot, [s("span", kt, "已激活 " + O(L.value) + " 个指标", 1)]), s("button", {
589
589
  class: "btn btn-confirm",
590
590
  onClick: c[3] ||= (e) => k(h).closeMenu()
591
591
  }, "确认")])
@@ -593,7 +593,7 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
593
593
  _: 1
594
594
  })])) : a("", !0)]),
595
595
  _: 1
596
- })], 8, ["to"])), F.value ? (S(), i(Je, {
596
+ })], 8, ["to"])), F.value ? (S(), i(qe, {
597
597
  key: 0,
598
598
  visible: A.value,
599
599
  "indicator-id": F.value.id,
@@ -612,25 +612,25 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
612
612
  "values"
613
613
  ])) : a("", !0)]));
614
614
  }
615
- }), [["__scopeId", "data-v-bbd88e50"]]), Mt = { class: "kline-tooltip__title" }, Nt = { key: 0 }, Pt = { class: "kline-tooltip__grid" }, Ft = { class: "row" }, It = { class: "row" }, Lt = { class: "row" }, Rt = { class: "row" }, zt = {
615
+ }), [["__scopeId", "data-v-bbd88e50"]]), jt = { class: "kline-tooltip__title" }, Mt = { key: 0 }, Nt = { class: "kline-tooltip__grid" }, Pt = { class: "row" }, Ft = { class: "row" }, It = { class: "row" }, Lt = { class: "row" }, Rt = {
616
616
  key: 0,
617
617
  class: "row"
618
- }, Bt = {
618
+ }, zt = {
619
619
  key: 1,
620
620
  class: "row"
621
- }, Vt = {
621
+ }, Bt = {
622
622
  key: 2,
623
623
  class: "row"
624
- }, Ht = {
624
+ }, Vt = {
625
625
  key: 3,
626
626
  class: "row"
627
- }, Ut = {
627
+ }, Ht = {
628
628
  key: 4,
629
629
  class: "row"
630
- }, Wt = {
630
+ }, Ut = {
631
631
  key: 5,
632
632
  class: "row"
633
- }, Gt = "#6b7280", Kt = /*#__PURE__*/ W(/* @__PURE__ */ u({
633
+ }, Wt = "#6b7280", Gt = /*#__PURE__*/ U(/* @__PURE__ */ u({
634
634
  __name: "KLineTooltip",
635
635
  props: {
636
636
  k: {},
@@ -665,19 +665,19 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
665
665
  }
666
666
  let p = r(() => {
667
667
  let e = t.k;
668
- if (!e) return Gt;
668
+ if (!e) return Wt;
669
669
  let n = f(e, t.data, t.index);
670
- return n > 0 ? t.upColor : n < 0 ? t.downColor : Gt;
670
+ return n > 0 ? t.upColor : n < 0 ? t.downColor : Wt;
671
671
  }), m = r(() => {
672
672
  let e = t.k;
673
- if (!e) return Gt;
673
+ if (!e) return Wt;
674
674
  let n = e.close - e.open;
675
- return n > 0 ? t.upColor : n < 0 ? t.downColor : Gt;
675
+ return n > 0 ? t.upColor : n < 0 ? t.downColor : Wt;
676
676
  }), h = r(() => {
677
677
  let e = t.k;
678
- if (!e) return Gt;
678
+ if (!e) return Wt;
679
679
  let n = e.changePercent ?? (e.close - e.open) / e.open * 100;
680
- return n > 0 ? t.upColor : n < 0 ? t.downColor : Gt;
680
+ return n > 0 ? t.upColor : n < 0 ? t.downColor : Wt;
681
681
  });
682
682
  return (t, r) => e.k ? (S(), o("div", {
683
683
  key: 0,
@@ -687,23 +687,23 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
687
687
  left: `${e.pos.x}px`,
688
688
  top: `${e.pos.y}px`
689
689
  })
690
- }, [s("div", Mt, [e.k.stockCode ? (S(), o("span", Nt, O(e.k.stockCode), 1)) : a("", !0), s("span", null, O(l(e.k.timestamp)), 1)]), s("div", Pt, [
691
- s("div", Ft, [r[0] ||= s("span", null, "开", -1), s("span", { style: _({ color: p.value }) }, O(e.k.open.toFixed(2)), 5)]),
692
- s("div", It, [r[1] ||= s("span", null, "高", -1), s("span", null, O(e.k.high.toFixed(2)), 1)]),
693
- s("div", Lt, [r[2] ||= s("span", null, "低", -1), s("span", null, O(e.k.low.toFixed(2)), 1)]),
694
- s("div", Rt, [r[3] ||= s("span", null, "收", -1), s("span", { style: _({ color: m.value }) }, O(e.k.close.toFixed(2)), 5)]),
695
- typeof e.k.volume == "number" ? (S(), o("div", zt, [r[4] ||= s("span", null, "成交量", -1), s("span", null, O(u(e.k.volume)), 1)])) : a("", !0),
696
- typeof e.k.turnover == "number" ? (S(), o("div", Bt, [r[5] ||= s("span", null, "成交额", -1), s("span", null, O(u(e.k.turnover)), 1)])) : a("", !0),
697
- typeof e.k.amplitude == "number" ? (S(), o("div", Vt, [r[6] ||= s("span", null, "振幅", -1), s("span", null, O(e.k.amplitude) + "%", 1)])) : a("", !0),
698
- typeof e.k.changePercent == "number" ? (S(), o("div", Ht, [r[7] ||= s("span", null, "涨跌幅", -1), s("span", { style: _({ color: h.value }) }, O(d(e.k.changePercent, "%")), 5)])) : a("", !0),
699
- typeof e.k.changeAmount == "number" ? (S(), o("div", Ut, [r[8] ||= s("span", null, "涨跌额", -1), s("span", { style: _({ color: h.value }) }, O(d(e.k.changeAmount, "")), 5)])) : a("", !0),
700
- typeof e.k.turnoverRate == "number" ? (S(), o("div", Wt, [r[9] ||= s("span", null, "换手率", -1), s("span", null, O(e.k.turnoverRate.toFixed(2)) + "%", 1)])) : a("", !0)
690
+ }, [s("div", jt, [e.k.stockCode ? (S(), o("span", Mt, O(e.k.stockCode), 1)) : a("", !0), s("span", null, O(l(e.k.timestamp)), 1)]), s("div", Nt, [
691
+ s("div", Pt, [r[0] ||= s("span", null, "开", -1), s("span", { style: _({ color: p.value }) }, O(e.k.open.toFixed(2)), 5)]),
692
+ s("div", Ft, [r[1] ||= s("span", null, "高", -1), s("span", null, O(e.k.high.toFixed(2)), 1)]),
693
+ s("div", It, [r[2] ||= s("span", null, "低", -1), s("span", null, O(e.k.low.toFixed(2)), 1)]),
694
+ s("div", Lt, [r[3] ||= s("span", null, "收", -1), s("span", { style: _({ color: m.value }) }, O(e.k.close.toFixed(2)), 5)]),
695
+ typeof e.k.volume == "number" ? (S(), o("div", Rt, [r[4] ||= s("span", null, "成交量", -1), s("span", null, O(u(e.k.volume)), 1)])) : a("", !0),
696
+ typeof e.k.turnover == "number" ? (S(), o("div", zt, [r[5] ||= s("span", null, "成交额", -1), s("span", null, O(u(e.k.turnover)), 1)])) : a("", !0),
697
+ typeof e.k.amplitude == "number" ? (S(), o("div", Bt, [r[6] ||= s("span", null, "振幅", -1), s("span", null, O(e.k.amplitude) + "%", 1)])) : a("", !0),
698
+ typeof e.k.changePercent == "number" ? (S(), o("div", Vt, [r[7] ||= s("span", null, "涨跌幅", -1), s("span", { style: _({ color: h.value }) }, O(d(e.k.changePercent, "%")), 5)])) : a("", !0),
699
+ typeof e.k.changeAmount == "number" ? (S(), o("div", Ht, [r[8] ||= s("span", null, "涨跌额", -1), s("span", { style: _({ color: h.value }) }, O(d(e.k.changeAmount, "")), 5)])) : a("", !0),
700
+ typeof e.k.turnoverRate == "number" ? (S(), o("div", Ut, [r[9] ||= s("span", null, "换手率", -1), s("span", null, O(e.k.turnoverRate.toFixed(2)) + "%", 1)])) : a("", !0)
701
701
  ])], 6)) : a("", !0);
702
702
  }
703
- }), [["__scopeId", "data-v-a068b75e"]]), qt = { class: "marker-tooltip__title" }, Jt = {
703
+ }), [["__scopeId", "data-v-a068b75e"]]), Kt = { class: "marker-tooltip__title" }, qt = {
704
704
  key: 0,
705
705
  class: "marker-tooltip__content"
706
- }, Yt = /*#__PURE__*/ W(/* @__PURE__ */ u({
706
+ }, Jt = /*#__PURE__*/ U(/* @__PURE__ */ u({
707
707
  __name: "MarkerTooltip",
708
708
  props: {
709
709
  marker: {},
@@ -752,18 +752,18 @@ var Ne = { class: "params-header" }, Pe = { class: "header-left" }, Fe = { class
752
752
  left: `${t.pos.x + 12}px`,
753
753
  top: `${t.pos.y + 12}px`
754
754
  })
755
- }, [s("div", qt, O(f.value), 1), m.value ? (S(), o("div", Jt, [(S(!0), o(e, null, T(p.value, (e, t) => (S(), o("div", {
755
+ }, [s("div", Kt, O(f.value), 1), m.value ? (S(), o("div", qt, [(S(!0), o(e, null, T(p.value, (e, t) => (S(), o("div", {
756
756
  key: t,
757
757
  class: "row"
758
758
  }, [s("span", null, O(t), 1), s("span", null, O(h(e)), 1)]))), 128))])) : a("", !0)], 6)) : a("", !0);
759
759
  }
760
- }), [["__scopeId", "data-v-f2a21012"]]), Xt = {
760
+ }), [["__scopeId", "data-v-f2a21012"]]), Yt = {
761
761
  viewBox: "0 0 24 24",
762
762
  width: "1.2em",
763
763
  height: "1.2em"
764
764
  };
765
- function Zt(e, t) {
766
- return S(), o("svg", Xt, [...t[0] ||= [s("path", {
765
+ function Xt(e, t) {
766
+ return S(), o("svg", Yt, [...t[0] ||= [s("path", {
767
767
  fill: "none",
768
768
  stroke: "currentColor",
769
769
  "stroke-linecap": "round",
@@ -772,16 +772,16 @@ function Zt(e, t) {
772
772
  d: "M7.904 17.563a1.2 1.2 0 0 0 2.228.308l2.09-3.093l4.907 4.907a1.067 1.067 0 0 0 1.509 0l1.047-1.047a1.067 1.067 0 0 0 0-1.509l-4.907-4.907l3.113-2.09a1.2 1.2 0 0 0-.309-2.228L4 4z"
773
773
  }, null, -1)]]);
774
774
  }
775
- var Qt = m({
775
+ var Zt = m({
776
776
  name: "tabler-pointer",
777
- render: Zt
778
- }), $t = {
777
+ render: Xt
778
+ }), Qt = {
779
779
  viewBox: "0 0 24 24",
780
780
  width: "1.2em",
781
781
  height: "1.2em"
782
782
  };
783
- function en(e, t) {
784
- return S(), o("svg", $t, [...t[0] ||= [s("path", {
783
+ function $t(e, t) {
784
+ return S(), o("svg", Qt, [...t[0] ||= [s("path", {
785
785
  fill: "none",
786
786
  stroke: "currentColor",
787
787
  "stroke-linecap": "round",
@@ -790,16 +790,16 @@ function en(e, t) {
790
790
  d: "M4 19h16M4 15l4-6l4 2l4-5l4 4"
791
791
  }, null, -1)]]);
792
792
  }
793
- var tn = m({
793
+ var en = m({
794
794
  name: "tabler-chart-line",
795
- render: en
796
- }), nn = {
795
+ render: $t
796
+ }), tn = {
797
797
  viewBox: "0 0 24 24",
798
798
  width: "1.2em",
799
799
  height: "1.2em"
800
800
  };
801
- function rn(e, t) {
802
- return S(), o("svg", nn, [...t[0] ||= [s("path", {
801
+ function nn(e, t) {
802
+ return S(), o("svg", tn, [...t[0] ||= [s("path", {
803
803
  fill: "none",
804
804
  stroke: "currentColor",
805
805
  "stroke-linecap": "round",
@@ -808,16 +808,16 @@ function rn(e, t) {
808
808
  d: "M17 7L7 17M8 7h9v9"
809
809
  }, null, -1)]]);
810
810
  }
811
- var an = m({
811
+ var rn = m({
812
812
  name: "tabler-arrow-up-right",
813
- render: rn
814
- }), on = {
813
+ render: nn
814
+ }), an = {
815
815
  viewBox: "0 0 24 24",
816
816
  width: "1.2em",
817
817
  height: "1.2em"
818
818
  };
819
- function sn(e, t) {
820
- return S(), o("svg", on, [...t[0] ||= [s("path", {
819
+ function on(e, t) {
820
+ return S(), o("svg", an, [...t[0] ||= [s("path", {
821
821
  fill: "none",
822
822
  stroke: "currentColor",
823
823
  "stroke-linecap": "round",
@@ -826,16 +826,16 @@ function sn(e, t) {
826
826
  d: "M5 12h14m-6 6l6-6m-6-6l6 6"
827
827
  }, null, -1)]]);
828
828
  }
829
- var cn = m({
829
+ var sn = m({
830
830
  name: "tabler-arrow-right",
831
- render: sn
832
- }), ln = {
831
+ render: on
832
+ }), cn = {
833
833
  viewBox: "0 0 24 24",
834
834
  width: "1.2em",
835
835
  height: "1.2em"
836
836
  };
837
- function un(e, t) {
838
- return S(), o("svg", ln, [...t[0] ||= [s("path", {
837
+ function ln(e, t) {
838
+ return S(), o("svg", cn, [...t[0] ||= [s("path", {
839
839
  fill: "none",
840
840
  stroke: "currentColor",
841
841
  "stroke-linecap": "round",
@@ -844,16 +844,16 @@ function un(e, t) {
844
844
  d: "M5 12h14"
845
845
  }, null, -1)]]);
846
846
  }
847
- var dn = m({
847
+ var un = m({
848
848
  name: "tabler-minus",
849
- render: un
850
- }), fn = {
849
+ render: ln
850
+ }), dn = {
851
851
  viewBox: "0 0 24 24",
852
852
  width: "1.2em",
853
853
  height: "1.2em"
854
854
  };
855
- function pn(e, t) {
856
- return S(), o("svg", fn, [...t[0] ||= [s("path", {
855
+ function fn(e, t) {
856
+ return S(), o("svg", dn, [...t[0] ||= [s("path", {
857
857
  fill: "none",
858
858
  stroke: "currentColor",
859
859
  "stroke-linecap": "round",
@@ -862,16 +862,16 @@ function pn(e, t) {
862
862
  d: "M3 12v.01M7 12h10m4 0v.01"
863
863
  }, null, -1)]]);
864
864
  }
865
- var mn = m({
865
+ var pn = m({
866
866
  name: "tabler-separator",
867
- render: pn
868
- }), hn = {
867
+ render: fn
868
+ }), mn = {
869
869
  viewBox: "0 0 24 24",
870
870
  width: "1.2em",
871
871
  height: "1.2em"
872
872
  };
873
- function gn(e, t) {
874
- return S(), o("svg", hn, [...t[0] ||= [s("path", {
873
+ function hn(e, t) {
874
+ return S(), o("svg", mn, [...t[0] ||= [s("path", {
875
875
  fill: "none",
876
876
  stroke: "currentColor",
877
877
  "stroke-linecap": "round",
@@ -880,16 +880,16 @@ function gn(e, t) {
880
880
  d: "M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2M9 12h6m-3-3v6"
881
881
  }, null, -1)]]);
882
882
  }
883
- var _n = m({
883
+ var gn = m({
884
884
  name: "tabler-crosshair",
885
- render: gn
886
- }), vn = {
885
+ render: hn
886
+ }), _n = {
887
887
  viewBox: "0 0 24 24",
888
888
  width: "1.2em",
889
889
  height: "1.2em"
890
890
  };
891
- function yn(e, t) {
892
- return S(), o("svg", vn, [...t[0] ||= [s("g", {
891
+ function vn(e, t) {
892
+ return S(), o("svg", _n, [...t[0] ||= [s("g", {
893
893
  fill: "none",
894
894
  stroke: "currentColor",
895
895
  "stroke-linecap": "round",
@@ -897,16 +897,16 @@ function yn(e, t) {
897
897
  "stroke-width": "2"
898
898
  }, [s("path", { d: "M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m9-3h.01" }), s("path", { d: "M11 12h1v4h1" })], -1)]]);
899
899
  }
900
- var bn = m({
900
+ var yn = m({
901
901
  name: "tabler-info-circle",
902
- render: yn
903
- }), xn = {
902
+ render: vn
903
+ }), bn = {
904
904
  viewBox: "0 0 24 24",
905
905
  width: "1.2em",
906
906
  height: "1.2em"
907
907
  };
908
- function Sn(e, t) {
909
- return S(), o("svg", xn, [...t[0] ||= [s("path", {
908
+ function xn(e, t) {
909
+ return S(), o("svg", bn, [...t[0] ||= [s("path", {
910
910
  fill: "none",
911
911
  stroke: "currentColor",
912
912
  "stroke-linecap": "round",
@@ -915,16 +915,16 @@ function Sn(e, t) {
915
915
  d: "M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m-3-3v6m11 8l-6-6"
916
916
  }, null, -1)]]);
917
917
  }
918
- var Cn = m({
918
+ var Sn = m({
919
919
  name: "tabler-zoom-in",
920
- render: Sn
921
- }), wn = {
920
+ render: xn
921
+ }), Cn = {
922
922
  viewBox: "0 0 24 24",
923
923
  width: "1.2em",
924
924
  height: "1.2em"
925
925
  };
926
- function Tn(e, t) {
927
- return S(), o("svg", wn, [...t[0] ||= [s("path", {
926
+ function wn(e, t) {
927
+ return S(), o("svg", Cn, [...t[0] ||= [s("path", {
928
928
  fill: "none",
929
929
  stroke: "currentColor",
930
930
  "stroke-linecap": "round",
@@ -933,16 +933,16 @@ function Tn(e, t) {
933
933
  d: "M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m8 11l-6-6"
934
934
  }, null, -1)]]);
935
935
  }
936
- var En = m({
936
+ var Tn = m({
937
937
  name: "tabler-zoom-out",
938
- render: Tn
939
- }), Dn = {
938
+ render: wn
939
+ }), En = {
940
940
  viewBox: "0 0 24 24",
941
941
  width: "1.2em",
942
942
  height: "1.2em"
943
943
  };
944
- function On(e, t) {
945
- return S(), o("svg", Dn, [...t[0] ||= [s("path", {
944
+ function Dn(e, t) {
945
+ return S(), o("svg", En, [...t[0] ||= [s("path", {
946
946
  fill: "none",
947
947
  stroke: "currentColor",
948
948
  "stroke-linecap": "round",
@@ -951,16 +951,16 @@ function On(e, t) {
951
951
  d: "M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2"
952
952
  }, null, -1)]]);
953
953
  }
954
- var kn = m({
954
+ var On = m({
955
955
  name: "tabler-maximize",
956
- render: On
957
- }), An = {
956
+ render: Dn
957
+ }), kn = {
958
958
  viewBox: "0 0 24 24",
959
959
  width: "1.2em",
960
960
  height: "1.2em"
961
961
  };
962
- function jn(e, t) {
963
- return S(), o("svg", An, [...t[0] ||= [s("path", {
962
+ function An(e, t) {
963
+ return S(), o("svg", kn, [...t[0] ||= [s("path", {
964
964
  fill: "none",
965
965
  stroke: "currentColor",
966
966
  "stroke-linecap": "round",
@@ -969,16 +969,16 @@ function jn(e, t) {
969
969
  d: "M15 19v-2a2 2 0 0 1 2-2h2M15 5v2a2 2 0 0 0 2 2h2M5 15h2a2 2 0 0 1 2 2v2M5 9h2a2 2 0 0 0 2-2V5"
970
970
  }, null, -1)]]);
971
971
  }
972
- var Mn = m({
972
+ var jn = m({
973
973
  name: "tabler-minimize",
974
- render: jn
975
- }), Nn = {
974
+ render: An
975
+ }), Mn = {
976
976
  viewBox: "0 0 24 24",
977
977
  width: "1.2em",
978
978
  height: "1.2em"
979
979
  };
980
- function Pn(e, t) {
981
- return S(), o("svg", Nn, [...t[0] ||= [s("g", {
980
+ function Nn(e, t) {
981
+ return S(), o("svg", Mn, [...t[0] ||= [s("g", {
982
982
  fill: "none",
983
983
  stroke: "currentColor",
984
984
  "stroke-linecap": "round",
@@ -986,16 +986,16 @@ function Pn(e, t) {
986
986
  "stroke-width": "2"
987
987
  }, [s("path", { d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 0 0-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 0 0-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 0 0-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 0 0-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 0 0 1.066-2.573c-.94-1.543.826-3.31 2.37-2.37c1 .608 2.296.07 2.572-1.065" }), s("path", { d: "M9 12a3 3 0 1 0 6 0a3 3 0 0 0-6 0" })], -1)]]);
988
988
  }
989
- var Fn = m({
989
+ var Pn = m({
990
990
  name: "tabler-settings",
991
- render: Pn
992
- }), In = {
991
+ render: Nn
992
+ }), Fn = {
993
993
  viewBox: "0 0 24 24",
994
994
  width: "1.2em",
995
995
  height: "1.2em"
996
996
  };
997
- function Ln(e, t) {
998
- return S(), o("svg", In, [...t[0] ||= [s("path", {
997
+ function In(e, t) {
998
+ return S(), o("svg", Fn, [...t[0] ||= [s("path", {
999
999
  fill: "none",
1000
1000
  stroke: "currentColor",
1001
1001
  "stroke-linecap": "round",
@@ -1004,16 +1004,16 @@ function Ln(e, t) {
1004
1004
  d: "M3 5a2 2 0 1 0 4 0a2 2 0 1 0-4 0m14 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0M3 19a2 2 0 1 0 4 0a2 2 0 1 0-4 0m14 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0M5 7v10M7 5h10M7 19h10m2-12v10"
1005
1005
  }, null, -1)]]);
1006
1006
  }
1007
- var Rn = m({
1007
+ var Ln = m({
1008
1008
  name: "tabler-shape",
1009
- render: Ln
1010
- }), zn = {
1009
+ render: In
1010
+ }), Rn = {
1011
1011
  viewBox: "0 0 24 24",
1012
1012
  width: "1.2em",
1013
1013
  height: "1.2em"
1014
1014
  };
1015
- function Bn(e, t) {
1016
- return S(), o("svg", zn, [...t[0] ||= [s("path", {
1015
+ function zn(e, t) {
1016
+ return S(), o("svg", Rn, [...t[0] ||= [s("path", {
1017
1017
  fill: "none",
1018
1018
  stroke: "currentColor",
1019
1019
  "stroke-linecap": "round",
@@ -1022,16 +1022,16 @@ function Bn(e, t) {
1022
1022
  d: "M3 7a2 2 0 1 0 4 0a2 2 0 1 0-4 0m11 8a2 2 0 1 0 4 0a2 2 0 1 0-4 0m1-9a3 3 0 1 0 6 0a3 3 0 1 0-6 0M3 18a3 3 0 1 0 6 0a3 3 0 1 0-6 0m6-1l5-1.5m-7.5-7l7.81 5.37M7 7l8-1"
1023
1023
  }, null, -1)]]);
1024
1024
  }
1025
- var Vn = m({
1025
+ var Bn = m({
1026
1026
  name: "tabler-chart-dots-3",
1027
- render: Bn
1028
- }), Hn = {
1027
+ render: zn
1028
+ }), Vn = {
1029
1029
  viewBox: "0 0 24 24",
1030
1030
  width: "1.2em",
1031
1031
  height: "1.2em"
1032
1032
  };
1033
- function Un(e, t) {
1034
- return S(), o("svg", Hn, [...t[0] ||= [s("path", {
1033
+ function Hn(e, t) {
1034
+ return S(), o("svg", Vn, [...t[0] ||= [s("path", {
1035
1035
  fill: "none",
1036
1036
  stroke: "currentColor",
1037
1037
  "stroke-linecap": "round",
@@ -1040,16 +1040,16 @@ function Un(e, t) {
1040
1040
  d: "m18 10l-6-6l-6 6zm0 4l-6 6l-6-6z"
1041
1041
  }, null, -1)]]);
1042
1042
  }
1043
- var Wn = m({
1043
+ var Un = m({
1044
1044
  name: "tabler-caret-up-down",
1045
- render: Un
1046
- }), Gn = {
1045
+ render: Hn
1046
+ }), Wn = {
1047
1047
  viewBox: "0 0 24 24",
1048
1048
  width: "1.2em",
1049
1049
  height: "1.2em"
1050
1050
  };
1051
- function Kn(e, t) {
1052
- return S(), o("svg", Gn, [...t[0] ||= [s("path", {
1051
+ function Gn(e, t) {
1052
+ return S(), o("svg", Wn, [...t[0] ||= [s("path", {
1053
1053
  fill: "none",
1054
1054
  stroke: "currentColor",
1055
1055
  "stroke-linecap": "round",
@@ -1058,34 +1058,34 @@ function Kn(e, t) {
1058
1058
  d: "M8 4H5v16h3m8-16h3v16h-3"
1059
1059
  }, null, -1)]]);
1060
1060
  }
1061
- var qn = m({
1061
+ var Kn = m({
1062
1062
  name: "tabler-brackets",
1063
- render: Kn
1063
+ render: Gn
1064
1064
  });
1065
1065
  //#endregion
1066
1066
  //#region src/debug/canvasProfiler.ts
1067
- function Jn() {
1067
+ function qn() {
1068
1068
  return Object.create(null);
1069
1069
  }
1070
- function Yn() {
1070
+ function Jn() {
1071
1071
  return {
1072
- ctxMethods: Jn(),
1073
- ctxProps: Jn(),
1074
- canvasProps: Jn(),
1072
+ ctxMethods: qn(),
1073
+ ctxProps: qn(),
1074
+ canvasProps: qn(),
1075
1075
  ctxMethodSources: Object.create(null)
1076
1076
  };
1077
1077
  }
1078
- function Xn(e, t, n) {
1078
+ function Yn(e, t, n) {
1079
1079
  let r = e[t] ??= {
1080
1080
  count: 0,
1081
1081
  totalTime: 0
1082
1082
  };
1083
1083
  r.count += 1, r.totalTime += n;
1084
1084
  }
1085
- function Zn(e, t, n, r) {
1086
- Xn(e.ctxMethodSources[t] ??= Jn(), n, r);
1085
+ function Xn(e, t, n, r) {
1086
+ Yn(e.ctxMethodSources[t] ??= qn(), n, r);
1087
1087
  }
1088
- function Qn(e) {
1088
+ function Zn(e) {
1089
1089
  return Object.entries(e).filter(([, e]) => e.count > 0).map(([e, t]) => ({
1090
1090
  name: e,
1091
1091
  count: t.count,
@@ -1093,12 +1093,12 @@ function Qn(e) {
1093
1093
  averageTime: (t.totalTime / t.count).toFixed(4)
1094
1094
  })).sort((e, t) => Number(t.totalTime) - Number(e.totalTime));
1095
1095
  }
1096
- var $n = !1, er = /* @__PURE__ */ new Map(), tr = /* @__PURE__ */ new Map();
1097
- function nr(e) {
1098
- $n = e, e ? typeof window < "u" && !window.__KMAP_CANVAS_PROFILER_INSTALLED__ && ar() : or();
1096
+ var Qn = !1, $n = /* @__PURE__ */ new Map(), er = /* @__PURE__ */ new Map();
1097
+ function tr(e) {
1098
+ Qn = e, e ? typeof window < "u" && !window.__KMAP_CANVAS_PROFILER_INSTALLED__ && ir() : ar();
1099
1099
  }
1100
- function rr() {
1101
- if (!$n) return "disabled";
1100
+ function nr() {
1101
+ if (!Qn) return "disabled";
1102
1102
  let e = (/* @__PURE__ */ Error()).stack;
1103
1103
  if (!e) return "unknown";
1104
1104
  let t = e.split("\n").map((e) => e.trim()).filter(Boolean);
@@ -1113,69 +1113,69 @@ function rr() {
1113
1113
  }
1114
1114
  function Q(e, t, n, r) {
1115
1115
  let i = `${e.constructor?.name ?? "proto"}:${t}`;
1116
- if (er.has(i)) return;
1116
+ if ($n.has(i)) return;
1117
1117
  let a = Reflect.get(e, t);
1118
- typeof a == "function" && (er.set(i, a), Reflect.set(e, t, function(...e) {
1119
- if (!$n) return a.apply(this, e);
1120
- let i = r?.captureSource ? rr() : null, o = performance.now(), s = a.apply(this, e), c = performance.now() - o;
1121
- return Xn(n.ctxMethods, t, c), i && Zn(n, t, i, c), s;
1118
+ typeof a == "function" && ($n.set(i, a), Reflect.set(e, t, function(...e) {
1119
+ if (!Qn) return a.apply(this, e);
1120
+ let i = r?.captureSource ? nr() : null, o = performance.now(), s = a.apply(this, e), c = performance.now() - o;
1121
+ return Yn(n.ctxMethods, t, c), i && Xn(n, t, i, c), s;
1122
1122
  }));
1123
1123
  }
1124
- function ir(e, t, n) {
1124
+ function rr(e, t, n) {
1125
1125
  let r = Object.getOwnPropertyDescriptor(e, t);
1126
1126
  if (!r?.set || !r.configurable) return;
1127
1127
  let i = `${e.constructor?.name ?? "proto"}:${t}`;
1128
- tr.has(i) || (tr.set(i, r), Object.defineProperty(e, t, {
1128
+ er.has(i) || (er.set(i, r), Object.defineProperty(e, t, {
1129
1129
  configurable: !0,
1130
1130
  enumerable: r.enumerable ?? !1,
1131
1131
  get: r.get,
1132
1132
  set(e) {
1133
- if (!$n) {
1133
+ if (!Qn) {
1134
1134
  r.set.call(this, e);
1135
1135
  return;
1136
1136
  }
1137
1137
  let i = performance.now();
1138
- r.set.call(this, e), Xn(n, t, performance.now() - i);
1138
+ r.set.call(this, e), Yn(n, t, performance.now() - i);
1139
1139
  }
1140
1140
  }));
1141
1141
  }
1142
- function ar() {
1142
+ function ir() {
1143
1143
  if (typeof window > "u" || window.__KMAP_CANVAS_PROFILER_INSTALLED__) return;
1144
1144
  let e = CanvasRenderingContext2D?.prototype, t = HTMLCanvasElement?.prototype;
1145
1145
  if (!e || !t) return;
1146
- let n = Yn();
1147
- Q(e, "fillText", n, { captureSource: !0 }), Q(e, "measureText", n, { captureSource: !0 }), Q(e, "drawImage", n), Q(e, "save", n), Q(e, "restore", n), Q(e, "clip", n), Q(e, "setTransform", n), Q(e, "scale", n), ir(e, "font", n.ctxProps), ir(e, "filter", n.ctxProps), ir(e, "shadowBlur", n.ctxProps), ir(e, "lineWidth", n.ctxProps), ir(t, "width", n.canvasProps), ir(t, "height", n.canvasProps), window.__KMAP_CANVAS_PROFILER_METRICS__ = n, window.__KMAP_CANVAS_PROFILER_INSTALLED__ = !0, window.showCanvasReport = () => {
1146
+ let n = Jn();
1147
+ Q(e, "fillText", n, { captureSource: !0 }), Q(e, "measureText", n, { captureSource: !0 }), Q(e, "drawImage", n), Q(e, "save", n), Q(e, "restore", n), Q(e, "clip", n), Q(e, "setTransform", n), Q(e, "scale", n), rr(e, "font", n.ctxProps), rr(e, "filter", n.ctxProps), rr(e, "shadowBlur", n.ctxProps), rr(e, "lineWidth", n.ctxProps), rr(t, "width", n.canvasProps), rr(t, "height", n.canvasProps), window.__KMAP_CANVAS_PROFILER_METRICS__ = n, window.__KMAP_CANVAS_PROFILER_INSTALLED__ = !0, window.showCanvasReport = () => {
1148
1148
  let e = window.__KMAP_CANVAS_PROFILER_METRICS__;
1149
1149
  if (e) {
1150
- console.group("[kmap] Canvas profiler report"), console.log("ctx methods"), console.table(Qn(e.ctxMethods)), console.log("ctx props"), console.table(Qn(e.ctxProps)), console.log("canvas props"), console.table(Qn(e.canvasProps));
1150
+ console.group("[kmap] Canvas profiler report"), console.log("ctx methods"), console.table(Zn(e.ctxMethods)), console.log("ctx props"), console.table(Zn(e.ctxProps)), console.log("canvas props"), console.table(Zn(e.canvasProps));
1151
1151
  for (let t of ["fillText", "measureText"]) {
1152
1152
  let n = e.ctxMethodSources[t];
1153
- n && (console.log(`${t} sources`), console.table(Qn(n).slice(0, 20)));
1153
+ n && (console.log(`${t} sources`), console.table(Zn(n).slice(0, 20)));
1154
1154
  }
1155
1155
  console.groupEnd();
1156
1156
  }
1157
1157
  }, window.resetCanvasReport = () => {
1158
- window.__KMAP_CANVAS_PROFILER_METRICS__ = Yn();
1158
+ window.__KMAP_CANVAS_PROFILER_METRICS__ = Jn();
1159
1159
  }, console.info("[kmap] Canvas profiler enabled. Use window.showCanvasReport() and window.resetCanvasReport().");
1160
1160
  }
1161
- function or() {
1161
+ function ar() {
1162
1162
  if (typeof window > "u" || !window.__KMAP_CANVAS_PROFILER_INSTALLED__) return;
1163
1163
  let e = CanvasRenderingContext2D?.prototype, t = HTMLCanvasElement?.prototype;
1164
- er.forEach((n, r) => {
1164
+ $n.forEach((n, r) => {
1165
1165
  let i = r.match(/^(.+):(.+)$/);
1166
1166
  if (!i) return;
1167
1167
  let [, a, o] = i, s = null;
1168
1168
  a === "CanvasRenderingContext2D" ? s = e : a === "HTMLCanvasElement" && (s = t), s && Reflect.set(s, o, n);
1169
- }), er.clear(), tr.forEach((n, r) => {
1169
+ }), $n.clear(), er.forEach((n, r) => {
1170
1170
  let i = r.match(/^(.+):(.+)$/);
1171
1171
  if (!i) return;
1172
1172
  let [, a, o] = i, s = null;
1173
1173
  a === "CanvasRenderingContext2D" ? s = e : a === "HTMLCanvasElement" && (s = t), s && n.configurable && Object.defineProperty(s, o, n);
1174
- }), tr.clear(), window.__KMAP_CANVAS_PROFILER_INSTALLED__ = !1, window.__KMAP_CANVAS_PROFILER_METRICS__ = void 0, window.showCanvasReport = void 0, window.resetCanvasReport = void 0, console.info("[kmap] Canvas profiler disabled.");
1174
+ }), er.clear(), window.__KMAP_CANVAS_PROFILER_INSTALLED__ = !1, window.__KMAP_CANVAS_PROFILER_METRICS__ = void 0, window.showCanvasReport = void 0, window.resetCanvasReport = void 0, console.info("[kmap] Canvas profiler disabled.");
1175
1175
  }
1176
1176
  //#endregion
1177
1177
  //#region src/components/ChartSettingsDialog.vue?vue&type=script&setup=true&lang.ts
1178
- var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["onUpdate:modelValue"], ur = { class: "settings-label" }, dr = ["onUpdate:modelValue"], fr = { class: "settings-label" }, pr = ["onUpdate:modelValue"], mr = { class: "settings-header" }, hr = { class: "header-right" }, gr = { class: "settings-body" }, _r = /*#__PURE__*/ W(/* @__PURE__ */ u({
1178
+ var or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["onUpdate:modelValue"], lr = { class: "settings-label" }, ur = ["onUpdate:modelValue"], dr = { class: "settings-label" }, fr = ["onUpdate:modelValue"], pr = { class: "settings-header" }, mr = { class: "header-right" }, hr = { class: "settings-body" }, gr = /*#__PURE__*/ U(/* @__PURE__ */ u({
1179
1179
  __name: "ChartSettingsDialog",
1180
1180
  props: { show: { type: Boolean } },
1181
1181
  emits: ["close", "confirm"],
@@ -1183,7 +1183,7 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1183
1183
  let f = u, p = d, m = Me(), h = r(() => B.filter((e) => e.group === "main")), g = r(() => B.filter((e) => e.group === "experimental")), _ = r(() => B.filter((e) => e.group === "style")), v = w(!1);
1184
1184
  function y() {
1185
1185
  try {
1186
- let e = localStorage.getItem(ge);
1186
+ let e = localStorage.getItem(he);
1187
1187
  if (e) {
1188
1188
  let t = JSON.parse(e), n = {};
1189
1189
  return B.forEach((e) => {
@@ -1231,16 +1231,16 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1231
1231
  stroke: "currentColor",
1232
1232
  "stroke-width": "2"
1233
1233
  }, [s("path", { d: "M18 6L6 18M6 6l12 12" })], -1)]])])]),
1234
- s("div", sr, [
1234
+ s("div", or, [
1235
1235
  h.value.length > 0 ? (S(), o(e, { key: 0 }, [d[8] ||= s("div", { class: "settings-section-divider" }, [s("span", { class: "settings-section-label" }, "主图设置")], -1), (S(!0), o(e, null, T(h.value, (e) => (S(), o("div", {
1236
1236
  key: e.key,
1237
1237
  class: "settings-item"
1238
- }, [s("label", cr, [s("span", null, O(e.label), 1), e.type === "boolean" ? P((S(), o("input", {
1238
+ }, [s("label", sr, [s("span", null, O(e.label), 1), e.type === "boolean" ? P((S(), o("input", {
1239
1239
  key: 0,
1240
1240
  type: "checkbox",
1241
1241
  class: "settings-checkbox",
1242
1242
  "onUpdate:modelValue": (t) => b.value[e.key] = t
1243
- }, null, 8, lr)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(Ee, {
1243
+ }, null, 8, cr)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(K, {
1244
1244
  key: 1,
1245
1245
  "model-value": String(b.value[e.key]),
1246
1246
  options: e.options,
@@ -1256,12 +1256,12 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1256
1256
  (S(!0), o(e, null, T(_.value, (e) => (S(), o("div", {
1257
1257
  key: e.key,
1258
1258
  class: "settings-item"
1259
- }, [s("label", ur, [s("span", null, O(e.label), 1), e.type === "boolean" ? P((S(), o("input", {
1259
+ }, [s("label", lr, [s("span", null, O(e.label), 1), e.type === "boolean" ? P((S(), o("input", {
1260
1260
  key: 0,
1261
1261
  type: "checkbox",
1262
1262
  class: "settings-checkbox",
1263
1263
  "onUpdate:modelValue": (t) => b.value[e.key] = t
1264
- }, null, 8, dr)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(Ee, {
1264
+ }, null, 8, ur)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(K, {
1265
1265
  key: 1,
1266
1266
  "model-value": String(b.value[e.key]),
1267
1267
  options: e.options,
@@ -1288,12 +1288,12 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1288
1288
  g.value.length > 0 ? (S(), o(e, { key: 1 }, [d[10] ||= s("div", { class: "settings-section-divider" }, [s("span", { class: "settings-section-label" }, "实验性 / 调试设置")], -1), (S(!0), o(e, null, T(g.value, (e) => (S(), o("div", {
1289
1289
  key: e.key,
1290
1290
  class: "settings-item experimental"
1291
- }, [s("label", fr, [s("span", null, O(e.label), 1), e.type === "boolean" ? P((S(), o("input", {
1291
+ }, [s("label", dr, [s("span", null, O(e.label), 1), e.type === "boolean" ? P((S(), o("input", {
1292
1292
  key: 0,
1293
1293
  type: "checkbox",
1294
1294
  class: "settings-checkbox",
1295
1295
  "onUpdate:modelValue": (t) => b.value[e.key] = t
1296
- }, null, 8, pr)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(Ee, {
1296
+ }, null, 8, fr)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(K, {
1297
1297
  key: 1,
1298
1298
  "model-value": String(b.value[e.key]),
1299
1299
  options: e.options,
@@ -1339,7 +1339,7 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1339
1339
  default: N(() => [s("div", {
1340
1340
  class: "settings-modal",
1341
1341
  onClick: d[4] ||= I(() => {}, ["stop"])
1342
- }, [s("div", mr, [d[15] ||= s("div", { class: "header-left" }, [s("span", { class: "settings-title" }, "颜色预设"), s("span", { class: "settings-subtitle" }, "自定义图表颜色")], -1), s("div", hr, [s("button", {
1342
+ }, [s("div", pr, [d[15] ||= s("div", { class: "header-left" }, [s("span", { class: "settings-title" }, "颜色预设"), s("span", { class: "settings-subtitle" }, "自定义图表颜色")], -1), s("div", mr, [s("button", {
1343
1343
  class: "settings-close",
1344
1344
  onClick: d[2] ||= (e) => v.value = !1
1345
1345
  }, [...d[14] ||= [s("svg", {
@@ -1347,7 +1347,7 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1347
1347
  fill: "none",
1348
1348
  stroke: "currentColor",
1349
1349
  "stroke-width": "2"
1350
- }, [s("path", { d: "M18 6L6 18M6 6l12 12" })], -1)]])])]), s("div", gr, [l(xe, {
1350
+ }, [s("path", { d: "M18 6L6 18M6 6l12 12" })], -1)]])])]), s("div", hr, [l(W, {
1351
1351
  "color-preset-settings": b.value.colorPresetSettings,
1352
1352
  "onUpdate:colorPresetSettings": d[3] ||= (e) => b.value = {
1353
1353
  ...b.value,
@@ -1359,18 +1359,18 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1359
1359
  _: 1
1360
1360
  })], 8, ["to"]));
1361
1361
  }
1362
- }), [["__scopeId", "data-v-e04604ac"]]), vr = {
1362
+ }), [["__scopeId", "data-v-e04604ac"]]), _r = {
1363
1363
  class: "left-toolbar",
1364
1364
  "aria-label": "图表工具栏"
1365
- }, yr = { class: "left-toolbar__group" }, br = [
1365
+ }, vr = { class: "left-toolbar__group" }, yr = [
1366
1366
  "title",
1367
1367
  "aria-label",
1368
1368
  "onClick"
1369
- ], xr = ["onClick"], Sr = [
1369
+ ], br = ["onClick"], xr = [
1370
1370
  "title",
1371
1371
  "aria-label",
1372
1372
  "onClick"
1373
- ], Cr = { class: "left-toolbar__group" }, wr = { class: "left-toolbar__group" }, Tr = ["title", "aria-label"], Er = { class: "left-toolbar__group" }, Dr = /*#__PURE__*/ W(/* @__PURE__ */ u({
1373
+ ], Sr = { class: "left-toolbar__group" }, Cr = { class: "left-toolbar__group" }, wr = ["title", "aria-label"], Tr = { class: "left-toolbar__group" }, Er = /*#__PURE__*/ U(/* @__PURE__ */ u({
1374
1374
  __name: "LeftToolbar",
1375
1375
  props: { isFullscreen: { type: Boolean } },
1376
1376
  emits: [
@@ -1385,81 +1385,81 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1385
1385
  {
1386
1386
  id: "cursor",
1387
1387
  title: "光标",
1388
- icon: Qt
1388
+ icon: Zt
1389
1389
  },
1390
1390
  {
1391
1391
  id: "lines",
1392
1392
  title: "线条",
1393
- icon: tn,
1393
+ icon: en,
1394
1394
  children: [
1395
1395
  {
1396
1396
  id: "trend-line",
1397
1397
  title: "线段",
1398
- icon: tn
1398
+ icon: en
1399
1399
  },
1400
1400
  {
1401
1401
  id: "ray",
1402
1402
  title: "射线",
1403
- icon: an
1403
+ icon: rn
1404
1404
  },
1405
1405
  {
1406
1406
  id: "h-line",
1407
1407
  title: "水平线",
1408
- icon: dn
1408
+ icon: un
1409
1409
  },
1410
1410
  {
1411
1411
  id: "h-ray",
1412
1412
  title: "水平射线",
1413
- icon: cn
1413
+ icon: sn
1414
1414
  },
1415
1415
  {
1416
1416
  id: "v-line",
1417
1417
  title: "垂直线",
1418
- icon: mn
1418
+ icon: pn
1419
1419
  },
1420
1420
  {
1421
1421
  id: "crosshair-line",
1422
1422
  title: "十字线",
1423
- icon: _n
1423
+ icon: gn
1424
1424
  },
1425
1425
  {
1426
1426
  id: "info-line",
1427
1427
  title: "信息线",
1428
- icon: bn
1428
+ icon: yn
1429
1429
  }
1430
1430
  ]
1431
1431
  },
1432
1432
  {
1433
1433
  id: "channels",
1434
1434
  title: "通道",
1435
- icon: Rn,
1435
+ icon: Ln,
1436
1436
  children: [
1437
1437
  {
1438
1438
  id: "parallel-channel",
1439
1439
  title: "平行通道",
1440
- icon: Rn
1440
+ icon: Ln
1441
1441
  },
1442
1442
  {
1443
1443
  id: "regression-channel",
1444
1444
  title: "回归趋势",
1445
- icon: Vn
1445
+ icon: Bn
1446
1446
  },
1447
1447
  {
1448
1448
  id: "flat-line",
1449
1449
  title: "平滑顶底",
1450
- icon: Wn
1450
+ icon: Un
1451
1451
  },
1452
1452
  {
1453
1453
  id: "disjoint-channel",
1454
1454
  title: "不相交通道",
1455
- icon: qn
1455
+ icon: Kn
1456
1456
  }
1457
1457
  ]
1458
1458
  }
1459
1459
  ], d = c, f = w("cursor"), p = w(null), m = w(!1);
1460
1460
  function h() {
1461
1461
  try {
1462
- let e = localStorage.getItem(ge);
1462
+ let e = localStorage.getItem(he);
1463
1463
  if (e) {
1464
1464
  let t = JSON.parse(e), n = { ...t };
1465
1465
  return B.forEach((e) => {
@@ -1474,7 +1474,7 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1474
1474
  }
1475
1475
  function _(e) {
1476
1476
  try {
1477
- localStorage.setItem(ge, JSON.stringify(e));
1477
+ localStorage.setItem(he, JSON.stringify(e));
1478
1478
  } catch {}
1479
1479
  }
1480
1480
  let v = w(h());
@@ -1506,17 +1506,17 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1506
1506
  }
1507
1507
  r({ getSettings: j });
1508
1508
  function M(e) {
1509
- v.value = { ...e }, _(v.value), nr(!!v.value.enableCanvasProfiler), d("settingsChange", { ...v.value }), m.value = !1;
1509
+ v.value = { ...e }, _(v.value), tr(!!v.value.enableCanvasProfiler), d("settingsChange", { ...v.value }), m.value = !1;
1510
1510
  }
1511
1511
  function P(e) {
1512
1512
  e.target.closest(".tool-item") || (p.value = null);
1513
1513
  }
1514
1514
  return y(() => {
1515
- document.addEventListener("click", P, !0), d("settingsChange", { ...v.value }), nr(!!v.value.enableCanvasProfiler);
1515
+ document.addEventListener("click", P, !0), d("settingsChange", { ...v.value }), tr(!!v.value.enableCanvasProfiler);
1516
1516
  }), x(() => {
1517
1517
  document.removeEventListener("click", P, !0);
1518
- }), (r, c) => (S(), o(e, null, [s("nav", vr, [
1519
- s("div", yr, [(S(), o(e, null, T(u, (t) => s("div", {
1518
+ }), (r, c) => (S(), o(e, null, [s("nav", _r, [
1519
+ s("div", vr, [(S(), o(e, null, T(u, (t) => s("div", {
1520
1520
  key: t.id,
1521
1521
  class: "tool-item"
1522
1522
  }, [s("button", {
@@ -1536,7 +1536,7 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1536
1536
  class: g(["corner-indicator", { open: p.value === t.id }]),
1537
1537
  onClick: I((e) => O(t.id), ["stop"]),
1538
1538
  "aria-label": "展开子菜单"
1539
- }, null, 10, xr)) : a("", !0)], 42, br), l(n, { name: "dropdown" }, {
1539
+ }, null, 10, br)) : a("", !0)], 42, yr), l(n, { name: "dropdown" }, {
1540
1540
  default: N(() => [p.value === t.id && t.children && t.children.length ? (S(), o("div", {
1541
1541
  key: 0,
1542
1542
  class: "tool-dropdown",
@@ -1553,11 +1553,11 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1553
1553
  }, [(S(), i(E(e.icon), {
1554
1554
  class: "tool-icon",
1555
1555
  "aria-hidden": "true"
1556
- }))], 10, Sr))), 128))], 32)) : a("", !0)]),
1556
+ }))], 10, xr))), 128))], 32)) : a("", !0)]),
1557
1557
  _: 2
1558
1558
  }, 1024)])), 64))]),
1559
1559
  c[22] ||= s("span", { class: "left-toolbar__divider" }, null, -1),
1560
- s("div", Cr, [s("button", {
1560
+ s("div", Sr, [s("button", {
1561
1561
  type: "button",
1562
1562
  class: "left-toolbar__button",
1563
1563
  title: "放大",
@@ -1566,7 +1566,7 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1566
1566
  onPointerdown: c[7] ||= I(() => {}, ["stop"]),
1567
1567
  onPointermove: c[8] ||= I(() => {}, ["stop"]),
1568
1568
  onPointerup: c[9] ||= I(() => {}, ["stop"])
1569
- }, [l(k(Cn), {
1569
+ }, [l(k(Sn), {
1570
1570
  class: "tool-icon",
1571
1571
  "aria-hidden": "true"
1572
1572
  })], 32), s("button", {
@@ -1578,12 +1578,12 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1578
1578
  onPointerdown: c[11] ||= I(() => {}, ["stop"]),
1579
1579
  onPointermove: c[12] ||= I(() => {}, ["stop"]),
1580
1580
  onPointerup: c[13] ||= I(() => {}, ["stop"])
1581
- }, [l(k(En), {
1581
+ }, [l(k(Tn), {
1582
1582
  class: "tool-icon",
1583
1583
  "aria-hidden": "true"
1584
1584
  })], 32)]),
1585
1585
  c[23] ||= s("span", { class: "left-toolbar__divider" }, null, -1),
1586
- s("div", wr, [s("button", {
1586
+ s("div", Cr, [s("button", {
1587
1587
  type: "button",
1588
1588
  class: "left-toolbar__button",
1589
1589
  title: t.isFullscreen ? "退出全屏" : "全屏显示",
@@ -1592,17 +1592,17 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1592
1592
  onPointerdown: c[15] ||= I(() => {}, ["stop"]),
1593
1593
  onPointermove: c[16] ||= I(() => {}, ["stop"]),
1594
1594
  onPointerup: c[17] ||= I(() => {}, ["stop"])
1595
- }, [t.isFullscreen ? (S(), i(k(Mn), {
1595
+ }, [t.isFullscreen ? (S(), i(k(jn), {
1596
1596
  key: 0,
1597
1597
  class: "tool-icon",
1598
1598
  "aria-hidden": "true"
1599
- })) : (S(), i(k(kn), {
1599
+ })) : (S(), i(k(On), {
1600
1600
  key: 1,
1601
1601
  class: "tool-icon",
1602
1602
  "aria-hidden": "true"
1603
- }))], 40, Tr)]),
1603
+ }))], 40, wr)]),
1604
1604
  c[24] ||= s("span", { class: "left-toolbar__divider" }, null, -1),
1605
- s("div", Er, [s("button", {
1605
+ s("div", Tr, [s("button", {
1606
1606
  type: "button",
1607
1607
  class: "left-toolbar__button",
1608
1608
  title: "设置",
@@ -1611,17 +1611,17 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1611
1611
  onPointerdown: c[18] ||= I(() => {}, ["stop"]),
1612
1612
  onPointermove: c[19] ||= I(() => {}, ["stop"]),
1613
1613
  onPointerup: c[20] ||= I(() => {}, ["stop"])
1614
- }, [l(k(Fn), {
1614
+ }, [l(k(Pn), {
1615
1615
  class: "tool-icon",
1616
1616
  "aria-hidden": "true"
1617
1617
  })], 32)])
1618
- ]), l(_r, {
1618
+ ]), l(gr, {
1619
1619
  show: m.value,
1620
1620
  onClose: c[21] ||= (e) => m.value = !1,
1621
1621
  onConfirm: M
1622
1622
  }, null, 8, ["show"])], 64));
1623
1623
  }
1624
- }), [["__scopeId", "data-v-66411b58"]]), Or = /* @__PURE__ */ u({
1624
+ }), [["__scopeId", "data-v-66411b58"]]), Dr = /* @__PURE__ */ u({
1625
1625
  __name: "KLineLevelDropdown",
1626
1626
  props: { modelValue: {} },
1627
1627
  emits: ["update:modelValue"],
@@ -1664,7 +1664,7 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1664
1664
  value: "yearly"
1665
1665
  }
1666
1666
  ], r = t;
1667
- return (t, a) => (S(), i(Ee, {
1667
+ return (t, a) => (S(), i(K, {
1668
1668
  "model-value": e.modelValue,
1669
1669
  options: n,
1670
1670
  label: "级别",
@@ -1673,13 +1673,13 @@ var sr = { class: "settings-body" }, cr = { class: "settings-label" }, lr = ["on
1673
1673
  "onUpdate:modelValue": a[0] ||= (e) => r("update:modelValue", e)
1674
1674
  }, null, 8, ["model-value"]));
1675
1675
  }
1676
- }), kr = {
1676
+ }), Or = {
1677
1677
  viewBox: "0 0 24 24",
1678
1678
  width: "1.2em",
1679
1679
  height: "1.2em"
1680
1680
  };
1681
- function Ar(e, t) {
1682
- return S(), o("svg", kr, [...t[0] ||= [s("path", {
1681
+ function kr(e, t) {
1682
+ return S(), o("svg", Or, [...t[0] ||= [s("path", {
1683
1683
  fill: "none",
1684
1684
  stroke: "currentColor",
1685
1685
  "stroke-linecap": "round",
@@ -1688,26 +1688,26 @@ function Ar(e, t) {
1688
1688
  d: "M12 9v4m-1.637-9.409L2.257 17.125a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636-2.87L13.637 3.59a1.914 1.914 0 0 0-3.274 0M12 16h.01"
1689
1689
  }, null, -1)]]);
1690
1690
  }
1691
- var jr = m({
1691
+ var Ar = m({
1692
1692
  name: "tabler-alert-triangle",
1693
- render: Ar
1694
- }), Mr = ["title", "aria-expanded"], Nr = { class: "symbol-chip__code" }, Pr = {
1693
+ render: kr
1694
+ }), jr = ["title", "aria-expanded"], Mr = { class: "symbol-chip__code" }, Nr = {
1695
1695
  key: 0,
1696
1696
  class: "symbol-chip__spinner",
1697
1697
  "aria-hidden": "true"
1698
- }, Fr = {
1698
+ }, Pr = {
1699
1699
  key: 0,
1700
1700
  class: "symbol-popover",
1701
1701
  role: "dialog",
1702
1702
  "aria-label": "切换合约"
1703
- }, Ir = { class: "symbol-search" }, Lr = {
1703
+ }, Fr = { class: "symbol-search" }, Ir = {
1704
1704
  class: "symbol-list",
1705
1705
  role: "listbox",
1706
1706
  "aria-label": "商品列表"
1707
- }, Rr = {
1707
+ }, Lr = {
1708
1708
  key: 0,
1709
1709
  class: "symbol-list__empty"
1710
- }, zr = {
1710
+ }, Rr = {
1711
1711
  width: "32",
1712
1712
  height: "32",
1713
1713
  viewBox: "0 0 32 32",
@@ -1716,7 +1716,7 @@ var jr = m({
1716
1716
  "margin-bottom": "8px",
1717
1717
  opacity: "0.35"
1718
1718
  }
1719
- }, Br = ["aria-selected", "onClick"], Vr = { class: "symbol-list__left" }, Hr = { class: "symbol-list__code" }, Ur = { class: "symbol-list__desc" }, Wr = { class: "symbol-list__exchange" }, Gr = /*#__PURE__*/ W(/* @__PURE__ */ u({
1719
+ }, zr = ["aria-selected", "onClick"], Br = { class: "symbol-list__left" }, Vr = { class: "symbol-list__code" }, Hr = { class: "symbol-list__desc" }, Ur = { class: "symbol-list__exchange" }, Wr = /*#__PURE__*/ U(/* @__PURE__ */ u({
1720
1720
  __name: "SymbolSelector",
1721
1721
  props: {
1722
1722
  symbol: {},
@@ -1726,24 +1726,27 @@ var jr = m({
1726
1726
  },
1727
1727
  emits: ["change"],
1728
1728
  setup(t, { emit: c }) {
1729
- let u = t, d = c, f = w(!1), p = w(""), m = w(null), _ = w(null), b = r(() => {
1729
+ let u = t, d = c, f = w(!1), p = w(""), m = w(null), _ = w(null), b = r(() => u.symbols.find((e) => e.code === u.symbol)), x = r(() => {
1730
+ let e = b.value;
1731
+ return e ? `${e.code} - ${e.description}` : u.symbol;
1732
+ }), C = r(() => {
1730
1733
  let e = p.value.trim().toLowerCase();
1731
1734
  return e ? u.symbols.filter((t) => t.code.toLowerCase().includes(e) || t.description.toLowerCase().includes(e) || t.exchange.toLowerCase().includes(e)) : u.symbols;
1732
1735
  });
1733
- function x() {
1736
+ function E() {
1734
1737
  f.value = !f.value, f.value && h(() => m.value?.focus());
1735
1738
  }
1736
- function C() {
1739
+ function D() {
1737
1740
  p.value = "", m.value?.focus();
1738
1741
  }
1739
- function E() {}
1740
- function D(e) {
1742
+ function A() {}
1743
+ function F(e) {
1741
1744
  d("change", e), f.value = !1, p.value = "";
1742
1745
  }
1743
- function A(e) {
1746
+ function I(e) {
1744
1747
  _.value && !_.value.contains(e.target) && (f.value = !1);
1745
1748
  }
1746
- return y(() => document.addEventListener("mousedown", A)), v(() => document.removeEventListener("mousedown", A)), M(() => u.symbol, () => {
1749
+ return y(() => document.addEventListener("mousedown", I)), v(() => document.removeEventListener("mousedown", I)), M(() => u.symbol, () => {
1747
1750
  f.value = !1, p.value = "";
1748
1751
  }), (r, c) => (S(), o("div", {
1749
1752
  ref_key: "chipWrapRef",
@@ -1752,16 +1755,16 @@ var jr = m({
1752
1755
  }, [s("button", {
1753
1756
  type: "button",
1754
1757
  class: g(["symbol-chip", { "is-open": f.value }]),
1755
- title: t.symbol,
1758
+ title: x.value,
1756
1759
  "aria-expanded": f.value,
1757
1760
  "aria-haspopup": "dialog",
1758
- onClick: x
1759
- }, [s("span", Nr, O(t.symbol), 1), t.loading ? (S(), o("span", Pr)) : t.error ? (S(), i(k(jr), {
1761
+ onClick: E
1762
+ }, [s("span", Mr, O(x.value), 1), t.loading ? (S(), o("span", Nr)) : t.error ? (S(), i(k(Ar), {
1760
1763
  key: 1,
1761
1764
  class: "symbol-chip__warn",
1762
1765
  "aria-hidden": "true"
1763
- })) : a("", !0)], 10, Mr), l(n, { name: "symbol-popover" }, {
1764
- default: N(() => [f.value ? (S(), o("div", Fr, [s("div", Ir, [
1766
+ })) : a("", !0)], 10, jr), l(n, { name: "symbol-popover" }, {
1767
+ default: N(() => [f.value ? (S(), o("div", Pr, [s("div", Fr, [
1765
1768
  c[2] ||= s("span", {
1766
1769
  class: "symbol-search__icon",
1767
1770
  "aria-hidden": "true"
@@ -1795,14 +1798,14 @@ var jr = m({
1795
1798
  autocomplete: "off",
1796
1799
  spellcheck: "false",
1797
1800
  "aria-label": "搜索商品",
1798
- onInput: E
1801
+ onInput: A
1799
1802
  }, null, 544), [[j, p.value]]),
1800
1803
  p.value ? (S(), o("button", {
1801
1804
  key: 0,
1802
1805
  type: "button",
1803
1806
  class: "symbol-search__clear",
1804
1807
  "aria-label": "清空搜索",
1805
- onClick: C
1808
+ onClick: D
1806
1809
  }, [...c[1] ||= [s("svg", {
1807
1810
  class: "delete-icon",
1808
1811
  viewBox: "0 0 24 24",
@@ -1817,7 +1820,7 @@ var jr = m({
1817
1820
  s("path", { d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" }),
1818
1821
  s("path", { d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" })
1819
1822
  ], -1)]])) : a("", !0)
1820
- ]), s("div", Lr, [b.value.length === 0 ? (S(), o("div", Rr, [(S(), o("svg", zr, [...c[3] ||= [s("circle", {
1823
+ ]), s("div", Ir, [C.value.length === 0 ? (S(), o("div", Lr, [(S(), o("svg", Rr, [...c[3] ||= [s("circle", {
1821
1824
  cx: "13",
1822
1825
  cy: "13",
1823
1826
  r: "10",
@@ -1831,19 +1834,22 @@ var jr = m({
1831
1834
  stroke: "currentColor",
1832
1835
  "stroke-width": "2",
1833
1836
  "stroke-linecap": "round"
1834
- }, null, -1)]])), c[4] ||= s("span", null, "未找到相关商品", -1)])) : a("", !0), (S(!0), o(e, null, T(b.value, (e) => (S(), o("button", {
1837
+ }, null, -1)]])), c[4] ||= s("span", null, "未找到相关商品", -1)])) : a("", !0), (S(!0), o(e, null, T(C.value, (e) => (S(), o("button", {
1835
1838
  key: e.code,
1836
1839
  type: "button",
1837
1840
  class: g(["symbol-list__item", { "is-active": e.code === t.symbol }]),
1838
1841
  role: "option",
1839
1842
  "aria-selected": e.code === t.symbol,
1840
- onClick: (t) => D(e)
1841
- }, [s("span", Vr, [s("span", Hr, O(e.code), 1), s("span", Ur, O(e.description), 1)]), s("span", Wr, O(e.exchange), 1)], 10, Br))), 128))])])) : a("", !0)]),
1843
+ onClick: (t) => F(e)
1844
+ }, [s("span", Br, [s("span", Vr, O(e.code), 1), s("span", Hr, O(e.description), 1)]), s("span", Ur, O(e.exchange), 1)], 10, zr))), 128))])])) : a("", !0)]),
1842
1845
  _: 1
1843
1846
  })], 512));
1844
1847
  }
1845
- }), [["__scopeId", "data-v-e22f59e1"]]), Kr = ["aria-expanded"], qr = {
1848
+ }), [["__scopeId", "data-v-8a2877e0"]]), Gr = ["aria-expanded"], Kr = {
1846
1849
  key: 0,
1850
+ class: "compare-chip__spinner"
1851
+ }, qr = {
1852
+ key: 1,
1847
1853
  class: "compare-chip__badge"
1848
1854
  }, Jr = {
1849
1855
  key: 0,
@@ -1873,40 +1879,42 @@ var jr = m({
1873
1879
  key: 0,
1874
1880
  class: "compare-list__check",
1875
1881
  "aria-hidden": "true"
1876
- }, di = /*#__PURE__*/ W(/* @__PURE__ */ u({
1882
+ }, di = /*#__PURE__*/ U(/* @__PURE__ */ u({
1877
1883
  __name: "CompareSymbolSelector",
1878
1884
  props: {
1879
1885
  symbols: {},
1880
- selected: { default: () => [] }
1886
+ selected: { default: () => [] },
1887
+ comparisonColors: {},
1888
+ comparisonLoading: { type: Boolean }
1881
1889
  },
1882
1890
  emits: ["add", "remove"],
1883
1891
  setup(t, { emit: i }) {
1884
- let c = t, u = i, d = w(!1), f = w(""), p = w(null), m = w(null), _ = r(() => new Set(c.selected ?? [])), b = r(() => {
1885
- let e = _.value;
1892
+ let c = t, u = i, d = w(!1), f = w(""), p = w(null), m = w(null), b = r(() => new Set(c.selected ?? [])), x = r(() => {
1893
+ let e = b.value;
1886
1894
  return c.symbols.filter((t) => e.has(t.code));
1887
- }), x = r(() => {
1895
+ }), C = r(() => {
1888
1896
  let e = f.value.trim().toLowerCase();
1889
1897
  return e ? c.symbols.filter((t) => t.code.toLowerCase().includes(e) || t.description.toLowerCase().includes(e) || t.exchange.toLowerCase().includes(e)) : c.symbols;
1890
1898
  });
1891
- function C(e) {
1892
- return _.value.has(e);
1893
- }
1894
1899
  function E(e) {
1895
- C(e.code) ? u("remove", e.code) : u("add", e);
1900
+ return b.value.has(e);
1896
1901
  }
1897
1902
  function D(e) {
1903
+ E(e.code) ? u("remove", e.code) : u("add", e);
1904
+ }
1905
+ function k(e) {
1898
1906
  u("remove", e);
1899
1907
  }
1900
- function k() {
1908
+ function A() {
1901
1909
  d.value = !d.value, d.value && h(() => p.value?.focus());
1902
1910
  }
1903
- function A() {
1911
+ function M() {
1904
1912
  f.value = "", p.value?.focus();
1905
1913
  }
1906
- function M(e) {
1914
+ function F(e) {
1907
1915
  m.value && !m.value.contains(e.target) && (d.value = !1, f.value = "");
1908
1916
  }
1909
- return y(() => document.addEventListener("mousedown", M)), v(() => document.removeEventListener("mousedown", M)), (r, i) => (S(), o("div", {
1917
+ return y(() => document.addEventListener("mousedown", F)), v(() => document.removeEventListener("mousedown", F)), (r, i) => (S(), o("div", {
1910
1918
  ref_key: "rootRef",
1911
1919
  ref: m,
1912
1920
  class: "compare-chip-wrap"
@@ -1916,15 +1924,16 @@ var jr = m({
1916
1924
  title: "比较商品",
1917
1925
  "aria-expanded": d.value,
1918
1926
  "aria-haspopup": "dialog",
1919
- onClick: k
1927
+ onClick: A
1920
1928
  }, [
1921
1929
  i[1] ||= s("span", {
1922
1930
  class: "compare-chip__icon",
1923
1931
  "aria-hidden": "true"
1924
1932
  }, "+", -1),
1925
1933
  i[2] ||= s("span", { class: "compare-chip__text" }, "比较商品", -1),
1934
+ t.comparisonLoading ? (S(), o("span", Kr)) : a("", !0),
1926
1935
  t.selected.length > 0 ? (S(), o("span", qr, O(t.selected.length), 1)) : a("", !0)
1927
- ], 10, Kr), l(n, { name: "symbol-popover" }, {
1936
+ ], 10, Gr), l(n, { name: "symbol-popover" }, {
1928
1937
  default: N(() => [d.value ? (S(), o("div", Jr, [
1929
1938
  s("div", Yr, [
1930
1939
  i[4] ||= s("span", {
@@ -1966,7 +1975,7 @@ var jr = m({
1966
1975
  type: "button",
1967
1976
  class: "compare-search__clear",
1968
1977
  "aria-label": "清空搜索",
1969
- onClick: A
1978
+ onClick: M
1970
1979
  }, [...i[3] ||= [s("svg", {
1971
1980
  class: "delete-icon",
1972
1981
  viewBox: "0 0 24 24",
@@ -1982,17 +1991,21 @@ var jr = m({
1982
1991
  s("path", { d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" })
1983
1992
  ], -1)]])) : a("", !0)
1984
1993
  ]),
1985
- t.selected.length > 0 ? (S(), o("div", Xr, [i[6] ||= s("div", { class: "compare-selected__header" }, [s("span", { class: "compare-selected__title" }, "已添加商品")], -1), s("div", Zr, [(S(!0), o(e, null, T(b.value, (e) => (S(), o("div", {
1994
+ t.selected.length > 0 ? (S(), o("div", Xr, [i[6] ||= s("div", { class: "compare-selected__header" }, [s("span", { class: "compare-selected__title" }, "已添加商品")], -1), s("div", Zr, [(S(!0), o(e, null, T(x.value, (e) => (S(), o("div", {
1986
1995
  key: e.code,
1987
1996
  class: "compare-selected__item"
1988
1997
  }, [
1998
+ s("span", {
1999
+ class: "compare-selected__color",
2000
+ style: _({ background: t.comparisonColors?.get(e.code) ?? "#888" })
2001
+ }, null, 4),
1989
2002
  s("span", Qr, O(e.code), 1),
1990
2003
  s("span", $r, O(e.description), 1),
1991
2004
  s("button", {
1992
2005
  type: "button",
1993
2006
  class: "compare-selected__remove",
1994
2007
  "aria-label": "移除 " + e.code,
1995
- onClick: (t) => D(e.code)
2008
+ onClick: (t) => k(e.code)
1996
2009
  }, [...i[5] ||= [s("svg", {
1997
2010
  viewBox: "0 0 24 24",
1998
2011
  width: "12",
@@ -2004,7 +2017,7 @@ var jr = m({
2004
2017
  "stroke-linejoin": "round"
2005
2018
  }, [s("path", { d: "M18 6L6 18" }), s("path", { d: "M6 6l12 12" })], -1)]], 8, ei)
2006
2019
  ]))), 128))])])) : a("", !0),
2007
- s("div", ti, [x.value.length === 0 ? (S(), o("div", ni, [(S(), o("svg", ri, [...i[7] ||= [s("circle", {
2020
+ s("div", ti, [C.value.length === 0 ? (S(), o("div", ni, [(S(), o("svg", ri, [...i[7] ||= [s("circle", {
2008
2021
  cx: "13",
2009
2022
  cy: "13",
2010
2023
  r: "10",
@@ -2018,14 +2031,14 @@ var jr = m({
2018
2031
  stroke: "currentColor",
2019
2032
  "stroke-width": "2",
2020
2033
  "stroke-linecap": "round"
2021
- }, null, -1)]])), i[8] ||= s("span", null, "未找到相关商品", -1)])) : a("", !0), (S(!0), o(e, null, T(x.value, (e) => (S(), o("button", {
2034
+ }, null, -1)]])), i[8] ||= s("span", null, "未找到相关商品", -1)])) : a("", !0), (S(!0), o(e, null, T(C.value, (e) => (S(), o("button", {
2022
2035
  key: e.code,
2023
2036
  type: "button",
2024
- class: g(["compare-list__item", { "is-selected": C(e.code) }]),
2037
+ class: g(["compare-list__item", { "is-selected": E(e.code) }]),
2025
2038
  role: "option",
2026
- "aria-selected": C(e.code),
2027
- onClick: (t) => E(e)
2028
- }, [s("span", ai, [s("span", oi, O(e.code), 1), s("span", si, O(e.description), 1)]), s("span", ci, [s("span", li, O(e.exchange), 1), C(e.code) ? (S(), o("span", ui, [...i[9] ||= [s("svg", {
2039
+ "aria-selected": E(e.code),
2040
+ onClick: (t) => D(e)
2041
+ }, [s("span", ai, [s("span", oi, O(e.code), 1), s("span", si, O(e.description), 1)]), s("span", ci, [s("span", li, O(e.exchange), 1), E(e.code) ? (S(), o("span", ui, [...i[9] ||= [s("svg", {
2029
2042
  viewBox: "0 0 24 24",
2030
2043
  width: "16",
2031
2044
  height: "16",
@@ -2039,7 +2052,7 @@ var jr = m({
2039
2052
  _: 1
2040
2053
  })], 512));
2041
2054
  }
2042
- }), [["__scopeId", "data-v-b8955787"]]), fi = { class: "top-toolbar" }, pi = /*#__PURE__*/ W(/* @__PURE__ */ u({
2055
+ }), [["__scopeId", "data-v-9513ad09"]]), fi = { class: "top-toolbar" }, pi = /*#__PURE__*/ U(/* @__PURE__ */ u({
2043
2056
  __name: "TopToolbar",
2044
2057
  props: {
2045
2058
  symbol: {},
@@ -2047,7 +2060,9 @@ var jr = m({
2047
2060
  symbols: {},
2048
2061
  symbolLoading: { type: Boolean },
2049
2062
  symbolError: { type: Boolean },
2050
- overlaySymbols: {}
2063
+ overlaySymbols: {},
2064
+ comparisonColors: {},
2065
+ comparisonLoading: { type: Boolean }
2051
2066
  },
2052
2067
  emits: [
2053
2068
  "addOverlaySymbol",
@@ -2059,75 +2074,69 @@ var jr = m({
2059
2074
  setup(e, { emit: t }) {
2060
2075
  let n = e, c = t, u = [
2061
2076
  {
2062
- code: "AAPL",
2063
- description: "Apple Inc.",
2064
- exchange: "NASDAQ",
2065
- source: "baostock"
2077
+ code: "XAUUSD",
2078
+ description: "现货黄金",
2079
+ exchange: "OANDA",
2080
+ source: "tradingview"
2066
2081
  },
2067
2082
  {
2068
- code: "TSLA",
2069
- description: "Tesla, Inc.",
2070
- exchange: "NASDAQ",
2071
- source: "baostock"
2083
+ code: "BTCUSDT",
2084
+ description: "Bitcoin / Tether",
2085
+ exchange: "BINANCE",
2086
+ source: "tradingview"
2072
2087
  },
2073
2088
  {
2074
- code: "GOOGL",
2075
- description: "Alphabet Inc.",
2076
- exchange: "NASDAQ",
2077
- source: "baostock"
2089
+ code: "ETHUSDT",
2090
+ description: "Ethereum / Tether",
2091
+ exchange: "BINANCE",
2092
+ source: "tradingview"
2078
2093
  },
2079
2094
  {
2080
- code: "MSFT",
2081
- description: "Microsoft Corporation",
2082
- exchange: "NASDAQ",
2083
- source: "baostock"
2095
+ code: "EURUSD",
2096
+ description: "欧元/美元",
2097
+ exchange: "OANDA",
2098
+ source: "tradingview"
2084
2099
  },
2085
2100
  {
2086
- code: "AMZN",
2087
- description: "Amazon.com, Inc.",
2088
- exchange: "NASDAQ",
2089
- source: "baostock"
2101
+ code: "SPX",
2102
+ description: "标普 500 指数",
2103
+ exchange: "SP",
2104
+ source: "tradingview"
2090
2105
  },
2091
2106
  {
2092
- code: "NVDA",
2093
- description: "NVIDIA Corporation",
2107
+ code: "AAPL",
2108
+ description: "Apple Inc.",
2094
2109
  exchange: "NASDAQ",
2095
- source: "baostock"
2110
+ source: "tradingview"
2096
2111
  },
2097
2112
  {
2098
- code: "META",
2099
- description: "Meta Platforms, Inc.",
2113
+ code: "TSLA",
2114
+ description: "Tesla, Inc.",
2100
2115
  exchange: "NASDAQ",
2101
- source: "baostock"
2102
- },
2103
- {
2104
- code: "BRK.B",
2105
- description: "Berkshire Hathaway Inc.",
2106
- exchange: "NYSE",
2107
- source: "baostock"
2116
+ source: "tradingview"
2108
2117
  },
2109
2118
  {
2110
- code: "JPM",
2111
- description: "JPMorgan Chase & Co.",
2112
- exchange: "NYSE",
2113
- source: "baostock"
2119
+ code: "600519",
2120
+ description: "贵州茅台",
2121
+ exchange: "SSE",
2122
+ source: "tradingview"
2114
2123
  },
2115
2124
  {
2116
- code: "V",
2117
- description: "Visa Inc.",
2118
- exchange: "NYSE",
2119
- source: "baostock"
2125
+ code: "000001",
2126
+ description: "平安银行",
2127
+ exchange: "SZSE",
2128
+ source: "tradingview"
2120
2129
  },
2121
2130
  {
2122
- code: "BTCUSDT",
2123
- description: "Bitcoin / Tether",
2124
- exchange: "BINANCE",
2125
- source: "baostock"
2131
+ code: "1810",
2132
+ description: "小米集团",
2133
+ exchange: "HKEX",
2134
+ source: "tradingview"
2126
2135
  },
2127
2136
  {
2128
- code: "ETHUSDT",
2129
- description: "Ethereum / Tether",
2130
- exchange: "BINANCE",
2137
+ code: "sh.600519",
2138
+ description: "贵州茅台",
2139
+ exchange: "SSE",
2131
2140
  source: "baostock"
2132
2141
  },
2133
2142
  {
@@ -2136,12 +2145,6 @@ var jr = m({
2136
2145
  exchange: "SSE",
2137
2146
  source: "baostock"
2138
2147
  },
2139
- {
2140
- code: "sh.600519",
2141
- description: "贵州茅台",
2142
- exchange: "SSE",
2143
- source: "baostock"
2144
- },
2145
2148
  {
2146
2149
  code: "000858",
2147
2150
  description: "五 粮 液",
@@ -2171,7 +2174,7 @@ var jr = m({
2171
2174
  c("symbolChange", e);
2172
2175
  }
2173
2176
  return (t, n) => (S(), o("div", fi, [
2174
- d.value ? (S(), i(Gr, {
2177
+ d.value ? (S(), i(Wr, {
2175
2178
  key: 0,
2176
2179
  symbol: d.value,
2177
2180
  symbols: f.value,
@@ -2187,10 +2190,17 @@ var jr = m({
2187
2190
  l(di, {
2188
2191
  symbols: f.value,
2189
2192
  selected: e.overlaySymbols,
2193
+ "comparison-colors": e.comparisonColors,
2194
+ "comparison-loading": e.comparisonLoading,
2190
2195
  onAdd: n[0] ||= (e) => c("addOverlaySymbol", e),
2191
2196
  onRemove: n[1] ||= (e) => c("removeOverlaySymbol", e)
2192
- }, null, 8, ["symbols", "selected"]),
2193
- l(Or, {
2197
+ }, null, 8, [
2198
+ "symbols",
2199
+ "selected",
2200
+ "comparison-colors",
2201
+ "comparison-loading"
2202
+ ]),
2203
+ l(Dr, {
2194
2204
  "model-value": e.kLineLevel,
2195
2205
  "onUpdate:modelValue": n[2] ||= (e) => c("kLineLevelChange", e)
2196
2206
  }, null, 8, ["model-value"]),
@@ -2206,7 +2216,7 @@ var jr = m({
2206
2216
  }, "fx", -1), s("span", { class: "indicator-button__text" }, "指标", -1)]])
2207
2217
  ]));
2208
2218
  }
2209
- }), [["__scopeId", "data-v-48f98633"]]), mi = ["data-theme"], hi = {
2219
+ }), [["__scopeId", "data-v-6cd21003"]]), mi = ["data-theme"], hi = {
2210
2220
  class: "pane-separator-layer",
2211
2221
  "aria-hidden": "true"
2212
2222
  }, gi = {
@@ -2215,7 +2225,7 @@ var jr = m({
2215
2225
  }, _i = {
2216
2226
  class: "x-axis-canvas",
2217
2227
  ref: "xAxisCanvasRef"
2218
- }, vi = 4, yi = /*#__PURE__*/ W(/* @__PURE__ */ u({
2228
+ }, vi = 4, yi = /*#__PURE__*/ U(/* @__PURE__ */ u({
2219
2229
  __name: "KLineChart",
2220
2230
  props: {
2221
2231
  semanticConfig: {},
@@ -2248,10 +2258,10 @@ var jr = m({
2248
2258
  C.value = !1, m.value = e.code, v.value = e, F();
2249
2259
  }
2250
2260
  function j(e) {
2251
- v.value?.code !== e.code && (E.value.includes(e.code) || (O.value = [...O.value, e], E.value = O.value.map((e) => e.code), I(), F()));
2261
+ v.value?.code !== e.code && (E.value.includes(e.code) || (O.value = [...O.value, e], E.value = O.value.map((e) => e.code), I(), z.value?.addComparisonSymbol(P(e))));
2252
2262
  }
2253
2263
  function N(e) {
2254
- O.value = O.value.filter((t) => t.code !== e), E.value = O.value.map((e) => e.code), F();
2264
+ O.value = O.value.filter((t) => t.code !== e), E.value = O.value.map((e) => e.code), z.value?.removeComparisonSymbol(e);
2255
2265
  }
2256
2266
  function P(e) {
2257
2267
  return {
@@ -2274,24 +2284,27 @@ var jr = m({
2274
2284
  axisType: "percent"
2275
2285
  };
2276
2286
  G.value = e, z.value?.updateSettingsFacade(e);
2287
+ try {
2288
+ localStorage.setItem(he, JSON.stringify(e));
2289
+ } catch {}
2277
2290
  }
2278
2291
  let L = w(null), R = w(null), ee = w(null), te = w(null), ie = w(null), ce = w(null);
2279
2292
  je(ee);
2280
- let z = D(null), ue = D(null), B = w(0), ge = w(0), V = w(1), H = w(d.initialZoomLevel ?? 1), U = w(0), _e = w(1), ve = w(0), ye = w({}), be = w(null), W = w([]), xe = H.value;
2281
- U.value = pe(xe, {
2293
+ let z = D(null), ue = D(null), B = w(0), ge = w(0), V = w(1), H = w(d.initialZoomLevel ?? 1), _e = w(0), ve = w(1), ye = w(0), be = w({}), U = w(null), W = w([]), xe = w(/* @__PURE__ */ new Map()), Se = w(!1), Ce = H.value;
2294
+ _e.value = fe(Ce, {
2282
2295
  minKWidth: d.minKWidth,
2283
2296
  maxKWidth: d.maxKWidth,
2284
2297
  zoomLevelCount: d.zoomLevels,
2285
2298
  dpr: V.value
2286
- }), _e.value = fe(U.value, V.value);
2287
- let Se = w("light"), G = w({}), Ce = r(() => {
2288
- let e = G.value.isAsiaMarket ?? !1, t = ae(Se.value, e);
2299
+ }), ve.value = de(_e.value, V.value);
2300
+ let we = w("light"), G = w({}), Te = r(() => {
2301
+ let e = G.value.isAsiaMarket ?? !1, t = ae(we.value, e);
2289
2302
  return {
2290
2303
  upColor: t.candleUpBody,
2291
2304
  downColor: t.candleDownBody
2292
2305
  };
2293
- }), we = r(() => {
2294
- let e = Se.value === "dark" ? ne : re, t = G.value.colorPresetSettings?.[Se.value];
2306
+ }), Ee = r(() => {
2307
+ let e = we.value === "dark" ? ne : re, t = G.value.colorPresetSettings?.[we.value];
2295
2308
  return t && Object.keys(t).length > 0 ? oe({
2296
2309
  ...e,
2297
2310
  colors: {
@@ -2300,47 +2313,47 @@ var jr = m({
2300
2313
  }
2301
2314
  }) : oe(e);
2302
2315
  }), K = null;
2303
- function q(e) {
2316
+ function De(e) {
2304
2317
  z.value?.setTheme(e.matches ? "dark" : "light");
2305
2318
  }
2306
- function Te(e, t) {
2319
+ function Oe(e, t) {
2307
2320
  if (!(!e || !t)) if (t === "auto") {
2308
2321
  let t = window.matchMedia("(prefers-color-scheme: dark)");
2309
- e.setTheme(t.matches ? "dark" : "light"), K !== t && (K?.removeEventListener("change", q), K = t, t.addEventListener("change", q));
2310
- } else K?.removeEventListener("change", q), K = null, e.setTheme(t);
2322
+ e.setTheme(t.matches ? "dark" : "light"), K !== t && (K?.removeEventListener("change", De), K = t, t.addEventListener("change", De));
2323
+ } else K?.removeEventListener("change", De), K = null, e.setTheme(t);
2311
2324
  }
2312
- function Ee() {}
2313
- function De(e) {
2314
- G.value = e, Te(z.value, e.theme), z.value?.updateSettingsFacade(e);
2325
+ function Ae() {}
2326
+ function Me(e) {
2327
+ G.value = e, Oe(z.value, e.theme), z.value?.updateSettingsFacade(e);
2315
2328
  }
2316
- function Oe(e, t, n) {
2329
+ function Ne(e, t, n) {
2317
2330
  let r = e.getBoundingClientRect();
2318
2331
  return {
2319
2332
  width: Math.max(t, Math.round(r.width)),
2320
2333
  height: Math.max(n, Math.round(r.height))
2321
2334
  };
2322
2335
  }
2323
- function Ae(e) {
2336
+ function Pe(e) {
2324
2337
  e && h(() => {
2325
2338
  if (!e.isConnected) return;
2326
- let t = Oe(e, 180, 80);
2339
+ let t = Ne(e, 180, 80);
2327
2340
  z.value?.setTooltipSize(t);
2328
2341
  });
2329
2342
  }
2330
- function Me(e) {
2343
+ function Fe(e) {
2331
2344
  e && h(() => {
2332
- e.isConnected && (Be.value = Oe(e, 120, 60));
2345
+ e.isConnected && (He.value = Ne(e, 120, 60));
2333
2346
  });
2334
2347
  }
2335
- let Ne = w({
2348
+ let Ie = w({
2336
2349
  x: 0,
2337
2350
  y: 0
2338
- }), Pe = w(!1), Fe = null;
2339
- function Ie() {
2340
- Fe = null;
2351
+ }), q = w(!1), Le = null;
2352
+ function Re() {
2353
+ Le = null;
2341
2354
  }
2342
- function Le(e) {
2343
- return Fe ||= e.getBoundingClientRect(), Fe;
2355
+ function ze(e) {
2356
+ return Le ||= e.getBoundingClientRect(), Le;
2344
2357
  }
2345
2358
  let J = D({
2346
2359
  crosshairPos: null,
@@ -2360,13 +2373,13 @@ var jr = m({
2360
2373
  isHoveringPaneBoundary: !1,
2361
2374
  hoveredPaneBoundaryId: null,
2362
2375
  isHoveringRightAxis: !1
2363
- }), Y = D(null), Re = r(() => {
2364
- let e = be.value;
2376
+ }), Y = D(null), Be = r(() => {
2377
+ let e = U.value;
2365
2378
  return e ? W.value.find((t) => t.id === e) ?? null : null;
2366
- }), ze = w([]), Be = w({
2379
+ }), Ve = w([]), He = w({
2367
2380
  width: 220,
2368
2381
  height: 120
2369
- }), Ve = r(() => {
2382
+ }), Ue = r(() => {
2370
2383
  let e = L.value, t = R.value;
2371
2384
  return !e || !t ? {
2372
2385
  x: 0,
@@ -2375,66 +2388,60 @@ var jr = m({
2375
2388
  x: e.offsetLeft,
2376
2389
  y: e.offsetTop
2377
2390
  };
2378
- }), He = r(() => J.value.hoveredMarkerData), Ue = r(() => J.value.hoveredCustomMarker), We = r(() => J.value.isDragging), Ge = r(() => J.value.isResizingPaneBoundary), Ke = r(() => J.value.isHoveringPaneBoundary), qe = r(() => J.value.hoveredPaneBoundaryId), Je = r(() => J.value.isHoveringRightAxis), Ye = r(() => J.value.hoveredIndex);
2391
+ }), We = r(() => J.value.hoveredMarkerData), Ge = r(() => J.value.hoveredCustomMarker), Ke = r(() => J.value.isDragging), qe = r(() => J.value.isResizingPaneBoundary), Je = r(() => J.value.isHoveringPaneBoundary), Ye = r(() => J.value.hoveredPaneBoundaryId), Xe = r(() => J.value.isHoveringRightAxis), Ze = r(() => J.value.hoveredIndex);
2379
2392
  r(() => J.value.crosshairIndex);
2380
- let Xe = r(() => We.value ? "grabbing" : Ge.value || Ke.value ? "ns-resize" : Ye.value === null ? "crosshair" : "pointer"), Ze = r(() => {
2393
+ let Qe = r(() => Ke.value ? "grabbing" : qe.value || Je.value ? "ns-resize" : Ze.value === null ? "crosshair" : "pointer"), $e = r(() => {
2381
2394
  let e = J.value.hoveredIndex;
2382
2395
  if (typeof e != "number") return null;
2383
2396
  ge.value;
2384
2397
  let t = z.value?.getData();
2385
2398
  return t && e >= 0 && e < t.length ? t[e] : null;
2386
- }), Qe = r(() => J.value.hoveredIndex), $e = r(() => J.value.tooltipPos), et = r(() => ({
2387
- x: $e.value.x + Ve.value.x,
2388
- y: $e.value.y + Ve.value.y
2389
- })), tt = r(() => ({
2390
- left: `${et.value.x}px`,
2391
- top: `${et.value.y}px`
2392
- })), nt = r(() => ({
2393
- x: Ne.value.x + Ve.value.x,
2394
- y: Ne.value.y + Ve.value.y
2399
+ }), et = r(() => J.value.hoveredIndex), tt = r(() => J.value.tooltipPos), nt = r(() => ({
2400
+ x: tt.value.x + Ue.value.x,
2401
+ y: tt.value.y + Ue.value.y
2395
2402
  })), rt = r(() => ({
2396
2403
  left: `${nt.value.x}px`,
2397
2404
  top: `${nt.value.y}px`
2398
- })), it = r(() => J.value.tooltipAnchorPlacement), at = r(() => {
2405
+ })), it = r(() => ({
2406
+ x: Ie.value.x + Ue.value.x,
2407
+ y: Ie.value.y + Ue.value.y
2408
+ })), at = r(() => ({
2409
+ left: `${it.value.x}px`,
2410
+ top: `${it.value.y}px`
2411
+ })), ot = r(() => J.value.tooltipAnchorPlacement), st = r(() => {
2399
2412
  let e = z.value?.viewport.peek(), t = L.value, n = e?.plotWidth ?? (t ? t.clientWidth : 0);
2400
- return Ne.value.x + 12 + Be.value.width + 12 > n ? "left-bottom" : "right-bottom";
2401
- }), ot = r(() => (ge.value, z.value?.getData() ?? []));
2402
- function st(e) {
2413
+ return Ie.value.x + 12 + He.value.width + 12 > n ? "left-bottom" : "right-bottom";
2414
+ }), ct = r(() => (ge.value, z.value?.getData() ?? []));
2415
+ function lt(e) {
2403
2416
  Y.value?.setTool(e);
2404
2417
  }
2405
- function ct() {
2418
+ function ut() {
2406
2419
  ce.value?.toggleMenu();
2407
2420
  }
2408
- function lt(e) {
2409
- let t = Re.value;
2421
+ function dt(e) {
2422
+ let t = Be.value;
2410
2423
  !t || !Y.value || (Y.value.updateDrawingStyle(t.id, e), W.value = Y.value.getDrawings());
2411
2424
  }
2412
- function ut() {
2413
- let e = Re.value;
2414
- !e || !Y.value || (Y.value.removeDrawing(e.id), be.value = null, W.value = Y.value.getDrawings());
2425
+ function ft() {
2426
+ let e = Be.value;
2427
+ !e || !Y.value || (Y.value.removeDrawing(e.id), W.value = Y.value.getDrawings());
2415
2428
  }
2416
- function dt(e) {
2417
- z.value?.handlePointerEvent(e, { onPointerDown: (e, t) => Y.value?.onPointerDown(e, t) ? (W.value = Y.value.getDrawings(), !0) : !1 });
2429
+ function pt(e) {
2430
+ z.value?.handlePointerEvent(e, { onPointerDown: (e, t) => !!Y.value?.onPointerDown(e, t) });
2418
2431
  }
2419
- function ft(e) {
2432
+ function mt(e) {
2420
2433
  let t = L.value;
2421
2434
  if (t) {
2422
- let n = Le(t);
2423
- Ne.value = {
2435
+ let n = ze(t);
2436
+ Ie.value = {
2424
2437
  x: e.clientX - n.left,
2425
2438
  y: e.clientY - n.top
2426
2439
  };
2427
2440
  }
2428
2441
  z.value?.handlePointerEvent(e, { onPointerMove: (e, t) => Y.value?.onPointerMove(e, t) ? (W.value = Y.value.getDrawings(), !0) : !1 });
2429
2442
  }
2430
- function pt(e) {
2431
- z.value?.handlePointerEvent(e, { onPointerUp: (e, t) => Y.value?.onPointerUp(e, t) ? (W.value = Y.value.getDrawings(), !0) : !1 });
2432
- }
2433
- function mt(e) {
2434
- z.value?.handlePointerEvent(e);
2435
- }
2436
2443
  function ht(e) {
2437
- z.value?.handlePointerEvent(e);
2444
+ z.value?.handlePointerEvent(e, { onPointerUp: (e, t) => !!Y.value?.onPointerUp(e, t) });
2438
2445
  }
2439
2446
  function gt(e) {
2440
2447
  z.value?.handlePointerEvent(e);
@@ -2445,16 +2452,22 @@ var jr = m({
2445
2452
  function vt(e) {
2446
2453
  z.value?.handlePointerEvent(e);
2447
2454
  }
2448
- function yt() {
2455
+ function yt(e) {
2456
+ z.value?.handlePointerEvent(e);
2457
+ }
2458
+ function bt(e) {
2459
+ z.value?.handlePointerEvent(e);
2460
+ }
2461
+ function xt() {
2449
2462
  z.value?.handleScrollEvent();
2450
2463
  }
2451
- let bt = w([]), xt = r(() => {
2464
+ let St = w([]), Ct = r(() => {
2452
2465
  let e = [], t = /* @__PURE__ */ new Set();
2453
2466
  for (let n of Z.value) t.has(n.indicatorId) || (t.add(n.indicatorId), e.push(n.indicatorId));
2454
2467
  return e;
2455
- }), St = r(() => [...bt.value, ...xt.value]), X = w({}), Z = w([]);
2456
- function Ct() {
2457
- let e = ye.value.main ?? 3;
2468
+ }), wt = r(() => [...St.value, ...Ct.value]), X = w({}), Z = w([]);
2469
+ function Tt() {
2470
+ let e = be.value.main ?? 3;
2458
2471
  return Z.value.length === 0 ? [{
2459
2472
  id: "main",
2460
2473
  ratio: e,
@@ -2467,104 +2480,73 @@ var jr = m({
2467
2480
  role: "price"
2468
2481
  }, ...Z.value.map((e) => ({
2469
2482
  id: e.id,
2470
- ratio: ye.value[e.id] ?? 1,
2483
+ ratio: be.value[e.id] ?? 1,
2471
2484
  visible: !0,
2472
2485
  role: "indicator"
2473
2486
  }))];
2474
2487
  }
2475
- function wt(e) {
2488
+ function Et(e) {
2476
2489
  if (e === "VOLUME") return {};
2477
- let t = he(e);
2490
+ let t = me(e);
2478
2491
  return t?.runtime?.defaultConfig ? { ...t.runtime.defaultConfig } : {};
2479
2492
  }
2480
- function Tt(e) {
2493
+ function Dt(e) {
2481
2494
  if (e === "VOLUME") return !0;
2482
- let t = he(e);
2495
+ let t = me(e);
2483
2496
  return !!t && t.category !== "main";
2484
2497
  }
2485
- let Et = /* @__PURE__ */ new Map();
2486
- function Dt(e = "VOLUME", t) {
2498
+ function Ot(e = "VOLUME", t) {
2487
2499
  if (Z.value.length >= vi) return !1;
2488
- let n = t ?? wt(e);
2500
+ let n = t ?? Et(e);
2489
2501
  return !!z.value?.addIndicator(e, "sub", n);
2490
2502
  }
2491
- function Ot(e) {
2503
+ function kt(e) {
2492
2504
  z.value?.removeIndicator(e);
2493
2505
  }
2494
- function kt() {
2506
+ function jt() {
2495
2507
  for (let e of Z.value) z.value?.removeIndicator(e.id);
2496
- Et.clear();
2497
2508
  }
2498
- function At() {
2509
+ function Mt() {
2499
2510
  let e = d.semanticConfig, t = z.value;
2500
2511
  if (!t) return;
2501
2512
  let n = e.indicators?.main;
2502
2513
  if (n) for (let e of n) e.enabled && t.addIndicator(e.type, "main", e.params);
2503
2514
  }
2504
- function Mt() {
2505
- let e = z.value?.subPanes.peek() ?? [];
2506
- for (let t of e) {
2507
- let { paneId: e, indicatorId: n, params: r } = t, i = e.match(/^(.+)_(\d+)$/);
2508
- if (i) {
2509
- let [, e, t] = i, n = parseInt(t, 10);
2510
- n >= (Et.get(e) ?? 0) && Et.set(e, n + 1);
2511
- }
2512
- }
2513
- }
2514
2515
  function Nt(e, t) {
2515
- let n = wt(t);
2516
+ let n = Et(t);
2516
2517
  z.value?.replaceSubPaneIndicator(e, t, n);
2517
2518
  }
2518
2519
  function Pt(e, t) {
2519
2520
  let n = z.value;
2520
- if (n) {
2521
- if ([
2522
- "MA",
2523
- "BOLL",
2524
- "EXPMA",
2525
- "ENE",
2526
- "WMA",
2527
- "DEMA",
2528
- "TEMA",
2529
- "HMA",
2530
- "KAMA",
2531
- "SAR",
2532
- "SUPERTREND",
2533
- "KELTNER",
2534
- "DONCHIAN",
2535
- "ICHIMOKU",
2536
- "PIVOT",
2537
- "FIB",
2538
- "STRUCTURE",
2539
- "ZONES"
2540
- ].includes(e)) {
2541
- let r = bt.value.find((t) => t === e);
2542
- t && !r ? n.addIndicator(e, "main", X.value[e]) : !t && r && n.removeIndicator(e.toUpperCase());
2543
- return;
2544
- }
2545
- if (Tt(e)) if (t) {
2546
- if (Z.value.find((t) => t.indicatorId === e) || Z.value.length >= vi) return;
2547
- if (!n.addIndicator(e, "sub", X.value[e]) && Z.value.length > 0) {
2548
- let t = Z.value[Z.value.length - 1];
2549
- Nt(t.id, e);
2550
- }
2551
- } else Z.value.filter((t) => t.indicatorId === e).forEach((e) => {
2552
- n.removeIndicator(e.id);
2553
- });
2521
+ if (!n) return;
2522
+ let r = me(e);
2523
+ if (r && (r.category === "main" || r.allowMainPane)) {
2524
+ let r = St.value.find((t) => t === e);
2525
+ t && !r ? n.addIndicator(e, "main", X.value[e]) : !t && r && n.removeIndicator(e.toUpperCase());
2526
+ return;
2554
2527
  }
2528
+ if (Dt(e)) if (t) {
2529
+ if (Z.value.find((t) => t.indicatorId === e) || Z.value.length >= vi) return;
2530
+ if (!n.addIndicator(e, "sub", X.value[e]) && Z.value.length > 0) {
2531
+ let t = Z.value[Z.value.length - 1];
2532
+ Nt(t.id, e);
2533
+ }
2534
+ } else Z.value.filter((t) => t.indicatorId === e).forEach((e) => {
2535
+ n.removeIndicator(e.id);
2536
+ });
2555
2537
  }
2556
2538
  function Ft(e, t) {
2557
2539
  if (e === "MA" || e === "BOLL" || e === "EXPMA" || e === "ENE") {
2558
2540
  z.value?.updateIndicatorParams(e, t);
2559
2541
  return;
2560
2542
  }
2561
- Tt(e) && Z.value.filter((t) => t.indicatorId === e).forEach((e) => {
2543
+ Dt(e) && Z.value.filter((t) => t.indicatorId === e).forEach((e) => {
2562
2544
  z.value?.updateIndicatorParams(e.id, t);
2563
2545
  });
2564
2546
  }
2565
2547
  function It(e) {
2566
2548
  if (!e.length || Z.value.length <= 1) return;
2567
- let t = e.filter((e) => Tt(e));
2549
+ let t = e.filter((e) => Dt(e));
2568
2550
  if (!t.length) return;
2569
2551
  let n = new Map(Z.value.map((e) => [e.indicatorId, e])), r = [];
2570
2552
  for (let e of t) {
@@ -2577,39 +2559,30 @@ var jr = m({
2577
2559
  if (i.join("|") === a.join("|")) return;
2578
2560
  Z.value = r;
2579
2561
  let o = z.value;
2580
- o && o.updatePaneLayout(Ct());
2562
+ o && o.updatePaneLayout(Tt());
2581
2563
  }
2582
- let Lt = r(() => d.rightAxisWidth + d.priceLabelWidth), Rt = r(() => (ge.value, ve.value, U.value, _e.value, V.value, z.value?.getContentWidth() ?? 0));
2583
- function zt() {
2584
- let e = L.value, t = z.value;
2585
- if (!e || !t) return;
2586
- let n = t.getData()?.length ?? 0;
2587
- if (n === 0) return;
2588
- let r = t.viewport.peek().dpr, { unitPx: i, startXPx: a } = de(U.value, _e.value, r), o = (a + n * i) / r, s = Math.max(0, e.scrollWidth - e.clientWidth), c = Math.min(s, Math.max(0, o - e.clientWidth));
2589
- e.scrollLeft = Math.round(c * r) / r;
2590
- }
2591
- function Bt(e, t) {
2564
+ let Lt = r(() => d.rightAxisWidth + d.priceLabelWidth), Rt = r(() => (ge.value, ye.value, _e.value, ve.value, V.value, z.value?.getContentWidth() ?? 0));
2565
+ function zt(e, t) {
2592
2566
  z.value?.zoomToLevel(e, t);
2593
2567
  }
2594
2568
  c({
2595
- scheduleRender: Ee,
2596
- scrollToRight: zt,
2597
- addSubPane: Dt,
2598
- removeSubPane: Ot,
2569
+ scheduleRender: Ae,
2570
+ addSubPane: Ot,
2571
+ removeSubPane: kt,
2599
2572
  switchSubIndicator: Nt,
2600
- clearAllSubPanes: kt,
2601
- zoomToLevel: Bt,
2602
- zoomIn: (e) => Bt(H.value + 1, e),
2603
- zoomOut: (e) => Bt(H.value - 1, e),
2573
+ clearAllSubPanes: jt,
2574
+ zoomToLevel: zt,
2575
+ zoomIn: (e) => zt(H.value + 1, e),
2576
+ zoomOut: (e) => zt(H.value - 1, e),
2604
2577
  getZoomLevel: () => H.value,
2605
2578
  getZoomLevelCount: () => z.value?.getZoomLevelCount() ?? 10
2606
2579
  });
2607
- function Vt() {
2580
+ function Bt() {
2608
2581
  return (e) => {
2609
2582
  e.preventDefault(), z.value?.handleWheelEvent(e);
2610
2583
  };
2611
2584
  }
2612
- function Ht(e, t, n, r) {
2585
+ function Vt(e, t, n, r) {
2613
2586
  return le({
2614
2587
  container: e,
2615
2588
  data: [],
@@ -2626,11 +2599,11 @@ var jr = m({
2626
2599
  maxKWidth: d.maxKWidth
2627
2600
  });
2628
2601
  }
2629
- function Ut(e) {
2602
+ function Ht(e) {
2630
2603
  let t = e.paneLayout.subscribe(() => {
2631
- Ie();
2604
+ Re();
2632
2605
  let t = L.value && parseInt(getComputedStyle(L.value).borderTopWidth) || 0;
2633
- ze.value = e.paneLayout.peek().slice(0, -1).map((n) => {
2606
+ Ve.value = e.paneLayout.peek().slice(0, -1).map((n) => {
2634
2607
  let r = e.getPaneInfo(n.id), i = (r?.top ?? 0) + (r?.height ?? 0);
2635
2608
  return {
2636
2609
  id: n.id,
@@ -2638,17 +2611,10 @@ var jr = m({
2638
2611
  };
2639
2612
  });
2640
2613
  }), n = e.paneRatios.subscribe(() => {
2641
- ye.value = { ...e.paneRatios.peek() };
2614
+ be.value = { ...e.paneRatios.peek() };
2642
2615
  }), r = e.viewport.subscribe(() => {
2643
2616
  let t = e.viewport.peek();
2644
- V.value !== t.dpr && (V.value = t.dpr), ve.value !== t.plotWidth && (ve.value = t.plotWidth), (H.value !== t.zoomLevel || U.value !== t.kWidth || _e.value !== t.kGap) && (H.value = t.zoomLevel, U.value = t.kWidth, _e.value = t.kGap);
2645
- let n = t.desiredScrollLeft;
2646
- n !== void 0 && n !== L.value?.scrollLeft && (Ie(), h(() => {
2647
- let e = L.value;
2648
- if (!e) return;
2649
- let r = Math.max(0, e.scrollWidth - e.clientWidth), i = Math.min(Math.max(0, n), r), a = t.dpr;
2650
- e.scrollLeft = Math.round(i * a) / a;
2651
- }));
2617
+ V.value !== t.dpr && (V.value = t.dpr), ye.value !== t.plotWidth && (ye.value = t.plotWidth), (H.value !== t.zoomLevel || _e.value !== t.kWidth || ve.value !== t.kGap) && (H.value = t.zoomLevel, _e.value = t.kWidth, ve.value = t.kGap);
2652
2618
  }), i = e.data.subscribe(() => {
2653
2619
  let t = e.data.peek();
2654
2620
  B.value = t.length, ge.value++, C.value = t.length === 0;
@@ -2656,10 +2622,10 @@ var jr = m({
2656
2622
  b.value = e.dataLoading.peek();
2657
2623
  }), o = e.theme.subscribe(() => {
2658
2624
  let t = e.theme.peek();
2659
- Se.value = t, f("themeChange", t);
2625
+ we.value = t, f("themeChange", t);
2660
2626
  }), s = e.indicators.subscribe(() => {
2661
2627
  let t = e.indicators.peek(), n = t.filter((e) => e.role === "main").map((e) => e.definitionId);
2662
- bt.value = n;
2628
+ St.value = n;
2663
2629
  let r = { ...X.value };
2664
2630
  for (let e of t) e.role === "main" && e.params && Object.keys(e.params).length > 0 && (r[e.definitionId] = { ...e.params });
2665
2631
  e.updateRendererConfig("mainIndicatorLegend", { indicators: {
@@ -2691,46 +2657,50 @@ var jr = m({
2691
2657
  let a = { ...X.value };
2692
2658
  for (let e of t) e.params && Object.keys(e.params).length > 0 && (a[e.indicatorId] = { ...e.params });
2693
2659
  X.value = a;
2660
+ }), l = e.comparisonColors.subscribe(() => {
2661
+ xe.value = new Map(e.comparisonColors.peek());
2662
+ }), u = e.comparisonLoading.subscribe(() => {
2663
+ Se.value = e.comparisonLoading.peek();
2694
2664
  });
2695
2665
  x(() => {
2696
- r(), i(), a(), n(), t(), o(), s(), c(), K?.removeEventListener("change", q);
2666
+ r(), i(), a(), n(), t(), o(), s(), c(), l(), u(), K?.removeEventListener("change", De);
2697
2667
  });
2698
2668
  }
2699
- function Wt(e) {
2669
+ function Ut(e) {
2700
2670
  let t = ie.value?.getSettings() ?? { showVolumePriceMarkers: !0 };
2701
- G.value = t, Te(e, t.theme), e.updateSettingsFacade(t);
2671
+ G.value = t, Oe(e, t.theme), e.updateSettingsFacade(t);
2702
2672
  }
2703
- function Gt(e) {
2673
+ function Wt(e) {
2704
2674
  Y.value = new se(e), Y.value.setCallbacks({
2705
2675
  onDrawingCreated: (e) => {
2706
- W.value = [...W.value, e], be.value = e.id;
2676
+ W.value = [...W.value, e], U.value = e.id;
2707
2677
  },
2708
2678
  onToolChange: () => {},
2709
2679
  onDrawingSelected: (e) => {
2710
- be.value = e?.id ?? null;
2680
+ U.value = e?.id ?? null;
2711
2681
  }
2712
2682
  });
2713
2683
  }
2714
- function qt(e) {
2715
- e.setTooltipAnchorPositioning(Pe.value), e.interactionState.subscribe(() => {
2684
+ function Kt(e) {
2685
+ e.setTooltipAnchorPositioning(q.value), e.interactionState.subscribe(() => {
2716
2686
  J.value = e.interactionState.peek();
2717
2687
  }), J.value = e.interactionState.peek(), V.value = e.viewport.peek().dpr;
2718
2688
  }
2719
- function Jt(e) {
2720
- e.setDataFetcher(d.dataFetcher), ue.value = new me(e), ue.value.on("config:error", (e) => {
2689
+ function qt(e) {
2690
+ e.setDataFetcher(d.dataFetcher), ue.value = new pe(e), ue.value.on("config:error", (e) => {
2721
2691
  console.error("Semantic config error:", e);
2722
2692
  }), ue.value.on("config:ready", () => {
2723
- At(), Mt(), h(() => zt());
2693
+ Mt(), h(() => z.value?.scrollToRight());
2724
2694
  });
2725
2695
  }
2726
2696
  return y(() => {
2727
- Pe.value = !1;
2697
+ q.value = !1;
2728
2698
  let e = L.value, t = R.value;
2729
2699
  if (!e || !t) return;
2730
- let n = Vt();
2700
+ let n = Bt();
2731
2701
  e.addEventListener("wheel", n, { passive: !1 });
2732
- let r = e.querySelector(".canvas-layer"), i = e.querySelector(".x-axis-canvas"), a = Ht(e, r, t.querySelector(".right-axis-host"), i);
2733
- z.value = a, Ut(a), At(), Wt(a), Gt(a), qt(a), Jt(a);
2702
+ let r = e.querySelector(".canvas-layer"), i = e.querySelector(".x-axis-canvas"), a = Vt(e, r, t.querySelector(".right-axis-host"), i);
2703
+ z.value = a, Ht(a), Mt(), Ut(a), Wt(a), Kt(a), qt(a);
2734
2704
  }), x(() => {
2735
2705
  let e = z.value;
2736
2706
  e && (z.value = null, e.dispose()), Y.value = null;
@@ -2745,8 +2715,8 @@ var jr = m({
2745
2715
  ref_key: "chartWrapperRef",
2746
2716
  ref: ee,
2747
2717
  class: "chart-wrapper",
2748
- "data-theme": Se.value,
2749
- style: _(we.value)
2718
+ "data-theme": we.value,
2719
+ style: _(Ee.value)
2750
2720
  }, [
2751
2721
  l(pi, {
2752
2722
  symbol: m.value,
@@ -2754,41 +2724,45 @@ var jr = m({
2754
2724
  "symbol-loading": b.value,
2755
2725
  "symbol-error": C.value,
2756
2726
  "overlay-symbols": E.value,
2727
+ "comparison-colors": xe.value,
2728
+ "comparison-loading": Se.value,
2757
2729
  onAddOverlaySymbol: j,
2758
2730
  onRemoveOverlaySymbol: N,
2759
2731
  onKLineLevelChange: k,
2760
- onToggleIndicator: ct,
2732
+ onToggleIndicator: ut,
2761
2733
  onSymbolChange: A
2762
2734
  }, null, 8, [
2763
2735
  "symbol",
2764
2736
  "k-line-level",
2765
2737
  "symbol-loading",
2766
2738
  "symbol-error",
2767
- "overlay-symbols"
2739
+ "overlay-symbols",
2740
+ "comparison-colors",
2741
+ "comparison-loading"
2768
2742
  ]),
2769
2743
  s("div", { class: g(["chart-stage", {
2770
- "is-dragging": We.value,
2771
- "is-resizing-pane": Ge.value,
2772
- "is-hovering-pane-separator": Ke.value,
2773
- "is-hovering-right-axis": Je.value,
2774
- "is-hovering-kline": Ye.value !== null
2775
- }]) }, [l(Dr, {
2744
+ "is-dragging": Ke.value,
2745
+ "is-resizing-pane": qe.value,
2746
+ "is-hovering-pane-separator": Je.value,
2747
+ "is-hovering-right-axis": Xe.value,
2748
+ "is-hovering-kline": Ze.value !== null
2749
+ }]) }, [l(Er, {
2776
2750
  ref_key: "toolbarRef",
2777
2751
  ref: ie,
2778
2752
  "is-fullscreen": n.isFullscreen,
2779
- onSelectTool: st,
2753
+ onSelectTool: lt,
2780
2754
  onToggleFullscreen: c[0] ||= (e) => r.$emit("toggleFullscreen"),
2781
- onZoomIn: c[1] ||= (e) => Bt(H.value + 1),
2782
- onZoomOut: c[2] ||= (e) => Bt(H.value - 1),
2783
- onSettingsChange: De
2755
+ onZoomIn: c[1] ||= (e) => zt(H.value + 1),
2756
+ onZoomOut: c[2] ||= (e) => zt(H.value - 1),
2757
+ onSettingsChange: Me
2784
2758
  }, null, 8, ["is-fullscreen"]), s("div", {
2785
2759
  class: "chart-main",
2786
2760
  ref_key: "chartMainRef",
2787
2761
  ref: R
2788
2762
  }, [
2789
- s("div", hi, [(S(!0), o(e, null, T(ze.value, (e) => (S(), o("div", {
2763
+ s("div", hi, [(S(!0), o(e, null, T(Ve.value, (e) => (S(), o("div", {
2790
2764
  key: e.id,
2791
- class: g(["pane-separator-line", { "is-active": qe.value === e.id }]),
2765
+ class: g(["pane-separator-line", { "is-active": Ye.value === e.id }]),
2792
2766
  style: _({ top: `${e.top}px` })
2793
2767
  }, null, 6))), 128))]),
2794
2768
  s("div", {
@@ -2798,48 +2772,48 @@ var jr = m({
2798
2772
  }, null, 512),
2799
2773
  s("div", {
2800
2774
  class: "chart-container",
2801
- style: _({ cursor: Xe.value }),
2775
+ style: _({ cursor: Qe.value }),
2802
2776
  ref_key: "containerRef",
2803
2777
  ref: L,
2804
- onScrollPassive: yt,
2805
- onPointerdown: dt,
2806
- onPointermove: ft,
2807
- onPointerup: pt,
2808
- onPointerleave: mt
2778
+ onScrollPassive: xt,
2779
+ onPointerdown: pt,
2780
+ onPointermove: mt,
2781
+ onPointerup: ht,
2782
+ onPointerleave: gt
2809
2783
  }, [s("div", {
2810
2784
  class: "scroll-content",
2811
2785
  style: _({ width: Rt.value + "px" })
2812
- }, [s("div", gi, [s("canvas", _i, null, 512), Re.value ? (S(), i(ke, {
2786
+ }, [s("div", gi, [s("canvas", _i, null, 512), Be.value ? (S(), i(ke, {
2813
2787
  key: 0,
2814
- drawing: Re.value,
2815
- onUpdateStyle: lt,
2816
- onDelete: ut
2788
+ drawing: Be.value,
2789
+ onUpdateStyle: dt,
2790
+ onDelete: ft
2817
2791
  }, null, 8, ["drawing"])) : a("", !0)], 512)], 4)], 36),
2818
2792
  te.value ? (S(), i(t, {
2819
2793
  key: 0,
2820
2794
  to: te.value
2821
2795
  }, [
2822
- Ze.value ? (S(), o("div", {
2796
+ $e.value ? (S(), o("div", {
2823
2797
  key: 0,
2824
- class: g(["tooltip-anchor kline-tooltip-anchor", { "use-anchor": Pe.value }]),
2825
- style: _(tt.value)
2798
+ class: g(["tooltip-anchor kline-tooltip-anchor", { "use-anchor": q.value }]),
2799
+ style: _(rt.value)
2826
2800
  }, null, 6)) : a("", !0),
2827
- He.value || Ue.value ? (S(), o("div", {
2801
+ We.value || Ge.value ? (S(), o("div", {
2828
2802
  key: 1,
2829
- class: g(["tooltip-anchor marker-tooltip-anchor", { "use-anchor": Pe.value }]),
2830
- style: _(rt.value)
2803
+ class: g(["tooltip-anchor marker-tooltip-anchor", { "use-anchor": q.value }]),
2804
+ style: _(at.value)
2831
2805
  }, null, 6)) : a("", !0),
2832
- Ze.value ? (S(), i(Kt, {
2806
+ $e.value ? (S(), i(Gt, {
2833
2807
  key: 2,
2834
- k: Ze.value,
2835
- index: Qe.value,
2836
- data: ot.value,
2837
- pos: et.value,
2838
- "set-el": Ae,
2839
- "use-anchor": Pe.value,
2840
- "anchor-placement": it.value,
2841
- "up-color": Ce.value.upColor,
2842
- "down-color": Ce.value.downColor
2808
+ k: $e.value,
2809
+ index: et.value,
2810
+ data: ct.value,
2811
+ pos: nt.value,
2812
+ "set-el": Pe,
2813
+ "use-anchor": q.value,
2814
+ "anchor-placement": ot.value,
2815
+ "up-color": Te.value.upColor,
2816
+ "down-color": Te.value.downColor
2843
2817
  }, null, 8, [
2844
2818
  "k",
2845
2819
  "index",
@@ -2850,13 +2824,13 @@ var jr = m({
2850
2824
  "up-color",
2851
2825
  "down-color"
2852
2826
  ])) : a("", !0),
2853
- He.value || Ue.value ? (S(), i(Yt, {
2827
+ We.value || Ge.value ? (S(), i(Jt, {
2854
2828
  key: 3,
2855
- marker: He.value || Ue.value,
2856
- pos: nt.value,
2857
- "use-anchor": Pe.value,
2858
- "anchor-placement": at.value,
2859
- "set-el": Me
2829
+ marker: We.value || Ge.value,
2830
+ pos: it.value,
2831
+ "use-anchor": q.value,
2832
+ "anchor-placement": st.value,
2833
+ "set-el": Fe
2860
2834
  }, null, 8, [
2861
2835
  "marker",
2862
2836
  "pos",
@@ -2868,16 +2842,16 @@ var jr = m({
2868
2842
  class: "right-axis-host",
2869
2843
  ref: "rightAxisLayerRef",
2870
2844
  style: _({ width: Lt.value + "px" }),
2871
- onPointerdown: ht,
2872
- onPointermove: gt,
2873
- onPointerup: _t,
2874
- onPointerleave: vt
2845
+ onPointerdown: _t,
2846
+ onPointermove: vt,
2847
+ onPointerup: yt,
2848
+ onPointerleave: bt
2875
2849
  }, null, 36)
2876
2850
  ], 512)], 2),
2877
- l(jt, {
2851
+ l(At, {
2878
2852
  ref_key: "indicatorSelectorRef",
2879
2853
  ref: ce,
2880
- "active-indicators": St.value,
2854
+ "active-indicators": wt.value,
2881
2855
  "indicator-params": X.value,
2882
2856
  onToggle: Pt,
2883
2857
  onUpdateParams: Ft,
@@ -2885,9 +2859,9 @@ var jr = m({
2885
2859
  }, null, 8, ["active-indicators", "indicator-params"])
2886
2860
  ], 12, mi));
2887
2861
  }
2888
- }), [["__scopeId", "data-v-a6d8e944"]]), bi = {
2862
+ }), [["__scopeId", "data-v-c0ab68e5"]]), bi = {
2889
2863
  name: "@363045841yyt/klinechart",
2890
- version: "0.8.1-alpha.3",
2864
+ version: "0.8.1",
2891
2865
  description: "Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.",
2892
2866
  license: "MIT",
2893
2867
  repository: {
@@ -3136,4 +3110,4 @@ var Ai = u({
3136
3110
  } };
3137
3111
  Si(ee);
3138
3112
  //#endregion
3139
- export { R as CORE_VERSION, ke as DrawingStyleToolbar, Je as IndicatorParams, jt as IndicatorSelector, Ai as KLineChart, yi as KLineChartVue, Kt as KLineTooltip, ji as KMapPlugin, Dr as LeftToolbar, Yt as MarkerTooltip, bi as VERSION, Si as __setControllerFactory, $ as coreSignalToVueRef, Ci as createChart, wi as useChart, ki as useIndicatorSelector, Ti as useIndicators, Ei as useInteractionState, Di as usePaneRatios, Oi as useViewport };
3113
+ export { R as CORE_VERSION, ke as DrawingStyleToolbar, qe as IndicatorParams, At as IndicatorSelector, Ai as KLineChart, yi as KLineChartVue, Gt as KLineTooltip, ji as KMapPlugin, Er as LeftToolbar, Jt as MarkerTooltip, bi as VERSION, Si as __setControllerFactory, $ as coreSignalToVueRef, Ci as createChart, wi as useChart, ki as useIndicatorSelector, Ti as useIndicators, Ei as useInteractionState, Di as usePaneRatios, Oi as useViewport };