@363045841yyt/klinechart 0.6.8 → 0.6.9
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.cjs +5 -20
- package/dist/index.js +2142 -8476
- package/dist/klinechart.css +1 -1
- package/dist/schema-CzmPW09E.cjs +1 -0
- package/dist/schema-DBMGp6Af.js +437 -0
- package/dist/src/components/KLineChart.vue.d.ts +5 -5
- package/dist/src/components/LeftToolbar.vue.d.ts +3 -3
- package/dist/src/config/chartSettings.d.ts +15 -10
- package/dist/src/core/indicators/scheduler.d.ts +9 -1
- package/dist/src/core/renderers/lastPrice.d.ts +5 -1
- package/dist/src/core/renderers/webgl/candleSurface.d.ts +3 -1
- package/dist/src/semantic/validator.d.ts +3 -2
- package/dist/src/utils/http.d.ts +14 -0
- package/package.json +2 -3
- package/dist/favicon.ico +0 -0
- package/dist/mock-stock-data.json +0 -1
package/dist/klinechart.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.kline-tooltip[data-v-d0fe85e6]{z-index:10;color:#000000c7;pointer-events:none;-webkit-backdrop-filter:blur(6px);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-d0fe85e6]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-d0fe85e6]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-d0fe85e6]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-d0fe85e6]:first-child{color:#0000008f}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.kline-tooltip.use-anchor[data-v-d0fe85e6]{position-anchor:--kline-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.kline-tooltip.use-anchor.anchor-right-bottom[data-v-d0fe85e6]{transform:translate(14px,14px)}.kline-tooltip.use-anchor.anchor-left-bottom[data-v-d0fe85e6]{transform:translate(calc(-100% - 14px),14px)}}.marker-tooltip[data-v-5574cc25]{z-index:10;color:#000000c7;pointer-events:none;-webkit-backdrop-filter:blur(6px);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-5574cc25]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.marker-tooltip__content[data-v-5574cc25]{grid-template-columns:1fr;gap:2px;display:grid}.marker-tooltip__content .row[data-v-5574cc25]{justify-content:space-between;gap:10px;display:flex}.marker-tooltip__content .row span[data-v-5574cc25]:first-child{color:#0000008f}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.marker-tooltip.use-anchor[data-v-5574cc25]{position-anchor:--marker-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.marker-tooltip.use-anchor.anchor-right-bottom[data-v-5574cc25]{transform:translate(12px,12px)}.marker-tooltip.use-anchor.anchor-left-bottom[data-v-5574cc25]{transform:translate(calc(-100% - 12px),12px)}}.params-overlay[data-v-bb1d1eb3]{-webkit-backdrop-filter:blur(4px);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-bb1d1eb3]{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-bb1d1eb3]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-bb1d1eb3]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-bb1d1eb3]{align-items:center;gap:8px;display:flex}.params-title[data-v-bb1d1eb3]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.params-subtitle[data-v-bb1d1eb3]{color:#999;font-size:11px}.toggle-desc-btn[data-v-bb1d1eb3]{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-bb1d1eb3]:hover{color:#555;background:#f0f0f0;border-color:#ccc}.toggle-desc-btn.active[data-v-bb1d1eb3]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.toggle-desc-btn svg[data-v-bb1d1eb3]{width:14px;height:14px}.params-close[data-v-bb1d1eb3]{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-bb1d1eb3]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.params-close svg[data-v-bb1d1eb3]{width:14px;height:14px}.indicator-description[data-v-bb1d1eb3]{background:#f0f7ff;border-bottom:1px solid #d6e8f5;padding:12px 20px}.indicator-description p[data-v-bb1d1eb3]{color:#2c5282;margin:0;font-size:12px;line-height:1.6}.params-body[data-v-bb1d1eb3]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.param-item[data-v-bb1d1eb3]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:10px 14px;transition:border-color .2s}.param-item[data-v-bb1d1eb3]:has(.param-input:focus){border-color:#bbb}.param-item.has-desc[data-v-bb1d1eb3]{padding:10px 14px 8px}.param-header[data-v-bb1d1eb3]{justify-content:space-between;align-items:center;gap:16px;display:flex}.param-label[data-v-bb1d1eb3]{flex-direction:column;gap:3px;display:flex}.param-label-text[data-v-bb1d1eb3]{color:#333;font-size:13px;font-weight:500}.param-range[data-v-bb1d1eb3]{color:#999;font-size:11px}.param-description[data-v-bb1d1eb3]{color:#666;border-top:1px dashed #e0e0e0;margin-top:8px;padding-top:8px;font-size:11px;line-height:1.5}.input-wrapper[data-v-bb1d1eb3]{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-bb1d1eb3]:focus-within{border-color:#999}.stepper-btn[data-v-bb1d1eb3]{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-bb1d1eb3]:hover:not(:disabled){color:#333;background:#e0e0e0}.stepper-btn[data-v-bb1d1eb3]:disabled{color:#ccc;cursor:not-allowed}.param-input[data-v-bb1d1eb3]{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-bb1d1eb3]::-webkit-inner-spin-button{-webkit-appearance:none}.param-input[data-v-bb1d1eb3]::-webkit-outer-spin-button{-webkit-appearance:none}.param-input[data-v-bb1d1eb3]:focus{outline:none}.params-footer[data-v-bb1d1eb3]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-bb1d1eb3]{gap:8px;display:flex}.params-btn[data-v-bb1d1eb3]{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-bb1d1eb3]{flex-shrink:0;width:12px;height:12px}.params-btn.reset[data-v-bb1d1eb3]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.reset[data-v-bb1d1eb3]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.params-btn.cancel[data-v-bb1d1eb3]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.cancel[data-v-bb1d1eb3]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.params-btn.confirm[data-v-bb1d1eb3]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.params-btn.confirm[data-v-bb1d1eb3]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.params-btn.confirm[data-v-bb1d1eb3]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-bb1d1eb3],.overlay-leave-active[data-v-bb1d1eb3]{transition:opacity .2s}.overlay-enter-from[data-v-bb1d1eb3],.overlay-leave-to[data-v-bb1d1eb3]{opacity:0}.modal-enter-active[data-v-bb1d1eb3]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-bb1d1eb3]{transition:all .16s ease-in}.modal-enter-from[data-v-bb1d1eb3]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-bb1d1eb3]{opacity:0;transform:scale(.94)translateY(8px)}.slide-enter-active[data-v-bb1d1eb3],.slide-leave-active[data-v-bb1d1eb3]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-bb1d1eb3],.slide-leave-to[data-v-bb1d1eb3]{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0}.indicator-selector[data-v-f3fbebbd]{width:80%;margin:20px;position:relative}.indicator-scroll-container[data-v-f3fbebbd]{scrollbar-width:none;-webkit-overflow-scrolling:touch;text-align:center;width:100%;overflow:auto hidden}.indicator-scroll-container[data-v-f3fbebbd]::-webkit-scrollbar{display:none}.indicator-list[data-v-f3fbebbd]{gap:8px;margin:0 auto;padding:2px;display:inline-flex}.indicator-divider[data-v-f3fbebbd]{background:#d9d9d9;align-self:center;width:1px;height:20px}.indicator-item[data-v-f3fbebbd]{align-items:center;gap:4px;display:flex}.indicator-item.draggable[data-v-f3fbebbd],.indicator-item.draggable .indicator-btn[data-v-f3fbebbd],.indicator-item.draggable[data-v-f3fbebbd]:hover,.indicator-item.draggable:hover .indicator-btn[data-v-f3fbebbd]{cursor:move}.indicator-item.is-dragging[data-v-f3fbebbd]{opacity:.6}.indicator-item.drag-over .indicator-btn[data-v-f3fbebbd]{border-color:#1a1a1a;box-shadow:0 0 0 2px #1a1a1a1f}.indicator-btn-wrapper[data-v-f3fbebbd]{position:relative}.indicator-btn[data-v-f3fbebbd]{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-f3fbebbd]:hover:not(.hovering){color:#333;background:#f8f8f8;border-color:#ccc}.indicator-btn.active[data-v-f3fbebbd]{color:#1a1a1a;background:#f8f8f8;border-color:#1a1a1a}.indicator-btn.active[data-v-f3fbebbd]:hover:not(.hovering){background:#f0f0f0;border-color:#333}.btn-content[data-v-f3fbebbd]{z-index:1;position:relative}.param-hint[data-v-f3fbebbd]{opacity:.85;font-size:11px}.hover-overlay[data-v-f3fbebbd]{-webkit-backdrop-filter:blur(4px);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-f3fbebbd]{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-f3fbebbd]:hover{color:#333;background:#0000000f}.settings-btn[data-v-f3fbebbd]:hover{color:#1a1a1a}.remove-btn[data-v-f3fbebbd]:hover{color:#ff4d4f}.divider[data-v-f3fbebbd]{background:#e0e0e0;width:1px;height:14px}.add-btn[data-v-f3fbebbd]{anchor-name:--indicator-add-btn;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-f3fbebbd]:hover{color:#1a1a1a;background:#1a1a1a0a;border-color:#1a1a1a}.add-menu[data-v-f3fbebbd]{white-space:nowrap;z-index:9999;background:#fff;border-radius:8px;padding:8px 0;position:fixed;transform:translate(-50%);box-shadow:0 6px 16px #00000014,0 3px 6px -4px #0000001f,0 9px 28px 8px #0000000d}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.add-menu.use-anchor[data-v-f3fbebbd]{position-anchor:--indicator-add-btn;left:anchor(center);top:anchor(top);max-width:calc(100vw - 16px);position:fixed;transform:translate(-50%,calc(-100% - 8px))}}.menu-section[data-v-f3fbebbd]{padding:4px 0}.menu-section[data-v-f3fbebbd]:not(:last-child){border-bottom:1px solid #f0f0f0}.menu-title[data-v-f3fbebbd]{color:#999;padding:4px 16px;font-size:12px;font-weight:500}.menu-items[data-v-f3fbebbd]{flex-direction:column;gap:2px;display:flex}.menu-item[data-v-f3fbebbd]{text-align:left;color:#333;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;width:100%;padding:8px 16px;font-size:13px;transition:background .2s;display:flex}.menu-item[data-v-f3fbebbd]:hover:not(.disabled){background:#f5f5f5}.menu-item.disabled[data-v-f3fbebbd]{color:#999;cursor:not-allowed}.menu-item .param-hint[data-v-f3fbebbd]{color:#999;font-size:11px}.active-tag[data-v-f3fbebbd]{color:#1a1a1a;align-items:center;margin-left:auto;display:flex}.fade-enter-active[data-v-f3fbebbd],.fade-leave-active[data-v-f3fbebbd]{transition:opacity .2s}.fade-enter-from[data-v-f3fbebbd],.fade-leave-to[data-v-f3fbebbd]{opacity:0}.slide-enter-active[data-v-f3fbebbd],.slide-leave-active[data-v-f3fbebbd]{transition:all .2s}.slide-enter-from[data-v-f3fbebbd],.slide-leave-to[data-v-f3fbebbd]{opacity:0;transform:translate(-50%)translateY(8px)}.drawing-style-toolbar[data-v-92699cb2]{-webkit-backdrop-filter:blur(8px);z-index:100;-webkit-user-select:none;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-92699cb2]{justify-content:center;align-items:center;display:inline-flex}.color-item[data-v-92699cb2]{width:24px;height:24px;position:relative}.color-swatch[data-v-92699cb2]{cursor:pointer;border:1px solid #d1d5db;border-radius:4px;width:100%;height:100%;display:block}.color-input[data-v-92699cb2]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.toolbar-select[data-v-92699cb2]{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-92699cb2]:hover{border-color:#9ca3af}.toolbar-btn[data-v-92699cb2]{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-92699cb2]:hover{color:#374151;background:#f3f4f6;border-color:#d1d5db}.delete-btn[data-v-92699cb2]:hover{color:#dc2626;background:#fef2f2;border-color:#fca5a5}.delete-icon[data-v-92699cb2]{width:14px;height:14px}.left-toolbar[data-v-c2895763]{box-sizing:border-box;-webkit-user-select:none;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-c2895763]{flex-direction:column;gap:4px;display:flex}.left-toolbar__divider[data-v-c2895763]{background:#e5e7eb;width:18px;height:1px}.left-toolbar__button[data-v-c2895763]{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-c2895763]:hover{color:#374151;background:#f3f4f6;border-color:#d1d5db}.left-toolbar__button.active[data-v-c2895763]{color:#1f2937;background:#e5e7eb;border-color:#9ca3af}.left-toolbar__button[data-v-c2895763]:focus-visible{border-color:#6b7280;outline:none}.tool-icon[data-v-c2895763]{width:16px;height:16px}.corner-indicator[data-v-c2895763]{cursor:pointer;width:8px;height:8px;position:absolute;bottom:0;right:0;overflow:hidden}.corner-indicator[data-v-c2895763]: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-c2895763]:after,.left-toolbar__button.active .corner-indicator[data-v-c2895763]:after{opacity:.7}.corner-indicator.open[data-v-c2895763]:after{opacity:.8}.tool-dropdown[data-v-c2895763]{-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-c2895763]{position:relative}.dropdown-enter-active[data-v-c2895763],.dropdown-leave-active[data-v-c2895763]{transition:opacity .15s,transform .15s}.dropdown-enter-from[data-v-c2895763],.dropdown-leave-to[data-v-c2895763]{opacity:0;transform:translateY(-50%)translate(-6px)}@media (width<=768px),(height<=640px){.left-toolbar[data-v-c2895763]{border-radius:5px;flex-basis:36px;gap:5px;padding:6px 4px}.left-toolbar__group[data-v-c2895763]{gap:3px}.left-toolbar__button[data-v-c2895763]{border-radius:3px;width:26px;height:26px}.left-toolbar__divider[data-v-c2895763]{width:16px}.corner-indicator[data-v-c2895763]{width:7px;height:7px}.corner-indicator[data-v-c2895763]:after{border-bottom-width:4px;border-left-width:4px}.tool-dropdown[data-v-c2895763]{height:36px}}.settings-overlay[data-v-c2895763]{-webkit-backdrop-filter:blur(4px);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-c2895763]{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-c2895763]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-c2895763]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-c2895763]{align-items:center;gap:8px;display:flex}.settings-title[data-v-c2895763]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.settings-subtitle[data-v-c2895763]{color:#999;font-size:11px}.settings-close[data-v-c2895763]{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-c2895763]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.settings-close svg[data-v-c2895763]{width:14px;height:14px}.settings-body[data-v-c2895763]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.settings-item[data-v-c2895763]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:8px 12px}.settings-label[data-v-c2895763]{color:#333;cursor:pointer;justify-content:space-between;align-items:center;font-size:13px;display:flex}.settings-checkbox[data-v-c2895763]{cursor:pointer;accent-color:#1a1a1a;width:16px;height:16px}.settings-section-divider[data-v-c2895763]{align-items:center;gap:8px;margin-top:4px;display:flex}.settings-section-divider[data-v-c2895763]:before,.settings-section-divider[data-v-c2895763]:after{content:"";border-top:1px solid #e0e0e0;flex:1}.settings-section-label[data-v-c2895763]{color:#999;white-space:nowrap;font-size:11px}.settings-item.experimental[data-v-c2895763]{background:#fdf8f3;border-color:#f0e0d0}.settings-footer[data-v-c2895763]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-c2895763]{gap:8px;display:flex}.settings-btn[data-v-c2895763]{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-c2895763]{flex-shrink:0;width:12px;height:12px}.settings-btn.reset[data-v-c2895763]{color:#666;background:0 0;border-color:#d0d0d0}.settings-btn.reset[data-v-c2895763]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.settings-btn.cancel[data-v-c2895763]{color:#666;background:0 0;border-color:#d0d0d0}.settings-btn.cancel[data-v-c2895763]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.settings-btn.confirm[data-v-c2895763]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.settings-btn.confirm[data-v-c2895763]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.settings-btn.confirm[data-v-c2895763]:active{box-shadow:none;transform:translateY(0)}.chart-wrapper[data-v-c0f19dd6]{--kmap-height:var(--kmap-chart-height,100%);--kmap-width:var(--kmap-chart-width,100%);width:var(--kmap-width);height:var(--kmap-height);flex-direction:column;justify-content:center;align-items:center;min-height:300px;display:flex}.chart-stage[data-v-c0f19dd6]{align-items:stretch;gap:8px;width:95%;height:85%;min-height:255px;display:flex}.chart-main[data-v-c0f19dd6]{flex:auto;align-items:stretch;gap:0;min-width:0;height:100%;display:flex;position:relative}.pane-separator-layer[data-v-c0f19dd6]{pointer-events:none;z-index:20;position:absolute;inset:0}.pane-separator-line[data-v-c0f19dd6]{opacity:1;box-sizing:border-box;border-top:1px solid #e5e7eb;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-c0f19dd6]{border-top-width:2px;border-top-color:#3b82f6;margin-top:-1px}.chart-stage.is-resizing-pane[data-v-c0f19dd6],.chart-stage.is-hovering-pane-separator[data-v-c0f19dd6]{cursor:ns-resize}.chart-stage.is-hovering-kline[data-v-c0f19dd6]{cursor:pointer}.chart-stage.is-hovering-right-axis[data-v-c0f19dd6]{cursor:ns-resize}.chart-stage.is-dragging[data-v-c0f19dd6]{cursor:grabbing}.chart-container[data-v-c0f19dd6]{height:100%;min-height:inherit;scrollbar-width:none;-ms-overflow-style:none;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;background:#fff;border:1px solid #e5e7eb;border-right:0;border-radius:6px 0 0 6px;flex:auto;position:relative;overflow:auto hidden}.chart-container[data-v-c0f19dd6]::-webkit-scrollbar{display:none}.chart-container[data-v-c0f19dd6]:hover{cursor:crosshair}.chart-stage.is-resizing-pane .chart-container[data-v-c0f19dd6],.chart-stage.is-hovering-pane-separator .chart-container[data-v-c0f19dd6]{cursor:ns-resize}.chart-stage.is-hovering-kline .chart-container[data-v-c0f19dd6]{cursor:pointer}.chart-stage.is-dragging .chart-container[data-v-c0f19dd6]{cursor:grabbing}.right-axis-host[data-v-c0f19dd6]{height:100%;min-height:inherit;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;background:#fff;border:1px solid #e5e7eb;border-top-right-radius:6px;border-bottom-right-radius:6px;flex:none;position:relative;overflow:visible}.scroll-content[data-v-c0f19dd6]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-c0f19dd6]{pointer-events:none;position:sticky;top:0;left:0}.tooltip-layer[data-v-c0f19dd6]{pointer-events:none;z-index:30;position:absolute;inset:0}.tooltip-anchor[data-v-c0f19dd6]{pointer-events:none;width:1px;height:1px;position:absolute}.tooltip-anchor.kline-tooltip-anchor.use-anchor[data-v-c0f19dd6]{anchor-name:--kline-tooltip-anchor}.tooltip-anchor.marker-tooltip-anchor.use-anchor[data-v-c0f19dd6]{anchor-name:--marker-tooltip-anchor}@media (width<=768px),(height<=640px){.chart-stage[data-v-c0f19dd6]{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
|
+
.kline-tooltip[data-v-d0fe85e6]{z-index:10;color:#000000c7;pointer-events:none;-webkit-backdrop-filter:blur(6px);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-d0fe85e6]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-d0fe85e6]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-d0fe85e6]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-d0fe85e6]:first-child{color:#0000008f}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.kline-tooltip.use-anchor[data-v-d0fe85e6]{position-anchor:--kline-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.kline-tooltip.use-anchor.anchor-right-bottom[data-v-d0fe85e6]{transform:translate(14px,14px)}.kline-tooltip.use-anchor.anchor-left-bottom[data-v-d0fe85e6]{transform:translate(calc(-100% - 14px),14px)}}.marker-tooltip[data-v-5574cc25]{z-index:10;color:#000000c7;pointer-events:none;-webkit-backdrop-filter:blur(6px);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-5574cc25]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.marker-tooltip__content[data-v-5574cc25]{grid-template-columns:1fr;gap:2px;display:grid}.marker-tooltip__content .row[data-v-5574cc25]{justify-content:space-between;gap:10px;display:flex}.marker-tooltip__content .row span[data-v-5574cc25]:first-child{color:#0000008f}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.marker-tooltip.use-anchor[data-v-5574cc25]{position-anchor:--marker-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.marker-tooltip.use-anchor.anchor-right-bottom[data-v-5574cc25]{transform:translate(12px,12px)}.marker-tooltip.use-anchor.anchor-left-bottom[data-v-5574cc25]{transform:translate(calc(-100% - 12px),12px)}}.params-overlay[data-v-bb1d1eb3]{-webkit-backdrop-filter:blur(4px);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-bb1d1eb3]{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-bb1d1eb3]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-bb1d1eb3]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-bb1d1eb3]{align-items:center;gap:8px;display:flex}.params-title[data-v-bb1d1eb3]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.params-subtitle[data-v-bb1d1eb3]{color:#999;font-size:11px}.toggle-desc-btn[data-v-bb1d1eb3]{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-bb1d1eb3]:hover{color:#555;background:#f0f0f0;border-color:#ccc}.toggle-desc-btn.active[data-v-bb1d1eb3]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.toggle-desc-btn svg[data-v-bb1d1eb3]{width:14px;height:14px}.params-close[data-v-bb1d1eb3]{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-bb1d1eb3]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.params-close svg[data-v-bb1d1eb3]{width:14px;height:14px}.indicator-description[data-v-bb1d1eb3]{background:#f0f7ff;border-bottom:1px solid #d6e8f5;padding:12px 20px}.indicator-description p[data-v-bb1d1eb3]{color:#2c5282;margin:0;font-size:12px;line-height:1.6}.params-body[data-v-bb1d1eb3]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.param-item[data-v-bb1d1eb3]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:10px 14px;transition:border-color .2s}.param-item[data-v-bb1d1eb3]:has(.param-input:focus){border-color:#bbb}.param-item.has-desc[data-v-bb1d1eb3]{padding:10px 14px 8px}.param-header[data-v-bb1d1eb3]{justify-content:space-between;align-items:center;gap:16px;display:flex}.param-label[data-v-bb1d1eb3]{flex-direction:column;gap:3px;display:flex}.param-label-text[data-v-bb1d1eb3]{color:#333;font-size:13px;font-weight:500}.param-range[data-v-bb1d1eb3]{color:#999;font-size:11px}.param-description[data-v-bb1d1eb3]{color:#666;border-top:1px dashed #e0e0e0;margin-top:8px;padding-top:8px;font-size:11px;line-height:1.5}.input-wrapper[data-v-bb1d1eb3]{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-bb1d1eb3]:focus-within{border-color:#999}.stepper-btn[data-v-bb1d1eb3]{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-bb1d1eb3]:hover:not(:disabled){color:#333;background:#e0e0e0}.stepper-btn[data-v-bb1d1eb3]:disabled{color:#ccc;cursor:not-allowed}.param-input[data-v-bb1d1eb3]{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-bb1d1eb3]::-webkit-inner-spin-button{-webkit-appearance:none}.param-input[data-v-bb1d1eb3]::-webkit-outer-spin-button{-webkit-appearance:none}.param-input[data-v-bb1d1eb3]:focus{outline:none}.params-footer[data-v-bb1d1eb3]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-bb1d1eb3]{gap:8px;display:flex}.params-btn[data-v-bb1d1eb3]{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-bb1d1eb3]{flex-shrink:0;width:12px;height:12px}.params-btn.reset[data-v-bb1d1eb3]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.reset[data-v-bb1d1eb3]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.params-btn.cancel[data-v-bb1d1eb3]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.cancel[data-v-bb1d1eb3]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.params-btn.confirm[data-v-bb1d1eb3]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.params-btn.confirm[data-v-bb1d1eb3]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.params-btn.confirm[data-v-bb1d1eb3]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-bb1d1eb3],.overlay-leave-active[data-v-bb1d1eb3]{transition:opacity .2s}.overlay-enter-from[data-v-bb1d1eb3],.overlay-leave-to[data-v-bb1d1eb3]{opacity:0}.modal-enter-active[data-v-bb1d1eb3]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-bb1d1eb3]{transition:all .16s ease-in}.modal-enter-from[data-v-bb1d1eb3]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-bb1d1eb3]{opacity:0;transform:scale(.94)translateY(8px)}.slide-enter-active[data-v-bb1d1eb3],.slide-leave-active[data-v-bb1d1eb3]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-bb1d1eb3],.slide-leave-to[data-v-bb1d1eb3]{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0}.indicator-selector[data-v-f3fbebbd]{width:80%;margin:20px;position:relative}.indicator-scroll-container[data-v-f3fbebbd]{scrollbar-width:none;-webkit-overflow-scrolling:touch;text-align:center;width:100%;overflow:auto hidden}.indicator-scroll-container[data-v-f3fbebbd]::-webkit-scrollbar{display:none}.indicator-list[data-v-f3fbebbd]{gap:8px;margin:0 auto;padding:2px;display:inline-flex}.indicator-divider[data-v-f3fbebbd]{background:#d9d9d9;align-self:center;width:1px;height:20px}.indicator-item[data-v-f3fbebbd]{align-items:center;gap:4px;display:flex}.indicator-item.draggable[data-v-f3fbebbd],.indicator-item.draggable .indicator-btn[data-v-f3fbebbd],.indicator-item.draggable[data-v-f3fbebbd]:hover,.indicator-item.draggable:hover .indicator-btn[data-v-f3fbebbd]{cursor:move}.indicator-item.is-dragging[data-v-f3fbebbd]{opacity:.6}.indicator-item.drag-over .indicator-btn[data-v-f3fbebbd]{border-color:#1a1a1a;box-shadow:0 0 0 2px #1a1a1a1f}.indicator-btn-wrapper[data-v-f3fbebbd]{position:relative}.indicator-btn[data-v-f3fbebbd]{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-f3fbebbd]:hover:not(.hovering){color:#333;background:#f8f8f8;border-color:#ccc}.indicator-btn.active[data-v-f3fbebbd]{color:#1a1a1a;background:#f8f8f8;border-color:#1a1a1a}.indicator-btn.active[data-v-f3fbebbd]:hover:not(.hovering){background:#f0f0f0;border-color:#333}.btn-content[data-v-f3fbebbd]{z-index:1;position:relative}.param-hint[data-v-f3fbebbd]{opacity:.85;font-size:11px}.hover-overlay[data-v-f3fbebbd]{-webkit-backdrop-filter:blur(4px);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-f3fbebbd]{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-f3fbebbd]:hover{color:#333;background:#0000000f}.settings-btn[data-v-f3fbebbd]:hover{color:#1a1a1a}.remove-btn[data-v-f3fbebbd]:hover{color:#ff4d4f}.divider[data-v-f3fbebbd]{background:#e0e0e0;width:1px;height:14px}.add-btn[data-v-f3fbebbd]{anchor-name:--indicator-add-btn;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-f3fbebbd]:hover{color:#1a1a1a;background:#1a1a1a0a;border-color:#1a1a1a}.add-menu[data-v-f3fbebbd]{white-space:nowrap;z-index:9999;background:#fff;border-radius:8px;padding:8px 0;position:fixed;transform:translate(-50%);box-shadow:0 6px 16px #00000014,0 3px 6px -4px #0000001f,0 9px 28px 8px #0000000d}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.add-menu.use-anchor[data-v-f3fbebbd]{position-anchor:--indicator-add-btn;left:anchor(center);top:anchor(top);max-width:calc(100vw - 16px);position:fixed;transform:translate(-50%,calc(-100% - 8px))}}.menu-section[data-v-f3fbebbd]{padding:4px 0}.menu-section[data-v-f3fbebbd]:not(:last-child){border-bottom:1px solid #f0f0f0}.menu-title[data-v-f3fbebbd]{color:#999;padding:4px 16px;font-size:12px;font-weight:500}.menu-items[data-v-f3fbebbd]{flex-direction:column;gap:2px;display:flex}.menu-item[data-v-f3fbebbd]{text-align:left;color:#333;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;width:100%;padding:8px 16px;font-size:13px;transition:background .2s;display:flex}.menu-item[data-v-f3fbebbd]:hover:not(.disabled){background:#f5f5f5}.menu-item.disabled[data-v-f3fbebbd]{color:#999;cursor:not-allowed}.menu-item .param-hint[data-v-f3fbebbd]{color:#999;font-size:11px}.active-tag[data-v-f3fbebbd]{color:#1a1a1a;align-items:center;margin-left:auto;display:flex}.fade-enter-active[data-v-f3fbebbd],.fade-leave-active[data-v-f3fbebbd]{transition:opacity .2s}.fade-enter-from[data-v-f3fbebbd],.fade-leave-to[data-v-f3fbebbd]{opacity:0}.slide-enter-active[data-v-f3fbebbd],.slide-leave-active[data-v-f3fbebbd]{transition:all .2s}.slide-enter-from[data-v-f3fbebbd],.slide-leave-to[data-v-f3fbebbd]{opacity:0;transform:translate(-50%)translateY(8px)}.drawing-style-toolbar[data-v-92699cb2]{-webkit-backdrop-filter:blur(8px);z-index:100;-webkit-user-select:none;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-92699cb2]{justify-content:center;align-items:center;display:inline-flex}.color-item[data-v-92699cb2]{width:24px;height:24px;position:relative}.color-swatch[data-v-92699cb2]{cursor:pointer;border:1px solid #d1d5db;border-radius:4px;width:100%;height:100%;display:block}.color-input[data-v-92699cb2]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.toolbar-select[data-v-92699cb2]{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-92699cb2]:hover{border-color:#9ca3af}.toolbar-btn[data-v-92699cb2]{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-92699cb2]:hover{color:#374151;background:#f3f4f6;border-color:#d1d5db}.delete-btn[data-v-92699cb2]:hover{color:#dc2626;background:#fef2f2;border-color:#fca5a5}.delete-icon[data-v-92699cb2]{width:14px;height:14px}.left-toolbar[data-v-20a39cb3]{box-sizing:border-box;-webkit-user-select:none;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-20a39cb3]{flex-direction:column;gap:4px;display:flex}.left-toolbar__divider[data-v-20a39cb3]{background:#e5e7eb;width:18px;height:1px}.left-toolbar__button[data-v-20a39cb3]{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-20a39cb3]:hover{color:#374151;background:#f3f4f6;border-color:#d1d5db}.left-toolbar__button.active[data-v-20a39cb3]{color:#1f2937;background:#e5e7eb;border-color:#9ca3af}.left-toolbar__button[data-v-20a39cb3]:focus-visible{border-color:#6b7280;outline:none}.tool-icon[data-v-20a39cb3]{width:16px;height:16px}.corner-indicator[data-v-20a39cb3]{cursor:pointer;width:8px;height:8px;position:absolute;bottom:0;right:0;overflow:hidden}.corner-indicator[data-v-20a39cb3]: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-20a39cb3]:after,.left-toolbar__button.active .corner-indicator[data-v-20a39cb3]:after{opacity:.7}.corner-indicator.open[data-v-20a39cb3]:after{opacity:.8}.tool-dropdown[data-v-20a39cb3]{-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-20a39cb3]{position:relative}.dropdown-enter-active[data-v-20a39cb3],.dropdown-leave-active[data-v-20a39cb3]{transition:opacity .15s,transform .15s}.dropdown-enter-from[data-v-20a39cb3],.dropdown-leave-to[data-v-20a39cb3]{opacity:0;transform:translateY(-50%)translate(-6px)}@media (width<=768px),(height<=640px){.left-toolbar[data-v-20a39cb3]{border-radius:5px;flex-basis:36px;gap:5px;padding:6px 4px}.left-toolbar__group[data-v-20a39cb3]{gap:3px}.left-toolbar__button[data-v-20a39cb3]{border-radius:3px;width:26px;height:26px}.left-toolbar__divider[data-v-20a39cb3]{width:16px}.corner-indicator[data-v-20a39cb3]{width:7px;height:7px}.corner-indicator[data-v-20a39cb3]:after{border-bottom-width:4px;border-left-width:4px}.tool-dropdown[data-v-20a39cb3]{height:36px}}.settings-overlay[data-v-20a39cb3]{-webkit-backdrop-filter:blur(4px);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-20a39cb3]{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-20a39cb3]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-20a39cb3]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-20a39cb3]{align-items:center;gap:8px;display:flex}.settings-title[data-v-20a39cb3]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.settings-subtitle[data-v-20a39cb3]{color:#999;font-size:11px}.settings-close[data-v-20a39cb3]{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-20a39cb3]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.settings-close svg[data-v-20a39cb3]{width:14px;height:14px}.settings-body[data-v-20a39cb3]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.settings-item[data-v-20a39cb3]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:8px 12px}.settings-label[data-v-20a39cb3]{color:#333;cursor:pointer;justify-content:space-between;align-items:center;font-size:13px;display:flex}.settings-checkbox[data-v-20a39cb3]{cursor:pointer;accent-color:#1a1a1a;width:16px;height:16px}.settings-select[data-v-20a39cb3]{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-20a39cb3]:hover{border-color:#9ca3af}.settings-select[data-v-20a39cb3]:focus{border-color:#6b7280;box-shadow:0 0 0 2px #6b728026}.settings-section-divider[data-v-20a39cb3]{align-items:center;gap:8px;margin-top:4px;display:flex}.settings-section-divider[data-v-20a39cb3]:before,.settings-section-divider[data-v-20a39cb3]:after{content:"";border-top:1px solid #e0e0e0;flex:1}.settings-section-label[data-v-20a39cb3]{color:#999;white-space:nowrap;font-size:11px}.settings-item.experimental[data-v-20a39cb3]{background:#fdf8f3;border-color:#f0e0d0}.settings-footer[data-v-20a39cb3]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-20a39cb3]{gap:8px;display:flex}.settings-btn[data-v-20a39cb3]{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-20a39cb3]{flex-shrink:0;width:12px;height:12px}.settings-btn.reset[data-v-20a39cb3]{color:#666;background:0 0;border-color:#d0d0d0}.settings-btn.reset[data-v-20a39cb3]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.settings-btn.cancel[data-v-20a39cb3]{color:#666;background:0 0;border-color:#d0d0d0}.settings-btn.cancel[data-v-20a39cb3]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.settings-btn.confirm[data-v-20a39cb3]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.settings-btn.confirm[data-v-20a39cb3]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.settings-btn.confirm[data-v-20a39cb3]:active{box-shadow:none;transform:translateY(0)}.chart-wrapper[data-v-6dd10e17]{--kmap-height:var(--kmap-chart-height,100%);--kmap-width:var(--kmap-chart-width,100%);width:var(--kmap-width);height:var(--kmap-height);flex-direction:column;justify-content:center;align-items:center;min-height:300px;display:flex}.chart-stage[data-v-6dd10e17]{align-items:stretch;gap:8px;width:95%;height:85%;min-height:255px;display:flex}.chart-main[data-v-6dd10e17]{flex:auto;align-items:stretch;gap:0;min-width:0;height:100%;display:flex;position:relative}.pane-separator-layer[data-v-6dd10e17]{pointer-events:none;z-index:20;position:absolute;inset:0}.pane-separator-line[data-v-6dd10e17]{opacity:1;box-sizing:border-box;border-top:1px solid #e5e7eb;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-6dd10e17]{border-top-width:2px;border-top-color:#3b82f6;margin-top:-1px}.chart-stage.is-resizing-pane[data-v-6dd10e17],.chart-stage.is-hovering-pane-separator[data-v-6dd10e17]{cursor:ns-resize}.chart-stage.is-hovering-kline[data-v-6dd10e17]{cursor:pointer}.chart-stage.is-hovering-right-axis[data-v-6dd10e17]{cursor:ns-resize}.chart-stage.is-dragging[data-v-6dd10e17]{cursor:grabbing}.chart-container[data-v-6dd10e17]{height:100%;min-height:inherit;scrollbar-width:none;-ms-overflow-style:none;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;background:#fff;border:1px solid #e5e7eb;border-right:0;border-radius:6px 0 0 6px;flex:auto;position:relative;overflow:auto hidden}.chart-container[data-v-6dd10e17]::-webkit-scrollbar{display:none}.right-axis-host[data-v-6dd10e17]{height:100%;min-height:inherit;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;background:#fff;border:1px solid #e5e7eb;border-top-right-radius:6px;border-bottom-right-radius:6px;flex:none;position:relative;overflow:visible}.scroll-content[data-v-6dd10e17]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-6dd10e17]{pointer-events:none;position:sticky;top:0;left:0}.tooltip-layer[data-v-6dd10e17]{pointer-events:none;z-index:30;position:absolute;inset:0}.tooltip-anchor[data-v-6dd10e17]{pointer-events:none;width:1px;height:1px;position:absolute}.tooltip-anchor.kline-tooltip-anchor.use-anchor[data-v-6dd10e17]{anchor-name:--kline-tooltip-anchor}.tooltip-anchor.marker-tooltip-anchor.use-anchor[data-v-6dd10e17]{anchor-name:--marker-tooltip-anchor}@media (width<=768px),(height<=640px){.chart-stage[data-v-6dd10e17]{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*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`http://json-schema.org/draft-07/schema#`,t=`https://kmap.dev/schemas/semantic-chart-config/1.0.0`,n=`SemanticChartConfig`,r=`Agent 语义化图表配置`,i=`object`,a=[`version`,`data`],o=!1,s={version:{type:`string`,pattern:`^[0-9]+\\.[0-9]+\\.[0-9]+$`,description:`semver 版本号`},data:{$ref:`#/$defs/DataConfig`},indicators:{$ref:`#/$defs/IndicatorsConfig`},markers:{$ref:`#/$defs/MarkersConfig`},chart:{$ref:`#/$defs/ChartOptions`},theme:{$ref:`#/$defs/ThemeConfig`}},c={DataConfig:{type:`object`,required:[`source`,`symbol`,`startDate`,`endDate`,`period`,`adjust`],additionalProperties:!1,properties:{source:{type:`string`,enum:[`baostock`,`dongcai`]},symbol:{type:`string`,pattern:`^[0-9]{6}$`},exchange:{type:`string`,enum:[`SH`,`SZ`,`BJ`]},startDate:{type:`string`,format:`date`},endDate:{type:`string`,format:`date`},period:{type:`string`,enum:[`daily`,`weekly`,`monthly`,`5min`,`15min`,`30min`,`60min`]},adjust:{type:`string`,enum:[`qfq`,`hfq`,`none`]}}},IndicatorsConfig:{type:`object`,additionalProperties:!1,properties:{main:{type:`array`,items:{$ref:`#/$defs/MainIndicatorConfig`},maxItems:5},sub:{type:`array`,items:{$ref:`#/$defs/SubIndicatorConfig`},maxItems:5}}},MainIndicatorConfig:{type:`object`,required:[`type`,`enabled`],additionalProperties:!1,properties:{type:{type:`string`,enum:[`MA`,`BOLL`]},enabled:{type:`boolean`},params:{type:`object`}},allOf:[{if:{properties:{type:{const:`MA`}},required:[`type`]},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{periods:{type:`array`,items:{type:`integer`,minimum:1,maximum:250},minItems:1,maxItems:5}}}}},else:{properties:{params:{type:`object`,additionalProperties:!1,properties:{period:{type:`integer`,minimum:1,maximum:100},multiplier:{type:`number`,minimum:.1,maximum:5}}}}}}]},SubIndicatorConfig:{type:`object`,required:[`type`,`enabled`],additionalProperties:!1,properties:{type:{type:`string`,enum:[`VOLUME`,`MACD`,`RSI`,`CCI`,`STOCH`,`MOM`,`WMSR`,`KST`,`FASTK`]},enabled:{type:`boolean`},params:{type:`object`}},allOf:[{if:{properties:{type:{const:`MACD`}}},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{fast:{type:`integer`,minimum:1,maximum:50},slow:{type:`integer`,minimum:1,maximum:100},signal:{type:`integer`,minimum:1,maximum:50}}}}}},{if:{properties:{type:{const:`RSI`}}},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{period1:{type:`integer`,minimum:1,maximum:100},period2:{type:`integer`,minimum:1,maximum:100},period3:{type:`integer`,minimum:1,maximum:100}}}}}}]},MarkersConfig:{type:`object`,additionalProperties:!1,properties:{showVolumePriceMarkers:{type:`boolean`},showExtremaMarkers:{type:`boolean`},customMarkers:{type:`array`,items:{$ref:`#/$defs/CustomMarker`},maxItems:100},legend:{$ref:`#/$defs/LegendConfig`}}},CustomMarker:{type:`object`,required:[`id`,`date`,`shape`],additionalProperties:!1,properties:{id:{type:`string`,maxLength:64},date:{type:`string`,description:`日期时间字符串,日K用 YYYY-MM-DD,分钟K用 YYYY-MM-DD HH:mm`,pattern:`^[0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2})?$`},shape:{type:`string`,enum:[`arrow_up`,`arrow_down`,`flag`,`circle`,`rectangle`,`diamond`]},groupKey:{type:`string`,maxLength:32},offset:{type:`object`,additionalProperties:!1,properties:{x:{type:`number`,minimum:-500,maximum:500},y:{type:`number`,minimum:-500,maximum:500}}},style:{$ref:`#/$defs/MarkerStyle`},label:{$ref:`#/$defs/MarkerLabel`},metadata:{type:`object`,maxProperties:20,additionalProperties:{type:[`string`,`number`,`boolean`,`null`],maxLength:200}}}},MarkerStyle:{type:`object`,additionalProperties:!1,properties:{fillColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},strokeColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},textColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},size:{type:`number`,minimum:4,maximum:50},lineWidth:{type:`number`,minimum:.5,maximum:10},opacity:{type:`number`,minimum:0,maximum:1}}},MarkerLabel:{type:`object`,required:[`text`],additionalProperties:!1,properties:{text:{type:`string`,maxLength:50},position:{type:`string`,enum:[`left`,`right`,`top`,`bottom`,`inside`]},align:{type:`string`,enum:[`start`,`center`,`end`]},fontSize:{type:`number`,minimum:8,maximum:24},offset:{type:`object`,additionalProperties:!1,properties:{x:{type:`number`,minimum:-500,maximum:500},y:{type:`number`,minimum:-500,maximum:500}}}}},LegendConfig:{type:`object`,additionalProperties:!1,properties:{enabled:{type:`boolean`},position:{type:`string`,enum:[`bottom-right`,`bottom-left`,`top-right`,`top-left`]},onClick:{type:`string`,enum:[`highlight`,`toggle`,`none`]}}},ChartOptions:{type:`object`,additionalProperties:!1,properties:{kWidth:{type:`number`,minimum:2,maximum:50},kGap:{type:`number`,minimum:0,maximum:20},autoScrollToRight:{type:`boolean`}}},ThemeConfig:{type:`object`,additionalProperties:!1,properties:{priceUpColor:{type:`string`,pattern:`^#[0-9a-fA-F]{6}$`},priceDownColor:{type:`string`,pattern:`^#[0-9a-fA-F]{6}$`}}}},l={$schema:e,$id:t,title:n,description:r,type:i,required:a,additionalProperties:!1,properties:s,$defs:c};exports.$defs=c,exports.$id=t,exports.$schema=e,exports.additionalProperties=o,exports.default=l,exports.description=r,exports.properties=s,exports.required=a,exports.title=n,exports.type=i;
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
//#region src/semantic/schema.json
|
|
2
|
+
var e = "http://json-schema.org/draft-07/schema#", t = "https://kmap.dev/schemas/semantic-chart-config/1.0.0", n = "SemanticChartConfig", r = "Agent 语义化图表配置", i = "object", a = ["version", "data"], o = !1, s = {
|
|
3
|
+
version: {
|
|
4
|
+
type: "string",
|
|
5
|
+
pattern: "^[0-9]+\\.[0-9]+\\.[0-9]+$",
|
|
6
|
+
description: "semver 版本号"
|
|
7
|
+
},
|
|
8
|
+
data: { $ref: "#/$defs/DataConfig" },
|
|
9
|
+
indicators: { $ref: "#/$defs/IndicatorsConfig" },
|
|
10
|
+
markers: { $ref: "#/$defs/MarkersConfig" },
|
|
11
|
+
chart: { $ref: "#/$defs/ChartOptions" },
|
|
12
|
+
theme: { $ref: "#/$defs/ThemeConfig" }
|
|
13
|
+
}, c = {
|
|
14
|
+
DataConfig: {
|
|
15
|
+
type: "object",
|
|
16
|
+
required: [
|
|
17
|
+
"source",
|
|
18
|
+
"symbol",
|
|
19
|
+
"startDate",
|
|
20
|
+
"endDate",
|
|
21
|
+
"period",
|
|
22
|
+
"adjust"
|
|
23
|
+
],
|
|
24
|
+
additionalProperties: !1,
|
|
25
|
+
properties: {
|
|
26
|
+
source: {
|
|
27
|
+
type: "string",
|
|
28
|
+
enum: ["baostock", "dongcai"]
|
|
29
|
+
},
|
|
30
|
+
symbol: {
|
|
31
|
+
type: "string",
|
|
32
|
+
pattern: "^[0-9]{6}$"
|
|
33
|
+
},
|
|
34
|
+
exchange: {
|
|
35
|
+
type: "string",
|
|
36
|
+
enum: [
|
|
37
|
+
"SH",
|
|
38
|
+
"SZ",
|
|
39
|
+
"BJ"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
startDate: {
|
|
43
|
+
type: "string",
|
|
44
|
+
format: "date"
|
|
45
|
+
},
|
|
46
|
+
endDate: {
|
|
47
|
+
type: "string",
|
|
48
|
+
format: "date"
|
|
49
|
+
},
|
|
50
|
+
period: {
|
|
51
|
+
type: "string",
|
|
52
|
+
enum: [
|
|
53
|
+
"daily",
|
|
54
|
+
"weekly",
|
|
55
|
+
"monthly",
|
|
56
|
+
"5min",
|
|
57
|
+
"15min",
|
|
58
|
+
"30min",
|
|
59
|
+
"60min"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
adjust: {
|
|
63
|
+
type: "string",
|
|
64
|
+
enum: [
|
|
65
|
+
"qfq",
|
|
66
|
+
"hfq",
|
|
67
|
+
"none"
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
IndicatorsConfig: {
|
|
73
|
+
type: "object",
|
|
74
|
+
additionalProperties: !1,
|
|
75
|
+
properties: {
|
|
76
|
+
main: {
|
|
77
|
+
type: "array",
|
|
78
|
+
items: { $ref: "#/$defs/MainIndicatorConfig" },
|
|
79
|
+
maxItems: 5
|
|
80
|
+
},
|
|
81
|
+
sub: {
|
|
82
|
+
type: "array",
|
|
83
|
+
items: { $ref: "#/$defs/SubIndicatorConfig" },
|
|
84
|
+
maxItems: 5
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
MainIndicatorConfig: {
|
|
89
|
+
type: "object",
|
|
90
|
+
required: ["type", "enabled"],
|
|
91
|
+
additionalProperties: !1,
|
|
92
|
+
properties: {
|
|
93
|
+
type: {
|
|
94
|
+
type: "string",
|
|
95
|
+
enum: ["MA", "BOLL"]
|
|
96
|
+
},
|
|
97
|
+
enabled: { type: "boolean" },
|
|
98
|
+
params: { type: "object" }
|
|
99
|
+
},
|
|
100
|
+
allOf: [{
|
|
101
|
+
if: {
|
|
102
|
+
properties: { type: { const: "MA" } },
|
|
103
|
+
required: ["type"]
|
|
104
|
+
},
|
|
105
|
+
then: { properties: { params: {
|
|
106
|
+
type: "object",
|
|
107
|
+
additionalProperties: !1,
|
|
108
|
+
properties: { periods: {
|
|
109
|
+
type: "array",
|
|
110
|
+
items: {
|
|
111
|
+
type: "integer",
|
|
112
|
+
minimum: 1,
|
|
113
|
+
maximum: 250
|
|
114
|
+
},
|
|
115
|
+
minItems: 1,
|
|
116
|
+
maxItems: 5
|
|
117
|
+
} }
|
|
118
|
+
} } },
|
|
119
|
+
else: { properties: { params: {
|
|
120
|
+
type: "object",
|
|
121
|
+
additionalProperties: !1,
|
|
122
|
+
properties: {
|
|
123
|
+
period: {
|
|
124
|
+
type: "integer",
|
|
125
|
+
minimum: 1,
|
|
126
|
+
maximum: 100
|
|
127
|
+
},
|
|
128
|
+
multiplier: {
|
|
129
|
+
type: "number",
|
|
130
|
+
minimum: .1,
|
|
131
|
+
maximum: 5
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
} } }
|
|
135
|
+
}]
|
|
136
|
+
},
|
|
137
|
+
SubIndicatorConfig: {
|
|
138
|
+
type: "object",
|
|
139
|
+
required: ["type", "enabled"],
|
|
140
|
+
additionalProperties: !1,
|
|
141
|
+
properties: {
|
|
142
|
+
type: {
|
|
143
|
+
type: "string",
|
|
144
|
+
enum: [
|
|
145
|
+
"VOLUME",
|
|
146
|
+
"MACD",
|
|
147
|
+
"RSI",
|
|
148
|
+
"CCI",
|
|
149
|
+
"STOCH",
|
|
150
|
+
"MOM",
|
|
151
|
+
"WMSR",
|
|
152
|
+
"KST",
|
|
153
|
+
"FASTK"
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
enabled: { type: "boolean" },
|
|
157
|
+
params: { type: "object" }
|
|
158
|
+
},
|
|
159
|
+
allOf: [{
|
|
160
|
+
if: { properties: { type: { const: "MACD" } } },
|
|
161
|
+
then: { properties: { params: {
|
|
162
|
+
type: "object",
|
|
163
|
+
additionalProperties: !1,
|
|
164
|
+
properties: {
|
|
165
|
+
fast: {
|
|
166
|
+
type: "integer",
|
|
167
|
+
minimum: 1,
|
|
168
|
+
maximum: 50
|
|
169
|
+
},
|
|
170
|
+
slow: {
|
|
171
|
+
type: "integer",
|
|
172
|
+
minimum: 1,
|
|
173
|
+
maximum: 100
|
|
174
|
+
},
|
|
175
|
+
signal: {
|
|
176
|
+
type: "integer",
|
|
177
|
+
minimum: 1,
|
|
178
|
+
maximum: 50
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
} } }
|
|
182
|
+
}, {
|
|
183
|
+
if: { properties: { type: { const: "RSI" } } },
|
|
184
|
+
then: { properties: { params: {
|
|
185
|
+
type: "object",
|
|
186
|
+
additionalProperties: !1,
|
|
187
|
+
properties: {
|
|
188
|
+
period1: {
|
|
189
|
+
type: "integer",
|
|
190
|
+
minimum: 1,
|
|
191
|
+
maximum: 100
|
|
192
|
+
},
|
|
193
|
+
period2: {
|
|
194
|
+
type: "integer",
|
|
195
|
+
minimum: 1,
|
|
196
|
+
maximum: 100
|
|
197
|
+
},
|
|
198
|
+
period3: {
|
|
199
|
+
type: "integer",
|
|
200
|
+
minimum: 1,
|
|
201
|
+
maximum: 100
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
} } }
|
|
205
|
+
}]
|
|
206
|
+
},
|
|
207
|
+
MarkersConfig: {
|
|
208
|
+
type: "object",
|
|
209
|
+
additionalProperties: !1,
|
|
210
|
+
properties: {
|
|
211
|
+
showVolumePriceMarkers: { type: "boolean" },
|
|
212
|
+
showExtremaMarkers: { type: "boolean" },
|
|
213
|
+
customMarkers: {
|
|
214
|
+
type: "array",
|
|
215
|
+
items: { $ref: "#/$defs/CustomMarker" },
|
|
216
|
+
maxItems: 100
|
|
217
|
+
},
|
|
218
|
+
legend: { $ref: "#/$defs/LegendConfig" }
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
CustomMarker: {
|
|
222
|
+
type: "object",
|
|
223
|
+
required: [
|
|
224
|
+
"id",
|
|
225
|
+
"date",
|
|
226
|
+
"shape"
|
|
227
|
+
],
|
|
228
|
+
additionalProperties: !1,
|
|
229
|
+
properties: {
|
|
230
|
+
id: {
|
|
231
|
+
type: "string",
|
|
232
|
+
maxLength: 64
|
|
233
|
+
},
|
|
234
|
+
date: {
|
|
235
|
+
type: "string",
|
|
236
|
+
description: "日期时间字符串,日K用 YYYY-MM-DD,分钟K用 YYYY-MM-DD HH:mm",
|
|
237
|
+
pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2})?$"
|
|
238
|
+
},
|
|
239
|
+
shape: {
|
|
240
|
+
type: "string",
|
|
241
|
+
enum: [
|
|
242
|
+
"arrow_up",
|
|
243
|
+
"arrow_down",
|
|
244
|
+
"flag",
|
|
245
|
+
"circle",
|
|
246
|
+
"rectangle",
|
|
247
|
+
"diamond"
|
|
248
|
+
]
|
|
249
|
+
},
|
|
250
|
+
groupKey: {
|
|
251
|
+
type: "string",
|
|
252
|
+
maxLength: 32
|
|
253
|
+
},
|
|
254
|
+
offset: {
|
|
255
|
+
type: "object",
|
|
256
|
+
additionalProperties: !1,
|
|
257
|
+
properties: {
|
|
258
|
+
x: {
|
|
259
|
+
type: "number",
|
|
260
|
+
minimum: -500,
|
|
261
|
+
maximum: 500
|
|
262
|
+
},
|
|
263
|
+
y: {
|
|
264
|
+
type: "number",
|
|
265
|
+
minimum: -500,
|
|
266
|
+
maximum: 500
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
style: { $ref: "#/$defs/MarkerStyle" },
|
|
271
|
+
label: { $ref: "#/$defs/MarkerLabel" },
|
|
272
|
+
metadata: {
|
|
273
|
+
type: "object",
|
|
274
|
+
maxProperties: 20,
|
|
275
|
+
additionalProperties: {
|
|
276
|
+
type: [
|
|
277
|
+
"string",
|
|
278
|
+
"number",
|
|
279
|
+
"boolean",
|
|
280
|
+
"null"
|
|
281
|
+
],
|
|
282
|
+
maxLength: 200
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
MarkerStyle: {
|
|
288
|
+
type: "object",
|
|
289
|
+
additionalProperties: !1,
|
|
290
|
+
properties: {
|
|
291
|
+
fillColor: {
|
|
292
|
+
type: "string",
|
|
293
|
+
pattern: "^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$"
|
|
294
|
+
},
|
|
295
|
+
strokeColor: {
|
|
296
|
+
type: "string",
|
|
297
|
+
pattern: "^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$"
|
|
298
|
+
},
|
|
299
|
+
textColor: {
|
|
300
|
+
type: "string",
|
|
301
|
+
pattern: "^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$"
|
|
302
|
+
},
|
|
303
|
+
size: {
|
|
304
|
+
type: "number",
|
|
305
|
+
minimum: 4,
|
|
306
|
+
maximum: 50
|
|
307
|
+
},
|
|
308
|
+
lineWidth: {
|
|
309
|
+
type: "number",
|
|
310
|
+
minimum: .5,
|
|
311
|
+
maximum: 10
|
|
312
|
+
},
|
|
313
|
+
opacity: {
|
|
314
|
+
type: "number",
|
|
315
|
+
minimum: 0,
|
|
316
|
+
maximum: 1
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
MarkerLabel: {
|
|
321
|
+
type: "object",
|
|
322
|
+
required: ["text"],
|
|
323
|
+
additionalProperties: !1,
|
|
324
|
+
properties: {
|
|
325
|
+
text: {
|
|
326
|
+
type: "string",
|
|
327
|
+
maxLength: 50
|
|
328
|
+
},
|
|
329
|
+
position: {
|
|
330
|
+
type: "string",
|
|
331
|
+
enum: [
|
|
332
|
+
"left",
|
|
333
|
+
"right",
|
|
334
|
+
"top",
|
|
335
|
+
"bottom",
|
|
336
|
+
"inside"
|
|
337
|
+
]
|
|
338
|
+
},
|
|
339
|
+
align: {
|
|
340
|
+
type: "string",
|
|
341
|
+
enum: [
|
|
342
|
+
"start",
|
|
343
|
+
"center",
|
|
344
|
+
"end"
|
|
345
|
+
]
|
|
346
|
+
},
|
|
347
|
+
fontSize: {
|
|
348
|
+
type: "number",
|
|
349
|
+
minimum: 8,
|
|
350
|
+
maximum: 24
|
|
351
|
+
},
|
|
352
|
+
offset: {
|
|
353
|
+
type: "object",
|
|
354
|
+
additionalProperties: !1,
|
|
355
|
+
properties: {
|
|
356
|
+
x: {
|
|
357
|
+
type: "number",
|
|
358
|
+
minimum: -500,
|
|
359
|
+
maximum: 500
|
|
360
|
+
},
|
|
361
|
+
y: {
|
|
362
|
+
type: "number",
|
|
363
|
+
minimum: -500,
|
|
364
|
+
maximum: 500
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
LegendConfig: {
|
|
371
|
+
type: "object",
|
|
372
|
+
additionalProperties: !1,
|
|
373
|
+
properties: {
|
|
374
|
+
enabled: { type: "boolean" },
|
|
375
|
+
position: {
|
|
376
|
+
type: "string",
|
|
377
|
+
enum: [
|
|
378
|
+
"bottom-right",
|
|
379
|
+
"bottom-left",
|
|
380
|
+
"top-right",
|
|
381
|
+
"top-left"
|
|
382
|
+
]
|
|
383
|
+
},
|
|
384
|
+
onClick: {
|
|
385
|
+
type: "string",
|
|
386
|
+
enum: [
|
|
387
|
+
"highlight",
|
|
388
|
+
"toggle",
|
|
389
|
+
"none"
|
|
390
|
+
]
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
ChartOptions: {
|
|
395
|
+
type: "object",
|
|
396
|
+
additionalProperties: !1,
|
|
397
|
+
properties: {
|
|
398
|
+
kWidth: {
|
|
399
|
+
type: "number",
|
|
400
|
+
minimum: 2,
|
|
401
|
+
maximum: 50
|
|
402
|
+
},
|
|
403
|
+
kGap: {
|
|
404
|
+
type: "number",
|
|
405
|
+
minimum: 0,
|
|
406
|
+
maximum: 20
|
|
407
|
+
},
|
|
408
|
+
autoScrollToRight: { type: "boolean" }
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
ThemeConfig: {
|
|
412
|
+
type: "object",
|
|
413
|
+
additionalProperties: !1,
|
|
414
|
+
properties: {
|
|
415
|
+
priceUpColor: {
|
|
416
|
+
type: "string",
|
|
417
|
+
pattern: "^#[0-9a-fA-F]{6}$"
|
|
418
|
+
},
|
|
419
|
+
priceDownColor: {
|
|
420
|
+
type: "string",
|
|
421
|
+
pattern: "^#[0-9a-fA-F]{6}$"
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}, l = {
|
|
426
|
+
$schema: e,
|
|
427
|
+
$id: t,
|
|
428
|
+
title: n,
|
|
429
|
+
description: r,
|
|
430
|
+
type: i,
|
|
431
|
+
required: a,
|
|
432
|
+
additionalProperties: !1,
|
|
433
|
+
properties: s,
|
|
434
|
+
$defs: c
|
|
435
|
+
};
|
|
436
|
+
//#endregion
|
|
437
|
+
export { c as $defs, t as $id, e as $schema, o as additionalProperties, l as default, r as description, s as properties, a as required, n as title, i as type };
|
|
@@ -63,15 +63,15 @@ declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
|
63
63
|
onToggleFullscreen?: (() => any) | undefined;
|
|
64
64
|
onZoomIn?: (() => any) | undefined;
|
|
65
65
|
onZoomOut?: (() => any) | undefined;
|
|
66
|
-
onSettingsChange?: ((settings: Record<string, boolean>) => any) | undefined;
|
|
66
|
+
onSettingsChange?: ((settings: Record<string, string | boolean>) => any) | undefined;
|
|
67
67
|
}>, {
|
|
68
|
-
getSettings: () => Record<string, boolean>;
|
|
68
|
+
getSettings: () => Record<string, boolean | string>;
|
|
69
69
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
70
70
|
selectTool: (toolId: string) => any;
|
|
71
71
|
toggleFullscreen: () => any;
|
|
72
72
|
zoomIn: () => any;
|
|
73
73
|
zoomOut: () => any;
|
|
74
|
-
settingsChange: (settings: Record<string, boolean>) => any;
|
|
74
|
+
settingsChange: (settings: Record<string, string | boolean>) => any;
|
|
75
75
|
}, import('vue').PublicProps, {}, false, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {}, any, import('vue').ComponentProvideOptions, {
|
|
76
76
|
P: {};
|
|
77
77
|
B: {};
|
|
@@ -86,9 +86,9 @@ declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
|
86
86
|
onToggleFullscreen?: (() => any) | undefined;
|
|
87
87
|
onZoomIn?: (() => any) | undefined;
|
|
88
88
|
onZoomOut?: (() => any) | undefined;
|
|
89
|
-
onSettingsChange?: ((settings: Record<string, boolean>) => any) | undefined;
|
|
89
|
+
onSettingsChange?: ((settings: Record<string, string | boolean>) => any) | undefined;
|
|
90
90
|
}>, {
|
|
91
|
-
getSettings: () => Record<string, boolean>;
|
|
91
|
+
getSettings: () => Record<string, boolean | string>;
|
|
92
92
|
}, {}, {}, {}, {}> | null;
|
|
93
93
|
chartMainRef: HTMLDivElement;
|
|
94
94
|
tooltipLayerRef: HTMLDivElement;
|
|
@@ -8,7 +8,7 @@ type __VLS_Props = {
|
|
|
8
8
|
isFullscreen?: boolean;
|
|
9
9
|
};
|
|
10
10
|
export type { SettingItem } from '../config/chartSettings';
|
|
11
|
-
declare function getCurrentSettings(): Record<string, boolean>;
|
|
11
|
+
declare function getCurrentSettings(): Record<string, boolean | string>;
|
|
12
12
|
declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
13
13
|
getSettings: typeof getCurrentSettings;
|
|
14
14
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
@@ -16,12 +16,12 @@ declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
|
16
16
|
toggleFullscreen: () => any;
|
|
17
17
|
zoomIn: () => any;
|
|
18
18
|
zoomOut: () => any;
|
|
19
|
-
settingsChange: (settings: Record<string, boolean>) => any;
|
|
19
|
+
settingsChange: (settings: Record<string, string | boolean>) => any;
|
|
20
20
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
21
21
|
onSelectTool?: ((toolId: string) => any) | undefined;
|
|
22
22
|
onToggleFullscreen?: (() => any) | undefined;
|
|
23
23
|
onZoomIn?: (() => any) | undefined;
|
|
24
24
|
onZoomOut?: (() => any) | undefined;
|
|
25
|
-
onSettingsChange?: ((settings: Record<string, boolean>) => any) | undefined;
|
|
25
|
+
onSettingsChange?: ((settings: Record<string, string | boolean>) => any) | undefined;
|
|
26
26
|
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
27
27
|
export default _default;
|
|
@@ -4,14 +4,19 @@
|
|
|
4
4
|
export interface SettingItem {
|
|
5
5
|
key: string;
|
|
6
6
|
label: string;
|
|
7
|
-
type: 'boolean';
|
|
8
|
-
default: boolean;
|
|
7
|
+
type: 'boolean' | 'select';
|
|
8
|
+
default: boolean | string;
|
|
9
9
|
group?: string;
|
|
10
|
+
options?: {
|
|
11
|
+
value: string;
|
|
12
|
+
label: string;
|
|
13
|
+
}[];
|
|
10
14
|
}
|
|
11
15
|
/**
|
|
12
|
-
*
|
|
16
|
+
* 检测设备类型:mobile / tablet / desktop
|
|
17
|
+
* 优先使用 Client Hints API (navigator.userAgentData),不支持时回退到 UA + 屏幕/触控检测
|
|
13
18
|
*/
|
|
14
|
-
export declare function
|
|
19
|
+
export declare function getDeviceType(): 'mobile' | 'tablet' | 'desktop';
|
|
15
20
|
/** 默认设置配置 */
|
|
16
21
|
export declare const DEFAULT_SETTINGS: readonly [{
|
|
17
22
|
readonly key: "showVolumePriceMarkers";
|
|
@@ -26,16 +31,16 @@ export declare const DEFAULT_SETTINGS: readonly [{
|
|
|
26
31
|
readonly default: false;
|
|
27
32
|
readonly group: "main";
|
|
28
33
|
}, {
|
|
29
|
-
readonly key: "
|
|
30
|
-
readonly label: "
|
|
34
|
+
readonly key: "disableMainPaneVerticalScroll";
|
|
35
|
+
readonly label: "主图纵轴刻度自适应调整";
|
|
31
36
|
readonly type: "boolean";
|
|
32
37
|
readonly default: true;
|
|
33
38
|
readonly group: "main";
|
|
34
39
|
}, {
|
|
35
|
-
readonly key: "
|
|
36
|
-
readonly label: "
|
|
40
|
+
readonly key: "enableWebGLRendering";
|
|
41
|
+
readonly label: "启用 WebGL 硬件加速渲染";
|
|
37
42
|
readonly type: "boolean";
|
|
38
|
-
readonly default:
|
|
43
|
+
readonly default: boolean;
|
|
39
44
|
readonly group: "main";
|
|
40
45
|
}, {
|
|
41
46
|
readonly key: "performanceTest10kKlines";
|
|
@@ -53,6 +58,6 @@ export declare const DEFAULT_SETTINGS: readonly [{
|
|
|
53
58
|
/** 图表设置类型(从 DEFAULT_SETTINGS 自动推导,同时兼容扩展) */
|
|
54
59
|
export type ChartSettings = {
|
|
55
60
|
[K in (typeof DEFAULT_SETTINGS)[number]['key']]?: boolean;
|
|
56
|
-
} & Record<string, boolean>;
|
|
61
|
+
} & Record<string, boolean | string>;
|
|
57
62
|
/** localStorage 存储键名 */
|
|
58
63
|
export declare const SETTINGS_STORAGE_KEY = "kline-chart-settings";
|