@363045841yyt/klinechart 0.7.3-alpha.2 → 0.7.3-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -384,7 +384,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
384
384
  key: 0,
385
385
  class: "action-btn settings-btn",
386
386
  onClick: P((e) => ie(t.id), ["stop"]),
387
- title: "????"
387
+ title: "编辑参数"
388
388
  }, [...u[4] ||= [s("svg", {
389
389
  viewBox: "0 0 24 24",
390
390
  width: "14",
@@ -395,7 +395,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
395
395
  s("button", {
396
396
  class: "action-btn remove-btn",
397
397
  onClick: P((e) => B(t.id), ["stop"]),
398
- title: "????"
398
+ title: "移除指标"
399
399
  }, [...u[5] ||= [s("svg", {
400
400
  viewBox: "0 0 24 24",
401
401
  width: "14",
@@ -409,7 +409,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
409
409
  ref: m,
410
410
  class: "add-btn",
411
411
  onClick: le,
412
- title: "????"
412
+ title: "添加指标"
413
413
  }, [...u[6] ||= [s("svg", {
414
414
  viewBox: "0 0 24 24",
415
415
  width: "16",
@@ -427,10 +427,10 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
427
427
  class: "selector-modal",
428
428
  onClick: u[2] ||= P(() => {}, ["stop"])
429
429
  }, [
430
- s("div", Ge, [s("div", Ke, [u[7] ||= s("span", { class: "title-text" }, "????", -1), s("span", qe, D(te.value) + " ?????", 1)]), s("div", Je, [s("button", {
430
+ s("div", Ge, [s("div", Ke, [u[7] ||= s("span", { class: "title-text" }, "添加指标", -1), s("span", qe, D(te.value) + " 个可用指标", 1)]), s("div", Je, [s("button", {
431
431
  class: g(["view-toggle-btn", { active: k.value }]),
432
432
  onClick: u[1] ||= (e) => k.value = !k.value,
433
- title: "????"
433
+ title: "简洁模式"
434
434
  }, [k.value ? (S(), o("svg", Xe, [...u[9] ||= [s("path", { d: "M3 3h18v18H3V3zm16 16V5H5v14h14zM7 7h4v4H7V7zm0 6h4v4H7v-4zm6-6h4v4h-4V7zm0 6h4v4h-4v-4z" }, null, -1)]])) : (S(), o("svg", Ye, [...u[8] ||= [s("path", { d: "M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z" }, null, -1)]]))], 2), s("button", {
435
435
  class: "modal-close",
436
436
  onClick: V,
@@ -442,7 +442,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
442
442
  fill: "currentColor"
443
443
  }, [s("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" })], -1)]])])]),
444
444
  s("div", Ze, [
445
- s("div", Y, [s("div", Qe, [u[11] ||= s("span", { class: "section-title" }, "????", -1), s("span", $e, D(O(I).length), 1)]), s("div", { class: g(["indicator-grid", { compact: k.value }]) }, [(S(!0), o(e, null, w(O(I), (t) => (S(), o("button", {
445
+ s("div", Y, [s("div", Qe, [u[11] ||= s("span", { class: "section-title" }, "主图指标", -1), s("span", $e, D(O(I).length), 1)]), s("div", { class: g(["indicator-grid", { compact: k.value }]) }, [(S(!0), o(e, null, w(O(I), (t) => (S(), o("button", {
446
446
  key: t.id,
447
447
  class: g(["indicator-card", {
448
448
  active: z(t.id),
@@ -453,7 +453,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
453
453
  key: 0,
454
454
  class: "card-settings-btn",
455
455
  onClick: P((e) => ie(t.id), ["stop"]),
456
- title: "????"
456
+ title: "编辑参数"
457
457
  }, [...u[12] ||= [s("svg", {
458
458
  viewBox: "0 0 24 24",
459
459
  width: "14",
@@ -461,7 +461,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
461
461
  fill: "currentColor"
462
462
  }, [s("path", { d: "M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z" })], -1)]], 8, it)) : a("", !0)])]), s("div", at, D(t.name), 1)], 64))], 10, X))), 128))], 2)]),
463
463
  u[15] ||= s("div", { class: "section-divider" }, null, -1),
464
- s("div", ot, [s("div", st, [u[13] ||= s("span", { class: "section-title" }, "????", -1), s("span", ct, D(O(L).length), 1)]), s("div", { class: g(["indicator-grid", { compact: k.value }]) }, [(S(!0), o(e, null, w(O(L), (t) => (S(), o("button", {
464
+ s("div", ot, [s("div", st, [u[13] ||= s("span", { class: "section-title" }, "副图指标", -1), s("span", ct, D(O(L).length), 1)]), s("div", { class: g(["indicator-grid", { compact: k.value }]) }, [(S(!0), o(e, null, w(O(L), (t) => (S(), o("button", {
465
465
  key: t.id,
466
466
  class: g(["indicator-card", {
467
467
  active: z(t.id),
@@ -472,7 +472,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
472
472
  key: 0,
473
473
  class: "card-settings-btn",
474
474
  onClick: P((e) => ie(t.id), ["stop"]),
475
- title: "????"
475
+ title: "编辑参数"
476
476
  }, [...u[14] ||= [s("svg", {
477
477
  viewBox: "0 0 24 24",
478
478
  width: "14",
@@ -480,7 +480,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
480
480
  fill: "currentColor"
481
481
  }, [s("path", { d: "M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z" })], -1)]], 8, ht)) : a("", !0)])]), s("div", gt, D(t.name), 1)], 64))], 10, lt))), 128))], 2)])
482
482
  ]),
483
- s("div", _t, [s("div", vt, [s("span", yt, "??? " + D(ne.value) + " ???", 1)]), s("button", {
483
+ s("div", _t, [s("div", vt, [s("span", yt, "已激活 " + D(ne.value) + " 个指标", 1)]), s("button", {
484
484
  class: "btn btn-confirm",
485
485
  onClick: V
486
486
  }, "??")])
@@ -509,7 +509,7 @@ var Me = { class: "indicator-selector" }, Ne = { class: "indicator-scroll-contai
509
509
  ])) : a("", !0)
510
510
  ]));
511
511
  }
512
- }), [["__scopeId", "data-v-09f65e18"]]), xt = { class: "kline-tooltip__title" }, St = { key: 0 }, Ct = { class: "kline-tooltip__grid" }, wt = { class: "row" }, Tt = { class: "row" }, Et = { class: "row" }, Dt = { class: "row" }, Ot = {
512
+ }), [["__scopeId", "data-v-4dc6bc90"]]), xt = { class: "kline-tooltip__title" }, St = { key: 0 }, Ct = { class: "kline-tooltip__grid" }, wt = { class: "row" }, Tt = { class: "row" }, Et = { class: "row" }, Dt = { class: "row" }, Ot = {
513
513
  key: 0,
514
514
  class: "row"
515
515
  }, kt = {
@@ -1072,7 +1072,7 @@ function Xn() {
1072
1072
  //#region src/components/LeftToolbar.vue?vue&type=script&setup=true&lang.ts
1073
1073
  var Zn = {
1074
1074
  class: "left-toolbar",
1075
- "aria-label": "?????"
1075
+ "aria-label": "图表工具栏"
1076
1076
  }, Qn = { class: "left-toolbar__group" }, $n = [
1077
1077
  "title",
1078
1078
  "aria-label",
@@ -1095,74 +1095,74 @@ var Zn = {
1095
1095
  let p = [
1096
1096
  {
1097
1097
  id: "cursor",
1098
- title: "??",
1098
+ title: "光标",
1099
1099
  icon: Ut
1100
1100
  },
1101
1101
  {
1102
1102
  id: "lines",
1103
- title: "??",
1103
+ title: "线条",
1104
1104
  icon: Kt,
1105
1105
  children: [
1106
1106
  {
1107
1107
  id: "trend-line",
1108
- title: "??",
1108
+ title: "线段",
1109
1109
  icon: Kt
1110
1110
  },
1111
1111
  {
1112
1112
  id: "ray",
1113
- title: "??",
1113
+ title: "射线",
1114
1114
  icon: Yt
1115
1115
  },
1116
1116
  {
1117
1117
  id: "h-line",
1118
- title: "???",
1118
+ title: "水平线",
1119
1119
  icon: tn
1120
1120
  },
1121
1121
  {
1122
1122
  id: "h-ray",
1123
- title: "????",
1123
+ title: "水平射线",
1124
1124
  icon: Qt
1125
1125
  },
1126
1126
  {
1127
1127
  id: "v-line",
1128
- title: "???",
1128
+ title: "垂直线",
1129
1129
  icon: an
1130
1130
  },
1131
1131
  {
1132
1132
  id: "crosshair-line",
1133
- title: "???",
1133
+ title: "十字线",
1134
1134
  icon: cn
1135
1135
  },
1136
1136
  {
1137
1137
  id: "info-line",
1138
- title: "???",
1138
+ title: "信息线",
1139
1139
  icon: dn
1140
1140
  }
1141
1141
  ]
1142
1142
  },
1143
1143
  {
1144
1144
  id: "channels",
1145
- title: "??",
1145
+ title: "通道",
1146
1146
  icon: kn,
1147
1147
  children: [
1148
1148
  {
1149
1149
  id: "parallel-channel",
1150
- title: "????",
1150
+ title: "平行通道",
1151
1151
  icon: kn
1152
1152
  },
1153
1153
  {
1154
1154
  id: "regression-channel",
1155
- title: "????",
1155
+ title: "回归趋势",
1156
1156
  icon: Mn
1157
1157
  },
1158
1158
  {
1159
1159
  id: "flat-line",
1160
- title: "????",
1160
+ title: "平滑顶底",
1161
1161
  icon: Fn
1162
1162
  },
1163
1163
  {
1164
1164
  id: "disjoint-channel",
1165
- title: "?????",
1165
+ title: "不相交通道",
1166
1166
  icon: Rn
1167
1167
  }
1168
1168
  ]
@@ -1255,7 +1255,7 @@ var Zn = {
1255
1255
  key: 0,
1256
1256
  class: g(["corner-indicator", { open: _.value === t.id }]),
1257
1257
  onClick: P((e) => z(t.id), ["stop"]),
1258
- "aria-label": "?????"
1258
+ "aria-label": "展开子菜单"
1259
1259
  }, null, 10, er)) : a("", !0)], 42, $n), l(n, { name: "dropdown" }, {
1260
1260
  default: M(() => [_.value === t.id && t.children && t.children.length ? (S(), o("div", {
1261
1261
  key: 0,
@@ -1280,8 +1280,8 @@ var Zn = {
1280
1280
  s("div", nr, [s("button", {
1281
1281
  type: "button",
1282
1282
  class: "left-toolbar__button",
1283
- title: "??",
1284
- "aria-label": "??",
1283
+ title: "放大",
1284
+ "aria-label": "放大",
1285
1285
  onClick: d[6] ||= (e) => r.$emit("zoomIn"),
1286
1286
  onPointerdown: d[7] ||= P(() => {}, ["stop"]),
1287
1287
  onPointermove: d[8] ||= P(() => {}, ["stop"]),
@@ -1292,8 +1292,8 @@ var Zn = {
1292
1292
  })], 32), s("button", {
1293
1293
  type: "button",
1294
1294
  class: "left-toolbar__button",
1295
- title: "??",
1296
- "aria-label": "??",
1295
+ title: "缩小",
1296
+ "aria-label": "缩小",
1297
1297
  onClick: d[10] ||= (e) => r.$emit("zoomOut"),
1298
1298
  onPointerdown: d[11] ||= P(() => {}, ["stop"]),
1299
1299
  onPointermove: d[12] ||= P(() => {}, ["stop"]),
@@ -1306,8 +1306,8 @@ var Zn = {
1306
1306
  s("div", rr, [s("button", {
1307
1307
  type: "button",
1308
1308
  class: "left-toolbar__button",
1309
- title: (u.isFullscreen, "????"),
1310
- "aria-label": (u.isFullscreen, "????"),
1309
+ title: u.isFullscreen ? "退出全屏" : "全屏显示",
1310
+ "aria-label": u.isFullscreen ? "退出全屏" : "全屏显示",
1311
1311
  onClick: d[14] ||= (e) => r.$emit("toggleFullscreen"),
1312
1312
  onPointerdown: d[15] ||= P(() => {}, ["stop"]),
1313
1313
  onPointermove: d[16] ||= P(() => {}, ["stop"]),
@@ -1325,8 +1325,8 @@ var Zn = {
1325
1325
  s("div", ar, [s("button", {
1326
1326
  type: "button",
1327
1327
  class: "left-toolbar__button",
1328
- title: "??",
1329
- "aria-label": "??",
1328
+ title: "设置",
1329
+ "aria-label": "设置",
1330
1330
  onClick: re,
1331
1331
  onPointerdown: d[18] ||= P(() => {}, ["stop"]),
1332
1332
  onPointermove: d[19] ||= P(() => {}, ["stop"]),
@@ -1345,7 +1345,7 @@ var Zn = {
1345
1345
  class: "settings-modal",
1346
1346
  onClick: d[21] ||= P(() => {}, ["stop"])
1347
1347
  }, [
1348
- s("div", { class: "settings-header" }, [d[26] ||= s("div", { class: "header-left" }, [s("span", { class: "settings-title" }, "????"), s("span", { class: "settings-subtitle" }, "?????")], -1), s("div", { class: "header-right" }, [s("button", {
1348
+ s("div", { class: "settings-header" }, [d[26] ||= s("div", { class: "header-left" }, [s("span", { class: "settings-title" }, "图表设置"), s("span", { class: "settings-subtitle" }, "个性化配置")], -1), s("div", { class: "header-right" }, [s("button", {
1349
1349
  class: "settings-close",
1350
1350
  onClick: B
1351
1351
  }, [...d[25] ||= [s("svg", {
@@ -1354,7 +1354,7 @@ var Zn = {
1354
1354
  stroke: "currentColor",
1355
1355
  "stroke-width": "2"
1356
1356
  }, [s("path", { d: "M18 6L6 18M6 6l12 12" })], -1)]])])]),
1357
- s("div", or, [E.value.length > 0 ? (S(), o(e, { key: 0 }, [d[27] ||= s("div", { class: "settings-section-divider" }, [s("span", { class: "settings-section-label" }, "????")], -1), (S(!0), o(e, null, w(E.value, (t) => (S(), o("div", {
1357
+ s("div", or, [E.value.length > 0 ? (S(), o(e, { key: 0 }, [d[27] ||= s("div", { class: "settings-section-divider" }, [s("span", { class: "settings-section-label" }, "主图设置")], -1), (S(!0), o(e, null, w(E.value, (t) => (S(), o("div", {
1358
1358
  key: t.key,
1359
1359
  class: "settings-item"
1360
1360
  }, [s("label", sr, [s("span", null, D(t.label), 1), t.type === "boolean" ? N((S(), o("input", {
@@ -1369,7 +1369,7 @@ var Zn = {
1369
1369
  }, [(S(!0), o(e, null, w(t.options, (e) => (S(), o("option", {
1370
1370
  key: e.value,
1371
1371
  value: e.value
1372
- }, D(e.label), 9, ur))), 128))], 8, lr)), [[A, L.value[t.key]]]) : a("", !0)])]))), 128))], 64)) : a("", !0), j.value.length > 0 ? (S(), o(e, { key: 1 }, [d[28] ||= s("div", { class: "settings-section-divider" }, [s("span", { class: "settings-section-label" }, "??? / ????")], -1), (S(!0), o(e, null, w(j.value, (t) => (S(), o("div", {
1372
+ }, D(e.label), 9, ur))), 128))], 8, lr)), [[A, L.value[t.key]]]) : a("", !0)])]))), 128))], 64)) : a("", !0), j.value.length > 0 ? (S(), o(e, { key: 1 }, [d[28] ||= s("div", { class: "settings-section-divider" }, [s("span", { class: "settings-section-label" }, "实验性 / 调试设置")], -1), (S(!0), o(e, null, w(j.value, (t) => (S(), o("div", {
1373
1373
  key: t.key,
1374
1374
  class: "settings-item experimental"
1375
1375
  }, [s("label", dr, [s("span", null, D(t.label), 1), t.type === "boolean" ? N((S(), o("input", {
@@ -1393,10 +1393,10 @@ var Zn = {
1393
1393
  fill: "none",
1394
1394
  stroke: "currentColor",
1395
1395
  "stroke-width": "2"
1396
- }, [s("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }), s("path", { d: "M3 3v5h5" })], -1), c(" ?? ", -1)]]), s("div", { class: "footer-right" }, [s("button", {
1396
+ }, [s("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }), s("path", { d: "M3 3v5h5" })], -1), c(" 重置 ", -1)]]), s("div", { class: "footer-right" }, [s("button", {
1397
1397
  class: "settings-btn cancel",
1398
1398
  onClick: B
1399
- }, "??"), s("button", {
1399
+ }, "取消"), s("button", {
1400
1400
  class: "settings-btn confirm",
1401
1401
  onClick: V
1402
1402
  }, [...d[30] ||= [s("svg", {
@@ -1404,14 +1404,14 @@ var Zn = {
1404
1404
  fill: "none",
1405
1405
  stroke: "currentColor",
1406
1406
  "stroke-width": "2.5"
1407
- }, [s("path", { d: "M20 6L9 17l-5-5" })], -1), c(" ?? ", -1)]])])])
1407
+ }, [s("path", { d: "M20 6L9 17l-5-5" })], -1), c(" 确定 ", -1)]])])])
1408
1408
  ])]),
1409
1409
  _: 1
1410
1410
  })])) : a("", !0)]),
1411
1411
  _: 1
1412
1412
  })], 8, ["to"]))], 64));
1413
1413
  }
1414
- }), [["__scopeId", "data-v-c0526cfb"]]), gr = ["data-theme"], _r = {
1414
+ }), [["__scopeId", "data-v-35cfe78e"]]), gr = ["data-theme"], _r = {
1415
1415
  class: "pane-separator-layer",
1416
1416
  "aria-hidden": "true"
1417
1417
  }, vr = 4, yr = /* @__PURE__ */ K(/* @__PURE__ */ u({
@@ -2091,9 +2091,9 @@ var Zn = {
2091
2091
  onReorderSubIndicators: gt
2092
2092
  }, null, 8, ["active-indicators", "indicator-params"])], 8, gr));
2093
2093
  }
2094
- }), [["__scopeId", "data-v-28c25ee4"]]), br = {
2094
+ }), [["__scopeId", "data-v-c50302da"]]), br = {
2095
2095
  name: "@363045841yyt/klinechart",
2096
- version: "0.7.3-alpha.1",
2096
+ version: "0.7.3-alpha.4",
2097
2097
  description: "Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.",
2098
2098
  license: "MIT",
2099
2099
  type: "module",
@@ -2125,6 +2125,7 @@ var Zn = {
2125
2125
  "test:watch": "vitest",
2126
2126
  size: "size-limit",
2127
2127
  "lint:publish": "publint --strict .",
2128
+ prepublishOnly: "npm run build",
2128
2129
  "lint:types": "attw --pack ."
2129
2130
  },
2130
2131
  "size-limit": [{
@@ -1,2 +1,2 @@
1
- .drawing-style-toolbar[data-v-87e91714]{-webkit-backdrop-filter:blur(8px);z-index:100;user-select:none;pointer-events:auto;background:#fafbfce0;border:1px solid #e5e7eb;border-radius:6px;align-items:center;gap:6px;height:32px;padding:4px 8px;display:flex;position:absolute;top:8px;left:50%;transform:translate(-50%);box-shadow:0 1px 3px #0000000f}.toolbar-item[data-v-87e91714]{justify-content:center;align-items:center;display:inline-flex}.color-item[data-v-87e91714]{width:24px;height:24px;position:relative}.color-swatch[data-v-87e91714]{cursor:pointer;border:1px solid #d1d5db;border-radius:4px;width:100%;height:100%;display:block}.color-input[data-v-87e91714]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.toolbar-select[data-v-87e91714]{color:#374151;cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:4px;outline:none;height:24px;padding:0 4px;font-size:12px}.toolbar-select[data-v-87e91714]:hover{border-color:#9ca3af}.toolbar-btn[data-v-87e91714]{color:#6b7280;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;width:24px;height:24px;padding:0;transition:border-color .15s,background .15s,color .15s;display:inline-flex}.toolbar-btn[data-v-87e91714]:hover{color:#374151;background:#f3f4f6;border-color:#d1d5db}.delete-btn[data-v-87e91714]:hover{color:#dc2626;background:#fef2f2;border-color:#fca5a5}.delete-icon[data-v-87e91714]{width:14px;height:14px}.params-overlay[data-v-2ffc8f4d]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.indicator-params[data-v-2ffc8f4d]{background:#fff;border:1px solid #e0e0e0;border-radius:12px;width:90vw;min-width:340px;max-width:420px;overflow:hidden;box-shadow:0 8px 40px #00000026}.params-header[data-v-2ffc8f4d]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-2ffc8f4d]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-2ffc8f4d]{align-items:center;gap:8px;display:flex}.params-title[data-v-2ffc8f4d]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.params-subtitle[data-v-2ffc8f4d]{color:#999;font-size:11px}.toggle-desc-btn[data-v-2ffc8f4d]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:all .2s;display:flex}.toggle-desc-btn[data-v-2ffc8f4d]:hover{color:#555;background:#f0f0f0;border-color:#ccc}.toggle-desc-btn.active[data-v-2ffc8f4d]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.toggle-desc-btn svg[data-v-2ffc8f4d]{width:14px;height:14px}.params-close[data-v-2ffc8f4d]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.params-close[data-v-2ffc8f4d]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.params-close svg[data-v-2ffc8f4d]{width:14px;height:14px}.indicator-description[data-v-2ffc8f4d]{background:#f0f7ff;border-bottom:1px solid #d6e8f5;padding:12px 20px}.indicator-description p[data-v-2ffc8f4d]{color:#2c5282;margin:0;font-size:12px;line-height:1.6}.params-body[data-v-2ffc8f4d]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.param-item[data-v-2ffc8f4d]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:10px 14px;transition:border-color .2s}.param-item[data-v-2ffc8f4d]:has(.param-input:focus){border-color:#bbb}.param-item.has-desc[data-v-2ffc8f4d]{padding:10px 14px 8px}.param-header[data-v-2ffc8f4d]{justify-content:space-between;align-items:center;gap:16px;display:flex}.param-label[data-v-2ffc8f4d]{flex-direction:column;gap:3px;display:flex}.param-label-text[data-v-2ffc8f4d]{color:#333;font-size:13px;font-weight:500}.param-range[data-v-2ffc8f4d]{color:#999;font-size:11px}.param-description[data-v-2ffc8f4d]{color:#666;border-top:1px dashed #e0e0e0;margin-top:8px;padding-top:8px;font-size:11px;line-height:1.5}.input-wrapper[data-v-2ffc8f4d]{background:#fff;border:1px solid #d0d0d0;border-radius:7px;align-items:stretch;height:32px;transition:border-color .2s;display:flex;overflow:hidden}.input-wrapper[data-v-2ffc8f4d]:focus-within{border-color:#999}.stepper-btn[data-v-2ffc8f4d]{cursor:pointer;color:#666;background:#f0f0f0;border:none;flex-shrink:0;justify-content:center;align-items:center;width:28px;font-size:15px;font-weight:400;line-height:1;transition:background .15s,color .15s;display:flex}.stepper-btn[data-v-2ffc8f4d]:hover:not(:disabled){color:#333;background:#e0e0e0}.stepper-btn[data-v-2ffc8f4d]:disabled{color:#ccc;cursor:not-allowed}.param-input[data-v-2ffc8f4d]{text-align:center;color:#1a1a1a;appearance:textfield;background:0 0;border:none;border-left:1px solid #e8e8e8;border-right:1px solid #e8e8e8;width:60px;font-size:13px;font-weight:600}.param-input[data-v-2ffc8f4d]::-webkit-inner-spin-button{-webkit-appearance:none}.param-input[data-v-2ffc8f4d]::-webkit-outer-spin-button{-webkit-appearance:none}.param-input[data-v-2ffc8f4d]:focus{outline:none}.params-footer[data-v-2ffc8f4d]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-2ffc8f4d]{gap:8px;display:flex}.params-btn[data-v-2ffc8f4d]{cursor:pointer;border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:6px 14px;font-size:13px;font-weight:500;line-height:1.4;transition:all .15s;display:flex}.params-btn svg[data-v-2ffc8f4d]{flex-shrink:0;width:12px;height:12px}.params-btn.reset[data-v-2ffc8f4d]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.reset[data-v-2ffc8f4d]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.params-btn.cancel[data-v-2ffc8f4d]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.cancel[data-v-2ffc8f4d]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.params-btn.confirm[data-v-2ffc8f4d]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.params-btn.confirm[data-v-2ffc8f4d]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.params-btn.confirm[data-v-2ffc8f4d]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-2ffc8f4d],.overlay-leave-active[data-v-2ffc8f4d]{transition:opacity .2s}.overlay-enter-from[data-v-2ffc8f4d],.overlay-leave-to[data-v-2ffc8f4d]{opacity:0}.modal-enter-active[data-v-2ffc8f4d]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-2ffc8f4d]{transition:all .16s ease-in}.modal-enter-from[data-v-2ffc8f4d]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-2ffc8f4d]{opacity:0;transform:scale(.94)translateY(8px)}.slide-enter-active[data-v-2ffc8f4d],.slide-leave-active[data-v-2ffc8f4d]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-2ffc8f4d],.slide-leave-to[data-v-2ffc8f4d]{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0}.indicator-selector[data-v-09f65e18]{width:80%;margin:20px;position:relative}.indicator-scroll-container[data-v-09f65e18]{scrollbar-width:none;-webkit-overflow-scrolling:touch;text-align:center;width:100%;overflow:auto hidden}.indicator-scroll-container[data-v-09f65e18]::-webkit-scrollbar{display:none}.indicator-list[data-v-09f65e18]{gap:8px;margin:0 auto;padding:2px;display:inline-flex}.indicator-divider[data-v-09f65e18]{background:#d9d9d9;align-self:center;width:1px;height:20px}.indicator-item[data-v-09f65e18]{align-items:center;gap:4px;display:flex}.indicator-item.draggable[data-v-09f65e18],.indicator-item.draggable .indicator-btn[data-v-09f65e18],.indicator-item.draggable[data-v-09f65e18]:hover,.indicator-item.draggable:hover .indicator-btn[data-v-09f65e18]{cursor:move}.indicator-item.is-dragging[data-v-09f65e18]{opacity:.6}.indicator-item.drag-over .indicator-btn[data-v-09f65e18]{border-color:#1a1a1a;box-shadow:0 0 0 2px #1a1a1a1f}.indicator-btn-wrapper[data-v-09f65e18]{position:relative}.indicator-btn[data-v-09f65e18]{color:#666;cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #e0e0e0;border-radius:16px;flex-shrink:0;justify-content:center;align-items:center;gap:4px;padding:6px 16px;font-size:13px;font-weight:500;transition:all .3s;display:flex;position:relative;overflow:hidden}.indicator-btn[data-v-09f65e18]:hover:not(.hovering){color:#333;background:#f8f8f8;border-color:#ccc}.indicator-btn.active[data-v-09f65e18]{color:#1a1a1a;background:#f8f8f8;border-color:#1a1a1a}.indicator-btn.active[data-v-09f65e18]:hover:not(.hovering){background:#f0f0f0;border-color:#333}.btn-content[data-v-09f65e18]{z-index:1;position:relative}.param-hint[data-v-09f65e18]{opacity:.85;font-size:11px}.hover-overlay[data-v-09f65e18]{backdrop-filter:blur(4px);z-index:2;background:#ffffffd9;border-radius:16px;justify-content:center;align-items:center;gap:4px;display:flex;position:absolute;inset:0}.action-btn[data-v-09f65e18]{color:#666;cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;padding:0;transition:all .2s;display:flex}.action-btn[data-v-09f65e18]:hover{color:#333;background:#0000000f}.settings-btn[data-v-09f65e18]:hover{color:#1a1a1a}.remove-btn[data-v-09f65e18]:hover{color:#ff4d4f}.divider[data-v-09f65e18]{background:#e0e0e0;width:1px;height:14px}.add-btn[data-v-09f65e18]{color:#999;cursor:pointer;background:0 0;border:1px dashed #d9d9d9;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;padding:0;transition:all .3s;display:flex}.add-btn[data-v-09f65e18]:hover{color:#1a1a1a;background:#1a1a1a0a;border-color:#1a1a1a}.selector-overlay[data-v-09f65e18]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.selector-modal[data-v-09f65e18]{background:#fff;border:1px solid #e0e0e0;border-radius:12px;flex-direction:column;width:90vw;max-width:860px;max-height:85vh;display:flex;overflow:hidden;box-shadow:0 8px 40px #00000026}.modal-header[data-v-09f65e18]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-title[data-v-09f65e18]{flex-direction:column;gap:2px;display:flex}.title-text[data-v-09f65e18]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.title-sub[data-v-09f65e18]{color:#999;font-size:11px}.modal-close[data-v-09f65e18]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:all .15s;display:flex}.modal-close[data-v-09f65e18]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.modal-close svg[data-v-09f65e18]{width:14px;height:14px}.header-actions[data-v-09f65e18]{align-items:center;gap:8px;display:flex}.view-toggle-btn[data-v-09f65e18]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:all .15s;display:flex}.view-toggle-btn[data-v-09f65e18]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.view-toggle-btn.active[data-v-09f65e18]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.modal-body[data-v-09f65e18]{flex-direction:column;flex:1;gap:20px;padding:20px;display:flex;overflow-y:auto}.indicator-section[data-v-09f65e18]{flex-direction:column;gap:12px;display:flex}.section-header[data-v-09f65e18]{align-items:center;gap:8px;display:flex}.section-title[data-v-09f65e18]{color:#1a1a1a;font-size:13px;font-weight:600}.section-count[data-v-09f65e18]{color:#999;background:#f0f0f0;border-radius:10px;padding:2px 8px;font-size:11px}.indicator-grid[data-v-09f65e18]{grid-template-columns:repeat(auto-fill,minmax(195px,1fr));gap:10px;display:grid}.indicator-grid.compact[data-v-09f65e18]{flex-wrap:wrap;gap:8px;display:flex}.indicator-grid.compact .indicator-card[data-v-09f65e18]{white-space:nowrap;border-radius:16px;justify-content:center;align-items:center;min-height:32px;padding:6px 14px;display:inline-flex;position:relative}.indicator-grid.compact .indicator-card .card-tooltip[data-v-09f65e18]{color:#fff;white-space:nowrap;pointer-events:none;opacity:0;z-index:10;background:#333;border-radius:6px;padding:4px 10px;font-size:12px;transition:opacity .15s;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.indicator-grid.compact .indicator-card:hover .card-tooltip[data-v-09f65e18]{opacity:1}.indicator-grid.compact .indicator-card .card-label[data-v-09f65e18]{font-size:12px;font-weight:500}.indicator-card[data-v-09f65e18]{cursor:pointer;text-align:left;background:#fff;border:1px solid #e8e8e8;border-radius:8px;flex-direction:column;gap:4px;padding:12px 14px;transition:all .15s;display:flex}.indicator-card[data-v-09f65e18]:hover:not(.disabled){background:#fafafa;border-color:#1a1a1a;transform:translateY(-1px);box-shadow:0 2px 8px #0000000f}.indicator-card.active[data-v-09f65e18]{background:#f8f8f8;border-color:#1a1a1a}.card-header[data-v-09f65e18]{justify-content:space-between;align-items:center;gap:8px;display:flex}.card-label[data-v-09f65e18]{color:#1a1a1a;font-size:13px;font-weight:600}.card-header-actions[data-v-09f65e18]{align-items:center;gap:4px;display:flex}.card-settings-btn[data-v-09f65e18]{color:#bbb;cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:20px;height:20px;padding:0;transition:all .15s;display:flex}.card-settings-btn[data-v-09f65e18]:hover{color:#555;background:#f0f0f0}.card-name[data-v-09f65e18]{color:#666;font-size:11px;line-height:1.4}.card-params[data-v-09f65e18]{color:#999;margin-top:2px;font-size:10px}.section-divider[data-v-09f65e18]{background:linear-gradient(90deg,#0000,#e0e0e0,#0000);height:1px;margin:4px 0}.modal-footer[data-v-09f65e18]{background:#f8f8f8;border-top:1px solid #e8e8e8;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-info[data-v-09f65e18]{color:#666;font-size:12px}.info-text[data-v-09f65e18]{color:#999}.btn[data-v-09f65e18]{cursor:pointer;border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:6px 16px;font-size:13px;font-weight:500;line-height:1.4;transition:all .15s;display:flex}.btn-confirm[data-v-09f65e18]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.btn-confirm[data-v-09f65e18]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.fade-enter-active[data-v-09f65e18],.fade-leave-active[data-v-09f65e18]{transition:opacity .2s}.fade-enter-from[data-v-09f65e18],.fade-leave-to[data-v-09f65e18]{opacity:0}.overlay-enter-active[data-v-09f65e18],.overlay-leave-active[data-v-09f65e18]{transition:opacity .2s}.overlay-enter-from[data-v-09f65e18],.overlay-leave-to[data-v-09f65e18]{opacity:0}.modal-enter-active[data-v-09f65e18]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-09f65e18]{transition:all .16s ease-in}.modal-enter-from[data-v-09f65e18]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-09f65e18]{opacity:0;transform:scale(.94)translateY(8px)}@media (width<=640px){.selector-modal[data-v-09f65e18]{width:95vw;max-height:90vh}.indicator-grid[data-v-09f65e18]{grid-template-columns:1fr}.modal-body[data-v-09f65e18]{padding:16px}}.kline-tooltip[data-v-90b1aa6d]{z-index:10;color:#000000c7;pointer-events:none;backdrop-filter:blur(6px);background:#ffffffeb;border:1px solid #0000001f;border-radius:8px;min-width:200px;max-width:260px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.kline-tooltip__title[data-v-90b1aa6d]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-90b1aa6d]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-90b1aa6d]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-90b1aa6d]:first-child{color:#0000008f}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.kline-tooltip.use-anchor[data-v-90b1aa6d]{position-anchor:--kline-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.kline-tooltip.use-anchor.anchor-right-bottom[data-v-90b1aa6d]{transform:translate(14px,14px)}.kline-tooltip.use-anchor.anchor-left-bottom[data-v-90b1aa6d]{transform:translate(calc(-100% - 14px),14px)}}.marker-tooltip[data-v-057b55c9]{z-index:10;color:#000000c7;pointer-events:none;backdrop-filter:blur(6px);background:#ffffffeb;border:1px solid #0000001f;border-radius:8px;min-width:180px;max-width:260px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.marker-tooltip__title[data-v-057b55c9]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.marker-tooltip__content[data-v-057b55c9]{grid-template-columns:1fr;gap:2px;display:grid}.marker-tooltip__content .row[data-v-057b55c9]{justify-content:space-between;gap:10px;display:flex}.marker-tooltip__content .row span[data-v-057b55c9]:first-child{color:#0000008f}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.marker-tooltip.use-anchor[data-v-057b55c9]{position-anchor:--marker-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.marker-tooltip.use-anchor.anchor-right-bottom[data-v-057b55c9]{transform:translate(12px,12px)}.marker-tooltip.use-anchor.anchor-left-bottom[data-v-057b55c9]{transform:translate(calc(-100% - 12px),12px)}}.left-toolbar[data-v-c0526cfb]{box-sizing:border-box;user-select:none;background:#fafbfc;border:1px solid #e5e7eb;border-radius:6px;flex-direction:column;flex:0 0 40px;align-items:center;gap:6px;padding:8px 5px;display:flex;box-shadow:0 1px 3px #0000000f}.left-toolbar__group[data-v-c0526cfb]{flex-direction:column;gap:4px;display:flex}.left-toolbar__divider[data-v-c0526cfb]{background:#e5e7eb;width:18px;height:1px}.left-toolbar__button[data-v-c0526cfb]{color:#6b7280;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:border-color .15s,background .15s,color .15s;display:inline-flex;position:relative}.left-toolbar__button[data-v-c0526cfb]:hover{color:#374151;background:#f3f4f6;border-color:#d1d5db}.left-toolbar__button.active[data-v-c0526cfb]{color:#1f2937;background:#e5e7eb;border-color:#9ca3af}.left-toolbar__button[data-v-c0526cfb]:focus-visible{border-color:#6b7280;outline:none}.tool-icon[data-v-c0526cfb]{width:16px;height:16px}.corner-indicator[data-v-c0526cfb]{cursor:pointer;width:8px;height:8px;position:absolute;bottom:0;right:0;overflow:hidden}.corner-indicator[data-v-c0526cfb]:after{content:"";opacity:.45;border-bottom:5px solid;border-left:5px solid #0000;width:0;height:0;transition:opacity .15s;position:absolute;bottom:0;right:0}.left-toolbar__button:hover .corner-indicator[data-v-c0526cfb]:after,.left-toolbar__button.active .corner-indicator[data-v-c0526cfb]:after{opacity:.7}.corner-indicator.open[data-v-c0526cfb]:after{opacity:.8}.tool-dropdown[data-v-c0526cfb]{-webkit-backdrop-filter:blur(8px);box-sizing:border-box;z-index:100;background:#fafbfcd1;border:1px solid #e5e7eb;border-radius:6px;flex-direction:row;align-items:center;gap:4px;height:40px;padding:0 5px;display:flex;position:absolute;top:50%;left:calc(100% + 13px);transform:translateY(-50%);box-shadow:0 1px 3px #0000000f}.tool-item[data-v-c0526cfb]{position:relative}.dropdown-enter-active[data-v-c0526cfb],.dropdown-leave-active[data-v-c0526cfb]{transition:opacity .15s,transform .15s}.dropdown-enter-from[data-v-c0526cfb],.dropdown-leave-to[data-v-c0526cfb]{opacity:0;transform:translateY(-50%)translate(-6px)}@media (width<=768px),(height<=640px){.left-toolbar[data-v-c0526cfb]{border-radius:5px;flex-basis:36px;gap:5px;padding:6px 4px}.left-toolbar__group[data-v-c0526cfb]{gap:3px}.left-toolbar__button[data-v-c0526cfb]{border-radius:3px;width:26px;height:26px}.left-toolbar__divider[data-v-c0526cfb]{width:16px}.corner-indicator[data-v-c0526cfb]{width:7px;height:7px}.corner-indicator[data-v-c0526cfb]:after{border-bottom-width:4px;border-left-width:4px}.tool-dropdown[data-v-c0526cfb]{height:36px}}.settings-overlay[data-v-c0526cfb]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.settings-modal[data-v-c0526cfb]{background:#fff;border:1px solid #e0e0e0;border-radius:12px;width:90vw;min-width:340px;max-width:420px;overflow:hidden;box-shadow:0 8px 40px #00000026}.settings-header[data-v-c0526cfb]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-c0526cfb]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-c0526cfb]{align-items:center;gap:8px;display:flex}.settings-title[data-v-c0526cfb]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.settings-subtitle[data-v-c0526cfb]{color:#999;font-size:11px}.settings-close[data-v-c0526cfb]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.settings-close[data-v-c0526cfb]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.settings-close svg[data-v-c0526cfb]{width:14px;height:14px}.settings-body[data-v-c0526cfb]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.settings-item[data-v-c0526cfb]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:8px 12px}.settings-label[data-v-c0526cfb]{color:#333;cursor:pointer;justify-content:space-between;align-items:center;font-size:13px;display:flex}.settings-checkbox[data-v-c0526cfb]{cursor:pointer;accent-color:#1a1a1a;width:16px;height:16px}.settings-select[data-v-c0526cfb]{color:#333;cursor:pointer;background:#fff;border:1px solid #d0d0d0;border-radius:6px;outline:none;min-width:140px;padding:4px 8px;font-size:12px}.settings-select[data-v-c0526cfb]:hover{border-color:#9ca3af}.settings-select[data-v-c0526cfb]:focus{border-color:#6b7280;box-shadow:0 0 0 2px #6b728026}.settings-section-divider[data-v-c0526cfb]{align-items:center;gap:8px;margin-top:4px;display:flex}.settings-section-divider[data-v-c0526cfb]:before,.settings-section-divider[data-v-c0526cfb]:after{content:"";border-top:1px solid #e0e0e0;flex:1}.settings-section-label[data-v-c0526cfb]{color:#999;white-space:nowrap;font-size:11px}.settings-item.experimental[data-v-c0526cfb]{background:#fdf8f3;border-color:#f0e0d0}.settings-footer[data-v-c0526cfb]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-c0526cfb]{gap:8px;display:flex}.settings-btn[data-v-c0526cfb]{cursor:pointer;border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:6px 14px;font-size:13px;font-weight:500;line-height:1.4;transition:all .15s;display:flex}.settings-btn svg[data-v-c0526cfb]{flex-shrink:0;width:12px;height:12px}.settings-btn.reset[data-v-c0526cfb]{color:#666;background:0 0;border-color:#d0d0d0}.settings-btn.reset[data-v-c0526cfb]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.settings-btn.cancel[data-v-c0526cfb]{color:#666;background:0 0;border-color:#d0d0d0}.settings-btn.cancel[data-v-c0526cfb]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.settings-btn.confirm[data-v-c0526cfb]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.settings-btn.confirm[data-v-c0526cfb]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.settings-btn.confirm[data-v-c0526cfb]:active{box-shadow:none;transform:translateY(0)}.chart-wrapper[data-v-28c25ee4]{--kmap-height:var(--kmap-chart-height,100%);--kmap-width:var(--kmap-chart-width,100%);--chart-bg:#fff;--chart-bg-secondary:#f8f9fa;--chart-border:#e5e7eb;--chart-border-active:#3b82f6;--chart-text:#374151;--chart-text-secondary:#6b7280;width:var(--kmap-width);height:var(--kmap-height);flex-direction:column;justify-content:center;align-items:center;min-height:300px;display:flex}.chart-wrapper[data-theme=dark][data-v-28c25ee4]{--chart-bg:#1a1a2e;--chart-bg-secondary:#16162a;--chart-border:#2d2d44;--chart-border-active:#60a5fa;--chart-text:#e5e7eb;--chart-text-secondary:#9ca3af}.chart-stage[data-v-28c25ee4]{align-items:stretch;gap:8px;width:95%;height:85%;min-height:255px;display:flex}.chart-main[data-v-28c25ee4]{flex:auto;align-items:stretch;gap:0;min-width:0;height:100%;display:flex;position:relative}.pane-separator-layer[data-v-28c25ee4]{pointer-events:none;z-index:20;position:absolute;inset:0}.pane-separator-line[data-v-28c25ee4]{border-top:1px solid var(--chart-border);opacity:1;box-sizing:border-box;height:0;transition:border-top-color .12s,border-top-width .12s,margin-top .12s,opacity .12s;position:absolute;left:0;right:0}.pane-separator-line.is-active[data-v-28c25ee4]{border-top-color:var(--chart-border-active);border-top-width:2px;margin-top:-1px}.chart-stage.is-resizing-pane[data-v-28c25ee4],.chart-stage.is-hovering-pane-separator[data-v-28c25ee4]{cursor:ns-resize}.chart-stage.is-hovering-kline[data-v-28c25ee4]{cursor:pointer}.chart-stage.is-hovering-right-axis[data-v-28c25ee4]{cursor:ns-resize}.chart-stage.is-dragging[data-v-28c25ee4]{cursor:grabbing}.chart-container[data-v-28c25ee4]{height:100%;min-height:inherit;scrollbar-width:none;-ms-overflow-style:none;border:1px solid var(--chart-border);box-sizing:border-box;background:var(--chart-bg);-webkit-touch-callout:none;user-select:none;touch-action:none;border-right:0;border-radius:6px 0 0 6px;flex:auto;position:relative;overflow:auto hidden}.chart-container[data-v-28c25ee4]::-webkit-scrollbar{display:none}.right-axis-host[data-v-28c25ee4]{height:100%;min-height:inherit;box-sizing:border-box;background:var(--chart-bg);border:1px solid var(--chart-border);-webkit-touch-callout:none;user-select:none;touch-action:none;border-top-right-radius:6px;border-bottom-right-radius:6px;flex:none;position:relative;overflow:visible}.scroll-content[data-v-28c25ee4]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-28c25ee4]{pointer-events:none;position:sticky;top:0;left:0}.tooltip-layer[data-v-28c25ee4]{pointer-events:none;z-index:30;position:absolute;inset:0}.tooltip-anchor[data-v-28c25ee4]{pointer-events:none;width:1px;height:1px;position:absolute}.tooltip-anchor.kline-tooltip-anchor.use-anchor[data-v-28c25ee4]{anchor-name:--kline-tooltip-anchor}.tooltip-anchor.marker-tooltip-anchor.use-anchor[data-v-28c25ee4]{anchor-name:--marker-tooltip-anchor}@media (width<=768px),(height<=640px){.chart-stage[data-v-28c25ee4]{gap:6px}}.plot-canvas{display:block;position:absolute;top:0;left:0}.right-axis{display:block;position:absolute;left:0}.x-axis-canvas{z-index:10;display:block;position:absolute;bottom:0;left:0}.right-axis{z-index:15}
1
+ .drawing-style-toolbar[data-v-87e91714]{-webkit-backdrop-filter:blur(8px);z-index:100;user-select:none;pointer-events:auto;background:#fafbfce0;border:1px solid #e5e7eb;border-radius:6px;align-items:center;gap:6px;height:32px;padding:4px 8px;display:flex;position:absolute;top:8px;left:50%;transform:translate(-50%);box-shadow:0 1px 3px #0000000f}.toolbar-item[data-v-87e91714]{justify-content:center;align-items:center;display:inline-flex}.color-item[data-v-87e91714]{width:24px;height:24px;position:relative}.color-swatch[data-v-87e91714]{cursor:pointer;border:1px solid #d1d5db;border-radius:4px;width:100%;height:100%;display:block}.color-input[data-v-87e91714]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.toolbar-select[data-v-87e91714]{color:#374151;cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:4px;outline:none;height:24px;padding:0 4px;font-size:12px}.toolbar-select[data-v-87e91714]:hover{border-color:#9ca3af}.toolbar-btn[data-v-87e91714]{color:#6b7280;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;width:24px;height:24px;padding:0;transition:border-color .15s,background .15s,color .15s;display:inline-flex}.toolbar-btn[data-v-87e91714]:hover{color:#374151;background:#f3f4f6;border-color:#d1d5db}.delete-btn[data-v-87e91714]:hover{color:#dc2626;background:#fef2f2;border-color:#fca5a5}.delete-icon[data-v-87e91714]{width:14px;height:14px}.params-overlay[data-v-2ffc8f4d]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.indicator-params[data-v-2ffc8f4d]{background:#fff;border:1px solid #e0e0e0;border-radius:12px;width:90vw;min-width:340px;max-width:420px;overflow:hidden;box-shadow:0 8px 40px #00000026}.params-header[data-v-2ffc8f4d]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-2ffc8f4d]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-2ffc8f4d]{align-items:center;gap:8px;display:flex}.params-title[data-v-2ffc8f4d]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.params-subtitle[data-v-2ffc8f4d]{color:#999;font-size:11px}.toggle-desc-btn[data-v-2ffc8f4d]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:all .2s;display:flex}.toggle-desc-btn[data-v-2ffc8f4d]:hover{color:#555;background:#f0f0f0;border-color:#ccc}.toggle-desc-btn.active[data-v-2ffc8f4d]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.toggle-desc-btn svg[data-v-2ffc8f4d]{width:14px;height:14px}.params-close[data-v-2ffc8f4d]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.params-close[data-v-2ffc8f4d]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.params-close svg[data-v-2ffc8f4d]{width:14px;height:14px}.indicator-description[data-v-2ffc8f4d]{background:#f0f7ff;border-bottom:1px solid #d6e8f5;padding:12px 20px}.indicator-description p[data-v-2ffc8f4d]{color:#2c5282;margin:0;font-size:12px;line-height:1.6}.params-body[data-v-2ffc8f4d]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.param-item[data-v-2ffc8f4d]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:10px 14px;transition:border-color .2s}.param-item[data-v-2ffc8f4d]:has(.param-input:focus){border-color:#bbb}.param-item.has-desc[data-v-2ffc8f4d]{padding:10px 14px 8px}.param-header[data-v-2ffc8f4d]{justify-content:space-between;align-items:center;gap:16px;display:flex}.param-label[data-v-2ffc8f4d]{flex-direction:column;gap:3px;display:flex}.param-label-text[data-v-2ffc8f4d]{color:#333;font-size:13px;font-weight:500}.param-range[data-v-2ffc8f4d]{color:#999;font-size:11px}.param-description[data-v-2ffc8f4d]{color:#666;border-top:1px dashed #e0e0e0;margin-top:8px;padding-top:8px;font-size:11px;line-height:1.5}.input-wrapper[data-v-2ffc8f4d]{background:#fff;border:1px solid #d0d0d0;border-radius:7px;align-items:stretch;height:32px;transition:border-color .2s;display:flex;overflow:hidden}.input-wrapper[data-v-2ffc8f4d]:focus-within{border-color:#999}.stepper-btn[data-v-2ffc8f4d]{cursor:pointer;color:#666;background:#f0f0f0;border:none;flex-shrink:0;justify-content:center;align-items:center;width:28px;font-size:15px;font-weight:400;line-height:1;transition:background .15s,color .15s;display:flex}.stepper-btn[data-v-2ffc8f4d]:hover:not(:disabled){color:#333;background:#e0e0e0}.stepper-btn[data-v-2ffc8f4d]:disabled{color:#ccc;cursor:not-allowed}.param-input[data-v-2ffc8f4d]{text-align:center;color:#1a1a1a;appearance:textfield;background:0 0;border:none;border-left:1px solid #e8e8e8;border-right:1px solid #e8e8e8;width:60px;font-size:13px;font-weight:600}.param-input[data-v-2ffc8f4d]::-webkit-inner-spin-button{-webkit-appearance:none}.param-input[data-v-2ffc8f4d]::-webkit-outer-spin-button{-webkit-appearance:none}.param-input[data-v-2ffc8f4d]:focus{outline:none}.params-footer[data-v-2ffc8f4d]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-2ffc8f4d]{gap:8px;display:flex}.params-btn[data-v-2ffc8f4d]{cursor:pointer;border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:6px 14px;font-size:13px;font-weight:500;line-height:1.4;transition:all .15s;display:flex}.params-btn svg[data-v-2ffc8f4d]{flex-shrink:0;width:12px;height:12px}.params-btn.reset[data-v-2ffc8f4d]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.reset[data-v-2ffc8f4d]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.params-btn.cancel[data-v-2ffc8f4d]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.cancel[data-v-2ffc8f4d]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.params-btn.confirm[data-v-2ffc8f4d]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.params-btn.confirm[data-v-2ffc8f4d]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.params-btn.confirm[data-v-2ffc8f4d]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-2ffc8f4d],.overlay-leave-active[data-v-2ffc8f4d]{transition:opacity .2s}.overlay-enter-from[data-v-2ffc8f4d],.overlay-leave-to[data-v-2ffc8f4d]{opacity:0}.modal-enter-active[data-v-2ffc8f4d]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-2ffc8f4d]{transition:all .16s ease-in}.modal-enter-from[data-v-2ffc8f4d]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-2ffc8f4d]{opacity:0;transform:scale(.94)translateY(8px)}.slide-enter-active[data-v-2ffc8f4d],.slide-leave-active[data-v-2ffc8f4d]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-2ffc8f4d],.slide-leave-to[data-v-2ffc8f4d]{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0}.indicator-selector[data-v-4dc6bc90]{width:80%;margin:20px;position:relative}.indicator-scroll-container[data-v-4dc6bc90]{scrollbar-width:none;-webkit-overflow-scrolling:touch;text-align:center;width:100%;overflow:auto hidden}.indicator-scroll-container[data-v-4dc6bc90]::-webkit-scrollbar{display:none}.indicator-list[data-v-4dc6bc90]{gap:8px;margin:0 auto;padding:2px;display:inline-flex}.indicator-divider[data-v-4dc6bc90]{background:#d9d9d9;align-self:center;width:1px;height:20px}.indicator-item[data-v-4dc6bc90]{align-items:center;gap:4px;display:flex}.indicator-item.draggable[data-v-4dc6bc90],.indicator-item.draggable .indicator-btn[data-v-4dc6bc90],.indicator-item.draggable[data-v-4dc6bc90]:hover,.indicator-item.draggable:hover .indicator-btn[data-v-4dc6bc90]{cursor:move}.indicator-item.is-dragging[data-v-4dc6bc90]{opacity:.6}.indicator-item.drag-over .indicator-btn[data-v-4dc6bc90]{border-color:#1a1a1a;box-shadow:0 0 0 2px #1a1a1a1f}.indicator-btn-wrapper[data-v-4dc6bc90]{position:relative}.indicator-btn[data-v-4dc6bc90]{color:#666;cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #e0e0e0;border-radius:16px;flex-shrink:0;justify-content:center;align-items:center;gap:4px;padding:6px 16px;font-size:13px;font-weight:500;transition:all .3s;display:flex;position:relative;overflow:hidden}.indicator-btn[data-v-4dc6bc90]:hover:not(.hovering){color:#333;background:#f8f8f8;border-color:#ccc}.indicator-btn.active[data-v-4dc6bc90]{color:#1a1a1a;background:#f8f8f8;border-color:#1a1a1a}.indicator-btn.active[data-v-4dc6bc90]:hover:not(.hovering){background:#f0f0f0;border-color:#333}.btn-content[data-v-4dc6bc90]{z-index:1;position:relative}.param-hint[data-v-4dc6bc90]{opacity:.85;font-size:11px}.hover-overlay[data-v-4dc6bc90]{backdrop-filter:blur(4px);z-index:2;background:#ffffffd9;border-radius:16px;justify-content:center;align-items:center;gap:4px;display:flex;position:absolute;inset:0}.action-btn[data-v-4dc6bc90]{color:#666;cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;padding:0;transition:all .2s;display:flex}.action-btn[data-v-4dc6bc90]:hover{color:#333;background:#0000000f}.settings-btn[data-v-4dc6bc90]:hover{color:#1a1a1a}.remove-btn[data-v-4dc6bc90]:hover{color:#ff4d4f}.divider[data-v-4dc6bc90]{background:#e0e0e0;width:1px;height:14px}.add-btn[data-v-4dc6bc90]{color:#999;cursor:pointer;background:0 0;border:1px dashed #d9d9d9;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;padding:0;transition:all .3s;display:flex}.add-btn[data-v-4dc6bc90]:hover{color:#1a1a1a;background:#1a1a1a0a;border-color:#1a1a1a}.selector-overlay[data-v-4dc6bc90]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.selector-modal[data-v-4dc6bc90]{background:#fff;border:1px solid #e0e0e0;border-radius:12px;flex-direction:column;width:90vw;max-width:860px;max-height:85vh;display:flex;overflow:hidden;box-shadow:0 8px 40px #00000026}.modal-header[data-v-4dc6bc90]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-title[data-v-4dc6bc90]{flex-direction:column;gap:2px;display:flex}.title-text[data-v-4dc6bc90]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.title-sub[data-v-4dc6bc90]{color:#999;font-size:11px}.modal-close[data-v-4dc6bc90]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:all .15s;display:flex}.modal-close[data-v-4dc6bc90]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.modal-close svg[data-v-4dc6bc90]{width:14px;height:14px}.header-actions[data-v-4dc6bc90]{align-items:center;gap:8px;display:flex}.view-toggle-btn[data-v-4dc6bc90]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:all .15s;display:flex}.view-toggle-btn[data-v-4dc6bc90]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.view-toggle-btn.active[data-v-4dc6bc90]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.modal-body[data-v-4dc6bc90]{flex-direction:column;flex:1;gap:20px;padding:20px;display:flex;overflow-y:auto}.indicator-section[data-v-4dc6bc90]{flex-direction:column;gap:12px;display:flex}.section-header[data-v-4dc6bc90]{align-items:center;gap:8px;display:flex}.section-title[data-v-4dc6bc90]{color:#1a1a1a;font-size:13px;font-weight:600}.section-count[data-v-4dc6bc90]{color:#999;background:#f0f0f0;border-radius:10px;padding:2px 8px;font-size:11px}.indicator-grid[data-v-4dc6bc90]{grid-template-columns:repeat(auto-fill,minmax(195px,1fr));gap:10px;display:grid}.indicator-grid.compact[data-v-4dc6bc90]{flex-wrap:wrap;gap:8px;display:flex}.indicator-grid.compact .indicator-card[data-v-4dc6bc90]{white-space:nowrap;border-radius:16px;justify-content:center;align-items:center;min-height:32px;padding:6px 14px;display:inline-flex;position:relative}.indicator-grid.compact .indicator-card .card-tooltip[data-v-4dc6bc90]{color:#fff;white-space:nowrap;pointer-events:none;opacity:0;z-index:10;background:#333;border-radius:6px;padding:4px 10px;font-size:12px;transition:opacity .15s;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.indicator-grid.compact .indicator-card:hover .card-tooltip[data-v-4dc6bc90]{opacity:1}.indicator-grid.compact .indicator-card .card-label[data-v-4dc6bc90]{font-size:12px;font-weight:500}.indicator-card[data-v-4dc6bc90]{cursor:pointer;text-align:left;background:#fff;border:1px solid #e8e8e8;border-radius:8px;flex-direction:column;gap:4px;padding:12px 14px;transition:all .15s;display:flex}.indicator-card[data-v-4dc6bc90]:hover:not(.disabled){background:#fafafa;border-color:#1a1a1a;transform:translateY(-1px);box-shadow:0 2px 8px #0000000f}.indicator-card.active[data-v-4dc6bc90]{background:#f8f8f8;border-color:#1a1a1a}.card-header[data-v-4dc6bc90]{justify-content:space-between;align-items:center;gap:8px;display:flex}.card-label[data-v-4dc6bc90]{color:#1a1a1a;font-size:13px;font-weight:600}.card-header-actions[data-v-4dc6bc90]{align-items:center;gap:4px;display:flex}.card-settings-btn[data-v-4dc6bc90]{color:#bbb;cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:20px;height:20px;padding:0;transition:all .15s;display:flex}.card-settings-btn[data-v-4dc6bc90]:hover{color:#555;background:#f0f0f0}.card-name[data-v-4dc6bc90]{color:#666;font-size:11px;line-height:1.4}.card-params[data-v-4dc6bc90]{color:#999;margin-top:2px;font-size:10px}.section-divider[data-v-4dc6bc90]{background:linear-gradient(90deg,#0000,#e0e0e0,#0000);height:1px;margin:4px 0}.modal-footer[data-v-4dc6bc90]{background:#f8f8f8;border-top:1px solid #e8e8e8;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-info[data-v-4dc6bc90]{color:#666;font-size:12px}.info-text[data-v-4dc6bc90]{color:#999}.btn[data-v-4dc6bc90]{cursor:pointer;border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:6px 16px;font-size:13px;font-weight:500;line-height:1.4;transition:all .15s;display:flex}.btn-confirm[data-v-4dc6bc90]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.btn-confirm[data-v-4dc6bc90]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.fade-enter-active[data-v-4dc6bc90],.fade-leave-active[data-v-4dc6bc90]{transition:opacity .2s}.fade-enter-from[data-v-4dc6bc90],.fade-leave-to[data-v-4dc6bc90]{opacity:0}.overlay-enter-active[data-v-4dc6bc90],.overlay-leave-active[data-v-4dc6bc90]{transition:opacity .2s}.overlay-enter-from[data-v-4dc6bc90],.overlay-leave-to[data-v-4dc6bc90]{opacity:0}.modal-enter-active[data-v-4dc6bc90]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-4dc6bc90]{transition:all .16s ease-in}.modal-enter-from[data-v-4dc6bc90]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-4dc6bc90]{opacity:0;transform:scale(.94)translateY(8px)}@media (width<=640px){.selector-modal[data-v-4dc6bc90]{width:95vw;max-height:90vh}.indicator-grid[data-v-4dc6bc90]{grid-template-columns:1fr}.modal-body[data-v-4dc6bc90]{padding:16px}}.kline-tooltip[data-v-90b1aa6d]{z-index:10;color:#000000c7;pointer-events:none;backdrop-filter:blur(6px);background:#ffffffeb;border:1px solid #0000001f;border-radius:8px;min-width:200px;max-width:260px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.kline-tooltip__title[data-v-90b1aa6d]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-90b1aa6d]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-90b1aa6d]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-90b1aa6d]:first-child{color:#0000008f}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.kline-tooltip.use-anchor[data-v-90b1aa6d]{position-anchor:--kline-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.kline-tooltip.use-anchor.anchor-right-bottom[data-v-90b1aa6d]{transform:translate(14px,14px)}.kline-tooltip.use-anchor.anchor-left-bottom[data-v-90b1aa6d]{transform:translate(calc(-100% - 14px),14px)}}.marker-tooltip[data-v-057b55c9]{z-index:10;color:#000000c7;pointer-events:none;backdrop-filter:blur(6px);background:#ffffffeb;border:1px solid #0000001f;border-radius:8px;min-width:180px;max-width:260px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.marker-tooltip__title[data-v-057b55c9]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.marker-tooltip__content[data-v-057b55c9]{grid-template-columns:1fr;gap:2px;display:grid}.marker-tooltip__content .row[data-v-057b55c9]{justify-content:space-between;gap:10px;display:flex}.marker-tooltip__content .row span[data-v-057b55c9]:first-child{color:#0000008f}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.marker-tooltip.use-anchor[data-v-057b55c9]{position-anchor:--marker-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.marker-tooltip.use-anchor.anchor-right-bottom[data-v-057b55c9]{transform:translate(12px,12px)}.marker-tooltip.use-anchor.anchor-left-bottom[data-v-057b55c9]{transform:translate(calc(-100% - 12px),12px)}}.left-toolbar[data-v-35cfe78e]{box-sizing:border-box;user-select:none;background:#fafbfc;border:1px solid #e5e7eb;border-radius:6px;flex-direction:column;flex:0 0 40px;align-items:center;gap:6px;padding:8px 5px;display:flex;box-shadow:0 1px 3px #0000000f}.left-toolbar__group[data-v-35cfe78e]{flex-direction:column;gap:4px;display:flex}.left-toolbar__divider[data-v-35cfe78e]{background:#e5e7eb;width:18px;height:1px}.left-toolbar__button[data-v-35cfe78e]{color:#6b7280;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:border-color .15s,background .15s,color .15s;display:inline-flex;position:relative}.left-toolbar__button[data-v-35cfe78e]:hover{color:#374151;background:#f3f4f6;border-color:#d1d5db}.left-toolbar__button.active[data-v-35cfe78e]{color:#1f2937;background:#e5e7eb;border-color:#9ca3af}.left-toolbar__button[data-v-35cfe78e]:focus-visible{border-color:#6b7280;outline:none}.tool-icon[data-v-35cfe78e]{width:16px;height:16px}.corner-indicator[data-v-35cfe78e]{cursor:pointer;width:8px;height:8px;position:absolute;bottom:0;right:0;overflow:hidden}.corner-indicator[data-v-35cfe78e]:after{content:"";opacity:.45;border-bottom:5px solid;border-left:5px solid #0000;width:0;height:0;transition:opacity .15s;position:absolute;bottom:0;right:0}.left-toolbar__button:hover .corner-indicator[data-v-35cfe78e]:after,.left-toolbar__button.active .corner-indicator[data-v-35cfe78e]:after{opacity:.7}.corner-indicator.open[data-v-35cfe78e]:after{opacity:.8}.tool-dropdown[data-v-35cfe78e]{-webkit-backdrop-filter:blur(8px);box-sizing:border-box;z-index:100;background:#fafbfcd1;border:1px solid #e5e7eb;border-radius:6px;flex-direction:row;align-items:center;gap:4px;height:40px;padding:0 5px;display:flex;position:absolute;top:50%;left:calc(100% + 13px);transform:translateY(-50%);box-shadow:0 1px 3px #0000000f}.tool-item[data-v-35cfe78e]{position:relative}.dropdown-enter-active[data-v-35cfe78e],.dropdown-leave-active[data-v-35cfe78e]{transition:opacity .15s,transform .15s}.dropdown-enter-from[data-v-35cfe78e],.dropdown-leave-to[data-v-35cfe78e]{opacity:0;transform:translateY(-50%)translate(-6px)}@media (width<=768px),(height<=640px){.left-toolbar[data-v-35cfe78e]{border-radius:5px;flex-basis:36px;gap:5px;padding:6px 4px}.left-toolbar__group[data-v-35cfe78e]{gap:3px}.left-toolbar__button[data-v-35cfe78e]{border-radius:3px;width:26px;height:26px}.left-toolbar__divider[data-v-35cfe78e]{width:16px}.corner-indicator[data-v-35cfe78e]{width:7px;height:7px}.corner-indicator[data-v-35cfe78e]:after{border-bottom-width:4px;border-left-width:4px}.tool-dropdown[data-v-35cfe78e]{height:36px}}.settings-overlay[data-v-35cfe78e]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.settings-modal[data-v-35cfe78e]{background:#fff;border:1px solid #e0e0e0;border-radius:12px;width:90vw;min-width:340px;max-width:420px;overflow:hidden;box-shadow:0 8px 40px #00000026}.settings-header[data-v-35cfe78e]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-35cfe78e]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-35cfe78e]{align-items:center;gap:8px;display:flex}.settings-title[data-v-35cfe78e]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.settings-subtitle[data-v-35cfe78e]{color:#999;font-size:11px}.settings-close[data-v-35cfe78e]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.settings-close[data-v-35cfe78e]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.settings-close svg[data-v-35cfe78e]{width:14px;height:14px}.settings-body[data-v-35cfe78e]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.settings-item[data-v-35cfe78e]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:8px 12px}.settings-label[data-v-35cfe78e]{color:#333;cursor:pointer;justify-content:space-between;align-items:center;font-size:13px;display:flex}.settings-checkbox[data-v-35cfe78e]{cursor:pointer;accent-color:#1a1a1a;width:16px;height:16px}.settings-select[data-v-35cfe78e]{color:#333;cursor:pointer;background:#fff;border:1px solid #d0d0d0;border-radius:6px;outline:none;min-width:140px;padding:4px 8px;font-size:12px}.settings-select[data-v-35cfe78e]:hover{border-color:#9ca3af}.settings-select[data-v-35cfe78e]:focus{border-color:#6b7280;box-shadow:0 0 0 2px #6b728026}.settings-section-divider[data-v-35cfe78e]{align-items:center;gap:8px;margin-top:4px;display:flex}.settings-section-divider[data-v-35cfe78e]:before,.settings-section-divider[data-v-35cfe78e]:after{content:"";border-top:1px solid #e0e0e0;flex:1}.settings-section-label[data-v-35cfe78e]{color:#999;white-space:nowrap;font-size:11px}.settings-item.experimental[data-v-35cfe78e]{background:#fdf8f3;border-color:#f0e0d0}.settings-footer[data-v-35cfe78e]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-35cfe78e]{gap:8px;display:flex}.settings-btn[data-v-35cfe78e]{cursor:pointer;border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:6px 14px;font-size:13px;font-weight:500;line-height:1.4;transition:all .15s;display:flex}.settings-btn svg[data-v-35cfe78e]{flex-shrink:0;width:12px;height:12px}.settings-btn.reset[data-v-35cfe78e]{color:#666;background:0 0;border-color:#d0d0d0}.settings-btn.reset[data-v-35cfe78e]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.settings-btn.cancel[data-v-35cfe78e]{color:#666;background:0 0;border-color:#d0d0d0}.settings-btn.cancel[data-v-35cfe78e]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.settings-btn.confirm[data-v-35cfe78e]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.settings-btn.confirm[data-v-35cfe78e]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.settings-btn.confirm[data-v-35cfe78e]:active{box-shadow:none;transform:translateY(0)}.chart-wrapper[data-v-c50302da]{--kmap-height:var(--kmap-chart-height,100%);--kmap-width:var(--kmap-chart-width,100%);--chart-bg:#fff;--chart-bg-secondary:#f8f9fa;--chart-border:#e5e7eb;--chart-border-active:#3b82f6;--chart-text:#374151;--chart-text-secondary:#6b7280;width:var(--kmap-width);height:var(--kmap-height);flex-direction:column;justify-content:center;align-items:center;min-height:300px;display:flex}.chart-wrapper[data-theme=dark][data-v-c50302da]{--chart-bg:#1a1a2e;--chart-bg-secondary:#16162a;--chart-border:#2d2d44;--chart-border-active:#60a5fa;--chart-text:#e5e7eb;--chart-text-secondary:#9ca3af}.chart-stage[data-v-c50302da]{align-items:stretch;gap:8px;width:95%;height:85%;min-height:255px;display:flex}.chart-main[data-v-c50302da]{flex:auto;align-items:stretch;gap:0;min-width:0;height:100%;display:flex;position:relative}.pane-separator-layer[data-v-c50302da]{pointer-events:none;z-index:20;position:absolute;inset:0}.pane-separator-line[data-v-c50302da]{border-top:1px solid var(--chart-border);opacity:1;box-sizing:border-box;height:0;transition:border-top-color .12s,border-top-width .12s,margin-top .12s,opacity .12s;position:absolute;left:0;right:0}.pane-separator-line.is-active[data-v-c50302da]{border-top-color:var(--chart-border-active);border-top-width:2px;margin-top:-1px}.chart-stage.is-resizing-pane[data-v-c50302da],.chart-stage.is-hovering-pane-separator[data-v-c50302da]{cursor:ns-resize}.chart-stage.is-hovering-kline[data-v-c50302da]{cursor:pointer}.chart-stage.is-hovering-right-axis[data-v-c50302da]{cursor:ns-resize}.chart-stage.is-dragging[data-v-c50302da]{cursor:grabbing}.chart-container[data-v-c50302da]{height:100%;min-height:inherit;scrollbar-width:none;-ms-overflow-style:none;border:1px solid var(--chart-border);box-sizing:border-box;background:var(--chart-bg);-webkit-touch-callout:none;user-select:none;touch-action:none;border-right:0;border-radius:6px 0 0 6px;flex:auto;position:relative;overflow:auto hidden}.chart-container[data-v-c50302da]::-webkit-scrollbar{display:none}.right-axis-host[data-v-c50302da]{height:100%;min-height:inherit;box-sizing:border-box;background:var(--chart-bg);border:1px solid var(--chart-border);-webkit-touch-callout:none;user-select:none;touch-action:none;border-top-right-radius:6px;border-bottom-right-radius:6px;flex:none;position:relative;overflow:visible}.scroll-content[data-v-c50302da]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-c50302da]{pointer-events:none;position:sticky;top:0;left:0}.tooltip-layer[data-v-c50302da]{pointer-events:none;z-index:30;position:absolute;inset:0}.tooltip-anchor[data-v-c50302da]{pointer-events:none;width:1px;height:1px;position:absolute}.tooltip-anchor.kline-tooltip-anchor.use-anchor[data-v-c50302da]{anchor-name:--kline-tooltip-anchor}.tooltip-anchor.marker-tooltip-anchor.use-anchor[data-v-c50302da]{anchor-name:--marker-tooltip-anchor}@media (width<=768px),(height<=640px){.chart-stage[data-v-c50302da]{gap:6px}}.plot-canvas{display:block;position:absolute;top:0;left:0}.right-axis{display:block;position:absolute;left:0}.x-axis-canvas{z-index:10;display:block;position:absolute;bottom:0;left:0}.right-axis{z-index:15}
2
2
  /*$vite$:1*/
package/package.json CHANGED
@@ -1,76 +1,77 @@
1
- {
2
- "name": "@363045841yyt/klinechart",
3
- "version": "0.7.3-alpha.2",
4
- "description": "Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.",
5
- "license": "MIT",
6
- "type": "module",
7
- "engines": {
8
- "node": "^20.19.0 || >=22.12.0"
9
- },
10
- "sideEffects": false,
11
- "main": "./dist/index.js",
12
- "module": "./dist/index.js",
13
- "types": "./dist/index.d.ts",
14
- "exports": {
15
- ".": {
16
- "import": {
17
- "types": "./dist/index.d.ts",
18
- "default": "./dist/index.js"
19
- },
20
- "require": {
21
- "types": "./dist/index.d.cts",
22
- "default": "./dist/index.cjs"
23
- }
24
- },
25
- "./style.css": "./dist/klinechart.css"
26
- },
27
- "files": [
28
- "dist",
29
- "src"
30
- ],
31
- "publishConfig": {
32
- "access": "public"
33
- },
34
- "size-limit": [
35
- {
36
- "name": "vue (entry, pre-build src measurement)",
37
- "path": "src/index.ts",
38
- "limit": "8 KB",
39
- "gzip": true,
40
- "ignore": [
41
- "vue",
42
- "@363045841yyt/klinechart-core"
43
- ]
44
- }
45
- ],
46
- "peerDependencies": {
47
- "vue": "^3.4.0",
48
- "@363045841yyt/klinechart-core": "^0.7.3"
49
- },
50
- "devDependencies": {
51
- "@arethetypeswrong/cli": "^0.18.3",
52
- "@size-limit/preset-small-lib": "^12.1.0",
53
- "@vitejs/plugin-vue": "^6.0.0",
54
- "@vue/test-utils": "^2.4.10",
55
- "jsdom": "^29.1.1",
56
- "publint": "^0.3.0",
57
- "size-limit": "^12.1.0",
58
- "typescript": "~6.0.3",
59
- "unplugin-icons": "^23.0.1",
60
- "vite": "^8.0.14",
61
- "vite-plugin-babel": "^1.3.2",
62
- "vite-plugin-dts": "^5.0.1",
63
- "vitest": "^4.1.5",
64
- "vue": "^3.5.0"
65
- },
66
- "scripts": {
67
- "dev": "vite --config preview/vite.config.ts",
68
- "build": "vite build && node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\"",
69
- "postbuild": "node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\"",
70
- "test": "vitest run",
71
- "test:watch": "vitest",
72
- "size": "size-limit",
73
- "lint:publish": "publint --strict .",
74
- "lint:types": "attw --pack ."
75
- }
1
+ {
2
+ "name": "@363045841yyt/klinechart",
3
+ "version": "0.7.3-alpha.4",
4
+ "description": "Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "engines": {
8
+ "node": "^20.19.0 || >=22.12.0"
9
+ },
10
+ "sideEffects": false,
11
+ "main": "./dist/index.js",
12
+ "module": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "import": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "require": {
21
+ "types": "./dist/index.d.cts",
22
+ "default": "./dist/index.cjs"
23
+ }
24
+ },
25
+ "./style.css": "./dist/klinechart.css"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "src"
30
+ ],
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "scripts": {
35
+ "dev": "vite --config preview/vite.config.ts",
36
+ "build": "vite build && node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\"",
37
+ "postbuild": "node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\"",
38
+ "test": "vitest run",
39
+ "test:watch": "vitest",
40
+ "size": "size-limit",
41
+ "lint:publish": "publint --strict .",
42
+ "prepublishOnly": "npm run build",
43
+ "lint:types": "attw --pack ."
44
+ },
45
+ "size-limit": [
46
+ {
47
+ "name": "vue (entry, pre-build src measurement)",
48
+ "path": "src/index.ts",
49
+ "limit": "8 KB",
50
+ "gzip": true,
51
+ "ignore": [
52
+ "vue",
53
+ "@363045841yyt/klinechart-core"
54
+ ]
55
+ }
56
+ ],
57
+ "peerDependencies": {
58
+ "@363045841yyt/klinechart-core": "workspace:^",
59
+ "vue": "^3.4.0"
60
+ },
61
+ "devDependencies": {
62
+ "@arethetypeswrong/cli": "^0.18.3",
63
+ "@size-limit/preset-small-lib": "^12.1.0",
64
+ "@vitejs/plugin-vue": "^6.0.0",
65
+ "@vue/test-utils": "^2.4.10",
66
+ "jsdom": "^29.1.1",
67
+ "publint": "^0.3.0",
68
+ "size-limit": "^12.1.0",
69
+ "typescript": "~6.0.3",
70
+ "unplugin-icons": "^23.0.1",
71
+ "vite": "^8.0.14",
72
+ "vite-plugin-babel": "^1.3.2",
73
+ "vite-plugin-dts": "^5.0.1",
74
+ "vitest": "^4.1.5",
75
+ "vue": "^3.5.0"
76
+ }
76
77
  }
@@ -2,7 +2,7 @@
2
2
  <div class="indicator-selector">
3
3
  <div class="indicator-scroll-container">
4
4
  <div class="indicator-list">
5
- <!-- ?????? -->
5
+ <!-- 已激活的指标 -->
6
6
  <template v-for="indicator in activeIndicatorsList" :key="indicator.id">
7
7
  <div
8
8
  v-if="indicator.id === firstActiveSubIndicatorId"