@363045841yyt/klinechart 0.7.8 → 0.7.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"KLineChart.vue.d.ts","sourceRoot":"","sources":["../../src/components/KLineChart.vue"],"names":[],"mappings":"AA6GA;AAmzCA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,wCAAwC,CAAA;AAM/C,OAAO,EAKL,KAAK,gBAAgB,EAUtB,MAAM,2CAA2C,CAAA;AAMlD,KAAK,WAAW,GAAG;IACf,sBAAsB;IACtB,cAAc,EAAE,mBAAmB,CAAA;IAEnC,kCAAkC;IAClC,WAAW,EAAE,WAAW,CAAA;IAExB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW;IACX,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAC;AA0GJ,iBAAS,cAAc,SAEtB;AAoWD,iBAAS,UAAU,CACjB,WAAW,GAAE,gBAA2B,EACxC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GACjD,OAAO,CAUT;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,iBAAS,gBAAgB,IAAI,IAAI,CAKhC;AAiCD,iBAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,GAAG,IAAI,CAGlF;AA6GD,iBAAS,aAAa,SAoBrB;AAED,iBAAS,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,QAE9D;AA8rBD,QAAA,MAAM,YAAY;;;;;;;;uBAprBG,MAAM;wBACL,MAAM;;;;;;;;;;;;kBA7pBT,OAAO;gBAfT,MAAM;eACP,MAAM;eACN,MAAM;oBAED,MAAM;sBAEJ,MAAM;qBAEP,MAAM;gBAGX,MAAM;sBAEA,MAAM;6EAu1C3B,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"KLineChart.vue.d.ts","sourceRoot":"","sources":["../../src/components/KLineChart.vue"],"names":[],"mappings":"AA6GA;AAq0CA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,wCAAwC,CAAA;AAM/C,OAAO,EAKL,KAAK,gBAAgB,EAUtB,MAAM,2CAA2C,CAAA;AAMlD,KAAK,WAAW,GAAG;IACf,sBAAsB;IACtB,cAAc,EAAE,mBAAmB,CAAA;IAEnC,kCAAkC;IAClC,WAAW,EAAE,WAAW,CAAA;IAExB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW;IACX,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAC;AA0GJ,iBAAS,cAAc,SAEtB;AAoWD,iBAAS,UAAU,CACjB,WAAW,GAAE,gBAA2B,EACxC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GACjD,OAAO,CAUT;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,iBAAS,gBAAgB,IAAI,IAAI,CAKhC;AAqCD,iBAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,GAAG,IAAI,CAGlF;AA6GD,iBAAS,aAAa,SAoBrB;AAED,iBAAS,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,QAE9D;AA4sBD,QAAA,MAAM,YAAY;;;;;;;;uBAlsBG,MAAM;wBACL,MAAM;;;;;;;;;;;;kBAjqBT,OAAO;gBAfT,MAAM;eACP,MAAM;eACN,MAAM;oBAED,MAAM;sBAEJ,MAAM;qBAEP,MAAM;gBAGX,MAAM;sBAEA,MAAM;6EAy2C3B,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("vue"),t=require("@363045841yyt/klinechart-core"),n=require("@363045841yyt/klinechart-core/controllers"),r=require("@363045841yyt/klinechart-core/semantic"),i=require("@363045841yyt/klinechart-core/config");var a={class:`color-preset-tools`},o={class:`theme-tabs`,role:`tablist`,"aria-label":`颜色主题`},s=[`onClick`],c={class:`color-group-label`},l={class:`color-grid`},u=[`value`,`onInput`],d=(0,e.defineComponent)({__name:`ColorPresetPanel`,props:{colorPresetSettings:{}},emits:[`update:colorPresetSettings`],setup(n,{emit:r}){let i=n,d=r,f=[{value:`light`,label:`浅色`},{value:`dark`,label:`深色`}],p={canvas:`画布`,candle:`K线 / 成交量`,axis:`坐标轴`,interaction:`交互 / 标记`},m=(0,e.computed)(()=>Object.keys(p).map(e=>({group:e,label:p[e],items:t.COLOR_PRESET_ITEMS.filter(t=>t.group===e)})).filter(e=>e.items.length>0)),h=(0,e.ref)(`light`);function g(e,n){return(e===`dark`?t.darkTheme:t.lightTheme).colors[n]}function _(e){return(0,t.normalizeColorPresetSettings)(i.colorPresetSettings)[h.value]?.[e]??g(h.value,e)}function v(e,n){let r=(0,t.normalizeColorPresetSettings)(i.colorPresetSettings);d(`update:colorPresetSettings`,{...r,[h.value]:{...r[h.value],[e]:n}})}function y(){let e={...(0,t.normalizeColorPresetSettings)(i.colorPresetSettings)};delete e[h.value],d(`update:colorPresetSettings`,e)}return(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,null,[(0,e.createElementVNode)(`div`,a,[(0,e.createElementVNode)(`div`,o,[((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(f,t=>(0,e.createElementVNode)(`button`,{key:t.value,type:`button`,class:(0,e.normalizeClass)([`theme-tab`,{active:h.value===t.value}]),onClick:e=>h.value=t.value},(0,e.toDisplayString)(t.label),11,s)),64))]),(0,e.createElementVNode)(`button`,{type:`button`,class:`color-reset-btn`,onClick:y},` 重置颜色 `)]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(m.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:t.group},[(0,e.createElementVNode)(`div`,c,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,l,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.items,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`label`,{key:t.key,class:`color-item`},[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`input`,{type:`color`,class:`color-input`,value:_(t.key),onInput:e=>v(t.key,e.target.value)},null,40,u)]))),128))])],64))),128))]))}}),f=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},p=f(d,[[`__scopeId`,`data-v-a52947a4`]]),m={class:`toolbar-item color-item`,title:`颜色`},h=[`value`],g=[`value`],_=[`value`],v=f((0,e.defineComponent)({__name:`DrawingStyleToolbar`,props:{drawing:{}},emits:[`updateStyle`,`delete`],setup(t,{emit:n}){let r=n;function i(e){e.key===`Delete`&&(e.preventDefault(),r(`delete`))}(0,e.onMounted)(()=>document.addEventListener(`keydown`,i)),(0,e.onUnmounted)(()=>document.removeEventListener(`keydown`,i));function a(e){r(`updateStyle`,{stroke:e})}function o(e){r(`updateStyle`,{strokeWidth:e})}function s(e){r(`updateStyle`,{strokeStyle:e})}return(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:`drawing-style-toolbar`,onPointerdown:r[4]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[5]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[6]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,m,[(0,e.createElementVNode)(`span`,{class:`color-swatch`,style:(0,e.normalizeStyle)({background:t.drawing.style.stroke??`#2962ff`})},null,4),(0,e.createElementVNode)(`input`,{type:`color`,class:`color-input`,value:t.drawing.style.stroke??`#2962ff`,onInput:r[0]||=e=>a(e.target.value)},null,40,h)]),(0,e.createElementVNode)(`select`,{class:`toolbar-select`,value:t.drawing.style.strokeWidth??1,onChange:r[1]||=e=>o(Number(e.target.value)),title:`线宽`},[...r[7]||=[(0,e.createElementVNode)(`option`,{value:1},`1px`,-1),(0,e.createElementVNode)(`option`,{value:2},`2px`,-1),(0,e.createElementVNode)(`option`,{value:3},`3px`,-1),(0,e.createElementVNode)(`option`,{value:4},`4px`,-1)]],40,g),(0,e.createElementVNode)(`select`,{class:`toolbar-select`,value:t.drawing.style.strokeStyle??`solid`,onChange:r[2]||=e=>s(e.target.value),title:`线型`},[...r[8]||=[(0,e.createElementVNode)(`option`,{value:`solid`},`实线`,-1),(0,e.createElementVNode)(`option`,{value:`dashed`},`虚线`,-1),(0,e.createElementVNode)(`option`,{value:`dotted`},`点线`,-1)]],40,_),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn delete-btn`,title:`删除`,onClick:r[3]||=e=>n.$emit(`delete`)},[...r[9]||=[(0,e.createElementVNode)(`svg`,{class:`delete-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[(0,e.createElementVNode)(`path`,{d:`M3 6h18`}),(0,e.createElementVNode)(`path`,{d:`M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6`}),(0,e.createElementVNode)(`path`,{d:`M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2`})],-1)]])],32))}}),[[`__scopeId`,`data-v-02a1f4d6`]]),y=Symbol(`fullscreen-teleport-target`);function b(t){(0,e.provide)(y,t)}function x(){let t=(0,e.inject)(y,null);return(0,e.computed)(()=>t?.value??`body`)}var S={class:`params-header`},C={class:`header-left`},w={class:`params-title`},T={class:`header-right`},E={key:0,class:`indicator-description`},D={class:`params-body`},ee={class:`param-header`},O={class:`param-label`},k={class:`param-label-text`},A={key:0,class:`param-range`},te={class:`input-wrapper`},j=[`disabled`,`onClick`],M=[`value`,`min`,`max`,`step`,`onInput`],N=[`disabled`,`onClick`],ne={key:0,class:`param-description`},P={class:`params-footer`},F={class:`footer-right`},I=f((0,e.defineComponent)({__name:`IndicatorParams`,props:{visible:{type:Boolean},indicatorId:{},indicatorName:{},indicatorDescription:{},params:{},values:{}},emits:[`close`,`confirm`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)({...r.values}),o=(0,e.ref)(!0),s=x();(0,e.watch)(()=>r.values,e=>{a.value={...e}},{deep:!0,immediate:!0}),(0,e.watch)(()=>r.visible,e=>{e&&(a.value={...r.values})});function c(e,t){let n=t.target,r=parseFloat(n.value);isNaN(r)||(a.value[e]=r)}function l(e,t){let n=e.step||1,r=(a.value[e.key]||0)+t*n;e.min!==void 0&&(r=Math.max(e.min,r)),e.max!==void 0&&(r=Math.min(e.max,r)),a.value[e.key]=parseFloat(r.toFixed(10))}function u(){let e={};r.params.forEach(t=>{e[t.key]=t.default??r.values[t.key]??0}),a.value=e}function d(){i(`confirm`,{...a.value})}return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(s)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[t.visible?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`params-overlay`,onClick:r[4]||=e=>n.$emit(`close`)},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:`indicator-params`,onClick:r[3]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,S,[(0,e.createElementVNode)(`div`,C,[(0,e.createElementVNode)(`span`,w,(0,e.toDisplayString)(t.indicatorName),1),r[5]||=(0,e.createElementVNode)(`span`,{class:`params-subtitle`},`参数设置`,-1)]),(0,e.createElementVNode)(`div`,T,[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`toggle-desc-btn`,{active:o.value}]),onClick:r[0]||=e=>o.value=!o.value,title:`显示/隐藏说明`},[...r[6]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 1024 1024`},[(0,e.createElementVNode)(`path`,{d:`M512 97.52381c228.912762 0 414.47619 185.563429 414.47619 414.47619s-185.563429 414.47619-414.47619 414.47619S97.52381 740.912762 97.52381 512 283.087238 97.52381 512 97.52381z m0 73.142857C323.486476 170.666667 170.666667 323.486476 170.666667 512s152.81981 341.333333 341.333333 341.333333 341.333333-152.81981 341.333333-341.333333S700.513524 170.666667 512 170.666667z m36.571429 268.190476v292.571428h-73.142858V438.857143h73.142858z m0-121.904762v73.142857h-73.142858v-73.142857h73.142858z`,fill:`currentColor`})],-1)]],2),(0,e.createElementVNode)(`button`,{class:`params-close`,onClick:r[1]||=e=>n.$emit(`close`)},[...r[7]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M18 6L6 18M6 6l12 12`})],-1)]])])]),(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[o.value&&t.indicatorDescription?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,E,[(0,e.createElementVNode)(`p`,null,(0,e.toDisplayString)(t.indicatorDescription),1)])):(0,e.createCommentVNode)(``,!0)]),_:1}),(0,e.createElementVNode)(`div`,D,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.params,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.key,class:(0,e.normalizeClass)([`param-item`,{"has-desc":o.value&&t.description}])},[(0,e.createElementVNode)(`div`,ee,[(0,e.createElementVNode)(`label`,O,[(0,e.createElementVNode)(`span`,k,(0,e.toDisplayString)(t.label),1),t.min!==void 0||t.max!==void 0?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,A,(0,e.toDisplayString)(t.min??`-∞`)+` ~ `+(0,e.toDisplayString)(t.max??`+∞`),1)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,te,[(0,e.createElementVNode)(`button`,{class:`stepper-btn`,disabled:t.min!==void 0&&(a.value[t.key]??0)<=t.min,onClick:e=>l(t,-1)},` − `,8,j),t.type===`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`input`,{key:0,type:`number`,class:`param-input`,value:a.value[t.key],min:t.min,max:t.max,step:t.step||1,onInput:e=>c(t.key,e)},null,40,M)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`button`,{class:`stepper-btn`,disabled:t.max!==void 0&&(a.value[t.key]??0)>=t.max,onClick:e=>l(t,1)},` + `,8,N)])]),(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[o.value&&t.description?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ne,(0,e.toDisplayString)(t.description),1)):(0,e.createCommentVNode)(``,!0)]),_:2},1024)],2))),128))]),(0,e.createElementVNode)(`div`,P,[(0,e.createElementVNode)(`button`,{class:`params-btn reset`,onClick:u},[...r[8]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}),(0,e.createElementVNode)(`path`,{d:`M3 3v5h5`})],-1),(0,e.createTextVNode)(` 重置 `,-1)]]),(0,e.createElementVNode)(`div`,F,[(0,e.createElementVNode)(`button`,{class:`params-btn cancel`,onClick:r[2]||=e=>n.$emit(`close`)},`取消`),(0,e.createElementVNode)(`button`,{class:`params-btn confirm`,onClick:d},[...r[9]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`},[(0,e.createElementVNode)(`path`,{d:`M20 6L9 17l-5-5`})],-1),(0,e.createTextVNode)(` 确定 `,-1)]])])])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))}}),[[`__scopeId`,`data-v-30f2f611`]]),re={class:`indicator-selector`},ie={class:`indicator-scroll-container`},L={class:`indicator-list`},R={key:0,class:`indicator-divider`,"aria-hidden":`true`},z=[`draggable`,`onDragstart`,`onDragover`,`onDrop`],ae=[`onMouseenter`],oe={class:`btn-content`},B={key:0,class:`param-hint`},V={key:0,class:`hover-overlay`},H=[`onClick`],se={key:1,class:`divider`},ce=[`onClick`],U={class:`indicator-item`},W={class:`modal-header`},le={class:`header-title`},ue={class:`title-sub`},de={class:`header-actions`},fe={key:0,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},pe={key:1,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},me={class:`modal-body`},he={class:`search-box`},ge=[`value`],_e={key:0,class:`indicator-section`},ve={class:`section-header`},ye={class:`section-count`},be=[`onClick`],xe={class:`card-label`},Se={class:`card-tooltip`},Ce={class:`card-header`},we={class:`card-label`},Te={class:`card-header-actions`},Ee=[`onClick`],De={class:`card-name`},Oe={key:1,class:`section-divider`},ke={key:2,class:`no-results`},Ae={key:3,class:`indicator-section`},je={class:`section-header`},Me={class:`section-count`},Ne=[`onClick`],Pe={class:`card-label`},Fe={class:`card-tooltip`},Ie={class:`card-header`},Le={class:`card-label`},Re={class:`card-header-actions`},ze=[`onClick`],Be={class:`card-name`},Ve={class:`modal-footer`},G={class:`footer-info`},K={class:`info-text`},He=f((0,e.defineComponent)({__name:`IndicatorSelector`,props:{activeIndicators:{},indicatorParams:{}},emits:[`toggle`,`updateParams`,`reorderSubIndicators`],setup(t,{emit:r}){let i=t,a=r;function o(e){return e.map(e=>({id:e.id,label:e.label,name:e.name,description:e.description,role:e.pane,params:(e.params??[]).map(e=>({key:e.key,label:e.label,type:e.type,default:e.default??(e.type===`number`?0:``),min:e.min,max:e.max,step:e.step}))}))}let s=(0,n.createIndicatorSelectorController)({catalog:o(n.allIndicators)}),c=$(s.menuOpen),l=$(s.searchQuery),u=$(s.filteredMain),d=$(s.filteredSub),f=(0,e.computed)(()=>u.value.length>0||d.value.length>0),p=s.catalog.peek().length,m=(0,e.ref)(null),h=(0,e.ref)(!1),g=(0,e.ref)(null),_=(0,e.ref)(null),v=(0,e.ref)(null),y=(0,e.ref)(null),b=(0,e.ref)(!1),S=x(),C=(0,e.computed)(()=>i.activeIndicators?.length?i.activeIndicators.map(e=>(0,n.findIndicator)(e)).filter(e=>e!==void 0).sort((e,t)=>e.pane===t.pane?0:e.pane===`main`?-1:1):[]),w=(0,e.computed)(()=>C.value.some(e=>e.pane===`main`)?C.value.find(e=>e.pane===`sub`)?.id??null:null),T=(0,e.computed)(()=>g.value?(0,n.findIndicator)(g.value):null),E=(0,e.computed)(()=>i.activeIndicators?.length??0);function D(e){return i.activeIndicators?.includes(e)??!1}function ee(e){if(D(e))return;let t=(0,n.findIndicator)(e);t&&(t.pane===`main`&&n.allIndicators.filter(t=>t.id!==e&&D(t.id)&&t.pane===`main`).forEach(e=>a(`toggle`,e.id,!1)),a(`toggle`,e,!0))}function O(e){a(`toggle`,e,!1)}function k(e){g.value=e,h.value=!0}function A(e){let t=(0,n.findIndicator)(e);if(!t?.params)return{};let r={};for(let e of t.params)r[e.key]=e.default??e.min??1;let a=i.indicatorParams?.[e]||{},o={...r};for(let[e,t]of Object.entries(a))typeof t==`number`&&(o[e]=t);return o}function te(e){let t=A(e.id);return e.params?e.params.map(e=>t[e.key]??``).join(`,`):``}function j(e){g.value&&a(`updateParams`,g.value,e),h.value=!1}function M(e,t){if(!(0,n.isSubIndicatorId)(t)){e.preventDefault();return}y.value=t,v.value=null,e.dataTransfer?.setData(`text/plain`,t),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}function N(e,t){!y.value||!(0,n.isSubIndicatorId)(t)||y.value===t||(v.value=t,e.dataTransfer&&(e.dataTransfer.dropEffect=`move`))}function ne(e,t){let r=y.value||e.dataTransfer?.getData(`text/plain`)||``;if(!r||r===t){P();return}if(!(0,n.isSubIndicatorId)(r)||!(0,n.isSubIndicatorId)(t)){P();return}let i=C.value.findIndex(e=>e.id===r),o=C.value.findIndex(e=>e.id===t);if(i<0||o<0){P();return}let s=[...C.value.map(e=>e.id)],[c]=s.splice(i,1);if(!c){P();return}s.splice(o,0,c),a(`reorderSubIndicators`,s.filter(e=>(0,n.isSubIndicatorId)(e))),P()}function P(){v.value=null,y.value=null}function F(e){e.key===`Escape`&&s.menuOpen.peek()&&s.closeMenu()}return(0,e.onMounted)(()=>{document.addEventListener(`keydown`,F)}),(0,e.onUnmounted)(()=>{document.removeEventListener(`keydown`,F)}),(t,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,re,[(0,e.createElementVNode)(`div`,ie,[(0,e.createElementVNode)(`div`,L,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(C.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:t.id},[t.id===w.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,R)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-item`,{draggable:(0,e.unref)(n.isSubIndicatorId)(t.id),"drag-over":v.value===t.id,"is-dragging":y.value===t.id}]),draggable:(0,e.unref)(n.isSubIndicatorId)(t.id),onDragstart:e=>M(e,t.id),onDragover:(0,e.withModifiers)(e=>N(e,t.id),[`prevent`]),onDrop:(0,e.withModifiers)(e=>ne(e,t.id),[`prevent`]),onDragend:P},[(0,e.createElementVNode)(`div`,{class:`indicator-btn-wrapper`,onMouseenter:e=>_.value=t.id,onMouseleave:r[0]||=e=>_.value=null},[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`indicator-btn`,{active:!0,hovering:_.value===t.id}])},[(0,e.createElementVNode)(`span`,oe,[(0,e.createTextVNode)((0,e.toDisplayString)(t.label)+` `,1),t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,B,` (`+(0,e.toDisplayString)(te(t))+`) `,1)):(0,e.createCommentVNode)(``,!0)]),(0,e.createVNode)(e.Transition,{name:`fade`},{default:(0,e.withCtx)(()=>[_.value===t.id?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,V,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`action-btn settings-btn`,onClick:(0,e.withModifiers)(e=>k(t.id),[`stop`]),title:`编辑参数`},[...r[9]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`})],-1)]],8,H)):(0,e.createCommentVNode)(``,!0),t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,se)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`button`,{class:`action-btn remove-btn`,onClick:(0,e.withModifiers)(e=>O(t.id),[`stop`]),title:`移除指标`},[...r[10]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z`})],-1)]],8,ce)])):(0,e.createCommentVNode)(``,!0)]),_:2},1024)],2)],40,ae)],42,z)],64))),128)),(0,e.createElementVNode)(`div`,U,[(0,e.createElementVNode)(`button`,{ref_key:`addBtnRef`,ref:m,class:`add-btn`,onClick:r[1]||=(0,e.withModifiers)(t=>(0,e.unref)(s).toggleMenu(),[`stop`]),title:`添加指标`},[...r[11]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z`})],-1)]],512)])])]),((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(S)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[(0,e.unref)(c)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`selector-overlay`,onClick:r[7]||=t=>(0,e.unref)(s).closeMenu()},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.unref)(c)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`selector-modal`,onClick:r[6]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,W,[(0,e.createElementVNode)(`div`,le,[r[12]||=(0,e.createElementVNode)(`span`,{class:`title-text`},`添加指标`,-1),(0,e.createElementVNode)(`span`,ue,(0,e.toDisplayString)((0,e.unref)(p))+` 个可用指标`,1)]),(0,e.createElementVNode)(`div`,de,[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`view-toggle-btn`,{active:b.value}]),onClick:r[2]||=e=>b.value=!b.value,title:`简洁模式`},[b.value?((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,pe,[...r[14]||=[(0,e.createElementVNode)(`path`,{d:`M3 3h18v18H3V3zm16 16V5H5v14h14zM7 7h4v4H7V7zm0 6h4v4H7v-4zm6-6h4v4h-4V7zm0 6h4v4h-4v-4z`},null,-1)]])):((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,fe,[...r[13]||=[(0,e.createElementVNode)(`path`,{d:`M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z`},null,-1)]]))],2),(0,e.createElementVNode)(`button`,{class:`modal-close`,onClick:r[3]||=t=>(0,e.unref)(s).closeMenu(),title:`关闭`},[...r[15]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z`})],-1)]])])]),(0,e.createElementVNode)(`div`,me,[(0,e.createElementVNode)(`div`,he,[r[16]||=(0,e.createElementVNode)(`svg`,{class:`search-icon`,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z`})],-1),(0,e.createElementVNode)(`input`,{value:(0,e.unref)(l),onInput:r[4]||=t=>(0,e.unref)(s).setSearchQuery(t.target.value),type:`text`,class:`search-input`,placeholder:`搜索指标名称...`},null,40,ge)]),(0,e.unref)(u).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,_e,[(0,e.createElementVNode)(`div`,ve,[r[17]||=(0,e.createElementVNode)(`span`,{class:`section-title`},`主图指标`,-1),(0,e.createElementVNode)(`span`,ye,(0,e.toDisplayString)((0,e.unref)(u).length),1)]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-grid`,{compact:b.value}])},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(u),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.id,class:(0,e.normalizeClass)([`indicator-card`,{active:D(t.id),compact:b.value}]),onClick:e=>D(t.id)?O(t.id):ee(t.id)},[b.value?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`span`,xe,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`span`,Se,(0,e.toDisplayString)(t.name),1)],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,Ce,[(0,e.createElementVNode)(`span`,we,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,Te,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`card-settings-btn`,onClick:(0,e.withModifiers)(e=>k(t.id),[`stop`]),title:`编辑参数`},[...r[18]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`})],-1)]],8,Ee)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,De,(0,e.toDisplayString)(t.name),1)],64))],10,be))),128))],2)])):(0,e.createCommentVNode)(``,!0),(0,e.unref)(u).length>0&&(0,e.unref)(d).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Oe)):(0,e.createCommentVNode)(``,!0),!f.value&&(0,e.unref)(l).trim()?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ke,[...r[19]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`48`,height:`48`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z`})],-1),(0,e.createElementVNode)(`p`,null,`未找到匹配的指标`,-1),(0,e.createElementVNode)(`span`,{class:`no-results-hint`},`请尝试其他关键词`,-1)]])):(0,e.createCommentVNode)(``,!0),(0,e.unref)(d).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ae,[(0,e.createElementVNode)(`div`,je,[r[20]||=(0,e.createElementVNode)(`span`,{class:`section-title`},`副图指标`,-1),(0,e.createElementVNode)(`span`,Me,(0,e.toDisplayString)((0,e.unref)(d).length),1)]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-grid`,{compact:b.value}])},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(d),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.id,class:(0,e.normalizeClass)([`indicator-card`,{active:D(t.id),compact:b.value}]),onClick:e=>D(t.id)?O(t.id):ee(t.id)},[b.value?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`span`,Pe,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`span`,Fe,(0,e.toDisplayString)(t.name),1)],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,Ie,[(0,e.createElementVNode)(`span`,Le,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,Re,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`card-settings-btn`,onClick:(0,e.withModifiers)(e=>k(t.id),[`stop`]),title:`编辑参数`},[...r[21]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`})],-1)]],8,ze)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,Be,(0,e.toDisplayString)(t.name),1)],64))],10,Ne))),128))],2)])):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,Ve,[(0,e.createElementVNode)(`div`,G,[(0,e.createElementVNode)(`span`,K,`已激活 `+(0,e.toDisplayString)(E.value)+` 个指标`,1)]),(0,e.createElementVNode)(`button`,{class:`btn btn-confirm`,onClick:r[5]||=t=>(0,e.unref)(s).closeMenu()},`确认`)])])):(0,e.createCommentVNode)(``,!0)]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`])),T.value?((0,e.openBlock)(),(0,e.createBlock)(I,{key:0,visible:h.value,"indicator-id":T.value.id,"indicator-name":T.value.name,"indicator-description":T.value.description,params:T.value.params||[],values:A(T.value.id),onClose:r[8]||=e=>h.value=!1,onConfirm:j},null,8,[`visible`,`indicator-id`,`indicator-name`,`indicator-description`,`params`,`values`])):(0,e.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-01a99263`]]),Ue={class:`kline-tooltip__title`},We={key:0},q={class:`kline-tooltip__grid`},Ge={class:`row`},Ke={class:`row`},qe={class:`row`},Je={class:`row`},Ye={key:0,class:`row`},Xe={key:1,class:`row`},Ze={key:2,class:`row`},Qe={key:3,class:`row`},$e={key:4,class:`row`},et={key:5,class:`row`},J=`#6b7280`,tt=f((0,e.defineComponent)({__name:`KLineTooltip`,props:{k:{},index:{},data:{},pos:{},useAnchor:{type:Boolean},anchorPlacement:{},setEl:{},upColor:{default:`#ef4444`},downColor:{default:`#22c55e`}},setup(t){let n=t,r=(0,e.computed)(()=>n.useAnchor===!0),i=(0,e.computed)(()=>n.anchorPlacement===`left-bottom`?`anchor-left-bottom`:`anchor-right-bottom`);function a(e){n.setEl?.(e)}function o(e){let t=new Date(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function s(e){return e>=1e8?(e/1e8).toFixed(2)+`亿`:e>=1e4?(e/1e4).toFixed(2)+`万`:e.toFixed(2)}function c(e,t){return`${e>=0?`+`:``}${e.toFixed(2)}${t}`}function l(e,t,n){if(e.close>=e.open)return 1;let r=typeof n==`number`&&n>0?t[n-1]:void 0;return r&&e.close>r.close?1:r&&e.close<r.close?-1:0}let u=(0,e.computed)(()=>{let e=n.k;if(!e)return J;let t=l(e,n.data,n.index);return t>0?n.upColor:t<0?n.downColor:J}),d=(0,e.computed)(()=>{let e=n.k;if(!e)return J;let t=e.close-e.open;return t>0?n.upColor:t<0?n.downColor:J}),f=(0,e.computed)(()=>{let e=n.k;if(!e)return J;let t=e.changePercent??(e.close-e.open)/e.open*100;return t>0?n.upColor:t<0?n.downColor:J});return(n,l)=>t.k?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref:a,class:(0,e.normalizeClass)([`kline-tooltip`,[{"use-anchor":r.value},i.value]]),style:(0,e.normalizeStyle)(r.value?void 0:{left:`${t.pos.x}px`,top:`${t.pos.y}px`})},[(0,e.createElementVNode)(`div`,Ue,[t.k.stockCode?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,We,(0,e.toDisplayString)(t.k.stockCode),1)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(o(t.k.timestamp)),1)]),(0,e.createElementVNode)(`div`,q,[(0,e.createElementVNode)(`div`,Ge,[l[0]||=(0,e.createElementVNode)(`span`,null,`开`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:u.value})},(0,e.toDisplayString)(t.k.open.toFixed(2)),5)]),(0,e.createElementVNode)(`div`,Ke,[l[1]||=(0,e.createElementVNode)(`span`,null,`高`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.k.high.toFixed(2)),1)]),(0,e.createElementVNode)(`div`,qe,[l[2]||=(0,e.createElementVNode)(`span`,null,`低`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.k.low.toFixed(2)),1)]),(0,e.createElementVNode)(`div`,Je,[l[3]||=(0,e.createElementVNode)(`span`,null,`收`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:d.value})},(0,e.toDisplayString)(t.k.close.toFixed(2)),5)]),typeof t.k.volume==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ye,[l[4]||=(0,e.createElementVNode)(`span`,null,`成交量`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(s(t.k.volume)),1)])):(0,e.createCommentVNode)(``,!0),typeof t.k.turnover==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Xe,[l[5]||=(0,e.createElementVNode)(`span`,null,`成交额`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(s(t.k.turnover)),1)])):(0,e.createCommentVNode)(``,!0),typeof t.k.amplitude==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ze,[l[6]||=(0,e.createElementVNode)(`span`,null,`振幅`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.k.amplitude)+`%`,1)])):(0,e.createCommentVNode)(``,!0),typeof t.k.changePercent==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Qe,[l[7]||=(0,e.createElementVNode)(`span`,null,`涨跌幅`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:f.value})},(0,e.toDisplayString)(c(t.k.changePercent,`%`)),5)])):(0,e.createCommentVNode)(``,!0),typeof t.k.changeAmount==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,$e,[l[8]||=(0,e.createElementVNode)(`span`,null,`涨跌额`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:f.value})},(0,e.toDisplayString)(c(t.k.changeAmount,``)),5)])):(0,e.createCommentVNode)(``,!0),typeof t.k.turnoverRate==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,et,[l[9]||=(0,e.createElementVNode)(`span`,null,`换手率`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.k.turnoverRate.toFixed(2))+`%`,1)])):(0,e.createCommentVNode)(``,!0)])],6)):(0,e.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-a068b75e`]]),nt={class:`marker-tooltip__title`},Y={key:0,class:`marker-tooltip__content`},rt=f((0,e.defineComponent)({__name:`MarkerTooltip`,props:{marker:{},pos:{},useAnchor:{type:Boolean},anchorPlacement:{},setEl:{type:Function}},setup(t){let n={support:`支撑位`,resistance:`阻力位`,top:`顶部`,bottom:`底部`},r=t,i=(0,e.computed)(()=>r.useAnchor===!0),a=(0,e.computed)(()=>r.anchorPlacement===`left-bottom`?`anchor-left-bottom`:`anchor-right-bottom`);function o(e){r.setEl?.(e)}let s=(0,e.computed)(()=>r.marker&&`date`in r.marker),c=(0,e.computed)(()=>{if(!r.marker)return``;if(s.value){let e=r.marker;return e.label?.text||e.shape}let e=r.marker;return n[e.markerType]||e.markerType}),l=(0,e.computed)(()=>{if(!r.marker)return{};if(s.value){let e=r.marker;return{日期:e.date,...e.metadata}}return r.marker.metadata}),u=(0,e.computed)(()=>Object.keys(l.value).length>0);function d(e){return typeof e==`number`?e.toFixed(2):String(e)}return(n,r)=>t.marker?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref:o,class:(0,e.normalizeClass)([`marker-tooltip`,[{"use-anchor":i.value},a.value]]),style:(0,e.normalizeStyle)(i.value?void 0:{left:`${t.pos.x+12}px`,top:`${t.pos.y+12}px`})},[(0,e.createElementVNode)(`div`,nt,(0,e.toDisplayString)(c.value),1),u.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Y,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(l.value,(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n,class:`row`},[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n),1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(d(t)),1)]))),128))])):(0,e.createCommentVNode)(``,!0)],6)):(0,e.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-f2a21012`]]),it={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function at(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,it,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M7.904 17.563a1.2 1.2 0 0 0 2.228.308l2.09-3.093l4.907 4.907a1.067 1.067 0 0 0 1.509 0l1.047-1.047a1.067 1.067 0 0 0 0-1.509l-4.907-4.907l3.113-2.09a1.2 1.2 0 0 0-.309-2.228L4 4z`},null,-1)]])}var ot=(0,e.markRaw)({name:`tabler-pointer`,render:at}),st={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ct(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,st,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 19h16M4 15l4-6l4 2l4-5l4 4`},null,-1)]])}var lt=(0,e.markRaw)({name:`tabler-chart-line`,render:ct}),ut={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,ut,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M17 7L7 17M8 7h9v9`},null,-1)]])}var ft=(0,e.markRaw)({name:`tabler-arrow-up-right`,render:dt}),pt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,pt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-6 6l6-6m-6-6l6 6`},null,-1)]])}var ht=(0,e.markRaw)({name:`tabler-arrow-right`,render:mt}),gt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _t(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,gt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14`},null,-1)]])}var vt=(0,e.markRaw)({name:`tabler-minus`,render:_t}),yt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,yt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 12v.01M7 12h10m4 0v.01`},null,-1)]])}var xt=(0,e.markRaw)({name:`tabler-separator`,render:bt}),St={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ct(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,St,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2M9 12h6m-3-3v6`},null,-1)]])}var wt=(0,e.markRaw)({name:`tabler-crosshair`,render:Ct}),Tt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Et(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Tt,[...n[0]||=[(0,e.createElementVNode)(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m9-3h.01`}),(0,e.createElementVNode)(`path`,{d:`M11 12h1v4h1`})],-1)]])}var Dt=(0,e.markRaw)({name:`tabler-info-circle`,render:Et}),Ot={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Ot,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m-3-3v6m11 8l-6-6`},null,-1)]])}var At=(0,e.markRaw)({name:`tabler-zoom-in`,render:kt}),jt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Mt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,jt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m8 11l-6-6`},null,-1)]])}var Nt=(0,e.markRaw)({name:`tabler-zoom-out`,render:Mt}),Pt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ft(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Pt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2`},null,-1)]])}var It=(0,e.markRaw)({name:`tabler-maximize`,render:Ft}),Lt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Rt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Lt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 19v-2a2 2 0 0 1 2-2h2M15 5v2a2 2 0 0 0 2 2h2M5 15h2a2 2 0 0 1 2 2v2M5 9h2a2 2 0 0 0 2-2V5`},null,-1)]])}var zt=(0,e.markRaw)({name:`tabler-minimize`,render:Rt}),Bt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Vt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Bt,[...n[0]||=[(0,e.createElementVNode)(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 0 0-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 0 0-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 0 0-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 0 0-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 0 0 1.066-2.573c-.94-1.543.826-3.31 2.37-2.37c1 .608 2.296.07 2.572-1.065`}),(0,e.createElementVNode)(`path`,{d:`M9 12a3 3 0 1 0 6 0a3 3 0 0 0-6 0`})],-1)]])}var Ht=(0,e.markRaw)({name:`tabler-settings`,render:Vt}),Ut={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Wt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Ut,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 5a2 2 0 1 0 4 0a2 2 0 1 0-4 0m14 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0M3 19a2 2 0 1 0 4 0a2 2 0 1 0-4 0m14 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0M5 7v10M7 5h10M7 19h10m2-12v10`},null,-1)]])}var Gt=(0,e.markRaw)({name:`tabler-shape`,render:Wt}),Kt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Kt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 7a2 2 0 1 0 4 0a2 2 0 1 0-4 0m11 8a2 2 0 1 0 4 0a2 2 0 1 0-4 0m1-9a3 3 0 1 0 6 0a3 3 0 1 0-6 0M3 18a3 3 0 1 0 6 0a3 3 0 1 0-6 0m6-1l5-1.5m-7.5-7l7.81 5.37M7 7l8-1`},null,-1)]])}var Jt=(0,e.markRaw)({name:`tabler-chart-dots-3`,render:qt}),Yt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Xt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Yt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m18 10l-6-6l-6 6zm0 4l-6 6l-6-6z`},null,-1)]])}var Zt=(0,e.markRaw)({name:`tabler-caret-up-down`,render:Xt}),Qt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function $t(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Qt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 4H5v16h3m8-16h3v16h-3`},null,-1)]])}var en=(0,e.markRaw)({name:`tabler-brackets`,render:$t});function tn(){return Object.create(null)}function nn(){return{ctxMethods:tn(),ctxProps:tn(),canvasProps:tn(),ctxMethodSources:Object.create(null)}}function rn(e,t,n){let r=e[t]??={count:0,totalTime:0};r.count+=1,r.totalTime+=n}function an(e,t,n,r){rn(e.ctxMethodSources[t]??=tn(),n,r)}function on(e){return Object.entries(e).filter(([,e])=>e.count>0).map(([e,t])=>({name:e,count:t.count,totalTime:t.totalTime.toFixed(2),averageTime:(t.totalTime/t.count).toFixed(4)})).sort((e,t)=>Number(t.totalTime)-Number(e.totalTime))}var X=!1,sn=new Map,cn=new Map;function ln(e){X=e,e?typeof window<`u`&&!window.__KMAP_CANVAS_PROFILER_INSTALLED__&&dn():fn()}function un(){if(!X)return`disabled`;let e=Error().stack;if(!e)return`unknown`;let t=e.split(`
2
- `).map(e=>e.trim()).filter(Boolean);for(let e of t){if(e.includes(`canvasProfiler`)||e.includes(`CanvasRenderingContext2D`)||e===`Error`)continue;let t=e.replace(/^at\s+/,``),n=t.match(/((?:src|node_modules)[^\s)]+):(\d+):(\d+)/);if(n)return`${n[1]}:${n[2]}`;let r=t.match(/\(([^)]+):(\d+):(\d+)\)$/);return r?`${r[1]}:${r[2]}`:t}return`unknown`}function Z(e,t,n,r){let i=`${e.constructor?.name??`proto`}:${t}`;if(sn.has(i))return;let a=Reflect.get(e,t);typeof a==`function`&&(sn.set(i,a),Reflect.set(e,t,function(...e){if(!X)return a.apply(this,e);let i=r?.captureSource?un():null,o=performance.now(),s=a.apply(this,e),c=performance.now()-o;return rn(n.ctxMethods,t,c),i&&an(n,t,i,c),s}))}function Q(e,t,n){let r=Object.getOwnPropertyDescriptor(e,t);if(!r?.set||!r.configurable)return;let i=`${e.constructor?.name??`proto`}:${t}`;cn.has(i)||(cn.set(i,r),Object.defineProperty(e,t,{configurable:!0,enumerable:r.enumerable??!1,get:r.get,set(e){if(!X){r.set.call(this,e);return}let i=performance.now();r.set.call(this,e),rn(n,t,performance.now()-i)}}))}function dn(){if(typeof window>`u`||window.__KMAP_CANVAS_PROFILER_INSTALLED__)return;let e=CanvasRenderingContext2D?.prototype,t=HTMLCanvasElement?.prototype;if(!e||!t)return;let n=nn();Z(e,`fillText`,n,{captureSource:!0}),Z(e,`measureText`,n,{captureSource:!0}),Z(e,`drawImage`,n),Z(e,`save`,n),Z(e,`restore`,n),Z(e,`clip`,n),Z(e,`setTransform`,n),Z(e,`scale`,n),Q(e,`font`,n.ctxProps),Q(e,`filter`,n.ctxProps),Q(e,`shadowBlur`,n.ctxProps),Q(e,`lineWidth`,n.ctxProps),Q(t,`width`,n.canvasProps),Q(t,`height`,n.canvasProps),window.__KMAP_CANVAS_PROFILER_METRICS__=n,window.__KMAP_CANVAS_PROFILER_INSTALLED__=!0,window.showCanvasReport=()=>{let e=window.__KMAP_CANVAS_PROFILER_METRICS__;if(e){console.group(`[kmap] Canvas profiler report`),console.log(`ctx methods`),console.table(on(e.ctxMethods)),console.log(`ctx props`),console.table(on(e.ctxProps)),console.log(`canvas props`),console.table(on(e.canvasProps));for(let t of[`fillText`,`measureText`]){let n=e.ctxMethodSources[t];n&&(console.log(`${t} sources`),console.table(on(n).slice(0,20)))}console.groupEnd()}},window.resetCanvasReport=()=>{window.__KMAP_CANVAS_PROFILER_METRICS__=nn()},console.info(`[kmap] Canvas profiler enabled. Use window.showCanvasReport() and window.resetCanvasReport().`)}function fn(){if(typeof window>`u`||!window.__KMAP_CANVAS_PROFILER_INSTALLED__)return;let e=CanvasRenderingContext2D?.prototype,t=HTMLCanvasElement?.prototype;sn.forEach((n,r)=>{let i=r.match(/^(.+):(.+)$/);if(!i)return;let[,a,o]=i,s=null;a===`CanvasRenderingContext2D`?s=e:a===`HTMLCanvasElement`&&(s=t),s&&Reflect.set(s,o,n)}),sn.clear(),cn.forEach((n,r)=>{let i=r.match(/^(.+):(.+)$/);if(!i)return;let[,a,o]=i,s=null;a===`CanvasRenderingContext2D`?s=e:a===`HTMLCanvasElement`&&(s=t),s&&n.configurable&&Object.defineProperty(s,o,n)}),cn.clear(),window.__KMAP_CANVAS_PROFILER_INSTALLED__=!1,window.__KMAP_CANVAS_PROFILER_METRICS__=void 0,window.showCanvasReport=void 0,window.resetCanvasReport=void 0,console.info(`[kmap] Canvas profiler disabled.`)}var pn={class:`settings-body`},mn={class:`settings-label`},hn=[`onUpdate:modelValue`],gn=[`onUpdate:modelValue`],_n=[`value`],vn={class:`settings-label`},yn=[`onUpdate:modelValue`],bn=[`onUpdate:modelValue`],xn=[`value`],Sn={class:`settings-header`},Cn={class:`header-right`},wn={class:`settings-body`},Tn=f((0,e.defineComponent)({__name:`ChartSettingsDialog`,props:{show:{type:Boolean}},emits:[`close`,`confirm`],setup(n,{emit:r}){let a=n,o=r,s=x(),c=(0,e.computed)(()=>i.DEFAULT_SETTINGS.filter(e=>e.group===`main`)),l=(0,e.computed)(()=>i.DEFAULT_SETTINGS.filter(e=>e.group===`experimental`)),u=(0,e.ref)(!1);function d(){try{let e=localStorage.getItem(i.SETTINGS_STORAGE_KEY);if(e){let n=JSON.parse(e),r={};return i.DEFAULT_SETTINGS.forEach(e=>{r[e.key]=n[e.key]??e.default}),r.colorPresetSettings=(0,t.normalizeColorPresetSettings)(n.colorPresetSettings),r}}catch{}let e={};return i.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e.colorPresetSettings={},e}let f=(0,e.ref)(d());(0,e.watch)(()=>a.show,e=>{e&&(f.value=d())});function m(){o(`close`)}function h(){let e={};i.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e.colorPresetSettings={},f.value=e}function g(){o(`confirm`,{...f.value})}return(t,r)=>((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(s)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[n.show?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`settings-overlay`,onClick:m},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:`settings-modal`,onClick:r[1]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,{class:`settings-header`},[r[7]||=(0,e.createElementVNode)(`div`,{class:`header-left`},[(0,e.createElementVNode)(`span`,{class:`settings-title`},`图表设置`),(0,e.createElementVNode)(`span`,{class:`settings-subtitle`},`个性化配置`)],-1),(0,e.createElementVNode)(`div`,{class:`header-right`},[(0,e.createElementVNode)(`button`,{class:`settings-close`,onClick:m},[...r[6]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M18 6L6 18M6 6l12 12`})],-1)]])])]),(0,e.createElementVNode)(`div`,pn,[c.value.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[r[8]||=(0,e.createElementVNode)(`div`,{class:`settings-section-divider`},[(0,e.createElementVNode)(`span`,{class:`settings-section-label`},`主图设置`)],-1),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(c.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.key,class:`settings-item`},[(0,e.createElementVNode)(`label`,mn,[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),t.type===`boolean`?(0,e.withDirectives)(((0,e.openBlock)(),(0,e.createElementBlock)(`input`,{key:0,type:`checkbox`,class:`settings-checkbox`,"onUpdate:modelValue":e=>f.value[t.key]=e},null,8,hn)),[[e.vModelCheckbox,f.value[t.key]]]):t.type===`select`&&t.options?(0,e.withDirectives)(((0,e.openBlock)(),(0,e.createElementBlock)(`select`,{key:1,class:`settings-select`,"onUpdate:modelValue":e=>f.value[t.key]=e},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.options,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`option`,{key:t.value,value:t.value},(0,e.toDisplayString)(t.label),9,_n))),128))],8,gn)),[[e.vModelSelect,f.value[t.key]]]):(0,e.createCommentVNode)(``,!0)])]))),128))],64)):(0,e.createCommentVNode)(``,!0),r[11]||=(0,e.createElementVNode)(`div`,{class:`settings-section-divider`},[(0,e.createElementVNode)(`span`,{class:`settings-section-label`},`样式 / 颜色`)],-1),(0,e.createElementVNode)(`div`,{class:`settings-item nav-item`,onClick:r[0]||=e=>u.value=!0},[...r[9]||=[(0,e.createElementVNode)(`label`,{class:`settings-label`},[(0,e.createElementVNode)(`span`,null,`颜色配置`),(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,width:`16`,height:`16`,class:`nav-arrow`},[(0,e.createElementVNode)(`path`,{d:`M9 18l6-6-6-6`})])],-1)]]),l.value.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[r[10]||=(0,e.createElementVNode)(`div`,{class:`settings-section-divider`},[(0,e.createElementVNode)(`span`,{class:`settings-section-label`},`实验性 / 调试设置`)],-1),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(l.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.key,class:`settings-item experimental`},[(0,e.createElementVNode)(`label`,vn,[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),t.type===`boolean`?(0,e.withDirectives)(((0,e.openBlock)(),(0,e.createElementBlock)(`input`,{key:0,type:`checkbox`,class:`settings-checkbox`,"onUpdate:modelValue":e=>f.value[t.key]=e},null,8,yn)),[[e.vModelCheckbox,f.value[t.key]]]):t.type===`select`&&t.options?(0,e.withDirectives)(((0,e.openBlock)(),(0,e.createElementBlock)(`select`,{key:1,class:`settings-select`,"onUpdate:modelValue":e=>f.value[t.key]=e},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.options,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`option`,{key:t.value,value:t.value},(0,e.toDisplayString)(t.label),9,xn))),128))],8,bn)),[[e.vModelSelect,f.value[t.key]]]):(0,e.createCommentVNode)(``,!0)])]))),128))],64)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,{class:`settings-footer`},[(0,e.createElementVNode)(`button`,{class:`settings-btn reset`,onClick:h},[...r[12]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}),(0,e.createElementVNode)(`path`,{d:`M3 3v5h5`})],-1),(0,e.createTextVNode)(` 重置 `,-1)]]),(0,e.createElementVNode)(`div`,{class:`footer-right`},[(0,e.createElementVNode)(`button`,{class:`settings-btn cancel`,onClick:m},`取消`),(0,e.createElementVNode)(`button`,{class:`settings-btn confirm`,onClick:g},[...r[13]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`},[(0,e.createElementVNode)(`path`,{d:`M20 6L9 17l-5-5`})],-1),(0,e.createTextVNode)(` 确定 `,-1)]])])])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1}),(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[u.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`settings-overlay nested-overlay`,onClick:r[5]||=e=>u.value=!1},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:`settings-modal`,onClick:r[4]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,Sn,[r[15]||=(0,e.createElementVNode)(`div`,{class:`header-left`},[(0,e.createElementVNode)(`span`,{class:`settings-title`},`颜色预设`),(0,e.createElementVNode)(`span`,{class:`settings-subtitle`},`自定义图表颜色`)],-1),(0,e.createElementVNode)(`div`,Cn,[(0,e.createElementVNode)(`button`,{class:`settings-close`,onClick:r[2]||=e=>u.value=!1},[...r[14]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M18 6L6 18M6 6l12 12`})],-1)]])])]),(0,e.createElementVNode)(`div`,wn,[(0,e.createVNode)(p,{"color-preset-settings":f.value.colorPresetSettings,"onUpdate:colorPresetSettings":r[3]||=e=>f.value={...f.value,colorPresetSettings:e}},null,8,[`color-preset-settings`])])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))}}),[[`__scopeId`,`data-v-49dd396c`]]),En={class:`left-toolbar`,"aria-label":`图表工具栏`},Dn={class:`left-toolbar__group`},On=[`title`,`aria-label`,`onClick`],kn=[`onClick`],An=[`title`,`aria-label`,`onClick`],jn={class:`left-toolbar__group`},Mn={class:`left-toolbar__group`},Nn=[`title`,`aria-label`],Pn={class:`left-toolbar__group`},Fn=f((0,e.defineComponent)({__name:`LeftToolbar`,props:{isFullscreen:{type:Boolean}},emits:[`selectTool`,`toggleFullscreen`,`zoomIn`,`zoomOut`,`settingsChange`],setup(t,{expose:n,emit:r}){let a=[{id:`cursor`,title:`光标`,icon:ot},{id:`lines`,title:`线条`,icon:lt,children:[{id:`trend-line`,title:`线段`,icon:lt},{id:`ray`,title:`射线`,icon:ft},{id:`h-line`,title:`水平线`,icon:vt},{id:`h-ray`,title:`水平射线`,icon:ht},{id:`v-line`,title:`垂直线`,icon:xt},{id:`crosshair-line`,title:`十字线`,icon:wt},{id:`info-line`,title:`信息线`,icon:Dt}]},{id:`channels`,title:`通道`,icon:Gt,children:[{id:`parallel-channel`,title:`平行通道`,icon:Gt},{id:`regression-channel`,title:`回归趋势`,icon:Jt},{id:`flat-line`,title:`平滑顶底`,icon:Zt},{id:`disjoint-channel`,title:`不相交通道`,icon:en}]}],o=r,s=(0,e.ref)(`cursor`),c=(0,e.ref)(null),l=(0,e.ref)(!1);function u(){try{let e=localStorage.getItem(i.SETTINGS_STORAGE_KEY);if(e){let t=JSON.parse(e),n={...t};return i.DEFAULT_SETTINGS.forEach(e=>{n[e.key]=t[e.key]??e.default}),n}}catch{}let e={};return i.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e}function d(e){try{localStorage.setItem(i.SETTINGS_STORAGE_KEY,JSON.stringify(e))}catch{}}let f=(0,e.ref)(u());function p(e){return s.value===e.id?!0:e.children?e.children.some(e=>e.id===s.value):!1}function m(e){if(e.children?.length){if(!e.children.some(e=>e.id===s.value)){let t=e.children[0];s.value=t.id,o(`selectTool`,t.id)}g(e.id);return}s.value=e.id,o(`selectTool`,e.id),c.value=null}function h(e){s.value=e.id,o(`selectTool`,e.id),c.value=null}function g(e){c.value=c.value===e?null:e}function _(){l.value=!0}function v(){return{...f.value}}n({getSettings:v});function y(e){f.value={...e},d(f.value),ln(!!f.value.enableCanvasProfiler),o(`settingsChange`,{...f.value}),l.value=!1}function b(e){e.target.closest(`.tool-item`)||(c.value=null)}return(0,e.onMounted)(()=>{document.addEventListener(`click`,b,!0),o(`settingsChange`,{...f.value}),ln(!!f.value.enableCanvasProfiler)}),(0,e.onUnmounted)(()=>{document.removeEventListener(`click`,b,!0)}),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,[(0,e.createElementVNode)(`nav`,En,[(0,e.createElementVNode)(`div`,Dn,[((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(a,t=>(0,e.createElementVNode)(`div`,{key:t.id,class:`tool-item`},[(0,e.createElementVNode)(`button`,{type:`button`,class:(0,e.normalizeClass)([`left-toolbar__button`,{active:p(t)}]),title:t.title,"aria-label":t.title,onClick:e=>m(t),onPointerdown:r[0]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[1]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[2]||=(0,e.withModifiers)(()=>{},[`stop`])},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t.icon),{class:`tool-icon`,"aria-hidden":`true`})),t.children&&t.children.length?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,{key:0,class:(0,e.normalizeClass)([`corner-indicator`,{open:c.value===t.id}]),onClick:(0,e.withModifiers)(e=>g(t.id),[`stop`]),"aria-label":`展开子菜单`},null,10,kn)):(0,e.createCommentVNode)(``,!0)],42,On),(0,e.createVNode)(e.Transition,{name:`dropdown`},{default:(0,e.withCtx)(()=>[c.value===t.id&&t.children&&t.children.length?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`tool-dropdown`,onPointerdown:r[3]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[4]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[5]||=(0,e.withModifiers)(()=>{},[`stop`])},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.id,type:`button`,class:(0,e.normalizeClass)([`left-toolbar__button`,{active:s.value===t.id}]),title:t.title,"aria-label":t.title,onClick:e=>h(t)},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t.icon),{class:`tool-icon`,"aria-hidden":`true`}))],10,An))),128))],32)):(0,e.createCommentVNode)(``,!0)]),_:2},1024)])),64))]),r[22]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,jn,[(0,e.createElementVNode)(`button`,{type:`button`,class:`left-toolbar__button`,title:`放大`,"aria-label":`放大`,onClick:r[6]||=e=>n.$emit(`zoomIn`),onPointerdown:r[7]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[8]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[9]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createVNode)((0,e.unref)(At),{class:`tool-icon`,"aria-hidden":`true`})],32),(0,e.createElementVNode)(`button`,{type:`button`,class:`left-toolbar__button`,title:`缩小`,"aria-label":`缩小`,onClick:r[10]||=e=>n.$emit(`zoomOut`),onPointerdown:r[11]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[12]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[13]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createVNode)((0,e.unref)(Nt),{class:`tool-icon`,"aria-hidden":`true`})],32)]),r[23]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,Mn,[(0,e.createElementVNode)(`button`,{type:`button`,class:`left-toolbar__button`,title:t.isFullscreen?`退出全屏`:`全屏显示`,"aria-label":t.isFullscreen?`退出全屏`:`全屏显示`,onClick:r[14]||=e=>n.$emit(`toggleFullscreen`),onPointerdown:r[15]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[16]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[17]||=(0,e.withModifiers)(()=>{},[`stop`])},[t.isFullscreen?((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(zt),{key:0,class:`tool-icon`,"aria-hidden":`true`})):((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(It),{key:1,class:`tool-icon`,"aria-hidden":`true`}))],40,Nn)]),r[24]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,Pn,[(0,e.createElementVNode)(`button`,{type:`button`,class:`left-toolbar__button`,title:`设置`,"aria-label":`设置`,onClick:_,onPointerdown:r[18]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[19]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[20]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createVNode)((0,e.unref)(Ht),{class:`tool-icon`,"aria-hidden":`true`})],32)])]),(0,e.createVNode)(Tn,{show:l.value,onClose:r[21]||=e=>l.value=!1,onConfirm:y},null,8,[`show`])],64))}}),[[`__scopeId`,`data-v-d0932502`]]),In=[`data-theme`],Ln={class:`pane-separator-layer`,"aria-hidden":`true`},Rn={class:`canvas-layer`,ref:`canvasLayerRef`},zn={class:`x-axis-canvas`,ref:`xAxisCanvasRef`},Bn=4,Vn=f((0,e.defineComponent)({__name:`KLineChart`,props:{semanticConfig:{},dataFetcher:{},yPaddingPx:{default:20},minKWidth:{default:1},maxKWidth:{default:50},rightAxisWidth:{default:0},bottomAxisHeight:{default:24},priceLabelWidth:{default:60},zoomLevels:{default:20},initialZoomLevel:{default:3},isFullscreen:{type:Boolean,default:!1}},emits:[`zoomLevelChange`,`toggleFullscreen`,`themeChange`],setup(i,{expose:a,emit:o}){let s=i,c=o,l=(0,e.ref)(null),u=(0,e.ref)(null),d=(0,e.ref)(null),f=(0,e.ref)(null),p=(0,e.ref)(null);b(d);let m=(0,e.shallowRef)(null),h=(0,e.shallowRef)(null),g=(0,e.ref)(0),_=(0,e.ref)(0),y=(0,e.ref)(1),x=(0,e.ref)(s.initialZoomLevel??1),S=(0,e.ref)(0),C=(0,e.ref)(1),w=(0,e.ref)(0),T=(0,e.ref)({}),E=(0,e.ref)(null),D=(0,e.ref)([]),ee=x.value;S.value=(0,n.zoomLevelToKWidth)(ee,{minKWidth:s.minKWidth,maxKWidth:s.maxKWidth,zoomLevelCount:s.zoomLevels,dpr:y.value}),C.value=(0,n.kGapFromKWidth)(S.value,y.value);let O=(0,e.ref)(`light`),k=(0,e.ref)({}),A=(0,e.computed)(()=>{let e=k.value.isAsiaMarket??!1,n=(0,t.resolveThemeColors)(O.value,e);return{upColor:n.candleUpBody,downColor:n.candleDownBody}}),te=(0,e.computed)(()=>{let e=O.value===`dark`?t.darkTheme:t.lightTheme,n=k.value.colorPresetSettings?.[O.value];return n&&Object.keys(n).length>0?(0,t.themeToCssVars)({...e,colors:{...e.colors,...n}}):(0,t.themeToCssVars)(e)}),j=null;function M(e){m.value?.setTheme(e.matches?`dark`:`light`)}function N(e,t){if(!(!e||!t))if(t===`auto`){let t=window.matchMedia(`(prefers-color-scheme: dark)`);e.setTheme(t.matches?`dark`:`light`),j!==t&&(j?.removeEventListener(`change`,M),j=t,t.addEventListener(`change`,M))}else j?.removeEventListener(`change`,M),j=null,e.setTheme(t)}function ne(){}function P(e){if(k.value=e,N(m.value,e.theme),m.value?.updateSettingsFacade(e),e.performanceTest10kKlines){let e=F();console.time(`updateData-10k`),m.value?.updateData(e),console.timeEnd(`updateData-10k`),g.value=e.length,_.value++}else h.value&&m.value?.getData()?.length===1e4&&h.value.applyConfig(s.semanticConfig)}function F(){let e=[],t=new Date(`2020-01-01`).getTime(),n=3e3;for(let r=0;r<1e4;r++){let i=t+r*864e5,a=(Math.random()-.5)*2*.02+1e-4,o=n,s=o*(1+a),c=Math.max(o,s)*(1+Math.random()*.01),l=Math.min(o,s)*(1-Math.random()*.01),u=Math.floor(1e6+Math.random()*5e6);e.push({timestamp:i,open:parseFloat(o.toFixed(2)),high:parseFloat(c.toFixed(2)),low:parseFloat(l.toFixed(2)),close:parseFloat(s.toFixed(2)),volume:u}),n=s}return e}function I(e,t,n){let r=e.getBoundingClientRect();return{width:Math.max(t,Math.round(r.width)),height:Math.max(n,Math.round(r.height))}}function re(t){t&&(0,e.nextTick)(()=>{if(!t.isConnected)return;let e=I(t,180,80);m.value?.setTooltipSize(e)})}function ie(t){t&&(0,e.nextTick)(()=>{t.isConnected&&(ce.value=I(t,120,60))})}let L=(0,e.ref)({x:0,y:0}),R=(0,e.ref)(!1),z=null;function ae(){z=null}function oe(e){return z||=e.getBoundingClientRect(),z}let B=(0,e.shallowRef)({crosshairPos:null,crosshairIndex:null,crosshairPrice:null,hoveredIndex:null,activePaneId:null,tooltipPos:{x:0,y:0},tooltipAnchorPlacement:`right-bottom`,hoveredMarkerData:null,hoveredCustomMarker:null,isDragging:!1,isResizingPaneBoundary:!1,isHoveringPaneBoundary:!1,hoveredPaneBoundaryId:null,isHoveringRightAxis:!1}),V=(0,e.shallowRef)(null),H=(0,e.computed)(()=>{let e=E.value;return e?D.value.find(t=>t.id===e)??null:null}),se=(0,e.ref)([]),ce=(0,e.ref)({width:220,height:120}),U=(0,e.computed)(()=>{let e=l.value,t=u.value;return!e||!t?{x:0,y:0}:{x:e.offsetLeft,y:e.offsetTop}}),W=(0,e.computed)(()=>B.value.hoveredMarkerData),le=(0,e.computed)(()=>B.value.hoveredCustomMarker),ue=(0,e.computed)(()=>B.value.isDragging),de=(0,e.computed)(()=>B.value.isResizingPaneBoundary),fe=(0,e.computed)(()=>B.value.isHoveringPaneBoundary),pe=(0,e.computed)(()=>B.value.hoveredPaneBoundaryId),me=(0,e.computed)(()=>B.value.isHoveringRightAxis),he=(0,e.computed)(()=>B.value.hoveredIndex);(0,e.computed)(()=>B.value.crosshairIndex);let ge=(0,e.computed)(()=>ue.value?`grabbing`:de.value||fe.value?`ns-resize`:he.value===null?`crosshair`:`pointer`),_e=(0,e.computed)(()=>{let e=B.value.hoveredIndex;if(typeof e!=`number`)return null;_.value;let t=m.value?.getData();return t&&e>=0&&e<t.length?t[e]:null}),ve=(0,e.computed)(()=>B.value.hoveredIndex),ye=(0,e.computed)(()=>B.value.tooltipPos),be=(0,e.computed)(()=>({x:ye.value.x+U.value.x,y:ye.value.y+U.value.y})),xe=(0,e.computed)(()=>({left:`${be.value.x}px`,top:`${be.value.y}px`})),Se=(0,e.computed)(()=>({x:L.value.x+U.value.x,y:L.value.y+U.value.y})),Ce=(0,e.computed)(()=>({left:`${Se.value.x}px`,top:`${Se.value.y}px`})),we=(0,e.computed)(()=>B.value.tooltipAnchorPlacement),Te=(0,e.computed)(()=>{let e=m.value?.viewport.peek(),t=l.value,n=e?.plotWidth??(t?t.clientWidth:0);return L.value.x+12+ce.value.width+12>n?`left-bottom`:`right-bottom`}),Ee=(0,e.computed)(()=>(_.value,m.value?.getData()??[]));function De(e){V.value?.setTool(e)}function Oe(e){let t=H.value;!t||!V.value||V.value.updateDrawingStyle(t.id,e)}function ke(){let e=H.value;!e||!V.value||(V.value.removeDrawing(e.id),E.value=null,D.value=V.value.getDrawings())}function Ae(e){m.value?.handlePointerEvent(e,{onPointerDown:(e,t)=>V.value?.onPointerDown(e,t)?(D.value=V.value.getDrawings(),!0):!1})}function je(e){let t=l.value;if(t){let n=oe(t);L.value={x:e.clientX-n.left,y:e.clientY-n.top}}m.value?.handlePointerEvent(e,{onPointerMove:(e,t)=>V.value?.onPointerMove(e,t)?(D.value=V.value.getDrawings(),!0):!1})}function Me(e){m.value?.handlePointerEvent(e,{onPointerUp:(e,t)=>V.value?.onPointerUp(e,t)?(D.value=V.value.getDrawings(),!0):!1})}function Ne(e){m.value?.handlePointerEvent(e)}function Pe(e){m.value?.handlePointerEvent(e)}function Fe(e){m.value?.handlePointerEvent(e)}function Ie(e){m.value?.handlePointerEvent(e)}function Le(e){m.value?.handlePointerEvent(e)}function Re(){m.value?.handleScrollEvent()}let ze=(0,e.ref)([]),Be=(0,e.computed)(()=>{let e=[],t=new Set;for(let n of K.value)t.has(n.indicatorId)||(t.add(n.indicatorId),e.push(n.indicatorId));return e}),Ve=(0,e.computed)(()=>[...ze.value,...Be.value]),G=(0,e.ref)({}),K=(0,e.ref)([]);function Ue(){let e=T.value.main??3;return K.value.length===0?[{id:`main`,ratio:e,visible:!0,role:`price`}]:[{id:`main`,ratio:e,visible:!0,role:`price`},...K.value.map(e=>({id:e.id,ratio:T.value[e.id]??1,visible:!0,role:`indicator`}))]}function We(e){return{...n.SUB_PANE_INDICATOR_CONFIGS[e].defaultParams}}let q=new Map;function Ge(e=`VOLUME`,t){if(K.value.length>=Bn)return!1;let n=t??We(e);return!!m.value?.addIndicator(e,`sub`,n)}function Ke(e){m.value?.removeIndicator(e)}function qe(){for(let e of K.value)m.value?.removeIndicator(e.id);q.clear()}function Je(){let e=s.semanticConfig,t=m.value;if(!t)return;let n=e.indicators?.main;if(n)for(let e of n)e.enabled&&t.addIndicator(e.type,`main`,e.params)}function Ye(){let e=m.value?.subPanes.peek()??[];for(let t of e){let{paneId:e,indicatorId:n,params:r}=t,i=e.match(/^(.+)_(\d+)$/);if(i){let[,e,t]=i,n=parseInt(t,10);n>=(q.get(e)??0)&&q.set(e,n+1)}}}function Xe(e,t){let n=We(t);m.value?.replaceSubPaneIndicator(e,t,n)}function Ze(e,t){let r=m.value;if(r){if([`MA`,`BOLL`,`EXPMA`,`ENE`,`WMA`,`DEMA`,`TEMA`,`HMA`,`KAMA`,`SAR`,`SUPERTREND`,`KELTNER`,`DONCHIAN`,`ICHIMOKU`,`PIVOT`,`FIB`,`STRUCTURE`,`ZONES`].includes(e)){let n=ze.value.find(t=>t===e);t&&!n?r.addIndicator(e,`main`,G.value[e]):!t&&n&&r.removeIndicator(e.toUpperCase());return}if(n.SUB_PANE_INDICATORS.includes(e))if(t){if(K.value.find(t=>t.indicatorId===e)||K.value.length>=Bn)return;if(!r.addIndicator(e,`sub`,G.value[e])&&K.value.length>0){let t=K.value[K.value.length-1];Xe(t.id,e)}}else K.value.filter(t=>t.indicatorId===e).forEach(e=>{r.removeIndicator(e.id)})}}function Qe(e,t){if(e===`MA`||e===`BOLL`||e===`EXPMA`||e===`ENE`){m.value?.updateIndicatorParams(e,t);return}n.SUB_PANE_INDICATORS.includes(e)&&K.value.filter(t=>t.indicatorId===e).forEach(e=>{m.value?.updateIndicatorParams(e.id,t)})}function $e(e){if(!e.length||K.value.length<=1)return;let t=e.filter(e=>n.SUB_PANE_INDICATORS.includes(e));if(!t.length)return;let r=new Map(K.value.map(e=>[e.indicatorId,e])),i=[];for(let e of t){let t=r.get(e);t&&(i.push(t),r.delete(e))}if(i.length===0)return;for(let e of K.value)r.has(e.indicatorId)&&(i.push(e),r.delete(e.indicatorId));let a=K.value.map(e=>e.id),o=i.map(e=>e.id);if(a.join(`|`)===o.join(`|`))return;K.value=i;let s=m.value;s&&s.updatePaneLayout(Ue())}let et=(0,e.computed)(()=>s.rightAxisWidth+s.priceLabelWidth),J=(0,e.computed)(()=>(_.value,w.value,S.value,C.value,y.value,m.value?.getContentWidth()??0));function nt(){let e=l.value,t=m.value;if(!e||!t)return;let r=t.getData()?.length??0;if(r===0)return;let i=t.viewport.peek().dpr,{unitPx:a,startXPx:o}=(0,n.getPhysicalKLineConfig)(S.value,C.value,i),s=(o+r*a)/i,c=Math.max(0,e.scrollWidth-e.clientWidth),u=Math.min(c,Math.max(0,s-e.clientWidth));e.scrollLeft=Math.round(u*i)/i}function Y(e,t){m.value?.zoomToLevel(e,t)}a({scheduleRender:ne,scrollToRight:nt,addSubPane:Ge,removeSubPane:Ke,switchSubIndicator:Xe,clearAllSubPanes:qe,zoomToLevel:Y,zoomIn:e=>Y(x.value+1,e),zoomOut:e=>Y(x.value-1,e),getZoomLevel:()=>x.value,getZoomLevelCount:()=>m.value?.getZoomLevelCount()??10});function it(){return e=>{e.preventDefault(),m.value?.handleWheelEvent(e)}}function at(e,t,r,i){return(0,n.createChartController)({container:e,data:[],canvasLayer:t,rightAxisLayer:r,xAxisCanvas:i,initialZoomLevel:s.initialZoomLevel,zoomLevels:s.zoomLevels,yPaddingPx:s.yPaddingPx,rightAxisWidth:s.rightAxisWidth,bottomAxisHeight:s.bottomAxisHeight,priceLabelWidth:s.priceLabelWidth,minKWidth:s.minKWidth,maxKWidth:s.maxKWidth})}function ot(t){let n=t.paneLayout.subscribe(()=>{ae();let e=l.value&&parseInt(getComputedStyle(l.value).borderTopWidth)||0;se.value=t.paneLayout.peek().slice(0,-1).map(n=>{let r=t.getPaneInfo(n.id),i=(r?.top??0)+(r?.height??0);return{id:n.id,top:i+e}})}),r=t.paneRatios.subscribe(()=>{T.value={...t.paneRatios.peek()}}),i=t.viewport.subscribe(()=>{let n=t.viewport.peek();y.value!==n.dpr&&(y.value=n.dpr),w.value!==n.plotWidth&&(w.value=n.plotWidth),(x.value!==n.zoomLevel||S.value!==n.kWidth||C.value!==n.kGap)&&(x.value=n.zoomLevel,S.value=n.kWidth,C.value=n.kGap);let r=n.desiredScrollLeft;r!==void 0&&r!==l.value?.scrollLeft&&(ae(),(0,e.nextTick)(()=>{let e=l.value;if(!e)return;let t=Math.max(0,e.scrollWidth-e.clientWidth),i=Math.min(Math.max(0,r),t),a=n.dpr;e.scrollLeft=Math.round(i*a)/a}))}),a=t.data.subscribe(()=>{g.value=t.data.peek().length,_.value++}),o=t.theme.subscribe(()=>{let e=t.theme.peek();O.value=e,c(`themeChange`,e)}),s=t.indicators.subscribe(()=>{let e=t.indicators.peek(),n=e.filter(e=>e.role===`main`).map(e=>e.definitionId);ze.value=n;let r={...G.value};for(let t of e)t.role===`main`&&t.params&&Object.keys(t.params).length>0&&(r[t.definitionId]={...t.params});t.updateRendererConfig(`mainIndicatorLegend`,{indicators:{MA:{enabled:n.includes(`MA`),params:r.MA||{}},BOLL:{enabled:n.includes(`BOLL`),params:r.BOLL||{}},EXPMA:{enabled:n.includes(`EXPMA`),params:r.EXPMA||{}},ENE:{enabled:n.includes(`ENE`),params:r.ENE||{}}}}),G.value=r}),u=t.subPanes.subscribe(()=>{let e=t.subPanes.peek(),n=new Set(e.map(e=>e.paneId)),r=K.value.filter(e=>n.has(e.id)),i=new Set(r.map(e=>e.id));for(let t of e)i.has(t.paneId)||r.push({id:t.paneId,indicatorId:t.indicatorId,params:t.params});K.value=r;let a={...G.value};for(let t of e)t.params&&Object.keys(t.params).length>0&&(a[t.indicatorId]={...t.params});G.value=a});(0,e.onUnmounted)(()=>{i(),a(),r(),n(),o(),s(),u(),j?.removeEventListener(`change`,M)})}function st(e){let t=p.value?.getSettings()??{showVolumePriceMarkers:!0};if(k.value=t,N(e,t.theme),e.updateSettingsFacade(t),t.performanceTest10kKlines){let t=F();console.time(`updateData-10k`),e.updateData(t),console.timeEnd(`updateData-10k`)}}function ct(e){V.value=new n.DrawingInteractionController(e),V.value.setCallbacks({onDrawingCreated:e=>{D.value=[...D.value,e],E.value=e.id},onToolChange:()=>{},onDrawingSelected:e=>{E.value=e?.id??null}})}function lt(e){e.setTooltipAnchorPositioning(R.value),e.interactionState.subscribe(()=>{B.value=e.interactionState.peek()}),B.value=e.interactionState.peek(),y.value=e.viewport.peek().dpr}function ut(t){(0,r.__setDataFetcher)(s.dataFetcher),h.value=new r.SemanticChartController(t),h.value.on(`config:error`,e=>{console.error(`Semantic config error:`,e)}),h.value.on(`config:ready`,()=>{Je(),Ye(),(0,e.nextTick)(()=>nt())}),h.value.applyConfig(s.semanticConfig).then(e=>{e&&!e.success&&console.error(`Semantic config apply failed:`,e.errors)})}return(0,e.onMounted)(()=>{R.value=!1;let e=l.value,t=u.value;if(!e||!t)return;let n=it();e.addEventListener(`wheel`,n,{passive:!1});let r=e.querySelector(`.canvas-layer`),i=e.querySelector(`.x-axis-canvas`),a=at(e,r,t.querySelector(`.right-axis-host`),i);m.value=a,ot(a),st(a),ct(a),lt(a),ut(a)}),(0,e.onUnmounted)(()=>{let e=m.value;e&&(m.value=null,e.dispose()),V.value=null}),(0,e.watch)(()=>s.yPaddingPx,e=>{m.value?.updateOptionsFacade({yPaddingPx:e})}),(0,e.watch)(()=>s.semanticConfig,async(e,t)=>{if(e&&e!==t){let t=await h.value?.applyConfig(e);t&&!t.success&&console.error(`Semantic config apply failed:`,t.errors)}},{deep:!0}),(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`chartWrapperRef`,ref:d,class:`chart-wrapper`,"data-theme":O.value,style:(0,e.normalizeStyle)(te.value)},[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`chart-stage`,{"is-dragging":ue.value,"is-resizing-pane":de.value,"is-hovering-pane-separator":fe.value,"is-hovering-right-axis":me.value,"is-hovering-kline":he.value!==null}])},[(0,e.createVNode)(Fn,{ref_key:`toolbarRef`,ref:p,"is-fullscreen":i.isFullscreen,onSelectTool:De,onToggleFullscreen:n[0]||=e=>t.$emit(`toggleFullscreen`),onZoomIn:n[1]||=e=>Y(x.value+1),onZoomOut:n[2]||=e=>Y(x.value-1),onSettingsChange:P},null,8,[`is-fullscreen`]),(0,e.createElementVNode)(`div`,{class:`chart-main`,ref_key:`chartMainRef`,ref:u},[(0,e.createElementVNode)(`div`,Ln,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(se.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.id,class:(0,e.normalizeClass)([`pane-separator-line`,{"is-active":pe.value===t.id}]),style:(0,e.normalizeStyle)({top:`${t.top}px`})},null,6))),128))]),(0,e.createElementVNode)(`div`,{ref_key:`tooltipLayerRef`,ref:f,class:`tooltip-layer`},null,512),(0,e.createElementVNode)(`div`,{class:`chart-container`,style:(0,e.normalizeStyle)({cursor:ge.value}),ref_key:`containerRef`,ref:l,onScrollPassive:Re,onPointerdown:Ae,onPointermove:je,onPointerup:Me,onPointerleave:Ne},[(0,e.createElementVNode)(`div`,{class:`scroll-content`,style:(0,e.normalizeStyle)({width:J.value+`px`})},[(0,e.createElementVNode)(`div`,Rn,[(0,e.createElementVNode)(`canvas`,zn,null,512),H.value?((0,e.openBlock)(),(0,e.createBlock)(v,{key:0,drawing:H.value,onUpdateStyle:Oe,onDelete:ke},null,8,[`drawing`])):(0,e.createCommentVNode)(``,!0)],512)],4)],36),f.value?((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{key:0,to:f.value},[_e.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`tooltip-anchor kline-tooltip-anchor`,{"use-anchor":R.value}]),style:(0,e.normalizeStyle)(xe.value)},null,6)):(0,e.createCommentVNode)(``,!0),W.value||le.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`tooltip-anchor marker-tooltip-anchor`,{"use-anchor":R.value}]),style:(0,e.normalizeStyle)(Ce.value)},null,6)):(0,e.createCommentVNode)(``,!0),_e.value?((0,e.openBlock)(),(0,e.createBlock)(tt,{key:2,k:_e.value,index:ve.value,data:Ee.value,pos:be.value,"set-el":re,"use-anchor":R.value,"anchor-placement":we.value,"up-color":A.value.upColor,"down-color":A.value.downColor},null,8,[`k`,`index`,`data`,`pos`,`use-anchor`,`anchor-placement`,`up-color`,`down-color`])):(0,e.createCommentVNode)(``,!0),W.value||le.value?((0,e.openBlock)(),(0,e.createBlock)(rt,{key:3,marker:W.value||le.value,pos:Se.value,"use-anchor":R.value,"anchor-placement":Te.value,"set-el":ie},null,8,[`marker`,`pos`,`use-anchor`,`anchor-placement`])):(0,e.createCommentVNode)(``,!0)],8,[`to`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,{class:`right-axis-host`,ref:`rightAxisLayerRef`,style:(0,e.normalizeStyle)({width:et.value+`px`}),onPointerdown:Pe,onPointermove:Fe,onPointerup:Ie,onPointerleave:Le},null,36)],512)],2),(0,e.createVNode)(He,{"active-indicators":Ve.value,"indicator-params":G.value,onToggle:Ze,onUpdateParams:Qe,onReorderSubIndicators:$e},null,8,[`active-indicators`,`indicator-params`])],12,In))}}),[[`__scopeId`,`data-v-f9c42035`]]),Hn={name:`@363045841yyt/klinechart`,version:`0.7.8`,description:`Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.`,license:`MIT`,repository:{type:`git`,url:`https://github.com/363045841/KLineChartQuant.git`},bugs:`https://github.com/363045841/KLineChartQuant/issues`,homepage:`https://363045841.github.io/KLineChartQuant/`,type:`module`,engines:{node:`^20.19.0 || >=22.12.0`},sideEffects:!1,main:`./dist/index.js`,module:`./dist/index.js`,types:`./dist/index.d.ts`,exports:{".":{import:{types:`./dist/index.d.ts`,default:`./dist/index.js`},require:{types:`./dist/index.d.cts`,default:`./dist/index.cjs`}},"./web-component":{import:{default:`./dist/kline-chart.js`}},"./style.css":`./dist/klinechart.css`},files:[`dist`,`src`],publishConfig:{access:`public`},scripts:{dev:`vite --config preview/vite.config.ts`,build:`vite build`,"build:wc":`cross-env BUILD_TARGET=web-component vite build`,postbuild:`node -e "require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')"`,test:`vitest run`,"test:watch":`vitest`,size:`size-limit`,"lint:publish":`publint --strict .`,prepublishOnly:`npm run build`,"lint:types":`attw --pack .`},"size-limit":[{name:`vue (entry, pre-build src measurement)`,path:`src/index.ts`,limit:`8 KB`,gzip:!0,ignore:[`vue`,`@363045841yyt/klinechart-core`]}],peerDependencies:{"@363045841yyt/klinechart-core":`^`,vue:`^3.4.0`},devDependencies:{"@arethetypeswrong/cli":`^0.18.3`,"@size-limit/preset-small-lib":`^12.1.0`,"@vitejs/plugin-vue":`^6.0.0`,"@vue/test-utils":`^2.4.10`,"cross-env":`^7.0.3`,jsdom:`^29.1.1`,publint:`^0.3.0`,"size-limit":`^12.1.0`,typescript:`~6.0.3`,"unplugin-icons":`^23.0.1`,vite:`^8.0.14`,"vite-plugin-babel":`^1.3.2`,"vite-plugin-css-injected-by-js":`^5.0.1`,"vite-plugin-dts":`^5.0.1`,vitest:`^4.1.5`,vue:`^3.5.0`}}.version,Un=null;function Wn(e){Un=e}function Gn(e){if(e.container==null)throw Error("[@363045841yyt/klinechart] createChart: `container` is required and must be a non-null HTMLElement");if(Un===null)throw Error(`[@363045841yyt/klinechart] createChart: no ChartController factory registered. Call __setControllerFactory(...) before mounting (the core package wires this in production).`);return Un(e)}function $(t){let n=(0,e.shallowRef)(t.peek());return(0,e.onScopeDispose)(t.subscribe(()=>{n.value=t.peek()})),n}function Kn(t,n){let r=(0,e.shallowRef)(null),i=e=>{e==null||r.value!=null||(r.value=Gn({...n,container:e}))};i(t.value);let a=(0,e.watch)(t,e=>{i(e)},{immediate:!0,flush:`post`}),o=()=>{a();let e=r.value;e!=null&&(e.dispose(),r.value=null)};return(0,e.onScopeDispose)(o),(0,e.onBeforeUnmount)(o),{chart:r}}function qn(t){let n=(0,e.shallowRef)(t.indicators.peek());return(0,e.onScopeDispose)(t.indicators.subscribe(()=>{n.value=t.indicators.peek()})),{indicators:n,add:t.addIndicator.bind(t),remove:t.removeIndicator.bind(t),updateParams:t.updateIndicatorParams.bind(t)}}function Jn(t){let n=(0,e.shallowRef)(t.interactionState.peek());return(0,e.onScopeDispose)(t.interactionState.subscribe(()=>{n.value=t.interactionState.peek()})),n}function Yn(t){let n=(0,e.shallowRef)(t.paneRatios.peek());return(0,e.onScopeDispose)(t.paneRatios.subscribe(()=>{n.value=t.paneRatios.peek()})),n}function Xn(t){let n=(0,e.shallowRef)(t.viewport.peek());return(0,e.onScopeDispose)(t.viewport.subscribe(()=>{n.value=t.viewport.peek()})),n}function Zn(n){let r=(0,t.createIndicatorSelectorController)({catalog:n.catalog});(0,e.onScopeDispose)(()=>r.dispose());let i=$(r.filteredMain),a=$(r.filteredSub),o=$(r.menuOpen),s=$(r.searchQuery);function c(e){let t=n.catalog.find(t=>t.id===e);return t===void 0?null:n.addIndicator(e,t.role)}function l(e){return n.removeIndicator(e)}function u(e){return n.indicators.peek().some(t=>t.definitionId===e)}return{catalog:n.catalog,filteredMain:i,filteredSub:a,menuOpen:o,searchQuery:s,add:c,remove:l,openMenu:()=>r.openMenu(),closeMenu:()=>r.closeMenu(),toggleMenu:()=>r.toggleMenu(),setSearchQuery:e=>r.setSearchQuery(e),isActive:u}}var Qn=(0,e.defineComponent)({name:`KLineChart`,props:{data:{type:Array,required:!0},initialZoomLevel:{type:Number,default:3},zoomLevels:{type:Number,default:20},theme:{type:String,default:`light`},containerClass:{type:String,default:``}},emits:{ready:e=>!0,zoomLevelChange:(e,t)=>!0},setup(t,{emit:n,expose:r}){let i=(0,e.shallowRef)(null),a=(0,e.effectScope)(),o=(0,e.shallowRef)(null);(0,e.onMounted)(()=>{let r=i.value;r!=null&&(a.run(()=>{if(o.value=Gn({container:r,data:t.data,initialZoomLevel:t.initialZoomLevel,zoomLevels:t.zoomLevels,theme:t.theme}),o.value!=null){n(`ready`,o.value);let t=o.value,r=()=>{let e=t.viewport.peek();n(`zoomLevelChange`,e.zoomLevel,e.kWidth)};r(),(0,e.onScopeDispose)(t.viewport.subscribe(r))}}),(0,e.watch)(()=>t.data,e=>{o.value?.setData(e)}),(0,e.watch)(()=>t.theme,e=>{o.value?.setTheme(e)}))}),(0,e.onUnmounted)(()=>{o.value?.dispose(),o.value=null,a.stop()}),r({getController:()=>o.value,handlePointerEvent:(e,t)=>o.value?.handlePointerEvent(e,t)??!1,handleWheelEvent:e=>o.value?.handleWheelEvent(e),handleScrollEvent:()=>o.value?.handleScrollEvent(),zoomToLevel:(e,t)=>o.value?.zoomToLevel(e,t),zoomIn:e=>o.value?.zoomIn(e),zoomOut:e=>o.value?.zoomOut(e),addIndicator:(e,t,n)=>o.value?.addIndicator(e,t,n)??null,removeIndicator:e=>o.value?.removeIndicator(e)??!1,setTheme:e=>o.value?.setTheme(e),setData:e=>o.value?.setData(e)});let s=e=>{i.value=e??null};return()=>(0,e.h)(`div`,{ref:s,class:[`klinechart-quant-root`,t.containerClass].filter(Boolean).join(` `),style:{width:`100%`,height:`100%`}})}}),$n={install(e){e.component(`KLineChart`,Qn)}};Wn(t.createChartController),Object.defineProperty(exports,"CORE_VERSION",{enumerable:!0,get:function(){return t.VERSION}}),exports.DrawingStyleToolbar=v,exports.IndicatorParams=I,exports.IndicatorSelector=He,exports.KLineChart=Qn,exports.KLineChartVue=Vn,exports.KLineTooltip=tt,exports.KMapPlugin=$n,exports.LeftToolbar=Fn,exports.MarkerTooltip=rt,exports.VERSION=Hn,exports.__setControllerFactory=Wn,exports.coreSignalToVueRef=$,exports.createChart=Gn,exports.useChart=Kn,exports.useIndicatorSelector=Zn,exports.useIndicators=qn,exports.useInteractionState=Jn,exports.usePaneRatios=Yn,exports.useViewport=Xn;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("vue"),t=require("@363045841yyt/klinechart-core"),n=require("@363045841yyt/klinechart-core/controllers"),r=require("@363045841yyt/klinechart-core/semantic"),i=require("@363045841yyt/klinechart-core/config");var a={class:`color-preset-tools`},o={class:`theme-tabs`,role:`tablist`,"aria-label":`颜色主题`},s=[`onClick`],c={class:`color-group-label`},l={class:`color-grid`},u=[`value`,`onInput`],d=(0,e.defineComponent)({__name:`ColorPresetPanel`,props:{colorPresetSettings:{}},emits:[`update:colorPresetSettings`],setup(n,{emit:r}){let i=n,d=r,f=[{value:`light`,label:`浅色`},{value:`dark`,label:`深色`}],p={canvas:`画布`,candle:`K线 / 成交量`,axis:`坐标轴`,interaction:`交互 / 标记`},m=(0,e.computed)(()=>Object.keys(p).map(e=>({group:e,label:p[e],items:t.COLOR_PRESET_ITEMS.filter(t=>t.group===e)})).filter(e=>e.items.length>0)),h=(0,e.ref)(`light`);function g(e,n){return(e===`dark`?t.darkTheme:t.lightTheme).colors[n]}function _(e){return(0,t.normalizeColorPresetSettings)(i.colorPresetSettings)[h.value]?.[e]??g(h.value,e)}function v(e,n){let r=(0,t.normalizeColorPresetSettings)(i.colorPresetSettings);d(`update:colorPresetSettings`,{...r,[h.value]:{...r[h.value],[e]:n}})}function y(){let e={...(0,t.normalizeColorPresetSettings)(i.colorPresetSettings)};delete e[h.value],d(`update:colorPresetSettings`,e)}return(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,null,[(0,e.createElementVNode)(`div`,a,[(0,e.createElementVNode)(`div`,o,[((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(f,t=>(0,e.createElementVNode)(`button`,{key:t.value,type:`button`,class:(0,e.normalizeClass)([`theme-tab`,{active:h.value===t.value}]),onClick:e=>h.value=t.value},(0,e.toDisplayString)(t.label),11,s)),64))]),(0,e.createElementVNode)(`button`,{type:`button`,class:`color-reset-btn`,onClick:y},` 重置颜色 `)]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(m.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:t.group},[(0,e.createElementVNode)(`div`,c,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,l,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.items,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`label`,{key:t.key,class:`color-item`},[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`input`,{type:`color`,class:`color-input`,value:_(t.key),onInput:e=>v(t.key,e.target.value)},null,40,u)]))),128))])],64))),128))]))}}),f=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},p=f(d,[[`__scopeId`,`data-v-a52947a4`]]),m={class:`toolbar-item color-item`,title:`颜色`},h=[`value`],g=[`value`],_=[`value`],v=f((0,e.defineComponent)({__name:`DrawingStyleToolbar`,props:{drawing:{}},emits:[`updateStyle`,`delete`],setup(t,{emit:n}){let r=n;function i(e){e.key===`Delete`&&(e.preventDefault(),r(`delete`))}(0,e.onMounted)(()=>document.addEventListener(`keydown`,i)),(0,e.onUnmounted)(()=>document.removeEventListener(`keydown`,i));function a(e){r(`updateStyle`,{stroke:e})}function o(e){r(`updateStyle`,{strokeWidth:e})}function s(e){r(`updateStyle`,{strokeStyle:e})}return(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:`drawing-style-toolbar`,onPointerdown:r[4]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[5]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[6]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,m,[(0,e.createElementVNode)(`span`,{class:`color-swatch`,style:(0,e.normalizeStyle)({background:t.drawing.style.stroke??`#2962ff`})},null,4),(0,e.createElementVNode)(`input`,{type:`color`,class:`color-input`,value:t.drawing.style.stroke??`#2962ff`,onInput:r[0]||=e=>a(e.target.value)},null,40,h)]),(0,e.createElementVNode)(`select`,{class:`toolbar-select`,value:t.drawing.style.strokeWidth??1,onChange:r[1]||=e=>o(Number(e.target.value)),title:`线宽`},[...r[7]||=[(0,e.createElementVNode)(`option`,{value:1},`1px`,-1),(0,e.createElementVNode)(`option`,{value:2},`2px`,-1),(0,e.createElementVNode)(`option`,{value:3},`3px`,-1),(0,e.createElementVNode)(`option`,{value:4},`4px`,-1)]],40,g),(0,e.createElementVNode)(`select`,{class:`toolbar-select`,value:t.drawing.style.strokeStyle??`solid`,onChange:r[2]||=e=>s(e.target.value),title:`线型`},[...r[8]||=[(0,e.createElementVNode)(`option`,{value:`solid`},`实线`,-1),(0,e.createElementVNode)(`option`,{value:`dashed`},`虚线`,-1),(0,e.createElementVNode)(`option`,{value:`dotted`},`点线`,-1)]],40,_),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn delete-btn`,title:`删除`,onClick:r[3]||=e=>n.$emit(`delete`)},[...r[9]||=[(0,e.createElementVNode)(`svg`,{class:`delete-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[(0,e.createElementVNode)(`path`,{d:`M3 6h18`}),(0,e.createElementVNode)(`path`,{d:`M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6`}),(0,e.createElementVNode)(`path`,{d:`M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2`})],-1)]])],32))}}),[[`__scopeId`,`data-v-02a1f4d6`]]),y=Symbol(`fullscreen-teleport-target`);function b(t){(0,e.provide)(y,t)}function x(){let t=(0,e.inject)(y,null);return(0,e.computed)(()=>t?.value??`body`)}var S={class:`params-header`},C={class:`header-left`},w={class:`params-title`},T={class:`header-right`},E={key:0,class:`indicator-description`},D={class:`params-body`},ee={class:`param-header`},O={class:`param-label`},k={class:`param-label-text`},A={key:0,class:`param-range`},te={class:`input-wrapper`},j=[`disabled`,`onClick`],M=[`value`,`min`,`max`,`step`,`onInput`],N=[`disabled`,`onClick`],ne={key:0,class:`param-description`},P={class:`params-footer`},F={class:`footer-right`},I=f((0,e.defineComponent)({__name:`IndicatorParams`,props:{visible:{type:Boolean},indicatorId:{},indicatorName:{},indicatorDescription:{},params:{},values:{}},emits:[`close`,`confirm`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)({...r.values}),o=(0,e.ref)(!0),s=x();(0,e.watch)(()=>r.values,e=>{a.value={...e}},{deep:!0,immediate:!0}),(0,e.watch)(()=>r.visible,e=>{e&&(a.value={...r.values})});function c(e,t){let n=t.target,r=parseFloat(n.value);isNaN(r)||(a.value[e]=r)}function l(e,t){let n=e.step||1,r=(a.value[e.key]||0)+t*n;e.min!==void 0&&(r=Math.max(e.min,r)),e.max!==void 0&&(r=Math.min(e.max,r)),a.value[e.key]=parseFloat(r.toFixed(10))}function u(){let e={};r.params.forEach(t=>{e[t.key]=t.default??r.values[t.key]??0}),a.value=e}function d(){i(`confirm`,{...a.value})}return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(s)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[t.visible?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`params-overlay`,onClick:r[4]||=e=>n.$emit(`close`)},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:`indicator-params`,onClick:r[3]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,S,[(0,e.createElementVNode)(`div`,C,[(0,e.createElementVNode)(`span`,w,(0,e.toDisplayString)(t.indicatorName),1),r[5]||=(0,e.createElementVNode)(`span`,{class:`params-subtitle`},`参数设置`,-1)]),(0,e.createElementVNode)(`div`,T,[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`toggle-desc-btn`,{active:o.value}]),onClick:r[0]||=e=>o.value=!o.value,title:`显示/隐藏说明`},[...r[6]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 1024 1024`},[(0,e.createElementVNode)(`path`,{d:`M512 97.52381c228.912762 0 414.47619 185.563429 414.47619 414.47619s-185.563429 414.47619-414.47619 414.47619S97.52381 740.912762 97.52381 512 283.087238 97.52381 512 97.52381z m0 73.142857C323.486476 170.666667 170.666667 323.486476 170.666667 512s152.81981 341.333333 341.333333 341.333333 341.333333-152.81981 341.333333-341.333333S700.513524 170.666667 512 170.666667z m36.571429 268.190476v292.571428h-73.142858V438.857143h73.142858z m0-121.904762v73.142857h-73.142858v-73.142857h73.142858z`,fill:`currentColor`})],-1)]],2),(0,e.createElementVNode)(`button`,{class:`params-close`,onClick:r[1]||=e=>n.$emit(`close`)},[...r[7]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M18 6L6 18M6 6l12 12`})],-1)]])])]),(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[o.value&&t.indicatorDescription?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,E,[(0,e.createElementVNode)(`p`,null,(0,e.toDisplayString)(t.indicatorDescription),1)])):(0,e.createCommentVNode)(``,!0)]),_:1}),(0,e.createElementVNode)(`div`,D,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.params,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.key,class:(0,e.normalizeClass)([`param-item`,{"has-desc":o.value&&t.description}])},[(0,e.createElementVNode)(`div`,ee,[(0,e.createElementVNode)(`label`,O,[(0,e.createElementVNode)(`span`,k,(0,e.toDisplayString)(t.label),1),t.min!==void 0||t.max!==void 0?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,A,(0,e.toDisplayString)(t.min??`-∞`)+` ~ `+(0,e.toDisplayString)(t.max??`+∞`),1)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,te,[(0,e.createElementVNode)(`button`,{class:`stepper-btn`,disabled:t.min!==void 0&&(a.value[t.key]??0)<=t.min,onClick:e=>l(t,-1)},` − `,8,j),t.type===`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`input`,{key:0,type:`number`,class:`param-input`,value:a.value[t.key],min:t.min,max:t.max,step:t.step||1,onInput:e=>c(t.key,e)},null,40,M)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`button`,{class:`stepper-btn`,disabled:t.max!==void 0&&(a.value[t.key]??0)>=t.max,onClick:e=>l(t,1)},` + `,8,N)])]),(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[o.value&&t.description?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ne,(0,e.toDisplayString)(t.description),1)):(0,e.createCommentVNode)(``,!0)]),_:2},1024)],2))),128))]),(0,e.createElementVNode)(`div`,P,[(0,e.createElementVNode)(`button`,{class:`params-btn reset`,onClick:u},[...r[8]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}),(0,e.createElementVNode)(`path`,{d:`M3 3v5h5`})],-1),(0,e.createTextVNode)(` 重置 `,-1)]]),(0,e.createElementVNode)(`div`,F,[(0,e.createElementVNode)(`button`,{class:`params-btn cancel`,onClick:r[2]||=e=>n.$emit(`close`)},`取消`),(0,e.createElementVNode)(`button`,{class:`params-btn confirm`,onClick:d},[...r[9]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`},[(0,e.createElementVNode)(`path`,{d:`M20 6L9 17l-5-5`})],-1),(0,e.createTextVNode)(` 确定 `,-1)]])])])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))}}),[[`__scopeId`,`data-v-30f2f611`]]),re={class:`indicator-selector`},ie={class:`indicator-scroll-container`},L={class:`indicator-list`},R={key:0,class:`indicator-divider`,"aria-hidden":`true`},z=[`draggable`,`onDragstart`,`onDragover`,`onDrop`],ae=[`onMouseenter`],oe={class:`btn-content`},B={key:0,class:`param-hint`},V={key:0,class:`hover-overlay`},H=[`onClick`],se={key:1,class:`divider`},ce=[`onClick`],U={class:`indicator-item`},W={class:`modal-header`},le={class:`header-title`},ue={class:`title-sub`},de={class:`header-actions`},fe={key:0,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},pe={key:1,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},me={class:`modal-body`},he={class:`search-box`},ge=[`value`],_e={key:0,class:`indicator-section`},ve={class:`section-header`},ye={class:`section-count`},be=[`onClick`],xe={class:`card-label`},Se={class:`card-tooltip`},Ce={class:`card-header`},we={class:`card-label`},Te={class:`card-header-actions`},Ee=[`onClick`],De={class:`card-name`},Oe={key:1,class:`section-divider`},ke={key:2,class:`no-results`},Ae={key:3,class:`indicator-section`},je={class:`section-header`},Me={class:`section-count`},Ne=[`onClick`],Pe={class:`card-label`},Fe={class:`card-tooltip`},Ie={class:`card-header`},Le={class:`card-label`},Re={class:`card-header-actions`},ze=[`onClick`],Be={class:`card-name`},Ve={class:`modal-footer`},G={class:`footer-info`},K={class:`info-text`},He=f((0,e.defineComponent)({__name:`IndicatorSelector`,props:{activeIndicators:{},indicatorParams:{}},emits:[`toggle`,`updateParams`,`reorderSubIndicators`],setup(t,{emit:r}){let i=t,a=r;function o(e){return e.map(e=>({id:e.id,label:e.label,name:e.name,description:e.description,role:e.pane,params:(e.params??[]).map(e=>({key:e.key,label:e.label,type:e.type,default:e.default??(e.type===`number`?0:``),min:e.min,max:e.max,step:e.step}))}))}let s=(0,n.createIndicatorSelectorController)({catalog:o(n.allIndicators)}),c=$(s.menuOpen),l=$(s.searchQuery),u=$(s.filteredMain),d=$(s.filteredSub),f=(0,e.computed)(()=>u.value.length>0||d.value.length>0),p=s.catalog.peek().length,m=(0,e.ref)(null),h=(0,e.ref)(!1),g=(0,e.ref)(null),_=(0,e.ref)(null),v=(0,e.ref)(null),y=(0,e.ref)(null),b=(0,e.ref)(!1),S=x(),C=(0,e.computed)(()=>i.activeIndicators?.length?i.activeIndicators.map(e=>(0,n.findIndicator)(e)).filter(e=>e!==void 0).sort((e,t)=>e.pane===t.pane?0:e.pane===`main`?-1:1):[]),w=(0,e.computed)(()=>C.value.some(e=>e.pane===`main`)?C.value.find(e=>e.pane===`sub`)?.id??null:null),T=(0,e.computed)(()=>g.value?(0,n.findIndicator)(g.value):null),E=(0,e.computed)(()=>i.activeIndicators?.length??0);function D(e){return i.activeIndicators?.includes(e)??!1}function ee(e){if(D(e))return;let t=(0,n.findIndicator)(e);t&&(t.pane===`main`&&n.allIndicators.filter(t=>t.id!==e&&D(t.id)&&t.pane===`main`).forEach(e=>a(`toggle`,e.id,!1)),a(`toggle`,e,!0))}function O(e){a(`toggle`,e,!1)}function k(e){g.value=e,h.value=!0}function A(e){let t=(0,n.findIndicator)(e);if(!t?.params)return{};let r={};for(let e of t.params)r[e.key]=e.default??e.min??1;let a=i.indicatorParams?.[e]||{},o={...r};for(let[e,t]of Object.entries(a))typeof t==`number`&&(o[e]=t);return o}function te(e){let t=A(e.id);return e.params?e.params.map(e=>t[e.key]??``).join(`,`):``}function j(e){g.value&&a(`updateParams`,g.value,e),h.value=!1}function M(e,t){if(!(0,n.isSubIndicatorId)(t)){e.preventDefault();return}y.value=t,v.value=null,e.dataTransfer?.setData(`text/plain`,t),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}function N(e,t){!y.value||!(0,n.isSubIndicatorId)(t)||y.value===t||(v.value=t,e.dataTransfer&&(e.dataTransfer.dropEffect=`move`))}function ne(e,t){let r=y.value||e.dataTransfer?.getData(`text/plain`)||``;if(!r||r===t){P();return}if(!(0,n.isSubIndicatorId)(r)||!(0,n.isSubIndicatorId)(t)){P();return}let i=C.value.findIndex(e=>e.id===r),o=C.value.findIndex(e=>e.id===t);if(i<0||o<0){P();return}let s=[...C.value.map(e=>e.id)],[c]=s.splice(i,1);if(!c){P();return}s.splice(o,0,c),a(`reorderSubIndicators`,s.filter(e=>(0,n.isSubIndicatorId)(e))),P()}function P(){v.value=null,y.value=null}function F(e){e.key===`Escape`&&s.menuOpen.peek()&&s.closeMenu()}return(0,e.onMounted)(()=>{document.addEventListener(`keydown`,F)}),(0,e.onUnmounted)(()=>{document.removeEventListener(`keydown`,F)}),(t,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,re,[(0,e.createElementVNode)(`div`,ie,[(0,e.createElementVNode)(`div`,L,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(C.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:t.id},[t.id===w.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,R)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-item`,{draggable:(0,e.unref)(n.isSubIndicatorId)(t.id),"drag-over":v.value===t.id,"is-dragging":y.value===t.id}]),draggable:(0,e.unref)(n.isSubIndicatorId)(t.id),onDragstart:e=>M(e,t.id),onDragover:(0,e.withModifiers)(e=>N(e,t.id),[`prevent`]),onDrop:(0,e.withModifiers)(e=>ne(e,t.id),[`prevent`]),onDragend:P},[(0,e.createElementVNode)(`div`,{class:`indicator-btn-wrapper`,onMouseenter:e=>_.value=t.id,onMouseleave:r[0]||=e=>_.value=null},[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`indicator-btn`,{active:!0,hovering:_.value===t.id}])},[(0,e.createElementVNode)(`span`,oe,[(0,e.createTextVNode)((0,e.toDisplayString)(t.label)+` `,1),t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,B,` (`+(0,e.toDisplayString)(te(t))+`) `,1)):(0,e.createCommentVNode)(``,!0)]),(0,e.createVNode)(e.Transition,{name:`fade`},{default:(0,e.withCtx)(()=>[_.value===t.id?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,V,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`action-btn settings-btn`,onClick:(0,e.withModifiers)(e=>k(t.id),[`stop`]),title:`编辑参数`},[...r[9]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`})],-1)]],8,H)):(0,e.createCommentVNode)(``,!0),t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,se)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`button`,{class:`action-btn remove-btn`,onClick:(0,e.withModifiers)(e=>O(t.id),[`stop`]),title:`移除指标`},[...r[10]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z`})],-1)]],8,ce)])):(0,e.createCommentVNode)(``,!0)]),_:2},1024)],2)],40,ae)],42,z)],64))),128)),(0,e.createElementVNode)(`div`,U,[(0,e.createElementVNode)(`button`,{ref_key:`addBtnRef`,ref:m,class:`add-btn`,onClick:r[1]||=(0,e.withModifiers)(t=>(0,e.unref)(s).toggleMenu(),[`stop`]),title:`添加指标`},[...r[11]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z`})],-1)]],512)])])]),((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(S)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[(0,e.unref)(c)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`selector-overlay`,onClick:r[7]||=t=>(0,e.unref)(s).closeMenu()},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.unref)(c)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`selector-modal`,onClick:r[6]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,W,[(0,e.createElementVNode)(`div`,le,[r[12]||=(0,e.createElementVNode)(`span`,{class:`title-text`},`添加指标`,-1),(0,e.createElementVNode)(`span`,ue,(0,e.toDisplayString)((0,e.unref)(p))+` 个可用指标`,1)]),(0,e.createElementVNode)(`div`,de,[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`view-toggle-btn`,{active:b.value}]),onClick:r[2]||=e=>b.value=!b.value,title:`简洁模式`},[b.value?((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,pe,[...r[14]||=[(0,e.createElementVNode)(`path`,{d:`M3 3h18v18H3V3zm16 16V5H5v14h14zM7 7h4v4H7V7zm0 6h4v4H7v-4zm6-6h4v4h-4V7zm0 6h4v4h-4v-4z`},null,-1)]])):((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,fe,[...r[13]||=[(0,e.createElementVNode)(`path`,{d:`M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z`},null,-1)]]))],2),(0,e.createElementVNode)(`button`,{class:`modal-close`,onClick:r[3]||=t=>(0,e.unref)(s).closeMenu(),title:`关闭`},[...r[15]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z`})],-1)]])])]),(0,e.createElementVNode)(`div`,me,[(0,e.createElementVNode)(`div`,he,[r[16]||=(0,e.createElementVNode)(`svg`,{class:`search-icon`,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z`})],-1),(0,e.createElementVNode)(`input`,{value:(0,e.unref)(l),onInput:r[4]||=t=>(0,e.unref)(s).setSearchQuery(t.target.value),type:`text`,class:`search-input`,placeholder:`搜索指标名称...`},null,40,ge)]),(0,e.unref)(u).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,_e,[(0,e.createElementVNode)(`div`,ve,[r[17]||=(0,e.createElementVNode)(`span`,{class:`section-title`},`主图指标`,-1),(0,e.createElementVNode)(`span`,ye,(0,e.toDisplayString)((0,e.unref)(u).length),1)]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-grid`,{compact:b.value}])},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(u),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.id,class:(0,e.normalizeClass)([`indicator-card`,{active:D(t.id),compact:b.value}]),onClick:e=>D(t.id)?O(t.id):ee(t.id)},[b.value?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`span`,xe,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`span`,Se,(0,e.toDisplayString)(t.name),1)],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,Ce,[(0,e.createElementVNode)(`span`,we,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,Te,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`card-settings-btn`,onClick:(0,e.withModifiers)(e=>k(t.id),[`stop`]),title:`编辑参数`},[...r[18]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`})],-1)]],8,Ee)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,De,(0,e.toDisplayString)(t.name),1)],64))],10,be))),128))],2)])):(0,e.createCommentVNode)(``,!0),(0,e.unref)(u).length>0&&(0,e.unref)(d).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Oe)):(0,e.createCommentVNode)(``,!0),!f.value&&(0,e.unref)(l).trim()?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ke,[...r[19]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`48`,height:`48`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z`})],-1),(0,e.createElementVNode)(`p`,null,`未找到匹配的指标`,-1),(0,e.createElementVNode)(`span`,{class:`no-results-hint`},`请尝试其他关键词`,-1)]])):(0,e.createCommentVNode)(``,!0),(0,e.unref)(d).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ae,[(0,e.createElementVNode)(`div`,je,[r[20]||=(0,e.createElementVNode)(`span`,{class:`section-title`},`副图指标`,-1),(0,e.createElementVNode)(`span`,Me,(0,e.toDisplayString)((0,e.unref)(d).length),1)]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-grid`,{compact:b.value}])},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(d),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.id,class:(0,e.normalizeClass)([`indicator-card`,{active:D(t.id),compact:b.value}]),onClick:e=>D(t.id)?O(t.id):ee(t.id)},[b.value?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`span`,Pe,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`span`,Fe,(0,e.toDisplayString)(t.name),1)],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,Ie,[(0,e.createElementVNode)(`span`,Le,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,Re,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`card-settings-btn`,onClick:(0,e.withModifiers)(e=>k(t.id),[`stop`]),title:`编辑参数`},[...r[21]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,e.createElementVNode)(`path`,{d:`M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`})],-1)]],8,ze)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,Be,(0,e.toDisplayString)(t.name),1)],64))],10,Ne))),128))],2)])):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,Ve,[(0,e.createElementVNode)(`div`,G,[(0,e.createElementVNode)(`span`,K,`已激活 `+(0,e.toDisplayString)(E.value)+` 个指标`,1)]),(0,e.createElementVNode)(`button`,{class:`btn btn-confirm`,onClick:r[5]||=t=>(0,e.unref)(s).closeMenu()},`确认`)])])):(0,e.createCommentVNode)(``,!0)]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`])),T.value?((0,e.openBlock)(),(0,e.createBlock)(I,{key:0,visible:h.value,"indicator-id":T.value.id,"indicator-name":T.value.name,"indicator-description":T.value.description,params:T.value.params||[],values:A(T.value.id),onClose:r[8]||=e=>h.value=!1,onConfirm:j},null,8,[`visible`,`indicator-id`,`indicator-name`,`indicator-description`,`params`,`values`])):(0,e.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-01a99263`]]),Ue={class:`kline-tooltip__title`},We={key:0},q={class:`kline-tooltip__grid`},Ge={class:`row`},Ke={class:`row`},qe={class:`row`},Je={class:`row`},Ye={key:0,class:`row`},Xe={key:1,class:`row`},Ze={key:2,class:`row`},Qe={key:3,class:`row`},$e={key:4,class:`row`},et={key:5,class:`row`},J=`#6b7280`,tt=f((0,e.defineComponent)({__name:`KLineTooltip`,props:{k:{},index:{},data:{},pos:{},useAnchor:{type:Boolean},anchorPlacement:{},setEl:{},upColor:{default:`#ef4444`},downColor:{default:`#22c55e`}},setup(t){let n=t,r=(0,e.computed)(()=>n.useAnchor===!0),i=(0,e.computed)(()=>n.anchorPlacement===`left-bottom`?`anchor-left-bottom`:`anchor-right-bottom`);function a(e){n.setEl?.(e)}function o(e){let t=new Date(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function s(e){return e>=1e8?(e/1e8).toFixed(2)+`亿`:e>=1e4?(e/1e4).toFixed(2)+`万`:e.toFixed(2)}function c(e,t){return`${e>=0?`+`:``}${e.toFixed(2)}${t}`}function l(e,t,n){if(e.close>=e.open)return 1;let r=typeof n==`number`&&n>0?t[n-1]:void 0;return r&&e.close>r.close?1:r&&e.close<r.close?-1:0}let u=(0,e.computed)(()=>{let e=n.k;if(!e)return J;let t=l(e,n.data,n.index);return t>0?n.upColor:t<0?n.downColor:J}),d=(0,e.computed)(()=>{let e=n.k;if(!e)return J;let t=e.close-e.open;return t>0?n.upColor:t<0?n.downColor:J}),f=(0,e.computed)(()=>{let e=n.k;if(!e)return J;let t=e.changePercent??(e.close-e.open)/e.open*100;return t>0?n.upColor:t<0?n.downColor:J});return(n,l)=>t.k?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref:a,class:(0,e.normalizeClass)([`kline-tooltip`,[{"use-anchor":r.value},i.value]]),style:(0,e.normalizeStyle)(r.value?void 0:{left:`${t.pos.x}px`,top:`${t.pos.y}px`})},[(0,e.createElementVNode)(`div`,Ue,[t.k.stockCode?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,We,(0,e.toDisplayString)(t.k.stockCode),1)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(o(t.k.timestamp)),1)]),(0,e.createElementVNode)(`div`,q,[(0,e.createElementVNode)(`div`,Ge,[l[0]||=(0,e.createElementVNode)(`span`,null,`开`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:u.value})},(0,e.toDisplayString)(t.k.open.toFixed(2)),5)]),(0,e.createElementVNode)(`div`,Ke,[l[1]||=(0,e.createElementVNode)(`span`,null,`高`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.k.high.toFixed(2)),1)]),(0,e.createElementVNode)(`div`,qe,[l[2]||=(0,e.createElementVNode)(`span`,null,`低`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.k.low.toFixed(2)),1)]),(0,e.createElementVNode)(`div`,Je,[l[3]||=(0,e.createElementVNode)(`span`,null,`收`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:d.value})},(0,e.toDisplayString)(t.k.close.toFixed(2)),5)]),typeof t.k.volume==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ye,[l[4]||=(0,e.createElementVNode)(`span`,null,`成交量`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(s(t.k.volume)),1)])):(0,e.createCommentVNode)(``,!0),typeof t.k.turnover==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Xe,[l[5]||=(0,e.createElementVNode)(`span`,null,`成交额`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(s(t.k.turnover)),1)])):(0,e.createCommentVNode)(``,!0),typeof t.k.amplitude==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ze,[l[6]||=(0,e.createElementVNode)(`span`,null,`振幅`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.k.amplitude)+`%`,1)])):(0,e.createCommentVNode)(``,!0),typeof t.k.changePercent==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Qe,[l[7]||=(0,e.createElementVNode)(`span`,null,`涨跌幅`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:f.value})},(0,e.toDisplayString)(c(t.k.changePercent,`%`)),5)])):(0,e.createCommentVNode)(``,!0),typeof t.k.changeAmount==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,$e,[l[8]||=(0,e.createElementVNode)(`span`,null,`涨跌额`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:f.value})},(0,e.toDisplayString)(c(t.k.changeAmount,``)),5)])):(0,e.createCommentVNode)(``,!0),typeof t.k.turnoverRate==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,et,[l[9]||=(0,e.createElementVNode)(`span`,null,`换手率`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.k.turnoverRate.toFixed(2))+`%`,1)])):(0,e.createCommentVNode)(``,!0)])],6)):(0,e.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-a068b75e`]]),nt={class:`marker-tooltip__title`},Y={key:0,class:`marker-tooltip__content`},rt=f((0,e.defineComponent)({__name:`MarkerTooltip`,props:{marker:{},pos:{},useAnchor:{type:Boolean},anchorPlacement:{},setEl:{type:Function}},setup(t){let n={support:`支撑位`,resistance:`阻力位`,top:`顶部`,bottom:`底部`},r=t,i=(0,e.computed)(()=>r.useAnchor===!0),a=(0,e.computed)(()=>r.anchorPlacement===`left-bottom`?`anchor-left-bottom`:`anchor-right-bottom`);function o(e){r.setEl?.(e)}let s=(0,e.computed)(()=>r.marker&&`date`in r.marker),c=(0,e.computed)(()=>{if(!r.marker)return``;if(s.value){let e=r.marker;return e.label?.text||e.shape}let e=r.marker;return n[e.markerType]||e.markerType}),l=(0,e.computed)(()=>{if(!r.marker)return{};if(s.value){let e=r.marker;return{日期:e.date,...e.metadata}}return r.marker.metadata}),u=(0,e.computed)(()=>Object.keys(l.value).length>0);function d(e){return typeof e==`number`?e.toFixed(2):String(e)}return(n,r)=>t.marker?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref:o,class:(0,e.normalizeClass)([`marker-tooltip`,[{"use-anchor":i.value},a.value]]),style:(0,e.normalizeStyle)(i.value?void 0:{left:`${t.pos.x+12}px`,top:`${t.pos.y+12}px`})},[(0,e.createElementVNode)(`div`,nt,(0,e.toDisplayString)(c.value),1),u.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Y,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(l.value,(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n,class:`row`},[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n),1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(d(t)),1)]))),128))])):(0,e.createCommentVNode)(``,!0)],6)):(0,e.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-f2a21012`]]),it={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function at(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,it,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M7.904 17.563a1.2 1.2 0 0 0 2.228.308l2.09-3.093l4.907 4.907a1.067 1.067 0 0 0 1.509 0l1.047-1.047a1.067 1.067 0 0 0 0-1.509l-4.907-4.907l3.113-2.09a1.2 1.2 0 0 0-.309-2.228L4 4z`},null,-1)]])}var ot=(0,e.markRaw)({name:`tabler-pointer`,render:at}),st={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ct(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,st,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 19h16M4 15l4-6l4 2l4-5l4 4`},null,-1)]])}var lt=(0,e.markRaw)({name:`tabler-chart-line`,render:ct}),ut={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,ut,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M17 7L7 17M8 7h9v9`},null,-1)]])}var ft=(0,e.markRaw)({name:`tabler-arrow-up-right`,render:dt}),pt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,pt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-6 6l6-6m-6-6l6 6`},null,-1)]])}var ht=(0,e.markRaw)({name:`tabler-arrow-right`,render:mt}),gt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _t(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,gt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14`},null,-1)]])}var vt=(0,e.markRaw)({name:`tabler-minus`,render:_t}),yt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,yt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 12v.01M7 12h10m4 0v.01`},null,-1)]])}var xt=(0,e.markRaw)({name:`tabler-separator`,render:bt}),St={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ct(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,St,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2M9 12h6m-3-3v6`},null,-1)]])}var wt=(0,e.markRaw)({name:`tabler-crosshair`,render:Ct}),Tt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Et(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Tt,[...n[0]||=[(0,e.createElementVNode)(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m9-3h.01`}),(0,e.createElementVNode)(`path`,{d:`M11 12h1v4h1`})],-1)]])}var Dt=(0,e.markRaw)({name:`tabler-info-circle`,render:Et}),Ot={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Ot,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m-3-3v6m11 8l-6-6`},null,-1)]])}var At=(0,e.markRaw)({name:`tabler-zoom-in`,render:kt}),jt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Mt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,jt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m8 11l-6-6`},null,-1)]])}var Nt=(0,e.markRaw)({name:`tabler-zoom-out`,render:Mt}),Pt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ft(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Pt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2`},null,-1)]])}var It=(0,e.markRaw)({name:`tabler-maximize`,render:Ft}),Lt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Rt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Lt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 19v-2a2 2 0 0 1 2-2h2M15 5v2a2 2 0 0 0 2 2h2M5 15h2a2 2 0 0 1 2 2v2M5 9h2a2 2 0 0 0 2-2V5`},null,-1)]])}var zt=(0,e.markRaw)({name:`tabler-minimize`,render:Rt}),Bt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Vt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Bt,[...n[0]||=[(0,e.createElementVNode)(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 0 0-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 0 0-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 0 0-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 0 0-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 0 0 1.066-2.573c-.94-1.543.826-3.31 2.37-2.37c1 .608 2.296.07 2.572-1.065`}),(0,e.createElementVNode)(`path`,{d:`M9 12a3 3 0 1 0 6 0a3 3 0 0 0-6 0`})],-1)]])}var Ht=(0,e.markRaw)({name:`tabler-settings`,render:Vt}),Ut={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Wt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Ut,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 5a2 2 0 1 0 4 0a2 2 0 1 0-4 0m14 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0M3 19a2 2 0 1 0 4 0a2 2 0 1 0-4 0m14 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0M5 7v10M7 5h10M7 19h10m2-12v10`},null,-1)]])}var Gt=(0,e.markRaw)({name:`tabler-shape`,render:Wt}),Kt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Kt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 7a2 2 0 1 0 4 0a2 2 0 1 0-4 0m11 8a2 2 0 1 0 4 0a2 2 0 1 0-4 0m1-9a3 3 0 1 0 6 0a3 3 0 1 0-6 0M3 18a3 3 0 1 0 6 0a3 3 0 1 0-6 0m6-1l5-1.5m-7.5-7l7.81 5.37M7 7l8-1`},null,-1)]])}var Jt=(0,e.markRaw)({name:`tabler-chart-dots-3`,render:qt}),Yt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Xt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Yt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m18 10l-6-6l-6 6zm0 4l-6 6l-6-6z`},null,-1)]])}var Zt=(0,e.markRaw)({name:`tabler-caret-up-down`,render:Xt}),Qt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function $t(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Qt,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 4H5v16h3m8-16h3v16h-3`},null,-1)]])}var en=(0,e.markRaw)({name:`tabler-brackets`,render:$t});function tn(){return Object.create(null)}function nn(){return{ctxMethods:tn(),ctxProps:tn(),canvasProps:tn(),ctxMethodSources:Object.create(null)}}function rn(e,t,n){let r=e[t]??={count:0,totalTime:0};r.count+=1,r.totalTime+=n}function an(e,t,n,r){rn(e.ctxMethodSources[t]??=tn(),n,r)}function on(e){return Object.entries(e).filter(([,e])=>e.count>0).map(([e,t])=>({name:e,count:t.count,totalTime:t.totalTime.toFixed(2),averageTime:(t.totalTime/t.count).toFixed(4)})).sort((e,t)=>Number(t.totalTime)-Number(e.totalTime))}var sn=!1,X=new Map,cn=new Map;function ln(e){sn=e,e?typeof window<`u`&&!window.__KMAP_CANVAS_PROFILER_INSTALLED__&&dn():fn()}function un(){if(!sn)return`disabled`;let e=Error().stack;if(!e)return`unknown`;let t=e.split(`
2
+ `).map(e=>e.trim()).filter(Boolean);for(let e of t){if(e.includes(`canvasProfiler`)||e.includes(`CanvasRenderingContext2D`)||e===`Error`)continue;let t=e.replace(/^at\s+/,``),n=t.match(/((?:src|node_modules)[^\s)]+):(\d+):(\d+)/);if(n)return`${n[1]}:${n[2]}`;let r=t.match(/\(([^)]+):(\d+):(\d+)\)$/);return r?`${r[1]}:${r[2]}`:t}return`unknown`}function Z(e,t,n,r){let i=`${e.constructor?.name??`proto`}:${t}`;if(X.has(i))return;let a=Reflect.get(e,t);typeof a==`function`&&(X.set(i,a),Reflect.set(e,t,function(...e){if(!sn)return a.apply(this,e);let i=r?.captureSource?un():null,o=performance.now(),s=a.apply(this,e),c=performance.now()-o;return rn(n.ctxMethods,t,c),i&&an(n,t,i,c),s}))}function Q(e,t,n){let r=Object.getOwnPropertyDescriptor(e,t);if(!r?.set||!r.configurable)return;let i=`${e.constructor?.name??`proto`}:${t}`;cn.has(i)||(cn.set(i,r),Object.defineProperty(e,t,{configurable:!0,enumerable:r.enumerable??!1,get:r.get,set(e){if(!sn){r.set.call(this,e);return}let i=performance.now();r.set.call(this,e),rn(n,t,performance.now()-i)}}))}function dn(){if(typeof window>`u`||window.__KMAP_CANVAS_PROFILER_INSTALLED__)return;let e=CanvasRenderingContext2D?.prototype,t=HTMLCanvasElement?.prototype;if(!e||!t)return;let n=nn();Z(e,`fillText`,n,{captureSource:!0}),Z(e,`measureText`,n,{captureSource:!0}),Z(e,`drawImage`,n),Z(e,`save`,n),Z(e,`restore`,n),Z(e,`clip`,n),Z(e,`setTransform`,n),Z(e,`scale`,n),Q(e,`font`,n.ctxProps),Q(e,`filter`,n.ctxProps),Q(e,`shadowBlur`,n.ctxProps),Q(e,`lineWidth`,n.ctxProps),Q(t,`width`,n.canvasProps),Q(t,`height`,n.canvasProps),window.__KMAP_CANVAS_PROFILER_METRICS__=n,window.__KMAP_CANVAS_PROFILER_INSTALLED__=!0,window.showCanvasReport=()=>{let e=window.__KMAP_CANVAS_PROFILER_METRICS__;if(e){console.group(`[kmap] Canvas profiler report`),console.log(`ctx methods`),console.table(on(e.ctxMethods)),console.log(`ctx props`),console.table(on(e.ctxProps)),console.log(`canvas props`),console.table(on(e.canvasProps));for(let t of[`fillText`,`measureText`]){let n=e.ctxMethodSources[t];n&&(console.log(`${t} sources`),console.table(on(n).slice(0,20)))}console.groupEnd()}},window.resetCanvasReport=()=>{window.__KMAP_CANVAS_PROFILER_METRICS__=nn()},console.info(`[kmap] Canvas profiler enabled. Use window.showCanvasReport() and window.resetCanvasReport().`)}function fn(){if(typeof window>`u`||!window.__KMAP_CANVAS_PROFILER_INSTALLED__)return;let e=CanvasRenderingContext2D?.prototype,t=HTMLCanvasElement?.prototype;X.forEach((n,r)=>{let i=r.match(/^(.+):(.+)$/);if(!i)return;let[,a,o]=i,s=null;a===`CanvasRenderingContext2D`?s=e:a===`HTMLCanvasElement`&&(s=t),s&&Reflect.set(s,o,n)}),X.clear(),cn.forEach((n,r)=>{let i=r.match(/^(.+):(.+)$/);if(!i)return;let[,a,o]=i,s=null;a===`CanvasRenderingContext2D`?s=e:a===`HTMLCanvasElement`&&(s=t),s&&n.configurable&&Object.defineProperty(s,o,n)}),cn.clear(),window.__KMAP_CANVAS_PROFILER_INSTALLED__=!1,window.__KMAP_CANVAS_PROFILER_METRICS__=void 0,window.showCanvasReport=void 0,window.resetCanvasReport=void 0,console.info(`[kmap] Canvas profiler disabled.`)}var pn={class:`settings-body`},mn={class:`settings-label`},hn=[`onUpdate:modelValue`],gn=[`onUpdate:modelValue`],_n=[`value`],vn={class:`settings-label`},yn=[`onUpdate:modelValue`],bn=[`onUpdate:modelValue`],xn=[`value`],Sn={class:`settings-header`},Cn={class:`header-right`},wn={class:`settings-body`},Tn=f((0,e.defineComponent)({__name:`ChartSettingsDialog`,props:{show:{type:Boolean}},emits:[`close`,`confirm`],setup(n,{emit:r}){let a=n,o=r,s=x(),c=(0,e.computed)(()=>i.DEFAULT_SETTINGS.filter(e=>e.group===`main`)),l=(0,e.computed)(()=>i.DEFAULT_SETTINGS.filter(e=>e.group===`experimental`)),u=(0,e.ref)(!1);function d(){try{let e=localStorage.getItem(i.SETTINGS_STORAGE_KEY);if(e){let n=JSON.parse(e),r={};return i.DEFAULT_SETTINGS.forEach(e=>{r[e.key]=n[e.key]??e.default}),r.colorPresetSettings=(0,t.normalizeColorPresetSettings)(n.colorPresetSettings),r}}catch{}let e={};return i.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e.colorPresetSettings={},e}let f=(0,e.ref)(d());(0,e.watch)(()=>a.show,e=>{e&&(f.value=d())});function m(){o(`close`)}function h(){let e={};i.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e.colorPresetSettings={},f.value=e}function g(){o(`confirm`,{...f.value})}return(t,r)=>((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(s)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[n.show?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`settings-overlay`,onClick:m},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:`settings-modal`,onClick:r[1]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,{class:`settings-header`},[r[7]||=(0,e.createElementVNode)(`div`,{class:`header-left`},[(0,e.createElementVNode)(`span`,{class:`settings-title`},`图表设置`),(0,e.createElementVNode)(`span`,{class:`settings-subtitle`},`个性化配置`)],-1),(0,e.createElementVNode)(`div`,{class:`header-right`},[(0,e.createElementVNode)(`button`,{class:`settings-close`,onClick:m},[...r[6]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M18 6L6 18M6 6l12 12`})],-1)]])])]),(0,e.createElementVNode)(`div`,pn,[c.value.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[r[8]||=(0,e.createElementVNode)(`div`,{class:`settings-section-divider`},[(0,e.createElementVNode)(`span`,{class:`settings-section-label`},`主图设置`)],-1),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(c.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.key,class:`settings-item`},[(0,e.createElementVNode)(`label`,mn,[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),t.type===`boolean`?(0,e.withDirectives)(((0,e.openBlock)(),(0,e.createElementBlock)(`input`,{key:0,type:`checkbox`,class:`settings-checkbox`,"onUpdate:modelValue":e=>f.value[t.key]=e},null,8,hn)),[[e.vModelCheckbox,f.value[t.key]]]):t.type===`select`&&t.options?(0,e.withDirectives)(((0,e.openBlock)(),(0,e.createElementBlock)(`select`,{key:1,class:`settings-select`,"onUpdate:modelValue":e=>f.value[t.key]=e},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.options,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`option`,{key:t.value,value:t.value},(0,e.toDisplayString)(t.label),9,_n))),128))],8,gn)),[[e.vModelSelect,f.value[t.key]]]):(0,e.createCommentVNode)(``,!0)])]))),128))],64)):(0,e.createCommentVNode)(``,!0),r[11]||=(0,e.createElementVNode)(`div`,{class:`settings-section-divider`},[(0,e.createElementVNode)(`span`,{class:`settings-section-label`},`样式 / 颜色`)],-1),(0,e.createElementVNode)(`div`,{class:`settings-item nav-item`,onClick:r[0]||=e=>u.value=!0},[...r[9]||=[(0,e.createElementVNode)(`label`,{class:`settings-label`},[(0,e.createElementVNode)(`span`,null,`颜色配置`),(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,width:`16`,height:`16`,class:`nav-arrow`},[(0,e.createElementVNode)(`path`,{d:`M9 18l6-6-6-6`})])],-1)]]),l.value.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[r[10]||=(0,e.createElementVNode)(`div`,{class:`settings-section-divider`},[(0,e.createElementVNode)(`span`,{class:`settings-section-label`},`实验性 / 调试设置`)],-1),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(l.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.key,class:`settings-item experimental`},[(0,e.createElementVNode)(`label`,vn,[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),t.type===`boolean`?(0,e.withDirectives)(((0,e.openBlock)(),(0,e.createElementBlock)(`input`,{key:0,type:`checkbox`,class:`settings-checkbox`,"onUpdate:modelValue":e=>f.value[t.key]=e},null,8,yn)),[[e.vModelCheckbox,f.value[t.key]]]):t.type===`select`&&t.options?(0,e.withDirectives)(((0,e.openBlock)(),(0,e.createElementBlock)(`select`,{key:1,class:`settings-select`,"onUpdate:modelValue":e=>f.value[t.key]=e},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.options,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`option`,{key:t.value,value:t.value},(0,e.toDisplayString)(t.label),9,xn))),128))],8,bn)),[[e.vModelSelect,f.value[t.key]]]):(0,e.createCommentVNode)(``,!0)])]))),128))],64)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,{class:`settings-footer`},[(0,e.createElementVNode)(`button`,{class:`settings-btn reset`,onClick:h},[...r[12]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}),(0,e.createElementVNode)(`path`,{d:`M3 3v5h5`})],-1),(0,e.createTextVNode)(` 重置 `,-1)]]),(0,e.createElementVNode)(`div`,{class:`footer-right`},[(0,e.createElementVNode)(`button`,{class:`settings-btn cancel`,onClick:m},`取消`),(0,e.createElementVNode)(`button`,{class:`settings-btn confirm`,onClick:g},[...r[13]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`},[(0,e.createElementVNode)(`path`,{d:`M20 6L9 17l-5-5`})],-1),(0,e.createTextVNode)(` 确定 `,-1)]])])])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1}),(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[u.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`settings-overlay nested-overlay`,onClick:r[5]||=e=>u.value=!1},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:`settings-modal`,onClick:r[4]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,Sn,[r[15]||=(0,e.createElementVNode)(`div`,{class:`header-left`},[(0,e.createElementVNode)(`span`,{class:`settings-title`},`颜色预设`),(0,e.createElementVNode)(`span`,{class:`settings-subtitle`},`自定义图表颜色`)],-1),(0,e.createElementVNode)(`div`,Cn,[(0,e.createElementVNode)(`button`,{class:`settings-close`,onClick:r[2]||=e=>u.value=!1},[...r[14]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,e.createElementVNode)(`path`,{d:`M18 6L6 18M6 6l12 12`})],-1)]])])]),(0,e.createElementVNode)(`div`,wn,[(0,e.createVNode)(p,{"color-preset-settings":f.value.colorPresetSettings,"onUpdate:colorPresetSettings":r[3]||=e=>f.value={...f.value,colorPresetSettings:e}},null,8,[`color-preset-settings`])])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))}}),[[`__scopeId`,`data-v-49dd396c`]]),En={class:`left-toolbar`,"aria-label":`图表工具栏`},Dn={class:`left-toolbar__group`},On=[`title`,`aria-label`,`onClick`],kn=[`onClick`],An=[`title`,`aria-label`,`onClick`],jn={class:`left-toolbar__group`},Mn={class:`left-toolbar__group`},Nn=[`title`,`aria-label`],Pn={class:`left-toolbar__group`},Fn=f((0,e.defineComponent)({__name:`LeftToolbar`,props:{isFullscreen:{type:Boolean}},emits:[`selectTool`,`toggleFullscreen`,`zoomIn`,`zoomOut`,`settingsChange`],setup(t,{expose:n,emit:r}){let a=[{id:`cursor`,title:`光标`,icon:ot},{id:`lines`,title:`线条`,icon:lt,children:[{id:`trend-line`,title:`线段`,icon:lt},{id:`ray`,title:`射线`,icon:ft},{id:`h-line`,title:`水平线`,icon:vt},{id:`h-ray`,title:`水平射线`,icon:ht},{id:`v-line`,title:`垂直线`,icon:xt},{id:`crosshair-line`,title:`十字线`,icon:wt},{id:`info-line`,title:`信息线`,icon:Dt}]},{id:`channels`,title:`通道`,icon:Gt,children:[{id:`parallel-channel`,title:`平行通道`,icon:Gt},{id:`regression-channel`,title:`回归趋势`,icon:Jt},{id:`flat-line`,title:`平滑顶底`,icon:Zt},{id:`disjoint-channel`,title:`不相交通道`,icon:en}]}],o=r,s=(0,e.ref)(`cursor`),c=(0,e.ref)(null),l=(0,e.ref)(!1);function u(){try{let e=localStorage.getItem(i.SETTINGS_STORAGE_KEY);if(e){let t=JSON.parse(e),n={...t};return i.DEFAULT_SETTINGS.forEach(e=>{n[e.key]=t[e.key]??e.default}),n}}catch{}let e={};return i.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e}function d(e){try{localStorage.setItem(i.SETTINGS_STORAGE_KEY,JSON.stringify(e))}catch{}}let f=(0,e.ref)(u());function p(e){return s.value===e.id?!0:e.children?e.children.some(e=>e.id===s.value):!1}function m(e){if(e.children?.length){if(!e.children.some(e=>e.id===s.value)){let t=e.children[0];s.value=t.id,o(`selectTool`,t.id)}g(e.id);return}s.value=e.id,o(`selectTool`,e.id),c.value=null}function h(e){s.value=e.id,o(`selectTool`,e.id),c.value=null}function g(e){c.value=c.value===e?null:e}function _(){l.value=!0}function v(){return{...f.value}}n({getSettings:v});function y(e){f.value={...e},d(f.value),ln(!!f.value.enableCanvasProfiler),o(`settingsChange`,{...f.value}),l.value=!1}function b(e){e.target.closest(`.tool-item`)||(c.value=null)}return(0,e.onMounted)(()=>{document.addEventListener(`click`,b,!0),o(`settingsChange`,{...f.value}),ln(!!f.value.enableCanvasProfiler)}),(0,e.onUnmounted)(()=>{document.removeEventListener(`click`,b,!0)}),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,[(0,e.createElementVNode)(`nav`,En,[(0,e.createElementVNode)(`div`,Dn,[((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(a,t=>(0,e.createElementVNode)(`div`,{key:t.id,class:`tool-item`},[(0,e.createElementVNode)(`button`,{type:`button`,class:(0,e.normalizeClass)([`left-toolbar__button`,{active:p(t)}]),title:t.title,"aria-label":t.title,onClick:e=>m(t),onPointerdown:r[0]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[1]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[2]||=(0,e.withModifiers)(()=>{},[`stop`])},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t.icon),{class:`tool-icon`,"aria-hidden":`true`})),t.children&&t.children.length?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,{key:0,class:(0,e.normalizeClass)([`corner-indicator`,{open:c.value===t.id}]),onClick:(0,e.withModifiers)(e=>g(t.id),[`stop`]),"aria-label":`展开子菜单`},null,10,kn)):(0,e.createCommentVNode)(``,!0)],42,On),(0,e.createVNode)(e.Transition,{name:`dropdown`},{default:(0,e.withCtx)(()=>[c.value===t.id&&t.children&&t.children.length?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`tool-dropdown`,onPointerdown:r[3]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[4]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[5]||=(0,e.withModifiers)(()=>{},[`stop`])},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.id,type:`button`,class:(0,e.normalizeClass)([`left-toolbar__button`,{active:s.value===t.id}]),title:t.title,"aria-label":t.title,onClick:e=>h(t)},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t.icon),{class:`tool-icon`,"aria-hidden":`true`}))],10,An))),128))],32)):(0,e.createCommentVNode)(``,!0)]),_:2},1024)])),64))]),r[22]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,jn,[(0,e.createElementVNode)(`button`,{type:`button`,class:`left-toolbar__button`,title:`放大`,"aria-label":`放大`,onClick:r[6]||=e=>n.$emit(`zoomIn`),onPointerdown:r[7]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[8]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[9]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createVNode)((0,e.unref)(At),{class:`tool-icon`,"aria-hidden":`true`})],32),(0,e.createElementVNode)(`button`,{type:`button`,class:`left-toolbar__button`,title:`缩小`,"aria-label":`缩小`,onClick:r[10]||=e=>n.$emit(`zoomOut`),onPointerdown:r[11]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[12]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[13]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createVNode)((0,e.unref)(Nt),{class:`tool-icon`,"aria-hidden":`true`})],32)]),r[23]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,Mn,[(0,e.createElementVNode)(`button`,{type:`button`,class:`left-toolbar__button`,title:t.isFullscreen?`退出全屏`:`全屏显示`,"aria-label":t.isFullscreen?`退出全屏`:`全屏显示`,onClick:r[14]||=e=>n.$emit(`toggleFullscreen`),onPointerdown:r[15]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[16]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[17]||=(0,e.withModifiers)(()=>{},[`stop`])},[t.isFullscreen?((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(zt),{key:0,class:`tool-icon`,"aria-hidden":`true`})):((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(It),{key:1,class:`tool-icon`,"aria-hidden":`true`}))],40,Nn)]),r[24]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,Pn,[(0,e.createElementVNode)(`button`,{type:`button`,class:`left-toolbar__button`,title:`设置`,"aria-label":`设置`,onClick:_,onPointerdown:r[18]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[19]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[20]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createVNode)((0,e.unref)(Ht),{class:`tool-icon`,"aria-hidden":`true`})],32)])]),(0,e.createVNode)(Tn,{show:l.value,onClose:r[21]||=e=>l.value=!1,onConfirm:y},null,8,[`show`])],64))}}),[[`__scopeId`,`data-v-d0932502`]]),In=[`data-theme`],Ln={class:`pane-separator-layer`,"aria-hidden":`true`},Rn={class:`canvas-layer`,ref:`canvasLayerRef`},zn={class:`x-axis-canvas`,ref:`xAxisCanvasRef`},Bn=4,Vn=f((0,e.defineComponent)({__name:`KLineChart`,props:{semanticConfig:{},dataFetcher:{},yPaddingPx:{default:20},minKWidth:{default:1},maxKWidth:{default:50},rightAxisWidth:{default:0},bottomAxisHeight:{default:24},priceLabelWidth:{default:60},zoomLevels:{default:20},initialZoomLevel:{default:3},isFullscreen:{type:Boolean,default:!1}},emits:[`zoomLevelChange`,`toggleFullscreen`,`themeChange`],setup(i,{expose:a,emit:o}){let s=i,c=o,l=(0,e.ref)(null),u=(0,e.ref)(null),d=(0,e.ref)(null),f=(0,e.ref)(null),p=(0,e.ref)(null);b(d);let m=(0,e.shallowRef)(null),h=(0,e.shallowRef)(null),g=(0,e.ref)(0),_=(0,e.ref)(0),y=(0,e.ref)(1),x=(0,e.ref)(s.initialZoomLevel??1),S=(0,e.ref)(0),C=(0,e.ref)(1),w=(0,e.ref)(0),T=(0,e.ref)({}),E=(0,e.ref)(null),D=(0,e.ref)([]),ee=x.value;S.value=(0,n.zoomLevelToKWidth)(ee,{minKWidth:s.minKWidth,maxKWidth:s.maxKWidth,zoomLevelCount:s.zoomLevels,dpr:y.value}),C.value=(0,n.kGapFromKWidth)(S.value,y.value);let O=(0,e.ref)(`light`),k=(0,e.ref)({}),A=(0,e.computed)(()=>{let e=k.value.isAsiaMarket??!1,n=(0,t.resolveThemeColors)(O.value,e);return{upColor:n.candleUpBody,downColor:n.candleDownBody}}),te=(0,e.computed)(()=>{let e=O.value===`dark`?t.darkTheme:t.lightTheme,n=k.value.colorPresetSettings?.[O.value];return n&&Object.keys(n).length>0?(0,t.themeToCssVars)({...e,colors:{...e.colors,...n}}):(0,t.themeToCssVars)(e)}),j=null;function M(e){m.value?.setTheme(e.matches?`dark`:`light`)}function N(e,t){if(!(!e||!t))if(t===`auto`){let t=window.matchMedia(`(prefers-color-scheme: dark)`);e.setTheme(t.matches?`dark`:`light`),j!==t&&(j?.removeEventListener(`change`,M),j=t,t.addEventListener(`change`,M))}else j?.removeEventListener(`change`,M),j=null,e.setTheme(t)}function ne(){}function P(e){if(k.value=e,N(m.value,e.theme),m.value?.updateSettingsFacade(e),e.performanceTest10kKlines){let e=F();console.time(`updateData-10k`),m.value?.updateData(e),console.timeEnd(`updateData-10k`),g.value=e.length,_.value++}else h.value&&m.value?.getData()?.length===1e4&&h.value.applyConfig(s.semanticConfig)}function F(){let e=[],t=new Date(`2020-01-01`).getTime(),n=3e3;for(let r=0;r<1e4;r++){let i=t+r*864e5,a=(Math.random()-.5)*2*.02+1e-4,o=n,s=o*(1+a),c=Math.max(o,s)*(1+Math.random()*.01),l=Math.min(o,s)*(1-Math.random()*.01),u=Math.floor(1e6+Math.random()*5e6);e.push({timestamp:i,open:parseFloat(o.toFixed(2)),high:parseFloat(c.toFixed(2)),low:parseFloat(l.toFixed(2)),close:parseFloat(s.toFixed(2)),volume:u}),n=s}return e}function I(e,t,n){let r=e.getBoundingClientRect();return{width:Math.max(t,Math.round(r.width)),height:Math.max(n,Math.round(r.height))}}function re(t){t&&(0,e.nextTick)(()=>{if(!t.isConnected)return;let e=I(t,180,80);m.value?.setTooltipSize(e)})}function ie(t){t&&(0,e.nextTick)(()=>{t.isConnected&&(ce.value=I(t,120,60))})}let L=(0,e.ref)({x:0,y:0}),R=(0,e.ref)(!1),z=null;function ae(){z=null}function oe(e){return z||=e.getBoundingClientRect(),z}let B=(0,e.shallowRef)({crosshairPos:null,crosshairIndex:null,crosshairPrice:null,hoveredIndex:null,activePaneId:null,tooltipPos:{x:0,y:0},tooltipAnchorPlacement:`right-bottom`,hoveredMarkerData:null,hoveredCustomMarker:null,isDragging:!1,isResizingPaneBoundary:!1,isHoveringPaneBoundary:!1,hoveredPaneBoundaryId:null,isHoveringRightAxis:!1}),V=(0,e.shallowRef)(null),H=(0,e.computed)(()=>{let e=E.value;return e?D.value.find(t=>t.id===e)??null:null}),se=(0,e.ref)([]),ce=(0,e.ref)({width:220,height:120}),U=(0,e.computed)(()=>{let e=l.value,t=u.value;return!e||!t?{x:0,y:0}:{x:e.offsetLeft,y:e.offsetTop}}),W=(0,e.computed)(()=>B.value.hoveredMarkerData),le=(0,e.computed)(()=>B.value.hoveredCustomMarker),ue=(0,e.computed)(()=>B.value.isDragging),de=(0,e.computed)(()=>B.value.isResizingPaneBoundary),fe=(0,e.computed)(()=>B.value.isHoveringPaneBoundary),pe=(0,e.computed)(()=>B.value.hoveredPaneBoundaryId),me=(0,e.computed)(()=>B.value.isHoveringRightAxis),he=(0,e.computed)(()=>B.value.hoveredIndex);(0,e.computed)(()=>B.value.crosshairIndex);let ge=(0,e.computed)(()=>ue.value?`grabbing`:de.value||fe.value?`ns-resize`:he.value===null?`crosshair`:`pointer`),_e=(0,e.computed)(()=>{let e=B.value.hoveredIndex;if(typeof e!=`number`)return null;_.value;let t=m.value?.getData();return t&&e>=0&&e<t.length?t[e]:null}),ve=(0,e.computed)(()=>B.value.hoveredIndex),ye=(0,e.computed)(()=>B.value.tooltipPos),be=(0,e.computed)(()=>({x:ye.value.x+U.value.x,y:ye.value.y+U.value.y})),xe=(0,e.computed)(()=>({left:`${be.value.x}px`,top:`${be.value.y}px`})),Se=(0,e.computed)(()=>({x:L.value.x+U.value.x,y:L.value.y+U.value.y})),Ce=(0,e.computed)(()=>({left:`${Se.value.x}px`,top:`${Se.value.y}px`})),we=(0,e.computed)(()=>B.value.tooltipAnchorPlacement),Te=(0,e.computed)(()=>{let e=m.value?.viewport.peek(),t=l.value,n=e?.plotWidth??(t?t.clientWidth:0);return L.value.x+12+ce.value.width+12>n?`left-bottom`:`right-bottom`}),Ee=(0,e.computed)(()=>(_.value,m.value?.getData()??[]));function De(e){V.value?.setTool(e)}function Oe(e){let t=H.value;!t||!V.value||V.value.updateDrawingStyle(t.id,e)}function ke(){let e=H.value;!e||!V.value||(V.value.removeDrawing(e.id),E.value=null,D.value=V.value.getDrawings())}function Ae(e){m.value?.handlePointerEvent(e,{onPointerDown:(e,t)=>V.value?.onPointerDown(e,t)?(D.value=V.value.getDrawings(),!0):!1})}function je(e){let t=l.value;if(t){let n=oe(t);L.value={x:e.clientX-n.left,y:e.clientY-n.top}}m.value?.handlePointerEvent(e,{onPointerMove:(e,t)=>V.value?.onPointerMove(e,t)?(D.value=V.value.getDrawings(),!0):!1})}function Me(e){m.value?.handlePointerEvent(e,{onPointerUp:(e,t)=>V.value?.onPointerUp(e,t)?(D.value=V.value.getDrawings(),!0):!1})}function Ne(e){m.value?.handlePointerEvent(e)}function Pe(e){m.value?.handlePointerEvent(e)}function Fe(e){m.value?.handlePointerEvent(e)}function Ie(e){m.value?.handlePointerEvent(e)}function Le(e){m.value?.handlePointerEvent(e)}function Re(){m.value?.handleScrollEvent()}let ze=(0,e.ref)([]),Be=(0,e.computed)(()=>{let e=[],t=new Set;for(let n of K.value)t.has(n.indicatorId)||(t.add(n.indicatorId),e.push(n.indicatorId));return e}),Ve=(0,e.computed)(()=>[...ze.value,...Be.value]),G=(0,e.ref)({}),K=(0,e.ref)([]);function Ue(){let e=T.value.main??3;return K.value.length===0?[{id:`main`,ratio:e,visible:!0,role:`price`}]:[{id:`main`,ratio:e,visible:!0,role:`price`},...K.value.map(e=>({id:e.id,ratio:T.value[e.id]??1,visible:!0,role:`indicator`}))]}function We(e){return{...n.SUB_PANE_INDICATOR_CONFIGS[e].defaultParams}}let q=new Map;function Ge(e=`VOLUME`,t){if(K.value.length>=Bn)return!1;let n=t??We(e);return!!m.value?.addIndicator(e,`sub`,n)}function Ke(e){m.value?.removeIndicator(e)}function qe(){for(let e of K.value)m.value?.removeIndicator(e.id);q.clear()}function Je(){let e=s.semanticConfig,t=m.value;if(!t)return;let n=e.indicators?.main;if(n)for(let e of n)e.enabled&&t.addIndicator(e.type,`main`,e.params)}function Ye(){let e=m.value?.subPanes.peek()??[];for(let t of e){let{paneId:e,indicatorId:n,params:r}=t,i=e.match(/^(.+)_(\d+)$/);if(i){let[,e,t]=i,n=parseInt(t,10);n>=(q.get(e)??0)&&q.set(e,n+1)}}}function Xe(e,t){let n=We(t);m.value?.replaceSubPaneIndicator(e,t,n)}function Ze(e,t){let r=m.value;if(r){if([`MA`,`BOLL`,`EXPMA`,`ENE`,`WMA`,`DEMA`,`TEMA`,`HMA`,`KAMA`,`SAR`,`SUPERTREND`,`KELTNER`,`DONCHIAN`,`ICHIMOKU`,`PIVOT`,`FIB`,`STRUCTURE`,`ZONES`].includes(e)){let n=ze.value.find(t=>t===e);t&&!n?r.addIndicator(e,`main`,G.value[e]):!t&&n&&r.removeIndicator(e.toUpperCase());return}if(n.SUB_PANE_INDICATORS.includes(e))if(t){if(K.value.find(t=>t.indicatorId===e)||K.value.length>=Bn)return;if(!r.addIndicator(e,`sub`,G.value[e])&&K.value.length>0){let t=K.value[K.value.length-1];Xe(t.id,e)}}else K.value.filter(t=>t.indicatorId===e).forEach(e=>{r.removeIndicator(e.id)})}}function Qe(e,t){if(e===`MA`||e===`BOLL`||e===`EXPMA`||e===`ENE`){m.value?.updateIndicatorParams(e,t);return}n.SUB_PANE_INDICATORS.includes(e)&&K.value.filter(t=>t.indicatorId===e).forEach(e=>{m.value?.updateIndicatorParams(e.id,t)})}function $e(e){if(!e.length||K.value.length<=1)return;let t=e.filter(e=>n.SUB_PANE_INDICATORS.includes(e));if(!t.length)return;let r=new Map(K.value.map(e=>[e.indicatorId,e])),i=[];for(let e of t){let t=r.get(e);t&&(i.push(t),r.delete(e))}if(i.length===0)return;for(let e of K.value)r.has(e.indicatorId)&&(i.push(e),r.delete(e.indicatorId));let a=K.value.map(e=>e.id),o=i.map(e=>e.id);if(a.join(`|`)===o.join(`|`))return;K.value=i;let s=m.value;s&&s.updatePaneLayout(Ue())}let et=(0,e.computed)(()=>s.rightAxisWidth+s.priceLabelWidth),J=(0,e.computed)(()=>(_.value,w.value,S.value,C.value,y.value,m.value?.getContentWidth()??0));function nt(){let e=l.value,t=m.value;if(!e||!t)return;let r=t.getData()?.length??0;if(r===0)return;let i=t.viewport.peek().dpr,{unitPx:a,startXPx:o}=(0,n.getPhysicalKLineConfig)(S.value,C.value,i),s=(o+r*a)/i,c=Math.max(0,e.scrollWidth-e.clientWidth),u=Math.min(c,Math.max(0,s-e.clientWidth));e.scrollLeft=Math.round(u*i)/i}function Y(e,t){m.value?.zoomToLevel(e,t)}a({scheduleRender:ne,scrollToRight:nt,addSubPane:Ge,removeSubPane:Ke,switchSubIndicator:Xe,clearAllSubPanes:qe,zoomToLevel:Y,zoomIn:e=>Y(x.value+1,e),zoomOut:e=>Y(x.value-1,e),getZoomLevel:()=>x.value,getZoomLevelCount:()=>m.value?.getZoomLevelCount()??10});function it(){return e=>{e.preventDefault(),m.value?.handleWheelEvent(e)}}function at(e,t,r,i){return(0,n.createChartController)({container:e,data:[],canvasLayer:t,rightAxisLayer:r,xAxisCanvas:i,initialZoomLevel:s.initialZoomLevel,zoomLevels:s.zoomLevels,yPaddingPx:s.yPaddingPx,rightAxisWidth:s.rightAxisWidth,bottomAxisHeight:s.bottomAxisHeight,priceLabelWidth:s.priceLabelWidth,minKWidth:s.minKWidth,maxKWidth:s.maxKWidth})}function ot(t){let n=t.paneLayout.subscribe(()=>{ae();let e=l.value&&parseInt(getComputedStyle(l.value).borderTopWidth)||0;se.value=t.paneLayout.peek().slice(0,-1).map(n=>{let r=t.getPaneInfo(n.id),i=(r?.top??0)+(r?.height??0);return{id:n.id,top:i+e}})}),r=t.paneRatios.subscribe(()=>{T.value={...t.paneRatios.peek()}}),i=t.viewport.subscribe(()=>{let n=t.viewport.peek();y.value!==n.dpr&&(y.value=n.dpr),w.value!==n.plotWidth&&(w.value=n.plotWidth),(x.value!==n.zoomLevel||S.value!==n.kWidth||C.value!==n.kGap)&&(x.value=n.zoomLevel,S.value=n.kWidth,C.value=n.kGap);let r=n.desiredScrollLeft;r!==void 0&&r!==l.value?.scrollLeft&&(ae(),(0,e.nextTick)(()=>{let e=l.value;if(!e)return;let t=Math.max(0,e.scrollWidth-e.clientWidth),i=Math.min(Math.max(0,r),t),a=n.dpr;e.scrollLeft=Math.round(i*a)/a}))}),a=t.data.subscribe(()=>{g.value=t.data.peek().length,_.value++}),o=t.theme.subscribe(()=>{let e=t.theme.peek();O.value=e,c(`themeChange`,e)}),s=t.indicators.subscribe(()=>{let e=t.indicators.peek(),n=e.filter(e=>e.role===`main`).map(e=>e.definitionId);ze.value=n;let r={...G.value};for(let t of e)t.role===`main`&&t.params&&Object.keys(t.params).length>0&&(r[t.definitionId]={...t.params});t.updateRendererConfig(`mainIndicatorLegend`,{indicators:{MA:{enabled:n.includes(`MA`),params:r.MA||{}},BOLL:{enabled:n.includes(`BOLL`),params:r.BOLL||{}},EXPMA:{enabled:n.includes(`EXPMA`),params:r.EXPMA||{}},ENE:{enabled:n.includes(`ENE`),params:r.ENE||{}}}}),G.value=r}),u=t.subPanes.subscribe(()=>{let e=t.subPanes.peek(),n=new Set(e.map(e=>e.paneId)),r=K.value.filter(e=>n.has(e.id)),i=new Set(r.map(e=>e.id));for(let t of e)i.has(t.paneId)||r.push({id:t.paneId,indicatorId:t.indicatorId,params:t.params});K.value=r;let a={...G.value};for(let t of e)t.params&&Object.keys(t.params).length>0&&(a[t.indicatorId]={...t.params});G.value=a});(0,e.onUnmounted)(()=>{i(),a(),r(),n(),o(),s(),u(),j?.removeEventListener(`change`,M)})}function st(e){let t=p.value?.getSettings()??{showVolumePriceMarkers:!0};if(k.value=t,N(e,t.theme),e.updateSettingsFacade(t),t.performanceTest10kKlines){let t=F();console.time(`updateData-10k`),e.updateData(t),console.timeEnd(`updateData-10k`)}}function ct(e){V.value=new n.DrawingInteractionController(e),V.value.setCallbacks({onDrawingCreated:e=>{D.value=[...D.value,e],E.value=e.id},onToolChange:()=>{},onDrawingSelected:e=>{E.value=e?.id??null}})}function lt(e){e.setTooltipAnchorPositioning(R.value),e.interactionState.subscribe(()=>{B.value=e.interactionState.peek()}),B.value=e.interactionState.peek(),y.value=e.viewport.peek().dpr}function ut(t){if((0,r.__setDataFetcher)(s.dataFetcher),h.value=new r.SemanticChartController(t),h.value.on(`config:error`,e=>{console.error(`Semantic config error:`,e)}),h.value.on(`config:ready`,()=>{Je(),Ye(),(0,e.nextTick)(()=>nt())}),k.value.performanceTest10kKlines){let e=h.value.applyIndicatorsOnly(s.semanticConfig);e&&!e.success&&console.error(`Semantic config apply failed:`,e.errors)}else h.value.applyConfig(s.semanticConfig).then(e=>{e&&!e.success&&console.error(`Semantic config apply failed:`,e.errors)})}return(0,e.onMounted)(()=>{R.value=!1;let e=l.value,t=u.value;if(!e||!t)return;let n=it();e.addEventListener(`wheel`,n,{passive:!1});let r=e.querySelector(`.canvas-layer`),i=e.querySelector(`.x-axis-canvas`),a=at(e,r,t.querySelector(`.right-axis-host`),i);m.value=a,ot(a),Je(),st(a),ct(a),lt(a),ut(a)}),(0,e.onUnmounted)(()=>{let e=m.value;e&&(m.value=null,e.dispose()),V.value=null}),(0,e.watch)(()=>s.yPaddingPx,e=>{m.value?.updateOptionsFacade({yPaddingPx:e})}),(0,e.watch)(()=>s.semanticConfig,async(e,t)=>{if(e&&e!==t){let t=await h.value?.applyConfig(e);t&&!t.success&&console.error(`Semantic config apply failed:`,t.errors)}},{deep:!0}),(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`chartWrapperRef`,ref:d,class:`chart-wrapper`,"data-theme":O.value,style:(0,e.normalizeStyle)(te.value)},[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`chart-stage`,{"is-dragging":ue.value,"is-resizing-pane":de.value,"is-hovering-pane-separator":fe.value,"is-hovering-right-axis":me.value,"is-hovering-kline":he.value!==null}])},[(0,e.createVNode)(Fn,{ref_key:`toolbarRef`,ref:p,"is-fullscreen":i.isFullscreen,onSelectTool:De,onToggleFullscreen:n[0]||=e=>t.$emit(`toggleFullscreen`),onZoomIn:n[1]||=e=>Y(x.value+1),onZoomOut:n[2]||=e=>Y(x.value-1),onSettingsChange:P},null,8,[`is-fullscreen`]),(0,e.createElementVNode)(`div`,{class:`chart-main`,ref_key:`chartMainRef`,ref:u},[(0,e.createElementVNode)(`div`,Ln,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(se.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.id,class:(0,e.normalizeClass)([`pane-separator-line`,{"is-active":pe.value===t.id}]),style:(0,e.normalizeStyle)({top:`${t.top}px`})},null,6))),128))]),(0,e.createElementVNode)(`div`,{ref_key:`tooltipLayerRef`,ref:f,class:`tooltip-layer`},null,512),(0,e.createElementVNode)(`div`,{class:`chart-container`,style:(0,e.normalizeStyle)({cursor:ge.value}),ref_key:`containerRef`,ref:l,onScrollPassive:Re,onPointerdown:Ae,onPointermove:je,onPointerup:Me,onPointerleave:Ne},[(0,e.createElementVNode)(`div`,{class:`scroll-content`,style:(0,e.normalizeStyle)({width:J.value+`px`})},[(0,e.createElementVNode)(`div`,Rn,[(0,e.createElementVNode)(`canvas`,zn,null,512),H.value?((0,e.openBlock)(),(0,e.createBlock)(v,{key:0,drawing:H.value,onUpdateStyle:Oe,onDelete:ke},null,8,[`drawing`])):(0,e.createCommentVNode)(``,!0)],512)],4)],36),f.value?((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{key:0,to:f.value},[_e.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`tooltip-anchor kline-tooltip-anchor`,{"use-anchor":R.value}]),style:(0,e.normalizeStyle)(xe.value)},null,6)):(0,e.createCommentVNode)(``,!0),W.value||le.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`tooltip-anchor marker-tooltip-anchor`,{"use-anchor":R.value}]),style:(0,e.normalizeStyle)(Ce.value)},null,6)):(0,e.createCommentVNode)(``,!0),_e.value?((0,e.openBlock)(),(0,e.createBlock)(tt,{key:2,k:_e.value,index:ve.value,data:Ee.value,pos:be.value,"set-el":re,"use-anchor":R.value,"anchor-placement":we.value,"up-color":A.value.upColor,"down-color":A.value.downColor},null,8,[`k`,`index`,`data`,`pos`,`use-anchor`,`anchor-placement`,`up-color`,`down-color`])):(0,e.createCommentVNode)(``,!0),W.value||le.value?((0,e.openBlock)(),(0,e.createBlock)(rt,{key:3,marker:W.value||le.value,pos:Se.value,"use-anchor":R.value,"anchor-placement":Te.value,"set-el":ie},null,8,[`marker`,`pos`,`use-anchor`,`anchor-placement`])):(0,e.createCommentVNode)(``,!0)],8,[`to`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,{class:`right-axis-host`,ref:`rightAxisLayerRef`,style:(0,e.normalizeStyle)({width:et.value+`px`}),onPointerdown:Pe,onPointermove:Fe,onPointerup:Ie,onPointerleave:Le},null,36)],512)],2),(0,e.createVNode)(He,{"active-indicators":Ve.value,"indicator-params":G.value,onToggle:Ze,onUpdateParams:Qe,onReorderSubIndicators:$e},null,8,[`active-indicators`,`indicator-params`])],12,In))}}),[[`__scopeId`,`data-v-82877422`]]),Hn={name:`@363045841yyt/klinechart`,version:`0.7.10`,description:`Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.`,license:`MIT`,repository:{type:`git`,url:`https://github.com/363045841/KLineChartQuant.git`},bugs:`https://github.com/363045841/KLineChartQuant/issues`,homepage:`https://363045841.github.io/KLineChartQuant/`,type:`module`,engines:{node:`^20.19.0 || >=22.12.0`},sideEffects:!1,main:`./dist/index.js`,module:`./dist/index.js`,types:`./dist/index.d.ts`,exports:{".":{import:{types:`./dist/index.d.ts`,default:`./dist/index.js`},require:{types:`./dist/index.d.cts`,default:`./dist/index.cjs`}},"./web-component":{import:{default:`./dist/kline-chart.js`}},"./style.css":`./dist/klinechart.css`},files:[`dist`,`src`],publishConfig:{access:`public`},scripts:{dev:`vite --config preview/vite.config.ts`,build:`vite build`,"build:wc":`cross-env BUILD_TARGET=web-component vite build`,postbuild:`node -e "require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')"`,test:`vitest run`,"test:watch":`vitest`,size:`size-limit`,"lint:publish":`publint --strict .`,prepublishOnly:`npm run build`,"lint:types":`attw --pack .`},"size-limit":[{name:`vue (entry, pre-build src measurement)`,path:`src/index.ts`,limit:`8 KB`,gzip:!0,ignore:[`vue`,`@363045841yyt/klinechart-core`]}],peerDependencies:{"@363045841yyt/klinechart-core":`^`,vue:`^3.4.0`},devDependencies:{"@arethetypeswrong/cli":`^0.18.3`,"@size-limit/preset-small-lib":`^12.1.0`,"@vitejs/plugin-vue":`^6.0.0`,"@vue/test-utils":`^2.4.10`,"cross-env":`^7.0.3`,jsdom:`^29.1.1`,publint:`^0.3.0`,"size-limit":`^12.1.0`,typescript:`~6.0.3`,"unplugin-icons":`^23.0.1`,vite:`^8.0.14`,"vite-plugin-babel":`^1.3.2`,"vite-plugin-css-injected-by-js":`^5.0.1`,"vite-plugin-dts":`^5.0.1`,vitest:`^4.1.5`,vue:`^3.5.0`}}.version,Un=null;function Wn(e){Un=e}function Gn(e){if(e.container==null)throw Error("[@363045841yyt/klinechart] createChart: `container` is required and must be a non-null HTMLElement");if(Un===null)throw Error(`[@363045841yyt/klinechart] createChart: no ChartController factory registered. Call __setControllerFactory(...) before mounting (the core package wires this in production).`);return Un(e)}function $(t){let n=(0,e.shallowRef)(t.peek());return(0,e.onScopeDispose)(t.subscribe(()=>{n.value=t.peek()})),n}function Kn(t,n){let r=(0,e.shallowRef)(null),i=e=>{e==null||r.value!=null||(r.value=Gn({...n,container:e}))};i(t.value);let a=(0,e.watch)(t,e=>{i(e)},{immediate:!0,flush:`post`}),o=()=>{a();let e=r.value;e!=null&&(e.dispose(),r.value=null)};return(0,e.onScopeDispose)(o),(0,e.onBeforeUnmount)(o),{chart:r}}function qn(t){let n=(0,e.shallowRef)(t.indicators.peek());return(0,e.onScopeDispose)(t.indicators.subscribe(()=>{n.value=t.indicators.peek()})),{indicators:n,add:t.addIndicator.bind(t),remove:t.removeIndicator.bind(t),updateParams:t.updateIndicatorParams.bind(t)}}function Jn(t){let n=(0,e.shallowRef)(t.interactionState.peek());return(0,e.onScopeDispose)(t.interactionState.subscribe(()=>{n.value=t.interactionState.peek()})),n}function Yn(t){let n=(0,e.shallowRef)(t.paneRatios.peek());return(0,e.onScopeDispose)(t.paneRatios.subscribe(()=>{n.value=t.paneRatios.peek()})),n}function Xn(t){let n=(0,e.shallowRef)(t.viewport.peek());return(0,e.onScopeDispose)(t.viewport.subscribe(()=>{n.value=t.viewport.peek()})),n}function Zn(n){let r=(0,t.createIndicatorSelectorController)({catalog:n.catalog});(0,e.onScopeDispose)(()=>r.dispose());let i=$(r.filteredMain),a=$(r.filteredSub),o=$(r.menuOpen),s=$(r.searchQuery);function c(e){let t=n.catalog.find(t=>t.id===e);return t===void 0?null:n.addIndicator(e,t.role)}function l(e){return n.removeIndicator(e)}function u(e){return n.indicators.peek().some(t=>t.definitionId===e)}return{catalog:n.catalog,filteredMain:i,filteredSub:a,menuOpen:o,searchQuery:s,add:c,remove:l,openMenu:()=>r.openMenu(),closeMenu:()=>r.closeMenu(),toggleMenu:()=>r.toggleMenu(),setSearchQuery:e=>r.setSearchQuery(e),isActive:u}}var Qn=(0,e.defineComponent)({name:`KLineChart`,props:{data:{type:Array,required:!0},initialZoomLevel:{type:Number,default:3},zoomLevels:{type:Number,default:20},theme:{type:String,default:`light`},containerClass:{type:String,default:``}},emits:{ready:e=>!0,zoomLevelChange:(e,t)=>!0},setup(t,{emit:n,expose:r}){let i=(0,e.shallowRef)(null),a=(0,e.effectScope)(),o=(0,e.shallowRef)(null);(0,e.onMounted)(()=>{let r=i.value;r!=null&&(a.run(()=>{if(o.value=Gn({container:r,data:t.data,initialZoomLevel:t.initialZoomLevel,zoomLevels:t.zoomLevels,theme:t.theme}),o.value!=null){n(`ready`,o.value);let t=o.value,r=()=>{let e=t.viewport.peek();n(`zoomLevelChange`,e.zoomLevel,e.kWidth)};r(),(0,e.onScopeDispose)(t.viewport.subscribe(r))}}),(0,e.watch)(()=>t.data,e=>{o.value?.setData(e)}),(0,e.watch)(()=>t.theme,e=>{o.value?.setTheme(e)}))}),(0,e.onUnmounted)(()=>{o.value?.dispose(),o.value=null,a.stop()}),r({getController:()=>o.value,handlePointerEvent:(e,t)=>o.value?.handlePointerEvent(e,t)??!1,handleWheelEvent:e=>o.value?.handleWheelEvent(e),handleScrollEvent:()=>o.value?.handleScrollEvent(),zoomToLevel:(e,t)=>o.value?.zoomToLevel(e,t),zoomIn:e=>o.value?.zoomIn(e),zoomOut:e=>o.value?.zoomOut(e),addIndicator:(e,t,n)=>o.value?.addIndicator(e,t,n)??null,removeIndicator:e=>o.value?.removeIndicator(e)??!1,setTheme:e=>o.value?.setTheme(e),setData:e=>o.value?.setData(e)});let s=e=>{i.value=e??null};return()=>(0,e.h)(`div`,{ref:s,class:[`klinechart-quant-root`,t.containerClass].filter(Boolean).join(` `),style:{width:`100%`,height:`100%`}})}}),$n={install(e){e.component(`KLineChart`,Qn)}};Wn(t.createChartController),Object.defineProperty(exports,"CORE_VERSION",{enumerable:!0,get:function(){return t.VERSION}}),exports.DrawingStyleToolbar=v,exports.IndicatorParams=I,exports.IndicatorSelector=He,exports.KLineChart=Qn,exports.KLineChartVue=Vn,exports.KLineTooltip=tt,exports.KMapPlugin=$n,exports.LeftToolbar=Fn,exports.MarkerTooltip=rt,exports.VERSION=Hn,exports.__setControllerFactory=Wn,exports.coreSignalToVueRef=$,exports.createChart=Gn,exports.useChart=Kn,exports.useIndicatorSelector=Zn,exports.useIndicators=qn,exports.useInteractionState=Jn,exports.usePaneRatios=Yn,exports.useViewport=Xn;
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- .color-preset-tools[data-v-a52947a4]{grid-template-columns:1fr auto;align-items:center;gap:8px;margin-bottom:4px;display:grid}.theme-tabs[data-v-a52947a4]{border:1px solid var(--klc-color-border-button);background:var(--klc-color-grid-minor);border-radius:8px;grid-template-columns:1fr 1fr;gap:3px;padding:3px;display:grid}.theme-tab[data-v-a52947a4]{height:28px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:none;border-radius:6px;font-size:12px;font-weight:500;transition:background .18s,color .18s,box-shadow .18s}.theme-tab[data-v-a52947a4]:not(.active):hover{color:var(--klc-color-foreground);background:color-mix(in srgb, var(--klc-color-tag-bg-white) 60%, transparent)}.theme-tab.active[data-v-a52947a4]{background:var(--klc-color-tag-bg-white);color:var(--klc-color-foreground);font-weight:600;box-shadow:0 1px 4px #0000001a}.color-reset-btn[data-v-a52947a4]{border:1px solid var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white);height:36px;color:var(--klc-color-axis-text);white-space:nowrap;cursor:pointer;border-radius:8px;padding:0 14px;font-size:12px;font-weight:500;transition:background .18s,border-color .18s,color .18s,box-shadow .18s}.color-reset-btn[data-v-a52947a4]:hover{border-color:var(--klc-color-axis-text);background:var(--klc-color-background);color:var(--klc-color-foreground);box-shadow:0 1px 3px #00000014}.color-reset-btn[data-v-a52947a4]:active{background:var(--klc-color-tag-bg-hover);box-shadow:none}.color-group-label[data-v-a52947a4]{color:var(--klc-color-axis-text);margin:6px 0;font-size:12px;font-weight:600;line-height:1.3}.color-grid[data-v-a52947a4]{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.color-item[data-v-a52947a4]{border:1px solid var(--klc-color-grid-major);background:var(--klc-color-background);min-height:36px;color:var(--klc-color-foreground);cursor:pointer;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:12px;line-height:1.3;transition:border-color .18s,background .18s,box-shadow .18s;display:flex}.color-item[data-v-a52947a4]:hover{border-color:var(--klc-color-axis-line);background:var(--klc-color-tag-bg-hover);box-shadow:0 1px 4px color-mix(in srgb, var(--klc-color-foreground) 6%, transparent)}.color-item span[data-v-a52947a4]{text-overflow:ellipsis;white-space:nowrap;user-select:none;min-width:0;overflow:hidden}.color-input[data-v-a52947a4]{border:1px solid var(--klc-color-axis-line);cursor:pointer;background:0 0;border-radius:6px;flex:none;width:26px;height:26px;padding:0;transition:border-color .18s,box-shadow .18s}.color-input[data-v-a52947a4]:hover{border-color:var(--klc-color-axis-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 6%, transparent)}.color-input[data-v-a52947a4]:focus-visible{border-color:var(--klc-color-axis-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 10%, transparent);outline:none}.color-input[data-v-a52947a4]::-webkit-color-swatch-wrapper{padding:2px}.color-input[data-v-a52947a4]::-webkit-color-swatch{border:none;border-radius:4px}@media (width<=480px){.color-preset-tools[data-v-a52947a4]{grid-template-columns:1fr}.color-reset-btn[data-v-a52947a4]{width:100%}.color-grid[data-v-a52947a4]{grid-template-columns:1fr}}.drawing-style-toolbar[data-v-02a1f4d6]{background:color-mix(in srgb, var(--klc-color-tag-bg-white) 88%, transparent);-webkit-backdrop-filter:blur(8px);border:1px solid var(--klc-color-border-button);z-index:100;user-select:none;pointer-events:auto;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-02a1f4d6]{justify-content:center;align-items:center;display:inline-flex}.color-item[data-v-02a1f4d6]{width:24px;height:24px;position:relative}.color-swatch[data-v-02a1f4d6]{border:1px solid var(--klc-color-axis-line);cursor:pointer;border-radius:4px;width:100%;height:100%;display:block}.color-input[data-v-02a1f4d6]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.toolbar-select[data-v-02a1f4d6]{border:1px solid var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white);height:24px;color:var(--klc-color-foreground);cursor:pointer;border-radius:4px;outline:none;padding:0 4px;font-size:12px}.toolbar-select[data-v-02a1f4d6]:hover{border-color:var(--klc-color-axis-text)}.toolbar-btn[data-v-02a1f4d6]{width:24px;height:24px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:border-color .15s,background .15s,color .15s;display:inline-flex}.toolbar-btn[data-v-02a1f4d6]:hover{border-color:var(--klc-color-axis-line);background:var(--klc-color-grid-minor);color:var(--klc-color-foreground)}.delete-btn[data-v-02a1f4d6]:hover{color:#dc2626;background:#fef2f2;border-color:#fca5a5}.delete-icon[data-v-02a1f4d6]{width:14px;height:14px}.params-overlay[data-v-30f2f611]{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-30f2f611]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);border-radius:12px;width:90vw;min-width:340px;max-width:420px;overflow:hidden;box-shadow:0 8px 40px #00000026}.params-header[data-v-30f2f611]{background:var(--klc-color-background);border-bottom:1px solid var(--klc-color-grid-major);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-30f2f611]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-30f2f611]{align-items:center;gap:8px;display:flex}.params-title[data-v-30f2f611]{color:var(--klc-color-foreground);letter-spacing:.2px;font-size:14px;font-weight:600}.params-subtitle[data-v-30f2f611]{color:var(--klc-color-axis-text);font-size:11px}.toggle-desc-btn[data-v-30f2f611]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:28px;height:28px;color:var(--klc-color-axis-text);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex}.toggle-desc-btn[data-v-30f2f611]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.toggle-desc-btn.active[data-v-30f2f611]{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);color:var(--klc-color-background)}.toggle-desc-btn svg[data-v-30f2f611]{width:14px;height:14px}.params-close[data-v-30f2f611]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:28px;height:28px;color:var(--klc-color-axis-text);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.params-close[data-v-30f2f611]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.params-close svg[data-v-30f2f611]{width:14px;height:14px}.indicator-description[data-v-30f2f611]{background:color-mix(in srgb, var(--klc-color-alert-active) 10%, var(--klc-color-background));border-bottom:1px solid color-mix(in srgb, var(--klc-color-alert-active) 20%, transparent);padding:12px 20px}.indicator-description p[data-v-30f2f611]{color:var(--klc-color-alert-active);margin:0;font-size:12px;line-height:1.6}.params-body[data-v-30f2f611]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.param-item[data-v-30f2f611]{background:var(--klc-color-background);border:1px solid var(--klc-color-grid-major);border-radius:8px;padding:10px 14px;transition:border-color .2s}.param-item[data-v-30f2f611]:has(.param-input:focus){border-color:var(--klc-color-axis-text)}.param-item.has-desc[data-v-30f2f611]{padding:10px 14px 8px}.param-header[data-v-30f2f611]{justify-content:space-between;align-items:center;gap:16px;display:flex}.param-label[data-v-30f2f611]{flex-direction:column;gap:3px;display:flex}.param-label-text[data-v-30f2f611]{color:var(--klc-color-foreground);font-size:13px;font-weight:500}.param-range[data-v-30f2f611]{color:var(--klc-color-axis-text);font-size:11px}.param-description[data-v-30f2f611]{border-top:1px dashed var(--klc-color-border-button);color:var(--klc-color-axis-text);margin-top:8px;padding-top:8px;font-size:11px;line-height:1.5}.input-wrapper[data-v-30f2f611]{border:1px solid var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white);border-radius:7px;align-items:stretch;height:32px;transition:border-color .2s;display:flex;overflow:hidden}.input-wrapper[data-v-30f2f611]:focus-within{border-color:var(--klc-color-axis-text)}.stepper-btn[data-v-30f2f611]{background:var(--klc-color-grid-minor);cursor:pointer;width:28px;color:var(--klc-color-axis-text);border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:15px;font-weight:400;line-height:1;transition:background .15s,color .15s;display:flex}.stepper-btn[data-v-30f2f611]:hover:not(:disabled){background:var(--klc-color-border-button);color:var(--klc-color-foreground)}.stepper-btn[data-v-30f2f611]:disabled{color:var(--klc-color-axis-line);cursor:not-allowed}.param-input[data-v-30f2f611]{border:none;border-left:1px solid var(--klc-color-grid-major);border-right:1px solid var(--klc-color-grid-major);text-align:center;width:60px;color:var(--klc-color-foreground);appearance:textfield;background:0 0;font-size:13px;font-weight:600}.param-input[data-v-30f2f611]::-webkit-inner-spin-button{-webkit-appearance:none}.param-input[data-v-30f2f611]::-webkit-outer-spin-button{-webkit-appearance:none}.param-input[data-v-30f2f611]:focus{outline:none}.params-footer[data-v-30f2f611]{background:var(--klc-color-background);border-top:1px solid var(--klc-color-grid-major);justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-30f2f611]{gap:8px;display:flex}.params-btn[data-v-30f2f611]{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-30f2f611]{flex-shrink:0;width:12px;height:12px}.params-btn.reset[data-v-30f2f611]{border-color:var(--klc-color-axis-line);color:var(--klc-color-axis-text);background:0 0}.params-btn.reset[data-v-30f2f611]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.params-btn.cancel[data-v-30f2f611]{border-color:var(--klc-color-axis-line);color:var(--klc-color-axis-text);background:0 0}.params-btn.cancel[data-v-30f2f611]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-text)}.params-btn.confirm[data-v-30f2f611]{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);color:var(--klc-color-background)}.params-btn.confirm[data-v-30f2f611]:hover{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.params-btn.confirm[data-v-30f2f611]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-30f2f611],.overlay-leave-active[data-v-30f2f611]{transition:opacity .2s}.overlay-enter-from[data-v-30f2f611],.overlay-leave-to[data-v-30f2f611]{opacity:0}.modal-enter-active[data-v-30f2f611]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-30f2f611]{transition:all .16s ease-in}.modal-enter-from[data-v-30f2f611]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-30f2f611]{opacity:0;transform:scale(.94)translateY(8px)}.slide-enter-active[data-v-30f2f611],.slide-leave-active[data-v-30f2f611]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-30f2f611],.slide-leave-to[data-v-30f2f611]{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0}.indicator-selector[data-v-01a99263]{width:80%;margin:20px;position:relative}.indicator-scroll-container[data-v-01a99263]{scrollbar-width:none;-webkit-overflow-scrolling:touch;text-align:center;width:100%;overflow:auto hidden}.indicator-scroll-container[data-v-01a99263]::-webkit-scrollbar{display:none}.indicator-list[data-v-01a99263]{gap:8px;margin:0 auto;padding:2px;display:inline-flex}.indicator-divider[data-v-01a99263]{background:var(--klc-color-axis-line);align-self:center;width:1px;height:20px}.indicator-item[data-v-01a99263]{align-items:center;gap:4px;display:flex}.indicator-item.draggable[data-v-01a99263],.indicator-item.draggable .indicator-btn[data-v-01a99263],.indicator-item.draggable[data-v-01a99263]:hover,.indicator-item.draggable:hover .indicator-btn[data-v-01a99263]{cursor:move}.indicator-item.is-dragging[data-v-01a99263]{opacity:.6}.indicator-item.drag-over .indicator-btn[data-v-01a99263]{box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 12%, transparent)}.indicator-btn-wrapper[data-v-01a99263]{position:relative}.indicator-btn[data-v-01a99263]{background:var(--klc-color-tag-bg-white);color:var(--klc-color-axis-text);cursor:pointer;white-space:nowrap;border:none;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-01a99263]:hover:not(.hovering),.indicator-btn.active[data-v-01a99263]{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground)}.indicator-btn.active[data-v-01a99263]:hover:not(.hovering){background:var(--klc-color-tag-bg-hover)}.btn-content[data-v-01a99263]{z-index:1;position:relative}.param-hint[data-v-01a99263]{opacity:.85;font-size:11px}.hover-overlay[data-v-01a99263]{background:color-mix(in srgb, var(--klc-color-background) 85%, transparent);backdrop-filter:blur(4px);z-index:2;border-radius:16px;justify-content:center;align-items:center;gap:4px;display:flex;position:absolute;inset:0}.action-btn[data-v-01a99263]{width:24px;height:24px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex}.action-btn[data-v-01a99263]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground)}.settings-btn[data-v-01a99263]:hover{color:var(--klc-color-foreground)}.remove-btn[data-v-01a99263]:hover{color:#ff4d4f}.divider[data-v-01a99263]{background:var(--klc-color-border-button);width:1px;height:14px}.add-btn[data-v-01a99263]{width:32px;height:32px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:all .3s;display:flex}.add-btn[data-v-01a99263]:hover{color:var(--klc-color-foreground);background:var(--klc-color-tag-bg-hover)}.selector-overlay[data-v-01a99263]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.selector-modal[data-v-01a99263]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-axis-line);border-radius:12px;flex-direction:column;width:90vw;max-width:860px;max-height:85vh;display:flex;overflow:hidden;box-shadow:0 8px 40px #00000026}.modal-header[data-v-01a99263]{background:var(--klc-color-background);border-bottom:1px solid var(--klc-color-border-chart);flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-title[data-v-01a99263]{flex-direction:column;gap:2px;display:flex}.title-text[data-v-01a99263]{color:var(--klc-color-foreground);letter-spacing:.2px;font-size:14px;font-weight:600}.title-sub[data-v-01a99263]{color:var(--klc-color-axis-text);font-size:11px}.modal-close[data-v-01a99263]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:28px;height:28px;color:var(--klc-color-axis-text);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:all .15s;display:flex}.modal-close[data-v-01a99263]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.modal-close svg[data-v-01a99263]{width:14px;height:14px}.header-actions[data-v-01a99263]{align-items:center;gap:8px;display:flex}.view-toggle-btn[data-v-01a99263]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:28px;height:28px;color:var(--klc-color-axis-text);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:all .15s;display:flex}.view-toggle-btn[data-v-01a99263]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.view-toggle-btn.active[data-v-01a99263]{background:var(--klc-color-tag-bg-white);border-color:var(--klc-color-border-button);color:var(--klc-color-foreground)}.modal-body[data-v-01a99263]{flex-direction:column;flex:1;gap:20px;padding:20px;display:flex;overflow-y:auto}.modal-body[data-v-01a99263]::-webkit-scrollbar{width:8px}.modal-body[data-v-01a99263]::-webkit-scrollbar-thumb{background:var(--klc-color-axis-line);border:2px solid var(--klc-color-tag-bg-white);border-radius:999px}.search-box[data-v-01a99263]{border:1px solid var(--klc-color-border-button);border-radius:8px;align-items:center;gap:10px;padding:10px 14px;transition:all .2s;display:flex}.search-box[data-v-01a99263]:focus-within{background:var(--klc-color-tag-bg-white);border-color:var(--klc-color-foreground);box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 8%, transparent)}.search-icon[data-v-01a99263]{color:var(--klc-color-axis-text);flex-shrink:0}.search-input[data-v-01a99263]{color:var(--klc-color-foreground);background:0 0;border:none;outline:none;flex:1;font-size:13px}.search-input[data-v-01a99263]::placeholder{color:var(--klc-color-axis-text)}.no-results[data-v-01a99263]{color:var(--klc-color-axis-text);flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:48px 20px;display:flex}.no-results svg[data-v-01a99263]{opacity:.5}.no-results p[data-v-01a99263]{color:var(--klc-color-axis-text);margin:0;font-size:14px;font-weight:500}.no-results-hint[data-v-01a99263]{color:var(--klc-color-axis-text);font-size:12px}.indicator-section[data-v-01a99263]{flex-direction:column;gap:12px;display:flex}.section-header[data-v-01a99263]{align-items:center;gap:8px;display:flex}.section-title[data-v-01a99263]{color:var(--klc-color-foreground);font-size:13px;font-weight:600}.section-count[data-v-01a99263]{color:var(--klc-color-axis-text);background:var(--klc-color-grid-minor);border-radius:10px;padding:2px 8px;font-size:11px}.indicator-grid[data-v-01a99263]{grid-template-columns:repeat(auto-fill,minmax(195px,1fr));gap:10px;display:grid}.indicator-grid.compact[data-v-01a99263]{flex-wrap:wrap;gap:8px;display:flex}.indicator-grid.compact .indicator-card[data-v-01a99263]{white-space:nowrap;border-radius:16px;justify-content:center;align-items:center;min-height:32px;padding:6px 14px;display:inline-flex;position:relative}.indicator-grid.compact .indicator-card .card-tooltip[data-v-01a99263]{background:var(--klc-color-foreground);color:var(--klc-color-background);white-space:nowrap;pointer-events:none;opacity:0;z-index:10;border-radius:6px;padding:4px 10px;font-size:12px;transition:opacity .15s;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.indicator-grid.compact .indicator-card:hover .card-tooltip[data-v-01a99263]{opacity:1}.indicator-grid.compact .indicator-card .card-label[data-v-01a99263]{font-size:12px;font-weight:500}.indicator-card[data-v-01a99263]{border:1px solid var(--klc-color-border-chart);background:var(--klc-color-tag-bg-white);cursor:pointer;text-align:left;border-radius:8px;flex-direction:column;gap:4px;padding:12px 14px;transition:all .15s;display:flex}.indicator-card[data-v-01a99263]:hover:not(.disabled){border-color:var(--klc-color-foreground);background:var(--klc-color-background);transform:translateY(-1px);box-shadow:0 2px 8px #0000000f}.indicator-card.active[data-v-01a99263]{border-color:var(--klc-color-foreground);background:var(--klc-color-tag-bg-hover)}.card-header[data-v-01a99263]{justify-content:space-between;align-items:center;gap:8px;display:flex}.card-label[data-v-01a99263]{color:var(--klc-color-foreground);font-size:13px;font-weight:600}.card-header-actions[data-v-01a99263]{align-items:center;gap:4px;display:flex}.card-settings-btn[data-v-01a99263]{width:20px;height:20px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:all .15s;display:flex}.card-settings-btn[data-v-01a99263]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground)}.card-name[data-v-01a99263]{color:var(--klc-color-axis-text);font-size:11px;line-height:1.4}.card-params[data-v-01a99263]{color:var(--klc-color-axis-text);margin-top:2px;font-size:10px}.section-divider[data-v-01a99263]{background:linear-gradient(90deg, transparent, var(--klc-color-border-button), transparent);height:1px;margin:4px 0}.modal-footer[data-v-01a99263]{background:var(--klc-color-background);border-top:1px solid var(--klc-color-border-chart);flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-info[data-v-01a99263]{color:var(--klc-color-axis-text);font-size:12px}.info-text[data-v-01a99263]{color:var(--klc-color-axis-text)}.btn[data-v-01a99263]{cursor:pointer;border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:6px 16px;font-size:13px;font-weight:500;line-height:1.4;transition:all .15s;display:flex}.btn-confirm[data-v-01a99263]{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);color:var(--klc-color-background)}.btn-confirm[data-v-01a99263]:hover{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.fade-enter-active[data-v-01a99263],.fade-leave-active[data-v-01a99263]{transition:opacity .2s}.fade-enter-from[data-v-01a99263],.fade-leave-to[data-v-01a99263]{opacity:0}.overlay-enter-active[data-v-01a99263],.overlay-leave-active[data-v-01a99263]{transition:opacity .2s}.overlay-enter-from[data-v-01a99263],.overlay-leave-to[data-v-01a99263]{opacity:0}.modal-enter-active[data-v-01a99263]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-01a99263]{transition:all .16s ease-in}.modal-enter-from[data-v-01a99263]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-01a99263]{opacity:0;transform:scale(.94)translateY(8px)}@media (width<=640px){.selector-modal[data-v-01a99263]{width:95vw;max-height:90vh}.indicator-grid[data-v-01a99263]{grid-template-columns:1fr}.modal-body[data-v-01a99263]{padding:16px}}.kline-tooltip[data-v-a068b75e]{z-index:10;background:var(--klc-color-tooltip-bg);border:1px solid var(--klc-color-tooltip-border);min-width:200px;max-width:260px;color:var(--klc-color-tooltip-text);pointer-events:none;backdrop-filter:blur(6px);border-radius:8px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.kline-tooltip__title[data-v-a068b75e]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-a068b75e]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-a068b75e]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-a068b75e]:first-child{color:var(--klc-color-tooltip-text);opacity:.56}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.kline-tooltip.use-anchor[data-v-a068b75e]{position-anchor:--kline-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.kline-tooltip.use-anchor.anchor-right-bottom[data-v-a068b75e]{transform:translate(14px,14px)}.kline-tooltip.use-anchor.anchor-left-bottom[data-v-a068b75e]{transform:translate(calc(-100% - 14px),14px)}}.marker-tooltip[data-v-f2a21012]{z-index:10;background:var(--klc-color-tooltip-bg);border:1px solid var(--klc-color-tooltip-border);min-width:180px;max-width:260px;color:var(--klc-color-tooltip-text);pointer-events:none;backdrop-filter:blur(6px);border-radius:8px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.marker-tooltip__title[data-v-f2a21012]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.marker-tooltip__content[data-v-f2a21012]{grid-template-columns:1fr;gap:2px;display:grid}.marker-tooltip__content .row[data-v-f2a21012]{justify-content:space-between;gap:10px;display:flex}.marker-tooltip__content .row span[data-v-f2a21012]:first-child{color:color-mix(in srgb, var(--klc-color-tooltip-text) 70%, transparent)}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.marker-tooltip.use-anchor[data-v-f2a21012]{position-anchor:--marker-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.marker-tooltip.use-anchor.anchor-right-bottom[data-v-f2a21012]{transform:translate(12px,12px)}.marker-tooltip.use-anchor.anchor-left-bottom[data-v-f2a21012]{transform:translate(calc(-100% - 12px),12px)}}.settings-overlay[data-v-49dd396c]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.settings-modal[data-v-49dd396c]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);border-radius:10px;flex-direction:column;width:min(92vw,460px);min-width:360px;max-width:460px;max-height:min(720px,100vh - 48px);display:flex;overflow:hidden;box-shadow:0 18px 48px #00000026}.settings-header[data-v-49dd396c]{background:var(--klc-color-background);border-bottom:1px solid var(--klc-color-grid-major);flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 18px 14px 20px;display:flex}.header-left[data-v-49dd396c]{flex-direction:column;gap:2px;min-width:0;display:flex}.header-right[data-v-49dd396c]{align-items:center;gap:8px;display:flex}.settings-title[data-v-49dd396c]{color:var(--klc-color-foreground);font-size:15px;font-weight:600;line-height:1.35}.settings-subtitle[data-v-49dd396c]{color:var(--klc-color-axis-text);font-size:11px;line-height:1.3}.settings-close[data-v-49dd396c]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:30px;height:30px;color:var(--klc-color-axis-text);border-radius:7px;justify-content:center;align-items:center;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.settings-close[data-v-49dd396c]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.settings-close svg[data-v-49dd396c]{width:14px;height:14px}.settings-body[data-v-49dd396c]{overscroll-behavior:contain;flex-direction:column;gap:8px;padding:16px 20px 18px;display:flex;overflow-y:auto}.settings-body[data-v-49dd396c]::-webkit-scrollbar{width:8px}.settings-body[data-v-49dd396c]::-webkit-scrollbar-thumb{background:var(--klc-color-axis-line);border:2px solid var(--klc-color-tag-bg-white);border-radius:999px}.settings-item[data-v-49dd396c]{background:var(--klc-color-background);border:1px solid var(--klc-color-grid-major);border-radius:8px;padding:0;transition:border-color .15s,background .15s,box-shadow .15s}.settings-item[data-v-49dd396c]:hover{border-color:var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white)}.settings-label[data-v-49dd396c]{min-height:42px;color:var(--klc-color-foreground);cursor:pointer;justify-content:space-between;align-items:center;gap:16px;padding:9px 12px;font-size:13px;display:flex}.settings-label>span[data-v-49dd396c]{min-width:0;line-height:1.35}.settings-checkbox[data-v-49dd396c]{cursor:pointer;width:17px;height:17px;accent-color:var(--klc-color-foreground);flex:none}.settings-select[data-v-49dd396c]{border:1px solid var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white);height:30px;color:var(--klc-color-foreground);cursor:pointer;border-radius:6px;outline:none;flex:none;min-width:150px;max-width:190px;padding:4px 28px 4px 9px;font-size:12px}.settings-select[data-v-49dd396c]:hover{border-color:var(--klc-color-axis-text)}.settings-select[data-v-49dd396c]:focus{border-color:var(--klc-color-axis-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-axis-text) 15%, transparent)}.settings-section-divider[data-v-49dd396c]{align-items:center;gap:8px;margin:10px 0 2px;display:flex}.settings-section-divider[data-v-49dd396c]:first-child{margin-top:0}.settings-section-divider[data-v-49dd396c]:before,.settings-section-divider[data-v-49dd396c]:after{content:"";border-top:1px solid var(--klc-color-border-button);flex:1}.settings-section-label[data-v-49dd396c]{color:var(--klc-color-axis-text);white-space:nowrap;font-size:11px;line-height:1}.nested-overlay[data-v-49dd396c]{z-index:1100}.settings-item.nav-item[data-v-49dd396c]{cursor:pointer}.settings-item.nav-item:hover .nav-arrow[data-v-49dd396c]{color:var(--klc-color-foreground)}.nav-arrow[data-v-49dd396c]{color:var(--klc-color-axis-text);flex-shrink:0;transition:color .15s}.settings-footer[data-v-49dd396c]{background:var(--klc-color-background);border-top:1px solid var(--klc-color-grid-major);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:12px 20px;display:flex}.footer-right[data-v-49dd396c]{justify-content:flex-end;gap:8px;display:flex}.settings-btn[data-v-49dd396c]{cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;gap:5px;min-width:68px;height:32px;padding:0 14px;font-size:13px;font-weight:500;line-height:1;transition:background .15s,border-color .15s,color .15s,box-shadow .15s,transform .15s;display:flex}.settings-btn svg[data-v-49dd396c]{flex-shrink:0;width:12px;height:12px}.settings-btn.reset[data-v-49dd396c]{border-color:var(--klc-color-axis-line);color:var(--klc-color-axis-text);background:0 0;min-width:76px}.settings-btn.reset[data-v-49dd396c]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.settings-btn.cancel[data-v-49dd396c]{border-color:var(--klc-color-axis-line);color:var(--klc-color-axis-text);background:0 0}.settings-btn.cancel[data-v-49dd396c]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-text)}.settings-btn.confirm[data-v-49dd396c]{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);color:var(--klc-color-background)}.settings-btn.confirm[data-v-49dd396c]:hover{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.settings-btn.confirm[data-v-49dd396c]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-49dd396c],.overlay-leave-active[data-v-49dd396c]{transition:opacity .2s}.overlay-enter-from[data-v-49dd396c],.overlay-leave-to[data-v-49dd396c]{opacity:0}.modal-enter-active[data-v-49dd396c]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-49dd396c]{transition:all .16s ease-in}.modal-enter-from[data-v-49dd396c]{opacity:0;transform:scale(.96)translateY(-10px)}.modal-leave-to[data-v-49dd396c]{opacity:0;transform:scale(.98)translateY(8px)}@media (width<=480px){.settings-overlay[data-v-49dd396c]{align-items:flex-end;padding:12px}.settings-modal[data-v-49dd396c]{border-radius:10px;width:100%;min-width:0;max-height:calc(100vh - 24px)}.settings-header[data-v-49dd396c],.settings-body[data-v-49dd396c],.settings-footer[data-v-49dd396c]{padding-left:16px;padding-right:16px}.settings-label[data-v-49dd396c]{flex-direction:column;align-items:flex-start;gap:8px}.settings-checkbox[data-v-49dd396c]{align-self:flex-end;margin-top:-26px}.settings-select[data-v-49dd396c]{width:100%;max-width:none}.settings-footer[data-v-49dd396c]{flex-direction:column-reverse;align-items:stretch}.footer-right[data-v-49dd396c]{grid-template-columns:1fr 1fr;display:grid}.settings-btn[data-v-49dd396c]{width:100%}}.left-toolbar[data-v-d0932502]{border:1px solid var(--klc-color-border-chart);background:var(--klc-color-background);box-sizing:border-box;user-select:none;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-d0932502]{flex-direction:column;gap:4px;display:flex}.left-toolbar__divider[data-v-d0932502]{background:var(--klc-color-border-chart);width:18px;height:1px}.left-toolbar__button[data-v-d0932502]{width:28px;height:28px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:border-color .15s,background .15s,color .15s;display:inline-flex;position:relative}.left-toolbar__button[data-v-d0932502]:hover{border-color:var(--klc-color-axis-line);background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground)}.left-toolbar__button.active[data-v-d0932502]{border-color:var(--klc-color-border-chart);background:var(--klc-color-grid-major);color:var(--klc-color-foreground)}.left-toolbar__button[data-v-d0932502]:focus-visible{border-color:var(--klc-color-axis-text);outline:none}.tool-icon[data-v-d0932502]{width:16px;height:16px}.corner-indicator[data-v-d0932502]{cursor:pointer;width:8px;height:8px;position:absolute;bottom:0;right:0;overflow:hidden}.corner-indicator[data-v-d0932502]: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-d0932502]:after,.left-toolbar__button.active .corner-indicator[data-v-d0932502]:after{opacity:.7}.corner-indicator.open[data-v-d0932502]:after{opacity:.8}.tool-dropdown[data-v-d0932502]{background:var(--klc-color-tag-bg-white);-webkit-backdrop-filter:blur(8px);border:1px solid var(--klc-color-border-chart);box-sizing:border-box;z-index:100;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-d0932502]{position:relative}.dropdown-enter-active[data-v-d0932502],.dropdown-leave-active[data-v-d0932502]{transition:opacity .15s,transform .15s}.dropdown-enter-from[data-v-d0932502],.dropdown-leave-to[data-v-d0932502]{opacity:0;transform:translateY(-50%)translate(-6px)}@media (width<=768px),(height<=640px){.left-toolbar[data-v-d0932502]{border-radius:5px;flex-basis:36px;gap:5px;padding:6px 4px}.left-toolbar__group[data-v-d0932502]{gap:3px}.left-toolbar__button[data-v-d0932502]{border-radius:3px;width:26px;height:26px}.left-toolbar__divider[data-v-d0932502]{width:16px}.corner-indicator[data-v-d0932502]{width:7px;height:7px}.corner-indicator[data-v-d0932502]:after{border-bottom-width:4px;border-left-width:4px}.tool-dropdown[data-v-d0932502]{height:36px}}.chart-wrapper[data-v-f9c42035]{--kmap-height:var(--kmap-chart-height,100%);--kmap-width:var(--kmap-chart-width,100%);--chart-bg:var(--klc-color-chart-background);--chart-bg-secondary:var(--klc-color-chart-background);--chart-border:var(--klc-color-border-chart);--chart-border-active:#1890ff;--chart-text:var(--klc-color-foreground);--chart-text-secondary:var(--klc-color-axis-text);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-f9c42035]{align-items:stretch;gap:8px;width:95%;height:85%;min-height:255px;display:flex}.chart-main[data-v-f9c42035]{flex:auto;align-items:stretch;gap:0;min-width:0;height:100%;display:flex;position:relative}.pane-separator-layer[data-v-f9c42035]{pointer-events:none;z-index:20;position:absolute;inset:0}.pane-separator-line[data-v-f9c42035]{border-top:1px solid var(--chart-border);opacity:1;box-sizing:border-box;height:0;transition:border-top-color .12s,border-top-width .12s,margin-top .12s,opacity .12s;position:absolute;left:0;right:0}.pane-separator-line.is-active[data-v-f9c42035]{border-top-color:var(--chart-border-active);border-top-width:2px;margin-top:-1px}.chart-stage.is-resizing-pane[data-v-f9c42035],.chart-stage.is-hovering-pane-separator[data-v-f9c42035]{cursor:ns-resize}.chart-stage.is-hovering-kline[data-v-f9c42035]{cursor:pointer}.chart-stage.is-hovering-right-axis[data-v-f9c42035]{cursor:ns-resize}.chart-stage.is-dragging[data-v-f9c42035]{cursor:grabbing}.chart-container[data-v-f9c42035]{height:100%;min-height:inherit;scrollbar-width:none;-ms-overflow-style:none;border:1px solid var(--chart-border);box-sizing:border-box;background:var(--chart-bg);-webkit-touch-callout:none;user-select:none;touch-action:none;border-right:0;border-radius:6px 0 0 6px;flex:auto;position:relative;overflow:auto hidden}.chart-container[data-v-f9c42035]::-webkit-scrollbar{display:none}.right-axis-host[data-v-f9c42035]{height:100%;min-height:inherit;box-sizing:border-box;background:var(--chart-bg);border:1px solid var(--chart-border);-webkit-touch-callout:none;user-select:none;touch-action:none;border-top-right-radius:6px;border-bottom-right-radius:6px;flex:none;position:relative;overflow:visible}.scroll-content[data-v-f9c42035]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-f9c42035]{pointer-events:none;position:sticky;top:0;left:0}.tooltip-layer[data-v-f9c42035]{pointer-events:none;z-index:30;position:absolute;inset:0}.tooltip-anchor[data-v-f9c42035]{pointer-events:none;width:1px;height:1px;position:absolute}.tooltip-anchor.kline-tooltip-anchor.use-anchor[data-v-f9c42035]{anchor-name:--kline-tooltip-anchor}.tooltip-anchor.marker-tooltip-anchor.use-anchor[data-v-f9c42035]{anchor-name:--marker-tooltip-anchor}@media (width<=768px),(height<=640px){.chart-stage[data-v-f9c42035]{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
+ .color-preset-tools[data-v-a52947a4]{grid-template-columns:1fr auto;align-items:center;gap:8px;margin-bottom:4px;display:grid}.theme-tabs[data-v-a52947a4]{border:1px solid var(--klc-color-border-button);background:var(--klc-color-grid-minor);border-radius:8px;grid-template-columns:1fr 1fr;gap:3px;padding:3px;display:grid}.theme-tab[data-v-a52947a4]{height:28px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:none;border-radius:6px;font-size:12px;font-weight:500;transition:background .18s,color .18s,box-shadow .18s}.theme-tab[data-v-a52947a4]:not(.active):hover{color:var(--klc-color-foreground);background:color-mix(in srgb, var(--klc-color-tag-bg-white) 60%, transparent)}.theme-tab.active[data-v-a52947a4]{background:var(--klc-color-tag-bg-white);color:var(--klc-color-foreground);font-weight:600;box-shadow:0 1px 4px #0000001a}.color-reset-btn[data-v-a52947a4]{border:1px solid var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white);height:36px;color:var(--klc-color-axis-text);white-space:nowrap;cursor:pointer;border-radius:8px;padding:0 14px;font-size:12px;font-weight:500;transition:background .18s,border-color .18s,color .18s,box-shadow .18s}.color-reset-btn[data-v-a52947a4]:hover{border-color:var(--klc-color-axis-text);background:var(--klc-color-background);color:var(--klc-color-foreground);box-shadow:0 1px 3px #00000014}.color-reset-btn[data-v-a52947a4]:active{background:var(--klc-color-tag-bg-hover);box-shadow:none}.color-group-label[data-v-a52947a4]{color:var(--klc-color-axis-text);margin:6px 0;font-size:12px;font-weight:600;line-height:1.3}.color-grid[data-v-a52947a4]{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.color-item[data-v-a52947a4]{border:1px solid var(--klc-color-grid-major);background:var(--klc-color-background);min-height:36px;color:var(--klc-color-foreground);cursor:pointer;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:12px;line-height:1.3;transition:border-color .18s,background .18s,box-shadow .18s;display:flex}.color-item[data-v-a52947a4]:hover{border-color:var(--klc-color-axis-line);background:var(--klc-color-tag-bg-hover);box-shadow:0 1px 4px color-mix(in srgb, var(--klc-color-foreground) 6%, transparent)}.color-item span[data-v-a52947a4]{text-overflow:ellipsis;white-space:nowrap;user-select:none;min-width:0;overflow:hidden}.color-input[data-v-a52947a4]{border:1px solid var(--klc-color-axis-line);cursor:pointer;background:0 0;border-radius:6px;flex:none;width:26px;height:26px;padding:0;transition:border-color .18s,box-shadow .18s}.color-input[data-v-a52947a4]:hover{border-color:var(--klc-color-axis-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 6%, transparent)}.color-input[data-v-a52947a4]:focus-visible{border-color:var(--klc-color-axis-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 10%, transparent);outline:none}.color-input[data-v-a52947a4]::-webkit-color-swatch-wrapper{padding:2px}.color-input[data-v-a52947a4]::-webkit-color-swatch{border:none;border-radius:4px}@media (width<=480px){.color-preset-tools[data-v-a52947a4]{grid-template-columns:1fr}.color-reset-btn[data-v-a52947a4]{width:100%}.color-grid[data-v-a52947a4]{grid-template-columns:1fr}}.drawing-style-toolbar[data-v-02a1f4d6]{background:color-mix(in srgb, var(--klc-color-tag-bg-white) 88%, transparent);-webkit-backdrop-filter:blur(8px);border:1px solid var(--klc-color-border-button);z-index:100;user-select:none;pointer-events:auto;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-02a1f4d6]{justify-content:center;align-items:center;display:inline-flex}.color-item[data-v-02a1f4d6]{width:24px;height:24px;position:relative}.color-swatch[data-v-02a1f4d6]{border:1px solid var(--klc-color-axis-line);cursor:pointer;border-radius:4px;width:100%;height:100%;display:block}.color-input[data-v-02a1f4d6]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.toolbar-select[data-v-02a1f4d6]{border:1px solid var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white);height:24px;color:var(--klc-color-foreground);cursor:pointer;border-radius:4px;outline:none;padding:0 4px;font-size:12px}.toolbar-select[data-v-02a1f4d6]:hover{border-color:var(--klc-color-axis-text)}.toolbar-btn[data-v-02a1f4d6]{width:24px;height:24px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:border-color .15s,background .15s,color .15s;display:inline-flex}.toolbar-btn[data-v-02a1f4d6]:hover{border-color:var(--klc-color-axis-line);background:var(--klc-color-grid-minor);color:var(--klc-color-foreground)}.delete-btn[data-v-02a1f4d6]:hover{color:#dc2626;background:#fef2f2;border-color:#fca5a5}.delete-icon[data-v-02a1f4d6]{width:14px;height:14px}.params-overlay[data-v-30f2f611]{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-30f2f611]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);border-radius:12px;width:90vw;min-width:340px;max-width:420px;overflow:hidden;box-shadow:0 8px 40px #00000026}.params-header[data-v-30f2f611]{background:var(--klc-color-background);border-bottom:1px solid var(--klc-color-grid-major);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-left[data-v-30f2f611]{align-items:baseline;gap:8px;display:flex}.header-right[data-v-30f2f611]{align-items:center;gap:8px;display:flex}.params-title[data-v-30f2f611]{color:var(--klc-color-foreground);letter-spacing:.2px;font-size:14px;font-weight:600}.params-subtitle[data-v-30f2f611]{color:var(--klc-color-axis-text);font-size:11px}.toggle-desc-btn[data-v-30f2f611]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:28px;height:28px;color:var(--klc-color-axis-text);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex}.toggle-desc-btn[data-v-30f2f611]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.toggle-desc-btn.active[data-v-30f2f611]{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);color:var(--klc-color-background)}.toggle-desc-btn svg[data-v-30f2f611]{width:14px;height:14px}.params-close[data-v-30f2f611]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:28px;height:28px;color:var(--klc-color-axis-text);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.params-close[data-v-30f2f611]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.params-close svg[data-v-30f2f611]{width:14px;height:14px}.indicator-description[data-v-30f2f611]{background:color-mix(in srgb, var(--klc-color-alert-active) 10%, var(--klc-color-background));border-bottom:1px solid color-mix(in srgb, var(--klc-color-alert-active) 20%, transparent);padding:12px 20px}.indicator-description p[data-v-30f2f611]{color:var(--klc-color-alert-active);margin:0;font-size:12px;line-height:1.6}.params-body[data-v-30f2f611]{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.param-item[data-v-30f2f611]{background:var(--klc-color-background);border:1px solid var(--klc-color-grid-major);border-radius:8px;padding:10px 14px;transition:border-color .2s}.param-item[data-v-30f2f611]:has(.param-input:focus){border-color:var(--klc-color-axis-text)}.param-item.has-desc[data-v-30f2f611]{padding:10px 14px 8px}.param-header[data-v-30f2f611]{justify-content:space-between;align-items:center;gap:16px;display:flex}.param-label[data-v-30f2f611]{flex-direction:column;gap:3px;display:flex}.param-label-text[data-v-30f2f611]{color:var(--klc-color-foreground);font-size:13px;font-weight:500}.param-range[data-v-30f2f611]{color:var(--klc-color-axis-text);font-size:11px}.param-description[data-v-30f2f611]{border-top:1px dashed var(--klc-color-border-button);color:var(--klc-color-axis-text);margin-top:8px;padding-top:8px;font-size:11px;line-height:1.5}.input-wrapper[data-v-30f2f611]{border:1px solid var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white);border-radius:7px;align-items:stretch;height:32px;transition:border-color .2s;display:flex;overflow:hidden}.input-wrapper[data-v-30f2f611]:focus-within{border-color:var(--klc-color-axis-text)}.stepper-btn[data-v-30f2f611]{background:var(--klc-color-grid-minor);cursor:pointer;width:28px;color:var(--klc-color-axis-text);border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:15px;font-weight:400;line-height:1;transition:background .15s,color .15s;display:flex}.stepper-btn[data-v-30f2f611]:hover:not(:disabled){background:var(--klc-color-border-button);color:var(--klc-color-foreground)}.stepper-btn[data-v-30f2f611]:disabled{color:var(--klc-color-axis-line);cursor:not-allowed}.param-input[data-v-30f2f611]{border:none;border-left:1px solid var(--klc-color-grid-major);border-right:1px solid var(--klc-color-grid-major);text-align:center;width:60px;color:var(--klc-color-foreground);appearance:textfield;background:0 0;font-size:13px;font-weight:600}.param-input[data-v-30f2f611]::-webkit-inner-spin-button{-webkit-appearance:none}.param-input[data-v-30f2f611]::-webkit-outer-spin-button{-webkit-appearance:none}.param-input[data-v-30f2f611]:focus{outline:none}.params-footer[data-v-30f2f611]{background:var(--klc-color-background);border-top:1px solid var(--klc-color-grid-major);justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-right[data-v-30f2f611]{gap:8px;display:flex}.params-btn[data-v-30f2f611]{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-30f2f611]{flex-shrink:0;width:12px;height:12px}.params-btn.reset[data-v-30f2f611]{border-color:var(--klc-color-axis-line);color:var(--klc-color-axis-text);background:0 0}.params-btn.reset[data-v-30f2f611]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.params-btn.cancel[data-v-30f2f611]{border-color:var(--klc-color-axis-line);color:var(--klc-color-axis-text);background:0 0}.params-btn.cancel[data-v-30f2f611]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-text)}.params-btn.confirm[data-v-30f2f611]{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);color:var(--klc-color-background)}.params-btn.confirm[data-v-30f2f611]:hover{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.params-btn.confirm[data-v-30f2f611]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-30f2f611],.overlay-leave-active[data-v-30f2f611]{transition:opacity .2s}.overlay-enter-from[data-v-30f2f611],.overlay-leave-to[data-v-30f2f611]{opacity:0}.modal-enter-active[data-v-30f2f611]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-30f2f611]{transition:all .16s ease-in}.modal-enter-from[data-v-30f2f611]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-30f2f611]{opacity:0;transform:scale(.94)translateY(8px)}.slide-enter-active[data-v-30f2f611],.slide-leave-active[data-v-30f2f611]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-30f2f611],.slide-leave-to[data-v-30f2f611]{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0}.indicator-selector[data-v-01a99263]{width:80%;margin:20px;position:relative}.indicator-scroll-container[data-v-01a99263]{scrollbar-width:none;-webkit-overflow-scrolling:touch;text-align:center;width:100%;overflow:auto hidden}.indicator-scroll-container[data-v-01a99263]::-webkit-scrollbar{display:none}.indicator-list[data-v-01a99263]{gap:8px;margin:0 auto;padding:2px;display:inline-flex}.indicator-divider[data-v-01a99263]{background:var(--klc-color-axis-line);align-self:center;width:1px;height:20px}.indicator-item[data-v-01a99263]{align-items:center;gap:4px;display:flex}.indicator-item.draggable[data-v-01a99263],.indicator-item.draggable .indicator-btn[data-v-01a99263],.indicator-item.draggable[data-v-01a99263]:hover,.indicator-item.draggable:hover .indicator-btn[data-v-01a99263]{cursor:move}.indicator-item.is-dragging[data-v-01a99263]{opacity:.6}.indicator-item.drag-over .indicator-btn[data-v-01a99263]{box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 12%, transparent)}.indicator-btn-wrapper[data-v-01a99263]{position:relative}.indicator-btn[data-v-01a99263]{background:var(--klc-color-tag-bg-white);color:var(--klc-color-axis-text);cursor:pointer;white-space:nowrap;border:none;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-01a99263]:hover:not(.hovering),.indicator-btn.active[data-v-01a99263]{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground)}.indicator-btn.active[data-v-01a99263]:hover:not(.hovering){background:var(--klc-color-tag-bg-hover)}.btn-content[data-v-01a99263]{z-index:1;position:relative}.param-hint[data-v-01a99263]{opacity:.85;font-size:11px}.hover-overlay[data-v-01a99263]{background:color-mix(in srgb, var(--klc-color-background) 85%, transparent);backdrop-filter:blur(4px);z-index:2;border-radius:16px;justify-content:center;align-items:center;gap:4px;display:flex;position:absolute;inset:0}.action-btn[data-v-01a99263]{width:24px;height:24px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex}.action-btn[data-v-01a99263]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground)}.settings-btn[data-v-01a99263]:hover{color:var(--klc-color-foreground)}.remove-btn[data-v-01a99263]:hover{color:#ff4d4f}.divider[data-v-01a99263]{background:var(--klc-color-border-button);width:1px;height:14px}.add-btn[data-v-01a99263]{width:32px;height:32px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:all .3s;display:flex}.add-btn[data-v-01a99263]:hover{color:var(--klc-color-foreground);background:var(--klc-color-tag-bg-hover)}.selector-overlay[data-v-01a99263]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.selector-modal[data-v-01a99263]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-axis-line);border-radius:12px;flex-direction:column;width:90vw;max-width:860px;max-height:85vh;display:flex;overflow:hidden;box-shadow:0 8px 40px #00000026}.modal-header[data-v-01a99263]{background:var(--klc-color-background);border-bottom:1px solid var(--klc-color-border-chart);flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.header-title[data-v-01a99263]{flex-direction:column;gap:2px;display:flex}.title-text[data-v-01a99263]{color:var(--klc-color-foreground);letter-spacing:.2px;font-size:14px;font-weight:600}.title-sub[data-v-01a99263]{color:var(--klc-color-axis-text);font-size:11px}.modal-close[data-v-01a99263]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:28px;height:28px;color:var(--klc-color-axis-text);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:all .15s;display:flex}.modal-close[data-v-01a99263]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.modal-close svg[data-v-01a99263]{width:14px;height:14px}.header-actions[data-v-01a99263]{align-items:center;gap:8px;display:flex}.view-toggle-btn[data-v-01a99263]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:28px;height:28px;color:var(--klc-color-axis-text);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:all .15s;display:flex}.view-toggle-btn[data-v-01a99263]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.view-toggle-btn.active[data-v-01a99263]{background:var(--klc-color-tag-bg-white);border-color:var(--klc-color-border-button);color:var(--klc-color-foreground)}.modal-body[data-v-01a99263]{flex-direction:column;flex:1;gap:20px;padding:20px;display:flex;overflow-y:auto}.modal-body[data-v-01a99263]::-webkit-scrollbar{width:8px}.modal-body[data-v-01a99263]::-webkit-scrollbar-thumb{background:var(--klc-color-axis-line);border:2px solid var(--klc-color-tag-bg-white);border-radius:999px}.search-box[data-v-01a99263]{border:1px solid var(--klc-color-border-button);border-radius:8px;align-items:center;gap:10px;padding:10px 14px;transition:all .2s;display:flex}.search-box[data-v-01a99263]:focus-within{background:var(--klc-color-tag-bg-white);border-color:var(--klc-color-foreground);box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 8%, transparent)}.search-icon[data-v-01a99263]{color:var(--klc-color-axis-text);flex-shrink:0}.search-input[data-v-01a99263]{color:var(--klc-color-foreground);background:0 0;border:none;outline:none;flex:1;font-size:13px}.search-input[data-v-01a99263]::placeholder{color:var(--klc-color-axis-text)}.no-results[data-v-01a99263]{color:var(--klc-color-axis-text);flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:48px 20px;display:flex}.no-results svg[data-v-01a99263]{opacity:.5}.no-results p[data-v-01a99263]{color:var(--klc-color-axis-text);margin:0;font-size:14px;font-weight:500}.no-results-hint[data-v-01a99263]{color:var(--klc-color-axis-text);font-size:12px}.indicator-section[data-v-01a99263]{flex-direction:column;gap:12px;display:flex}.section-header[data-v-01a99263]{align-items:center;gap:8px;display:flex}.section-title[data-v-01a99263]{color:var(--klc-color-foreground);font-size:13px;font-weight:600}.section-count[data-v-01a99263]{color:var(--klc-color-axis-text);background:var(--klc-color-grid-minor);border-radius:10px;padding:2px 8px;font-size:11px}.indicator-grid[data-v-01a99263]{grid-template-columns:repeat(auto-fill,minmax(195px,1fr));gap:10px;display:grid}.indicator-grid.compact[data-v-01a99263]{flex-wrap:wrap;gap:8px;display:flex}.indicator-grid.compact .indicator-card[data-v-01a99263]{white-space:nowrap;border-radius:16px;justify-content:center;align-items:center;min-height:32px;padding:6px 14px;display:inline-flex;position:relative}.indicator-grid.compact .indicator-card .card-tooltip[data-v-01a99263]{background:var(--klc-color-foreground);color:var(--klc-color-background);white-space:nowrap;pointer-events:none;opacity:0;z-index:10;border-radius:6px;padding:4px 10px;font-size:12px;transition:opacity .15s;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.indicator-grid.compact .indicator-card:hover .card-tooltip[data-v-01a99263]{opacity:1}.indicator-grid.compact .indicator-card .card-label[data-v-01a99263]{font-size:12px;font-weight:500}.indicator-card[data-v-01a99263]{border:1px solid var(--klc-color-border-chart);background:var(--klc-color-tag-bg-white);cursor:pointer;text-align:left;border-radius:8px;flex-direction:column;gap:4px;padding:12px 14px;transition:all .15s;display:flex}.indicator-card[data-v-01a99263]:hover:not(.disabled){border-color:var(--klc-color-foreground);background:var(--klc-color-background);transform:translateY(-1px);box-shadow:0 2px 8px #0000000f}.indicator-card.active[data-v-01a99263]{border-color:var(--klc-color-foreground);background:var(--klc-color-tag-bg-hover)}.card-header[data-v-01a99263]{justify-content:space-between;align-items:center;gap:8px;display:flex}.card-label[data-v-01a99263]{color:var(--klc-color-foreground);font-size:13px;font-weight:600}.card-header-actions[data-v-01a99263]{align-items:center;gap:4px;display:flex}.card-settings-btn[data-v-01a99263]{width:20px;height:20px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:all .15s;display:flex}.card-settings-btn[data-v-01a99263]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground)}.card-name[data-v-01a99263]{color:var(--klc-color-axis-text);font-size:11px;line-height:1.4}.card-params[data-v-01a99263]{color:var(--klc-color-axis-text);margin-top:2px;font-size:10px}.section-divider[data-v-01a99263]{background:linear-gradient(90deg, transparent, var(--klc-color-border-button), transparent);height:1px;margin:4px 0}.modal-footer[data-v-01a99263]{background:var(--klc-color-background);border-top:1px solid var(--klc-color-border-chart);flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.footer-info[data-v-01a99263]{color:var(--klc-color-axis-text);font-size:12px}.info-text[data-v-01a99263]{color:var(--klc-color-axis-text)}.btn[data-v-01a99263]{cursor:pointer;border:1px solid #0000;border-radius:7px;align-items:center;gap:5px;padding:6px 16px;font-size:13px;font-weight:500;line-height:1.4;transition:all .15s;display:flex}.btn-confirm[data-v-01a99263]{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);color:var(--klc-color-background)}.btn-confirm[data-v-01a99263]:hover{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.fade-enter-active[data-v-01a99263],.fade-leave-active[data-v-01a99263]{transition:opacity .2s}.fade-enter-from[data-v-01a99263],.fade-leave-to[data-v-01a99263]{opacity:0}.overlay-enter-active[data-v-01a99263],.overlay-leave-active[data-v-01a99263]{transition:opacity .2s}.overlay-enter-from[data-v-01a99263],.overlay-leave-to[data-v-01a99263]{opacity:0}.modal-enter-active[data-v-01a99263]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-01a99263]{transition:all .16s ease-in}.modal-enter-from[data-v-01a99263]{opacity:0;transform:scale(.88)translateY(-16px)}.modal-leave-to[data-v-01a99263]{opacity:0;transform:scale(.94)translateY(8px)}@media (width<=640px){.selector-modal[data-v-01a99263]{width:95vw;max-height:90vh}.indicator-grid[data-v-01a99263]{grid-template-columns:1fr}.modal-body[data-v-01a99263]{padding:16px}}.kline-tooltip[data-v-a068b75e]{z-index:10;background:var(--klc-color-tooltip-bg);border:1px solid var(--klc-color-tooltip-border);min-width:200px;max-width:260px;color:var(--klc-color-tooltip-text);pointer-events:none;backdrop-filter:blur(6px);border-radius:8px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.kline-tooltip__title[data-v-a068b75e]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-a068b75e]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-a068b75e]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-a068b75e]:first-child{color:var(--klc-color-tooltip-text);opacity:.56}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.kline-tooltip.use-anchor[data-v-a068b75e]{position-anchor:--kline-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.kline-tooltip.use-anchor.anchor-right-bottom[data-v-a068b75e]{transform:translate(14px,14px)}.kline-tooltip.use-anchor.anchor-left-bottom[data-v-a068b75e]{transform:translate(calc(-100% - 14px),14px)}}.marker-tooltip[data-v-f2a21012]{z-index:10;background:var(--klc-color-tooltip-bg);border:1px solid var(--klc-color-tooltip-border);min-width:180px;max-width:260px;color:var(--klc-color-tooltip-text);pointer-events:none;backdrop-filter:blur(6px);border-radius:8px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.marker-tooltip__title[data-v-f2a21012]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.marker-tooltip__content[data-v-f2a21012]{grid-template-columns:1fr;gap:2px;display:grid}.marker-tooltip__content .row[data-v-f2a21012]{justify-content:space-between;gap:10px;display:flex}.marker-tooltip__content .row span[data-v-f2a21012]:first-child{color:color-mix(in srgb, var(--klc-color-tooltip-text) 70%, transparent)}@supports (anchor-name:--kmap-anchor) and (position-anchor:--kmap-anchor){.marker-tooltip.use-anchor[data-v-f2a21012]{position-anchor:--marker-tooltip-anchor;left:anchor(left);top:anchor(top);position:absolute}.marker-tooltip.use-anchor.anchor-right-bottom[data-v-f2a21012]{transform:translate(12px,12px)}.marker-tooltip.use-anchor.anchor-left-bottom[data-v-f2a21012]{transform:translate(calc(-100% - 12px),12px)}}.settings-overlay[data-v-49dd396c]{backdrop-filter:blur(4px);z-index:1000;background:#0000004d;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.settings-modal[data-v-49dd396c]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);border-radius:10px;flex-direction:column;width:min(92vw,460px);min-width:360px;max-width:460px;max-height:min(720px,100vh - 48px);display:flex;overflow:hidden;box-shadow:0 18px 48px #00000026}.settings-header[data-v-49dd396c]{background:var(--klc-color-background);border-bottom:1px solid var(--klc-color-grid-major);flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 18px 14px 20px;display:flex}.header-left[data-v-49dd396c]{flex-direction:column;gap:2px;min-width:0;display:flex}.header-right[data-v-49dd396c]{align-items:center;gap:8px;display:flex}.settings-title[data-v-49dd396c]{color:var(--klc-color-foreground);font-size:15px;font-weight:600;line-height:1.35}.settings-subtitle[data-v-49dd396c]{color:var(--klc-color-axis-text);font-size:11px;line-height:1.3}.settings-close[data-v-49dd396c]{background:var(--klc-color-tag-bg-white);border:1px solid var(--klc-color-border-button);cursor:pointer;width:30px;height:30px;color:var(--klc-color-axis-text);border-radius:7px;justify-content:center;align-items:center;padding:0;transition:background .15s,color .15s,border-color .15s;display:flex}.settings-close[data-v-49dd396c]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-line)}.settings-close svg[data-v-49dd396c]{width:14px;height:14px}.settings-body[data-v-49dd396c]{overscroll-behavior:contain;flex-direction:column;gap:8px;padding:16px 20px 18px;display:flex;overflow-y:auto}.settings-body[data-v-49dd396c]::-webkit-scrollbar{width:8px}.settings-body[data-v-49dd396c]::-webkit-scrollbar-thumb{background:var(--klc-color-axis-line);border:2px solid var(--klc-color-tag-bg-white);border-radius:999px}.settings-item[data-v-49dd396c]{background:var(--klc-color-background);border:1px solid var(--klc-color-grid-major);border-radius:8px;padding:0;transition:border-color .15s,background .15s,box-shadow .15s}.settings-item[data-v-49dd396c]:hover{border-color:var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white)}.settings-label[data-v-49dd396c]{min-height:42px;color:var(--klc-color-foreground);cursor:pointer;justify-content:space-between;align-items:center;gap:16px;padding:9px 12px;font-size:13px;display:flex}.settings-label>span[data-v-49dd396c]{min-width:0;line-height:1.35}.settings-checkbox[data-v-49dd396c]{cursor:pointer;width:17px;height:17px;accent-color:var(--klc-color-foreground);flex:none}.settings-select[data-v-49dd396c]{border:1px solid var(--klc-color-axis-line);background:var(--klc-color-tag-bg-white);height:30px;color:var(--klc-color-foreground);cursor:pointer;border-radius:6px;outline:none;flex:none;min-width:150px;max-width:190px;padding:4px 28px 4px 9px;font-size:12px}.settings-select[data-v-49dd396c]:hover{border-color:var(--klc-color-axis-text)}.settings-select[data-v-49dd396c]:focus{border-color:var(--klc-color-axis-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--klc-color-axis-text) 15%, transparent)}.settings-section-divider[data-v-49dd396c]{align-items:center;gap:8px;margin:10px 0 2px;display:flex}.settings-section-divider[data-v-49dd396c]:first-child{margin-top:0}.settings-section-divider[data-v-49dd396c]:before,.settings-section-divider[data-v-49dd396c]:after{content:"";border-top:1px solid var(--klc-color-border-button);flex:1}.settings-section-label[data-v-49dd396c]{color:var(--klc-color-axis-text);white-space:nowrap;font-size:11px;line-height:1}.nested-overlay[data-v-49dd396c]{z-index:1100}.settings-item.nav-item[data-v-49dd396c]{cursor:pointer}.settings-item.nav-item:hover .nav-arrow[data-v-49dd396c]{color:var(--klc-color-foreground)}.nav-arrow[data-v-49dd396c]{color:var(--klc-color-axis-text);flex-shrink:0;transition:color .15s}.settings-footer[data-v-49dd396c]{background:var(--klc-color-background);border-top:1px solid var(--klc-color-grid-major);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:12px 20px;display:flex}.footer-right[data-v-49dd396c]{justify-content:flex-end;gap:8px;display:flex}.settings-btn[data-v-49dd396c]{cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;gap:5px;min-width:68px;height:32px;padding:0 14px;font-size:13px;font-weight:500;line-height:1;transition:background .15s,border-color .15s,color .15s,box-shadow .15s,transform .15s;display:flex}.settings-btn svg[data-v-49dd396c]{flex-shrink:0;width:12px;height:12px}.settings-btn.reset[data-v-49dd396c]{border-color:var(--klc-color-axis-line);color:var(--klc-color-axis-text);background:0 0;min-width:76px}.settings-btn.reset[data-v-49dd396c]:hover{color:#e74c3c;background:#e74c3c14;border-color:#c0392b}.settings-btn.cancel[data-v-49dd396c]{border-color:var(--klc-color-axis-line);color:var(--klc-color-axis-text);background:0 0}.settings-btn.cancel[data-v-49dd396c]:hover{background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground);border-color:var(--klc-color-axis-text)}.settings-btn.confirm[data-v-49dd396c]{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);color:var(--klc-color-background)}.settings-btn.confirm[data-v-49dd396c]:hover{background:var(--klc-color-foreground);border-color:var(--klc-color-foreground);transform:translateY(-1px);box-shadow:0 2px 10px #00000026}.settings-btn.confirm[data-v-49dd396c]:active{box-shadow:none;transform:translateY(0)}.overlay-enter-active[data-v-49dd396c],.overlay-leave-active[data-v-49dd396c]{transition:opacity .2s}.overlay-enter-from[data-v-49dd396c],.overlay-leave-to[data-v-49dd396c]{opacity:0}.modal-enter-active[data-v-49dd396c]{transition:all .22s cubic-bezier(.34,1.56,.64,1)}.modal-leave-active[data-v-49dd396c]{transition:all .16s ease-in}.modal-enter-from[data-v-49dd396c]{opacity:0;transform:scale(.96)translateY(-10px)}.modal-leave-to[data-v-49dd396c]{opacity:0;transform:scale(.98)translateY(8px)}@media (width<=480px){.settings-overlay[data-v-49dd396c]{align-items:flex-end;padding:12px}.settings-modal[data-v-49dd396c]{border-radius:10px;width:100%;min-width:0;max-height:calc(100vh - 24px)}.settings-header[data-v-49dd396c],.settings-body[data-v-49dd396c],.settings-footer[data-v-49dd396c]{padding-left:16px;padding-right:16px}.settings-label[data-v-49dd396c]{flex-direction:column;align-items:flex-start;gap:8px}.settings-checkbox[data-v-49dd396c]{align-self:flex-end;margin-top:-26px}.settings-select[data-v-49dd396c]{width:100%;max-width:none}.settings-footer[data-v-49dd396c]{flex-direction:column-reverse;align-items:stretch}.footer-right[data-v-49dd396c]{grid-template-columns:1fr 1fr;display:grid}.settings-btn[data-v-49dd396c]{width:100%}}.left-toolbar[data-v-d0932502]{border:1px solid var(--klc-color-border-chart);background:var(--klc-color-background);box-sizing:border-box;user-select:none;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-d0932502]{flex-direction:column;gap:4px;display:flex}.left-toolbar__divider[data-v-d0932502]{background:var(--klc-color-border-chart);width:18px;height:1px}.left-toolbar__button[data-v-d0932502]{width:28px;height:28px;color:var(--klc-color-axis-text);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:border-color .15s,background .15s,color .15s;display:inline-flex;position:relative}.left-toolbar__button[data-v-d0932502]:hover{border-color:var(--klc-color-axis-line);background:var(--klc-color-tag-bg-hover);color:var(--klc-color-foreground)}.left-toolbar__button.active[data-v-d0932502]{border-color:var(--klc-color-border-chart);background:var(--klc-color-grid-major);color:var(--klc-color-foreground)}.left-toolbar__button[data-v-d0932502]:focus-visible{border-color:var(--klc-color-axis-text);outline:none}.tool-icon[data-v-d0932502]{width:16px;height:16px}.corner-indicator[data-v-d0932502]{cursor:pointer;width:8px;height:8px;position:absolute;bottom:0;right:0;overflow:hidden}.corner-indicator[data-v-d0932502]: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-d0932502]:after,.left-toolbar__button.active .corner-indicator[data-v-d0932502]:after{opacity:.7}.corner-indicator.open[data-v-d0932502]:after{opacity:.8}.tool-dropdown[data-v-d0932502]{background:var(--klc-color-tag-bg-white);-webkit-backdrop-filter:blur(8px);border:1px solid var(--klc-color-border-chart);box-sizing:border-box;z-index:100;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-d0932502]{position:relative}.dropdown-enter-active[data-v-d0932502],.dropdown-leave-active[data-v-d0932502]{transition:opacity .15s,transform .15s}.dropdown-enter-from[data-v-d0932502],.dropdown-leave-to[data-v-d0932502]{opacity:0;transform:translateY(-50%)translate(-6px)}@media (width<=768px),(height<=640px){.left-toolbar[data-v-d0932502]{border-radius:5px;flex-basis:36px;gap:5px;padding:6px 4px}.left-toolbar__group[data-v-d0932502]{gap:3px}.left-toolbar__button[data-v-d0932502]{border-radius:3px;width:26px;height:26px}.left-toolbar__divider[data-v-d0932502]{width:16px}.corner-indicator[data-v-d0932502]{width:7px;height:7px}.corner-indicator[data-v-d0932502]:after{border-bottom-width:4px;border-left-width:4px}.tool-dropdown[data-v-d0932502]{height:36px}}.chart-wrapper[data-v-82877422]{--kmap-height:var(--kmap-chart-height,100%);--kmap-width:var(--kmap-chart-width,100%);--chart-bg:var(--klc-color-chart-background);--chart-bg-secondary:var(--klc-color-chart-background);--chart-border:var(--klc-color-border-chart);--chart-border-active:#1890ff;--chart-text:var(--klc-color-foreground);--chart-text-secondary:var(--klc-color-axis-text);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-82877422]{align-items:stretch;gap:8px;width:95%;height:85%;min-height:255px;display:flex}.chart-main[data-v-82877422]{flex:auto;align-items:stretch;gap:0;min-width:0;height:100%;display:flex;position:relative}.pane-separator-layer[data-v-82877422]{pointer-events:none;z-index:20;position:absolute;inset:0}.pane-separator-line[data-v-82877422]{border-top:1px solid var(--chart-border);opacity:1;box-sizing:border-box;height:0;transition:border-top-color .12s,border-top-width .12s,margin-top .12s,opacity .12s;position:absolute;left:0;right:0}.pane-separator-line.is-active[data-v-82877422]{border-top-color:var(--chart-border-active);border-top-width:2px;margin-top:-1px}.chart-stage.is-resizing-pane[data-v-82877422],.chart-stage.is-hovering-pane-separator[data-v-82877422]{cursor:ns-resize}.chart-stage.is-hovering-kline[data-v-82877422]{cursor:pointer}.chart-stage.is-hovering-right-axis[data-v-82877422]{cursor:ns-resize}.chart-stage.is-dragging[data-v-82877422]{cursor:grabbing}.chart-container[data-v-82877422]{height:100%;min-height:inherit;scrollbar-width:none;-ms-overflow-style:none;border:1px solid var(--chart-border);box-sizing:border-box;background:var(--chart-bg);-webkit-touch-callout:none;user-select:none;touch-action:none;border-right:0;border-radius:6px 0 0 6px;flex:auto;position:relative;overflow:auto hidden}.chart-container[data-v-82877422]::-webkit-scrollbar{display:none}.right-axis-host[data-v-82877422]{height:100%;min-height:inherit;box-sizing:border-box;background:var(--chart-bg);border:1px solid var(--chart-border);-webkit-touch-callout:none;user-select:none;touch-action:none;border-top-right-radius:6px;border-bottom-right-radius:6px;flex:none;position:relative;overflow:visible}.scroll-content[data-v-82877422]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-82877422]{pointer-events:none;position:sticky;top:0;left:0}.tooltip-layer[data-v-82877422]{pointer-events:none;z-index:30;position:absolute;inset:0}.tooltip-anchor[data-v-82877422]{pointer-events:none;width:1px;height:1px;position:absolute}.tooltip-anchor.kline-tooltip-anchor.use-anchor[data-v-82877422]{anchor-name:--kline-tooltip-anchor}.tooltip-anchor.marker-tooltip-anchor.use-anchor[data-v-82877422]{anchor-name:--marker-tooltip-anchor}@media (width<=768px),(height<=640px){.chart-stage[data-v-82877422]{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}
package/dist/index.js CHANGED
@@ -2081,11 +2081,14 @@ var mr = { class: "settings-body" }, hr = { class: "settings-label" }, gr = ["on
2081
2081
  }), J.value = e.interactionState.peek(), j.value = e.viewport.peek().dpr;
2082
2082
  }
2083
2083
  function Mt(e) {
2084
- fe(d.dataFetcher), O.value = new de(e), O.value.on("config:error", (e) => {
2084
+ if (fe(d.dataFetcher), O.value = new de(e), O.value.on("config:error", (e) => {
2085
2085
  console.error("Semantic config error:", e);
2086
2086
  }), O.value.on("config:ready", () => {
2087
2087
  gt(), _t(), h(() => wt());
2088
- }), O.value.applyConfig(d.semanticConfig).then((e) => {
2088
+ }), oe.value.performanceTest10kKlines) {
2089
+ let e = O.value.applyIndicatorsOnly(d.semanticConfig);
2090
+ e && !e.success && console.error("Semantic config apply failed:", e.errors);
2091
+ } else O.value.applyConfig(d.semanticConfig).then((e) => {
2089
2092
  e && !e.success && console.error("Semantic config apply failed:", e.errors);
2090
2093
  });
2091
2094
  }
@@ -2096,7 +2099,7 @@ var mr = { class: "settings-body" }, hr = { class: "settings-label" }, gr = ["on
2096
2099
  let n = Et();
2097
2100
  e.addEventListener("wheel", n, { passive: !1 });
2098
2101
  let r = e.querySelector(".canvas-layer"), i = e.querySelector(".x-axis-canvas"), a = Dt(e, r, t.querySelector(".right-axis-host"), i);
2099
- E.value = a, Ot(a), kt(a), At(a), jt(a), Mt(a);
2102
+ E.value = a, Ot(a), gt(), kt(a), At(a), jt(a), Mt(a);
2100
2103
  }), x(() => {
2101
2104
  let e = E.value;
2102
2105
  e && (E.value = null, e.dispose()), Y.value = null;
@@ -2228,9 +2231,9 @@ var mr = { class: "settings-body" }, hr = { class: "settings-label" }, gr = ["on
2228
2231
  onReorderSubIndicators: xt
2229
2232
  }, null, 8, ["active-indicators", "indicator-params"])], 12, Lr));
2230
2233
  }
2231
- }), [["__scopeId", "data-v-f9c42035"]]), Ur = {
2234
+ }), [["__scopeId", "data-v-82877422"]]), Ur = {
2232
2235
  name: "@363045841yyt/klinechart",
2233
- version: "0.7.8",
2236
+ version: "0.7.10",
2234
2237
  description: "Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.",
2235
2238
  license: "MIT",
2236
2239
  repository: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@363045841yyt/klinechart",
3
- "version": "0.7.8",
3
+ "version": "0.7.10",
4
4
  "description": "Vue 3 bindings for @363045841yyt/klinechart-core. Idiomatic composables, SFC components.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -12,7 +12,7 @@ import * as VueAdapter from '../index'
12
12
  import { coreSignalToVueRef } from '../index'
13
13
  import { createMockChartController, createTestSignal } from './_mockController'
14
14
 
15
- describe('@363045841yyt/klinechart �?public API surface', () => {
15
+ describe('@363045841yyt/klinechart public API surface', () => {
16
16
  it('exports createChart, useChart, useIndicatorSelector, KLineChart, KMapPlugin', () => {
17
17
  expect(typeof VueAdapter.createChart).toBe('function')
18
18
  expect(typeof VueAdapter.useChart).toBe('function')
@@ -33,7 +33,7 @@ describe('@363045841yyt/klinechart
33
33
  })
34
34
  })
35
35
 
36
- describe('@363045841yyt/klinechart �?SSR safety', () => {
36
+ describe('@363045841yyt/klinechart SSR safety', () => {
37
37
  it('module import does not touch window or document', () => {
38
38
  // Import above ran in node env without jsdom. If it touched window, this
39
39
  // file would not have loaded. Test documents the contract.
@@ -41,7 +41,7 @@ describe('@363045841yyt/klinechart
41
41
  })
42
42
  })
43
43
 
44
- describe('@363045841yyt/klinechart �?useChart lifecycle', () => {
44
+ describe('@363045841yyt/klinechart useChart lifecycle', () => {
45
45
  afterEach(() => {
46
46
  // Reset the injected factory so other tests start clean.
47
47
  VueAdapter.__setControllerFactory(null)
@@ -662,7 +662,11 @@ function initIndicatorsFromConfig(): void {
662
662
  if (mainIndicators) {
663
663
  for (const indicator of mainIndicators) {
664
664
  if (indicator.enabled) {
665
- c.addIndicator(indicator.type, 'main', indicator.params as Record<string, number | boolean | string>)
665
+ const added = c.addIndicator(
666
+ indicator.type,
667
+ 'main',
668
+ indicator.params as Record<string, number | boolean | string>,
669
+ )
666
670
  }
667
671
  }
668
672
  }
@@ -1054,11 +1058,20 @@ function setupSemanticController(ctrl: ChartController): void {
1054
1058
  nextTick(() => scrollToRight())
1055
1059
  })
1056
1060
  // 应用副图、主图配置
1057
- semanticController.value.applyConfig(props.semanticConfig).then((result) => {
1061
+ if (chartSettings.value.performanceTest10kKlines) {
1062
+ // 10k 性能测试模式:数据由外部(applyInitialSettings)提供,
1063
+ // 语义控制器只注册指标和标记,不 fetch/updateData,避免数据跳变
1064
+ const result = semanticController.value.applyIndicatorsOnly(props.semanticConfig)
1058
1065
  if (result && !result.success) {
1059
1066
  console.error('Semantic config apply failed:', result.errors)
1060
1067
  }
1061
- })
1068
+ } else {
1069
+ semanticController.value.applyConfig(props.semanticConfig).then((result) => {
1070
+ if (result && !result.success) {
1071
+ console.error('Semantic config apply failed:', result.errors)
1072
+ }
1073
+ })
1074
+ }
1062
1075
  }
1063
1076
 
1064
1077
  onMounted(() => {
@@ -1082,6 +1095,11 @@ onMounted(() => {
1082
1095
  // 3) 信号回调
1083
1096
  setupChartCallbacks(ctrl)
1084
1097
 
1098
+ // 3.5) 在任何 draw 之前注册主图指标(BOLL/MA 等)
1099
+ // initIndicatorsFromConfig 是同步的,读 props.semanticConfig 即可注册,
1100
+ // 确保 scheduler 首次 applyResults 时 BOLL 已在 registry 里
1101
+ initIndicatorsFromConfig()
1102
+
1085
1103
  // 4) 工具栏初始设置
1086
1104
  applyInitialSettings(ctrl)
1087
1105