@363045841yyt/klinechart 0.2.12 → 0.3.0
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/README.md +28 -25
- package/dist/index.cjs +8 -8
- package/dist/index.d.ts +1 -8
- package/dist/index.js +1010 -947
- package/dist/klinechart.css +1 -1
- package/dist/{api → src/api}/data/baostock.d.ts +1 -1
- package/dist/{api → src/api}/data/kLine.d.ts +1 -1
- package/dist/{api → src/api}/data/types.d.ts +1 -1
- package/dist/{api → src/api}/data/unified.d.ts +1 -1
- package/dist/{components → src/components}/KLineChart.vue.d.ts +2 -2
- package/dist/{components → src/components}/KLineTooltip.vue.d.ts +1 -1
- package/dist/{components → src/components}/MarkerTooltip.vue.d.ts +1 -1
- package/dist/{core → src/core}/chart.d.ts +11 -7
- package/dist/{core → src/core}/controller/interaction.d.ts +3 -1
- package/dist/{core → src/core}/layout/pane.d.ts +4 -4
- package/dist/{core → src/core}/renderers/Indicator/boll.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/cci.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/ene.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/expma.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/fastk.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/index.d.ts +1 -1
- package/dist/{core → src/core}/renderers/Indicator/kst.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/ma.d.ts +1 -1
- package/dist/{core → src/core}/renderers/Indicator/macd.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/macdLegend.d.ts +1 -1
- package/dist/{core → src/core}/renderers/Indicator/mainIndicatorLegend.d.ts +1 -1
- package/dist/{core → src/core}/renderers/Indicator/mom.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/rsi.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/stoch.d.ts +2 -2
- package/dist/{core → src/core}/renderers/Indicator/wmsr.d.ts +2 -2
- package/dist/{core → src/core}/renderers/candle.d.ts +5 -4
- package/dist/{core → src/core}/renderers/crosshair.d.ts +3 -1
- package/dist/{core → src/core}/renderers/customMarkers.d.ts +1 -1
- package/dist/{core → src/core}/renderers/extremaMarkers.d.ts +1 -1
- package/dist/{core → src/core}/renderers/gridLines.d.ts +1 -1
- package/dist/{core → src/core}/renderers/lastPrice.d.ts +1 -1
- package/dist/{core → src/core}/renderers/paneTitle.d.ts +1 -1
- package/dist/{core → src/core}/renderers/subVolume.d.ts +1 -1
- package/dist/{core → src/core}/renderers/timeAxis.d.ts +1 -1
- package/dist/{core → src/core}/renderers/yAxis.d.ts +5 -1
- package/dist/{core → src/core}/theme/colors.d.ts +2 -2
- package/dist/{core → src/core}/viewport/viewport.d.ts +2 -2
- package/dist/src/index.d.ts +8 -0
- package/dist/{plugin → src/plugin}/rendererPluginManager.d.ts +0 -1
- package/dist/{plugin → src/plugin}/types.d.ts +1 -0
- package/dist/{semantic → src/semantic}/controller.d.ts +5 -1
- package/dist/{utils → src/utils}/kLineDraw/MA.d.ts +1 -1
- package/dist/{utils → src/utils}/kLineDraw/axis.d.ts +3 -3
- package/dist/{utils → src/utils}/kLineDraw/grid.d.ts +1 -1
- package/dist/{utils → src/utils}/kLineDraw/kLine.d.ts +1 -1
- package/dist/{utils → src/utils}/kline/format.d.ts +2 -2
- package/dist/{utils → src/utils}/kline/ma.d.ts +1 -1
- package/dist/{utils → src/utils}/kline/viewport.d.ts +1 -1
- package/dist/{utils → src/utils}/mock/genRandomPriceData.d.ts +1 -1
- package/dist/{utils → src/utils}/volumePrice.d.ts +2 -2
- package/package.json +14 -14
- /package/dist/{App.vue.d.ts → src/App.vue.d.ts} +0 -0
- /package/dist/{api → src/api}/data/baostock.test.d.ts +0 -0
- /package/dist/{api → src/api}/data/index.d.ts +0 -0
- /package/dist/{components → src/components}/IndicatorParams.vue.d.ts +0 -0
- /package/dist/{components → src/components}/IndicatorSelector.vue.d.ts +0 -0
- /package/dist/{components → src/components}/index.d.ts +0 -0
- /package/dist/{core → src/core}/draw/pixelAlign.d.ts +0 -0
- /package/dist/{core → src/core}/marker/registry.d.ts +0 -0
- /package/dist/{core → src/core}/paneRenderer.d.ts +0 -0
- /package/dist/{core → src/core}/scale/price.d.ts +0 -0
- /package/dist/{core → src/core}/scale/priceScale.d.ts +0 -0
- /package/dist/{core → src/core}/utils/klineConfig.d.ts +0 -0
- /package/dist/{core → src/core}/utils/tickCount.d.ts +0 -0
- /package/dist/{main.d.ts → src/main.d.ts} +0 -0
- /package/dist/{plugin → src/plugin}/ConfigManager.d.ts +0 -0
- /package/dist/{plugin → src/plugin}/EventBus.d.ts +0 -0
- /package/dist/{plugin → src/plugin}/HookSystem.d.ts +0 -0
- /package/dist/{plugin → src/plugin}/PluginHost.d.ts +0 -0
- /package/dist/{plugin → src/plugin}/PluginRegistry.d.ts +0 -0
- /package/dist/{plugin → src/plugin}/index.d.ts +0 -0
- /package/dist/{semantic → src/semantic}/drawShape.d.ts +0 -0
- /package/dist/{semantic → src/semantic}/index.d.ts +0 -0
- /package/dist/{semantic → src/semantic}/types.d.ts +0 -0
- /package/dist/{semantic → src/semantic}/validator.d.ts +0 -0
- /package/dist/{types → src/types}/kLine.d.ts +0 -0
- /package/dist/{types → src/types}/price.d.ts +0 -0
- /package/dist/{types → src/types}/volumePrice.d.ts +0 -0
- /package/dist/{utils → src/utils}/cache.d.ts +0 -0
- /package/dist/{utils → src/utils}/dateFormat.d.ts +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{utils → src/utils}/priceToY.d.ts +0 -0
package/dist/klinechart.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.kline-tooltip[data-v-95daa55c]{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-95daa55c]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-95daa55c]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-95daa55c]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-95daa55c]:first-child{color:#0000008f}.marker-tooltip[data-v-dd43da4f]{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-dd43da4f]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.marker-tooltip__content[data-v-dd43da4f]{grid-template-columns:1fr;gap:2px;display:grid}.marker-tooltip__content .row[data-v-dd43da4f]{justify-content:space-between;gap:10px;display:flex}.marker-tooltip__content .row span[data-v-dd43da4f]:first-child{color:#0000008f}.params-overlay[data-v-730f2212]{-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-730f2212]{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-730f2212]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-730f2212]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-730f2212]{align-items:center;gap:8px;display:flex}.params-title[data-v-730f2212]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.params-subtitle[data-v-730f2212]{color:#999;font-size:11px}.toggle-desc-btn[data-v-730f2212]{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-730f2212]:hover{color:#555;background:#f0f0f0;border-color:#ccc}.toggle-desc-btn.active[data-v-730f2212]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.toggle-desc-btn svg[data-v-730f2212]{width:14px;height:14px}.params-close[data-v-730f2212]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:26px;height:26px;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.params-close[data-v-730f2212]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.params-close svg[data-v-730f2212]{width:13px;height:13px}.indicator-description[data-v-730f2212]{background:#f0f7ff;border-bottom:1px solid #d6e8f5;padding:12px 20px}.indicator-description p[data-v-730f2212]{color:#2c5282;margin:0;font-size:12px;line-height:1.6}.params-body[data-v-730f2212]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.param-item[data-v-730f2212]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:10px 14px;transition:border-color .2s}.param-item[data-v-730f2212]:has(.param-input:focus){border-color:#bbb}.param-item.has-desc[data-v-730f2212]{padding:10px 14px 8px}.param-header[data-v-730f2212]{justify-content:space-between;align-items:center;gap:16px;display:flex}.param-label[data-v-730f2212]{flex-direction:column;gap:3px;display:flex}.param-label-text[data-v-730f2212]{color:#333;font-size:13px;font-weight:500}.param-range[data-v-730f2212]{color:#999;font-size:11px}.param-description[data-v-730f2212]{color:#666;border-top:1px dashed #e0e0e0;margin-top:8px;padding-top:8px;font-size:11px;line-height:1.5}.input-wrapper[data-v-730f2212]{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-730f2212]:focus-within{border-color:#999}.stepper-btn[data-v-730f2212]{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-730f2212]:hover:not(:disabled){color:#333;background:#e0e0e0}.stepper-btn[data-v-730f2212]:disabled{color:#ccc;cursor:not-allowed}.param-input[data-v-730f2212]{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-730f2212]::-webkit-inner-spin-button{-webkit-appearance:none}.param-input[data-v-730f2212]::-webkit-outer-spin-button{-webkit-appearance:none}.param-input[data-v-730f2212]:focus{outline:none}.params-footer[data-v-730f2212]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-730f2212]{gap:8px;display:flex}.params-btn[data-v-730f2212]{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-730f2212]{flex-shrink:0;width:12px;height:12px}.params-btn.reset[data-v-730f2212]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.reset[data-v-730f2212]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.params-btn.cancel[data-v-730f2212]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.cancel[data-v-730f2212]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.params-btn.confirm[data-v-730f2212]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.params-btn.confirm[data-v-730f2212]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.params-btn.confirm[data-v-730f2212]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-730f2212],.overlay-leave-active[data-v-730f2212]{transition:opacity .2s}.overlay-enter-from[data-v-730f2212],.overlay-leave-to[data-v-730f2212]{opacity:0}.modal-enter-active[data-v-730f2212]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-730f2212]{transition:all .16s ease-in}.modal-enter-from[data-v-730f2212]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-730f2212]{opacity:0;transform:scale(.94)translateY(8px)}.slide-enter-active[data-v-730f2212],.slide-leave-active[data-v-730f2212]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-730f2212],.slide-leave-to[data-v-730f2212]{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0}.indicator-selector[data-v-aad3b750]{width:80%;margin:20px;position:relative}.indicator-scroll-container[data-v-aad3b750]{scrollbar-width:none;-webkit-overflow-scrolling:touch;text-align:center;width:100%;overflow:auto hidden}.indicator-scroll-container[data-v-aad3b750]::-webkit-scrollbar{display:none}.indicator-list[data-v-aad3b750]{gap:8px;margin:0 auto;padding:2px;display:inline-flex}.indicator-item[data-v-aad3b750]{align-items:center;gap:4px;display:flex}.indicator-btn-wrapper[data-v-aad3b750]{position:relative}.indicator-btn[data-v-aad3b750]{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-aad3b750]:hover:not(.hovering){color:#333;background:#f8f8f8;border-color:#ccc}.indicator-btn.active[data-v-aad3b750]{color:#1a1a1a;background:#f8f8f8;border-color:#1a1a1a}.indicator-btn.active[data-v-aad3b750]:hover:not(.hovering){background:#f0f0f0;border-color:#333}.btn-content[data-v-aad3b750]{z-index:1;position:relative}.param-hint[data-v-aad3b750]{opacity:.85;font-size:11px}.hover-overlay[data-v-aad3b750]{-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-aad3b750]{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-aad3b750]:hover{color:#333;background:#0000000f}.settings-btn[data-v-aad3b750]:hover{color:#1a1a1a}.remove-btn[data-v-aad3b750]:hover{color:#ff4d4f}.divider[data-v-aad3b750]{background:#e0e0e0;width:1px;height:14px}.add-btn[data-v-aad3b750]{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-aad3b750]:hover{color:#1a1a1a;background:#1a1a1a0a;border-color:#1a1a1a}.add-menu[data-v-aad3b750]{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}.menu-section[data-v-aad3b750]{padding:4px 0}.menu-section[data-v-aad3b750]:not(:last-child){border-bottom:1px solid #f0f0f0}.menu-title[data-v-aad3b750]{color:#999;padding:4px 16px;font-size:12px;font-weight:500}.menu-items[data-v-aad3b750]{flex-direction:column;gap:2px;display:flex}.menu-item[data-v-aad3b750]{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-aad3b750]:hover:not(.disabled){background:#f5f5f5}.menu-item.disabled[data-v-aad3b750]{color:#999;cursor:not-allowed}.menu-item .param-hint[data-v-aad3b750]{color:#999;font-size:11px}.active-tag[data-v-aad3b750]{color:#1a1a1a;align-items:center;margin-left:auto;display:flex}.fade-enter-active[data-v-aad3b750],.fade-leave-active[data-v-aad3b750]{transition:opacity .2s}.fade-enter-from[data-v-aad3b750],.fade-leave-to[data-v-aad3b750]{opacity:0}.slide-enter-active[data-v-aad3b750],.slide-leave-active[data-v-aad3b750]{transition:all .2s}.slide-enter-from[data-v-aad3b750],.slide-leave-to[data-v-aad3b750]{opacity:0;transform:translate(-50%)translateY(8px)}.chart-wrapper[data-v-f07a030f]{--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-container[data-v-f07a030f]{scrollbar-width:none;-ms-overflow-style:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;width:95%;height:85%;min-height:255px;position:relative;overflow:auto hidden}.chart-container[data-v-f07a030f]::-webkit-scrollbar{display:none}.chart-container[data-v-f07a030f]:hover{cursor:grab}.chart-container[data-v-f07a030f]:active{cursor:grabbing}.scroll-content[data-v-f07a030f]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-f07a030f]{pointer-events:none;position:sticky;top:0;left:0}.plot-canvas{display:block;position:absolute;top:0;left:0}.main,.sub{border-top:1px solid #e0e0e0;border-left:1px solid #e0e0e0;border-right:1px solid #e0e0e0}.right-axis{border-top:1px solid #e0e0e0;border-right:1px solid #e0e0e0;display:block;position:absolute;right:0}.x-axis-canvas{z-index:10;display:block;position:absolute;bottom:0;left:0}.bottom-axis{border:1px solid #e0e0e0}.right-axis-corner{border-top:1px solid #e0e0e0;border-bottom:1px solid #e0e0e0;border-right:1px solid #e0e0e0}.x-axis-corner{z-index:10;display:block;position:absolute;bottom:0;right:0}
|
|
1
|
+
.kline-tooltip[data-v-95daa55c]{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-95daa55c]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-95daa55c]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-95daa55c]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-95daa55c]:first-child{color:#0000008f}.marker-tooltip[data-v-dd43da4f]{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-dd43da4f]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.marker-tooltip__content[data-v-dd43da4f]{grid-template-columns:1fr;gap:2px;display:grid}.marker-tooltip__content .row[data-v-dd43da4f]{justify-content:space-between;gap:10px;display:flex}.marker-tooltip__content .row span[data-v-dd43da4f]:first-child{color:#0000008f}.params-overlay[data-v-730f2212]{-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-730f2212]{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-730f2212]{background:#f8f8f8;border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-730f2212]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-730f2212]{align-items:center;gap:8px;display:flex}.params-title[data-v-730f2212]{color:#1a1a1a;letter-spacing:.2px;font-size:14px;font-weight:600}.params-subtitle[data-v-730f2212]{color:#999;font-size:11px}.toggle-desc-btn[data-v-730f2212]{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-730f2212]:hover{color:#555;background:#f0f0f0;border-color:#ccc}.toggle-desc-btn.active[data-v-730f2212]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.toggle-desc-btn svg[data-v-730f2212]{width:14px;height:14px}.params-close[data-v-730f2212]{cursor:pointer;color:#888;background:#fff;border:1px solid #e0e0e0;border-radius:6px;justify-content:center;align-items:center;width:26px;height:26px;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.params-close[data-v-730f2212]:hover{color:#333;background:#f0f0f0;border-color:#ccc}.params-close svg[data-v-730f2212]{width:13px;height:13px}.indicator-description[data-v-730f2212]{background:#f0f7ff;border-bottom:1px solid #d6e8f5;padding:12px 20px}.indicator-description p[data-v-730f2212]{color:#2c5282;margin:0;font-size:12px;line-height:1.6}.params-body[data-v-730f2212]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.param-item[data-v-730f2212]{background:#f8f8f8;border:1px solid #e8e8e8;border-radius:8px;padding:10px 14px;transition:border-color .2s}.param-item[data-v-730f2212]:has(.param-input:focus){border-color:#bbb}.param-item.has-desc[data-v-730f2212]{padding:10px 14px 8px}.param-header[data-v-730f2212]{justify-content:space-between;align-items:center;gap:16px;display:flex}.param-label[data-v-730f2212]{flex-direction:column;gap:3px;display:flex}.param-label-text[data-v-730f2212]{color:#333;font-size:13px;font-weight:500}.param-range[data-v-730f2212]{color:#999;font-size:11px}.param-description[data-v-730f2212]{color:#666;border-top:1px dashed #e0e0e0;margin-top:8px;padding-top:8px;font-size:11px;line-height:1.5}.input-wrapper[data-v-730f2212]{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-730f2212]:focus-within{border-color:#999}.stepper-btn[data-v-730f2212]{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-730f2212]:hover:not(:disabled){color:#333;background:#e0e0e0}.stepper-btn[data-v-730f2212]:disabled{color:#ccc;cursor:not-allowed}.param-input[data-v-730f2212]{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-730f2212]::-webkit-inner-spin-button{-webkit-appearance:none}.param-input[data-v-730f2212]::-webkit-outer-spin-button{-webkit-appearance:none}.param-input[data-v-730f2212]:focus{outline:none}.params-footer[data-v-730f2212]{background:#f8f8f8;border-top:1px solid #e8e8e8;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-730f2212]{gap:8px;display:flex}.params-btn[data-v-730f2212]{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-730f2212]{flex-shrink:0;width:12px;height:12px}.params-btn.reset[data-v-730f2212]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.reset[data-v-730f2212]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.params-btn.cancel[data-v-730f2212]{color:#666;background:0 0;border-color:#d0d0d0}.params-btn.cancel[data-v-730f2212]:hover{color:#333;background:#f0f0f0;border-color:#bbb}.params-btn.confirm[data-v-730f2212]{color:#fff;background:#1a1a1a;border-color:#1a1a1a}.params-btn.confirm[data-v-730f2212]:hover{background:#333;border-color:#333;transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.params-btn.confirm[data-v-730f2212]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-730f2212],.overlay-leave-active[data-v-730f2212]{transition:opacity .2s}.overlay-enter-from[data-v-730f2212],.overlay-leave-to[data-v-730f2212]{opacity:0}.modal-enter-active[data-v-730f2212]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-730f2212]{transition:all .16s ease-in}.modal-enter-from[data-v-730f2212]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-730f2212]{opacity:0;transform:scale(.94)translateY(8px)}.slide-enter-active[data-v-730f2212],.slide-leave-active[data-v-730f2212]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-730f2212],.slide-leave-to[data-v-730f2212]{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0}.indicator-selector[data-v-aad3b750]{width:80%;margin:20px;position:relative}.indicator-scroll-container[data-v-aad3b750]{scrollbar-width:none;-webkit-overflow-scrolling:touch;text-align:center;width:100%;overflow:auto hidden}.indicator-scroll-container[data-v-aad3b750]::-webkit-scrollbar{display:none}.indicator-list[data-v-aad3b750]{gap:8px;margin:0 auto;padding:2px;display:inline-flex}.indicator-item[data-v-aad3b750]{align-items:center;gap:4px;display:flex}.indicator-btn-wrapper[data-v-aad3b750]{position:relative}.indicator-btn[data-v-aad3b750]{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-aad3b750]:hover:not(.hovering){color:#333;background:#f8f8f8;border-color:#ccc}.indicator-btn.active[data-v-aad3b750]{color:#1a1a1a;background:#f8f8f8;border-color:#1a1a1a}.indicator-btn.active[data-v-aad3b750]:hover:not(.hovering){background:#f0f0f0;border-color:#333}.btn-content[data-v-aad3b750]{z-index:1;position:relative}.param-hint[data-v-aad3b750]{opacity:.85;font-size:11px}.hover-overlay[data-v-aad3b750]{-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-aad3b750]{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-aad3b750]:hover{color:#333;background:#0000000f}.settings-btn[data-v-aad3b750]:hover{color:#1a1a1a}.remove-btn[data-v-aad3b750]:hover{color:#ff4d4f}.divider[data-v-aad3b750]{background:#e0e0e0;width:1px;height:14px}.add-btn[data-v-aad3b750]{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-aad3b750]:hover{color:#1a1a1a;background:#1a1a1a0a;border-color:#1a1a1a}.add-menu[data-v-aad3b750]{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}.menu-section[data-v-aad3b750]{padding:4px 0}.menu-section[data-v-aad3b750]:not(:last-child){border-bottom:1px solid #f0f0f0}.menu-title[data-v-aad3b750]{color:#999;padding:4px 16px;font-size:12px;font-weight:500}.menu-items[data-v-aad3b750]{flex-direction:column;gap:2px;display:flex}.menu-item[data-v-aad3b750]{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-aad3b750]:hover:not(.disabled){background:#f5f5f5}.menu-item.disabled[data-v-aad3b750]{color:#999;cursor:not-allowed}.menu-item .param-hint[data-v-aad3b750]{color:#999;font-size:11px}.active-tag[data-v-aad3b750]{color:#1a1a1a;align-items:center;margin-left:auto;display:flex}.fade-enter-active[data-v-aad3b750],.fade-leave-active[data-v-aad3b750]{transition:opacity .2s}.fade-enter-from[data-v-aad3b750],.fade-leave-to[data-v-aad3b750]{opacity:0}.slide-enter-active[data-v-aad3b750],.slide-leave-active[data-v-aad3b750]{transition:all .2s}.slide-enter-from[data-v-aad3b750],.slide-leave-to[data-v-aad3b750]{opacity:0;transform:translate(-50%)translateY(8px)}.chart-wrapper[data-v-c5290a39]{--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-container[data-v-c5290a39]{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;border:1px solid #e0e0e0;width:95%;height:85%;min-height:255px;position:relative;overflow:auto hidden}.chart-container[data-v-c5290a39]::-webkit-scrollbar{display:none}.chart-container[data-v-c5290a39]:hover{cursor:grab}.chart-container[data-v-c5290a39]:active{cursor:grabbing}.scroll-content[data-v-c5290a39]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-c5290a39]{pointer-events:none;position:sticky;top:0;left:0}.plot-canvas{display:block;position:absolute;top:0;left:0}.right-axis{display:block;position:absolute;right:0}.x-axis-canvas{z-index:10;display:block;position:absolute;bottom:0;left:0}
|
|
2
2
|
/*$vite$:1*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SemanticChartConfig } from '
|
|
2
|
-
import { SubIndicatorType } from '
|
|
1
|
+
import { SemanticChartConfig } from '../../semantic';
|
|
2
|
+
import { SubIndicatorType } from '../../core/renderers/Indicator';
|
|
3
3
|
type __VLS_Props = {
|
|
4
4
|
/** 语义化配置(必需,唯一控制源) */
|
|
5
5
|
semanticConfig: SemanticChartConfig;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { KLineData } from '
|
|
2
|
-
import { VisibleRange } from '
|
|
3
|
-
import { InteractionController } from '
|
|
4
|
-
import { PaneRenderer } from '
|
|
1
|
+
import { KLineData } from '../../types/price';
|
|
2
|
+
import { VisibleRange } from '../../core/layout/pane';
|
|
3
|
+
import { InteractionController } from '../../core/controller/interaction';
|
|
4
|
+
import { PaneRenderer } from '../../core/paneRenderer';
|
|
5
5
|
import { MarkerManager, CustomMarkerEntity } from './marker/registry';
|
|
6
|
-
import { getPhysicalKLineConfig, calcKWidthPx } from '
|
|
7
|
-
import { PluginHostImpl, RendererPlugin, RendererPluginWithHost } from '
|
|
8
|
-
import { SubIndicatorType } from '
|
|
6
|
+
import { getPhysicalKLineConfig, calcKWidthPx } from '../../core/utils/klineConfig';
|
|
7
|
+
import { PluginHostImpl, RendererPlugin, RendererPluginWithHost } from '../../plugin';
|
|
8
|
+
import { SubIndicatorType } from '../../core/renderers/Indicator';
|
|
9
9
|
export { getPhysicalKLineConfig, calcKWidthPx };
|
|
10
10
|
/**
|
|
11
11
|
* 图表 DOM 元素引用
|
|
@@ -70,6 +70,10 @@ export declare class Chart {
|
|
|
70
70
|
private pluginHost;
|
|
71
71
|
/** 渲染器插件管理器 */
|
|
72
72
|
private rendererPluginManager;
|
|
73
|
+
/** 精确 DPR(来自 devicePixelContentBoxSize) */
|
|
74
|
+
private preciseDpr;
|
|
75
|
+
/** 用于监听物理像素尺寸变化 */
|
|
76
|
+
private dprObserver?;
|
|
73
77
|
/**
|
|
74
78
|
* 创建图表实例
|
|
75
79
|
* @param dom 由 Vue 组件传入的 DOM 句柄
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Chart } from '../chart';
|
|
2
|
-
import { MarkerEntity, CustomMarkerEntity } from '
|
|
2
|
+
import { MarkerEntity, CustomMarkerEntity } from '../../../core/marker/registry';
|
|
3
3
|
/** 标记 hover 事件数据 */
|
|
4
4
|
export interface MarkerHoverEvent {
|
|
5
5
|
type: 'volume-price' | 'custom';
|
|
@@ -25,6 +25,8 @@ export declare class InteractionController {
|
|
|
25
25
|
} | null;
|
|
26
26
|
/** 十字线当前指向的 K 线索引 */
|
|
27
27
|
crosshairIndex: number | null;
|
|
28
|
+
/** 十字线指向的价格(用于价格轴平移时跟随) */
|
|
29
|
+
crosshairPrice: number | null;
|
|
28
30
|
/** 鼠标悬停的 K 线索引(命中 candle 时有效) */
|
|
29
31
|
hoveredIndex: number | null;
|
|
30
32
|
/** 当前活跃的 pane ID */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { KLineData } from '
|
|
2
|
-
import { PriceRange } from '
|
|
3
|
-
import { PriceScale } from '
|
|
4
|
-
import { MarkerManager } from '
|
|
1
|
+
import { KLineData } from '../../../types/price';
|
|
2
|
+
import { PriceRange } from '../../../core/scale/price';
|
|
3
|
+
import { PriceScale } from '../../../core/scale/priceScale';
|
|
4
|
+
import { MarkerManager } from '../../../core/marker/registry';
|
|
5
5
|
export type VisibleRange = {
|
|
6
6
|
start: number;
|
|
7
7
|
end: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface BOLLConfig {
|
|
4
4
|
/** 周期(默认20) */
|
|
5
5
|
period?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface CCIConfig {
|
|
4
4
|
/** 周期(默认 14) */
|
|
5
5
|
period?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface ENEConfig {
|
|
4
4
|
/** 周期(默认10) */
|
|
5
5
|
period?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface EXPMAConfig {
|
|
4
4
|
/** 快线周期(默认12) */
|
|
5
5
|
fastPeriod?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface FASTKConfig {
|
|
4
4
|
/** 周期(默认 9) */
|
|
5
5
|
period?: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
2
|
export { createMARendererPlugin, type MAFlags } from './ma';
|
|
3
3
|
export { createBOLLRendererPlugin, calcBOLLAtIndex, type BOLLConfig } from './boll';
|
|
4
4
|
export { createEXPMARendererPlugin, calcEXPMAAtIndex, type EXPMAConfig } from './expma';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface KSTConfig {
|
|
4
4
|
/** ROC1 周期(默认 10) */
|
|
5
5
|
roc1?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface MACDConfig {
|
|
4
4
|
/** 快线周期(默认 12) */
|
|
5
5
|
fastPeriod?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface MOMConfig {
|
|
4
4
|
/** 周期(默认 10) */
|
|
5
5
|
period?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface RSIConfig {
|
|
4
4
|
/** 第一条 RSI 周期(默认 6) */
|
|
5
5
|
period1?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface STOCHConfig {
|
|
4
4
|
/** K 周期(默认 9) */
|
|
5
5
|
n?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { KLineData } from '
|
|
1
|
+
import { RendererPlugin } from '../../../../plugin';
|
|
2
|
+
import { KLineData } from '../../../../types/price';
|
|
3
3
|
export interface WMSRConfig {
|
|
4
4
|
/** 周期(默认 14) */
|
|
5
5
|
period?: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
2
|
-
import { VolumePriceRelation } from '
|
|
3
|
-
import { MarkerManager } from '
|
|
1
|
+
import { RendererPlugin } from '../../../plugin';
|
|
2
|
+
import { VolumePriceRelation } from '../../../types/volumePrice';
|
|
3
|
+
import { MarkerManager } from '../../../core/marker/registry';
|
|
4
4
|
/**
|
|
5
5
|
* 创建 K 线蜡烛图渲染器插件
|
|
6
6
|
*/
|
|
@@ -15,5 +15,6 @@ export declare function createCandleRenderer(): RendererPlugin;
|
|
|
15
15
|
* @param relation - 量价关系类型
|
|
16
16
|
* @param kWidth - K线宽度,作为三角形边长
|
|
17
17
|
* @param gap - 三角形与K线的间距,默认为4
|
|
18
|
+
* @param dpr - 设备像素比
|
|
18
19
|
*/
|
|
19
|
-
export declare function drawVolumePriceMarker(ctx: CanvasRenderingContext2D, x: number, y: number, relation: VolumePriceRelation, kIndex: number, kWidth: number, gap: number | undefined, markerManager: MarkerManager): void;
|
|
20
|
+
export declare function drawVolumePriceMarker(ctx: CanvasRenderingContext2D, x: number, y: number, relation: VolumePriceRelation, kIndex: number, kWidth: number, gap: number | undefined, markerManager: MarkerManager, dpr: number): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
1
|
+
import { RendererPlugin } from '../../../plugin';
|
|
2
2
|
/**
|
|
3
3
|
* 创建十字线渲染器插件
|
|
4
4
|
* 垂直线绘制到所有面板,水平线只绘制到活跃面板
|
|
@@ -11,5 +11,7 @@ export declare function createCrosshairRendererPlugin(options: {
|
|
|
11
11
|
} | null;
|
|
12
12
|
activePaneId: string | null;
|
|
13
13
|
isDragging: boolean;
|
|
14
|
+
/** 十字线指向的价格(用于价格轴平移时跟随) */
|
|
15
|
+
price: number | null;
|
|
14
16
|
};
|
|
15
17
|
}): RendererPlugin;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RendererPlugin } from '
|
|
1
|
+
import { RendererPlugin } from '../../../plugin';
|
|
2
2
|
/**
|
|
3
3
|
* 创建 Y 轴渲染器插件
|
|
4
4
|
* 渲染到所有面板的 Y 轴区域
|
|
@@ -6,4 +6,8 @@ import { RendererPlugin } from '../../plugin';
|
|
|
6
6
|
export declare function createYAxisRendererPlugin(options: {
|
|
7
7
|
axisWidth: number;
|
|
8
8
|
yPaddingPx: number;
|
|
9
|
+
getCrosshair?: () => {
|
|
10
|
+
y: number;
|
|
11
|
+
price: number;
|
|
12
|
+
} | null;
|
|
9
13
|
}): RendererPlugin;
|
|
@@ -183,8 +183,8 @@ export declare const KST_COLORS: {
|
|
|
183
183
|
* EXPMA 颜色
|
|
184
184
|
*/
|
|
185
185
|
export declare const EXPMA_COLORS: {
|
|
186
|
-
/**
|
|
187
|
-
readonly FAST: "
|
|
186
|
+
/** 快线颜色(橙色,参考 RSI2) */
|
|
187
|
+
readonly FAST: "rgba(255, 152, 0, 1)";
|
|
188
188
|
/** 慢线颜色(蓝色) */
|
|
189
189
|
readonly SLOW: "rgba(69, 112, 249, 1)";
|
|
190
190
|
};
|
|
@@ -63,7 +63,6 @@ export declare class RendererPluginManager {
|
|
|
63
63
|
getAllPlugins(): RendererPlugin[];
|
|
64
64
|
/** 获取指定渲染器 */
|
|
65
65
|
getPlugin<T extends RendererPlugin = RendererPlugin>(name: string): T | undefined;
|
|
66
|
-
/** 通知数据更新(跳过禁用的插件) */
|
|
67
66
|
notifyDataUpdate(data: unknown[], range: {
|
|
68
67
|
start: number;
|
|
69
68
|
end: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Chart } from '
|
|
1
|
+
import { Chart } from '../../core/chart';
|
|
2
2
|
import { SemanticChartConfig, ApplyResult } from './types';
|
|
3
3
|
/** 状态事件类型 */
|
|
4
4
|
export type SemanticEventType = 'config:loading' | 'config:ready' | 'config:error';
|
|
@@ -19,6 +19,10 @@ export declare class SemanticChartController {
|
|
|
19
19
|
* 取消订阅
|
|
20
20
|
*/
|
|
21
21
|
off(event: SemanticEventType, handler: (data?: unknown) => void): void;
|
|
22
|
+
/**
|
|
23
|
+
* 应用语义化 UI 配置
|
|
24
|
+
* @param config 语义化配置
|
|
25
|
+
*/
|
|
22
26
|
private doApplyConfig;
|
|
23
27
|
private applyIndicators;
|
|
24
28
|
private applyMAIndicator;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { KLineData } from '
|
|
1
|
+
import { KLineData } from '../../../types/price';
|
|
2
2
|
export interface PriceAxisOptions {
|
|
3
3
|
x: number;
|
|
4
4
|
y: number;
|
|
@@ -20,6 +20,8 @@ export interface PriceAxisOptions {
|
|
|
20
20
|
drawLeftBorder?: boolean;
|
|
21
21
|
/** 是否绘制刻度短线(默认 true) */
|
|
22
22
|
drawTickLines?: boolean;
|
|
23
|
+
/** 价格偏移量(用于价格轴平移时同步显示) */
|
|
24
|
+
priceOffset?: number;
|
|
23
25
|
}
|
|
24
26
|
/** 右侧价格轴(固定,不随 translate/scroll 变化) */
|
|
25
27
|
export declare function drawPriceAxis(ctx: CanvasRenderingContext2D, opts: PriceAxisOptions): void;
|
|
@@ -88,8 +90,6 @@ export interface CrosshairPriceLabelOptions {
|
|
|
88
90
|
textColor?: string;
|
|
89
91
|
fontSize?: number;
|
|
90
92
|
paddingX?: number;
|
|
91
|
-
/** 最新价,用于计算涨跌幅 */
|
|
92
|
-
lastPrice?: number;
|
|
93
93
|
}
|
|
94
94
|
export interface CrosshairTimeLabelOptions {
|
|
95
95
|
x: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { KLineData } from '
|
|
2
|
-
export { formatShanghaiDate } from '
|
|
1
|
+
import { KLineData } from '../../../types/price';
|
|
2
|
+
export { formatShanghaiDate } from '../../../utils/dateFormat';
|
|
3
3
|
export declare const UP_COLOR: "rgba(214, 10, 34, 1)";
|
|
4
4
|
export declare const DOWN_COLOR: "rgba(3, 123, 102, 1)";
|
|
5
5
|
export declare const NEUTRAL_COLOR: "rgba(0, 0, 0, 0.78)";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { KLineData } from '
|
|
1
|
+
import { KLineData } from '../../../types/price';
|
|
2
2
|
export declare function calcMAAtIndex(data: KLineData[], index: number, period: number): number | undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { KLineData } from '
|
|
2
|
-
import { VolumePriceRelation, VolumePriceConfig, DEFAULT_VOLUME_PRICE_CONFIG } from '
|
|
1
|
+
import { KLineData } from '../../types/price';
|
|
2
|
+
import { VolumePriceRelation, VolumePriceConfig, DEFAULT_VOLUME_PRICE_CONFIG } from '../../types/volumePrice';
|
|
3
3
|
export { DEFAULT_VOLUME_PRICE_CONFIG };
|
|
4
4
|
/**
|
|
5
5
|
* 成交量前缀和计算器
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@363045841yyt/klinechart",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": "^20.19.0 || >=22.12.0"
|
|
@@ -36,26 +36,26 @@
|
|
|
36
36
|
"vue": "^3.5.0"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"ajv": "^8.
|
|
40
|
-
"axios": "^1.15.
|
|
39
|
+
"ajv": "^8.20.0",
|
|
40
|
+
"axios": "^1.15.2"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@tsconfig/node24": "^24.0.4",
|
|
44
|
-
"@types/jsdom": "^
|
|
45
|
-
"@types/node": "^
|
|
44
|
+
"@types/jsdom": "^28.0.1",
|
|
45
|
+
"@types/node": "^25.6.0",
|
|
46
46
|
"@vitejs/plugin-vue": "^6.0.6",
|
|
47
|
-
"@vitest/coverage-v8": "^4.1.
|
|
48
|
-
"@vue/test-utils": "^2.4.
|
|
49
|
-
"@vue/tsconfig": "^0.
|
|
50
|
-
"jsdom": "^
|
|
47
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
48
|
+
"@vue/test-utils": "^2.4.10",
|
|
49
|
+
"@vue/tsconfig": "^0.9.1",
|
|
50
|
+
"jsdom": "^29.1.1",
|
|
51
51
|
"npm-run-all2": "^8.0.4",
|
|
52
|
-
"prettier": "3.
|
|
52
|
+
"prettier": "3.8.3",
|
|
53
53
|
"typedoc": "^0.28.19",
|
|
54
|
-
"typescript": "~
|
|
55
|
-
"vite": "^8.0.
|
|
54
|
+
"typescript": "~6.0.3",
|
|
55
|
+
"vite": "^8.0.10",
|
|
56
56
|
"vite-plugin-dts": "^4.5.4",
|
|
57
57
|
"vite-plugin-vue-devtools": "^8.1.1",
|
|
58
|
-
"vitest": "^4.1.
|
|
59
|
-
"vue-tsc": "^3.2.
|
|
58
|
+
"vitest": "^4.1.5",
|
|
59
|
+
"vue-tsc": "^3.2.7"
|
|
60
60
|
}
|
|
61
61
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|