@qfo/qfchart 0.8.4 → 0.8.5

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.
@@ -14,31 +14,32 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- (function(T,$t){typeof exports=="object"&&typeof module<"u"?$t(exports,require("echarts")):typeof define=="function"&&define.amd?define(["exports","echarts"],$t):(T=typeof globalThis<"u"?globalThis:T||self,$t(T.QFChart={},T.echarts))})(this,function(T,$t){"use strict";function ii(h){var t=Object.create(null);return h&&Object.keys(h).forEach(function(e){if(e!=="default"){var i=Object.getOwnPropertyDescriptor(h,e);Object.defineProperty(t,e,i.get?i:{enumerable:!0,get:function(){return h[e]}})}}),t.default=h,Object.freeze(t)}var D=ii($t),ni=Object.defineProperty,si=(h,t,e)=>t in h?ni(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,vt=(h,t,e)=>(si(h,typeof t!="symbol"?t+"":t,e),e);class oi{constructor(t,e,i,n={}){vt(this,"id"),vt(this,"plots"),vt(this,"paneIndex"),vt(this,"height"),vt(this,"collapsed"),vt(this,"titleColor"),vt(this,"controls"),this.id=t,this.plots=e,this.paneIndex=i,this.height=n.height,this.collapsed=n.collapsed||!1,this.titleColor=n.titleColor,this.controls=n.controls}toggleCollapse(){this.collapsed=!this.collapsed}isVisible(){return!this.collapsed}updateData(t){Object.keys(t).forEach(e=>{if(!this.plots[e])this.plots[e]=t[e];else{const i=this.plots[e],n=t[e];if(!i.data)return;n.options&&(i.options={...i.options,...n.options});const r=new Map;i.data?.forEach(s=>{r.set(s.time,s)}),n.data?.forEach(s=>{r.set(s.time,s)}),i.data=Array.from(r.values()).sort((s,l)=>s.time-l.time)}})}}class X{static createMinFunction(t){return e=>{const i=(e.max-e.min)*(t/100);return e.min-i}}static createMaxFunction(t){return e=>{const i=(e.max-e.min)*(t/100);return e.max+i}}static autoDetectDecimals(t){if(!t||t.length===0)return 2;const e=t[t.length-1].close;if(e===0||!isFinite(e)||isNaN(e))return 2;const i=Math.abs(e);if(i>=1)return 2;const n=Math.ceil(-Math.log10(i));return Math.min(n+4,10)}static formatValue(t,e){return typeof t=="number"?t.toFixed(e):String(t)}}class Kt{static calculate(t,e,i,n=!1,r=null,s,l){let a=0;t>0&&(a=1/t*100);const o=i.yAxisPadding!==void 0?i.yAxisPadding:5,p=i.grid?.show===!0,u=i.grid?.lineColor??"#334155",d=i.grid?.lineOpacity??.5,g=i.grid?.borderColor??"#334155",c=i.grid?.borderShow===!0,y=i.layout?.left??"10%",f=i.layout?.right??"10%",x=Array.from(e.values()).map(E=>E.paneIndex).filter(E=>E>0).sort((E,Z)=>E-Z).filter((E,Z,K)=>K.indexOf(E)===Z),m=x.length>0,I=i.dataZoom?.visible??!0,v=i.dataZoom?.position??"top",k=i.dataZoom?.height??6,A=i.dataZoom?.start??0,w=i.dataZoom?.end??100;let b=8,C=92,_=-1;if(r)if(r==="main")_=0;else{const E=e.get(r);E&&(_=E.paneIndex)}if(_!==-1){const E=[],Z=[],K=[],B=[],lt=i.dataZoom?.start??50,zt=i.dataZoom?.end??100;(i.dataZoom?.zoomOnTouch??!0)&&B.push({type:"inside",xAxisIndex:"all",start:lt,end:zt,filterMode:"weakFilter"});const j=m?Math.max(...x):0,Q=[];for(let N=0;N<=j;N++){const et=N===_;E.push({left:y,right:f,top:et?"5%":"0%",height:et?"90%":"0%",show:et,containLabel:!1}),Z.push({type:"category",gridIndex:N,data:[],show:et,axisLabel:{show:et,color:"#94a3b8",fontFamily:i.fontFamily},axisLine:{show:et&&c,lineStyle:{color:g}},splitLine:{show:et&&p,lineStyle:{color:u,opacity:d}}});let Rt,Ot;if(N===0&&_===0?(Rt=i.yAxisMin!==void 0&&i.yAxisMin!=="auto"?i.yAxisMin:X.createMinFunction(o),Ot=i.yAxisMax!==void 0&&i.yAxisMax!=="auto"?i.yAxisMax:X.createMaxFunction(o)):(Rt=X.createMinFunction(o),Ot=X.createMaxFunction(o)),K.push({position:"right",gridIndex:N,show:et,scale:!0,min:Rt,max:Ot,axisLabel:{show:et,color:"#94a3b8",fontFamily:i.fontFamily,formatter:xt=>{if(i.yAxisLabelFormatter)return i.yAxisLabelFormatter(xt);const Ht=i.yAxisDecimalPlaces!==void 0?i.yAxisDecimalPlaces:X.autoDetectDecimals(s);return X.formatValue(xt,Ht)}},splitLine:{show:et&&p,lineStyle:{color:u,opacity:d}}}),N>0){const xt=Array.from(e.values()).find(Ht=>Ht.paneIndex===N);xt&&Q.push({index:N,height:et?90:0,top:et?5:0,isCollapsed:!1,indicatorId:xt.id,titleColor:xt.titleColor,controls:xt.controls})}}return{grid:E,xAxis:Z,yAxis:K,dataZoom:B,paneLayout:Q,mainPaneHeight:_===0?90:0,mainPaneTop:_===0?5:0,pixelToPercent:a,overlayYAxisMap:new Map,separatePaneYAxisOffset:1}}I?v==="top"?(b=k+4,C=95):(C=100-k-2,b=8):(b=5,C=95);let z=5;t>0&&(z=20/t*100);let S=75,$;if(i.layout?.mainPaneHeight!==void 0){const E=i.layout.mainPaneHeight;if(typeof E=="string"){const Z=parseFloat(E);isNaN(Z)||($=Z)}else typeof E=="number"&&($=E)}let L=[];if(m){const E=x.map(j=>{const Q=Array.from(e.values()).find(N=>N.paneIndex===j);return{index:j,requestedHeight:Q?.height,isCollapsed:Q?.collapsed??!1,indicatorId:Q?.id,titleColor:Q?.titleColor,controls:Q?.controls}}).map(j=>({...j,rawHeight:j.isCollapsed?3:j.requestedHeight!==void 0?j.requestedHeight:15})),Z=C-b,K=E.length*z;if(l!==void 0&&l>0&&!n)S=l;else if(n)S=3;else if($!==void 0&&$>0)S=$;else{const j=E.reduce((Q,N)=>Q+N.rawHeight,0);S=Z-j-K,S<20&&(S=Math.max(S,10))}const B=l!==void 0&&l>0&&!n||$!==void 0&&$>0&&!n;let lt;if(B){const j=Z-S-K,Q=E.filter(N=>!N.isCollapsed).reduce((N,et)=>N+et.rawHeight,0);lt=E.map(N=>({...N,height:N.isCollapsed?3:Q>0?Math.max(5,N.rawHeight/Q*j):j/E.filter(et=>!et.isCollapsed).length}))}else lt=E.map(j=>({...j,height:j.rawHeight}));let zt=b+S+z;L=lt.map(j=>{const Q={index:j.index,height:j.height,top:zt,isCollapsed:j.isCollapsed,indicatorId:j.indicatorId,titleColor:j.titleColor,controls:j.controls};return zt+=j.height+z,Q})}else S=C-b,n&&(S=3);const P=[];if(L.length>0){P.push({yPercent:b+S+z/2,aboveId:"main",belowId:L[0].indicatorId||""});for(let E=0;E<L.length-1;E++)P.push({yPercent:L[E].top+L[E].height+z/2,aboveId:L[E].indicatorId||"",belowId:L[E+1].indicatorId||""})}const G=[];G.push({left:y,right:f,top:b+"%",height:S+"%",containLabel:!1}),L.forEach(E=>{G.push({left:y,right:f,top:E.top+"%",height:E.height+"%",containLabel:!1})});const M=[0,...L.map((E,Z)=>Z+1)],R=[],F=L.length===0,J=!n&&F;R.push({type:"category",data:[],gridIndex:0,scale:!0,axisLine:{onZero:!1,show:!n&&c,lineStyle:{color:g}},splitLine:{show:!n&&p,lineStyle:{color:u,opacity:d}},axisLabel:{show:J,color:"#94a3b8",fontFamily:i.fontFamily||"sans-serif",formatter:E=>{if(i.yAxisLabelFormatter)return i.yAxisLabelFormatter(E);const Z=i.yAxisDecimalPlaces!==void 0?i.yAxisDecimalPlaces:X.autoDetectDecimals(s);return X.formatValue(E,Z)}},axisTick:{show:J},axisPointer:{label:{show:F,fontSize:11,backgroundColor:"#475569"}}}),L.forEach((E,Z)=>{const K=Z===L.length-1,B=K&&!E.isCollapsed;R.push({type:"category",gridIndex:Z+1,data:[],axisLabel:{show:B,color:"#94a3b8",fontFamily:i.fontFamily||"sans-serif"},axisLine:{show:!E.isCollapsed&&c,lineStyle:{color:g}},axisTick:{show:B},splitLine:{show:!1},axisPointer:{label:{show:K,fontSize:11,backgroundColor:"#475569"}}})});const H=[];let Y,at;i.yAxisMin!==void 0&&i.yAxisMin!=="auto"?Y=i.yAxisMin:Y=X.createMinFunction(o),i.yAxisMax!==void 0&&i.yAxisMax!=="auto"?at=i.yAxisMax:at=X.createMaxFunction(o),H.push({position:"right",scale:!0,min:Y,max:at,gridIndex:0,splitLine:{show:!n&&p,lineStyle:{color:u,opacity:d}},axisLine:{show:!n&&c,lineStyle:{color:g}},axisLabel:{show:!n,color:"#94a3b8",fontFamily:i.fontFamily||"sans-serif",formatter:E=>{if(i.yAxisLabelFormatter)return i.yAxisLabelFormatter(E);const Z=i.yAxisDecimalPlaces!==void 0?i.yAxisDecimalPlaces:X.autoDetectDecimals(s);return X.formatValue(E,Z)}}});let U=1,nt=-1/0,O=1/0;s&&s.length>0&&(nt=Math.min(...s.map(E=>E.low)),O=Math.max(...s.map(E=>E.high)));const V=new Map;e.forEach((E,Z)=>{E.paneIndex===0&&!E.collapsed&&s&&s.length>0&&Object.entries(E.plots).forEach(([K,B])=>{const lt=`${Z}::${K}`,zt=["background","barcolor"],j=(B.options.style==="shape"||B.options.style==="char")&&(B.options.location==="abovebar"||B.options.location==="AboveBar"||B.options.location==="ab"||B.options.location==="belowbar"||B.options.location==="BelowBar"||B.options.location==="bl"||B.options.location==="absolute"||B.options.location==="Absolute");if(zt.includes(B.options.style)){V.has(lt)||(V.set(lt,U),U++);return}if((B.options.style==="shape"||B.options.style==="char")&&!j){V.has(lt)||(V.set(lt,U),U++);return}const Q=[];if(B.data&&Object.values(B.data).forEach(N=>{typeof N=="number"&&!isNaN(N)&&isFinite(N)&&Q.push(N)}),Q.length>0){const N=Math.min(...Q),et=Math.max(...Q),Rt=et-N,Ot=O-nt,xt=N>=nt*.5&&et<=O*1.5,Ht=Rt>Ot*.01;xt&&Ht||V.has(lt)||(V.set(lt,U),U++)}})});const ae=V.size>0?U-1:0,qt=new Set;V.forEach((E,Z)=>{e.forEach(K=>{Object.entries(K.plots).forEach(([B,lt])=>{`${K.id}::${B}`===Z&&["background","barcolor","char"].includes(lt.options.style)&&qt.add(E)})})});for(let E=0;E<ae;E++){const Z=E+1,K=qt.has(Z);H.push({position:"left",scale:!K,min:K?0:X.createMinFunction(o),max:K?1:X.createMaxFunction(o),gridIndex:0,show:!1,splitLine:{show:!1},axisLine:{show:!1},axisLabel:{show:!1}})}const Ut=U;L.forEach((E,Z)=>{H.push({position:"right",scale:!0,min:X.createMinFunction(o),max:X.createMaxFunction(o),gridIndex:Z+1,splitLine:{show:!E.isCollapsed&&p,lineStyle:{color:u,opacity:d*.6}},axisLabel:{show:!E.isCollapsed,color:"#94a3b8",fontFamily:i.fontFamily||"sans-serif",fontSize:10,formatter:K=>{if(i.yAxisLabelFormatter)return i.yAxisLabelFormatter(K);const B=i.yAxisDecimalPlaces!==void 0?i.yAxisDecimalPlaces:X.autoDetectDecimals(s);return X.formatValue(K,B)}},axisLine:{show:!E.isCollapsed&&c,lineStyle:{color:g}}})});const kt=[],po=i.dataZoom?.zoomOnTouch??!0,uo=i.dataZoom?.pannable??!0;return po&&uo&&kt.push({type:"inside",xAxisIndex:M,start:A,end:w,filterMode:"weakFilter"}),I&&(v==="top"?kt.push({type:"slider",xAxisIndex:M,top:"1%",height:k+"%",start:A,end:w,borderColor:"#334155",textStyle:{color:"#cbd5e1"},brushSelect:!1,filterMode:"weakFilter"}):kt.push({type:"slider",xAxisIndex:M,bottom:"1%",height:k+"%",start:A,end:w,borderColor:"#334155",textStyle:{color:"#cbd5e1"},brushSelect:!1,filterMode:"weakFilter"})),{grid:G,xAxis:R,yAxis:H,dataZoom:kt,paneLayout:L,mainPaneHeight:S,mainPaneTop:b,pixelToPercent:a,paneBoundaries:P,overlayYAxisMap:V,separatePaneYAxisOffset:Ut}}static calculateMaximized(t,e,i){return{grid:[],xAxis:[],yAxis:[],dataZoom:[],paneLayout:[],mainPaneHeight:0,mainPaneTop:0,pixelToPercent:0,paneBoundaries:[]}}}class ri{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,plotOptions:l}=t,a="#2962ff";return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(o,p)=>{const u=o.dataIndex;if(u===0)return;const d=p.value(1),g=p.value(2);if(d===null||isNaN(d)||g===null||isNaN(g))return;const c=p.coord([u-1,g]),y=p.coord([u,d]);return{type:"line",shape:{x1:c[0],y1:c[1],x2:y[0],y2:y[1]},style:{stroke:s[u]||l.color||a,lineWidth:l.linewidth||1},silent:!0}},data:r.map((o,p)=>[p,o,p>0?r[p-1]:null])}}}class ai{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,plotOptions:l}=t,a="#2962ff";return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(o,p)=>{const u=p.value(0),d=p.value(1);if(isNaN(d)||d===null)return;const g=p.coord([u,d]),c=p.size([1,0])[0];return{type:"line",shape:{x1:g[0]-c/2,y1:g[1],x2:g[0]+c/2,y2:g[1]},style:{stroke:s[o.dataIndex]||l.color||a,lineWidth:l.linewidth||1},silent:!0}},data:r.map((o,p)=>[p,o])}}}class he{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,plotOptions:l}=t,a="#2962ff",o=l.histbase??0,p=l.style==="columns",u=l.linewidth??1,d=r.map((g,c)=>g==null||typeof g=="number"&&isNaN(g)?null:[c,g,s[c]||l.color||a]);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(g,c)=>{const y=c.value(0),f=c.value(1),x=c.value(2);if(f==null||isNaN(f))return null;const m=c.coord([y,o]),I=c.coord([y,f]),v=c.size([1,0])[0];let k;p?k=v*.6:k=Math.max(1,u);const A=m[0],w=m[1],b=I[1],C=Math.min(w,b),_=Math.abs(b-w);return{type:"rect",shape:{x:A-k/2,y:C,width:k,height:_||1},style:{fill:x}}},data:d.filter(g=>g!==null)}}}const Jt=new Map;function ce(h,t="#00da3c",e="64px"){if(typeof document>"u")return"";const i=`${h}-${t}-${e}`;if(Jt.has(i))return Jt.get(i);const n=document.createElement("canvas"),r=n.getContext("2d");if(n.width=32,n.height=32,r){r.font="bold "+e+" Arial",r.fillStyle=t,r.textAlign="center",r.textBaseline="middle",r.fillText(h,16,16);const s=n.toDataURL("image/png");return Jt.set(i,s),s}return""}class Qt{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,plotOptions:l}=t,a="#2962ff",o=l.style;if(o==="char"){const{optionsArray:u,candlestickData:d}=t,g=l.char||"\u2022",c=l.location||"abovebar",y=r.map((f,x)=>{if(f==null||typeof f=="number"&&isNaN(f))return null;const m=u?.[x]||{},I=m.char||g,v=m.color||s[x]||l.color||a,k=m.location||c,A=m.size||l.size||"normal";let w=f,b=[0,0];k==="abovebar"||k==="AboveBar"||k==="ab"?(d&&d[x]&&(w=d[x].high),b=[0,"-150%"]):(k==="belowbar"||k==="BelowBar"||k==="bl")&&(d&&d[x]&&(w=d[x].low),b=[0,"150%"]);const C={tiny:"18px",small:"26px",normal:"34px",large:"42px",huge:"54px",auto:"28px"}[A]||"34px";return{value:[x,w],symbol:`image://${ce(I,v,C)}`,symbolSize:parseInt(C)+8,symbolOffset:b}}).filter(f=>f!==null);return{name:e,type:"scatter",xAxisIndex:i,yAxisIndex:n,z:10,data:y}}const p=r.map((u,d)=>{if(u===null)return null;const g=s[d]||l.color||a,c={value:[d,u],itemStyle:{color:g}};return o==="cross"?(c.symbol=`image://${ce("+",g,"24px")}`,c.symbolSize=16):(c.symbol="circle",c.symbolSize=6),c}).filter(u=>u!==null);return{name:e,type:"scatter",xAxisIndex:i,yAxisIndex:n,data:p}}}class de{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,optionsArray:l,plotOptions:a}=t,o="#2962ff",p=a.style==="candle",u=[],d=r.map((g,c)=>{if(g===null||!Array.isArray(g)||g.length!==4)return null;const[y,f,x,m]=g,I=l[c]||{},v=I.color||s[c]||a.color||o,k=I.wickcolor||a.wickcolor||v,A=I.bordercolor||a.bordercolor||k;return u[c]={color:v,wickColor:k,borderColor:A},[c,y,m,x,f]}).filter(g=>g!==null);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(g,c)=>{const y=c.value(0),f=c.value(1),x=c.value(2),m=c.value(3),I=c.value(4);if(isNaN(f)||isNaN(x)||isNaN(m)||isNaN(I))return null;const v=u[y]||{color:o,wickColor:o,borderColor:o},k=v.color,A=v.wickColor,w=v.borderColor,b=c.coord([y,0])[0],C=c.coord([y,f])[1],_=c.coord([y,x])[1],z=c.coord([y,m])[1],S=c.coord([y,I])[1],$=c.size([1,0])[0]*.6;if(p){const L=Math.min(C,_),P=Math.max(C,_),G=Math.abs(_-C);return{type:"group",children:[{type:"line",shape:{x1:b,y1:S,x2:b,y2:L},style:{stroke:A,lineWidth:1}},{type:"line",shape:{x1:b,y1:P,x2:b,y2:z},style:{stroke:A,lineWidth:1}},{type:"rect",shape:{x:b-$/2,y:L,width:$,height:G||1},style:{fill:k,stroke:w,lineWidth:1}}]}}else{const L=$*.5;return{type:"group",children:[{type:"line",shape:{x1:b,y1:z,x2:b,y2:S},style:{stroke:k,lineWidth:1}},{type:"line",shape:{x1:b-L,y1:C,x2:b,y2:C},style:{stroke:k,lineWidth:1}},{type:"line",shape:{x1:b,y1:_,x2:b+L,y2:_},style:{stroke:k,lineWidth:1}}]}}},data:d}}}class Dt{static getShapeSymbol(t){switch(t){case"arrowdown":case"shape_arrow_down":return"path://M12 24l-12-12h8v-12h8v12h8z";case"arrowup":case"shape_arrow_up":return"path://M12 0l12 12h-8v12h-8v-12h-8z";case"circle":case"shape_circle":return"circle";case"cross":case"shape_cross":return"path://M11 2h2v9h9v2h-9v9h-2v-9h-9v-2h9z";case"diamond":case"shape_diamond":return"diamond";case"flag":case"shape_flag":return"path://M6 2v20h2v-8h12l-2-6 2-6h-12z";case"labeldown":case"shape_label_down":return"path://M2 1h20a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1h-8l-2 3-2-3h-8a1 1 0 0 1-1-1v-14a1 1 0 0 1 1-1z";case"labelleft":case"shape_label_left":return"path://M0 10l3-3v-5a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1h-18a1 1 0 0 1-1-1v-5z";case"labelright":case"shape_label_right":return"path://M24 10l-3-3v-5a1 1 0 0 0-1-1h-18a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-5z";case"labelup":case"shape_label_up":return"path://M12 1l2 3h8a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1h-20a1 1 0 0 1-1-1v-14a1 1 0 0 1 1-1h8z";case"square":case"shape_square":return"rect";case"triangledown":case"shape_triangle_down":return"path://M12 21l-10-18h20z";case"triangleup":case"shape_triangle_up":return"triangle";case"xcross":case"shape_xcross":return"path://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";default:return"circle"}}static getShapeRotation(t){return 0}static getShapeSize(t,e,i){if(e!==void 0&&i!==void 0)return[e,i];let n;switch(t){case"tiny":n=8;break;case"small":n=12;break;case"normal":case"auto":n=16;break;case"large":n=24;break;case"huge":n=32;break;default:n=16}return e!==void 0?[e,e]:i!==void 0?[i,i]:n}static getLabelConfig(t,e){switch(e){case"abovebar":case"AboveBar":return{position:"top",distance:5};case"belowbar":case"BelowBar":return{position:"bottom",distance:5};case"top":case"Top":return{position:"bottom",distance:5};case"bottom":case"Bottom":return{position:"top",distance:5};case"absolute":case"Absolute":default:return t==="labelup"||t==="labeldown"||t==="shape_label_up"||t==="shape_label_down"?{position:"inside",distance:0}:{position:"top",distance:5}}}}class li{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,optionsArray:l,plotOptions:a,candlestickData:o}=t,p="#2962ff",u=r.map((d,g)=>{const c=l[g]||{},y=a,f=c.location||y.location||"absolute";if(f!=="absolute"&&f!=="Absolute"&&!d||d==null)return null;const x=c.color||y.color||p,m=c.shape||y.shape||"circle",I=c.size||y.size||"normal",v=c.text||y.text,k=c.textcolor||y.textcolor||"white",A=c.width||y.width,w=c.height||y.height;let b=d,C=[0,0];const _=m.includes("label_up")||m==="labelup",z=m.includes("label_down")||m==="labeldown";f==="abovebar"||f==="AboveBar"||f==="ab"?(o&&o[g]&&(b=o[g].high),C=[0,"-150%"]):f==="belowbar"||f==="BelowBar"||f==="bl"?(o&&o[g]&&(b=o[g].low),C=[0,"150%"]):f==="top"||f==="Top"?(b=d,C=[0,0]):(f==="bottom"||f==="Bottom")&&(b=d,C=[0,0]);const S=Dt.getShapeSymbol(m),$=Dt.getShapeSize(I,A,w),L=Dt.getShapeRotation(m);let P=$;m.includes("label")&&(Array.isArray($)?P=[$[0]*2.5,$[1]*2.5]:P=$*2.5),_?C=[C[0],"50%"]:z&&(C=[C[0],"-50%"]);const G=Dt.getLabelConfig(m,f);return{value:[g,b],symbol:S,symbolSize:P,symbolRotate:L,symbolOffset:C,itemStyle:{color:x},label:{show:!!v,position:G.position,distance:G.distance,formatter:v,color:k,fontSize:10,fontWeight:"bold"}}}).filter(d=>d!==null);return{name:e,type:"scatter",xAxisIndex:i,yAxisIndex:n,z:10,data:u}}}class ht{static parseColor(t){if(!t||typeof t!="string")return{color:"#888888",opacity:.2};const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(e){const n=e[1],r=e[2],s=e[3],l=e[4]?parseFloat(e[4]):1;return{color:`rgb(${n},${r},${s})`,opacity:l}}const i=t.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(i){const n=parseInt(i[1],16),r=parseInt(i[2],16),s=parseInt(i[3],16),l=parseInt(i[4],16)/255;return{color:`rgb(${n},${r},${s})`,opacity:l}}return{color:t,opacity:.3}}static toRgba(t,e){const i=t.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(i)return`rgba(${i[1]},${i[2]},${i[3]},${e})`;const n=t.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(n){const s=parseInt(n[1],16),l=parseInt(n[2],16),a=parseInt(n[3],16);return`rgba(${s},${l},${a},${e})`}const r=t.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(r){const s=parseInt(r[1],16),l=parseInt(r[2],16),a=parseInt(r[3],16);return`rgba(${s},${l},${a},${e})`}return t}}class hi{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s}=t,l=[];for(let a=0;a<s.length;a++)l[a]=s[a]?ht.parseColor(s[a]):{color:"",opacity:0};return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,z:-10,renderItem:(a,o)=>{const p=o.value(0);if(isNaN(p))return;const u=o.coord([p,.5]),d=o.size([1,0])[0],g=a.coordSys,c=u[0]-d/2,y=s[a.dataIndex],f=o.value(1);if(!y||f===null||f===void 0||isNaN(f))return;const x=l[a.dataIndex];if(!(!x||x.opacity<=0))return{type:"rect",shape:{x:c,y:g.y,width:d,height:g.height},style:{fill:x.color,opacity:x.opacity},silent:!0}},data:r.map((a,o)=>[o,a!=null&&!isNaN(a)?.5:null])}}}class pe{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,plotOptions:r,plotDataArrays:s,indicatorId:l,plotName:a,optionsArray:o}=t,p=t.dataArray.length,u=r.plot1?`${l}::${r.plot1}`:null,d=r.plot2?`${l}::${r.plot2}`:null;if(!u||!d)return console.warn(`Fill plot "${a}" missing plot1 or plot2 reference`),null;const g=s?.get(u),c=s?.get(d);if(!g||!c)return console.warn(`Fill plot "${a}" references non-existent plots: ${r.plot1}, ${r.plot2}`),null;if(r.gradient===!0)return this.renderGradientFill(e,i,n,g,c,p,o,r);const{color:y,opacity:f}=ht.parseColor(r.color||"rgba(128, 128, 128, 0.2)"),x=o?.some(v=>v&&v.color!==void 0);let m=null;if(x){m=[];for(let v=0;v<p;v++){const k=o?.[v];k&&k.color!==void 0?m[v]=ht.parseColor(k.color):m[v]={color:y,opacity:f}}}const I=[];for(let v=0;v<p;v++){const k=g[v],A=c[v],w=v>0?g[v-1]:null,b=v>0?c[v-1]:null;I.push([v,k,A,w,b])}return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,z:1,clip:!0,encode:{x:0},animation:!1,renderItem:(v,k)=>{const A=v.dataIndex;if(A===0)return null;const w=k.value(1),b=k.value(2),C=k.value(3),_=k.value(4);if(w===null||b===null||C===null||_===null||isNaN(w)||isNaN(b)||isNaN(C)||isNaN(_))return null;const z=m?m[A]:null,S=z?z.opacity:f;if(S<.01)return null;const $=k.coord([A-1,C]),L=k.coord([A,w]),P=k.coord([A,b]),G=k.coord([A-1,_]);return{type:"polygon",shape:{points:[$,L,P,G]},style:{fill:z?z.color:y,opacity:S},silent:!0}},data:I,silent:!0}}renderBatched(t,e,i,n,r){const s=Array.from({length:n},(l,a)=>[a]);return{name:t,type:"custom",xAxisIndex:e,yAxisIndex:i,z:1,clip:!0,encode:{x:0},animation:!1,renderItem:(l,a)=>{const o=l.dataIndex;if(o===0)return null;const p=[];for(let u=0;u<r.length;u++){const d=r[u],g=d.plot1Data[o],c=d.plot2Data[o],y=d.plot1Data[o-1],f=d.plot2Data[o-1];if(g==null||c==null||y==null||f==null||isNaN(g)||isNaN(c)||isNaN(y)||isNaN(f))continue;const x=d.barColors[o];if(!x||x.opacity<.01)continue;const m=a.coord([o-1,y]),I=a.coord([o,g]),v=a.coord([o,c]),k=a.coord([o-1,f]);p.push({type:"polygon",shape:{points:[m,I,v,k]},style:{fill:x.color,opacity:x.opacity},silent:!0})}return p.length>0?{type:"group",children:p,silent:!0}:null},data:s,silent:!0}}renderGradientFill(t,e,i,n,r,s,l,a){const o=[];for(let u=0;u<s;u++){const d=l?.[u];if(d&&d.top_color!==void 0){const g=ht.parseColor(d.top_color),c=ht.parseColor(d.bottom_color);o[u]={topColor:g.color,topOpacity:g.opacity,bottomColor:c.color,bottomOpacity:c.opacity}}else o[u]={topColor:"rgba(128,128,128,0.2)",topOpacity:.2,bottomColor:"rgba(128,128,128,0.2)",bottomOpacity:.2}}const p=[];for(let u=0;u<s;u++){const d=n[u],g=r[u],c=u>0?n[u-1]:null,y=u>0?r[u-1]:null;p.push([u,d,g,c,y])}return{name:t,type:"custom",xAxisIndex:e,yAxisIndex:i,z:1,clip:!0,encode:{x:0},animation:!1,renderItem:(u,d)=>{const g=u.dataIndex;if(g===0)return null;const c=d.value(1),y=d.value(2),f=d.value(3),x=d.value(4);if(c===null||y===null||f===null||x===null||isNaN(c)||isNaN(y)||isNaN(f)||isNaN(x))return null;const m=d.coord([g-1,f]),I=d.coord([g,c]),v=d.coord([g,y]),k=d.coord([g-1,x]),A=o[g]||o[g-1];if(!A||A.topOpacity<.01&&A.bottomOpacity<.01)return null;const w=ht.toRgba(A.topColor,A.topOpacity),b=ht.toRgba(A.bottomColor,A.bottomOpacity),C=c>=y;return{type:"polygon",shape:{points:[m,I,v,k]},style:{fill:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:C?w:b},{offset:1,color:C?b:w}]}},silent:!0}},data:p,silent:!0}}}class ci{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,candlestickData:s,dataIndexOffset:l}=t,a=l||0,o=[];for(let u=0;u<r.length;u++){const d=r[u];if(!d)continue;const g=Array.isArray(d)?d:[d];for(const c of g)c&&typeof c=="object"&&!c._deleted&&o.push(c)}const p=o.map(u=>{const d=F=>typeof F=="function"?F():F,g=d(u.text)||"",c=d(u.color),y=c!=null&&c!==""?c:"transparent",f=d(u.textcolor)||"#ffffff",x=d(u.yloc)||"price",m=d(u.style)||"style_label_down",I=d(u.size)||"normal",v=d(u.textalign)||"align_center",k=d(u.tooltip)||"",A=this.styleToShape(m),w=u.xloc==="bar_index"||u.xloc==="bi"?u.x+a:u.x;let b=u.y,C=[0,0];x==="abovebar"||x==="AboveBar"||x==="ab"?(s&&s[w]&&(b=s[w].high),C=[0,"-150%"]):(x==="belowbar"||x==="BelowBar"||x==="bl")&&(s&&s[w]&&(b=s[w].low),C=[0,"150%"]);const _=Dt.getShapeSymbol(A),z=Dt.getShapeSize(I),S=this.getSizePx(I);let $;const L=A==="labeldown"||A==="shape_label_down"||A==="labelup"||A==="shape_label_up"||A==="labelleft"||A==="labelright";let P=[0,0];if(L){const F=g.split(`
18
- `),J=F.reduce((O,V)=>O.length>V.length?O:V,"").length*S*.65,H=S*2.5,Y=Math.max(H,J+S*1.6),at=S*1.4,U=Math.max(S*2.8,F.length*at+S*1.2),nt=3/24;if(A==="labelleft"||A==="labelright"){const O=Y/(1-nt);$=[O,U];const V=typeof C[0]=="string"?0:C[0];A==="labelleft"?(C=[V+O*.42,C[1]],P=[O*nt*.5,0]):(C=[V-O*.42,C[1]],P=[-O*nt*.5,0])}else{const O=U/(1-nt);$=[Y,O],A==="labeldown"?(C=[C[0],typeof C[1]=="string"?C[1]:C[1]-O*.42],P=[0,-O*nt*.5]):(C=[C[0],typeof C[1]=="string"?C[1]:C[1]+O*.42],P=[0,O*nt*.5])}}else A==="none"?$=0:Array.isArray(z)?$=[z[0]*1.5,z[1]*1.5]:$=z*1.5;const G=this.getLabelPosition(m,x),M=G==="inside"||G.startsWith("inside"),R={value:[w,b],symbol:_,symbolSize:$,symbolOffset:C,itemStyle:{color:y},label:{show:!!g,position:G,distance:M?0:5,offset:P,formatter:g,color:f,fontSize:S,fontWeight:"bold",align:M?"center":v==="align_left"||v==="left"?"left":v==="align_right"||v==="right"?"right":"center",verticalAlign:"middle",padding:[2,6]}};return k?(R._tooltipText=k,R.emphasis={scale:!1,itemStyle:{color:y},label:{show:R.label.show,color:f,fontSize:S,fontWeight:"bold"}}):R.emphasis={disabled:!0},R}).filter(u=>u!==null);return{name:e,type:"scatter",xAxisIndex:i,yAxisIndex:n,data:p,z:20,animation:!1,clip:!1}}styleToShape(t){switch(t.startsWith("style_")?t.substring(6):t){case"label_down":return"labeldown";case"label_up":return"labelup";case"label_left":return"labelleft";case"label_right":return"labelright";case"label_lower_left":return"labeldown";case"label_lower_right":return"labeldown";case"label_upper_left":return"labelup";case"label_upper_right":return"labelup";case"label_center":return"labeldown";case"circle":return"circle";case"square":return"square";case"diamond":return"diamond";case"flag":return"flag";case"arrowup":return"arrowup";case"arrowdown":return"arrowdown";case"cross":return"cross";case"xcross":return"xcross";case"triangleup":return"triangleup";case"triangledown":return"triangledown";case"text_outline":return"none";case"none":return"none";default:return"labeldown"}}getLabelPosition(t,e){switch(t.startsWith("style_")?t.substring(6):t){case"label_down":case"label_up":case"label_left":case"label_right":case"label_lower_left":case"label_lower_right":case"label_upper_left":case"label_upper_right":case"label_center":return"inside";case"text_outline":case"none":return e==="abovebar"||e==="AboveBar"||e==="ab"?"top":e==="belowbar"||e==="BelowBar"||e==="bl"?"bottom":"top";default:return e==="belowbar"||e==="BelowBar"||e==="bl"?"bottom":"top"}}getSizePx(t){switch(t){case"tiny":return 8;case"small":return 9;case"normal":case"auto":return 10;case"large":return 12;case"huge":return 14;default:return 10}}}class di{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,dataIndexOffset:s}=t,l=s||0,a="#2962ff",o=[];for(let d=0;d<r.length;d++){const g=r[d];if(!g)continue;const c=Array.isArray(g)?g:[g];for(const y of c)y&&typeof y=="object"&&!y._deleted&&o.push(y)}if(o.length===0)return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,data:[],silent:!0};const p=(t.candlestickData?.length||0)+l,u=Math.max(0,p-1);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(d,g)=>{const c=[];for(const y of o){if(y._deleted)continue;const f=y.xloc==="bar_index"||y.xloc==="bi"?l:0;let x=g.coord([y.x1+f,y.y1]),m=g.coord([y.x2+f,y.y2]);const I=y.extend||"none";if(I!=="none"&&I!=="n"){const w=d.coordSys;[x,m]=this.extendLine(x,m,I,w.x,w.x+w.width,w.y,w.y+w.height)}const v=y.color||a,k=y.width||1;c.push({type:"line",shape:{x1:x[0],y1:x[1],x2:m[0],y2:m[1]},style:{fill:"none",stroke:v,lineWidth:k,lineDash:this.getDashPattern(y.style)}});const A=y.style||"style_solid";if(A==="style_arrow_left"||A==="style_arrow_both"){const w=this.arrowHead(m,x,k,v);w&&c.push(w)}if(A==="style_arrow_right"||A==="style_arrow_both"){const w=this.arrowHead(x,m,k,v);w&&c.push(w)}}return{type:"group",children:c}},data:[[0,u]],clip:!0,encode:{x:[0,1]},itemStyle:{color:"transparent",borderColor:"transparent"},z:15,silent:!0,emphasis:{disabled:!0}}}getDashPattern(t){switch(t){case"style_dotted":return[2,2];case"style_dashed":return[6,4];default:return}}extendLine(t,e,i,n,r,s,l){const a=e[0]-t[0],o=e[1]-t[1];if(a===0&&o===0)return[t,e];const p=(g,c)=>{let y=1/0;if(c[0]!==0){const f=c[0]>0?(r-g[0])/c[0]:(n-g[0])/c[0];y=Math.min(y,f)}if(c[1]!==0){const f=c[1]>0?(l-g[1])/c[1]:(s-g[1])/c[1];y=Math.min(y,f)}return isFinite(y)||(y=0),[g[0]+y*c[0],g[1]+y*c[1]]};let u=t,d=e;return(i==="right"||i==="r"||i==="both"||i==="b")&&(d=p(t,[a,o])),(i==="left"||i==="l"||i==="both"||i==="b")&&(u=p(e,[-a,-o])),[u,d]}arrowHead(t,e,i,n){const r=e[0]-t[0],s=e[1]-t[1],l=Math.sqrt(r*r+s*s);if(l<1)return null;const a=Math.max(8,i*4),o=r/l,p=s/l,u=e[0]-o*a,d=e[1]-p*a,g=-p*a*.4,c=o*a*.4;return{type:"polygon",shape:{points:[[e[0],e[1]],[u+g,d+c],[u-g,d-c]]},style:{fill:n}}}}class pi{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,dataIndexOffset:s}=t,l=s||0,a=[];for(let u=0;u<r.length;u++){const d=r[u];if(!d)continue;const g=Array.isArray(d)?d:[d];for(const c of g){if(!c||typeof c!="object"||c._deleted)continue;const y=c.line1,f=c.line2;!y||!f||y._deleted||f._deleted||a.push(c)}}if(a.length===0)return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,data:[],silent:!0};const o=(t.candlestickData?.length||0)+l,p=Math.max(0,o-1);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(u,d)=>{const g=[];for(const c of a){if(c._deleted)continue;const y=c.line1,f=c.line2;if(!y||!f||y._deleted||f._deleted)continue;const x=y.xloc==="bar_index"||y.xloc==="bi"?l:0,m=f.xloc==="bar_index"||f.xloc==="bi"?l:0;let I=d.coord([y.x1+x,y.y1]),v=d.coord([y.x2+x,y.y2]),k=d.coord([f.x1+m,f.y1]),A=d.coord([f.x2+m,f.y2]);const w=y.extend||"none",b=f.extend||"none";if(w!=="none"||b!=="none"){const z=u.coordSys,S=z.x,$=z.x+z.width,L=z.y,P=z.y+z.height;w!=="none"&&([I,v]=this.extendLine(I,v,w,S,$,L,P)),b!=="none"&&([k,A]=this.extendLine(k,A,b,S,$,L,P))}const{color:C,opacity:_}=ht.parseColor(c.color||"rgba(128, 128, 128, 0.2)");g.push({type:"polygon",shape:{points:[I,v,A,k]},style:{fill:C,opacity:_},silent:!0})}return{type:"group",children:g}},data:[[0,p]],clip:!0,encode:{x:[0,1]},z:10,silent:!0,emphasis:{disabled:!0}}}extendLine(t,e,i,n,r,s,l){const a=e[0]-t[0],o=e[1]-t[1];if(a===0&&o===0)return[t,e];const p=(g,c)=>{let y=1/0;if(c[0]!==0){const f=c[0]>0?(r-g[0])/c[0]:(n-g[0])/c[0];y=Math.min(y,f)}if(c[1]!==0){const f=c[1]>0?(l-g[1])/c[1]:(s-g[1])/c[1];y=Math.min(y,f)}return isFinite(y)||(y=0),[g[0]+y*c[0],g[1]+y*c[1]]};let u=t,d=e;return(i==="right"||i==="both")&&(d=p(t,[a,o])),(i==="left"||i==="both")&&(u=p(e,[-a,-o])),[u,d]}}class ui{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,dataIndexOffset:s}=t,l=s||0,a=[];for(let u=0;u<r.length;u++){const d=r[u];if(!d)continue;const g=Array.isArray(d)?d:[d];for(const c of g)c&&typeof c=="object"&&!c._deleted&&c.points&&c.points.length>=2&&a.push(c)}if(a.length===0)return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,data:[],silent:!0};const o=(t.candlestickData?.length||0)+l,p=Math.max(0,o-1);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(u,d)=>{const g=[];for(const c of a){if(c._deleted)continue;const y=c.points;if(!y||y.length<2)continue;const f=c.xloc==="bi"||c.xloc==="bar_index",x=f?l:0,m=[];for(const w of y){const b=f?(w.index??0)+x:w.time??0,C=w.price??0;m.push(d.coord([b,C]))}if(m.length<2)continue;const I=c.line_color,v=I==null||typeof I=="number"&&isNaN(I)||I==="na"||I==="NaN"?null:I||"#2962ff",k=c.line_width||1,A=this.getDashPattern(c.line_style);if(c.fill_color&&c.fill_color!==""&&c.fill_color!=="na"){const{color:w,opacity:b}=ht.parseColor(c.fill_color);if(c.curved){const C=this.buildCurvedPath(m,c.closed);g.push({type:"path",shape:{pathData:C+" Z"},style:{fill:w,opacity:b,stroke:"none"},silent:!0})}else g.push({type:"polygon",shape:{points:m},style:{fill:w,opacity:b,stroke:"none"},silent:!0})}if(v&&k>0)if(c.curved){const w=this.buildCurvedPath(m,c.closed);g.push({type:"path",shape:{pathData:w},style:{fill:"none",stroke:v,lineWidth:k,lineDash:A},silent:!0})}else{const w=c.closed?[...m,m[0]]:m;g.push({type:"polyline",shape:{points:w},style:{fill:"none",stroke:v,lineWidth:k,lineDash:A},silent:!0})}}return{type:"group",children:g}},data:[[0,p]],clip:!0,encode:{x:[0,1]},itemStyle:{color:"transparent",borderColor:"transparent"},z:15,silent:!0,emphasis:{disabled:!0}}}buildCurvedPath(t,e){const i=t.length;if(i<2)return"";if(i===2)return`M ${t[0][0]} ${t[0][1]} L ${t[1][0]} ${t[1][1]}`;const n=.5;let r=`M ${t[0][0]} ${t[0][1]}`;const s=a=>e?t[(a%i+i)%i]:a<0?t[0]:a>=i?t[i-1]:t[a],l=e?i:i-1;for(let a=0;a<l;a++){const o=s(a-1),p=s(a),u=s(a+1),d=s(a+2),g=p[0]+(u[0]-o[0])*n/3,c=p[1]+(u[1]-o[1])*n/3,y=u[0]-(d[0]-p[0])*n/3,f=u[1]-(d[1]-p[1])*n/3;r+=` C ${g} ${c}, ${y} ${f}, ${u[0]} ${u[1]}`}return e&&(r+=" Z"),r}getDashPattern(t){switch(t){case"style_dotted":return[2,2];case"style_dashed":return[6,4];default:return}}}function te(h){if(!h||typeof h!="string")return h;if(h.startsWith("#")){const t=h.slice(1);if(t.length===8){const e=parseInt(t.slice(0,2),16),i=parseInt(t.slice(2,4),16),n=parseInt(t.slice(4,6),16),r=parseInt(t.slice(6,8),16)/255;return`rgba(${e},${i},${n},${r.toFixed(3)})`}}return h}function gi(h){if(!h||typeof h!="string")return null;if(h.startsWith("#")){const e=h.slice(1);if(e.length>=6){const i=parseInt(e.slice(0,2),16),n=parseInt(e.slice(2,4),16),r=parseInt(e.slice(4,6),16);if(!isNaN(i)&&!isNaN(n)&&!isNaN(r))return{r:i,g:n,b:r}}if(e.length===3){const i=parseInt(e[0]+e[0],16),n=parseInt(e[1]+e[1],16),r=parseInt(e[2]+e[2],16);if(!isNaN(i)&&!isNaN(n)&&!isNaN(r))return{r:i,g:n,b:r}}return null}const t=h.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);return t?{r:+t[1],g:+t[2],b:+t[3]}:null}function yi(h,t,e){return(.299*h+.587*t+.114*e)/255}class fi{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,dataIndexOffset:s}=t,l=s||0,a=[];for(let u=0;u<r.length;u++){const d=r[u];if(!d)continue;const g=Array.isArray(d)?d:[d];for(const c of g)c&&typeof c=="object"&&!c._deleted&&a.push(c)}if(a.length===0)return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,data:[],silent:!0};const o=(t.candlestickData?.length||0)+l,p=Math.max(0,o-1);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(u,d)=>{const g=[];for(const c of a){if(c._deleted)continue;const y=c.xloc==="bar_index"||c.xloc==="bi"?l:0,f=d.coord([c.left+y,c.top]),x=d.coord([c.right+y,c.bottom]);let m=f[0],I=f[1],v=x[0]-f[0],k=x[1]-f[1];const A=c.extend||"none";if(A!=="none"&&A!=="n"){const S=u.coordSys;(A==="left"||A==="l"||A==="both"||A==="b")&&(m=S.x,v=A==="both"||A==="b"?S.width:x[0]-S.x),(A==="right"||A==="r"||A==="both"||A==="b")&&(A==="right"||A==="r")&&(v=S.x+S.width-f[0])}const w=c.bgcolor,b=w==null||typeof w=="number"&&isNaN(w)||w==="na"||w==="NaN"||w===""?null:te(w)||"#2962ff";b&&g.push({type:"rect",shape:{x:m,y:I,width:v,height:k},style:{fill:b,stroke:"none"}});const C=c.border_color,_=C==null||typeof C=="number"&&isNaN(C)||C==="na"||C==="NaN"?null:te(C)||"#2962ff",z=c.border_width??1;if(z>0&&_&&g.push({type:"rect",shape:{x:m,y:I,width:v,height:k},style:{fill:"none",stroke:_,lineWidth:z,lineDash:this.getDashPattern(c.border_style)}}),c.text){const S=this.getTextX(m,v,c.text_halign),$=this.getTextY(I,k,c.text_valign);let L=te(c.text_color)||"#000000";if((!c.text_color||c.text_color==="#000000"||c.text_color==="black"||c.text_color==="color.black")&&b){const M=gi(b);M&&yi(M.r,M.g,M.b)<.5&&(L="#FFFFFF")}const P=!c.text_formatting||c.text_formatting==="format_none"||c.text_formatting==="format_bold",G=this.computeFontSize(c.text_size,c.text,Math.abs(v),Math.abs(k),P);g.push({type:"text",style:{x:S,y:$,text:c.text,fill:L,fontSize:G,fontFamily:c.text_font_family==="monospace"?"monospace":"sans-serif",fontWeight:P?"bold":"normal",fontStyle:c.text_formatting==="format_italic"?"italic":"normal",textAlign:this.mapHAlign(c.text_halign),textVerticalAlign:this.mapVAlign(c.text_valign)}})}}return{type:"group",children:g}},data:[[0,p]],clip:!0,encode:{x:[0,1]},itemStyle:{color:"transparent",borderColor:"transparent"},z:14,silent:!0,emphasis:{disabled:!0}}}getDashPattern(t){switch(t){case"style_dotted":return[2,2];case"style_dashed":return[6,4];default:return}}computeFontSize(t,e,i,n,r){if(typeof t=="number"&&t>0)return t;switch(t){case"tiny":case"size.tiny":return 8;case"small":case"size.small":return 10;case"normal":case"size.normal":return 14;case"large":case"size.large":return 20;case"huge":case"size.huge":return 36}if(!e||i<=0||n<=0)return 12;const s=6,l=i-s*2,a=n-s*2;if(l<=0||a<=0)return 6;const o=e.split(`
19
- `),p=o.length;let u=1;for(const y of o)y.length>u&&(u=y.length);const d=l/(u*(r?.62:.55)),g=a/(p*1.3),c=Math.min(d,g);return Math.max(6,Math.min(c,48))}mapHAlign(t){switch(t){case"left":case"text.align_left":return"left";case"right":case"text.align_right":return"right";case"center":case"text.align_center":default:return"center"}}mapVAlign(t){switch(t){case"top":case"text.align_top":return"top";case"bottom":case"text.align_bottom":return"bottom";case"center":case"text.align_center":default:return"middle"}}getTextX(t,e,i){switch(i){case"left":case"text.align_left":return t+4;case"right":case"text.align_right":return t+e-4;case"center":case"text.align_center":default:return t+e/2}}getTextY(t,e,i){switch(i){case"top":case"text.align_top":return t+4;case"bottom":case"text.align_bottom":return t+e-4;case"center":case"text.align_center":default:return t+e/2}}}var xi=Object.defineProperty,mi=(h,t,e)=>t in h?xi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,bi=(h,t,e)=>(mi(h,typeof t!="symbol"?t+"":t,e),e);const tt=class{static register(t,e){this.renderers.set(t,e)}static get(t){return this.renderers.get(t)||this.renderers.get("line")}};bi(tt,"renderers",new Map),tt.register("line",new ri),tt.register("step",new ai),tt.register("histogram",new he),tt.register("columns",new he),tt.register("circles",new Qt),tt.register("cross",new Qt),tt.register("char",new Qt),tt.register("bar",new de),tt.register("candle",new de),tt.register("shape",new li),tt.register("background",new hi),tt.register("fill",new pe),tt.register("label",new ci),tt.register("drawing_line",new di),tt.register("linefill",new pi),tt.register("drawing_polyline",new ui),tt.register("drawing_box",new fi);let vi=tt;var wi=Object.defineProperty,Ci=(h,t,e)=>t in h?wi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Pi=(h,t,e)=>(Ci(h,typeof t!="symbol"?t+"":t,e),e);const ue=class le{static buildCandlestickSeries(t,e,i){const n=e.upColor||"#00da3c",r=e.downColor||"#ec0000",s=t.map(a=>[a.open,a.close,a.low,a.high]);if(i&&i>s.length){const a=i-s.length;for(let o=0;o<a;o++)s.push(null)}let l;if(e.lastPriceLine?.visible!==!1&&t.length>0){const a=t[t.length-1],o=a.close,p=a.close>=a.open,u=e.lastPriceLine?.color||(p?n:r);let d=e.lastPriceLine?.lineStyle||"dashed";d.startsWith("linestyle_")&&(d=d.replace("linestyle_",""));const g=e.yAxisDecimalPlaces!==void 0?e.yAxisDecimalPlaces:X.autoDetectDecimals(t);l={symbol:["none","none"],precision:g,data:[{yAxis:o,label:{show:!0,position:"end",formatter:c=>e.yAxisLabelFormatter?e.yAxisLabelFormatter(c.value):X.formatValue(c.value,g),color:"#fff",backgroundColor:u,padding:[2,4],borderRadius:2,fontSize:11,fontWeight:"bold"},lineStyle:{color:u,type:d,width:1,opacity:.8}}],animation:!1,silent:!0}}return{type:"candlestick",id:"__candlestick__",name:e.title,data:s,itemStyle:{color:n,color0:r,borderColor:n,borderColor0:r},markLine:l,xAxisIndex:0,yAxisIndex:0,z:5}}static buildIndicatorSeries(t,e,i,n,r=0,s,l,a=1){const o=[],p=new Array(n).fill(null),u=new Map;return t.forEach((d,g)=>{if(d.collapsed)return;const c=Object.keys(d.plots).sort((f,x)=>{const m=d.plots[f],I=d.plots[x],v=m.options.style==="fill",k=I.options.style==="fill";return v&&!k?1:!v&&k?-1:0}),y=new Map;if(c.forEach(f=>{const x=d.plots[f],m=x.options.display==="none",I=`${g}::${f}`;let v=0,k=0,A=x.options.overlay;if(x.options.style==="fill"&&A===void 0){const S=x.options.plot1,$=x.options.plot2;if(S&&$){const L=d.plots[S],P=d.plots[$];(L?.options?.overlay===!0||P?.options?.overlay===!0)&&(A=!0)}}if(d.paneIndex===0||A===!0)v=0,l&&l.has(I)?k=l.get(I):k=0;else{const S=i.findIndex($=>$.index===d.paneIndex);S!==-1&&(v=S+1,k=a+S)}const w=new Array(n).fill(null),b=new Array(n).fill(null),C=new Array(n).fill(null),_=new Array(n).fill(null);if(x.data?.forEach(S=>{const $=e.get(S.time);if($!==void 0){const L=S.options?.offset??x.options.offset??0,P=$+r+L;if(P>=0&&P<n){let G=S.value;const M=S.options?.color;b[P]=G;const R=S.options!=null&&"color"in S.options,F=M===null||M==="na"||M==="NaN"||typeof M=="number"&&isNaN(M)||R&&M===void 0;F&&(G=null),w[P]=G,C[P]=F?null:M||x.options.color||le.DEFAULT_COLOR,_[P]=S.options||{}}}}),u.set(`${g}::${f}`,b),m)return;if(x.options?.style?.startsWith("style_")&&(x.options.style=x.options.style.replace("style_","")),x.options.style==="barcolor"){x.data?.forEach(S=>{const $=e.get(S.time);if($!==void 0){const L=S.options?.offset??x.options.offset??0,P=$+r+L;if(P>=0&&P<n){const G=S.options?.color||x.options.color||le.DEFAULT_COLOR;!(G===null||G==="na"||G==="NaN"||typeof G=="number"&&isNaN(G))&&S.value!==null&&S.value!==void 0&&(p[P]=G)}}});return}if(x.options.style==="table")return;if(x.options.style==="fill"&&x.options.gradient!==!0){const S=x.options.plot1?`${g}::${x.options.plot1}`:null,$=x.options.plot2?`${g}::${x.options.plot2}`:null;if(S&&$){const L=u.get(S),P=u.get($);if(L&&P){const{color:G,opacity:M}=ht.parseColor(x.options.color||"rgba(128, 128, 128, 0.2)"),R=_.some(H=>H&&H.color!==void 0),F=[];for(let H=0;H<n;H++){const Y=_[H];R&&Y&&Y.color!==void 0?F[H]=ht.parseColor(Y.color):F[H]={color:G,opacity:M}}const J=`${v}:${k}`;y.has(J)||y.set(J,{entries:[],xAxisIndex:v,yAxisIndex:k}),y.get(J).entries.push({plot1Data:L,plot2Data:P,barColors:F});return}}}{const S=x.options.color;let $=!1;if(S==null?$=!C.some(L=>L!=null):typeof S=="string"&&ht.parseColor(S).opacity<.01&&($=!C.some(L=>L==null?!1:ht.parseColor(L).opacity>=.01)),$)return}const z=vi.get(x.options.style).render({seriesName:I,xAxisIndex:v,yAxisIndex:k,dataArray:w,colorArray:C,optionsArray:_,plotOptions:x.options,candlestickData:s,plotDataArrays:u,indicatorId:g,plotName:f,dataIndexOffset:r});z&&o.push(z)}),y.size>0){const f=new pe;y.forEach(({entries:x,xAxisIndex:m,yAxisIndex:I},v)=>{if(x.length>=2){const k=f.renderBatched(`${g}::fills_batch_${v}`,m,I,n,x);k&&o.push(k)}else if(x.length===1){const k=f.renderBatched(`${g}::fills_batch_${v}`,m,I,n,x);k&&o.push(k)}})}}),{series:o,barColors:p}}};Pi(ue,"DEFAULT_COLOR","#2962ff");let Mt=ue;class ki{static build(t,e,i,n=!1,r=null,s=[]){const l=[],a=t.pixelToPercent,o=t.mainPaneTop;if(!r||r==="main"){const p=10*a;if(l.push({type:"text",left:"8.5%",top:o+p+"%",z:10,style:{text:e.title||"",fill:e.titleColor||"#fff",font:`bold 16px ${e.fontFamily||"sans-serif"}`,textVerticalAlign:"top"}}),s.length>0){const d=20*a,g=16*a;s.forEach((c,y)=>{l.push({type:"text",left:"8.5%",top:o+p+d+y*g+"%",z:10,style:{text:c.id,fill:c.titleColor||"#9e9e9e",font:`bold 12px ${e.fontFamily||"sans-serif"}`,textVerticalAlign:"top"}})})}if(e.watermark!==!1){const d=t.mainPaneTop+t.mainPaneHeight;l.push({type:"text",right:"11%",top:d-3+"%",z:10,style:{text:"QFChart",fill:e.fontColor||"#cbd5e1",font:"bold 16px sans-serif",opacity:.1},cursor:"pointer",onclick:()=>{window.open("https://quantforge.org","_blank")}})}const u=[];if(e.controls?.collapse&&u.push({type:"group",children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>i("main","collapse")},{type:"text",style:{text:n?"+":"\u2212",fill:"#cbd5e1",font:`bold 14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]}),e.controls?.maximize){const d=r==="main",g=e.controls?.collapse?25:0;u.push({type:"group",x:g,children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>i("main","maximize")},{type:"text",style:{text:d?"\u2750":"\u25A1",fill:"#cbd5e1",font:`14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]})}if(e.controls?.fullscreen){let d=0;e.controls?.collapse&&(d+=25),e.controls?.maximize&&(d+=25),u.push({type:"group",x:d,children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>i("main","fullscreen")},{type:"text",style:{text:"\u26F6",fill:"#cbd5e1",font:`14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]})}u.length>0&&l.push({type:"group",right:"10.5%",top:o+"%",children:u})}return t.paneLayout.forEach(p=>{if(r&&p.indicatorId!==r)return;l.push({type:"text",left:"8.5%",top:p.top+10*a+"%",z:10,style:{text:p.indicatorId||"",fill:p.titleColor||"#fff",font:`bold 12px ${e.fontFamily||"sans-serif"}`,textVerticalAlign:"top"}});const u=[];if(p.controls?.collapse&&u.push({type:"group",children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>p.indicatorId&&i(p.indicatorId,"collapse")},{type:"text",style:{text:p.isCollapsed?"+":"\u2212",fill:"#cbd5e1",font:`bold 14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]}),p.controls?.maximize){const d=r===p.indicatorId,g=p.controls?.collapse?25:0;u.push({type:"group",x:g,children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>p.indicatorId&&i(p.indicatorId,"maximize")},{type:"text",style:{text:d?"\u2750":"\u25A1",fill:"#cbd5e1",font:`14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]})}u.length>0&&l.push({type:"group",right:"10.5%",top:p.top+"%",children:u})}),l}}class Di{static format(t,e){if(!t||t.length===0)return"";const i=e.title||"",n=e.upColor||"#00da3c",r=e.downColor||"#ec0000",s=e.fontFamily||"sans-serif",l=t[0].axisValue;let a=`<div style="font-weight: bold; margin-bottom: 5px; color: #cbd5e1; font-family: ${s};">${l}</div>`;const o=t.find(u=>u.seriesType==="candlestick"),p=t.filter(u=>u.seriesType!=="candlestick");if(o){const[u,d,g,c,y]=o.value,f=g>=d?n:r;a+=`
17
+ (function(T,Lt){typeof exports=="object"&&typeof module<"u"?Lt(exports,require("echarts")):typeof define=="function"&&define.amd?define(["exports","echarts"],Lt):(T=typeof globalThis<"u"?globalThis:T||self,Lt(T.QFChart={},T.echarts))})(this,function(T,Lt){"use strict";function ni(h){var t=Object.create(null);return h&&Object.keys(h).forEach(function(e){if(e!=="default"){var i=Object.getOwnPropertyDescriptor(h,e);Object.defineProperty(t,e,i.get?i:{enumerable:!0,get:function(){return h[e]}})}}),t.default=h,Object.freeze(t)}var S=ni(Lt),si=Object.defineProperty,oi=(h,t,e)=>t in h?si(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Pt=(h,t,e)=>(oi(h,typeof t!="symbol"?t+"":t,e),e);class ri{constructor(t,e,i,n={}){Pt(this,"id"),Pt(this,"plots"),Pt(this,"paneIndex"),Pt(this,"height"),Pt(this,"collapsed"),Pt(this,"titleColor"),Pt(this,"controls"),this.id=t,this.plots=e,this.paneIndex=i,this.height=n.height,this.collapsed=n.collapsed||!1,this.titleColor=n.titleColor,this.controls=n.controls}toggleCollapse(){this.collapsed=!this.collapsed}isVisible(){return!this.collapsed}updateData(t){Object.keys(t).forEach(e=>{if(!this.plots[e])this.plots[e]=t[e];else{const i=this.plots[e],n=t[e];if(!i.data)return;n.options&&(i.options={...i.options,...n.options});const r=new Map;i.data?.forEach(s=>{r.set(s.time,s)}),n.data?.forEach(s=>{r.set(s.time,s)}),i.data=Array.from(r.values()).sort((s,l)=>s.time-l.time)}})}}class q{static createMinFunction(t){return e=>{const i=(e.max-e.min)*(t/100);return e.min-i}}static createMaxFunction(t){return e=>{const i=(e.max-e.min)*(t/100);return e.max+i}}static autoDetectDecimals(t){if(!t||t.length===0)return 2;const e=t[t.length-1].close;if(e===0||!isFinite(e)||isNaN(e))return 2;const i=Math.abs(e);if(i>=1)return 2;const n=Math.ceil(-Math.log10(i));return Math.min(n+4,10)}static formatValue(t,e){return typeof t=="number"?t.toFixed(e):String(t)}}class Qt{static calculate(t,e,i,n=!1,r=null,s,l){let a=0;t>0&&(a=1/t*100);const o=i.yAxisPadding!==void 0?i.yAxisPadding:5,c=i.grid?.show===!0,g=i.grid?.lineColor??"#334155",d=i.grid?.lineOpacity??.5,u=i.grid?.borderColor??"#334155",p=i.grid?.borderShow===!0,f=i.layout?.left??"10%",y=i.layout?.right??"10%",m=Array.from(e.values()).map(L=>L.paneIndex).filter(L=>L>0).sort((L,O)=>L-O).filter((L,O,K)=>K.indexOf(L)===O),x=m.length>0,A=i.dataZoom?.visible??!0,C=i.dataZoom?.position??"top",k=i.dataZoom?.height??6,_=i.dataZoom?.start??0,D=i.dataZoom?.end??100;let b=8,P=92,w=-1;if(r)if(r==="main")w=0;else{const L=e.get(r);L&&(w=L.paneIndex)}if(w!==-1){const L=[],O=[],K=[],Y=[],ht=i.dataZoom?.start??50,Et=i.dataZoom?.end??100;(i.dataZoom?.zoomOnTouch??!0)&&Y.push({type:"inside",xAxisIndex:"all",start:ht,end:Et,filterMode:"weakFilter"});const V=x?Math.max(...m):0,tt=[];for(let B=0;B<=V;B++){const it=B===w;L.push({left:f,right:y,top:it?"5%":"0%",height:it?"90%":"0%",show:it,containLabel:!1}),O.push({type:"category",gridIndex:B,data:[],show:it,axisLabel:{show:it,color:"#94a3b8",fontFamily:i.fontFamily},axisLine:{show:it&&p,lineStyle:{color:u}},splitLine:{show:it&&c,lineStyle:{color:g,opacity:d}}});let Bt,jt;if(B===0&&w===0?(Bt=i.yAxisMin!==void 0&&i.yAxisMin!=="auto"?i.yAxisMin:q.createMinFunction(o),jt=i.yAxisMax!==void 0&&i.yAxisMax!=="auto"?i.yAxisMax:q.createMaxFunction(o)):(Bt=q.createMinFunction(o),jt=q.createMaxFunction(o)),K.push({position:"right",gridIndex:B,show:it,scale:!0,min:Bt,max:jt,axisLabel:{show:it,color:"#94a3b8",fontFamily:i.fontFamily,formatter:vt=>{if(i.yAxisLabelFormatter)return i.yAxisLabelFormatter(vt);const Yt=i.yAxisDecimalPlaces!==void 0?i.yAxisDecimalPlaces:q.autoDetectDecimals(s);return q.formatValue(vt,Yt)}},splitLine:{show:it&&c,lineStyle:{color:g,opacity:d}}}),B>0){const vt=Array.from(e.values()).find(Yt=>Yt.paneIndex===B);vt&&tt.push({index:B,height:it?90:0,top:it?5:0,isCollapsed:!1,indicatorId:vt.id,titleColor:vt.titleColor,controls:vt.controls})}}return{grid:L,xAxis:O,yAxis:K,dataZoom:Y,paneLayout:tt,mainPaneHeight:w===0?90:0,mainPaneTop:w===0?5:0,pixelToPercent:a,overlayYAxisMap:new Map,separatePaneYAxisOffset:1}}A?C==="top"?(b=k+4,P=95):(P=100-k-2,b=8):(b=5,P=95);let M=5;t>0&&(M=20/t*100);let E=75,z;if(i.layout?.mainPaneHeight!==void 0){const L=i.layout.mainPaneHeight;if(typeof L=="string"){const O=parseFloat(L);isNaN(O)||(z=O)}else typeof L=="number"&&(z=L)}let G=[];if(x){const L=m.map(V=>{const tt=Array.from(e.values()).find(B=>B.paneIndex===V);return{index:V,requestedHeight:tt?.height,isCollapsed:tt?.collapsed??!1,indicatorId:tt?.id,titleColor:tt?.titleColor,controls:tt?.controls}}).map(V=>({...V,rawHeight:V.isCollapsed?3:V.requestedHeight!==void 0?V.requestedHeight:15})),O=P-b,K=L.length*M;if(l!==void 0&&l>0&&!n)E=l;else if(n)E=3;else if(z!==void 0&&z>0)E=z;else{const V=L.reduce((tt,B)=>tt+B.rawHeight,0);E=O-V-K,E<20&&(E=Math.max(E,10))}const Y=l!==void 0&&l>0&&!n||z!==void 0&&z>0&&!n;let ht;if(Y){const V=O-E-K,tt=L.filter(B=>!B.isCollapsed).reduce((B,it)=>B+it.rawHeight,0);ht=L.map(B=>({...B,height:B.isCollapsed?3:tt>0?Math.max(5,B.rawHeight/tt*V):V/L.filter(it=>!it.isCollapsed).length}))}else ht=L.map(V=>({...V,height:V.rawHeight}));let Et=b+E+M;G=ht.map(V=>{const tt={index:V.index,height:V.height,top:Et,isCollapsed:V.isCollapsed,indicatorId:V.indicatorId,titleColor:V.titleColor,controls:V.controls};return Et+=V.height+M,tt})}else E=P-b,n&&(E=3);const v=[];if(G.length>0){v.push({yPercent:b+E+M/2,aboveId:"main",belowId:G[0].indicatorId||""});for(let L=0;L<G.length-1;L++)v.push({yPercent:G[L].top+G[L].height+M/2,aboveId:G[L].indicatorId||"",belowId:G[L+1].indicatorId||""})}const $=[];$.push({left:f,right:y,top:b+"%",height:E+"%",containLabel:!1}),G.forEach(L=>{$.push({left:f,right:y,top:L.top+"%",height:L.height+"%",containLabel:!1})});const I=[0,...G.map((L,O)=>O+1)],N=[],Z=G.length===0,F=!n&&Z;N.push({type:"category",data:[],gridIndex:0,scale:!0,axisLine:{onZero:!1,show:!n&&p,lineStyle:{color:u}},splitLine:{show:!n&&c,lineStyle:{color:g,opacity:d}},axisLabel:{show:F,color:"#94a3b8",fontFamily:i.fontFamily||"sans-serif",formatter:L=>{if(i.yAxisLabelFormatter)return i.yAxisLabelFormatter(L);const O=i.yAxisDecimalPlaces!==void 0?i.yAxisDecimalPlaces:q.autoDetectDecimals(s);return q.formatValue(L,O)}},axisTick:{show:F},axisPointer:{label:{show:Z,fontSize:11,backgroundColor:"#475569"}}}),G.forEach((L,O)=>{const K=O===G.length-1,Y=K&&!L.isCollapsed;N.push({type:"category",gridIndex:O+1,data:[],axisLabel:{show:Y,color:"#94a3b8",fontFamily:i.fontFamily||"sans-serif"},axisLine:{show:!L.isCollapsed&&p,lineStyle:{color:u}},axisTick:{show:Y},splitLine:{show:!1},axisPointer:{label:{show:K,fontSize:11,backgroundColor:"#475569"}}})});const R=[];let H,Q;i.yAxisMin!==void 0&&i.yAxisMin!=="auto"?H=i.yAxisMin:H=q.createMinFunction(o),i.yAxisMax!==void 0&&i.yAxisMax!=="auto"?Q=i.yAxisMax:Q=q.createMaxFunction(o),R.push({position:"right",scale:!0,min:H,max:Q,gridIndex:0,splitLine:{show:!n&&c,lineStyle:{color:g,opacity:d}},axisLine:{show:!n&&p,lineStyle:{color:u}},axisLabel:{show:!n,color:"#94a3b8",fontFamily:i.fontFamily||"sans-serif",formatter:L=>{if(i.yAxisLabelFormatter)return i.yAxisLabelFormatter(L);const O=i.yAxisDecimalPlaces!==void 0?i.yAxisDecimalPlaces:q.autoDetectDecimals(s);return q.formatValue(L,O)}}});let X=1,at=-1/0,st=1/0;s&&s.length>0&&(at=Math.min(...s.map(L=>L.low)),st=Math.max(...s.map(L=>L.high)));const j=new Map;e.forEach((L,O)=>{L.paneIndex===0&&!L.collapsed&&s&&s.length>0&&Object.entries(L.plots).forEach(([K,Y])=>{const ht=`${O}::${K}`,Et=["background","barcolor"],V=(Y.options.style==="shape"||Y.options.style==="char")&&(Y.options.location==="abovebar"||Y.options.location==="AboveBar"||Y.options.location==="ab"||Y.options.location==="belowbar"||Y.options.location==="BelowBar"||Y.options.location==="bl"||Y.options.location==="absolute"||Y.options.location==="Absolute");if(Et.includes(Y.options.style)){j.has(ht)||(j.set(ht,X),X++);return}if((Y.options.style==="shape"||Y.options.style==="char")&&!V){j.has(ht)||(j.set(ht,X),X++);return}const tt=[];if(Y.data&&Object.values(Y.data).forEach(B=>{typeof B=="number"&&!isNaN(B)&&isFinite(B)&&tt.push(B)}),tt.length>0){const B=Math.min(...tt),it=Math.max(...tt),Bt=it-B,jt=st-at,vt=B>=at*.5&&it<=st*1.5,Yt=Bt>jt*.01;vt&&Yt||j.has(ht)||(j.set(ht,X),X++)}})});const J=j.size>0?X-1:0,mt=new Set;j.forEach((L,O)=>{e.forEach(K=>{Object.entries(K.plots).forEach(([Y,ht])=>{`${K.id}::${Y}`===O&&["background","barcolor","char"].includes(ht.options.style)&&mt.add(L)})})});for(let L=0;L<J;L++){const O=L+1,K=mt.has(O);R.push({position:"left",scale:!K,min:K?0:q.createMinFunction(o),max:K?1:q.createMaxFunction(o),gridIndex:0,show:!1,splitLine:{show:!1},axisLine:{show:!1},axisLabel:{show:!1}})}const Jt=X;G.forEach((L,O)=>{R.push({position:"right",scale:!0,min:q.createMinFunction(o),max:q.createMaxFunction(o),gridIndex:O+1,splitLine:{show:!L.isCollapsed&&c,lineStyle:{color:g,opacity:d*.6}},axisLabel:{show:!L.isCollapsed,color:"#94a3b8",fontFamily:i.fontFamily||"sans-serif",fontSize:10,formatter:K=>{if(i.yAxisLabelFormatter)return i.yAxisLabelFormatter(K);const Y=i.yAxisDecimalPlaces!==void 0?i.yAxisDecimalPlaces:q.autoDetectDecimals(s);return q.formatValue(K,Y)}},axisLine:{show:!L.isCollapsed&&p,lineStyle:{color:u}}})});const It=[],uo=i.dataZoom?.zoomOnTouch??!0,go=i.dataZoom?.pannable??!0;return uo&&go&&It.push({type:"inside",xAxisIndex:I,start:_,end:D,filterMode:"weakFilter"}),A&&(C==="top"?It.push({type:"slider",xAxisIndex:I,top:"1%",height:k+"%",start:_,end:D,borderColor:"#334155",textStyle:{color:"#cbd5e1"},brushSelect:!1,filterMode:"weakFilter"}):It.push({type:"slider",xAxisIndex:I,bottom:"1%",height:k+"%",start:_,end:D,borderColor:"#334155",textStyle:{color:"#cbd5e1"},brushSelect:!1,filterMode:"weakFilter"})),{grid:$,xAxis:N,yAxis:R,dataZoom:It,paneLayout:G,mainPaneHeight:E,mainPaneTop:b,pixelToPercent:a,paneBoundaries:v,overlayYAxisMap:j,separatePaneYAxisOffset:Jt}}static calculateMaximized(t,e,i){return{grid:[],xAxis:[],yAxis:[],dataZoom:[],paneLayout:[],mainPaneHeight:0,mainPaneTop:0,pixelToPercent:0,paneBoundaries:[]}}}class ai{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,plotOptions:l}=t,a="#2962ff";return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(o,c)=>{const g=o.dataIndex;if(g===0)return;const d=c.value(1),u=c.value(2);if(d===null||isNaN(d)||u===null||isNaN(u))return;const p=c.coord([g-1,u]),f=c.coord([g,d]);return{type:"line",shape:{x1:p[0],y1:p[1],x2:f[0],y2:f[1]},style:{stroke:s[g]||l.color||a,lineWidth:l.linewidth||1},silent:!0}},data:r.map((o,c)=>[c,o,c>0?r[c-1]:null])}}}class li{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,plotOptions:l}=t,a="#2962ff";return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(o,c)=>{const g=c.value(0),d=c.value(1);if(isNaN(d)||d===null)return;const u=c.coord([g,d]),p=c.size([1,0])[0];return{type:"line",shape:{x1:u[0]-p/2,y1:u[1],x2:u[0]+p/2,y2:u[1]},style:{stroke:s[o.dataIndex]||l.color||a,lineWidth:l.linewidth||1},silent:!0}},data:r.map((o,c)=>[c,o])}}}class ce{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,plotOptions:l}=t,a="#2962ff",o=l.histbase??0,c=l.style==="columns",g=l.linewidth??1,d=r.map((u,p)=>u==null||typeof u=="number"&&isNaN(u)?null:[p,u,s[p]||l.color||a]);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(u,p)=>{const f=p.value(0),y=p.value(1),m=p.value(2);if(y==null||isNaN(y))return null;const x=p.coord([f,o]),A=p.coord([f,y]),C=p.size([1,0])[0];let k;c?k=C*.6:k=Math.max(1,g);const _=x[0],D=x[1],b=A[1],P=Math.min(D,b),w=Math.abs(b-D);return{type:"rect",shape:{x:_-k/2,y:P,width:k,height:w||1},style:{fill:m}}},data:d.filter(u=>u!==null)}}}const te=new Map;function de(h,t="#00da3c",e="64px"){if(typeof document>"u")return"";const i=`${h}-${t}-${e}`;if(te.has(i))return te.get(i);const n=document.createElement("canvas"),r=n.getContext("2d");if(n.width=32,n.height=32,r){r.font="bold "+e+" Arial",r.fillStyle=t,r.textAlign="center",r.textBaseline="middle",r.fillText(h,16,16);const s=n.toDataURL("image/png");return te.set(i,s),s}return""}class ee{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,plotOptions:l}=t,a="#2962ff",o=l.style;if(o==="char"){const{optionsArray:g,candlestickData:d}=t,u=l.char||"\u2022",p=l.location||"abovebar",f=r.map((y,m)=>{if(y==null||typeof y=="number"&&isNaN(y))return null;const x=g?.[m]||{},A=x.char||u,C=x.color||s[m]||l.color||a,k=x.location||p,_=x.size||l.size||"normal";let D=y,b=[0,0];k==="abovebar"||k==="AboveBar"||k==="ab"?(d&&d[m]&&(D=d[m].high),b=[0,"-150%"]):(k==="belowbar"||k==="BelowBar"||k==="bl")&&(d&&d[m]&&(D=d[m].low),b=[0,"150%"]);const P={tiny:"18px",small:"26px",normal:"34px",large:"42px",huge:"54px",auto:"28px"}[_]||"34px";return{value:[m,D],symbol:`image://${de(A,C,P)}`,symbolSize:parseInt(P)+8,symbolOffset:b}}).filter(y=>y!==null);return{name:e,type:"scatter",xAxisIndex:i,yAxisIndex:n,z:10,data:f}}const c=r.map((g,d)=>{if(g===null)return null;const u=s[d]||l.color||a,p={value:[d,g],itemStyle:{color:u}};return o==="cross"?(p.symbol=`image://${de("+",u,"24px")}`,p.symbolSize=16):(p.symbol="circle",p.symbolSize=6),p}).filter(g=>g!==null);return{name:e,type:"scatter",xAxisIndex:i,yAxisIndex:n,data:c}}}class pe{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,optionsArray:l,plotOptions:a}=t,o="#2962ff",c=a.style==="candle",g=[],d=r.map((u,p)=>{if(u===null||!Array.isArray(u)||u.length!==4)return null;const[f,y,m,x]=u,A=l[p]||{},C=A.color||s[p]||a.color||o,k=A.wickcolor||a.wickcolor||C,_=A.bordercolor||a.bordercolor||k;return g[p]={color:C,wickColor:k,borderColor:_},[p,f,x,m,y]}).filter(u=>u!==null);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(u,p)=>{const f=p.value(0),y=p.value(1),m=p.value(2),x=p.value(3),A=p.value(4);if(isNaN(y)||isNaN(m)||isNaN(x)||isNaN(A))return null;const C=g[f]||{color:o,wickColor:o,borderColor:o},k=C.color,_=C.wickColor,D=C.borderColor,b=p.coord([f,0])[0],P=p.coord([f,y])[1],w=p.coord([f,m])[1],M=p.coord([f,x])[1],E=p.coord([f,A])[1],z=p.size([1,0])[0]*.6;if(c){const G=Math.min(P,w),v=Math.max(P,w),$=Math.abs(w-P);return{type:"group",children:[{type:"line",shape:{x1:b,y1:E,x2:b,y2:G},style:{stroke:_,lineWidth:1}},{type:"line",shape:{x1:b,y1:v,x2:b,y2:M},style:{stroke:_,lineWidth:1}},{type:"rect",shape:{x:b-z/2,y:G,width:z,height:$||1},style:{fill:k,stroke:D,lineWidth:1}}]}}else{const G=z*.5;return{type:"group",children:[{type:"line",shape:{x1:b,y1:M,x2:b,y2:E},style:{stroke:k,lineWidth:1}},{type:"line",shape:{x1:b-G,y1:P,x2:b,y2:P},style:{stroke:k,lineWidth:1}},{type:"line",shape:{x1:b,y1:w,x2:b+G,y2:w},style:{stroke:k,lineWidth:1}}]}}},data:d}}}class At{static getShapeSymbol(t){switch(t){case"arrowdown":case"shape_arrow_down":return"path://M12 24l-12-12h8v-12h8v12h8z";case"arrowup":case"shape_arrow_up":return"path://M12 0l12 12h-8v12h-8v-12h-8z";case"circle":case"shape_circle":return"circle";case"cross":case"shape_cross":return"path://M11 2h2v9h9v2h-9v9h-2v-9h-9v-2h9z";case"diamond":case"shape_diamond":return"diamond";case"flag":case"shape_flag":return"path://M6 2v20h2v-8h12l-2-6 2-6h-12z";case"labeldown":case"shape_label_down":return"path://M2 1h20a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1h-8l-2 3-2-3h-8a1 1 0 0 1-1-1v-14a1 1 0 0 1 1-1z";case"labelleft":case"shape_label_left":return"path://M0 10l3-3v-5a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1h-18a1 1 0 0 1-1-1v-5z";case"labelright":case"shape_label_right":return"path://M24 10l-3-3v-5a1 1 0 0 0-1-1h-18a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-5z";case"labelup":case"shape_label_up":return"path://M12 1l2 3h8a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1h-20a1 1 0 0 1-1-1v-14a1 1 0 0 1 1-1h8z";case"labelcenter":case"shape_label_center":return"path://M1 1h22a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1h-22a1 1 0 0 1-1-1v-16a1 1 0 0 1 1-1z";case"square":case"shape_square":return"rect";case"triangledown":case"shape_triangle_down":return"path://M12 21l-10-18h20z";case"triangleup":case"shape_triangle_up":return"triangle";case"xcross":case"shape_xcross":return"path://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";default:return"circle"}}static getShapeRotation(t){return 0}static getShapeSize(t,e,i){if(e!==void 0&&i!==void 0)return[e,i];let n;switch(t){case"tiny":n=8;break;case"small":n=12;break;case"normal":case"auto":n=16;break;case"large":n=24;break;case"huge":n=32;break;default:n=16}return e!==void 0?[e,e]:i!==void 0?[i,i]:n}static getLabelConfig(t,e){switch(e){case"abovebar":case"AboveBar":return{position:"top",distance:5};case"belowbar":case"BelowBar":return{position:"bottom",distance:5};case"top":case"Top":return{position:"bottom",distance:5};case"bottom":case"Bottom":return{position:"top",distance:5};case"absolute":case"Absolute":default:return t==="labelup"||t==="labeldown"||t==="shape_label_up"||t==="shape_label_down"?{position:"inside",distance:0}:{position:"top",distance:5}}}}class hi{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s,optionsArray:l,plotOptions:a,candlestickData:o}=t,c="#2962ff",g=r.map((d,u)=>{const p=l[u]||{},f=a,y=p.location||f.location||"absolute";if(y!=="absolute"&&y!=="Absolute"&&!d||d==null)return null;const m=p.color||f.color||c,x=p.shape||f.shape||"circle",A=p.size||f.size||"normal",C=p.text||f.text,k=p.textcolor||f.textcolor||"white",_=p.width||f.width,D=p.height||f.height;let b=d,P=[0,0];const w=x.includes("label_up")||x==="labelup",M=x.includes("label_down")||x==="labeldown";y==="abovebar"||y==="AboveBar"||y==="ab"?(o&&o[u]&&(b=o[u].high),P=[0,"-150%"]):y==="belowbar"||y==="BelowBar"||y==="bl"?(o&&o[u]&&(b=o[u].low),P=[0,"150%"]):y==="top"||y==="Top"?(b=d,P=[0,0]):(y==="bottom"||y==="Bottom")&&(b=d,P=[0,0]);const E=At.getShapeSymbol(x),z=At.getShapeSize(A,_,D),G=At.getShapeRotation(x);let v=z;x.includes("label")&&(Array.isArray(z)?v=[z[0]*2.5,z[1]*2.5]:v=z*2.5),w?P=[P[0],"50%"]:M&&(P=[P[0],"-50%"]);const $=At.getLabelConfig(x,y);return{value:[u,b],symbol:E,symbolSize:v,symbolRotate:G,symbolOffset:P,itemStyle:{color:m},label:{show:!!C,position:$.position,distance:$.distance,formatter:C,color:k,fontSize:10,fontWeight:"bold"}}}).filter(d=>d!==null);return{name:e,type:"scatter",xAxisIndex:i,yAxisIndex:n,z:10,data:g}}}class ct{static parseColor(t){if(!t||typeof t!="string")return{color:"#888888",opacity:.2};const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(e){const n=e[1],r=e[2],s=e[3],l=e[4]?parseFloat(e[4]):1;return{color:`rgb(${n},${r},${s})`,opacity:l}}const i=t.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(i){const n=parseInt(i[1],16),r=parseInt(i[2],16),s=parseInt(i[3],16),l=parseInt(i[4],16)/255;return{color:`rgb(${n},${r},${s})`,opacity:l}}return{color:t,opacity:.3}}static toRgba(t,e){const i=t.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(i)return`rgba(${i[1]},${i[2]},${i[3]},${e})`;const n=t.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(n){const s=parseInt(n[1],16),l=parseInt(n[2],16),a=parseInt(n[3],16);return`rgba(${s},${l},${a},${e})`}const r=t.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(r){const s=parseInt(r[1],16),l=parseInt(r[2],16),a=parseInt(r[3],16);return`rgba(${s},${l},${a},${e})`}return t}}class ci{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,colorArray:s}=t,l=[];for(let a=0;a<s.length;a++)l[a]=s[a]?ct.parseColor(s[a]):{color:"",opacity:0};return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,z:-10,renderItem:(a,o)=>{const c=o.value(0);if(isNaN(c))return;const g=o.coord([c,.5]),d=o.size([1,0])[0],u=a.coordSys,p=g[0]-d/2,f=s[a.dataIndex],y=o.value(1);if(!f||y===null||y===void 0||isNaN(y))return;const m=l[a.dataIndex];if(!(!m||m.opacity<=0))return{type:"rect",shape:{x:p,y:u.y,width:d,height:u.height},style:{fill:m.color,opacity:m.opacity},silent:!0}},data:r.map((a,o)=>[o,a!=null&&!isNaN(a)?.5:null])}}}class ue{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,plotOptions:r,plotDataArrays:s,indicatorId:l,plotName:a,optionsArray:o}=t,c=t.dataArray.length,g=r.plot1?`${l}::${r.plot1}`:null,d=r.plot2?`${l}::${r.plot2}`:null;if(!g||!d)return console.warn(`Fill plot "${a}" missing plot1 or plot2 reference`),null;const u=s?.get(g),p=s?.get(d);if(!u||!p)return console.warn(`Fill plot "${a}" references non-existent plots: ${r.plot1}, ${r.plot2}`),null;if(r.gradient===!0)return this.renderGradientFill(e,i,n,u,p,c,o,r);const{color:f,opacity:y}=ct.parseColor(r.color||"rgba(128, 128, 128, 0.2)"),m=o?.some(C=>C&&C.color!==void 0);let x=null;if(m){x=[];for(let C=0;C<c;C++){const k=o?.[C];k&&k.color!==void 0?x[C]=ct.parseColor(k.color):x[C]={color:f,opacity:y}}}const A=[];for(let C=0;C<c;C++){const k=u[C],_=p[C],D=C>0?u[C-1]:null,b=C>0?p[C-1]:null;A.push([C,k,_,D,b])}return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,z:1,clip:!0,encode:{x:0},animation:!1,renderItem:(C,k)=>{const _=C.dataIndex;if(_===0)return null;const D=k.value(1),b=k.value(2),P=k.value(3),w=k.value(4);if(D===null||b===null||P===null||w===null||isNaN(D)||isNaN(b)||isNaN(P)||isNaN(w))return null;const M=x?x[_]:null,E=M?M.opacity:y;if(E<.01)return null;const z=k.coord([_-1,P]),G=k.coord([_,D]),v=k.coord([_,b]),$=k.coord([_-1,w]);return{type:"polygon",shape:{points:[z,G,v,$]},style:{fill:M?M.color:f,opacity:E},silent:!0}},data:A,silent:!0}}renderBatched(t,e,i,n,r){const s=Array.from({length:n},(l,a)=>[a]);return{name:t,type:"custom",xAxisIndex:e,yAxisIndex:i,z:1,clip:!0,encode:{x:0},animation:!1,renderItem:(l,a)=>{const o=l.dataIndex;if(o===0)return null;const c=[];for(let g=0;g<r.length;g++){const d=r[g],u=d.plot1Data[o],p=d.plot2Data[o],f=d.plot1Data[o-1],y=d.plot2Data[o-1];if(u==null||p==null||f==null||y==null||isNaN(u)||isNaN(p)||isNaN(f)||isNaN(y))continue;const m=d.barColors[o];if(!m||m.opacity<.01)continue;const x=a.coord([o-1,f]),A=a.coord([o,u]),C=a.coord([o,p]),k=a.coord([o-1,y]);c.push({type:"polygon",shape:{points:[x,A,C,k]},style:{fill:m.color,opacity:m.opacity},silent:!0})}return c.length>0?{type:"group",children:c,silent:!0}:null},data:s,silent:!0}}renderGradientFill(t,e,i,n,r,s,l,a){const o=[];for(let g=0;g<s;g++){const d=l?.[g];if(d&&d.top_color!==void 0){const u=d.top_value,p=d.bottom_value,f=u==null||typeof u=="number"&&isNaN(u)?null:u,y=p==null||typeof p=="number"&&isNaN(p)?null:p,m=ct.parseColor(d.top_color),x=ct.parseColor(d.bottom_color);o[g]={topValue:f,bottomValue:y,topColor:m.color,topOpacity:m.opacity,bottomColor:x.color,bottomOpacity:x.opacity}}else o[g]=null}const c=[];for(let g=0;g<s;g++){const d=o[g],u=g>0?o[g-1]:null,p=d?.topValue??null,f=d?.bottomValue??null,y=u?.topValue??null,m=u?.bottomValue??null;c.push([g,p,f,y,m])}return{name:t,type:"custom",xAxisIndex:e,yAxisIndex:i,z:1,clip:!0,encode:{x:0},animation:!1,renderItem:(g,d)=>{const u=g.dataIndex;if(u===0)return null;const p=d.value(1),f=d.value(2),y=d.value(3),m=d.value(4);if(p==null||f==null||y==null||m==null||isNaN(p)||isNaN(f)||isNaN(y)||isNaN(m))return null;const x=o[u];if(!x||x.topOpacity<.01&&x.bottomOpacity<.01)return null;const A=ct.toRgba(x.topColor,x.topOpacity),C=ct.toRgba(x.bottomColor,x.bottomOpacity),k=d.coord([u-1,y]),_=d.coord([u,p]),D=d.coord([u,f]),b=d.coord([u-1,m]);return{type:"polygon",shape:{points:[k,_,D,b]},style:{fill:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:A},{offset:1,color:C}]}},silent:!0}},data:c,silent:!0}}}function yt(h,t,e,i,n){if(!t||t==="bar_index"||t==="bi")return h+e;if(i){const r=i.get(h);if(r!==void 0)return r+e}if(n&&n.length>=2){const r=n[n.length-1].time,s=n.length-1;if(h>r){const l=n[n.length-2].time,a=r-l;if(a>0){const o=(h-r)/a;return s+o+e}}else if(h<n[0].time){const l=n[0].time,a=n[1].time-l;if(a>0)return 0-(l-h)/a+e}else{let l=0,a=n.length-1;for(;l<a;){const o=l+a>>1;n[o].time<h?l=o+1:a=o}if(l>0){const o=n[l-1].time,c=n[l].time,g=(h-o)/(c-o);return l-1+g+e}return l+e}}return NaN}class di{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,candlestickData:s,dataIndexOffset:l,timeToIndex:a,marketData:o}=t,c=l||0,g=[];for(let u=0;u<r.length;u++){const p=r[u];if(!p)continue;const f=Array.isArray(p)?p:[p];for(const y of f)y&&typeof y=="object"&&!y._deleted&&g.push(y)}const d=g.map(u=>{const p=R=>typeof R=="function"?R():R,f=p(u.text)||"",y=p(u.color),m=y!=null&&y!==""?y:"transparent",x=p(u.textcolor)||"#ffffff",A=p(u.yloc)||"price",C=p(u.style)||"style_label_down",k=p(u.size)||"normal",_=p(u.textalign)||"align_center",D=p(u.tooltip)||"",b=this.styleToShape(C),P=yt(u.x,u.xloc,c,a,o);if(isNaN(P))return null;let w=u.y,M=[0,0];A==="abovebar"||A==="AboveBar"||A==="ab"?(s&&s[P]&&(w=s[P].high),M=[0,"-150%"]):(A==="belowbar"||A==="BelowBar"||A==="bl")&&(s&&s[P]&&(w=s[P].low),M=[0,"150%"]);const E=At.getShapeSymbol(b),z=At.getShapeSize(k),G=this.getSizePx(k);let v;const $=b==="labeldown"||b==="shape_label_down"||b==="labelup"||b==="shape_label_up"||b==="labelleft"||b==="labelright";let I=[0,0];if($){const R=f.split(`
18
+ `),H=R.reduce((J,mt)=>J.length>mt.length?J:mt,"").length*G*.65,Q=G*2.5,X=Math.max(Q,H+G*1.6),at=G*1.4,st=Math.max(G*2.8,R.length*at+G*1.2),j=3/24;if(b==="labelleft"||b==="labelright"){const J=X/(1-j);v=[J,st];const mt=typeof M[0]=="string"?0:M[0];b==="labelleft"?(M=[mt+J*.42,M[1]],I=[J*j*.5,0]):(M=[mt-J*.42,M[1]],I=[-J*j*.5,0])}else{const J=st/(1-j);v=[X,J],b==="labeldown"?(M=[M[0],typeof M[1]=="string"?M[1]:M[1]-J*.42],I=[0,-J*j*.5]):(M=[M[0],typeof M[1]=="string"?M[1]:M[1]+J*.42],I=[0,J*j*.5])}}else if(b==="labelcenter"){const R=f.split(`
19
+ `),H=R.reduce((j,J)=>j.length>J.length?j:J,"").length*G*.65,Q=G*2.5,X=Math.max(Q,H+G*1.6),at=G*1.4,st=Math.max(G*2.8,R.length*at+G*1.2);v=[X,st]}else b==="none"?v=0:Array.isArray(z)?v=[z[0]*1.5,z[1]*1.5]:v=z*1.5;const N=this.getLabelPosition(C,A),Z=N==="inside"||N.startsWith("inside"),F={value:[P,w],symbol:E,symbolSize:v,symbolOffset:M,itemStyle:{color:m},label:{show:!!f,position:N,distance:Z?0:5,offset:I,formatter:f,color:x,fontSize:G,fontWeight:"bold",align:Z?"center":_==="align_left"||_==="left"?"left":_==="align_right"||_==="right"?"right":"center",verticalAlign:"middle",padding:[2,6]}};return D?(F._tooltipText=D,F.emphasis={scale:!1,itemStyle:{color:m},label:{show:F.label.show,color:x,fontSize:G,fontWeight:"bold"}}):F.emphasis={disabled:!0},F}).filter(u=>u!==null);return{name:e,type:"scatter",xAxisIndex:i,yAxisIndex:n,data:d,z:20,animation:!1,clip:!1}}styleToShape(t){switch(t.startsWith("style_")?t.substring(6):t){case"label_down":return"labeldown";case"label_up":return"labelup";case"label_left":return"labelleft";case"label_right":return"labelright";case"label_lower_left":return"labeldown";case"label_lower_right":return"labeldown";case"label_upper_left":return"labelup";case"label_upper_right":return"labelup";case"label_center":return"labelcenter";case"circle":return"circle";case"square":return"square";case"diamond":return"diamond";case"flag":return"flag";case"arrowup":return"arrowup";case"arrowdown":return"arrowdown";case"cross":return"cross";case"xcross":return"xcross";case"triangleup":return"triangleup";case"triangledown":return"triangledown";case"text_outline":return"none";case"none":return"none";default:return"labeldown"}}getLabelPosition(t,e){switch(t.startsWith("style_")?t.substring(6):t){case"label_down":case"label_up":case"label_left":case"label_right":case"label_lower_left":case"label_lower_right":case"label_upper_left":case"label_upper_right":case"label_center":return"inside";case"text_outline":case"none":return e==="abovebar"||e==="AboveBar"||e==="ab"?"top":e==="belowbar"||e==="BelowBar"||e==="bl"?"bottom":"top";default:return e==="belowbar"||e==="BelowBar"||e==="bl"?"bottom":"top"}}getSizePx(t){switch(t){case"tiny":return 8;case"small":return 11;case"normal":case"auto":return 14;case"large":return 20;case"huge":return 36;default:return 14}}}class pi{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,dataIndexOffset:s,timeToIndex:l,marketData:a}=t,o=s||0,c="#2962ff",g=[];for(let p=0;p<r.length;p++){const f=r[p];if(!f)continue;const y=Array.isArray(f)?f:[f];for(const m of y)m&&typeof m=="object"&&!m._deleted&&g.push(m)}if(g.length===0)return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,data:[],silent:!0};const d=(t.candlestickData?.length||0)+o,u=Math.max(0,d-1);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(p,f)=>{const y=[];for(const m of g){if(m._deleted)continue;const x=yt(m.x1,m.xloc,o,l,a),A=yt(m.x2,m.xloc,o,l,a);if(isNaN(x)||isNaN(A))continue;let C=f.coord([x,m.y1]),k=f.coord([A,m.y2]);const _=m.extend||"none";if(_!=="none"&&_!=="n"){const w=p.coordSys;[C,k]=this.extendLine(C,k,_,w.x,w.x+w.width,w.y,w.y+w.height)}const D=m.color||c,b=m.width||1;y.push({type:"line",shape:{x1:C[0],y1:C[1],x2:k[0],y2:k[1]},style:{fill:"none",stroke:D,lineWidth:b,lineDash:this.getDashPattern(m.style)}});const P=m.style||"style_solid";if(P==="style_arrow_left"||P==="style_arrow_both"){const w=this.arrowHead(k,C,b,D);w&&y.push(w)}if(P==="style_arrow_right"||P==="style_arrow_both"){const w=this.arrowHead(C,k,b,D);w&&y.push(w)}}return{type:"group",children:y}},data:[[0,u]],clip:!0,encode:{x:[0,1]},itemStyle:{color:"transparent",borderColor:"transparent"},z:15,silent:!0,emphasis:{disabled:!0}}}getDashPattern(t){switch(t){case"style_dotted":return[2,2];case"style_dashed":return[6,4];default:return}}extendLine(t,e,i,n,r,s,l){const a=e[0]-t[0],o=e[1]-t[1];if(a===0&&o===0)return[t,e];const c=(u,p)=>{let f=1/0;if(p[0]!==0){const y=p[0]>0?(r-u[0])/p[0]:(n-u[0])/p[0];f=Math.min(f,y)}if(p[1]!==0){const y=p[1]>0?(l-u[1])/p[1]:(s-u[1])/p[1];f=Math.min(f,y)}return isFinite(f)||(f=0),[u[0]+f*p[0],u[1]+f*p[1]]};let g=t,d=e;return(i==="right"||i==="r"||i==="both"||i==="b")&&(d=c(t,[a,o])),(i==="left"||i==="l"||i==="both"||i==="b")&&(g=c(e,[-a,-o])),[g,d]}arrowHead(t,e,i,n){const r=e[0]-t[0],s=e[1]-t[1],l=Math.sqrt(r*r+s*s);if(l<1)return null;const a=Math.max(8,i*4),o=r/l,c=s/l,g=e[0]-o*a,d=e[1]-c*a,u=-c*a*.4,p=o*a*.4;return{type:"polygon",shape:{points:[[e[0],e[1]],[g+u,d+p],[g-u,d-p]]},style:{fill:n}}}}class ui{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,dataIndexOffset:s,timeToIndex:l,marketData:a}=t,o=s||0,c=[];for(let u=0;u<r.length;u++){const p=r[u];if(!p)continue;const f=Array.isArray(p)?p:[p];for(const y of f){if(!y||typeof y!="object"||y._deleted)continue;const m=y.line1,x=y.line2;!m||!x||m._deleted||x._deleted||c.push(y)}}if(c.length===0)return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,data:[],silent:!0};const g=(t.candlestickData?.length||0)+o,d=Math.max(0,g-1);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(u,p)=>{const f=[];for(const y of c){if(y._deleted)continue;const m=y.line1,x=y.line2;if(!m||!x||m._deleted||x._deleted)continue;const A=yt(m.x1,m.xloc,o,l,a),C=yt(m.x2,m.xloc,o,l,a),k=yt(x.x1,x.xloc,o,l,a),_=yt(x.x2,x.xloc,o,l,a);if(isNaN(A)||isNaN(C)||isNaN(k)||isNaN(_))continue;let D=p.coord([A,m.y1]),b=p.coord([C,m.y2]),P=p.coord([k,x.y1]),w=p.coord([_,x.y2]);const M=m.extend||"none",E=x.extend||"none";if(M!=="none"||E!=="none"){const v=u.coordSys,$=v.x,I=v.x+v.width,N=v.y,Z=v.y+v.height;M!=="none"&&([D,b]=this.extendLine(D,b,M,$,I,N,Z)),E!=="none"&&([P,w]=this.extendLine(P,w,E,$,I,N,Z))}const{color:z,opacity:G}=ct.parseColor(y.color||"rgba(128, 128, 128, 0.2)");f.push({type:"polygon",shape:{points:[D,b,w,P]},style:{fill:z,opacity:G},silent:!0})}return{type:"group",children:f}},data:[[0,d]],clip:!0,encode:{x:[0,1]},z:10,silent:!0,emphasis:{disabled:!0}}}extendLine(t,e,i,n,r,s,l){const a=e[0]-t[0],o=e[1]-t[1];if(a===0&&o===0)return[t,e];const c=(u,p)=>{let f=1/0;if(p[0]!==0){const y=p[0]>0?(r-u[0])/p[0]:(n-u[0])/p[0];f=Math.min(f,y)}if(p[1]!==0){const y=p[1]>0?(l-u[1])/p[1]:(s-u[1])/p[1];f=Math.min(f,y)}return isFinite(f)||(f=0),[u[0]+f*p[0],u[1]+f*p[1]]};let g=t,d=e;return(i==="right"||i==="both")&&(d=c(t,[a,o])),(i==="left"||i==="both")&&(g=c(e,[-a,-o])),[g,d]}}class gi{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,dataIndexOffset:s,timeToIndex:l,marketData:a}=t,o=s||0,c=[];for(let u=0;u<r.length;u++){const p=r[u];if(!p)continue;const f=Array.isArray(p)?p:[p];for(const y of f)y&&typeof y=="object"&&!y._deleted&&y.points&&y.points.length>=2&&c.push(y)}if(c.length===0)return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,data:[],silent:!0};const g=(t.candlestickData?.length||0)+o,d=Math.max(0,g-1);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(u,p)=>{const f=[];for(const y of c){if(y._deleted)continue;const m=y.points;if(!m||m.length<2)continue;const x=y.xloc==="bi"||y.xloc==="bar_index",A=[];let C=!1;for(const P of m){let w;if(x)w=(P.index??0)+o;else if(w=yt(P.time??0,"bt",o,l,a),isNaN(w)){C=!0;break}const M=P.price??0;A.push(p.coord([w,M]))}if(C||A.length<2)continue;const k=y.line_color,_=k==null||typeof k=="number"&&isNaN(k)||k==="na"||k==="NaN"?null:k||"#2962ff",D=y.line_width||1,b=this.getDashPattern(y.line_style);if(y.fill_color&&y.fill_color!==""&&y.fill_color!=="na"){const{color:P,opacity:w}=ct.parseColor(y.fill_color);if(y.curved){const M=this.buildCurvedPath(A,y.closed);f.push({type:"path",shape:{pathData:M+" Z"},style:{fill:P,opacity:w,stroke:"none"},silent:!0})}else f.push({type:"polygon",shape:{points:A},style:{fill:P,opacity:w,stroke:"none"},silent:!0})}if(_&&D>0)if(y.curved){const P=this.buildCurvedPath(A,y.closed);f.push({type:"path",shape:{pathData:P},style:{fill:"none",stroke:_,lineWidth:D,lineDash:b},silent:!0})}else{const P=y.closed?[...A,A[0]]:A;f.push({type:"polyline",shape:{points:P},style:{fill:"none",stroke:_,lineWidth:D,lineDash:b},silent:!0})}}return{type:"group",children:f}},data:[[0,d]],clip:!0,encode:{x:[0,1]},itemStyle:{color:"transparent",borderColor:"transparent"},z:15,silent:!0,emphasis:{disabled:!0}}}buildCurvedPath(t,e){const i=t.length;if(i<2)return"";if(i===2)return`M ${t[0][0]} ${t[0][1]} L ${t[1][0]} ${t[1][1]}`;const n=.5;let r=`M ${t[0][0]} ${t[0][1]}`;const s=a=>e?t[(a%i+i)%i]:a<0?t[0]:a>=i?t[i-1]:t[a],l=e?i:i-1;for(let a=0;a<l;a++){const o=s(a-1),c=s(a),g=s(a+1),d=s(a+2),u=c[0]+(g[0]-o[0])*n/3,p=c[1]+(g[1]-o[1])*n/3,f=g[0]-(d[0]-c[0])*n/3,y=g[1]-(d[1]-c[1])*n/3;r+=` C ${u} ${p}, ${f} ${y}, ${g[0]} ${g[1]}`}return e&&(r+=" Z"),r}getDashPattern(t){switch(t){case"style_dotted":return[2,2];case"style_dashed":return[6,4];default:return}}}function ie(h){if(!h||typeof h!="string")return h;if(h.startsWith("#")){const t=h.slice(1);if(t.length===8){const e=parseInt(t.slice(0,2),16),i=parseInt(t.slice(2,4),16),n=parseInt(t.slice(4,6),16),r=parseInt(t.slice(6,8),16)/255;return`rgba(${e},${i},${n},${r.toFixed(3)})`}}return h}function yi(h){if(!h||typeof h!="string")return null;if(h.startsWith("#")){const e=h.slice(1);if(e.length>=6){const i=parseInt(e.slice(0,2),16),n=parseInt(e.slice(2,4),16),r=parseInt(e.slice(4,6),16);if(!isNaN(i)&&!isNaN(n)&&!isNaN(r))return{r:i,g:n,b:r}}if(e.length===3){const i=parseInt(e[0]+e[0],16),n=parseInt(e[1]+e[1],16),r=parseInt(e[2]+e[2],16);if(!isNaN(i)&&!isNaN(n)&&!isNaN(r))return{r:i,g:n,b:r}}return null}const t=h.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);return t?{r:+t[1],g:+t[2],b:+t[3]}:null}function fi(h,t,e){return(.299*h+.587*t+.114*e)/255}class xi{render(t){const{seriesName:e,xAxisIndex:i,yAxisIndex:n,dataArray:r,dataIndexOffset:s,timeToIndex:l,marketData:a}=t,o=s||0,c=[];for(let u=0;u<r.length;u++){const p=r[u];if(!p)continue;const f=Array.isArray(p)?p:[p];for(const y of f)y&&typeof y=="object"&&!y._deleted&&c.push(y)}if(c.length===0)return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,data:[],silent:!0};const g=(t.candlestickData?.length||0)+o,d=Math.max(0,g-1);return{name:e,type:"custom",xAxisIndex:i,yAxisIndex:n,renderItem:(u,p)=>{const f=[];for(const y of c){if(y._deleted)continue;const m=yt(y.left,y.xloc,o,l,a),x=yt(y.right,y.xloc,o,l,a);if(isNaN(m)||isNaN(x))continue;const A=p.coord([m,y.top]),C=p.coord([x,y.bottom]);let k=A[0],_=A[1],D=C[0]-A[0],b=C[1]-A[1];const P=y.extend||"none";if(P!=="none"&&P!=="n"){const v=u.coordSys;(P==="left"||P==="l"||P==="both"||P==="b")&&(k=v.x,D=P==="both"||P==="b"?v.width:C[0]-v.x),(P==="right"||P==="r"||P==="both"||P==="b")&&(P==="right"||P==="r")&&(D=v.x+v.width-A[0])}const w=y.bgcolor,M=w==null||typeof w=="number"&&isNaN(w)||w==="na"||w==="NaN"||w===""?null:ie(w)||"#2962ff";M&&f.push({type:"rect",shape:{x:k,y:_,width:D,height:b},style:{fill:M,stroke:"none"}});const E=y.border_color,z=E==null||typeof E=="number"&&isNaN(E)||E==="na"||E==="NaN"?null:ie(E)||"#2962ff",G=y.border_width??1;if(G>0&&z&&f.push({type:"rect",shape:{x:k,y:_,width:D,height:b},style:{fill:"none",stroke:z,lineWidth:G,lineDash:this.getDashPattern(y.border_style)}}),y.text){const v=this.getTextX(k,D,y.text_halign),$=this.getTextY(_,b,y.text_valign);let I=ie(y.text_color)||"#000000";if((!y.text_color||y.text_color==="#000000"||y.text_color==="black"||y.text_color==="color.black")&&M){const F=yi(M);F&&fi(F.r,F.g,F.b)<.5&&(I="#FFFFFF")}const N=!y.text_formatting||y.text_formatting==="format_none"||y.text_formatting==="format_bold",Z=this.computeFontSize(y.text_size,y.text,Math.abs(D),Math.abs(b),N);f.push({type:"text",style:{x:v,y:$,text:y.text,fill:I,fontSize:Z,fontFamily:y.text_font_family==="monospace"?"monospace":"sans-serif",fontWeight:N?"bold":"normal",fontStyle:y.text_formatting==="format_italic"?"italic":"normal",textAlign:this.mapHAlign(y.text_halign),textVerticalAlign:this.mapVAlign(y.text_valign)}})}}return{type:"group",children:f}},data:[[0,d]],clip:!0,encode:{x:[0,1]},itemStyle:{color:"transparent",borderColor:"transparent"},z:14,silent:!0,emphasis:{disabled:!0}}}getDashPattern(t){switch(t){case"style_dotted":return[2,2];case"style_dashed":return[6,4];default:return}}computeFontSize(t,e,i,n,r){if(typeof t=="number"&&t>0)return t;switch(t){case"tiny":case"size.tiny":return 8;case"small":case"size.small":return 10;case"normal":case"size.normal":return 14;case"large":case"size.large":return 20;case"huge":case"size.huge":return 36}if(!e||i<=0||n<=0)return 12;const s=6,l=i-s*2,a=n-s*2;if(l<=0||a<=0)return 6;const o=e.split(`
20
+ `),c=o.length;let g=1;for(const f of o)f.length>g&&(g=f.length);const d=l/(g*(r?.62:.55)),u=a/(c*1.3),p=Math.min(d,u);return Math.max(6,Math.min(p,48))}mapHAlign(t){switch(t){case"left":case"text.align_left":return"left";case"right":case"text.align_right":return"right";case"center":case"text.align_center":default:return"center"}}mapVAlign(t){switch(t){case"top":case"text.align_top":return"top";case"bottom":case"text.align_bottom":return"bottom";case"center":case"text.align_center":default:return"middle"}}getTextX(t,e,i){switch(i){case"left":case"text.align_left":return t+4;case"right":case"text.align_right":return t+e-4;case"center":case"text.align_center":default:return t+e/2}}getTextY(t,e,i){switch(i){case"top":case"text.align_top":return t+4;case"bottom":case"text.align_bottom":return t+e-4;case"center":case"text.align_center":default:return t+e/2}}}var mi=Object.defineProperty,bi=(h,t,e)=>t in h?mi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,vi=(h,t,e)=>(bi(h,typeof t!="symbol"?t+"":t,e),e);const et=class{static register(t,e){this.renderers.set(t,e)}static get(t){return this.renderers.get(t)||this.renderers.get("line")}};vi(et,"renderers",new Map),et.register("line",new ai),et.register("step",new li),et.register("histogram",new ce),et.register("columns",new ce),et.register("circles",new ee),et.register("cross",new ee),et.register("char",new ee),et.register("bar",new pe),et.register("candle",new pe),et.register("shape",new hi),et.register("background",new ci),et.register("fill",new ue),et.register("label",new di),et.register("drawing_line",new pi),et.register("linefill",new ui),et.register("drawing_polyline",new gi),et.register("drawing_box",new xi);let wi=et;var Ci=Object.defineProperty,Pi=(h,t,e)=>t in h?Ci(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ki=(h,t,e)=>(Pi(h,typeof t!="symbol"?t+"":t,e),e);const ge=class he{static buildCandlestickSeries(t,e,i){const n=e.upColor||"#00da3c",r=e.downColor||"#ec0000",s=t.map(a=>[a.open,a.close,a.low,a.high]);if(i&&i>s.length){const a=i-s.length;for(let o=0;o<a;o++)s.push(null)}let l;if(e.lastPriceLine?.visible!==!1&&t.length>0){const a=t[t.length-1],o=a.close,c=a.close>=a.open,g=e.lastPriceLine?.color||(c?n:r);let d=e.lastPriceLine?.lineStyle||"dashed";d.startsWith("linestyle_")&&(d=d.replace("linestyle_",""));const u=e.yAxisDecimalPlaces!==void 0?e.yAxisDecimalPlaces:q.autoDetectDecimals(t);l={symbol:["none","none"],precision:u,data:[{yAxis:o,label:{show:!0,position:"end",formatter:p=>e.yAxisLabelFormatter?e.yAxisLabelFormatter(p.value):q.formatValue(p.value,u),color:"#fff",backgroundColor:g,padding:[2,4],borderRadius:2,fontSize:11,fontWeight:"bold"},lineStyle:{color:g,type:d,width:1,opacity:.8}}],animation:!1,silent:!0}}return{type:"candlestick",id:"__candlestick__",name:e.title,data:s,itemStyle:{color:n,color0:r,borderColor:n,borderColor0:r},markLine:l,xAxisIndex:0,yAxisIndex:0,z:5}}static buildIndicatorSeries(t,e,i,n,r=0,s,l,a=1){const o=[],c=new Array(n).fill(null),g=s?.filter(u=>u!=null&&u.time!==void 0),d=new Map;return t.forEach((u,p)=>{if(u.collapsed)return;const f=Object.keys(u.plots).sort((m,x)=>{const A=u.plots[m],C=u.plots[x],k=A.options.style==="fill",_=C.options.style==="fill";return k&&!_?1:!k&&_?-1:0}),y=new Map;if(f.forEach(m=>{const x=u.plots[m],A=x.options.display==="none",C=`${p}::${m}`;let k=0,_=0,D=x.options.overlay;if(x.options.style==="fill"&&D===void 0){const z=x.options.plot1,G=x.options.plot2;if(z&&G){const v=u.plots[z],$=u.plots[G];(v?.options?.overlay===!0||$?.options?.overlay===!0)&&(D=!0)}}if(u.paneIndex===0||D===!0)k=0,l&&l.has(C)?_=l.get(C):_=0;else{const z=i.findIndex(G=>G.index===u.paneIndex);z!==-1&&(k=z+1,_=a+z)}const b=new Array(n).fill(null),P=new Array(n).fill(null),w=new Array(n).fill(null),M=new Array(n).fill(null);if(x.data?.forEach(z=>{const G=e.get(z.time);if(G!==void 0){const v=z.options?.offset??x.options.offset??0,$=G+r+v;if($>=0&&$<n){let I=z.value;const N=z.options?.color;P[$]=I;const Z=z.options!=null&&"color"in z.options,F=N===null||N==="na"||N==="NaN"||typeof N=="number"&&isNaN(N)||Z&&N===void 0;F&&(I=null),b[$]=I,w[$]=F?null:N||x.options.color||he.DEFAULT_COLOR,M[$]=z.options||{}}}}),d.set(`${p}::${m}`,P),A)return;if(x.options?.style?.startsWith("style_")&&(x.options.style=x.options.style.replace("style_","")),x.options.style==="barcolor"){x.data?.forEach(z=>{const G=e.get(z.time);if(G!==void 0){const v=z.options?.offset??x.options.offset??0,$=G+r+v;if($>=0&&$<n){const I=z.options?.color||x.options.color||he.DEFAULT_COLOR;!(I===null||I==="na"||I==="NaN"||typeof I=="number"&&isNaN(I))&&z.value!==null&&z.value!==void 0&&(c[$]=I)}}});return}if(x.options.style==="table")return;if(x.options.style==="fill"&&x.options.gradient!==!0){const z=x.options.plot1?`${p}::${x.options.plot1}`:null,G=x.options.plot2?`${p}::${x.options.plot2}`:null;if(z&&G){const v=d.get(z),$=d.get(G);if(v&&$){const{color:I,opacity:N}=ct.parseColor(x.options.color||"rgba(128, 128, 128, 0.2)"),Z=M.some(H=>H&&H.color!==void 0),F=[];for(let H=0;H<n;H++){const Q=M[H];Z&&Q&&Q.color!==void 0?F[H]=ct.parseColor(Q.color):F[H]={color:I,opacity:N}}const R=`${k}:${_}`;y.has(R)||y.set(R,{entries:[],xAxisIndex:k,yAxisIndex:_}),y.get(R).entries.push({plot1Data:v,plot2Data:$,barColors:F});return}}}{const z=x.options.color;let G=!1;if(z==null?G=!w.some(v=>v!=null):typeof z=="string"&&ct.parseColor(z).opacity<.01&&(G=!w.some(v=>v==null?!1:ct.parseColor(v).opacity>=.01)),G)return}const E=wi.get(x.options.style).render({seriesName:C,xAxisIndex:k,yAxisIndex:_,dataArray:b,colorArray:w,optionsArray:M,plotOptions:x.options,candlestickData:s,plotDataArrays:d,indicatorId:p,plotName:m,dataIndexOffset:r,timeToIndex:e,marketData:g});E&&o.push(E)}),y.size>0){const m=new ue;y.forEach(({entries:x,xAxisIndex:A,yAxisIndex:C},k)=>{if(x.length>=2){const _=m.renderBatched(`${p}::fills_batch_${k}`,A,C,n,x);_&&o.push(_)}else if(x.length===1){const _=m.renderBatched(`${p}::fills_batch_${k}`,A,C,n,x);_&&o.push(_)}})}}),{series:o,barColors:c}}};ki(ge,"DEFAULT_COLOR","#2962ff");let St=ge;class Di{static build(t,e,i,n=!1,r=null,s=[]){const l=[],a=t.pixelToPercent,o=t.mainPaneTop;if(!r||r==="main"){const c=10*a;if(l.push({type:"text",left:"8.5%",top:o+c+"%",z:10,style:{text:e.title||"",fill:e.titleColor||"#fff",font:`bold 16px ${e.fontFamily||"sans-serif"}`,textVerticalAlign:"top"}}),s.length>0){const d=20*a,u=16*a;s.forEach((p,f)=>{l.push({type:"text",left:"8.5%",top:o+c+d+f*u+"%",z:10,style:{text:p.id,fill:p.titleColor||"#9e9e9e",font:`bold 12px ${e.fontFamily||"sans-serif"}`,textVerticalAlign:"top"}})})}if(e.watermark!==!1){const d=t.mainPaneTop+t.mainPaneHeight;l.push({type:"text",right:"11%",top:d-3+"%",z:10,style:{text:"QFChart",fill:e.fontColor||"#cbd5e1",font:"bold 16px sans-serif",opacity:.1},cursor:"pointer",onclick:()=>{window.open("https://quantforge.org","_blank")}})}const g=[];if(e.controls?.collapse&&g.push({type:"group",children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>i("main","collapse")},{type:"text",style:{text:n?"+":"\u2212",fill:"#cbd5e1",font:`bold 14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]}),e.controls?.maximize){const d=r==="main",u=e.controls?.collapse?25:0;g.push({type:"group",x:u,children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>i("main","maximize")},{type:"text",style:{text:d?"\u2750":"\u25A1",fill:"#cbd5e1",font:`14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]})}if(e.controls?.fullscreen){let d=0;e.controls?.collapse&&(d+=25),e.controls?.maximize&&(d+=25),g.push({type:"group",x:d,children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>i("main","fullscreen")},{type:"text",style:{text:"\u26F6",fill:"#cbd5e1",font:`14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]})}g.length>0&&l.push({type:"group",right:"10.5%",top:o+"%",children:g})}if(!r&&t.paneBoundaries.length>0){const c=-8*a;for(const g of t.paneBoundaries)l.push({type:"group",left:"10%",top:g.yPercent+c+"%",children:[{type:"rect",shape:{width:5e3,height:12,y:-6},style:{fill:"transparent"},cursor:"row-resize"},{type:"rect",shape:{width:5e3,height:2,y:-1},style:{fill:"#475569",opacity:.7},cursor:"row-resize"}],z:50,onmouseover:function(){const d=this.children()[1];d&&(d.setStyle({fill:"#94a3b8",opacity:1}),d.setShape({height:3,y:-1.5}))},onmouseout:function(){const d=this.children()[1];d&&(d.setStyle({fill:"#475569",opacity:.7}),d.setShape({height:2,y:-1}))}})}return t.paneLayout.forEach(c=>{if(r&&c.indicatorId!==r)return;l.push({type:"text",left:"8.5%",top:c.top+10*a+"%",z:10,style:{text:c.indicatorId||"",fill:c.titleColor||"#fff",font:`bold 12px ${e.fontFamily||"sans-serif"}`,textVerticalAlign:"top"}});const g=[];if(c.controls?.collapse&&g.push({type:"group",children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>c.indicatorId&&i(c.indicatorId,"collapse")},{type:"text",style:{text:c.isCollapsed?"+":"\u2212",fill:"#cbd5e1",font:`bold 14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]}),c.controls?.maximize){const d=r===c.indicatorId,u=c.controls?.collapse?25:0;g.push({type:"group",x:u,children:[{type:"rect",shape:{width:20,height:20,r:2},style:{fill:"#334155",stroke:"#475569",lineWidth:1},onclick:()=>c.indicatorId&&i(c.indicatorId,"maximize")},{type:"text",style:{text:d?"\u2750":"\u25A1",fill:"#cbd5e1",font:`14px ${e.fontFamily}`,x:10,y:10,textAlign:"center",textVerticalAlign:"middle"},silent:!0}]})}g.length>0&&l.push({type:"group",right:"10.5%",top:c.top+"%",children:g})}),l}}class Mi{static format(t,e){if(!t||t.length===0)return"";const i=e.title||"",n=e.upColor||"#00da3c",r=e.downColor||"#ec0000",s=e.fontFamily||"sans-serif",l=t[0].axisValue;let a=`<div style="font-weight: bold; margin-bottom: 5px; color: #cbd5e1; font-family: ${s};">${l}</div>`;const o=t.find(g=>g.seriesType==="candlestick"),c=t.filter(g=>g.seriesType!=="candlestick");if(o){const[g,d,u,p,f]=o.value,y=u>=d?n:r;a+=`
20
21
  <div style="margin-bottom: 8px; font-family: ${s};">
21
- <div style="display:flex; justify-content:space-between; color:${f}; font-weight:bold;">
22
+ <div style="display:flex; justify-content:space-between; color:${y}; font-weight:bold;">
22
23
  <span>${i}</span>
23
24
  </div>
24
25
  <div style="display: grid; grid-template-columns: auto auto; gap: 2px 15px; font-size: 0.9em; color: #cbd5e1;">
25
- <span>Open:</span> <span style="text-align: right; color: ${g>=d?n:r}">${d}</span>
26
- <span>High:</span> <span style="text-align: right; color: ${n}">${y}</span>
27
- <span>Low:</span> <span style="text-align: right; color: ${r}">${c}</span>
28
- <span>Close:</span> <span style="text-align: right; color: ${g>=d?n:r}">${g}</span>
26
+ <span>Open:</span> <span style="text-align: right; color: ${u>=d?n:r}">${d}</span>
27
+ <span>High:</span> <span style="text-align: right; color: ${n}">${f}</span>
28
+ <span>Low:</span> <span style="text-align: right; color: ${r}">${p}</span>
29
+ <span>Close:</span> <span style="text-align: right; color: ${u>=d?n:r}">${u}</span>
29
30
  </div>
30
31
  </div>
31
- `}if(p.length>0){a+='<div style="border-top: 1px solid #334155; margin: 5px 0; padding-top: 5px;"></div>';const u={};p.forEach(d=>{const g=d.seriesName.split("::"),c=g.length>1?g[0]:"Unknown",y=g.length>1?g[1]:d.seriesName;u[c]||(u[c]=[]),u[c].push({...d,displayName:y})}),Object.keys(u).forEach(d=>{a+=`
32
+ `}if(c.length>0){a+='<div style="border-top: 1px solid #334155; margin: 5px 0; padding-top: 5px;"></div>';const g={};c.forEach(d=>{const u=d.seriesName.split("::"),p=u.length>1?u[0]:"Unknown",f=u.length>1?u[1]:d.seriesName;g[p]||(g[p]=[]),g[p].push({...d,displayName:f})}),Object.keys(g).forEach(d=>{a+=`
32
33
  <div style="margin-top: 8px; font-family: ${s};">
33
34
  <div style="font-weight:bold; color: #fff; margin-bottom: 2px;">${d}</div>
34
- `,u[d].forEach(g=>{let c=g.value;if(Array.isArray(c)&&(c=c[1]),c==null)return;const y=typeof c=="number"?c.toLocaleString(void 0,{maximumFractionDigits:4}):c;a+=`
35
+ `,g[d].forEach(u=>{let p=u.value;if(Array.isArray(p)&&(p=p[1]),p==null)return;const f=typeof p=="number"?p.toLocaleString(void 0,{maximumFractionDigits:4}):p;a+=`
35
36
  <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2px; padding-left: 8px;">
36
- <div>${g.marker} <span style="color: #cbd5e1;">${g.displayName}</span></div>
37
- <div style="font-size: 10px; color: #fff;padding-left:10px;">${y}</div>
38
- </div>`}),a+="</div>"})}return a}}var Mi=Object.defineProperty,Ii=(h,t,e)=>t in h?Mi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,It=(h,t,e)=>(Ii(h,typeof t!="symbol"?t+"":t,e),e);class Ai{constructor(t,e){It(this,"plugins",new Map),It(this,"activePluginId",null),It(this,"context"),It(this,"toolbarContainer"),It(this,"tooltipElement",null),It(this,"hideTimeout",null),this.context=t,this.toolbarContainer=e,this.createTooltip(),this.renderToolbar()}createTooltip(){this.tooltipElement=document.createElement("div"),Object.assign(this.tooltipElement.style,{position:"fixed",display:"none",backgroundColor:"#1e293b",color:"#e2e8f0",padding:"6px 10px",borderRadius:"6px",fontSize:"13px",lineHeight:"1.4",fontWeight:"500",border:"1px solid #334155",zIndex:"9999",pointerEvents:"none",whiteSpace:"nowrap",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.15)",fontFamily:this.context.getOptions().fontFamily||"sans-serif",transition:"opacity 0.15s ease-in-out, transform 0.15s ease-in-out",opacity:"0",transform:"translateX(-5px)"}),document.body.appendChild(this.tooltipElement)}destroy(){this.tooltipElement&&this.tooltipElement.parentNode&&this.tooltipElement.parentNode.removeChild(this.tooltipElement),this.tooltipElement=null}showTooltip(t,e){if(!this.tooltipElement)return;this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=null);const i=t.getBoundingClientRect();this.tooltipElement.textContent=e,this.tooltipElement.style.display="block";const n=this.tooltipElement.getBoundingClientRect(),r=i.top+(i.height-n.height)/2,s=i.right+10;this.tooltipElement.style.top=`${r}px`,this.tooltipElement.style.left=`${s}px`,requestAnimationFrame(()=>{this.tooltipElement&&(this.tooltipElement.style.opacity="1",this.tooltipElement.style.transform="translateX(0)")})}hideTooltip(){this.tooltipElement&&(this.tooltipElement.style.opacity="0",this.tooltipElement.style.transform="translateX(-5px)",this.hideTimeout&&clearTimeout(this.hideTimeout),this.hideTimeout=setTimeout(()=>{this.tooltipElement&&(this.tooltipElement.style.display="none"),this.hideTimeout=null},150))}register(t){if(this.plugins.has(t.id)){console.warn(`Plugin with id ${t.id} is already registered.`);return}this.plugins.set(t.id,t),t.init(this.context),this.addButton(t)}unregister(t){const e=this.plugins.get(t);e&&(this.activePluginId===t&&this.deactivatePlugin(),e.destroy?.(),this.plugins.delete(t),this.removeButton(t))}activatePlugin(t){if(this.activePluginId===t){this.deactivatePlugin();return}this.activePluginId&&this.deactivatePlugin();const e=this.plugins.get(t);e&&(this.activePluginId=t,this.setButtonActive(t,!0),e.activate?.())}deactivatePlugin(){this.activePluginId&&(this.plugins.get(this.activePluginId)?.deactivate?.(),this.setButtonActive(this.activePluginId,!1),this.activePluginId=null)}renderToolbar(){this.toolbarContainer.innerHTML="",this.toolbarContainer.classList.add("qfchart-toolbar"),this.toolbarContainer.style.display="flex",this.toolbarContainer.style.flexDirection="column",this.toolbarContainer.style.width="40px",this.toolbarContainer.style.backgroundColor=this.context.getOptions().backgroundColor||"#1e293b",this.toolbarContainer.style.borderRight="1px solid #334155",this.toolbarContainer.style.padding="5px",this.toolbarContainer.style.boxSizing="border-box",this.toolbarContainer.style.gap="5px",this.toolbarContainer.style.flexShrink="0"}addButton(t){const e=document.createElement("button");e.id=`qfchart-plugin-btn-${t.id}`,e.style.width="30px",e.style.height="30px",e.style.padding="4px",e.style.border="1px solid transparent",e.style.borderRadius="4px",e.style.backgroundColor="transparent",e.style.cursor="pointer",e.style.color=this.context.getOptions().fontColor||"#cbd5e1",e.style.display="flex",e.style.alignItems="center",e.style.justifyContent="center",t.icon?e.innerHTML=t.icon:e.innerText=(t.name||t.id).substring(0,2).toUpperCase(),e.addEventListener("mouseenter",()=>{this.activePluginId!==t.id&&(e.style.backgroundColor="rgba(255, 255, 255, 0.1)"),this.showTooltip(e,t.name||t.id)}),e.addEventListener("mouseleave",()=>{this.activePluginId!==t.id&&(e.style.backgroundColor="transparent"),this.hideTooltip()}),e.onclick=()=>this.activatePlugin(t.id),this.toolbarContainer.appendChild(e)}removeButton(t){const e=this.toolbarContainer.querySelector(`#qfchart-plugin-btn-${t}`);e&&e.remove()}setButtonActive(t,e){const i=this.toolbarContainer.querySelector(`#qfchart-plugin-btn-${t}`);i&&(e?(i.style.backgroundColor="#2563eb",i.style.color="#ffffff"):(i.style.backgroundColor="transparent",i.style.color=this.context.getOptions().fontColor||"#cbd5e1"))}}var _i=Object.defineProperty,Si=(h,t,e)=>t in h?_i(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ot=(h,t,e)=>(Si(h,typeof t!="symbol"?t+"":t,e),e);class zi{constructor(t){ot(this,"context"),ot(this,"isEditing",!1),ot(this,"currentDrawing",null),ot(this,"editingPointIndex",null),ot(this,"zr"),ot(this,"editGroup",null),ot(this,"editLines",[]),ot(this,"editPoints",[]),ot(this,"isMovingShape",!1),ot(this,"dragStart",null),ot(this,"initialPixelPoints",[]),ot(this,"onDrawingMouseDown",e=>{if(this.isEditing)return;const i=this.context.getDrawing(e.id);i&&(this.isEditing=!0,this.isMovingShape=!0,this.currentDrawing=JSON.parse(JSON.stringify(i)),this.dragStart={x:e.x,y:e.y},this.initialPixelPoints=i.points.map(n=>{const r=this.context.coordinateConversion.dataToPixel(n);return r?{x:r.x,y:r.y}:{x:0,y:0}}),this.context.lockChart(),this.createEditGraphic(),this.zr.on("mousemove",this.onMouseMove),this.zr.on("mouseup",this.onMouseUp),window.addEventListener("mouseup",this.onWindowMouseUp))}),ot(this,"onPointMouseDown",e=>{if(this.isEditing)return;const i=this.context.getDrawing(e.id);i&&(this.isEditing=!0,this.currentDrawing=JSON.parse(JSON.stringify(i)),this.editingPointIndex=e.pointIndex,this.initialPixelPoints=i.points.map(n=>{const r=this.context.coordinateConversion.dataToPixel(n);return r?{x:r.x,y:r.y}:{x:0,y:0}}),this.context.lockChart(),this.createEditGraphic(),this.zr.on("mousemove",this.onMouseMove),this.zr.on("mouseup",this.onMouseUp),window.addEventListener("mouseup",this.onWindowMouseUp))}),ot(this,"onMouseMove",e=>{if(!this.isEditing||!this.currentDrawing)return;const i=e.offsetX,n=e.offsetY;if(this.isMovingShape&&this.dragStart){const r=i-this.dragStart.x,s=n-this.dragStart.y,l=this.initialPixelPoints.map(a=>({x:a.x+r,y:a.y+s}));for(let a=0;a<this.editLines.length;a++)this.editLines[a].setShape({x1:l[a].x,y1:l[a].y,x2:l[a+1].x,y2:l[a+1].y});for(let a=0;a<this.editPoints.length;a++)this.editPoints[a].setShape({cx:l[a].x,cy:l[a].y})}else if(this.editingPointIndex!==null){const r=this.initialPixelPoints.map(s=>({x:s.x,y:s.y}));r[this.editingPointIndex]={x:i,y:n};for(let s=0;s<this.editLines.length;s++)this.editLines[s].setShape({x1:r[s].x,y1:r[s].y,x2:r[s+1].x,y2:r[s+1].y});this.editPoints[this.editingPointIndex].setShape({cx:i,cy:n})}}),ot(this,"onMouseUp",e=>{this.isEditing&&this.finishEditing(e.offsetX,e.offsetY)}),ot(this,"onWindowMouseUp",e=>{if(!this.isEditing)return;const i=this.zr.dom;if(i){const n=i.getBoundingClientRect(),r=e.clientX-n.left,s=e.clientY-n.top;this.finishEditing(r,s)}else this.finishEditing(this.dragStart?.x??0,this.dragStart?.y??0)}),this.context=t,this.zr=this.context.getChart().getZr(),this.bindEvents()}bindEvents(){this.context.events.on("drawing:point:mousedown",this.onPointMouseDown),this.context.events.on("drawing:mousedown",this.onDrawingMouseDown)}createEditGraphic(){if(!this.currentDrawing)return;this.editGroup=new D.graphic.Group,this.editLines=[],this.editPoints=[];const t=this.currentDrawing.points.map(i=>{const n=this.context.coordinateConversion.dataToPixel(i);return n?{x:n.x,y:n.y}:null});if(t.some(i=>!i))return;const e=t;for(let i=0;i<e.length-1;i++){const n=new D.graphic.Line({shape:{x1:e[i].x,y1:e[i].y,x2:e[i+1].x,y2:e[i+1].y},style:{stroke:this.currentDrawing.style?.color||"#3b82f6",lineWidth:this.currentDrawing.style?.lineWidth||2,lineDash:[4,4]},silent:!0});this.editLines.push(n),this.editGroup.add(n)}for(let i=0;i<e.length;i++){const n=new D.graphic.Circle({shape:{cx:e[i].x,cy:e[i].y,r:5},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:2},z:1e3});this.editPoints.push(n),this.editGroup.add(n)}this.zr.add(this.editGroup)}pixelToDataForPane(t,e,i){const n=this.context.coordinateConversion.pixelToData({x:t,y:e});if(n)return n;try{const r=this.context.getChart(),s=r.convertFromPixel({gridIndex:i},[t,e]);if(s){const l=r.getOption()?.xAxis?.[i]?.data,a=this.context.getMarketData(),o=l?Math.round((l.length-a.length)/2):0;return{timeIndex:Math.round(s[0])-o,value:s[1],paneIndex:i}}}catch{}return null}finishEditing(t,e){if(!this.currentDrawing){this.cleanup();return}const i=this.currentDrawing.paneIndex||0;if(this.isMovingShape&&this.dragStart){const n=t-this.dragStart.x,r=e-this.dragStart.y,s=this.initialPixelPoints.map(l=>this.pixelToDataForPane(l.x+n,l.y+r,i));if(s.every(l=>l!==null)){for(let l=0;l<s.length;l++)this.currentDrawing.points[l]=s[l];s[0]?.paneIndex!==void 0&&(this.currentDrawing.paneIndex=s[0].paneIndex),this.context.updateDrawing(this.currentDrawing)}}else if(this.editingPointIndex!==null){const n=this.pixelToDataForPane(t,e,i);n&&(this.currentDrawing.points[this.editingPointIndex]=n,this.editingPointIndex===0&&n.paneIndex!==void 0&&(this.currentDrawing.paneIndex=n.paneIndex),this.context.updateDrawing(this.currentDrawing))}this.cleanup()}cleanup(){this.isEditing=!1,this.isMovingShape=!1,this.dragStart=null,this.initialPixelPoints=[],this.currentDrawing=null,this.editingPointIndex=null,this.editLines=[],this.editPoints=[],this.editGroup&&(this.zr.remove(this.editGroup),this.editGroup=null),this.zr.off("mousemove",this.onMouseMove),this.zr.off("mouseup",this.onMouseUp),window.removeEventListener("mouseup",this.onWindowMouseUp),this.context.unlockChart()}}var $i=Object.defineProperty,Gi=(h,t,e)=>t in h?$i(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ei=(h,t,e)=>(Gi(h,typeof t!="symbol"?t+"":t,e),e);class ge{constructor(){Ei(this,"renderers",new Map)}register(t){this.renderers.set(t.type,t)}get(t){return this.renderers.get(t)}}var Li=Object.defineProperty,Ti=(h,t,e)=>t in h?Li(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Wi=(h,t,e)=>(Ti(h,typeof t!="symbol"?t+"":t,e),e);class Fi{constructor(){Wi(this,"handlers",new Map)}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set),this.handlers.get(t).add(e)}off(t,e){const i=this.handlers.get(t);i&&i.delete(e)}emit(t,e){const i=this.handlers.get(t);i&&i.forEach(n=>{try{n(e)}catch(r){console.error(`Error in EventBus handler for ${t}:`,r)}})}clear(){this.handlers.clear()}}class rt{static safeParseColor(t){if(!t||typeof t!="string")return{color:"#888888",opacity:1};const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(e){const i=e[4]?parseFloat(e[4]):1;return{color:`rgb(${e[1]},${e[2]},${e[3]})`,opacity:i}}return{color:t,opacity:1}}static render(t,e,i){rt.clearAll(t);const n=new Map;for(const r of e)r&&!r._deleted&&n.set(r.position,r);n.forEach(r=>{const s=r._paneIndex??0,l=i?i(s):void 0,a=rt.buildTable(r,l);rt.positionTable(a,r.position,l),t.appendChild(a)})}static clearAll(t){for(;t.firstChild;)t.removeChild(t.firstChild)}static buildTable(t,e){const i=document.createElement("table"),n=t.border_width??0,r=t.frame_width??0;if(n>0&&t.border_color||r>0&&t.frame_color?(i.style.borderCollapse="separate",i.style.borderSpacing="0"):i.style.borderCollapse="collapse",i.style.pointerEvents="none",i.style.fontSize="14px",i.style.lineHeight="1.4",i.style.fontFamily="sans-serif",i.style.margin="4px",e&&(i.style.maxHeight=e.height+"px",i.style.maxWidth=e.width+"px",i.style.overflow="hidden"),t.bgcolor){const{color:d,opacity:g}=rt.safeParseColor(t.bgcolor);i.style.backgroundColor=d,g<1&&(i.style.opacity=String(g))}if(r>0&&t.frame_color){const{color:d}=rt.safeParseColor(t.frame_color);i.style.border=`${r}px solid ${d}`}else i.style.border="none";const s=new Map,l=new Set;if(t.merges)for(const d of t.merges){const g=`${d.startCol},${d.startRow}`;s.set(g,{colspan:d.endCol-d.startCol+1,rowspan:d.endRow-d.startRow+1});for(let c=d.startRow;c<=d.endRow;c++)for(let y=d.startCol;y<=d.endCol;y++)c===d.startRow&&y===d.startCol||l.add(`${y},${c}`)}const a=n>0&&!!t.border_color,o=a?rt.safeParseColor(t.border_color).color:"",p=t.rows||0,u=t.columns||0;for(let d=0;d<p;d++){const g=document.createElement("tr");for(let c=0;c<u;c++){const y=`${c},${d}`;if(l.has(y))continue;const f=document.createElement("td"),x=s.get(y);x&&(x.colspan>1&&(f.colSpan=x.colspan),x.rowspan>1&&(f.rowSpan=x.rowspan)),a?f.style.border=`${n}px solid ${o}`:f.style.border="none";const m=t.cells?.[d]?.[c];if(m&&!m._merged){if(f.textContent=m.text||"",m.bgcolor&&typeof m.bgcolor=="string"&&m.bgcolor.length>0){const{color:v,opacity:k}=rt.safeParseColor(m.bgcolor);f.style.backgroundColor=v,k<1&&(f.style.backgroundColor=m.bgcolor)}if(m.text_color){const{color:v}=rt.safeParseColor(m.text_color);f.style.color=v}if(f.style.fontSize=rt.getSizePixels(m.text_size)+"px",f.style.textAlign=rt.mapHAlign(m.text_halign),f.style.verticalAlign=rt.mapVAlign(m.text_valign),m.text_font_family==="monospace"&&(f.style.fontFamily="monospace"),m.width>0)if(e){const v=Math.max(1,m.width*e.width/100);f.style.width=v+"px"}else f.style.width=m.width+"%";if(m.height>0)if(e){const v=Math.max(1,m.height*e.height/100);f.style.height=v+"px"}else f.style.height=m.height+"%";m.tooltip&&(f.title=m.tooltip)}const I=m?.height??0;I>0&&e&&I*e.height/100<4?f.style.padding="0":f.style.padding="4px 6px",f.style.whiteSpace="nowrap",g.appendChild(f)}i.appendChild(g)}return i}static positionTable(t,e,i){t.style.position="absolute";const n=8,r=i?i.y+"px":"0",s=i?i.x+"px":"0",l=i?i.y+i.height-n+"px":"0",a=i?i.x+i.width-n+"px":"0",o=i?i.x+i.width/2+"px":"50%",p=i?i.y+i.height/2+"px":"50%";switch(e){case"top_left":t.style.top=r,t.style.left=s;break;case"top_center":t.style.top=r,t.style.left=o,t.style.transform="translateX(-50%)";break;case"top_right":t.style.top=r,t.style.left=a,t.style.transform="translateX(-100%)";break;case"middle_left":t.style.top=p,t.style.left=s,t.style.transform="translateY(-50%)";break;case"middle_center":t.style.top=p,t.style.left=o,t.style.transform="translate(-50%, -50%)";break;case"middle_right":t.style.top=p,t.style.left=a,t.style.transform="translate(-100%, -50%)";break;case"bottom_left":t.style.top=l,t.style.left=s,t.style.transform="translateY(-100%)";break;case"bottom_center":t.style.top=l,t.style.left=o,t.style.transform="translate(-50%, -100%)";break;case"bottom_right":t.style.top=l,t.style.left=a,t.style.transform="translate(-100%, -100%)";break;default:t.style.top=r,t.style.left=a,t.style.transform="translateX(-100%)";break}}static getSizePixels(t){if(typeof t=="number"&&t>0)return t;switch(t){case"auto":case"size.auto":return 12;case"tiny":case"size.tiny":return 8;case"small":case"size.small":return 10;case"normal":case"size.normal":return 14;case"large":case"size.large":return 20;case"huge":case"size.huge":return 36;default:return 14}}static mapHAlign(t){switch(t){case"left":case"text.align_left":return"left";case"right":case"text.align_right":return"right";case"center":case"text.align_center":default:return"center"}}static mapVAlign(t){switch(t){case"top":case"text.align_top":return"top";case"bottom":case"text.align_bottom":return"bottom";case"center":case"text.align_center":default:return"middle"}}}class it{static parseColor(t){if(!t||typeof t!="string"||t.length===0)return{color:"",opacity:0};const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(e){const i=e[4]?parseFloat(e[4]):1;return{color:`rgb(${e[1]},${e[2]},${e[3]})`,opacity:i}}if(/^#[0-9a-fA-F]{8}$/.test(t)){const i=parseInt(t.slice(1,3),16),n=parseInt(t.slice(3,5),16),r=parseInt(t.slice(5,7),16),s=parseInt(t.slice(7,9),16)/255;return{color:`rgb(${i},${n},${r})`,opacity:s}}return{color:t,opacity:1}}static getSizePixels(t){if(typeof t=="number"&&t>0)return t;switch(t){case"auto":case"size.auto":return 11;case"tiny":case"size.tiny":return 8;case"small":case"size.small":return 10;case"normal":case"size.normal":return 12;case"large":case"size.large":return 16;case"huge":case"size.huge":return 24;default:return 12}}static mapHAlign(t){switch(t){case"left":case"text.align_left":return"left";case"right":case"text.align_right":return"right";default:return"center"}}static mapVAlign(t){switch(t){case"top":case"text.align_top":return"top";case"bottom":case"text.align_bottom":return"bottom";default:return"middle"}}static buildGraphicElements(t,e){if(!t||t.length===0)return[];const i=new Map;for(const r of t)r&&!r._deleted&&i.set(r.position,r);const n=[];return i.forEach(r=>{const s=r._paneIndex??0,l=e(s);if(!l)return;const a=it.buildTableElements(r,l);n.push(...a)}),n}static buildTableElements(t,e){const i=t.rows||0,n=t.columns||0;if(i===0||n===0)return[];const r=t.border_width??0,s=t.frame_width??0,l=r>0&&!!t.border_color,a=s>0&&!!t.frame_color,o=new Map,p=new Set;if(t.merges)for(const P of t.merges){o.set(`${P.startCol},${P.startRow}`,{colspan:P.endCol-P.startCol+1,rowspan:P.endRow-P.startRow+1});for(let G=P.startRow;G<=P.endRow;G++)for(let M=P.startCol;M<=P.endCol;M++)G===P.startRow&&M===P.startCol||p.add(`${M},${G}`)}const u=4,d=2,g=1.25,c=[];for(let P=0;P<i;P++){c[P]=[];for(let G=0;G<n;G++){if(p.has(`${G},${P}`)){c[P][G]={text:"",lines:[],fontSize:12,fontFamily:"sans-serif",textColor:{color:"",opacity:0},bgColor:{color:"",opacity:0},halign:"center",valign:"middle",explicitWidth:0,explicitHeight:0,colspan:1,rowspan:1,skip:!0,padX:0,padY:0};continue}const M=t.cells?.[P]?.[G],R=o.get(`${G},${P}`),F=R?.colspan??1,J=R?.rowspan??1,H=M&&!M._merged&&M.text||"",Y=H?H.split(`
39
- `):[],at=M?it.getSizePixels(M.text_size):12,U=M?.text_font_family==="monospace"?"monospace":"sans-serif";let nt=0,O=0;M?.width>0&&(nt=Math.max(1,M.width*e.width/100)),M?.height>0&&(O=Math.max(1,M.height*e.height/100));const V=O>0&&O<4,ae=V?0:u,qt=V?0:d,Ut=M&&!M._merged&&M.bgcolor&&typeof M.bgcolor=="string"&&M.bgcolor.length>0?M.bgcolor:"",kt=M?.text_color||"";c[P][G]={text:H,lines:Y,fontSize:at,fontFamily:U,textColor:kt?it.parseColor(kt):{color:"#e0e0e0",opacity:1},bgColor:Ut?it.parseColor(Ut):{color:"",opacity:0},halign:M?it.mapHAlign(M.text_halign):"center",valign:M?it.mapVAlign(M.text_valign):"middle",explicitWidth:nt,explicitHeight:O,colspan:F,rowspan:J,skip:!1,padX:ae,padY:qt}}}const y=new Array(n).fill(0),f=new Array(i).fill(0);for(let P=0;P<i;P++)for(let G=0;G<n;G++){const M=c[P][G];if(M.skip||M.colspan>1||M.rowspan>1)continue;const R=it.measureMultiLineWidth(M.lines,M.fontSize,M.fontFamily),F=Math.max(M.lines.length,1),J=M.explicitWidth>0?M.explicitWidth:R+M.padX*2,H=M.explicitHeight>0?M.explicitHeight:F*M.fontSize*g+M.padY*2;y[G]=Math.max(y[G],J),f[P]=Math.max(f[P],H)}for(let P=0;P<n;P++)y[P]===0&&(y[P]=20);for(let P=0;P<i;P++)f[P]===0&&(f[P]=4);for(let P=0;P<i;P++)for(let G=0;G<n;G++){const M=c[P][G];if(M.skip)continue;const R=Math.max(M.lines.length,1),F=M.explicitHeight>0?M.explicitHeight:R*M.fontSize*g+M.padY*2;if(M.colspan>1){const J=it.sumRange(y,G,M.colspan),H=it.measureMultiLineWidth(M.lines,M.fontSize,M.fontFamily),Y=M.explicitWidth>0?M.explicitWidth:H+M.padX*2;if(Y>J){const at=(Y-J)/M.colspan;for(let U=0;U<M.colspan;U++)y[G+U]+=at}M.rowspan===1&&(f[P]=Math.max(f[P],F))}if(M.rowspan>1){const J=it.sumRange(f,P,M.rowspan);if(F>J){const H=(F-J)/M.rowspan;for(let Y=0;Y<M.rowspan;Y++)f[P+Y]+=H}}}for(let P=0;P<n;P++)y[P]=Math.round(y[P]);for(let P=0;P<i;P++)f[P]=Math.round(f[P]);const x=new Array(n+1).fill(0);for(let P=0;P<n;P++)x[P+1]=x[P]+y[P];const m=new Array(i+1).fill(0);for(let P=0;P<i;P++)m[P+1]=m[P]+f[P];const I=a?s:0,v=x[n]+I*2,k=m[i]+I*2,A=Math.min(v,e.width),w=Math.min(k,e.height),b=it.computePosition(t.position,e,A,w),C=Math.round(b.x),_=Math.round(b.y),z=[],S=C+I,$=_+I;if(t.bgcolor){const{color:P,opacity:G}=it.parseColor(t.bgcolor);G>0&&z.push({type:"rect",shape:{x:C,y:_,width:A,height:w},style:{fill:P,opacity:G},silent:!0,z:0,z2:0})}if(a){const{color:P}=it.parseColor(t.frame_color),G=s/2;z.push({type:"rect",shape:{x:C+G,y:_+G,width:A-s,height:w-s},style:{fill:"none",stroke:P,lineWidth:s},silent:!0,z:0,z2:1})}const L=l?it.parseColor(t.border_color).color:"";for(let P=0;P<i;P++)for(let G=0;G<n;G++){const M=c[P][G];if(M.skip)continue;const R=S+x[G],F=$+m[P],J=it.sumRange(y,G,M.colspan),H=it.sumRange(f,P,M.rowspan);if(R-C>=A||F-_>=w)continue;const Y=Math.min(J,A-(R-C)),at=Math.min(H,w-(F-_));if(M.bgColor.opacity>0&&z.push({type:"rect",shape:{x:R,y:F,width:Y,height:at},style:{fill:M.bgColor.color,opacity:M.bgColor.opacity},silent:!0,z:0,z2:2}),l&&z.push({type:"rect",shape:{x:R,y:F,width:Y,height:at},style:{fill:"none",stroke:L,lineWidth:r},silent:!0,z:0,z2:3}),M.text){let U,nt;switch(M.halign){case"left":U=R+M.padX,nt="left";break;case"right":U=R+Y-M.padX,nt="right";break;default:U=R+Y/2,nt="center";break}let O,V;switch(M.valign){case"top":O=F+M.padY,V="top";break;case"bottom":O=F+at-M.padY,V="bottom";break;default:O=F+at/2,V="middle";break}z.push({type:"text",x:U,y:O,style:{text:M.text,fill:M.textColor.color,opacity:M.textColor.opacity,font:`${M.fontSize}px ${M.fontFamily}`,textAlign:nt,textVerticalAlign:V,lineHeight:Math.round(M.fontSize*g)},silent:!0,z:0,z2:4})}}return z}static computePosition(t,e,i,n){const r=e.x,s=e.y,l=e.width,a=e.height;switch(t){case"top_left":return{x:r+4,y:s+4};case"top_center":return{x:r+(l-i)/2,y:s+4};case"top_right":return{x:r+l-i-4,y:s+4};case"middle_left":return{x:r+4,y:s+(a-n)/2};case"middle_center":return{x:r+(l-i)/2,y:s+(a-n)/2};case"middle_right":return{x:r+l-i-4,y:s+(a-n)/2};case"bottom_left":return{x:r+4,y:s+a-n-4};case"bottom_center":return{x:r+(l-i)/2,y:s+a-n-4};case"bottom_right":return{x:r+l-i-4,y:s+a-n-4};default:return{x:r+l-i-4,y:s+4}}}static measureMultiLineWidth(t,e,i){if(!t||t.length===0)return 0;const n=i==="monospace"?.6:.55;let r=0;for(const s of t)r=Math.max(r,s.length*e*n);return r}static sumRange(t,e,i){let n=0;for(let r=e;r<e+i&&r<t.length;r++)n+=t[r];return n}}var Zi=Object.defineProperty,Ni=(h,t,e)=>t in h?Zi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,W=(h,t,e)=>(Ni(h,typeof t!="symbol"?t+"":t,e),e);class Ri{constructor(t,e={}){W(this,"chart"),W(this,"options"),W(this,"marketData",[]),W(this,"indicators",new Map),W(this,"timeToIndex",new Map),W(this,"pluginManager"),W(this,"drawingEditor"),W(this,"events",new Fi),W(this,"isMainCollapsed",!1),W(this,"maximizedPaneId",null),W(this,"countdownInterval",null),W(this,"selectedDrawingId",null),W(this,"drawings",[]),W(this,"drawingRenderers",new ge),W(this,"coordinateConversion",{pixelToData:s=>{const l=this.chart.getOption();if(!l||!l.grid)return null;const a=l.grid.length;for(let o=0;o<a;o++)if(this.chart.containPixel({gridIndex:o},[s.x,s.y])){this.chart.convertFromPixel({seriesIndex:o},[s.x,s.y]);const p=this.chart.convertFromPixel({gridIndex:o},[s.x,s.y]);if(p)return{timeIndex:Math.round(p[0])-this.dataIndexOffset,value:p[1],paneIndex:o}}return null},dataToPixel:s=>{const l=s.paneIndex||0,a=this.chart.convertToPixel({gridIndex:l},[s.timeIndex+this.dataIndexOffset,s.value]);return a?{x:a[0],y:a[1]}:null}}),W(this,"upColor","#00da3c"),W(this,"downColor","#ec0000"),W(this,"defaultPadding",0),W(this,"padding"),W(this,"dataIndexOffset",0),W(this,"_paddingPoints",0),W(this,"LAZY_MIN_PADDING",5),W(this,"LAZY_MAX_PADDING",500),W(this,"LAZY_CHUNK_SIZE",50),W(this,"LAZY_EDGE_THRESHOLD",10),W(this,"_expandScheduled",!1),W(this,"rootContainer"),W(this,"layoutContainer"),W(this,"toolbarContainer"),W(this,"leftSidebar"),W(this,"rightSidebar"),W(this,"chartContainer"),W(this,"overlayContainer"),W(this,"_lastTables",[]),W(this,"_tableGraphicIds",[]),W(this,"_baseGraphics",[]),W(this,"_labelTooltipEl",null),W(this,"_lastLayout",null),W(this,"_mainHeightOverride",null),W(this,"_paneDragState",null),W(this,"_paneResizeRafId",null),W(this,"onKeyDown",s=>{(s.key==="Delete"||s.key==="Backspace")&&this.selectedDrawingId&&(this.removeDrawing(this.selectedDrawingId),this.selectedDrawingId=null,this.render())}),W(this,"onFullscreenChange",()=>{this.render()}),W(this,"isLocked",!1),W(this,"lockedState",null),this.rootContainer=t,this.options={title:void 0,height:"600px",backgroundColor:"#1e293b",upColor:"#00da3c",downColor:"#ec0000",fontColor:"#cbd5e1",fontFamily:"sans-serif",padding:.01,dataZoom:{visible:!0,position:"top",height:6},layout:{mainPaneHeight:"50%",gap:13},watermark:!0,...e},this.options.upColor&&(this.upColor=this.options.upColor),this.options.downColor&&(this.downColor=this.options.downColor),this.padding=this.options.padding!==void 0?this.options.padding:this.defaultPadding,this.options.height&&(typeof this.options.height=="number"?this.rootContainer.style.height=`${this.options.height}px`:this.rootContainer.style.height=this.options.height),this.rootContainer.innerHTML="",this.layoutContainer=document.createElement("div"),this.layoutContainer.style.display="flex",this.layoutContainer.style.width="100%",this.layoutContainer.style.height="100%",this.layoutContainer.style.overflow="hidden",this.rootContainer.appendChild(this.layoutContainer),this.leftSidebar=document.createElement("div"),this.leftSidebar.style.display="none",this.leftSidebar.style.width="250px",this.leftSidebar.style.flexShrink="0",this.leftSidebar.style.overflowY="auto",this.leftSidebar.style.backgroundColor=this.options.backgroundColor||"#1e293b",this.leftSidebar.style.borderRight="1px solid #334155",this.leftSidebar.style.padding="10px",this.leftSidebar.style.boxSizing="border-box",this.leftSidebar.style.color="#cbd5e1",this.leftSidebar.style.fontSize="12px",this.leftSidebar.style.fontFamily=this.options.fontFamily||"sans-serif",this.layoutContainer.appendChild(this.leftSidebar),this.toolbarContainer=document.createElement("div"),this.layoutContainer.appendChild(this.toolbarContainer),this.chartContainer=document.createElement("div"),this.chartContainer.style.flexGrow="1",this.chartContainer.style.height="100%",this.chartContainer.style.overflow="hidden",this.layoutContainer.appendChild(this.chartContainer),this.rightSidebar=document.createElement("div"),this.rightSidebar.style.display="none",this.rightSidebar.style.width="250px",this.rightSidebar.style.flexShrink="0",this.rightSidebar.style.overflowY="auto",this.rightSidebar.style.backgroundColor=this.options.backgroundColor||"#1e293b",this.rightSidebar.style.borderLeft="1px solid #334155",this.rightSidebar.style.padding="10px",this.rightSidebar.style.boxSizing="border-box",this.rightSidebar.style.color="#cbd5e1",this.rightSidebar.style.fontSize="12px",this.rightSidebar.style.fontFamily=this.options.fontFamily||"sans-serif",this.layoutContainer.appendChild(this.rightSidebar),this.chart=D.init(this.chartContainer),this.chartContainer.style.position="relative",this.overlayContainer=document.createElement("div"),this.overlayContainer.style.cssText="position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:100;overflow:hidden;",this.chartContainer.appendChild(this.overlayContainer),this.pluginManager=new Ai(this,this.toolbarContainer),this.drawingEditor=new zi(this),this.chart.on("dataZoom",s=>{this.events.emit("chart:dataZoom",s);const l=this.options.databox?.triggerOn,a=this.options.databox?.position;l==="click"&&a==="floating"&&this.chart.dispatchAction({type:"hideTip"}),this._checkEdgeAndExpand()}),this.chart.on("finished",s=>this.events.emit("chart:updated",s)),this.chart.getZr().on("mousedown",s=>{this._paneDragState||this.events.emit("mouse:down",s)}),this.chart.getZr().on("mousemove",s=>{this._paneDragState||this.events.emit("mouse:move",s)}),this.chart.getZr().on("mouseup",s=>this.events.emit("mouse:up",s)),this.chart.getZr().on("click",s=>{this._paneDragState||this.events.emit("mouse:click",s)});const i=this.chart.getZr(),n=i.setCursorStyle,r=this;i.setCursorStyle=function(s){if(r._paneDragState){n.call(this,"row-resize");return}s==="grab"&&(s="crosshair"),n.call(this,s)},this.bindDrawingEvents(),this.bindPaneResizeEvents(),window.addEventListener("resize",this.resize.bind(this)),document.addEventListener("fullscreenchange",this.onFullscreenChange),document.addEventListener("keydown",this.onKeyDown)}bindPaneResizeEvents(){const t=this.chart.getZr(),e=n=>{if(!this._lastLayout||this._lastLayout.paneBoundaries.length===0||this.maximizedPaneId)return null;const r=this.chart.getHeight();if(r<=0)return null;for(const s of this._lastLayout.paneBoundaries){const l=s.yPercent/100*r;if(Math.abs(n-l)<=6){if(s.aboveId==="main"&&this.isMainCollapsed||this.indicators.get(s.belowId)?.collapsed||s.aboveId!=="main"&&this.indicators.get(s.aboveId)?.collapsed)continue;return s}}return null},i=n=>n==="main"?this._lastLayout?.mainPaneHeight??50:this.indicators.get(n)?.height??15;t.on("mousemove",n=>{if(this._paneDragState){const r=n.offsetY-this._paneDragState.startY,s=this.chart.getHeight();if(s<=0)return;const l=r/s*100,a=this._paneDragState.aboveId==="main"?10:5,o=5;let p=this._paneDragState.startAboveHeight+l,u=this._paneDragState.startBelowHeight-l;if(p<a&&(p=a,u=this._paneDragState.startAboveHeight+this._paneDragState.startBelowHeight-a),u<o&&(u=o,p=this._paneDragState.startAboveHeight+this._paneDragState.startBelowHeight-o),this._paneDragState.aboveId==="main")this._mainHeightOverride=p;else{const g=this.indicators.get(this._paneDragState.aboveId);g&&(g.height=p)}const d=this.indicators.get(this._paneDragState.belowId);d&&(d.height=u),this._paneResizeRafId||(this._paneResizeRafId=requestAnimationFrame(()=>{this._paneResizeRafId=null,this.render()})),t.setCursorStyle("row-resize"),n.stop?.();return}e(n.offsetY)&&t.setCursorStyle("row-resize")}),t.on("mousedown",n=>{const r=e(n.offsetY);r&&(this._paneDragState={startY:n.offsetY,aboveId:r.aboveId,belowId:r.belowId,startAboveHeight:i(r.aboveId),startBelowHeight:i(r.belowId)},t.setCursorStyle("row-resize"),n.stop?.())}),t.on("mouseup",()=>{this._paneDragState&&(this._paneDragState=null,this._paneResizeRafId&&(cancelAnimationFrame(this._paneResizeRafId),this._paneResizeRafId=null),this.render())})}bindDrawingEvents(){let t=null;const e=i=>{if(!i||i.componentType!=="series"||!i.seriesName?.startsWith("drawings"))return null;i.seriesIndex;const n=i.seriesName.match(/drawings-pane-(\d+)/);if(!n)return null;const r=parseInt(n[1]),s=this.drawings.filter(a=>(a.paneIndex||0)===r)[i.dataIndex];if(!s)return null;const l=i.event?.target?.name;return{drawing:s,targetName:l,paneIdx:r}};this.chart.on("mouseover",i=>{const n=e(i);if(!n)return;const r=i.event?.target?.parent;if(r){const s=n.drawing.id===this.selectedDrawingId;t&&(clearTimeout(t),t=null),s||r.children().forEach(l=>{l.name&&l.name.startsWith("point")&&l.attr("style",{opacity:1})})}if(n.targetName==="line")this.events.emit("drawing:hover",{id:n.drawing.id,type:n.drawing.type}),this.chart.getZr().setCursorStyle("move");else if(n.targetName?.startsWith("point-")){const s=parseInt(n.targetName.split("-")[1])||0;this.events.emit("drawing:point:hover",{id:n.drawing.id,pointIndex:s}),this.chart.getZr().setCursorStyle("pointer")}}),this.chart.on("mouseout",i=>{const n=e(i);if(!n)return;const r=i.event?.target?.parent;if(n.drawing.id!==this.selectedDrawingId){if(t=setTimeout(()=>{if(r){if(this.selectedDrawingId===n.drawing.id)return;r.children().forEach(s=>{s.name&&s.name.startsWith("point")&&s.attr("style",{opacity:0})})}},50),n.targetName==="line")this.events.emit("drawing:mouseout",{id:n.drawing.id});else if(n.targetName?.startsWith("point-")){const s=parseInt(n.targetName.split("-")[1])||0;this.events.emit("drawing:point:mouseout",{id:n.drawing.id,pointIndex:s})}this.chart.getZr().setCursorStyle("default")}}),this.chart.on("mousedown",i=>{const n=e(i);if(!n)return;const r=i.event?.event||i.event,s=r?.offsetX,l=r?.offsetY;if(n.targetName==="line")this.events.emit("drawing:mousedown",{id:n.drawing.id,x:s,y:l});else if(n.targetName?.startsWith("point-")){const a=parseInt(n.targetName.split("-")[1])||0;this.events.emit("drawing:point:mousedown",{id:n.drawing.id,pointIndex:a,x:s,y:l})}}),this.chart.on("click",i=>{const n=e(i);if(n){if(this.selectedDrawingId!==n.drawing.id&&(this.selectedDrawingId=n.drawing.id,this.events.emit("drawing:selected",{id:n.drawing.id}),this.render()),n.targetName==="line")this.events.emit("drawing:click",{id:n.drawing.id});else if(n.targetName?.startsWith("point-")){const r=parseInt(n.targetName.split("-")[1])||0;this.events.emit("drawing:point:click",{id:n.drawing.id,pointIndex:r})}}}),this.chart.getZr().on("click",i=>{i.target||this.selectedDrawingId&&(this.events.emit("drawing:deselected",{id:this.selectedDrawingId}),this.selectedDrawingId=null,this.render())}),this._labelTooltipEl=document.createElement("div"),this._labelTooltipEl.style.cssText="position:absolute;display:none;pointer-events:none;z-index:200;background:rgba(30,41,59,0.95);color:#fff;border:1px solid #475569;border-radius:4px;padding:6px 10px;font-size:12px;line-height:1.5;white-space:pre-wrap;max-width:350px;box-shadow:0 2px 8px rgba(0,0,0,0.3);font-family:"+(this.options.fontFamily||"sans-serif")+";",this.chartContainer.appendChild(this._labelTooltipEl),this.chart.on("mouseover",{seriesType:"scatter"},i=>{const n=i.data?._tooltipText;if(!n||!this._labelTooltipEl)return;this._labelTooltipEl.textContent=n,this._labelTooltipEl.style.display="block";const r=this.chartContainer.getBoundingClientRect(),s=i.event?.event;if(s){const l=s.clientX-r.left,a=s.clientY-r.top,o=this._labelTooltipEl.offsetWidth,p=Math.min(l-o/2,r.width-o-8);this._labelTooltipEl.style.left=Math.max(4,p)+"px",this._labelTooltipEl.style.top=a+18+"px"}}),this.chart.on("mouseout",{seriesType:"scatter"},()=>{this._labelTooltipEl&&(this._labelTooltipEl.style.display="none")})}getChart(){return this.chart}getMarketData(){return this.marketData}getTimeToIndex(){return this.timeToIndex}getOptions(){return this.options}disableTools(){this.pluginManager.deactivatePlugin()}registerPlugin(t){this.pluginManager.register(t)}registerDrawingRenderer(t){this.drawingRenderers.register(t)}snapToCandle(t){const e=this.coordinateConversion.pixelToData(t);if(!e)return t;const i=e.paneIndex||0;if(i!==0)return t;const n=Math.round(e.timeIndex);if(n<0||n>=this.marketData.length)return t;const r=this.marketData[n];if(!r)return t;const s=this.chart.convertToPixel({gridIndex:i},[n+this.dataIndexOffset,r.close]);if(!s)return t;const l=s[0],a=[r.open,r.high,r.low,r.close];let o=a[0],p=1/0;for(const d of a){const g=this.chart.convertToPixel({gridIndex:i},[n+this.dataIndexOffset,d]);if(g){const c=Math.abs(g[1]-t.y);c<p&&(p=c,o=d)}}const u=this.chart.convertToPixel({gridIndex:i},[n+this.dataIndexOffset,o]);return{x:l,y:u?u[1]:t.y}}addDrawing(t){this.drawings.push(t),this.render()}removeDrawing(t){const e=this.drawings.findIndex(i=>i.id===t);if(e!==-1){const i=this.drawings[e];this.drawings.splice(e,1),this.events.emit("drawing:deleted",{id:i.id}),this.render()}}getDrawing(t){return this.drawings.find(e=>e.id===t)}updateDrawing(t){const e=this.drawings.findIndex(i=>i.id===t.id);e!==-1&&(this.drawings[e]=t,this.render())}lockChart(){if(this.isLocked)return;this.isLocked=!0;const t=this.chart.getOption();this.chart.setOption({dataZoom:t.dataZoom.map(e=>({...e,disabled:!0})),tooltip:{show:!1}})}unlockChart(){if(!this.isLocked)return;this.isLocked=!1;const t=this.chart.getOption();(this.options.dataZoom||{}).visible,t.dataZoom&&this.chart.setOption({dataZoom:t.dataZoom.map(e=>({...e,disabled:!1})),tooltip:{show:!0}})}setZoom(t,e){this.chart.dispatchAction({type:"dataZoom",start:t,end:e})}setMarketData(t){this.marketData=t,this.rebuildTimeIndex(),this.render()}updateData(t){if(t.length===0)return;const e=new Map;this.marketData.forEach(x=>{e.set(x.time,x)}),t.forEach(x=>{e.has(x.time),e.set(x.time,x)}),this.marketData=Array.from(e.values()).sort((x,m)=>x.time-m.time),this.rebuildTimeIndex();const i=this.dataIndexOffset,n=Mt.buildCandlestickSeries(this.marketData,this.options),r={value:[NaN,NaN,NaN,NaN],itemStyle:{opacity:0}},s=[...Array(i).fill(r),...n.data,...Array(i).fill(r)],l=[...Array(i).fill(""),...this.marketData.map(x=>new Date(x.time).toLocaleString()),...Array(i).fill("")],a=this.chart.getOption(),o=Kt.calculate(this.chart.getHeight(),this.indicators,this.options,this.isMainCollapsed,this.maximizedPaneId,this.marketData,this._mainHeightOverride??void 0);this._lastLayout=o;const p=[...Array(i).fill(null),...this.marketData,...Array(i).fill(null)],{series:u,barColors:d}=Mt.buildIndicatorSeries(this.indicators,this.timeToIndex,o.paneLayout,l.length,i,p,o.overlayYAxisMap,o.separatePaneYAxisOffset),g=s.map((x,m)=>d[m]?{value:x.value||x,itemStyle:{color:d[m],color0:d[m]}}:x),c=this._buildDrawingRangeHints(o,i),y={xAxis:a.xAxis.map((x,m)=>({data:l})),series:[{data:g,markLine:n.markLine},...u,...c]};this.chart.setOption(y,{notMerge:!1});const f=[];this.indicators.forEach(x=>{Object.values(x.plots).forEach(m=>{m.options?.style==="table"&&m.data?.forEach(I=>{(Array.isArray(I.value)?I.value:[I.value]).forEach(v=>{v&&!v._deleted&&(v._paneIndex=v.force_overlay?0:x.paneIndex,f.push(v))})})})}),this._lastTables=f,this._renderTableOverlays(),this.startCountdown()}startCountdown(){if(this.stopCountdown(),!this.options.lastPriceLine?.showCountdown||this.marketData.length===0)return;let t=this.options.interval;if(!t&&this.marketData.length>=2){const i=this.marketData[this.marketData.length-1],n=this.marketData[this.marketData.length-2];t=i.time-n.time}if(!t)return;const e=()=>{if(this.marketData.length===0)return;const i=this.marketData[this.marketData.length-1].time+t,n=Date.now(),r=i-n;if(r<=0)return;const s=Math.abs(r),l=Math.floor(s/36e5),a=Math.floor(s%36e5/6e4),o=Math.floor(s%6e4/1e3),p=`${l>0?l.toString().padStart(2,"0")+":":""}${a.toString().padStart(2,"0")}:${o.toString().padStart(2,"0")}`,u=this.chart.getOption();if(!u||!u.series)return;const d=u.series.findIndex(m=>m.type==="candlestick");if(d===-1)return;const g=u.series[d];if(!g.markLine||!g.markLine.data||!g.markLine.data[0])return;const c=g.markLine.data[0];c.label.formatter;const y=c.yAxis;let f="";if(this.options.yAxisLabelFormatter)f=this.options.yAxisLabelFormatter(y);else{const m=this.options.yAxisDecimalPlaces!==void 0?this.options.yAxisDecimalPlaces:X.autoDetectDecimals(this.marketData);f=X.formatValue(y,m)}const x=`${f}
40
- ${p}`;this.chart.setOption({series:[{id:"__candlestick__",markLine:{data:[{...c,label:{...c.label,formatter:x}}]}}]})};e(),this.countdownInterval=setInterval(e,1e3)}stopCountdown(){this.countdownInterval&&(clearInterval(this.countdownInterval),this.countdownInterval=null)}addIndicator(t,e,i={}){const n=i.overlay!==void 0?i.overlay:i.isOverlay??!1;let r=0;if(!n){let l=0;this.indicators.forEach(a=>{a.paneIndex>l&&(l=a.paneIndex)}),r=l+1}const s=new oi(t,e,r,{height:i.height,collapsed:!1,titleColor:i.titleColor,controls:i.controls});return this.indicators.set(t,s),this.render(),s}setIndicator(t,e,i=!1){this.addIndicator(t,{[t]:e},{overlay:i})}removeIndicator(t){this.indicators.delete(t),this.render()}toggleIndicator(t,e="collapse"){if(e==="fullscreen"){document.fullscreenElement?document.exitFullscreen():this.rootContainer.requestFullscreen();return}if(e==="maximize"){this.maximizedPaneId===t?this.maximizedPaneId=null:this.maximizedPaneId=t,this.render();return}if(t==="main"){this.isMainCollapsed=!this.isMainCollapsed,this.render();return}const i=this.indicators.get(t);i&&(i.toggleCollapse(),this.render())}resize(){this.chart.resize(),this._renderTableOverlays()}_buildDrawingRangeHints(t,e){const i=[],n=new Map;for(const s of this.indicators){if(!s.plots)continue;const l=s.paneIndex??0;n.has(l)||n.set(l,{yMin:1/0,yMax:-1/0});const a=n.get(l);for(const[o,p]of Object.entries(s.plots)){if(!p||!p.options)continue;const u=p.options?.style;if(u==="drawing_line"&&p.data)for(const d of p.data){const g=d?.value?Array.isArray(d.value)?d.value:[d.value]:[];for(const c of g)!c||c._deleted||(typeof c.y1=="number"&&isFinite(c.y1)&&(a.yMin=Math.min(a.yMin,c.y1),a.yMax=Math.max(a.yMax,c.y1)),typeof c.y2=="number"&&isFinite(c.y2)&&(a.yMin=Math.min(a.yMin,c.y2),a.yMax=Math.max(a.yMax,c.y2)))}if(u==="drawing_box"&&p.data)for(const d of p.data){const g=d?.value?Array.isArray(d.value)?d.value:[d.value]:[];for(const c of g)!c||c._deleted||(typeof c.top=="number"&&isFinite(c.top)&&(a.yMin=Math.min(a.yMin,c.top),a.yMax=Math.max(a.yMax,c.top)),typeof c.bottom=="number"&&isFinite(c.bottom)&&(a.yMin=Math.min(a.yMin,c.bottom),a.yMax=Math.max(a.yMax,c.bottom)))}if(u==="label"&&p.data)for(const d of p.data){const g=d?.value?Array.isArray(d.value)?d.value:[d.value]:[];for(const c of g)!c||c._deleted||typeof c.y=="number"&&isFinite(c.y)&&(a.yMin=Math.min(a.yMin,c.y),a.yMax=Math.max(a.yMax,c.y))}if(u==="drawing_polyline"&&p.data)for(const d of p.data){const g=d?.value?Array.isArray(d.value)?d.value:[d.value]:[];for(const c of g)if(!(!c||c._deleted||!c._points))for(const y of c._points)typeof y?.price=="number"&&isFinite(y.price)&&(a.yMin=Math.min(a.yMin,y.price),a.yMax=Math.max(a.yMax,y.price))}}}const r=e+Math.floor((this.marketData?.length||0)/2);return n.forEach((s,l)=>{if(!isFinite(s.yMin)||!isFinite(s.yMax))return;const a=l===0?0:(t.separatePaneYAxisOffset||1)+(l-1);i.push({name:`_drawingRange_pane${l}`,type:"scatter",xAxisIndex:l,yAxisIndex:a,symbol:"none",symbolSize:0,silent:!0,animation:!1,data:[[r,s.yMin],[r,s.yMax]],tooltip:{show:!1}})}),i}_buildTableGraphics(){const t=this.chart.getModel(),e=n=>t.getComponent("grid",n)?.coordinateSystem?.getRect(),i=it.buildGraphicElements(this._lastTables,e);this._tableGraphicIds=[];for(let n=0;n<i.length;n++){const r=`__qf_table_${n}`;i[n].id=r,this._tableGraphicIds.push(r)}return i}_renderTableOverlays(){const t=this._buildTableGraphics(),e=[...this._baseGraphics,...t];this.chart.setOption({graphic:e},{replaceMerge:["graphic"]}),rt.clearAll(this.overlayContainer)}destroy(){this.stopCountdown(),window.removeEventListener("resize",this.resize.bind(this)),document.removeEventListener("fullscreenchange",this.onFullscreenChange),document.removeEventListener("keydown",this.onKeyDown),this.pluginManager.deactivatePlugin(),this.pluginManager.destroy(),this.chart.dispose()}rebuildTimeIndex(){this.timeToIndex.clear(),this.marketData.forEach((i,n)=>{this.timeToIndex.set(i.time,n)});const t=this.marketData.length,e=Math.ceil(t*this.padding);this._paddingPoints=Math.max(this._paddingPoints,e,this.LAZY_MIN_PADDING),this.dataIndexOffset=this._paddingPoints}expandPadding(t){this._resizePadding(t)}_resizePadding(t){const e=Math.ceil(this.marketData.length*this.padding);if(t=Math.max(t,e,this.LAZY_MIN_PADDING),t=Math.min(t,this.LAZY_MAX_PADDING),t===this._paddingPoints)return;const i=this._paddingPoints,n=this.marketData.length+2*i,r=this.chart.getOption(),s=r?.dataZoom?.find(_=>_.type==="slider"||_.type==="inside"),l=s?s.start/100*n:0,a=s?s.end/100*n:n,o=t-i;this._paddingPoints=t,this.dataIndexOffset=this._paddingPoints;const p=this._paddingPoints,u={value:[NaN,NaN,NaN,NaN],itemStyle:{opacity:0}},d=Mt.buildCandlestickSeries(this.marketData,this.options),g=[...Array(p).fill(u),...d.data,...Array(p).fill(u)],c=[...Array(p).fill(""),...this.marketData.map(_=>new Date(_.time).toLocaleString()),...Array(p).fill("")],y=[...Array(p).fill(null),...this.marketData,...Array(p).fill(null)],f=Kt.calculate(this.chart.getHeight(),this.indicators,this.options,this.isMainCollapsed,this.maximizedPaneId,this.marketData,this._mainHeightOverride??void 0),{series:x,barColors:m}=Mt.buildIndicatorSeries(this.indicators,this.timeToIndex,f.paneLayout,c.length,p,y,f.overlayYAxisMap,f.separatePaneYAxisOffset),I=g.map((_,z)=>m[z]?{value:_.value||_,itemStyle:{color:m[z],color0:m[z]}}:_),v=this.marketData.length+2*t,k=Math.max(0,(l+o)/v*100),A=Math.min(100,(a+o)/v*100),w=[],b=new Map;this.drawings.forEach(_=>{const z=_.paneIndex||0;b.has(z)||b.set(z,[]),b.get(z).push(_)}),b.forEach(_=>{w.push({data:_.map(z=>{const S=[];return z.points.forEach($=>{S.push($.timeIndex+this.dataIndexOffset,$.value)}),S})})});const C={xAxis:r.xAxis.map(()=>({data:c})),dataZoom:(r.dataZoom||[]).map(()=>({start:k,end:A})),series:[{data:I,markLine:d.markLine},...x.map(_=>{const z={data:_.data};return _.renderItem&&(z.renderItem=_.renderItem),z}),...w]};this.chart.setOption(C,{notMerge:!1})}_checkEdgeAndExpand(){if(this._expandScheduled)return;const t=this.chart.getOption()?.dataZoom?.find(y=>y.type==="slider"||y.type==="inside");if(!t)return;const e=this._paddingPoints,i=this.marketData.length,n=i+2*e,r=Math.round(t.start/100*n),s=Math.round(t.end/100*n),l=e,a=e+i-1,o=Math.max(0,Math.min(s,a)-Math.max(r,l)+1),p=r<this.LAZY_EDGE_THRESHOLD,u=s>n-this.LAZY_EDGE_THRESHOLD;if((p||u)&&e<this.LAZY_MAX_PADDING&&o>=3){this._expandScheduled=!0,requestAnimationFrame(()=>{this._expandScheduled=!1,this._resizePadding(e+this.LAZY_CHUNK_SIZE)});return}const d=Math.max(0,e-r),g=Math.max(0,s-(e+i-1)),c=Math.max(d+this.LAZY_CHUNK_SIZE,g+this.LAZY_CHUNK_SIZE);e>c+this.LAZY_CHUNK_SIZE&&(this._expandScheduled=!0,requestAnimationFrame(()=>{this._expandScheduled=!1,this._resizePadding(c)}))}render(){if(this.marketData.length===0)return;let t=null;try{const w=this.chart.getOption();if(w&&w.dataZoom&&w.dataZoom.length>0){const b=w.dataZoom.find(C=>C.type==="slider"||C.type==="inside");b&&(t={start:b.start,end:b.end})}}catch{}const e=this.options.databox?.position,i=this.leftSidebar.style.display,n=this.rightSidebar.style.display,r=e==="left"?"block":"none",s=e==="right"?"block":"none";(i!==r||n!==s)&&(this.leftSidebar.style.display=r,this.rightSidebar.style.display=s,this.chart.resize());const l=this.dataIndexOffset,a=[...Array(l).fill(""),...this.marketData.map(w=>new Date(w.time).toLocaleString()),...Array(l).fill("")],o=Kt.calculate(this.chart.getHeight(),this.indicators,this.options,this.isMainCollapsed,this.maximizedPaneId,this.marketData,this._mainHeightOverride??void 0);if(this._lastLayout=o,!t&&o.dataZoom&&this.marketData.length>0){const w=this.marketData.length,b=a.length,C=l/b,_=w/b;o.dataZoom.forEach(z=>{if(z.start!==void 0){const S=z.start/100,$=C+S*_;z.start=$*100}if(z.end!==void 0){const S=z.end/100,$=C+S*_;z.end=$*100}})}t&&o.dataZoom&&o.dataZoom.forEach(w=>{w.start=t.start,w.end=t.end}),o.xAxis.forEach(w=>{w.data=a,w.boundaryGap=!1});const p=Mt.buildCandlestickSeries(this.marketData,this.options),u={value:[NaN,NaN,NaN,NaN],itemStyle:{opacity:0}};p.data=[...Array(l).fill(u),...p.data,...Array(l).fill(u)];const d=[...Array(l).fill(null),...this.marketData,...Array(l).fill(null)],{series:g,barColors:c}=Mt.buildIndicatorSeries(this.indicators,this.timeToIndex,o.paneLayout,a.length,l,d,o.overlayYAxisMap,o.separatePaneYAxisOffset),y=this._buildDrawingRangeHints(o,l);p.data=p.data.map((w,b)=>c[b]?{value:w.value||w,itemStyle:{color:c[b],color0:c[b]}}:w);const f=[];this.indicators.forEach((w,b)=>{w.paneIndex===0&&f.push({id:b,titleColor:w.titleColor})});const x=ki.build(o,this.options,this.toggleIndicator.bind(this),this.isMainCollapsed,this.maximizedPaneId,f),m=new Map;this.drawings.forEach(w=>{const b=w.paneIndex||0;m.has(b)||m.set(b,[]),m.get(b).push(w)});const I=[];m.forEach((w,b)=>{I.push({type:"custom",name:`drawings-pane-${b}`,xAxisIndex:b,yAxisIndex:b,clip:!0,renderItem:(C,_)=>{const z=w[C.dataIndex];if(!z)return;const S=this.drawingRenderers.get(z.type);if(!S)return;const $=this.dataIndexOffset,L=z.points.map(P=>_.coord([P.timeIndex+$,P.value]));return S.render({drawing:z,pixelPoints:L,isSelected:z.id===this.selectedDrawingId,api:_,coordSys:C.coordSys})},data:w.map(C=>{const _=[];return C.points.forEach(z=>{_.push(z.timeIndex+this.dataIndexOffset,z.value)}),_}),encode:(()=>{const C=w.reduce((S,$)=>Math.max(S,$.points.length),0),_=Array.from({length:C},(S,$)=>$*2),z=Array.from({length:C},(S,$)=>$*2+1);return{x:_,y:z}})(),z:100,silent:!1})});const v=w=>{const b=Di.format(w,this.options),C=this.options.databox?.position;return C==="left"?(this.leftSidebar.innerHTML=b,""):C==="right"?(this.rightSidebar.innerHTML=b,""):this.options.databox?`<div style="min-width: 200px;">${b}</div>`:""},k=[];this.indicators.forEach(w=>{Object.values(w.plots).forEach(b=>{b.options?.style==="table"&&b.data?.forEach(C=>{(Array.isArray(C.value)?C.value:[C.value]).forEach(_=>{_&&!_._deleted&&(_._paneIndex=_.force_overlay?0:w.paneIndex,k.push(_))})})})});const A={backgroundColor:this.options.backgroundColor,animation:!1,legend:{show:!1},tooltip:{show:!0,showContent:!!this.options.databox,trigger:"axis",triggerOn:this.options.databox?.triggerOn??"mousemove",axisPointer:{type:"cross",label:{backgroundColor:"#475569"}},backgroundColor:"rgba(30, 41, 59, 0.9)",borderWidth:1,borderColor:"#334155",padding:10,textStyle:{color:"#fff",fontFamily:this.options.fontFamily||"sans-serif"},formatter:v,extraCssText:e!=="floating"&&e!==void 0?"display: none !important;":void 0,position:(w,b,C,_,z)=>{if(this.options.databox?.position==="floating"){const S={top:10};return S[["left","right"][+(w[0]<z.viewSize[0]/2)]]=30,S}return null}},axisPointer:{link:{xAxisIndex:"all"},label:{backgroundColor:"#475569"}},graphic:x,grid:o.grid,xAxis:o.xAxis,yAxis:o.yAxis,dataZoom:o.dataZoom,series:[p,...g,...y,...I]};if(this.chart.setOption(A,!0),this._baseGraphics=x,this._lastTables=k,k.length>0){const w=this._buildTableGraphics();if(w.length>0){const b=[...x,...w];this.chart.setOption({graphic:b},{replaceMerge:["graphic"]})}}else this._tableGraphicIds=[];rt.clearAll(this.overlayContainer)}}var Oi=Object.defineProperty,Hi=(h,t,e)=>t in h?Oi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,dt=(h,t,e)=>(Hi(h,typeof t!="symbol"?t+"":t,e),e);class q{constructor(t){dt(this,"id"),dt(this,"name"),dt(this,"icon"),dt(this,"context"),dt(this,"eventListeners",[]),dt(this,"_snapIndicator",null),dt(this,"_snapMoveHandler",null),dt(this,"_snapKeyDownHandler",null),dt(this,"_snapKeyUpHandler",null),dt(this,"_snapBlurHandler",null),dt(this,"_snapActive",!1),dt(this,"_lastMouseEvent",null),this.id=t.id,this.name=t.name,this.icon=t.icon}init(t){this.context=t,this.onInit()}onInit(){}activate(){this.onActivate(),this._bindSnapIndicator(),this.context.events.emit("plugin:activated",this.id)}onActivate(){}deactivate(){this._unbindSnapIndicator(),this.onDeactivate(),this.context.events.emit("plugin:deactivated",this.id)}onDeactivate(){}destroy(){this._unbindSnapIndicator(),this.removeAllListeners(),this.onDestroy()}onDestroy(){}on(t,e){this.context.events.on(t,e),this.eventListeners.push({event:t,handler:e})}off(t,e){this.context.events.off(t,e),this.eventListeners=this.eventListeners.filter(i=>i.event!==t||i.handler!==e)}removeAllListeners(){this.eventListeners.forEach(({event:t,handler:e})=>{this.context.events.off(t,e)}),this.eventListeners=[]}get chart(){return this.context.getChart()}get marketData(){return this.context.getMarketData()}getPoint(t){const e=t.offsetX,i=t.offsetY,n=t.event;if(n?.ctrlKey||n?.metaKey){const r=this.context.snapToCandle({x:e,y:i});return[r.x,r.y]}return[e,i]}_bindSnapIndicator(){const t=this.context.getChart().getZr();this._snapMoveHandler=e=>{this._lastMouseEvent=e,e.event?.ctrlKey||e.event?.metaKey?this._showSnapAt(e.offsetX,e.offsetY):this._hideSnap()},this._snapKeyDownHandler=e=>{(e.key==="Control"||e.key==="Meta")&&this._lastMouseEvent&&this._showSnapAt(this._lastMouseEvent.offsetX,this._lastMouseEvent.offsetY)},this._snapKeyUpHandler=e=>{(e.key==="Control"||e.key==="Meta")&&this._hideSnap()},this._snapBlurHandler=()=>{this._hideSnap()},t.on("mousemove",this._snapMoveHandler),window.addEventListener("keydown",this._snapKeyDownHandler),window.addEventListener("keyup",this._snapKeyUpHandler),window.addEventListener("blur",this._snapBlurHandler)}_unbindSnapIndicator(){if(this._snapMoveHandler){try{this.context.getChart().getZr().off("mousemove",this._snapMoveHandler)}catch{}this._snapMoveHandler=null}this._snapKeyDownHandler&&(window.removeEventListener("keydown",this._snapKeyDownHandler),this._snapKeyDownHandler=null),this._snapKeyUpHandler&&(window.removeEventListener("keyup",this._snapKeyUpHandler),this._snapKeyUpHandler=null),this._snapBlurHandler&&(window.removeEventListener("blur",this._snapBlurHandler),this._snapBlurHandler=null),this._removeSnapGraphic(),this._lastMouseEvent=null}_removeSnapGraphic(){if(this._snapIndicator){try{this.context.getChart().getZr().remove(this._snapIndicator)}catch{}this._snapIndicator=null,this._snapActive=!1}}_showSnapAt(t,e){const i=this.context.snapToCandle({x:t,y:e}),n=this.context.getChart().getZr();this._snapIndicator||(this._snapIndicator=new D.graphic.Circle({shape:{cx:0,cy:0,r:5},style:{fill:"rgba(59, 130, 246, 0.3)",stroke:"#3b82f6",lineWidth:1.5},z:9999,silent:!0}),n.add(this._snapIndicator)),this._snapIndicator.setShape({cx:i.x,cy:i.y}),this._snapIndicator.show(),this._snapActive=!0}_hideSnap(){this._snapIndicator&&this._snapActive&&(this._snapIndicator.hide(),this._snapActive=!1)}}var Bi=Object.defineProperty,ji=(h,t,e)=>t in h?Bi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,st=(h,t,e)=>(ji(h,typeof t!="symbol"?t+"":t,e),e);class Yi extends q{constructor(t={}){super({id:"measure",name:t?.name||"Measure",icon:t?.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M160-240q-33 0-56.5-23.5T80-320v-320q0-33 23.5-56.5T160-720h640q33 0 56.5 23.5T880-640v320q0 33-23.5 56.5T800-240H160Zm0-80h640v-320H680v160h-80v-160h-80v160h-80v-160h-80v160h-80v-160H160v320Zm120-160h80-80Zm160 0h80-80Zm160 0h80-80Zm-120 0Z"/></svg>'}),st(this,"zr"),st(this,"state","idle"),st(this,"startPoint",null),st(this,"endPoint",null),st(this,"group",null),st(this,"rect",null),st(this,"labelRect",null),st(this,"labelText",null),st(this,"lineV",null),st(this,"lineH",null),st(this,"arrowStart",null),st(this,"arrowEnd",null),st(this,"onMouseDown",()=>{this.state==="finished"&&this.removeGraphic()}),st(this,"onChartInteraction",()=>{this.group&&this.removeGraphic()}),st(this,"onClick",e=>{this.state==="idle"?(this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.context.disableTools(),this.enableClearListeners())}),st(this,"clearHandlers",{}),st(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr()}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.disableClearListeners(),this.state==="drawing"&&this.removeGraphic()}onDestroy(){this.removeGraphic()}enableClearListeners(){const t=()=>{this.removeGraphic()};setTimeout(()=>{this.zr.on("click",t)},10),this.zr.on("mousedown",this.onMouseDown),this.context.events.on("chart:dataZoom",this.onChartInteraction),this.clearHandlers={click:t,mousedown:this.onMouseDown,dataZoom:this.onChartInteraction}}disableClearListeners(){this.clearHandlers.click&&this.zr.off("click",this.clearHandlers.click),this.clearHandlers.mousedown&&this.zr.off("mousedown",this.clearHandlers.mousedown),this.clearHandlers.dataZoom&&this.context.events.off("chart:dataZoom",this.clearHandlers.dataZoom),this.clearHandlers={}}initGraphic(){this.group||(this.group=new D.graphic.Group,this.rect=new D.graphic.Rect({shape:{x:0,y:0,width:0,height:0},style:{fill:"rgba(0,0,0,0)",stroke:"transparent",lineWidth:0},z:100}),this.lineV=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:"#fff",lineWidth:1,lineDash:[4,4]},z:101}),this.lineH=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:"#fff",lineWidth:1,lineDash:[4,4]},z:101}),this.arrowStart=new D.graphic.Polygon({shape:{points:[[0,0],[-5,10],[5,10]]},style:{fill:"#fff"},z:102}),this.arrowEnd=new D.graphic.Polygon({shape:{points:[[0,0],[-5,-10],[5,-10]]},style:{fill:"#fff"},z:102}),this.labelRect=new D.graphic.Rect({shape:{x:0,y:0,width:0,height:0,r:4},style:{fill:"transparent",stroke:"transparent",lineWidth:0,shadowBlur:5,shadowColor:"rgba(0,0,0,0.3)"},z:102}),this.labelText=new D.graphic.Text({style:{x:0,y:0,text:"",fill:"#fff",font:"12px sans-serif",align:"center",verticalAlign:"middle"},z:103}),this.group.add(this.rect),this.group.add(this.lineV),this.group.add(this.lineH),this.group.add(this.arrowStart),this.group.add(this.arrowEnd),this.group.add(this.labelRect),this.group.add(this.labelText),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null,this.disableClearListeners())}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint,r=this.context.coordinateConversion.pixelToData({x:t,y:e}),s=this.context.coordinateConversion.pixelToData({x:i,y:n});if(!r||!s)return;const l=Math.round(r.timeIndex),a=Math.round(s.timeIndex),o=r.value,p=s.value,u=a-l,d=p-o,g=d/o*100,c=d>=0,y=c?"rgba(33, 150, 243, 0.2)":"rgba(236, 0, 0, 0.2)",f=c?"#2196F3":"#ec0000";this.rect.setShape({x:Math.min(t,i),y:Math.min(e,n),width:Math.abs(i-t),height:Math.abs(n-e)}),this.rect.setStyle({fill:y});const x=(t+i)/2,m=(e+n)/2;this.lineV.setShape({x1:x,y1:e,x2:x,y2:n}),this.lineV.setStyle({stroke:f}),this.lineH.setShape({x1:t,y1:m,x2:i,y2:m}),this.lineH.setStyle({stroke:f});const I=Math.min(e,n),v=Math.max(e,n);this.arrowStart.setStyle({fill:"none"}),this.arrowEnd.setStyle({fill:"none"}),c?(this.arrowStart.setShape({points:[[x,I],[x-4,I+6],[x+4,I+6]]}),this.arrowStart.setStyle({fill:f})):(this.arrowEnd.setShape({points:[[x,v],[x-4,v-6],[x+4,v-6]]}),this.arrowEnd.setStyle({fill:f}));const k=[`${d.toFixed(2)} (${g.toFixed(2)}%)`,`${u} bars`].join(`
41
- `),A=140,w=40,b=Math.max(e,n),C=Math.min(e,n);let _=(t+i)/2-A/2,z=b+10;const S=this.chart.getHeight();z+w>S&&(z=C-w-10),this.labelRect.setShape({x:_,y:z,width:A,height:w}),this.labelRect.setStyle({fill:"#1e293b",stroke:f,lineWidth:1}),this.labelText.setStyle({x:_+A/2,y:z+w/2,text:k,fill:"#fff"})}}var Vi=Object.defineProperty,Xi=(h,t,e)=>t in h?Vi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,qi=(h,t,e)=>(Xi(h,typeof t!="symbol"?t+"":t,e),e);class ye{constructor(){qi(this,"type","line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#d1d4dc";return{type:"group",children:[{type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:o,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}}]}}}var Ui=Object.defineProperty,Ki=(h,t,e)=>t in h?Ui(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,gt=(h,t,e)=>(Ki(h,typeof t!="symbol"?t+"":t,e),e);class Ji extends q{constructor(t={}){super({id:"trend-line",name:t?.name||"Trend Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="2" y1="22" x2="22" y2="2" /></svg>'}),gt(this,"zr"),gt(this,"state","idle"),gt(this,"startPoint",null),gt(this,"endPoint",null),gt(this,"group",null),gt(this,"line",null),gt(this,"startCircle",null),gt(this,"endCircle",null),gt(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});if(i&&n){const r=i.paneIndex||0;this.context.addDrawing({id:`line-${Date.now()}`,type:"line",points:[i,n],paneIndex:r,style:{color:"#d1d4dc",lineWidth:1}})}}this.removeGraphic(),this.context.disableTools()}}),gt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new ye)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.state==="drawing"&&this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new D.graphic.Group,this.line=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:"#d1d4dc",lineWidth:1},z:100}),this.startCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:"#d1d4dc",lineWidth:1},z:101}),this.endCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:"#d1d4dc",lineWidth:1},z:101}),this.group.add(this.line),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n})}}var Qi=Object.defineProperty,tn=(h,t,e)=>t in h?Qi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,en=(h,t,e)=>(tn(h,typeof t!="symbol"?t+"":t,e),e);class fe{constructor(){en(this,"type","ray")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],[a,o]=i[1],p=e.style?.color||"#d1d4dc",[u,d]=this.extendToEdge(s,l,a,o,r);return{type:"group",children:[{type:"line",name:"line",shape:{x1:s,y1:l,x2:u,y2:d},style:{stroke:p,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:p,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:a,cy:o,r:4},style:{fill:"#fff",stroke:p,lineWidth:1,opacity:n?1:0}}]}}extendToEdge(t,e,i,n,r){const s=i-t,l=n-e;if(s===0&&l===0)return[i,n];const a=r.x,o=r.x+r.width,p=r.y,u=r.y+r.height;let d=1/0;if(s!==0){const g=s>0?(o-t)/s:(a-t)/s;g>0&&(d=Math.min(d,g))}if(l!==0){const g=l>0?(u-e)/l:(p-e)/l;g>0&&(d=Math.min(d,g))}return isFinite(d)||(d=1),[t+d*s,e+d*l]}}var nn=Object.defineProperty,sn=(h,t,e)=>t in h?nn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ut=(h,t,e)=>(sn(h,typeof t!="symbol"?t+"":t,e),e);const Gt="#d1d4dc";class on extends q{constructor(t={}){super({id:"ray-tool",name:t?.name||"Ray",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="20" x2="21" y2="4"/><circle cx="21" cy="4" r="0" fill="currentColor"/><polyline points="16,4 21,4 21,9" stroke-width="1.5"/></svg>'}),ut(this,"zr"),ut(this,"state","idle"),ut(this,"startPoint",null),ut(this,"endPoint",null),ut(this,"group",null),ut(this,"line",null),ut(this,"dashLine",null),ut(this,"startCircle",null),ut(this,"endCircle",null),ut(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});i&&n&&this.context.addDrawing({id:`ray-${Date.now()}`,type:"ray",points:[i,n],paneIndex:i.paneIndex||0,style:{color:Gt,lineWidth:1}})}this.removeGraphic(),this.context.disableTools()}}),ut(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new fe)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new D.graphic.Group,this.line=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:Gt,lineWidth:1},z:100}),this.dashLine=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:Gt,lineWidth:1,lineDash:[4,4],opacity:.5},z:99}),this.startCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:Gt,lineWidth:1},z:101}),this.endCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:Gt,lineWidth:1},z:101}),this.group.add(this.dashLine),this.group.add(this.line),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n});const[r,s]=this.extendToEdge(t,e,i,n);this.dashLine.setShape({x1:i,y1:n,x2:r,y2:s})}extendToEdge(t,e,i,n){const r=i-t,s=n-e;if(r===0&&s===0)return[i,n];const l=this.chart.getWidth(),a=this.chart.getHeight();let o=1/0;if(r!==0){const p=r>0?(l-t)/r:-t/r;p>0&&(o=Math.min(o,p))}if(s!==0){const p=s>0?(a-e)/s:-e/s;p>0&&(o=Math.min(o,p))}return isFinite(o)||(o=1),[t+o*r,e+o*s]}}var rn=Object.defineProperty,an=(h,t,e)=>t in h?rn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ln=(h,t,e)=>(an(h,typeof t!="symbol"?t+"":t,e),e);class xe{constructor(){ln(this,"type","info-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#d1d4dc",p=e.points[0],u=e.points[1],d=u.value-p.value,g=p.value!==0?d/p.value*100:0,c=Math.abs(u.timeIndex-p.timeIndex),y=d>=0?"+":"",f=`${y}${d.toFixed(2)} (${y}${g.toFixed(2)}%) ${c} bars`,x=(r+l)/2,m=(s+a)/2,I=d>=0?"#26a69a":"#ef5350";return{type:"group",children:[{type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:o,lineWidth:e.style?.lineWidth||1}},{type:"rect",shape:{x:x-2,y:m-22,width:f.length*6.5+12,height:18,r:3},style:{fill:"#1e293b",stroke:"#475569",lineWidth:1,opacity:.9},z2:10},{type:"text",x:x+4,y:m-20,style:{text:f,fill:I,fontSize:11,fontFamily:"monospace"},z2:11},{type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}}]}}}var hn=Object.defineProperty,cn=(h,t,e)=>t in h?hn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,yt=(h,t,e)=>(cn(h,typeof t!="symbol"?t+"":t,e),e);class dn extends q{constructor(t={}){super({id:"info-line-tool",name:t?.name||"Info Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="2" y1="22" x2="22" y2="2"/><rect x="12" y="8" width="8" height="5" rx="1" fill="none" stroke-width="1.5"/></svg>'}),yt(this,"zr"),yt(this,"state","idle"),yt(this,"startPoint",null),yt(this,"endPoint",null),yt(this,"group",null),yt(this,"line",null),yt(this,"startCircle",null),yt(this,"endCircle",null),yt(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});i&&n&&this.context.addDrawing({id:`info-line-${Date.now()}`,type:"info-line",points:[i,n],paneIndex:i.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}})}this.removeGraphic(),this.context.disableTools()}}),yt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new xe)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new D.graphic.Group,this.line=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:"#d1d4dc",lineWidth:1},z:100}),this.startCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:"#d1d4dc",lineWidth:1},z:101}),this.endCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:"#d1d4dc",lineWidth:1},z:101}),this.group.add(this.line),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n})}}var pn=Object.defineProperty,un=(h,t,e)=>t in h?pn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,gn=(h,t,e)=>(un(h,typeof t!="symbol"?t+"":t,e),e);class me{constructor(){gn(this,"type","extended-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],[a,o]=i[1],p=e.style?.color||"#d1d4dc",u=a-s,d=o-l;let g=s,c=l,y=a,f=o;if(u!==0||d!==0){const x=r.x,m=r.x+r.width,I=r.y,v=r.y+r.height;[y,f]=this.extendToEdge(s,l,u,d,x,m,I,v),[g,c]=this.extendToEdge(a,o,-u,-d,x,m,I,v)}return{type:"group",children:[{type:"line",name:"line",shape:{x1:g,y1:c,x2:y,y2:f},style:{stroke:p,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:p,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:a,cy:o,r:4},style:{fill:"#fff",stroke:p,lineWidth:1,opacity:n?1:0}}]}}extendToEdge(t,e,i,n,r,s,l,a){let o=1/0;if(i!==0){const p=i>0?(s-t)/i:(r-t)/i;p>0&&(o=Math.min(o,p))}if(n!==0){const p=n>0?(a-e)/n:(l-e)/n;p>0&&(o=Math.min(o,p))}return isFinite(o)||(o=1),[t+o*i,e+o*n]}}var yn=Object.defineProperty,fn=(h,t,e)=>t in h?yn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,pt=(h,t,e)=>(fn(h,typeof t!="symbol"?t+"":t,e),e);const At="#d1d4dc";class xn extends q{constructor(t={}){super({id:"extended-line-tool",name:t?.name||"Extended Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="1" y1="23" x2="23" y2="1" stroke-dasharray="2,2" opacity="0.4"/><line x1="6" y1="18" x2="18" y2="6"/></svg>'}),pt(this,"zr"),pt(this,"state","idle"),pt(this,"startPoint",null),pt(this,"endPoint",null),pt(this,"group",null),pt(this,"line",null),pt(this,"dashLineForward",null),pt(this,"dashLineBackward",null),pt(this,"startCircle",null),pt(this,"endCircle",null),pt(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});i&&n&&this.context.addDrawing({id:`extended-line-${Date.now()}`,type:"extended-line",points:[i,n],paneIndex:i.paneIndex||0,style:{color:At,lineWidth:1}})}this.removeGraphic(),this.context.disableTools()}}),pt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new me)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new D.graphic.Group,this.line=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:At,lineWidth:1},z:100}),this.dashLineForward=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:At,lineWidth:1,lineDash:[4,4],opacity:.5},z:99}),this.dashLineBackward=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:At,lineWidth:1,lineDash:[4,4],opacity:.5},z:99}),this.startCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:At,lineWidth:1},z:101}),this.endCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:At,lineWidth:1},z:101}),this.group.add(this.dashLineBackward),this.group.add(this.dashLineForward),this.group.add(this.line),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n});const r=i-t,s=n-e;if(r===0&&s===0)return;const[l,a]=this.extendToEdge(t,e,r,s);this.dashLineForward.setShape({x1:i,y1:n,x2:l,y2:a});const[o,p]=this.extendToEdge(i,n,-r,-s);this.dashLineBackward.setShape({x1:t,y1:e,x2:o,y2:p})}extendToEdge(t,e,i,n){const r=this.chart.getWidth(),s=this.chart.getHeight();let l=1/0;if(i!==0){const a=i>0?(r-t)/i:-t/i;a>0&&(l=Math.min(l,a))}if(n!==0){const a=n>0?(s-e)/n:-e/n;a>0&&(l=Math.min(l,a))}return isFinite(l)||(l=1),[t+l*i,e+l*n]}}var mn=Object.defineProperty,bn=(h,t,e)=>t in h?mn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,vn=(h,t,e)=>(bn(h,typeof t!="symbol"?t+"":t,e),e);class be{constructor(){vn(this,"type","trend-angle")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#d1d4dc",p=l-r,u=a-s,d=Math.atan2(-u,p),g=(d*(180/Math.PI)).toFixed(1),c=Math.min(30,Math.sqrt(p*p+u*u)*.3),y=r+Math.max(Math.abs(p),c+20),f=0,x=-d;return{type:"group",children:[{type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:o,lineWidth:e.style?.lineWidth||1}},{type:"line",shape:{x1:r,y1:s,x2:y,y2:s},style:{stroke:o,lineWidth:1,opacity:.4,lineDash:[4,4]}},{type:"arc",shape:{cx:r,cy:s,r:c,startAngle:Math.min(f,x),endAngle:Math.max(f,x)},style:{stroke:o,lineWidth:1.5,fill:"none"}},{type:"text",x:r+c+6,y:s+(u<0?-14:2),style:{text:`${g}\xB0`,fill:o,fontSize:11,fontFamily:"sans-serif"},z2:10},{type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}}]}}}var wn=Object.defineProperty,Cn=(h,t,e)=>t in h?wn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ct=(h,t,e)=>(Cn(h,typeof t!="symbol"?t+"":t,e),e);const wt="#d1d4dc";class Pn extends q{constructor(t={}){super({id:"trend-angle-tool",name:t?.name||"Trend Angle",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="20" x2="21" y2="6"/><line x1="3" y1="20" x2="14" y2="20" opacity="0.4"/><path d="M8 20 A5 5 0 0 1 7 16" stroke-width="1.5"/></svg>'}),ct(this,"zr"),ct(this,"state","idle"),ct(this,"startPoint",null),ct(this,"endPoint",null),ct(this,"group",null),ct(this,"line",null),ct(this,"hRefLine",null),ct(this,"arc",null),ct(this,"angleText",null),ct(this,"startCircle",null),ct(this,"endCircle",null),ct(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});i&&n&&this.context.addDrawing({id:`trend-angle-${Date.now()}`,type:"trend-angle",points:[i,n],paneIndex:i.paneIndex||0,style:{color:wt,lineWidth:1}})}this.removeGraphic(),this.context.disableTools()}}),ct(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new be)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new D.graphic.Group,this.line=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:wt,lineWidth:1},z:100}),this.hRefLine=new D.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:wt,lineWidth:1,lineDash:[4,4],opacity:.4},z:99}),this.arc=new D.graphic.Arc({shape:{cx:0,cy:0,r:25,startAngle:0,endAngle:0},style:{stroke:wt,lineWidth:1,fill:"none"},z:99}),this.angleText=new D.graphic.Text({style:{text:"",fill:wt,fontSize:11,fontFamily:"sans-serif"},z:101}),this.startCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:wt,lineWidth:1},z:101}),this.endCircle=new D.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:wt,lineWidth:1},z:101}),this.group.add(this.hRefLine),this.group.add(this.arc),this.group.add(this.line),this.group.add(this.angleText),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n});const r=i-t,s=n-e,l=Math.max(Math.abs(r),40);this.hRefLine.setShape({x1:t,y1:e,x2:t+l,y2:e});const a=Math.atan2(-s,r)*(180/Math.PI),o=Math.min(25,Math.sqrt(r*r+s*s)*.3),p=Math.atan2(s,r),u=Math.min(0,p),d=Math.max(0,p);this.arc.setShape({cx:t,cy:e,r:o,startAngle:u,endAngle:d}),this.angleText.setStyle({text:`${a.toFixed(1)}\xB0`}),this.angleText.x=t+o+6,this.angleText.y=e+(s<0?-14:2),this.angleText.markRedraw()}}var kn=Object.defineProperty,Dn=(h,t,e)=>t in h?kn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Mn=(h,t,e)=>(Dn(h,typeof t!="symbol"?t+"":t,e),e);class ve{constructor(){Mn(this,"type","horizontal-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],a=e.style?.color||"#d1d4dc",o=r.x,p=r.x+r.width;return{type:"group",children:[{type:"line",name:"line",shape:{x1:o,y1:l,x2:p,y2:l},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"rect",shape:{x:p-70,y:l-10,width:65,height:18,r:2},style:{fill:a,opacity:.9},z2:10},{type:"text",x:p-67,y:l-8,style:{text:e.points[0].value.toFixed(2),fill:"#fff",fontSize:10,fontFamily:"monospace"},z2:11},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:a,lineWidth:1,opacity:n?1:0}}]}}}var In=Object.defineProperty,An=(h,t,e)=>t in h?In(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,we=(h,t,e)=>(An(h,typeof t!="symbol"?t+"":t,e),e);class _n extends q{constructor(t={}){super({id:"horizontal-line-tool",name:t?.name||"Horizontal Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="2" y1="12" x2="22" y2="12"/><circle cx="12" cy="12" r="2" fill="currentColor"/></svg>'}),we(this,"zr"),we(this,"onClick",e=>{const i=this.getPoint(e);if(!i)return;const n=this.context.coordinateConversion.pixelToData({x:i[0],y:i[1]});n&&this.context.addDrawing({id:`hline-${Date.now()}`,type:"horizontal-line",points:[n],paneIndex:n.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}}),this.context.disableTools()})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new ve)}onActivate(){this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick)}onDeactivate(){this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick)}onDestroy(){}}var Sn=Object.defineProperty,zn=(h,t,e)=>t in h?Sn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,$n=(h,t,e)=>(zn(h,typeof t!="symbol"?t+"":t,e),e);class Ce{constructor(){$n(this,"type","horizontal-ray")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],a=e.style?.color||"#d1d4dc",o=r.x+r.width;return{type:"group",children:[{type:"line",name:"line",shape:{x1:s,y1:l,x2:o,y2:l},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:a,lineWidth:1,opacity:n?1:0}}]}}}var Gn=Object.defineProperty,En=(h,t,e)=>t in h?Gn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Pe=(h,t,e)=>(En(h,typeof t!="symbol"?t+"":t,e),e);class Ln extends q{constructor(t={}){super({id:"horizontal-ray-tool",name:t?.name||"Horizontal Ray",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="12" x2="22" y2="12"/><circle cx="4" cy="12" r="2" fill="currentColor"/></svg>'}),Pe(this,"zr"),Pe(this,"onClick",e=>{const i=this.getPoint(e);if(!i)return;const n=this.context.coordinateConversion.pixelToData({x:i[0],y:i[1]});n&&this.context.addDrawing({id:`hray-${Date.now()}`,type:"horizontal-ray",points:[n],paneIndex:n.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}}),this.context.disableTools()})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new Ce)}onActivate(){this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick)}onDeactivate(){this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick)}onDestroy(){}}var Tn=Object.defineProperty,Wn=(h,t,e)=>t in h?Tn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Fn=(h,t,e)=>(Wn(h,typeof t!="symbol"?t+"":t,e),e);class ke{constructor(){Fn(this,"type","vertical-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],a=e.style?.color||"#d1d4dc",o=r.y,p=r.y+r.height;return{type:"group",children:[{type:"line",name:"line",shape:{x1:s,y1:o,x2:s,y2:p},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:a,lineWidth:1,opacity:n?1:0}}]}}}var Zn=Object.defineProperty,Nn=(h,t,e)=>t in h?Zn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,De=(h,t,e)=>(Nn(h,typeof t!="symbol"?t+"":t,e),e);class Rn extends q{constructor(t={}){super({id:"vertical-line-tool",name:t?.name||"Vertical Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="2" x2="12" y2="22"/><circle cx="12" cy="12" r="2" fill="currentColor"/></svg>'}),De(this,"zr"),De(this,"onClick",e=>{const i=this.getPoint(e);if(!i)return;const n=this.context.coordinateConversion.pixelToData({x:i[0],y:i[1]});n&&this.context.addDrawing({id:`vline-${Date.now()}`,type:"vertical-line",points:[n],paneIndex:n.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}}),this.context.disableTools()})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new ke)}onActivate(){this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick)}onDeactivate(){this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick)}onDestroy(){}}var On=Object.defineProperty,Hn=(h,t,e)=>t in h?On(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Bn=(h,t,e)=>(Hn(h,typeof t!="symbol"?t+"":t,e),e);class Me{constructor(){Bn(this,"type","cross-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],a=e.style?.color||"#d1d4dc",o=r.x,p=r.x+r.width,u=r.y,d=r.y+r.height;return{type:"group",children:[{type:"line",name:"line-h",shape:{x1:o,y1:l,x2:p,y2:l},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"line",name:"line-v",shape:{x1:s,y1:u,x2:s,y2:d},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:a,lineWidth:1,opacity:n?1:0}}]}}}var jn=Object.defineProperty,Yn=(h,t,e)=>t in h?jn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ie=(h,t,e)=>(Yn(h,typeof t!="symbol"?t+"":t,e),e);class Vn extends q{constructor(t={}){super({id:"cross-line-tool",name:t?.name||"Cross Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="2" x2="12" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/></svg>'}),Ie(this,"zr"),Ie(this,"onClick",e=>{const i=this.getPoint(e);if(!i)return;const n=this.context.coordinateConversion.pixelToData({x:i[0],y:i[1]});n&&this.context.addDrawing({id:`crossline-${Date.now()}`,type:"cross-line",points:[n],paneIndex:n.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}}),this.context.disableTools()})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new Me)}onActivate(){this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick)}onDeactivate(){this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick)}onDestroy(){}}var Xn=Object.defineProperty,qn=(h,t,e)=>t in h?Xn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Un=(h,t,e)=>(qn(h,typeof t!="symbol"?t+"":t,e),e);const ee=[0,.236,.382,.5,.618,.786,1],Bt=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"];class Ae{constructor(){Un(this,"type","fibonacci")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#3b82f6",p=Math.min(r,l),u=Math.max(r,l),d=u-p,g=a-s,c=e.points[0].value,y=e.points[1].value,f=y-c,x=[],m=[];return ee.forEach((I,v)=>{const k=a-g*I,A=Bt[v%Bt.length];m.push({type:"line",shape:{x1:p,y1:k,x2:u,y2:k},style:{stroke:A,lineWidth:1},silent:!0});const w=y-f*I;if(m.push({type:"text",style:{text:`${I} (${w.toFixed(2)})`,x:p+5,y:k-10,fill:A,fontSize:10},silent:!0}),v<ee.length-1){const b=ee[v+1],C=a-g*b,_=Math.abs(C-k),z=Math.min(k,C);x.push({type:"rect",name:"line",shape:{x:p,y:z,width:d,height:_},style:{fill:Bt[(v+1)%Bt.length],opacity:.1}})}}),{type:"group",children:[...x,...m,{type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]}},{type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0},z:100},{type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0},z:100}]}}}var Kn=Object.defineProperty,Jn=(h,t,e)=>t in h?Kn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,mt=(h,t,e)=>(Jn(h,typeof t!="symbol"?t+"":t,e),e);class Qn extends q{constructor(t={}){super({id:"fibonacci-tool",name:t.name||"Fibonacci Retracement",icon:t.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M120-80v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Z"/></svg>'}),mt(this,"startPoint",null),mt(this,"endPoint",null),mt(this,"state","idle"),mt(this,"graphicGroup",null),mt(this,"levels",[0,.236,.382,.5,.618,.786,1]),mt(this,"colors",["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"]),mt(this,"onClick",e=>{this.state==="idle"?(this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools())}),mt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Ae)}onActivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup||!this.startPoint||!this.endPoint)return;this.graphicGroup.removeAll();const t=this.startPoint[0],e=this.startPoint[1],i=this.endPoint[0],n=this.endPoint[1],r=new D.graphic.Line({shape:{x1:t,y1:e,x2:i,y2:n},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]},silent:!0});this.graphicGroup.add(r);const s=Math.min(t,i),l=Math.max(t,i),a=l-s,o=n-e;this.levels.forEach((p,u)=>{const d=n-o*p,g=this.colors[u%this.colors.length],c=new D.graphic.Line({shape:{x1:s,y1:d,x2:l,y2:d},style:{stroke:g,lineWidth:1},silent:!0});if(this.graphicGroup.add(c),u<this.levels.length-1){const y=this.levels[u+1],f=n-o*y,x=Math.abs(f-d),m=Math.min(d,f),I=new D.graphic.Rect({shape:{x:s,y:m,width:a,height:x},style:{fill:this.colors[(u+1)%this.colors.length],opacity:.1},silent:!0});this.graphicGroup.add(I)}})}saveDrawing(){if(!this.startPoint||!this.endPoint)return;const t=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),e=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});if(t&&e){const i=t.paneIndex||0;this.context.addDrawing({id:`fib-${Date.now()}`,type:"fibonacci",points:[t,e],paneIndex:i,style:{color:"#3b82f6",lineWidth:1}})}}}var ts=Object.defineProperty,es=(h,t,e)=>t in h?ts(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,is=(h,t,e)=>(es(h,typeof t!="symbol"?t+"":t,e),e);const jt=[0,.236,.382,.5,.618,.786,1],Yt=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"];class _e{constructor(){is(this,"type","fibonacci_channel")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],[o,p]=i[2],u=e.style?.color||"#3b82f6",d=l-r,g=a-s,c=Math.sqrt(d*d+g*g);if(c===0)return;const y=-g/c,f=d/c,x=(o-r)*y+(p-s)*f,m=[],I=[];return jt.forEach((v,k)=>{const A=y*x*v,w=f*x*v,b=r+A,C=s+w,_=l+A,z=a+w;if(I.push({lx1:b,ly1:C,lx2:_,ly2:z}),k<jt.length-1){const S=jt[k+1],$=y*x*S,L=f*x*S;m.push({type:"polygon",name:"line",shape:{points:[[b,C],[_,z],[l+$,a+L],[r+$,s+L]]},style:{fill:Yt[(k+1)%Yt.length],opacity:.1}})}}),I.forEach((v,k)=>{const A=Yt[k%Yt.length];m.push({type:"line",shape:{x1:v.lx1,y1:v.ly1,x2:v.lx2,y2:v.ly2},style:{stroke:A,lineWidth:1},silent:!0}),m.push({type:"text",style:{text:`${jt[k]}`,x:v.lx2+5,y:v.ly2-5,fill:A,fontSize:10},silent:!0})}),m.push({type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]}}),m.push({type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:u,lineWidth:1,opacity:n?1:0},z:100}),m.push({type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:u,lineWidth:1,opacity:n?1:0},z:100}),m.push({type:"circle",name:"point-2",shape:{cx:o,cy:p,r:4},style:{fill:"#fff",stroke:u,lineWidth:1,opacity:n?1:0},z:100}),{type:"group",children:m}}}var ns=Object.defineProperty,ss=(h,t,e)=>t in h?ns(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ft=(h,t,e)=>(ss(h,typeof t!="symbol"?t+"":t,e),e);class os extends q{constructor(t={}){super({id:"fibonacci-channel-tool",name:t.name||"Fibonacci Channel",icon:t.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M120-200v-80l80-80H120v-80h160l120-120H120v-80h360l120-120H120v-80h720v80H520l-120 120h440v80H320L200-440h640v80H280l-80 80h640v80H120Z"/></svg>'}),ft(this,"startPoint",null),ft(this,"endPoint",null),ft(this,"widthPoint",null),ft(this,"state","idle"),ft(this,"graphicGroup",null),ft(this,"levels",[0,.236,.382,.5,.618,.786,1]),ft(this,"colors",["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"]),ft(this,"onClick",e=>{this.state==="idle"?(this.state="drawing-baseline",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic()):this.state==="drawing-baseline"?(this.state="drawing-width",this.endPoint=this.getPoint(e),this.widthPoint=this.getPoint(e),this.updateGraphic()):this.state==="drawing-width"&&(this.state="finished",this.widthPoint=this.getPoint(e),this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools())}),ft(this,"onMouseMove",e=>{this.state==="drawing-baseline"?(this.endPoint=this.getPoint(e),this.updateGraphic()):this.state==="drawing-width"&&(this.widthPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new _e)}onActivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.widthPoint=null,this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.widthPoint=null,this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup||!this.startPoint||!this.endPoint)return;this.graphicGroup.removeAll();const t=this.startPoint[0],e=this.startPoint[1],i=this.endPoint[0],n=this.endPoint[1];if(this.graphicGroup.add(new D.graphic.Line({shape:{x1:t,y1:e,x2:i,y2:n},style:{stroke:"#787b86",lineWidth:2},silent:!0})),this.widthPoint&&this.state!=="drawing-baseline"){const r=this.widthPoint,s=i-t,l=n-e,a=Math.sqrt(s*s+l*l);if(a===0)return;const o=-l/a,p=s/a,u=(r[0]-t)*o+(r[1]-e)*p;this.levels.forEach((d,g)=>{const c=o*u*d,y=p*u*d,f=t+c,x=e+y,m=i+c,I=n+y,v=this.colors[g%this.colors.length];if(this.graphicGroup.add(new D.graphic.Line({shape:{x1:f,y1:x,x2:m,y2:I},style:{stroke:v,lineWidth:1},silent:!0})),g<this.levels.length-1){const k=this.levels[g+1],A=o*u*k,w=p*u*k,b=t+A,C=e+w,_=i+A,z=n+w;this.graphicGroup.add(new D.graphic.Polygon({shape:{points:[[f,x],[m,I],[_,z],[b,C]]},style:{fill:this.colors[(g+1)%this.colors.length],opacity:.1},silent:!0}))}})}}saveDrawing(){if(!this.startPoint||!this.endPoint||!this.widthPoint)return;const t=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),e=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]}),i=this.context.coordinateConversion.pixelToData({x:this.widthPoint[0],y:this.widthPoint[1]});if(t&&e&&i){const n=t.paneIndex||0;this.context.addDrawing({id:`fib-channel-${Date.now()}`,type:"fibonacci_channel",points:[t,e,i],paneIndex:n,style:{color:"#3b82f6",lineWidth:1}})}}}var rs=Object.defineProperty,as=(h,t,e)=>t in h?rs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ls=(h,t,e)=>(as(h,typeof t!="symbol"?t+"":t,e),e);const ie=[0,.236,.382,.5,.618,.786,1],bt=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"];class Se{constructor(){ls(this,"type","fib_speed_resistance_fan")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#3b82f6",p=l-r,u=a-s,d=[],g=[],c=[];for(const y of ie)g.push([r+p,s+u*y]),c.push([r+p*y,s+u]);for(let y=0;y<g.length-1;y++)d.push({type:"polygon",name:"line",shape:{points:[[r,s],g[y],g[y+1]]},style:{fill:bt[(y+1)%bt.length],opacity:.06}});for(let y=0;y<c.length-1;y++)d.push({type:"polygon",name:"line",shape:{points:[[r,s],c[y],c[y+1]]},style:{fill:bt[(y+1)%bt.length],opacity:.06}});return ie.forEach((y,f)=>{const[x,m]=g[f],I=bt[f%bt.length];d.push({type:"line",shape:{x1:r,y1:s,x2:x,y2:m},style:{stroke:I,lineWidth:1},silent:!0}),d.push({type:"text",style:{text:`${y}`,x:x+3,y:m-2,fill:I,fontSize:9},silent:!0})}),ie.forEach((y,f)=>{const[x,m]=c[f],I=bt[f%bt.length];d.push({type:"line",shape:{x1:r,y1:s,x2:x,y2:m},style:{stroke:I,lineWidth:1},silent:!0}),d.push({type:"text",style:{text:`${y}`,x:x-2,y:m+8,fill:I,fontSize:9},silent:!0})}),d.push({type:"line",name:"line",shape:{x1:l,y1:s,x2:l,y2:a},style:{stroke:"#555",lineWidth:1,lineDash:[3,3]}}),d.push({type:"line",name:"line",shape:{x1:r,y1:a,x2:l,y2:a},style:{stroke:"#555",lineWidth:1,lineDash:[3,3]}}),d.push({type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]}}),d.push({type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0},z:100}),d.push({type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0},z:100}),{type:"group",children:d}}}var hs=Object.defineProperty,cs=(h,t,e)=>t in h?hs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,_t=(h,t,e)=>(cs(h,typeof t!="symbol"?t+"":t,e),e);const Ct=[0,.236,.382,.5,.618,.786,1],St=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"];class ds extends q{constructor(t={}){super({id:"fib-speed-resistance-fan-tool",name:t.name||"Fib Speed Resistance Fan",icon:t.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#e3e3e3"><path d="M2 21L22 3M2 21l20-6M2 21l20-9M2 21l20-12M2 21l20-15M2 21l6-18M2 21l9-18M2 21l12-18M2 21l15-18" stroke="#e3e3e3" stroke-width="1" fill="none"/></svg>'}),_t(this,"startPoint",null),_t(this,"endPoint",null),_t(this,"state","idle"),_t(this,"graphicGroup",null),_t(this,"onClick",e=>{this.state==="idle"?(this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools())}),_t(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Se)}onActivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup||!this.startPoint||!this.endPoint)return;this.graphicGroup.removeAll();const t=this.startPoint[0],e=this.startPoint[1],i=this.endPoint[0],n=this.endPoint[1],r=i-t,s=n-e;Ct.forEach((l,a)=>{const o=St[a%St.length];this.graphicGroup.add(new D.graphic.Line({shape:{x1:t,y1:e,x2:t+r,y2:e+s*l},style:{stroke:o,lineWidth:1},silent:!0})),this.graphicGroup.add(new D.graphic.Line({shape:{x1:t,y1:e,x2:t+r*l,y2:e+s},style:{stroke:o,lineWidth:1},silent:!0}))});for(let l=0;l<Ct.length-1;l++){const a=[t+r,e+s*Ct[l]],o=[t+r,e+s*Ct[l+1]];this.graphicGroup.add(new D.graphic.Polygon({shape:{points:[[t,e],a,o]},style:{fill:St[(l+1)%St.length],opacity:.06},silent:!0}))}for(let l=0;l<Ct.length-1;l++){const a=[t+r*Ct[l],e+s],o=[t+r*Ct[l+1],e+s];this.graphicGroup.add(new D.graphic.Polygon({shape:{points:[[t,e],a,o]},style:{fill:St[(l+1)%St.length],opacity:.06},silent:!0}))}this.graphicGroup.add(new D.graphic.Line({shape:{x1:i,y1:e,x2:i,y2:n},style:{stroke:"#555",lineWidth:1,lineDash:[3,3]},silent:!0})),this.graphicGroup.add(new D.graphic.Line({shape:{x1:t,y1:n,x2:i,y2:n},style:{stroke:"#555",lineWidth:1,lineDash:[3,3]},silent:!0})),this.graphicGroup.add(new D.graphic.Line({shape:{x1:t,y1:e,x2:i,y2:n},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]},silent:!0}))}saveDrawing(){if(!this.startPoint||!this.endPoint)return;const t=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),e=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});t&&e&&this.context.addDrawing({id:`fib-fan-${Date.now()}`,type:"fib_speed_resistance_fan",points:[t,e],paneIndex:t.paneIndex||0,style:{color:"#3b82f6",lineWidth:1}})}}var ps=Object.defineProperty,us=(h,t,e)=>t in h?ps(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,gs=(h,t,e)=>(us(h,typeof t!="symbol"?t+"":t,e),e);const ze=[0,.236,.382,.5,.618,.786,1,1.272,1.618,2,2.618],$e=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86","#e91e63","#9c27b0","#673ab7","#3f51b5"];class Ge{constructor(){gs(this,"type","fib_trend_extension")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,api:r}=t,s=e.style?.color||"#3b82f6";if(i.length<3)return;const[l,a]=i[0],[o,p]=i[1],[u,d]=i[2],g=e.points,c=g[1].value-g[0].value,y=Math.min(l,o,u),f=Math.max(l,o,u),x=(f-y)*.5,m=y,I=f+x,v=[],k=[];for(let b=0;b<ze.length;b++){const C=ze[b],_=g[2].value+c*C;r.coord([g[2].timeIndex+t.drawing.points[2].timeIndex-g[2].timeIndex,_]);const z=d+(p-a)*C;k.push({level:C,y:z,price:_,color:$e[b%$e.length]})}for(let b=0;b<k.length-1;b++){const C=k[b],_=k[b+1],z=Math.min(C.y,_.y),S=Math.abs(_.y-C.y);v.push({type:"rect",name:"line",shape:{x:m,y:z,width:I-m,height:S},style:{fill:_.color,opacity:.06}})}for(const b of k)v.push({type:"line",shape:{x1:m,y1:b.y,x2:I,y2:b.y},style:{stroke:b.color,lineWidth:1},silent:!0}),v.push({type:"text",style:{text:`${b.level} (${b.price.toFixed(2)})`,x:I+4,y:b.y-6,fill:b.color,fontSize:9},silent:!0});v.push({type:"line",name:"line",shape:{x1:l,y1:a,x2:o,y2:p},style:{stroke:"#2196f3",lineWidth:1.5,lineDash:[5,4]}}),v.push({type:"line",name:"line",shape:{x1:o,y1:p,x2:u,y2:d},style:{stroke:"#ff9800",lineWidth:1.5,lineDash:[5,4]}}),v.push({type:"circle",name:"point-0",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:s,lineWidth:1,opacity:n?1:0},z:100}),v.push({type:"circle",name:"point-1",shape:{cx:o,cy:p,r:4},style:{fill:"#fff",stroke:s,lineWidth:1,opacity:n?1:0},z:100}),v.push({type:"circle",name:"point-2",shape:{cx:u,cy:d,r:4},style:{fill:"#fff",stroke:s,lineWidth:1,opacity:n?1:0},z:100});const A=["1","2","3"],w=[i[0],i[1],i[2]];for(let b=0;b<3;b++){const[C,_]=w[b],z=(b===0||_<=w[b-1][1])&&(b===2||_<=w[b+1]?.[1]);v.push({type:"text",style:{text:A[b],x:C,y:z?_-14:_+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}return{type:"group",children:v}}}var ys=Object.defineProperty,fs=(h,t,e)=>t in h?ys(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Et=(h,t,e)=>(fs(h,typeof t!="symbol"?t+"":t,e),e);const Vt=[0,.236,.382,.5,.618,.786,1,1.272,1.618,2,2.618],Xt=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86","#e91e63","#9c27b0","#673ab7","#3f51b5"];class xs extends q{constructor(t={}){super({id:"fib-trend-extension-tool",name:t.name||"Fib Trend Extension",icon:t.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M120-80v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z"/></svg>'}),Et(this,"points",[]),Et(this,"state","idle"),Et(this,"graphicGroup",null),Et(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing-trend",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing-trend"?(this.state="drawing-retracement",this.points[1]=i,this.points.push([...i]),this.updateGraphic()):this.state==="drawing-retracement"&&(this.state="finished",this.points[2]=i,this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools())}),Et(this,"onMouseMove",e=>{this.state==="drawing-trend"?(this.points[1]=this.getPoint(e),this.updateGraphic()):this.state==="drawing-retracement"&&(this.points[2]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Ge)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const[t,e]=this.points[0],[i,n]=this.points[1];if(this.graphicGroup.add(new D.graphic.Line({shape:{x1:t,y1:e,x2:i,y2:n},style:{stroke:"#2196f3",lineWidth:1.5,lineDash:[5,4]},silent:!0})),this.points.length>=3){const[r,s]=this.points[2];this.graphicGroup.add(new D.graphic.Line({shape:{x1:i,y1:n,x2:r,y2:s},style:{stroke:"#ff9800",lineWidth:1.5,lineDash:[5,4]},silent:!0}));const l=n-e,a=Math.min(t,i,r),o=Math.max(t,i,r),p=(o-a)*.5,u=a,d=o+p;for(let g=0;g<Vt.length;g++){const c=Vt[g],y=s+l*c,f=Xt[g%Xt.length];if(this.graphicGroup.add(new D.graphic.Line({shape:{x1:u,y1:y,x2:d,y2:y},style:{stroke:f,lineWidth:1},silent:!0})),this.graphicGroup.add(new D.graphic.Text({style:{text:`${c}`,x:d+4,y:y-6,fill:f,fontSize:9},silent:!0})),g<Vt.length-1){const x=s+l*Vt[g+1],m=Math.min(y,x),I=Math.abs(x-y);this.graphicGroup.add(new D.graphic.Rect({shape:{x:u,y:m,width:d-u,height:I},style:{fill:Xt[(g+1)%Xt.length],opacity:.06},silent:!0}))}}}for(const r of this.points)this.graphicGroup.add(new D.graphic.Circle({shape:{cx:r[0],cy:r[1],r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`fib-ext-${Date.now()}`,type:"fib_trend_extension",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:1}})}}var ms=Object.defineProperty,bs=(h,t,e)=>t in h?ms(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,vs=(h,t,e)=>(bs(h,typeof t!="symbol"?t+"":t,e),e);const Ee=["X","A","B","C","D"],Le=["#2196f3","#ff9800","#4caf50","#f44336"],ws="rgba(33, 150, 243, 0.08)",Cs="rgba(244, 67, 54, 0.08)";class Te{constructor(){vs(this,"type","xabcd_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([a,o])=>[a,o])},style:{fill:ws,opacity:1}}),i.length>=5&&s.push({type:"polygon",name:"line",shape:{points:i.slice(2,5).map(([a,o])=>[a,o])},style:{fill:Cs,opacity:1}});for(let a=0;a<i.length-1;a++){const[o,p]=i[a],[u,d]=i[a+1],g=Le[a%Le.length];s.push({type:"line",name:"line",shape:{x1:o,y1:p,x2:u,y2:d},style:{stroke:g,lineWidth:e.style?.lineWidth||2}})}const l=[[0,2],[1,3],[2,4]];for(const[a,o]of l)if(a<i.length&&o<i.length){const[p,u]=i[a],[d,g]=i[o];s.push({type:"line",shape:{x1:p,y1:u,x2:d,y2:g},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0})}if(e.points.length>=3){const a=Math.abs(e.points[1].value-e.points[0].value),o=Math.abs(e.points[2].value-e.points[1].value);if(a!==0){const p=(o/a).toFixed(3),u=(i[1][0]+i[2][0])/2,d=(i[1][1]+i[2][1])/2;s.push({type:"text",style:{text:p,x:u+8,y:d,fill:"#ff9800",fontSize:10},silent:!0})}}if(e.points.length>=4){const a=Math.abs(e.points[2].value-e.points[1].value),o=Math.abs(e.points[3].value-e.points[2].value);if(a!==0){const p=(o/a).toFixed(3),u=(i[2][0]+i[3][0])/2,d=(i[2][1]+i[3][1])/2;s.push({type:"text",style:{text:p,x:u+8,y:d,fill:"#4caf50",fontSize:10},silent:!0})}}if(e.points.length>=5){const a=Math.abs(e.points[3].value-e.points[2].value),o=Math.abs(e.points[4].value-e.points[3].value);if(a!==0){const d=(o/a).toFixed(3),g=(i[3][0]+i[4][0])/2,c=(i[3][1]+i[4][1])/2;s.push({type:"text",style:{text:d,x:g+8,y:c,fill:"#f44336",fontSize:10},silent:!0})}const p=Math.abs(e.points[1].value-e.points[0].value),u=Math.abs(e.points[4].value-e.points[1].value);if(p!==0){const d=(u/p).toFixed(3),[g,c]=i[4];s.push({type:"text",style:{text:`AD/XA: ${d}`,x:g+10,y:c+14,fill:"#aaa",fontSize:9},silent:!0})}}for(let a=0;a<i.length&&a<Ee.length;a++){const[o,p]=i[a],u=(a===0||p<=i[a-1][1])&&(a===i.length-1||p<=i[a+1]?.[1])?p-14:p+16;s.push({type:"text",style:{text:Ee[a],x:o,y:u,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let a=0;a<i.length;a++){const[o,p]=i[a];s.push({type:"circle",name:`point-${a}`,shape:{cx:o,cy:p,r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100})}return{type:"group",children:s}}}var Ps=Object.defineProperty,ks=(h,t,e)=>t in h?Ps(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Lt=(h,t,e)=>(ks(h,typeof t!="symbol"?t+"":t,e),e);const We=["X","A","B","C","D"],Fe=["#2196f3","#ff9800","#4caf50","#f44336"],Ds=5;class Ms extends q{constructor(t={}){super({id:"xabcd-pattern-tool",name:t.name||"XABCD Pattern",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="2,18 6,6 11,14 16,4 21,16"/><circle cx="2" cy="18" r="1.5" fill="#e3e3e3"/><circle cx="6" cy="6" r="1.5" fill="#e3e3e3"/><circle cx="11" cy="14" r="1.5" fill="#e3e3e3"/><circle cx="16" cy="4" r="1.5" fill="#e3e3e3"/><circle cx="21" cy="16" r="1.5" fill="#e3e3e3"/></svg>'}),Lt(this,"points",[]),Lt(this,"state","idle"),Lt(this,"graphicGroup",null),Lt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=Ds?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Lt(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Te)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(33, 150, 243, 0.08)"},silent:!0})),t.length>=5&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(2,5)},style:{fill:"rgba(244, 67, 54, 0.08)"},silent:!0}));for(let i=0;i<t.length-1;i++){const[n,r]=t[i],[s,l]=t[i+1];this.graphicGroup.add(new D.graphic.Line({shape:{x1:n,y1:r,x2:s,y2:l},style:{stroke:Fe[i%Fe.length],lineWidth:2},silent:!0}))}const e=[[0,2],[1,3],[2,4]];for(const[i,n]of e)if(i<t.length&&n<t.length){const[r,s]=t[i],[l,a]=t[n];this.graphicGroup.add(new D.graphic.Line({shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}))}for(let i=0;i<t.length&&i<We.length;i++){const[n,r]=t[i],s=(i===0||r<=t[i-1][1])&&(i===t.length-1||r<=t[i+1]?.[1])?r-14:r+16;this.graphicGroup.add(new D.graphic.Text({style:{text:We[i],x:n,y:s,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0}))}for(let i=0;i<t.length;i++){const[n,r]=t[i];this.graphicGroup.add(new D.graphic.Circle({shape:{cx:n,cy:r,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`xabcd-${Date.now()}`,type:"xabcd_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var Is=Object.defineProperty,As=(h,t,e)=>t in h?Is(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,_s=(h,t,e)=>(As(h,typeof t!="symbol"?t+"":t,e),e);const Ze=["A","B","C","D"],Ne=["#2196f3","#ff9800","#4caf50"];class Re{constructor(){_s(this,"type","abcd_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([l,a])=>[l,a])},style:{fill:"rgba(33, 150, 243, 0.08)"}}),i.length>=4&&s.push({type:"polygon",name:"line",shape:{points:i.slice(1,4).map(([l,a])=>[l,a])},style:{fill:"rgba(244, 67, 54, 0.08)"}});for(let l=0;l<i.length-1;l++){const[a,o]=i[l],[p,u]=i[l+1];s.push({type:"line",name:"line",shape:{x1:a,y1:o,x2:p,y2:u},style:{stroke:Ne[l%Ne.length],lineWidth:e.style?.lineWidth||2}})}if(i.length>=3&&s.push({type:"line",shape:{x1:i[0][0],y1:i[0][1],x2:i[2][0],y2:i[2][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}),i.length>=4&&s.push({type:"line",shape:{x1:i[1][0],y1:i[1][1],x2:i[3][0],y2:i[3][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}),e.points.length>=3){const l=Math.abs(e.points[1].value-e.points[0].value),a=Math.abs(e.points[2].value-e.points[1].value);if(l!==0){const o=(a/l).toFixed(3),p=(i[1][0]+i[2][0])/2,u=(i[1][1]+i[2][1])/2;s.push({type:"text",style:{text:o,x:p+8,y:u,fill:"#ff9800",fontSize:10},silent:!0})}}if(e.points.length>=4){const l=Math.abs(e.points[2].value-e.points[1].value),a=Math.abs(e.points[3].value-e.points[2].value);if(l!==0){const o=(a/l).toFixed(3),p=(i[2][0]+i[3][0])/2,u=(i[2][1]+i[3][1])/2;s.push({type:"text",style:{text:o,x:p+8,y:u,fill:"#4caf50",fontSize:10},silent:!0})}}for(let l=0;l<i.length&&l<Ze.length;l++){const[a,o]=i[l],p=(l===0||o<=i[l-1][1])&&(l===i.length-1||o<=i[l+1]?.[1]);s.push({type:"text",style:{text:Ze[l],x:a,y:p?o-14:o+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let l=0;l<i.length;l++)s.push({type:"circle",name:`point-${l}`,shape:{cx:i[l][0],cy:i[l][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var Ss=Object.defineProperty,zs=(h,t,e)=>t in h?Ss(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Tt=(h,t,e)=>(zs(h,typeof t!="symbol"?t+"":t,e),e);const Oe=["A","B","C","D"],He=["#2196f3","#ff9800","#4caf50"],$s=4;class Gs extends q{constructor(t={}){super({id:"abcd-pattern-tool",name:t.name||"ABCD Pattern",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="3,18 8,5 15,15 21,3"/><circle cx="3" cy="18" r="1.5" fill="#e3e3e3"/><circle cx="8" cy="5" r="1.5" fill="#e3e3e3"/><circle cx="15" cy="15" r="1.5" fill="#e3e3e3"/><circle cx="21" cy="3" r="1.5" fill="#e3e3e3"/></svg>'}),Tt(this,"points",[]),Tt(this,"state","idle"),Tt(this,"graphicGroup",null),Tt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=$s?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Tt(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Re)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),this.context.getChart().getZr().setCursorStyle("default")}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(33,150,243,0.08)"},silent:!0})),t.length>=4&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(1,4)},style:{fill:"rgba(244,67,54,0.08)"},silent:!0}));for(let e=0;e<t.length-1;e++)this.graphicGroup.add(new D.graphic.Line({shape:{x1:t[e][0],y1:t[e][1],x2:t[e+1][0],y2:t[e+1][1]},style:{stroke:He[e%He.length],lineWidth:2},silent:!0}));t.length>=3&&this.graphicGroup.add(new D.graphic.Line({shape:{x1:t[0][0],y1:t[0][1],x2:t[2][0],y2:t[2][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0})),t.length>=4&&this.graphicGroup.add(new D.graphic.Line({shape:{x1:t[1][0],y1:t[1][1],x2:t[3][0],y2:t[3][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}));for(let e=0;e<t.length&&e<Oe.length;e++){const[i,n]=t[e],r=(e===0||n<=t[e-1][1])&&(e===t.length-1||n<=t[e+1]?.[1]);this.graphicGroup.add(new D.graphic.Text({style:{text:Oe[e],x:i,y:r?n-14:n+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new D.graphic.Circle({shape:{cx:i,cy:n,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`abcd-${Date.now()}`,type:"abcd_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var Es=Object.defineProperty,Ls=(h,t,e)=>t in h?Es(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ts=(h,t,e)=>(Ls(h,typeof t!="symbol"?t+"":t,e),e);const Be=["X","A","B","C","D"],je=["#00bcd4","#e91e63","#8bc34a","#ff5722"];class Ye{constructor(){Ts(this,"type","cypher_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([o,p])=>[o,p])},style:{fill:"rgba(0, 188, 212, 0.08)"}}),i.length>=5&&s.push({type:"polygon",name:"line",shape:{points:i.slice(2,5).map(([o,p])=>[o,p])},style:{fill:"rgba(233, 30, 99, 0.08)"}});for(let o=0;o<i.length-1;o++){const[p,u]=i[o],[d,g]=i[o+1];s.push({type:"line",name:"line",shape:{x1:p,y1:u,x2:d,y2:g},style:{stroke:je[o%je.length],lineWidth:e.style?.lineWidth||2}})}const l=[[0,2],[0,3],[1,4]];for(const[o,p]of l)o<i.length&&p<i.length&&s.push({type:"line",shape:{x1:i[o][0],y1:i[o][1],x2:i[p][0],y2:i[p][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0});const a=e.points;if(a.length>=3){const o=Math.abs(a[1].value-a[0].value),p=Math.abs(a[2].value-a[1].value);if(o!==0){const u=(p/o).toFixed(3);s.push({type:"text",style:{text:u,x:(i[1][0]+i[2][0])/2+8,y:(i[1][1]+i[2][1])/2,fill:"#e91e63",fontSize:10},silent:!0})}}if(a.length>=4){const o=Math.abs(a[1].value-a[0].value),p=Math.abs(a[3].value-a[0].value);if(o!==0){const u=(p/o).toFixed(3);s.push({type:"text",style:{text:`XC/XA: ${u}`,x:(i[0][0]+i[3][0])/2+8,y:(i[0][1]+i[3][1])/2,fill:"#8bc34a",fontSize:10},silent:!0})}}if(a.length>=5){const o=Math.abs(a[3].value-a[0].value),p=Math.abs(a[4].value-a[3].value);if(o!==0){const u=(p/o).toFixed(3);s.push({type:"text",style:{text:u,x:(i[3][0]+i[4][0])/2+8,y:(i[3][1]+i[4][1])/2,fill:"#ff5722",fontSize:10},silent:!0})}}for(let o=0;o<i.length&&o<Be.length;o++){const[p,u]=i[o],d=(o===0||u<=i[o-1][1])&&(o===i.length-1||u<=i[o+1]?.[1]);s.push({type:"text",style:{text:Be[o],x:p,y:d?u-14:u+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let o=0;o<i.length;o++)s.push({type:"circle",name:`point-${o}`,shape:{cx:i[o][0],cy:i[o][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var Ws=Object.defineProperty,Fs=(h,t,e)=>t in h?Ws(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Wt=(h,t,e)=>(Fs(h,typeof t!="symbol"?t+"":t,e),e);const Ve=["X","A","B","C","D"],Xe=["#00bcd4","#e91e63","#8bc34a","#ff5722"],Zs=5;class Ns extends q{constructor(t={}){super({id:"cypher-pattern-tool",name:t.name||"Cypher Pattern",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="2,16 7,4 11,12 17,2 22,14"/><circle cx="2" cy="16" r="1.5" fill="#e3e3e3"/><circle cx="7" cy="4" r="1.5" fill="#e3e3e3"/><circle cx="11" cy="12" r="1.5" fill="#e3e3e3"/><circle cx="17" cy="2" r="1.5" fill="#e3e3e3"/><circle cx="22" cy="14" r="1.5" fill="#e3e3e3"/></svg>'}),Wt(this,"points",[]),Wt(this,"state","idle"),Wt(this,"graphicGroup",null),Wt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=Zs?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Wt(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Ye)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),t.setCursorStyle("default")}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(0,188,212,0.08)"},silent:!0})),t.length>=5&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(2,5)},style:{fill:"rgba(233,30,99,0.08)"},silent:!0}));for(let e=0;e<t.length-1;e++)this.graphicGroup.add(new D.graphic.Line({shape:{x1:t[e][0],y1:t[e][1],x2:t[e+1][0],y2:t[e+1][1]},style:{stroke:Xe[e%Xe.length],lineWidth:2},silent:!0}));for(let e=0;e<t.length&&e<Ve.length;e++){const[i,n]=t[e],r=(e===0||n<=t[e-1][1])&&(e===t.length-1||n<=t[e+1]?.[1]);this.graphicGroup.add(new D.graphic.Text({style:{text:Ve[e],x:i,y:r?n-14:n+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new D.graphic.Circle({shape:{cx:i,cy:n,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`cypher-${Date.now()}`,type:"cypher_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var Rs=Object.defineProperty,Os=(h,t,e)=>t in h?Rs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Hs=(h,t,e)=>(Os(h,typeof t!="symbol"?t+"":t,e),e);const ne=["","LS","","H","","RS",""];class qe{constructor(){Hs(this,"type","head_and_shoulders")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([l,a])=>[l,a])},style:{fill:"rgba(33, 150, 243, 0.06)"}}),i.length>=5&&s.push({type:"polygon",name:"line",shape:{points:i.slice(2,5).map(([l,a])=>[l,a])},style:{fill:"rgba(244, 67, 54, 0.08)"}}),i.length>=7&&s.push({type:"polygon",name:"line",shape:{points:i.slice(4,7).map(([l,a])=>[l,a])},style:{fill:"rgba(33, 150, 243, 0.06)"}});for(let l=0;l<i.length-1;l++){const[a,o]=i[l],[p,u]=i[l+1];s.push({type:"line",name:"line",shape:{x1:a,y1:o,x2:p,y2:u},style:{stroke:"#2196f3",lineWidth:e.style?.lineWidth||2}})}if(i.length>=5){const[l,a]=i[2],[o,p]=i[4],u=o-l,d=p-a,g=.3,c=.3,y=l-u*g,f=a-d*g,x=o+u*c,m=p+d*c;s.push({type:"line",shape:{x1:y,y1:f,x2:x,y2:m},style:{stroke:"#ff9800",lineWidth:2,lineDash:[6,4]},silent:!0}),s.push({type:"text",style:{text:"Neckline",x:(l+o)/2,y:(a+p)/2+14,fill:"#ff9800",fontSize:10,align:"center"},silent:!0})}for(let l=0;l<i.length&&l<ne.length;l++){if(!ne[l])continue;const[a,o]=i[l],p=(l===0||o<=i[l-1][1])&&(l===i.length-1||o<=i[l+1]?.[1]);s.push({type:"text",style:{text:ne[l],x:a,y:p?o-14:o+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let l=0;l<i.length;l++)s.push({type:"circle",name:`point-${l}`,shape:{cx:i[l][0],cy:i[l][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var Bs=Object.defineProperty,js=(h,t,e)=>t in h?Bs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ft=(h,t,e)=>(js(h,typeof t!="symbol"?t+"":t,e),e);const se=["","LS","","H","","RS",""],Ys=7;class Vs extends q{constructor(t={}){super({id:"head-and-shoulders-tool",name:t.name||"Head & Shoulders",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="1,18 4,10 7,14 12,3 17,14 20,10 23,18"/></svg>'}),Ft(this,"points",[]),Ft(this,"state","idle"),Ft(this,"graphicGroup",null),Ft(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=Ys?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Ft(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new qe)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),t.setCursorStyle("default")}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(33,150,243,0.06)"},silent:!0})),t.length>=5&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(2,5)},style:{fill:"rgba(244,67,54,0.08)"},silent:!0})),t.length>=7&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(4,7)},style:{fill:"rgba(33,150,243,0.06)"},silent:!0}));for(let e=0;e<t.length-1;e++)this.graphicGroup.add(new D.graphic.Line({shape:{x1:t[e][0],y1:t[e][1],x2:t[e+1][0],y2:t[e+1][1]},style:{stroke:"#2196f3",lineWidth:2},silent:!0}));if(t.length>=5){const[e,i]=t[2],[n,r]=t[4],s=n-e,l=r-i;this.graphicGroup.add(new D.graphic.Line({shape:{x1:e-s*.3,y1:i-l*.3,x2:n+s*.3,y2:r+l*.3},style:{stroke:"#ff9800",lineWidth:2,lineDash:[6,4]},silent:!0}))}for(let e=0;e<t.length&&e<se.length;e++){const[i,n]=t[e],r=(e===0||n<=t[e-1][1])&&(e===t.length-1||n<=t[e+1]?.[1]);se[e]&&this.graphicGroup.add(new D.graphic.Text({style:{text:se[e],x:i,y:r?n-14:n+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new D.graphic.Circle({shape:{cx:i,cy:n,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`hs-${Date.now()}`,type:"head_and_shoulders",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var Xs=Object.defineProperty,qs=(h,t,e)=>t in h?Xs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Us=(h,t,e)=>(qs(h,typeof t!="symbol"?t+"":t,e),e);const Ue=["1","2","3","4","5"];class Ke{constructor(){Us(this,"type","triangle_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.map(([o,p])=>[o,p])},style:{fill:"rgba(156, 39, 176, 0.06)"}});const l=i.filter((o,p)=>p%2===0);if(l.length>=2){for(let o=0;o<l.length-1;o++)s.push({type:"line",name:"line",shape:{x1:l[o][0],y1:l[o][1],x2:l[o+1][0],y2:l[o+1][1]},style:{stroke:"#f44336",lineWidth:2}});if(l.length>=2){const o=l[l.length-1],p=l[l.length-2],u=o[0]-p[0],d=o[1]-p[1];if(u!==0){const g=o[0]+u*.5,c=o[1]+d*.5;s.push({type:"line",shape:{x1:o[0],y1:o[1],x2:g,y2:c},style:{stroke:"#f44336",lineWidth:1,lineDash:[4,4]},silent:!0})}}}const a=i.filter((o,p)=>p%2===1);if(a.length>=2){for(let o=0;o<a.length-1;o++)s.push({type:"line",name:"line",shape:{x1:a[o][0],y1:a[o][1],x2:a[o+1][0],y2:a[o+1][1]},style:{stroke:"#4caf50",lineWidth:2}});if(a.length>=2){const o=a[a.length-1],p=a[a.length-2],u=o[0]-p[0],d=o[1]-p[1];if(u!==0){const g=o[0]+u*.5,c=o[1]+d*.5;s.push({type:"line",shape:{x1:o[0],y1:o[1],x2:g,y2:c},style:{stroke:"#4caf50",lineWidth:1,lineDash:[4,4]},silent:!0})}}}for(let o=0;o<i.length-1;o++)s.push({type:"line",shape:{x1:i[o][0],y1:i[o][1],x2:i[o+1][0],y2:i[o+1][1]},style:{stroke:"#9c27b0",lineWidth:1,lineDash:[2,2]},silent:!0});for(let o=0;o<i.length&&o<Ue.length;o++){const[p,u]=i[o],d=o%2===0;s.push({type:"text",style:{text:Ue[o],x:p,y:d?u-14:u+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let o=0;o<i.length;o++)s.push({type:"circle",name:`point-${o}`,shape:{cx:i[o][0],cy:i[o][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var Ks=Object.defineProperty,Js=(h,t,e)=>t in h?Ks(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Zt=(h,t,e)=>(Js(h,typeof t!="symbol"?t+"":t,e),e);const Je=["1","2","3","4","5"],Qs=5;class to extends q{constructor(t={}){super({id:"triangle-pattern-tool",name:t.name||"Triangle Pattern",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><path d="M2,4 L22,4 L12,20 Z"/></svg>'}),Zt(this,"points",[]),Zt(this,"state","idle"),Zt(this,"graphicGroup",null),Zt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=Qs?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Zt(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Ke)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),t.setCursorStyle("default")}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t},style:{fill:"rgba(156,39,176,0.06)"},silent:!0}));for(let n=0;n<t.length-1;n++)this.graphicGroup.add(new D.graphic.Line({shape:{x1:t[n][0],y1:t[n][1],x2:t[n+1][0],y2:t[n+1][1]},style:{stroke:"#9c27b0",lineWidth:2},silent:!0}));const e=t.filter((n,r)=>r%2===0);if(e.length>=2)for(let n=0;n<e.length-1;n++)this.graphicGroup.add(new D.graphic.Line({shape:{x1:e[n][0],y1:e[n][1],x2:e[n+1][0],y2:e[n+1][1]},style:{stroke:"#f44336",lineWidth:1,lineDash:[4,4]},silent:!0}));const i=t.filter((n,r)=>r%2===1);if(i.length>=2)for(let n=0;n<i.length-1;n++)this.graphicGroup.add(new D.graphic.Line({shape:{x1:i[n][0],y1:i[n][1],x2:i[n+1][0],y2:i[n+1][1]},style:{stroke:"#4caf50",lineWidth:1,lineDash:[4,4]},silent:!0}));for(let n=0;n<t.length&&n<Je.length;n++){const[r,s]=t[n],l=n%2===0;this.graphicGroup.add(new D.graphic.Text({style:{text:Je[n],x:r,y:l?s-14:s+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new D.graphic.Circle({shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`triangle-${Date.now()}`,type:"triangle_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var eo=Object.defineProperty,io=(h,t,e)=>t in h?eo(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,no=(h,t,e)=>(io(h,typeof t!="symbol"?t+"":t,e),e);const oe=["0","D1","C1","D2","C2","D3",""],Qe=["#2196f3","#ff9800","#4caf50","#f44336","#00bcd4","#e91e63"];class ti{constructor(){no(this,"type","three_drives_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([o,p])=>[o,p])},style:{fill:"rgba(33, 150, 243, 0.06)"}}),i.length>=5&&s.push({type:"polygon",name:"line",shape:{points:i.slice(2,5).map(([o,p])=>[o,p])},style:{fill:"rgba(76, 175, 80, 0.06)"}}),i.length>=7&&s.push({type:"polygon",name:"line",shape:{points:i.slice(4,7).map(([o,p])=>[o,p])},style:{fill:"rgba(0, 188, 212, 0.06)"}});for(let o=0;o<i.length-1;o++){const[p,u]=i[o],[d,g]=i[o+1];s.push({type:"line",name:"line",shape:{x1:p,y1:u,x2:d,y2:g},style:{stroke:Qe[o%Qe.length],lineWidth:e.style?.lineWidth||2}})}const l=[[1,3],[3,5],[2,4]];for(const[o,p]of l)o<i.length&&p<i.length&&s.push({type:"line",shape:{x1:i[o][0],y1:i[o][1],x2:i[p][0],y2:i[p][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0});const a=e.points;if(a.length>=4){const o=Math.abs(a[1].value-a[0].value),p=Math.abs(a[3].value-a[2].value);if(o!==0){const u=(p/o).toFixed(3),d=(i[2][0]+i[3][0])/2,g=(i[2][1]+i[3][1])/2;s.push({type:"text",style:{text:`D2/D1: ${u}`,x:d+10,y:g,fill:"#4caf50",fontSize:9},silent:!0})}}if(a.length>=6){const o=Math.abs(a[3].value-a[2].value),p=Math.abs(a[5].value-a[4].value);if(o!==0){const u=(p/o).toFixed(3),d=(i[4][0]+i[5][0])/2,g=(i[4][1]+i[5][1])/2;s.push({type:"text",style:{text:`D3/D2: ${u}`,x:d+10,y:g,fill:"#00bcd4",fontSize:9},silent:!0})}}if(a.length>=3){const o=Math.abs(a[1].value-a[0].value),p=Math.abs(a[2].value-a[1].value);if(o!==0){const u=(p/o).toFixed(3),d=(i[1][0]+i[2][0])/2,g=(i[1][1]+i[2][1])/2;s.push({type:"text",style:{text:u,x:d+8,y:g,fill:"#ff9800",fontSize:10},silent:!0})}}for(let o=0;o<i.length&&o<oe.length;o++){if(!oe[o])continue;const[p,u]=i[o],d=(o===0||u<=i[o-1][1])&&(o===i.length-1||u<=i[o+1]?.[1]);s.push({type:"text",style:{text:oe[o],x:p,y:d?u-14:u+16,fill:"#e2e8f0",fontSize:11,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let o=0;o<i.length;o++)s.push({type:"circle",name:`point-${o}`,shape:{cx:i[o][0],cy:i[o][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var so=Object.defineProperty,oo=(h,t,e)=>t in h?so(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Nt=(h,t,e)=>(oo(h,typeof t!="symbol"?t+"":t,e),e);const re=["0","D1","C1","D2","C2","D3",""],ei=["#2196f3","#ff9800","#4caf50","#f44336","#00bcd4","#e91e63"],ro=7;class ao extends q{constructor(t={}){super({id:"three-drives-pattern-tool",name:t.name||"Three Drives",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="1,20 4,8 7,14 11,5 15,12 19,2 23,10"/></svg>'}),Nt(this,"points",[]),Nt(this,"state","idle"),Nt(this,"graphicGroup",null),Nt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=ro?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Nt(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new ti)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),t.setCursorStyle("default")}initGraphic(){this.graphicGroup=new D.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(33,150,243,0.06)"},silent:!0})),t.length>=5&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(2,5)},style:{fill:"rgba(76,175,80,0.06)"},silent:!0})),t.length>=7&&this.graphicGroup.add(new D.graphic.Polygon({shape:{points:t.slice(4,7)},style:{fill:"rgba(0,188,212,0.06)"},silent:!0}));for(let i=0;i<t.length-1;i++)this.graphicGroup.add(new D.graphic.Line({shape:{x1:t[i][0],y1:t[i][1],x2:t[i+1][0],y2:t[i+1][1]},style:{stroke:ei[i%ei.length],lineWidth:2},silent:!0}));const e=[[1,3],[3,5],[2,4]];for(const[i,n]of e)i<t.length&&n<t.length&&this.graphicGroup.add(new D.graphic.Line({shape:{x1:t[i][0],y1:t[i][1],x2:t[n][0],y2:t[n][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}));for(let i=0;i<t.length&&i<re.length;i++){const[n,r]=t[i],s=(i===0||r<=t[i-1][1])&&(i===t.length-1||r<=t[i+1]?.[1]);re[i]&&this.graphicGroup.add(new D.graphic.Text({style:{text:re[i],x:n,y:s?r-14:r+16,fill:"#e2e8f0",fontSize:11,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new D.graphic.Circle({shape:{cx:n,cy:r,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`3drives-${Date.now()}`,type:"three_drives_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var lo=Object.defineProperty,ho=(h,t,e)=>t in h?lo(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Pt=(h,t,e)=>(ho(h,typeof t!="symbol"?t+"":t,e),e);class co extends q{constructor(t){const e='<svg width="8" height="8" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="position: absolute; right: -4px; top: 50%; transform: translateY(-50%); opacity: 0.6;"><polyline points="9 18 15 12 9 6"></polyline></svg>';let i="";t.icon?i=`<div style="position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
37
+ <div>${u.marker} <span style="color: #cbd5e1;">${u.displayName}</span></div>
38
+ <div style="font-size: 10px; color: #fff;padding-left:10px;">${f}</div>
39
+ </div>`}),a+="</div>"})}return a}}var Ii=Object.defineProperty,Ai=(h,t,e)=>t in h?Ii(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,_t=(h,t,e)=>(Ai(h,typeof t!="symbol"?t+"":t,e),e);class Si{constructor(t,e){_t(this,"plugins",new Map),_t(this,"activePluginId",null),_t(this,"context"),_t(this,"toolbarContainer"),_t(this,"tooltipElement",null),_t(this,"hideTimeout",null),this.context=t,this.toolbarContainer=e,this.createTooltip(),this.renderToolbar()}createTooltip(){this.tooltipElement=document.createElement("div"),Object.assign(this.tooltipElement.style,{position:"fixed",display:"none",backgroundColor:"#1e293b",color:"#e2e8f0",padding:"6px 10px",borderRadius:"6px",fontSize:"13px",lineHeight:"1.4",fontWeight:"500",border:"1px solid #334155",zIndex:"9999",pointerEvents:"none",whiteSpace:"nowrap",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.15)",fontFamily:this.context.getOptions().fontFamily||"sans-serif",transition:"opacity 0.15s ease-in-out, transform 0.15s ease-in-out",opacity:"0",transform:"translateX(-5px)"}),document.body.appendChild(this.tooltipElement)}destroy(){this.tooltipElement&&this.tooltipElement.parentNode&&this.tooltipElement.parentNode.removeChild(this.tooltipElement),this.tooltipElement=null}showTooltip(t,e){if(!this.tooltipElement)return;this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=null);const i=t.getBoundingClientRect();this.tooltipElement.textContent=e,this.tooltipElement.style.display="block";const n=this.tooltipElement.getBoundingClientRect(),r=i.top+(i.height-n.height)/2,s=i.right+10;this.tooltipElement.style.top=`${r}px`,this.tooltipElement.style.left=`${s}px`,requestAnimationFrame(()=>{this.tooltipElement&&(this.tooltipElement.style.opacity="1",this.tooltipElement.style.transform="translateX(0)")})}hideTooltip(){this.tooltipElement&&(this.tooltipElement.style.opacity="0",this.tooltipElement.style.transform="translateX(-5px)",this.hideTimeout&&clearTimeout(this.hideTimeout),this.hideTimeout=setTimeout(()=>{this.tooltipElement&&(this.tooltipElement.style.display="none"),this.hideTimeout=null},150))}register(t){if(this.plugins.has(t.id)){console.warn(`Plugin with id ${t.id} is already registered.`);return}this.plugins.set(t.id,t),t.init(this.context),this.addButton(t)}unregister(t){const e=this.plugins.get(t);e&&(this.activePluginId===t&&this.deactivatePlugin(),e.destroy?.(),this.plugins.delete(t),this.removeButton(t))}activatePlugin(t){if(this.activePluginId===t){this.deactivatePlugin();return}this.activePluginId&&this.deactivatePlugin();const e=this.plugins.get(t);e&&(this.activePluginId=t,this.setButtonActive(t,!0),e.activate?.())}deactivatePlugin(){this.activePluginId&&(this.plugins.get(this.activePluginId)?.deactivate?.(),this.setButtonActive(this.activePluginId,!1),this.activePluginId=null)}renderToolbar(){this.toolbarContainer.innerHTML="",this.toolbarContainer.classList.add("qfchart-toolbar"),this.toolbarContainer.style.display="flex",this.toolbarContainer.style.flexDirection="column",this.toolbarContainer.style.width="40px",this.toolbarContainer.style.backgroundColor=this.context.getOptions().backgroundColor||"#1e293b",this.toolbarContainer.style.borderRight="1px solid #334155",this.toolbarContainer.style.padding="5px",this.toolbarContainer.style.boxSizing="border-box",this.toolbarContainer.style.gap="5px",this.toolbarContainer.style.flexShrink="0"}addButton(t){const e=document.createElement("button");e.id=`qfchart-plugin-btn-${t.id}`,e.style.width="30px",e.style.height="30px",e.style.padding="4px",e.style.border="1px solid transparent",e.style.borderRadius="4px",e.style.backgroundColor="transparent",e.style.cursor="pointer",e.style.color=this.context.getOptions().fontColor||"#cbd5e1",e.style.display="flex",e.style.alignItems="center",e.style.justifyContent="center",t.icon?e.innerHTML=t.icon:e.innerText=(t.name||t.id).substring(0,2).toUpperCase(),e.addEventListener("mouseenter",()=>{this.activePluginId!==t.id&&(e.style.backgroundColor="rgba(255, 255, 255, 0.1)"),this.showTooltip(e,t.name||t.id)}),e.addEventListener("mouseleave",()=>{this.activePluginId!==t.id&&(e.style.backgroundColor="transparent"),this.hideTooltip()}),e.onclick=()=>this.activatePlugin(t.id),this.toolbarContainer.appendChild(e)}removeButton(t){const e=this.toolbarContainer.querySelector(`#qfchart-plugin-btn-${t}`);e&&e.remove()}setButtonActive(t,e){const i=this.toolbarContainer.querySelector(`#qfchart-plugin-btn-${t}`);i&&(e?(i.style.backgroundColor="#2563eb",i.style.color="#ffffff"):(i.style.backgroundColor="transparent",i.style.color=this.context.getOptions().fontColor||"#cbd5e1"))}}var _i=Object.defineProperty,zi=(h,t,e)=>t in h?_i(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,rt=(h,t,e)=>(zi(h,typeof t!="symbol"?t+"":t,e),e);class Gi{constructor(t){rt(this,"context"),rt(this,"isEditing",!1),rt(this,"currentDrawing",null),rt(this,"editingPointIndex",null),rt(this,"zr"),rt(this,"editGroup",null),rt(this,"editLines",[]),rt(this,"editPoints",[]),rt(this,"isMovingShape",!1),rt(this,"dragStart",null),rt(this,"initialPixelPoints",[]),rt(this,"onDrawingMouseDown",e=>{if(this.isEditing)return;const i=this.context.getDrawing(e.id);i&&(this.isEditing=!0,this.isMovingShape=!0,this.currentDrawing=JSON.parse(JSON.stringify(i)),this.dragStart={x:e.x,y:e.y},this.initialPixelPoints=i.points.map(n=>{const r=this.context.coordinateConversion.dataToPixel(n);return r?{x:r.x,y:r.y}:{x:0,y:0}}),this.context.lockChart(),this.createEditGraphic(),this.zr.on("mousemove",this.onMouseMove),this.zr.on("mouseup",this.onMouseUp),window.addEventListener("mouseup",this.onWindowMouseUp))}),rt(this,"onPointMouseDown",e=>{if(this.isEditing)return;const i=this.context.getDrawing(e.id);i&&(this.isEditing=!0,this.currentDrawing=JSON.parse(JSON.stringify(i)),this.editingPointIndex=e.pointIndex,this.initialPixelPoints=i.points.map(n=>{const r=this.context.coordinateConversion.dataToPixel(n);return r?{x:r.x,y:r.y}:{x:0,y:0}}),this.context.lockChart(),this.createEditGraphic(),this.zr.on("mousemove",this.onMouseMove),this.zr.on("mouseup",this.onMouseUp),window.addEventListener("mouseup",this.onWindowMouseUp))}),rt(this,"onMouseMove",e=>{if(!this.isEditing||!this.currentDrawing)return;const i=e.offsetX,n=e.offsetY;if(this.isMovingShape&&this.dragStart){const r=i-this.dragStart.x,s=n-this.dragStart.y,l=this.initialPixelPoints.map(a=>({x:a.x+r,y:a.y+s}));for(let a=0;a<this.editLines.length;a++)this.editLines[a].setShape({x1:l[a].x,y1:l[a].y,x2:l[a+1].x,y2:l[a+1].y});for(let a=0;a<this.editPoints.length;a++)this.editPoints[a].setShape({cx:l[a].x,cy:l[a].y})}else if(this.editingPointIndex!==null){const r=this.initialPixelPoints.map(s=>({x:s.x,y:s.y}));r[this.editingPointIndex]={x:i,y:n};for(let s=0;s<this.editLines.length;s++)this.editLines[s].setShape({x1:r[s].x,y1:r[s].y,x2:r[s+1].x,y2:r[s+1].y});this.editPoints[this.editingPointIndex].setShape({cx:i,cy:n})}}),rt(this,"onMouseUp",e=>{this.isEditing&&this.finishEditing(e.offsetX,e.offsetY)}),rt(this,"onWindowMouseUp",e=>{if(!this.isEditing)return;const i=this.zr.dom;if(i){const n=i.getBoundingClientRect(),r=e.clientX-n.left,s=e.clientY-n.top;this.finishEditing(r,s)}else this.finishEditing(this.dragStart?.x??0,this.dragStart?.y??0)}),this.context=t,this.zr=this.context.getChart().getZr(),this.bindEvents()}bindEvents(){this.context.events.on("drawing:point:mousedown",this.onPointMouseDown),this.context.events.on("drawing:mousedown",this.onDrawingMouseDown)}createEditGraphic(){if(!this.currentDrawing)return;this.editGroup=new S.graphic.Group,this.editLines=[],this.editPoints=[];const t=this.currentDrawing.points.map(i=>{const n=this.context.coordinateConversion.dataToPixel(i);return n?{x:n.x,y:n.y}:null});if(t.some(i=>!i))return;const e=t;for(let i=0;i<e.length-1;i++){const n=new S.graphic.Line({shape:{x1:e[i].x,y1:e[i].y,x2:e[i+1].x,y2:e[i+1].y},style:{stroke:this.currentDrawing.style?.color||"#3b82f6",lineWidth:this.currentDrawing.style?.lineWidth||2,lineDash:[4,4]},silent:!0});this.editLines.push(n),this.editGroup.add(n)}for(let i=0;i<e.length;i++){const n=new S.graphic.Circle({shape:{cx:e[i].x,cy:e[i].y,r:5},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:2},z:1e3});this.editPoints.push(n),this.editGroup.add(n)}this.zr.add(this.editGroup)}pixelToDataForPane(t,e,i){const n=this.context.coordinateConversion.pixelToData({x:t,y:e});if(n)return n;try{const r=this.context.getChart(),s=r.convertFromPixel({gridIndex:i},[t,e]);if(s){const l=r.getOption()?.xAxis?.[i]?.data,a=this.context.getMarketData(),o=l?Math.round((l.length-a.length)/2):0;return{timeIndex:Math.round(s[0])-o,value:s[1],paneIndex:i}}}catch{}return null}finishEditing(t,e){if(!this.currentDrawing){this.cleanup();return}const i=this.currentDrawing.paneIndex||0;if(this.isMovingShape&&this.dragStart){const n=t-this.dragStart.x,r=e-this.dragStart.y,s=this.initialPixelPoints.map(l=>this.pixelToDataForPane(l.x+n,l.y+r,i));if(s.every(l=>l!==null)){for(let l=0;l<s.length;l++)this.currentDrawing.points[l]=s[l];s[0]?.paneIndex!==void 0&&(this.currentDrawing.paneIndex=s[0].paneIndex),this.context.updateDrawing(this.currentDrawing)}}else if(this.editingPointIndex!==null){const n=this.pixelToDataForPane(t,e,i);n&&(this.currentDrawing.points[this.editingPointIndex]=n,this.editingPointIndex===0&&n.paneIndex!==void 0&&(this.currentDrawing.paneIndex=n.paneIndex),this.context.updateDrawing(this.currentDrawing))}this.cleanup()}cleanup(){this.isEditing=!1,this.isMovingShape=!1,this.dragStart=null,this.initialPixelPoints=[],this.currentDrawing=null,this.editingPointIndex=null,this.editLines=[],this.editPoints=[],this.editGroup&&(this.zr.remove(this.editGroup),this.editGroup=null),this.zr.off("mousemove",this.onMouseMove),this.zr.off("mouseup",this.onMouseUp),window.removeEventListener("mouseup",this.onWindowMouseUp),this.context.unlockChart()}}var $i=Object.defineProperty,Ei=(h,t,e)=>t in h?$i(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Li=(h,t,e)=>(Ei(h,typeof t!="symbol"?t+"":t,e),e);class ye{constructor(){Li(this,"renderers",new Map)}register(t){this.renderers.set(t.type,t)}get(t){return this.renderers.get(t)}}var Ti=Object.defineProperty,Wi=(h,t,e)=>t in h?Ti(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ni=(h,t,e)=>(Wi(h,typeof t!="symbol"?t+"":t,e),e);class Fi{constructor(){Ni(this,"handlers",new Map)}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set),this.handlers.get(t).add(e)}off(t,e){const i=this.handlers.get(t);i&&i.delete(e)}emit(t,e){const i=this.handlers.get(t);i&&i.forEach(n=>{try{n(e)}catch(r){console.error(`Error in EventBus handler for ${t}:`,r)}})}clear(){this.handlers.clear()}}class lt{static safeParseColor(t){if(!t||typeof t!="string")return{color:"#888888",opacity:1};const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(e){const i=e[4]?parseFloat(e[4]):1;return{color:`rgb(${e[1]},${e[2]},${e[3]})`,opacity:i}}return{color:t,opacity:1}}static render(t,e,i){lt.clearAll(t);const n=new Map;for(const r of e)r&&!r._deleted&&n.set(r.position,r);n.forEach(r=>{const s=r._paneIndex??0,l=i?i(s):void 0,a=lt.buildTable(r,l);lt.positionTable(a,r.position,l),t.appendChild(a)})}static clearAll(t){for(;t.firstChild;)t.removeChild(t.firstChild)}static buildTable(t,e){const i=document.createElement("table"),n=t.border_width??0,r=t.frame_width??0;if(n>0&&t.border_color||r>0&&t.frame_color?(i.style.borderCollapse="separate",i.style.borderSpacing="0"):i.style.borderCollapse="collapse",i.style.pointerEvents="none",i.style.fontSize="14px",i.style.lineHeight="1.4",i.style.fontFamily="sans-serif",i.style.margin="4px",e&&(i.style.maxHeight=e.height+"px",i.style.maxWidth=e.width+"px",i.style.overflow="hidden"),t.bgcolor){const{color:d,opacity:u}=lt.safeParseColor(t.bgcolor);i.style.backgroundColor=d,u<1&&(i.style.opacity=String(u))}if(r>0&&t.frame_color){const{color:d}=lt.safeParseColor(t.frame_color);i.style.border=`${r}px solid ${d}`}else i.style.border="none";const s=new Map,l=new Set;if(t.merges)for(const d of t.merges){const u=`${d.startCol},${d.startRow}`;s.set(u,{colspan:d.endCol-d.startCol+1,rowspan:d.endRow-d.startRow+1});for(let p=d.startRow;p<=d.endRow;p++)for(let f=d.startCol;f<=d.endCol;f++)p===d.startRow&&f===d.startCol||l.add(`${f},${p}`)}const a=n>0&&!!t.border_color,o=a?lt.safeParseColor(t.border_color).color:"",c=t.rows||0,g=t.columns||0;for(let d=0;d<c;d++){const u=document.createElement("tr");for(let p=0;p<g;p++){const f=`${p},${d}`;if(l.has(f))continue;const y=document.createElement("td"),m=s.get(f);m&&(m.colspan>1&&(y.colSpan=m.colspan),m.rowspan>1&&(y.rowSpan=m.rowspan)),a?y.style.border=`${n}px solid ${o}`:y.style.border="none";const x=t.cells?.[d]?.[p];if(x&&!x._merged){if(y.textContent=x.text||"",x.bgcolor&&typeof x.bgcolor=="string"&&x.bgcolor.length>0){const{color:C,opacity:k}=lt.safeParseColor(x.bgcolor);y.style.backgroundColor=C,k<1&&(y.style.backgroundColor=x.bgcolor)}if(x.text_color){const{color:C}=lt.safeParseColor(x.text_color);y.style.color=C}if(y.style.fontSize=lt.getSizePixels(x.text_size)+"px",y.style.textAlign=lt.mapHAlign(x.text_halign),y.style.verticalAlign=lt.mapVAlign(x.text_valign),x.text_font_family==="monospace"&&(y.style.fontFamily="monospace"),x.width>0)if(e){const C=Math.max(1,x.width*e.width/100);y.style.width=C+"px"}else y.style.width=x.width+"%";if(x.height>0)if(e){const C=Math.max(1,x.height*e.height/100);y.style.height=C+"px"}else y.style.height=x.height+"%";x.tooltip&&(y.title=x.tooltip)}const A=x?.height??0;A>0&&e&&A*e.height/100<4?y.style.padding="0":y.style.padding="4px 6px",y.style.whiteSpace="nowrap",u.appendChild(y)}i.appendChild(u)}return i}static positionTable(t,e,i){t.style.position="absolute";const n=8,r=i?i.y+"px":"0",s=i?i.x+"px":"0",l=i?i.y+i.height-n+"px":"0",a=i?i.x+i.width-n+"px":"0",o=i?i.x+i.width/2+"px":"50%",c=i?i.y+i.height/2+"px":"50%";switch(e){case"top_left":t.style.top=r,t.style.left=s;break;case"top_center":t.style.top=r,t.style.left=o,t.style.transform="translateX(-50%)";break;case"top_right":t.style.top=r,t.style.left=a,t.style.transform="translateX(-100%)";break;case"middle_left":t.style.top=c,t.style.left=s,t.style.transform="translateY(-50%)";break;case"middle_center":t.style.top=c,t.style.left=o,t.style.transform="translate(-50%, -50%)";break;case"middle_right":t.style.top=c,t.style.left=a,t.style.transform="translate(-100%, -50%)";break;case"bottom_left":t.style.top=l,t.style.left=s,t.style.transform="translateY(-100%)";break;case"bottom_center":t.style.top=l,t.style.left=o,t.style.transform="translate(-50%, -100%)";break;case"bottom_right":t.style.top=l,t.style.left=a,t.style.transform="translate(-100%, -100%)";break;default:t.style.top=r,t.style.left=a,t.style.transform="translateX(-100%)";break}}static getSizePixels(t){if(typeof t=="number"&&t>0)return t;switch(t){case"auto":case"size.auto":return 12;case"tiny":case"size.tiny":return 8;case"small":case"size.small":return 10;case"normal":case"size.normal":return 14;case"large":case"size.large":return 20;case"huge":case"size.huge":return 36;default:return 14}}static mapHAlign(t){switch(t){case"left":case"text.align_left":return"left";case"right":case"text.align_right":return"right";case"center":case"text.align_center":default:return"center"}}static mapVAlign(t){switch(t){case"top":case"text.align_top":return"top";case"bottom":case"text.align_bottom":return"bottom";case"center":case"text.align_center":default:return"middle"}}}class nt{static parseColor(t){if(!t||typeof t!="string"||t.length===0)return{color:"",opacity:0};const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(e){const i=e[4]?parseFloat(e[4]):1;return{color:`rgb(${e[1]},${e[2]},${e[3]})`,opacity:i}}if(/^#[0-9a-fA-F]{8}$/.test(t)){const i=parseInt(t.slice(1,3),16),n=parseInt(t.slice(3,5),16),r=parseInt(t.slice(5,7),16),s=parseInt(t.slice(7,9),16)/255;return{color:`rgb(${i},${n},${r})`,opacity:s}}return{color:t,opacity:1}}static getSizePixels(t){if(typeof t=="number"&&t>0)return t;switch(t){case"auto":case"size.auto":return 11;case"tiny":case"size.tiny":return 8;case"small":case"size.small":return 10;case"normal":case"size.normal":return 12;case"large":case"size.large":return 16;case"huge":case"size.huge":return 24;default:return 12}}static mapHAlign(t){switch(t){case"left":case"text.align_left":return"left";case"right":case"text.align_right":return"right";default:return"center"}}static mapVAlign(t){switch(t){case"top":case"text.align_top":return"top";case"bottom":case"text.align_bottom":return"bottom";default:return"middle"}}static buildGraphicElements(t,e){if(!t||t.length===0)return[];const i=new Map;for(const r of t)r&&!r._deleted&&i.set(r.position,r);const n=[];return i.forEach(r=>{const s=r._paneIndex??0,l=e(s);if(!l)return;const a=nt.buildTableElements(r,l);n.push(...a)}),n}static buildTableElements(t,e){const i=t.rows||0,n=t.columns||0;if(i===0||n===0)return[];const r=t.border_width??0,s=t.frame_width??0,l=r>0&&!!t.border_color,a=s>0&&!!t.frame_color,o=new Map,c=new Set;if(t.merges)for(const v of t.merges){o.set(`${v.startCol},${v.startRow}`,{colspan:v.endCol-v.startCol+1,rowspan:v.endRow-v.startRow+1});for(let $=v.startRow;$<=v.endRow;$++)for(let I=v.startCol;I<=v.endCol;I++)$===v.startRow&&I===v.startCol||c.add(`${I},${$}`)}const g=4,d=2,u=1.25,p=[];for(let v=0;v<i;v++){p[v]=[];for(let $=0;$<n;$++){if(c.has(`${$},${v}`)){p[v][$]={text:"",lines:[],fontSize:12,fontFamily:"sans-serif",textColor:{color:"",opacity:0},bgColor:{color:"",opacity:0},halign:"center",valign:"middle",explicitWidth:0,explicitHeight:0,colspan:1,rowspan:1,skip:!0,padX:0,padY:0};continue}const I=t.cells?.[v]?.[$],N=o.get(`${$},${v}`),Z=N?.colspan??1,F=N?.rowspan??1,R=I&&!I._merged&&I.text||"",H=R?R.split(`
40
+ `):[],Q=I?nt.getSizePixels(I.text_size):12,X=I?.text_font_family==="monospace"?"monospace":"sans-serif";let at=0,st=0;I?.width>0&&(at=Math.max(1,I.width*e.width/100)),I?.height>0&&(st=Math.max(1,I.height*e.height/100));const j=st>0&&st<4,J=j?0:g,mt=j?0:d,Jt=I&&!I._merged&&I.bgcolor&&typeof I.bgcolor=="string"&&I.bgcolor.length>0?I.bgcolor:"",It=I?.text_color||"";p[v][$]={text:R,lines:H,fontSize:Q,fontFamily:X,textColor:It?nt.parseColor(It):{color:"#e0e0e0",opacity:1},bgColor:Jt?nt.parseColor(Jt):{color:"",opacity:0},halign:I?nt.mapHAlign(I.text_halign):"center",valign:I?nt.mapVAlign(I.text_valign):"middle",explicitWidth:at,explicitHeight:st,colspan:Z,rowspan:F,skip:!1,padX:J,padY:mt}}}const f=new Array(n).fill(0),y=new Array(i).fill(0);for(let v=0;v<i;v++)for(let $=0;$<n;$++){const I=p[v][$];if(I.skip||I.colspan>1||I.rowspan>1)continue;const N=nt.measureMultiLineWidth(I.lines,I.fontSize,I.fontFamily),Z=Math.max(I.lines.length,1),F=I.explicitWidth>0?I.explicitWidth:N+I.padX*2,R=I.explicitHeight>0?I.explicitHeight:Z*I.fontSize*u+I.padY*2;f[$]=Math.max(f[$],F),y[v]=Math.max(y[v],R)}for(let v=0;v<n;v++)f[v]===0&&(f[v]=20);for(let v=0;v<i;v++)y[v]===0&&(y[v]=4);for(let v=0;v<i;v++)for(let $=0;$<n;$++){const I=p[v][$];if(I.skip)continue;const N=Math.max(I.lines.length,1),Z=I.explicitHeight>0?I.explicitHeight:N*I.fontSize*u+I.padY*2;if(I.colspan>1){const F=nt.sumRange(f,$,I.colspan),R=nt.measureMultiLineWidth(I.lines,I.fontSize,I.fontFamily),H=I.explicitWidth>0?I.explicitWidth:R+I.padX*2;if(H>F){const Q=(H-F)/I.colspan;for(let X=0;X<I.colspan;X++)f[$+X]+=Q}I.rowspan===1&&(y[v]=Math.max(y[v],Z))}if(I.rowspan>1){const F=nt.sumRange(y,v,I.rowspan);if(Z>F){const R=(Z-F)/I.rowspan;for(let H=0;H<I.rowspan;H++)y[v+H]+=R}}}for(let v=0;v<n;v++)f[v]=Math.round(f[v]);for(let v=0;v<i;v++)y[v]=Math.round(y[v]);const m=new Array(n+1).fill(0);for(let v=0;v<n;v++)m[v+1]=m[v]+f[v];const x=new Array(i+1).fill(0);for(let v=0;v<i;v++)x[v+1]=x[v]+y[v];const A=a?s:0,C=m[n]+A*2,k=x[i]+A*2,_=Math.min(C,e.width),D=Math.min(k,e.height),b=nt.computePosition(t.position,e,_,D),P=Math.round(b.x),w=Math.round(b.y),M=[],E=P+A,z=w+A;if(t.bgcolor){const{color:v,opacity:$}=nt.parseColor(t.bgcolor);$>0&&M.push({type:"rect",shape:{x:P,y:w,width:_,height:D},style:{fill:v,opacity:$},silent:!0,z:0,z2:0})}if(a){const{color:v}=nt.parseColor(t.frame_color),$=s/2;M.push({type:"rect",shape:{x:P+$,y:w+$,width:_-s,height:D-s},style:{fill:"none",stroke:v,lineWidth:s},silent:!0,z:0,z2:1})}const G=l?nt.parseColor(t.border_color).color:"";for(let v=0;v<i;v++)for(let $=0;$<n;$++){const I=p[v][$];if(I.skip)continue;const N=E+m[$],Z=z+x[v],F=nt.sumRange(f,$,I.colspan),R=nt.sumRange(y,v,I.rowspan);if(N-P>=_||Z-w>=D)continue;const H=Math.min(F,_-(N-P)),Q=Math.min(R,D-(Z-w));if(I.bgColor.opacity>0&&M.push({type:"rect",shape:{x:N,y:Z,width:H,height:Q},style:{fill:I.bgColor.color,opacity:I.bgColor.opacity},silent:!0,z:0,z2:2}),l&&M.push({type:"rect",shape:{x:N,y:Z,width:H,height:Q},style:{fill:"none",stroke:G,lineWidth:r},silent:!0,z:0,z2:3}),I.text){let X,at;switch(I.halign){case"left":X=N+I.padX,at="left";break;case"right":X=N+H-I.padX,at="right";break;default:X=N+H/2,at="center";break}let st,j;switch(I.valign){case"top":st=Z+I.padY,j="top";break;case"bottom":st=Z+Q-I.padY,j="bottom";break;default:st=Z+Q/2,j="middle";break}M.push({type:"text",x:X,y:st,style:{text:I.text,fill:I.textColor.color,opacity:I.textColor.opacity,font:`${I.fontSize}px ${I.fontFamily}`,textAlign:at,textVerticalAlign:j,lineHeight:Math.round(I.fontSize*u)},silent:!0,z:0,z2:4})}}return M}static computePosition(t,e,i,n){const r=e.x,s=e.y,l=e.width,a=e.height;switch(t){case"top_left":return{x:r+4,y:s+4};case"top_center":return{x:r+(l-i)/2,y:s+4};case"top_right":return{x:r+l-i-4,y:s+4};case"middle_left":return{x:r+4,y:s+(a-n)/2};case"middle_center":return{x:r+(l-i)/2,y:s+(a-n)/2};case"middle_right":return{x:r+l-i-4,y:s+(a-n)/2};case"bottom_left":return{x:r+4,y:s+a-n-4};case"bottom_center":return{x:r+(l-i)/2,y:s+a-n-4};case"bottom_right":return{x:r+l-i-4,y:s+a-n-4};default:return{x:r+l-i-4,y:s+4}}}static measureMultiLineWidth(t,e,i){if(!t||t.length===0)return 0;const n=i==="monospace"?.6:.55;let r=0;for(const s of t)r=Math.max(r,s.length*e*n);return r}static sumRange(t,e,i){let n=0;for(let r=e;r<e+i&&r<t.length;r++)n+=t[r];return n}}var Zi=Object.defineProperty,Ri=(h,t,e)=>t in h?Zi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,W=(h,t,e)=>(Ri(h,typeof t!="symbol"?t+"":t,e),e);class Hi{constructor(t,e={}){W(this,"chart"),W(this,"options"),W(this,"marketData",[]),W(this,"indicators",new Map),W(this,"timeToIndex",new Map),W(this,"pluginManager"),W(this,"drawingEditor"),W(this,"events",new Fi),W(this,"isMainCollapsed",!1),W(this,"maximizedPaneId",null),W(this,"countdownInterval",null),W(this,"selectedDrawingId",null),W(this,"drawings",[]),W(this,"drawingRenderers",new ye),W(this,"coordinateConversion",{pixelToData:s=>{const l=this.chart.getOption();if(!l||!l.grid)return null;const a=l.grid.length;for(let o=0;o<a;o++)if(this.chart.containPixel({gridIndex:o},[s.x,s.y])){this.chart.convertFromPixel({seriesIndex:o},[s.x,s.y]);const c=this.chart.convertFromPixel({gridIndex:o},[s.x,s.y]);if(c)return{timeIndex:Math.round(c[0])-this.dataIndexOffset,value:c[1],paneIndex:o}}return null},dataToPixel:s=>{const l=s.paneIndex||0,a=this.chart.convertToPixel({gridIndex:l},[s.timeIndex+this.dataIndexOffset,s.value]);return a?{x:a[0],y:a[1]}:null}}),W(this,"upColor","#00da3c"),W(this,"downColor","#ec0000"),W(this,"defaultPadding",0),W(this,"padding"),W(this,"dataIndexOffset",0),W(this,"_paddingPoints",0),W(this,"LAZY_MIN_PADDING",5),W(this,"LAZY_MAX_PADDING",500),W(this,"LAZY_CHUNK_SIZE",50),W(this,"LAZY_EDGE_THRESHOLD",10),W(this,"_expandScheduled",!1),W(this,"rootContainer"),W(this,"layoutContainer"),W(this,"toolbarContainer"),W(this,"leftSidebar"),W(this,"rightSidebar"),W(this,"chartContainer"),W(this,"overlayContainer"),W(this,"_lastTables",[]),W(this,"_tableGraphicIds",[]),W(this,"_baseGraphics",[]),W(this,"_labelTooltipEl",null),W(this,"_lastLayout",null),W(this,"_mainHeightOverride",null),W(this,"_paneDragState",null),W(this,"_paneResizeRafId",null),W(this,"onKeyDown",s=>{(s.key==="Delete"||s.key==="Backspace")&&this.selectedDrawingId&&(this.removeDrawing(this.selectedDrawingId),this.selectedDrawingId=null,this.render())}),W(this,"onFullscreenChange",()=>{this.render()}),W(this,"isLocked",!1),W(this,"lockedState",null),this.rootContainer=t,this.options={title:void 0,height:"600px",backgroundColor:"#1e293b",upColor:"#00da3c",downColor:"#ec0000",fontColor:"#cbd5e1",fontFamily:"sans-serif",padding:.01,dataZoom:{visible:!0,position:"top",height:6},layout:{mainPaneHeight:"50%",gap:13},watermark:!0,...e},this.options.upColor&&(this.upColor=this.options.upColor),this.options.downColor&&(this.downColor=this.options.downColor),this.padding=this.options.padding!==void 0?this.options.padding:this.defaultPadding,this.options.height&&(typeof this.options.height=="number"?this.rootContainer.style.height=`${this.options.height}px`:this.rootContainer.style.height=this.options.height),this.rootContainer.innerHTML="",this.layoutContainer=document.createElement("div"),this.layoutContainer.style.display="flex",this.layoutContainer.style.width="100%",this.layoutContainer.style.height="100%",this.layoutContainer.style.overflow="hidden",this.rootContainer.appendChild(this.layoutContainer),this.leftSidebar=document.createElement("div"),this.leftSidebar.style.display="none",this.leftSidebar.style.width="250px",this.leftSidebar.style.flexShrink="0",this.leftSidebar.style.overflowY="auto",this.leftSidebar.style.backgroundColor=this.options.backgroundColor||"#1e293b",this.leftSidebar.style.borderRight="1px solid #334155",this.leftSidebar.style.padding="10px",this.leftSidebar.style.boxSizing="border-box",this.leftSidebar.style.color="#cbd5e1",this.leftSidebar.style.fontSize="12px",this.leftSidebar.style.fontFamily=this.options.fontFamily||"sans-serif",this.layoutContainer.appendChild(this.leftSidebar),this.toolbarContainer=document.createElement("div"),this.layoutContainer.appendChild(this.toolbarContainer),this.chartContainer=document.createElement("div"),this.chartContainer.style.flexGrow="1",this.chartContainer.style.height="100%",this.chartContainer.style.overflow="hidden",this.layoutContainer.appendChild(this.chartContainer),this.rightSidebar=document.createElement("div"),this.rightSidebar.style.display="none",this.rightSidebar.style.width="250px",this.rightSidebar.style.flexShrink="0",this.rightSidebar.style.overflowY="auto",this.rightSidebar.style.backgroundColor=this.options.backgroundColor||"#1e293b",this.rightSidebar.style.borderLeft="1px solid #334155",this.rightSidebar.style.padding="10px",this.rightSidebar.style.boxSizing="border-box",this.rightSidebar.style.color="#cbd5e1",this.rightSidebar.style.fontSize="12px",this.rightSidebar.style.fontFamily=this.options.fontFamily||"sans-serif",this.layoutContainer.appendChild(this.rightSidebar),this.chart=S.init(this.chartContainer),this.chartContainer.style.position="relative",this.overlayContainer=document.createElement("div"),this.overlayContainer.style.cssText="position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:100;overflow:hidden;",this.chartContainer.appendChild(this.overlayContainer),this.pluginManager=new Si(this,this.toolbarContainer),this.drawingEditor=new Gi(this),this.chart.on("dataZoom",s=>{this.events.emit("chart:dataZoom",s);const l=this.options.databox?.triggerOn,a=this.options.databox?.position;l==="click"&&a==="floating"&&this.chart.dispatchAction({type:"hideTip"}),this._checkEdgeAndExpand()}),this.chart.on("finished",s=>this.events.emit("chart:updated",s)),this.chart.getZr().on("mousedown",s=>{this._paneDragState||this.events.emit("mouse:down",s)}),this.chart.getZr().on("mousemove",s=>{this._paneDragState||this.events.emit("mouse:move",s)}),this.chart.getZr().on("mouseup",s=>this.events.emit("mouse:up",s)),this.chart.getZr().on("click",s=>{this._paneDragState||this.events.emit("mouse:click",s)});const i=this.chart.getZr(),n=i.setCursorStyle,r=this;i.setCursorStyle=function(s){if(r._paneDragState){n.call(this,"row-resize");return}s==="grab"&&(s="crosshair"),n.call(this,s)},this.bindDrawingEvents(),this.bindPaneResizeEvents(),window.addEventListener("resize",this.resize.bind(this)),document.addEventListener("fullscreenchange",this.onFullscreenChange),document.addEventListener("keydown",this.onKeyDown)}bindPaneResizeEvents(){const t=this.chart.getZr(),e=n=>{if(!this._lastLayout||this._lastLayout.paneBoundaries.length===0||this.maximizedPaneId)return null;const r=this.chart.getHeight();if(r<=0)return null;for(const s of this._lastLayout.paneBoundaries){const l=s.yPercent/100*r;if(Math.abs(n-l)<=6){if(s.aboveId==="main"&&this.isMainCollapsed||this.indicators.get(s.belowId)?.collapsed||s.aboveId!=="main"&&this.indicators.get(s.aboveId)?.collapsed)continue;return s}}return null},i=n=>n==="main"?this._lastLayout?.mainPaneHeight??50:this.indicators.get(n)?.height??15;t.on("mousemove",n=>{if(this._paneDragState){const r=n.offsetY-this._paneDragState.startY,s=this.chart.getHeight();if(s<=0)return;const l=r/s*100,a=this._paneDragState.aboveId==="main"?10:5,o=5;let c=this._paneDragState.startAboveHeight+l,g=this._paneDragState.startBelowHeight-l;if(c<a&&(c=a,g=this._paneDragState.startAboveHeight+this._paneDragState.startBelowHeight-a),g<o&&(g=o,c=this._paneDragState.startAboveHeight+this._paneDragState.startBelowHeight-o),this._paneDragState.aboveId==="main")this._mainHeightOverride=c;else{const u=this.indicators.get(this._paneDragState.aboveId);u&&(u.height=c)}const d=this.indicators.get(this._paneDragState.belowId);d&&(d.height=g),this._paneResizeRafId||(this._paneResizeRafId=requestAnimationFrame(()=>{this._paneResizeRafId=null,this.render()})),t.setCursorStyle("row-resize"),n.stop?.();return}e(n.offsetY)&&t.setCursorStyle("row-resize")}),t.on("mousedown",n=>{const r=e(n.offsetY);r&&(this._paneDragState={startY:n.offsetY,aboveId:r.aboveId,belowId:r.belowId,startAboveHeight:i(r.aboveId),startBelowHeight:i(r.belowId)},t.setCursorStyle("row-resize"),n.stop?.())}),t.on("mouseup",()=>{this._paneDragState&&(this._paneDragState=null,this._paneResizeRafId&&(cancelAnimationFrame(this._paneResizeRafId),this._paneResizeRafId=null),this.render())})}bindDrawingEvents(){let t=null;const e=i=>{if(!i||i.componentType!=="series"||!i.seriesName?.startsWith("drawings"))return null;i.seriesIndex;const n=i.seriesName.match(/drawings-pane-(\d+)/);if(!n)return null;const r=parseInt(n[1]),s=this.drawings.filter(a=>(a.paneIndex||0)===r)[i.dataIndex];if(!s)return null;const l=i.event?.target?.name;return{drawing:s,targetName:l,paneIdx:r}};this.chart.on("mouseover",i=>{const n=e(i);if(!n)return;const r=i.event?.target?.parent;if(r){const s=n.drawing.id===this.selectedDrawingId;t&&(clearTimeout(t),t=null),s||r.children().forEach(l=>{l.name&&l.name.startsWith("point")&&l.attr("style",{opacity:1})})}if(n.targetName==="line")this.events.emit("drawing:hover",{id:n.drawing.id,type:n.drawing.type}),this.chart.getZr().setCursorStyle("move");else if(n.targetName?.startsWith("point-")){const s=parseInt(n.targetName.split("-")[1])||0;this.events.emit("drawing:point:hover",{id:n.drawing.id,pointIndex:s}),this.chart.getZr().setCursorStyle("pointer")}}),this.chart.on("mouseout",i=>{const n=e(i);if(!n)return;const r=i.event?.target?.parent;if(n.drawing.id!==this.selectedDrawingId){if(t=setTimeout(()=>{if(r){if(this.selectedDrawingId===n.drawing.id)return;r.children().forEach(s=>{s.name&&s.name.startsWith("point")&&s.attr("style",{opacity:0})})}},50),n.targetName==="line")this.events.emit("drawing:mouseout",{id:n.drawing.id});else if(n.targetName?.startsWith("point-")){const s=parseInt(n.targetName.split("-")[1])||0;this.events.emit("drawing:point:mouseout",{id:n.drawing.id,pointIndex:s})}this.chart.getZr().setCursorStyle("default")}}),this.chart.on("mousedown",i=>{const n=e(i);if(!n)return;const r=i.event?.event||i.event,s=r?.offsetX,l=r?.offsetY;if(n.targetName==="line")this.events.emit("drawing:mousedown",{id:n.drawing.id,x:s,y:l});else if(n.targetName?.startsWith("point-")){const a=parseInt(n.targetName.split("-")[1])||0;this.events.emit("drawing:point:mousedown",{id:n.drawing.id,pointIndex:a,x:s,y:l})}}),this.chart.on("click",i=>{const n=e(i);if(n){if(this.selectedDrawingId!==n.drawing.id&&(this.selectedDrawingId=n.drawing.id,this.events.emit("drawing:selected",{id:n.drawing.id}),this.render()),n.targetName==="line")this.events.emit("drawing:click",{id:n.drawing.id});else if(n.targetName?.startsWith("point-")){const r=parseInt(n.targetName.split("-")[1])||0;this.events.emit("drawing:point:click",{id:n.drawing.id,pointIndex:r})}}}),this.chart.getZr().on("click",i=>{i.target||this.selectedDrawingId&&(this.events.emit("drawing:deselected",{id:this.selectedDrawingId}),this.selectedDrawingId=null,this.render())}),this._labelTooltipEl=document.createElement("div"),this._labelTooltipEl.style.cssText="position:absolute;display:none;pointer-events:none;z-index:200;background:rgba(30,41,59,0.95);color:#fff;border:1px solid #475569;border-radius:4px;padding:6px 10px;font-size:12px;line-height:1.5;white-space:pre-wrap;max-width:350px;box-shadow:0 2px 8px rgba(0,0,0,0.3);font-family:"+(this.options.fontFamily||"sans-serif")+";",this.chartContainer.appendChild(this._labelTooltipEl),this.chart.on("mouseover",{seriesType:"scatter"},i=>{const n=i.data?._tooltipText;if(!n||!this._labelTooltipEl)return;this._labelTooltipEl.textContent=n,this._labelTooltipEl.style.display="block";const r=this.chartContainer.getBoundingClientRect(),s=i.event?.event;if(s){const l=s.clientX-r.left,a=s.clientY-r.top,o=this._labelTooltipEl.offsetWidth,c=Math.min(l-o/2,r.width-o-8);this._labelTooltipEl.style.left=Math.max(4,c)+"px",this._labelTooltipEl.style.top=a+18+"px"}}),this.chart.on("mouseout",{seriesType:"scatter"},()=>{this._labelTooltipEl&&(this._labelTooltipEl.style.display="none")})}getChart(){return this.chart}getMarketData(){return this.marketData}getTimeToIndex(){return this.timeToIndex}getOptions(){return this.options}disableTools(){this.pluginManager.deactivatePlugin()}registerPlugin(t){this.pluginManager.register(t)}registerDrawingRenderer(t){this.drawingRenderers.register(t)}snapToCandle(t){const e=this.coordinateConversion.pixelToData(t);if(!e)return t;const i=e.paneIndex||0;if(i!==0)return t;const n=Math.round(e.timeIndex);if(n<0||n>=this.marketData.length)return t;const r=this.marketData[n];if(!r)return t;const s=this.chart.convertToPixel({gridIndex:i},[n+this.dataIndexOffset,r.close]);if(!s)return t;const l=s[0],a=[r.open,r.high,r.low,r.close];let o=a[0],c=1/0;for(const d of a){const u=this.chart.convertToPixel({gridIndex:i},[n+this.dataIndexOffset,d]);if(u){const p=Math.abs(u[1]-t.y);p<c&&(c=p,o=d)}}const g=this.chart.convertToPixel({gridIndex:i},[n+this.dataIndexOffset,o]);return{x:l,y:g?g[1]:t.y}}addDrawing(t){this.drawings.push(t),this.render()}removeDrawing(t){const e=this.drawings.findIndex(i=>i.id===t);if(e!==-1){const i=this.drawings[e];this.drawings.splice(e,1),this.events.emit("drawing:deleted",{id:i.id}),this.render()}}getDrawing(t){return this.drawings.find(e=>e.id===t)}updateDrawing(t){const e=this.drawings.findIndex(i=>i.id===t.id);e!==-1&&(this.drawings[e]=t,this.render())}lockChart(){if(this.isLocked)return;this.isLocked=!0;const t=this.chart.getOption();this.chart.setOption({dataZoom:t.dataZoom.map(e=>({...e,disabled:!0})),tooltip:{show:!1}})}unlockChart(){if(!this.isLocked)return;this.isLocked=!1;const t=this.chart.getOption();(this.options.dataZoom||{}).visible,t.dataZoom&&this.chart.setOption({dataZoom:t.dataZoom.map(e=>({...e,disabled:!1})),tooltip:{show:!0}})}setZoom(t,e){this.chart.dispatchAction({type:"dataZoom",start:t,end:e})}setMarketData(t){this.marketData=t,this.rebuildTimeIndex(),this.render()}updateData(t){if(t.length===0)return;const e=new Map;this.marketData.forEach(m=>{e.set(m.time,m)}),t.forEach(m=>{e.has(m.time),e.set(m.time,m)}),this.marketData=Array.from(e.values()).sort((m,x)=>m.time-x.time),this.rebuildTimeIndex();const i=this.dataIndexOffset,n=St.buildCandlestickSeries(this.marketData,this.options),r={value:[NaN,NaN,NaN,NaN],itemStyle:{opacity:0}},s=[...Array(i).fill(r),...n.data,...Array(i).fill(r)],l=[...Array(i).fill(""),...this.marketData.map(m=>new Date(m.time).toLocaleString()),...Array(i).fill("")],a=this.chart.getOption(),o=Qt.calculate(this.chart.getHeight(),this.indicators,this.options,this.isMainCollapsed,this.maximizedPaneId,this.marketData,this._mainHeightOverride??void 0);this._lastLayout=o;const c=[...Array(i).fill(null),...this.marketData,...Array(i).fill(null)],{series:g,barColors:d}=St.buildIndicatorSeries(this.indicators,this.timeToIndex,o.paneLayout,l.length,i,c,o.overlayYAxisMap,o.separatePaneYAxisOffset),u=s.map((m,x)=>d[x]?{value:m.value||m,itemStyle:{color:d[x],color0:d[x]}}:m),p=this._buildDrawingRangeHints(o,i),f={xAxis:a.xAxis.map((m,x)=>({data:l})),series:[{data:u,markLine:n.markLine},...g,...p]};this.chart.setOption(f,{notMerge:!1});const y=[];this.indicators.forEach(m=>{Object.values(m.plots).forEach(x=>{x.options?.style==="table"&&x.data?.forEach(A=>{(Array.isArray(A.value)?A.value:[A.value]).forEach(C=>{C&&!C._deleted&&(C._paneIndex=C.force_overlay?0:m.paneIndex,y.push(C))})})})}),this._lastTables=y,this._renderTableOverlays(),this.startCountdown()}startCountdown(){if(this.stopCountdown(),!this.options.lastPriceLine?.showCountdown||this.marketData.length===0)return;let t=this.options.interval;if(!t&&this.marketData.length>=2){const i=this.marketData[this.marketData.length-1],n=this.marketData[this.marketData.length-2];t=i.time-n.time}if(!t)return;const e=()=>{if(this.marketData.length===0)return;const i=this.marketData[this.marketData.length-1].time+t,n=Date.now(),r=i-n;if(r<=0)return;const s=Math.abs(r),l=Math.floor(s/36e5),a=Math.floor(s%36e5/6e4),o=Math.floor(s%6e4/1e3),c=`${l>0?l.toString().padStart(2,"0")+":":""}${a.toString().padStart(2,"0")}:${o.toString().padStart(2,"0")}`,g=this.chart.getOption();if(!g||!g.series)return;const d=g.series.findIndex(x=>x.type==="candlestick");if(d===-1)return;const u=g.series[d];if(!u.markLine||!u.markLine.data||!u.markLine.data[0])return;const p=u.markLine.data[0];p.label.formatter;const f=p.yAxis;let y="";if(this.options.yAxisLabelFormatter)y=this.options.yAxisLabelFormatter(f);else{const x=this.options.yAxisDecimalPlaces!==void 0?this.options.yAxisDecimalPlaces:q.autoDetectDecimals(this.marketData);y=q.formatValue(f,x)}const m=`${y}
41
+ ${c}`;this.chart.setOption({series:[{id:"__candlestick__",markLine:{data:[{...p,label:{...p.label,formatter:m}}]}}]})};e(),this.countdownInterval=setInterval(e,1e3)}stopCountdown(){this.countdownInterval&&(clearInterval(this.countdownInterval),this.countdownInterval=null)}addIndicator(t,e,i={}){const n=i.overlay!==void 0?i.overlay:i.isOverlay??!1;let r=0;if(!n){let l=0;this.indicators.forEach(a=>{a.paneIndex>l&&(l=a.paneIndex)}),r=l+1}const s=new ri(t,e,r,{height:i.height,collapsed:!1,titleColor:i.titleColor,controls:i.controls});return this.indicators.set(t,s),this.render(),s}setIndicator(t,e,i=!1){this.addIndicator(t,{[t]:e},{overlay:i})}removeIndicator(t){this.indicators.delete(t),this.render()}toggleIndicator(t,e="collapse"){if(e==="fullscreen"){document.fullscreenElement?document.exitFullscreen():this.rootContainer.requestFullscreen();return}if(e==="maximize"){this.maximizedPaneId===t?this.maximizedPaneId=null:this.maximizedPaneId=t,this.render();return}if(t==="main"){this.isMainCollapsed=!this.isMainCollapsed,this.render();return}const i=this.indicators.get(t);i&&(i.toggleCollapse(),this.render())}resize(){this.chart.resize(),this._renderTableOverlays()}_buildDrawingRangeHints(t,e){const i=[],n=new Map;for(const s of this.indicators){if(!s.plots)continue;const l=s.paneIndex??0;n.has(l)||n.set(l,{yMin:1/0,yMax:-1/0});const a=n.get(l);for(const[o,c]of Object.entries(s.plots)){if(!c||!c.options)continue;const g=c.options?.style;if(g==="drawing_line"&&c.data)for(const d of c.data){const u=d?.value?Array.isArray(d.value)?d.value:[d.value]:[];for(const p of u)!p||p._deleted||(typeof p.y1=="number"&&isFinite(p.y1)&&(a.yMin=Math.min(a.yMin,p.y1),a.yMax=Math.max(a.yMax,p.y1)),typeof p.y2=="number"&&isFinite(p.y2)&&(a.yMin=Math.min(a.yMin,p.y2),a.yMax=Math.max(a.yMax,p.y2)))}if(g==="drawing_box"&&c.data)for(const d of c.data){const u=d?.value?Array.isArray(d.value)?d.value:[d.value]:[];for(const p of u)!p||p._deleted||(typeof p.top=="number"&&isFinite(p.top)&&(a.yMin=Math.min(a.yMin,p.top),a.yMax=Math.max(a.yMax,p.top)),typeof p.bottom=="number"&&isFinite(p.bottom)&&(a.yMin=Math.min(a.yMin,p.bottom),a.yMax=Math.max(a.yMax,p.bottom)))}if(g==="label"&&c.data)for(const d of c.data){const u=d?.value?Array.isArray(d.value)?d.value:[d.value]:[];for(const p of u)!p||p._deleted||typeof p.y=="number"&&isFinite(p.y)&&(a.yMin=Math.min(a.yMin,p.y),a.yMax=Math.max(a.yMax,p.y))}if(g==="drawing_polyline"&&c.data)for(const d of c.data){const u=d?.value?Array.isArray(d.value)?d.value:[d.value]:[];for(const p of u)if(!(!p||p._deleted||!p._points))for(const f of p._points)typeof f?.price=="number"&&isFinite(f.price)&&(a.yMin=Math.min(a.yMin,f.price),a.yMax=Math.max(a.yMax,f.price))}}}const r=e+Math.floor((this.marketData?.length||0)/2);return n.forEach((s,l)=>{if(!isFinite(s.yMin)||!isFinite(s.yMax))return;const a=l===0?0:(t.separatePaneYAxisOffset||1)+(l-1);i.push({name:`_drawingRange_pane${l}`,type:"scatter",xAxisIndex:l,yAxisIndex:a,symbol:"none",symbolSize:0,silent:!0,animation:!1,data:[[r,s.yMin],[r,s.yMax]],tooltip:{show:!1}})}),i}_buildTableGraphics(){const t=this.chart.getModel(),e=n=>t.getComponent("grid",n)?.coordinateSystem?.getRect(),i=nt.buildGraphicElements(this._lastTables,e);this._tableGraphicIds=[];for(let n=0;n<i.length;n++){const r=`__qf_table_${n}`;i[n].id=r,this._tableGraphicIds.push(r)}return i}_renderTableOverlays(){const t=this._buildTableGraphics(),e=[...this._baseGraphics,...t];this.chart.setOption({graphic:e},{replaceMerge:["graphic"]}),lt.clearAll(this.overlayContainer)}destroy(){this.stopCountdown(),window.removeEventListener("resize",this.resize.bind(this)),document.removeEventListener("fullscreenchange",this.onFullscreenChange),document.removeEventListener("keydown",this.onKeyDown),this.pluginManager.deactivatePlugin(),this.pluginManager.destroy(),this.chart.dispose()}rebuildTimeIndex(){this.timeToIndex.clear(),this.marketData.forEach((i,n)=>{this.timeToIndex.set(i.time,n)});const t=this.marketData.length,e=Math.ceil(t*this.padding);this._paddingPoints=Math.max(this._paddingPoints,e,this.LAZY_MIN_PADDING),this.dataIndexOffset=this._paddingPoints}expandPadding(t){this._resizePadding(t)}_resizePadding(t){const e=Math.ceil(this.marketData.length*this.padding);if(t=Math.max(t,e,this.LAZY_MIN_PADDING),t=Math.min(t,this.LAZY_MAX_PADDING),t===this._paddingPoints)return;const i=this._paddingPoints,n=this.marketData.length+2*i,r=this.chart.getOption(),s=r?.dataZoom?.find(w=>w.type==="slider"||w.type==="inside"),l=s?s.start/100*n:0,a=s?s.end/100*n:n,o=t-i;this._paddingPoints=t,this.dataIndexOffset=this._paddingPoints;const c=this._paddingPoints,g={value:[NaN,NaN,NaN,NaN],itemStyle:{opacity:0}},d=St.buildCandlestickSeries(this.marketData,this.options),u=[...Array(c).fill(g),...d.data,...Array(c).fill(g)],p=[...Array(c).fill(""),...this.marketData.map(w=>new Date(w.time).toLocaleString()),...Array(c).fill("")],f=[...Array(c).fill(null),...this.marketData,...Array(c).fill(null)],y=Qt.calculate(this.chart.getHeight(),this.indicators,this.options,this.isMainCollapsed,this.maximizedPaneId,this.marketData,this._mainHeightOverride??void 0),{series:m,barColors:x}=St.buildIndicatorSeries(this.indicators,this.timeToIndex,y.paneLayout,p.length,c,f,y.overlayYAxisMap,y.separatePaneYAxisOffset),A=u.map((w,M)=>x[M]?{value:w.value||w,itemStyle:{color:x[M],color0:x[M]}}:w),C=this.marketData.length+2*t,k=Math.max(0,(l+o)/C*100),_=Math.min(100,(a+o)/C*100),D=[],b=new Map;this.drawings.forEach(w=>{const M=w.paneIndex||0;b.has(M)||b.set(M,[]),b.get(M).push(w)}),b.forEach(w=>{D.push({data:w.map(M=>{const E=[];return M.points.forEach(z=>{E.push(z.timeIndex+this.dataIndexOffset,z.value)}),E})})});const P={xAxis:r.xAxis.map(()=>({data:p})),dataZoom:(r.dataZoom||[]).map(()=>({start:k,end:_})),series:[{data:A,markLine:d.markLine},...m.map(w=>{const M={data:w.data};return w.renderItem&&(M.renderItem=w.renderItem),M}),...D]};this.chart.setOption(P,{notMerge:!1})}_checkEdgeAndExpand(){if(this._expandScheduled)return;const t=this.chart.getOption()?.dataZoom?.find(f=>f.type==="slider"||f.type==="inside");if(!t)return;const e=this._paddingPoints,i=this.marketData.length,n=i+2*e,r=Math.round(t.start/100*n),s=Math.round(t.end/100*n),l=e,a=e+i-1,o=Math.max(0,Math.min(s,a)-Math.max(r,l)+1),c=r<this.LAZY_EDGE_THRESHOLD,g=s>n-this.LAZY_EDGE_THRESHOLD;if((c||g)&&e<this.LAZY_MAX_PADDING&&o>=3){this._expandScheduled=!0,requestAnimationFrame(()=>{this._expandScheduled=!1,this._resizePadding(e+this.LAZY_CHUNK_SIZE)});return}const d=Math.max(0,e-r),u=Math.max(0,s-(e+i-1)),p=Math.max(d+this.LAZY_CHUNK_SIZE,u+this.LAZY_CHUNK_SIZE);e>p+this.LAZY_CHUNK_SIZE&&(this._expandScheduled=!0,requestAnimationFrame(()=>{this._expandScheduled=!1,this._resizePadding(p)}))}render(){if(this.marketData.length===0)return;let t=null;try{const D=this.chart.getOption();if(D&&D.dataZoom&&D.dataZoom.length>0){const b=D.dataZoom.find(P=>P.type==="slider"||P.type==="inside");b&&(t={start:b.start,end:b.end})}}catch{}const e=this.options.databox?.position,i=this.leftSidebar.style.display,n=this.rightSidebar.style.display,r=e==="left"?"block":"none",s=e==="right"?"block":"none";(i!==r||n!==s)&&(this.leftSidebar.style.display=r,this.rightSidebar.style.display=s,this.chart.resize());const l=this.dataIndexOffset,a=[...Array(l).fill(""),...this.marketData.map(D=>new Date(D.time).toLocaleString()),...Array(l).fill("")],o=Qt.calculate(this.chart.getHeight(),this.indicators,this.options,this.isMainCollapsed,this.maximizedPaneId,this.marketData,this._mainHeightOverride??void 0);if(this._lastLayout=o,!t&&o.dataZoom&&this.marketData.length>0){const D=this.marketData.length,b=a.length,P=l/b,w=D/b;o.dataZoom.forEach(M=>{if(M.start!==void 0){const E=M.start/100,z=P+E*w;M.start=z*100}if(M.end!==void 0){const E=M.end/100,z=P+E*w;M.end=z*100}})}t&&o.dataZoom&&o.dataZoom.forEach(D=>{D.start=t.start,D.end=t.end}),o.xAxis.forEach(D=>{D.data=a,D.boundaryGap=!1});const c=St.buildCandlestickSeries(this.marketData,this.options),g={value:[NaN,NaN,NaN,NaN],itemStyle:{opacity:0}};c.data=[...Array(l).fill(g),...c.data,...Array(l).fill(g)];const d=[...Array(l).fill(null),...this.marketData,...Array(l).fill(null)],{series:u,barColors:p}=St.buildIndicatorSeries(this.indicators,this.timeToIndex,o.paneLayout,a.length,l,d,o.overlayYAxisMap,o.separatePaneYAxisOffset),f=this._buildDrawingRangeHints(o,l);c.data=c.data.map((D,b)=>p[b]?{value:D.value||D,itemStyle:{color:p[b],color0:p[b]}}:D);const y=[];this.indicators.forEach((D,b)=>{D.paneIndex===0&&y.push({id:b,titleColor:D.titleColor})});const m=Di.build(o,this.options,this.toggleIndicator.bind(this),this.isMainCollapsed,this.maximizedPaneId,y),x=new Map;this.drawings.forEach(D=>{const b=D.paneIndex||0;x.has(b)||x.set(b,[]),x.get(b).push(D)});const A=[];x.forEach((D,b)=>{A.push({type:"custom",name:`drawings-pane-${b}`,xAxisIndex:b,yAxisIndex:b,clip:!0,renderItem:(P,w)=>{const M=D[P.dataIndex];if(!M)return;const E=this.drawingRenderers.get(M.type);if(!E)return;const z=this.dataIndexOffset,G=M.points.map(v=>w.coord([v.timeIndex+z,v.value]));return E.render({drawing:M,pixelPoints:G,isSelected:M.id===this.selectedDrawingId,api:w,coordSys:P.coordSys})},data:D.map(P=>{const w=[];return P.points.forEach(M=>{w.push(M.timeIndex+this.dataIndexOffset,M.value)}),w}),encode:(()=>{const P=D.reduce((E,z)=>Math.max(E,z.points.length),0),w=Array.from({length:P},(E,z)=>z*2),M=Array.from({length:P},(E,z)=>z*2+1);return{x:w,y:M}})(),z:100,silent:!1})});const C=D=>{const b=Mi.format(D,this.options),P=this.options.databox?.position;return P==="left"?(this.leftSidebar.innerHTML=b,""):P==="right"?(this.rightSidebar.innerHTML=b,""):this.options.databox?`<div style="min-width: 200px;">${b}</div>`:""},k=[];this.indicators.forEach(D=>{Object.values(D.plots).forEach(b=>{b.options?.style==="table"&&b.data?.forEach(P=>{(Array.isArray(P.value)?P.value:[P.value]).forEach(w=>{w&&!w._deleted&&(w._paneIndex=w.force_overlay?0:D.paneIndex,k.push(w))})})})});const _={backgroundColor:this.options.backgroundColor,animation:!1,legend:{show:!1},tooltip:{show:!0,showContent:!!this.options.databox,trigger:"axis",triggerOn:this.options.databox?.triggerOn??"mousemove",axisPointer:{type:"cross",label:{backgroundColor:"#475569"}},backgroundColor:"rgba(30, 41, 59, 0.9)",borderWidth:1,borderColor:"#334155",padding:10,textStyle:{color:"#fff",fontFamily:this.options.fontFamily||"sans-serif"},formatter:C,extraCssText:e!=="floating"&&e!==void 0?"display: none !important;":void 0,position:(D,b,P,w,M)=>{if(this.options.databox?.position==="floating"){const E={top:10};return E[["left","right"][+(D[0]<M.viewSize[0]/2)]]=30,E}return null}},axisPointer:{link:{xAxisIndex:"all"},label:{backgroundColor:"#475569"}},graphic:m,grid:o.grid,xAxis:o.xAxis,yAxis:o.yAxis,dataZoom:o.dataZoom,series:[c,...u,...f,...A]};if(this.chart.setOption(_,!0),this._baseGraphics=m,this._lastTables=k,k.length>0){const D=this._buildTableGraphics();if(D.length>0){const b=[...m,...D];this.chart.setOption({graphic:b},{replaceMerge:["graphic"]})}}else this._tableGraphicIds=[];lt.clearAll(this.overlayContainer)}}var Oi=Object.defineProperty,Bi=(h,t,e)=>t in h?Oi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,pt=(h,t,e)=>(Bi(h,typeof t!="symbol"?t+"":t,e),e);class U{constructor(t){pt(this,"id"),pt(this,"name"),pt(this,"icon"),pt(this,"context"),pt(this,"eventListeners",[]),pt(this,"_snapIndicator",null),pt(this,"_snapMoveHandler",null),pt(this,"_snapKeyDownHandler",null),pt(this,"_snapKeyUpHandler",null),pt(this,"_snapBlurHandler",null),pt(this,"_snapActive",!1),pt(this,"_lastMouseEvent",null),this.id=t.id,this.name=t.name,this.icon=t.icon}init(t){this.context=t,this.onInit()}onInit(){}activate(){this.onActivate(),this._bindSnapIndicator(),this.context.events.emit("plugin:activated",this.id)}onActivate(){}deactivate(){this._unbindSnapIndicator(),this.onDeactivate(),this.context.events.emit("plugin:deactivated",this.id)}onDeactivate(){}destroy(){this._unbindSnapIndicator(),this.removeAllListeners(),this.onDestroy()}onDestroy(){}on(t,e){this.context.events.on(t,e),this.eventListeners.push({event:t,handler:e})}off(t,e){this.context.events.off(t,e),this.eventListeners=this.eventListeners.filter(i=>i.event!==t||i.handler!==e)}removeAllListeners(){this.eventListeners.forEach(({event:t,handler:e})=>{this.context.events.off(t,e)}),this.eventListeners=[]}get chart(){return this.context.getChart()}get marketData(){return this.context.getMarketData()}getPoint(t){const e=t.offsetX,i=t.offsetY,n=t.event;if(n?.ctrlKey||n?.metaKey){const r=this.context.snapToCandle({x:e,y:i});return[r.x,r.y]}return[e,i]}_bindSnapIndicator(){const t=this.context.getChart().getZr();this._snapMoveHandler=e=>{this._lastMouseEvent=e,e.event?.ctrlKey||e.event?.metaKey?this._showSnapAt(e.offsetX,e.offsetY):this._hideSnap()},this._snapKeyDownHandler=e=>{(e.key==="Control"||e.key==="Meta")&&this._lastMouseEvent&&this._showSnapAt(this._lastMouseEvent.offsetX,this._lastMouseEvent.offsetY)},this._snapKeyUpHandler=e=>{(e.key==="Control"||e.key==="Meta")&&this._hideSnap()},this._snapBlurHandler=()=>{this._hideSnap()},t.on("mousemove",this._snapMoveHandler),window.addEventListener("keydown",this._snapKeyDownHandler),window.addEventListener("keyup",this._snapKeyUpHandler),window.addEventListener("blur",this._snapBlurHandler)}_unbindSnapIndicator(){if(this._snapMoveHandler){try{this.context.getChart().getZr().off("mousemove",this._snapMoveHandler)}catch{}this._snapMoveHandler=null}this._snapKeyDownHandler&&(window.removeEventListener("keydown",this._snapKeyDownHandler),this._snapKeyDownHandler=null),this._snapKeyUpHandler&&(window.removeEventListener("keyup",this._snapKeyUpHandler),this._snapKeyUpHandler=null),this._snapBlurHandler&&(window.removeEventListener("blur",this._snapBlurHandler),this._snapBlurHandler=null),this._removeSnapGraphic(),this._lastMouseEvent=null}_removeSnapGraphic(){if(this._snapIndicator){try{this.context.getChart().getZr().remove(this._snapIndicator)}catch{}this._snapIndicator=null,this._snapActive=!1}}_showSnapAt(t,e){const i=this.context.snapToCandle({x:t,y:e}),n=this.context.getChart().getZr();this._snapIndicator||(this._snapIndicator=new S.graphic.Circle({shape:{cx:0,cy:0,r:5},style:{fill:"rgba(59, 130, 246, 0.3)",stroke:"#3b82f6",lineWidth:1.5},z:9999,silent:!0}),n.add(this._snapIndicator)),this._snapIndicator.setShape({cx:i.x,cy:i.y}),this._snapIndicator.show(),this._snapActive=!0}_hideSnap(){this._snapIndicator&&this._snapActive&&(this._snapIndicator.hide(),this._snapActive=!1)}}var ji=Object.defineProperty,Yi=(h,t,e)=>t in h?ji(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ot=(h,t,e)=>(Yi(h,typeof t!="symbol"?t+"":t,e),e);class Vi extends U{constructor(t={}){super({id:"measure",name:t?.name||"Measure",icon:t?.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M160-240q-33 0-56.5-23.5T80-320v-320q0-33 23.5-56.5T160-720h640q33 0 56.5 23.5T880-640v320q0 33-23.5 56.5T800-240H160Zm0-80h640v-320H680v160h-80v-160h-80v160h-80v-160h-80v160h-80v-160H160v320Zm120-160h80-80Zm160 0h80-80Zm160 0h80-80Zm-120 0Z"/></svg>'}),ot(this,"zr"),ot(this,"state","idle"),ot(this,"startPoint",null),ot(this,"endPoint",null),ot(this,"group",null),ot(this,"rect",null),ot(this,"labelRect",null),ot(this,"labelText",null),ot(this,"lineV",null),ot(this,"lineH",null),ot(this,"arrowStart",null),ot(this,"arrowEnd",null),ot(this,"onMouseDown",()=>{this.state==="finished"&&this.removeGraphic()}),ot(this,"onChartInteraction",()=>{this.group&&this.removeGraphic()}),ot(this,"onClick",e=>{this.state==="idle"?(this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.context.disableTools(),this.enableClearListeners())}),ot(this,"clearHandlers",{}),ot(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr()}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.disableClearListeners(),this.state==="drawing"&&this.removeGraphic()}onDestroy(){this.removeGraphic()}enableClearListeners(){const t=()=>{this.removeGraphic()};setTimeout(()=>{this.zr.on("click",t)},10),this.zr.on("mousedown",this.onMouseDown),this.context.events.on("chart:dataZoom",this.onChartInteraction),this.clearHandlers={click:t,mousedown:this.onMouseDown,dataZoom:this.onChartInteraction}}disableClearListeners(){this.clearHandlers.click&&this.zr.off("click",this.clearHandlers.click),this.clearHandlers.mousedown&&this.zr.off("mousedown",this.clearHandlers.mousedown),this.clearHandlers.dataZoom&&this.context.events.off("chart:dataZoom",this.clearHandlers.dataZoom),this.clearHandlers={}}initGraphic(){this.group||(this.group=new S.graphic.Group,this.rect=new S.graphic.Rect({shape:{x:0,y:0,width:0,height:0},style:{fill:"rgba(0,0,0,0)",stroke:"transparent",lineWidth:0},z:100}),this.lineV=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:"#fff",lineWidth:1,lineDash:[4,4]},z:101}),this.lineH=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:"#fff",lineWidth:1,lineDash:[4,4]},z:101}),this.arrowStart=new S.graphic.Polygon({shape:{points:[[0,0],[-5,10],[5,10]]},style:{fill:"#fff"},z:102}),this.arrowEnd=new S.graphic.Polygon({shape:{points:[[0,0],[-5,-10],[5,-10]]},style:{fill:"#fff"},z:102}),this.labelRect=new S.graphic.Rect({shape:{x:0,y:0,width:0,height:0,r:4},style:{fill:"transparent",stroke:"transparent",lineWidth:0,shadowBlur:5,shadowColor:"rgba(0,0,0,0.3)"},z:102}),this.labelText=new S.graphic.Text({style:{x:0,y:0,text:"",fill:"#fff",font:"12px sans-serif",align:"center",verticalAlign:"middle"},z:103}),this.group.add(this.rect),this.group.add(this.lineV),this.group.add(this.lineH),this.group.add(this.arrowStart),this.group.add(this.arrowEnd),this.group.add(this.labelRect),this.group.add(this.labelText),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null,this.disableClearListeners())}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint,r=this.context.coordinateConversion.pixelToData({x:t,y:e}),s=this.context.coordinateConversion.pixelToData({x:i,y:n});if(!r||!s)return;const l=Math.round(r.timeIndex),a=Math.round(s.timeIndex),o=r.value,c=s.value,g=a-l,d=c-o,u=d/o*100,p=d>=0,f=p?"rgba(33, 150, 243, 0.2)":"rgba(236, 0, 0, 0.2)",y=p?"#2196F3":"#ec0000";this.rect.setShape({x:Math.min(t,i),y:Math.min(e,n),width:Math.abs(i-t),height:Math.abs(n-e)}),this.rect.setStyle({fill:f});const m=(t+i)/2,x=(e+n)/2;this.lineV.setShape({x1:m,y1:e,x2:m,y2:n}),this.lineV.setStyle({stroke:y}),this.lineH.setShape({x1:t,y1:x,x2:i,y2:x}),this.lineH.setStyle({stroke:y});const A=Math.min(e,n),C=Math.max(e,n);this.arrowStart.setStyle({fill:"none"}),this.arrowEnd.setStyle({fill:"none"}),p?(this.arrowStart.setShape({points:[[m,A],[m-4,A+6],[m+4,A+6]]}),this.arrowStart.setStyle({fill:y})):(this.arrowEnd.setShape({points:[[m,C],[m-4,C-6],[m+4,C-6]]}),this.arrowEnd.setStyle({fill:y}));const k=[`${d.toFixed(2)} (${u.toFixed(2)}%)`,`${g} bars`].join(`
42
+ `),_=140,D=40,b=Math.max(e,n),P=Math.min(e,n);let w=(t+i)/2-_/2,M=b+10;const E=this.chart.getHeight();M+D>E&&(M=P-D-10),this.labelRect.setShape({x:w,y:M,width:_,height:D}),this.labelRect.setStyle({fill:"#1e293b",stroke:y,lineWidth:1}),this.labelText.setStyle({x:w+_/2,y:M+D/2,text:k,fill:"#fff"})}}var Xi=Object.defineProperty,qi=(h,t,e)=>t in h?Xi(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ui=(h,t,e)=>(qi(h,typeof t!="symbol"?t+"":t,e),e);class fe{constructor(){Ui(this,"type","line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#d1d4dc";return{type:"group",children:[{type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:o,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}}]}}}var Ki=Object.defineProperty,Ji=(h,t,e)=>t in h?Ki(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ft=(h,t,e)=>(Ji(h,typeof t!="symbol"?t+"":t,e),e);class Qi extends U{constructor(t={}){super({id:"trend-line",name:t?.name||"Trend Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="2" y1="22" x2="22" y2="2" /></svg>'}),ft(this,"zr"),ft(this,"state","idle"),ft(this,"startPoint",null),ft(this,"endPoint",null),ft(this,"group",null),ft(this,"line",null),ft(this,"startCircle",null),ft(this,"endCircle",null),ft(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});if(i&&n){const r=i.paneIndex||0;this.context.addDrawing({id:`line-${Date.now()}`,type:"line",points:[i,n],paneIndex:r,style:{color:"#d1d4dc",lineWidth:1}})}}this.removeGraphic(),this.context.disableTools()}}),ft(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new fe)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.state==="drawing"&&this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new S.graphic.Group,this.line=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:"#d1d4dc",lineWidth:1},z:100}),this.startCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:"#d1d4dc",lineWidth:1},z:101}),this.endCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:"#d1d4dc",lineWidth:1},z:101}),this.group.add(this.line),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n})}}var tn=Object.defineProperty,en=(h,t,e)=>t in h?tn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,nn=(h,t,e)=>(en(h,typeof t!="symbol"?t+"":t,e),e);class xe{constructor(){nn(this,"type","ray")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],[a,o]=i[1],c=e.style?.color||"#d1d4dc",[g,d]=this.extendToEdge(s,l,a,o,r);return{type:"group",children:[{type:"line",name:"line",shape:{x1:s,y1:l,x2:g,y2:d},style:{stroke:c,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:c,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:a,cy:o,r:4},style:{fill:"#fff",stroke:c,lineWidth:1,opacity:n?1:0}}]}}extendToEdge(t,e,i,n,r){const s=i-t,l=n-e;if(s===0&&l===0)return[i,n];const a=r.x,o=r.x+r.width,c=r.y,g=r.y+r.height;let d=1/0;if(s!==0){const u=s>0?(o-t)/s:(a-t)/s;u>0&&(d=Math.min(d,u))}if(l!==0){const u=l>0?(g-e)/l:(c-e)/l;u>0&&(d=Math.min(d,u))}return isFinite(d)||(d=1),[t+d*s,e+d*l]}}var sn=Object.defineProperty,on=(h,t,e)=>t in h?sn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,gt=(h,t,e)=>(on(h,typeof t!="symbol"?t+"":t,e),e);const Tt="#d1d4dc";class rn extends U{constructor(t={}){super({id:"ray-tool",name:t?.name||"Ray",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="20" x2="21" y2="4"/><circle cx="21" cy="4" r="0" fill="currentColor"/><polyline points="16,4 21,4 21,9" stroke-width="1.5"/></svg>'}),gt(this,"zr"),gt(this,"state","idle"),gt(this,"startPoint",null),gt(this,"endPoint",null),gt(this,"group",null),gt(this,"line",null),gt(this,"dashLine",null),gt(this,"startCircle",null),gt(this,"endCircle",null),gt(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});i&&n&&this.context.addDrawing({id:`ray-${Date.now()}`,type:"ray",points:[i,n],paneIndex:i.paneIndex||0,style:{color:Tt,lineWidth:1}})}this.removeGraphic(),this.context.disableTools()}}),gt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new xe)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new S.graphic.Group,this.line=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:Tt,lineWidth:1},z:100}),this.dashLine=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:Tt,lineWidth:1,lineDash:[4,4],opacity:.5},z:99}),this.startCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:Tt,lineWidth:1},z:101}),this.endCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:Tt,lineWidth:1},z:101}),this.group.add(this.dashLine),this.group.add(this.line),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n});const[r,s]=this.extendToEdge(t,e,i,n);this.dashLine.setShape({x1:i,y1:n,x2:r,y2:s})}extendToEdge(t,e,i,n){const r=i-t,s=n-e;if(r===0&&s===0)return[i,n];const l=this.chart.getWidth(),a=this.chart.getHeight();let o=1/0;if(r!==0){const c=r>0?(l-t)/r:-t/r;c>0&&(o=Math.min(o,c))}if(s!==0){const c=s>0?(a-e)/s:-e/s;c>0&&(o=Math.min(o,c))}return isFinite(o)||(o=1),[t+o*r,e+o*s]}}var an=Object.defineProperty,ln=(h,t,e)=>t in h?an(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,hn=(h,t,e)=>(ln(h,typeof t!="symbol"?t+"":t,e),e);class me{constructor(){hn(this,"type","info-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#d1d4dc",c=e.points[0],g=e.points[1],d=g.value-c.value,u=c.value!==0?d/c.value*100:0,p=Math.abs(g.timeIndex-c.timeIndex),f=d>=0?"+":"",y=`${f}${d.toFixed(2)} (${f}${u.toFixed(2)}%) ${p} bars`,m=(r+l)/2,x=(s+a)/2,A=d>=0?"#26a69a":"#ef5350";return{type:"group",children:[{type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:o,lineWidth:e.style?.lineWidth||1}},{type:"rect",shape:{x:m-2,y:x-22,width:y.length*6.5+12,height:18,r:3},style:{fill:"#1e293b",stroke:"#475569",lineWidth:1,opacity:.9},z2:10},{type:"text",x:m+4,y:x-20,style:{text:y,fill:A,fontSize:11,fontFamily:"monospace"},z2:11},{type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}}]}}}var cn=Object.defineProperty,dn=(h,t,e)=>t in h?cn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,xt=(h,t,e)=>(dn(h,typeof t!="symbol"?t+"":t,e),e);class pn extends U{constructor(t={}){super({id:"info-line-tool",name:t?.name||"Info Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="2" y1="22" x2="22" y2="2"/><rect x="12" y="8" width="8" height="5" rx="1" fill="none" stroke-width="1.5"/></svg>'}),xt(this,"zr"),xt(this,"state","idle"),xt(this,"startPoint",null),xt(this,"endPoint",null),xt(this,"group",null),xt(this,"line",null),xt(this,"startCircle",null),xt(this,"endCircle",null),xt(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});i&&n&&this.context.addDrawing({id:`info-line-${Date.now()}`,type:"info-line",points:[i,n],paneIndex:i.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}})}this.removeGraphic(),this.context.disableTools()}}),xt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new me)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new S.graphic.Group,this.line=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:"#d1d4dc",lineWidth:1},z:100}),this.startCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:"#d1d4dc",lineWidth:1},z:101}),this.endCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:"#d1d4dc",lineWidth:1},z:101}),this.group.add(this.line),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n})}}var un=Object.defineProperty,gn=(h,t,e)=>t in h?un(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,yn=(h,t,e)=>(gn(h,typeof t!="symbol"?t+"":t,e),e);class be{constructor(){yn(this,"type","extended-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],[a,o]=i[1],c=e.style?.color||"#d1d4dc",g=a-s,d=o-l;let u=s,p=l,f=a,y=o;if(g!==0||d!==0){const m=r.x,x=r.x+r.width,A=r.y,C=r.y+r.height;[f,y]=this.extendToEdge(s,l,g,d,m,x,A,C),[u,p]=this.extendToEdge(a,o,-g,-d,m,x,A,C)}return{type:"group",children:[{type:"line",name:"line",shape:{x1:u,y1:p,x2:f,y2:y},style:{stroke:c,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:c,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:a,cy:o,r:4},style:{fill:"#fff",stroke:c,lineWidth:1,opacity:n?1:0}}]}}extendToEdge(t,e,i,n,r,s,l,a){let o=1/0;if(i!==0){const c=i>0?(s-t)/i:(r-t)/i;c>0&&(o=Math.min(o,c))}if(n!==0){const c=n>0?(a-e)/n:(l-e)/n;c>0&&(o=Math.min(o,c))}return isFinite(o)||(o=1),[t+o*i,e+o*n]}}var fn=Object.defineProperty,xn=(h,t,e)=>t in h?fn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ut=(h,t,e)=>(xn(h,typeof t!="symbol"?t+"":t,e),e);const zt="#d1d4dc";class mn extends U{constructor(t={}){super({id:"extended-line-tool",name:t?.name||"Extended Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="1" y1="23" x2="23" y2="1" stroke-dasharray="2,2" opacity="0.4"/><line x1="6" y1="18" x2="18" y2="6"/></svg>'}),ut(this,"zr"),ut(this,"state","idle"),ut(this,"startPoint",null),ut(this,"endPoint",null),ut(this,"group",null),ut(this,"line",null),ut(this,"dashLineForward",null),ut(this,"dashLineBackward",null),ut(this,"startCircle",null),ut(this,"endCircle",null),ut(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});i&&n&&this.context.addDrawing({id:`extended-line-${Date.now()}`,type:"extended-line",points:[i,n],paneIndex:i.paneIndex||0,style:{color:zt,lineWidth:1}})}this.removeGraphic(),this.context.disableTools()}}),ut(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new be)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new S.graphic.Group,this.line=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:zt,lineWidth:1},z:100}),this.dashLineForward=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:zt,lineWidth:1,lineDash:[4,4],opacity:.5},z:99}),this.dashLineBackward=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:zt,lineWidth:1,lineDash:[4,4],opacity:.5},z:99}),this.startCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:zt,lineWidth:1},z:101}),this.endCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:zt,lineWidth:1},z:101}),this.group.add(this.dashLineBackward),this.group.add(this.dashLineForward),this.group.add(this.line),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n});const r=i-t,s=n-e;if(r===0&&s===0)return;const[l,a]=this.extendToEdge(t,e,r,s);this.dashLineForward.setShape({x1:i,y1:n,x2:l,y2:a});const[o,c]=this.extendToEdge(i,n,-r,-s);this.dashLineBackward.setShape({x1:t,y1:e,x2:o,y2:c})}extendToEdge(t,e,i,n){const r=this.chart.getWidth(),s=this.chart.getHeight();let l=1/0;if(i!==0){const a=i>0?(r-t)/i:-t/i;a>0&&(l=Math.min(l,a))}if(n!==0){const a=n>0?(s-e)/n:-e/n;a>0&&(l=Math.min(l,a))}return isFinite(l)||(l=1),[t+l*i,e+l*n]}}var bn=Object.defineProperty,vn=(h,t,e)=>t in h?bn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,wn=(h,t,e)=>(vn(h,typeof t!="symbol"?t+"":t,e),e);class ve{constructor(){wn(this,"type","trend-angle")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#d1d4dc",c=l-r,g=a-s,d=Math.atan2(-g,c),u=(d*(180/Math.PI)).toFixed(1),p=Math.min(30,Math.sqrt(c*c+g*g)*.3),f=r+Math.max(Math.abs(c),p+20),y=0,m=-d;return{type:"group",children:[{type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:o,lineWidth:e.style?.lineWidth||1}},{type:"line",shape:{x1:r,y1:s,x2:f,y2:s},style:{stroke:o,lineWidth:1,opacity:.4,lineDash:[4,4]}},{type:"arc",shape:{cx:r,cy:s,r:p,startAngle:Math.min(y,m),endAngle:Math.max(y,m)},style:{stroke:o,lineWidth:1.5,fill:"none"}},{type:"text",x:r+p+6,y:s+(g<0?-14:2),style:{text:`${u}\xB0`,fill:o,fontSize:11,fontFamily:"sans-serif"},z2:10},{type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}},{type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0}}]}}}var Cn=Object.defineProperty,Pn=(h,t,e)=>t in h?Cn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,dt=(h,t,e)=>(Pn(h,typeof t!="symbol"?t+"":t,e),e);const kt="#d1d4dc";class kn extends U{constructor(t={}){super({id:"trend-angle-tool",name:t?.name||"Trend Angle",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="20" x2="21" y2="6"/><line x1="3" y1="20" x2="14" y2="20" opacity="0.4"/><path d="M8 20 A5 5 0 0 1 7 16" stroke-width="1.5"/></svg>'}),dt(this,"zr"),dt(this,"state","idle"),dt(this,"startPoint",null),dt(this,"endPoint",null),dt(this,"group",null),dt(this,"line",null),dt(this,"hRefLine",null),dt(this,"arc",null),dt(this,"angleText",null),dt(this,"startCircle",null),dt(this,"endCircle",null),dt(this,"onClick",e=>{if(this.state==="idle")this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic();else if(this.state==="drawing"){if(this.state="finished",this.endPoint=this.getPoint(e),this.startPoint&&this.endPoint){const i=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),n=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});i&&n&&this.context.addDrawing({id:`trend-angle-${Date.now()}`,type:"trend-angle",points:[i,n],paneIndex:i.paneIndex||0,style:{color:kt,lineWidth:1}})}this.removeGraphic(),this.context.disableTools()}}),dt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new ve)}onActivate(){this.state="idle",this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick),this.zr.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick),this.zr.off("mousemove",this.onMouseMove),this.removeGraphic()}onDestroy(){this.removeGraphic()}initGraphic(){this.group||(this.group=new S.graphic.Group,this.line=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:kt,lineWidth:1},z:100}),this.hRefLine=new S.graphic.Line({shape:{x1:0,y1:0,x2:0,y2:0},style:{stroke:kt,lineWidth:1,lineDash:[4,4],opacity:.4},z:99}),this.arc=new S.graphic.Arc({shape:{cx:0,cy:0,r:25,startAngle:0,endAngle:0},style:{stroke:kt,lineWidth:1,fill:"none"},z:99}),this.angleText=new S.graphic.Text({style:{text:"",fill:kt,fontSize:11,fontFamily:"sans-serif"},z:101}),this.startCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:kt,lineWidth:1},z:101}),this.endCircle=new S.graphic.Circle({shape:{cx:0,cy:0,r:4},style:{fill:"#fff",stroke:kt,lineWidth:1},z:101}),this.group.add(this.hRefLine),this.group.add(this.arc),this.group.add(this.line),this.group.add(this.angleText),this.group.add(this.startCircle),this.group.add(this.endCircle),this.zr.add(this.group))}removeGraphic(){this.group&&(this.zr.remove(this.group),this.group=null)}updateGraphic(){if(!this.startPoint||!this.endPoint||!this.group)return;const[t,e]=this.startPoint,[i,n]=this.endPoint;this.line.setShape({x1:t,y1:e,x2:i,y2:n}),this.startCircle.setShape({cx:t,cy:e}),this.endCircle.setShape({cx:i,cy:n});const r=i-t,s=n-e,l=Math.max(Math.abs(r),40);this.hRefLine.setShape({x1:t,y1:e,x2:t+l,y2:e});const a=Math.atan2(-s,r)*(180/Math.PI),o=Math.min(25,Math.sqrt(r*r+s*s)*.3),c=Math.atan2(s,r),g=Math.min(0,c),d=Math.max(0,c);this.arc.setShape({cx:t,cy:e,r:o,startAngle:g,endAngle:d}),this.angleText.setStyle({text:`${a.toFixed(1)}\xB0`}),this.angleText.x=t+o+6,this.angleText.y=e+(s<0?-14:2),this.angleText.markRedraw()}}var Dn=Object.defineProperty,Mn=(h,t,e)=>t in h?Dn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,In=(h,t,e)=>(Mn(h,typeof t!="symbol"?t+"":t,e),e);class we{constructor(){In(this,"type","horizontal-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],a=e.style?.color||"#d1d4dc",o=r.x,c=r.x+r.width;return{type:"group",children:[{type:"line",name:"line",shape:{x1:o,y1:l,x2:c,y2:l},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"rect",shape:{x:c-70,y:l-10,width:65,height:18,r:2},style:{fill:a,opacity:.9},z2:10},{type:"text",x:c-67,y:l-8,style:{text:e.points[0].value.toFixed(2),fill:"#fff",fontSize:10,fontFamily:"monospace"},z2:11},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:a,lineWidth:1,opacity:n?1:0}}]}}}var An=Object.defineProperty,Sn=(h,t,e)=>t in h?An(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ce=(h,t,e)=>(Sn(h,typeof t!="symbol"?t+"":t,e),e);class _n extends U{constructor(t={}){super({id:"horizontal-line-tool",name:t?.name||"Horizontal Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="2" y1="12" x2="22" y2="12"/><circle cx="12" cy="12" r="2" fill="currentColor"/></svg>'}),Ce(this,"zr"),Ce(this,"onClick",e=>{const i=this.getPoint(e);if(!i)return;const n=this.context.coordinateConversion.pixelToData({x:i[0],y:i[1]});n&&this.context.addDrawing({id:`hline-${Date.now()}`,type:"horizontal-line",points:[n],paneIndex:n.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}}),this.context.disableTools()})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new we)}onActivate(){this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick)}onDeactivate(){this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick)}onDestroy(){}}var zn=Object.defineProperty,Gn=(h,t,e)=>t in h?zn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,$n=(h,t,e)=>(Gn(h,typeof t!="symbol"?t+"":t,e),e);class Pe{constructor(){$n(this,"type","horizontal-ray")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],a=e.style?.color||"#d1d4dc",o=r.x+r.width;return{type:"group",children:[{type:"line",name:"line",shape:{x1:s,y1:l,x2:o,y2:l},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:a,lineWidth:1,opacity:n?1:0}}]}}}var En=Object.defineProperty,Ln=(h,t,e)=>t in h?En(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ke=(h,t,e)=>(Ln(h,typeof t!="symbol"?t+"":t,e),e);class Tn extends U{constructor(t={}){super({id:"horizontal-ray-tool",name:t?.name||"Horizontal Ray",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="12" x2="22" y2="12"/><circle cx="4" cy="12" r="2" fill="currentColor"/></svg>'}),ke(this,"zr"),ke(this,"onClick",e=>{const i=this.getPoint(e);if(!i)return;const n=this.context.coordinateConversion.pixelToData({x:i[0],y:i[1]});n&&this.context.addDrawing({id:`hray-${Date.now()}`,type:"horizontal-ray",points:[n],paneIndex:n.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}}),this.context.disableTools()})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new Pe)}onActivate(){this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick)}onDeactivate(){this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick)}onDestroy(){}}var Wn=Object.defineProperty,Nn=(h,t,e)=>t in h?Wn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Fn=(h,t,e)=>(Nn(h,typeof t!="symbol"?t+"":t,e),e);class De{constructor(){Fn(this,"type","vertical-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],a=e.style?.color||"#d1d4dc",o=r.y,c=r.y+r.height;return{type:"group",children:[{type:"line",name:"line",shape:{x1:s,y1:o,x2:s,y2:c},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:a,lineWidth:1,opacity:n?1:0}}]}}}var Zn=Object.defineProperty,Rn=(h,t,e)=>t in h?Zn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Me=(h,t,e)=>(Rn(h,typeof t!="symbol"?t+"":t,e),e);class Hn extends U{constructor(t={}){super({id:"vertical-line-tool",name:t?.name||"Vertical Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="2" x2="12" y2="22"/><circle cx="12" cy="12" r="2" fill="currentColor"/></svg>'}),Me(this,"zr"),Me(this,"onClick",e=>{const i=this.getPoint(e);if(!i)return;const n=this.context.coordinateConversion.pixelToData({x:i[0],y:i[1]});n&&this.context.addDrawing({id:`vline-${Date.now()}`,type:"vertical-line",points:[n],paneIndex:n.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}}),this.context.disableTools()})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new De)}onActivate(){this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick)}onDeactivate(){this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick)}onDestroy(){}}var On=Object.defineProperty,Bn=(h,t,e)=>t in h?On(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,jn=(h,t,e)=>(Bn(h,typeof t!="symbol"?t+"":t,e),e);class Ie{constructor(){jn(this,"type","cross-line")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,coordSys:r}=t,[s,l]=i[0],a=e.style?.color||"#d1d4dc",o=r.x,c=r.x+r.width,g=r.y,d=r.y+r.height;return{type:"group",children:[{type:"line",name:"line-h",shape:{x1:o,y1:l,x2:c,y2:l},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"line",name:"line-v",shape:{x1:s,y1:g,x2:s,y2:d},style:{stroke:a,lineWidth:e.style?.lineWidth||1}},{type:"circle",name:"point-0",shape:{cx:s,cy:l,r:4},style:{fill:"#fff",stroke:a,lineWidth:1,opacity:n?1:0}}]}}}var Yn=Object.defineProperty,Vn=(h,t,e)=>t in h?Yn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ae=(h,t,e)=>(Vn(h,typeof t!="symbol"?t+"":t,e),e);class Xn extends U{constructor(t={}){super({id:"cross-line-tool",name:t?.name||"Cross Line",icon:t?.icon||'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="2" x2="12" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/></svg>'}),Ae(this,"zr"),Ae(this,"onClick",e=>{const i=this.getPoint(e);if(!i)return;const n=this.context.coordinateConversion.pixelToData({x:i[0],y:i[1]});n&&this.context.addDrawing({id:`crossline-${Date.now()}`,type:"cross-line",points:[n],paneIndex:n.paneIndex||0,style:{color:"#d1d4dc",lineWidth:1}}),this.context.disableTools()})}onInit(){this.zr=this.chart.getZr(),this.context.registerDrawingRenderer(new Ie)}onActivate(){this.chart.getZr().setCursorStyle("crosshair"),this.zr.on("click",this.onClick)}onDeactivate(){this.chart.getZr().setCursorStyle("default"),this.zr.off("click",this.onClick)}onDestroy(){}}var qn=Object.defineProperty,Un=(h,t,e)=>t in h?qn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Kn=(h,t,e)=>(Un(h,typeof t!="symbol"?t+"":t,e),e);const ne=[0,.236,.382,.5,.618,.786,1],Vt=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"];class Se{constructor(){Kn(this,"type","fibonacci")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#3b82f6",c=Math.min(r,l),g=Math.max(r,l),d=g-c,u=a-s,p=e.points[0].value,f=e.points[1].value,y=f-p,m=[],x=[];return ne.forEach((A,C)=>{const k=a-u*A,_=Vt[C%Vt.length];x.push({type:"line",shape:{x1:c,y1:k,x2:g,y2:k},style:{stroke:_,lineWidth:1},silent:!0});const D=f-y*A;if(x.push({type:"text",style:{text:`${A} (${D.toFixed(2)})`,x:c+5,y:k-10,fill:_,fontSize:10},silent:!0}),C<ne.length-1){const b=ne[C+1],P=a-u*b,w=Math.abs(P-k),M=Math.min(k,P);m.push({type:"rect",name:"line",shape:{x:c,y:M,width:d,height:w},style:{fill:Vt[(C+1)%Vt.length],opacity:.1}})}}),{type:"group",children:[...m,...x,{type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]}},{type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0},z:100},{type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0},z:100}]}}}var Jn=Object.defineProperty,Qn=(h,t,e)=>t in h?Jn(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,wt=(h,t,e)=>(Qn(h,typeof t!="symbol"?t+"":t,e),e);class ts extends U{constructor(t={}){super({id:"fibonacci-tool",name:t.name||"Fibonacci Retracement",icon:t.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M120-80v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Z"/></svg>'}),wt(this,"startPoint",null),wt(this,"endPoint",null),wt(this,"state","idle"),wt(this,"graphicGroup",null),wt(this,"levels",[0,.236,.382,.5,.618,.786,1]),wt(this,"colors",["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"]),wt(this,"onClick",e=>{this.state==="idle"?(this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools())}),wt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Se)}onActivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup||!this.startPoint||!this.endPoint)return;this.graphicGroup.removeAll();const t=this.startPoint[0],e=this.startPoint[1],i=this.endPoint[0],n=this.endPoint[1],r=new S.graphic.Line({shape:{x1:t,y1:e,x2:i,y2:n},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]},silent:!0});this.graphicGroup.add(r);const s=Math.min(t,i),l=Math.max(t,i),a=l-s,o=n-e;this.levels.forEach((c,g)=>{const d=n-o*c,u=this.colors[g%this.colors.length],p=new S.graphic.Line({shape:{x1:s,y1:d,x2:l,y2:d},style:{stroke:u,lineWidth:1},silent:!0});if(this.graphicGroup.add(p),g<this.levels.length-1){const f=this.levels[g+1],y=n-o*f,m=Math.abs(y-d),x=Math.min(d,y),A=new S.graphic.Rect({shape:{x:s,y:x,width:a,height:m},style:{fill:this.colors[(g+1)%this.colors.length],opacity:.1},silent:!0});this.graphicGroup.add(A)}})}saveDrawing(){if(!this.startPoint||!this.endPoint)return;const t=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),e=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});if(t&&e){const i=t.paneIndex||0;this.context.addDrawing({id:`fib-${Date.now()}`,type:"fibonacci",points:[t,e],paneIndex:i,style:{color:"#3b82f6",lineWidth:1}})}}}var es=Object.defineProperty,is=(h,t,e)=>t in h?es(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ns=(h,t,e)=>(is(h,typeof t!="symbol"?t+"":t,e),e);const Xt=[0,.236,.382,.5,.618,.786,1],qt=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"];class _e{constructor(){ns(this,"type","fibonacci_channel")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],[o,c]=i[2],g=e.style?.color||"#3b82f6",d=l-r,u=a-s,p=Math.sqrt(d*d+u*u);if(p===0)return;const f=-u/p,y=d/p,m=(o-r)*f+(c-s)*y,x=[],A=[];return Xt.forEach((C,k)=>{const _=f*m*C,D=y*m*C,b=r+_,P=s+D,w=l+_,M=a+D;if(A.push({lx1:b,ly1:P,lx2:w,ly2:M}),k<Xt.length-1){const E=Xt[k+1],z=f*m*E,G=y*m*E;x.push({type:"polygon",name:"line",shape:{points:[[b,P],[w,M],[l+z,a+G],[r+z,s+G]]},style:{fill:qt[(k+1)%qt.length],opacity:.1}})}}),A.forEach((C,k)=>{const _=qt[k%qt.length];x.push({type:"line",shape:{x1:C.lx1,y1:C.ly1,x2:C.lx2,y2:C.ly2},style:{stroke:_,lineWidth:1},silent:!0}),x.push({type:"text",style:{text:`${Xt[k]}`,x:C.lx2+5,y:C.ly2-5,fill:_,fontSize:10},silent:!0})}),x.push({type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]}}),x.push({type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:g,lineWidth:1,opacity:n?1:0},z:100}),x.push({type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:g,lineWidth:1,opacity:n?1:0},z:100}),x.push({type:"circle",name:"point-2",shape:{cx:o,cy:c,r:4},style:{fill:"#fff",stroke:g,lineWidth:1,opacity:n?1:0},z:100}),{type:"group",children:x}}}var ss=Object.defineProperty,os=(h,t,e)=>t in h?ss(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,bt=(h,t,e)=>(os(h,typeof t!="symbol"?t+"":t,e),e);class rs extends U{constructor(t={}){super({id:"fibonacci-channel-tool",name:t.name||"Fibonacci Channel",icon:t.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M120-200v-80l80-80H120v-80h160l120-120H120v-80h360l120-120H120v-80h720v80H520l-120 120h440v80H320L200-440h640v80H280l-80 80h640v80H120Z"/></svg>'}),bt(this,"startPoint",null),bt(this,"endPoint",null),bt(this,"widthPoint",null),bt(this,"state","idle"),bt(this,"graphicGroup",null),bt(this,"levels",[0,.236,.382,.5,.618,.786,1]),bt(this,"colors",["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"]),bt(this,"onClick",e=>{this.state==="idle"?(this.state="drawing-baseline",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic()):this.state==="drawing-baseline"?(this.state="drawing-width",this.endPoint=this.getPoint(e),this.widthPoint=this.getPoint(e),this.updateGraphic()):this.state==="drawing-width"&&(this.state="finished",this.widthPoint=this.getPoint(e),this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools())}),bt(this,"onMouseMove",e=>{this.state==="drawing-baseline"?(this.endPoint=this.getPoint(e),this.updateGraphic()):this.state==="drawing-width"&&(this.widthPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new _e)}onActivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.widthPoint=null,this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.widthPoint=null,this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup||!this.startPoint||!this.endPoint)return;this.graphicGroup.removeAll();const t=this.startPoint[0],e=this.startPoint[1],i=this.endPoint[0],n=this.endPoint[1];if(this.graphicGroup.add(new S.graphic.Line({shape:{x1:t,y1:e,x2:i,y2:n},style:{stroke:"#787b86",lineWidth:2},silent:!0})),this.widthPoint&&this.state!=="drawing-baseline"){const r=this.widthPoint,s=i-t,l=n-e,a=Math.sqrt(s*s+l*l);if(a===0)return;const o=-l/a,c=s/a,g=(r[0]-t)*o+(r[1]-e)*c;this.levels.forEach((d,u)=>{const p=o*g*d,f=c*g*d,y=t+p,m=e+f,x=i+p,A=n+f,C=this.colors[u%this.colors.length];if(this.graphicGroup.add(new S.graphic.Line({shape:{x1:y,y1:m,x2:x,y2:A},style:{stroke:C,lineWidth:1},silent:!0})),u<this.levels.length-1){const k=this.levels[u+1],_=o*g*k,D=c*g*k,b=t+_,P=e+D,w=i+_,M=n+D;this.graphicGroup.add(new S.graphic.Polygon({shape:{points:[[y,m],[x,A],[w,M],[b,P]]},style:{fill:this.colors[(u+1)%this.colors.length],opacity:.1},silent:!0}))}})}}saveDrawing(){if(!this.startPoint||!this.endPoint||!this.widthPoint)return;const t=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),e=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]}),i=this.context.coordinateConversion.pixelToData({x:this.widthPoint[0],y:this.widthPoint[1]});if(t&&e&&i){const n=t.paneIndex||0;this.context.addDrawing({id:`fib-channel-${Date.now()}`,type:"fibonacci_channel",points:[t,e,i],paneIndex:n,style:{color:"#3b82f6",lineWidth:1}})}}}var as=Object.defineProperty,ls=(h,t,e)=>t in h?as(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,hs=(h,t,e)=>(ls(h,typeof t!="symbol"?t+"":t,e),e);const se=[0,.236,.382,.5,.618,.786,1],Ct=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"];class ze{constructor(){hs(this,"type","fib_speed_resistance_fan")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,[r,s]=i[0],[l,a]=i[1],o=e.style?.color||"#3b82f6",c=l-r,g=a-s,d=[],u=[],p=[];for(const f of se)u.push([r+c,s+g*f]),p.push([r+c*f,s+g]);for(let f=0;f<u.length-1;f++)d.push({type:"polygon",name:"line",shape:{points:[[r,s],u[f],u[f+1]]},style:{fill:Ct[(f+1)%Ct.length],opacity:.06}});for(let f=0;f<p.length-1;f++)d.push({type:"polygon",name:"line",shape:{points:[[r,s],p[f],p[f+1]]},style:{fill:Ct[(f+1)%Ct.length],opacity:.06}});return se.forEach((f,y)=>{const[m,x]=u[y],A=Ct[y%Ct.length];d.push({type:"line",shape:{x1:r,y1:s,x2:m,y2:x},style:{stroke:A,lineWidth:1},silent:!0}),d.push({type:"text",style:{text:`${f}`,x:m+3,y:x-2,fill:A,fontSize:9},silent:!0})}),se.forEach((f,y)=>{const[m,x]=p[y],A=Ct[y%Ct.length];d.push({type:"line",shape:{x1:r,y1:s,x2:m,y2:x},style:{stroke:A,lineWidth:1},silent:!0}),d.push({type:"text",style:{text:`${f}`,x:m-2,y:x+8,fill:A,fontSize:9},silent:!0})}),d.push({type:"line",name:"line",shape:{x1:l,y1:s,x2:l,y2:a},style:{stroke:"#555",lineWidth:1,lineDash:[3,3]}}),d.push({type:"line",name:"line",shape:{x1:r,y1:a,x2:l,y2:a},style:{stroke:"#555",lineWidth:1,lineDash:[3,3]}}),d.push({type:"line",name:"line",shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]}}),d.push({type:"circle",name:"point-0",shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0},z:100}),d.push({type:"circle",name:"point-1",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:o,lineWidth:1,opacity:n?1:0},z:100}),{type:"group",children:d}}}var cs=Object.defineProperty,ds=(h,t,e)=>t in h?cs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Gt=(h,t,e)=>(ds(h,typeof t!="symbol"?t+"":t,e),e);const Dt=[0,.236,.382,.5,.618,.786,1],$t=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86"];class ps extends U{constructor(t={}){super({id:"fib-speed-resistance-fan-tool",name:t.name||"Fib Speed Resistance Fan",icon:t.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#e3e3e3"><path d="M2 21L22 3M2 21l20-6M2 21l20-9M2 21l20-12M2 21l20-15M2 21l6-18M2 21l9-18M2 21l12-18M2 21l15-18" stroke="#e3e3e3" stroke-width="1" fill="none"/></svg>'}),Gt(this,"startPoint",null),Gt(this,"endPoint",null),Gt(this,"state","idle"),Gt(this,"graphicGroup",null),Gt(this,"onClick",e=>{this.state==="idle"?(this.state="drawing",this.startPoint=this.getPoint(e),this.endPoint=this.getPoint(e),this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.state="finished",this.endPoint=this.getPoint(e),this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools())}),Gt(this,"onMouseMove",e=>{this.state==="drawing"&&(this.endPoint=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new ze)}onActivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.startPoint=null,this.endPoint=null,this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup||!this.startPoint||!this.endPoint)return;this.graphicGroup.removeAll();const t=this.startPoint[0],e=this.startPoint[1],i=this.endPoint[0],n=this.endPoint[1],r=i-t,s=n-e;Dt.forEach((l,a)=>{const o=$t[a%$t.length];this.graphicGroup.add(new S.graphic.Line({shape:{x1:t,y1:e,x2:t+r,y2:e+s*l},style:{stroke:o,lineWidth:1},silent:!0})),this.graphicGroup.add(new S.graphic.Line({shape:{x1:t,y1:e,x2:t+r*l,y2:e+s},style:{stroke:o,lineWidth:1},silent:!0}))});for(let l=0;l<Dt.length-1;l++){const a=[t+r,e+s*Dt[l]],o=[t+r,e+s*Dt[l+1]];this.graphicGroup.add(new S.graphic.Polygon({shape:{points:[[t,e],a,o]},style:{fill:$t[(l+1)%$t.length],opacity:.06},silent:!0}))}for(let l=0;l<Dt.length-1;l++){const a=[t+r*Dt[l],e+s],o=[t+r*Dt[l+1],e+s];this.graphicGroup.add(new S.graphic.Polygon({shape:{points:[[t,e],a,o]},style:{fill:$t[(l+1)%$t.length],opacity:.06},silent:!0}))}this.graphicGroup.add(new S.graphic.Line({shape:{x1:i,y1:e,x2:i,y2:n},style:{stroke:"#555",lineWidth:1,lineDash:[3,3]},silent:!0})),this.graphicGroup.add(new S.graphic.Line({shape:{x1:t,y1:n,x2:i,y2:n},style:{stroke:"#555",lineWidth:1,lineDash:[3,3]},silent:!0})),this.graphicGroup.add(new S.graphic.Line({shape:{x1:t,y1:e,x2:i,y2:n},style:{stroke:"#999",lineWidth:1,lineDash:[4,4]},silent:!0}))}saveDrawing(){if(!this.startPoint||!this.endPoint)return;const t=this.context.coordinateConversion.pixelToData({x:this.startPoint[0],y:this.startPoint[1]}),e=this.context.coordinateConversion.pixelToData({x:this.endPoint[0],y:this.endPoint[1]});t&&e&&this.context.addDrawing({id:`fib-fan-${Date.now()}`,type:"fib_speed_resistance_fan",points:[t,e],paneIndex:t.paneIndex||0,style:{color:"#3b82f6",lineWidth:1}})}}var us=Object.defineProperty,gs=(h,t,e)=>t in h?us(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ys=(h,t,e)=>(gs(h,typeof t!="symbol"?t+"":t,e),e);const Ge=[0,.236,.382,.5,.618,.786,1,1.272,1.618,2,2.618],$e=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86","#e91e63","#9c27b0","#673ab7","#3f51b5"];class Ee{constructor(){ys(this,"type","fib_trend_extension")}render(t){const{drawing:e,pixelPoints:i,isSelected:n,api:r}=t,s=e.style?.color||"#3b82f6";if(i.length<3)return;const[l,a]=i[0],[o,c]=i[1],[g,d]=i[2],u=e.points,p=u[1].value-u[0].value,f=Math.min(l,o,g),y=Math.max(l,o,g),m=(y-f)*.5,x=f,A=y+m,C=[],k=[];for(let b=0;b<Ge.length;b++){const P=Ge[b],w=u[2].value+p*P;r.coord([u[2].timeIndex+t.drawing.points[2].timeIndex-u[2].timeIndex,w]);const M=d+(c-a)*P;k.push({level:P,y:M,price:w,color:$e[b%$e.length]})}for(let b=0;b<k.length-1;b++){const P=k[b],w=k[b+1],M=Math.min(P.y,w.y),E=Math.abs(w.y-P.y);C.push({type:"rect",name:"line",shape:{x,y:M,width:A-x,height:E},style:{fill:w.color,opacity:.06}})}for(const b of k)C.push({type:"line",shape:{x1:x,y1:b.y,x2:A,y2:b.y},style:{stroke:b.color,lineWidth:1},silent:!0}),C.push({type:"text",style:{text:`${b.level} (${b.price.toFixed(2)})`,x:A+4,y:b.y-6,fill:b.color,fontSize:9},silent:!0});C.push({type:"line",name:"line",shape:{x1:l,y1:a,x2:o,y2:c},style:{stroke:"#2196f3",lineWidth:1.5,lineDash:[5,4]}}),C.push({type:"line",name:"line",shape:{x1:o,y1:c,x2:g,y2:d},style:{stroke:"#ff9800",lineWidth:1.5,lineDash:[5,4]}}),C.push({type:"circle",name:"point-0",shape:{cx:l,cy:a,r:4},style:{fill:"#fff",stroke:s,lineWidth:1,opacity:n?1:0},z:100}),C.push({type:"circle",name:"point-1",shape:{cx:o,cy:c,r:4},style:{fill:"#fff",stroke:s,lineWidth:1,opacity:n?1:0},z:100}),C.push({type:"circle",name:"point-2",shape:{cx:g,cy:d,r:4},style:{fill:"#fff",stroke:s,lineWidth:1,opacity:n?1:0},z:100});const _=["1","2","3"],D=[i[0],i[1],i[2]];for(let b=0;b<3;b++){const[P,w]=D[b],M=(b===0||w<=D[b-1][1])&&(b===2||w<=D[b+1]?.[1]);C.push({type:"text",style:{text:_[b],x:P,y:M?w-14:w+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}return{type:"group",children:C}}}var fs=Object.defineProperty,xs=(h,t,e)=>t in h?fs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Wt=(h,t,e)=>(xs(h,typeof t!="symbol"?t+"":t,e),e);const Ut=[0,.236,.382,.5,.618,.786,1,1.272,1.618,2,2.618],Kt=["#787b86","#f44336","#ff9800","#4caf50","#2196f3","#00bcd4","#787b86","#e91e63","#9c27b0","#673ab7","#3f51b5"];class ms extends U{constructor(t={}){super({id:"fib-trend-extension-tool",name:t.name||"Fib Trend Extension",icon:t.icon||'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M120-80v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z"/></svg>'}),Wt(this,"points",[]),Wt(this,"state","idle"),Wt(this,"graphicGroup",null),Wt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing-trend",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing-trend"?(this.state="drawing-retracement",this.points[1]=i,this.points.push([...i]),this.updateGraphic()):this.state==="drawing-retracement"&&(this.state="finished",this.points[2]=i,this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools())}),Wt(this,"onMouseMove",e=>{this.state==="drawing-trend"?(this.points[1]=this.getPoint(e),this.updateGraphic()):this.state==="drawing-retracement"&&(this.points[2]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Ee)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const[t,e]=this.points[0],[i,n]=this.points[1];if(this.graphicGroup.add(new S.graphic.Line({shape:{x1:t,y1:e,x2:i,y2:n},style:{stroke:"#2196f3",lineWidth:1.5,lineDash:[5,4]},silent:!0})),this.points.length>=3){const[r,s]=this.points[2];this.graphicGroup.add(new S.graphic.Line({shape:{x1:i,y1:n,x2:r,y2:s},style:{stroke:"#ff9800",lineWidth:1.5,lineDash:[5,4]},silent:!0}));const l=n-e,a=Math.min(t,i,r),o=Math.max(t,i,r),c=(o-a)*.5,g=a,d=o+c;for(let u=0;u<Ut.length;u++){const p=Ut[u],f=s+l*p,y=Kt[u%Kt.length];if(this.graphicGroup.add(new S.graphic.Line({shape:{x1:g,y1:f,x2:d,y2:f},style:{stroke:y,lineWidth:1},silent:!0})),this.graphicGroup.add(new S.graphic.Text({style:{text:`${p}`,x:d+4,y:f-6,fill:y,fontSize:9},silent:!0})),u<Ut.length-1){const m=s+l*Ut[u+1],x=Math.min(f,m),A=Math.abs(m-f);this.graphicGroup.add(new S.graphic.Rect({shape:{x:g,y:x,width:d-g,height:A},style:{fill:Kt[(u+1)%Kt.length],opacity:.06},silent:!0}))}}}for(const r of this.points)this.graphicGroup.add(new S.graphic.Circle({shape:{cx:r[0],cy:r[1],r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`fib-ext-${Date.now()}`,type:"fib_trend_extension",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:1}})}}var bs=Object.defineProperty,vs=(h,t,e)=>t in h?bs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,ws=(h,t,e)=>(vs(h,typeof t!="symbol"?t+"":t,e),e);const Le=["X","A","B","C","D"],Te=["#2196f3","#ff9800","#4caf50","#f44336"],Cs="rgba(33, 150, 243, 0.08)",Ps="rgba(244, 67, 54, 0.08)";class We{constructor(){ws(this,"type","xabcd_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([a,o])=>[a,o])},style:{fill:Cs,opacity:1}}),i.length>=5&&s.push({type:"polygon",name:"line",shape:{points:i.slice(2,5).map(([a,o])=>[a,o])},style:{fill:Ps,opacity:1}});for(let a=0;a<i.length-1;a++){const[o,c]=i[a],[g,d]=i[a+1],u=Te[a%Te.length];s.push({type:"line",name:"line",shape:{x1:o,y1:c,x2:g,y2:d},style:{stroke:u,lineWidth:e.style?.lineWidth||2}})}const l=[[0,2],[1,3],[2,4]];for(const[a,o]of l)if(a<i.length&&o<i.length){const[c,g]=i[a],[d,u]=i[o];s.push({type:"line",shape:{x1:c,y1:g,x2:d,y2:u},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0})}if(e.points.length>=3){const a=Math.abs(e.points[1].value-e.points[0].value),o=Math.abs(e.points[2].value-e.points[1].value);if(a!==0){const c=(o/a).toFixed(3),g=(i[1][0]+i[2][0])/2,d=(i[1][1]+i[2][1])/2;s.push({type:"text",style:{text:c,x:g+8,y:d,fill:"#ff9800",fontSize:10},silent:!0})}}if(e.points.length>=4){const a=Math.abs(e.points[2].value-e.points[1].value),o=Math.abs(e.points[3].value-e.points[2].value);if(a!==0){const c=(o/a).toFixed(3),g=(i[2][0]+i[3][0])/2,d=(i[2][1]+i[3][1])/2;s.push({type:"text",style:{text:c,x:g+8,y:d,fill:"#4caf50",fontSize:10},silent:!0})}}if(e.points.length>=5){const a=Math.abs(e.points[3].value-e.points[2].value),o=Math.abs(e.points[4].value-e.points[3].value);if(a!==0){const d=(o/a).toFixed(3),u=(i[3][0]+i[4][0])/2,p=(i[3][1]+i[4][1])/2;s.push({type:"text",style:{text:d,x:u+8,y:p,fill:"#f44336",fontSize:10},silent:!0})}const c=Math.abs(e.points[1].value-e.points[0].value),g=Math.abs(e.points[4].value-e.points[1].value);if(c!==0){const d=(g/c).toFixed(3),[u,p]=i[4];s.push({type:"text",style:{text:`AD/XA: ${d}`,x:u+10,y:p+14,fill:"#aaa",fontSize:9},silent:!0})}}for(let a=0;a<i.length&&a<Le.length;a++){const[o,c]=i[a],g=(a===0||c<=i[a-1][1])&&(a===i.length-1||c<=i[a+1]?.[1])?c-14:c+16;s.push({type:"text",style:{text:Le[a],x:o,y:g,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let a=0;a<i.length;a++){const[o,c]=i[a];s.push({type:"circle",name:`point-${a}`,shape:{cx:o,cy:c,r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100})}return{type:"group",children:s}}}var ks=Object.defineProperty,Ds=(h,t,e)=>t in h?ks(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Nt=(h,t,e)=>(Ds(h,typeof t!="symbol"?t+"":t,e),e);const Ne=["X","A","B","C","D"],Fe=["#2196f3","#ff9800","#4caf50","#f44336"],Ms=5;class Is extends U{constructor(t={}){super({id:"xabcd-pattern-tool",name:t.name||"XABCD Pattern",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="2,18 6,6 11,14 16,4 21,16"/><circle cx="2" cy="18" r="1.5" fill="#e3e3e3"/><circle cx="6" cy="6" r="1.5" fill="#e3e3e3"/><circle cx="11" cy="14" r="1.5" fill="#e3e3e3"/><circle cx="16" cy="4" r="1.5" fill="#e3e3e3"/><circle cx="21" cy="16" r="1.5" fill="#e3e3e3"/></svg>'}),Nt(this,"points",[]),Nt(this,"state","idle"),Nt(this,"graphicGroup",null),Nt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=Ms?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Nt(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new We)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair"),this.bindEvents()}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic(),this.unbindEvents(),this.context.getChart().getZr().setCursorStyle("default")}bindEvents(){const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}unbindEvents(){const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove)}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(33, 150, 243, 0.08)"},silent:!0})),t.length>=5&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(2,5)},style:{fill:"rgba(244, 67, 54, 0.08)"},silent:!0}));for(let i=0;i<t.length-1;i++){const[n,r]=t[i],[s,l]=t[i+1];this.graphicGroup.add(new S.graphic.Line({shape:{x1:n,y1:r,x2:s,y2:l},style:{stroke:Fe[i%Fe.length],lineWidth:2},silent:!0}))}const e=[[0,2],[1,3],[2,4]];for(const[i,n]of e)if(i<t.length&&n<t.length){const[r,s]=t[i],[l,a]=t[n];this.graphicGroup.add(new S.graphic.Line({shape:{x1:r,y1:s,x2:l,y2:a},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}))}for(let i=0;i<t.length&&i<Ne.length;i++){const[n,r]=t[i],s=(i===0||r<=t[i-1][1])&&(i===t.length-1||r<=t[i+1]?.[1])?r-14:r+16;this.graphicGroup.add(new S.graphic.Text({style:{text:Ne[i],x:n,y:s,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0}))}for(let i=0;i<t.length;i++){const[n,r]=t[i];this.graphicGroup.add(new S.graphic.Circle({shape:{cx:n,cy:r,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`xabcd-${Date.now()}`,type:"xabcd_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var As=Object.defineProperty,Ss=(h,t,e)=>t in h?As(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,_s=(h,t,e)=>(Ss(h,typeof t!="symbol"?t+"":t,e),e);const Ze=["A","B","C","D"],Re=["#2196f3","#ff9800","#4caf50"];class He{constructor(){_s(this,"type","abcd_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([l,a])=>[l,a])},style:{fill:"rgba(33, 150, 243, 0.08)"}}),i.length>=4&&s.push({type:"polygon",name:"line",shape:{points:i.slice(1,4).map(([l,a])=>[l,a])},style:{fill:"rgba(244, 67, 54, 0.08)"}});for(let l=0;l<i.length-1;l++){const[a,o]=i[l],[c,g]=i[l+1];s.push({type:"line",name:"line",shape:{x1:a,y1:o,x2:c,y2:g},style:{stroke:Re[l%Re.length],lineWidth:e.style?.lineWidth||2}})}if(i.length>=3&&s.push({type:"line",shape:{x1:i[0][0],y1:i[0][1],x2:i[2][0],y2:i[2][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}),i.length>=4&&s.push({type:"line",shape:{x1:i[1][0],y1:i[1][1],x2:i[3][0],y2:i[3][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}),e.points.length>=3){const l=Math.abs(e.points[1].value-e.points[0].value),a=Math.abs(e.points[2].value-e.points[1].value);if(l!==0){const o=(a/l).toFixed(3),c=(i[1][0]+i[2][0])/2,g=(i[1][1]+i[2][1])/2;s.push({type:"text",style:{text:o,x:c+8,y:g,fill:"#ff9800",fontSize:10},silent:!0})}}if(e.points.length>=4){const l=Math.abs(e.points[2].value-e.points[1].value),a=Math.abs(e.points[3].value-e.points[2].value);if(l!==0){const o=(a/l).toFixed(3),c=(i[2][0]+i[3][0])/2,g=(i[2][1]+i[3][1])/2;s.push({type:"text",style:{text:o,x:c+8,y:g,fill:"#4caf50",fontSize:10},silent:!0})}}for(let l=0;l<i.length&&l<Ze.length;l++){const[a,o]=i[l],c=(l===0||o<=i[l-1][1])&&(l===i.length-1||o<=i[l+1]?.[1]);s.push({type:"text",style:{text:Ze[l],x:a,y:c?o-14:o+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let l=0;l<i.length;l++)s.push({type:"circle",name:`point-${l}`,shape:{cx:i[l][0],cy:i[l][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var zs=Object.defineProperty,Gs=(h,t,e)=>t in h?zs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ft=(h,t,e)=>(Gs(h,typeof t!="symbol"?t+"":t,e),e);const Oe=["A","B","C","D"],Be=["#2196f3","#ff9800","#4caf50"],$s=4;class Es extends U{constructor(t={}){super({id:"abcd-pattern-tool",name:t.name||"ABCD Pattern",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="3,18 8,5 15,15 21,3"/><circle cx="3" cy="18" r="1.5" fill="#e3e3e3"/><circle cx="8" cy="5" r="1.5" fill="#e3e3e3"/><circle cx="15" cy="15" r="1.5" fill="#e3e3e3"/><circle cx="21" cy="3" r="1.5" fill="#e3e3e3"/></svg>'}),Ft(this,"points",[]),Ft(this,"state","idle"),Ft(this,"graphicGroup",null),Ft(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=$s?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Ft(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new He)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),this.context.getChart().getZr().setCursorStyle("default")}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(33,150,243,0.08)"},silent:!0})),t.length>=4&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(1,4)},style:{fill:"rgba(244,67,54,0.08)"},silent:!0}));for(let e=0;e<t.length-1;e++)this.graphicGroup.add(new S.graphic.Line({shape:{x1:t[e][0],y1:t[e][1],x2:t[e+1][0],y2:t[e+1][1]},style:{stroke:Be[e%Be.length],lineWidth:2},silent:!0}));t.length>=3&&this.graphicGroup.add(new S.graphic.Line({shape:{x1:t[0][0],y1:t[0][1],x2:t[2][0],y2:t[2][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0})),t.length>=4&&this.graphicGroup.add(new S.graphic.Line({shape:{x1:t[1][0],y1:t[1][1],x2:t[3][0],y2:t[3][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}));for(let e=0;e<t.length&&e<Oe.length;e++){const[i,n]=t[e],r=(e===0||n<=t[e-1][1])&&(e===t.length-1||n<=t[e+1]?.[1]);this.graphicGroup.add(new S.graphic.Text({style:{text:Oe[e],x:i,y:r?n-14:n+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new S.graphic.Circle({shape:{cx:i,cy:n,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`abcd-${Date.now()}`,type:"abcd_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var Ls=Object.defineProperty,Ts=(h,t,e)=>t in h?Ls(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ws=(h,t,e)=>(Ts(h,typeof t!="symbol"?t+"":t,e),e);const je=["X","A","B","C","D"],Ye=["#00bcd4","#e91e63","#8bc34a","#ff5722"];class Ve{constructor(){Ws(this,"type","cypher_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([o,c])=>[o,c])},style:{fill:"rgba(0, 188, 212, 0.08)"}}),i.length>=5&&s.push({type:"polygon",name:"line",shape:{points:i.slice(2,5).map(([o,c])=>[o,c])},style:{fill:"rgba(233, 30, 99, 0.08)"}});for(let o=0;o<i.length-1;o++){const[c,g]=i[o],[d,u]=i[o+1];s.push({type:"line",name:"line",shape:{x1:c,y1:g,x2:d,y2:u},style:{stroke:Ye[o%Ye.length],lineWidth:e.style?.lineWidth||2}})}const l=[[0,2],[0,3],[1,4]];for(const[o,c]of l)o<i.length&&c<i.length&&s.push({type:"line",shape:{x1:i[o][0],y1:i[o][1],x2:i[c][0],y2:i[c][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0});const a=e.points;if(a.length>=3){const o=Math.abs(a[1].value-a[0].value),c=Math.abs(a[2].value-a[1].value);if(o!==0){const g=(c/o).toFixed(3);s.push({type:"text",style:{text:g,x:(i[1][0]+i[2][0])/2+8,y:(i[1][1]+i[2][1])/2,fill:"#e91e63",fontSize:10},silent:!0})}}if(a.length>=4){const o=Math.abs(a[1].value-a[0].value),c=Math.abs(a[3].value-a[0].value);if(o!==0){const g=(c/o).toFixed(3);s.push({type:"text",style:{text:`XC/XA: ${g}`,x:(i[0][0]+i[3][0])/2+8,y:(i[0][1]+i[3][1])/2,fill:"#8bc34a",fontSize:10},silent:!0})}}if(a.length>=5){const o=Math.abs(a[3].value-a[0].value),c=Math.abs(a[4].value-a[3].value);if(o!==0){const g=(c/o).toFixed(3);s.push({type:"text",style:{text:g,x:(i[3][0]+i[4][0])/2+8,y:(i[3][1]+i[4][1])/2,fill:"#ff5722",fontSize:10},silent:!0})}}for(let o=0;o<i.length&&o<je.length;o++){const[c,g]=i[o],d=(o===0||g<=i[o-1][1])&&(o===i.length-1||g<=i[o+1]?.[1]);s.push({type:"text",style:{text:je[o],x:c,y:d?g-14:g+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let o=0;o<i.length;o++)s.push({type:"circle",name:`point-${o}`,shape:{cx:i[o][0],cy:i[o][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var Ns=Object.defineProperty,Fs=(h,t,e)=>t in h?Ns(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Zt=(h,t,e)=>(Fs(h,typeof t!="symbol"?t+"":t,e),e);const Xe=["X","A","B","C","D"],qe=["#00bcd4","#e91e63","#8bc34a","#ff5722"],Zs=5;class Rs extends U{constructor(t={}){super({id:"cypher-pattern-tool",name:t.name||"Cypher Pattern",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="2,16 7,4 11,12 17,2 22,14"/><circle cx="2" cy="16" r="1.5" fill="#e3e3e3"/><circle cx="7" cy="4" r="1.5" fill="#e3e3e3"/><circle cx="11" cy="12" r="1.5" fill="#e3e3e3"/><circle cx="17" cy="2" r="1.5" fill="#e3e3e3"/><circle cx="22" cy="14" r="1.5" fill="#e3e3e3"/></svg>'}),Zt(this,"points",[]),Zt(this,"state","idle"),Zt(this,"graphicGroup",null),Zt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=Zs?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Zt(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Ve)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),t.setCursorStyle("default")}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(0,188,212,0.08)"},silent:!0})),t.length>=5&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(2,5)},style:{fill:"rgba(233,30,99,0.08)"},silent:!0}));for(let e=0;e<t.length-1;e++)this.graphicGroup.add(new S.graphic.Line({shape:{x1:t[e][0],y1:t[e][1],x2:t[e+1][0],y2:t[e+1][1]},style:{stroke:qe[e%qe.length],lineWidth:2},silent:!0}));for(let e=0;e<t.length&&e<Xe.length;e++){const[i,n]=t[e],r=(e===0||n<=t[e-1][1])&&(e===t.length-1||n<=t[e+1]?.[1]);this.graphicGroup.add(new S.graphic.Text({style:{text:Xe[e],x:i,y:r?n-14:n+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new S.graphic.Circle({shape:{cx:i,cy:n,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`cypher-${Date.now()}`,type:"cypher_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var Hs=Object.defineProperty,Os=(h,t,e)=>t in h?Hs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Bs=(h,t,e)=>(Os(h,typeof t!="symbol"?t+"":t,e),e);const oe=["","LS","","H","","RS",""];class Ue{constructor(){Bs(this,"type","head_and_shoulders")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([l,a])=>[l,a])},style:{fill:"rgba(33, 150, 243, 0.06)"}}),i.length>=5&&s.push({type:"polygon",name:"line",shape:{points:i.slice(2,5).map(([l,a])=>[l,a])},style:{fill:"rgba(244, 67, 54, 0.08)"}}),i.length>=7&&s.push({type:"polygon",name:"line",shape:{points:i.slice(4,7).map(([l,a])=>[l,a])},style:{fill:"rgba(33, 150, 243, 0.06)"}});for(let l=0;l<i.length-1;l++){const[a,o]=i[l],[c,g]=i[l+1];s.push({type:"line",name:"line",shape:{x1:a,y1:o,x2:c,y2:g},style:{stroke:"#2196f3",lineWidth:e.style?.lineWidth||2}})}if(i.length>=5){const[l,a]=i[2],[o,c]=i[4],g=o-l,d=c-a,u=.3,p=.3,f=l-g*u,y=a-d*u,m=o+g*p,x=c+d*p;s.push({type:"line",shape:{x1:f,y1:y,x2:m,y2:x},style:{stroke:"#ff9800",lineWidth:2,lineDash:[6,4]},silent:!0}),s.push({type:"text",style:{text:"Neckline",x:(l+o)/2,y:(a+c)/2+14,fill:"#ff9800",fontSize:10,align:"center"},silent:!0})}for(let l=0;l<i.length&&l<oe.length;l++){if(!oe[l])continue;const[a,o]=i[l],c=(l===0||o<=i[l-1][1])&&(l===i.length-1||o<=i[l+1]?.[1]);s.push({type:"text",style:{text:oe[l],x:a,y:c?o-14:o+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let l=0;l<i.length;l++)s.push({type:"circle",name:`point-${l}`,shape:{cx:i[l][0],cy:i[l][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var js=Object.defineProperty,Ys=(h,t,e)=>t in h?js(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Rt=(h,t,e)=>(Ys(h,typeof t!="symbol"?t+"":t,e),e);const re=["","LS","","H","","RS",""],Vs=7;class Xs extends U{constructor(t={}){super({id:"head-and-shoulders-tool",name:t.name||"Head & Shoulders",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="1,18 4,10 7,14 12,3 17,14 20,10 23,18"/></svg>'}),Rt(this,"points",[]),Rt(this,"state","idle"),Rt(this,"graphicGroup",null),Rt(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=Vs?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Rt(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Ue)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),t.setCursorStyle("default")}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(33,150,243,0.06)"},silent:!0})),t.length>=5&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(2,5)},style:{fill:"rgba(244,67,54,0.08)"},silent:!0})),t.length>=7&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(4,7)},style:{fill:"rgba(33,150,243,0.06)"},silent:!0}));for(let e=0;e<t.length-1;e++)this.graphicGroup.add(new S.graphic.Line({shape:{x1:t[e][0],y1:t[e][1],x2:t[e+1][0],y2:t[e+1][1]},style:{stroke:"#2196f3",lineWidth:2},silent:!0}));if(t.length>=5){const[e,i]=t[2],[n,r]=t[4],s=n-e,l=r-i;this.graphicGroup.add(new S.graphic.Line({shape:{x1:e-s*.3,y1:i-l*.3,x2:n+s*.3,y2:r+l*.3},style:{stroke:"#ff9800",lineWidth:2,lineDash:[6,4]},silent:!0}))}for(let e=0;e<t.length&&e<re.length;e++){const[i,n]=t[e],r=(e===0||n<=t[e-1][1])&&(e===t.length-1||n<=t[e+1]?.[1]);re[e]&&this.graphicGroup.add(new S.graphic.Text({style:{text:re[e],x:i,y:r?n-14:n+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new S.graphic.Circle({shape:{cx:i,cy:n,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`hs-${Date.now()}`,type:"head_and_shoulders",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var qs=Object.defineProperty,Us=(h,t,e)=>t in h?qs(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ks=(h,t,e)=>(Us(h,typeof t!="symbol"?t+"":t,e),e);const Ke=["1","2","3","4","5"];class Je{constructor(){Ks(this,"type","triangle_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.map(([o,c])=>[o,c])},style:{fill:"rgba(156, 39, 176, 0.06)"}});const l=i.filter((o,c)=>c%2===0);if(l.length>=2){for(let o=0;o<l.length-1;o++)s.push({type:"line",name:"line",shape:{x1:l[o][0],y1:l[o][1],x2:l[o+1][0],y2:l[o+1][1]},style:{stroke:"#f44336",lineWidth:2}});if(l.length>=2){const o=l[l.length-1],c=l[l.length-2],g=o[0]-c[0],d=o[1]-c[1];if(g!==0){const u=o[0]+g*.5,p=o[1]+d*.5;s.push({type:"line",shape:{x1:o[0],y1:o[1],x2:u,y2:p},style:{stroke:"#f44336",lineWidth:1,lineDash:[4,4]},silent:!0})}}}const a=i.filter((o,c)=>c%2===1);if(a.length>=2){for(let o=0;o<a.length-1;o++)s.push({type:"line",name:"line",shape:{x1:a[o][0],y1:a[o][1],x2:a[o+1][0],y2:a[o+1][1]},style:{stroke:"#4caf50",lineWidth:2}});if(a.length>=2){const o=a[a.length-1],c=a[a.length-2],g=o[0]-c[0],d=o[1]-c[1];if(g!==0){const u=o[0]+g*.5,p=o[1]+d*.5;s.push({type:"line",shape:{x1:o[0],y1:o[1],x2:u,y2:p},style:{stroke:"#4caf50",lineWidth:1,lineDash:[4,4]},silent:!0})}}}for(let o=0;o<i.length-1;o++)s.push({type:"line",shape:{x1:i[o][0],y1:i[o][1],x2:i[o+1][0],y2:i[o+1][1]},style:{stroke:"#9c27b0",lineWidth:1,lineDash:[2,2]},silent:!0});for(let o=0;o<i.length&&o<Ke.length;o++){const[c,g]=i[o],d=o%2===0;s.push({type:"text",style:{text:Ke[o],x:c,y:d?g-14:g+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let o=0;o<i.length;o++)s.push({type:"circle",name:`point-${o}`,shape:{cx:i[o][0],cy:i[o][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var Js=Object.defineProperty,Qs=(h,t,e)=>t in h?Js(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ht=(h,t,e)=>(Qs(h,typeof t!="symbol"?t+"":t,e),e);const Qe=["1","2","3","4","5"],to=5;class eo extends U{constructor(t={}){super({id:"triangle-pattern-tool",name:t.name||"Triangle Pattern",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><path d="M2,4 L22,4 L12,20 Z"/></svg>'}),Ht(this,"points",[]),Ht(this,"state","idle"),Ht(this,"graphicGroup",null),Ht(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=to?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Ht(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new Je)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),t.setCursorStyle("default")}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t},style:{fill:"rgba(156,39,176,0.06)"},silent:!0}));for(let n=0;n<t.length-1;n++)this.graphicGroup.add(new S.graphic.Line({shape:{x1:t[n][0],y1:t[n][1],x2:t[n+1][0],y2:t[n+1][1]},style:{stroke:"#9c27b0",lineWidth:2},silent:!0}));const e=t.filter((n,r)=>r%2===0);if(e.length>=2)for(let n=0;n<e.length-1;n++)this.graphicGroup.add(new S.graphic.Line({shape:{x1:e[n][0],y1:e[n][1],x2:e[n+1][0],y2:e[n+1][1]},style:{stroke:"#f44336",lineWidth:1,lineDash:[4,4]},silent:!0}));const i=t.filter((n,r)=>r%2===1);if(i.length>=2)for(let n=0;n<i.length-1;n++)this.graphicGroup.add(new S.graphic.Line({shape:{x1:i[n][0],y1:i[n][1],x2:i[n+1][0],y2:i[n+1][1]},style:{stroke:"#4caf50",lineWidth:1,lineDash:[4,4]},silent:!0}));for(let n=0;n<t.length&&n<Qe.length;n++){const[r,s]=t[n],l=n%2===0;this.graphicGroup.add(new S.graphic.Text({style:{text:Qe[n],x:r,y:l?s-14:s+16,fill:"#e2e8f0",fontSize:12,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new S.graphic.Circle({shape:{cx:r,cy:s,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`triangle-${Date.now()}`,type:"triangle_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var io=Object.defineProperty,no=(h,t,e)=>t in h?io(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,so=(h,t,e)=>(no(h,typeof t!="symbol"?t+"":t,e),e);const ae=["0","D1","C1","D2","C2","D3",""],ti=["#2196f3","#ff9800","#4caf50","#f44336","#00bcd4","#e91e63"];class ei{constructor(){so(this,"type","three_drives_pattern")}render(t){const{drawing:e,pixelPoints:i,isSelected:n}=t,r=e.style?.color||"#3b82f6";if(i.length<2)return;const s=[];i.length>=3&&s.push({type:"polygon",name:"line",shape:{points:i.slice(0,3).map(([o,c])=>[o,c])},style:{fill:"rgba(33, 150, 243, 0.06)"}}),i.length>=5&&s.push({type:"polygon",name:"line",shape:{points:i.slice(2,5).map(([o,c])=>[o,c])},style:{fill:"rgba(76, 175, 80, 0.06)"}}),i.length>=7&&s.push({type:"polygon",name:"line",shape:{points:i.slice(4,7).map(([o,c])=>[o,c])},style:{fill:"rgba(0, 188, 212, 0.06)"}});for(let o=0;o<i.length-1;o++){const[c,g]=i[o],[d,u]=i[o+1];s.push({type:"line",name:"line",shape:{x1:c,y1:g,x2:d,y2:u},style:{stroke:ti[o%ti.length],lineWidth:e.style?.lineWidth||2}})}const l=[[1,3],[3,5],[2,4]];for(const[o,c]of l)o<i.length&&c<i.length&&s.push({type:"line",shape:{x1:i[o][0],y1:i[o][1],x2:i[c][0],y2:i[c][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0});const a=e.points;if(a.length>=4){const o=Math.abs(a[1].value-a[0].value),c=Math.abs(a[3].value-a[2].value);if(o!==0){const g=(c/o).toFixed(3),d=(i[2][0]+i[3][0])/2,u=(i[2][1]+i[3][1])/2;s.push({type:"text",style:{text:`D2/D1: ${g}`,x:d+10,y:u,fill:"#4caf50",fontSize:9},silent:!0})}}if(a.length>=6){const o=Math.abs(a[3].value-a[2].value),c=Math.abs(a[5].value-a[4].value);if(o!==0){const g=(c/o).toFixed(3),d=(i[4][0]+i[5][0])/2,u=(i[4][1]+i[5][1])/2;s.push({type:"text",style:{text:`D3/D2: ${g}`,x:d+10,y:u,fill:"#00bcd4",fontSize:9},silent:!0})}}if(a.length>=3){const o=Math.abs(a[1].value-a[0].value),c=Math.abs(a[2].value-a[1].value);if(o!==0){const g=(c/o).toFixed(3),d=(i[1][0]+i[2][0])/2,u=(i[1][1]+i[2][1])/2;s.push({type:"text",style:{text:g,x:d+8,y:u,fill:"#ff9800",fontSize:10},silent:!0})}}for(let o=0;o<i.length&&o<ae.length;o++){if(!ae[o])continue;const[c,g]=i[o],d=(o===0||g<=i[o-1][1])&&(o===i.length-1||g<=i[o+1]?.[1]);s.push({type:"text",style:{text:ae[o],x:c,y:d?g-14:g+16,fill:"#e2e8f0",fontSize:11,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})}for(let o=0;o<i.length;o++)s.push({type:"circle",name:`point-${o}`,shape:{cx:i[o][0],cy:i[o][1],r:4},style:{fill:"#fff",stroke:r,lineWidth:1,opacity:n?1:0},z:100});return{type:"group",children:s}}}var oo=Object.defineProperty,ro=(h,t,e)=>t in h?oo(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Ot=(h,t,e)=>(ro(h,typeof t!="symbol"?t+"":t,e),e);const le=["0","D1","C1","D2","C2","D3",""],ii=["#2196f3","#ff9800","#4caf50","#f44336","#00bcd4","#e91e63"],ao=7;class lo extends U{constructor(t={}){super({id:"three-drives-pattern-tool",name:t.name||"Three Drives",icon:t.icon||'<svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#e3e3e3" stroke-width="1.5"><polyline points="1,20 4,8 7,14 11,5 15,12 19,2 23,10"/></svg>'}),Ot(this,"points",[]),Ot(this,"state","idle"),Ot(this,"graphicGroup",null),Ot(this,"onClick",e=>{const i=this.getPoint(e);this.state==="idle"?(this.state="drawing",this.points=[i,[...i]],this.initGraphic(),this.updateGraphic()):this.state==="drawing"&&(this.points[this.points.length-1]=i,this.points.length>=ao?(this.state="finished",this.updateGraphic(),this.saveDrawing(),this.removeGraphic(),this.context.disableTools()):(this.points.push([...i]),this.updateGraphic()))}),Ot(this,"onMouseMove",e=>{this.state!=="drawing"||this.points.length<2||(this.points[this.points.length-1]=this.getPoint(e),this.updateGraphic())})}onInit(){this.context.registerDrawingRenderer(new ei)}onActivate(){this.state="idle",this.points=[],this.context.getChart().getZr().setCursorStyle("crosshair");const t=this.context.getChart().getZr();t.on("click",this.onClick),t.on("mousemove",this.onMouseMove)}onDeactivate(){this.state="idle",this.points=[],this.removeGraphic();const t=this.context.getChart().getZr();t.off("click",this.onClick),t.off("mousemove",this.onMouseMove),t.setCursorStyle("default")}initGraphic(){this.graphicGroup=new S.graphic.Group,this.context.getChart().getZr().add(this.graphicGroup)}removeGraphic(){this.graphicGroup&&(this.context.getChart().getZr().remove(this.graphicGroup),this.graphicGroup=null)}updateGraphic(){if(!this.graphicGroup)return;this.graphicGroup.removeAll();const t=this.points;t.length>=3&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(0,3)},style:{fill:"rgba(33,150,243,0.06)"},silent:!0})),t.length>=5&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(2,5)},style:{fill:"rgba(76,175,80,0.06)"},silent:!0})),t.length>=7&&this.graphicGroup.add(new S.graphic.Polygon({shape:{points:t.slice(4,7)},style:{fill:"rgba(0,188,212,0.06)"},silent:!0}));for(let i=0;i<t.length-1;i++)this.graphicGroup.add(new S.graphic.Line({shape:{x1:t[i][0],y1:t[i][1],x2:t[i+1][0],y2:t[i+1][1]},style:{stroke:ii[i%ii.length],lineWidth:2},silent:!0}));const e=[[1,3],[3,5],[2,4]];for(const[i,n]of e)i<t.length&&n<t.length&&this.graphicGroup.add(new S.graphic.Line({shape:{x1:t[i][0],y1:t[i][1],x2:t[n][0],y2:t[n][1]},style:{stroke:"#555",lineWidth:1,lineDash:[4,4]},silent:!0}));for(let i=0;i<t.length&&i<le.length;i++){const[n,r]=t[i],s=(i===0||r<=t[i-1][1])&&(i===t.length-1||r<=t[i+1]?.[1]);le[i]&&this.graphicGroup.add(new S.graphic.Text({style:{text:le[i],x:n,y:s?r-14:r+16,fill:"#e2e8f0",fontSize:11,fontWeight:"bold",align:"center",verticalAlign:"middle"},silent:!0})),this.graphicGroup.add(new S.graphic.Circle({shape:{cx:n,cy:r,r:4},style:{fill:"#fff",stroke:"#3b82f6",lineWidth:1.5},z:101,silent:!0}))}}saveDrawing(){const t=this.points.map(e=>this.context.coordinateConversion.pixelToData({x:e[0],y:e[1]}));t.every(e=>e!==null)&&this.context.addDrawing({id:`3drives-${Date.now()}`,type:"three_drives_pattern",points:t,paneIndex:t[0].paneIndex||0,style:{color:"#3b82f6",lineWidth:2}})}}var ho=Object.defineProperty,co=(h,t,e)=>t in h?ho(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,Mt=(h,t,e)=>(co(h,typeof t!="symbol"?t+"":t,e),e);class po extends U{constructor(t){const e='<svg width="8" height="8" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="position: absolute; right: -4px; top: 50%; transform: translateY(-50%); opacity: 0.6;"><polyline points="9 18 15 12 9 6"></polyline></svg>';let i="";t.icon?i=`<div style="position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
42
43
  <div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
43
44
  ${t.icon}
44
45
  </div>
@@ -46,7 +47,7 @@ ${p}`;this.chart.setOption({series:[{id:"__candlestick__",markLine:{data:[{...c,
46
47
  </div>`:i=`<div style="position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
47
48
  <span>${t.name.substring(0,2).toUpperCase()}</span>
48
49
  ${e}
49
- </div>`,super({id:t.id||`group-${t.name.toLowerCase().replace(/\s+/g,"-")}`,name:t.name,icon:i}),Pt(this,"plugins",[]),Pt(this,"activeSubPlugin",null),Pt(this,"menuElement",null),Pt(this,"buttonElement",null),Pt(this,"originalIcon",""),Pt(this,"arrowSvg",""),Pt(this,"handleOutsideClick",n=>{this.menuElement&&!this.menuElement.contains(n.target)&&(this.hideMenu(),this.activeSubPlugin||this.buttonElement?.click())}),this.originalIcon=i,this.arrowSvg=e}add(t){this.plugins.push(t)}onInit(){this.plugins.forEach(t=>t.init(this.context))}onActivate(){this.showMenu()}onDeactivate(){this.hideMenu(),this.activeSubPlugin&&(this.activeSubPlugin.deactivate?.(),this.activeSubPlugin=null),this.buttonElement&&(this.buttonElement.innerHTML=this.originalIcon)}onDestroy(){this.hideMenu(),this.plugins.forEach(t=>t.destroy?.())}showMenu(){if(this.buttonElement=document.getElementById(`qfchart-plugin-btn-${this.id}`),!this.buttonElement)return;this.menuElement&&this.hideMenu(),this.menuElement=document.createElement("div"),Object.assign(this.menuElement.style,{position:"fixed",backgroundColor:"#1e293b",border:"1px solid #334155",borderRadius:"6px",padding:"4px",display:"flex",flexDirection:"column",gap:"2px",zIndex:"10000",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.3)",minWidth:"150px"}),this.plugins.forEach(e=>{const i=document.createElement("div");if(Object.assign(i.style,{display:"flex",alignItems:"center",padding:"8px 12px",cursor:"pointer",color:"#cbd5e1",borderRadius:"4px",fontSize:"13px",fontFamily:this.context.getOptions().fontFamily||"sans-serif",transition:"background-color 0.2s"}),i.addEventListener("mouseenter",()=>{i.style.backgroundColor="rgba(255, 255, 255, 0.1)"}),i.addEventListener("mouseleave",()=>{i.style.backgroundColor="transparent"}),e.icon){const r=document.createElement("div");r.innerHTML=e.icon,Object.assign(r.style,{width:"20px",height:"20px",marginRight:"10px",display:"flex",alignItems:"center",justifyContent:"center"});const s=r.querySelector("svg");s&&(s.style.width="100%",s.style.height="100%"),i.appendChild(r)}const n=document.createElement("span");n.textContent=e.name||e.id,i.appendChild(n),i.addEventListener("click",r=>{r.stopPropagation(),this.activateSubPlugin(e)}),this.menuElement.appendChild(i)}),document.body.appendChild(this.menuElement);const t=this.buttonElement.getBoundingClientRect();this.menuElement.style.top=`${t.top}px`,this.menuElement.style.left=`${t.right+5}px`,setTimeout(()=>{document.addEventListener("click",this.handleOutsideClick)},0)}hideMenu(){this.menuElement&&this.menuElement.parentNode&&this.menuElement.parentNode.removeChild(this.menuElement),this.menuElement=null,document.removeEventListener("click",this.handleOutsideClick)}activateSubPlugin(t){if(this.hideMenu(),this.activeSubPlugin&&this.activeSubPlugin.deactivate?.(),this.activeSubPlugin=t,this.activeSubPlugin.activate?.(),this.buttonElement){let e="";t.icon?e=`<div style="position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
50
+ </div>`,super({id:t.id||`group-${t.name.toLowerCase().replace(/\s+/g,"-")}`,name:t.name,icon:i}),Mt(this,"plugins",[]),Mt(this,"activeSubPlugin",null),Mt(this,"menuElement",null),Mt(this,"buttonElement",null),Mt(this,"originalIcon",""),Mt(this,"arrowSvg",""),Mt(this,"handleOutsideClick",n=>{this.menuElement&&!this.menuElement.contains(n.target)&&(this.hideMenu(),this.activeSubPlugin||this.buttonElement?.click())}),this.originalIcon=i,this.arrowSvg=e}add(t){this.plugins.push(t)}onInit(){this.plugins.forEach(t=>t.init(this.context))}onActivate(){this.showMenu()}onDeactivate(){this.hideMenu(),this.activeSubPlugin&&(this.activeSubPlugin.deactivate?.(),this.activeSubPlugin=null),this.buttonElement&&(this.buttonElement.innerHTML=this.originalIcon)}onDestroy(){this.hideMenu(),this.plugins.forEach(t=>t.destroy?.())}showMenu(){if(this.buttonElement=document.getElementById(`qfchart-plugin-btn-${this.id}`),!this.buttonElement)return;this.menuElement&&this.hideMenu(),this.menuElement=document.createElement("div"),Object.assign(this.menuElement.style,{position:"fixed",backgroundColor:"#1e293b",border:"1px solid #334155",borderRadius:"6px",padding:"4px",display:"flex",flexDirection:"column",gap:"2px",zIndex:"10000",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.3)",minWidth:"150px"}),this.plugins.forEach(e=>{const i=document.createElement("div");if(Object.assign(i.style,{display:"flex",alignItems:"center",padding:"8px 12px",cursor:"pointer",color:"#cbd5e1",borderRadius:"4px",fontSize:"13px",fontFamily:this.context.getOptions().fontFamily||"sans-serif",transition:"background-color 0.2s"}),i.addEventListener("mouseenter",()=>{i.style.backgroundColor="rgba(255, 255, 255, 0.1)"}),i.addEventListener("mouseleave",()=>{i.style.backgroundColor="transparent"}),e.icon){const r=document.createElement("div");r.innerHTML=e.icon,Object.assign(r.style,{width:"20px",height:"20px",marginRight:"10px",display:"flex",alignItems:"center",justifyContent:"center"});const s=r.querySelector("svg");s&&(s.style.width="100%",s.style.height="100%"),i.appendChild(r)}const n=document.createElement("span");n.textContent=e.name||e.id,i.appendChild(n),i.addEventListener("click",r=>{r.stopPropagation(),this.activateSubPlugin(e)}),this.menuElement.appendChild(i)}),document.body.appendChild(this.menuElement);const t=this.buttonElement.getBoundingClientRect();this.menuElement.style.top=`${t.top}px`,this.menuElement.style.left=`${t.right+5}px`,setTimeout(()=>{document.addEventListener("click",this.handleOutsideClick)},0)}hideMenu(){this.menuElement&&this.menuElement.parentNode&&this.menuElement.parentNode.removeChild(this.menuElement),this.menuElement=null,document.removeEventListener("click",this.handleOutsideClick)}activateSubPlugin(t){if(this.hideMenu(),this.activeSubPlugin&&this.activeSubPlugin.deactivate?.(),this.activeSubPlugin=t,this.activeSubPlugin.activate?.(),this.buttonElement){let e="";t.icon?e=`<div style="position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
50
51
  <div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
51
52
  ${t.icon}
52
53
  </div>
@@ -54,4 +55,4 @@ ${p}`;this.chart.setOption({series:[{id:"__candlestick__",markLine:{data:[{...c,
54
55
  </div>`:e=`<div style="position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
55
56
  <span>${(t.name||t.id).substring(0,2).toUpperCase()}</span>
56
57
  ${this.arrowSvg}
57
- </div>`,this.buttonElement.innerHTML=e}}}T.ABCDPatternDrawingRenderer=Re,T.ABCDPatternTool=Gs,T.AbstractPlugin=q,T.CrossLineDrawingRenderer=Me,T.CrossLineTool=Vn,T.CypherPatternDrawingRenderer=Ye,T.CypherPatternTool=Ns,T.DrawingRendererRegistry=ge,T.ExtendedLineDrawingRenderer=me,T.ExtendedLineTool=xn,T.FibSpeedResistanceFanDrawingRenderer=Se,T.FibSpeedResistanceFanTool=ds,T.FibTrendExtensionDrawingRenderer=Ge,T.FibTrendExtensionTool=xs,T.FibonacciChannelDrawingRenderer=_e,T.FibonacciChannelTool=os,T.FibonacciDrawingRenderer=Ae,T.FibonacciTool=Qn,T.HeadAndShouldersDrawingRenderer=qe,T.HeadAndShouldersTool=Vs,T.HorizontalLineDrawingRenderer=ve,T.HorizontalLineTool=_n,T.HorizontalRayDrawingRenderer=Ce,T.HorizontalRayTool=Ln,T.InfoLineDrawingRenderer=xe,T.InfoLineTool=dn,T.LineDrawingRenderer=ye,T.LineTool=Ji,T.MeasureTool=Yi,T.QFChart=Ri,T.RayDrawingRenderer=fe,T.RayTool=on,T.ThreeDrivesPatternDrawingRenderer=ti,T.ThreeDrivesPatternTool=ao,T.ToolGroup=co,T.TrendAngleDrawingRenderer=be,T.TrendAngleTool=Pn,T.TrianglePatternDrawingRenderer=Ke,T.TrianglePatternTool=to,T.VerticalLineDrawingRenderer=ke,T.VerticalLineTool=Rn,T.XABCDPatternDrawingRenderer=Te,T.XABCDPatternTool=Ms});
58
+ </div>`,this.buttonElement.innerHTML=e}}}T.ABCDPatternDrawingRenderer=He,T.ABCDPatternTool=Es,T.AbstractPlugin=U,T.CrossLineDrawingRenderer=Ie,T.CrossLineTool=Xn,T.CypherPatternDrawingRenderer=Ve,T.CypherPatternTool=Rs,T.DrawingRendererRegistry=ye,T.ExtendedLineDrawingRenderer=be,T.ExtendedLineTool=mn,T.FibSpeedResistanceFanDrawingRenderer=ze,T.FibSpeedResistanceFanTool=ps,T.FibTrendExtensionDrawingRenderer=Ee,T.FibTrendExtensionTool=ms,T.FibonacciChannelDrawingRenderer=_e,T.FibonacciChannelTool=rs,T.FibonacciDrawingRenderer=Se,T.FibonacciTool=ts,T.HeadAndShouldersDrawingRenderer=Ue,T.HeadAndShouldersTool=Xs,T.HorizontalLineDrawingRenderer=we,T.HorizontalLineTool=_n,T.HorizontalRayDrawingRenderer=Pe,T.HorizontalRayTool=Tn,T.InfoLineDrawingRenderer=me,T.InfoLineTool=pn,T.LineDrawingRenderer=fe,T.LineTool=Qi,T.MeasureTool=Vi,T.QFChart=Hi,T.RayDrawingRenderer=xe,T.RayTool=rn,T.ThreeDrivesPatternDrawingRenderer=ei,T.ThreeDrivesPatternTool=lo,T.ToolGroup=po,T.TrendAngleDrawingRenderer=ve,T.TrendAngleTool=kn,T.TrianglePatternDrawingRenderer=Je,T.TrianglePatternTool=eo,T.VerticalLineDrawingRenderer=De,T.VerticalLineTool=Hn,T.XABCDPatternDrawingRenderer=We,T.XABCDPatternTool=Is});