st-comp 0.0.69 → 0.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/lib/ChartLayout.cjs.js +1 -0
  2. package/lib/ChartLayout.es.js +71 -0
  3. package/lib/Dialog.cjs.js +1 -0
  4. package/lib/Dialog.es.js +89 -0
  5. package/lib/HeatMap.cjs.js +1 -0
  6. package/lib/HeatMap.es.js +117 -0
  7. package/lib/Kline.cjs.js +1 -0
  8. package/lib/Kline.es.js +2631 -0
  9. package/lib/KlineNew.cjs.js +1 -0
  10. package/lib/KlineNew.es.js +614 -0
  11. package/lib/LinearLegend.cjs.js +1 -0
  12. package/lib/LinearLegend.es.js +62 -0
  13. package/lib/Map.cjs.js +1 -0
  14. package/lib/{bundle.js → Map.es.js} +43 -41504
  15. package/lib/Pagination.cjs.js +1 -0
  16. package/lib/Pagination.es.js +624 -0
  17. package/lib/Pie.cjs.js +2 -0
  18. package/lib/Pie.es.js +159 -0
  19. package/lib/Table.cjs.js +20 -0
  20. package/lib/Table.es.js +4006 -0
  21. package/lib/TreeMap.cjs.js +2 -0
  22. package/lib/TreeMap.es.js +162 -0
  23. package/lib/VarietySearch.cjs.js +12 -0
  24. package/lib/VarietySearch.es.js +3335 -0
  25. package/lib/VirtualTable.cjs.js +13 -0
  26. package/lib/VirtualTable.es.js +2679 -0
  27. package/lib/_commonjsHelpers-10dfc225.js +8 -0
  28. package/lib/_commonjsHelpers-87b0abe8.cjs +1 -0
  29. package/lib/_plugin-vue_export-helper-dad06003.js +9 -0
  30. package/lib/_plugin-vue_export-helper-f246444f.cjs +1 -0
  31. package/lib/base-4865d432.cjs +9 -0
  32. package/lib/base-a240bf62.js +762 -0
  33. package/lib/bundle.cjs.js +1 -0
  34. package/lib/bundle.es.js +46 -0
  35. package/lib/bundle.umd-4967d574.js +16091 -0
  36. package/lib/bundle.umd-c5698c50.cjs +71 -0
  37. package/lib/castArray-3341cbb4.cjs +1 -0
  38. package/lib/castArray-a723a736.js +10 -0
  39. package/lib/config-provider-3db4dac6.js +148 -0
  40. package/lib/config-provider-cf4edc1e.cjs +1 -0
  41. package/lib/el-button-c24606d0.cjs +1 -0
  42. package/lib/el-button-fa6a5742.js +231 -0
  43. package/lib/el-empty-282e5e93.js +204 -0
  44. package/lib/el-empty-608948d9.cjs +1 -0
  45. package/lib/el-icon-7718f55e.cjs +1 -0
  46. package/lib/el-icon-d9ef9ccc.js +592 -0
  47. package/lib/el-overlay-7fceb816.cjs +5 -0
  48. package/lib/el-overlay-9b7bdd18.js +678 -0
  49. package/lib/el-scrollbar-7dc53299.js +248 -0
  50. package/lib/el-scrollbar-bc381e35.cjs +1 -0
  51. package/lib/el-select-85ed2643.js +1894 -0
  52. package/lib/el-select-a50741c1.cjs +9 -0
  53. package/lib/el-tag-308f715a.js +2416 -0
  54. package/lib/el-tag-87fd3960.cjs +1 -0
  55. package/lib/el-tooltip-0ea8fbf8.cjs +1 -0
  56. package/lib/el-tooltip-4ed993c7.js +1 -0
  57. package/lib/focus-trap-2a734f35.cjs +3 -0
  58. package/lib/focus-trap-6922b96b.js +376 -0
  59. package/lib/index-1508a06b.js +556 -0
  60. package/lib/index-48a9f60d.cjs +1 -0
  61. package/lib/index-657047bb.js +513 -0
  62. package/lib/index-eea0bcb3.cjs +1 -0
  63. package/lib/index.esm-8d9a2abe.js +2432 -0
  64. package/lib/index.esm-94a95a2a.cjs +3 -0
  65. package/lib/raf-5e5c53db.cjs +1 -0
  66. package/lib/raf-fc8a56cf.js +6 -0
  67. package/lib/scroll-bb8039ba.cjs +1 -0
  68. package/lib/scroll-cfdae01b.js +35 -0
  69. package/lib/style.css +1 -1
  70. package/lib/typescript-7ae59c4c.js +4 -0
  71. package/lib/typescript-b63f8e83.cjs +1 -0
  72. package/lib/vnode-a9714179.js +14 -0
  73. package/lib/vnode-abafec9e.cjs +1 -0
  74. package/lib/zh-cn-92978806.js +134 -0
  75. package/lib/zh-cn-d4df7172.cjs +1 -0
  76. package/package.json +3 -3
  77. package/packages/ChartLayout/index.ts +5 -5
  78. package/packages/Dialog/index.ts +5 -5
  79. package/packages/HeatMap/index.ts +5 -5
  80. package/packages/Kline/componentsNew/KlineUtils/index.vue +2 -3
  81. package/packages/LinearLegend/index.ts +5 -5
  82. package/packages/Map/index.ts +5 -5
  83. package/packages/Pagination/index.ts +5 -5
  84. package/packages/Pie/index.ts +5 -5
  85. package/packages/Table/index.ts +5 -5
  86. package/packages/TreeMap/index.ts +5 -5
  87. package/packages/VarietySearch/index.ts +5 -5
  88. package/packages/VirtualTable/index.ts +5 -5
  89. package/vitePlugins/createExportFile.ts +5 -5
  90. package/lib/bundle.umd.cjs +0 -139
@@ -0,0 +1,2631 @@
1
+ import { u as q, _ as me, a as de, r as ve, h as Mt, b as Se, t as pe, i as ae, c as Ve, d as Oe, e as ct, w as dt, f as _e } from "./base-a240bf62.js";
2
+ import "./el-tooltip-4ed993c7.js";
3
+ import { E as Xe } from "./el-tag-308f715a.js";
4
+ import { defineComponent as G, openBlock as _, createBlock as ue, Transition as qe, mergeProps as Ke, unref as Nt, toHandlers as yt, withCtx as ee, renderSlot as X, computed as O, getCurrentInstance as Fe, inject as fe, ref as S, reactive as Qe, watch as H, provide as ke, onMounted as le, onBeforeUnmount as et, h as U, Fragment as ne, withDirectives as zt, vShow as jt, watchEffect as gt, nextTick as Be, toRef as pt, resolveComponent as ft, createElementBlock as R, normalizeClass as re, createElementVNode as te, createTextVNode as tt, toDisplayString as ie, renderList as De, normalizeStyle as Pe, createCommentVNode as nt, onUnmounted as Re, createVNode as K } from "vue";
5
+ import * as Te from "echarts";
6
+ import { _ as oe } from "./_plugin-vue_export-helper-dad06003.js";
7
+ import { b as Le } from "./bundle.umd-4967d574.js";
8
+ import { i as Tt, t as It } from "./index.esm-8d9a2abe.js";
9
+ import { u as mt } from "./el-scrollbar-7dc53299.js";
10
+ import { a as Dt, b as Lt, E as ot, m as vt } from "./index-1508a06b.js";
11
+ import { E as J, u as ht, i as Ne, a as We } from "./focus-trap-6922b96b.js";
12
+ import { T as xt } from "./index-657047bb.js";
13
+ import { m as At } from "./typescript-7ae59c4c.js";
14
+ import { f as Yt } from "./vnode-a9714179.js";
15
+ import { E as Ct, a as bt } from "./el-select-85ed2643.js";
16
+ import "./_commonjsHelpers-10dfc225.js";
17
+ import "./scroll-cfdae01b.js";
18
+ const je = function(e, n, ...a) {
19
+ let o;
20
+ n.includes("mouse") || n.includes("click") ? o = "MouseEvents" : n.includes("key") ? o = "KeyboardEvent" : o = "HTMLEvents";
21
+ const t = document.createEvent(o);
22
+ return t.initEvent(n, ...a), e.dispatchEvent(t), e;
23
+ }, wt = G({
24
+ name: "ElCollapseTransition"
25
+ }), Ot = /* @__PURE__ */ G({
26
+ ...wt,
27
+ setup(e) {
28
+ const n = q("collapse-transition"), a = (t) => {
29
+ t.style.maxHeight = "", t.style.overflow = t.dataset.oldOverflow, t.style.paddingTop = t.dataset.oldPaddingTop, t.style.paddingBottom = t.dataset.oldPaddingBottom;
30
+ }, o = {
31
+ beforeEnter(t) {
32
+ t.dataset || (t.dataset = {}), t.dataset.oldPaddingTop = t.style.paddingTop, t.dataset.oldPaddingBottom = t.style.paddingBottom, t.style.maxHeight = 0, t.style.paddingTop = 0, t.style.paddingBottom = 0;
33
+ },
34
+ enter(t) {
35
+ t.dataset.oldOverflow = t.style.overflow, t.scrollHeight !== 0 ? t.style.maxHeight = `${t.scrollHeight}px` : t.style.maxHeight = 0, t.style.paddingTop = t.dataset.oldPaddingTop, t.style.paddingBottom = t.dataset.oldPaddingBottom, t.style.overflow = "hidden";
36
+ },
37
+ afterEnter(t) {
38
+ t.style.maxHeight = "", t.style.overflow = t.dataset.oldOverflow;
39
+ },
40
+ enterCancelled(t) {
41
+ a(t);
42
+ },
43
+ beforeLeave(t) {
44
+ t.dataset || (t.dataset = {}), t.dataset.oldPaddingTop = t.style.paddingTop, t.dataset.oldPaddingBottom = t.style.paddingBottom, t.dataset.oldOverflow = t.style.overflow, t.style.maxHeight = `${t.scrollHeight}px`, t.style.overflow = "hidden";
45
+ },
46
+ leave(t) {
47
+ t.scrollHeight !== 0 && (t.style.maxHeight = 0, t.style.paddingTop = 0, t.style.paddingBottom = 0);
48
+ },
49
+ afterLeave(t) {
50
+ a(t);
51
+ },
52
+ leaveCancelled(t) {
53
+ a(t);
54
+ }
55
+ };
56
+ return (t, l) => (_(), ue(qe, Ke({
57
+ name: Nt(n).b()
58
+ }, yt(o)), {
59
+ default: ee(() => [
60
+ X(t.$slots, "default")
61
+ ]),
62
+ _: 3
63
+ }, 16, ["name"]));
64
+ }
65
+ });
66
+ var ge = /* @__PURE__ */ me(Ot, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/collapse-transition/src/collapse-transition.vue"]]);
67
+ ge.install = (e) => {
68
+ e.component(ge.name, ge);
69
+ };
70
+ const kt = ge;
71
+ let Et = class {
72
+ constructor(n, a) {
73
+ this.parent = n, this.domNode = a, this.subIndex = 0, this.subIndex = 0, this.init();
74
+ }
75
+ init() {
76
+ this.subMenuItems = this.domNode.querySelectorAll("li"), this.addListeners();
77
+ }
78
+ gotoSubIndex(n) {
79
+ n === this.subMenuItems.length ? n = 0 : n < 0 && (n = this.subMenuItems.length - 1), this.subMenuItems[n].focus(), this.subIndex = n;
80
+ }
81
+ addListeners() {
82
+ const n = this.parent.domNode;
83
+ Array.prototype.forEach.call(this.subMenuItems, (a) => {
84
+ a.addEventListener("keydown", (o) => {
85
+ let t = !1;
86
+ switch (o.code) {
87
+ case J.down: {
88
+ this.gotoSubIndex(this.subIndex + 1), t = !0;
89
+ break;
90
+ }
91
+ case J.up: {
92
+ this.gotoSubIndex(this.subIndex - 1), t = !0;
93
+ break;
94
+ }
95
+ case J.tab: {
96
+ je(n, "mouseleave");
97
+ break;
98
+ }
99
+ case J.enter:
100
+ case J.space: {
101
+ t = !0, o.currentTarget.click();
102
+ break;
103
+ }
104
+ }
105
+ return t && (o.preventDefault(), o.stopPropagation()), !1;
106
+ });
107
+ });
108
+ }
109
+ }, St = class {
110
+ constructor(n, a) {
111
+ this.domNode = n, this.submenu = null, this.submenu = null, this.init(a);
112
+ }
113
+ init(n) {
114
+ this.domNode.setAttribute("tabindex", "0");
115
+ const a = this.domNode.querySelector(`.${n}-menu`);
116
+ a && (this.submenu = new Et(this, a)), this.addListeners();
117
+ }
118
+ addListeners() {
119
+ this.domNode.addEventListener("keydown", (n) => {
120
+ let a = !1;
121
+ switch (n.code) {
122
+ case J.down: {
123
+ je(n.currentTarget, "mouseenter"), this.submenu && this.submenu.gotoSubIndex(0), a = !0;
124
+ break;
125
+ }
126
+ case J.up: {
127
+ je(n.currentTarget, "mouseenter"), this.submenu && this.submenu.gotoSubIndex(this.submenu.subMenuItems.length - 1), a = !0;
128
+ break;
129
+ }
130
+ case J.tab: {
131
+ je(n.currentTarget, "mouseleave");
132
+ break;
133
+ }
134
+ case J.enter:
135
+ case J.space: {
136
+ a = !0, n.currentTarget.click();
137
+ break;
138
+ }
139
+ }
140
+ a && n.preventDefault();
141
+ });
142
+ }
143
+ }, _t = class {
144
+ constructor(n, a) {
145
+ this.domNode = n, this.init(a);
146
+ }
147
+ init(n) {
148
+ const a = this.domNode.childNodes;
149
+ Array.from(a).forEach((o) => {
150
+ o.nodeType === 1 && new St(o, n);
151
+ });
152
+ }
153
+ };
154
+ const Ft = G({
155
+ name: "ElMenuCollapseTransition",
156
+ setup() {
157
+ const e = q("menu");
158
+ return {
159
+ listeners: {
160
+ onBeforeEnter: (a) => a.style.opacity = "0.2",
161
+ onEnter(a, o) {
162
+ de(a, `${e.namespace.value}-opacity-transition`), a.style.opacity = "1", o();
163
+ },
164
+ onAfterEnter(a) {
165
+ ve(a, `${e.namespace.value}-opacity-transition`), a.style.opacity = "";
166
+ },
167
+ onBeforeLeave(a) {
168
+ a.dataset || (a.dataset = {}), Mt(a, e.m("collapse")) ? (ve(a, e.m("collapse")), a.dataset.oldOverflow = a.style.overflow, a.dataset.scrollWidth = a.clientWidth.toString(), de(a, e.m("collapse"))) : (de(a, e.m("collapse")), a.dataset.oldOverflow = a.style.overflow, a.dataset.scrollWidth = a.clientWidth.toString(), ve(a, e.m("collapse"))), a.style.width = `${a.scrollWidth}px`, a.style.overflow = "hidden";
169
+ },
170
+ onLeave(a) {
171
+ de(a, "horizontal-collapse-transition"), a.style.width = `${a.dataset.scrollWidth}px`;
172
+ }
173
+ }
174
+ };
175
+ }
176
+ });
177
+ function Qt(e, n, a, o, t, l) {
178
+ return _(), ue(qe, Ke({ mode: "out-in" }, e.listeners), {
179
+ default: ee(() => [
180
+ X(e.$slots, "default")
181
+ ]),
182
+ _: 3
183
+ }, 16);
184
+ }
185
+ var Bt = /* @__PURE__ */ me(Ft, [["render", Qt], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/menu/src/menu-collapse-transition.vue"]]);
186
+ function at(e, n) {
187
+ const a = O(() => {
188
+ let t = e.parent;
189
+ const l = [n.value];
190
+ for (; t.type.name !== "ElMenu"; )
191
+ t.props.index && l.unshift(t.props.index), t = t.parent;
192
+ return l;
193
+ });
194
+ return {
195
+ parentMenu: O(() => {
196
+ let t = e.parent;
197
+ for (; t && !["ElMenu", "ElSubMenu"].includes(t.type.name); )
198
+ t = t.parent;
199
+ return t;
200
+ }),
201
+ indexPath: a
202
+ };
203
+ }
204
+ function Pt(e) {
205
+ return O(() => {
206
+ const a = e.backgroundColor;
207
+ return a ? new xt(a).shade(20).toString() : "";
208
+ });
209
+ }
210
+ const it = (e, n) => {
211
+ const a = q("menu");
212
+ return O(() => a.cssVarBlock({
213
+ "text-color": e.textColor || "",
214
+ "hover-text-color": e.textColor || "",
215
+ "bg-color": e.backgroundColor || "",
216
+ "hover-bg-color": Pt(e).value || "",
217
+ "active-color": e.activeTextColor || "",
218
+ level: `${n}`
219
+ }));
220
+ }, Rt = Se({
221
+ index: {
222
+ type: String,
223
+ required: !0
224
+ },
225
+ showTimeout: {
226
+ type: Number,
227
+ default: 300
228
+ },
229
+ hideTimeout: {
230
+ type: Number,
231
+ default: 300
232
+ },
233
+ popperClass: String,
234
+ disabled: Boolean,
235
+ popperAppendToBody: {
236
+ type: Boolean,
237
+ default: void 0
238
+ },
239
+ teleported: {
240
+ type: Boolean,
241
+ default: void 0
242
+ },
243
+ popperOffset: {
244
+ type: Number,
245
+ default: 6
246
+ },
247
+ expandCloseIcon: {
248
+ type: Ne
249
+ },
250
+ expandOpenIcon: {
251
+ type: Ne
252
+ },
253
+ collapseCloseIcon: {
254
+ type: Ne
255
+ },
256
+ collapseOpenIcon: {
257
+ type: Ne
258
+ }
259
+ }), ye = "ElSubMenu";
260
+ var Ue = G({
261
+ name: ye,
262
+ props: Rt,
263
+ setup(e, { slots: n, expose: a }) {
264
+ ht({
265
+ from: "popper-append-to-body",
266
+ replacement: "teleported",
267
+ scope: ye,
268
+ version: "2.3.0",
269
+ ref: "https://element-plus.org/en-US/component/menu.html#submenu-attributes"
270
+ }, O(() => e.popperAppendToBody !== void 0));
271
+ const o = Fe(), { indexPath: t, parentMenu: l } = at(o, O(() => e.index)), r = q("menu"), u = q("sub-menu"), i = fe("rootMenu");
272
+ i || pe(ye, "can not inject root menu");
273
+ const s = fe(`subMenu:${l.value.uid}`);
274
+ s || pe(ye, "can not inject sub menu");
275
+ const d = S({}), g = S({});
276
+ let M;
277
+ const N = S(!1), I = S(), c = S(null), v = O(() => T.value === "horizontal" && k.value ? "bottom-start" : "right-start"), b = O(() => T.value === "horizontal" && k.value || T.value === "vertical" && !i.props.collapse ? e.expandCloseIcon && e.expandOpenIcon ? f.value ? e.expandOpenIcon : e.expandCloseIcon : Dt : e.collapseCloseIcon && e.collapseOpenIcon ? f.value ? e.collapseOpenIcon : e.collapseCloseIcon : Lt), k = O(() => s.level === 0), B = O(() => {
278
+ var Y;
279
+ const w = (Y = e.teleported) != null ? Y : e.popperAppendToBody;
280
+ return w === void 0 ? k.value : w;
281
+ }), z = O(() => i.props.collapse ? `${r.namespace.value}-zoom-in-left` : `${r.namespace.value}-zoom-in-top`), p = O(() => T.value === "horizontal" && k.value ? [
282
+ "bottom-start",
283
+ "bottom-end",
284
+ "top-start",
285
+ "top-end",
286
+ "right-start",
287
+ "left-start"
288
+ ] : [
289
+ "right-start",
290
+ "right",
291
+ "right-end",
292
+ "left-start",
293
+ "bottom-start",
294
+ "bottom-end",
295
+ "top-start",
296
+ "top-end"
297
+ ]), f = O(() => i.openedMenus.includes(e.index)), A = O(() => {
298
+ let Y = !1;
299
+ return Object.values(d.value).forEach((w) => {
300
+ w.active && (Y = !0);
301
+ }), Object.values(g.value).forEach((w) => {
302
+ w.active && (Y = !0);
303
+ }), Y;
304
+ }), C = O(() => i.props.backgroundColor || ""), Q = O(() => i.props.activeTextColor || ""), P = O(() => i.props.textColor || ""), T = O(() => i.props.mode), D = Qe({
305
+ index: e.index,
306
+ indexPath: t,
307
+ active: A
308
+ }), h = it(i.props, s.level + 1), y = O(() => T.value !== "horizontal" ? {
309
+ color: P.value
310
+ } : {
311
+ borderBottomColor: A.value ? i.props.activeTextColor ? Q.value : "" : "transparent",
312
+ color: A.value ? Q.value : P.value
313
+ }), L = () => {
314
+ var Y, w, F;
315
+ return (F = (w = (Y = c.value) == null ? void 0 : Y.popperRef) == null ? void 0 : w.popperInstanceRef) == null ? void 0 : F.destroy();
316
+ }, m = (Y) => {
317
+ Y || L();
318
+ }, j = () => {
319
+ i.props.menuTrigger === "hover" && i.props.mode === "horizontal" || i.props.collapse && i.props.mode === "vertical" || e.disabled || i.handleSubMenuClick({
320
+ index: e.index,
321
+ indexPath: t.value,
322
+ active: A.value
323
+ });
324
+ }, x = (Y, w = e.showTimeout) => {
325
+ var F;
326
+ Y.type !== "focus" && (i.props.menuTrigger === "click" && i.props.mode === "horizontal" || !i.props.collapse && i.props.mode === "vertical" || e.disabled || (s.mouseInChild.value = !0, M == null || M(), { stop: M } = Ve(() => {
327
+ i.openMenu(e.index, t.value);
328
+ }, w), B.value && ((F = l.value.vnode.el) == null || F.dispatchEvent(new MouseEvent("mouseenter")))));
329
+ }, E = (Y = !1) => {
330
+ var w, F;
331
+ i.props.menuTrigger === "click" && i.props.mode === "horizontal" || !i.props.collapse && i.props.mode === "vertical" || (M == null || M(), s.mouseInChild.value = !1, { stop: M } = Ve(() => !N.value && i.closeMenu(e.index, t.value), e.hideTimeout), B.value && Y && ((w = o.parent) == null ? void 0 : w.type.name) === "ElSubMenu" && ((F = s.handleMouseleave) == null || F.call(s, !0)));
332
+ };
333
+ H(() => i.props.collapse, (Y) => m(!!Y));
334
+ {
335
+ const Y = (F) => {
336
+ g.value[F.index] = F;
337
+ }, w = (F) => {
338
+ delete g.value[F.index];
339
+ };
340
+ ke(`subMenu:${o.uid}`, {
341
+ addSubMenu: Y,
342
+ removeSubMenu: w,
343
+ handleMouseleave: E,
344
+ mouseInChild: N,
345
+ level: s.level + 1
346
+ });
347
+ }
348
+ return a({
349
+ opened: f
350
+ }), le(() => {
351
+ i.addSubMenu(D), s.addSubMenu(D);
352
+ }), et(() => {
353
+ s.removeSubMenu(D), i.removeSubMenu(D);
354
+ }), () => {
355
+ var Y;
356
+ const w = [
357
+ (Y = n.title) == null ? void 0 : Y.call(n),
358
+ U(ot, {
359
+ class: u.e("icon-arrow"),
360
+ style: {
361
+ transform: f.value ? e.expandCloseIcon && e.expandOpenIcon || e.collapseCloseIcon && e.collapseOpenIcon && i.props.collapse ? "none" : "rotateZ(180deg)" : "none"
362
+ }
363
+ }, {
364
+ default: () => ae(b.value) ? U(o.appContext.components[b.value]) : U(b.value)
365
+ })
366
+ ], F = i.isMenuPopup ? U(Xe, {
367
+ ref: c,
368
+ visible: f.value,
369
+ effect: "light",
370
+ pure: !0,
371
+ offset: e.popperOffset,
372
+ showArrow: !1,
373
+ persistent: !0,
374
+ popperClass: e.popperClass,
375
+ placement: v.value,
376
+ teleported: B.value,
377
+ fallbackPlacements: p.value,
378
+ transition: z.value,
379
+ gpuAcceleration: !1
380
+ }, {
381
+ content: () => {
382
+ var V;
383
+ return U("div", {
384
+ class: [
385
+ r.m(T.value),
386
+ r.m("popup-container"),
387
+ e.popperClass
388
+ ],
389
+ onMouseenter: (W) => x(W, 100),
390
+ onMouseleave: () => E(!0),
391
+ onFocus: (W) => x(W, 100)
392
+ }, [
393
+ U("ul", {
394
+ class: [
395
+ r.b(),
396
+ r.m("popup"),
397
+ r.m(`popup-${v.value}`)
398
+ ],
399
+ style: h.value
400
+ }, [(V = n.default) == null ? void 0 : V.call(n)])
401
+ ]);
402
+ },
403
+ default: () => U("div", {
404
+ class: u.e("title"),
405
+ style: [
406
+ y.value,
407
+ { backgroundColor: C.value }
408
+ ],
409
+ onClick: j
410
+ }, w)
411
+ }) : U(ne, {}, [
412
+ U("div", {
413
+ class: u.e("title"),
414
+ style: [
415
+ y.value,
416
+ { backgroundColor: C.value }
417
+ ],
418
+ ref: I,
419
+ onClick: j
420
+ }, w),
421
+ U(kt, {}, {
422
+ default: () => {
423
+ var V;
424
+ return zt(U("ul", {
425
+ role: "menu",
426
+ class: [r.b(), r.m("inline")],
427
+ style: h.value
428
+ }, [(V = n.default) == null ? void 0 : V.call(n)]), [[jt, f.value]]);
429
+ }
430
+ })
431
+ ]);
432
+ return U("li", {
433
+ class: [
434
+ u.b(),
435
+ u.is("active", A.value),
436
+ u.is("opened", f.value),
437
+ u.is("disabled", e.disabled)
438
+ ],
439
+ role: "menuitem",
440
+ ariaHaspopup: !0,
441
+ ariaExpanded: f.value,
442
+ onMouseenter: x,
443
+ onMouseleave: () => E(!0),
444
+ onFocus: x
445
+ }, [F]);
446
+ };
447
+ }
448
+ });
449
+ const Ut = Se({
450
+ mode: {
451
+ type: String,
452
+ values: ["horizontal", "vertical"],
453
+ default: "vertical"
454
+ },
455
+ defaultActive: {
456
+ type: String,
457
+ default: ""
458
+ },
459
+ defaultOpeneds: {
460
+ type: Oe(Array),
461
+ default: () => At([])
462
+ },
463
+ uniqueOpened: Boolean,
464
+ router: Boolean,
465
+ menuTrigger: {
466
+ type: String,
467
+ values: ["hover", "click"],
468
+ default: "hover"
469
+ },
470
+ collapse: Boolean,
471
+ backgroundColor: String,
472
+ textColor: String,
473
+ activeTextColor: String,
474
+ collapseTransition: {
475
+ type: Boolean,
476
+ default: !0
477
+ },
478
+ ellipsis: {
479
+ type: Boolean,
480
+ default: !0
481
+ },
482
+ popperEffect: {
483
+ type: String,
484
+ values: ["dark", "light"],
485
+ default: "dark"
486
+ }
487
+ }), he = (e) => Array.isArray(e) && e.every((n) => ae(n)), $t = {
488
+ close: (e, n) => ae(e) && he(n),
489
+ open: (e, n) => ae(e) && he(n),
490
+ select: (e, n, a, o) => ae(e) && he(n) && ct(a) && (o === void 0 || o instanceof Promise)
491
+ };
492
+ var Vt = G({
493
+ name: "ElMenu",
494
+ props: Ut,
495
+ emits: $t,
496
+ setup(e, { emit: n, slots: a, expose: o }) {
497
+ const t = Fe(), l = t.appContext.config.globalProperties.$router, r = S(), u = q("menu"), i = q("sub-menu"), s = S(-1), d = S(e.defaultOpeneds && !e.collapse ? e.defaultOpeneds.slice(0) : []), g = S(e.defaultActive), M = S({}), N = S({}), I = O(() => e.mode === "horizontal" || e.mode === "vertical" && e.collapse), c = () => {
498
+ const T = g.value && M.value[g.value];
499
+ if (!T || e.mode === "horizontal" || e.collapse)
500
+ return;
501
+ T.indexPath.forEach((h) => {
502
+ const y = N.value[h];
503
+ y && v(h, y.indexPath);
504
+ });
505
+ }, v = (T, D) => {
506
+ d.value.includes(T) || (e.uniqueOpened && (d.value = d.value.filter((h) => D.includes(h))), d.value.push(T), n("open", T, D));
507
+ }, b = (T) => {
508
+ const D = d.value.indexOf(T);
509
+ D !== -1 && d.value.splice(D, 1);
510
+ }, k = (T, D) => {
511
+ b(T), n("close", T, D);
512
+ }, B = ({
513
+ index: T,
514
+ indexPath: D
515
+ }) => {
516
+ d.value.includes(T) ? k(T, D) : v(T, D);
517
+ }, z = (T) => {
518
+ (e.mode === "horizontal" || e.collapse) && (d.value = []);
519
+ const { index: D, indexPath: h } = T;
520
+ if (!(We(D) || We(h)))
521
+ if (e.router && l) {
522
+ const y = T.route || D, L = l.push(y).then((m) => (m || (g.value = D), m));
523
+ n("select", D, h, { index: D, indexPath: h, route: y }, L);
524
+ } else
525
+ g.value = D, n("select", D, h, { index: D, indexPath: h });
526
+ }, p = (T) => {
527
+ const D = M.value, h = D[T] || g.value && D[g.value] || D[e.defaultActive];
528
+ h ? g.value = h.index : g.value = T;
529
+ }, f = () => {
530
+ var T, D;
531
+ if (!r.value)
532
+ return -1;
533
+ const h = Array.from((D = (T = r.value) == null ? void 0 : T.childNodes) != null ? D : []).filter((Y) => Y.nodeName !== "#comment" && (Y.nodeName !== "#text" || Y.nodeValue)), y = 64, L = Number.parseInt(getComputedStyle(r.value).paddingLeft, 10), m = Number.parseInt(getComputedStyle(r.value).paddingRight, 10), j = r.value.clientWidth - L - m;
534
+ let x = 0, E = 0;
535
+ return h.forEach((Y, w) => {
536
+ x += Y.offsetWidth || 0, x <= j - y && (E = w + 1);
537
+ }), E === h.length ? -1 : E;
538
+ }, A = (T, D = 33.34) => {
539
+ let h;
540
+ return () => {
541
+ h && clearTimeout(h), h = setTimeout(() => {
542
+ T();
543
+ }, D);
544
+ };
545
+ };
546
+ let C = !0;
547
+ const Q = () => {
548
+ const T = () => {
549
+ s.value = -1, Be(() => {
550
+ s.value = f();
551
+ });
552
+ };
553
+ C ? T() : A(T)(), C = !1;
554
+ };
555
+ H(() => e.defaultActive, (T) => {
556
+ M.value[T] || (g.value = ""), p(T);
557
+ }), H(() => e.collapse, (T) => {
558
+ T && (d.value = []);
559
+ }), H(M.value, c);
560
+ let P;
561
+ gt(() => {
562
+ e.mode === "horizontal" && e.ellipsis ? P = mt(r, Q).stop : P == null || P();
563
+ });
564
+ {
565
+ const T = (L) => {
566
+ N.value[L.index] = L;
567
+ }, D = (L) => {
568
+ delete N.value[L.index];
569
+ };
570
+ ke("rootMenu", Qe({
571
+ props: e,
572
+ openedMenus: d,
573
+ items: M,
574
+ subMenus: N,
575
+ activeIndex: g,
576
+ isMenuPopup: I,
577
+ addMenuItem: (L) => {
578
+ M.value[L.index] = L;
579
+ },
580
+ removeMenuItem: (L) => {
581
+ delete M.value[L.index];
582
+ },
583
+ addSubMenu: T,
584
+ removeSubMenu: D,
585
+ openMenu: v,
586
+ closeMenu: k,
587
+ handleMenuItemClick: z,
588
+ handleSubMenuClick: B
589
+ })), ke(`subMenu:${t.uid}`, {
590
+ addSubMenu: T,
591
+ removeSubMenu: D,
592
+ mouseInChild: S(!1),
593
+ level: 0
594
+ });
595
+ }
596
+ return le(() => {
597
+ e.mode === "horizontal" && new _t(t.vnode.el, u.namespace.value);
598
+ }), o({
599
+ open: (D) => {
600
+ const { indexPath: h } = N.value[D];
601
+ h.forEach((y) => v(y, h));
602
+ },
603
+ close: b,
604
+ handleResize: Q
605
+ }), () => {
606
+ var T, D;
607
+ let h = (D = (T = a.default) == null ? void 0 : T.call(a)) != null ? D : [];
608
+ const y = [];
609
+ if (e.mode === "horizontal" && r.value) {
610
+ const j = Yt(h), x = s.value === -1 ? j : j.slice(0, s.value), E = s.value === -1 ? [] : j.slice(s.value);
611
+ E != null && E.length && e.ellipsis && (h = x, y.push(U(Ue, {
612
+ index: "sub-menu-more",
613
+ class: i.e("hide-arrow")
614
+ }, {
615
+ title: () => U(ot, {
616
+ class: i.e("icon-more")
617
+ }, { default: () => U(vt) }),
618
+ default: () => E
619
+ })));
620
+ }
621
+ const L = it(e, 0), m = U("ul", {
622
+ key: String(e.collapse),
623
+ role: "menubar",
624
+ ref: r,
625
+ style: L.value,
626
+ class: {
627
+ [u.b()]: !0,
628
+ [u.m(e.mode)]: !0,
629
+ [u.m("collapse")]: e.collapse
630
+ }
631
+ }, [...h, ...y]);
632
+ return e.collapseTransition && e.mode === "vertical" ? U(Bt, () => m) : m;
633
+ };
634
+ }
635
+ });
636
+ const Wt = Se({
637
+ index: {
638
+ type: Oe([String, null]),
639
+ default: null
640
+ },
641
+ route: {
642
+ type: Oe([String, Object])
643
+ },
644
+ disabled: Boolean
645
+ }), Zt = {
646
+ click: (e) => ae(e.index) && Array.isArray(e.indexPath)
647
+ }, xe = "ElMenuItem", Gt = G({
648
+ name: xe,
649
+ components: {
650
+ ElTooltip: Xe
651
+ },
652
+ props: Wt,
653
+ emits: Zt,
654
+ setup(e, { emit: n }) {
655
+ const a = Fe(), o = fe("rootMenu"), t = q("menu"), l = q("menu-item");
656
+ o || pe(xe, "can not inject root menu");
657
+ const { parentMenu: r, indexPath: u } = at(a, pt(e, "index")), i = fe(`subMenu:${r.value.uid}`);
658
+ i || pe(xe, "can not inject sub menu");
659
+ const s = O(() => e.index === o.activeIndex), d = Qe({
660
+ index: e.index,
661
+ indexPath: u,
662
+ active: s
663
+ }), g = () => {
664
+ e.disabled || (o.handleMenuItemClick({
665
+ index: e.index,
666
+ indexPath: u.value,
667
+ route: e.route
668
+ }), n("click", d));
669
+ };
670
+ return le(() => {
671
+ i.addSubMenu(d), o.addMenuItem(d);
672
+ }), et(() => {
673
+ i.removeSubMenu(d), o.removeMenuItem(d);
674
+ }), {
675
+ parentMenu: r,
676
+ rootMenu: o,
677
+ active: s,
678
+ nsMenu: t,
679
+ nsMenuItem: l,
680
+ handleClick: g
681
+ };
682
+ }
683
+ });
684
+ function Ht(e, n, a, o, t, l) {
685
+ const r = ft("el-tooltip");
686
+ return _(), R("li", {
687
+ class: re([
688
+ e.nsMenuItem.b(),
689
+ e.nsMenuItem.is("active", e.active),
690
+ e.nsMenuItem.is("disabled", e.disabled)
691
+ ]),
692
+ role: "menuitem",
693
+ tabindex: "-1",
694
+ onClick: n[0] || (n[0] = (...u) => e.handleClick && e.handleClick(...u))
695
+ }, [
696
+ e.parentMenu.type.name === "ElMenu" && e.rootMenu.props.collapse && e.$slots.title ? (_(), ue(r, {
697
+ key: 0,
698
+ effect: e.rootMenu.props.popperEffect,
699
+ placement: "right",
700
+ "fallback-placements": ["left"],
701
+ persistent: ""
702
+ }, {
703
+ content: ee(() => [
704
+ X(e.$slots, "title")
705
+ ]),
706
+ default: ee(() => [
707
+ te("div", {
708
+ class: re(e.nsMenu.be("tooltip", "trigger"))
709
+ }, [
710
+ X(e.$slots, "default")
711
+ ], 2)
712
+ ]),
713
+ _: 3
714
+ }, 8, ["effect"])) : (_(), R(ne, { key: 1 }, [
715
+ X(e.$slots, "default"),
716
+ X(e.$slots, "title")
717
+ ], 64))
718
+ ], 2);
719
+ }
720
+ var lt = /* @__PURE__ */ me(Gt, [["render", Ht], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/menu/src/menu-item.vue"]]);
721
+ const Jt = {
722
+ title: String
723
+ }, Xt = "ElMenuItemGroup", qt = G({
724
+ name: Xt,
725
+ props: Jt,
726
+ setup() {
727
+ return {
728
+ ns: q("menu-item-group")
729
+ };
730
+ }
731
+ });
732
+ function Kt(e, n, a, o, t, l) {
733
+ return _(), R("li", {
734
+ class: re(e.ns.b())
735
+ }, [
736
+ te("div", {
737
+ class: re(e.ns.e("title"))
738
+ }, [
739
+ e.$slots.title ? X(e.$slots, "title", { key: 1 }) : (_(), R(ne, { key: 0 }, [
740
+ tt(ie(e.title), 1)
741
+ ], 64))
742
+ ], 2),
743
+ te("ul", null, [
744
+ X(e.$slots, "default")
745
+ ])
746
+ ], 2);
747
+ }
748
+ var st = /* @__PURE__ */ me(qt, [["render", Kt], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/menu/src/menu-item-group.vue"]]);
749
+ const en = dt(Vt, {
750
+ MenuItem: lt,
751
+ MenuItemGroup: st,
752
+ SubMenu: Ue
753
+ }), tn = _e(lt);
754
+ _e(st);
755
+ _e(Ue);
756
+ const nn = { class: "st-kline-tips" }, on = { class: "st-kline-tips-row" }, an = /* @__PURE__ */ G({
757
+ __name: "index",
758
+ props: {
759
+ // 提示数据
760
+ data: {
761
+ type: Array,
762
+ default: () => []
763
+ }
764
+ },
765
+ setup(e) {
766
+ return (n, a) => (_(), R("div", nn, [
767
+ te("div", on, [
768
+ (_(!0), R(ne, null, De(e.data, (o) => (_(), R("div", {
769
+ class: "st-kline-tips-row-item",
770
+ style: Pe({ color: o.color })
771
+ }, ie(o.label) + " " + ie(o.value), 5))), 256))
772
+ ])
773
+ ]));
774
+ }
775
+ });
776
+ const Ae = /* @__PURE__ */ oe(an, [["__scopeId", "data-v-78aed210"]]), ln = /* @__PURE__ */ G({
777
+ __name: "index",
778
+ emits: ["closeContextMenuCallBack"],
779
+ setup(e, { emit: n }) {
780
+ const a = n, o = S(), t = S(), l = S({
781
+ display: "none",
782
+ top: "0px",
783
+ left: "0px"
784
+ }), r = () => {
785
+ l.value.display = "none", a("closeContextMenuCallBack"), document.removeEventListener("click", r);
786
+ }, u = (i) => {
787
+ if (i.preventDefault(), i.stopPropagation(), l.value.display === "block") {
788
+ const { offsetX: s, offsetY: d } = i, { offsetWidth: g, offsetHeight: M } = t.value;
789
+ if (s <= g && d <= M)
790
+ return;
791
+ }
792
+ o.value.click(), l.value = {
793
+ display: "block",
794
+ top: `${i.offsetY}px`,
795
+ left: `${i.offsetX}px`
796
+ }, Be(() => {
797
+ const { bottom: s, height: d, right: g, width: M } = t.value.getBoundingClientRect();
798
+ s > window.innerHeight ? l.value = {
799
+ display: "block",
800
+ top: `${i.offsetY - d}px`,
801
+ left: `${i.offsetX}px`
802
+ } : g > window.innerWidth && (l.value = {
803
+ display: "block",
804
+ top: `${i.offsetY}px`,
805
+ left: `${i.offsetX - M}px`
806
+ });
807
+ }), document.addEventListener("click", r);
808
+ };
809
+ return (i, s) => (_(), R("div", {
810
+ ref_key: "contextmenuRef",
811
+ ref: o,
812
+ class: "contextmenu",
813
+ onContextmenu: u,
814
+ onMouseleave: r
815
+ }, [
816
+ X(i.$slots, "default", {}, void 0, !0),
817
+ l.value.display !== "none" ? (_(), R("div", {
818
+ key: 0,
819
+ ref_key: "contextmenuContentRef",
820
+ ref: t,
821
+ class: "contextmenu-popover",
822
+ style: Pe(l.value)
823
+ }, [
824
+ X(i.$slots, "popover", {}, void 0, !0)
825
+ ], 4)) : nt("", !0)
826
+ ], 544));
827
+ }
828
+ });
829
+ const sn = /* @__PURE__ */ oe(ln, [["__scopeId", "data-v-249fd104"]]);
830
+ let Ze = !1, Ge = !0, He = [];
831
+ const Je = (e) => {
832
+ const n = [], a = [], o = [], t = [], l = [], r = [];
833
+ return e.forEach((u, i) => {
834
+ n.push(u[0]), a.push(u[1]), o.push(u[4]), t.push(u[2]), l.push(u[3]), r.push([u[1], u[4], u[3], u[2], Number(u[6]), i === 0 ? u[4] : e[i - 1][4]]);
835
+ }), { time: n, open: a, close: o, high: t, low: l, kLineData: r };
836
+ }, rn = async () => {
837
+ if (!Ze)
838
+ Ze = !0, await Tt("./talib.wasm"), Ge = !1, He.forEach((e) => {
839
+ e();
840
+ });
841
+ else if (Ge)
842
+ return new Promise((e) => {
843
+ He.push(e);
844
+ });
845
+ }, ze = (e, n) => e.length > n ? e.slice(e.length - n) : e, un = (e, n, a) => e.calculationFn ? e.calculationFn(It, n, a) : new Array(n.time.length).fill(null), Mn = async (e, n, a) => {
846
+ const o = Je(e);
847
+ let t = [];
848
+ return t = Je(t), await rn(), {
849
+ originData: ze(e, a),
850
+ kLine: ze(o.kLineData, a),
851
+ time: ze(o.time, a),
852
+ indicator: n.config.reduce((l, r) => (l.push({
853
+ key: r.key,
854
+ color: r.color,
855
+ data: ze(un(r, o, t), a)
856
+ }), l), [])
857
+ };
858
+ }, Ye = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjM4NzI1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2MjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiNGRjAwMDAiIHAtaWQ9IjI2MjYiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjcwOTMzMyAxNjcuNzIyNjY3YzAuMTI4LTIxLjc2IDkuOTg0LTQyLjY2NjY2NyAyNy4zOTItNTcuOTQxMzM0YTkzLjMxMiA5My4zMTIgMCAwIDEgNjQuNDY5MzM0LTIzLjg5MzMzM0w3NjEuNiA4NS4zMzMzMzNjMjUuNiAwLjU1NDY2NyA0Ny4zNiA4Ljc4OTMzMyA2NC45Mzg2NjcgMjQuNDA1MzM0IDE3LjkyIDE2IDI2Ljg4IDM1LjIgMjYuODggNTcuNDcybC0wLjU1NDY2NyA0MTkuODRjMC4yOTg2NjcgMjIuNjk4NjY3LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuOTIyNjY2LTEyLjYyOTMzMyAyNy4zMDY2NjctMjcuOTQ2NjY3IDQ4Ljg5Ni00NS44MjQgNjQuODk2bC0yMTEuMjQyNjY3IDE4OC4yMDI2NjdjLTE3LjU3ODY2NyAxNS43MDEzMzMtMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45Mzg2NjcgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0Ljk4MTMzMy0yMy41OTQ2NjdsLTIxMS4xNTczMzMtMTg4LjE2Yy0xNy45Mi0xNi4wNDI2NjctMzMuMjgtMzcuNzE3MzMzLTQ1LjkwOTMzNC02NC45ODEzMzMtMTIuNjcyLTI3LjMwNjY2Ny0xOS4wMjkzMzMtNTIuMzk0NjY3LTE5LjAyOTMzMy03NS4zMDY2NjdMMTcwLjY2NjY2NyAxNjcuNzIyNjY3eiBtNDIuNjY2NjY3IDAuMjU2bDAuNTU0NjY3IDQxOC42ODhjMCAxNi4yMTMzMzMgNC44MjEzMzMgMzUuMzI4IDE1LjAxODY2NiA1Ny4zNDQgMTAuMzY4IDIyLjI3MiAyMi4zNTczMzMgMzkuMjEwNjY3IDM1LjYyNjY2NyA1MS4wNzJsMjExLjQxMzMzMyAxODguNDE2YzguOTYgOC4xMDY2NjcgMjEuODg4IDEyLjggMzYuMjI0IDEyLjU0NCAxNS41MzA2NjctMC4wNDI2NjcgMjcuMDkzMzMzLTQuMjY2NjY3IDM2LjY5MzMzNC0xMi44bDIxMS4xNTczMzMtMTg4LjExNzMzNGMxMy4zMTItMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNTg0LTUxLjA3MiAxMC4xMTItMjEuODQ1MzMzIDE0Ljc2MjY2Ny00MC41NzYgMTQuNTA2NjY3LTU3LjA0NTMzM2wwLjU1NDY2Ni00MTkuNzU0NjY3YzAtOS44OTg2NjctMy41ODQtMTcuNjIxMzMzLTEyLjQ1ODY2Ni0yNS42YTU0LjY5ODY2NyA1NC42OTg2NjcgMCAwIDAtMzYuNjA4LTEzLjYxMDY2NmwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NyAxMy4zMTIgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzMgMjEuNDYxMzMzbC0wLjQyNjY2NyA0LjY5MzMzNHoiIGZpbGw9IiNBRTAwMDAiIHAtaWQ9IjI2MjciPjwvcGF0aD48cGF0aCBkPSJNMzg0IDY1NC4xMjI2NjdoMTUzLjUxNDY2N2M5Ni43NjggMCAxNDIuNzYyNjY3LTQ4Ljk4MTMzMyAxNDIuNzYyNjY2LTExNy4wNzczMzQgMC01OS43MzMzMzMtMzMuNDUwNjY3LTg4LjQwNTMzMy04NC44MjEzMzMtOTcuOTYyNjY2di0xLjc5MmM0OC45ODEzMzMtMTUuNTMwNjY3IDY2LjkwMTMzMy00Ni41OTIgNjYuOTAxMzMzLTg5LjYgMC02NS4xMDkzMzMtNDAuNjE4NjY3LTEwMy4zMzg2NjctMTM0Ljk5NzMzMy0xMDMuMzM4NjY3SDM4NHY0MDkuNzcwNjY3eiBtNzIuODc0NjY3LTU0Ljk1NDY2N3YtMTMxLjQxMzMzM2g2Ni4zMDRjNTEuOTY4IDAgODAuMDQyNjY3IDE3LjkyIDgwLjA0MjY2NiA2NS4xMDkzMzMgMCA0NC44LTI2LjI4MjY2NyA2Ni4zMDQtNzUuODYxMzMzIDY2LjMwNGgtNzAuNDg1MzMzeiBtMC0xODAuMzk0NjY3VjI5OC43MDkzMzNoNjAuMzMwNjY2YzQ3LjE4OTMzMyAwIDcyLjI3NzMzMyAxNC45MzMzMzMgNzIuMjc3MzM0IDU5LjEzNiAwIDQ2LjU5Mi0zMi4yNTYgNjAuOTI4LTc1LjI2NCA2MC45MjhoLTU3LjM0NHoiIGZpbGw9IiNGRkZGRkYiIHAtaWQ9IjI2MjgiPjwvcGF0aD48L3N2Zz4=", Ce = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjQxNjY0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI3NzciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiM1NEFCMzAiIHAtaWQ9IjI3NzgiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjY2NjY2NyAxNjcuNjhjMC4xMjgtMjEuNzYgOS45NDEzMzMtNDIuNjY2NjY3IDI3LjM0OTMzMy01Ny45NDEzMzNhOTMuMzEyIDkzLjMxMiAwIDAgMSA2NC41MTItMjMuODkzMzM0TDc2MS41NTczMzMgODUuMzMzMzMzYzI1LjYgMC41NTQ2NjcgNDcuMzYgOC43ODkzMzMgNjQuOTM4NjY3IDI0LjQwNTMzNCAxNy45MiAxNiAyNi44MzczMzMgMzUuMiAyNi44MzczMzMgNTcuNDcybC0wLjUxMiA0MTkuODRjMC4yOTg2NjcgMjIuNjU2LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuODgtMTIuNjcyIDI3LjMwNjY2Ny0yNy45NDY2NjcgNDguOTM4NjY3LTQ1Ljg2NjY2NyA2NC45Mzg2NjZsLTIxMS4yIDE4OC4yMDI2NjdjLTE3LjYyMTMzMyAxNS42NTg2NjctMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45ODEzMzMgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0LjkzODY2Ny0yMy41OTQ2NjdsLTIxMS4yLTE4OC4yMDI2NjdjLTE3LjkyLTE2LTMzLjIzNzMzMy0zNy43MTczMzMtNDUuOTA5MzMzLTY0LjkzODY2Ni0xMi42MjkzMzMtMjcuMzA2NjY3LTE5LjAyOTMzMy01Mi40MzczMzMtMTkuMDI5MzMzLTc1LjMwNjY2N0wxNzAuNjY2NjY3IDE2Ny42OHogbTQyLjYyNCAwLjI1NmwwLjU1NDY2NiA0MTguNjg4YzAgMTYuMTcwNjY3IDQuODY0IDM1LjMyOCAxNS4wNjEzMzQgNTcuMzQ0IDEwLjM2OCAyMi4yNzIgMjIuMzE0NjY3IDM5LjE2OCAzNS42MjY2NjYgNTEuMDI5MzMzbDIxMS40MTMzMzQgMTg4LjQxNmM4Ljk2IDguMTA2NjY3IDIxLjg4OCAxMi44IDM2LjIyNCAxMi41ODY2NjcgMTUuNTMwNjY3LTAuMDQyNjY3IDI3LjA5MzMzMy00LjI2NjY2NyAzNi42OTMzMzMtMTIuOGwyMTEuMTE0NjY3LTE4OC4xNmMxMy4zNTQ2NjctMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNjI2NjY2LTUxLjA3MiAxMC4xMTItMjEuNzYgMTQuNzYyNjY3LTQwLjUzMzMzMyAxNC41MDY2NjctNTcuMDAyNjY3TDgxMC42NjY2NjcgMTY3LjIxMDY2N2MwLTkuODk4NjY3LTMuNTg0LTE3LjYyMTMzMy0xMi41MDEzMzQtMjUuNkE1NC42OTg2NjcgNTQuNjk4NjY3IDAgMCAwIDc2MS42IDEyOGwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NiAxMy4yNjkzMzQgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzQgMjEuNTA0bC0wLjQyNjY2NiA0LjY5MzMzM3oiIGZpbGw9IiMzODhEMTQiIHAtaWQ9IjI3NzkiPjwvcGF0aD48cGF0aCBkPSJNNTA2LjQ1MzMzMyA2NzQuNzMwNjY3Yzk5LjE1NzMzMyAwIDE0Ni4zNDY2NjctNDguMzg0IDE0Ni4zNDY2NjctMTI2LjAzNzMzNCAwLTcyLjg3NDY2Ny0zOC44MjY2NjctOTkuNzU0NjY3LTEwMy4zMzg2NjctMTE4LjI3MmwtMzguMjI5MzMzLTExLjk0NjY2NmMtNDAuNjE4NjY3LTExLjM0OTMzMy01Mi41NjUzMzMtMjUuMDg4LTUyLjU2NTMzMy01Ny4zNDQgMC0zMi44NTMzMzMgMjMuODkzMzMzLTUwLjc3MzMzMyA2Ni45MDEzMzMtNTAuNzczMzM0IDQ1LjM5NzMzMyAwIDc4Ljg0OCA5LjU1NzMzMyAxMDQuNTMzMzMzIDIwLjMwOTMzNFYyNzMuMzIyNjY3Yy0yMi42OTg2NjctMTEuOTQ2NjY3LTUxLjk2OC0yMi4xMDEzMzMtMTA1LjcyOC0yMi4xMDEzMzQtOTIuNTg2NjY3IDAtMTM3LjM4NjY2NyA0Ny4xODkzMzMtMTM3LjM4NjY2NiAxMTYuNDggMCA2OS4yOTA2NjcgMzUuMjQyNjY3IDEwMC4zNTIgOTMuMTg0IDExNi40OGwzOC44MjY2NjYgMTAuNzUyYzQ0LjggMTMuNzM4NjY3IDU5LjczMzMzMyAyNi44OCA1OS43MzMzMzQgNjAuOTI4IDAgMzcuMDM0NjY3LTIzLjI5NiA1OS43MzMzMzMtNzguMjUwNjY3IDU5LjczMzMzNC00NC44IDAtODMuNjI2NjY3LTEwLjc1Mi0xMTYuNDgtMjUuMDg4djU3Ljk0MTMzM2MyOC4wNzQ2NjcgMTQuOTMzMzMzIDY4LjY5MzMzMyAyNi4yODI2NjcgMTIyLjQ1MzMzMyAyNi4yODI2Njd6IiBmaWxsPSIjRkZGRkZGIiBwLWlkPSIyNzgwIj48L3BhdGg+PC9zdmc+", be = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjI4MjAyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjMwNzgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiNDODgwRkYiIHAtaWQ9IjMwNzkiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjY2NjY2NyAxNjcuNjhjMC4xMjgtMjEuNzYgOS45NDEzMzMtNDIuNjY2NjY3IDI3LjM0OTMzMy01Ny45NDEzMzNhOTMuMzEyIDkzLjMxMiAwIDAgMSA2NC41MTItMjMuODkzMzM0TDc2MS41NTczMzMgODUuMzMzMzMzYzI1LjYgMC41NTQ2NjcgNDcuMzYgOC43ODkzMzMgNjQuOTM4NjY3IDI0LjQwNTMzNCAxNy45MiAxNiAyNi44MzczMzMgMzUuMiAyNi44MzczMzMgNTcuNDcybC0wLjUxMiA0MTkuODRjMC4yOTg2NjcgMjIuNjU2LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuODgtMTIuNjcyIDI3LjMwNjY2Ny0yNy45NDY2NjcgNDguOTM4NjY3LTQ1Ljg2NjY2NyA2NC45Mzg2NjZsLTIxMS4yIDE4OC4yMDI2NjdjLTE3LjYyMTMzMyAxNS42NTg2NjctMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45ODEzMzMgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0LjkzODY2Ny0yMy41OTQ2NjdsLTIxMS4yLTE4OC4yMDI2NjdjLTE3LjkyLTE2LTMzLjIzNzMzMy0zNy43MTczMzMtNDUuOTA5MzMzLTY0LjkzODY2Ni0xMi42MjkzMzMtMjcuMzA2NjY3LTE5LjAyOTMzMy01Mi40MzczMzMtMTkuMDI5MzMzLTc1LjMwNjY2N0wxNzAuNjY2NjY3IDE2Ny42OHogbTQyLjYyNCAwLjI1NmwwLjU1NDY2NiA0MTguNjg4YzAgMTYuMTcwNjY3IDQuODY0IDM1LjMyOCAxNS4wNjEzMzQgNTcuMzQ0IDEwLjM2OCAyMi4yNzIgMjIuMzE0NjY3IDM5LjE2OCAzNS42MjY2NjYgNTEuMDI5MzMzbDIxMS40MTMzMzQgMTg4LjQxNmM4Ljk2IDguMTA2NjY3IDIxLjg4OCAxMi44IDM2LjIyNCAxMi41ODY2NjcgMTUuNTMwNjY3LTAuMDQyNjY3IDI3LjA5MzMzMy00LjI2NjY2NyAzNi42OTMzMzMtMTIuOGwyMTEuMTE0NjY3LTE4OC4xNmMxMy4zNTQ2NjctMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNjI2NjY2LTUxLjA3MiAxMC4xMTItMjEuNzYgMTQuNzYyNjY3LTQwLjUzMzMzMyAxNC41MDY2NjctNTcuMDAyNjY3TDgxMC42NjY2NjcgMTY3LjIxMDY2N2MwLTkuODk4NjY3LTMuNTg0LTE3LjYyMTMzMy0xMi41MDEzMzQtMjUuNkE1NC42OTg2NjcgNTQuNjk4NjY3IDAgMCAwIDc2MS42IDEyOGwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NiAxMy4yNjkzMzQgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzQgMjEuNTA0bC0wLjQyNjY2NiA0LjY5MzMzM3oiIGZpbGw9IiNBRTQ0RkYiIHAtaWQ9IjMwODAiPjwvcGF0aD48cGF0aCBkPSJNNDc1LjMwNjY2NyA2NTguMjE4NjY3aDczLjQ3MlYzMDYuMzg5MzMzaDExNi40OFYyNDguNDQ4aC0zMDcuNjI2NjY3djU3Ljk0MTMzM2gxMTcuNjc0NjY3eiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMzA4MSI+PC9wYXRoPjwvc3ZnPg==", se = (e, n) => {
859
+ const { type: a = "log", color: o = "black" } = n ?? {};
860
+ localStorage.getItem("st-kline-console-show") === "true" && console[a](`%c${e}`, `color:${o}`);
861
+ }, $ = (e) => e || e === 0 ? Math.round(e * 1e3) / 1e3 : null, cn = (e) => e >= 1e12 ? `${(e / 1e12).toFixed(2)}万亿` : e >= 1e8 ? `${(e / 1e8).toFixed(2)}亿` : e >= 1e4 ? `${(e / 1e4).toFixed(2)}万` : e.toFixed(2), dn = (e) => {
862
+ const { y: n, text: a, info: o, gridLeft: t, gridRight: l, echartsWidth: r, echartsInstance: u } = e, { config: i, event: s } = o;
863
+ let d = 0;
864
+ return {
865
+ type: "group",
866
+ draggable: i.draggable ? "vertical" : !1,
867
+ children: [
868
+ {
869
+ type: "line",
870
+ info: o,
871
+ shape: {
872
+ x1: t,
873
+ y1: n,
874
+ x2: r - l,
875
+ y2: n
876
+ },
877
+ style: {
878
+ stroke: i.lineColor,
879
+ lineWidth: 1,
880
+ lineDash: [8, 4]
881
+ },
882
+ z: 10
883
+ },
884
+ {
885
+ type: "group",
886
+ x: r,
887
+ y: n - 5,
888
+ children: [
889
+ {
890
+ type: "text",
891
+ left: -1 * l,
892
+ info: o,
893
+ style: {
894
+ fill: i.textColor,
895
+ text: a,
896
+ stroke: "#000",
897
+ lineWidth: 1,
898
+ opacity: 1
899
+ },
900
+ z: 10
901
+ }
902
+ ]
903
+ }
904
+ ],
905
+ // 事件:鼠标滑入
906
+ onmouseover: (g) => {
907
+ s.onmouseover instanceof Function && s.onmouseover(g, o);
908
+ },
909
+ // 事件:鼠标滑出
910
+ onmouseout: (g) => {
911
+ s.onmouseout instanceof Function && s.onmouseout(g, o);
912
+ },
913
+ // 事件:开始拖拽
914
+ ondragstart: (g) => {
915
+ s.ondragstart instanceof Function && i.draggable && (d = g.offsetY, s.ondragstart(g, o));
916
+ },
917
+ // 事件:结束拖拽
918
+ ondragend: (g) => {
919
+ if (s.ondragend instanceof Function && i.draggable) {
920
+ const N = g.offsetY - d;
921
+ if (N === 0)
922
+ return;
923
+ const I = u.convertFromPixel({ yAxisIndex: 0 }, n + N);
924
+ s.ondragend(g, o, I);
925
+ }
926
+ }
927
+ };
928
+ }, Nn = (e) => {
929
+ const { y: n, text: a, info: o, gridLeft: t, gridRight: l, echartsWidth: r, echartsInstance: u } = e, { config: i, event: s } = o;
930
+ let d = 0;
931
+ const g = (N) => {
932
+ let I = null;
933
+ N.target.type === "line" ? I = N.target.parent : N.target.type === "tspan" && (I = N.target.parent.parent.parent), I.children()[1].children()[0].animate("style", !1).when(200, { opacity: 1 }).start();
934
+ }, M = (N) => {
935
+ let I = null;
936
+ N.target.type === "line" ? I = N.target.parent : N.target.type === "tspan" && (I = N.target.parent.parent.parent), I.children()[1].children()[0].animate("style", !1).when(200, { opacity: 0 }).start();
937
+ };
938
+ return {
939
+ type: "group",
940
+ draggable: i.draggable ? "vertical" : !1,
941
+ // 是否支持拖拽
942
+ children: [
943
+ {
944
+ type: "line",
945
+ info: o,
946
+ shape: {
947
+ x1: t,
948
+ y1: n,
949
+ x2: r - l,
950
+ y2: n
951
+ },
952
+ style: {
953
+ stroke: i.lineColor,
954
+ lineWidth: 1
955
+ },
956
+ z: 10
957
+ },
958
+ {
959
+ type: "group",
960
+ x: r / 2,
961
+ y: n - 5,
962
+ children: [
963
+ {
964
+ type: "text",
965
+ left: "center",
966
+ info: o,
967
+ style: {
968
+ fill: i.textColor,
969
+ text: a,
970
+ stroke: "#000",
971
+ lineWidth: 1,
972
+ opacity: 0
973
+ //隐藏文本
974
+ },
975
+ z: 10
976
+ }
977
+ ]
978
+ }
979
+ ],
980
+ // 事件:鼠标滑入
981
+ onmouseover: (N) => {
982
+ s.onmouseover instanceof Function ? s.onmouseover(N, o) : g(N);
983
+ },
984
+ // 事件:鼠标滑出
985
+ onmouseout: (N) => {
986
+ s.onmouseout instanceof Function ? s.onmouseout(N, o) : M(N);
987
+ },
988
+ // 事件:开始拖拽
989
+ ondragstart: (N) => {
990
+ s.ondragstart instanceof Function && i.draggable && (d = N.offsetY, s.ondragstart(N, o));
991
+ },
992
+ // 事件:结束拖拽
993
+ ondragend: (N) => {
994
+ if (s.ondragend instanceof Function && i.draggable) {
995
+ const c = N.offsetY - d;
996
+ if (c === 0)
997
+ return;
998
+ const v = u.convertFromPixel({ yAxisIndex: 0 }, n + c);
999
+ s.ondragend(N, o, v);
1000
+ }
1001
+ }
1002
+ };
1003
+ }, yn = (e) => {
1004
+ const { y: n, text: a, profitY: o, profitText: t, lossY: l, lossText: r, info: u, gridLeft: i, gridRight: s, echartsWidth: d, echartsInstance: g } = e, { config: M, event: N } = u;
1005
+ let I = 0, c = null, v = null;
1006
+ const b = (z, p) => {
1007
+ var f, A, C, Q;
1008
+ (f = z.children()[2]) == null || f.animate("style", !1).when(200, { opacity: ~~p }).start(), (A = z.children()[3].children()[0]) == null || A.animate("style", !1).when(200, { opacity: ~~p }).start(), (C = z.children()[4]) == null || C.animate("style", !1).when(200, { opacity: ~~p }).start(), (Q = z.children()[5].children()[0]) == null || Q.animate("style", !1).when(200, { opacity: ~~p }).start();
1009
+ }, k = (z) => {
1010
+ let p = null;
1011
+ z.target.type === "line" ? p = z.target.parent : z.target.type === "tspan" && (p = z.target.parent.parent.parent), c = (f) => {
1012
+ f.preventDefault(), (f.code === "AltLeft" || f.code === "AltRight") && b(p, !0);
1013
+ }, v = (f) => {
1014
+ (f.code === "AltLeft" || f.code === "AltRight") && b(p, !1);
1015
+ }, window.addEventListener("keydown", c), window.addEventListener("keyup", v);
1016
+ }, B = (z) => {
1017
+ let p = null;
1018
+ z.target.type === "line" ? p = z.target.parent : z.target.type === "tspan" && (p = z.target.parent.parent.parent), b(p, !1), window.removeEventListener("keydown", c), window.removeEventListener("keyup", v);
1019
+ };
1020
+ return {
1021
+ type: "group",
1022
+ draggable: M.draggable ? "vertical" : !1,
1023
+ // 是否支持拖拽
1024
+ children: [
1025
+ // 条件单-主线
1026
+ {
1027
+ type: "line",
1028
+ info: u,
1029
+ shape: {
1030
+ x1: i,
1031
+ y1: n,
1032
+ x2: d - s,
1033
+ y2: n
1034
+ },
1035
+ style: {
1036
+ stroke: M.lineColor,
1037
+ lineWidth: 1
1038
+ },
1039
+ z: 10
1040
+ },
1041
+ // 条件单-文本内容
1042
+ {
1043
+ type: "group",
1044
+ x: d / 2,
1045
+ y: n - 5,
1046
+ children: [
1047
+ {
1048
+ type: "text",
1049
+ left: "center",
1050
+ info: u,
1051
+ style: {
1052
+ fill: M.textColor,
1053
+ // 填充色
1054
+ text: a,
1055
+ stroke: "#000",
1056
+ // 线条颜色
1057
+ lineWidth: 1,
1058
+ opacity: 1
1059
+ //直接展示文本
1060
+ },
1061
+ z: 10
1062
+ }
1063
+ ]
1064
+ },
1065
+ // 条件单-止盈线
1066
+ {
1067
+ type: "line",
1068
+ info: u,
1069
+ shape: {
1070
+ x1: i,
1071
+ y1: o,
1072
+ x2: d - s,
1073
+ y2: o
1074
+ },
1075
+ style: {
1076
+ stroke: M.profitLineColor,
1077
+ lineWidth: 1,
1078
+ lineDash: [8, 4],
1079
+ opacity: 0
1080
+ },
1081
+ z: 10
1082
+ },
1083
+ // 条件单-止盈线文本内容
1084
+ {
1085
+ type: "group",
1086
+ x: d / 2,
1087
+ y: o - 5,
1088
+ children: [
1089
+ {
1090
+ type: "text",
1091
+ left: "center",
1092
+ info: u,
1093
+ style: {
1094
+ fill: M.profitTextColor,
1095
+ text: t,
1096
+ stroke: "#000",
1097
+ lineWidth: 1,
1098
+ opacity: 0
1099
+ },
1100
+ z: 10
1101
+ }
1102
+ ]
1103
+ },
1104
+ // 条件单-止损线
1105
+ {
1106
+ type: "line",
1107
+ info: u,
1108
+ shape: {
1109
+ x1: i,
1110
+ y1: l,
1111
+ x2: d - s,
1112
+ y2: l
1113
+ },
1114
+ style: {
1115
+ stroke: M.lossLineColor,
1116
+ lineWidth: 1,
1117
+ lineDash: [8, 4],
1118
+ opacity: 0
1119
+ },
1120
+ z: 10
1121
+ },
1122
+ // 条件单-止损线文本内容
1123
+ {
1124
+ type: "group",
1125
+ x: d / 2,
1126
+ y: l - 5,
1127
+ children: [
1128
+ {
1129
+ type: "text",
1130
+ left: "center",
1131
+ info: u,
1132
+ style: {
1133
+ fill: M.lossTextColor,
1134
+ text: r,
1135
+ stroke: "#000",
1136
+ lineWidth: 1,
1137
+ opacity: 0
1138
+ },
1139
+ z: 10
1140
+ }
1141
+ ]
1142
+ }
1143
+ ],
1144
+ // 事件:鼠标滑入
1145
+ onmouseover: (z) => {
1146
+ N.onmouseover instanceof Function ? N.onmouseover(z, u) : k(z);
1147
+ },
1148
+ // 事件:鼠标滑出
1149
+ onmouseout: (z) => {
1150
+ N.onmouseout instanceof Function ? N.onmouseout(z, u) : B(z);
1151
+ },
1152
+ // 事件:开始拖拽
1153
+ ondragstart: (z) => {
1154
+ N.ondragstart instanceof Function && M.draggable && (I = z.offsetY, N.ondragstart(z, u));
1155
+ },
1156
+ // 事件:结束拖拽
1157
+ ondragend: (z) => {
1158
+ if (N.ondragend instanceof Function && M.draggable) {
1159
+ const f = z.offsetY - I;
1160
+ if (f === 0)
1161
+ return;
1162
+ const A = g.convertFromPixel({ yAxisIndex: 0 }, n + f);
1163
+ N.ondragend(z, u, A);
1164
+ }
1165
+ }
1166
+ };
1167
+ }, Ie = (e, n) => {
1168
+ const { direction: a = "", tradeAction: o = "", tradeType: t = "" } = e;
1169
+ if (n === "sellBuy") {
1170
+ const l = t ?? a + o;
1171
+ return (/* @__PURE__ */ new Map([
1172
+ ["开多", "买"],
1173
+ ["平多", "卖"],
1174
+ ["开空", "卖"],
1175
+ ["平空", "买"]
1176
+ ])).get(l);
1177
+ } else if (n === "openClose")
1178
+ return t ?? a + o;
1179
+ }, zn = (e, n) => e.reduce((a, o) => {
1180
+ var d;
1181
+ const t = Ie(o, "sellBuy"), l = e.filter((g) => g.time === o.time);
1182
+ let r = "image://" + new URL((/* @__PURE__ */ Object.assign({ "./images/buy.svg": Ye, "./images/sell.svg": Ce, "./images/t.svg": be }))[`./images/${t === "买" ? "buy" : "sell"}.svg`], self.location).href;
1183
+ l.length > 1 ? [...new Set(l.map((M) => Ie(M, "sellBuy")))].length > 1 ? r = "image://" + new URL("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjI4MjAyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjMwNzgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiNDODgwRkYiIHAtaWQ9IjMwNzkiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjY2NjY2NyAxNjcuNjhjMC4xMjgtMjEuNzYgOS45NDEzMzMtNDIuNjY2NjY3IDI3LjM0OTMzMy01Ny45NDEzMzNhOTMuMzEyIDkzLjMxMiAwIDAgMSA2NC41MTItMjMuODkzMzM0TDc2MS41NTczMzMgODUuMzMzMzMzYzI1LjYgMC41NTQ2NjcgNDcuMzYgOC43ODkzMzMgNjQuOTM4NjY3IDI0LjQwNTMzNCAxNy45MiAxNiAyNi44MzczMzMgMzUuMiAyNi44MzczMzMgNTcuNDcybC0wLjUxMiA0MTkuODRjMC4yOTg2NjcgMjIuNjU2LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuODgtMTIuNjcyIDI3LjMwNjY2Ny0yNy45NDY2NjcgNDguOTM4NjY3LTQ1Ljg2NjY2NyA2NC45Mzg2NjZsLTIxMS4yIDE4OC4yMDI2NjdjLTE3LjYyMTMzMyAxNS42NTg2NjctMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45ODEzMzMgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0LjkzODY2Ny0yMy41OTQ2NjdsLTIxMS4yLTE4OC4yMDI2NjdjLTE3LjkyLTE2LTMzLjIzNzMzMy0zNy43MTczMzMtNDUuOTA5MzMzLTY0LjkzODY2Ni0xMi42MjkzMzMtMjcuMzA2NjY3LTE5LjAyOTMzMy01Mi40MzczMzMtMTkuMDI5MzMzLTc1LjMwNjY2N0wxNzAuNjY2NjY3IDE2Ny42OHogbTQyLjYyNCAwLjI1NmwwLjU1NDY2NiA0MTguNjg4YzAgMTYuMTcwNjY3IDQuODY0IDM1LjMyOCAxNS4wNjEzMzQgNTcuMzQ0IDEwLjM2OCAyMi4yNzIgMjIuMzE0NjY3IDM5LjE2OCAzNS42MjY2NjYgNTEuMDI5MzMzbDIxMS40MTMzMzQgMTg4LjQxNmM4Ljk2IDguMTA2NjY3IDIxLjg4OCAxMi44IDM2LjIyNCAxMi41ODY2NjcgMTUuNTMwNjY3LTAuMDQyNjY3IDI3LjA5MzMzMy00LjI2NjY2NyAzNi42OTMzMzMtMTIuOGwyMTEuMTE0NjY3LTE4OC4xNmMxMy4zNTQ2NjctMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNjI2NjY2LTUxLjA3MiAxMC4xMTItMjEuNzYgMTQuNzYyNjY3LTQwLjUzMzMzMyAxNC41MDY2NjctNTcuMDAyNjY3TDgxMC42NjY2NjcgMTY3LjIxMDY2N2MwLTkuODk4NjY3LTMuNTg0LTE3LjYyMTMzMy0xMi41MDEzMzQtMjUuNkE1NC42OTg2NjcgNTQuNjk4NjY3IDAgMCAwIDc2MS42IDEyOGwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NiAxMy4yNjkzMzQgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzQgMjEuNTA0bC0wLjQyNjY2NiA0LjY5MzMzM3oiIGZpbGw9IiNBRTQ0RkYiIHAtaWQ9IjMwODAiPjwvcGF0aD48cGF0aCBkPSJNNDc1LjMwNjY2NyA2NTguMjE4NjY3aDczLjQ3MlYzMDYuMzg5MzMzaDExNi40OFYyNDguNDQ4aC0zMDcuNjI2NjY3djU3Ljk0MTMzM2gxMTcuNjc0NjY3eiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMzA4MSI+PC9wYXRoPjwvc3ZnPg==", self.location).href : r = "image://" + new URL((/* @__PURE__ */ Object.assign({ "./images/buy.svg": Ye, "./images/sell.svg": Ce, "./images/t.svg": be }))[`./images/${t === "买" ? "buy" : "sell"}.svg`], self.location).href : r = "image://" + new URL((/* @__PURE__ */ Object.assign({ "./images/buy.svg": Ye, "./images/sell.svg": Ce, "./images/t.svg": be }))[`./images/${t === "买" ? "buy" : "sell"}.svg`], self.location).href;
1184
+ const i = (n.find((g) => g[0] === o.time) ?? [])[2], s = ((d = o == null ? void 0 : o.markLineTarget) == null ? void 0 : d.map((g) => {
1185
+ const M = o.time, N = i + "", I = g.time, c = n.find((b) => b[0] === g.time), v = c ? c[3] : null;
1186
+ return [
1187
+ {
1188
+ coord: [M, N],
1189
+ lineStyle: g.lineStyle
1190
+ },
1191
+ {
1192
+ coord: [I, v]
1193
+ }
1194
+ ];
1195
+ })) ?? null;
1196
+ return a.push({
1197
+ symbol: r,
1198
+ // 图标
1199
+ symbolSize: 25,
1200
+ // 图标大小
1201
+ animation: !1,
1202
+ // 是否展示动画
1203
+ coord: [o.time + "", i],
1204
+ // X轴[时间],Y轴[最高价]
1205
+ symbolRotate: 0,
1206
+ // 旋转角度
1207
+ symbolOffset: [0, "-7"],
1208
+ // 偏移距离
1209
+ markLineTarget: s
1210
+ }), a;
1211
+ }, []), jn = (e, n) => e.reduce((a, o, t) => {
1212
+ var g;
1213
+ const l = Ie(o, "openClose"), r = l === "开多" || l === "开空" ? "top" : "bottom", u = n.find((M) => M[0] === o.time) ?? [], i = r === "top" ? u[2] : u[3];
1214
+ let s = 7;
1215
+ s += e.slice(0, t).filter((M) => {
1216
+ const N = Ie(M, "openClose");
1217
+ return (N === "开多" || N === "开空" ? "top" : "bottom") === r && M.time === o.time;
1218
+ }).length * 7;
1219
+ const d = ((g = o == null ? void 0 : o.markLineTarget) == null ? void 0 : g.map((M) => {
1220
+ const N = o.time, I = i + "", c = M.time, v = n.find((b) => b[0] === M.time)[3];
1221
+ return [
1222
+ {
1223
+ coord: [N, I],
1224
+ lineStyle: M.lineStyle
1225
+ },
1226
+ {
1227
+ coord: [c, v]
1228
+ }
1229
+ ];
1230
+ })) ?? null;
1231
+ return a.push({
1232
+ symbol: "triangle",
1233
+ // 图标
1234
+ symbolSize: [10, 12],
1235
+ // 图标大小
1236
+ animation: !1,
1237
+ // 是否展示动画
1238
+ coord: [o.time + "", i],
1239
+ // X轴[时间],Y轴[最高价||最低价]
1240
+ symbolRotate: r === "top" ? 180 : 0,
1241
+ //标注旋转角度
1242
+ symbolOffset: [0, `${r === "top" ? s * -1 : s}`],
1243
+ //标注偏移距离
1244
+ itemStyle: { color: r === "top" ? "#FF0000" : "#389e0d" },
1245
+ // 图标颜色
1246
+ // 文本
1247
+ label: {
1248
+ show: !0,
1249
+ // 是否展示
1250
+ position: r,
1251
+ color: "#fff",
1252
+ formatter: `${l} ${r === "top" ? "+" : "-"} ${o.amount}手 ${o.part ? `(${o.part}份)` : ""}`
1253
+ },
1254
+ markLineTarget: d
1255
+ }), a;
1256
+ }, []), gn = (e, n) => e.reduce((a, o) => {
1257
+ const { key: t, data: l } = o;
1258
+ if (l === null || l.length === 0)
1259
+ return a;
1260
+ const u = (/* @__PURE__ */ new Map([
1261
+ // 买卖点
1262
+ [
1263
+ "sellBuy",
1264
+ () => zn(l, n)
1265
+ ],
1266
+ // 开平点
1267
+ [
1268
+ "openClose",
1269
+ () => jn(l, n)
1270
+ ],
1271
+ // 信号点
1272
+ ["signal", () => {
1273
+ }]
1274
+ ])).get(t);
1275
+ return u instanceof Function && a.push(...u()), a;
1276
+ }, []), we = async (e, n, a, o, t, l) => {
1277
+ const { totalBarCount: r, defaultShowBarCount: u, maxValueSpan: i, gridLeft: s, gridTop: d, gridRight: g, gridBottom: M, zoomLock: N } = o, { time: I, kLine: c, originData: v, indicator: b } = await Mn(e, a, r), k = b.map((p) => {
1278
+ const { key: f, data: A, color: C } = p;
1279
+ return {
1280
+ name: f,
1281
+ type: "line",
1282
+ silent: !0,
1283
+ symbol: "none",
1284
+ data: A,
1285
+ lineStyle: {
1286
+ width: 1
1287
+ },
1288
+ itemStyle: {
1289
+ color: C
1290
+ }
1291
+ };
1292
+ }), B = gn(n, v);
1293
+ let z = [];
1294
+ return B.forEach((p) => {
1295
+ p.markLineTarget && (z = [...z, ...p.markLineTarget]);
1296
+ }), {
1297
+ animation: !1,
1298
+ dataset: {
1299
+ id: "data",
1300
+ source: {
1301
+ klineData: c,
1302
+ indicatorData: b
1303
+ }
1304
+ },
1305
+ grid: {
1306
+ left: `${s}px`,
1307
+ top: `${d}px`,
1308
+ right: `${g}px`,
1309
+ bottom: `${M}px`
1310
+ },
1311
+ tooltip: {
1312
+ trigger: "axis",
1313
+ axisPointer: {
1314
+ type: "cross",
1315
+ label: {
1316
+ formatter: (p) => {
1317
+ const { axisDimension: f, value: A } = p;
1318
+ return f === "x" ? A : String($(A));
1319
+ }
1320
+ }
1321
+ },
1322
+ formatter: (p) => {
1323
+ let f = null, A = "";
1324
+ return p.forEach((C) => {
1325
+ C.seriesName === "资产持仓净值" && C.data !== null && (A += `<div>资产持仓净值: ${C.data}</div>`), C.componentSubType === "candlestick" && n.forEach((Q) => {
1326
+ const { key: P, data: T } = Q;
1327
+ if (P === "sellBuy") {
1328
+ const D = T.filter((L) => L.time === C.axisValue);
1329
+ let h = 0, y = 0;
1330
+ D.forEach((L) => {
1331
+ L.tradeType === "开多" || L.tradeType === "平空" ? h += L.amount : y += L.amount;
1332
+ }), h && (A += `<div>买: ${h}</div>`), y && (A += `<div>卖: ${y}</div>`);
1333
+ }
1334
+ P === "openClose" && T.forEach((D) => {
1335
+ D.time === C.axisValue && (A += D.tooltip);
1336
+ });
1337
+ }), A && (f = `<div><span style="font-weight: bold;">${C.axisValue}</span>${A}</div>`);
1338
+ }), f;
1339
+ }
1340
+ },
1341
+ xAxis: {
1342
+ type: "category",
1343
+ data: I,
1344
+ axisLine: {
1345
+ show: !0
1346
+ },
1347
+ splitLine: {
1348
+ show: !0,
1349
+ lineStyle: {
1350
+ type: "dotted",
1351
+ color: "#333"
1352
+ }
1353
+ },
1354
+ axisLabel: {
1355
+ show: !0,
1356
+ formatter: (p) => p
1357
+ }
1358
+ },
1359
+ yAxis: [
1360
+ {
1361
+ index: 0,
1362
+ splitLine: {
1363
+ show: !0,
1364
+ lineStyle: {
1365
+ type: "dotted",
1366
+ color: "#333"
1367
+ }
1368
+ },
1369
+ min: (p) => {
1370
+ const { min: f, max: A } = p, C = Math.abs((A - f) / 10);
1371
+ return f - C;
1372
+ },
1373
+ max: (p) => {
1374
+ const { min: f, max: A } = p, C = Math.abs((A - f) / 10);
1375
+ return A + C;
1376
+ },
1377
+ axisLine: {
1378
+ show: !0
1379
+ },
1380
+ axisLabel: {
1381
+ formatter: (p) => $(p),
1382
+ showMaxLabel: !1
1383
+ }
1384
+ },
1385
+ {
1386
+ show: !1,
1387
+ min: "dataMin"
1388
+ }
1389
+ ],
1390
+ dataZoom: [
1391
+ {
1392
+ type: "inside",
1393
+ xAxisIndex: [0, 0],
1394
+ zoomLock: N,
1395
+ maxValueSpan: i,
1396
+ start: c.length >= u ? (c.length - u) / c.length * 100 : 0,
1397
+ end: 99.99
1398
+ // startValue: kLine.length >= defaultShowBarCount ? kLine.length - defaultShowBarCount : 0,
1399
+ // endValue: kLine.length - 1,
1400
+ }
1401
+ ],
1402
+ series: [
1403
+ {
1404
+ name: "k线",
1405
+ type: "candlestick",
1406
+ data: c,
1407
+ markPoint: {
1408
+ data: B
1409
+ },
1410
+ markLine: {
1411
+ position: "middle",
1412
+ textStyle: { color: "blue", fontSize: 15 },
1413
+ animation: !1,
1414
+ data: z,
1415
+ lineStyle: {
1416
+ width: 3,
1417
+ type: "solid"
1418
+ },
1419
+ symbol: ["none", "none"]
1420
+ },
1421
+ itemStyle: {
1422
+ color: "transparent",
1423
+ color0: "#00FFFF",
1424
+ borderColor: "#FF0000",
1425
+ borderColor0: "#00FFFF",
1426
+ borderWidth: 1
1427
+ },
1428
+ z: 1
1429
+ },
1430
+ ...k,
1431
+ {
1432
+ name: "资产持仓净值",
1433
+ type: "line",
1434
+ data: t ?? [],
1435
+ symbol: "none",
1436
+ yAxisIndex: 1,
1437
+ connectNulls: !0,
1438
+ itemStyle: {
1439
+ color: "#666"
1440
+ }
1441
+ },
1442
+ {
1443
+ name: "二腿相关度",
1444
+ type: "line",
1445
+ data: l ?? [],
1446
+ symbol: "none",
1447
+ yAxisIndex: 1,
1448
+ connectNulls: !0,
1449
+ itemStyle: {
1450
+ color: "#FFF"
1451
+ },
1452
+ lineStyle: {
1453
+ // type: "dashed", // 虚线
1454
+ width: 2
1455
+ },
1456
+ label: {
1457
+ show: !0,
1458
+ // 显示文字
1459
+ position: "top",
1460
+ // 文字位置
1461
+ formatter: (p) => `相关度: ${p.data[1]}`,
1462
+ textStyle: {
1463
+ color: "#FFF",
1464
+ // 文字颜色
1465
+ fontSize: 14
1466
+ // 文字字体大小
1467
+ }
1468
+ }
1469
+ }
1470
+ ],
1471
+ toolbox: {
1472
+ show: !1
1473
+ },
1474
+ brush: {
1475
+ xAxisIndex: "all",
1476
+ brushLink: "all",
1477
+ transformable: !1,
1478
+ outOfBrush: {
1479
+ colorAlpha: 1
1480
+ },
1481
+ brushStyle: {
1482
+ color: "rgba(120,140,180,0)",
1483
+ borderColor: "rgba(255,255,255,0.4)"
1484
+ }
1485
+ }
1486
+ };
1487
+ }, pn = (e, n, a) => {
1488
+ var g;
1489
+ const { gridLeft: o, gridRight: t, gridBottom: l, warningConfig: r, positionConfig: u, conditionConfig: i, isOpenDS: s } = n;
1490
+ let d = [];
1491
+ if ((g = a == null ? void 0 : a.getModel()) != null && g.getComponent) {
1492
+ const [M, N] = a.getModel().getComponent("yAxis").axis.scale._extent;
1493
+ let I = [], c = {}, v = [], b = {}, k = [], B = {};
1494
+ if (e.forEach(({ key: z, data: p, ...f }) => {
1495
+ z === "warning" ? (I = p, c = f) : z === "position" ? (v = p, b = f) : z === "condition" && (k = p, B = f);
1496
+ }), I.length > 0 && (d = I.reduce((z, p) => {
1497
+ const { value: f, text: A, info: C, config: Q } = p;
1498
+ if (f > N || f < M)
1499
+ return z;
1500
+ const P = {
1501
+ y: a.convertToPixel({ yAxisIndex: 0 }, f),
1502
+ text: A,
1503
+ info: { info: C, config: { ...r, ...Q }, event: { ...c } },
1504
+ gridLeft: o,
1505
+ gridRight: t,
1506
+ echartsWidth: a.getWidth(),
1507
+ echartsInstance: a
1508
+ };
1509
+ return [...z, dn(P)];
1510
+ }, d)), v.length > 0 && (d = v.reduce((z, p) => {
1511
+ const { value: f, text: A, info: C, config: Q } = p;
1512
+ if (f > N || f < M)
1513
+ return z;
1514
+ const P = {
1515
+ y: a.convertToPixel({ yAxisIndex: 0 }, f),
1516
+ text: A,
1517
+ info: { info: C, config: { ...u, ...Q }, event: { ...b } },
1518
+ gridLeft: o,
1519
+ gridRight: t,
1520
+ echartsWidth: a.getWidth(),
1521
+ echartsInstance: a
1522
+ };
1523
+ return [...z, Nn(P)];
1524
+ }, d)), k.length > 0 && (d = k.reduce((z, p) => {
1525
+ const { value: f, text: A, profitValue: C, profitText: Q, lossValue: P, lossText: T, info: D, config: h } = p;
1526
+ if (f > N || f < M)
1527
+ return z;
1528
+ const y = {
1529
+ y: a.convertToPixel({ yAxisIndex: 0 }, f),
1530
+ text: A,
1531
+ profitY: a.convertToPixel({ yAxisIndex: 0 }, C),
1532
+ profitText: Q,
1533
+ lossY: a.convertToPixel({ yAxisIndex: 0 }, P),
1534
+ lossText: T,
1535
+ info: { info: D, config: { ...i, ...h }, event: { ...B } },
1536
+ gridLeft: o,
1537
+ gridRight: t,
1538
+ echartsWidth: a.getWidth(),
1539
+ echartsInstance: a
1540
+ };
1541
+ return [...z, yn(y)];
1542
+ }, d)), s) {
1543
+ const z = a.getOption(), p = z.dataset[0].source.klineData.slice(
1544
+ z.dataZoom[0].startValue,
1545
+ z.dataZoom[0].endValue + 1
1546
+ ), f = {};
1547
+ p.forEach((y) => {
1548
+ f[y[1]] ? f[y[1]] += 1 : f[y[1]] = 1;
1549
+ });
1550
+ const A = p[p.length - 1][1], C = p.reduce((y, L) => y + L[1], 0) / p.length, Q = A - C, P = Tn(p, 1, 50), T = In(p), D = T ? Q / T : 0, h = fn(p, 1, A);
1551
+ d = [
1552
+ ...d,
1553
+ {
1554
+ type: "group",
1555
+ draggable: !1,
1556
+ children: Object.keys(f).map((y) => ({
1557
+ type: "line",
1558
+ shape: {
1559
+ x1: a.getWidth() - t - 100 * f[y],
1560
+ y1: a.convertToPixel({ yAxisIndex: 0 }, y),
1561
+ x2: a.getWidth() - t,
1562
+ y2: a.convertToPixel({ yAxisIndex: 0 }, y)
1563
+ },
1564
+ style: {
1565
+ stroke: "rgb(124,124,124)",
1566
+ lineWidth: 1
1567
+ },
1568
+ z: 10
1569
+ }))
1570
+ },
1571
+ {
1572
+ type: "text",
1573
+ x: o + 6,
1574
+ y: a.getHeight() - l - 20,
1575
+ style: {
1576
+ fill: "#FFF",
1577
+ text: `均值: ${$(C)}    距均值: ${$(
1578
+ Q
1579
+ )}    中值: ${$(P)}    标准差: ${$(
1580
+ T
1581
+ )}    距均值/标准差: ${$(D)}    百分位: ${$(
1582
+ h
1583
+ )}%`,
1584
+ lineWidth: 1,
1585
+ opacity: 1
1586
+ },
1587
+ z: 10
1588
+ }
1589
+ ];
1590
+ }
1591
+ }
1592
+ return { elements: d };
1593
+ }, fn = (e, n, a) => {
1594
+ const { round: o, add: t, subtract: l, multiply: r, divide: u } = Le.stMath, i = e.map((d) => d[n]).sort((d, g) => d - g);
1595
+ let s = 0;
1596
+ for (let d = 0; d < i.length; d++)
1597
+ if (i[d] === a) {
1598
+ s = d;
1599
+ break;
1600
+ } else if (i[d] >= a) {
1601
+ s = t(d, u(l(i[d + 1], i[d]), i[d]));
1602
+ break;
1603
+ }
1604
+ return o(u(r(s, 100), e.length + 1));
1605
+ }, Tn = (e, n, a) => {
1606
+ const { round: o, add: t, subtract: l, multiply: r, divide: u } = Le.stMath, i = e.map((M) => M[n]).sort((M, N) => M - N), s = r(e.length + 1, u(a, 100)), d = Math.floor(s), g = l(s, d);
1607
+ return o(g === 0 ? i[s] : t(
1608
+ i[d],
1609
+ r(
1610
+ l(
1611
+ i[d >= e.length - 1 ? d : d + 1],
1612
+ i[d]
1613
+ ),
1614
+ g
1615
+ )
1616
+ ));
1617
+ };
1618
+ function In(e) {
1619
+ const n = e.map((r) => r[1]), a = n.length;
1620
+ let o = 0, t = 0;
1621
+ for (const r of n)
1622
+ o += r;
1623
+ const l = o / a;
1624
+ for (const r of n)
1625
+ t += Math.pow(r - l, 2);
1626
+ return Math.sqrt(t / a);
1627
+ }
1628
+ const mn = { class: "st-kline" }, Dn = { class: "st-kline-header" }, Ln = 300, vn = /* @__PURE__ */ G({
1629
+ __name: "index",
1630
+ props: {
1631
+ indicator: {
1632
+ type: Object,
1633
+ default: () => ({})
1634
+ },
1635
+ klineData: {
1636
+ type: Array,
1637
+ default: () => []
1638
+ },
1639
+ markData: {
1640
+ type: Array,
1641
+ default: () => []
1642
+ },
1643
+ lineData: {
1644
+ type: Array,
1645
+ default: () => []
1646
+ },
1647
+ netPositionData: {
1648
+ type: Array,
1649
+ default: () => []
1650
+ },
1651
+ relevanceData: {
1652
+ type: Array,
1653
+ default: () => []
1654
+ },
1655
+ priceTrendData: {
1656
+ type: Array,
1657
+ default: () => []
1658
+ },
1659
+ priceTrendPercentData: {
1660
+ type: Array,
1661
+ default: () => []
1662
+ },
1663
+ brushRange: {
1664
+ type: Array,
1665
+ default: () => []
1666
+ },
1667
+ defaultMenuData: {
1668
+ type: Array,
1669
+ default: () => []
1670
+ },
1671
+ isSelect: {
1672
+ type: Boolean,
1673
+ default: () => !1
1674
+ },
1675
+ config: {
1676
+ type: Object,
1677
+ default: () => ({})
1678
+ }
1679
+ },
1680
+ setup(e) {
1681
+ const n = e, a = {
1682
+ totalBarCount: 2e3,
1683
+ defaultShowBarCount: 200,
1684
+ preBarCount: 800,
1685
+ maxValueSpan: 1e4,
1686
+ gridLeft: 60,
1687
+ gridTop: 0,
1688
+ gridRight: 60,
1689
+ gridBottom: 30,
1690
+ // 预警线配置
1691
+ warningConfig: {
1692
+ draggable: !1,
1693
+ lineColor: "#fff",
1694
+ textColor: "#fff"
1695
+ },
1696
+ // 持仓线配置
1697
+ positionConfig: {
1698
+ draggable: !1,
1699
+ lineColor: "#e45d07",
1700
+ textColor: "#fff"
1701
+ },
1702
+ // 条件单配置
1703
+ conditionConfig: {
1704
+ draggable: !1,
1705
+ lineColor: "#fff",
1706
+ textColor: "#fff",
1707
+ profitLineColor: "#b71e44",
1708
+ profitTextColor: "#fff",
1709
+ lossLineColor: "#749b66",
1710
+ lossTextColor: "#fff"
1711
+ },
1712
+ // Tips配置
1713
+ tipsConfig: {
1714
+ open: !0,
1715
+ heigh: !0,
1716
+ low: !0,
1717
+ close: !0,
1718
+ business: !0,
1719
+ riseAndFall: !0
1720
+ },
1721
+ // 动态加载配置
1722
+ dynamicLoadConfig: {
1723
+ historyVisible: !1,
1724
+ historyLoadCallBack: () => {
1725
+ },
1726
+ futureVisible: !1,
1727
+ futureLoadCallBack: () => {
1728
+ }
1729
+ },
1730
+ // 是否禁用鼠标滚轮缩放K线,在开启动态后续数据加载时,建议开启,否则会引起datazoom内部缩放拖拽触发后续加载冲突
1731
+ zoomLock: !1,
1732
+ // 是否启用计算收盘价分布统计功能
1733
+ isOpenDS: !1
1734
+ }, o = O(() => ({ ...a, ...n.config })), t = S(null), l = S(-1), r = O(() => {
1735
+ var y, L;
1736
+ if (t.value && ((L = (y = t.value.dataset[0]) == null ? void 0 : y.source) != null && L.klineData[l.value])) {
1737
+ const m = t.value.dataset[0].source.klineData[l.value], j = [], { open: x, heigh: E, low: Y, close: w, business: F, riseAndFall: V } = o.value.tipsConfig;
1738
+ if (x && j.push({ label: "开", value: $(m[0]), color: "rgb(153, 153, 153)" }), E && j.push({ label: "高", value: $(m[3]), color: "rgb(153, 153, 153)" }), Y && j.push({ label: "低", value: $(m[2]), color: "rgb(153, 153, 153)" }), w && j.push({ label: "收", value: $(m[1]), color: "rgb(153, 153, 153)" }), F && j.push({ label: "额", value: cn(m[4]), color: "rgb(153, 153, 153)" }), V) {
1739
+ let W = ((m[1] - m[5]) / m[1] * 100).toFixed(2), Z = +W == 0 ? "white" : +W > 0 ? "red" : "#00ff00";
1740
+ j.push({ label: "涨跌", value: `${W}%`, color: Z });
1741
+ }
1742
+ return j;
1743
+ }
1744
+ return [];
1745
+ }), u = O(() => {
1746
+ var y, L;
1747
+ return t.value && ((L = (y = t.value.dataset[0]) == null ? void 0 : y.source) != null && L.indicatorData) ? t.value.dataset[0].source.indicatorData.reduce((m, j) => (j.data[l.value] && m.push({
1748
+ label: j.key,
1749
+ value: $(j.data[l.value]),
1750
+ color: j.color
1751
+ }), m), []) : [];
1752
+ }), i = O(() => {
1753
+ const y = [
1754
+ "#FFFFFF",
1755
+ "#FFDD00",
1756
+ "#FF00FF",
1757
+ "#00FF00",
1758
+ "#FF6000",
1759
+ "#1677FF",
1760
+ "#7C3CC9",
1761
+ "#FF0000",
1762
+ "#FB9A0E",
1763
+ "#00B7FF"
1764
+ ];
1765
+ if (n.priceTrendData.length > 0) {
1766
+ const L = [];
1767
+ return n.priceTrendData.forEach((m, j) => {
1768
+ var E;
1769
+ (m.data[l.value] ? $(m.data[l.value][1]) : null) !== null && L.push({
1770
+ label: m.name,
1771
+ value: $((E = m.data[l.value]) == null ? void 0 : E[1]),
1772
+ color: y[j]
1773
+ });
1774
+ }), L;
1775
+ }
1776
+ if (n.priceTrendPercentData.length > 0) {
1777
+ const L = [];
1778
+ return c.getOption().series.filter((j) => j.name.includes("二腿价格走势百分比图")).forEach((j, x) => {
1779
+ var Y;
1780
+ (j.data[l.value] ? $(j.data[l.value][1]) : null) !== null && L.push({
1781
+ label: j.name.split("-")[1],
1782
+ value: `${$((Y = j.data[l.value]) == null ? void 0 : Y[1])}%`,
1783
+ color: y[x]
1784
+ });
1785
+ }), L;
1786
+ }
1787
+ return [];
1788
+ });
1789
+ H(
1790
+ () => [n.klineData, n.indicator, n.markData, n.netPositionData, n.relevanceData],
1791
+ () => {
1792
+ s();
1793
+ },
1794
+ {
1795
+ deep: !0
1796
+ }
1797
+ ), H(
1798
+ () => n.lineData,
1799
+ async () => {
1800
+ se("st-kline组件消息:props.lineData监控,额外画线数据发生改变,重绘->line", {
1801
+ color: "red"
1802
+ }), s("line");
1803
+ },
1804
+ {
1805
+ deep: !0
1806
+ }
1807
+ ), H(
1808
+ () => n.brushRange,
1809
+ async () => {
1810
+ se("st-kline组件消息:props.brushRange监控,区域刷选数据发生改变,重绘->brush", {
1811
+ color: "red"
1812
+ }), s("brush");
1813
+ },
1814
+ {
1815
+ deep: !0
1816
+ }
1817
+ ), H(
1818
+ () => n.priceTrendData,
1819
+ async () => {
1820
+ s("priceTrend");
1821
+ },
1822
+ {
1823
+ deep: !0
1824
+ }
1825
+ ), H(
1826
+ () => n.priceTrendPercentData,
1827
+ async () => {
1828
+ s("priceTrendPercent");
1829
+ },
1830
+ {
1831
+ deep: !0
1832
+ }
1833
+ );
1834
+ const s = async (y) => {
1835
+ const m = (/* @__PURE__ */ new Map([
1836
+ // kline-K线绘制
1837
+ [
1838
+ "kline",
1839
+ async () => {
1840
+ const j = await we(
1841
+ n.klineData,
1842
+ n.markData,
1843
+ n.indicator,
1844
+ o.value,
1845
+ n.netPositionData,
1846
+ n.relevanceData
1847
+ ), { graphic: x } = c.getOption() ?? { graphic: [] };
1848
+ t.value = { ...j, graphic: x }, c.setOption(t.value, !0), se("st-kline组件消息:K线绘制完毕-draw", { color: "green" });
1849
+ }
1850
+ ],
1851
+ // line-额外线条绘制
1852
+ [
1853
+ "line",
1854
+ () => {
1855
+ const j = c.getOption(), x = pn(n.lineData, o.value, c);
1856
+ t.value = { ...j, graphic: x }, c.setOption(t.value, {
1857
+ replaceMerge: ["graphic"]
1858
+ }), se("st-kline组件消息:额外画线绘制完毕-draw", { color: "green" });
1859
+ }
1860
+ ],
1861
+ // brush-区域刷选
1862
+ [
1863
+ "brush",
1864
+ () => {
1865
+ const { brushRange: j } = n;
1866
+ j instanceof Array && j.length > 0 && (c.dispatchAction({
1867
+ type: "brush",
1868
+ areas: [
1869
+ {
1870
+ brushType: "lineX",
1871
+ coordRange: [j[0] + "", j[1] + ""],
1872
+ xAxisIndex: 0
1873
+ }
1874
+ ]
1875
+ }), se("st-kline组件消息:区域刷选绘制完毕-draw", { color: "green" }));
1876
+ }
1877
+ ],
1878
+ // 全部绘制
1879
+ [
1880
+ void 0,
1881
+ async () => {
1882
+ await s("kline"), await s("line"), await s("priceTrend"), await s("priceTrendPercent"), await s("brush");
1883
+ }
1884
+ ],
1885
+ // history-K线历史数据绘制
1886
+ [
1887
+ "history",
1888
+ async () => {
1889
+ const j = c.getOption(), x = await we(
1890
+ n.klineData,
1891
+ n.markData,
1892
+ n.indicator,
1893
+ o.value,
1894
+ n.netPositionData,
1895
+ n.relevanceData
1896
+ ), E = x.dataset.source.klineData.length - j.dataset[0].source.klineData.length;
1897
+ c.setOption(
1898
+ {
1899
+ ...x,
1900
+ dataZoom: [
1901
+ {
1902
+ type: "inside",
1903
+ xAxisIndex: [0, 0],
1904
+ zoomLock: o.value.zoomLock,
1905
+ maxValueSpan: o.value.maxValueSpan,
1906
+ startValue: j.dataZoom[0].startValue + E,
1907
+ endValue: j.dataZoom[0].endValue + E
1908
+ }
1909
+ ]
1910
+ },
1911
+ !0
1912
+ ), await s("priceTrend");
1913
+ }
1914
+ ],
1915
+ // future-K线后续数据绘制
1916
+ [
1917
+ "future",
1918
+ async () => {
1919
+ const j = c.getOption(), x = await we(
1920
+ n.klineData,
1921
+ n.markData,
1922
+ n.indicator,
1923
+ o.value,
1924
+ n.netPositionData,
1925
+ n.relevanceData
1926
+ );
1927
+ x.dataZoom[0].start = (n.klineData.length - j.dataZoom[0].endValue + j.dataZoom[0].startValue) / n.klineData.length * 100, c.setOption(x, !0), await s("priceTrend");
1928
+ }
1929
+ ],
1930
+ // priceTrend-二腿价格趋势绘制
1931
+ [
1932
+ "priceTrend",
1933
+ () => {
1934
+ if (n.priceTrendData.length === 0)
1935
+ return;
1936
+ const j = c.getOption(), x = [
1937
+ "#FFFFFF",
1938
+ "#FFDD00",
1939
+ "#FF00FF",
1940
+ "#00FF00",
1941
+ "#FF6000",
1942
+ "#1677FF",
1943
+ "#7C3CC9",
1944
+ "#FF0000",
1945
+ "#FB9A0E",
1946
+ "#00B7FF"
1947
+ ], E = n.priceTrendData.reduce((Y, w, F) => {
1948
+ const { name: V, data: W } = w, Z = {
1949
+ name: `二腿价格走势图-${V}`,
1950
+ type: "line",
1951
+ data: W,
1952
+ symbol: "none",
1953
+ yAxisIndex: 1,
1954
+ connectNulls: !0,
1955
+ itemStyle: {
1956
+ color: x[F]
1957
+ },
1958
+ lineStyle: {
1959
+ type: "dashed",
1960
+ // 虚线
1961
+ width: 1
1962
+ }
1963
+ };
1964
+ return Y.push(Z), Y;
1965
+ }, []);
1966
+ t.value = { ...j, series: [...j.series, ...E] }, c.setOption(t.value, {
1967
+ replaceMerge: ["series"]
1968
+ });
1969
+ }
1970
+ ],
1971
+ // priceTrendPercent-二腿价格趋势百分比绘制-初始绘制
1972
+ [
1973
+ "priceTrendPercent",
1974
+ async () => {
1975
+ if (n.priceTrendPercentData.length === 0)
1976
+ return;
1977
+ const j = c.getOption(), x = [
1978
+ "#FFFFFF",
1979
+ "#FFDD00",
1980
+ "#FF00FF",
1981
+ "#00FF00",
1982
+ "#FF6000",
1983
+ "#1677FF",
1984
+ "#7C3CC9",
1985
+ "#FF0000",
1986
+ "#FB9A0E",
1987
+ "#00B7FF"
1988
+ ], E = j.dataZoom[0].startValue, Y = n.priceTrendPercentData.reduce((w, F, V) => {
1989
+ const { name: W, data: Z } = F, Me = Z.length > o.value.totalBarCount ? Z.slice(Z.length - o.value.totalBarCount) : Z, ce = Me[E][1], rt = Me.map(($e) => [$e[0], ($e[1] - ce) / ce * 100]), ut = {
1990
+ name: `二腿价格走势百分比图-${W}`,
1991
+ type: "line",
1992
+ data: rt,
1993
+ symbol: "none",
1994
+ yAxisIndex: 1,
1995
+ connectNulls: !0,
1996
+ itemStyle: {
1997
+ color: x[V]
1998
+ },
1999
+ lineStyle: {
2000
+ type: "dashed",
2001
+ // 虚线
2002
+ width: 1
2003
+ }
2004
+ };
2005
+ return w.push(ut), w;
2006
+ }, []);
2007
+ j.series = [...j.series.filter((w) => !w.name.includes("二腿价格走势百分比图")), ...Y], c.setOption(j, !0);
2008
+ }
2009
+ ]
2010
+ ])).get(y);
2011
+ m instanceof Function && await m();
2012
+ }, d = S(!1), g = S([]), M = (y) => {
2013
+ const { callBack: L } = y;
2014
+ L instanceof Function && L(c, d);
2015
+ }, N = () => {
2016
+ g.value = n.defaultMenuData;
2017
+ }, I = S();
2018
+ let c, v;
2019
+ const b = (y, L) => {
2020
+ var m, j;
2021
+ if (y)
2022
+ l.value = typeof ((m = y == null ? void 0 : y.batch[0]) == null ? void 0 : m.dataIndex) == "number" ? (j = y == null ? void 0 : y.batch[0]) == null ? void 0 : j.dataIndex : -1;
2023
+ else {
2024
+ const x = L.getOption();
2025
+ x.dataZoom instanceof Array && (l.value = x.dataZoom[0].endValue);
2026
+ }
2027
+ };
2028
+ let k = null, B = !1, z = S(!1), p = !1, f = S(!1);
2029
+ const A = async (y) => {
2030
+ const L = y.batch ? y.batch[0].start * o.value.totalBarCount : y.startValue;
2031
+ o.value.dynamicLoadConfig.historyVisible && L <= 100 && !B && !z.value && (B = !0, await o.value.dynamicLoadConfig.historyLoadCallBack(z), await s("history"), B = !1);
2032
+ const m = y.batch ? y.batch[0].end === 100 : y.endValue >= n.klineData.length - o.value.preBarCount - 1, j = y.actionIsWheel;
2033
+ o.value.dynamicLoadConfig.futureVisible && m && !p && !f.value && !j && (p = !0, await o.value.dynamicLoadConfig.futureLoadCallBack(f), await s("future"), p = !1), clearTimeout(k), k = setTimeout(() => {
2034
+ s("line"), s("priceTrendPercent"), clearTimeout(k), k = null;
2035
+ }, Ln);
2036
+ };
2037
+ let C = null;
2038
+ const Q = (y) => {
2039
+ C = setTimeout(() => {
2040
+ var L;
2041
+ if (y.componentType === "graphic") {
2042
+ const { oncontextmenu: m } = ((L = y.info) == null ? void 0 : L.event) ?? {};
2043
+ m instanceof Function && m(y, y.info, g);
2044
+ }
2045
+ clearTimeout(C), C = null;
2046
+ });
2047
+ }, P = () => {
2048
+ c.on("highlight", (y) => {
2049
+ b(y, c);
2050
+ }), c.on("globalout", () => {
2051
+ b(null, c);
2052
+ }), c.on("contextmenu", (y) => {
2053
+ Q(y);
2054
+ }), c.on("datazoom", (y) => {
2055
+ A(y);
2056
+ });
2057
+ }, T = () => {
2058
+ c.off("highlight"), c.off("globalout"), c.off("contextmenu"), c.off("datazoom");
2059
+ }, D = (y) => {
2060
+ if (!c || !(y.ctrlKey || n.isSelect))
2061
+ return;
2062
+ const L = c.getOption();
2063
+ let { startValue: m, endValue: j, start: x, end: E } = L.dataZoom[0];
2064
+ const Y = () => {
2065
+ m !== 0 && (m = m - 1, j = j - 1, c.dispatchAction({
2066
+ type: "dataZoom",
2067
+ startValue: m,
2068
+ endValue: j,
2069
+ maxValueSpan: o.value.maxValueSpan
2070
+ }));
2071
+ }, w = () => {
2072
+ if (o.value.dynamicLoadConfig.futureVisible && !p && !f.value)
2073
+ m = m + 1, j = j + 1, c.dispatchAction({
2074
+ type: "dataZoom",
2075
+ startValue: m,
2076
+ endValue: j,
2077
+ maxValueSpan: o.value.maxValueSpan
2078
+ });
2079
+ else {
2080
+ if (j === L.xAxis[0].data.length - 1)
2081
+ return;
2082
+ m = m + 1, j = j + 1, c.dispatchAction({
2083
+ type: "dataZoom",
2084
+ startValue: m,
2085
+ endValue: j,
2086
+ maxValueSpan: o.value.maxValueSpan
2087
+ });
2088
+ }
2089
+ }, F = () => {
2090
+ if (j - m < 5)
2091
+ return;
2092
+ const Me = Math.floor((l.value - m) / 2) + 1, ce = Math.floor((j - l.value) / 2) + 1;
2093
+ m = m + Me, j = j - ce, c.dispatchAction({
2094
+ type: "dataZoom",
2095
+ startValue: m,
2096
+ endValue: j,
2097
+ actionIsWheel: !0,
2098
+ // 标记为缩放
2099
+ maxValueSpan: o.value.maxValueSpan
2100
+ });
2101
+ }, V = () => {
2102
+ x = x - (E - x) / 4, c.dispatchAction({
2103
+ type: "dataZoom",
2104
+ start: x,
2105
+ end: E,
2106
+ actionIsWheel: !0,
2107
+ // 标记为缩放
2108
+ maxValueSpan: o.value.maxValueSpan
2109
+ });
2110
+ }, Z = (/* @__PURE__ */ new Map([
2111
+ ["ArrowLeft", Y],
2112
+ ["ArrowRight", w],
2113
+ ["ArrowUp", F],
2114
+ ["ArrowDown", V]
2115
+ ])).get(y.code);
2116
+ Z instanceof Function && Z();
2117
+ }, h = async () => {
2118
+ let y = !0;
2119
+ c = Te.init(I.value), await s(), g.value = n.defaultMenuData, l.value = c.getOption().dataZoom[0].endValue ?? -1, P(), v = new ResizeObserver(() => {
2120
+ if (y) {
2121
+ y = null;
2122
+ return;
2123
+ }
2124
+ c.resize(), s("line");
2125
+ }), v.observe(I.value), window.addEventListener("keydown", D);
2126
+ };
2127
+ return le(() => {
2128
+ h();
2129
+ }), Re(() => {
2130
+ T(), window.removeEventListener("keydown", D), c.dispose(), v.disconnect(), v = null;
2131
+ }), (y, L) => {
2132
+ const m = tn, j = en;
2133
+ return _(), R("div", mn, [
2134
+ te("div", Dn, [
2135
+ K(Ae, { data: r.value }, null, 8, ["data"]),
2136
+ K(Ae, { data: u.value }, null, 8, ["data"]),
2137
+ K(Ae, { data: i.value }, null, 8, ["data"])
2138
+ ]),
2139
+ K(sn, {
2140
+ class: "st-kline-body",
2141
+ onCloseContextMenuCallBack: N
2142
+ }, {
2143
+ popover: ee(() => [
2144
+ K(j, { class: "menu" }, {
2145
+ default: ee(() => [
2146
+ (_(!0), R(ne, null, De(g.value, (x) => (_(), ue(m, {
2147
+ key: x.label,
2148
+ index: x.label,
2149
+ class: "menuItem",
2150
+ onClick: (E) => M(x)
2151
+ }, {
2152
+ default: ee(() => [
2153
+ tt(ie(x.label), 1)
2154
+ ]),
2155
+ _: 2
2156
+ }, 1032, ["index", "onClick"]))), 128))
2157
+ ]),
2158
+ _: 1
2159
+ })
2160
+ ]),
2161
+ default: ee(() => [
2162
+ te("div", {
2163
+ ref_key: "echartsRef",
2164
+ ref: I,
2165
+ class: re(d.value ? "st-kline-chart cursorPen" : "st-kline-chart")
2166
+ }, null, 2)
2167
+ ]),
2168
+ _: 1
2169
+ })
2170
+ ]);
2171
+ };
2172
+ }
2173
+ });
2174
+ const hn = /* @__PURE__ */ oe(vn, [["__scopeId", "data-v-7f014d0e"]]), xn = { class: "kline-tips" }, An = /* @__PURE__ */ G({
2175
+ __name: "index",
2176
+ props: {
2177
+ // 提示数据
2178
+ data: {
2179
+ type: Array,
2180
+ require: !0
2181
+ }
2182
+ },
2183
+ setup(e) {
2184
+ return (n, a) => (_(), R("div", xn, [
2185
+ (_(!0), R(ne, null, De(e.data, (o, t) => (_(), R("div", {
2186
+ key: t,
2187
+ class: "kline-tips-item",
2188
+ style: Pe({ color: o.color })
2189
+ }, ie(o.label) + " " + ie(o.value), 5))), 128))
2190
+ ]));
2191
+ }
2192
+ });
2193
+ const Ee = /* @__PURE__ */ oe(An, [["__scopeId", "data-v-dc7d381b"]]);
2194
+ const Yn = { class: "klineSub" }, Cn = { class: "klineSub-tips" }, bn = {
2195
+ key: 0,
2196
+ class: "klineSub-tips-select"
2197
+ }, wn = {
2198
+ __name: "index",
2199
+ props: {
2200
+ data: { type: Object, require: !0 },
2201
+ activeIndex: { type: [Number, String], require: !0 },
2202
+ modelValue: { type: String, required: !0 },
2203
+ // 副图指标
2204
+ subIndicatorList: { type: Array, required: !0 }
2205
+ // 副图指标列表
2206
+ },
2207
+ emits: ["update:modelValue"],
2208
+ setup(e, { expose: n, emit: a }) {
2209
+ const { round: o } = Le.stMath;
2210
+ let t, l;
2211
+ const r = a, u = e, i = S(), s = O({
2212
+ get() {
2213
+ return u.modelValue;
2214
+ },
2215
+ set(M) {
2216
+ r("update:modelValue", M);
2217
+ }
2218
+ }), d = O(() => {
2219
+ var I;
2220
+ const { data: M, activeIndex: N } = u;
2221
+ return ((I = M == null ? void 0 : M.subIndicator) == null ? void 0 : I.map((c) => ({ label: c.key, color: c.color, value: c.data[N] || "-" }))) || [];
2222
+ });
2223
+ le(() => {
2224
+ t = Te.init(i.value);
2225
+ let M = !0;
2226
+ l = new ResizeObserver(() => {
2227
+ if (M) {
2228
+ M = null;
2229
+ return;
2230
+ }
2231
+ t.resize();
2232
+ }), l.observe(i.value);
2233
+ }), Re(() => {
2234
+ t.dispose(), l.disconnect(), l = null;
2235
+ });
2236
+ const g = (M, N) => {
2237
+ const I = M[N], c = N === 0 ? M[N] : M[N - 1];
2238
+ return I[0] === I[1] ? I[0] >= c[1] ? {
2239
+ color: "transparent",
2240
+ borderColor: "#FF0000"
2241
+ } : {
2242
+ color: "#00FFFF"
2243
+ } : I[1] > I[0] ? {
2244
+ color: "transparent",
2245
+ borderColor: "#FF0000"
2246
+ } : {
2247
+ color: "#00FFFF"
2248
+ };
2249
+ };
2250
+ return n({
2251
+ connect: (M) => {
2252
+ Te.connect([M, t]);
2253
+ },
2254
+ // 联动
2255
+ draw: (M, N) => {
2256
+ Be(() => {
2257
+ const { startValue: I, endValue: c, maxValueSpan: v } = M, { leftYAxisRange: b, rightYAxisRange: k } = u.data.subIndicator[0], B = u.data.subIndicator.map((z) => {
2258
+ if (z.series === "bar")
2259
+ return {
2260
+ name: "subMain",
2261
+ xAxisIndex: 0,
2262
+ yAxisIndex: 1,
2263
+ type: "bar",
2264
+ silent: !0,
2265
+ symbol: "none",
2266
+ data: z.data.map((p, f) => z.seriesColor === "kline" ? {
2267
+ value: p,
2268
+ itemStyle: g(u.data.data, f)
2269
+ } : z.seriesColor === "value" ? {
2270
+ value: p,
2271
+ itemStyle: {
2272
+ color: p >= 0 ? "#FF0000" : "#00FFFF"
2273
+ }
2274
+ } : {
2275
+ value: p,
2276
+ itemStyle: {
2277
+ color: z.seriesColor
2278
+ }
2279
+ })
2280
+ };
2281
+ if (z.series === "line")
2282
+ return {
2283
+ xAxisIndex: 0,
2284
+ yAxisIndex: z.yAxis === "right" ? 2 : 1,
2285
+ name: z.key,
2286
+ type: "line",
2287
+ silent: !0,
2288
+ symbol: "none",
2289
+ data: z.data,
2290
+ lineStyle: {
2291
+ width: 1
2292
+ },
2293
+ itemStyle: {
2294
+ color: z.color
2295
+ }
2296
+ };
2297
+ });
2298
+ t.setOption({
2299
+ animation: !1,
2300
+ grid: {
2301
+ left: `${N.gridLeft}px`,
2302
+ top: "10px",
2303
+ right: `${N.gridRight}px`,
2304
+ bottom: "20px"
2305
+ },
2306
+ dataZoom: [
2307
+ {
2308
+ type: "inside",
2309
+ startValue: I,
2310
+ endValue: c,
2311
+ maxValueSpan: v
2312
+ }
2313
+ ],
2314
+ tooltip: {
2315
+ trigger: "axis",
2316
+ appendToBody: !0,
2317
+ confine: !0,
2318
+ axisPointer: {
2319
+ type: "cross",
2320
+ label: {
2321
+ rich: {},
2322
+ formatter: (z) => {
2323
+ const { axisDimension: p, value: f } = z;
2324
+ if (p === "x")
2325
+ return f;
2326
+ if (z.axisIndex === 1)
2327
+ return String(o(f));
2328
+ }
2329
+ }
2330
+ },
2331
+ formatter: () => ""
2332
+ },
2333
+ xAxis: {
2334
+ type: "category",
2335
+ data: u.data.time,
2336
+ axisLine: {
2337
+ show: !0
2338
+ },
2339
+ splitLine: {
2340
+ show: !1
2341
+ },
2342
+ axisLabel: {
2343
+ show: !0,
2344
+ formatter: (z) => z
2345
+ }
2346
+ },
2347
+ yAxis: [
2348
+ {
2349
+ position: "right"
2350
+ },
2351
+ {
2352
+ position: "left",
2353
+ min: b === "cover" ? (z) => z.min : null,
2354
+ max: b === "cover" ? (z) => z.max : null,
2355
+ splitNumber: 1,
2356
+ axisLine: {
2357
+ show: !0
2358
+ },
2359
+ splitLine: {
2360
+ show: !0,
2361
+ lineStyle: {
2362
+ type: "dotted",
2363
+ color: "#333"
2364
+ }
2365
+ }
2366
+ },
2367
+ {
2368
+ position: "right",
2369
+ min: k === "cover" ? (z) => z.min : null,
2370
+ max: k === "cover" ? (z) => z.max : null,
2371
+ splitNumber: 1,
2372
+ axisLine: {
2373
+ show: !1
2374
+ },
2375
+ splitLine: {
2376
+ show: !1
2377
+ },
2378
+ axisLabel: {
2379
+ show: !1
2380
+ }
2381
+ }
2382
+ ],
2383
+ series: B
2384
+ }, !0);
2385
+ });
2386
+ }
2387
+ // 重置
2388
+ }), (M, N) => {
2389
+ const I = Ct, c = bt;
2390
+ return _(), R("div", Yn, [
2391
+ te("div", Cn, [
2392
+ d.value.length ? (_(), R("div", bn, [
2393
+ K(c, {
2394
+ modelValue: s.value,
2395
+ "onUpdate:modelValue": N[0] || (N[0] = (v) => s.value = v),
2396
+ size: "small",
2397
+ "popper-class": "element-dark",
2398
+ class: "element-dark subIndicator"
2399
+ }, {
2400
+ default: ee(() => [
2401
+ (_(!0), R(ne, null, De(e.subIndicatorList, (v) => (_(), ue(I, {
2402
+ key: v.value,
2403
+ label: v.label,
2404
+ value: v.value
2405
+ }, null, 8, ["label", "value"]))), 128))
2406
+ ]),
2407
+ _: 1
2408
+ }, 8, ["modelValue"])
2409
+ ])) : nt("", !0),
2410
+ K(Ee, { data: d.value }, null, 8, ["data"])
2411
+ ]),
2412
+ te("div", {
2413
+ class: "klineSub-chart",
2414
+ ref_key: "subChartRef",
2415
+ ref: i
2416
+ }, null, 512)
2417
+ ]);
2418
+ };
2419
+ }
2420
+ }, On = /* @__PURE__ */ oe(wn, [["__scopeId", "data-v-4264b76c"]]);
2421
+ const kn = { class: "kline-tips" }, En = {
2422
+ __name: "index",
2423
+ props: {
2424
+ // 提示数据
2425
+ data: {
2426
+ type: Object,
2427
+ require: !0
2428
+ },
2429
+ activeIndex: {
2430
+ type: [Number, String],
2431
+ require: !0
2432
+ }
2433
+ },
2434
+ setup(e) {
2435
+ const { round: n, formatValue: a } = Le.stMath, o = e, t = O(() => {
2436
+ const { data: r, activeIndex: u } = o;
2437
+ if (r.data && r.data[u]) {
2438
+ const i = r.data[u], s = [
2439
+ { label: "开", value: n(i[0]) },
2440
+ { label: "高", value: n(i[3]) },
2441
+ { label: "低", value: n(i[2]) },
2442
+ { label: "收", value: n(i[1]) }
2443
+ ];
2444
+ i[4] !== null && s.push({ label: "额", value: a(i[4]) });
2445
+ let d;
2446
+ return i[6] > 0 ? d = "red" : i[6] < 0 && (d = "green"), s.push({ label: "涨跌", value: `${n(i[6])}%`, color: d }), s;
2447
+ }
2448
+ return [];
2449
+ }), l = O(() => {
2450
+ var i;
2451
+ const { data: r, activeIndex: u } = o;
2452
+ return ((i = r == null ? void 0 : r.mainIndicator) == null ? void 0 : i.map((s) => ({ label: s.key, value: n(s.data[u]), color: s.color }))) || [];
2453
+ });
2454
+ return (r, u) => (_(), R("div", kn, [
2455
+ K(Ee, { data: t.value }, null, 8, ["data"]),
2456
+ K(Ee, { data: l.value }, null, 8, ["data"])
2457
+ ]));
2458
+ }
2459
+ }, Sn = /* @__PURE__ */ oe(En, [["__scopeId", "data-v-a12855fe"]]), _n = {
2460
+ __name: "index",
2461
+ setup(e, { expose: n }) {
2462
+ return n({
2463
+ // 键盘事件处理
2464
+ handleKeyDown: (a, o) => {
2465
+ let { startValue: t, endValue: l, maxIndex: r } = o;
2466
+ if (a.code === "ArrowLeft") {
2467
+ if (t === 0)
2468
+ return;
2469
+ t = t - 1, l = l - 1;
2470
+ } else if (a.code === "ArrowRight") {
2471
+ if (l === r)
2472
+ return;
2473
+ t = t + 1, l = l + 1;
2474
+ } else if (a.code === "ArrowUp") {
2475
+ if (l - t < 5)
2476
+ return;
2477
+ const u = Math.floor((l - t) / 2) + 1;
2478
+ t = t + u, l - t < 5 && (t = l - 4);
2479
+ } else if (a.code === "ArrowDown") {
2480
+ const u = Math.min(500, l - t);
2481
+ t = t - u - 1;
2482
+ }
2483
+ return {
2484
+ startValue: t,
2485
+ endValue: l
2486
+ };
2487
+ },
2488
+ // 合并数据
2489
+ mergeData: (a, o) => ({
2490
+ time: [...a.time, ...o.time.slice(1)],
2491
+ data: [...a.data, ...o.data.slice(1)],
2492
+ mainIndicator: a.mainIndicator.map((t, l) => ({
2493
+ ...t,
2494
+ data: [...t.data, ...o.mainIndicator[l].data.slice(1)]
2495
+ })),
2496
+ subIndicator: a.subIndicator.map((t, l) => ({
2497
+ ...t,
2498
+ data: [...t.data, ...o.subIndicator[l].data.slice(1)]
2499
+ }))
2500
+ }),
2501
+ // 根据时间解析dataZoom
2502
+ getDataZoomInfoByTime: (a) => {
2503
+ const { showStartTime: o, showEndTime: t, maxShowDays: l } = a;
2504
+ let r = -1, u = -1, i = {};
2505
+ return a.time.forEach((s, d) => {
2506
+ const g = s.split(" ")[0];
2507
+ i[g] = i[g] || 0, i[g] += 1, new Date(s) >= new Date(o) && r === -1 && (r = d), new Date(s) <= new Date(t) && (u = d);
2508
+ }), {
2509
+ startValue: r,
2510
+ endValue: u,
2511
+ maxValueSpan: Math.max(...Object.values(i)) * l
2512
+ };
2513
+ }
2514
+ }), (a, o) => null;
2515
+ }
2516
+ };
2517
+ const Fn = {
2518
+ __name: "index",
2519
+ props: {
2520
+ data: { type: Array, default: () => [] }
2521
+ // 时间数据
2522
+ },
2523
+ emits: ["change"],
2524
+ setup(e, { expose: n, emit: a }) {
2525
+ let o, t, l = null;
2526
+ const r = a, u = e, i = S();
2527
+ H(
2528
+ () => u.data,
2529
+ () => {
2530
+ g();
2531
+ },
2532
+ { deep: !0 }
2533
+ ), le(() => {
2534
+ o = Te.init(i.value), s(), g();
2535
+ let M = !0;
2536
+ t = new ResizeObserver(() => {
2537
+ if (M) {
2538
+ M = null;
2539
+ return;
2540
+ }
2541
+ o.resize();
2542
+ }), t.observe(i.value);
2543
+ }), Re(() => {
2544
+ o.off("datazoom"), o.dispose(), t.disconnect(), t = null;
2545
+ });
2546
+ const s = () => {
2547
+ o.on("datazoom", (M) => {
2548
+ M.dataZoomId && (clearTimeout(l), l = setTimeout(() => {
2549
+ const { data: N } = u, { start: I, end: c } = M, v = Math.floor(I * N.length / 100), b = c === 100 ? N.length - 1 : Math.floor(c * N.length / 100);
2550
+ d(v, b), clearTimeout(l);
2551
+ }, 100));
2552
+ });
2553
+ }, d = (M, N) => {
2554
+ const I = u.data;
2555
+ if (I.length === 0)
2556
+ return;
2557
+ const c = I[M][0].split(" ")[0], v = I[N][0].split(" ")[0];
2558
+ r("change", {
2559
+ startTime: `${c} 00:00:00`,
2560
+ endTime: `${v} 24:00:00`
2561
+ });
2562
+ }, g = () => {
2563
+ const { data: M } = u;
2564
+ if (M.length === 0)
2565
+ return;
2566
+ const N = M.map((c) => c[0].split(" ")[0]), I = M.map((c) => c[1]);
2567
+ o.setOption({
2568
+ grid: {
2569
+ height: 0,
2570
+ left: "80px",
2571
+ right: "80px"
2572
+ },
2573
+ xAxis: {
2574
+ type: "category",
2575
+ data: N,
2576
+ show: !1
2577
+ },
2578
+ yAxis: {
2579
+ type: "value"
2580
+ },
2581
+ series: [
2582
+ {
2583
+ data: I,
2584
+ type: "line"
2585
+ }
2586
+ ]
2587
+ }, !0);
2588
+ };
2589
+ return n({
2590
+ resetSlide: (M, N, I) => {
2591
+ let c = -1, v = -1;
2592
+ u.data.forEach((b, k) => {
2593
+ c === -1 && b[0] === M ? c = k : c === -1 && new Date(b[0]) > new Date(M) && (c = k - 1), (v === -1 && b[0] === N || v === -1 && new Date(b[0]) > new Date(N)) && (v = k);
2594
+ }), v = v === -1 ? u.data.length - 1 : v, o.setOption({
2595
+ dataZoom: [
2596
+ {
2597
+ show: !0,
2598
+ startValue: c,
2599
+ endValue: v,
2600
+ maxValueSpan: I,
2601
+ textStyle: {
2602
+ color: "#ccc"
2603
+ }
2604
+ },
2605
+ {
2606
+ type: "inside",
2607
+ startValue: c,
2608
+ endValue: v,
2609
+ maxValueSpan: I
2610
+ }
2611
+ ]
2612
+ });
2613
+ },
2614
+ // 重置
2615
+ resize: () => {
2616
+ o == null || o.resize();
2617
+ }
2618
+ }), (M, N) => (_(), R("div", {
2619
+ class: "klineSlide",
2620
+ ref_key: "slideChartRef",
2621
+ ref: i
2622
+ }, null, 512));
2623
+ }
2624
+ }, Qn = /* @__PURE__ */ oe(Fn, [["__scopeId", "data-v-7a2f3dd0"]]), io = {
2625
+ install(e) {
2626
+ e.component("st-kline", hn), e.component("st-kline-sub-new", On), e.component("st-kline-tips-new", Sn), e.component("st-kline-slide-new", Qn), e.component("st-kline-utils-new", _n);
2627
+ }
2628
+ };
2629
+ export {
2630
+ io as default
2631
+ };