@363045841yyt/klinechart 0.8.5 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/dist/components/BaseModal.vue.d.ts +54 -0
- package/dist/components/BaseModal.vue.d.ts.map +1 -0
- package/dist/components/BatchStockDialog.vue.d.ts.map +1 -1
- package/dist/components/ChartSettingsDialog.vue.d.ts.map +1 -1
- package/dist/components/ColorPresetPanel.vue.d.ts +4 -1
- package/dist/components/ColorPresetPanel.vue.d.ts.map +1 -1
- package/dist/components/DrawingStyleToolbar.vue.d.ts.map +1 -1
- package/dist/components/ExportProgressDialog.vue.d.ts.map +1 -1
- package/dist/components/IndicatorParams.vue.d.ts.map +1 -1
- package/dist/components/IndicatorSelector.vue.d.ts.map +1 -1
- package/dist/components/KLineChart.vue.d.ts.map +1 -1
- package/dist/components/RangeSelectionExport.vue.d.ts +23 -0
- package/dist/components/RangeSelectionExport.vue.d.ts.map +1 -0
- package/dist/components/common/CanvasToolbar.vue.d.ts +14 -0
- package/dist/components/common/CanvasToolbar.vue.d.ts.map +1 -0
- package/dist/components/common/CanvasToolbarStack.vue.d.ts +14 -0
- package/dist/components/common/CanvasToolbarStack.vue.d.ts.map +1 -0
- package/dist/composables/chart/useRangeSelection.d.ts +1 -0
- package/dist/composables/chart/useRangeSelection.d.ts.map +1 -1
- package/dist/composables/useTeleportedPopup.d.ts.map +1 -1
- package/dist/index.cjs +6 -6
- package/dist/index.css +1 -1
- package/dist/index.js +1293 -1215
- package/dist/web-component.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/BaseModal.vue +292 -0
- package/src/components/BatchStockDialog.vue +15 -180
- package/src/components/ChartSettingsDialog.vue +248 -405
- package/src/components/ColorPresetPanel.vue +58 -106
- package/src/components/CompareSymbolSelector.vue +2 -2
- package/src/components/DrawingStyleToolbar.vue +33 -72
- package/src/components/ExportProgressDialog.vue +25 -133
- package/src/components/IndicatorParams.vue +194 -321
- package/src/components/IndicatorSelector.vue +188 -405
- package/src/components/KLineChart.vue +34 -138
- package/src/components/LeftToolbar.vue +1 -1
- package/src/components/RangeSelectionExport.vue +117 -0
- package/src/components/SymbolSelector.vue +2 -2
- package/src/components/common/CanvasToolbar.vue +70 -0
- package/src/components/common/CanvasToolbarStack.vue +32 -0
- package/src/composables/chart/useRangeSelection.ts +7 -0
- package/src/composables/useTeleportedPopup.ts +15 -2
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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/indicators"),a=require("@363045841yyt/klinechart-core/config");var o={class:`color-preset-tools`},s={class:`theme-tabs`,role:`tablist`,"aria-label":`颜色主题`},c=[`onClick`],l={class:`color-group-label`},u={class:`color-grid`},d=[`value`,`onInput`],f=(0,e.defineComponent)({__name:`ColorPresetPanel`,props:{colorPresetSettings:{}},emits:[`update:colorPresetSettings`],setup(n,{emit:r}){let i=n,a=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);a(`update:colorPresetSettings`,{...r,[h.value]:{...r[h.value],[e]:n}})}function y(){let e={...(0,t.normalizeColorPresetSettings)(i.colorPresetSettings)};delete e[h.value],a(`update:colorPresetSettings`,e)}return(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,null,[(0,e.createElementVNode)(`div`,o,[(0,e.createElementVNode)(`div`,s,[((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,c)),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`,l,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,u,[((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,d)]))),128))])],64))),128))]))}}),p=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},m=p(f,[[`__scopeId`,`data-v-a52947a4`]]);function h(t,n,r=4){let i=(0,e.ref)({});function a(){let e=t.value;if(!e)return;let n=e.getBoundingClientRect();i.value={position:`fixed`,top:`${n.bottom+r}px`,left:`${n.left}px`}}function o(){a(),document.addEventListener(`scroll`,a,{capture:!0,passive:!0}),window.addEventListener(`resize`,a,{passive:!0})}function s(){document.removeEventListener(`scroll`,a,{capture:!0}),window.removeEventListener(`resize`,a)}return{popupStyle:i,updatePosition:a,startPositionSync:o,stopPositionSync:s}}var g=Symbol(`fullscreen-teleport-target`);function _(t){(0,e.provide)(g,t)}function v(){let t=(0,e.inject)(g,null);return(0,e.computed)(()=>t?.value??`body`)}var y=[`title`,`aria-expanded`,`onKeydown`],b={key:0,class:`dropdown__label`},x={class:`dropdown__value`},S=[`aria-selected`,`onClick`],C=0,w=null,T=0,E=p((0,e.defineComponent)({__name:`Dropdown`,props:{modelValue:{},options:{},size:{default:`md`},minWidth:{},label:{},title:{default:``}},emits:[`update:modelValue`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)(null),o=(0,e.ref)(null),s=(0,e.ref)(null),c=(0,e.ref)(!1),l=(0,e.ref)(0),u=++T,d=v(),{popupStyle:f,startPositionSync:p,stopPositionSync:m}=h(o,s,4),g=(0,e.computed)(()=>r.minWidth?{minWidth:r.minWidth}:{}),_=(0,e.computed)(()=>{if(!c.value)return;let e=l.value||(r.minWidth?parseInt(r.minWidth):0);return{width:e?`${e}px`:void 0,zIndex:1010,...f.value}}),E=(0,e.computed)(()=>{let e=r.modelValue?.trim();return e&&r.options.some(t=>t.value===e)?e:r.options[0]?.value??``}),D=(0,e.computed)(()=>r.options.find(e=>e.value===E.value)??r.options[0]);function O(){C!==u&&w&&w(),!c.value&&(C=u,w=k,l.value=o.value?.offsetWidth??0,c.value=!0,p(),document.addEventListener(`pointerdown`,M))}function k(){c.value&&(c.value=!1,C===u&&(C=0,w=null),m(),document.removeEventListener(`pointerdown`,M))}function A(){c.value?k():O()}function j(e){i(`update:modelValue`,e),k()}function M(e){let t=a.value,n=s.value;t&&!t.contains(e.target)&&!n?.contains(e.target)&&k()}return(0,e.onBeforeUnmount)(k),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`rootRef`,ref:a,class:(0,e.normalizeClass)([`dropdown`,[`dropdown--${t.size}`,{"is-open":c.value}]])},[(0,e.createElementVNode)(`button`,{ref_key:`triggerRef`,ref:o,type:`button`,class:`dropdown__trigger`,title:t.title,style:(0,e.normalizeStyle)(g.value),"aria-haspopup":`listbox`,"aria-expanded":c.value,onClick:A,onKeydown:[(0,e.withKeys)((0,e.withModifiers)(k,[`stop`]),[`escape`]),(0,e.withKeys)((0,e.withModifiers)(O,[`prevent`]),[`down`]),(0,e.withKeys)((0,e.withModifiers)(A,[`prevent`]),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(A,[`prevent`]),[`space`])]},[t.label?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,b,(0,e.toDisplayString)(t.label),1)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,x,(0,e.toDisplayString)(D.value.label),1),r[0]||=(0,e.createElementVNode)(`span`,{class:`dropdown__chevron`,"aria-hidden":`true`},null,-1)],44,y),((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(d)},[c.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref_key:`menuRef`,ref:s,class:`dropdown__menu`,style:(0,e.normalizeStyle)(_.value),role:`listbox`,tabindex:`-1`},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.options,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.value,type:`button`,class:(0,e.normalizeClass)([`dropdown__option`,{"is-selected":t.value===E.value}]),role:`option`,"aria-selected":t.value===E.value,onClick:e=>j(t.value)},(0,e.toDisplayString)(t.label),11,S))),128))],4)):(0,e.createCommentVNode)(``,!0)],8,[`to`]))],2))}}),[[`__scopeId`,`data-v-bab778b8`]]),D={class:`toolbar-item color-item`,title:`颜色`},O=[`value`],k=p((0,e.defineComponent)({__name:`DrawingStyleToolbar`,props:{drawing:{}},emits:[`updateStyle`,`delete`],setup(t,{emit:n}){let r=[{label:`1px`,value:`1`},{label:`2px`,value:`2`},{label:`3px`,value:`3`},{label:`4px`,value:`4`}],i=[{label:`实线`,value:`solid`},{label:`虚线`,value:`dashed`},{label:`点线`,value:`dotted`}],a=n;function o(e){e.key===`Delete`&&(e.preventDefault(),a(`delete`))}(0,e.onMounted)(()=>document.addEventListener(`keydown`,o)),(0,e.onUnmounted)(()=>document.removeEventListener(`keydown`,o));function s(e){a(`updateStyle`,{stroke:e})}function c(e){a(`updateStyle`,{strokeWidth:e})}function l(e){a(`updateStyle`,{strokeStyle:e})}return(n,a)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:`drawing-style-toolbar`,onPointerdown:a[4]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:a[5]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:a[6]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,D,[(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:a[0]||=e=>s(e.target.value)},null,40,O)]),(0,e.createVNode)(E,{"model-value":String(t.drawing.style.strokeWidth??1),options:r,size:`sm`,title:`线宽`,"onUpdate:modelValue":a[1]||=e=>c(Number(e))},null,8,[`model-value`]),(0,e.createVNode)(E,{"model-value":t.drawing.style.strokeStyle??`solid`,options:i,size:`sm`,title:`线型`,"onUpdate:modelValue":a[2]||=e=>l(e)},null,8,[`model-value`]),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn delete-btn`,title:`删除`,onClick:a[3]||=e=>n.$emit(`delete`)},[...a[7]||=[(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-e9b6a8a9`]]),A={class:`params-header`},j={class:`header-left`},M={class:`params-title`},ee={class:`header-right`},N={key:0,class:`indicator-description`},te={class:`params-body`},P={class:`param-header`},ne={class:`param-label`},re={class:`param-label-text`},ie={key:0,class:`param-range`},ae={class:`input-wrapper`},F=[`disabled`,`onClick`],oe=[`value`,`min`,`max`,`step`,`onInput`],I=[`disabled`,`onClick`],se={key:0,class:`param-description`},ce={class:`params-footer`},le={class:`footer-right`},L=p((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=v();(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`,A,[(0,e.createElementVNode)(`div`,j,[(0,e.createElementVNode)(`span`,M,(0,e.toDisplayString)(t.indicatorName),1),r[5]||=(0,e.createElementVNode)(`span`,{class:`params-subtitle`},`参数设置`,-1)]),(0,e.createElementVNode)(`div`,ee,[(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`,N,[(0,e.createElementVNode)(`p`,null,(0,e.toDisplayString)(t.indicatorDescription),1)])):(0,e.createCommentVNode)(``,!0)]),_:1}),(0,e.createElementVNode)(`div`,te,[((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`,P,[(0,e.createElementVNode)(`label`,ne,[(0,e.createElementVNode)(`span`,re,(0,e.toDisplayString)(t.label),1),t.min!==void 0||t.max!==void 0?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,ie,(0,e.toDisplayString)(t.min??`-∞`)+` ~ `+(0,e.toDisplayString)(t.max??`+∞`),1)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,ae,[(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,F),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,oe)):(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,I)])]),(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[o.value&&t.description?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,se,(0,e.toDisplayString)(t.description),1)):(0,e.createCommentVNode)(``,!0)]),_:2},1024)],2))),128))]),(0,e.createElementVNode)(`div`,ce,[(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`,le,[(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`]]),R={class:`indicator-selector`},z={class:`modal-header`},B={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-search-area`},he={class:`search-box`},ge=[`value`],_e={class:`modal-body`},ve={key:0,class:`indicator-section`},ye={class:`section-header`},be={class:`section-count`},xe=[`onClick`],Se={class:`card-label`},Ce={class:`card-tooltip`},we={class:`card-header`},Te={class:`card-label`},Ee={class:`card-header-actions`},De=[`onClick`],Oe={class:`card-name`},ke={key:1,class:`section-divider`},Ae={key:2,class:`no-results`},je={key:3,class:`indicator-section`},V={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`],H={class:`card-name`},Be={class:`modal-footer`},Ve={class:`footer-info`},He={class:`info-text`},Ue=p((0,e.defineComponent)({__name:`IndicatorSelector`,props:{activeIndicators:{},indicatorParams:{}},emits:[`toggle`,`updateParams`,`reorderSubIndicators`],setup(t,{expose:r,emit:i}){let a=t,o=i;function s(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 c=(0,n.createIndicatorSelectorController)(),l=$(c.menuOpen),u=$(c.searchQuery),d=$(c.filteredMain),f=$(c.filteredSub),p=(0,e.computed)(()=>d.value.length>0||f.value.length>0),m=$(c.catalog),h=(0,e.computed)(()=>m.value.length);(0,e.onMounted)(async()=>{(0,n.isBuiltinIndicatorsLoaded)()||await(0,n.loadBuiltinIndicators)(),c.catalog.set(s((0,n.allIndicators)()))});let g=(0,e.ref)(!1),_=(0,e.ref)(null),y=(0,e.ref)(!1),b=v(),x=(0,e.computed)(()=>_.value?(0,n.findIndicator)(_.value):null),S=(0,e.computed)(()=>a.activeIndicators?.length??0);function C(e){return a.activeIndicators?.includes(e)??!1}function w(e){C(e)||(0,n.findIndicator)(e)&&o(`toggle`,e,!0)}function T(e){o(`toggle`,e,!1)}function E(e){_.value=e,g.value=!0}function D(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 i=a.indicatorParams?.[e]||{},o={...r};for(let[e,t]of Object.entries(i))typeof t==`number`&&(o[e]=t);return o}function O(e){_.value&&o(`updateParams`,_.value,e),g.value=!1}function k(e){e.key===`Escape`&&c.menuOpen.peek()&&c.closeMenu()}return(0,e.onMounted)(()=>{document.addEventListener(`keydown`,k)}),(0,e.onUnmounted)(()=>{document.removeEventListener(`keydown`,k)}),r({openMenu:()=>c.openMenu(),closeMenu:()=>c.closeMenu(),toggleMenu:()=>c.toggleMenu()}),(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,R,[((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(b)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[(0,e.unref)(l)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`selector-overlay`,onClick:n[5]||=t=>(0,e.unref)(c).closeMenu()},[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.unref)(l)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`selector-modal`,onClick:n[4]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,z,[(0,e.createElementVNode)(`div`,B,[n[7]||=(0,e.createElementVNode)(`span`,{class:`title-text`},`添加指标`,-1),(0,e.createElementVNode)(`span`,ue,(0,e.toDisplayString)(h.value)+` 个可用指标`,1)]),(0,e.createElementVNode)(`div`,de,[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`view-toggle-btn`,{active:y.value}]),onClick:n[0]||=e=>y.value=!y.value,title:`简洁模式`},[y.value?((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,pe,[...n[9]||=[(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,[...n[8]||=[(0,e.createElementVNode)(`path`,{d:`M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z`},null,-1)]]))],2),(0,e.createElementVNode)(`button`,{class:`modal-close`,onClick:n[1]||=t=>(0,e.unref)(c).closeMenu(),title:`关闭`},[...n[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)]])])]),(0,e.createElementVNode)(`div`,me,[(0,e.createElementVNode)(`div`,he,[n[11]||=(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)(u),onInput:n[2]||=t=>(0,e.unref)(c).setSearchQuery(t.target.value),type:`text`,class:`search-input`,placeholder:`搜索指标名称...`},null,40,ge)])]),(0,e.createElementVNode)(`div`,_e,[(0,e.unref)(d).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ve,[(0,e.createElementVNode)(`div`,ye,[n[12]||=(0,e.createElementVNode)(`span`,{class:`section-title`},`主图指标`,-1),(0,e.createElementVNode)(`span`,be,(0,e.toDisplayString)((0,e.unref)(d).length),1)]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-grid`,{compact:y.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:C(t.id),compact:y.value}]),onClick:e=>C(t.id)?T(t.id):w(t.id)},[y.value?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`span`,Se,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`span`,Ce,(0,e.toDisplayString)(t.name),1)],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,we,[(0,e.createElementVNode)(`span`,Te,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,Ee,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`card-settings-btn`,onClick:(0,e.withModifiers)(e=>E(t.id),[`stop`]),title:`编辑参数`},[...n[13]||=[(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,De)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,Oe,(0,e.toDisplayString)(t.name),1)],64))],10,xe))),128))],2)])):(0,e.createCommentVNode)(``,!0),(0,e.unref)(d).length>0&&(0,e.unref)(f).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ke)):(0,e.createCommentVNode)(``,!0),!p.value&&(0,e.unref)(u).trim()?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ae,[...n[14]||=[(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)(f).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,je,[(0,e.createElementVNode)(`div`,V,[n[15]||=(0,e.createElementVNode)(`span`,{class:`section-title`},`副图指标`,-1),(0,e.createElementVNode)(`span`,Me,(0,e.toDisplayString)((0,e.unref)(f).length),1)]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-grid`,{compact:y.value}])},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(f),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.id,class:(0,e.normalizeClass)([`indicator-card`,{active:C(t.id),compact:y.value}]),onClick:e=>C(t.id)?T(t.id):w(t.id)},[y.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=>E(t.id),[`stop`]),title:`编辑参数`},[...n[16]||=[(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`,H,(0,e.toDisplayString)(t.name),1)],64))],10,Ne))),128))],2)])):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,Be,[(0,e.createElementVNode)(`div`,Ve,[(0,e.createElementVNode)(`span`,He,`已激活 `+(0,e.toDisplayString)(S.value)+` 个指标`,1)]),(0,e.createElementVNode)(`button`,{class:`btn btn-confirm`,onClick:n[3]||=t=>(0,e.unref)(c).closeMenu()},`确认`)])])):(0,e.createCommentVNode)(``,!0)]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`])),x.value?((0,e.openBlock)(),(0,e.createBlock)(L,{key:0,visible:g.value,"indicator-id":x.value.id,"indicator-name":x.value.name,"indicator-description":x.value.description,params:x.value.params||[],values:D(x.value.id),onClose:n[6]||=e=>g.value=!1,onConfirm:O},null,8,[`visible`,`indicator-id`,`indicator-name`,`indicator-description`,`params`,`values`])):(0,e.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-fe4a5a7b`]]),We={class:`kline-tooltip__title`},Ge={key:0},Ke={class:`kline-tooltip__grid`},qe={class:`row`},Je={class:`row`},Ye={class:`row`},Xe={class:`row`},Ze={key:0,class:`row`},Qe={key:1,class:`row`},$e={key:2,class:`row`},et={key:3,class:`row`},tt={key:4,class:`row`},nt={key:5,class:`row`},U=`#6b7280`,rt=p((0,e.defineComponent)({__name:`KLineTooltip`,props:{k:{},index:{},data:{},pos:{},useAnchor:{type:Boolean},anchorPlacement:{},setEl:{},upColor:{default:`#ef4444`},downColor:{default:`#22c55e`},timezone:{default:`Asia/Shanghai`},showTime:{type:Boolean,default:!1}},setup(n){let r=n,i=(0,e.computed)(()=>r.k?(0,t.formatTimestamp)(r.k.timestamp,{timeZone:r.timezone,showTime:r.showTime}):``),a=(0,e.computed)(()=>r.useAnchor===!0),o=(0,e.computed)(()=>r.anchorPlacement===`left-bottom`?`anchor-left-bottom`:`anchor-right-bottom`);function s(e){r.setEl?.(e)}function c(e){return e>=1e8?(e/1e8).toFixed(2)+`亿`:e>=1e4?(e/1e4).toFixed(2)+`万`:e.toFixed(2)}function l(e,t){return`${e>=0?`+`:``}${e.toFixed(2)}${t}`}function u(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 d=(0,e.computed)(()=>{let e=r.k;if(!e)return U;let t=u(e,r.data,r.index);return t>0?r.upColor:t<0?r.downColor:U}),f=(0,e.computed)(()=>{let e=r.k;if(!e)return U;let t=e.close-e.open;return t>0?r.upColor:t<0?r.downColor:U}),p=(0,e.computed)(()=>{let e=r.k;if(!e)return U;let t=e.changePercent??(e.close-e.open)/e.open*100;return t>0?r.upColor:t<0?r.downColor:U});return(t,r)=>n.k?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref:s,class:(0,e.normalizeClass)([`kline-tooltip`,[{"use-anchor":a.value},o.value]]),style:(0,e.normalizeStyle)(a.value?void 0:{left:`${n.pos.x}px`,top:`${n.pos.y}px`})},[(0,e.createElementVNode)(`div`,We,[n.k.stockCode?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Ge,(0,e.toDisplayString)(n.k.stockCode),1)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(i.value),1)]),(0,e.createElementVNode)(`div`,Ke,[(0,e.createElementVNode)(`div`,qe,[r[0]||=(0,e.createElementVNode)(`span`,null,`开`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:d.value})},(0,e.toDisplayString)(n.k.open.toFixed(2)),5)]),(0,e.createElementVNode)(`div`,Je,[r[1]||=(0,e.createElementVNode)(`span`,null,`高`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.k.high.toFixed(2)),1)]),(0,e.createElementVNode)(`div`,Ye,[r[2]||=(0,e.createElementVNode)(`span`,null,`低`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.k.low.toFixed(2)),1)]),(0,e.createElementVNode)(`div`,Xe,[r[3]||=(0,e.createElementVNode)(`span`,null,`收`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:f.value})},(0,e.toDisplayString)(n.k.close.toFixed(2)),5)]),typeof n.k.volume==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ze,[r[4]||=(0,e.createElementVNode)(`span`,null,`成交量`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(c(n.k.volume)),1)])):(0,e.createCommentVNode)(``,!0),typeof n.k.turnover==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Qe,[r[5]||=(0,e.createElementVNode)(`span`,null,`成交额`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(c(n.k.turnover)),1)])):(0,e.createCommentVNode)(``,!0),typeof n.k.amplitude==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,$e,[r[6]||=(0,e.createElementVNode)(`span`,null,`振幅`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.k.amplitude)+`%`,1)])):(0,e.createCommentVNode)(``,!0),typeof n.k.changePercent==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,et,[r[7]||=(0,e.createElementVNode)(`span`,null,`涨跌幅`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:p.value})},(0,e.toDisplayString)(l(n.k.changePercent,`%`)),5)])):(0,e.createCommentVNode)(``,!0),typeof n.k.changeAmount==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,tt,[r[8]||=(0,e.createElementVNode)(`span`,null,`涨跌额`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:p.value})},(0,e.toDisplayString)(l(n.k.changeAmount,``)),5)])):(0,e.createCommentVNode)(``,!0),typeof n.k.turnoverRate==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,nt,[r[9]||=(0,e.createElementVNode)(`span`,null,`换手率`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.k.turnoverRate.toFixed(2))+`%`,1)])):(0,e.createCommentVNode)(``,!0)])],6)):(0,e.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-80fa3a7d`]]),it={class:`marker-tooltip__title`},at={key:0,class:`marker-tooltip__content`},ot=p((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`,it,(0,e.toDisplayString)(c.value),1),u.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,at,[((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`]]);function st(n){let r=(0,e.ref)(`light`),i=(0,e.ref)({}),a=(0,e.computed)(()=>{let e=i.value.isAsiaMarket??!1,n=(0,t.resolveThemeColors)(r.value,e);return{upColor:n.candleUpBody,downColor:n.candleDownBody}}),o=(0,e.computed)(()=>{let e=r.value===`dark`?t.darkTheme:t.lightTheme,n=i.value.colorPresetSettings?.[r.value];return n&&Object.keys(n).length>0?(0,t.themeToCssVars)({...e,colors:{...e.colors,...n}}):(0,t.themeToCssVars)(e)}),s=null;function c(e){n.value?.setTheme(e.matches?`dark`:`light`)}function l(e){let t=n.value;if(!(!t||!e))if(e===`auto`){let e=window.matchMedia(`(prefers-color-scheme: dark)`);t.setTheme(e.matches?`dark`:`light`),s!==e&&(s?.removeEventListener(`change`,c),s=e,e.addEventListener(`change`,c))}else s?.removeEventListener(`change`,c),s=null,t.setTheme(e)}function u(e){i.value=e,l(e.theme),n.value?.updateSettingsFacade(e)}return(0,e.onUnmounted)(()=>{s?.removeEventListener(`change`,c),s=null}),{chartTheme:r,chartSettings:i,tooltipColors:a,themeCssVars:o,handleSettingsChange:u,applyThemeFromSettings:l}}function ct(t,n){let r=(0,e.ref)([]),a=(0,e.ref)([]),o=(0,e.computed)(()=>{let e=[],t=new Set;for(let n of a.value)t.has(n.indicatorId)||(t.add(n.indicatorId),e.push(n.indicatorId));return e}),s=(0,e.computed)(()=>[...r.value,...o.value]),c=(0,e.ref)({});function l(){let e=n.value.main??3;return a.value.length===0?[{id:`main`,ratio:e,visible:!0,role:`price`}]:[{id:`main`,ratio:e,visible:!0,role:`price`},...a.value.map(e=>({id:e.id,ratio:n.value[e.id]??1,visible:!0,role:`indicator`}))]}function u(e){if(e===`VOLUME`)return{};let t=(0,i.getRegisteredIndicatorDefinition)(e);return t?.runtime?.defaultConfig?{...t.runtime.defaultConfig}:{}}function d(e){if(e===`VOLUME`)return!0;let t=(0,i.getRegisteredIndicatorDefinition)(e);return!!t&&t.category!==`main`}function f(e=`VOLUME`,n){if(a.value.length>=4)return!1;let r=n??u(e);return!!t.value?.addIndicator(e,`sub`,r)}function p(e){t.value?.removeIndicator(e)}function m(){for(let e of a.value)t.value?.removeIndicator(e.id)}function h(e){let n=e,r=t.value;if(!n||!r)return;let i=n.indicators?.main;if(i)for(let e of i)e.enabled&&r.addIndicator(e.type,`main`,e.params)}function g(e,n){let r=u(n);t.value?.replaceSubPaneIndicator(e,n,r)}function _(e,n){let o=t.value;if(!o)return;let s=(0,i.getRegisteredIndicatorDefinition)(e);if(s&&(s.category===`main`||s.allowMainPane)){let t=r.value.find(t=>t===e);n&&!t?o.addIndicator(e,`main`,c.value[e]):!n&&t&&o.removeIndicator(e.toUpperCase());return}if(d(e))if(n){if(a.value.find(t=>t.indicatorId===e)||a.value.length>=4)return;if(!o.addIndicator(e,`sub`,c.value[e])&&a.value.length>0){let t=a.value[a.value.length-1];g(t.id,e)}}else a.value.filter(t=>t.indicatorId===e).forEach(e=>{o.removeIndicator(e.id)})}function v(e,n){if(e===`MA`||e===`BOLL`||e===`EXPMA`||e===`ENE`){t.value?.updateIndicatorParams(e,n);return}d(e)&&a.value.filter(t=>t.indicatorId===e).forEach(e=>{t.value?.updateIndicatorParams(e.id,n)})}function y(e){if(!e.length||a.value.length<=1)return;let n=e.filter(e=>d(e));if(!n.length)return;let r=new Map(a.value.map(e=>[e.indicatorId,e])),i=[];for(let e of n){let t=r.get(e);t&&(i.push(t),r.delete(e))}if(i.length===0)return;for(let e of a.value)r.has(e.indicatorId)&&(i.push(e),r.delete(e.indicatorId));let o=a.value.map(e=>e.id),s=i.map(e=>e.id);if(o.join(`|`)===s.join(`|`))return;a.value=i;let c=t.value;c&&c.updatePaneLayout(l())}function b(e){let t=e.indicators.subscribe(()=>{let t=e.indicators.peek(),n=t.filter(e=>e.role===`main`).map(e=>e.definitionId);r.value=n;let i={...c.value};for(let e of t)e.role===`main`&&e.params&&Object.keys(e.params).length>0&&(i[e.definitionId]={...e.params});e.updateRendererConfig(`mainIndicatorLegend`,{indicators:{MA:{enabled:n.includes(`MA`),params:i.MA||{}},BOLL:{enabled:n.includes(`BOLL`),params:i.BOLL||{}},EXPMA:{enabled:n.includes(`EXPMA`),params:i.EXPMA||{}},ENE:{enabled:n.includes(`ENE`),params:i.ENE||{}}}}),c.value=i}),n=e.subPanes.subscribe(()=>{let t=e.subPanes.peek(),n=new Set(t.map(e=>e.paneId)),r=a.value.filter(e=>n.has(e.id)),i=new Set(r.map(e=>e.id));for(let e of t)i.has(e.paneId)||r.push({id:e.paneId,indicatorId:e.indicatorId,params:e.params});a.value=r;let o={...c.value};for(let e of t)e.params&&Object.keys(e.params).length>0&&(o[e.indicatorId]={...e.params});c.value=o});return()=>{t(),n()}}return{mainActiveIndicators:r,subActiveIndicators:o,activeIndicators:s,indicatorParams:c,subPanes:a,maxSubPanes:4,buildPaneLayoutIntent:l,getDefaultParams:u,isSubPaneIndicator:d,addSubPane:f,removeSubPane:p,clearAllSubPanes:m,initIndicatorsFromConfig:h,switchSubIndicator:g,handleIndicatorToggle:_,handleUpdateParams:v,handleReorderSubIndicators:y,setupIndicatorSubscriptions:b}}function lt(t){let r=(0,e.shallowRef)(null),i=(0,e.ref)(null),a=(0,e.ref)([]),o=(0,e.computed)(()=>{let e=i.value;return e?a.value.find(t=>t.id===e)??null:null});function s(e){r.value?.setTool(e)}function c(e){let t=o.value;!t||!r.value||(r.value.updateDrawingStyle(t.id,e),a.value=r.value.getDrawings())}function l(){let e=o.value;!e||!r.value||(r.value.removeDrawing(e.id),a.value=r.value.getDrawings())}function u(e){r.value=new n.DrawingInteractionController(e),r.value.setCallbacks({onDrawingCreated:e=>{a.value=[...a.value,e],i.value=e.id},onToolChange:()=>{},onDrawingSelected:e=>{i.value=e?.id??null}})}return{drawingController:r,selectedDrawingId:i,selectedDrawing:o,drawings:a,handleSelectTool:s,onUpdateDrawingStyle:c,onDeleteDrawing:l,setupDrawing:u}}function ut(e,t,n,r){let{kWidth:i,kGap:a}=t.getKWidthKGap(),o=t.getCurrentDpr(),s=Math.max(1,Math.round(i*o)+ +(Math.round(i*o)%2==0)),c=Math.round(a*o),l=s+c,u=c,d=n.scrollLeft-r.scrollLeft,f=d+(u+e.start*l)/o;return{left:f,width:d+(u+e.end*l+s)/o-f,height:r.plotHeight}}function dt(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=n+r>>>1,a=e[i].timestamp;if(a===t)return{low:i,high:i};a<t?n=i+1:r=i-1}return{low:n,high:r}}function ft(e,t,n){if(e.length===0)return null;let{low:r,high:i}=dt(e,t);return r===i?r:n===`left`?i>=0?i:r<e.length?r:null:r<e.length?r:i}function pt(e){return e?e.date?e.date:new Date(e.timestamp).toISOString().slice(0,10):`?`}function mt(e){let t=new Date(e);return`${t.getFullYear()}${String(t.getMonth()+1).padStart(2,`0`)}${String(t.getDate()).padStart(2,`0`)}`}function W(e){let t=e.trim().split(/[-/]/);return t.length===3?`${t[0].padStart(4,`0`)}-${t[1].padStart(2,`0`)}-${t[2].padStart(2,`0`)}`:null}function G(e){if(e==null)return``;let t=String(e);return/[",\r\n]/.test(t)?`"${t.replace(/"/g,`""`)}"`:t}function K(e){let t=W(e);if(!t)return null;let n=new Date(t);return isNaN(n.getTime())?null:n.getTime()}function ht(n){let{controller:r,activeToolId:i,containerRef:a,dataVersion:o,viewportVersion:s,dataFetcher:c,batchStockCodes:l}=n,u=(0,e.ref)(0),d=(0,e.ref)(``),f=(0,e.ref)(``),p=(0,e.ref)(null),m=(0,e.ref)(null),h=(0,e.ref)({startTimestamp:null,endTimestamp:null,isDragging:!1}),g=(0,e.computed)(()=>i.value===`range-select`),_=(0,e.computed)(()=>h.value.startTimestamp!==null&&h.value.endTimestamp!==null),v=(0,e.computed)(()=>{o.value;let e=r.value?.getData()??[],{startTimestamp:t,endTimestamp:n}=h.value;if(t===null||n===null||e.length===0)return null;let i=ft(e,t,`left`),a=ft(e,n,`right`);return i===null||a===null?null:{start:Math.min(i,a),end:Math.max(i,a)}}),y=(0,e.computed)(()=>{let e=v.value,t=r.value?.getData()??[];return!e||t.length===0?``:pt(t[e.start])}),b=(0,e.computed)(()=>{let e=v.value,t=r.value?.getData()??[];return!e||t.length===0?``:pt(t[e.end])}),x=(0,e.computed)(()=>{let e=v.value;if(!e)return null;u.value,s.value;let t=r.value,n=t?.getViewport(),i=a.value;if(!t||!n||!i)return null;let o=ut(e,t,i,n);return{left:`${o.left}px`,width:`${o.width}px`,height:`${o.height}px`}});function S(){h.value={startTimestamp:null,endTimestamp:null,isDragging:!1},d.value=``,f.value=``}(0,e.watch)(d,e=>{let t=r.value?.getData()??[],n=K(e);n===null||t.length===0||(h.value={...h.value,startTimestamp:n,isDragging:!1},n<t[0].timestamp&&r.value?.ensureDataRange(n))}),(0,e.watch)(f,e=>{let t=r.value?.getData()??[],n=K(e);n===null||t.length===0||(h.value={...h.value,endTimestamp:n,isDragging:!1},n<t[0].timestamp&&r.value?.ensureDataRange(n))});function C(e,t){let n=r.value?.getData()??[];if(n.length===0)return null;let i=t.getBoundingClientRect(),a=r.value?.getLogicalIndexAtX(e.clientX-i.left);return a==null?null:Math.max(0,Math.min(a,n.length-1))}function w(e,t){if(!g.value||h.value.startTimestamp!==null&&h.value.endTimestamp!==null&&!h.value.isDragging)return!1;let n=C(e,t);if(n===null)return!0;let i=(r.value?.getData()??[])[n]?.timestamp;return i===void 0?!0:(h.value={startTimestamp:i,endTimestamp:i,isDragging:!0},d.value=``,f.value=``,t.setPointerCapture?.(e.pointerId),e.preventDefault(),!0)}function T(e,t){if(!g.value||!h.value.isDragging)return!1;let n=C(e,t);if(n!==null){let e=(r.value?.getData()??[])[n]?.timestamp;e!==void 0&&(h.value={...h.value,endTimestamp:e})}return e.preventDefault(),!0}function E(e,t){if(!g.value||!h.value.isDragging)return!1;let n=C(e,t);if(n!==null){let e=(r.value?.getData()??[])[n]?.timestamp;e===void 0?h.value={...h.value,isDragging:!1}:h.value={...h.value,endTimestamp:e,isDragging:!1}}else h.value={...h.value,isDragging:!1};return t.releasePointerCapture?.(e.pointerId),e.preventDefault(),!0}function D(e,t){g.value&&(p.value=e,t.currentTarget.setPointerCapture?.(t.pointerId),t.preventDefault())}function O(e){if(!p.value||h.value.startTimestamp===null||h.value.endTimestamp===null)return;let t=a.value?.getBoundingClientRect();if(!t)return;let n=r.value?.getData()??[];if(!n.length)return;let i=r.value?.getLogicalIndexAtX(e.clientX-t.left);if(i==null)return;let o=n[Math.max(0,Math.min(i,n.length-1))]?.timestamp;o!==void 0&&(p.value===`left`?o>h.value.endTimestamp?(h.value={startTimestamp:h.value.endTimestamp,endTimestamp:o,isDragging:!1},p.value=`right`):h.value={...h.value,startTimestamp:o}:o<h.value.startTimestamp?(h.value={startTimestamp:o,endTimestamp:h.value.startTimestamp,isDragging:!1},p.value=`left`):h.value={...h.value,endTimestamp:o})}function k(e){p.value&&=(e.currentTarget.releasePointerCapture?.(e.pointerId),null)}let A=[`timestamp`,`open`,`high`,`low`,`close`,`volume`,`turnover`,`turnoverRate`,`amplitude`,`changePercent`,`changeAmount`];function j(e,n,r,i){let a=[`stockCode,time,${A.join(`,`)}`,...e.map(e=>{let r=G((0,t.formatTimestamp)(e.timestamp,{showTime:!0}));return`${G(e.stockCode??n)},${r},${A.map(t=>G(e[t])).join(`,`)}`})],o=new Blob([`\uFEFF${a.join(`
|
|
2
|
-
`)}`],{type:`text/csv;charset=utf-8`}),s=URL.createObjectURL(o),c=document.createElement(`a`);c.href=s,c.download=`${n}-${mt(r)}-${mt(i)}.csv`,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(s)}async function M(){let e=v.value,n=r.value?.getData()??[];if(!e||n.length===0)return;let i=n[e.start].timestamp,a=n[e.end].timestamp,o=r.value?.symbols.peek()?.[0]?.symbol??`unknown`,s=l.value,u=1+s.length,d=s.length>0?`batch${u}`:o,f=[];m.value={current:0,total:u,label:`正在准备主品种数据...`};for(let t of n.slice(e.start,e.end+1))f.push(t);m.value={current:1,total:u,label:`主品种数据已就绪`};let p=c.value;if(p&&s.length>0){let e=r.value?.symbols.peek()?.[0],n=(0,t.formatTimestamp)(i),o=(0,t.formatTimestamp)(a),c=e?.period??`daily`,l=e?.adjust??`none`,d=e?.exchange,h=e?.source??`gotdx`;for(let e=0;e<s.length;e++){let t=s[e];m.value={current:1+e,total:u,label:`正在获取 ${t}...`};try{let e=await p(h,{symbol:t,startDate:n,endDate:o,period:c,adjust:l,exchange:d});for(let t of e)f.push(t)}catch{continue}}}m.value={current:u,total:u,label:`正在生成文件...`},j(f,d,i,a),m.value={current:u,total:u,label:`导出完成`}}function ee(){let e=a.value;e&&(u.value=e.scrollLeft)}function N(){let e=a.value;e&&(u.value=e.scrollLeft)}return{rangeSelection:h,customStartDate:d,customEndDate:f,containerScrollLeft:u,isRangeSelectActive:g,rangeSelectionReady:_,rangeSelectionBounds:v,rangeSelectionStartLabel:y,rangeSelectionEndLabel:b,rangeSelectionOverlayStyle:x,clearRangeSelection:S,handleRangePointerDown:w,handleRangePointerMove:T,handleRangePointerUp:E,exportRangeToCsv:M,exportingProgress:m,onEdgePointerDown:D,onEdgePointerMove:O,onEdgePointerUp:k,onScroll:ee,syncScrollLeft:N}}var 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:`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 q=(0,e.markRaw)({name:`tabler-pointer`,render:_t}),vt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function yt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,vt,[...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 J=(0,e.markRaw)({name:`tabler-chart-line`,render:yt}),bt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,bt,[...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 St=(0,e.markRaw)({name:`tabler-arrow-up-right`,render:xt}),Ct={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function wt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Ct,[...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 Tt=(0,e.markRaw)({name:`tabler-arrow-right`,render:wt}),Et={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Et,[...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 Ot=(0,e.markRaw)({name:`tabler-minus`,render:Dt}),kt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function At(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 12v.01M7 12h10m4 0v.01`},null,-1)]])}var jt=(0,e.markRaw)({name:`tabler-separator`,render:At}),Mt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Nt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Mt,[...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 Y=(0,e.markRaw)({name:`tabler-crosshair`,render:Nt}),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)(`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 It=(0,e.markRaw)({name:`tabler-info-circle`,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:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m-3-3v6m11 8l-6-6`},null,-1)]])}var zt=(0,e.markRaw)({name:`tabler-zoom-in`,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)(`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 Ht=(0,e.markRaw)({name:`tabler-zoom-out`,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:`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 Gt=(0,e.markRaw)({name:`tabler-maximize`,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:`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 Jt=(0,e.markRaw)({name:`tabler-minimize`,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)(`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 Zt=(0,e.markRaw)({name:`tabler-settings`,render:Xt}),X={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Qt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,X,[...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 $t=(0,e.markRaw)({name:`tabler-shape`,render:Qt}),en={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function tn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,en,[...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 nn=(0,e.markRaw)({name:`tabler-chart-dots-3`,render:tn}),rn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function an(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,rn,[...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 on=(0,e.markRaw)({name:`tabler-caret-up-down`,render:an}),sn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,sn,[...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 ln=(0,e.markRaw)({name:`tabler-brackets`,render:cn}),un={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,un,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m7 8l-4 4l4 4m10-8l4 4l-4 4M3 12h18`},null,-1)]])}var fn=(0,e.markRaw)({name:`tabler-arrows-horizontal`,render:dn});function pn(){return Object.create(null)}function mn(){return{ctxMethods:pn(),ctxProps:pn(),canvasProps:pn(),ctxMethodSources:Object.create(null)}}function hn(e,t,n){let r=e[t]??={count:0,totalTime:0};r.count+=1,r.totalTime+=n}function gn(e,t,n,r){hn(e.ctxMethodSources[t]??=pn(),n,r)}function _n(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 vn=!1,yn=new Map,bn=new Map;function xn(e){vn=e,e?typeof window<`u`&&!window.__KMAP_CANVAS_PROFILER_INSTALLED__&&Cn():wn()}function Sn(){if(!vn)return`disabled`;let e=Error().stack;if(!e)return`unknown`;let t=e.split(`
|
|
3
|
-
`).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(yn.has(i))return;let a=Reflect.get(e,t);typeof a==`function`&&(yn.set(i,a),Reflect.set(e,t,function(...e){if(!vn)return a.apply(this,e);let i=r?.captureSource?Sn():null,o=performance.now(),s=a.apply(this,e),c=performance.now()-o;return hn(n.ctxMethods,t,c),i&&gn(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}`;bn.has(i)||(bn.set(i,r),Object.defineProperty(e,t,{configurable:!0,enumerable:r.enumerable??!1,get:r.get,set(e){if(!vn){r.set.call(this,e);return}let i=performance.now();r.set.call(this,e),hn(n,t,performance.now()-i)}}))}function Cn(){if(typeof window>`u`||window.__KMAP_CANVAS_PROFILER_INSTALLED__)return;let e=CanvasRenderingContext2D?.prototype,t=HTMLCanvasElement?.prototype;if(!e||!t)return;let n=mn();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(_n(e.ctxMethods)),console.log(`ctx props`),console.table(_n(e.ctxProps)),console.log(`canvas props`),console.table(_n(e.canvasProps));for(let t of[`fillText`,`measureText`]){let n=e.ctxMethodSources[t];n&&(console.log(`${t} sources`),console.table(_n(n).slice(0,20)))}console.groupEnd()}},window.resetCanvasReport=()=>{window.__KMAP_CANVAS_PROFILER_METRICS__=mn()},console.info(`[kmap] Canvas profiler enabled. Use window.showCanvasReport() and window.resetCanvasReport().`)}function wn(){if(typeof window>`u`||!window.__KMAP_CANVAS_PROFILER_INSTALLED__)return;let e=CanvasRenderingContext2D?.prototype,t=HTMLCanvasElement?.prototype;yn.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)}),yn.clear(),bn.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)}),bn.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 Tn={class:`settings-body`},En={class:`settings-label`},Dn=[`onUpdate:modelValue`],On={class:`settings-label`},kn=[`onUpdate:modelValue`],An={class:`settings-label`},jn=[`onUpdate:modelValue`],Mn={class:`settings-header`},Nn={class:`header-right`},Pn={class:`settings-body`},Fn=p((0,e.defineComponent)({__name:`ChartSettingsDialog`,props:{show:{type:Boolean}},emits:[`close`,`confirm`],setup(n,{emit:r}){let i=n,o=r,s=v(),c=(0,e.computed)(()=>a.DEFAULT_SETTINGS.filter(e=>e.group===`main`)),l=(0,e.computed)(()=>a.DEFAULT_SETTINGS.filter(e=>e.group===`experimental`)),u=(0,e.computed)(()=>a.DEFAULT_SETTINGS.filter(e=>e.group===`style`)),d=(0,e.ref)(!1);function f(){try{let e=localStorage.getItem(a.SETTINGS_STORAGE_KEY);if(e){let n=JSON.parse(e),r={};return a.DEFAULT_SETTINGS.forEach(e=>{r[e.key]=n[e.key]??e.default}),r.colorPresetSettings=(0,t.normalizeColorPresetSettings)(n.colorPresetSettings),r}}catch{}let e={};return a.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e.colorPresetSettings={},e}let p=(0,e.ref)(f());(0,e.watch)(()=>i.show,e=>{e&&(p.value=f())});function h(){o(`close`)}function g(){let e={};a.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e.colorPresetSettings={},p.value=e}function _(){o(`confirm`,{...p.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:h},[(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:h},[...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`,Tn,[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`,En,[(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=>p.value[t.key]=e},null,8,Dn)),[[e.vModelCheckbox,p.value[t.key]]]):t.type===`select`&&t.options?((0,e.openBlock)(),(0,e.createBlock)(E,{key:1,"model-value":String(p.value[t.key]),options:t.options,size:`sm`,"min-width":`100px`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,[`model-value`,`options`,`onUpdate:modelValue`])):(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.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(u.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.key,class:`settings-item`},[(0,e.createElementVNode)(`label`,On,[(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=>p.value[t.key]=e},null,8,kn)),[[e.vModelCheckbox,p.value[t.key]]]):t.type===`select`&&t.options?((0,e.openBlock)(),(0,e.createBlock)(E,{key:1,"model-value":String(p.value[t.key]),options:t.options,size:`sm`,"min-width":`100px`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,[`model-value`,`options`,`onUpdate:modelValue`])):(0,e.createCommentVNode)(``,!0)])]))),128)),(0,e.createElementVNode)(`div`,{class:`settings-item nav-item`,onClick:r[0]||=e=>d.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`,An,[(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=>p.value[t.key]=e},null,8,jn)),[[e.vModelCheckbox,p.value[t.key]]]):t.type===`select`&&t.options?((0,e.openBlock)(),(0,e.createBlock)(E,{key:1,"model-value":String(p.value[t.key]),options:t.options,size:`sm`,"min-width":`100px`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,[`model-value`,`options`,`onUpdate:modelValue`])):(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:g},[...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:h},`取消`),(0,e.createElementVNode)(`button`,{class:`settings-btn confirm`,onClick:_},[...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)(()=>[d.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`settings-overlay nested-overlay`,onClick:r[5]||=e=>d.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`,Mn,[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`,Nn,[(0,e.createElementVNode)(`button`,{class:`settings-close`,onClick:r[2]||=e=>d.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`,Pn,[(0,e.createVNode)(m,{"color-preset-settings":p.value.colorPresetSettings,"onUpdate:colorPresetSettings":r[3]||=e=>p.value={...p.value,colorPresetSettings:e}},null,8,[`color-preset-settings`])])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))}}),[[`__scopeId`,`data-v-e04604ac`]]),In={class:`left-toolbar`,"aria-label":`图表工具栏`},Ln={class:`left-toolbar__group`},Rn=[`title`,`aria-label`,`onClick`],zn=[`onClick`],Bn=[`title`,`aria-label`,`onClick`],Vn={class:`left-toolbar__group`},Hn={class:`left-toolbar__group`},Un=[`title`,`aria-label`],Wn={class:`left-toolbar__group`},Gn=p((0,e.defineComponent)({__name:`LeftToolbar`,props:{isFullscreen:{type:Boolean}},emits:[`selectTool`,`toggleFullscreen`,`zoomIn`,`zoomOut`,`settingsChange`],setup(t,{expose:n,emit:r}){let i=[{id:`cursor`,title:`光标`,icon:q},{id:`lines`,title:`线条`,icon:J,children:[{id:`trend-line`,title:`线段`,icon:J},{id:`ray`,title:`射线`,icon:St},{id:`h-line`,title:`水平线`,icon:Ot},{id:`h-ray`,title:`水平射线`,icon:Tt},{id:`v-line`,title:`垂直线`,icon:jt},{id:`crosshair-line`,title:`十字线`,icon:Y},{id:`info-line`,title:`信息线`,icon:It}]},{id:`channels`,title:`通道`,icon:$t,children:[{id:`parallel-channel`,title:`平行通道`,icon:$t},{id:`regression-channel`,title:`回归趋势`,icon:nn},{id:`flat-line`,title:`平滑顶底`,icon:on},{id:`disjoint-channel`,title:`不相交通道`,icon:ln}]},{id:`range-select`,title:`导出区间数据`,icon:fn}],o=r,s=(0,e.ref)(`cursor`),c=(0,e.ref)(null),l=(0,e.ref)(!1);function u(){try{let e=localStorage.getItem(a.SETTINGS_STORAGE_KEY);if(e){let t=JSON.parse(e),n={...t};return a.DEFAULT_SETTINGS.forEach(e=>{n[e.key]=t[e.key]??e.default}),n}}catch{}let e={};return a.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e}function d(e){try{localStorage.setItem(a.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),xn(!!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}),xn(!!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`,In,[(0,e.createElementVNode)(`div`,Ln,[((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(i,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,zn)):(0,e.createCommentVNode)(``,!0)],42,Rn),(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,Bn))),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`,Vn,[(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)(zt),{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)(Ht),{class:`tool-icon`,"aria-hidden":`true`})],32)]),r[23]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,Hn,[(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)(Jt),{key:0,class:`tool-icon`,"aria-hidden":`true`})):((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(Gt),{key:1,class:`tool-icon`,"aria-hidden":`true`}))],40,Un)]),r[24]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,Wn,[(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)(Zt),{class:`tool-icon`,"aria-hidden":`true`})],32)])]),(0,e.createVNode)(Fn,{show:l.value,onClose:r[21]||=e=>l.value=!1,onConfirm:y},null,8,[`show`])],64))}}),[[`__scopeId`,`data-v-e4748a67`]]),Kn=(0,e.defineComponent)({__name:`KLineLevelDropdown`,props:{modelValue:{}},emits:[`update:modelValue`],setup(t,{emit:n}){let r=[{label:`1day`,value:`daily`},{label:`1min`,value:`1min`},{label:`5min`,value:`5min`},{label:`15min`,value:`15min`},{label:`30min`,value:`30min`},{label:`1小时`,value:`60min`},{label:`1周`,value:`weekly`},{label:`1月`,value:`monthly`},{label:`3月`,value:`quarterly`},{label:`12月`,value:`yearly`}],i=n;return(n,a)=>((0,e.openBlock)(),(0,e.createBlock)(E,{"model-value":t.modelValue,options:r,label:`级别`,title:`K线级别`,size:`md`,"onUpdate:modelValue":a[0]||=e=>i(`update:modelValue`,e)},null,8,[`model-value`]))}}),qn=(0,e.defineComponent)({__name:`KLineAdjustmentDropdown`,props:{modelValue:{}},emits:[`update:modelValue`],setup(t,{emit:n}){let r=[{label:`前复权`,value:`qfq`},{label:`后复权`,value:`hfq`},{label:`仅拆股`,value:`splits`},{label:`不复权`,value:`none`}],i=n;return(n,a)=>((0,e.openBlock)(),(0,e.createBlock)(E,{"model-value":t.modelValue,options:r,label:`复权`,title:`复权方式`,size:`md`,"onUpdate:modelValue":a[0]||=e=>i(`update:modelValue`,e)},null,8,[`model-value`]))}}),Jn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Yn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Jn,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 9v4m-1.637-9.409L2.257 17.125a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636-2.87L13.637 3.59a1.914 1.914 0 0 0-3.274 0M12 16h.01`},null,-1)]])}var Xn=(0,e.markRaw)({name:`tabler-alert-triangle`,render:Yn}),Zn=[`title`,`aria-expanded`],Qn={class:`symbol-chip__code`},$n={key:0,class:`symbol-chip__spinner`,"aria-hidden":`true`},er={class:`symbol-search`},tr={class:`symbol-list`,role:`listbox`,"aria-label":`商品列表`},nr={key:0,class:`symbol-list__empty`},rr={width:`32`,height:`32`,viewBox:`0 0 32 32`,fill:`none`,style:{"margin-bottom":`8px`,opacity:`0.35`}},ir=[`aria-selected`,`onClick`],ar={class:`symbol-list__left`},or={class:`symbol-list__code`},sr={class:`symbol-list__desc`},cr={class:`symbol-list__exchange`},lr=p((0,e.defineComponent)({__name:`SymbolSelector`,props:{symbol:{},symbols:{},loading:{type:Boolean},error:{type:Boolean}},emits:[`change`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)(!1),o=(0,e.ref)(``),s=(0,e.ref)(null),c=(0,e.ref)(null),l=(0,e.ref)(null),u=v(),{popupStyle:d,startPositionSync:f,stopPositionSync:p}=h(c,l,8),m=(0,e.computed)(()=>r.symbols.find(e=>e.code===r.symbol)),g=(0,e.computed)(()=>{let e=m.value;return e?`${e.code} - ${e.description}`:r.symbol}),_=(0,e.computed)(()=>{let e=o.value.trim().toLowerCase();return e?r.symbols.filter(t=>t.code.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.exchange.toLowerCase().includes(e)):r.symbols});function y(){a.value=!a.value,a.value&&(0,e.nextTick)(()=>s.value?.focus())}(0,e.watch)(a,e=>{e?f():p()});function b(){o.value=``,s.value?.focus()}function x(){}function S(e){i(`change`,e),a.value=!1,o.value=``}function C(e){let t=c.value,n=l.value;t&&!t.contains(e.target)&&!n?.contains(e.target)&&(a.value=!1)}return(0,e.onMounted)(()=>document.addEventListener(`mousedown`,C)),(0,e.onBeforeUnmount)(()=>document.removeEventListener(`mousedown`,C)),(0,e.watch)(()=>r.symbol,()=>{a.value=!1,o.value=``}),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`chipWrapRef`,ref:c,class:`symbol-chip-wrap`},[(0,e.createElementVNode)(`button`,{type:`button`,class:(0,e.normalizeClass)([`symbol-chip`,{"is-open":a.value}]),title:g.value,"aria-expanded":a.value,"aria-haspopup":`dialog`,onClick:y},[(0,e.createElementVNode)(`span`,Qn,(0,e.toDisplayString)(g.value),1),t.loading?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,$n)):t.error?((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(Xn),{key:1,class:`symbol-chip__warn`,"aria-hidden":`true`})):(0,e.createCommentVNode)(``,!0)],10,Zn),((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(u)},[(0,e.createVNode)(e.Transition,{name:`symbol-popover`},{default:(0,e.withCtx)(()=>[a.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref_key:`popupRef`,ref:l,class:`symbol-popover`,style:(0,e.normalizeStyle)((0,e.unref)(d)),role:`dialog`,"aria-label":`切换合约`},[(0,e.createElementVNode)(`div`,er,[r[2]||=(0,e.createElementVNode)(`span`,{class:`symbol-search__icon`,"aria-hidden":`true`},[(0,e.createElementVNode)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 16 16`,fill:`none`},[(0,e.createElementVNode)(`circle`,{cx:`6.5`,cy:`6.5`,r:`5`,stroke:`currentColor`,"stroke-width":`1.6`}),(0,e.createElementVNode)(`line`,{x1:`10.5`,y1:`10.5`,x2:`14.5`,y2:`14.5`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`})])],-1),(0,e.withDirectives)((0,e.createElementVNode)(`input`,{ref_key:`searchInputRef`,ref:s,"onUpdate:modelValue":r[0]||=e=>o.value=e,class:`symbol-search__input`,type:`text`,placeholder:`搜索代码或名称…`,autocomplete:`off`,spellcheck:`false`,"aria-label":`搜索商品`,onInput:x},null,544),[[e.vModelText,o.value]]),o.value?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,type:`button`,class:`symbol-search__clear`,"aria-label":`清空搜索`,onClick:b},[...r[1]||=[(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)]])):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,tr,[_.value.length===0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,nr,[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,rr,[...r[3]||=[(0,e.createElementVNode)(`circle`,{cx:`13`,cy:`13`,r:`10`,stroke:`currentColor`,"stroke-width":`2`},null,-1),(0,e.createElementVNode)(`line`,{x1:`21`,y1:`21`,x2:`29`,y2:`29`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`},null,-1)]])),r[4]||=(0,e.createElementVNode)(`span`,null,`未找到相关商品`,-1)])):(0,e.createCommentVNode)(``,!0),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(_.value,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:n.code,type:`button`,class:(0,e.normalizeClass)([`symbol-list__item`,{"is-active":n.code===t.symbol}]),role:`option`,"aria-selected":n.code===t.symbol,onClick:e=>S(n)},[(0,e.createElementVNode)(`span`,ar,[(0,e.createElementVNode)(`span`,or,(0,e.toDisplayString)(n.code),1),(0,e.createElementVNode)(`span`,sr,(0,e.toDisplayString)(n.description),1)]),(0,e.createElementVNode)(`span`,cr,(0,e.toDisplayString)(n.exchange),1)],10,ir))),128))])],4)):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))],512))}}),[[`__scopeId`,`data-v-637dd0f1`]]),ur=[`aria-expanded`],dr={key:0,class:`compare-chip__spinner`},fr={key:1,class:`compare-chip__badge`},pr={class:`compare-search`},mr={key:0,class:`compare-selected`},hr={class:`compare-selected__list`},gr={class:`compare-selected__code`},_r={class:`compare-selected__desc`},vr=[`aria-label`,`onClick`],yr={class:`compare-list`,role:`listbox`,"aria-label":`商品列表`},br={key:0,class:`compare-list__empty`},xr={width:`32`,height:`32`,viewBox:`0 0 32 32`,fill:`none`,style:{"margin-bottom":`8px`,opacity:`0.35`}},Sr=[`aria-selected`,`onClick`],Cr={class:`compare-list__left`},wr={class:`compare-list__code`},Tr={class:`compare-list__desc`},Er={class:`compare-list__right`},Dr={class:`compare-list__exchange`},Or={key:0,class:`compare-list__check`,"aria-hidden":`true`},kr=p((0,e.defineComponent)({__name:`CompareSymbolSelector`,props:{symbols:{},selected:{default:()=>[]},comparisonColors:{},comparisonLoading:{type:Boolean}},emits:[`add`,`remove`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)(!1),o=(0,e.ref)(``),s=(0,e.ref)(null),c=(0,e.ref)(null),l=(0,e.ref)(null),u=v(),{popupStyle:d,startPositionSync:f,stopPositionSync:p}=h(c,l,8),m=(0,e.computed)(()=>new Set(r.selected??[])),g=(0,e.computed)(()=>{let e=m.value;return r.symbols.filter(t=>e.has(t.code))}),_=(0,e.computed)(()=>{let e=o.value.trim().toLowerCase();return e?r.symbols.filter(t=>t.code.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.exchange.toLowerCase().includes(e)):r.symbols});function y(e){return m.value.has(e)}function b(e){y(e.code)?i(`remove`,e.code):i(`add`,e)}function x(e){i(`remove`,e)}function S(){a.value=!a.value,a.value&&(0,e.nextTick)(()=>s.value?.focus())}(0,e.watch)(a,e=>{e?f():p()});function C(){o.value=``,s.value?.focus()}function w(e){let t=c.value,n=l.value;t&&!t.contains(e.target)&&!n?.contains(e.target)&&(a.value=!1,o.value=``)}return(0,e.onMounted)(()=>document.addEventListener(`mousedown`,w)),(0,e.onBeforeUnmount)(()=>document.removeEventListener(`mousedown`,w)),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`rootRef`,ref:c,class:`compare-chip-wrap`},[(0,e.createElementVNode)(`button`,{type:`button`,class:(0,e.normalizeClass)([`compare-chip`,{"is-open":a.value}]),title:`比较商品`,"aria-expanded":a.value,"aria-haspopup":`dialog`,onClick:S},[r[1]||=(0,e.createElementVNode)(`span`,{class:`compare-chip__icon`,"aria-hidden":`true`},`+`,-1),r[2]||=(0,e.createElementVNode)(`span`,{class:`compare-chip__text`},`比较商品`,-1),t.comparisonLoading?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,dr)):(0,e.createCommentVNode)(``,!0),t.selected.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,fr,(0,e.toDisplayString)(t.selected.length),1)):(0,e.createCommentVNode)(``,!0)],10,ur),((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(u)},[(0,e.createVNode)(e.Transition,{name:`symbol-popover`},{default:(0,e.withCtx)(()=>[a.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref_key:`popupRef`,ref:l,class:`compare-popover`,style:(0,e.normalizeStyle)((0,e.unref)(d)),role:`dialog`,"aria-label":`比较商品`},[(0,e.createElementVNode)(`div`,pr,[r[4]||=(0,e.createElementVNode)(`span`,{class:`compare-search__icon`,"aria-hidden":`true`},[(0,e.createElementVNode)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 16 16`,fill:`none`},[(0,e.createElementVNode)(`circle`,{cx:`6.5`,cy:`6.5`,r:`5`,stroke:`currentColor`,"stroke-width":`1.6`}),(0,e.createElementVNode)(`line`,{x1:`10.5`,y1:`10.5`,x2:`14.5`,y2:`14.5`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`})])],-1),(0,e.withDirectives)((0,e.createElementVNode)(`input`,{ref_key:`searchInputRef`,ref:s,"onUpdate:modelValue":r[0]||=e=>o.value=e,class:`compare-search__input`,type:`text`,placeholder:`搜索代码或名称…`,autocomplete:`off`,spellcheck:`false`,"aria-label":`搜索比较商品`},null,512),[[e.vModelText,o.value]]),o.value?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,type:`button`,class:`compare-search__clear`,"aria-label":`清空搜索`,onClick:C},[...r[3]||=[(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)]])):(0,e.createCommentVNode)(``,!0)]),t.selected.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,mr,[r[6]||=(0,e.createElementVNode)(`div`,{class:`compare-selected__header`},[(0,e.createElementVNode)(`span`,{class:`compare-selected__title`},`已添加商品`)],-1),(0,e.createElementVNode)(`div`,hr,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(g.value,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n.code,class:`compare-selected__item`},[(0,e.createElementVNode)(`span`,{class:`compare-selected__color`,style:(0,e.normalizeStyle)({background:t.comparisonColors?.get(n.code)??`#888`})},null,4),(0,e.createElementVNode)(`span`,gr,(0,e.toDisplayString)(n.code),1),(0,e.createElementVNode)(`span`,_r,(0,e.toDisplayString)(n.description),1),(0,e.createElementVNode)(`button`,{type:`button`,class:`compare-selected__remove`,"aria-label":`移除 `+n.code,onClick:e=>x(n.code)},[...r[5]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[(0,e.createElementVNode)(`path`,{d:`M18 6L6 18`}),(0,e.createElementVNode)(`path`,{d:`M6 6l12 12`})],-1)]],8,vr)]))),128))])])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,yr,[_.value.length===0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,br,[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,xr,[...r[7]||=[(0,e.createElementVNode)(`circle`,{cx:`13`,cy:`13`,r:`10`,stroke:`currentColor`,"stroke-width":`2`},null,-1),(0,e.createElementVNode)(`line`,{x1:`21`,y1:`21`,x2:`29`,y2:`29`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`},null,-1)]])),r[8]||=(0,e.createElementVNode)(`span`,null,`未找到相关商品`,-1)])):(0,e.createCommentVNode)(``,!0),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(_.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.code,type:`button`,class:(0,e.normalizeClass)([`compare-list__item`,{"is-selected":y(t.code)}]),role:`option`,"aria-selected":y(t.code),onClick:e=>b(t)},[(0,e.createElementVNode)(`span`,Cr,[(0,e.createElementVNode)(`span`,wr,(0,e.toDisplayString)(t.code),1),(0,e.createElementVNode)(`span`,Tr,(0,e.toDisplayString)(t.description),1)]),(0,e.createElementVNode)(`span`,Er,[(0,e.createElementVNode)(`span`,Dr,(0,e.toDisplayString)(t.exchange),1),y(t.code)?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Or,[...r[9]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[(0,e.createElementVNode)(`polyline`,{points:`20 6 9 17 4 12`})],-1)]])):(0,e.createCommentVNode)(``,!0)])],10,Sr))),128))])],4)):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))],512))}}),[[`__scopeId`,`data-v-b6189a87`]]),Ar=p((0,e.defineComponent)({__name:`TopToolbar`,props:{symbol:{},kLineLevel:{},kLineAdjust:{},symbols:{},symbolLoading:{type:Boolean},symbolError:{type:Boolean},overlaySymbols:{},comparisonColors:{},comparisonLoading:{type:Boolean}},emits:[`addOverlaySymbol`,`removeOverlaySymbol`,`kLineLevelChange`,`kLineAdjustChange`,`toggleIndicator`,`symbolChange`],setup(t,{emit:n}){let r=(0,e.ref)(null),i=!1,a=0,o=0;function s(e){let t=r.value;t&&(i=!0,a=e.pageX-t.getBoundingClientRect().left,o=t.scrollLeft,t.style.cursor=`grabbing`,t.style.userSelect=`none`)}function c(e){if(!i)return;let t=r.value;if(!t)return;e.preventDefault();let n=e.pageX-t.getBoundingClientRect().left-a;t.scrollLeft=o-n}function l(){if(!i)return;i=!1;let e=r.value;e&&(e.style.cursor=``,e.style.userSelect=``)}let u=t,d=n,f=[{code:`XAUUSD`,description:`现货黄金`,exchange:`OANDA`,source:`tradingview`},{code:`BTCUSDT`,description:`Bitcoin / Tether`,exchange:`BINANCE`,source:`tradingview`},{code:`ETHUSDT`,description:`Ethereum / Tether`,exchange:`BINANCE`,source:`tradingview`},{code:`EURUSD`,description:`欧元/美元`,exchange:`OANDA`,source:`tradingview`},{code:`SPX`,description:`标普 500 指数`,exchange:`SP`,source:`tradingview`},{code:`AAPL`,description:`Apple Inc.`,exchange:`NASDAQ`,source:`tradingview`},{code:`TSLA`,description:`Tesla, Inc.`,exchange:`NASDAQ`,source:`tradingview`},{code:`1810`,description:`小米集团`,exchange:`HKEX`,source:`tradingview`},{code:`600519`,description:`贵州茅台`,exchange:`SSE`,source:`gotdx`},{code:`601360`,description:`三六零`,exchange:`SSE`,source:`gotdx`},{code:`000858`,description:`五 粮 液`,exchange:`SZSE`,source:`gotdx`},{code:`000001`,description:`平安银行`,exchange:`SZSE`,source:`gotdx`},{code:`MOCK-100`,description:`Mock 100 条`,exchange:`MOCK`,source:`mock-100`},{code:`MOCK-10000`,description:`Mock 10000 条`,exchange:`MOCK`,source:`mock-10000`}],p=(0,e.computed)(()=>u.symbol?.trim()??``),m=(0,e.computed)(()=>u.symbols&&u.symbols.length?u.symbols:f);function h(e){d(`symbolChange`,e)}return(n,i)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`toolbarRef`,ref:r,class:`top-toolbar`,onMousedown:s,onMousemove:c,onMouseup:l,onMouseleave:l},[p.value?((0,e.openBlock)(),(0,e.createBlock)(lr,{key:0,symbol:p.value,symbols:m.value,loading:t.symbolLoading,error:t.symbolError,onChange:h},null,8,[`symbol`,`symbols`,`loading`,`error`])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(kr,{symbols:m.value,selected:t.overlaySymbols,"comparison-colors":t.comparisonColors,"comparison-loading":t.comparisonLoading,onAdd:i[0]||=e=>d(`addOverlaySymbol`,e),onRemove:i[1]||=e=>d(`removeOverlaySymbol`,e)},null,8,[`symbols`,`selected`,`comparison-colors`,`comparison-loading`]),(0,e.createVNode)(Kn,{"model-value":t.kLineLevel,"onUpdate:modelValue":i[2]||=e=>d(`kLineLevelChange`,e)},null,8,[`model-value`]),(0,e.createVNode)(qn,{"model-value":t.kLineAdjust,"onUpdate:modelValue":i[3]||=e=>d(`kLineAdjustChange`,e)},null,8,[`model-value`]),(0,e.createElementVNode)(`button`,{type:`button`,class:`indicator-button`,title:`指标`,"aria-label":`指标`,onClick:i[4]||=e=>d(`toggleIndicator`)},[...i[5]||=[(0,e.createElementVNode)(`span`,{class:`indicator-button__icon`,"aria-hidden":`true`},`fx`,-1),(0,e.createElementVNode)(`span`,{class:`indicator-button__text`},`指标`,-1)]])],544))}}),[[`__scopeId`,`data-v-8ecedbff`]]),jr={class:`batch-header`},Mr={class:`batch-body`},Nr={class:`batch-footer`},Pr=p((0,e.defineComponent)({__name:`BatchStockDialog`,props:{show:{type:Boolean}},emits:[`close`,`apply`],setup(t,{emit:n}){let r=n,i=v(),a=(0,e.ref)([]),o=(0,e.computed)({get:()=>a.value.join(`
|
|
4
|
-
`),set:e=>{
|
|
5
|
-
`).map(e=>e.trim()).filter(Boolean)}});function
|
|
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/indicators"),a=require("@363045841yyt/klinechart-core/config");var o={class:`color-preset-container`},s={class:`theme-tabs`,role:`tablist`,"aria-label":`颜色主题`},c=[`onClick`],l={class:`color-group-label`},u={class:`color-grid`},d={class:`color-item-text`},f=[`value`,`onInput`],p=(0,e.defineComponent)({__name:`ColorPresetPanel`,props:{colorPresetSettings:{}},emits:[`update:colorPresetSettings`],setup(n,{expose:r,emit:i}){let a=n,p=i,m=[{value:`light`,label:`浅色`},{value:`dark`,label:`深色`}],h={canvas:`画布`,candle:`K线 / 成交量`,axis:`坐标轴`,interaction:`交互 / 标记`},g=(0,e.computed)(()=>Object.keys(h).map(e=>({group:e,label:h[e],items:t.COLOR_PRESET_ITEMS.filter(t=>t.group===e)})).filter(e=>e.items.length>0)),_=(0,e.ref)(`light`);function v(e,n){return(e===`dark`?t.darkTheme:t.lightTheme).colors[n]}function y(e){return(0,t.normalizeColorPresetSettings)(a.colorPresetSettings)[_.value]?.[e]??v(_.value,e)}function b(e,n){let r=(0,t.normalizeColorPresetSettings)(a.colorPresetSettings);p(`update:colorPresetSettings`,{...r,[_.value]:{...r[_.value],[e]:n}})}function x(){let e={...(0,t.normalizeColorPresetSettings)(a.colorPresetSettings)};delete e[_.value],p(`update:colorPresetSettings`,e)}return r({resetCurrentThemeColors:x}),(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,o,[(0,e.createElementVNode)(`div`,s,[((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(m,t=>(0,e.createElementVNode)(`button`,{key:t.value,type:`button`,class:(0,e.normalizeClass)([`theme-tab`,{active:_.value===t.value}]),onClick:e=>_.value=t.value},(0,e.toDisplayString)(t.label),11,c)),64))]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(g.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:t.group},[(0,e.createElementVNode)(`div`,l,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,u,[((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`,d,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`input`,{type:`color`,class:`color-input`,value:y(t.key),onInput:e=>b(t.key,e.target.value)},null,40,f)]))),128))])],64))),128))]))}}),m=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},h=m(p,[[`__scopeId`,`data-v-14ed826d`]]);function g(t,n,r=4){let i=(0,e.ref)({});function a(){let e=t.value;if(!e)return;let a=e.getBoundingClientRect(),o=n.value,s=a.left;if(o){let e=o.offsetWidth,t=window.innerWidth;s+e>t-8&&(s=Math.max(8,t-e-8))}i.value={position:`fixed`,top:`${a.bottom+r}px`,left:`${s}px`}}function o(){a(),(0,e.nextTick)(()=>a()),document.addEventListener(`scroll`,a,{capture:!0,passive:!0}),window.addEventListener(`resize`,a,{passive:!0})}function s(){document.removeEventListener(`scroll`,a,{capture:!0}),window.removeEventListener(`resize`,a)}return{popupStyle:i,updatePosition:a,startPositionSync:o,stopPositionSync:s}}var _=Symbol(`fullscreen-teleport-target`);function v(t){(0,e.provide)(_,t)}function y(){let t=(0,e.inject)(_,null);return(0,e.computed)(()=>t?.value??`body`)}var b=[`title`,`aria-expanded`,`onKeydown`],x={key:0,class:`dropdown__label`},S={class:`dropdown__value`},C=[`aria-selected`,`onClick`],w=0,T=null,ee=0,E=m((0,e.defineComponent)({__name:`Dropdown`,props:{modelValue:{},options:{},size:{default:`md`},minWidth:{},label:{},title:{default:``}},emits:[`update:modelValue`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)(null),o=(0,e.ref)(null),s=(0,e.ref)(null),c=(0,e.ref)(!1),l=(0,e.ref)(0),u=++ee,d=y(),{popupStyle:f,startPositionSync:p,stopPositionSync:m}=g(o,s,4),h=(0,e.computed)(()=>r.minWidth?{minWidth:r.minWidth}:{}),_=(0,e.computed)(()=>{if(!c.value)return;let e=l.value||(r.minWidth?parseInt(r.minWidth):0);return{width:e?`${e}px`:void 0,zIndex:1010,...f.value}}),v=(0,e.computed)(()=>{let e=r.modelValue?.trim();return e&&r.options.some(t=>t.value===e)?e:r.options[0]?.value??``}),E=(0,e.computed)(()=>r.options.find(e=>e.value===v.value)??r.options[0]);function D(){w!==u&&T&&T(),!c.value&&(w=u,T=O,l.value=o.value?.offsetWidth??0,c.value=!0,p(),document.addEventListener(`pointerdown`,j))}function O(){c.value&&(c.value=!1,w===u&&(w=0,T=null),m(),document.removeEventListener(`pointerdown`,j))}function k(){c.value?O():D()}function A(e){i(`update:modelValue`,e),O()}function j(e){let t=a.value,n=s.value;t&&!t.contains(e.target)&&!n?.contains(e.target)&&O()}return(0,e.onBeforeUnmount)(O),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`rootRef`,ref:a,class:(0,e.normalizeClass)([`dropdown`,[`dropdown--${t.size}`,{"is-open":c.value}]])},[(0,e.createElementVNode)(`button`,{ref_key:`triggerRef`,ref:o,type:`button`,class:`dropdown__trigger`,title:t.title,style:(0,e.normalizeStyle)(h.value),"aria-haspopup":`listbox`,"aria-expanded":c.value,onClick:k,onKeydown:[(0,e.withKeys)((0,e.withModifiers)(O,[`stop`]),[`escape`]),(0,e.withKeys)((0,e.withModifiers)(D,[`prevent`]),[`down`]),(0,e.withKeys)((0,e.withModifiers)(k,[`prevent`]),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(k,[`prevent`]),[`space`])]},[t.label?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,x,(0,e.toDisplayString)(t.label),1)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,S,(0,e.toDisplayString)(E.value.label),1),r[0]||=(0,e.createElementVNode)(`span`,{class:`dropdown__chevron`,"aria-hidden":`true`},null,-1)],44,b),((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(d)},[c.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref_key:`menuRef`,ref:s,class:`dropdown__menu`,style:(0,e.normalizeStyle)(_.value),role:`listbox`,tabindex:`-1`},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.options,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.value,type:`button`,class:(0,e.normalizeClass)([`dropdown__option`,{"is-selected":t.value===v.value}]),role:`option`,"aria-selected":t.value===v.value,onClick:e=>A(t.value)},(0,e.toDisplayString)(t.label),11,C))),128))],4)):(0,e.createCommentVNode)(``,!0)],8,[`to`]))],2))}}),[[`__scopeId`,`data-v-bab778b8`]]),D={};function O(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:`canvas-toolbar`,onPointerdown:n[0]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:n[1]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:n[2]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.renderSlot)(t.$slots,`default`,{},void 0,!0)],32)}var k=m(D,[[`render`,O],[`__scopeId`,`data-v-4f016899`]]),A={class:`color-item`,title:`颜色`},j=[`value`],te=m((0,e.defineComponent)({__name:`DrawingStyleToolbar`,props:{drawing:{}},emits:[`updateStyle`,`delete`],setup(t,{emit:n}){let r=[{label:`1px`,value:`1`},{label:`2px`,value:`2`},{label:`3px`,value:`3`},{label:`4px`,value:`4`}],i=[{label:`实线`,value:`solid`},{label:`虚线`,value:`dashed`},{label:`点线`,value:`dotted`}],a=n;function o(e){e.key===`Delete`&&(e.preventDefault(),a(`delete`))}(0,e.onMounted)(()=>document.addEventListener(`keydown`,o)),(0,e.onUnmounted)(()=>document.removeEventListener(`keydown`,o));function s(e){a(`updateStyle`,{stroke:e})}function c(e){a(`updateStyle`,{strokeWidth:e})}function l(e){a(`updateStyle`,{strokeStyle:e})}return(n,a)=>((0,e.openBlock)(),(0,e.createBlock)(k,null,{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,A,[(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:a[0]||=e=>s(e.target.value)},null,40,j)]),(0,e.createVNode)(E,{"model-value":String(t.drawing.style.strokeWidth??1),options:r,size:`sm`,title:`线宽`,"onUpdate:modelValue":a[1]||=e=>c(Number(e))},null,8,[`model-value`]),(0,e.createVNode)(E,{"model-value":t.drawing.style.strokeStyle??`solid`,options:i,size:`sm`,title:`线型`,"onUpdate:modelValue":a[2]||=e=>l(e)},null,8,[`model-value`]),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn toolbar-btn--delete`,title:`删除`,onClick:a[3]||=e=>n.$emit(`delete`)},[...a[4]||=[(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)]])]),_:1}))}}),[[`__scopeId`,`data-v-619a545d`]]),M={key:0,class:`base-header`},ne={class:`base-header-left`},N={class:`base-title`},re={key:0,class:`base-subtitle`},ie={key:0,class:`base-header-right`},ae={key:1,class:`base-subheader`},P=m((0,e.defineComponent)({__name:`BaseModal`,props:{show:{type:Boolean},title:{default:``},subtitle:{default:``},zIndex:{default:1e3},width:{default:`min(92vw, 400px)`},maxWidth:{default:``},maxHeight:{default:`min(600px, calc(100vh - 48px))`},overlayPadding:{default:`24px`},bodyPadding:{default:`16px 20px`},footerAlign:{default:`flex-end`},closeOnOverlay:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},transitionVariant:{default:`default`}},emits:[`close`],setup(t,{emit:n}){let r=t,i=n,a=y(),o=(0,e.computed)(()=>r.transitionVariant===`compact`?`modal-compact`:`modal`),s=(0,e.computed)(()=>({width:r.width,maxWidth:r.maxWidth||void 0,maxHeight:r.maxHeight}));return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(a)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[t.show?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`base-overlay`,style:(0,e.normalizeStyle)({zIndex:t.zIndex,padding:t.overlayPadding}),onClick:r[2]||=e=>t.closeOnOverlay?i(`close`):void 0},[(0,e.createVNode)(e.Transition,{name:o.value},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:`base-modal`,style:(0,e.normalizeStyle)(s.value),onClick:r[1]||=(0,e.withModifiers)(()=>{},[`stop`])},[n.$slots.header||t.title?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,M,[(0,e.renderSlot)(n.$slots,`header`,{},()=>[(0,e.createElementVNode)(`div`,ne,[(0,e.createElementVNode)(`span`,N,(0,e.toDisplayString)(t.title),1),t.subtitle?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,re,(0,e.toDisplayString)(t.subtitle),1)):(0,e.createCommentVNode)(``,!0)])],!0),t.showClose?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ie,[(0,e.renderSlot)(n.$slots,`header-extra`,{},void 0,!0),(0,e.createElementVNode)(`button`,{class:`base-close-btn`,onClick:r[0]||=e=>i(`close`)},[...r[3]||=[(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.createCommentVNode)(``,!0)])):(0,e.createCommentVNode)(``,!0),n.$slots.subheader?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ae,[(0,e.renderSlot)(n.$slots,`subheader`,{},void 0,!0)])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,{class:`base-body`,style:(0,e.normalizeStyle)({padding:t.bodyPadding})},[(0,e.renderSlot)(n.$slots,`default`,{},void 0,!0)],4),n.$slots.footer?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:2,class:`base-footer`,style:(0,e.normalizeStyle)({justifyContent:t.footerAlign})},[(0,e.renderSlot)(n.$slots,`footer`,{},void 0,!0)],4)):(0,e.createCommentVNode)(``,!0)],4)]),_:3},8,[`name`])],4)):(0,e.createCommentVNode)(``,!0)]),_:3})],8,[`to`]))}}),[[`__scopeId`,`data-v-38747c12`]]),F={key:0,class:`indicator-description`},oe={class:`params-body`},I={class:`param-header`},se={class:`param-label`},ce={class:`param-label-text`},le={key:0,class:`param-range`},L={class:`input-wrapper`},R=[`disabled`,`onClick`],z=[`value`,`min`,`max`,`step`,`onInput`],B=[`disabled`,`onClick`],ue={key:0,class:`param-description`},de={class:`footer-right`},fe=m((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);(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 s(e,t){let n=t.target,r=parseFloat(n.value);isNaN(r)||(a.value[e]=r)}function c(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 l(){let e={};r.params.forEach(t=>{e[t.key]=t.default??r.values[t.key]??0}),a.value=e}function u(){i(`confirm`,{...a.value})}return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)(P,{show:t.visible,title:t.indicatorName,subtitle:`参数设置`,width:`90vw`,"max-width":`420px`,"transition-variant":`compact`,"overlay-padding":`0`,"footer-align":`space-between`,onClose:r[2]||=e=>n.$emit(`close`)},{"header-extra":(0,e.withCtx)(()=>[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`toggle-desc-btn`,{active:o.value}]),onClick:r[0]||=e=>o.value=!o.value,title:`显示/隐藏说明`},[...r[3]||=[(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)]),footer:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`button`,{class:`params-btn reset`,onClick:l},[...r[4]||=[(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`,de,[(0,e.createElementVNode)(`button`,{class:`params-btn cancel`,onClick:r[1]||=e=>n.$emit(`close`)},`取消`),(0,e.createElementVNode)(`button`,{class:`params-btn confirm`,onClick:u},[...r[5]||=[(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)]])])]),default:(0,e.withCtx)(()=>[(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[o.value&&t.indicatorDescription?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,F,[(0,e.createElementVNode)(`p`,null,(0,e.toDisplayString)(t.indicatorDescription),1)])):(0,e.createCommentVNode)(``,!0)]),_:1}),(0,e.createElementVNode)(`div`,oe,[((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`,I,[(0,e.createElementVNode)(`label`,se,[(0,e.createElementVNode)(`span`,ce,(0,e.toDisplayString)(t.label),1),t.min!==void 0||t.max!==void 0?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,le,(0,e.toDisplayString)(t.min??`-∞`)+` ~ `+(0,e.toDisplayString)(t.max??`+∞`),1)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,L,[(0,e.createElementVNode)(`button`,{class:`stepper-btn`,disabled:t.min!==void 0&&(a.value[t.key]??0)<=t.min,onClick:e=>c(t,-1)},` − `,8,R),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=>s(t.key,e)},null,40,z)):(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=>c(t,1)},` + `,8,B)])]),(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[o.value&&t.description?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ue,(0,e.toDisplayString)(t.description),1)):(0,e.createCommentVNode)(``,!0)]),_:2},1024)],2))),128))])]),_:1},8,[`show`,`title`]))}}),[[`__scopeId`,`data-v-5689c2c8`]]),pe={class:`indicator-selector`},me={class:`header-title`},he={class:`title-sub`},ge={key:0,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},_e={key:1,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},ve={class:`search-box`},ye=[`value`],be={key:0,class:`indicator-section`},xe={class:`section-header`},Se={class:`section-count`},Ce=[`onClick`],we={class:`card-label`},Te={class:`card-tooltip`},Ee={class:`card-header`},De={class:`card-label`},Oe={class:`card-header-actions`},ke=[`onClick`],Ae={class:`card-name`},je={key:1,class:`no-results`},V={key:2,class:`indicator-section`},Me={class:`section-header`},Ne={class:`section-count`},Pe=[`onClick`],Fe={class:`card-label`},Ie={class:`card-tooltip`},Le={class:`card-header`},Re={class:`card-label`},ze={class:`card-header-actions`},Be=[`onClick`],Ve={class:`card-name`},He={class:`footer-info`},Ue={class:`info-text`},We=m((0,e.defineComponent)({__name:`IndicatorSelector`,props:{activeIndicators:{},indicatorParams:{}},emits:[`toggle`,`updateParams`,`reorderSubIndicators`],setup(t,{expose:r,emit:i}){let a=t,o=i;function s(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 c=(0,n.createIndicatorSelectorController)(),l=$(c.menuOpen),u=$(c.searchQuery),d=$(c.filteredMain),f=$(c.filteredSub),p=(0,e.computed)(()=>d.value.length>0||f.value.length>0),m=$(c.catalog),h=(0,e.computed)(()=>m.value.length);(0,e.onMounted)(async()=>{(0,n.isBuiltinIndicatorsLoaded)()||await(0,n.loadBuiltinIndicators)(),c.catalog.set(s((0,n.allIndicators)()))});let g=(0,e.ref)(!1),_=(0,e.ref)(null),v=(0,e.ref)(!1),y=(0,e.computed)(()=>_.value?(0,n.findIndicator)(_.value):null),b=(0,e.computed)(()=>a.activeIndicators?.length??0);function x(e){return a.activeIndicators?.includes(e)??!1}function S(e){x(e)||(0,n.findIndicator)(e)&&o(`toggle`,e,!0)}function C(e){o(`toggle`,e,!1)}function w(e){_.value=e,g.value=!0}function T(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 i=a.indicatorParams?.[e]||{},o={...r};for(let[e,t]of Object.entries(i))typeof t==`number`&&(o[e]=t);return o}function ee(e){_.value&&o(`updateParams`,_.value,e),g.value=!1}function E(e){e.key===`Escape`&&c.menuOpen.peek()&&c.closeMenu()}return(0,e.onMounted)(()=>{document.addEventListener(`keydown`,E)}),(0,e.onUnmounted)(()=>{document.removeEventListener(`keydown`,E)}),r({openMenu:()=>c.openMenu(),closeMenu:()=>c.closeMenu(),toggleMenu:()=>c.toggleMenu()}),(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,pe,[(0,e.createVNode)(P,{show:(0,e.unref)(l),title:`添加指标`,subtitle:``,width:`90vw`,"max-width":`860px`,"max-height":`85vh`,"transition-variant":`compact`,"footer-align":`space-between`,onClose:n[3]||=t=>(0,e.unref)(c).closeMenu()},{header:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,me,[n[5]||=(0,e.createElementVNode)(`span`,{class:`title-text`},`添加指标`,-1),(0,e.createElementVNode)(`span`,he,(0,e.toDisplayString)(h.value)+` 个可用指标`,1)])]),"header-extra":(0,e.withCtx)(()=>[(0,e.createElementVNode)(`button`,{class:(0,e.normalizeClass)([`view-toggle-btn`,{active:v.value}]),onClick:n[0]||=e=>v.value=!v.value,title:`简洁模式`},[v.value?((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,_e,[...n[7]||=[(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`,ge,[...n[6]||=[(0,e.createElementVNode)(`path`,{d:`M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z`},null,-1)]]))],2)]),subheader:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,ve,[n[8]||=(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)(u),onInput:n[1]||=t=>(0,e.unref)(c).setSearchQuery(t.target.value),type:`text`,class:`search-input`,placeholder:`搜索指标名称...`},null,40,ye)])]),footer:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,He,[(0,e.createElementVNode)(`span`,Ue,`已激活 `+(0,e.toDisplayString)(b.value)+` 个指标`,1)]),(0,e.createElementVNode)(`button`,{class:`btn btn-confirm`,onClick:n[2]||=t=>(0,e.unref)(c).closeMenu()},`确认`)]),default:(0,e.withCtx)(()=>[(0,e.unref)(d).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,be,[(0,e.createElementVNode)(`div`,xe,[n[9]||=(0,e.createElementVNode)(`span`,{class:`section-title`},`主图指标`,-1),(0,e.createElementVNode)(`span`,Se,(0,e.toDisplayString)((0,e.unref)(d).length),1)]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-grid`,{compact:v.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:x(t.id),compact:v.value}]),onClick:e=>x(t.id)?C(t.id):S(t.id)},[v.value?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`span`,we,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`span`,Te,(0,e.toDisplayString)(t.name),1)],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,Ee,[(0,e.createElementVNode)(`span`,De,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,Oe,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`card-settings-btn`,onClick:(0,e.withModifiers)(e=>w(t.id),[`stop`]),title:`编辑参数`},[...n[10]||=[(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,ke)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,Ae,(0,e.toDisplayString)(t.name),1)],64))],10,Ce))),128))],2)])):(0,e.createCommentVNode)(``,!0),!p.value&&(0,e.unref)(u).trim()?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,je,[...n[11]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`40`,height:`40`,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)(f).length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,V,[(0,e.createElementVNode)(`div`,Me,[n[12]||=(0,e.createElementVNode)(`span`,{class:`section-title`},`副图指标`,-1),(0,e.createElementVNode)(`span`,Ne,(0,e.toDisplayString)((0,e.unref)(f).length),1)]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`indicator-grid`,{compact:v.value}])},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(f),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.id,class:(0,e.normalizeClass)([`indicator-card`,{active:x(t.id),compact:v.value}]),onClick:e=>x(t.id)?C(t.id):S(t.id)},[v.value?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`span`,Fe,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`span`,Ie,(0,e.toDisplayString)(t.name),1)],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,Le,[(0,e.createElementVNode)(`span`,Re,(0,e.toDisplayString)(t.label),1),(0,e.createElementVNode)(`div`,ze,[t.params?.length?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`card-settings-btn`,onClick:(0,e.withModifiers)(e=>w(t.id),[`stop`]),title:`编辑参数`},[...n[13]||=[(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,Be)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,Ve,(0,e.toDisplayString)(t.name),1)],64))],10,Pe))),128))],2)])):(0,e.createCommentVNode)(``,!0)]),_:1},8,[`show`]),y.value?((0,e.openBlock)(),(0,e.createBlock)(fe,{key:0,visible:g.value,"indicator-id":y.value.id,"indicator-name":y.value.name,"indicator-description":y.value.description,params:y.value.params||[],values:T(y.value.id),onClose:n[4]||=e=>g.value=!1,onConfirm:ee},null,8,[`visible`,`indicator-id`,`indicator-name`,`indicator-description`,`params`,`values`])):(0,e.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-b418736f`]]),Ge={class:`kline-tooltip__title`},Ke={key:0},qe={class:`kline-tooltip__grid`},Je={class:`row`},Ye={class:`row`},Xe={class:`row`},Ze={class:`row`},Qe={key:0,class:`row`},$e={key:1,class:`row`},et={key:2,class:`row`},tt={key:3,class:`row`},nt={key:4,class:`row`},rt={key:5,class:`row`},H=`#6b7280`,it=m((0,e.defineComponent)({__name:`KLineTooltip`,props:{k:{},index:{},data:{},pos:{},useAnchor:{type:Boolean},anchorPlacement:{},setEl:{},upColor:{default:`#ef4444`},downColor:{default:`#22c55e`},timezone:{default:`Asia/Shanghai`},showTime:{type:Boolean,default:!1}},setup(n){let r=n,i=(0,e.computed)(()=>r.k?(0,t.formatTimestamp)(r.k.timestamp,{timeZone:r.timezone,showTime:r.showTime}):``),a=(0,e.computed)(()=>r.useAnchor===!0),o=(0,e.computed)(()=>r.anchorPlacement===`left-bottom`?`anchor-left-bottom`:`anchor-right-bottom`);function s(e){r.setEl?.(e)}function c(e){return e>=1e8?(e/1e8).toFixed(2)+`亿`:e>=1e4?(e/1e4).toFixed(2)+`万`:e.toFixed(2)}function l(e,t){return`${e>=0?`+`:``}${e.toFixed(2)}${t}`}function u(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 d=(0,e.computed)(()=>{let e=r.k;if(!e)return H;let t=u(e,r.data,r.index);return t>0?r.upColor:t<0?r.downColor:H}),f=(0,e.computed)(()=>{let e=r.k;if(!e)return H;let t=e.close-e.open;return t>0?r.upColor:t<0?r.downColor:H}),p=(0,e.computed)(()=>{let e=r.k;if(!e)return H;let t=e.changePercent??(e.close-e.open)/e.open*100;return t>0?r.upColor:t<0?r.downColor:H});return(t,r)=>n.k?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref:s,class:(0,e.normalizeClass)([`kline-tooltip`,[{"use-anchor":a.value},o.value]]),style:(0,e.normalizeStyle)(a.value?void 0:{left:`${n.pos.x}px`,top:`${n.pos.y}px`})},[(0,e.createElementVNode)(`div`,Ge,[n.k.stockCode?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Ke,(0,e.toDisplayString)(n.k.stockCode),1)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(i.value),1)]),(0,e.createElementVNode)(`div`,qe,[(0,e.createElementVNode)(`div`,Je,[r[0]||=(0,e.createElementVNode)(`span`,null,`开`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:d.value})},(0,e.toDisplayString)(n.k.open.toFixed(2)),5)]),(0,e.createElementVNode)(`div`,Ye,[r[1]||=(0,e.createElementVNode)(`span`,null,`高`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.k.high.toFixed(2)),1)]),(0,e.createElementVNode)(`div`,Xe,[r[2]||=(0,e.createElementVNode)(`span`,null,`低`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.k.low.toFixed(2)),1)]),(0,e.createElementVNode)(`div`,Ze,[r[3]||=(0,e.createElementVNode)(`span`,null,`收`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:f.value})},(0,e.toDisplayString)(n.k.close.toFixed(2)),5)]),typeof n.k.volume==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Qe,[r[4]||=(0,e.createElementVNode)(`span`,null,`成交量`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(c(n.k.volume)),1)])):(0,e.createCommentVNode)(``,!0),typeof n.k.turnover==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,$e,[r[5]||=(0,e.createElementVNode)(`span`,null,`成交额`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(c(n.k.turnover)),1)])):(0,e.createCommentVNode)(``,!0),typeof n.k.amplitude==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,et,[r[6]||=(0,e.createElementVNode)(`span`,null,`振幅`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.k.amplitude)+`%`,1)])):(0,e.createCommentVNode)(``,!0),typeof n.k.changePercent==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,tt,[r[7]||=(0,e.createElementVNode)(`span`,null,`涨跌幅`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:p.value})},(0,e.toDisplayString)(l(n.k.changePercent,`%`)),5)])):(0,e.createCommentVNode)(``,!0),typeof n.k.changeAmount==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,nt,[r[8]||=(0,e.createElementVNode)(`span`,null,`涨跌额`,-1),(0,e.createElementVNode)(`span`,{style:(0,e.normalizeStyle)({color:p.value})},(0,e.toDisplayString)(l(n.k.changeAmount,``)),5)])):(0,e.createCommentVNode)(``,!0),typeof n.k.turnoverRate==`number`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,rt,[r[9]||=(0,e.createElementVNode)(`span`,null,`换手率`,-1),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.k.turnoverRate.toFixed(2))+`%`,1)])):(0,e.createCommentVNode)(``,!0)])],6)):(0,e.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-80fa3a7d`]]),at={class:`marker-tooltip__title`},ot={key:0,class:`marker-tooltip__content`},st=m((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`,at,(0,e.toDisplayString)(c.value),1),u.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ot,[((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`]]),ct=[`value`,`placeholder`],lt=[`value`,`placeholder`],ut={class:`range-count`},dt=m((0,e.defineComponent)({__name:`RangeSelectionExport`,props:{startDate:{},endDate:{},startLabel:{},endLabel:{},count:{}},emits:[`update:startDate`,`update:endDate`,`export`,`clear`,`batchSetting`],setup(t){return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)(k,null,{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`input`,{class:`range-input`,value:t.startDate,onInput:r[0]||=e=>n.$emit(`update:startDate`,e.target.value),placeholder:t.startLabel},null,40,ct),r[6]||=(0,e.createElementVNode)(`span`,{class:`range-sep`},`~`,-1),(0,e.createElementVNode)(`input`,{class:`range-input`,value:t.endDate,onInput:r[1]||=e=>n.$emit(`update:endDate`,e.target.value),placeholder:t.endLabel},null,40,lt),(0,e.createElementVNode)(`span`,ut,`共 `+(0,e.toDisplayString)(t.count)+` 条`,1),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn`,title:`批量设置`,onClick:r[2]||=e=>n.$emit(`batchSetting`)},` 批量设置 `),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn`,title:`导出`,onClick:r[3]||=e=>n.$emit(`export`)},`导出`),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn toolbar-btn--delete`,title:`取消选区`,onClick:r[4]||=e=>n.$emit(`clear`)},[...r[5]||=[(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)]])]),_:1}))}}),[[`__scopeId`,`data-v-6e5ee3f6`]]),ft={};function pt(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:`canvas-toolbar-stack`,onPointerdown:n[0]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:n[1]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:n[2]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.renderSlot)(t.$slots,`default`,{},void 0,!0)],32)}var mt=m(ft,[[`render`,pt],[`__scopeId`,`data-v-82232270`]]);function ht(n){let r=(0,e.ref)(`light`),i=(0,e.ref)({}),a=(0,e.computed)(()=>{let e=i.value.isAsiaMarket??!1,n=(0,t.resolveThemeColors)(r.value,e);return{upColor:n.candleUpBody,downColor:n.candleDownBody}}),o=(0,e.computed)(()=>{let e=r.value===`dark`?t.darkTheme:t.lightTheme,n=i.value.colorPresetSettings?.[r.value];return n&&Object.keys(n).length>0?(0,t.themeToCssVars)({...e,colors:{...e.colors,...n}}):(0,t.themeToCssVars)(e)}),s=null;function c(e){n.value?.setTheme(e.matches?`dark`:`light`)}function l(e){let t=n.value;if(!(!t||!e))if(e===`auto`){let e=window.matchMedia(`(prefers-color-scheme: dark)`);t.setTheme(e.matches?`dark`:`light`),s!==e&&(s?.removeEventListener(`change`,c),s=e,e.addEventListener(`change`,c))}else s?.removeEventListener(`change`,c),s=null,t.setTheme(e)}function u(e){i.value=e,l(e.theme),n.value?.updateSettingsFacade(e)}return(0,e.onUnmounted)(()=>{s?.removeEventListener(`change`,c),s=null}),{chartTheme:r,chartSettings:i,tooltipColors:a,themeCssVars:o,handleSettingsChange:u,applyThemeFromSettings:l}}function gt(t,n){let r=(0,e.ref)([]),a=(0,e.ref)([]),o=(0,e.computed)(()=>{let e=[],t=new Set;for(let n of a.value)t.has(n.indicatorId)||(t.add(n.indicatorId),e.push(n.indicatorId));return e}),s=(0,e.computed)(()=>[...r.value,...o.value]),c=(0,e.ref)({});function l(){let e=n.value.main??3;return a.value.length===0?[{id:`main`,ratio:e,visible:!0,role:`price`}]:[{id:`main`,ratio:e,visible:!0,role:`price`},...a.value.map(e=>({id:e.id,ratio:n.value[e.id]??1,visible:!0,role:`indicator`}))]}function u(e){if(e===`VOLUME`)return{};let t=(0,i.getRegisteredIndicatorDefinition)(e);return t?.runtime?.defaultConfig?{...t.runtime.defaultConfig}:{}}function d(e){if(e===`VOLUME`)return!0;let t=(0,i.getRegisteredIndicatorDefinition)(e);return!!t&&t.category!==`main`}function f(e=`VOLUME`,n){if(a.value.length>=4)return!1;let r=n??u(e);return!!t.value?.addIndicator(e,`sub`,r)}function p(e){t.value?.removeIndicator(e)}function m(){for(let e of a.value)t.value?.removeIndicator(e.id)}function h(e){let n=e,r=t.value;if(!n||!r)return;let i=n.indicators?.main;if(i)for(let e of i)e.enabled&&r.addIndicator(e.type,`main`,e.params)}function g(e,n){let r=u(n);t.value?.replaceSubPaneIndicator(e,n,r)}function _(e,n){let o=t.value;if(!o)return;let s=(0,i.getRegisteredIndicatorDefinition)(e);if(s&&(s.category===`main`||s.allowMainPane)){let t=r.value.find(t=>t===e);n&&!t?o.addIndicator(e,`main`,c.value[e]):!n&&t&&o.removeIndicator(e.toUpperCase());return}if(d(e))if(n){if(a.value.find(t=>t.indicatorId===e)||a.value.length>=4)return;if(!o.addIndicator(e,`sub`,c.value[e])&&a.value.length>0){let t=a.value[a.value.length-1];g(t.id,e)}}else a.value.filter(t=>t.indicatorId===e).forEach(e=>{o.removeIndicator(e.id)})}function v(e,n){if(e===`MA`||e===`BOLL`||e===`EXPMA`||e===`ENE`){t.value?.updateIndicatorParams(e,n);return}d(e)&&a.value.filter(t=>t.indicatorId===e).forEach(e=>{t.value?.updateIndicatorParams(e.id,n)})}function y(e){if(!e.length||a.value.length<=1)return;let n=e.filter(e=>d(e));if(!n.length)return;let r=new Map(a.value.map(e=>[e.indicatorId,e])),i=[];for(let e of n){let t=r.get(e);t&&(i.push(t),r.delete(e))}if(i.length===0)return;for(let e of a.value)r.has(e.indicatorId)&&(i.push(e),r.delete(e.indicatorId));let o=a.value.map(e=>e.id),s=i.map(e=>e.id);if(o.join(`|`)===s.join(`|`))return;a.value=i;let c=t.value;c&&c.updatePaneLayout(l())}function b(e){let t=e.indicators.subscribe(()=>{let t=e.indicators.peek(),n=t.filter(e=>e.role===`main`).map(e=>e.definitionId);r.value=n;let i={...c.value};for(let e of t)e.role===`main`&&e.params&&Object.keys(e.params).length>0&&(i[e.definitionId]={...e.params});e.updateRendererConfig(`mainIndicatorLegend`,{indicators:{MA:{enabled:n.includes(`MA`),params:i.MA||{}},BOLL:{enabled:n.includes(`BOLL`),params:i.BOLL||{}},EXPMA:{enabled:n.includes(`EXPMA`),params:i.EXPMA||{}},ENE:{enabled:n.includes(`ENE`),params:i.ENE||{}}}}),c.value=i}),n=e.subPanes.subscribe(()=>{let t=e.subPanes.peek(),n=new Set(t.map(e=>e.paneId)),r=a.value.filter(e=>n.has(e.id)),i=new Set(r.map(e=>e.id));for(let e of t)i.has(e.paneId)||r.push({id:e.paneId,indicatorId:e.indicatorId,params:e.params});a.value=r;let o={...c.value};for(let e of t)e.params&&Object.keys(e.params).length>0&&(o[e.indicatorId]={...e.params});c.value=o});return()=>{t(),n()}}return{mainActiveIndicators:r,subActiveIndicators:o,activeIndicators:s,indicatorParams:c,subPanes:a,maxSubPanes:4,buildPaneLayoutIntent:l,getDefaultParams:u,isSubPaneIndicator:d,addSubPane:f,removeSubPane:p,clearAllSubPanes:m,initIndicatorsFromConfig:h,switchSubIndicator:g,handleIndicatorToggle:_,handleUpdateParams:v,handleReorderSubIndicators:y,setupIndicatorSubscriptions:b}}function _t(t){let r=(0,e.shallowRef)(null),i=(0,e.ref)(null),a=(0,e.ref)([]),o=(0,e.computed)(()=>{let e=i.value;return e?a.value.find(t=>t.id===e)??null:null});function s(e){r.value?.setTool(e)}function c(e){let t=o.value;!t||!r.value||(r.value.updateDrawingStyle(t.id,e),a.value=r.value.getDrawings())}function l(){let e=o.value;!e||!r.value||(r.value.removeDrawing(e.id),a.value=r.value.getDrawings())}function u(e){r.value=new n.DrawingInteractionController(e),r.value.setCallbacks({onDrawingCreated:e=>{a.value=[...a.value,e],i.value=e.id},onToolChange:()=>{},onDrawingSelected:e=>{i.value=e?.id??null}})}return{drawingController:r,selectedDrawingId:i,selectedDrawing:o,drawings:a,handleSelectTool:s,onUpdateDrawingStyle:c,onDeleteDrawing:l,setupDrawing:u}}function vt(e,t,n,r){let{kWidth:i,kGap:a}=t.getKWidthKGap(),o=t.getCurrentDpr(),s=Math.max(1,Math.round(i*o)+ +(Math.round(i*o)%2==0)),c=Math.round(a*o),l=s+c,u=c,d=n.scrollLeft-r.scrollLeft,f=d+(u+e.start*l)/o;return{left:f,width:d+(u+e.end*l+s)/o-f,height:r.plotHeight}}function U(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=n+r>>>1,a=e[i].timestamp;if(a===t)return{low:i,high:i};a<t?n=i+1:r=i-1}return{low:n,high:r}}function W(e,t,n){if(e.length===0)return null;let{low:r,high:i}=U(e,t);return r===i?r:n===`left`?i>=0?i:r<e.length?r:null:r<e.length?r:i}function G(e){return e?e.date?e.date:new Date(e.timestamp).toISOString().slice(0,10):`?`}function yt(e){let t=new Date(e);return`${t.getFullYear()}${String(t.getMonth()+1).padStart(2,`0`)}${String(t.getDate()).padStart(2,`0`)}`}function bt(e){let t=e.trim().split(/[-/]/);return t.length===3?`${t[0].padStart(4,`0`)}-${t[1].padStart(2,`0`)}-${t[2].padStart(2,`0`)}`:null}function K(e){if(e==null)return``;let t=String(e);return/[",\r\n]/.test(t)?`"${t.replace(/"/g,`""`)}"`:t}function xt(e){let t=bt(e);if(!t)return null;let n=new Date(t);return isNaN(n.getTime())?null:n.getTime()}function St(n){let{controller:r,activeToolId:i,containerRef:a,dataVersion:o,viewportVersion:s,dataFetcher:c,batchStockCodes:l}=n,u=(0,e.ref)(0),d=(0,e.ref)(``),f=(0,e.ref)(``),p=(0,e.ref)(null),m=(0,e.ref)(null),h=(0,e.ref)({startTimestamp:null,endTimestamp:null,isDragging:!1}),g=(0,e.computed)(()=>i.value===`range-select`),_=(0,e.computed)(()=>h.value.startTimestamp!==null&&h.value.endTimestamp!==null),v=(0,e.computed)(()=>{o.value;let e=r.value?.getData()??[],{startTimestamp:t,endTimestamp:n}=h.value;if(t===null||n===null||e.length===0)return null;let i=W(e,t,`left`),a=W(e,n,`right`);return i===null||a===null?null:{start:Math.min(i,a),end:Math.max(i,a)}}),y=(0,e.computed)(()=>{let e=v.value,t=r.value?.getData()??[];return!e||t.length===0?``:G(t[e.start])}),b=(0,e.computed)(()=>{let e=v.value,t=r.value?.getData()??[];return!e||t.length===0?``:G(t[e.end])}),x=(0,e.computed)(()=>{let e=v.value;return e?e.end-e.start+1:0}),S=(0,e.computed)(()=>{let e=v.value;if(!e)return null;u.value,s.value;let t=r.value,n=t?.getViewport(),i=a.value;if(!t||!n||!i)return null;let o=vt(e,t,i,n);return{left:`${o.left}px`,width:`${o.width}px`,height:`${o.height}px`}});function C(){h.value={startTimestamp:null,endTimestamp:null,isDragging:!1},d.value=``,f.value=``}(0,e.watch)(d,e=>{let t=r.value?.getData()??[],n=xt(e);n===null||t.length===0||(h.value={...h.value,startTimestamp:n,isDragging:!1},n<t[0].timestamp&&r.value?.ensureDataRange(n))}),(0,e.watch)(f,e=>{let t=r.value?.getData()??[],n=xt(e);n===null||t.length===0||(h.value={...h.value,endTimestamp:n,isDragging:!1},n<t[0].timestamp&&r.value?.ensureDataRange(n))});function w(e,t){let n=r.value?.getData()??[];if(n.length===0)return null;let i=t.getBoundingClientRect(),a=r.value?.getLogicalIndexAtX(e.clientX-i.left);return a==null?null:Math.max(0,Math.min(a,n.length-1))}function T(e,t){if(!g.value||h.value.startTimestamp!==null&&h.value.endTimestamp!==null&&!h.value.isDragging)return!1;let n=w(e,t);if(n===null)return!0;let i=(r.value?.getData()??[])[n]?.timestamp;return i===void 0?!0:(h.value={startTimestamp:i,endTimestamp:i,isDragging:!0},d.value=``,f.value=``,t.setPointerCapture?.(e.pointerId),e.preventDefault(),!0)}function ee(e,t){if(!g.value||!h.value.isDragging)return!1;let n=w(e,t);if(n!==null){let e=(r.value?.getData()??[])[n]?.timestamp;e!==void 0&&(h.value={...h.value,endTimestamp:e})}return e.preventDefault(),!0}function E(e,t){if(!g.value||!h.value.isDragging)return!1;let n=w(e,t);if(n!==null){let e=(r.value?.getData()??[])[n]?.timestamp;e===void 0?h.value={...h.value,isDragging:!1}:h.value={...h.value,endTimestamp:e,isDragging:!1}}else h.value={...h.value,isDragging:!1};return t.releasePointerCapture?.(e.pointerId),e.preventDefault(),!0}function D(e,t){g.value&&(p.value=e,t.currentTarget.setPointerCapture?.(t.pointerId),t.preventDefault())}function O(e){if(!p.value||h.value.startTimestamp===null||h.value.endTimestamp===null)return;let t=a.value?.getBoundingClientRect();if(!t)return;let n=r.value?.getData()??[];if(!n.length)return;let i=r.value?.getLogicalIndexAtX(e.clientX-t.left);if(i==null)return;let o=n[Math.max(0,Math.min(i,n.length-1))]?.timestamp;o!==void 0&&(p.value===`left`?o>h.value.endTimestamp?(h.value={startTimestamp:h.value.endTimestamp,endTimestamp:o,isDragging:!1},p.value=`right`):h.value={...h.value,startTimestamp:o}:o<h.value.startTimestamp?(h.value={startTimestamp:o,endTimestamp:h.value.startTimestamp,isDragging:!1},p.value=`left`):h.value={...h.value,endTimestamp:o})}function k(e){p.value&&=(e.currentTarget.releasePointerCapture?.(e.pointerId),null)}let A=[`timestamp`,`open`,`high`,`low`,`close`,`volume`,`turnover`,`turnoverRate`,`amplitude`,`changePercent`,`changeAmount`];function j(e,n,r,i){let a=[`stockCode,time,${A.join(`,`)}`,...e.map(e=>{let r=K((0,t.formatTimestamp)(e.timestamp,{showTime:!0}));return`${K(e.stockCode??n)},${r},${A.map(t=>K(e[t])).join(`,`)}`})],o=new Blob([`\uFEFF${a.join(`
|
|
2
|
+
`)}`],{type:`text/csv;charset=utf-8`}),s=URL.createObjectURL(o),c=document.createElement(`a`);c.href=s,c.download=`${n}-${yt(r)}-${yt(i)}.csv`,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(s)}async function te(){let e=v.value,n=r.value?.getData()??[];if(!e||n.length===0)return;let i=n[e.start].timestamp,a=n[e.end].timestamp,o=r.value?.symbols.peek()?.[0]?.symbol??`unknown`,s=l.value,u=1+s.length,d=s.length>0?`batch${u}`:o,f=[];m.value={current:0,total:u,label:`正在准备主品种数据...`};for(let t of n.slice(e.start,e.end+1))f.push(t);m.value={current:1,total:u,label:`主品种数据已就绪`};let p=c.value;if(p&&s.length>0){let e=r.value?.symbols.peek()?.[0],n=(0,t.formatTimestamp)(i),o=(0,t.formatTimestamp)(a),c=e?.period??`daily`,l=e?.adjust??`none`,d=e?.exchange,h=e?.source??`gotdx`;for(let e=0;e<s.length;e++){let t=s[e];m.value={current:1+e,total:u,label:`正在获取 ${t}...`};try{let e=await p(h,{symbol:t,startDate:n,endDate:o,period:c,adjust:l,exchange:d});for(let t of e)f.push(t)}catch{continue}}}m.value={current:u,total:u,label:`正在生成文件...`},j(f,d,i,a),m.value={current:u,total:u,label:`导出完成`}}function M(){let e=a.value;e&&(u.value=e.scrollLeft)}function ne(){let e=a.value;e&&(u.value=e.scrollLeft)}return{rangeSelection:h,customStartDate:d,customEndDate:f,containerScrollLeft:u,isRangeSelectActive:g,rangeSelectionReady:_,rangeSelectionBounds:v,rangeSelectionCount:x,rangeSelectionStartLabel:y,rangeSelectionEndLabel:b,rangeSelectionOverlayStyle:S,clearRangeSelection:C,handleRangePointerDown:T,handleRangePointerMove:ee,handleRangePointerUp:E,exportRangeToCsv:te,exportingProgress:m,onEdgePointerDown:D,onEdgePointerMove:O,onEdgePointerUp:k,onScroll:M,syncScrollLeft:ne}}var Ct={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function q(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Ct,[...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 wt=(0,e.markRaw)({name:`tabler-pointer`,render:q}),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)(`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 Dt=(0,e.markRaw)({name:`tabler-chart-line`,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:`M17 7L7 17M8 7h9v9`},null,-1)]])}var At=(0,e.markRaw)({name:`tabler-arrow-up-right`,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:`M5 12h14m-6 6l6-6m-6-6l6 6`},null,-1)]])}var Nt=(0,e.markRaw)({name:`tabler-arrow-right`,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:`M5 12h14`},null,-1)]])}var It=(0,e.markRaw)({name:`tabler-minus`,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:`M3 12v.01M7 12h10m4 0v.01`},null,-1)]])}var zt=(0,e.markRaw)({name:`tabler-separator`,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)(`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 Ht=(0,e.markRaw)({name:`tabler-crosshair`,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)(`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 Gt=(0,e.markRaw)({name:`tabler-info-circle`,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 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m-3-3v6m11 8l-6-6`},null,-1)]])}var Jt=(0,e.markRaw)({name:`tabler-zoom-in`,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:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0m4 0h6m8 11l-6-6`},null,-1)]])}var Zt=(0,e.markRaw)({name:`tabler-zoom-out`,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:`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 en=(0,e.markRaw)({name:`tabler-maximize`,render:$t}),tn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function nn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,tn,[...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 rn=(0,e.markRaw)({name:`tabler-minimize`,render:nn}),J={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function an(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,J,[...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 on=(0,e.markRaw)({name:`tabler-settings`,render:an}),sn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,sn,[...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 ln=(0,e.markRaw)({name:`tabler-shape`,render:cn}),un={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,un,[...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 fn=(0,e.markRaw)({name:`tabler-chart-dots-3`,render:dn}),pn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,pn,[...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 hn=(0,e.markRaw)({name:`tabler-caret-up-down`,render:mn}),gn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _n(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,gn,[...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 vn=(0,e.markRaw)({name:`tabler-brackets`,render:_n}),yn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bn(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,yn,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m7 8l-4 4l4 4m10-8l4 4l-4 4M3 12h18`},null,-1)]])}var xn=(0,e.markRaw)({name:`tabler-arrows-horizontal`,render:bn});function Sn(){return Object.create(null)}function Cn(){return{ctxMethods:Sn(),ctxProps:Sn(),canvasProps:Sn(),ctxMethodSources:Object.create(null)}}function wn(e,t,n){let r=e[t]??={count:0,totalTime:0};r.count+=1,r.totalTime+=n}function Tn(e,t,n,r){wn(e.ctxMethodSources[t]??=Sn(),n,r)}function En(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 Dn=!1,Y=new Map,X=new Map;function On(e){Dn=e,e?typeof window<`u`&&!window.__KMAP_CANVAS_PROFILER_INSTALLED__&&An():jn()}function kn(){if(!Dn)return`disabled`;let e=Error().stack;if(!e)return`unknown`;let t=e.split(`
|
|
3
|
+
`).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(Y.has(i))return;let a=Reflect.get(e,t);typeof a==`function`&&(Y.set(i,a),Reflect.set(e,t,function(...e){if(!Dn)return a.apply(this,e);let i=r?.captureSource?kn():null,o=performance.now(),s=a.apply(this,e),c=performance.now()-o;return wn(n.ctxMethods,t,c),i&&Tn(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}`;X.has(i)||(X.set(i,r),Object.defineProperty(e,t,{configurable:!0,enumerable:r.enumerable??!1,get:r.get,set(e){if(!Dn){r.set.call(this,e);return}let i=performance.now();r.set.call(this,e),wn(n,t,performance.now()-i)}}))}function An(){if(typeof window>`u`||window.__KMAP_CANVAS_PROFILER_INSTALLED__)return;let e=CanvasRenderingContext2D?.prototype,t=HTMLCanvasElement?.prototype;if(!e||!t)return;let n=Cn();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(En(e.ctxMethods)),console.log(`ctx props`),console.table(En(e.ctxProps)),console.log(`canvas props`),console.table(En(e.canvasProps));for(let t of[`fillText`,`measureText`]){let n=e.ctxMethodSources[t];n&&(console.log(`${t} sources`),console.table(En(n).slice(0,20)))}console.groupEnd()}},window.resetCanvasReport=()=>{window.__KMAP_CANVAS_PROFILER_METRICS__=Cn()},console.info(`[kmap] Canvas profiler enabled. Use window.showCanvasReport() and window.resetCanvasReport().`)}function jn(){if(typeof window>`u`||!window.__KMAP_CANVAS_PROFILER_INSTALLED__)return;let e=CanvasRenderingContext2D?.prototype,t=HTMLCanvasElement?.prototype;Y.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)}),Y.clear(),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&&n.configurable&&Object.defineProperty(s,o,n)}),X.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 Mn={class:`settings-body`},Nn={key:0,class:`md-switch`},Pn=[`onUpdate:modelValue`],Fn={key:0,class:`md-switch`},In=[`onUpdate:modelValue`],Ln={key:0,class:`md-switch`},Rn=[`onUpdate:modelValue`],zn=m((0,e.defineComponent)({__name:`ChartSettingsDialog`,props:{show:{type:Boolean}},emits:[`close`,`confirm`],setup(n,{emit:r}){let i=n,o=r,s=(0,e.computed)(()=>a.DEFAULT_SETTINGS.filter(e=>e.group===`main`)),c=(0,e.computed)(()=>a.DEFAULT_SETTINGS.filter(e=>e.group===`experimental`)),l=(0,e.computed)(()=>a.DEFAULT_SETTINGS.filter(e=>e.group===`style`)),u=(0,e.ref)(!1),d=(0,e.ref)(null);function f(){try{let e=localStorage.getItem(a.SETTINGS_STORAGE_KEY);if(e){let n=JSON.parse(e),r={};return a.DEFAULT_SETTINGS.forEach(e=>{r[e.key]=n[e.key]??e.default}),r.colorPresetSettings=(0,t.normalizeColorPresetSettings)(n.colorPresetSettings),r}}catch{}let e={};return a.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e.colorPresetSettings={},e}let p=(0,e.ref)(f());(0,e.watch)(()=>i.show,e=>{e&&(p.value=f())});function m(){o(`close`)}function g(){let e={};a.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e.colorPresetSettings={},p.value=e}function _(){o(`confirm`,{...p.value})}return(t,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,[(0,e.createVNode)(P,{show:n.show,width:`min(92vw, 460px)`,"max-height":`min(720px, calc(100vh - 48px))`,"footer-align":`space-between`,onClose:m},{header:(0,e.withCtx)(()=>[...r[5]||=[(0,e.createElementVNode)(`div`,{class:`header-left`},[(0,e.createElementVNode)(`span`,{class:`settings-title`},`图表设置`),(0,e.createElementVNode)(`span`,{class:`settings-subtitle`},`个性化配置`)],-1)]]),footer:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`button`,{class:`settings-btn reset`,onClick:g},[...r[13]||=[(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:_},[...r[14]||=[(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)]])])]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,Mn,[s.value.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[r[7]||=(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)(s.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.key,class:`settings-item`},[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),t.type===`boolean`?((0,e.openBlock)(),(0,e.createElementBlock)(`label`,Nn,[(0,e.withDirectives)((0,e.createElementVNode)(`input`,{type:`checkbox`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,Pn),[[e.vModelCheckbox,p.value[t.key]]]),r[6]||=(0,e.createElementVNode)(`span`,{class:`md-switch-slider`},null,-1)])):t.type===`select`&&t.options?((0,e.openBlock)(),(0,e.createBlock)(E,{key:1,"model-value":String(p.value[t.key]),options:t.options,size:`sm`,"min-width":`100px`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,[`model-value`,`options`,`onUpdate:modelValue`])):(0,e.createCommentVNode)(``,!0)]))),128))],64)):(0,e.createCommentVNode)(``,!0),r[12]||=(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`},[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),t.type===`boolean`?((0,e.openBlock)(),(0,e.createElementBlock)(`label`,Fn,[(0,e.withDirectives)((0,e.createElementVNode)(`input`,{type:`checkbox`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,In),[[e.vModelCheckbox,p.value[t.key]]]),r[8]||=(0,e.createElementVNode)(`span`,{class:`md-switch-slider`},null,-1)])):t.type===`select`&&t.options?((0,e.openBlock)(),(0,e.createBlock)(E,{key:1,"model-value":String(p.value[t.key]),options:t.options,size:`sm`,"min-width":`100px`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,[`model-value`,`options`,`onUpdate:modelValue`])):(0,e.createCommentVNode)(``,!0)]))),128)),(0,e.createElementVNode)(`div`,{class:`settings-item nav-item`,onClick:r[0]||=e=>u.value=!0},[...r[9]||=[(0,e.createElementVNode)(`span`,null,`颜色配置`,-1),(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)]]),c.value.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[r[11]||=(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 experimental`},[(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.label),1),t.type===`boolean`?((0,e.openBlock)(),(0,e.createElementBlock)(`label`,Ln,[(0,e.withDirectives)((0,e.createElementVNode)(`input`,{type:`checkbox`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,Rn),[[e.vModelCheckbox,p.value[t.key]]]),r[10]||=(0,e.createElementVNode)(`span`,{class:`md-switch-slider`},null,-1)])):t.type===`select`&&t.options?((0,e.openBlock)(),(0,e.createBlock)(E,{key:1,"model-value":String(p.value[t.key]),options:t.options,size:`sm`,"min-width":`100px`,"onUpdate:modelValue":e=>p.value[t.key]=e},null,8,[`model-value`,`options`,`onUpdate:modelValue`])):(0,e.createCommentVNode)(``,!0)]))),128))],64)):(0,e.createCommentVNode)(``,!0)])]),_:1},8,[`show`]),(0,e.createVNode)(P,{show:u.value,title:`颜色预设`,subtitle:`自定义图表颜色`,width:`min(92vw, 460px)`,"max-height":`min(720px, calc(100vh - 48px))`,"z-index":1100,"footer-align":`space-between`,onClose:r[4]||=e=>u.value=!1},{footer:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`button`,{type:`button`,class:`settings-btn reset`,onClick:r[2]||=e=>d.value?.resetCurrentThemeColors()},` 重置颜色 `),(0,e.createElementVNode)(`button`,{type:`button`,class:`settings-btn confirm`,onClick:r[3]||=e=>u.value=!1},` 确认 `)]),default:(0,e.withCtx)(()=>[(0,e.createVNode)(h,{ref_key:`colorPresetPanelRef`,ref:d,"color-preset-settings":p.value.colorPresetSettings,"onUpdate:colorPresetSettings":r[1]||=e=>p.value={...p.value,colorPresetSettings:e}},null,8,[`color-preset-settings`])]),_:1},8,[`show`])],64))}}),[[`__scopeId`,`data-v-54c84784`]]),Bn={class:`left-toolbar`,"aria-label":`图表工具栏`},Vn={class:`left-toolbar__group`},Hn=[`title`,`aria-label`,`onClick`],Un=[`onClick`],Wn=[`title`,`aria-label`,`onClick`],Gn={class:`left-toolbar__group`},Kn={class:`left-toolbar__group`},qn=[`title`,`aria-label`],Jn={class:`left-toolbar__group`},Yn=m((0,e.defineComponent)({__name:`LeftToolbar`,props:{isFullscreen:{type:Boolean}},emits:[`selectTool`,`toggleFullscreen`,`zoomIn`,`zoomOut`,`settingsChange`],setup(t,{expose:n,emit:r}){let i=[{id:`cursor`,title:`光标`,icon:wt},{id:`lines`,title:`线条`,icon:Dt,children:[{id:`trend-line`,title:`线段`,icon:Dt},{id:`ray`,title:`射线`,icon:At},{id:`h-line`,title:`水平线`,icon:It},{id:`h-ray`,title:`水平射线`,icon:Nt},{id:`v-line`,title:`垂直线`,icon:zt},{id:`crosshair-line`,title:`十字线`,icon:Ht},{id:`info-line`,title:`信息线`,icon:Gt}]},{id:`channels`,title:`通道`,icon:ln,children:[{id:`parallel-channel`,title:`平行通道`,icon:ln},{id:`regression-channel`,title:`回归趋势`,icon:fn},{id:`flat-line`,title:`平滑顶底`,icon:hn},{id:`disjoint-channel`,title:`不相交通道`,icon:vn}]},{id:`range-select`,title:`导出区间数据`,icon:xn}],o=r,s=(0,e.ref)(`cursor`),c=(0,e.ref)(null),l=(0,e.ref)(!1);function u(){try{let e=localStorage.getItem(a.SETTINGS_STORAGE_KEY);if(e){let t=JSON.parse(e),n={...t};return a.DEFAULT_SETTINGS.forEach(e=>{n[e.key]=t[e.key]??e.default}),n}}catch{}let e={};return a.DEFAULT_SETTINGS.forEach(t=>{e[t.key]=t.default}),e}function d(e){try{localStorage.setItem(a.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),On(!!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}),On(!!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`,Bn,[(0,e.createElementVNode)(`div`,Vn,[((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(i,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,Un)):(0,e.createCommentVNode)(``,!0)],42,Hn),(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,Wn))),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`,Gn,[(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)(Jt),{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)(Zt),{class:`tool-icon`,"aria-hidden":`true`})],32)]),r[23]||=(0,e.createElementVNode)(`span`,{class:`left-toolbar__divider`},null,-1),(0,e.createElementVNode)(`div`,Kn,[(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)(rn),{key:0,class:`tool-icon`,"aria-hidden":`true`})):((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(en),{key:1,class:`tool-icon`,"aria-hidden":`true`}))],40,qn)]),r[24]||=(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:_,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)(on),{class:`tool-icon`,"aria-hidden":`true`})],32)])]),(0,e.createVNode)(zn,{show:l.value,onClose:r[21]||=e=>l.value=!1,onConfirm:y},null,8,[`show`])],64))}}),[[`__scopeId`,`data-v-b7aa8ccf`]]),Xn=(0,e.defineComponent)({__name:`KLineLevelDropdown`,props:{modelValue:{}},emits:[`update:modelValue`],setup(t,{emit:n}){let r=[{label:`1day`,value:`daily`},{label:`1min`,value:`1min`},{label:`5min`,value:`5min`},{label:`15min`,value:`15min`},{label:`30min`,value:`30min`},{label:`1小时`,value:`60min`},{label:`1周`,value:`weekly`},{label:`1月`,value:`monthly`},{label:`3月`,value:`quarterly`},{label:`12月`,value:`yearly`}],i=n;return(n,a)=>((0,e.openBlock)(),(0,e.createBlock)(E,{"model-value":t.modelValue,options:r,label:`级别`,title:`K线级别`,size:`md`,"onUpdate:modelValue":a[0]||=e=>i(`update:modelValue`,e)},null,8,[`model-value`]))}}),Zn=(0,e.defineComponent)({__name:`KLineAdjustmentDropdown`,props:{modelValue:{}},emits:[`update:modelValue`],setup(t,{emit:n}){let r=[{label:`前复权`,value:`qfq`},{label:`后复权`,value:`hfq`},{label:`仅拆股`,value:`splits`},{label:`不复权`,value:`none`}],i=n;return(n,a)=>((0,e.openBlock)(),(0,e.createBlock)(E,{"model-value":t.modelValue,options:r,label:`复权`,title:`复权方式`,size:`md`,"onUpdate:modelValue":a[0]||=e=>i(`update:modelValue`,e)},null,8,[`model-value`]))}}),Qn={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function $n(t,n){return(0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Qn,[...n[0]||=[(0,e.createElementVNode)(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 9v4m-1.637-9.409L2.257 17.125a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636-2.87L13.637 3.59a1.914 1.914 0 0 0-3.274 0M12 16h.01`},null,-1)]])}var er=(0,e.markRaw)({name:`tabler-alert-triangle`,render:$n}),tr=[`title`,`aria-expanded`],nr={class:`symbol-chip__code`},rr={key:0,class:`symbol-chip__spinner`,"aria-hidden":`true`},ir={class:`symbol-search`},ar={class:`symbol-list`,role:`listbox`,"aria-label":`商品列表`},or={key:0,class:`symbol-list__empty`},sr={width:`32`,height:`32`,viewBox:`0 0 32 32`,fill:`none`,style:{"margin-bottom":`8px`,opacity:`0.35`}},cr=[`aria-selected`,`onClick`],lr={class:`symbol-list__left`},ur={class:`symbol-list__code`},dr={class:`symbol-list__desc`},fr={class:`symbol-list__exchange`},pr=m((0,e.defineComponent)({__name:`SymbolSelector`,props:{symbol:{},symbols:{},loading:{type:Boolean},error:{type:Boolean}},emits:[`change`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)(!1),o=(0,e.ref)(``),s=(0,e.ref)(null),c=(0,e.ref)(null),l=(0,e.ref)(null),u=y(),{popupStyle:d,startPositionSync:f,stopPositionSync:p}=g(c,l,8),m=(0,e.computed)(()=>r.symbols.find(e=>e.code===r.symbol)),h=(0,e.computed)(()=>{let e=m.value;return e?`${e.code} - ${e.description}`:r.symbol}),_=(0,e.computed)(()=>{let e=o.value.trim().toLowerCase();return e?r.symbols.filter(t=>t.code.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.exchange.toLowerCase().includes(e)):r.symbols});function v(){a.value=!a.value,a.value&&(0,e.nextTick)(()=>s.value?.focus())}(0,e.watch)(a,e=>{e?f():p()});function b(){o.value=``,s.value?.focus()}function x(){}function S(e){i(`change`,e),a.value=!1,o.value=``}function C(e){let t=c.value,n=l.value;t&&!t.contains(e.target)&&!n?.contains(e.target)&&(a.value=!1)}return(0,e.onMounted)(()=>document.addEventListener(`mousedown`,C)),(0,e.onBeforeUnmount)(()=>document.removeEventListener(`mousedown`,C)),(0,e.watch)(()=>r.symbol,()=>{a.value=!1,o.value=``}),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`chipWrapRef`,ref:c,class:`symbol-chip-wrap`},[(0,e.createElementVNode)(`button`,{type:`button`,class:(0,e.normalizeClass)([`symbol-chip`,{"is-open":a.value}]),title:h.value,"aria-expanded":a.value,"aria-haspopup":`dialog`,onClick:v},[(0,e.createElementVNode)(`span`,nr,(0,e.toDisplayString)(h.value),1),t.loading?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,rr)):t.error?((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(er),{key:1,class:`symbol-chip__warn`,"aria-hidden":`true`})):(0,e.createCommentVNode)(``,!0)],10,tr),((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(u)},[(0,e.createVNode)(e.Transition,{name:`symbol-popover`},{default:(0,e.withCtx)(()=>[a.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref_key:`popupRef`,ref:l,class:`symbol-popover`,style:(0,e.normalizeStyle)((0,e.unref)(d)),role:`dialog`,"aria-label":`切换合约`},[(0,e.createElementVNode)(`div`,ir,[r[2]||=(0,e.createElementVNode)(`span`,{class:`symbol-search__icon`,"aria-hidden":`true`},[(0,e.createElementVNode)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 16 16`,fill:`none`},[(0,e.createElementVNode)(`circle`,{cx:`6.5`,cy:`6.5`,r:`5`,stroke:`currentColor`,"stroke-width":`1.6`}),(0,e.createElementVNode)(`line`,{x1:`10.5`,y1:`10.5`,x2:`14.5`,y2:`14.5`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`})])],-1),(0,e.withDirectives)((0,e.createElementVNode)(`input`,{ref_key:`searchInputRef`,ref:s,"onUpdate:modelValue":r[0]||=e=>o.value=e,class:`symbol-search__input`,type:`text`,placeholder:`搜索代码或名称…`,autocomplete:`off`,spellcheck:`false`,"aria-label":`搜索商品`,onInput:x},null,544),[[e.vModelText,o.value]]),o.value?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,type:`button`,class:`symbol-search__clear`,"aria-label":`清空搜索`,onClick:b},[...r[1]||=[(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)]])):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,ar,[_.value.length===0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,or,[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,sr,[...r[3]||=[(0,e.createElementVNode)(`circle`,{cx:`13`,cy:`13`,r:`10`,stroke:`currentColor`,"stroke-width":`2`},null,-1),(0,e.createElementVNode)(`line`,{x1:`21`,y1:`21`,x2:`29`,y2:`29`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`},null,-1)]])),r[4]||=(0,e.createElementVNode)(`span`,null,`未找到相关商品`,-1)])):(0,e.createCommentVNode)(``,!0),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(_.value,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:n.code,type:`button`,class:(0,e.normalizeClass)([`symbol-list__item`,{"is-active":n.code===t.symbol}]),role:`option`,"aria-selected":n.code===t.symbol,onClick:e=>S(n)},[(0,e.createElementVNode)(`span`,lr,[(0,e.createElementVNode)(`span`,ur,(0,e.toDisplayString)(n.code),1),(0,e.createElementVNode)(`span`,dr,(0,e.toDisplayString)(n.description),1)]),(0,e.createElementVNode)(`span`,fr,(0,e.toDisplayString)(n.exchange),1)],10,cr))),128))])],4)):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))],512))}}),[[`__scopeId`,`data-v-3d5a580d`]]),mr=[`aria-expanded`],hr={key:0,class:`compare-chip__spinner`},gr={key:1,class:`compare-chip__badge`},_r={class:`compare-search`},vr={key:0,class:`compare-selected`},yr={class:`compare-selected__list`},br={class:`compare-selected__code`},xr={class:`compare-selected__desc`},Sr=[`aria-label`,`onClick`],Cr={class:`compare-list`,role:`listbox`,"aria-label":`商品列表`},wr={key:0,class:`compare-list__empty`},Tr={width:`32`,height:`32`,viewBox:`0 0 32 32`,fill:`none`,style:{"margin-bottom":`8px`,opacity:`0.35`}},Er=[`aria-selected`,`onClick`],Dr={class:`compare-list__left`},Or={class:`compare-list__code`},kr={class:`compare-list__desc`},Ar={class:`compare-list__right`},jr={class:`compare-list__exchange`},Mr={key:0,class:`compare-list__check`,"aria-hidden":`true`},Nr=m((0,e.defineComponent)({__name:`CompareSymbolSelector`,props:{symbols:{},selected:{default:()=>[]},comparisonColors:{},comparisonLoading:{type:Boolean}},emits:[`add`,`remove`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)(!1),o=(0,e.ref)(``),s=(0,e.ref)(null),c=(0,e.ref)(null),l=(0,e.ref)(null),u=y(),{popupStyle:d,startPositionSync:f,stopPositionSync:p}=g(c,l,8),m=(0,e.computed)(()=>new Set(r.selected??[])),h=(0,e.computed)(()=>{let e=m.value;return r.symbols.filter(t=>e.has(t.code))}),_=(0,e.computed)(()=>{let e=o.value.trim().toLowerCase();return e?r.symbols.filter(t=>t.code.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.exchange.toLowerCase().includes(e)):r.symbols});function v(e){return m.value.has(e)}function b(e){v(e.code)?i(`remove`,e.code):i(`add`,e)}function x(e){i(`remove`,e)}function S(){a.value=!a.value,a.value&&(0,e.nextTick)(()=>s.value?.focus())}(0,e.watch)(a,e=>{e?f():p()});function C(){o.value=``,s.value?.focus()}function w(e){let t=c.value,n=l.value;t&&!t.contains(e.target)&&!n?.contains(e.target)&&(a.value=!1,o.value=``)}return(0,e.onMounted)(()=>document.addEventListener(`mousedown`,w)),(0,e.onBeforeUnmount)(()=>document.removeEventListener(`mousedown`,w)),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`rootRef`,ref:c,class:`compare-chip-wrap`},[(0,e.createElementVNode)(`button`,{type:`button`,class:(0,e.normalizeClass)([`compare-chip`,{"is-open":a.value}]),title:`比较商品`,"aria-expanded":a.value,"aria-haspopup":`dialog`,onClick:S},[r[1]||=(0,e.createElementVNode)(`span`,{class:`compare-chip__icon`,"aria-hidden":`true`},`+`,-1),r[2]||=(0,e.createElementVNode)(`span`,{class:`compare-chip__text`},`比较商品`,-1),t.comparisonLoading?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,hr)):(0,e.createCommentVNode)(``,!0),t.selected.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,gr,(0,e.toDisplayString)(t.selected.length),1)):(0,e.createCommentVNode)(``,!0)],10,mr),((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(u)},[(0,e.createVNode)(e.Transition,{name:`symbol-popover`},{default:(0,e.withCtx)(()=>[a.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,ref_key:`popupRef`,ref:l,class:`compare-popover`,style:(0,e.normalizeStyle)((0,e.unref)(d)),role:`dialog`,"aria-label":`比较商品`},[(0,e.createElementVNode)(`div`,_r,[r[4]||=(0,e.createElementVNode)(`span`,{class:`compare-search__icon`,"aria-hidden":`true`},[(0,e.createElementVNode)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 16 16`,fill:`none`},[(0,e.createElementVNode)(`circle`,{cx:`6.5`,cy:`6.5`,r:`5`,stroke:`currentColor`,"stroke-width":`1.6`}),(0,e.createElementVNode)(`line`,{x1:`10.5`,y1:`10.5`,x2:`14.5`,y2:`14.5`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`})])],-1),(0,e.withDirectives)((0,e.createElementVNode)(`input`,{ref_key:`searchInputRef`,ref:s,"onUpdate:modelValue":r[0]||=e=>o.value=e,class:`compare-search__input`,type:`text`,placeholder:`搜索代码或名称…`,autocomplete:`off`,spellcheck:`false`,"aria-label":`搜索比较商品`},null,512),[[e.vModelText,o.value]]),o.value?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,type:`button`,class:`compare-search__clear`,"aria-label":`清空搜索`,onClick:C},[...r[3]||=[(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)]])):(0,e.createCommentVNode)(``,!0)]),t.selected.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,vr,[r[6]||=(0,e.createElementVNode)(`div`,{class:`compare-selected__header`},[(0,e.createElementVNode)(`span`,{class:`compare-selected__title`},`已添加商品`)],-1),(0,e.createElementVNode)(`div`,yr,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(h.value,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n.code,class:`compare-selected__item`},[(0,e.createElementVNode)(`span`,{class:`compare-selected__color`,style:(0,e.normalizeStyle)({background:t.comparisonColors?.get(n.code)??`#888`})},null,4),(0,e.createElementVNode)(`span`,br,(0,e.toDisplayString)(n.code),1),(0,e.createElementVNode)(`span`,xr,(0,e.toDisplayString)(n.description),1),(0,e.createElementVNode)(`button`,{type:`button`,class:`compare-selected__remove`,"aria-label":`移除 `+n.code,onClick:e=>x(n.code)},[...r[5]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[(0,e.createElementVNode)(`path`,{d:`M18 6L6 18`}),(0,e.createElementVNode)(`path`,{d:`M6 6l12 12`})],-1)]],8,Sr)]))),128))])])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,Cr,[_.value.length===0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,wr,[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Tr,[...r[7]||=[(0,e.createElementVNode)(`circle`,{cx:`13`,cy:`13`,r:`10`,stroke:`currentColor`,"stroke-width":`2`},null,-1),(0,e.createElementVNode)(`line`,{x1:`21`,y1:`21`,x2:`29`,y2:`29`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`},null,-1)]])),r[8]||=(0,e.createElementVNode)(`span`,null,`未找到相关商品`,-1)])):(0,e.createCommentVNode)(``,!0),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(_.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:t.code,type:`button`,class:(0,e.normalizeClass)([`compare-list__item`,{"is-selected":v(t.code)}]),role:`option`,"aria-selected":v(t.code),onClick:e=>b(t)},[(0,e.createElementVNode)(`span`,Dr,[(0,e.createElementVNode)(`span`,Or,(0,e.toDisplayString)(t.code),1),(0,e.createElementVNode)(`span`,kr,(0,e.toDisplayString)(t.description),1)]),(0,e.createElementVNode)(`span`,Ar,[(0,e.createElementVNode)(`span`,jr,(0,e.toDisplayString)(t.exchange),1),v(t.code)?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Mr,[...r[9]||=[(0,e.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[(0,e.createElementVNode)(`polyline`,{points:`20 6 9 17 4 12`})],-1)]])):(0,e.createCommentVNode)(``,!0)])],10,Er))),128))])],4)):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))],512))}}),[[`__scopeId`,`data-v-8a5646b4`]]),Pr=m((0,e.defineComponent)({__name:`TopToolbar`,props:{symbol:{},kLineLevel:{},kLineAdjust:{},symbols:{},symbolLoading:{type:Boolean},symbolError:{type:Boolean},overlaySymbols:{},comparisonColors:{},comparisonLoading:{type:Boolean}},emits:[`addOverlaySymbol`,`removeOverlaySymbol`,`kLineLevelChange`,`kLineAdjustChange`,`toggleIndicator`,`symbolChange`],setup(t,{emit:n}){let r=(0,e.ref)(null),i=!1,a=0,o=0;function s(e){let t=r.value;t&&(i=!0,a=e.pageX-t.getBoundingClientRect().left,o=t.scrollLeft,t.style.cursor=`grabbing`,t.style.userSelect=`none`)}function c(e){if(!i)return;let t=r.value;if(!t)return;e.preventDefault();let n=e.pageX-t.getBoundingClientRect().left-a;t.scrollLeft=o-n}function l(){if(!i)return;i=!1;let e=r.value;e&&(e.style.cursor=``,e.style.userSelect=``)}let u=t,d=n,f=[{code:`XAUUSD`,description:`现货黄金`,exchange:`OANDA`,source:`tradingview`},{code:`BTCUSDT`,description:`Bitcoin / Tether`,exchange:`BINANCE`,source:`tradingview`},{code:`ETHUSDT`,description:`Ethereum / Tether`,exchange:`BINANCE`,source:`tradingview`},{code:`EURUSD`,description:`欧元/美元`,exchange:`OANDA`,source:`tradingview`},{code:`SPX`,description:`标普 500 指数`,exchange:`SP`,source:`tradingview`},{code:`AAPL`,description:`Apple Inc.`,exchange:`NASDAQ`,source:`tradingview`},{code:`TSLA`,description:`Tesla, Inc.`,exchange:`NASDAQ`,source:`tradingview`},{code:`1810`,description:`小米集团`,exchange:`HKEX`,source:`tradingview`},{code:`600519`,description:`贵州茅台`,exchange:`SSE`,source:`gotdx`},{code:`601360`,description:`三六零`,exchange:`SSE`,source:`gotdx`},{code:`000858`,description:`五 粮 液`,exchange:`SZSE`,source:`gotdx`},{code:`000001`,description:`平安银行`,exchange:`SZSE`,source:`gotdx`},{code:`MOCK-100`,description:`Mock 100 条`,exchange:`MOCK`,source:`mock-100`},{code:`MOCK-10000`,description:`Mock 10000 条`,exchange:`MOCK`,source:`mock-10000`}],p=(0,e.computed)(()=>u.symbol?.trim()??``),m=(0,e.computed)(()=>u.symbols&&u.symbols.length?u.symbols:f);function h(e){d(`symbolChange`,e)}return(n,i)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`toolbarRef`,ref:r,class:`top-toolbar`,onMousedown:s,onMousemove:c,onMouseup:l,onMouseleave:l},[p.value?((0,e.openBlock)(),(0,e.createBlock)(pr,{key:0,symbol:p.value,symbols:m.value,loading:t.symbolLoading,error:t.symbolError,onChange:h},null,8,[`symbol`,`symbols`,`loading`,`error`])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(Nr,{symbols:m.value,selected:t.overlaySymbols,"comparison-colors":t.comparisonColors,"comparison-loading":t.comparisonLoading,onAdd:i[0]||=e=>d(`addOverlaySymbol`,e),onRemove:i[1]||=e=>d(`removeOverlaySymbol`,e)},null,8,[`symbols`,`selected`,`comparison-colors`,`comparison-loading`]),(0,e.createVNode)(Xn,{"model-value":t.kLineLevel,"onUpdate:modelValue":i[2]||=e=>d(`kLineLevelChange`,e)},null,8,[`model-value`]),(0,e.createVNode)(Zn,{"model-value":t.kLineAdjust,"onUpdate:modelValue":i[3]||=e=>d(`kLineAdjustChange`,e)},null,8,[`model-value`]),(0,e.createElementVNode)(`button`,{type:`button`,class:`indicator-button`,title:`指标`,"aria-label":`指标`,onClick:i[4]||=e=>d(`toggleIndicator`)},[...i[5]||=[(0,e.createElementVNode)(`span`,{class:`indicator-button__icon`,"aria-hidden":`true`},`fx`,-1),(0,e.createElementVNode)(`span`,{class:`indicator-button__text`},`指标`,-1)]])],544))}}),[[`__scopeId`,`data-v-8ecedbff`]]),Fr=m((0,e.defineComponent)({__name:`BatchStockDialog`,props:{show:{type:Boolean}},emits:[`close`,`apply`],setup(t,{emit:n}){let r=n,i=(0,e.ref)([]),a=(0,e.computed)({get:()=>i.value.join(`
|
|
4
|
+
`),set:e=>{i.value=e.split(`
|
|
5
|
+
`).map(e=>e.trim()).filter(Boolean)}});function o(){i.value.length!==0&&(r(`apply`,i.value),r(`close`))}return(n,i)=>((0,e.openBlock)(),(0,e.createBlock)(P,{title:`批量设置股票代码`,show:t.show,onClose:i[2]||=e=>r(`close`)},{footer:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`button`,{class:`batch-btn batch-btn--cancel`,onClick:i[1]||=e=>r(`close`)},`取消`),(0,e.createElementVNode)(`button`,{class:`batch-btn batch-btn--confirm`,onClick:o},`应用`)]),default:(0,e.withCtx)(()=>[(0,e.withDirectives)((0,e.createElementVNode)(`textarea`,{"onUpdate:modelValue":i[0]||=e=>a.value=e,class:`batch-textarea`,placeholder:`每行一个股票代码,导出时会将所选区间内这些品种的数据一并导出
|
|
6
6
|
例如:
|
|
7
7
|
000001
|
|
8
8
|
600036
|
|
9
|
-
002415`,rows:`8`,spellcheck:`false`},null,512),[[e.vModelText,o.value]])]),(0,e.createElementVNode)(`div`,Nr,[(0,e.createElementVNode)(`button`,{class:`batch-btn batch-btn--cancel`,onClick:a[2]||=e=>r(`close`)},`取消`),(0,e.createElementVNode)(`button`,{class:`batch-btn batch-btn--confirm`,onClick:s},`应用`)])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))}}),[[`__scopeId`,`data-v-b1448f44`]]),Fr={key:0,class:`export-overlay`},Ir={class:`export-header`},Lr={class:`export-body`},Rr={class:`export-label`},zr={class:`export-bar-track`},Br={class:`export-counter`},Vr=p((0,e.defineComponent)({__name:`ExportProgressDialog`,props:{progress:{}},emits:[`close`],setup(t,{emit:n}){let r=t,i=n,a=v(),o=(0,e.computed)(()=>!r.progress||r.progress.total<=0?0:Math.min(100,Math.round(r.progress.current/r.progress.total*100)));return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{to:(0,e.unref)(a)},[(0,e.createVNode)(e.Transition,{name:`overlay`},{default:(0,e.withCtx)(()=>[t.progress?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Fr,[(0,e.createVNode)(e.Transition,{name:`modal`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:`export-modal`,onClick:r[2]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.createElementVNode)(`div`,Ir,[r[4]||=(0,e.createElementVNode)(`span`,{class:`export-title`},`导出数据`,-1),(0,e.createElementVNode)(`button`,{class:`export-close-btn`,onClick:r[0]||=e=>i(`close`)},[...r[3]||=[(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`,Lr,[(0,e.createElementVNode)(`div`,Rr,(0,e.toDisplayString)(t.progress.label),1),(0,e.createElementVNode)(`div`,zr,[(0,e.createElementVNode)(`div`,{class:`export-bar-fill`,style:(0,e.normalizeStyle)({width:o.value+`%`})},null,4)]),(0,e.createElementVNode)(`div`,Br,(0,e.toDisplayString)(t.progress.current)+` / `+(0,e.toDisplayString)(t.progress.total),1),t.progress.current===t.progress.total?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`export-done-btn`,onClick:r[1]||=e=>i(`close`)},`完成`)):(0,e.createCommentVNode)(``,!0)])])]),_:1})])):(0,e.createCommentVNode)(``,!0)]),_:1})],8,[`to`]))}}),[[`__scopeId`,`data-v-f4bab748`]]),Hr=[`data-theme`],Ur={class:`pane-separator-layer`,"aria-hidden":`true`},Wr={class:`canvas-layer`,ref:`canvasLayerRef`},Gr={class:`x-axis-canvas`,ref:`xAxisCanvasRef`},Kr=[`placeholder`],qr=[`placeholder`],Jr=p((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},timezone:{default:`Asia/Shanghai`},mcp:{}},emits:[`zoomLevelChange`,`toggleFullscreen`,`themeChange`,`kLineLevelChange`,`kLineAdjustChange`],setup(t,{expose:i,emit:o}){let s=t,c=o,l=(0,e.ref)(s.semanticConfig?.data?.period??`daily`),u=(0,e.ref)(s.semanticConfig?.data?.adjust??`none`),d=(0,e.computed)(()=>l.value.includes(`min`)),f=(0,e.ref)(`选择商品`),p=(0,e.ref)(null),m=(0,e.ref)(!1),h=(0,e.ref)(!1),g=(0,e.ref)([]),v=(0,e.ref)([]);function y(e){l.value=e,c(`kLineLevelChange`,e),T()}function b(e){u.value=e,c(`kLineAdjustChange`,e),T()}function x(e){h.value=!1,f.value=e.code,p.value=e,T()}function S(e){p.value?.code!==e.code&&(g.value.includes(e.code)||(v.value=[...v.value,e],g.value=v.value.map(e=>e.code),E(),N.value?.addComparisonSymbol(w(e))))}function C(e){v.value=v.value.filter(t=>t.code!==e),g.value=v.value.map(e=>e.code),N.value?.removeComparisonSymbol(e)}function w(e){return{symbol:e.code,exchange:e.exchange,period:l.value,source:e.source,startDate:s.semanticConfig?.data?.startDate??``,endDate:s.semanticConfig?.data?.endDate??``,adjust:u.value}}function T(){p.value&&N.value?.setSymbols([w(p.value),...v.value.map(w)])}function E(){if(P.value.axisType===`percent`)return;let e={...P.value,axisType:`percent`};P.value=e,N.value?.updateSettingsFacade(e);try{localStorage.setItem(a.SETTINGS_STORAGE_KEY,JSON.stringify(e))}catch{}}let D=(0,e.ref)(null),O=(0,e.ref)(null),A=(0,e.ref)(null),j=(0,e.ref)(null),M=(0,e.ref)(null),ee=(0,e.ref)(null);_(A);let N=(0,e.shallowRef)(null),{chartTheme:te,chartSettings:P,tooltipColors:ne,themeCssVars:re,handleSettingsChange:ie,applyThemeFromSettings:ae}=st(N),F=(0,e.shallowRef)(null),oe=(0,e.ref)(0),I=(0,e.ref)(0),se=(0,e.ref)(!1),ce=(0,e.ref)([]),le=(0,e.ref)(0),L=(0,e.ref)(1),R=(0,e.ref)(s.initialZoomLevel??1),z=(0,e.ref)(0),B=(0,e.ref)(1),ue=(0,e.ref)(0),de=(0,e.ref)({}),fe=(0,e.ref)(new Map),pe=(0,e.ref)(!1),me=(0,e.ref)(`cursor`),{mainActiveIndicators:he,subActiveIndicators:ge,activeIndicators:_e,indicatorParams:ve,subPanes:ye,buildPaneLayoutIntent:be,getDefaultParams:xe,isSubPaneIndicator:Se,addSubPane:Ce,removeSubPane:we,clearAllSubPanes:Te,initIndicatorsFromConfig:Ee,switchSubIndicator:De,handleIndicatorToggle:Oe,handleUpdateParams:ke,handleReorderSubIndicators:Ae,setupIndicatorSubscriptions:je}=ct(N,de),{drawingController:V,selectedDrawingId:Me,selectedDrawing:Ne,drawings:Pe,handleSelectTool:Fe,onUpdateDrawingStyle:Ie,onDeleteDrawing:Le,setupDrawing:Re}=lt(N),{rangeSelection:ze,customStartDate:H,customEndDate:Be,containerScrollLeft:Ve,isRangeSelectActive:He,rangeSelectionReady:We,rangeSelectionBounds:Ge,rangeSelectionStartLabel:Ke,rangeSelectionEndLabel:qe,rangeSelectionOverlayStyle:Je,clearRangeSelection:Ye,handleRangePointerDown:Xe,handleRangePointerMove:Ze,handleRangePointerUp:Qe,exportRangeToCsv:$e,exportingProgress:et,onEdgePointerDown:tt,onEdgePointerMove:nt,onEdgePointerUp:U,onScroll:it,syncScrollLeft:at}=ht({controller:N,activeToolId:me,containerRef:D,dataVersion:I,viewportVersion:le,dataFetcher:(0,e.computed)(()=>s.dataFetcher),batchStockCodes:ce}),ut=R.value;z.value=(0,n.zoomLevelToKWidth)(ut,{minKWidth:s.minKWidth,maxKWidth:s.maxKWidth,zoomLevelCount:s.zoomLevels,dpr:L.value}),B.value=(0,n.kGapFromKWidth)(z.value,L.value);function dt(){}function ft(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 pt(t){t&&(0,e.nextTick)(()=>{if(!t.isConnected)return;let e=ft(t,180,80);N.value?.setTooltipSize(e)})}function mt(t){t&&(0,e.nextTick)(()=>{t.isConnected&&(yt.value=ft(t,120,60))})}let W=(0,e.ref)({x:0,y:0}),G=(0,e.ref)(!1),K=null;function gt(){K=null}function _t(e){return K||=e.getBoundingClientRect(),K}let q=(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}),vt=(0,e.ref)([]),yt=(0,e.ref)({width:220,height:120}),J=(0,e.computed)(()=>{let e=D.value,t=O.value;return!e||!t?{x:0,y:0}:{x:e.offsetLeft,y:e.offsetTop}}),bt=(0,e.computed)(()=>q.value.hoveredMarkerData),xt=(0,e.computed)(()=>q.value.hoveredCustomMarker),St=(0,e.computed)(()=>q.value.isDragging),Ct=(0,e.computed)(()=>q.value.isResizingPaneBoundary),wt=(0,e.computed)(()=>q.value.isHoveringPaneBoundary),Tt=(0,e.computed)(()=>q.value.hoveredPaneBoundaryId),Et=(0,e.computed)(()=>q.value.isHoveringRightAxis),Dt=(0,e.computed)(()=>q.value.hoveredIndex);(0,e.computed)(()=>q.value.crosshairIndex);let Ot=(0,e.computed)(()=>St.value?`grabbing`:Ct.value||wt.value?`ns-resize`:Dt.value===null?`crosshair`:`pointer`),kt=(0,e.computed)(()=>{let e=q.value.hoveredIndex;if(typeof e!=`number`)return null;I.value;let t=N.value?.getData();return t&&e>=0&&e<t.length?t[e]:null}),At=(0,e.computed)(()=>q.value.hoveredIndex),jt=(0,e.computed)(()=>q.value.tooltipPos),Mt=(0,e.computed)(()=>({x:jt.value.x+J.value.x,y:jt.value.y+J.value.y})),Nt=(0,e.computed)(()=>({left:`${Mt.value.x}px`,top:`${Mt.value.y}px`})),Y=(0,e.computed)(()=>({x:W.value.x+J.value.x,y:W.value.y+J.value.y})),Pt=(0,e.computed)(()=>({left:`${Y.value.x}px`,top:`${Y.value.y}px`})),Ft=(0,e.computed)(()=>q.value.tooltipAnchorPlacement),It=(0,e.computed)(()=>{let e=N.value?.viewport.peek(),t=D.value,n=e?.plotWidth??(t?t.clientWidth:0);return W.value.x+12+yt.value.width+12>n?`left-bottom`:`right-bottom`}),Lt=(0,e.computed)(()=>(I.value,N.value?.getData()??[]));function Rt(){ee.value?.toggleMenu()}function zt(e){ce.value=e}function Bt(e){if(me.value=e,e===`range-select`){V.value?.setTool(`cursor`),Me.value=null;return}Ye(),Fe(e)}function Vt(e){N.value?.handlePointerEvent(e,{onPointerDown:(e,t)=>!!(Xe(e,t)||V.value?.onPointerDown(e,t))})}function Ht(e){let t=D.value;if(t){let n=_t(t);W.value={x:e.clientX-n.left,y:e.clientY-n.top}}N.value?.handlePointerEvent(e,{onPointerMove:(e,t)=>Ze(e,t)?!0:V.value?.onPointerMove(e,t)?(Pe.value=V.value.getDrawings(),!0):!1})}function Ut(e){N.value?.handlePointerEvent(e,{onPointerUp:(e,t)=>!!(Qe(e,t)||V.value?.onPointerUp(e,t))})}function Wt(e){N.value?.handlePointerEvent(e)}function Gt(e){N.value?.handlePointerEvent(e)}function Kt(e){N.value?.handlePointerEvent(e)}function qt(e){N.value?.handlePointerEvent(e)}function Jt(e){N.value?.handlePointerEvent(e)}function Yt(){it(),N.value?.handleScrollEvent()}let Xt=(0,e.computed)(()=>s.rightAxisWidth+s.priceLabelWidth),Zt=(0,e.computed)(()=>(I.value,ue.value,z.value,B.value,L.value,N.value?.getContentWidth()??0));function X(e,t){N.value?.zoomToLevel(e,t)}i({scheduleRender:dt,addSubPane:Ce,removeSubPane:we,switchSubIndicator:De,clearAllSubPanes:Te,zoomToLevel:X,zoomIn:e=>X(R.value+1,e),zoomOut:e=>X(R.value-1,e),getZoomLevel:()=>R.value,getZoomLevelCount:()=>N.value?.getZoomLevelCount()??10,getController:()=>N.value});function Qt(){return e=>{e.preventDefault(),N.value?.handleWheelEvent(e)}}function $t(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,mcp:s.mcp})}function en(t){let n=t.paneLayout.subscribe(()=>{gt();let e=D.value&&parseInt(getComputedStyle(D.value).borderTopWidth)||0;vt.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(()=>{de.value={...t.paneRatios.peek()}}),i=t.viewport.subscribe(()=>{let n=t.viewport.peek();le.value++,L.value!==n.dpr&&(L.value=n.dpr),ue.value!==n.plotWidth&&(ue.value=n.plotWidth),(R.value!==n.zoomLevel||z.value!==n.kWidth||B.value!==n.kGap)&&(R.value=n.zoomLevel,z.value=n.kWidth,B.value=n.kGap),(0,e.nextTick)(()=>{requestAnimationFrame(()=>{at()})})}),a=t.data.subscribe(()=>{let e=t.data.peek();oe.value=e.length,I.value++,h.value=e.length===0}),o=t.dataLoading.subscribe(()=>{m.value=t.dataLoading.peek()}),s=t.theme.subscribe(()=>{let e=t.theme.peek();te.value=e,c(`themeChange`,e)}),l=je(t),u=t.comparisonColors.subscribe(()=>{fe.value=new Map(t.comparisonColors.peek())}),d=t.comparisonLoading.subscribe(()=>{pe.value=t.comparisonLoading.peek()});(0,e.onUnmounted)(()=>{i(),a(),o(),r(),n(),s(),l(),u(),d()})}function tn(e){let t=M.value?.getSettings()??{showVolumePriceMarkers:!0};P.value=t,ae(t.theme),e.updateSettingsFacade(t)}function nn(e){e.setTooltipAnchorPositioning(G.value),e.interactionState.subscribe(()=>{q.value=e.interactionState.peek()}),q.value=e.interactionState.peek(),L.value=e.viewport.peek().dpr}function rn(t){t.setDataFetcher(s.dataFetcher),F.value=new r.SemanticChartController(t),F.value.on(`config:error`,e=>{console.error(`Semantic config error:`,e)}),F.value.on(`config:ready`,()=>{Ee(s.semanticConfig),(0,e.nextTick)(()=>N.value?.scrollToRight())})}return(0,e.onMounted)(async()=>{G.value=!1;let e=D.value,t=O.value;if(!e||!t)return;let n=Qt();e.addEventListener(`wheel`,n,{passive:!1});let r=e.querySelector(`.canvas-layer`),i=e.querySelector(`.x-axis-canvas`),a=await $t(e,r,t.querySelector(`.right-axis-host`),i);!D.value||!O.value||(N.value=a,en(a),Ee(s.semanticConfig),tn(a),Re(a),nn(a),rn(a))}),(0,e.onUnmounted)(()=>{let e=N.value;e&&(N.value=null,e.dispose()),V.value=null}),(0,e.watch)(()=>s.yPaddingPx,e=>{N.value?.updateOptionsFacade({yPaddingPx:e})}),(0,e.watch)(()=>s.semanticConfig,async(e,t)=>{if(e&&e!==t){let t=await F.value?.applyConfig(e);t&&!t.success&&console.error(`Semantic config apply failed:`,t.errors)}},{deep:!0}),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`chartWrapperRef`,ref:A,class:`chart-wrapper`,"data-theme":(0,e.unref)(te),style:(0,e.normalizeStyle)((0,e.unref)(re))},[(0,e.createVNode)(Ar,{symbol:f.value,"k-line-level":l.value,"k-line-adjust":u.value,"symbol-loading":m.value,"symbol-error":h.value,"overlay-symbols":g.value,"comparison-colors":fe.value,"comparison-loading":pe.value,onAddOverlaySymbol:S,onRemoveOverlaySymbol:C,onKLineLevelChange:y,onKLineAdjustChange:b,onToggleIndicator:Rt,onSymbolChange:x},null,8,[`symbol`,`k-line-level`,`k-line-adjust`,`symbol-loading`,`symbol-error`,`overlay-symbols`,`comparison-colors`,`comparison-loading`]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`chart-stage`,{"is-dragging":St.value,"is-resizing-pane":Ct.value,"is-hovering-pane-separator":wt.value,"is-hovering-right-axis":Et.value,"is-hovering-kline":Dt.value!==null}])},[(0,e.createVNode)(Gn,{ref_key:`toolbarRef`,ref:M,"is-fullscreen":t.isFullscreen,onSelectTool:Bt,onToggleFullscreen:r[0]||=e=>n.$emit(`toggleFullscreen`),onZoomIn:r[1]||=e=>X(R.value+1),onZoomOut:r[2]||=e=>X(R.value-1),onSettingsChange:(0,e.unref)(ie)},null,8,[`is-fullscreen`,`onSettingsChange`]),(0,e.createElementVNode)(`div`,{class:`chart-main`,ref_key:`chartMainRef`,ref:O},[(0,e.createElementVNode)(`div`,Ur,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(vt.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.id,class:(0,e.normalizeClass)([`pane-separator-line`,{"is-active":Tt.value===t.id}]),style:(0,e.normalizeStyle)({top:`${t.top}px`})},null,6))),128))]),(0,e.createElementVNode)(`div`,{ref_key:`tooltipLayerRef`,ref:j,class:`tooltip-layer`},null,512),(0,e.createElementVNode)(`div`,{class:`chart-container`,style:(0,e.normalizeStyle)({cursor:Ot.value}),ref_key:`containerRef`,ref:D,onScrollPassive:Yt,onPointerdown:Vt,onPointermove:Ht,onPointerup:Ut,onPointerleave:Wt},[(0,e.createElementVNode)(`div`,{class:`scroll-content`,style:(0,e.normalizeStyle)({width:Zt.value+`px`})},[(0,e.createElementVNode)(`div`,Wr,[(0,e.createElementVNode)(`canvas`,Gr,null,512),(0,e.unref)(Ne)?((0,e.openBlock)(),(0,e.createBlock)(k,{key:0,drawing:(0,e.unref)(Ne),onUpdateStyle:(0,e.unref)(Ie),onDelete:(0,e.unref)(Le)},null,8,[`drawing`,`onUpdateStyle`,`onDelete`])):(0,e.createCommentVNode)(``,!0),(0,e.unref)(We)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:`range-selection-export`,onPointerdown:r[8]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointermove:r[9]||=(0,e.withModifiers)(()=>{},[`stop`]),onPointerup:r[10]||=(0,e.withModifiers)(()=>{},[`stop`])},[(0,e.withDirectives)((0,e.createElementVNode)(`input`,{class:`range-selection-export__label`,"onUpdate:modelValue":r[3]||=t=>(0,e.isRef)(H)?H.value=t:null,placeholder:(0,e.unref)(Ke)},null,8,Kr),[[e.vModelText,(0,e.unref)(H)]]),r[20]||=(0,e.createElementVNode)(`span`,{class:`range-selection-export__sep`},`~`,-1),(0,e.withDirectives)((0,e.createElementVNode)(`input`,{class:`range-selection-export__label`,"onUpdate:modelValue":r[4]||=t=>(0,e.isRef)(Be)?Be.value=t:null,placeholder:(0,e.unref)(qe)},null,8,qr),[[e.vModelText,(0,e.unref)(Be)]]),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn`,title:`批量设置`,onClick:r[5]||=(0,e.withModifiers)(e=>se.value=!0,[`stop`])},` 批量设置 `),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn`,title:`导出`,onClick:r[6]||=(0,e.withModifiers)((...t)=>(0,e.unref)($e)&&(0,e.unref)($e)(...t),[`stop`])},` 导出 `),(0,e.createElementVNode)(`button`,{type:`button`,class:`toolbar-btn delete-btn`,title:`删除选区`,onClick:r[7]||=(0,e.withModifiers)((...t)=>(0,e.unref)(Ye)&&(0,e.unref)(Ye)(...t),[`stop`])},[...r[19]||=[(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)):(0,e.createCommentVNode)(``,!0)],512),(0,e.unref)(Je)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`range-selection-overlay`,{"is-dragging":(0,e.unref)(ze).isDragging}]),style:(0,e.normalizeStyle)((0,e.unref)(Je)),"aria-label":`已选择的 K 线区间`},[(0,e.unref)(We)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`range-selection-handle range-selection-handle--left`,onPointerdown:r[11]||=(0,e.withModifiers)(t=>(0,e.unref)(tt)(`left`,t),[`stop`]),onPointermove:r[12]||=(0,e.withModifiers)(t=>(0,e.unref)(nt)(t),[`stop`]),onPointerup:r[13]||=(0,e.withModifiers)(t=>(0,e.unref)(U)(t),[`stop`])},null,32)):(0,e.createCommentVNode)(``,!0),(0,e.unref)(We)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:`range-selection-handle range-selection-handle--right`,onPointerdown:r[14]||=(0,e.withModifiers)(t=>(0,e.unref)(tt)(`right`,t),[`stop`]),onPointermove:r[15]||=(0,e.withModifiers)(t=>(0,e.unref)(nt)(t),[`stop`]),onPointerup:r[16]||=(0,e.withModifiers)(t=>(0,e.unref)(U)(t),[`stop`])},null,32)):(0,e.createCommentVNode)(``,!0)],6)):(0,e.createCommentVNode)(``,!0)],4)],36),j.value?((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{key:0,to:j.value},[kt.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`tooltip-anchor kline-tooltip-anchor`,{"use-anchor":G.value}]),style:(0,e.normalizeStyle)(Nt.value)},null,6)):(0,e.createCommentVNode)(``,!0),bt.value||xt.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`tooltip-anchor marker-tooltip-anchor`,{"use-anchor":G.value}]),style:(0,e.normalizeStyle)(Pt.value)},null,6)):(0,e.createCommentVNode)(``,!0),kt.value?((0,e.openBlock)(),(0,e.createBlock)(rt,{key:2,k:kt.value,index:At.value,data:Lt.value,pos:Mt.value,"set-el":pt,"use-anchor":G.value,"anchor-placement":Ft.value,"up-color":(0,e.unref)(ne).upColor,"down-color":(0,e.unref)(ne).downColor,timezone:s.timezone,"show-time":d.value},null,8,[`k`,`index`,`data`,`pos`,`use-anchor`,`anchor-placement`,`up-color`,`down-color`,`timezone`,`show-time`])):(0,e.createCommentVNode)(``,!0),bt.value||xt.value?((0,e.openBlock)(),(0,e.createBlock)(ot,{key:3,marker:bt.value||xt.value,pos:Y.value,"use-anchor":G.value,"anchor-placement":It.value,"set-el":mt},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:Xt.value+`px`}),onPointerdown:Gt,onPointermove:Kt,onPointerup:qt,onPointerleave:Jt},null,36)],512)],2),(0,e.createVNode)(Vr,{progress:(0,e.unref)(et),onClose:r[17]||=e=>et.value=null},null,8,[`progress`]),(0,e.createVNode)(Pr,{show:se.value,onClose:r[18]||=e=>se.value=!1,onApply:zt},null,8,[`show`]),(0,e.createVNode)(Ue,{ref_key:`indicatorSelectorRef`,ref:ee,"active-indicators":(0,e.unref)(_e),"indicator-params":(0,e.unref)(ve),onToggle:(0,e.unref)(Oe),onUpdateParams:(0,e.unref)(ke),onReorderSubIndicators:(0,e.unref)(Ae)},null,8,[`active-indicators`,`indicator-params`,`onToggle`,`onUpdateParams`,`onReorderSubIndicators`])],12,Hr))}}),[[`__scopeId`,`data-v-74f0a50b`]]),Yr={name:`@363045841yyt/klinechart`,version:`0.8.5`,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:{"@363045841yyt/klinechart-ai-runtime":`workspace:*`,"@arethetypeswrong/cli":`^0.18.3`,"@size-limit/preset-small-lib":`^12.1.0`,"@vitejs/plugin-vue":`^6.0.7`,"@vue/test-utils":`^2.4.11`,"cross-env":`^7.0.3`,jsdom:`^29.1.1`,publint:`^0.3.21`,"size-limit":`^12.1.0`,typescript:`~6.0.3`,"unplugin-icons":`^23.0.1`,vite:`^8.0.16`,"vite-plugin-babel":`^1.7.3`,"vite-plugin-css-injected-by-js":`^5.0.1`,"vite-plugin-dts":`^5.0.2`,vitest:`^4.1.8`,vue:`^3.5.35`}}.version,Xr=null;function Zr(e){Xr=e}function Qr(e){if(e.container==null)throw Error("[@363045841yyt/klinechart] createChart: `container` is required and must be a non-null HTMLElement");if(Xr===null)throw Error(`[@363045841yyt/klinechart] createChart: no ChartController factory registered. Call __setControllerFactory(...) before mounting (the core package wires this in production).`);return Xr(e)}function $(t){let n=(0,e.shallowRef)(t.peek());return(0,e.onScopeDispose)(t.subscribe(()=>{n.value=t.peek()})),n}function $r(t,n){let r=(0,e.shallowRef)(null),i=!1,a=e=>{if(e==null||r.value!=null)return;let t=Qr({...n,container:e}),a=e=>{if(i){e.dispose();return}r.value=e};typeof t.then==`function`?t.then(a):a(t)};a(t.value);let o=(0,e.watch)(t,e=>{a(e)},{immediate:!0,flush:`post`}),s=()=>{i=!0,o();let e=r.value;e!=null&&(e.dispose(),r.value=null)};return(0,e.onScopeDispose)(s),(0,e.onBeforeUnmount)(s),{chart:r}}function ei(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 ti(t){let n=(0,e.shallowRef)(t.interactionState.peek());return(0,e.onScopeDispose)(t.interactionState.subscribe(()=>{n.value=t.interactionState.peek()})),n}function ni(t){let n=(0,e.shallowRef)(t.paneRatios.peek());return(0,e.onScopeDispose)(t.paneRatios.subscribe(()=>{n.value=t.paneRatios.peek()})),n}function ri(t){let n=(0,e.shallowRef)(t.viewport.peek());return(0,e.onScopeDispose)(t.viewport.subscribe(()=>{n.value=t.viewport.peek()})),n}function ii(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 ai=(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),s=!0,c=t=>{if(!s){t.dispose();return}o.value=t,n(`ready`,t);let r=()=>{let e=t.viewport.peek();n(`zoomLevelChange`,e.zoomLevel,e.kWidth)};r(),(0,e.onScopeDispose)(t.viewport.subscribe(r))};(0,e.onMounted)(()=>{let n=i.value;n!=null&&(a.run(()=>{let e=Qr({container:n,data:t.data,initialZoomLevel:t.initialZoomLevel,zoomLevels:t.zoomLevels,theme:t.theme});typeof e.then==`function`?e.then(c):c(e)}),(0,e.watch)(()=>t.data,e=>{o.value?.setData(e)}),(0,e.watch)(()=>t.theme,e=>{o.value?.setTheme(e)}))}),(0,e.onUnmounted)(()=>{s=!1,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 l=e=>{i.value=e??null};return()=>(0,e.h)(`div`,{ref:l,class:[`klinechart-quant-root`,t.containerClass].filter(Boolean).join(` `),style:{width:`100%`,height:`100%`}})}}),oi={install(e){e.component(`KLineChart`,ai)}};Zr(t.createChartController),Object.defineProperty(exports,"CORE_VERSION",{enumerable:!0,get:function(){return t.VERSION}}),exports.DrawingStyleToolbar=k,exports.IndicatorParams=L,exports.IndicatorSelector=Ue,exports.KLineChart=ai,exports.KLineChartVue=Jr,exports.KLineTooltip=rt,exports.KMapPlugin=oi,exports.LeftToolbar=Gn,exports.MarkerTooltip=ot,exports.VERSION=Yr,exports.__setControllerFactory=Zr,exports.coreSignalToVueRef=$,exports.createChart=Qr,exports.useChart=$r,exports.useIndicatorSelector=ii,exports.useIndicators=ei,exports.useInteractionState=ti,exports.usePaneRatios=ni,exports.useViewport=ri;
|
|
9
|
+
002415`,rows:`8`,spellcheck:`false`},null,512),[[e.vModelText,a.value]])]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-2311afd3`]]),Ir={class:`export-body`},Lr={class:`export-label`},Rr={class:`export-bar-track`},zr={class:`export-counter`},Br=m((0,e.defineComponent)({__name:`ExportProgressDialog`,props:{progress:{}},emits:[`close`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.computed)(()=>!r.progress||r.progress.total<=0?0:Math.min(100,Math.round(r.progress.current/r.progress.total*100)));return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)(P,{title:`导出数据`,show:!!t.progress,"z-index":1100,"close-on-overlay":!1,"footer-align":`center`,onClose:r[1]||=e=>i(`close`)},{footer:(0,e.withCtx)(()=>[t.progress&&t.progress.current===t.progress.total?((0,e.openBlock)(),(0,e.createElementBlock)(`button`,{key:0,class:`export-done-btn`,onClick:r[0]||=e=>i(`close`)},` 完成 `)):(0,e.createCommentVNode)(``,!0)]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,Ir,[(0,e.createElementVNode)(`div`,Lr,(0,e.toDisplayString)(t.progress?.label),1),(0,e.createElementVNode)(`div`,Rr,[(0,e.createElementVNode)(`div`,{class:`export-bar-fill`,style:(0,e.normalizeStyle)({width:a.value+`%`})},null,4)]),(0,e.createElementVNode)(`div`,zr,(0,e.toDisplayString)(t.progress?.current??0)+` / `+(0,e.toDisplayString)(t.progress?.total??0),1)])]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-63b609dd`]]),Vr=[`data-theme`],Hr={class:`pane-separator-layer`,"aria-hidden":`true`},Ur={class:`canvas-layer`,ref:`canvasLayerRef`},Wr={class:`x-axis-canvas`,ref:`xAxisCanvasRef`},Gr=m((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},timezone:{default:`Asia/Shanghai`},mcp:{}},emits:[`zoomLevelChange`,`toggleFullscreen`,`themeChange`,`kLineLevelChange`,`kLineAdjustChange`],setup(t,{expose:i,emit:o}){let s=t,c=o,l=(0,e.ref)(s.semanticConfig?.data?.period??`daily`),u=(0,e.ref)(s.semanticConfig?.data?.adjust??`none`),d=(0,e.computed)(()=>l.value.includes(`min`)),f=(0,e.ref)(`选择商品`),p=(0,e.ref)(null),m=(0,e.ref)(!1),h=(0,e.ref)(!1),g=(0,e.ref)([]),_=(0,e.ref)([]);function y(e){l.value=e,c(`kLineLevelChange`,e),T()}function b(e){u.value=e,c(`kLineAdjustChange`,e),T()}function x(e){h.value=!1,f.value=e.code,p.value=e,T()}function S(e){p.value?.code!==e.code&&(g.value.includes(e.code)||(_.value=[..._.value,e],g.value=_.value.map(e=>e.code),ee(),M.value?.addComparisonSymbol(w(e))))}function C(e){_.value=_.value.filter(t=>t.code!==e),g.value=_.value.map(e=>e.code),M.value?.removeComparisonSymbol(e)}function w(e){return{symbol:e.code,exchange:e.exchange,period:l.value,source:e.source,startDate:s.semanticConfig?.data?.startDate??``,endDate:s.semanticConfig?.data?.endDate??``,adjust:u.value}}function T(){p.value&&M.value?.setSymbols([w(p.value),..._.value.map(w)])}function ee(){if(N.value.axisType===`percent`)return;let e={...N.value,axisType:`percent`};N.value=e,M.value?.updateSettingsFacade(e);try{localStorage.setItem(a.SETTINGS_STORAGE_KEY,JSON.stringify(e))}catch{}}let E=(0,e.ref)(null),D=(0,e.ref)(null),O=(0,e.ref)(null),k=(0,e.ref)(null),A=(0,e.ref)(null),j=(0,e.ref)(null);v(O);let M=(0,e.shallowRef)(null),{chartTheme:ne,chartSettings:N,tooltipColors:re,themeCssVars:ie,handleSettingsChange:ae,applyThemeFromSettings:P}=ht(M),F=(0,e.shallowRef)(null),oe=(0,e.ref)(0),I=(0,e.ref)(0),se=(0,e.ref)(!1),ce=(0,e.ref)([]),le=(0,e.ref)(0),L=(0,e.ref)(1),R=(0,e.ref)(s.initialZoomLevel??1),z=(0,e.ref)(0),B=(0,e.ref)(1),ue=(0,e.ref)(0),de=(0,e.ref)({}),fe=(0,e.ref)(new Map),pe=(0,e.ref)(!1),me=(0,e.ref)(`cursor`),{mainActiveIndicators:he,subActiveIndicators:ge,activeIndicators:_e,indicatorParams:ve,subPanes:ye,buildPaneLayoutIntent:be,getDefaultParams:xe,isSubPaneIndicator:Se,addSubPane:Ce,removeSubPane:we,clearAllSubPanes:Te,initIndicatorsFromConfig:Ee,switchSubIndicator:De,handleIndicatorToggle:Oe,handleUpdateParams:ke,handleReorderSubIndicators:Ae,setupIndicatorSubscriptions:je}=gt(M,de),{drawingController:V,selectedDrawingId:Me,selectedDrawing:Ne,drawings:Pe,handleSelectTool:Fe,onUpdateDrawingStyle:Ie,onDeleteDrawing:Le,setupDrawing:Re}=_t(M),{rangeSelection:ze,customStartDate:Be,customEndDate:Ve,containerScrollLeft:He,isRangeSelectActive:Ue,rangeSelectionReady:Ge,rangeSelectionBounds:Ke,rangeSelectionCount:qe,rangeSelectionStartLabel:Je,rangeSelectionEndLabel:Ye,rangeSelectionOverlayStyle:Xe,clearRangeSelection:Ze,handleRangePointerDown:Qe,handleRangePointerMove:$e,handleRangePointerUp:et,exportRangeToCsv:tt,exportingProgress:nt,onEdgePointerDown:rt,onEdgePointerMove:H,onEdgePointerUp:at,onScroll:ot,syncScrollLeft:ct}=St({controller:M,activeToolId:me,containerRef:E,dataVersion:I,viewportVersion:le,dataFetcher:(0,e.computed)(()=>s.dataFetcher),batchStockCodes:ce}),lt=R.value;z.value=(0,n.zoomLevelToKWidth)(lt,{minKWidth:s.minKWidth,maxKWidth:s.maxKWidth,zoomLevelCount:s.zoomLevels,dpr:L.value}),B.value=(0,n.kGapFromKWidth)(z.value,L.value);function ut(){}function ft(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 pt(t){t&&(0,e.nextTick)(()=>{if(!t.isConnected)return;let e=ft(t,180,80);M.value?.setTooltipSize(e)})}function vt(t){t&&(0,e.nextTick)(()=>{t.isConnected&&(Ct.value=ft(t,120,60))})}let U=(0,e.ref)({x:0,y:0}),W=(0,e.ref)(!1),G=null;function yt(){G=null}function bt(e){return G||=e.getBoundingClientRect(),G}let K=(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}),xt=(0,e.ref)([]),Ct=(0,e.ref)({width:220,height:120}),q=(0,e.computed)(()=>{let e=E.value,t=D.value;return!e||!t?{x:0,y:0}:{x:e.offsetLeft,y:e.offsetTop}}),wt=(0,e.computed)(()=>K.value.hoveredMarkerData),Tt=(0,e.computed)(()=>K.value.hoveredCustomMarker),Et=(0,e.computed)(()=>K.value.isDragging),Dt=(0,e.computed)(()=>K.value.isResizingPaneBoundary),Ot=(0,e.computed)(()=>K.value.isHoveringPaneBoundary),kt=(0,e.computed)(()=>K.value.hoveredPaneBoundaryId),At=(0,e.computed)(()=>K.value.isHoveringRightAxis),jt=window.matchMedia(`(pointer: coarse)`).matches,Mt=(0,e.computed)(()=>K.value.hoveredIndex);(0,e.computed)(()=>K.value.crosshairIndex);let Nt=(0,e.computed)(()=>Et.value?`grabbing`:Dt.value||Ot.value?`ns-resize`:Mt.value===null?`crosshair`:`pointer`),Pt=(0,e.computed)(()=>{let e=K.value.hoveredIndex;if(typeof e!=`number`)return null;I.value;let t=M.value?.getData();return t&&e>=0&&e<t.length?t[e]:null}),Ft=(0,e.computed)(()=>K.value.hoveredIndex),It=(0,e.computed)(()=>K.value.tooltipPos),Lt=(0,e.computed)(()=>({x:It.value.x+q.value.x,y:It.value.y+q.value.y})),Rt=(0,e.computed)(()=>({left:`${Lt.value.x}px`,top:`${Lt.value.y}px`})),zt=(0,e.computed)(()=>({x:U.value.x+q.value.x,y:U.value.y+q.value.y})),Bt=(0,e.computed)(()=>({left:`${zt.value.x}px`,top:`${zt.value.y}px`})),Vt=(0,e.computed)(()=>K.value.tooltipAnchorPlacement),Ht=(0,e.computed)(()=>{let e=M.value?.viewport.peek(),t=E.value,n=e?.plotWidth??(t?t.clientWidth:0);return U.value.x+12+Ct.value.width+12>n?`left-bottom`:`right-bottom`}),Ut=(0,e.computed)(()=>(I.value,M.value?.getData()??[]));function Wt(){j.value?.toggleMenu()}function Gt(e){ce.value=e}function Kt(e){if(me.value=e,e===`range-select`){V.value?.setTool(`cursor`),Me.value=null;return}Ze(),Fe(e)}function qt(e){M.value?.handlePointerEvent(e,{onPointerDown:(e,t)=>!!(Qe(e,t)||V.value?.onPointerDown(e,t))})}function Jt(e){let t=E.value;if(t){let n=bt(t);U.value={x:e.clientX-n.left,y:e.clientY-n.top}}M.value?.handlePointerEvent(e,{onPointerMove:(e,t)=>$e(e,t)?!0:V.value?.onPointerMove(e,t)?(Pe.value=V.value.getDrawings(),!0):!1})}function Yt(e){M.value?.handlePointerEvent(e,{onPointerUp:(e,t)=>!!(et(e,t)||V.value?.onPointerUp(e,t))})}function Xt(e){M.value?.handlePointerEvent(e)}function Zt(e){M.value?.handlePointerEvent(e)}function Qt(e){M.value?.handlePointerEvent(e)}function $t(e){M.value?.handlePointerEvent(e)}function en(e){M.value?.handlePointerEvent(e)}function tn(){ot(),M.value?.handleScrollEvent()}let nn=(0,e.computed)(()=>s.rightAxisWidth+s.priceLabelWidth),rn=(0,e.computed)(()=>(I.value,ue.value,z.value,B.value,L.value,M.value?.getContentWidth()??0));function J(e,t){M.value?.zoomToLevel(e,t)}i({scheduleRender:ut,addSubPane:Ce,removeSubPane:we,switchSubIndicator:De,clearAllSubPanes:Te,zoomToLevel:J,zoomIn:e=>J(R.value+1,e),zoomOut:e=>J(R.value-1,e),getZoomLevel:()=>R.value,getZoomLevelCount:()=>M.value?.getZoomLevelCount()??10,getController:()=>M.value});function an(){return e=>{e.preventDefault(),M.value?.handleWheelEvent(e)}}function on(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,mcp:s.mcp})}function sn(t){let n=t.paneLayout.subscribe(()=>{yt();let e=E.value&&parseInt(getComputedStyle(E.value).borderTopWidth)||0;xt.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(()=>{de.value={...t.paneRatios.peek()}}),i=t.viewport.subscribe(()=>{let n=t.viewport.peek();le.value++,L.value!==n.dpr&&(L.value=n.dpr),ue.value!==n.plotWidth&&(ue.value=n.plotWidth),(R.value!==n.zoomLevel||z.value!==n.kWidth||B.value!==n.kGap)&&(R.value=n.zoomLevel,z.value=n.kWidth,B.value=n.kGap),(0,e.nextTick)(()=>{requestAnimationFrame(()=>{ct()})})}),a=t.data.subscribe(()=>{let e=t.data.peek();oe.value=e.length,I.value++,h.value=e.length===0}),o=t.dataLoading.subscribe(()=>{m.value=t.dataLoading.peek()}),s=t.theme.subscribe(()=>{let e=t.theme.peek();ne.value=e,c(`themeChange`,e)}),l=je(t),u=t.comparisonColors.subscribe(()=>{fe.value=new Map(t.comparisonColors.peek())}),d=t.comparisonLoading.subscribe(()=>{pe.value=t.comparisonLoading.peek()});(0,e.onUnmounted)(()=>{i(),a(),o(),r(),n(),s(),l(),u(),d()})}function cn(e){let t=A.value?.getSettings()??{showVolumePriceMarkers:!0};N.value=t,P(t.theme),e.updateSettingsFacade(t)}function ln(e){e.setTooltipAnchorPositioning(W.value),e.interactionState.subscribe(()=>{K.value=e.interactionState.peek()}),K.value=e.interactionState.peek(),L.value=e.viewport.peek().dpr}function un(t){t.setDataFetcher(s.dataFetcher),F.value=new r.SemanticChartController(t),F.value.on(`config:error`,e=>{console.error(`Semantic config error:`,e)}),F.value.on(`config:ready`,()=>{Ee(s.semanticConfig),(0,e.nextTick)(()=>M.value?.scrollToRight())})}return(0,e.onMounted)(async()=>{W.value=!1;let e=E.value,t=D.value;if(!e||!t)return;let n=an();e.addEventListener(`wheel`,n,{passive:!1});let r=e.querySelector(`.canvas-layer`),i=e.querySelector(`.x-axis-canvas`),a=await on(e,r,t.querySelector(`.right-axis-host`),i);!E.value||!D.value||(M.value=a,sn(a),Ee(s.semanticConfig),cn(a),Re(a),ln(a),un(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 F.value?.applyConfig(e);t&&!t.success&&console.error(`Semantic config apply failed:`,t.errors)}},{deep:!0}),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`chartWrapperRef`,ref:O,class:`chart-wrapper`,"data-theme":(0,e.unref)(ne),style:(0,e.normalizeStyle)((0,e.unref)(ie))},[(0,e.createVNode)(Pr,{symbol:f.value,"k-line-level":l.value,"k-line-adjust":u.value,"symbol-loading":m.value,"symbol-error":h.value,"overlay-symbols":g.value,"comparison-colors":fe.value,"comparison-loading":pe.value,onAddOverlaySymbol:S,onRemoveOverlaySymbol:C,onKLineLevelChange:y,onKLineAdjustChange:b,onToggleIndicator:Wt,onSymbolChange:x},null,8,[`symbol`,`k-line-level`,`k-line-adjust`,`symbol-loading`,`symbol-error`,`overlay-symbols`,`comparison-colors`,`comparison-loading`]),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`chart-stage`,{"is-dragging":Et.value,"is-resizing-pane":Dt.value,"is-hovering-pane-separator":Ot.value,"is-hovering-right-axis":At.value,"is-hovering-kline":Mt.value!==null}])},[(0,e.createVNode)(Yn,{ref_key:`toolbarRef`,ref:A,"is-fullscreen":t.isFullscreen,onSelectTool:Kt,onToggleFullscreen:r[0]||=e=>n.$emit(`toggleFullscreen`),onZoomIn:r[1]||=e=>J(R.value+1),onZoomOut:r[2]||=e=>J(R.value-1),onSettingsChange:(0,e.unref)(ae)},null,8,[`is-fullscreen`,`onSettingsChange`]),(0,e.createElementVNode)(`div`,{class:`chart-main`,ref_key:`chartMainRef`,ref:D},[(0,e.createElementVNode)(`div`,Hr,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(xt.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.id,class:(0,e.normalizeClass)([`pane-separator-line`,{"is-active":kt.value===t.id}]),style:(0,e.normalizeStyle)({top:`${t.top}px`})},null,6))),128))]),(0,e.createElementVNode)(`div`,{ref_key:`tooltipLayerRef`,ref:k,class:`tooltip-layer`},null,512),(0,e.createElementVNode)(`div`,{class:`chart-container`,style:(0,e.normalizeStyle)({cursor:Nt.value}),ref_key:`containerRef`,ref:E,onScrollPassive:tn,onPointerdown:qt,onPointermove:Jt,onPointerup:Yt,onPointerleave:Xt},[(0,e.createElementVNode)(`div`,{class:`scroll-content`,style:(0,e.normalizeStyle)({width:rn.value+`px`})},[(0,e.createElementVNode)(`div`,Ur,[(0,e.createElementVNode)(`canvas`,Wr,null,512),(0,e.createVNode)(mt,null,{default:(0,e.withCtx)(()=>[(0,e.unref)(Ge)?((0,e.openBlock)(),(0,e.createBlock)(dt,{key:0,"start-date":(0,e.unref)(Be),"onUpdate:startDate":r[3]||=t=>(0,e.isRef)(Be)?Be.value=t:null,"end-date":(0,e.unref)(Ve),"onUpdate:endDate":r[4]||=t=>(0,e.isRef)(Ve)?Ve.value=t:null,"start-label":(0,e.unref)(Je),"end-label":(0,e.unref)(Ye),count:(0,e.unref)(qe),onExport:(0,e.unref)(tt),onClear:(0,e.unref)(Ze),onBatchSetting:r[5]||=e=>se.value=!0},null,8,[`start-date`,`end-date`,`start-label`,`end-label`,`count`,`onExport`,`onClear`])):(0,e.createCommentVNode)(``,!0),(0,e.unref)(Ne)?((0,e.openBlock)(),(0,e.createBlock)(te,{key:1,drawing:(0,e.unref)(Ne),onUpdateStyle:(0,e.unref)(Ie),onDelete:(0,e.unref)(Le)},null,8,[`drawing`,`onUpdateStyle`,`onDelete`])):(0,e.createCommentVNode)(``,!0)]),_:1})],512),(0,e.unref)(Xe)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`range-selection-overlay`,{"is-dragging":(0,e.unref)(ze).isDragging}]),style:(0,e.normalizeStyle)((0,e.unref)(Xe)),"aria-label":`已选择的 K 线区间`},[(0,e.unref)(Ge)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`range-selection-handle range-selection-handle--left`,onPointerdown:r[6]||=(0,e.withModifiers)(t=>(0,e.unref)(rt)(`left`,t),[`stop`]),onPointermove:r[7]||=(0,e.withModifiers)(t=>(0,e.unref)(H)(t),[`stop`]),onPointerup:r[8]||=(0,e.withModifiers)(t=>(0,e.unref)(at)(t),[`stop`])},null,32)):(0,e.createCommentVNode)(``,!0),(0,e.unref)(Ge)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:`range-selection-handle range-selection-handle--right`,onPointerdown:r[9]||=(0,e.withModifiers)(t=>(0,e.unref)(rt)(`right`,t),[`stop`]),onPointermove:r[10]||=(0,e.withModifiers)(t=>(0,e.unref)(H)(t),[`stop`]),onPointerup:r[11]||=(0,e.withModifiers)(t=>(0,e.unref)(at)(t),[`stop`])},null,32)):(0,e.createCommentVNode)(``,!0)],6)):(0,e.createCommentVNode)(``,!0)],4)],36),k.value?((0,e.openBlock)(),(0,e.createBlock)(e.Teleport,{key:0,to:k.value},[Pt.value&&!(0,e.unref)(jt)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`tooltip-anchor kline-tooltip-anchor`,{"use-anchor":W.value}]),style:(0,e.normalizeStyle)(Rt.value)},null,6)):(0,e.createCommentVNode)(``,!0),wt.value||Tt.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`tooltip-anchor marker-tooltip-anchor`,{"use-anchor":W.value}]),style:(0,e.normalizeStyle)(Bt.value)},null,6)):(0,e.createCommentVNode)(``,!0),Pt.value&&!(0,e.unref)(jt)?((0,e.openBlock)(),(0,e.createBlock)(it,{key:2,k:Pt.value,index:Ft.value,data:Ut.value,pos:Lt.value,"set-el":pt,"use-anchor":W.value,"anchor-placement":Vt.value,"up-color":(0,e.unref)(re).upColor,"down-color":(0,e.unref)(re).downColor,timezone:s.timezone,"show-time":d.value},null,8,[`k`,`index`,`data`,`pos`,`use-anchor`,`anchor-placement`,`up-color`,`down-color`,`timezone`,`show-time`])):(0,e.createCommentVNode)(``,!0),wt.value||Tt.value?((0,e.openBlock)(),(0,e.createBlock)(st,{key:3,marker:wt.value||Tt.value,pos:zt.value,"use-anchor":W.value,"anchor-placement":Ht.value,"set-el":vt},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:nn.value+`px`}),onPointerdown:Zt,onPointermove:Qt,onPointerup:$t,onPointerleave:en},null,36)],512)],2),(0,e.createVNode)(Br,{progress:(0,e.unref)(nt),onClose:r[12]||=e=>nt.value=null},null,8,[`progress`]),(0,e.createVNode)(Fr,{show:se.value,onClose:r[13]||=e=>se.value=!1,onApply:Gt},null,8,[`show`]),(0,e.createVNode)(We,{ref_key:`indicatorSelectorRef`,ref:j,"active-indicators":(0,e.unref)(_e),"indicator-params":(0,e.unref)(ve),onToggle:(0,e.unref)(Oe),onUpdateParams:(0,e.unref)(ke),onReorderSubIndicators:(0,e.unref)(Ae)},null,8,[`active-indicators`,`indicator-params`,`onToggle`,`onUpdateParams`,`onReorderSubIndicators`])],12,Vr))}}),[[`__scopeId`,`data-v-44244ba7`]]),Kr={name:`@363045841yyt/klinechart`,version:`0.8.6`,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:{"@363045841yyt/klinechart-ai-runtime":`workspace:*`,"@arethetypeswrong/cli":`^0.18.3`,"@size-limit/preset-small-lib":`^12.1.0`,"@vitejs/plugin-vue":`^6.0.7`,"@vue/test-utils":`^2.4.11`,"cross-env":`^7.0.3`,jsdom:`^29.1.1`,publint:`^0.3.21`,"size-limit":`^12.1.0`,typescript:`~6.0.3`,"unplugin-icons":`^23.0.1`,vite:`^8.0.16`,"vite-plugin-babel":`^1.7.3`,"vite-plugin-css-injected-by-js":`^5.0.1`,"vite-plugin-dts":`^5.0.2`,vitest:`^4.1.8`,vue:`^3.5.35`}}.version,qr=null;function Jr(e){qr=e}function Yr(e){if(e.container==null)throw Error("[@363045841yyt/klinechart] createChart: `container` is required and must be a non-null HTMLElement");if(qr===null)throw Error(`[@363045841yyt/klinechart] createChart: no ChartController factory registered. Call __setControllerFactory(...) before mounting (the core package wires this in production).`);return qr(e)}function $(t){let n=(0,e.shallowRef)(t.peek());return(0,e.onScopeDispose)(t.subscribe(()=>{n.value=t.peek()})),n}function Xr(t,n){let r=(0,e.shallowRef)(null),i=!1,a=e=>{if(e==null||r.value!=null)return;let t=Yr({...n,container:e}),a=e=>{if(i){e.dispose();return}r.value=e};typeof t.then==`function`?t.then(a):a(t)};a(t.value);let o=(0,e.watch)(t,e=>{a(e)},{immediate:!0,flush:`post`}),s=()=>{i=!0,o();let e=r.value;e!=null&&(e.dispose(),r.value=null)};return(0,e.onScopeDispose)(s),(0,e.onBeforeUnmount)(s),{chart:r}}function Zr(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 Qr(t){let n=(0,e.shallowRef)(t.interactionState.peek());return(0,e.onScopeDispose)(t.interactionState.subscribe(()=>{n.value=t.interactionState.peek()})),n}function $r(t){let n=(0,e.shallowRef)(t.paneRatios.peek());return(0,e.onScopeDispose)(t.paneRatios.subscribe(()=>{n.value=t.paneRatios.peek()})),n}function ei(t){let n=(0,e.shallowRef)(t.viewport.peek());return(0,e.onScopeDispose)(t.viewport.subscribe(()=>{n.value=t.viewport.peek()})),n}function ti(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 ni=(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),s=!0,c=t=>{if(!s){t.dispose();return}o.value=t,n(`ready`,t);let r=()=>{let e=t.viewport.peek();n(`zoomLevelChange`,e.zoomLevel,e.kWidth)};r(),(0,e.onScopeDispose)(t.viewport.subscribe(r))};(0,e.onMounted)(()=>{let n=i.value;n!=null&&(a.run(()=>{let e=Yr({container:n,data:t.data,initialZoomLevel:t.initialZoomLevel,zoomLevels:t.zoomLevels,theme:t.theme});typeof e.then==`function`?e.then(c):c(e)}),(0,e.watch)(()=>t.data,e=>{o.value?.setData(e)}),(0,e.watch)(()=>t.theme,e=>{o.value?.setTheme(e)}))}),(0,e.onUnmounted)(()=>{s=!1,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 l=e=>{i.value=e??null};return()=>(0,e.h)(`div`,{ref:l,class:[`klinechart-quant-root`,t.containerClass].filter(Boolean).join(` `),style:{width:`100%`,height:`100%`}})}}),ri={install(e){e.component(`KLineChart`,ni)}};Jr(t.createChartController),Object.defineProperty(exports,"CORE_VERSION",{enumerable:!0,get:function(){return t.VERSION}}),exports.DrawingStyleToolbar=te,exports.IndicatorParams=fe,exports.IndicatorSelector=We,exports.KLineChart=ni,exports.KLineChartVue=Gr,exports.KLineTooltip=it,exports.KMapPlugin=ri,exports.LeftToolbar=Yn,exports.MarkerTooltip=st,exports.VERSION=Kr,exports.__setControllerFactory=Jr,exports.coreSignalToVueRef=$,exports.createChart=Yr,exports.useChart=Xr,exports.useIndicatorSelector=ti,exports.useIndicators=Zr,exports.useInteractionState=Qr,exports.usePaneRatios=$r,exports.useViewport=ei;
|