@363045841yyt/klinechart 0.8.1-alpha.4 → 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
@@ -3,13 +3,13 @@ import { COLOR_PRESET_ITEMS as L, VERSION as R, createChartController as ee, cre
3
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
4
  import { SemanticChartController as pe } from "@363045841yyt/klinechart-core/semantic";
5
5
  import { getRegisteredIndicatorDefinition as me } from "@363045841yyt/klinechart-core/indicators";
6
- import { DEFAULT_SETTINGS as B, SETTINGS_STORAGE_KEY as V } from "@363045841yyt/klinechart-core/config";
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 H = { class: "color-preset-tools" }, U = {
8
+ var ge = { class: "color-preset-tools" }, V = {
9
9
  class: "theme-tabs",
10
10
  role: "tablist",
11
11
  "aria-label": "颜色主题"
12
- }, he = ["onClick"], ge = { class: "color-group-label" }, _e = { class: "color-grid" }, ve = ["value", "onInput"], ye = /*@__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,16 +50,16 @@ var H = { class: "color-preset-tools" }, U = {
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", H, [s("div", U, [(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, he)), 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
62
- }, " 重置颜色 ")]), (S(!0), o(e, null, T(u.value, (t) => (S(), o(e, { key: t.group }, [s("div", ge, O(t.label), 1), s("div", _e, [(S(!0), o(e, null, T(t.items, (e) => (S(), o("label", {
62
+ }, " 重置颜色 ")]), (S(!0), o(e, null, T(u.value, (t) => (S(), o(e, { key: t.group }, [s("div", _e, O(t.label), 1), s("div", ve, [(S(!0), o(e, null, T(t.items, (e) => (S(), o("label", {
63
63
  key: e.key,
64
64
  class: "color-item"
65
65
  }, [s("span", null, O(e.label), 1), s("input", {
@@ -67,20 +67,20 @@ var H = { class: "color-preset-tools" }, U = {
67
67
  class: "color-input",
68
68
  value: p(e.key),
69
69
  onInput: (t) => m(e.key, t.target.value)
70
- }, null, 40, ve)]))), 128))])], 64))), 128))]));
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
- }, be = /*#__PURE__*/ W(ye, [["__scopeId", "data-v-a52947a4"]]), xe = [
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
- }, Se = { class: "dropdown__value" }, Ce = ["aria-selected", "onClick"], K = 0, q = null, we = 0, Te = /*#__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 H = { class: "color-preset-tools" }, U = {
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 = ++we, 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 H = { class: "color-preset-tools" }, U = {
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,8 +137,8 @@ var H = { class: "color-preset-tools" }, U = {
137
137
  F(I(E, ["prevent"]), ["space"])
138
138
  ]
139
139
  }, [
140
- t.label ? (S(), o("span", G, O(t.label), 1)) : a("", !0),
141
- s("span", Se, O(b.value.label), 1),
140
+ t.label ? (S(), o("span", Se, O(t.label), 1)) : a("", !0),
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"
@@ -156,12 +156,12 @@ var H = { class: "color-preset-tools" }, U = {
156
156
  role: "option",
157
157
  "aria-selected": e.value === y.value,
158
158
  onClick: (t) => D(e.value)
159
- }, O(e.label), 11, Ce))), 128))], 4)) : a("", !0)], 2));
159
+ }, O(e.label), 11, we))), 128))], 4)) : a("", !0)], 2));
160
160
  }
161
- }), [["__scopeId", "data-v-126e11f2"]]), Ee = {
161
+ }), [["__scopeId", "data-v-126e11f2"]]), De = {
162
162
  class: "toolbar-item color-item",
163
163
  title: "颜色"
164
- }, De = ["value"], Oe = /*#__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"],
@@ -216,7 +216,7 @@ var H = { class: "color-preset-tools" }, U = {
216
216
  onPointermove: i[5] ||= I(() => {}, ["stop"]),
217
217
  onPointerup: i[6] ||= I(() => {}, ["stop"])
218
218
  }, [
219
- s("div", Ee, [s("span", {
219
+ s("div", De, [s("span", {
220
220
  class: "color-swatch",
221
221
  style: _({ background: e.drawing.style.stroke ?? "#2962ff" })
222
222
  }, null, 4), s("input", {
@@ -224,15 +224,15 @@ var H = { class: "color-preset-tools" }, U = {
224
224
  class: "color-input",
225
225
  value: e.drawing.style.stroke ?? "#2962ff",
226
226
  onInput: i[0] ||= (e) => c(e.target.value)
227
- }, null, 40, De)]),
228
- l(Te, {
227
+ }, null, 40, Oe)]),
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(Te, {
235
+ l(K, {
236
236
  "model-value": e.drawing.style.strokeStyle ?? "solid",
237
237
  options: r,
238
238
  size: "sm",
@@ -260,20 +260,20 @@ var H = { class: "color-preset-tools" }, U = {
260
260
  ], -1)]])
261
261
  ], 32));
262
262
  }
263
- }), [["__scopeId", "data-v-e9b6a8a9"]]), ke = Symbol("fullscreen-teleport-target");
264
- function Ae(e) {
265
- C(ke, e);
263
+ }), [["__scopeId", "data-v-e9b6a8a9"]]), Ae = Symbol("fullscreen-teleport-target");
264
+ function je(e) {
265
+ C(Ae, e);
266
266
  }
267
- function je() {
268
- let e = p(ke, null);
267
+ function Me() {
268
+ let e = p(Ae, null);
269
269
  return r(() => e?.value ?? "body");
270
270
  }
271
271
  //#endregion
272
272
  //#region src/components/IndicatorParams.vue?vue&type=script&setup=true&lang.ts
273
- var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class: "params-title" }, Fe = { class: "header-right" }, Ie = {
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" }, Le = { class: "param-label" }, Re = { class: "param-label-text" }, ze = {
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
279
  }, Be = { class: "input-wrapper" }, Ve = ["disabled", "onClick"], He = [
@@ -285,7 +285,7 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class
285
285
  ], Ue = ["disabled", "onClick"], We = {
286
286
  key: 0,
287
287
  class: "param-description"
288
- }, Ge = { class: "params-footer" }, Ke = { class: "footer-right" }, qe = /*#__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 },
@@ -297,7 +297,7 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class
297
297
  },
298
298
  emits: ["close", "confirm"],
299
299
  setup(r, { emit: u }) {
300
- let d = r, f = u, p = w({ ...d.values }), m = w(!0), h = je();
300
+ let d = r, f = u, p = w({ ...d.values }), m = w(!0), h = Me();
301
301
  M(() => d.values, (e) => {
302
302
  p.value = { ...e };
303
303
  }, {
@@ -333,7 +333,7 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class
333
333
  class: "indicator-params",
334
334
  onClick: d[3] ||= I(() => {}, ["stop"])
335
335
  }, [
336
- s("div", Me, [s("div", Ne, [s("span", Pe, O(r.indicatorName), 1), d[5] ||= s("span", { class: "params-subtitle" }, "参数设置", -1)]), s("div", Fe, [s("button", {
336
+ s("div", Ne, [s("div", Pe, [s("span", Fe, O(r.indicatorName), 1), d[5] ||= s("span", { class: "params-subtitle" }, "参数设置", -1)]), s("div", Ie, [s("button", {
337
337
  class: g(["toggle-desc-btn", { active: m.value }]),
338
338
  onClick: d[0] ||= (e) => m.value = !m.value,
339
339
  title: "显示/隐藏说明"
@@ -350,13 +350,13 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { 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", Ie, [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", Le, [s("span", Re, O(e.label), 1), e.min !== void 0 || e.max !== void 0 ? (S(), o("span", ze, O(e.min ?? "-∞") + " ~ " + O(e.max ?? "+∞"), 1)) : a("", !0)]), s("div", Be, [
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,
@@ -431,7 +431,7 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class
431
431
  }, vt = {
432
432
  key: 3,
433
433
  class: "indicator-section"
434
- }, yt = { class: "section-header" }, bt = { class: "section-count" }, xt = ["onClick"], X = { class: "card-label" }, Z = { class: "card-tooltip" }, St = { class: "card-header" }, Ct = { class: "card-label" }, wt = { class: "card-header-actions" }, Tt = ["onClick"], Et = { class: "card-name" }, Dt = { class: "modal-footer" }, Ot = { class: "footer-info" }, kt = { class: "info-text" }, At = /*#__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: {},
@@ -462,7 +462,7 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class
462
462
  }))
463
463
  }));
464
464
  }
465
- let h = z({ catalog: m(ce) }), _ = $(h.menuOpen), v = $(h.searchQuery), b = $(h.filteredMain), C = $(h.filteredSub), E = r(() => b.value.length > 0 || C.value.length > 0), D = h.catalog.peek().length, A = w(!1), j = w(null), M = w(!1), P = je(), F = r(() => j.value ? ue(j.value) : null), L = r(() => f.activeIndicators?.length ?? 0);
465
+ let h = z({ catalog: m(ce) }), _ = $(h.menuOpen), v = $(h.searchQuery), b = $(h.filteredMain), C = $(h.filteredSub), E = r(() => b.value.length > 0 || C.value.length > 0), D = h.catalog.peek().length, A = w(!1), j = w(null), M = w(!1), P = Me(), F = r(() => j.value ? ue(j.value) : null), L = r(() => f.activeIndicators?.length ?? 0);
466
466
  function R(e) {
467
467
  return f.activeIndicators?.includes(e) ?? !1;
468
468
  }
@@ -573,7 +573,7 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class
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", St, [s("span", Ct, O(t.label), 1), s("div", wt, [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"]),
@@ -630,7 +630,7 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class
630
630
  }, Ut = {
631
631
  key: 5,
632
632
  class: "row"
633
- }, Wt = "#6b7280", Gt = /*#__PURE__*/ W(/* @__PURE__ */ u({
633
+ }, Wt = "#6b7280", Gt = /*#__PURE__*/ U(/* @__PURE__ */ u({
634
634
  __name: "KLineTooltip",
635
635
  props: {
636
636
  k: {},
@@ -703,7 +703,7 @@ var Me = { class: "params-header" }, Ne = { class: "header-left" }, Pe = { class
703
703
  }), [["__scopeId", "data-v-a068b75e"]]), Kt = { class: "marker-tooltip__title" }, qt = {
704
704
  key: 0,
705
705
  class: "marker-tooltip__content"
706
- }, Jt = /*#__PURE__*/ W(/* @__PURE__ */ u({
706
+ }, Jt = /*#__PURE__*/ U(/* @__PURE__ */ u({
707
707
  __name: "MarkerTooltip",
708
708
  props: {
709
709
  marker: {},
@@ -1175,15 +1175,15 @@ function ar() {
1175
1175
  }
1176
1176
  //#endregion
1177
1177
  //#region src/components/ChartSettingsDialog.vue?vue&type=script&setup=true&lang.ts
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__*/ 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"],
1182
1182
  setup(u, { emit: d }) {
1183
- let f = u, p = d, m = je(), 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);
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(V);
1186
+ let e = localStorage.getItem(he);
1187
1187
  if (e) {
1188
1188
  let t = JSON.parse(e), n = {};
1189
1189
  return B.forEach((e) => {
@@ -1240,7 +1240,7 @@ var or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["on
1240
1240
  type: "checkbox",
1241
1241
  class: "settings-checkbox",
1242
1242
  "onUpdate:modelValue": (t) => b.value[e.key] = t
1243
- }, null, 8, cr)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(Te, {
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,
@@ -1261,7 +1261,7 @@ var or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["on
1261
1261
  type: "checkbox",
1262
1262
  class: "settings-checkbox",
1263
1263
  "onUpdate:modelValue": (t) => b.value[e.key] = t
1264
- }, null, 8, ur)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(Te, {
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,
@@ -1293,7 +1293,7 @@ var or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["on
1293
1293
  type: "checkbox",
1294
1294
  class: "settings-checkbox",
1295
1295
  "onUpdate:modelValue": (t) => b.value[e.key] = t
1296
- }, null, 8, fr)), [[A, b.value[e.key]]]) : e.type === "select" && e.options ? (S(), i(Te, {
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,
@@ -1347,7 +1347,7 @@ var or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["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", hr, [l(be, {
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,
@@ -1370,7 +1370,7 @@ var or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["on
1370
1370
  "title",
1371
1371
  "aria-label",
1372
1372
  "onClick"
1373
- ], Sr = { class: "left-toolbar__group" }, Cr = { class: "left-toolbar__group" }, wr = ["title", "aria-label"], Tr = { class: "left-toolbar__group" }, Er = /*#__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: [
@@ -1459,7 +1459,7 @@ var or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["on
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(V);
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 or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["on
1474
1474
  }
1475
1475
  function _(e) {
1476
1476
  try {
1477
- localStorage.setItem(V, JSON.stringify(e));
1477
+ localStorage.setItem(he, JSON.stringify(e));
1478
1478
  } catch {}
1479
1479
  }
1480
1480
  let v = w(h());
@@ -1664,7 +1664,7 @@ var or = { class: "settings-body" }, sr = { class: "settings-label" }, cr = ["on
1664
1664
  value: "yearly"
1665
1665
  }
1666
1666
  ], r = t;
1667
- return (t, a) => (S(), i(Te, {
1667
+ return (t, a) => (S(), i(K, {
1668
1668
  "model-value": e.modelValue,
1669
1669
  options: n,
1670
1670
  label: "级别",
@@ -1716,7 +1716,7 @@ var Ar = m({
1716
1716
  "margin-bottom": "8px",
1717
1717
  opacity: "0.35"
1718
1718
  }
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__*/ 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 Ar = 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,11 +1755,11 @@ var Ar = 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", Mr, O(t.symbol), 1), t.loading ? (S(), o("span", Nr)) : t.error ? (S(), i(k(Ar), {
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"
@@ -1795,14 +1798,14 @@ var Ar = 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 Ar = 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", Ir, [b.value.length === 0 ? (S(), o("div", Lr, [(S(), o("svg", Rr, [...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,36 +1834,39 @@ var Ar = 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)
1843
+ onClick: (t) => F(e)
1841
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"]]), Gr = ["aria-expanded"], Kr = {
1848
+ }), [["__scopeId", "data-v-8a2877e0"]]), Gr = ["aria-expanded"], Kr = {
1846
1849
  key: 0,
1847
- class: "compare-chip__badge"
1850
+ class: "compare-chip__spinner"
1848
1851
  }, qr = {
1852
+ key: 1,
1853
+ class: "compare-chip__badge"
1854
+ }, Jr = {
1849
1855
  key: 0,
1850
1856
  class: "compare-popover",
1851
1857
  role: "dialog",
1852
1858
  "aria-label": "比较商品"
1853
- }, Jr = { class: "compare-search" }, Yr = {
1859
+ }, Yr = { class: "compare-search" }, Xr = {
1854
1860
  key: 0,
1855
1861
  class: "compare-selected"
1856
- }, Xr = { class: "compare-selected__list" }, Zr = { class: "compare-selected__code" }, Qr = { class: "compare-selected__desc" }, $r = ["aria-label", "onClick"], ei = {
1862
+ }, Zr = { class: "compare-selected__list" }, Qr = { class: "compare-selected__code" }, $r = { class: "compare-selected__desc" }, ei = ["aria-label", "onClick"], ti = {
1857
1863
  class: "compare-list",
1858
1864
  role: "listbox",
1859
1865
  "aria-label": "商品列表"
1860
- }, ti = {
1866
+ }, ni = {
1861
1867
  key: 0,
1862
1868
  class: "compare-list__empty"
1863
- }, ni = {
1869
+ }, ri = {
1864
1870
  width: "32",
1865
1871
  height: "32",
1866
1872
  viewBox: "0 0 32 32",
@@ -1869,44 +1875,46 @@ var Ar = m({
1869
1875
  "margin-bottom": "8px",
1870
1876
  opacity: "0.35"
1871
1877
  }
1872
- }, ri = ["aria-selected", "onClick"], ii = { class: "compare-list__left" }, ai = { class: "compare-list__code" }, oi = { class: "compare-list__desc" }, si = { class: "compare-list__right" }, ci = { class: "compare-list__exchange" }, li = {
1878
+ }, ii = ["aria-selected", "onClick"], ai = { class: "compare-list__left" }, oi = { class: "compare-list__code" }, si = { class: "compare-list__desc" }, ci = { class: "compare-list__right" }, li = { class: "compare-list__exchange" }, ui = {
1873
1879
  key: 0,
1874
1880
  class: "compare-list__check",
1875
1881
  "aria-hidden": "true"
1876
- }, ui = /*#__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,17 +1924,18 @@ var Ar = 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),
1926
- t.selected.length > 0 ? (S(), o("span", Kr, O(t.selected.length), 1)) : a("", !0)
1934
+ t.comparisonLoading ? (S(), o("span", Kr)) : a("", !0),
1935
+ t.selected.length > 0 ? (S(), o("span", qr, O(t.selected.length), 1)) : a("", !0)
1927
1936
  ], 10, Gr), l(n, { name: "symbol-popover" }, {
1928
- default: N(() => [d.value ? (S(), o("div", qr, [
1929
- s("div", Jr, [
1937
+ default: N(() => [d.value ? (S(), o("div", Jr, [
1938
+ s("div", Yr, [
1930
1939
  i[4] ||= s("span", {
1931
1940
  class: "compare-search__icon",
1932
1941
  "aria-hidden": "true"
@@ -1966,7 +1975,7 @@ var Ar = 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 Ar = 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", Yr, [i[6] ||= s("div", { class: "compare-selected__header" }, [s("span", { class: "compare-selected__title" }, "已添加商品")], -1), s("div", Xr, [(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
  }, [
1989
- s("span", Zr, O(e.code), 1),
1990
- s("span", Qr, O(e.description), 1),
1998
+ s("span", {
1999
+ class: "compare-selected__color",
2000
+ style: _({ background: t.comparisonColors?.get(e.code) ?? "#888" })
2001
+ }, null, 4),
2002
+ s("span", Qr, O(e.code), 1),
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",
@@ -2002,9 +2015,9 @@ var Ar = m({
2002
2015
  "stroke-width": "2",
2003
2016
  "stroke-linecap": "round",
2004
2017
  "stroke-linejoin": "round"
2005
- }, [s("path", { d: "M18 6L6 18" }), s("path", { d: "M6 6l12 12" })], -1)]], 8, $r)
2018
+ }, [s("path", { d: "M18 6L6 18" }), s("path", { d: "M6 6l12 12" })], -1)]], 8, ei)
2006
2019
  ]))), 128))])])) : a("", !0),
2007
- s("div", ei, [x.value.length === 0 ? (S(), o("div", ti, [(S(), o("svg", ni, [...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 Ar = 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", ii, [s("span", ai, O(e.code), 1), s("span", oi, O(e.description), 1)]), s("span", si, [s("span", ci, O(e.exchange), 1), C(e.code) ? (S(), o("span", li, [...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",
@@ -2034,12 +2047,12 @@ var Ar = m({
2034
2047
  "stroke-width": "2.5",
2035
2048
  "stroke-linecap": "round",
2036
2049
  "stroke-linejoin": "round"
2037
- }, [s("polyline", { points: "20 6 9 17 4 12" })], -1)]])) : a("", !0)])], 10, ri))), 128))])
2050
+ }, [s("polyline", { points: "20 6 9 17 4 12" })], -1)]])) : a("", !0)])], 10, ii))), 128))])
2038
2051
  ])) : a("", !0)]),
2039
2052
  _: 1
2040
2053
  })], 512));
2041
2054
  }
2042
- }), [["__scopeId", "data-v-b8955787"]]), di = { class: "top-toolbar" }, fi = /*#__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 Ar = 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",
@@ -2158,7 +2173,7 @@ var Ar = m({
2158
2173
  function p(e) {
2159
2174
  c("symbolChange", e);
2160
2175
  }
2161
- return (t, n) => (S(), o("div", di, [
2176
+ return (t, n) => (S(), o("div", fi, [
2162
2177
  d.value ? (S(), i(Wr, {
2163
2178
  key: 0,
2164
2179
  symbol: d.value,
@@ -2172,12 +2187,19 @@ var Ar = m({
2172
2187
  "loading",
2173
2188
  "error"
2174
2189
  ])) : a("", !0),
2175
- l(ui, {
2190
+ l(di, {
2176
2191
  symbols: f.value,
2177
2192
  selected: e.overlaySymbols,
2193
+ "comparison-colors": e.comparisonColors,
2194
+ "comparison-loading": e.comparisonLoading,
2178
2195
  onAdd: n[0] ||= (e) => c("addOverlaySymbol", e),
2179
2196
  onRemove: n[1] ||= (e) => c("removeOverlaySymbol", e)
2180
- }, null, 8, ["symbols", "selected"]),
2197
+ }, null, 8, [
2198
+ "symbols",
2199
+ "selected",
2200
+ "comparison-colors",
2201
+ "comparison-loading"
2202
+ ]),
2181
2203
  l(Dr, {
2182
2204
  "model-value": e.kLineLevel,
2183
2205
  "onUpdate:modelValue": n[2] ||= (e) => c("kLineLevelChange", e)
@@ -2194,16 +2216,16 @@ var Ar = m({
2194
2216
  }, "fx", -1), s("span", { class: "indicator-button__text" }, "指标", -1)]])
2195
2217
  ]));
2196
2218
  }
2197
- }), [["__scopeId", "data-v-53988aa5"]]), pi = ["data-theme"], mi = {
2219
+ }), [["__scopeId", "data-v-6cd21003"]]), mi = ["data-theme"], hi = {
2198
2220
  class: "pane-separator-layer",
2199
2221
  "aria-hidden": "true"
2200
- }, hi = {
2222
+ }, gi = {
2201
2223
  class: "canvas-layer",
2202
2224
  ref: "canvasLayerRef"
2203
- }, gi = {
2225
+ }, _i = {
2204
2226
  class: "x-axis-canvas",
2205
2227
  ref: "xAxisCanvasRef"
2206
- }, _i = 4, vi = /*#__PURE__*/ W(/* @__PURE__ */ u({
2228
+ }, vi = 4, yi = /*#__PURE__*/ U(/* @__PURE__ */ u({
2207
2229
  __name: "KLineChart",
2208
2230
  props: {
2209
2231
  semanticConfig: {},
@@ -2236,10 +2258,10 @@ var Ar = m({
2236
2258
  C.value = !1, m.value = e.code, v.value = e, F();
2237
2259
  }
2238
2260
  function j(e) {
2239
- 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))));
2240
2262
  }
2241
2263
  function N(e) {
2242
- 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);
2243
2265
  }
2244
2266
  function P(e) {
2245
2267
  return {
@@ -2262,24 +2284,27 @@ var Ar = m({
2262
2284
  axisType: "percent"
2263
2285
  };
2264
2286
  G.value = e, z.value?.updateSettingsFacade(e);
2287
+ try {
2288
+ localStorage.setItem(he, JSON.stringify(e));
2289
+ } catch {}
2265
2290
  }
2266
2291
  let L = w(null), R = w(null), ee = w(null), te = w(null), ie = w(null), ce = w(null);
2267
- Ae(ee);
2268
- let z = D(null), ue = D(null), B = w(0), V = w(0), H = w(1), U = w(d.initialZoomLevel ?? 1), he = w(0), ge = w(1), _e = w(0), ve = w({}), ye = w(null), W = w([]), be = U.value;
2269
- he.value = fe(be, {
2292
+ je(ee);
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, {
2270
2295
  minKWidth: d.minKWidth,
2271
2296
  maxKWidth: d.maxKWidth,
2272
2297
  zoomLevelCount: d.zoomLevels,
2273
- dpr: H.value
2274
- }), ge.value = de(he.value, H.value);
2275
- let xe = w("light"), G = w({}), Se = r(() => {
2276
- let e = G.value.isAsiaMarket ?? !1, t = ae(xe.value, e);
2298
+ dpr: V.value
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);
2277
2302
  return {
2278
2303
  upColor: t.candleUpBody,
2279
2304
  downColor: t.candleDownBody
2280
2305
  };
2281
- }), Ce = r(() => {
2282
- let e = xe.value === "dark" ? ne : re, t = G.value.colorPresetSettings?.[xe.value];
2306
+ }), Ee = r(() => {
2307
+ let e = we.value === "dark" ? ne : re, t = G.value.colorPresetSettings?.[we.value];
2283
2308
  return t && Object.keys(t).length > 0 ? oe({
2284
2309
  ...e,
2285
2310
  colors: {
@@ -2288,47 +2313,47 @@ var Ar = m({
2288
2313
  }
2289
2314
  }) : oe(e);
2290
2315
  }), K = null;
2291
- function q(e) {
2316
+ function De(e) {
2292
2317
  z.value?.setTheme(e.matches ? "dark" : "light");
2293
2318
  }
2294
- function we(e, t) {
2319
+ function Oe(e, t) {
2295
2320
  if (!(!e || !t)) if (t === "auto") {
2296
2321
  let t = window.matchMedia("(prefers-color-scheme: dark)");
2297
- e.setTheme(t.matches ? "dark" : "light"), K !== t && (K?.removeEventListener("change", q), K = t, t.addEventListener("change", q));
2298
- } 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);
2299
2324
  }
2300
- function Te() {}
2301
- function Ee(e) {
2302
- G.value = e, we(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);
2303
2328
  }
2304
- function De(e, t, n) {
2329
+ function Ne(e, t, n) {
2305
2330
  let r = e.getBoundingClientRect();
2306
2331
  return {
2307
2332
  width: Math.max(t, Math.round(r.width)),
2308
2333
  height: Math.max(n, Math.round(r.height))
2309
2334
  };
2310
2335
  }
2311
- function ke(e) {
2336
+ function Pe(e) {
2312
2337
  e && h(() => {
2313
2338
  if (!e.isConnected) return;
2314
- let t = De(e, 180, 80);
2339
+ let t = Ne(e, 180, 80);
2315
2340
  z.value?.setTooltipSize(t);
2316
2341
  });
2317
2342
  }
2318
- function je(e) {
2343
+ function Fe(e) {
2319
2344
  e && h(() => {
2320
- e.isConnected && (ze.value = De(e, 120, 60));
2345
+ e.isConnected && (He.value = Ne(e, 120, 60));
2321
2346
  });
2322
2347
  }
2323
- let Me = w({
2348
+ let Ie = w({
2324
2349
  x: 0,
2325
2350
  y: 0
2326
- }), Ne = w(!1), Pe = null;
2327
- function Fe() {
2328
- Pe = null;
2351
+ }), q = w(!1), Le = null;
2352
+ function Re() {
2353
+ Le = null;
2329
2354
  }
2330
- function Ie(e) {
2331
- return Pe ||= e.getBoundingClientRect(), Pe;
2355
+ function ze(e) {
2356
+ return Le ||= e.getBoundingClientRect(), Le;
2332
2357
  }
2333
2358
  let J = D({
2334
2359
  crosshairPos: null,
@@ -2348,13 +2373,13 @@ var Ar = m({
2348
2373
  isHoveringPaneBoundary: !1,
2349
2374
  hoveredPaneBoundaryId: null,
2350
2375
  isHoveringRightAxis: !1
2351
- }), Y = D(null), Le = r(() => {
2352
- let e = ye.value;
2376
+ }), Y = D(null), Be = r(() => {
2377
+ let e = U.value;
2353
2378
  return e ? W.value.find((t) => t.id === e) ?? null : null;
2354
- }), Re = w([]), ze = w({
2379
+ }), Ve = w([]), He = w({
2355
2380
  width: 220,
2356
2381
  height: 120
2357
- }), Be = r(() => {
2382
+ }), Ue = r(() => {
2358
2383
  let e = L.value, t = R.value;
2359
2384
  return !e || !t ? {
2360
2385
  x: 0,
@@ -2363,86 +2388,86 @@ var Ar = m({
2363
2388
  x: e.offsetLeft,
2364
2389
  y: e.offsetTop
2365
2390
  };
2366
- }), Ve = r(() => J.value.hoveredMarkerData), He = r(() => J.value.hoveredCustomMarker), Ue = r(() => J.value.isDragging), We = r(() => J.value.isResizingPaneBoundary), Ge = r(() => J.value.isHoveringPaneBoundary), Ke = r(() => J.value.hoveredPaneBoundaryId), qe = r(() => J.value.isHoveringRightAxis), Je = 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);
2367
2392
  r(() => J.value.crosshairIndex);
2368
- let Ye = r(() => Ue.value ? "grabbing" : We.value || Ge.value ? "ns-resize" : Je.value === null ? "crosshair" : "pointer"), Xe = r(() => {
2393
+ let Qe = r(() => Ke.value ? "grabbing" : qe.value || Je.value ? "ns-resize" : Ze.value === null ? "crosshair" : "pointer"), $e = r(() => {
2369
2394
  let e = J.value.hoveredIndex;
2370
2395
  if (typeof e != "number") return null;
2371
- V.value;
2396
+ ge.value;
2372
2397
  let t = z.value?.getData();
2373
2398
  return t && e >= 0 && e < t.length ? t[e] : null;
2374
- }), Ze = r(() => J.value.hoveredIndex), Qe = r(() => J.value.tooltipPos), $e = r(() => ({
2375
- x: Qe.value.x + Be.value.x,
2376
- y: Qe.value.y + Be.value.y
2377
- })), et = r(() => ({
2378
- left: `${$e.value.x}px`,
2379
- top: `${$e.value.y}px`
2380
- })), tt = r(() => ({
2381
- x: Me.value.x + Be.value.x,
2382
- y: Me.value.y + Be.value.y
2383
- })), nt = r(() => ({
2384
- left: `${tt.value.x}px`,
2385
- top: `${tt.value.y}px`
2386
- })), rt = r(() => J.value.tooltipAnchorPlacement), it = r(() => {
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
2402
+ })), rt = r(() => ({
2403
+ left: `${nt.value.x}px`,
2404
+ top: `${nt.value.y}px`
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(() => {
2387
2412
  let e = z.value?.viewport.peek(), t = L.value, n = e?.plotWidth ?? (t ? t.clientWidth : 0);
2388
- return Me.value.x + 12 + ze.value.width + 12 > n ? "left-bottom" : "right-bottom";
2389
- }), at = r(() => (V.value, z.value?.getData() ?? []));
2390
- function ot(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) {
2391
2416
  Y.value?.setTool(e);
2392
2417
  }
2393
- function st() {
2418
+ function ut() {
2394
2419
  ce.value?.toggleMenu();
2395
2420
  }
2396
- function ct(e) {
2397
- let t = Le.value;
2421
+ function dt(e) {
2422
+ let t = Be.value;
2398
2423
  !t || !Y.value || (Y.value.updateDrawingStyle(t.id, e), W.value = Y.value.getDrawings());
2399
2424
  }
2400
- function lt() {
2401
- let e = Le.value;
2425
+ function ft() {
2426
+ let e = Be.value;
2402
2427
  !e || !Y.value || (Y.value.removeDrawing(e.id), W.value = Y.value.getDrawings());
2403
2428
  }
2404
- function ut(e) {
2429
+ function pt(e) {
2405
2430
  z.value?.handlePointerEvent(e, { onPointerDown: (e, t) => !!Y.value?.onPointerDown(e, t) });
2406
2431
  }
2407
- function dt(e) {
2432
+ function mt(e) {
2408
2433
  let t = L.value;
2409
2434
  if (t) {
2410
- let n = Ie(t);
2411
- Me.value = {
2435
+ let n = ze(t);
2436
+ Ie.value = {
2412
2437
  x: e.clientX - n.left,
2413
2438
  y: e.clientY - n.top
2414
2439
  };
2415
2440
  }
2416
2441
  z.value?.handlePointerEvent(e, { onPointerMove: (e, t) => Y.value?.onPointerMove(e, t) ? (W.value = Y.value.getDrawings(), !0) : !1 });
2417
2442
  }
2418
- function ft(e) {
2443
+ function ht(e) {
2419
2444
  z.value?.handlePointerEvent(e, { onPointerUp: (e, t) => !!Y.value?.onPointerUp(e, t) });
2420
2445
  }
2421
- function pt(e) {
2446
+ function gt(e) {
2422
2447
  z.value?.handlePointerEvent(e);
2423
2448
  }
2424
- function mt(e) {
2449
+ function _t(e) {
2425
2450
  z.value?.handlePointerEvent(e);
2426
2451
  }
2427
- function ht(e) {
2452
+ function vt(e) {
2428
2453
  z.value?.handlePointerEvent(e);
2429
2454
  }
2430
- function gt(e) {
2455
+ function yt(e) {
2431
2456
  z.value?.handlePointerEvent(e);
2432
2457
  }
2433
- function _t(e) {
2458
+ function bt(e) {
2434
2459
  z.value?.handlePointerEvent(e);
2435
2460
  }
2436
- function vt() {
2461
+ function xt() {
2437
2462
  z.value?.handleScrollEvent();
2438
2463
  }
2439
- let yt = w([]), bt = r(() => {
2464
+ let St = w([]), Ct = r(() => {
2440
2465
  let e = [], t = /* @__PURE__ */ new Set();
2441
2466
  for (let n of Z.value) t.has(n.indicatorId) || (t.add(n.indicatorId), e.push(n.indicatorId));
2442
2467
  return e;
2443
- }), xt = r(() => [...yt.value, ...bt.value]), X = w({}), Z = w([]);
2444
- function St() {
2445
- let e = ve.value.main ?? 3;
2468
+ }), wt = r(() => [...St.value, ...Ct.value]), X = w({}), Z = w([]);
2469
+ function Tt() {
2470
+ let e = be.value.main ?? 3;
2446
2471
  return Z.value.length === 0 ? [{
2447
2472
  id: "main",
2448
2473
  ratio: e,
@@ -2455,73 +2480,73 @@ var Ar = m({
2455
2480
  role: "price"
2456
2481
  }, ...Z.value.map((e) => ({
2457
2482
  id: e.id,
2458
- ratio: ve.value[e.id] ?? 1,
2483
+ ratio: be.value[e.id] ?? 1,
2459
2484
  visible: !0,
2460
2485
  role: "indicator"
2461
2486
  }))];
2462
2487
  }
2463
- function Ct(e) {
2488
+ function Et(e) {
2464
2489
  if (e === "VOLUME") return {};
2465
2490
  let t = me(e);
2466
2491
  return t?.runtime?.defaultConfig ? { ...t.runtime.defaultConfig } : {};
2467
2492
  }
2468
- function wt(e) {
2493
+ function Dt(e) {
2469
2494
  if (e === "VOLUME") return !0;
2470
2495
  let t = me(e);
2471
2496
  return !!t && t.category !== "main";
2472
2497
  }
2473
- function Tt(e = "VOLUME", t) {
2474
- if (Z.value.length >= _i) return !1;
2475
- let n = t ?? Ct(e);
2498
+ function Ot(e = "VOLUME", t) {
2499
+ if (Z.value.length >= vi) return !1;
2500
+ let n = t ?? Et(e);
2476
2501
  return !!z.value?.addIndicator(e, "sub", n);
2477
2502
  }
2478
- function Et(e) {
2503
+ function kt(e) {
2479
2504
  z.value?.removeIndicator(e);
2480
2505
  }
2481
- function Dt() {
2506
+ function jt() {
2482
2507
  for (let e of Z.value) z.value?.removeIndicator(e.id);
2483
2508
  }
2484
- function Ot() {
2509
+ function Mt() {
2485
2510
  let e = d.semanticConfig, t = z.value;
2486
2511
  if (!t) return;
2487
2512
  let n = e.indicators?.main;
2488
2513
  if (n) for (let e of n) e.enabled && t.addIndicator(e.type, "main", e.params);
2489
2514
  }
2490
- function kt(e, t) {
2491
- let n = Ct(t);
2515
+ function Nt(e, t) {
2516
+ let n = Et(t);
2492
2517
  z.value?.replaceSubPaneIndicator(e, t, n);
2493
2518
  }
2494
- function jt(e, t) {
2519
+ function Pt(e, t) {
2495
2520
  let n = z.value;
2496
2521
  if (!n) return;
2497
2522
  let r = me(e);
2498
2523
  if (r && (r.category === "main" || r.allowMainPane)) {
2499
- let r = yt.value.find((t) => t === e);
2524
+ let r = St.value.find((t) => t === e);
2500
2525
  t && !r ? n.addIndicator(e, "main", X.value[e]) : !t && r && n.removeIndicator(e.toUpperCase());
2501
2526
  return;
2502
2527
  }
2503
- if (wt(e)) if (t) {
2504
- if (Z.value.find((t) => t.indicatorId === e) || Z.value.length >= _i) return;
2528
+ if (Dt(e)) if (t) {
2529
+ if (Z.value.find((t) => t.indicatorId === e) || Z.value.length >= vi) return;
2505
2530
  if (!n.addIndicator(e, "sub", X.value[e]) && Z.value.length > 0) {
2506
2531
  let t = Z.value[Z.value.length - 1];
2507
- kt(t.id, e);
2532
+ Nt(t.id, e);
2508
2533
  }
2509
2534
  } else Z.value.filter((t) => t.indicatorId === e).forEach((e) => {
2510
2535
  n.removeIndicator(e.id);
2511
2536
  });
2512
2537
  }
2513
- function Mt(e, t) {
2538
+ function Ft(e, t) {
2514
2539
  if (e === "MA" || e === "BOLL" || e === "EXPMA" || e === "ENE") {
2515
2540
  z.value?.updateIndicatorParams(e, t);
2516
2541
  return;
2517
2542
  }
2518
- wt(e) && Z.value.filter((t) => t.indicatorId === e).forEach((e) => {
2543
+ Dt(e) && Z.value.filter((t) => t.indicatorId === e).forEach((e) => {
2519
2544
  z.value?.updateIndicatorParams(e.id, t);
2520
2545
  });
2521
2546
  }
2522
- function Nt(e) {
2547
+ function It(e) {
2523
2548
  if (!e.length || Z.value.length <= 1) return;
2524
- let t = e.filter((e) => wt(e));
2549
+ let t = e.filter((e) => Dt(e));
2525
2550
  if (!t.length) return;
2526
2551
  let n = new Map(Z.value.map((e) => [e.indicatorId, e])), r = [];
2527
2552
  for (let e of t) {
@@ -2534,30 +2559,30 @@ var Ar = m({
2534
2559
  if (i.join("|") === a.join("|")) return;
2535
2560
  Z.value = r;
2536
2561
  let o = z.value;
2537
- o && o.updatePaneLayout(St());
2562
+ o && o.updatePaneLayout(Tt());
2538
2563
  }
2539
- let Pt = r(() => d.rightAxisWidth + d.priceLabelWidth), Ft = r(() => (V.value, _e.value, he.value, ge.value, H.value, z.value?.getContentWidth() ?? 0));
2540
- function It(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) {
2541
2566
  z.value?.zoomToLevel(e, t);
2542
2567
  }
2543
2568
  c({
2544
- scheduleRender: Te,
2545
- addSubPane: Tt,
2546
- removeSubPane: Et,
2547
- switchSubIndicator: kt,
2548
- clearAllSubPanes: Dt,
2549
- zoomToLevel: It,
2550
- zoomIn: (e) => It(U.value + 1, e),
2551
- zoomOut: (e) => It(U.value - 1, e),
2552
- getZoomLevel: () => U.value,
2569
+ scheduleRender: Ae,
2570
+ addSubPane: Ot,
2571
+ removeSubPane: kt,
2572
+ switchSubIndicator: Nt,
2573
+ clearAllSubPanes: jt,
2574
+ zoomToLevel: zt,
2575
+ zoomIn: (e) => zt(H.value + 1, e),
2576
+ zoomOut: (e) => zt(H.value - 1, e),
2577
+ getZoomLevel: () => H.value,
2553
2578
  getZoomLevelCount: () => z.value?.getZoomLevelCount() ?? 10
2554
2579
  });
2555
- function Lt() {
2580
+ function Bt() {
2556
2581
  return (e) => {
2557
2582
  e.preventDefault(), z.value?.handleWheelEvent(e);
2558
2583
  };
2559
2584
  }
2560
- function Rt(e, t, n, r) {
2585
+ function Vt(e, t, n, r) {
2561
2586
  return le({
2562
2587
  container: e,
2563
2588
  data: [],
@@ -2574,11 +2599,11 @@ var Ar = m({
2574
2599
  maxKWidth: d.maxKWidth
2575
2600
  });
2576
2601
  }
2577
- function zt(e) {
2602
+ function Ht(e) {
2578
2603
  let t = e.paneLayout.subscribe(() => {
2579
- Fe();
2604
+ Re();
2580
2605
  let t = L.value && parseInt(getComputedStyle(L.value).borderTopWidth) || 0;
2581
- Re.value = e.paneLayout.peek().slice(0, -1).map((n) => {
2606
+ Ve.value = e.paneLayout.peek().slice(0, -1).map((n) => {
2582
2607
  let r = e.getPaneInfo(n.id), i = (r?.top ?? 0) + (r?.height ?? 0);
2583
2608
  return {
2584
2609
  id: n.id,
@@ -2586,21 +2611,21 @@ var Ar = m({
2586
2611
  };
2587
2612
  });
2588
2613
  }), n = e.paneRatios.subscribe(() => {
2589
- ve.value = { ...e.paneRatios.peek() };
2614
+ be.value = { ...e.paneRatios.peek() };
2590
2615
  }), r = e.viewport.subscribe(() => {
2591
2616
  let t = e.viewport.peek();
2592
- H.value !== t.dpr && (H.value = t.dpr), _e.value !== t.plotWidth && (_e.value = t.plotWidth), (U.value !== t.zoomLevel || he.value !== t.kWidth || ge.value !== t.kGap) && (U.value = t.zoomLevel, he.value = t.kWidth, ge.value = t.kGap);
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);
2593
2618
  }), i = e.data.subscribe(() => {
2594
2619
  let t = e.data.peek();
2595
- B.value = t.length, V.value++, C.value = t.length === 0;
2620
+ B.value = t.length, ge.value++, C.value = t.length === 0;
2596
2621
  }), a = e.dataLoading.subscribe(() => {
2597
2622
  b.value = e.dataLoading.peek();
2598
2623
  }), o = e.theme.subscribe(() => {
2599
2624
  let t = e.theme.peek();
2600
- xe.value = t, f("themeChange", t);
2625
+ we.value = t, f("themeChange", t);
2601
2626
  }), s = e.indicators.subscribe(() => {
2602
2627
  let t = e.indicators.peek(), n = t.filter((e) => e.role === "main").map((e) => e.definitionId);
2603
- yt.value = n;
2628
+ St.value = n;
2604
2629
  let r = { ...X.value };
2605
2630
  for (let e of t) e.role === "main" && e.params && Object.keys(e.params).length > 0 && (r[e.definitionId] = { ...e.params });
2606
2631
  e.updateRendererConfig("mainIndicatorLegend", { indicators: {
@@ -2632,46 +2657,50 @@ var Ar = m({
2632
2657
  let a = { ...X.value };
2633
2658
  for (let e of t) e.params && Object.keys(e.params).length > 0 && (a[e.indicatorId] = { ...e.params });
2634
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();
2635
2664
  });
2636
2665
  x(() => {
2637
- 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);
2638
2667
  });
2639
2668
  }
2640
- function Bt(e) {
2669
+ function Ut(e) {
2641
2670
  let t = ie.value?.getSettings() ?? { showVolumePriceMarkers: !0 };
2642
- G.value = t, we(e, t.theme), e.updateSettingsFacade(t);
2671
+ G.value = t, Oe(e, t.theme), e.updateSettingsFacade(t);
2643
2672
  }
2644
- function Vt(e) {
2673
+ function Wt(e) {
2645
2674
  Y.value = new se(e), Y.value.setCallbacks({
2646
2675
  onDrawingCreated: (e) => {
2647
- W.value = [...W.value, e], ye.value = e.id;
2676
+ W.value = [...W.value, e], U.value = e.id;
2648
2677
  },
2649
2678
  onToolChange: () => {},
2650
2679
  onDrawingSelected: (e) => {
2651
- ye.value = e?.id ?? null;
2680
+ U.value = e?.id ?? null;
2652
2681
  }
2653
2682
  });
2654
2683
  }
2655
- function Ht(e) {
2656
- e.setTooltipAnchorPositioning(Ne.value), e.interactionState.subscribe(() => {
2684
+ function Kt(e) {
2685
+ e.setTooltipAnchorPositioning(q.value), e.interactionState.subscribe(() => {
2657
2686
  J.value = e.interactionState.peek();
2658
- }), J.value = e.interactionState.peek(), H.value = e.viewport.peek().dpr;
2687
+ }), J.value = e.interactionState.peek(), V.value = e.viewport.peek().dpr;
2659
2688
  }
2660
- function Ut(e) {
2689
+ function qt(e) {
2661
2690
  e.setDataFetcher(d.dataFetcher), ue.value = new pe(e), ue.value.on("config:error", (e) => {
2662
2691
  console.error("Semantic config error:", e);
2663
2692
  }), ue.value.on("config:ready", () => {
2664
- Ot(), h(() => z.value?.scrollToRight());
2693
+ Mt(), h(() => z.value?.scrollToRight());
2665
2694
  });
2666
2695
  }
2667
2696
  return y(() => {
2668
- Ne.value = !1;
2697
+ q.value = !1;
2669
2698
  let e = L.value, t = R.value;
2670
2699
  if (!e || !t) return;
2671
- let n = Lt();
2700
+ let n = Bt();
2672
2701
  e.addEventListener("wheel", n, { passive: !1 });
2673
- let r = e.querySelector(".canvas-layer"), i = e.querySelector(".x-axis-canvas"), a = Rt(e, r, t.querySelector(".right-axis-host"), i);
2674
- z.value = a, zt(a), Ot(), Bt(a), Vt(a), Ht(a), Ut(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);
2675
2704
  }), x(() => {
2676
2705
  let e = z.value;
2677
2706
  e && (z.value = null, e.dispose()), Y.value = null;
@@ -2686,50 +2715,54 @@ var Ar = m({
2686
2715
  ref_key: "chartWrapperRef",
2687
2716
  ref: ee,
2688
2717
  class: "chart-wrapper",
2689
- "data-theme": xe.value,
2690
- style: _(Ce.value)
2718
+ "data-theme": we.value,
2719
+ style: _(Ee.value)
2691
2720
  }, [
2692
- l(fi, {
2721
+ l(pi, {
2693
2722
  symbol: m.value,
2694
2723
  "k-line-level": p.value,
2695
2724
  "symbol-loading": b.value,
2696
2725
  "symbol-error": C.value,
2697
2726
  "overlay-symbols": E.value,
2727
+ "comparison-colors": xe.value,
2728
+ "comparison-loading": Se.value,
2698
2729
  onAddOverlaySymbol: j,
2699
2730
  onRemoveOverlaySymbol: N,
2700
2731
  onKLineLevelChange: k,
2701
- onToggleIndicator: st,
2732
+ onToggleIndicator: ut,
2702
2733
  onSymbolChange: A
2703
2734
  }, null, 8, [
2704
2735
  "symbol",
2705
2736
  "k-line-level",
2706
2737
  "symbol-loading",
2707
2738
  "symbol-error",
2708
- "overlay-symbols"
2739
+ "overlay-symbols",
2740
+ "comparison-colors",
2741
+ "comparison-loading"
2709
2742
  ]),
2710
2743
  s("div", { class: g(["chart-stage", {
2711
- "is-dragging": Ue.value,
2712
- "is-resizing-pane": We.value,
2713
- "is-hovering-pane-separator": Ge.value,
2714
- "is-hovering-right-axis": qe.value,
2715
- "is-hovering-kline": Je.value !== null
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
2716
2749
  }]) }, [l(Er, {
2717
2750
  ref_key: "toolbarRef",
2718
2751
  ref: ie,
2719
2752
  "is-fullscreen": n.isFullscreen,
2720
- onSelectTool: ot,
2753
+ onSelectTool: lt,
2721
2754
  onToggleFullscreen: c[0] ||= (e) => r.$emit("toggleFullscreen"),
2722
- onZoomIn: c[1] ||= (e) => It(U.value + 1),
2723
- onZoomOut: c[2] ||= (e) => It(U.value - 1),
2724
- onSettingsChange: Ee
2755
+ onZoomIn: c[1] ||= (e) => zt(H.value + 1),
2756
+ onZoomOut: c[2] ||= (e) => zt(H.value - 1),
2757
+ onSettingsChange: Me
2725
2758
  }, null, 8, ["is-fullscreen"]), s("div", {
2726
2759
  class: "chart-main",
2727
2760
  ref_key: "chartMainRef",
2728
2761
  ref: R
2729
2762
  }, [
2730
- s("div", mi, [(S(!0), o(e, null, T(Re.value, (e) => (S(), o("div", {
2763
+ s("div", hi, [(S(!0), o(e, null, T(Ve.value, (e) => (S(), o("div", {
2731
2764
  key: e.id,
2732
- class: g(["pane-separator-line", { "is-active": Ke.value === e.id }]),
2765
+ class: g(["pane-separator-line", { "is-active": Ye.value === e.id }]),
2733
2766
  style: _({ top: `${e.top}px` })
2734
2767
  }, null, 6))), 128))]),
2735
2768
  s("div", {
@@ -2739,48 +2772,48 @@ var Ar = m({
2739
2772
  }, null, 512),
2740
2773
  s("div", {
2741
2774
  class: "chart-container",
2742
- style: _({ cursor: Ye.value }),
2775
+ style: _({ cursor: Qe.value }),
2743
2776
  ref_key: "containerRef",
2744
2777
  ref: L,
2745
- onScrollPassive: vt,
2746
- onPointerdown: ut,
2747
- onPointermove: dt,
2748
- onPointerup: ft,
2749
- onPointerleave: pt
2778
+ onScrollPassive: xt,
2779
+ onPointerdown: pt,
2780
+ onPointermove: mt,
2781
+ onPointerup: ht,
2782
+ onPointerleave: gt
2750
2783
  }, [s("div", {
2751
2784
  class: "scroll-content",
2752
- style: _({ width: Ft.value + "px" })
2753
- }, [s("div", hi, [s("canvas", gi, null, 512), Le.value ? (S(), i(Oe, {
2785
+ style: _({ width: Rt.value + "px" })
2786
+ }, [s("div", gi, [s("canvas", _i, null, 512), Be.value ? (S(), i(ke, {
2754
2787
  key: 0,
2755
- drawing: Le.value,
2756
- onUpdateStyle: ct,
2757
- onDelete: lt
2788
+ drawing: Be.value,
2789
+ onUpdateStyle: dt,
2790
+ onDelete: ft
2758
2791
  }, null, 8, ["drawing"])) : a("", !0)], 512)], 4)], 36),
2759
2792
  te.value ? (S(), i(t, {
2760
2793
  key: 0,
2761
2794
  to: te.value
2762
2795
  }, [
2763
- Xe.value ? (S(), o("div", {
2796
+ $e.value ? (S(), o("div", {
2764
2797
  key: 0,
2765
- class: g(["tooltip-anchor kline-tooltip-anchor", { "use-anchor": Ne.value }]),
2766
- style: _(et.value)
2798
+ class: g(["tooltip-anchor kline-tooltip-anchor", { "use-anchor": q.value }]),
2799
+ style: _(rt.value)
2767
2800
  }, null, 6)) : a("", !0),
2768
- Ve.value || He.value ? (S(), o("div", {
2801
+ We.value || Ge.value ? (S(), o("div", {
2769
2802
  key: 1,
2770
- class: g(["tooltip-anchor marker-tooltip-anchor", { "use-anchor": Ne.value }]),
2771
- style: _(nt.value)
2803
+ class: g(["tooltip-anchor marker-tooltip-anchor", { "use-anchor": q.value }]),
2804
+ style: _(at.value)
2772
2805
  }, null, 6)) : a("", !0),
2773
- Xe.value ? (S(), i(Gt, {
2806
+ $e.value ? (S(), i(Gt, {
2774
2807
  key: 2,
2775
- k: Xe.value,
2776
- index: Ze.value,
2777
- data: at.value,
2778
- pos: $e.value,
2779
- "set-el": ke,
2780
- "use-anchor": Ne.value,
2781
- "anchor-placement": rt.value,
2782
- "up-color": Se.value.upColor,
2783
- "down-color": Se.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
2784
2817
  }, null, 8, [
2785
2818
  "k",
2786
2819
  "index",
@@ -2791,13 +2824,13 @@ var Ar = m({
2791
2824
  "up-color",
2792
2825
  "down-color"
2793
2826
  ])) : a("", !0),
2794
- Ve.value || He.value ? (S(), i(Jt, {
2827
+ We.value || Ge.value ? (S(), i(Jt, {
2795
2828
  key: 3,
2796
- marker: Ve.value || He.value,
2797
- pos: tt.value,
2798
- "use-anchor": Ne.value,
2799
- "anchor-placement": it.value,
2800
- "set-el": je
2829
+ marker: We.value || Ge.value,
2830
+ pos: it.value,
2831
+ "use-anchor": q.value,
2832
+ "anchor-placement": st.value,
2833
+ "set-el": Fe
2801
2834
  }, null, 8, [
2802
2835
  "marker",
2803
2836
  "pos",
@@ -2808,27 +2841,27 @@ var Ar = m({
2808
2841
  s("div", {
2809
2842
  class: "right-axis-host",
2810
2843
  ref: "rightAxisLayerRef",
2811
- style: _({ width: Pt.value + "px" }),
2812
- onPointerdown: mt,
2813
- onPointermove: ht,
2814
- onPointerup: gt,
2815
- onPointerleave: _t
2844
+ style: _({ width: Lt.value + "px" }),
2845
+ onPointerdown: _t,
2846
+ onPointermove: vt,
2847
+ onPointerup: yt,
2848
+ onPointerleave: bt
2816
2849
  }, null, 36)
2817
2850
  ], 512)], 2),
2818
2851
  l(At, {
2819
2852
  ref_key: "indicatorSelectorRef",
2820
2853
  ref: ce,
2821
- "active-indicators": xt.value,
2854
+ "active-indicators": wt.value,
2822
2855
  "indicator-params": X.value,
2823
- onToggle: jt,
2824
- onUpdateParams: Mt,
2825
- onReorderSubIndicators: Nt
2856
+ onToggle: Pt,
2857
+ onUpdateParams: Ft,
2858
+ onReorderSubIndicators: It
2826
2859
  }, null, 8, ["active-indicators", "indicator-params"])
2827
- ], 12, pi));
2860
+ ], 12, mi));
2828
2861
  }
2829
- }), [["__scopeId", "data-v-767b4523"]]), yi = {
2862
+ }), [["__scopeId", "data-v-c0ab68e5"]]), bi = {
2830
2863
  name: "@363045841yyt/klinechart",
2831
- version: "0.8.1-alpha.4",
2864
+ version: "0.8.1",
2832
2865
  description: "Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.",
2833
2866
  license: "MIT",
2834
2867
  repository: {
@@ -2900,14 +2933,14 @@ var Ar = m({
2900
2933
  vitest: "^4.1.8",
2901
2934
  vue: "^3.5.35"
2902
2935
  }
2903
- }.version, bi = null;
2904
- function xi(e) {
2905
- bi = e;
2906
- }
2936
+ }.version, xi = null;
2907
2937
  function Si(e) {
2938
+ xi = e;
2939
+ }
2940
+ function Ci(e) {
2908
2941
  if (e.container == null) throw Error("[@363045841yyt/klinechart] createChart: `container` is required and must be a non-null HTMLElement");
2909
- if (bi === null) throw Error("[@363045841yyt/klinechart] createChart: no ChartController factory registered. Call __setControllerFactory(...) before mounting (the core package wires this in production).");
2910
- return bi(e);
2942
+ if (xi === null) throw Error("[@363045841yyt/klinechart] createChart: no ChartController factory registered. Call __setControllerFactory(...) before mounting (the core package wires this in production).");
2943
+ return xi(e);
2911
2944
  }
2912
2945
  function $(e) {
2913
2946
  let t = D(e.peek());
@@ -2915,9 +2948,9 @@ function $(e) {
2915
2948
  t.value = e.peek();
2916
2949
  })), t;
2917
2950
  }
2918
- function Ci(e, t) {
2951
+ function wi(e, t) {
2919
2952
  let n = D(null), r = (e) => {
2920
- e == null || n.value != null || (n.value = Si({
2953
+ e == null || n.value != null || (n.value = Ci({
2921
2954
  ...t,
2922
2955
  container: e
2923
2956
  }));
@@ -2935,7 +2968,7 @@ function Ci(e, t) {
2935
2968
  };
2936
2969
  return b(a), v(a), { chart: n };
2937
2970
  }
2938
- function wi(e) {
2971
+ function Ti(e) {
2939
2972
  let t = D(e.indicators.peek());
2940
2973
  return b(e.indicators.subscribe(() => {
2941
2974
  t.value = e.indicators.peek();
@@ -2946,25 +2979,25 @@ function wi(e) {
2946
2979
  updateParams: e.updateIndicatorParams.bind(e)
2947
2980
  };
2948
2981
  }
2949
- function Ti(e) {
2982
+ function Ei(e) {
2950
2983
  let t = D(e.interactionState.peek());
2951
2984
  return b(e.interactionState.subscribe(() => {
2952
2985
  t.value = e.interactionState.peek();
2953
2986
  })), t;
2954
2987
  }
2955
- function Ei(e) {
2988
+ function Di(e) {
2956
2989
  let t = D(e.paneRatios.peek());
2957
2990
  return b(e.paneRatios.subscribe(() => {
2958
2991
  t.value = e.paneRatios.peek();
2959
2992
  })), t;
2960
2993
  }
2961
- function Di(e) {
2994
+ function Oi(e) {
2962
2995
  let t = D(e.viewport.peek());
2963
2996
  return b(e.viewport.subscribe(() => {
2964
2997
  t.value = e.viewport.peek();
2965
2998
  })), t;
2966
2999
  }
2967
- function Oi(e) {
3000
+ function ki(e) {
2968
3001
  let t = te({ catalog: e.catalog });
2969
3002
  b(() => t.dispose());
2970
3003
  let n = $(t.filteredMain), r = $(t.filteredSub), i = $(t.menuOpen), a = $(t.searchQuery);
@@ -2993,7 +3026,7 @@ function Oi(e) {
2993
3026
  isActive: c
2994
3027
  };
2995
3028
  }
2996
- var ki = u({
3029
+ var Ai = u({
2997
3030
  name: "KLineChart",
2998
3031
  props: {
2999
3032
  data: {
@@ -3026,7 +3059,7 @@ var ki = u({
3026
3059
  y(() => {
3027
3060
  let n = r.value;
3028
3061
  n != null && (i.run(() => {
3029
- if (a.value = Si({
3062
+ if (a.value = Ci({
3030
3063
  container: n,
3031
3064
  data: e.data,
3032
3065
  initialZoomLevel: e.initialZoomLevel,
@@ -3072,9 +3105,9 @@ var ki = u({
3072
3105
  }
3073
3106
  });
3074
3107
  }
3075
- }), Ai = { install(e) {
3076
- e.component("KLineChart", ki);
3108
+ }), ji = { install(e) {
3109
+ e.component("KLineChart", Ai);
3077
3110
  } };
3078
- xi(ee);
3111
+ Si(ee);
3079
3112
  //#endregion
3080
- export { R as CORE_VERSION, Oe as DrawingStyleToolbar, qe as IndicatorParams, At as IndicatorSelector, ki as KLineChart, vi as KLineChartVue, Gt as KLineTooltip, Ai as KMapPlugin, Er as LeftToolbar, Jt as MarkerTooltip, yi as VERSION, xi as __setControllerFactory, $ as coreSignalToVueRef, Si as createChart, Ci as useChart, Oi as useIndicatorSelector, wi as useIndicators, Ti as useInteractionState, Ei as usePaneRatios, Di 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 };