minerva-design 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/charts/engine/data.cjs +1 -1
- package/dist/charts/engine/data.cjs.map +1 -1
- package/dist/charts/engine/data.d.cts +2 -0
- package/dist/charts/engine/data.d.ts +2 -0
- package/dist/charts/engine/data.js +6 -4
- package/dist/charts/engine/data.js.map +1 -1
- package/dist/charts/engine/defaults.cjs +1 -1
- package/dist/charts/engine/defaults.cjs.map +1 -1
- package/dist/charts/engine/defaults.js +22 -18
- package/dist/charts/engine/defaults.js.map +1 -1
- package/dist/charts/engine/graph/chart.cjs +1 -1
- package/dist/charts/engine/graph/chart.cjs.map +1 -1
- package/dist/charts/engine/graph/chart.js +532 -493
- package/dist/charts/engine/graph/chart.js.map +1 -1
- package/dist/charts/engine/graph/geometry.cjs +1 -1
- package/dist/charts/engine/graph/geometry.cjs.map +1 -1
- package/dist/charts/engine/graph/geometry.d.cts +12 -2
- package/dist/charts/engine/graph/geometry.d.ts +12 -2
- package/dist/charts/engine/graph/geometry.js +35 -31
- package/dist/charts/engine/graph/geometry.js.map +1 -1
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.js +95 -74
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/field.cjs +1 -1
- package/dist/charts/engine/orderbook/field.cjs.map +1 -1
- package/dist/charts/engine/orderbook/field.d.cts +15 -2
- package/dist/charts/engine/orderbook/field.d.ts +15 -2
- package/dist/charts/engine/orderbook/field.js +21 -9
- package/dist/charts/engine/orderbook/field.js.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.d.cts +29 -0
- package/dist/charts/engine/orderbook/heatmap.d.ts +29 -0
- package/dist/charts/engine/orderbook/heatmap.js +576 -453
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
- package/dist/charts/engine/orderbook/types.d.cts +36 -11
- package/dist/charts/engine/orderbook/types.d.ts +36 -11
- package/dist/charts/engine/presets.cjs +1 -1
- package/dist/charts/engine/presets.cjs.map +1 -1
- package/dist/charts/engine/presets.d.cts +16 -3
- package/dist/charts/engine/presets.d.ts +16 -3
- package/dist/charts/engine/presets.js +42 -32
- package/dist/charts/engine/presets.js.map +1 -1
- package/dist/charts/engine/scene.cjs +1 -1
- package/dist/charts/engine/scene.cjs.map +1 -1
- package/dist/charts/engine/scene.d.cts +4 -2
- package/dist/charts/engine/scene.d.ts +4 -2
- package/dist/charts/engine/scene.js +185 -107
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/three-d/oit.cjs +119 -34
- package/dist/charts/engine/three-d/oit.cjs.map +1 -1
- package/dist/charts/engine/three-d/oit.d.cts +65 -10
- package/dist/charts/engine/three-d/oit.d.ts +65 -10
- package/dist/charts/engine/three-d/oit.js +119 -34
- package/dist/charts/engine/three-d/oit.js.map +1 -1
- package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
- package/dist/charts/engine/three-d/render-types.d.cts +19 -0
- package/dist/charts/engine/three-d/render-types.d.ts +19 -0
- package/dist/charts/engine/three-d/render-types.js.map +1 -1
- package/dist/charts/engine/three-d/shaders.cjs +14 -6
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
- package/dist/charts/engine/three-d/shaders.d.cts +6 -1
- package/dist/charts/engine/three-d/shaders.d.ts +6 -1
- package/dist/charts/engine/three-d/shaders.js +40 -26
- package/dist/charts/engine/three-d/shaders.js.map +1 -1
- package/dist/charts/engine/three-d/webgl.cjs +1 -1
- package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgl.js +167 -125
- package/dist/charts/engine/three-d/webgl.js.map +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgpu.js +169 -140
- package/dist/charts/engine/three-d/webgpu.js.map +1 -1
- package/dist/charts/engine/trading/chart.cjs +1 -1
- package/dist/charts/engine/trading/chart.cjs.map +1 -1
- package/dist/charts/engine/trading/chart.js +1149 -1023
- package/dist/charts/engine/trading/chart.js.map +1 -1
- package/dist/charts/engine/trading/labels.cjs +1 -1
- package/dist/charts/engine/trading/labels.cjs.map +1 -1
- package/dist/charts/engine/trading/labels.js +12 -0
- package/dist/charts/engine/trading/labels.js.map +1 -1
- package/dist/charts/engine/trading/layout.cjs +2 -0
- package/dist/charts/engine/trading/layout.cjs.map +1 -0
- package/dist/charts/engine/trading/layout.d.cts +37 -0
- package/dist/charts/engine/trading/layout.d.ts +37 -0
- package/dist/charts/engine/trading/layout.js +63 -0
- package/dist/charts/engine/trading/layout.js.map +1 -0
- package/dist/charts/engine/trading/types.d.cts +24 -7
- package/dist/charts/engine/trading/types.d.ts +24 -7
- package/dist/charts/engine/types.d.cts +21 -8
- package/dist/charts/engine/types.d.ts +21 -8
- package/dist/core/contracts.cjs +1 -1
- package/dist/core/contracts.cjs.map +1 -1
- package/dist/core/contracts.js +1 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/native/charts/src/engine/data.cjs +1 -1
- package/dist/native/charts/src/engine/data.cjs.map +1 -1
- package/dist/native/charts/src/engine/data.js +6 -4
- package/dist/native/charts/src/engine/data.js.map +1 -1
- package/dist/native/charts/src/engine/model.cjs +1 -1
- package/dist/native/charts/src/engine/model.cjs.map +1 -1
- package/dist/native/charts/src/engine/model.js +104 -83
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/presets.cjs +1 -1
- package/dist/native/charts/src/engine/presets.cjs.map +1 -1
- package/dist/native/charts/src/engine/presets.js +42 -32
- package/dist/native/charts/src/engine/presets.js.map +1 -1
- package/dist/native/charts/src/engine/scene.cjs +1 -1
- package/dist/native/charts/src/engine/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/scene.js +185 -107
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/taro/index.js +1263 -1152
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +11 -0
- package/dist/vue/components/Chart/orderbook.d.ts +7 -0
- package/dist/vue/components/Chart/orderbook.js +2 -0
- package/dist/vue/components/Chart/orderbook.js.map +1 -1
- package/dist/weapp/charts/canvas.js +234 -58
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../dom.cjs"),t=require("../color.cjs"),n=require("../locale.cjs"),r=require("../scale.cjs"),i=require("../renderers/detect.cjs"),a=require("../renderers/follow.cjs"),o=require("../theme.cjs"),s=require("./drawings.cjs"),c=require("./format.cjs"),l=require("./geometry.cjs"),u=require("./indicators.cjs"),d=require("./labels.cjs"),f=require("./scale.cjs"),p=require("./store.cjs"),m=require("./studies.cjs");var h=28,g=60,_=60,v=48,y=`price`,b=`var(--success-color, #089981)`,x=`var(--danger-color, #f23645)`,S=`var(--warning-color, #f59e0b)`,C=`var(--primary-color, #2962ff)`,ee=100,te=[`#2962ff`,`#089981`,`#f23645`,`#f59e0b`,`#a855f7`,`#0ea5e9`,`#ec4899`,`#787b86`],w=[`solid`,`dashed`,`dotted`],ne=new WeakMap,re={order:`limit`,position:`position`,takeProfit:`takeProfit`,stopLoss:`stopLoss`,alert:`alert`},T=(e,t,n)=>e<t?t:e>n?n:e,ie=e=>{let n=t.parseColor(e);return n&&t.luminance(n)>.5?`#0b0e11`:`#fff`},E=Number.isFinite,ae=`B S O Shift+O ArrowUp ArrowDown Shift+ArrowUp Shift+ArrowDown Enter Escape Delete`,oe={minWidth:`0`,maxWidth:`100%`,overflow:`hidden`,textOverflow:`ellipsis`},se=`display:inline-flex;gap:3px;max-width:100%;overflow:hidden;text-overflow:ellipsis`,ce=(ce,le={})=>{let ue=ce.ownerDocument,de=ue.defaultView,D={...le},fe=!1,pe=(t,n)=>e.styleElement(ue.createElement(t),n),O=pe(`div`,{position:`relative`,width:`100%`,height:`100%`,minHeight:`0`,overflow:`hidden`,outline:`none`,userSelect:`none`,touchAction:`pan-y`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`,cursor:`crosshair`});O.className=`minerva-trading-chart`,O.tabIndex=0,O.setAttribute(`role`,`figure`),O.setAttribute(`aria-roledescription`,`chart`);let me=e=>pe(e,{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`}),he=me(`canvas`),ge=me(`canvas`);he.setAttribute(`aria-hidden`,`true`),ge.setAttribute(`aria-hidden`,`true`);let _e=me(`div`);_e.style.right=`0`,_e.style.bottom=`0`;let ve=pe(`button`,{position:`absolute`,display:`none`,alignItems:`center`,justifyContent:`center`,width:`28px`,height:`28px`,padding:`0`,borderRadius:`50%`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 80%, transparent)`,background:`var(--surface-elevated-color, var(--surface-color, #fff))`,color:`var(--text-color, #1f2937)`,boxShadow:`0 4px 14px -4px rgba(15, 23, 42, 0.25)`,cursor:`pointer`});ve.type=`button`,ve.innerHTML=`<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 3l5 5-5 5M9 3l5 5-5 5"/></svg>`;let ye=pe(`div`,{position:`absolute`,width:`1px`,height:`1px`,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`});ye.setAttribute(`aria-live`,`polite`);let k=pe(`div`,{position:`absolute`,display:`none`,alignItems:`center`,gap:`1px`,padding:`3px`,borderRadius:`8px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 85%, transparent)`,background:`var(--surface-elevated-color, var(--surface-color, #fff))`,boxShadow:`0 8px 24px -8px rgba(15, 23, 42, 0.35)`,zIndex:`2`,cursor:`default`});k.className=`minerva-trading-toolbar`,k.setAttribute(`role`,`toolbar`);let A=pe(`textarea`,{position:`absolute`,display:`none`,minWidth:`120px`,minHeight:`28px`,padding:`5px 9px`,resize:`none`,border:`1px solid var(--primary-color, #2962ff)`,borderRadius:`5px`,outline:`none`,background:`var(--surface-elevated-color, var(--surface-color, #fff))`,color:`var(--text-color, #1f2937)`,font:`500 13px var(--font-family-sans, system-ui, sans-serif)`,boxShadow:`0 6px 18px -6px rgba(15, 23, 42, 0.3)`,zIndex:`3`});A.rows=1;let be=pe(`style`,{});be.textContent=`.minerva-trading-toolbar button{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;padding:0 5px;border-radius:5px;cursor:pointer;color:var(--text-color,#1f2937)}.minerva-trading-toolbar button:hover{background:color-mix(in srgb,var(--text-color,#1f2937) 9%,transparent)}.minerva-trading-toolbar button:focus-visible{box-shadow:inset 0 0 0 2px var(--primary-color,#2962ff)}.minerva-trading-toolbar button[aria-pressed="true"]{background:color-mix(in srgb,var(--primary-color,#2962ff) 16%,transparent);color:var(--primary-color,#2962ff)}.minerva-trading-toolbar .sep{width:1px;height:18px;margin:0 3px;background:var(--border-color,#e5e7eb)}`,O.append(be,he,ge,_e,ve,k,A,ye),ce.appendChild(O);let j=p.createStore(),xe=p.createPyramid(),Se={time:j.time,open:new Float64Array,high:new Float64Array,low:new Float64Array,close:new Float64Array,volume:j.volume},Ce=0,we=p.createPyramid(),M=[],Te=new Map,Ee=new Map,De=[],Oe=new WeakMap,ke=new WeakMap,Ae=0,je=0,Me=2,Ne=c.DAY,N=D.barSpacing??8,P=NaN,F=0,I=0,Pe=g,Fe=0,Ie=0,L=[],Le=new Map,Re=new Map,ze=null,Be=0,R=o.readTheme(O),Ve=0,He=0,z=null,Ue=0,We=0,Ge=[],Ke=``,qe=-1,Je=0,Ye,Xe=new Promise(e=>{Ye=e}),B=null,V=null,H=null,U=null,Ze=new Map,Qe=null,$e=null,et=null,tt=null,W=D.drawings??[],nt=null,rt=W,it=[],at=[],ot=`false|false`,st=D.drawingMode??`cursor`,ct=null,lt=null,G=null,ut=0,dt=y,ft=0,pt=new Map,mt=null,ht=``,gt=!1,_t=new Map,vt=null,yt=[],bt=-1,xt=null,St=!1,Ct=null,wt=``,Tt=NaN,Et=null,K=null,Dt=!1,Ot=4,kt=null,At=new Map,q=(e,t)=>{At.get(e)?.forEach(e=>e(t))},J=n.resolveLocale(D.locale),jt=n.localeLabels(d.TRADING_LABELS,J,D.labels),Mt=()=>{J=n.resolveLocale(D.locale),jt=n.localeLabels(d.TRADING_LABELS,J,D.labels)},Nt=()=>jt,Y=()=>j.length,Pt=()=>D.chartStyle??`candles`,Ft=()=>D.colorConvention===`redUp`||D.colorConvention===`auto`&&c.redUpLocale(J),It=()=>D.upColor??(Ft()?x:b),Lt=()=>D.downColor??(Ft()?b:x),Rt=(e,t=R.primary)=>R.resolve?R.resolve(e,t):t,X=(e,n=1)=>t.toCss(Rt(e),n),zt=()=>D.precision??Me,Bt=c.priceFormatter(2,void 0),Vt=``,Z=e=>{if(D.formatPrice)return D.formatPrice(e);let t=`${zt()}|${J}`;return t!==Vt&&(Bt=c.priceFormatter(zt(),J),Vt=t),Bt(e)},Ht=()=>(D.timeframe===void 0?null:u.parseTimeframe(D.timeframe))??{unit:`ms`,count:Ne,ms:Ne},Ut=()=>Ht().ms,Wt=(e,t=400)=>`${t} ${e}px ${R.fontFamily}`,Gt=e=>Ee.get(e.id)??e.config.visible??!0,Q=e=>F+(e-P)*N,Kt=e=>P-(F-e)/N,qt=e=>{let t=Y();if(!t)return 0;let n=Math.round(e);return n<0?j.time[0]+n*Ut():n>=t?j.time[t-1]+(n-t+1)*Ut():j.time[n]},Jt=e=>{let t=Y();if(!t)return 0;let n=Math.floor(e);if(n<0||n>=t-1){let r=n<0?0:t-1;return j.time[r]+(e-r)*Ut()}let r=e-n;return j.time[n]+r*(j.time[n+1]-j.time[n])},Yt=e=>{let t=Y();if(!t)return 0;if(e>=j.time[t-1])return t-1+(e-j.time[t-1])/Ut();if(e<=j.time[0])return(e-j.time[0])/Ut();let n=p.indexOfTime(j.time,t,e),r=j.time[n+1]-j.time[n];return n+(r>0?(e-j.time[n])/r:0)},Xt,Zt=e=>D.utcOffset??(Xt?c.zoneOffset(e,Xt):-new Date(E(e)?e:0).getTimezoneOffset()),Qt=e=>Zt(e),$t=e=>e+Zt(e)*c.MINUTE,en=e=>e===`up`?It():e===`down`?Lt():e,tn=(e,t,n)=>e.level?p.rangeLevel(n,t,Y(),e.level):{min:t,max:t,last:t},nn=e=>{let t=ke.get(e);return t||ke.set(e,t=p.createRangePyramid()),t},rn=e=>{let t=Oe.get(e);return t||Oe.set(e,t=p.createRangePyramid()),t},an=e=>{let t=Y();if(!t)return 0;let n=j.time[t-1];return e>n?t-1+(e-n)/Ut():e<j.time[0]?(e-j.time[0])/Ut():p.indexOfTime(j.time,t,e)},on=()=>Pt()===`heikinAshi`?Se:j,sn=e=>{for(let t of M){Te.set(t,Math.min(Te.get(t)??0,e));for(let n of t.outputs){let t=Oe.get(n);t&&p.invalidateRangePyramid(t,e)}let n=ke.get(t);n&&p.invalidateRangePyramid(n,e)}Ce=Math.min(Ce,e);for(let t of De)t.valid=Math.min(t.valid,e),p.invalidateRangePyramid(t.lod,e);kt=null;let t=t=>{for(let n of t.levels)n&&(n.valid=Math.min(n.valid,Math.floor(e/n.size)))};t(xe),t(we)},cn=()=>{let e=Y();for(let t of M){let n=Te.get(t)??0;n<e&&(t.compute(j,n),Te.set(t,e))}if(Se.time=j.time,Se.volume=j.volume,Pt()===`heikinAshi`&&Ce<e){if(Se.open.length<j.capacity)for(let e of[`open`,`high`,`low`,`close`]){let t=new Float64Array(j.capacity);t.set(Se[e].subarray(0,Ce)),Se[e]=t}u.heikinAshiInto(j.open,j.high,j.low,j.close,e,Se,Ce),Ce=e}for(let t of De)if(!(t.valid>=e)){if(t.values.length<j.capacity){let e=new Float64Array(j.capacity).fill(NaN);e.set(t.values.subarray(0,t.valid)),t.values=e}for(let n=t.valid;n<e;n++){let e=p.lowerBoundTime(t.times,t.times.length,j.time[n]+.5)-1;t.values[n]=e>=0?t.data[e]:NaN}t.valid=e}},ln=e=>{sn(e);let t=Y();e<t-1&&Ae++,je++,t&&(Me=Math.max(e===0?0:Me,c.detectPrecision(j.close,e,t),c.detectPrecision(j.open,Math.max(e,t-50),t)),(e===0||t<80)&&(Ne=c.inferTimeframe(j.time,t))),$()},un=()=>{let{studies:e,reused:t}=m.buildStudies(D.indicators??[],M,Qt);for(let e of M)t.has(e)||Te.delete(e);for(let n of e)t.has(n)||Te.set(n,0);M=e;for(let e of[...Ee.keys()])M.some(t=>t.id===e)||Ee.delete(e)},dn=()=>{De=(D.compare??[]).map((e,t)=>{let n=[...e.data].sort((e,t)=>e.time-t.time);return{id:e.id??e.name,name:e.name,color:e.color??m.LINE_COLORS[(t+2)%m.LINE_COLORS.length],width:e.lineWidth??1.5,times:Float64Array.from(n,e=>e.time),data:Float64Array.from(n,e=>e.value),values:new Float64Array,valid:0,lod:p.createRangePyramid()}})},fn=()=>{let e=Y();if(!e||!E(P))return!0;let t=Q(e-1);return t>=0&&t<=F+N*.5},pn=e=>{p.setBars(j,e),xe=p.createPyramid(),we=p.createPyramid(),Ce=0,Tt=NaN;for(let e of Le.values())e.auto=!0;P=Y()-1+(D.rightOffset??8),$e=null,et=null,ln(0)},mn=e=>{let t=Y(),n=p.inputLength(e);if(t>=2&&n>=t){let r=p.barAt(e,0).time,i=j.time[t-1];if(r===j.time[0]&&p.barAt(e,t-2).time===j.time[t-2]){let r=fn(),i=t,a=t;for(let r=t-1;r<n;r++){let t=p.updateBar(j,p.barAt(e,r));t>=0&&(a=Math.min(a,t))}r&&(P+=Y()-i),a<Y()&&ln(a);return}if(p.barAt(e,n-1).time===i&&n>t){let r=n-t;p.setBars(j,e),xe=p.createPyramid(),we=p.createPyramid(),Ce=0,P+=r,ln(0);return}}pn(e)},hn=()=>{let e=M.filter(e=>!e.overlay),t=I,n=e.map(e=>Re.get(e.id)??e.height),r=n.reduce((e,t)=>e+t,0),i=Math.max(0,t*.62),a=r>i&&r>0?i/r:1,o=n.map(e=>Math.max(v*Math.min(1,a*2),e*a)),s=Math.max(40,t-o.reduce((e,t)=>e+t,0)),c=[],l=(e,t)=>{let n=Le.get(e);return n||(n=f.createScale(t),Le.set(e,n)),n.mode!==t&&(n.mode=t,n.auto=!0),n},u=l(y,D.scaleMode??`linear`);u.top=0,u.height=s,u.marginTop=.1,u.marginBottom=.08,c.push({id:y,study:null,scale:u,top:0,height:s,ticks:[],step:0});let d=s;e.forEach((e,t)=>{let n=l(e.id,`linear`);n.top=d,n.height=o[t],n.marginTop=e.type===`volume`?.18:.14,n.marginBottom=e.type===`volume`?0:.1,e.range&&(n.marginTop=n.marginBottom=.06),c.push({id:e.id,study:e,scale:n,top:d,height:o[t],ticks:[],step:0}),d+=o[t]});for(let e of[...Le.keys()])c.some(t=>t.id===e)||Le.delete(e);L=c},gn=e=>L.find(t=>e>=t.top&&e<t.top+t.height)??null,_n=()=>{let e=Y(),t=Math.min(1,F*.8/Math.max(1,e));N=T(N,Math.max(1e-4,t),_);let n=F/N;E(P)||(P=e-1+(D.rightOffset??8));let r=Math.max(0,e-1)+Math.max(D.rightOffset??8,n*.75),i=Math.min(n*.25,r);P=T(P,i,r)},vn=()=>{let e=Y();if(!e)return null;let t=P-F/N,n=N>=2?0:Math.ceil(Math.log2(2/N)),r=2**n,i=on(),a=n?p.pyramidLevel(Pt()===`heikinAshi`?we:xe,i,e,n):i,o=Math.floor((e-1)/r),s=T(Math.floor(t)-1,0,e-1),c=T(Math.ceil(P)+1,0,e-1),l=T(Math.ceil(t-.5),0,e-1),u=T(Math.floor(P+.5),0,e-1);return{left:t,level:n,size:r,cols:a,g0:Math.floor(s/r),g1:Math.floor(c/r),s0:Math.floor(l/r),s1:Math.floor(u/r),last:o}},yn=(e,t)=>t*e.size+(e.size-1)/2,bn=(e,t)=>Math.min(e.size,Y()-t*e.size),xn=()=>T(Math.ceil(P-F/N-.5),0,Math.max(0,Y()-1)),Sn=e=>{let t=Y();for(let n=xn();n<t;n++){let t=e.values[n];if(E(t)&&t!==0)return t}return NaN},Cn=(e,t,n)=>e.mode===`percent`?(t/n-1)*100:f.toScaled(e,t),wn=()=>D.baselinePrice??on().close[xn()],Tn=(e,t,n,r,i)=>{let a=tn(e,t,n),o=Math.round(r/e.size),s=T(e.s0-o,0,e.last),c=T(e.s1-o,0,e.last);for(let e=s;e<=c;e++)a.min[e]<i[0]&&(i[0]=a.min[e]),a.max[e]>i[1]&&(i[1]=a.max[e])},En=(e,t)=>{if(!D.autoscaleIncludesDrawings||!W.length)return;let n=P-F/N,r=U?.kind===`drawing`?U:null;for(let i of W){if((i.pane??y)!==e)continue;let a=r&&r.id===i.id?r.original:i;for(let e of s.drawingPrices(a,an,n,P))e<t[0]&&(t[0]=e),e>t[1]&&(t[1]=e)}},Dn=e=>{Be=0;for(let t of L){let n=t.scale;if(!e)continue;if(t.id===y){n.base=j.close[xn()]||1;let{cols:t}=e,r=Pt(),i=r===`line`||r===`area`||r===`baseline`,a=[1/0,-1/0];for(let n=e.s0;n<=e.s1;n++){let e=i?t.close[n]:t.low[n],r=i?t.close[n]:t.high[n];e<a[0]&&(a[0]=e),r>a[1]&&(a[1]=r)}for(let n of M)if(n.overlay&&Gt(n)){if(n.type===`volume`){for(let n=e.s0;n<=e.s1;n++){let r=t.volume[n]/bn(e,n);r>Be&&(Be=r)}continue}for(let t of n.outputs)Tn(e,t.values,rn(t),t.shift,a)}En(y,a);let[o,s]=a;if(r===`baseline`){let e=wn();e<o&&(o=e),e>s&&(s=e)}if(!n.auto)continue;let c=f.toScaled(n,o),l=f.toScaled(n,s);n.mode===`log`&&!(o>0)&&(c=f.toScaled(n,Math.max(s*.001,1e-12)));for(let t of De){let r=Sn(t),i=[1/0,-1/0];Tn(e,t.values,t.lod,0,i);for(let e of i){let t=Cn(n,e,r);t<c&&(c=t),t>l&&(l=t)}}n.mode===`percent`&&De.length&&(c=Math.min(c,0),l=Math.max(l,0)),f.fitScale(n,c,l);continue}let r=t.study;if(!r||!n.auto)continue;if(r.range){f.fitScale(n,r.range[0],r.range[1]);continue}let i=[1/0,-1/0];r.type===`volume`&&(i[0]=0);for(let t of r.outputs){if(t.kind===`volume`){for(let t=e.s0;t<=e.s1;t++){let n=e.cols.volume[t]/bn(e,t);n>i[1]&&(i[1]=n)}continue}Tn(e,t.values,rn(t),t.shift,i)}En(t.id,i);let[a,o]=i;if(r.bands&&E(a)&&E(o))for(let e of r.bands)a=Math.min(a,e),o=Math.max(o,e);r.zero&&E(a)&&E(o)&&(a=Math.min(a,0),o=Math.max(o,0)),f.fitScale(n,a,o)}},On=(e,t)=>{let n=Y();if(!n||!e)return[];let r=Ut(),i=r<c.DAY,a=Math.floor(Math.max(0,Math.ceil(P))/e.size),o=t=>t<=e.last?e.cols.time[t]:j.time[n-1]+(t*e.size-(n-1))*r,s=[],l=e.g0>0?$t(o(e.g0-1)):NaN;for(let t=e.g0;t<=a;t++){let n=$t(o(t)),r=Q(yn(e,t)),i=c.boundaryWeight(l,n);r>=-20&&r<=F+20&&i>10&&s.push({x:r,weight:i,time:n}),l=n}t.font=Wt(R.fontSize);let u=i?`00:00`:`Sep 30`,d=Math.max(t.measureText(u).width,t.measureText(`2024`).width)+34;return c.pickTicks(s,d).filter(e=>e.x>8&&e.x<F-8).map(e=>({x:e.x,text:c.tickText(e.time,e.weight,J,i),bold:e.weight>=(i?50:60)}))},kn=(e,t)=>e.id===y?e.scale.mode===`percent`?c.formatPercent(t,J,Math.min(2,r.stepDecimals(e.step))):Z(f.fromScaled(e.scale,t)):e.study?.compact?c.formatVolume(t,J):c.formatFixed(t,Math.min(4,r.stepDecimals(e.step)),J),An=(e,t)=>e.overlay&&e.type!==`volume`?Z(t):e.compact?c.formatVolume(t,J):c.formatFixed(t,e.range?2:Math.max(2,Math.min(6,zt())),J),jn=(e,n)=>{let r=[],i=e.cols,a=Rt(It()),o=Rt(Lt()),s=t.packColor(a),c=t.packColor(o),u=R.background,d=l.candleMetrics(N*e.size*n,n),p=t=>Q(yn(e,t))*n,m=Pt(),h=Math.max(.5,d.body/2),g={up:t.packColor([a[0],a[1],a[2],.5]),down:t.packColor([o[0],o[1],o[2],.5])};for(let _ of L){let v=_.top*n,b=(_.top+_.height)*n,x=_.scale,S=e=>f.yOf(x,e)*n,ee=(t,n,r,i=S)=>(a,o,s)=>{let c=new l.LineBuffer(v,b);for(let n=s?Math.max(e.g0,a-1):a;n<=o;n++)c.push(p(n),i(t(n)));return c.count>1?[c.item(``,0,n,r)]:[]},te=(t,r,i,a,o=0,s=S)=>(c,u,d)=>{let f=tn(e,t,r),m=o*N*n,h=Math.ceil(Math.abs(o)/e.size)+1,g=d?Math.max(0,c-1):c,_=u;!d&&o>0&&(g=Math.max(0,g-h)),!d&&o<0&&(_=Math.min(e.last-1,_+h));let y=new l.LineBuffer(v,b),x=NaN;for(let t=g;t<=_;t++){let n=p(t)+m,r=f.min[t],i=f.max[t];if(!e.level||r===i||!E(r)||!E(i)){x=s(f.last[t]),y.push(n,x);continue}let a=s(r),o=s(i),c=E(x)&&Math.abs(x-o)<Math.abs(x-a)?o:a,l=c===o?a:o;y.push(n,c),y.push(n,l),x=l}return y.count>1?[y.item(``,0,i,a)]:[]},w=(t,n,r,i,a)=>(o,s,c)=>{let d=tn(e,t.value,n),f=Y(),m=new l.TrendBuffer(v,b),h=NaN;for(let n=c?Math.max(0,o-1):o;n<=s;n++){let r=d.min[n],i=d.max[n];if(!E(r)||!E(i)){m.break(),h=NaN;continue}let a=t.direction[Math.min(f-1,n*e.size+e.size-1)]!==-1,o=p(n),s=S(r),c=S(i),l=E(h)&&Math.abs(h-c)<Math.abs(h-s)?c:s,u=l===c?s:c;m.push(o,l,a),u!==l&&m.push(o,u,a),h=u}let g=[u[0],u[1],u[2],.9],_=[];for(let[e,t]of[[m.up,`u`],[m.down,`d`]])e.count>1&&_.push(e.item(`${t}h`,0,g,a+2.5));return m.up.count>1&&_.push(m.up.item(`u`,0,r,a)),m.down.count>1&&_.push(m.down.item(`d`,0,i,a)),_};if(_.id===y){if(M.find(e=>e.overlay&&e.type===`volume`&&Gt(e))&&Be>0){let t=(b-v)*.2;r.push((n,r)=>{let a=new l.BarBuffer;for(let o=n;o<=r;o++){let n=i.volume[o]/bn(e,o);if(!(n>0))continue;let r=b-n/Be*t,[s,c]=l.pixelRange(r,b);a.push(d.snap(p(o)),s,c,i.close[o]>=i.open[o]?g.up:g.down)}return[a.item(``,0,h)]})}for(let e of De){let t=Sn(e),i=Rt(e.color);r.push(te(e.values,e.lod,i,e.width,0,e=>f.yOfScaled(x,Cn(x,e,t))*n))}if(m===`line`||m===`area`||m===`baseline`){let t=Rt(C);if(m===`area`&&r.push((n,r,a)=>{let o=new l.AreaBuffer(v,b);for(let t=a?Math.max(e.g0,n-1):n;t<=r;t++)o.push(p(t),S(i.close[t]),b);return o.count>1?[o.item(``,0,t,.28)]:[]}),m===`baseline`){let t=S(wn());r.push((n,r,s)=>{let c=new l.AreaBuffer(v,b),u=new l.AreaBuffer(v,b),d=new l.LineBuffer(v,b),f=new l.LineBuffer(v,b),m=NaN,h=NaN,g=(e,n)=>{c.push(e,Math.min(n,t),t),u.push(e,Math.max(n,t),t),n<=t?d.push(e,n):d.break(),n>=t?f.push(e,n):f.break()};for(let a=s?Math.max(e.g0,n-1):n;a<=r;a++){let e=p(a),n=S(i.close[a]);if(E(h)&&(h-t)*(n-t)<0){let r=(t-h)/(n-h);g(m+(e-m)*r,t)}g(e,n),m=e,h=n}let _=[];return c.count>1&&_.push(c.item(`u`,0,a,.22),u.item(`d`,0,o,.22)),d.count>1&&_.push(d.item(`ul`,0,a,2)),f.count>1&&_.push(f.item(`dl`,0,o,2)),_})}else r.push(ee(e=>i.close[e],t,2))}else{let e=m===`hollowCandles`,t=m===`bars`,n=d.wick,a=d.body;r.push((r,o)=>{let u=new l.BarBuffer,f=new l.BarBuffer,m=new l.BarBuffer,h=new l.BarBuffer,g=Math.max(n,Math.round((a-n)/2));for(let _=r;_<=o;_++){let r=i.open[_],o=i.high[_],y=i.low[_],x=i.close[_];if(!E(r)||!E(x))continue;let C=(e?x>=(_>0?i.close[_-1]:r):x>=r)?s:c,ee=d.snap(p(_)),[te,w]=l.pixelRange(S(o),S(y));if(t){let e=l.clampRange(te,w,v,b);e&&u.push(ee,e[0],e[1],C);for(let[e,t]of[[r,-1],[x,1]]){let r=Math.round(S(e)-n/2);r<v||r+n>b||h.push(ee+t*(n/2+g/2),r,r+n,C)}continue}let[ne,re]=l.pixelRange(S(r),S(x));if(a<=n){let e=l.clampRange(te,w,v,b);e&&u.push(ee,e[0],e[1],C);continue}if(e&&x>r){let e=[[te,ne],[re,w]];for(let[t,n]of e){let e=n>t?l.clampRange(t,n,v,b):null;e&&u.push(ee,e[0],e[1],C)}let t=l.clampRange(ne,re,v,b);t&&(u.push(ee-a/2+n/2,t[0],t[1],C),u.push(ee+a/2-n/2,t[0],t[1],C));for(let e of[ne,re-n])e>=v&&e+n<=b&&m.push(ee,e,e+n,C);continue}let T=l.clampRange(te,w,v,b);T&&u.push(ee,T[0],T[1],C);let ie=l.clampRange(ne,re,v,b);ie&&f.push(ee,ie[0],ie[1],C)}let _=[u.item(`w`,0,n/2)];return f.count&&_.push(f.item(`b`,0,a/2)),m.count&&_.push(m.item(`c`,0,a/2)),h.count&&_.push(h.item(`t`,0,g/2)),_})}}let ne=_.id===y?M.filter(e=>e.overlay&&e.type!==`volume`):_.study?[_.study]:[];for(let f of ne){if(!Gt(f))continue;let m=f.trend,[_,y]=f.outputs;if(m&&e.level&&_&&y){r.push(w(m,nn(f),Rt(en(_.color)),Rt(en(y.color)),_.width));continue}for(let m of f.outputs)if(m.kind===`volume`){let t=S(0);r.push((n,r)=>{let a=new l.BarBuffer;for(let o=n;o<=r;o++){let n=i.volume[o]/bn(e,o);if(!(n>0))continue;let r=l.clampRange(...l.pixelRange(S(n),t),v,b);r&&a.push(d.snap(p(o)),r[0],r[1],i.close[o]>=i.open[o]?g.up:g.down)}return[a.item(``,0,h)]})}else if(m.kind===`histogram`){let n=S(0),i={up:s,down:c},f={up:t.packColor(t.mix(u,a,.45)),down:t.packColor(t.mix(u,o,.45))},g=rn(m);r.push((t,r)=>{let a=tn(e,m.values,g),o=new l.BarBuffer;for(let s=t;s<=r;s++){let t=a.last[s];if(!E(t))continue;let r=s>0?a.last[s-1]:t,c=t>=0?t>=r?i.up:f.up:t<=r?i.down:f.down,u=Math.min(0,E(a.min[s])?a.min[s]:t),m=Math.max(0,E(a.max[s])?a.max[s]:t),h=l.clampRange(...e.level?l.pixelRange(S(m),S(u)):l.pixelRange(S(t),n),v,b);h&&o.push(d.snap(p(s)),h[0],h[1],c)}return[o.item(``,0,h)]})}else if(m.kind===`dots`){let a=m.color?t.packColor(Rt(en(m.color))):0,o=T(N*e.size*.22,1.25,2.6),u=o*n;r.push((t,n)=>{let r=new l.BarBuffer;for(let o=t;o<=n;o++){let t=e.level?m.values[Math.min(Y()-1,o*e.size+e.size-1)]:m.values[o];if(!E(t))continue;let n=S(t);if(n<v||n>b)continue;let l=a||(t<=i.close[o]?s:c);r.push(p(o),n-u,n+u,l)}return r.count?[r.item(``,0,u,0,o)]:[]})}else{let e=Rt(en(m.color));r.push(te(m.values,rn(m),[e[0],e[1],e[2],e[3]*m.alpha],m.width,m.shift))}}}return r},Mn=(e,t,n,r)=>{let i=Math.min(n.g1,n.last-1),a=r?n.last>=n.g0&&n.last<=n.g1?e(n.last,n.last,!0):[]:i>=n.g0?e(n.g0,i,!1):[],o=++Je;return a.map((e,n)=>({...e,key:`L${t}:${n}:${e.kind}:${e.key}${r?`:live`:``}`,version:o}))},Nn=(t,n)=>{if(!z)return;let r=z.canvas;e.styleElement(r,{left:`0px`,top:`0px`,width:`${F}px`,height:`${I}px`});let i=Math.max(1,Math.round(F*n)),a=Math.max(1,Math.round(I*n));if((r.width!==i||r.height!==a)&&z.resize(i,a),t){let e=[i,a,n,N,P,t.level,Pt(),Ae,Ve,He,Be,Pt()===`baseline`?wn():0,...L.map(e=>`${e.id}:${e.top}:${e.height}:${e.scale.min}:${e.scale.max}:${e.scale.base}:${e.scale.mode}`),...M.map(e=>`${e.id}:${Gt(e)}`)].join(`|`);e===Ke?qe!==je&&(qe=je,Ge.forEach((e,n)=>{e.live=Mn(e.fn,n,t,!0)})):(Ke=e,qe=je,Ge=jn(t,n).map(e=>({fn:e,main:[],live:[]})),Ge.forEach((e,n)=>{e.main=Mn(e.fn,n,t,!1),e.live=Mn(e.fn,n,t,!0)}))}else Ge=[],Ke=``;let o=Ge.flatMap(e=>[...e.main,...e.live]);z.render(o,{transform:{xScale:2/i,xOffset:-1,yScale:-2/a,yOffset:1},width:i,height:a,dpr:n})},Pn=(e,t)=>{let n=Math.max(1,Math.round(Fe*t)),r=Math.max(1,Math.round(Ie*t));e.width!==n&&(e.width=n),e.height!==r&&(e.height=r),e.style.width=`${Fe}px`,e.style.height=`${Ie}px`},Fn=(e,t,n,r,i,a)=>{e.beginPath(),typeof e.roundRect==`function`?e.roundRect(t,n,r,i,a):e.rect(t,n,r,i)},In=(e,t,n,r,i)=>{let a=r.outputs[i.a],o=r.outputs[i.b];if(!a||!o)return;let s=tn(t,a.values,rn(a)),c=tn(t,o.values,rn(o)),l=a.shift,u=Math.ceil(Math.abs(l)/t.size)+1,d=Math.max(0,t.g0-(l>0?u:0)),p=Math.min(t.last,t.g1+(l<0?u:0)),m=X(en(i.color),i.opacity),h=X(en(i.colorBelow??i.color),i.opacity);e.save(),e.beginPath(),e.rect(0,n.top,F,n.height),e.clip();let g=[],_=0,v=()=>{if(g.length>1){e.fillStyle=_>=0?m:h,e.beginPath(),g.forEach((t,n)=>n?e.lineTo(t.x,t.ya):e.moveTo(t.x,t.ya));for(let t=g.length-1;t>=0;t--){let n=g[t];n&&e.lineTo(n.x,n.yb)}e.closePath(),e.fill()}g=[]};for(let e=d;e<=p;e++){let r=s.last[e],i=c.last[e];if(!E(r)||!E(i)){v(),_=0;continue}let a=Q(yn(t,e)+l),o=f.yOf(n.scale,r),u=f.yOf(n.scale,i),d=r>=i?1:-1,p=g[g.length-1];if(p&&d!==_){let e=p.ya-p.yb,t=e/(e-(o-u)),n=p.x+(a-p.x)*t,r=p.ya+(o-p.ya)*t;g.push({x:n,ya:r,yb:r}),v(),g.push({x:n,ya:r,yb:r})}_=d,g.push({x:a,ya:o,yb:u})}v(),e.restore()},Ln=(e,n)=>{if(!D.sessionBreaks||Ut()>=864e5)return;let r=[],i=NaN;for(let e=Math.max(0,n.g0-1);e<=Math.min(n.g1,n.last);e++){let t=Math.floor($t(n.cols.time[e])/c.DAY);if(E(i)&&t!==i){let t=Math.round(Q(e*n.size-.5))+.5;if(t>0&&t<F&&r.push(t),r.length>F/6)return}i=t}if(r.length){e.save(),e.strokeStyle=t.toCss(R.textMuted,.4),e.setLineDash([4,4]),e.beginPath();for(let t of r)e.moveTo(t,0),e.lineTo(t,I);e.stroke(),e.restore()}},Rn=()=>{let e=D.volumeProfile;return e?e===!0?{}:e:null},zn=(e,n)=>{let r=Rn(),i=L[0];if(!r||!i||!j.hasVolume)return;let a=T(Math.floor(r.rows??24),2,400),o=[n.level,n.s0,n.s1,a,r.valueArea??.7,Ae,je].join(`|`);if(!kt||kt.key!==o){let e=n.level?p.pyramidLevel(xe,j,Y(),n.level):j;kt={key:o,result:u.volumeProfile(e,{from:n.s0,to:n.s1,rows:a,valueArea:r.valueArea})}}let s=kt.result;if(s.poc<0)return;let c=0;for(let e=0;e<a;e++)c=Math.max(c,(s.up[e]??0)+(s.down[e]??0));if(!(c>0))return;let l=F*T(r.width??.28,.05,.9),d=(r.side??`right`)===`right`,m=Rt(en(r.upColor??`up`)),h=Rt(en(r.downColor??`down`));e.save(),e.beginPath(),e.rect(0,i.top,F,i.height),e.clip();for(let n=0;n<a;n++){let r=s.up[n]??0,a=s.down[n]??0;if(!(r+a>0))continue;let o=f.yOf(i.scale,s.low+n*s.step),u=f.yOf(i.scale,s.low+(n+1)*s.step),p=Math.min(o,u),g=Math.max(1,Math.abs(u-o)-+(Math.abs(u-o)>4)),_=n>=s.valueAreaFrom&&n<=s.valueAreaTo?.42:.17,v=r/c*l,y=a/c*l,b=d?F:0,x=d?-1:1;e.fillStyle=t.toCss(m,_),e.fillRect(Math.min(b,b+x*v),p,v,g),e.fillStyle=t.toCss(h,_);let S=b+x*v;e.fillRect(Math.min(S,S+x*y),p,y,g)}let g=Math.round(f.yOf(i.scale,s.low+(s.poc+.5)*s.step))+.5;e.strokeStyle=X(r.pocColor??S,.9),e.lineWidth=1,e.beginPath(),e.moveTo(0,g),e.lineTo(F,g),e.stroke(),e.restore()},Bn=(e,n,r)=>{let i=t.toCss(R.grid),a=D.grid!==!1;if(e.lineWidth=1,a){e.strokeStyle=i,e.beginPath();for(let t of r){let n=Math.round(t.x)+.5;e.moveTo(n,0),e.lineTo(n,I)}for(let t of L)for(let n of t.ticks){let r=Math.round(f.yOfScaled(t.scale,n))+.5;r<t.top+2||r>t.top+t.height-2||(e.moveTo(0,r),e.lineTo(F,r))}e.stroke()}if(D.watermark){let n=L[0];e.save(),e.font=Wt(Math.min(56,Math.max(22,F/14)),700),e.fillStyle=t.toCss(R.text,.07),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(D.watermark,F/2,n.top+n.height/2),e.restore()}for(let n of L){let r=n.study;if(r?.bands&&Gt(r)){let i=Rt(en(r.outputs[0]?.color??C)),a=r.bands.map(e=>Math.round(f.yOf(n.scale,e))+.5);r.bandFill&&a.length===2&&(e.fillStyle=t.toCss(i,.07),e.fillRect(0,Math.min(a[0],a[1]),F,Math.abs(a[1]-a[0]))),e.save(),e.setLineDash([4,4]),e.strokeStyle=t.toCss(R.textMuted,.45),e.beginPath();for(let t of a)t<n.top||t>n.top+n.height||(e.moveTo(0,t),e.lineTo(F,t));e.stroke(),e.restore()}}if(n){Ln(e,n);for(let t of M){if(!t.fills.length||!Gt(t))continue;let r=t.overlay?L[0]:L.find(e=>e.study===t);if(r)for(let i of t.fills)In(e,n,r,t,i)}let r=L[0];if(r&&r.scale.mode===`percent`&&De.length){let n=Math.round(f.yOfScaled(r.scale,0))+.5;n>r.top&&n<r.top+r.height&&(e.save(),e.strokeStyle=t.toCss(R.textMuted,.6),e.setLineDash([2,3]),e.beginPath(),e.moveTo(0,n),e.lineTo(F,n),e.stroke(),e.restore())}zn(e,n)}e.strokeStyle=t.toCss(R.axis),e.beginPath();for(let t of L.slice(1)){let n=Math.round(t.top)+.5;e.moveTo(0,n),e.lineTo(Fe,n)}e.moveTo(Math.round(F)+.5,0),e.lineTo(Math.round(F)+.5,Ie),e.moveTo(0,Math.round(I)+.5),e.lineTo(Fe,Math.round(I)+.5),e.stroke()},Vn=(e,t,n,r,i,a)=>{let o=a?32:18,s=T(Math.round(t-9),0,I-o);Fn(e,F+1,s,Pe-2,o,3),e.fillStyle=r,e.fill(),e.fillStyle=i,e.textAlign=`left`,e.textBaseline=`middle`,e.font=Wt(R.fontSize,500),e.fillText(n,F+7,s+9.5),a&&(e.font=Wt(R.fontSize-1),e.fillText(a,F+7,s+24))},Hn=e=>L[0]?.scale.mode===`percent`?c.formatPercent(f.toScaled(L[0].scale,e),J):Z(e),Un=e=>{if(e.color)return X(e.color);let t=e.kind??`line`;return X(t===`takeProfit`?It():t===`stopLoss`?Lt():t===`alert`?S:t===`line`?C:e.side===`sell`?Lt():It())},Wn=e=>_t.get(e.id)??e.price,Gn=()=>{if(!ze||!L.length)return null;if(V!==null){let e=V,t=e>=0&&e<Y()?on().close[e]:NaN;return{index:e,pane:L[0],y:f.yOf(L[0].scale,t),price:t}}if(!B&&Ct){let e=Math.round(an(Ct.time)),t=Ct.price;return{index:e,pane:L[0],y:E(t)?f.yOf(L[0].scale,t):NaN,price:t}}if(!B||B.x>F||B.y>I)return null;let e=gn(B.y);if(!e)return null;let t=Math.round(Kt(B.x)),n=B.y,r=f.valueAt(e.scale,n);if(e.id===y&&D.crosshair!==`free`&&t>=0&&t<Y()&&st===`cursor`){let i=on(),a=1/0;for(let o of[i.open[t],i.high[t],i.low[t],i.close[t]]){let t=f.yOf(e.scale,o);Math.abs(t-B.y)<a&&(a=Math.abs(t-B.y),n=t,r=o)}}return{index:t,pane:e,y:n,price:r}},Kn=e=>L.find(t=>t.id===(e??y))??null,qn=e=>e?{x:Q,y:t=>f.yOf(e.scale,t),index:an,left:0,right:F,top:e.top,bottom:e.top+e.height}:null,Jn=(e,t)=>{let n=Nt(),r=Math.abs(t),i=[],a=Math.floor(r/c.DAY),o=Math.floor(r%c.DAY/c.HOUR),s=Math.floor(r%c.HOUR/c.MINUTE);return a&&i.push(d.fill(n.days,{count:a})),o&&i.push(d.fill(n.hours,{count:o})),s&&!a&&i.push(d.fill(n.minutes,{count:s})),`${d.fill(Nt().bars,{count:e})}, ${i.join(` `)||d.fill(n.minutes,{count:0})}`},Yn=(e,t)=>e.id===y?Z(t):kn(e,t),Xn=e=>{let t=10**-zt();return Number((Math.round(e/t)*t).toFixed(zt()))},Zn=(e,t,n,r,i,a=`center`)=>{e.font=Wt(R.fontSize,500);let o=e.measureText(t).width+16,s=T(a===`center`?n-o/2:a===`right`?n-o:n,2,Math.max(2,F-o-2));return Fn(e,s,r,o,22,11),e.fillStyle=i,e.fill(),e.fillStyle=ie(i),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t,s+o/2,r+11.5),o},Qn=(e,t,n,r,i)=>(yt.push({x:e,y:t,w:n,h:r,action:i}),bt===yt.length-1),$n=(e,t)=>{let n=Y(),r=n?j.close[n-1]:NaN,i=G?[...W,G]:W;if(!i.length)return;let a=Nt(),o={target:a.target,stop:a.stop,riskReward:a.riskReward,profit:a.profit,long:a.long,short:a.short};for(let n of L){let l=qn(n);if(!l)continue;let u=i.filter(e=>(e.pane??y)===n.id);if(u.length){e.save(),e.beginPath(),e.rect(0,n.top,F,n.height),e.clip();for(let i of u){let u=s.paintDrawing(e,i,l,{...t,color:X(i.color??C),font:Wt(R.fontSize,500),fontFamily:R.fontFamily,formatPrice:e=>Yn(n,e),formatPercent:e=>c.formatPercent(e,J),formatSpan:Jn,textOn:ie,defaultText:a.text,position:o,last:n.id===y?r:NaN,fill:d.fill},{selected:i===G||i.id===ct,hovered:i.id===lt});u&&pt.set(i.id,u)}e.restore()}}},er=(e,n,r)=>{let i=L[0];if(!i)return;yt=[];let a=Y(),o=t.toCss(R.text),l=t.toCss(R.textMuted),u=t.toCss(R.background),p=X(It()),m=X(Lt()),g=Nt();if(e.save(),e.beginPath(),e.rect(0,i.top,F,i.height),e.clip(),n&&D.highLowMarkers!==!1&&Pt()!==`line`&&Pt()!==`area`&&Pt()!==`baseline`){let t=-1/0,r=1/0,a=-1,o=-1;for(let e=n.s0;e<=n.s1;e++)n.cols.high[e]>t&&(t=n.cols.high[e],a=e),n.cols.low[e]<r&&(r=n.cols.low[e],o=e);e.font=Wt(R.fontSize),e.fillStyle=l,e.strokeStyle=l,e.lineWidth=1;for(let[s,c,l]of[[a,t,!1],[o,r,!0]]){if(s<0||!E(c))continue;let t=Q(yn(n,s)),r=Z(c),a=e.measureText(r).width,o=T(f.yOf(i.scale,c)+(l?9:-9),i.top+8,i.top+i.height-8),u=Math.min(t,t+(t>F*.6?-17-a:17+a));for(let e of nr)u<e.right&&o-7<e.bottom&&o+7>e.top&&e.bottom+10<i.top+i.height-8&&(o=e.bottom+10);let d=F-4-(t+17+a),p=t-17-a-4,m=(d<0||t>F*.6)&&p>=Math.min(0,d),h=m?-1:1;e.textBaseline=`middle`,e.textAlign=`left`,e.beginPath(),e.moveTo(t,o),e.lineTo(t+h*14,o),e.stroke();let g=T(m?t-17-a:t+17,2,F-a-2);e.fillText(r,g,o)}}if(n&&D.markers?.length){let t=new Map;e.font=Wt(R.fontSize,600),e.textAlign=`center`;let r=D.markers.length>400;for(let o of D.markers){let s=an(o.time);if(s<0||s>a-1)continue;let c=Math.floor(s/n.size);if(c<n.g0||c>n.g1)continue;let l=Math.round(Q(yn(n,c))),d=o.side===`sell`,h=o.color?X(o.color):d?m:p,g=`${c}:${d}`,_=t.get(g)??0;t.set(g,_+(o.text&&!r?30:16));let v=f.yOf(i.scale,d?n.cols.high[c]:n.cols.low[c]),y=d?-1:1,b=v+y*(6+_);e.fillStyle=h,e.beginPath(),e.moveTo(l,b),e.lineTo(l-5.5,b+y*7),e.lineTo(l-2,b+y*7),e.lineTo(l-2,b+y*12),e.lineTo(l+2,b+y*12),e.lineTo(l+2,b+y*7),e.lineTo(l+5.5,b+y*7),e.closePath(),e.fill(),o.text&&!r&&(e.textBaseline=d?`bottom`:`top`,e.fillText(o.text,l,b+y*14)),o.price!==void 0&&E(o.price)&&(e.beginPath(),e.arc(l,f.yOf(i.scale,o.price),3,0,Math.PI*2),e.fill(),e.lineWidth=1.5,e.strokeStyle=u,e.stroke())}}e.restore(),$n(e,{text:o,background:u,up:p,down:m}),e.save(),e.beginPath(),e.rect(0,i.top,F,i.height),e.clip();let _=a?j.close[a-1]:NaN;for(let t of D.priceLines??[]){let n=Wn(t),r=Math.round(f.yOf(i.scale,n))+.5;if(!E(r)||r<i.top||r>i.top+i.height)continue;let a=Un(t),o=t.kind??`line`,c=t.lineStyle??(o===`position`||o===`line`?`solid`:`dashed`);e.save(),e.strokeStyle=a,e.lineWidth=vt===t.id||U?.kind===`order`&&U.line.id===t.id||H?.kind===`move`&&H.id===t.id?1.5:1,s.setDash(e,c,1),e.beginPath(),e.moveTo(0,r),e.lineTo(F,r),e.stroke(),e.restore();let l=re[o],d=t.title??(l?g[l]:``),h=[];if(d&&h.push({text:d,fill:a,color:ie(a)}),t.quantity!==void 0&&t.quantity!==``&&h.push({text:String(t.quantity),fill:u,color:a}),o===`position`&&typeof t.quantity==`number`&&E(_)){let e=(_-n)*t.quantity*(t.side===`sell`?-1:1),r=e>=0?p:m;h.push({text:`${e>=0?`+`:`−`}${Z(Math.abs(e))}`,fill:r,color:ie(r)})}if(t.cancellable&&h.push({text:`×`,fill:u,color:a,cancel:!0}),!h.length&&!t.draggable)continue;e.font=Wt(R.fontSize,600);let v=h.map(t=>t.cancel?20:e.measureText(t.text).width+12),y=t.draggable?14:0,b=v.reduce((e,t)=>e+t,0)+y,x=Math.round(F-b-56),S=Math.round(r-9.5);if(H?.kind===`move`&&H.id===t.id&&(Fn(e,x-3.5,S-3.5,b+7,25,5),e.strokeStyle=X(C),e.lineWidth=2,e.setLineDash([]),e.stroke()),Fn(e,x-.5,S-.5,b+1,19,3),e.fillStyle=u,e.fill(),e.strokeStyle=a,e.lineWidth=1,e.setLineDash([]),e.stroke(),y){e.fillStyle=a;for(let t=0;t<3;t++)e.fillRect(x+4,S+5+t*3.5,6,1.5);x+=y}e.textBaseline=`middle`,e.textAlign=`center`,h.forEach((n,r)=>{let i=v[r]??0,o=n.fill;n.cancel&&(Qn(x,S,i,18,()=>q(`orderCancel`,{id:t.id,line:t}))&&(o=a),e.fillStyle=a,e.fillRect(x,S+3,1,12)),o!==u&&(e.fillStyle=o,e.fillRect(x,S,i,18)),e.fillStyle=n.cancel&&o!==u?ie(a):n.color,n.cancel&&(e.font=Wt(R.fontSize+3,500)),e.fillText(n.text,x+i/2,S+(n.cancel?9:9.5)),e.font=Wt(R.fontSize,600),x+=i})}let v=D.lastPriceLine!==!1&&a>0,b=a>0&&j.close[a-1]>=j.open[a-1],x=Pt()===`line`||Pt()===`area`?X(C):b?p:m;if(v){let t=Math.round(f.yOf(i.scale,_))+.5;e.save(),e.strokeStyle=x,e.setLineDash([1,2]),e.beginPath(),e.moveTo(0,t),e.lineTo(F,t),e.stroke(),e.restore()}e.restore();let S=[];for(let e of De){let t=a-1;for(;t>=0&&!E(e.values[t]);)t--;if(t<0)continue;let n=e.values[t],r=Cn(i.scale,n,Sn(e)),o=f.yOfScaled(i.scale,r);!E(o)||o<i.top||o>i.top+i.height||S.push({y:o,text:i.scale.mode===`percent`?c.formatPercent(r,J):Z(n),color:X(e.color)})}let ee=[];for(let e of D.priceLines??[])ee.push({pane:y,y:f.yOf(i.scale,Wn(e))});for(let e of W){let t=Kn(e.pane);t&&e.type===`horizontalLine`&&e.points[0]&&ee.push({pane:t.id,y:f.yOf(t.scale,e.points[0].price)})}for(let e of S)ee.push({pane:y,y:e.y});v&&ee.push({pane:y,y:f.yOf(i.scale,_)+(D.countdown?7:0)}),e.font=Wt(R.fontSize),e.textAlign=`left`,e.textBaseline=`middle`,e.fillStyle=l;for(let t of L)for(let n of t.ticks){let r=f.yOfScaled(t.scale,n);if(r<t.top+8||r>t.top+t.height-8)continue;let i=D.countdown&&t.id===y?18:14;ee.some(e=>e.pane===t.id&&Math.abs(e.y-r)<i)||e.fillText(kn(t,n),F+8,r)}e.textAlign=`center`;for(let t of r)e.font=Wt(R.fontSize,t.bold?600:400),e.fillStyle=t.bold?o:l,e.fillText(t.text,t.x,I+h/2);for(let t of D.priceLines??[]){let n=Wn(t),r=f.yOf(i.scale,n);if(!E(r)||r<i.top||r>i.top+i.height)continue;let a=Un(t);Vn(e,r,Hn(n),a,ie(a))}for(let t of W){let n=Kn(t.pane);if(!n||t.type!==`horizontalLine`||!t.points[0])continue;let r=t.points[0].price,i=f.yOf(n.scale,r);if(i<n.top||i>n.top+n.height)continue;let a=X(t.color??C);Vn(e,i,n.id===y?Hn(r):Yn(n,r),a,ie(a))}for(let t of S)Vn(e,t.y,t.text,t.color,ie(t.color));if(v){let t;if(D.countdown){let e=Ht(),n=j.time[a-1],r=n+e.ms;if(e.unit===`month`){let t=new Date(n);r=Date.UTC(t.getUTCFullYear(),t.getUTCMonth()+e.count,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes())}t=c.formatCountdown(r-Date.now(),g)}Vn(e,f.yOf(i.scale,_),Hn(_),x,ie(x),t)}let te=i.top+i.height-32;if(Dt){let n=B&&B.x<=F?B.x:NaN;E(n)&&(e.fillStyle=t.toCss(R.background,.62),e.fillRect(n,0,F-n,I),e.strokeStyle=X(C),e.lineWidth=1.5,e.beginPath(),e.moveTo(Math.round(n)+.5,0),e.lineTo(Math.round(n)+.5,I),e.stroke()),Zn(e,g.replayHint,F/2,te,X(C))}else K&&a&&Zn(e,d.fill(g.replay,{time:c.formatCrosshairTime($t(j.time[a-1]),Ut(),J)}),F/2,te,X(C));if(H&&a){if(H.kind===`create`){let t=H.side===`buy`?p:m,n=Math.round(f.yOf(i.scale,H.price))+.5;E(n)&&n>=i.top&&n<=i.top+i.height&&(e.save(),e.strokeStyle=t,e.lineWidth=1.5,e.setLineDash([6,4]),e.beginPath(),e.moveTo(0,n),e.lineTo(F,n),e.stroke(),e.restore(),Zn(e,d.fill(H.side===`buy`?g.buyLimit:g.sellLimit,{price:Z(H.price)}),F-56,T(n-11,i.top+2,i.top+i.height-24),t,`right`),Vn(e,n,Hn(H.price),t,ie(t)))}!K&&!Dt&&Zn(e,g.orderHint,8,te,t.toCss(R.text,.86),`left`)}let w=Gn();if(w&&n&&!Dt){let n=Math.round(Q(w.index))+.5;e.save(),e.strokeStyle=t.toCss(R.textMuted,.75),e.lineWidth=1,e.setLineDash([4,3]),e.beginPath(),n>=0&&n<=F&&(e.moveTo(n,0),e.lineTo(n,I));let r=Math.round(w.y)+.5;E(r)&&r>=w.pane.top&&r<=w.pane.top+w.pane.height&&(e.moveTo(0,r),e.lineTo(F,r)),e.stroke(),e.restore();let o=t.toCss(R.text);if(E(w.y)&&w.y>=w.pane.top&&w.y<=w.pane.top+w.pane.height){let t=f.scaledAt(w.pane.scale,w.y),n=w.pane.id===y?Hn(f.fromScaled(w.pane.scale,t)):kn(w.pane,t);Vn(e,w.y,n,o,u)}if(n>=0&&n<=F&&a){let t=c.formatCrosshairTime($t(qt(w.index)),Ut(),J);e.font=Wt(R.fontSize,500);let r=e.measureText(t).width+16,i=T(n-r/2,0,Fe-r);Fn(e,i,I+3,r,21,3),e.fillStyle=o,e.fill(),e.fillStyle=u,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t,i+r/2,I+14)}if(D.orderEntry&&B&&w.pane.id===y&&E(w.y)&&st===`cursor`&&!U&&a){let t=F-18-4,n=T(Math.round(w.y-9),i.top+1,i.top+i.height-18-1),r=Xn(w.price),a=r<_?`buy`:`sell`,s=Qn(t,n,18,18,()=>q(`orderCreate`,{price:r,side:a}));Fn(e,t,n,18,18,4),e.fillStyle=s?X(C):o,e.fill(),e.strokeStyle=s?ie(X(C)):u,e.lineWidth=1.5,e.beginPath(),e.moveTo(t+5,n+9),e.lineTo(t+18-5,n+9),e.moveTo(t+9,n+5),e.lineTo(t+9,n+18-5),e.stroke(),s&&Zn(e,d.fill(a===`buy`?g.buyLimit:g.sellLimit,{price:Z(r)}),t-6,n-2,a===`buy`?p:m,`right`)}}},tr=``,nr=[],rr=new Map,ir=new Map,ar=e=>{let t=ir.get(e);return t||(t=pe(`div`,{position:`absolute`,left:`4px`,display:`flex`,flexDirection:`column`,alignItems:`flex-start`,gap:`1px`,maxWidth:`calc(100% - 12px)`,overflow:`hidden`,fontSize:`12px`,lineHeight:`18px`,fontVariantNumeric:`tabular-nums`,whiteSpace:`nowrap`,pointerEvents:`none`}),_e.appendChild(t),ir.set(e,t)),t},or=(e,t,n,r)=>{let i=pe(`div`,{display:`flex`,flexWrap:`wrap`,alignItems:`center`,columnGap:`6px`,maxWidth:`100%`,minWidth:`0`,boxSizing:`border-box`,padding:`0 4px`,borderRadius:`4px`,background:`color-mix(in srgb, var(--surface-color, var(--background-color, #fff)) 86%, transparent)`}),a=null;if(n)a=pe(`button`,{all:`unset`,cursor:`pointer`,pointerEvents:`auto`,color:`var(--text-color, #1f2937)`,fontWeight:`500`,borderRadius:`3px`,...oe}),a.type=`button`,a.textContent=t,a.setAttribute(`aria-label`,d.fill(Nt().toggleIndicator,{name:t})),a.addEventListener(`click`,e=>{e.stopPropagation();let t=!Gt(n);Ee.set(n.id,t),q(`indicatorToggle`,{id:n.id,visible:t}),ur(),$()}),a.addEventListener(`pointerdown`,e=>e.stopPropagation()),i.appendChild(a);else if(t){let e=pe(`span`,{fontWeight:`600`,...oe});e.textContent=t,i.appendChild(e)}let o=[];for(let e=0;e<r;e++){let e=pe(`span`,oe);i.appendChild(e),o.push(e)}return e.appendChild(i),{row:i,values:o,button:a}},sr=()=>{rr.clear();for(let e of ir.values())e.remove();if(ir.clear(),D.legend===!1)return;let e=ar(y),t=[D.symbol,D.labels?.timeframe??(typeof D.timeframe==`string`?D.timeframe:``)].filter(Boolean).join(` · `);rr.set(`ohlc`,or(e,t,null,1));for(let t of M){let n=t.mergeLegend?1:t.outputs.length;t.overlay&&t.type===`volume`?rr.set(t.id,or(e,cr(t),t,1)):t.overlay&&rr.set(t.id,or(e,cr(t),t,n))}for(let t of De)rr.set(`compare:${t.id}`,or(e,``,null,1));for(let e of M)e.overlay||rr.set(e.id,or(ar(e.id),cr(e),e,e.mergeLegend?1:e.outputs.length))},cr=e=>e.type===`volume`?Nt().volume:e.titleKey?`${Nt()[e.titleKey]} ${e.title}`:e.title,lr=(e,t,n)=>{if(!e)return;e.textContent!==t&&(e.textContent=t);let r=n??``;e.style.color!==r&&(e.style.color=r)},ur=()=>{let e=[D.legend!==!1,D.symbol,D.timeframe,...M.map(e=>`${e.id}:${cr(e)}:${e.outputs.length}`),...De.map(e=>e.id),jt.toggleIndicator,D.labels?.timeframe].join(`|`);if(e!==tr&&(tr=e,sr()),D.legend===!1)return;for(let e of L){let t=ir.get(e.id);if(!t)continue;t.style.top=`${e.top+6}px`;let n=`${Math.max(60,Math.floor(F-10))}px`;t.style.maxWidth!==n&&(t.style.maxWidth=n);let r=`${Math.max(18,Math.floor(e.height-10))}px`;t.style.maxHeight!==r&&(t.style.maxHeight=r)}let t=ir.get(y),n=t?Array.from(t.children,e=>({right:t.offsetLeft+e.offsetLeft+e.offsetWidth,top:t.offsetTop+e.offsetTop,bottom:t.offsetTop+e.offsetTop+e.offsetHeight})):[],r=n.length!==nr.length||n.some((e,t)=>{let n=nr[t];return!n||n.right!==e.right||n.top!==e.top||n.bottom!==e.bottom});nr=n,r&&$();let i=Y(),a=Gn(),o=T(a&&a.index>=0&&a.index<i?a.index:i-1,0,Math.max(0,i-1)),s=Nt(),l=rr.get(`ohlc`),u=X(It()),d=X(Lt());if(l&&i){let e=on(),t=e.open[o],n=e.close[o],r=o>0?e.close[o-1]:t,i=n-r,a=n>=t?u:d,f=l.values[0],p=[[s.open,e.open[o]],[s.high,e.high[o]],[s.low,e.low[o]],[s.close,n]].map(([e,t])=>`<span style="${se}"><span style="color:var(--text-secondary-color,#6b7280)">${dr(String(e))}</span><span style="color:${a}">${dr(Z(t))}</span></span>`).join(``),m=r?i/r*100:NaN,h=`${p}${`<span style="${se}">${s.change?`<span style="color:var(--text-secondary-color,#6b7280)">${dr(s.change)}</span>`:``}<span style="color:${i>=0?u:d}">${i>=0?`+`:`−`}${dr(Z(Math.abs(i)))} (${dr(c.formatPercent(m,J))})</span></span>`}${j.hasVolume?`<span style="${se}"><span style="color:var(--text-secondary-color,#6b7280)">${dr(s.volume)}</span>${dr(c.formatVolume(j.volume[o],J))}</span>`:``}`;f&&f.dataset.html!==h&&(f.innerHTML=h,f.dataset.html=h,f.style.display=`inline-flex`,f.style.columnGap=`6px`,f.style.flexWrap=`wrap`)}for(let e of M){let t=rr.get(e.id);if(!t)continue;let n=Gt(e);t.row.style.opacity=n?`1`:`0.5`,t.button&&(t.button.setAttribute(`aria-pressed`,String(n)),t.button.style.textDecoration=n?`none`:`line-through`);let r=e.outputs.length;if(e.mergeLegend){let r=e.outputs.find(e=>E(e.values[o]));lr(t.values[0],n&&i&&r?An(e,r.values[o]):``,r?X(en(r.color)):void 0);continue}e.outputs.forEach((a,s)=>{let l=t.values[e.type===`macd`?(s+r-1)%r:s];if(!n||!i){lr(l,``);return}if(a.kind===`volume`){let e=j.close[o]>=j.open[o]?u:d;lr(l,c.formatVolume(j.volume[o],J),e);return}let f=o-a.shift,p=f>=0&&f<i?a.values[f]:NaN,m=a.color?X(en(a.color)):void 0;a.kind===`histogram`&&(m=p>=0?u:d),a.kind===`dots`&&!a.color&&(m=p<=j.close[o]?u:d);let h=e.outputs.length>1&&!e.plainLegend?`${a.label} `:``;lr(l,`${h}${An(e,p)}`,m)})}for(let e of De){let t=rr.get(`compare:${e.id}`);if(!t)continue;let n=e.values[o],r=Sn(e),i=E(r)?(n/r-1)*100:NaN;lr(t.values[0],`${e.name} ${Z(n)} ${c.formatPercent(i,J)}`,X(e.color))}},dr=e=>e.replace(/[&<>"]/g,e=>e===`&`?`&`:e===`<`?`<`:e===`>`?`>`:`"`),$=()=>{fe||We||(We=de?.requestAnimationFrame?de.requestAnimationFrame(mr):setTimeout(()=>mr(Date.now()),16))},fr=e=>{let t=!1;if(et){let n=Math.min(1,(e-et.start)/320),r=1-(1-n)**3;P=et.from+(et.to-et.from)*r,n>=1?et=null:t=!0}if($e){let n=Math.min(64,e-$e.t);$e.t=e;let r=P;P-=$e.v*n/N,$e.v*=Math.exp(-n/320),_n(),Math.abs($e.v)<.02||P===r?$e=null:t=!0}return t},pr=e=>{e.font=Wt(R.fontSize,500);let t=0;for(let n of L)for(let r of n.ticks)t=Math.max(t,e.measureText(kn(n,r)).width);let n=Y();n&&(t=Math.max(t,e.measureText(Hn(j.close[n-1])).width),D.countdown&&(t=Math.max(t,e.measureText(`00:00:00`).width)));let r=Math.max(g,Math.ceil(t+18));(r>Pe||r<Pe-12)&&(Pe=r)};function mr(e){if(We=0,fe||(Fe=O.clientWidth,Ie=O.clientHeight,Fe<=0||Ie<=0))return;let t=fr(typeof performance<`u`?performance.now():e??Date.now()),n=de?.devicePixelRatio||1;cn(),Pn(he,n),Pn(ge,n);let r=he.getContext(`2d`),i=ge.getContext(`2d`);I=Math.max(1,Ie-h);for(let e=0;e<2;e++){F=Math.max(1,Fe-Pe),hn(),tt&&yr(tt),_n(),ze=vn(),Dn(ze);for(let e of L){let t=f.scaleTicks(e.scale,e.id===y?44:30),n=e.study?.range,r=e.study?.bands;e.ticks=n&&r?[...r,(n[0]+n[1])/2].sort((e,t)=>e-t):t.scaled,e.step=t.step}let e=Pe;if(i&&pr(i),Pe===e)break}let a=ze;tt=null;let o=i?On(a,i):[];Nn(a,n),r&&(r.setTransform(n,0,0,n,0,0),r.clearRect(0,0,Fe,Ie),Bn(r,a,o)),i&&(i.setTransform(n,0,0,n,0,0),i.clearRect(0,0,Fe,Ie),er(i,a,o)),ur(),hr(),Jr(),Vr(),_r(),B&&!U&&Rr(B.x,B.y)!==bt&&(ii(B.x,B.y),$()),t&&$()}let hr=()=>{let e=Y(),t=L[0],n=e>0&&t&&Q(e-1)>F+N*.5;if(ve.style.display=n?`flex`:`none`,n&&t){ve.style.left=`${F-40}px`,ve.style.top=`${t.top+t.height-40}px`;let e=Nt().scrollToRealtime;ve.getAttribute(`aria-label`)!==e&&(ve.setAttribute(`aria-label`,e),ve.title=e)}},gr=()=>{let e=P-F/N;return{from:e,to:P,fromTime:qt(e),toTime:qt(P)}},_r=()=>{let e=Y();if(!e)return;let t=gr();(!xt||Math.abs(xt.from-t.from)>1e-6||Math.abs(xt.to-t.to)>1e-6)&&(xt=t,St||q(`visibleRangeChange`,t)),St=!1,t.from<10&&Tt!==j.time[0]&&(Tt=j.time[0],q(`historyRequest`,{firstTime:j.time[0],count:e}));let n=Gn(),r=n&&(B||V!==null)?n:null,i=r?`${r.index}|${r.price}|${r.pane.id}`:``;if(i!==wt){if(wt=i,!r)q(`crosshairMove`,null);else{let t={index:r.index,time:qt(r.index),bar:r.index>=0&&r.index<e?p.readBar(j,r.index):null,price:r.price,pane:r.pane.id,x:Q(r.index),y:r.y};q(`crosshairMove`,t)}}},vr=e=>{let t=O.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}},yr=e=>{N=F/(e.to-e.from),P=e.to,_n()},br=(e,t)=>{let n=Y();n&&fn()&&(e=Math.min(F,Q(n-1)));let r=Kt(e);N*=t,_n(),P=r+(F-e)/N,_n(),$e=null,et=null,$()},xr=(e,t,n)=>{let r=Math.round(Kt(e));return{time:qt(r),price:f.valueAt(n.scale,t)}},Sr=(e,t)=>{e!==st&&(st=e,G=null,ut=0,t&&q(`drawingToolChange`,e),$())},Cr=e=>{e!==ct&&(ct=e,gt=!1,q(`drawingSelect`,e),$())},wr=()=>({canUndo:it.length>0,canRedo:at.length>0}),Tr=()=>{let e=wr(),t=`${e.canUndo}|${e.canRedo}`;t!==ot&&(ot=t,q(`undoChange`,e))},Er=(e,t=!0)=>{e!==rt&&(it.push(rt),it.length>ee&&it.shift(),at.length=0,rt=e),W=e,t&&(nt=e,q(`drawingsChange`,e)),ct&&!e.some(e=>e.id===ct)&&Cr(null),Tr(),$()},Dr=e=>{rt=e,W=e,nt=e,G=null,ct&&!e.some(e=>e.id===ct)&&Cr(null),q(`drawingsChange`,e),Tr(),$()},Or=()=>{let e=it.pop();e&&(mt&&Ur(!1),at.push(rt),Dr(e))},kr=()=>{let e=at.pop();e&&(it.push(rt),Dr(e))},Ar=(e,t)=>{W.some(t=>t.id===e)&&Er(W.map(n=>n.id===e?{...n,...t,id:n.id,type:n.type}:n))},jr=e=>{W.some(t=>t.id===e)&&(ct===e&&Cr(null),Er(W.filter(t=>t.id!==e)))},Mr=(e,t,n)=>{let r=f.yOf(t.scale,e.price),i=Math.max(12,t.height*.07),a=f.valueAt(t.scale,r+(n?-2:2)*i),o=f.valueAt(t.scale,r+(n?1:-1)*i),s=Math.max(6,Math.round(F*.16/N)),c=qt(Math.round(an(e.time))+s);return[e,{time:c,price:Xn(a)},{time:c,price:Xn(o)}]},Nr=()=>{if(!G)return;let e=G;G=null,ut=0,Er([...W,e]),Cr(e.id),D.keepDrawingMode||Sr(`cursor`,!0),e.type===`text`&&Hr(e.id,!0)},Pr=()=>{if(!G)return;if(ut--,ut<=0){Nr();return}let e=G.points[G.points.length-1];e&&(G={...G,points:[...G.points,e]})},Fr=(e,t)=>{let n=Kn(dt);!G||!n||ut<=0||(G={...G,points:[...G.points.slice(0,-1),xr(e,t,n)]})},Ir=(e,t)=>{let n=L[0];if(!n||e>F)return null;for(let e of D.priceLines??[])if(e.draggable&&Math.abs(f.yOf(n.scale,Wn(e))-t)<=5)return e;return null},Lr=(e,t)=>{if(e>F)return null;let n=gn(t),r=qn(n);if(!n||!r)return null;for(let i=W.length-1;i>=0;i--){let a=W[i];if(!a||(a.pane??y)!==n.id)continue;let o=s.hitDrawing(a,r,{x:e,y:t},6,pt.get(a.id));if(o)return{drawing:a,hit:o,pane:n}}return null},Rr=(e,t)=>yt.findIndex(n=>e>=n.x&&e<=n.x+n.w&&t>=n.y&&t<=n.y+n.h),zr=e=>{for(let t=1;t<L.length;t++)if(Math.abs(L[t].top-e)<=4)return t;return-1},Br=()=>{A.style.height=`auto`,A.style.height=`${Math.max(28,A.scrollHeight+2)}px`},Vr=()=>{if(!mt)return;let e=mt.id,t=W.find(t=>t.id===e),n=t?Kn(t.pane):null,r=t?.points[0];if(!t||!n||!r)return;let i=Q(an(r.time)),a=f.yOf(n.scale,r.price);A.style.left=`${T(i,2,Math.max(2,F-160))}px`,A.style.top=`${T(a,2,Math.max(2,I-40))}px`};function Hr(e,t){let n=W.find(t=>t.id===e);n&&!n.locked&&(mt={id:e,created:t},A.value=t?``:n.text??``,A.placeholder=Nt().text,A.setAttribute(`aria-label`,Nt().editText),A.style.display=`block`,Vr(),Br(),A.focus(),A.select(),$())}function Ur(e){if(!mt)return;let{id:t,created:n}=mt;mt=null,A.style.display=`none`;let r=A.value.replace(/\s+$/,``),i=W.find(e=>e.id===t);if(i&&n&&(!e||!r)){let e=it.pop();Dr(e??W.filter(e=>e.id!==t))}else if(i&&e&&r!==(i.text??``)){if(n){let e=W.map(e=>e.id===t?{...e,text:r}:e);rt=e,W=e,nt=e,q(`drawingsChange`,e)}else Ar(t,{text:r})}(ue.activeElement===A||ue.activeElement===ue.body)&&O.focus(),$()}A.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),Ur(!0)):e.key===`Escape`&&(e.preventDefault(),Ur(!1))}),A.addEventListener(`input`,Br),A.addEventListener(`blur`,()=>Ur(!0)),A.addEventListener(`pointerdown`,e=>e.stopPropagation()),A.addEventListener(`dblclick`,e=>e.stopPropagation());let Wr=(e,t=``,n=1.5)=>`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="${n}" stroke-linecap="round" stroke-linejoin="round"${t?` stroke-dasharray="${t}"`:``} aria-hidden="true"><path d="${e}"/></svg>`,Gr=(e,t,n,r)=>{let i=ue.createElement(`button`);return i.type=`button`,i.setAttribute(`aria-label`,e),i.title=e,r!==void 0&&i.setAttribute(`aria-pressed`,String(r)),i.innerHTML=t,i.addEventListener(`click`,e=>{e.stopPropagation(),n()}),i},Kr=()=>{let e=ue.createElement(`span`);return e.className=`sep`,e},qr=e=>{k.textContent=``;let t=Nt();k.setAttribute(`aria-label`,t.lineStyle);let n=e.id,r=[];if(!e.locked){let i=X(e.color??C),a=Gr(t.color,`<span style="display:block;width:14px;height:14px;border-radius:50%;background:${i};box-shadow:inset 0 0 0 1px rgba(127,127,127,.35)"></span>`,()=>{gt=!gt,ht=``,Jr()});a.setAttribute(`aria-expanded`,String(gt)),r.push(a);let o=e.lineWidth??1.5,c=[1,2,3,4];r.push(Gr(`${t.lineWidth}: ${o}px`,`${Wr(`M2 8h12`,``,Math.min(4,o))}<span style="font-size:11px;margin-left:3px">${o}</span>`,()=>Ar(n,{lineWidth:c.find(e=>e>o)??c[0]})));let l=e.lineStyle??`solid`;r.push(Gr(t.lineStyle,Wr(`M2 8h12`,l===`dashed`?`3.5 2.5`:l===`dotted`?`0.1 3`:``,l===`dotted`?2.2:1.6),()=>Ar(n,{lineStyle:w[(w.indexOf(l)+1)%w.length]}))),s.isFillable(e.type)&&r.push(Gr(t.fill,`<svg width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><rect x="2.5" y="3.5" width="11" height="9" rx="1.5" fill="currentColor" fill-opacity=".3" stroke="currentColor" stroke-width="1.3"/></svg>`,()=>Ar(n,{fill:e.fill===!1}),e.fill!==!1)),e.type===`text`&&r.push(Gr(t.editText,Wr(`M3 13h3l7-7-3-3-7 7zM9 4l3 3`),()=>Hr(n,!1))),r.push(Kr())}if(r.push(Gr(t.lock,e.locked?Wr(`M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 4 0v2`):Wr(`M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 3.8-.9`),()=>Ar(n,{locked:!e.locked}),!!e.locked)),!e.locked){let e=Gr(t.remove,Wr(`M3 4.5h10M6.5 4.5V3h3v1.5M4.5 4.5l.7 8.5h5.6l.7-8.5`),()=>jr(n));e.style.color=`var(--danger-color, #f23645)`,r.push(e)}if(k.append(...r),gt&&!e.locked){let r=pe(`div`,{position:`absolute`,left:`0`,top:`calc(100% + 4px)`,display:`flex`,gap:`2px`,padding:`4px`,borderRadius:`8px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 85%, transparent)`,background:`var(--surface-elevated-color, var(--surface-color, #fff))`,boxShadow:`0 8px 24px -8px rgba(15, 23, 42, 0.35)`});for(let i of te){let a=Gr(`${t.color} ${i}`,`<span style="display:block;width:16px;height:16px;border-radius:50%;background:${i}"></span>`,()=>{gt=!1,Ar(n,{color:i})},(e.color??``).toLowerCase()===i);r.appendChild(a)}k.appendChild(r)}};function Jr(){let e=ct?W.find(e=>e.id===ct):void 0,t=e?Kn(e.pane):null,n=qn(t),r=U?.kind===`drawing`&&U.moved;if(!e||!t||!n||D.drawingToolbar===!1||mt||r||G){k.style.display=`none`,ht=``,gt=!1;return}let i=[e.id,e.color,e.lineWidth,e.lineStyle,e.fill,e.locked,gt,J,Ve].join(`|`);i!==ht&&(ht=i,qr(e)),k.style.display=`flex`;let a=s.handlePoints(e,n,pt.get(e.id)),o=pt.get(e.id);e.type===`text`&&o&&a.push({x:o.x+o.w,y:o.y+o.h});let c=1/0,l=-1/0,u=1/0,d=-1/0;for(let e of a)c=Math.min(c,T(e.x,0,F)),l=Math.max(l,T(e.x,0,F)),u=Math.min(u,T(e.y,t.top,t.top+t.height)),d=Math.max(d,T(e.y,t.top,t.top+t.height));e.type===`horizontalLine`&&(c=F*.35,l=F*.65);let f=k.offsetWidth||200,p=k.offsetHeight||34,m=T((c+l)/2-f/2,4,Math.max(4,F-f-4)),h=u-p-14;h<4&&(h=d+32),k.style.left=`${Math.round(m)}px`,k.style.top=`${Math.round(T(h,4,Math.max(4,I-p-4)))}px`}k.addEventListener(`pointerdown`,e=>e.stopPropagation()),k.addEventListener(`dblclick`,e=>e.stopPropagation()),k.addEventListener(`pointermove`,e=>e.stopPropagation()),k.addEventListener(`pointerenter`,()=>{B=null,lt=null,O.style.cursor=`default`,$()});let Yr=()=>({active:!!K,picking:Dt,playing:!!K?.playing,speed:K?.speed??Ot,index:Y(),total:K?K.source.length:Y(),time:Y()?j.time[Y()-1]:NaN}),Xr=()=>q(`replayChange`,Yr()),Zr=(e,t)=>({time:e.time.subarray(0,t),open:e.open.subarray(0,t),high:e.high.subarray(0,t),low:e.low.subarray(0,t),close:e.close.subarray(0,t),volume:e.volume.subarray(0,t)}),Qr=(e,t)=>{let n=e.hasVolume;p.setBars(j,Zr(e,t)),j.hasVolume=n,xe=p.createPyramid(),we=p.createPyramid(),Ce=0,Tt=NaN,ln(0)},$r=()=>{K?.timer&&clearInterval(K.timer),K&&(K.timer=null,K.playing=!1)},ei=e=>{if(Dt=!1,!K){if(!Y())return;let e=p.createStore();p.setBars(e,Zr(j,Y())),e.hasVolume=j.hasVolume,K={source:e,playing:!1,speed:Ot,timer:null}}$r();let t=T(Math.round(e)+1,1,K.source.length);Qr(K.source,t),P=t-1+(D.rightOffset??8);for(let e of Le.values())e.auto=!0;Xr()},ti=e=>{if(!K)return;let t=K.source,n=Y(),r=fn(),i=-1;for(let n=0;n<e&&Y()<t.length;n++){let e=p.updateBar(j,p.readBar(t,Y()));i<0&&(i=e)}j.hasVolume=t.hasVolume,i>=0&&(r&&(P+=Y()-n),ln(i)),Y()>=t.length&&$r(),Xr()},ni=e=>{if(!K)return;if(e!==void 0&&e>0&&(K.speed=Ot=e),$r(),Y()>=K.source.length){Xr();return}let t=Math.max(16,1e3/K.speed),n=Math.max(1,Math.round(K.speed*t/1e3));K.playing=!0,K.timer=setInterval(()=>ti(n),t),Xr()},ri=e=>{let t=Dt;if(Dt=!1,!K){t&&(Xr(),$());return}$r();let n=K.source;K=null,e&&Qr(n,n.length),Xr()},ii=(e,t)=>{let n=`crosshair`;vt=null;let r=null,i=U?-1:Rr(e,t);if(i!==bt&&(bt=i),U?.kind===`pan`&&U.moved)n=`grabbing`;else if(i>=0)n=`pointer`;else if(Dt&&e<=F&&t<=I)n=`pointer`;else if(zr(t)>0)n=`row-resize`;else if(e>F&&t<I)n=`ns-resize`;else if(t>I)n=`ew-resize`;else if(st===`cursor`){let i=Ir(e,t);if(i)n=`ns-resize`,vt=i.id;else{let i=Lr(e,t);i&&(r=i.drawing.id,n=i.drawing.locked?`pointer`:i.hit.part===`handle`?`move`:`pointer`)}}r!==lt&&(lt=r),O.style.cursor!==n&&(O.style.cursor=n)},ai=e=>{if(e.button!==0&&e.pointerType===`mouse`)return;let{x:t,y:n}=vr(e);if(B={x:t,y:n},V=null,H&&hi(!0),$e=null,et=null,mt&&Ur(!0),gt&&(gt=!1,$()),e.pointerType===`touch`&&(Ze.set(e.pointerId,{x:t,y:n}),Ze.size===2)){let[e,t]=[...Ze.values()];Qe={distance:Math.hypot(e.x-t.x,e.y-t.y),spacing:N},U=null;return}try{O.setPointerCapture(e.pointerId)}catch{}let r=Rr(t,n),i=yt[r];if(i){U={kind:`button`,action:i.action};return}if(Dt&&t<=F&&n<=I){ei(Math.min(Y()-1,Math.round(Kt(t))));return}let a=zr(n);if(a>0){let e=L[a-1],t=L[a];U={kind:`separator`,index:a,y:n,above:e.height,below:t.height};return}if(t>F&&n<I){let e=gn(n);e&&(U={kind:`axisY`,pane:e,y:n,min:e.scale.min,max:e.scale.max});return}if(n>I){U={kind:`axisX`,x:t,spacing:N};return}let o=gn(n);if(st!==`cursor`&&o&&Y()){if(G){Fr(t,n),Pr(),U=null,$();return}let e=st,r=s.isPosition(e),i=r?L[0]:o,a=xr(t,T(n,i.top,i.top+i.height),i),c=s.anchorCount(e);if(dt=i.id,G={id:`drawing-${Date.now().toString(36)}-${++ft}`,type:e,points:r?Mr({...a,price:Xn(a.price)},i,e===`longPosition`):c===1?[a]:[a,a],...i.id===y?{}:{pane:i.id}},c===1){Nr();return}ut=c-1,U={kind:`create`,pane:i,x:t,y:n,moved:!1},$();return}if(st===`cursor`){let e=Ir(t,n);if(e){U={kind:`order`,line:e,startPrice:e.price};return}let r=Lr(t,n);if(r){Cr(r.drawing.id),r.drawing.locked||(U={kind:`drawing`,id:r.drawing.id,pane:r.pane,handle:r.hit.part===`handle`?r.hit.index:-1,x:t,y:n,original:r.drawing,moved:!1});return}}U={kind:`pan`,x:t,y:n,right:P,pane:o,moved:!1,lastX:t,lastY:n,lastT:e.timeStamp,velocity:0}},oi=e=>{let{x:t,y:n}=vr(e);if(B={x:t,y:n},e.pointerType===`touch`&&Ze.has(e.pointerId)&&(Ze.set(e.pointerId,{x:t,y:n}),Qe&&Ze.size===2)){let[e,t]=[...Ze.values()],n=Math.hypot(e.x-t.x,e.y-t.y),r=Y(),i=r&&fn()?Math.min(F,Q(r-1)):(e.x+t.x)/2,a=Kt(i);N=Qe.spacing*n/Math.max(1,Qe.distance),_n(),P=a+(F-i)/N,_n(),$();return}let r=U;if(!r){G&&Fr(t,n),ii(t,n),$();return}switch(r.kind){case`pan`:{let i=t-r.x;if(!r.moved&&Math.hypot(i,n-r.y)<3)break;r.moved=!0,P=r.right-i/N,r.pane&&!r.pane.scale.auto&&f.panScale(r.pane.scale,n-r.lastY),r.lastY=n;let a=Math.max(1,e.timeStamp-r.lastT);r.velocity=.6*((t-r.lastX)/a)+.4*r.velocity,r.lastX=t,r.lastT=e.timeStamp,_n(),O.style.cursor=`grabbing`;break}case`axisY`:{let e=r.pane.scale;e.min=r.min,e.max=r.max,f.zoomScale(e,Math.exp((n-r.y)*.006));break}case`axisX`:{let e=P;N=r.spacing*Math.exp((t-r.x)*.006),_n(),P=e,_n();break}case`separator`:{let e=n-r.y,t=L[r.index-1],i=L[r.index];if(!t||!i)break;let a=r.above+r.below,o=T(r.below-e,v,a-v);Re.set(i.id,o),t.id!==y&&Re.set(t.id,a-o);break}case`order`:_t.set(r.line.id,Xn(f.valueAt(L[0].scale,n)));break;case`drawing`:{if(!r.moved&&Math.hypot(t-r.x,n-r.y)<3)break;r.moved=!0;let e=r.pane.scale,i;if(r.handle>=0)i=s.moveHandle(r.original,r.handle,xr(t,n,r.pane));else{let a=Math.round(Kt(t)-Kt(r.x)),o=f.scaledAt(e,n)-f.scaledAt(e,r.y);i=r.original.points.map(t=>({time:qt(Math.round(an(t.time))+a),price:f.fromScaled(e,f.toScaled(e,t.price)+o)}))}W=W.map(e=>e.id===r.id?{...e,points:i}:e);break}case`create`:Math.hypot(t-r.x,n-r.y)>=4&&(r.moved=!0),Fr(t,n);break;default:ii(t,n)}$()},si=e=>{Ze.delete(e.pointerId),Ze.size<2&&(Qe=null);let t=U;U=null;let{x:n,y:r}=vr(e);if(e.pointerType===`touch`&&(B=null),!t){$();return}switch(t.kind){case`pan`:if(t.moved)D.kineticScroll!==!1&&e.timeStamp-t.lastT<60&&Math.abs(t.velocity)>.25&&($e={v:t.velocity,t:typeof performance<`u`?performance.now():Date.now()});else{ct&&Cr(null);let e=gn(r);e&&n<=F&&q(`click`,{index:Math.round(Kt(n)),time:qt(Math.round(Kt(n))),price:f.valueAt(e.scale,r),pane:e.id})}break;case`order`:{let e=_t.get(t.line.id);e!==void 0&&e!==t.startPrice?q(`orderMove`,{id:t.line.id,price:e,previousPrice:t.startPrice,line:t.line}):_t.delete(t.line.id);break}case`drawing`:t.moved&&Er(W);break;case`create`:t.moved&&Pr();break;case`button`:Rr(n,r)>=0&&t.action()}ii(n,r),$()},ci=e=>{U||e.pointerType===`touch`||(B=null,lt=null,vt=null,$())},li=e=>{let t=D.wheel??`zoom`;if(t===`none`)return;let{x:n}=vr(e),r=e.deltaMode===1?16:e.deltaMode===2?F:1,i=e.deltaX*r,a=e.deltaY*r,o=e.ctrlKey||e.metaKey;if(t===`modifier`&&!o&&Math.abs(i)<=Math.abs(a))return;if(e.preventDefault(),V=null,Math.abs(i)>Math.abs(a)||e.shiftKey){P+=(Math.abs(i)>Math.abs(a)?i:a)/N,_n(),$e=null,$();return}let s=Math.exp(-a*(e.ctrlKey?.01:.0015));br(Math.min(n,F),s)},ui=e=>{let{x:t,y:n}=vr(e),r=st===`cursor`?Lr(t,n):null;if(r?.drawing.type===`text`){Hr(r.drawing.id,!1);return}if(t>F&&n<I){let e=gn(n);e&&(e.scale.auto=!0)}else if(n>I)N=D.barSpacing??8,Oi.scrollToRealtime(!0);else for(let e of Le.values())e.auto=!0;$()},di=e=>{if(e<0||e>=Y())return;let t=on(),n=Nt();ye.textContent=d.fill(n.announcement,{time:c.formatCrosshairTime($t(j.time[e]),Ut(),J),open:Z(t.open[e]),high:Z(t.high[e]),low:Z(t.low[e]),close:Z(t.close[e])})},fi=e=>{ye.textContent=e},pi=()=>(D.priceLines??[]).filter(e=>e.draggable||e.cancellable),mi=e=>{let t=re[e.kind??`line`];return e.title??(t?Nt()[t]:``)},hi=e=>{H?.kind===`move`&&e&&(H.override===void 0?_t.delete(H.id):_t.set(H.id,H.override)),H=null},gi=e=>{let t=Y();if(!D.orderEntry||!t||e.altKey||e.ctrlKey||e.metaKey)return!1;let n=Nt(),r=e.key.length===1?e.key.toLowerCase():e.key,i=(e,t)=>d.fill(e===`buy`?n.buyLimit:n.sellLimit,{price:Z(t)});if(r===`b`||r===`s`){hi(!0);let e=Gn(),a=e&&e.pane.id===y&&E(e.price)?e.price:j.close[t-1],o=r===`b`?`buy`:`sell`;return H={kind:`create`,side:o,price:Xn(a)},fi(`${i(o,H.price)}. ${n.orderHint}`),!0}if(r===`o`){let t=pi();if(!t.length)return!1;let r=H?.kind===`move`?H.id:null;hi(!0);let i=t.findIndex(e=>e.id===r),a=e.shiftKey?-1:1,o=t[i<0?a>0?0:t.length-1:(i+a+t.length)%t.length];if(!o)return!1;H={kind:`move`,id:o.id,start:Wn(o),override:_t.get(o.id)};let s=d.fill(n.orderLine,{title:mi(o),price:Z(Wn(o))});return fi([s,o.draggable?n.orderHint:``,o.cancellable?n.orderCancelHint:``].filter(Boolean).join(`. `)),!0}if(!H)return!1;let a=H.kind===`move`?H.id:null,o=(D.priceLines??[]).find(e=>e.id===a);switch(e.key){case`ArrowUp`:case`ArrowDown`:{let t=10**-zt()*(e.shiftKey?10:1)*(e.key===`ArrowUp`?1:-1);if(H.kind===`create`)H.price=Xn(H.price+t),fi(i(H.side,H.price));else if(o?.draggable){let e=Xn(Wn(o)+t);_t.set(o.id,e),fi(Z(e))}return!0}case`Enter`:{if(H.kind===`create`){let{price:e,side:t}=H;return hi(!1),q(`orderCreate`,{price:e,side:t}),fi(d.fill(n.orderPlaced,{price:Z(e)})),!0}let e=H.start;hi(!1);let t=o?_t.get(o.id):void 0;return o&&t!==void 0&&t!==e&&(q(`orderMove`,{id:o.id,price:t,previousPrice:e,line:o}),fi(d.fill(n.orderPlaced,{price:Z(t)}))),!0}case`Escape`:return H.kind===`create`?fi(n.orderCancelled):o&&fi(d.fill(n.orderLine,{title:mi(o),price:Z(H.start)})),hi(!0),!0;case`Delete`:case`Backspace`:return o?.cancellable&&(hi(!0),q(`orderCancel`,{id:o.id,line:o}),fi(n.orderCancelled)),!0;default:return!1}};O.addEventListener(`pointerdown`,ai),O.addEventListener(`pointermove`,oi),O.addEventListener(`pointerup`,si),O.addEventListener(`pointercancel`,si),O.addEventListener(`pointerleave`,ci),O.addEventListener(`wheel`,li,{passive:!1}),O.addEventListener(`dblclick`,ui),O.addEventListener(`keydown`,e=>{if(e.target===O&&gi(e)){e.preventDefault(),$();return}if((e.ctrlKey||e.metaKey)&&!e.altKey){let t=e.key.toLowerCase();(t===`z`||t===`y`)&&(t===`y`||e.shiftKey?kr():Or(),e.preventDefault());return}let t=Y(),n=Math.max(1,Math.floor(F/N/2)),r=e=>{V=T(e,0,Math.max(0,t-1));let n=Q(V);n<N&&(P+=(N-n)/N+1),n>F-N&&(P-=(n-F+N)/N-1),_n(),di(V)},i=V??Math.min(t-1,Math.round(P));switch(e.key){case`ArrowLeft`:r(i-(e.shiftKey?10:1));break;case`ArrowRight`:r(i+(e.shiftKey?10:1));break;case`PageUp`:r(i-n);break;case`PageDown`:r(i+n);break;case`Home`:r(0);break;case`End`:r(t-1),Oi.scrollToRealtime(!0);break;case`+`:case`=`:case`ArrowUp`:br(V===null?F:Q(V),1.2);break;case`-`:case`_`:case`ArrowDown`:br(V===null?F:Q(V),1/1.2);break;case`Escape`:gt?gt=!1:Dt?ri(!1):G?(G=null,ut=0):st===`cursor`?ct?Cr(null):V=null:Sr(`cursor`,!0);break;case`Delete`:case`Backspace`:{let e=W.find(e=>e.id===ct);if(!e||e.locked)return;jr(e.id);break}default:return}e.preventDefault(),$()}),O.addEventListener(`focus`,()=>{let e=!0;try{e=O.matches(`:focus-visible`)}catch{}e&&(O.style.boxShadow=`inset 0 0 0 2px ${t.toCss(R.primary,.6)}`)}),O.addEventListener(`blur`,()=>{O.style.boxShadow=``,H&&(hi(!0),$()),V!==null&&(V=null,$())}),ve.addEventListener(`pointerdown`,e=>e.stopPropagation()),ve.addEventListener(`click`,()=>Oi.scrollToRealtime(!0));let _i=typeof ResizeObserver==`function`?new ResizeObserver(()=>$()):null;_i?.observe(O);let vi=()=>{if(fe)return;let e=o.readTheme(O);o.themeColorsChanged(R,e)&&Ve++,R=e,tr=``,$()},yi=o.watchTheme(vi),bi=null;typeof MutationObserver==`function`&&O.ownerDocument&&(bi=new MutationObserver(()=>{if(D.locale)return;let e=J;Mt(),J!==e&&(tr=``,He++,Ti(),$())}),bi.observe(O.ownerDocument.documentElement,{attributes:!0,attributeFilter:[`lang`]}));let xi=()=>{if(fe)return null;We&&(de?.cancelAnimationFrame?de.cancelAnimationFrame(We):clearTimeout(We),We=0),mr();let e=de?.devicePixelRatio||1,n=ue.createElement(`canvas`);n.width=Math.max(1,Math.round(Fe*e)),n.height=Math.max(1,Math.round(Ie*e));let r=n.getContext(`2d`);if(!r)return null;r.fillStyle=t.toCss(R.background),r.fillRect(0,0,n.width,n.height);try{r.drawImage(he,0,0),z&&r.drawImage(z.canvas,0,0,Math.round(F*e),Math.round(I*e)),r.drawImage(ge,0,0)}catch{}r.setTransform(e,0,0,e,0,0);let i=O.getBoundingClientRect(),a=de??null;return _e.querySelectorAll(`span, button`).forEach(e=>{let n=e.textContent??``;if(e.children.length||!n.trim()||!a)return;let o=e.getBoundingClientRect(),s=a.getComputedStyle(e);r.font=`${s.fontWeight} ${s.fontSize} ${s.fontFamily}`,r.fillStyle=s.color||t.toCss(R.text),r.textAlign=`left`,r.textBaseline=`middle`,r.fillText(n,o.left-i.left,o.top-i.top+o.height/2)}),n},Si=!1,Ci=()=>{let e=ue.fullscreenElement===O;e!==Si&&(Si=e,O.style.background=e?t.toCss(R.background):``,q(`fullscreenChange`,e),$())};ue.addEventListener(`fullscreenchange`,Ci);let wi=async(t=new Set)=>{let n=++Ue,r=await i.createRenderer(D.renderer??`auto`,()=>e.createDataCanvas(ue),e=>{fe||z?.kind!==e||(z.destroy(),z.canvas.remove(),z=null,wi(new Set([...t,e])))},t);if(fe||n!==Ue){r?.destroy();return}z&&(z.destroy(),z.canvas.remove()),z=r,Ke=``,r&&(O.dataset.renderer=r.kind,O.insertBefore(r.canvas,ge),q(`renderer`,r.kind)),Ye(r?.kind??null),$()},Ti=()=>{let e=D.symbol??``;O.setAttribute(`aria-label`,D.ariaLabel??d.fill(Nt().chart,{symbol:e}).trim());let t=!!D.countdown&&D.lastPriceLine!==!1;t&&!Et&&(Et=setInterval($,1e3)),!t&&Et&&(clearInterval(Et),Et=null)},Ei=e=>{let t=D;Mt();let n=t.timeZone&&c.isTimeZone(t.timeZone)?t.timeZone:void 0,r=!!e&&(t.utcOffset!==e.utcOffset||n!==Xt);if(Xt=n,(!e||t.indicators!==e.indicators)&&un(),r)for(let e of M)Te.set(e,0);if((!e||t.compare!==e.compare)&&dn(),t.bars&&(!e||t.bars!==e.bars)?(K&&ri(!1),e?mn(t.bars):pn(t.bars)):!t.bars&&e?.bars&&(K&&ri(!1),pn([])),e&&t.barSpacing!==e.barSpacing&&t.barSpacing&&(N=t.barSpacing),e&&t.scaleMode!==e.scaleMode){let e=Le.get(y);e&&(e.auto=!0)}if(t.drawings&&t.drawings!==nt&&(!e||t.drawings!==e.drawings)&&(e?Er(t.drawings,!1):W=rt=t.drawings),e&&(t.drawingMode??`cursor`)!==(e.drawingMode??`cursor`)&&Sr(t.drawingMode??`cursor`,!1),e&&t.priceLines!==e.priceLines&&(_t.clear(),H?.kind===`move`)){let e=H.id,t=pi().find(t=>t.id===e);H=t?{kind:`move`,id:e,start:t.price,override:void 0}:null}t.orderEntry?O.setAttribute(`aria-keyshortcuts`,ae):(O.removeAttribute(`aria-keyshortcuts`),H&&hi(!0)),e&&t.chartStyle!==e.chartStyle&&(Ce=Math.min(Ce,0)),He++,Ti(),$()};Ei(null),wi();let Di=a.followDefaultRenderer(()=>D.renderer,()=>void wi()),Oi={setOptions(e){if(fe)return;let t=D;D={...e},Ei(t),(e.renderer??`auto`)!==(t.renderer??`auto`)&&wi()},setBars(e){K&&ri(!1),pn(e)},update(e){if(K){p.updateBar(K.source,e);return}let t=Y(),n=fn(),r=p.updateBar(j,e);r<0||(Y()>t&&n&&(P+=Y()-t),ln(r))},appendBars(e){if(K){p.appendBars(K.source,e);return}let t=Y(),n=fn(),r=p.appendBars(j,e);r<0||(n&&(P+=Y()-t),ln(r))},prependBars(e){K&&p.prependBars(K.source,e);let t=p.prependBars(j,e);t&&(xe=p.createPyramid(),we=p.createPyramid(),Ce=0,P+=t,V!==null&&(V+=t),ln(0))},getBarCount:()=>Y(),getBar:e=>e>=0&&e<Y()?p.readBar(j,Math.floor(e)):null,scrollToRealtime(e=!0){let t=Y()-1+(D.rightOffset??8);$e=null,e&&E(P)&&Math.abs(t-P)*N<F*6?et={from:P,to:t,start:typeof performance<`u`?performance.now():Date.now()}:P=t,$()},fitContent(){let e=Y();e&&Oi.setVisibleRange({from:-.5,to:e-1+(D.rightOffset??8)})},getVisibleRange:()=>gr(),setVisibleRange({from:e,to:t}){t>e&&($e=null,et=null,tt={from:e,to:t},yr(tt),$())},getVisibleTimeRange(){let e=gr();return{from:Jt(e.from),to:Jt(e.to)}},setVisibleTimeRange({from:e,to:t}){Y()&&t>e&&Oi.setVisibleRange({from:Yt(e),to:Yt(t)})},setCrosshair(e,t){Ct=e===null||!E(e)?null:{time:e,price:t??NaN},$()},setScaleMode(e){D={...D,scaleMode:e};let t=Le.get(y);t&&(t.auto=!0),$()},resetPriceScales(){for(let e of Le.values())e.auto=!0;$()},setDrawingTool:e=>Sr(e,!0),getDrawingTool:()=>st,getDrawings:()=>W,setDrawings(e){Er(e,!1)},removeDrawing:jr,updateDrawing:Ar,selectDrawing:e=>Cr(e),undo:Or,redo:kr,getUndoState:wr,startReplay(e){if(!Y()&&!K)return;if(e===void 0){K&&ri(!0),Dt=!0,Xr(),$();return}let t=K?K.source:j;ei(p.indexOfTime(t.time,t.length,e))},replayStep:(e=1)=>ti(Math.max(1,Math.floor(e))),replayPlay:e=>ni(e),replayPause(){K&&($r(),Xr())},stopReplay:()=>ri(!0),getReplayState:Yr,toDataURL(e=`image/png`,t){return xi()?.toDataURL(e,t)??``},toBlob(e=`image/png`,t){let n=xi();return new Promise(r=>{!n||typeof n.toBlob!=`function`?r(null):n.toBlob(r,e,t)})},async requestFullscreen(){typeof O.requestFullscreen==`function`&&await O.requestFullscreen()},async exitFullscreen(){ue.fullscreenElement===O&&typeof ue.exitFullscreen==`function`&&await ue.exitFullscreen()},isFullscreen:()=>ue.fullscreenElement===O,setIndicatorVisible(e,t){Ee.set(e,t),$()},getRenderer:()=>z?.kind??null,ready:Xe,refreshTheme:vi,resize:()=>$(),on(e,t){let n=At.get(e);return n||At.set(e,n=new Set),n.add(t),()=>n.delete(t)},destroy(){fe||(fe=!0,We&&(de?.cancelAnimationFrame?de.cancelAnimationFrame(We):clearTimeout(We)),Et&&clearInterval(Et),K?.timer&&clearInterval(K.timer),ue.removeEventListener(`fullscreenchange`,Ci),_i?.disconnect(),Di(),yi(),bi?.disconnect(),O.removeEventListener(`wheel`,li),z?.destroy(),z=null,Ye(null),At.clear(),O.remove())}};return ne.set(Oi,{setTimeRange(e){St=!0,Oi.setVisibleTimeRange(e)}}),Oi};exports.createTradingChart=ce,exports.syncHooks=ne;
|
|
1
|
+
const e=require("../dom.cjs"),t=require("../color.cjs"),n=require("../locale.cjs"),r=require("../scale.cjs"),i=require("../renderers/detect.cjs"),a=require("../renderers/follow.cjs"),o=require("../theme.cjs"),s=require("./drawings.cjs"),c=require("./format.cjs"),l=require("./geometry.cjs"),u=require("./indicators.cjs"),d=require("./labels.cjs"),f=require("./layout.cjs"),p=require("./scale.cjs"),m=require("./store.cjs"),h=require("./studies.cjs");var g=28,_=60,v=60,y=48,b=`price`,x=`var(--success-color, #089981)`,S=`var(--danger-color, #f23645)`,C=`var(--warning-color, #f59e0b)`,w=`var(--primary-color, #2962ff)`,T=100,ee=[`#2962ff`,`#089981`,`#f23645`,`#f59e0b`,`#a855f7`,`#0ea5e9`,`#ec4899`,`#787b86`],te=[`solid`,`dashed`,`dotted`],ne=new WeakMap,re={order:`limit`,position:`position`,takeProfit:`takeProfit`,stopLoss:`stopLoss`,alert:`alert`},E=(e,t,n)=>e<t?t:e>n?n:e,ie=e=>{let n=t.parseColor(e);return n&&t.luminance(n)>.5?`#0b0e11`:`#fff`},D=Number.isFinite,ae=`B S Alt+B Alt+S O Shift+O ArrowUp ArrowDown Shift+ArrowUp Shift+ArrowDown Enter Escape Delete`,oe=(e,t,n)=>D(n)?e===`buy`?t<=n?`limit`:`stop`:t>=n?`limit`:`stop`:`limit`,se={minWidth:`0`,maxWidth:`100%`,overflow:`hidden`,textOverflow:`ellipsis`},ce=`display:inline-flex;gap:3px;max-width:100%;overflow:hidden;text-overflow:ellipsis`,le=(le,ue={})=>{let O=le.ownerDocument,de=O.defaultView,k={...ue},A=!1,fe=(t,n)=>e.styleElement(O.createElement(t),n),j=fe(`div`,{position:`relative`,width:`100%`,height:`100%`,minHeight:`0`,overflow:`hidden`,outline:`none`,userSelect:`none`,touchAction:`pan-y`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`,cursor:`crosshair`});j.className=`minerva-trading-chart`,j.tabIndex=0,j.setAttribute(`role`,`figure`),j.setAttribute(`aria-roledescription`,`chart`);let pe=e=>fe(e,{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`}),me=pe(`canvas`),he=pe(`canvas`);me.setAttribute(`aria-hidden`,`true`),he.setAttribute(`aria-hidden`,`true`);let ge=pe(`div`);ge.style.right=`0`,ge.style.bottom=`0`;let _e=fe(`button`,{position:`absolute`,display:`none`,alignItems:`center`,justifyContent:`center`,width:`28px`,height:`28px`,padding:`0`,borderRadius:`50%`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 80%, transparent)`,background:`var(--surface-elevated-color, var(--surface-color, #fff))`,color:`var(--text-color, #1f2937)`,boxShadow:`0 4px 14px -4px rgba(15, 23, 42, 0.25)`,cursor:`pointer`});_e.type=`button`,_e.innerHTML=`<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 3l5 5-5 5M9 3l5 5-5 5"/></svg>`;let ve=fe(`div`,{position:`absolute`,width:`1px`,height:`1px`,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`});ve.setAttribute(`aria-live`,`polite`);let ye=fe(`div`,{position:`absolute`,display:`none`,alignItems:`center`,gap:`1px`,padding:`3px`,borderRadius:`8px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 85%, transparent)`,background:`var(--surface-elevated-color, var(--surface-color, #fff))`,boxShadow:`0 8px 24px -8px rgba(15, 23, 42, 0.35)`,zIndex:`2`,cursor:`default`});ye.className=`minerva-trading-toolbar`,ye.setAttribute(`role`,`toolbar`);let M=fe(`textarea`,{position:`absolute`,display:`none`,minWidth:`120px`,minHeight:`28px`,padding:`5px 9px`,resize:`none`,border:`1px solid var(--primary-color, #2962ff)`,borderRadius:`5px`,outline:`none`,background:`var(--surface-elevated-color, var(--surface-color, #fff))`,color:`var(--text-color, #1f2937)`,font:`500 13px var(--font-family-sans, system-ui, sans-serif)`,boxShadow:`0 6px 18px -6px rgba(15, 23, 42, 0.3)`,zIndex:`3`});M.rows=1;let be=fe(`style`,{});be.textContent=`.minerva-trading-toolbar button{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;padding:0 5px;border-radius:5px;cursor:pointer;color:var(--text-color,#1f2937)}.minerva-trading-toolbar button:hover{background:color-mix(in srgb,var(--text-color,#1f2937) 9%,transparent)}.minerva-trading-toolbar button:focus-visible{box-shadow:inset 0 0 0 2px var(--primary-color,#2962ff)}.minerva-trading-toolbar button[aria-pressed="true"]{background:color-mix(in srgb,var(--primary-color,#2962ff) 16%,transparent);color:var(--primary-color,#2962ff)}.minerva-trading-toolbar .sep{width:1px;height:18px;margin:0 3px;background:var(--border-color,#e5e7eb)}`,j.append(be,me,he,ge,_e,ye,M,ve),le.appendChild(j);let N=m.createStore(),xe=m.createPyramid(),Se={time:N.time,open:new Float64Array,high:new Float64Array,low:new Float64Array,close:new Float64Array,volume:N.volume},Ce=0,we=m.createPyramid(),Te=[],Ee=new Map,De=new Map,Oe=[],ke=new WeakMap,Ae=new WeakMap,je=0,Me=0,Ne=2,Pe=c.DAY,P=k.barSpacing??8,F=NaN,I=0,L=0,Fe=_,Ie=0,Le=0,R=[],Re=new Map,ze=new Map,Be=null,Ve=0,z=o.readTheme(j),He=0,Ue=0,We=null,Ge=0,Ke=0,qe=[],Je=``,Ye=-1,Xe=0,Ze,Qe=new Promise(e=>{Ze=e}),B=null,V=null,$e=!1,H=null,U=null,et=new Map,tt=null,nt=null,rt=null,it=null,W=k.drawings??[],at=null,ot=W,st=[],ct=[],lt=`false|false`,ut=k.drawingMode??`cursor`,dt=null,ft=null,G=null,pt=0,mt=b,ht=0,gt=new Map,_t=null,vt=``,yt=!1,bt=new Map,xt=null,St=[],Ct=-1,wt=null,Tt=!1,Et=null,Dt=``,Ot=NaN,kt=null,K=null,At=!1,jt=4,Mt=null,Nt=new Map,q=(e,t)=>{Nt.get(e)?.forEach(e=>e(t))},J=n.resolveLocale(k.locale),Pt=n.localeLabels(d.TRADING_LABELS,J,k.labels),Ft=()=>{J=n.resolveLocale(k.locale),Pt=n.localeLabels(d.TRADING_LABELS,J,k.labels)},It=()=>Pt,Y=()=>N.length,Lt=()=>k.chartStyle??`candles`,Rt=()=>k.colorConvention===`redUp`||k.colorConvention===`auto`&&c.redUpLocale(J),zt=()=>k.upColor??(Rt()?S:x),Bt=()=>k.downColor??(Rt()?x:S),Vt=(e,t=z.primary)=>z.resolve?z.resolve(e,t):t,X=(e,n=1)=>t.toCss(Vt(e),n),Ht=()=>k.precision??Ne,Ut=c.priceFormatter(2,void 0),Wt=``,Z=e=>{if(k.formatPrice)return k.formatPrice(e);let t=`${Ht()}|${J}`;return t!==Wt&&(Ut=c.priceFormatter(Ht(),J),Wt=t),Ut(e)},Gt=()=>(k.timeframe===void 0?null:u.parseTimeframe(k.timeframe))??{unit:`ms`,count:Pe,ms:Pe},Kt=()=>Gt().ms,Q=(e,t=400)=>`${t} ${e}px ${z.fontFamily}`,qt=e=>De.get(e.id)??e.config.visible??!0,Jt=e=>I+(e-F)*P,Yt=e=>F-(I-e)/P,Xt=e=>{let t=Y();if(!t)return 0;let n=Math.round(e);return n<0?N.time[0]+n*Kt():n>=t?N.time[t-1]+(n-t+1)*Kt():N.time[n]},Zt=e=>{let t=Y();if(!t)return 0;let n=Math.floor(e);if(n<0||n>=t-1){let r=n<0?0:t-1;return N.time[r]+(e-r)*Kt()}let r=e-n;return N.time[n]+r*(N.time[n+1]-N.time[n])},Qt=e=>{let t=Y();if(!t)return 0;if(e>=N.time[t-1])return t-1+(e-N.time[t-1])/Kt();if(e<=N.time[0])return(e-N.time[0])/Kt();let n=m.indexOfTime(N.time,t,e),r=N.time[n+1]-N.time[n];return n+(r>0?(e-N.time[n])/r:0)},$t,en=e=>k.utcOffset??($t?c.zoneOffset(e,$t):-new Date(D(e)?e:0).getTimezoneOffset()),tn=e=>en(e),nn=e=>e+en(e)*c.MINUTE,rn=e=>e===`up`?zt():e===`down`?Bt():e,an=(e,t,n)=>e.level?m.rangeLevel(n,t,Y(),e.level):{min:t,max:t,last:t},on=e=>{let t=Ae.get(e);return t||Ae.set(e,t=m.createRangePyramid()),t},sn=e=>{let t=ke.get(e);return t||ke.set(e,t=m.createRangePyramid()),t},cn=e=>{let t=Y();if(!t)return 0;let n=N.time[t-1];return e>n?t-1+(e-n)/Kt():e<N.time[0]?(e-N.time[0])/Kt():m.indexOfTime(N.time,t,e)},ln=()=>Lt()===`heikinAshi`?Se:N,un=e=>{for(let t of Te){Ee.set(t,Math.min(Ee.get(t)??0,e));for(let n of t.outputs){let t=ke.get(n);t&&m.invalidateRangePyramid(t,e)}let n=Ae.get(t);n&&m.invalidateRangePyramid(n,e)}Ce=Math.min(Ce,e);for(let t of Oe)t.valid=Math.min(t.valid,e),m.invalidateRangePyramid(t.lod,e);Mt=null;let t=t=>{for(let n of t.levels)n&&(n.valid=Math.min(n.valid,Math.floor(e/n.size)))};t(xe),t(we)},dn=()=>{let e=Y();for(let t of Te){let n=Ee.get(t)??0;n<e&&(t.compute(N,n),Ee.set(t,e))}if(Se.time=N.time,Se.volume=N.volume,Lt()===`heikinAshi`&&Ce<e){if(Se.open.length<N.capacity)for(let e of[`open`,`high`,`low`,`close`]){let t=new Float64Array(N.capacity);t.set(Se[e].subarray(0,Ce)),Se[e]=t}u.heikinAshiInto(N.open,N.high,N.low,N.close,e,Se,Ce),Ce=e}for(let t of Oe)if(!(t.valid>=e)){if(t.values.length<N.capacity){let e=new Float64Array(N.capacity).fill(NaN);e.set(t.values.subarray(0,t.valid)),t.values=e}for(let n=t.valid;n<e;n++){let e=m.lowerBoundTime(t.times,t.times.length,N.time[n]+.5)-1;t.values[n]=e>=0?t.data[e]:NaN}t.valid=e}},fn=e=>{un(e);let t=Y();e<t-1&&je++,Me++,t&&(Ne=Math.max(e===0?0:Ne,c.detectPrecision(N.close,e,t),c.detectPrecision(N.open,Math.max(e,t-50),t)),(e===0||t<80)&&(Pe=c.inferTimeframe(N.time,t))),$()},pn=()=>{let{studies:e,reused:t}=h.buildStudies(k.indicators??[],Te,tn);for(let e of Te)t.has(e)||Ee.delete(e);for(let n of e)t.has(n)||Ee.set(n,0);Te=e;for(let e of[...De.keys()])Te.some(t=>t.id===e)||De.delete(e)},mn=()=>{Oe=(k.compare??[]).map((e,t)=>{let n=[...e.data].sort((e,t)=>e.time-t.time);return{id:e.id??e.name,name:e.name,color:e.color??h.LINE_COLORS[(t+2)%h.LINE_COLORS.length],width:e.lineWidth??1.5,times:Float64Array.from(n,e=>e.time),data:Float64Array.from(n,e=>e.value),values:new Float64Array,valid:0,lod:m.createRangePyramid()}})},hn=()=>{let e=Y();if(!e||!D(F))return!0;let t=Jt(e-1);return t>=0&&t<=I+P*.5},gn=e=>{m.setBars(N,e),xe=m.createPyramid(),we=m.createPyramid(),Ce=0,Ot=NaN;for(let e of Re.values())e.auto=!0;F=Y()-1+(k.rightOffset??8),nt=null,rt=null,fn(0)},_n=e=>{let t=Y(),n=m.inputLength(e);if(t>=2&&n>=t){let r=m.barAt(e,0).time,i=N.time[t-1];if(r===N.time[0]&&m.barAt(e,t-2).time===N.time[t-2]){let r=hn(),i=t,a=t;for(let r=t-1;r<n;r++){let t=m.updateBar(N,m.barAt(e,r));t>=0&&(a=Math.min(a,t))}r&&(F+=Y()-i),a<Y()&&fn(a);return}if(m.barAt(e,n-1).time===i&&n>t){let r=n-t;m.setBars(N,e),xe=m.createPyramid(),we=m.createPyramid(),Ce=0,F+=r,fn(0);return}}gn(e)},vn=()=>{let e=Te.filter(e=>!e.overlay),t=L,n=e.map(e=>ze.get(e.id)??e.height),r=n.reduce((e,t)=>e+t,0),i=Math.max(0,t*.62),a=r>i&&r>0?i/r:1,o=n.map(e=>Math.max(y*Math.min(1,a*2),e*a)),s=Math.max(40,t-o.reduce((e,t)=>e+t,0)),c=[],l=(e,t)=>{let n=Re.get(e);return n||(n=p.createScale(t),Re.set(e,n)),n.mode!==t&&(n.mode=t,n.auto=!0),n},u=l(b,k.scaleMode??`linear`);u.top=0,u.height=s,u.marginTop=.1,u.marginBottom=.08,c.push({id:b,study:null,scale:u,top:0,height:s,ticks:[],step:0});let d=s;e.forEach((e,t)=>{let n=l(e.id,`linear`);n.top=d,n.height=o[t],n.marginTop=e.type===`volume`?.18:.14,n.marginBottom=e.type===`volume`?0:.1,e.range&&(n.marginTop=n.marginBottom=.06),c.push({id:e.id,study:e,scale:n,top:d,height:o[t],ticks:[],step:0}),d+=o[t]});for(let e of[...Re.keys()])c.some(t=>t.id===e)||Re.delete(e);R=c},yn=e=>R.find(t=>e>=t.top&&e<t.top+t.height)??null,bn=()=>{let e=Y(),t=Math.min(1,I*.8/Math.max(1,e));P=E(P,Math.max(1e-4,t),v);let n=I/P;D(F)||(F=e-1+(k.rightOffset??8));let r=Math.max(0,e-1)+Math.max(k.rightOffset??8,n*.75),i=Math.min(n*.25,r);F=E(F,i,r)},xn=()=>{let e=Y();if(!e)return null;let t=F-I/P,n=P>=2?0:Math.ceil(Math.log2(2/P)),r=2**n,i=ln(),a=n?m.pyramidLevel(Lt()===`heikinAshi`?we:xe,i,e,n):i,o=Math.floor((e-1)/r),s=E(Math.floor(t)-1,0,e-1),c=E(Math.ceil(F)+1,0,e-1),l=E(Math.ceil(t-.5),0,e-1),u=E(Math.floor(F+.5),0,e-1);return{left:t,level:n,size:r,cols:a,g0:Math.floor(s/r),g1:Math.floor(c/r),s0:Math.floor(l/r),s1:Math.floor(u/r),last:o}},Sn=(e,t)=>t*e.size+(e.size-1)/2,Cn=(e,t)=>Math.min(e.size,Y()-t*e.size),wn=()=>E(Math.ceil(F-I/P-.5),0,Math.max(0,Y()-1)),Tn=e=>{let t=Y();for(let n=wn();n<t;n++){let t=e.values[n];if(D(t)&&t!==0)return t}return NaN},En=(e,t,n)=>e.mode===`percent`?(t/n-1)*100:p.toScaled(e,t),Dn=()=>k.baselinePrice??ln().close[wn()],On=(e,t,n,r,i)=>{let a=an(e,t,n),o=Math.round(r/e.size),s=E(e.s0-o,0,e.last),c=E(e.s1-o,0,e.last);for(let e=s;e<=c;e++)a.min[e]<i[0]&&(i[0]=a.min[e]),a.max[e]>i[1]&&(i[1]=a.max[e])},kn=(e,t)=>{if(!k.autoscaleIncludesDrawings||!W.length)return;let n=F-I/P,r=U?.kind===`drawing`?U:null;for(let i of W){if((i.pane??b)!==e)continue;let a=r&&r.id===i.id?r.original:i;for(let e of s.drawingPrices(a,cn,n,F))e<t[0]&&(t[0]=e),e>t[1]&&(t[1]=e)}},An=e=>{Ve=0;for(let t of R){let n=t.scale;if(!e)continue;if(t.id===b){n.base=N.close[wn()]||1;let{cols:t}=e,r=Lt(),i=r===`line`||r===`area`||r===`baseline`,a=[1/0,-1/0];for(let n=e.s0;n<=e.s1;n++){let e=i?t.close[n]:t.low[n],r=i?t.close[n]:t.high[n];e<a[0]&&(a[0]=e),r>a[1]&&(a[1]=r)}for(let n of Te)if(n.overlay&&qt(n)){if(n.type===`volume`){for(let n=e.s0;n<=e.s1;n++){let r=t.volume[n]/Cn(e,n);r>Ve&&(Ve=r)}continue}for(let t of n.outputs)On(e,t.values,sn(t),t.shift,a)}kn(b,a);let[o,s]=a;if(r===`baseline`){let e=Dn();e<o&&(o=e),e>s&&(s=e)}if(!n.auto)continue;let c=p.toScaled(n,o),l=p.toScaled(n,s);n.mode===`log`&&!(o>0)&&(c=p.toScaled(n,Math.max(s*.001,1e-12)));for(let t of Oe){let r=Tn(t),i=[1/0,-1/0];On(e,t.values,t.lod,0,i);for(let e of i){let t=En(n,e,r);t<c&&(c=t),t>l&&(l=t)}}n.mode===`percent`&&Oe.length&&(c=Math.min(c,0),l=Math.max(l,0)),p.fitScale(n,c,l);continue}let r=t.study;if(!r||!n.auto)continue;if(r.range){p.fitScale(n,r.range[0],r.range[1]);continue}let i=[1/0,-1/0];r.type===`volume`&&(i[0]=0);for(let t of r.outputs){if(t.kind===`volume`){for(let t=e.s0;t<=e.s1;t++){let n=e.cols.volume[t]/Cn(e,t);n>i[1]&&(i[1]=n)}continue}On(e,t.values,sn(t),t.shift,i)}kn(t.id,i);let[a,o]=i;if(r.bands&&D(a)&&D(o))for(let e of r.bands)a=Math.min(a,e),o=Math.max(o,e);r.zero&&D(a)&&D(o)&&(a=Math.min(a,0),o=Math.max(o,0)),p.fitScale(n,a,o)}},jn=(e,t)=>{let n=Y();if(!n||!e)return[];let r=Kt(),i=r<c.DAY,a=Math.floor(Math.max(0,Math.ceil(F))/e.size),o=t=>t<=e.last?e.cols.time[t]:N.time[n-1]+(t*e.size-(n-1))*r,s=[],l=e.g0>0?nn(o(e.g0-1)):NaN;for(let t=e.g0;t<=a;t++){let n=nn(o(t)),r=Jt(Sn(e,t)),i=c.boundaryWeight(l,n);r>=-20&&r<=I+20&&i>10&&s.push({x:r,weight:i,time:n}),l=n}t.font=Q(z.fontSize);let u=i?`00:00`:`Sep 30`,d=Math.max(t.measureText(u).width,t.measureText(`2024`).width)+34;return c.pickTicks(s,d).filter(e=>e.x>8&&e.x<I-8).map(e=>({x:e.x,text:c.tickText(e.time,e.weight,J,i),bold:e.weight>=(i?50:60)}))},Mn=(e,t)=>e.id===b?e.scale.mode===`percent`?c.formatPercent(t,J,Math.min(2,r.stepDecimals(e.step))):Z(p.fromScaled(e.scale,t)):e.study?.compact?c.formatVolume(t,J):c.formatFixed(t,Math.min(4,r.stepDecimals(e.step)),J),Nn=(e,t)=>e.overlay&&e.type!==`volume`?Z(t):e.compact?c.formatVolume(t,J):c.formatFixed(t,e.range?2:Math.max(2,Math.min(6,Ht())),J),Pn=(e,n)=>{let r=[],i=e.cols,a=Vt(zt()),o=Vt(Bt()),s=t.packColor(a),c=t.packColor(o),u=z.background,d=l.candleMetrics(P*e.size*n,n),f=t=>Jt(Sn(e,t))*n,m=Lt(),h=Math.max(.5,d.body/2),g={up:t.packColor([a[0],a[1],a[2],.5]),down:t.packColor([o[0],o[1],o[2],.5])};for(let _ of R){let v=_.top*n,y=(_.top+_.height)*n,x=_.scale,S=e=>p.yOf(x,e)*n,C=(t,n,r,i=S)=>(a,o,s)=>{let c=new l.LineBuffer(v,y);for(let n=s?Math.max(e.g0,a-1):a;n<=o;n++)c.push(f(n),i(t(n)));return c.count>1?[c.item(``,0,n,r)]:[]},T=(t,r,i,a,o=0,s=S)=>(c,u,d)=>{let p=an(e,t,r),m=o*P*n,h=Math.ceil(Math.abs(o)/e.size)+1,g=d?Math.max(0,c-1):c,_=u;!d&&o>0&&(g=Math.max(0,g-h)),!d&&o<0&&(_=Math.min(e.last-1,_+h));let b=new l.LineBuffer(v,y),x=NaN;for(let t=g;t<=_;t++){let n=f(t)+m,r=p.min[t],i=p.max[t];if(!e.level||r===i||!D(r)||!D(i)){x=s(p.last[t]),b.push(n,x);continue}let a=s(r),o=s(i),c=D(x)&&Math.abs(x-o)<Math.abs(x-a)?o:a,l=c===o?a:o;b.push(n,c),b.push(n,l),x=l}return b.count>1?[b.item(``,0,i,a)]:[]},ee=(t,n,r,i,a)=>(o,s,c)=>{let d=an(e,t.value,n),p=Y(),m=new l.TrendBuffer(v,y),h=NaN;for(let n=c?Math.max(0,o-1):o;n<=s;n++){let r=d.min[n],i=d.max[n];if(!D(r)||!D(i)){m.break(),h=NaN;continue}let a=t.direction[Math.min(p-1,n*e.size+e.size-1)]!==-1,o=f(n),s=S(r),c=S(i),l=D(h)&&Math.abs(h-c)<Math.abs(h-s)?c:s,u=l===c?s:c;m.push(o,l,a),u!==l&&m.push(o,u,a),h=u}let g=[u[0],u[1],u[2],.9],_=[];for(let[e,t]of[[m.up,`u`],[m.down,`d`]])e.count>1&&_.push(e.item(`${t}h`,0,g,a+2.5));return m.up.count>1&&_.push(m.up.item(`u`,0,r,a)),m.down.count>1&&_.push(m.down.item(`d`,0,i,a)),_};if(_.id===b){if(Te.find(e=>e.overlay&&e.type===`volume`&&qt(e))&&Ve>0){let t=(y-v)*.2;r.push((n,r)=>{let a=new l.BarBuffer;for(let o=n;o<=r;o++){let n=i.volume[o]/Cn(e,o);if(!(n>0))continue;let r=y-n/Ve*t,[s,c]=l.pixelRange(r,y);a.push(d.snap(f(o)),s,c,i.close[o]>=i.open[o]?g.up:g.down)}return[a.item(``,0,h)]})}for(let e of Oe){let t=Tn(e),i=Vt(e.color);r.push(T(e.values,e.lod,i,e.width,0,e=>p.yOfScaled(x,En(x,e,t))*n))}if(m===`line`||m===`area`||m===`baseline`){let t=Vt(w);if(m===`area`&&r.push((n,r,a)=>{let o=new l.AreaBuffer(v,y);for(let t=a?Math.max(e.g0,n-1):n;t<=r;t++)o.push(f(t),S(i.close[t]),y);return o.count>1?[o.item(``,0,t,.28)]:[]}),m===`baseline`){let t=S(Dn());r.push((n,r,s)=>{let c=new l.AreaBuffer(v,y),u=new l.AreaBuffer(v,y),d=new l.LineBuffer(v,y),p=new l.LineBuffer(v,y),m=NaN,h=NaN,g=(e,n)=>{c.push(e,Math.min(n,t),t),u.push(e,Math.max(n,t),t),n<=t?d.push(e,n):d.break(),n>=t?p.push(e,n):p.break()};for(let a=s?Math.max(e.g0,n-1):n;a<=r;a++){let e=f(a),n=S(i.close[a]);if(D(h)&&(h-t)*(n-t)<0){let r=(t-h)/(n-h);g(m+(e-m)*r,t)}g(e,n),m=e,h=n}let _=[];return c.count>1&&_.push(c.item(`u`,0,a,.22),u.item(`d`,0,o,.22)),d.count>1&&_.push(d.item(`ul`,0,a,2)),p.count>1&&_.push(p.item(`dl`,0,o,2)),_})}else r.push(C(e=>i.close[e],t,2))}else{let e=m===`hollowCandles`,t=m===`bars`,n=d.wick,a=d.body;r.push((r,o)=>{let u=new l.BarBuffer,p=new l.BarBuffer,m=new l.BarBuffer,h=new l.BarBuffer,g=Math.max(n,Math.round((a-n)/2));for(let _=r;_<=o;_++){let r=i.open[_],o=i.high[_],b=i.low[_],x=i.close[_];if(!D(r)||!D(x))continue;let C=(e?x>=(_>0?i.close[_-1]:r):x>=r)?s:c,w=d.snap(f(_)),[T,ee]=l.pixelRange(S(o),S(b));if(t){let e=l.clampRange(T,ee,v,y);e&&u.push(w,e[0],e[1],C);for(let[e,t]of[[r,-1],[x,1]]){let r=Math.round(S(e)-n/2);r<v||r+n>y||h.push(w+t*(n/2+g/2),r,r+n,C)}continue}let[te,ne]=l.pixelRange(S(r),S(x));if(a<=n){let e=l.clampRange(T,ee,v,y);e&&u.push(w,e[0],e[1],C);continue}if(e&&x>r){let e=[[T,te],[ne,ee]];for(let[t,n]of e){let e=n>t?l.clampRange(t,n,v,y):null;e&&u.push(w,e[0],e[1],C)}let t=l.clampRange(te,ne,v,y);t&&(u.push(w-a/2+n/2,t[0],t[1],C),u.push(w+a/2-n/2,t[0],t[1],C));for(let e of[te,ne-n])e>=v&&e+n<=y&&m.push(w,e,e+n,C);continue}let re=l.clampRange(T,ee,v,y);re&&u.push(w,re[0],re[1],C);let E=l.clampRange(te,ne,v,y);E&&p.push(w,E[0],E[1],C)}let _=[u.item(`w`,0,n/2)];return p.count&&_.push(p.item(`b`,0,a/2)),m.count&&_.push(m.item(`c`,0,a/2)),h.count&&_.push(h.item(`t`,0,g/2)),_})}}let te=_.id===b?Te.filter(e=>e.overlay&&e.type!==`volume`):_.study?[_.study]:[];for(let p of te){if(!qt(p))continue;let m=p.trend,[_,b]=p.outputs;if(m&&e.level&&_&&b){r.push(ee(m,on(p),Vt(rn(_.color)),Vt(rn(b.color)),_.width));continue}for(let m of p.outputs)if(m.kind===`volume`){let t=S(0);r.push((n,r)=>{let a=new l.BarBuffer;for(let o=n;o<=r;o++){let n=i.volume[o]/Cn(e,o);if(!(n>0))continue;let r=l.clampRange(...l.pixelRange(S(n),t),v,y);r&&a.push(d.snap(f(o)),r[0],r[1],i.close[o]>=i.open[o]?g.up:g.down)}return[a.item(``,0,h)]})}else if(m.kind===`histogram`){let n=S(0),i={up:s,down:c},p={up:t.packColor(t.mix(u,a,.45)),down:t.packColor(t.mix(u,o,.45))},g=sn(m);r.push((t,r)=>{let a=an(e,m.values,g),o=new l.BarBuffer;for(let s=t;s<=r;s++){let t=a.last[s];if(!D(t))continue;let r=s>0?a.last[s-1]:t,c=t>=0?t>=r?i.up:p.up:t<=r?i.down:p.down,u=Math.min(0,D(a.min[s])?a.min[s]:t),m=Math.max(0,D(a.max[s])?a.max[s]:t),h=l.clampRange(...e.level?l.pixelRange(S(m),S(u)):l.pixelRange(S(t),n),v,y);h&&o.push(d.snap(f(s)),h[0],h[1],c)}return[o.item(``,0,h)]})}else if(m.kind===`dots`){let a=m.color?t.packColor(Vt(rn(m.color))):0,o=E(P*e.size*.22,1.25,2.6),u=o*n;r.push((t,n)=>{let r=new l.BarBuffer;for(let o=t;o<=n;o++){let t=e.level?m.values[Math.min(Y()-1,o*e.size+e.size-1)]:m.values[o];if(!D(t))continue;let n=S(t);if(n<v||n>y)continue;let l=a||(t<=i.close[o]?s:c);r.push(f(o),n-u,n+u,l)}return r.count?[r.item(``,0,u,0,o)]:[]})}else{let e=Vt(rn(m.color));r.push(T(m.values,sn(m),[e[0],e[1],e[2],e[3]*m.alpha],m.width,m.shift))}}}return r},Fn=(e,t,n,r)=>{let i=Math.min(n.g1,n.last-1),a=r?n.last>=n.g0&&n.last<=n.g1?e(n.last,n.last,!0):[]:i>=n.g0?e(n.g0,i,!1):[],o=++Xe;return a.map((e,n)=>({...e,key:`L${t}:${n}:${e.kind}:${e.key}${r?`:live`:``}`,version:o}))},In=(t,n)=>{if(!We)return;let r=We.canvas;e.styleElement(r,{left:`0px`,top:`0px`,width:`${I}px`,height:`${L}px`});let i=Math.max(1,Math.round(I*n)),a=Math.max(1,Math.round(L*n));if((r.width!==i||r.height!==a)&&We.resize(i,a),t){let e=[i,a,n,P,F,t.level,Lt(),je,He,Ue,Ve,Lt()===`baseline`?Dn():0,...R.map(e=>`${e.id}:${e.top}:${e.height}:${e.scale.min}:${e.scale.max}:${e.scale.base}:${e.scale.mode}`),...Te.map(e=>`${e.id}:${qt(e)}`)].join(`|`);e===Je?Ye!==Me&&(Ye=Me,qe.forEach((e,n)=>{e.live=Fn(e.fn,n,t,!0)})):(Je=e,Ye=Me,qe=Pn(t,n).map(e=>({fn:e,main:[],live:[]})),qe.forEach((e,n)=>{e.main=Fn(e.fn,n,t,!1),e.live=Fn(e.fn,n,t,!0)}))}else qe=[],Je=``;let o=qe.flatMap(e=>[...e.main,...e.live]);We.render(o,{transform:{xScale:2/i,xOffset:-1,yScale:-2/a,yOffset:1},width:i,height:a,dpr:n})},Ln=(e,t)=>{let n=Math.max(1,Math.round(Ie*t)),r=Math.max(1,Math.round(Le*t));e.width!==n&&(e.width=n),e.height!==r&&(e.height=r),e.style.width=`${Ie}px`,e.style.height=`${Le}px`},Rn=(e,t,n,r,i,a)=>{e.beginPath(),typeof e.roundRect==`function`?e.roundRect(t,n,r,i,a):e.rect(t,n,r,i)},zn=(e,t,n,r,i)=>{let a=r.outputs[i.a],o=r.outputs[i.b];if(!a||!o)return;let s=an(t,a.values,sn(a)),c=an(t,o.values,sn(o)),l=a.shift,u=Math.ceil(Math.abs(l)/t.size)+1,d=Math.max(0,t.g0-(l>0?u:0)),f=Math.min(t.last,t.g1+(l<0?u:0)),m=X(rn(i.color),i.opacity),h=X(rn(i.colorBelow??i.color),i.opacity);e.save(),e.beginPath(),e.rect(0,n.top,I,n.height),e.clip();let g=[],_=0,v=()=>{if(g.length>1){e.fillStyle=_>=0?m:h,e.beginPath(),g.forEach((t,n)=>n?e.lineTo(t.x,t.ya):e.moveTo(t.x,t.ya));for(let t=g.length-1;t>=0;t--){let n=g[t];n&&e.lineTo(n.x,n.yb)}e.closePath(),e.fill()}g=[]};for(let e=d;e<=f;e++){let r=s.last[e],i=c.last[e];if(!D(r)||!D(i)){v(),_=0;continue}let a=Jt(Sn(t,e)+l),o=p.yOf(n.scale,r),u=p.yOf(n.scale,i),d=r>=i?1:-1,f=g[g.length-1];if(f&&d!==_){let e=f.ya-f.yb,t=e/(e-(o-u)),n=f.x+(a-f.x)*t,r=f.ya+(o-f.ya)*t;g.push({x:n,ya:r,yb:r}),v(),g.push({x:n,ya:r,yb:r})}_=d,g.push({x:a,ya:o,yb:u})}v(),e.restore()},Bn=(e,n)=>{if(!k.sessionBreaks||Kt()>=864e5)return;let r=[],i=NaN;for(let e=Math.max(0,n.g0-1);e<=Math.min(n.g1,n.last);e++){let t=Math.floor(nn(n.cols.time[e])/c.DAY);if(D(i)&&t!==i){let t=Math.round(Jt(e*n.size-.5))+.5;if(t>0&&t<I&&r.push(t),r.length>I/6)return}i=t}if(r.length){e.save(),e.strokeStyle=t.toCss(z.textMuted,.4),e.setLineDash([4,4]),e.beginPath();for(let t of r)e.moveTo(t,0),e.lineTo(t,L);e.stroke(),e.restore()}},Vn=()=>{let e=k.volumeProfile;return e?e===!0?{}:e:null},Hn=(e,n)=>{let r=Vn(),i=R[0];if(!r||!i||!N.hasVolume)return;let a=E(Math.floor(r.rows??24),2,400),o=[n.level,n.s0,n.s1,a,r.valueArea??.7,je,Me].join(`|`);if(!Mt||Mt.key!==o){let e=n.level?m.pyramidLevel(xe,N,Y(),n.level):N;Mt={key:o,result:u.volumeProfile(e,{from:n.s0,to:n.s1,rows:a,valueArea:r.valueArea})}}let s=Mt.result;if(s.poc<0)return;let c=0;for(let e=0;e<a;e++)c=Math.max(c,(s.up[e]??0)+(s.down[e]??0));if(!(c>0))return;let l=I*E(r.width??.28,.05,.9),d=(r.side??`right`)===`right`,f=Vt(rn(r.upColor??`up`)),h=Vt(rn(r.downColor??`down`));e.save(),e.beginPath(),e.rect(0,i.top,I,i.height),e.clip();for(let n=0;n<a;n++){let r=s.up[n]??0,a=s.down[n]??0;if(!(r+a>0))continue;let o=p.yOf(i.scale,s.low+n*s.step),u=p.yOf(i.scale,s.low+(n+1)*s.step),m=Math.min(o,u),g=Math.max(1,Math.abs(u-o)-+(Math.abs(u-o)>4)),_=n>=s.valueAreaFrom&&n<=s.valueAreaTo?.42:.17,v=r/c*l,y=a/c*l,b=d?I:0,x=d?-1:1;e.fillStyle=t.toCss(f,_),e.fillRect(Math.min(b,b+x*v),m,v,g),e.fillStyle=t.toCss(h,_);let S=b+x*v;e.fillRect(Math.min(S,S+x*y),m,y,g)}let g=Math.round(p.yOf(i.scale,s.low+(s.poc+.5)*s.step))+.5;e.strokeStyle=X(r.pocColor??C,.9),e.lineWidth=1,e.beginPath(),e.moveTo(0,g),e.lineTo(I,g),e.stroke(),e.restore()},Un=(e,n,r)=>{let i=t.toCss(z.grid),a=k.grid!==!1;if(e.lineWidth=1,a){e.strokeStyle=i,e.beginPath();for(let t of r){let n=Math.round(t.x)+.5;e.moveTo(n,0),e.lineTo(n,L)}for(let t of R)for(let n of t.ticks){let r=Math.round(p.yOfScaled(t.scale,n))+.5;r<t.top+2||r>t.top+t.height-2||(e.moveTo(0,r),e.lineTo(I,r))}e.stroke()}if(k.watermark){let n=R[0];e.save(),e.font=Q(Math.min(56,Math.max(22,I/14)),700),e.fillStyle=t.toCss(z.text,.07),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(k.watermark,I/2,n.top+n.height/2),e.restore()}for(let n of R){let r=n.study;if(r?.bands&&qt(r)){let i=Vt(rn(r.outputs[0]?.color??w)),a=r.bands.map(e=>Math.round(p.yOf(n.scale,e))+.5);r.bandFill&&a.length===2&&(e.fillStyle=t.toCss(i,.07),e.fillRect(0,Math.min(a[0],a[1]),I,Math.abs(a[1]-a[0]))),e.save(),e.setLineDash([4,4]),e.strokeStyle=t.toCss(z.textMuted,.45),e.beginPath();for(let t of a)t<n.top||t>n.top+n.height||(e.moveTo(0,t),e.lineTo(I,t));e.stroke(),e.restore()}}if(n){Bn(e,n);for(let t of Te){if(!t.fills.length||!qt(t))continue;let r=t.overlay?R[0]:R.find(e=>e.study===t);if(r)for(let i of t.fills)zn(e,n,r,t,i)}let r=R[0];if(r&&r.scale.mode===`percent`&&Oe.length){let n=Math.round(p.yOfScaled(r.scale,0))+.5;n>r.top&&n<r.top+r.height&&(e.save(),e.strokeStyle=t.toCss(z.textMuted,.6),e.setLineDash([2,3]),e.beginPath(),e.moveTo(0,n),e.lineTo(I,n),e.stroke(),e.restore())}Hn(e,n)}e.strokeStyle=t.toCss(z.axis),e.beginPath();for(let t of R.slice(1)){let n=Math.round(t.top)+.5;e.moveTo(0,n),e.lineTo(Ie,n)}e.moveTo(Math.round(I)+.5,0),e.lineTo(Math.round(I)+.5,Le),e.moveTo(0,Math.round(L)+.5),e.lineTo(Ie,Math.round(L)+.5),e.stroke()},Wn=(e,t,n,r,i,a,o)=>{let s=a?32:18,c=Math.round(o??E(Math.round(t-9),0,L-s));Math.abs(c+9-t)>1.5&&(e.save(),e.strokeStyle=r,e.lineWidth=1,e.beginPath(),e.moveTo(I-10,Math.round(t)+.5),e.lineTo(I-4,Math.round(t)+.5),e.lineTo(I+2,c+9.5),e.stroke(),e.restore()),Rn(e,I+1,c,Fe-2,s,3),e.fillStyle=r,e.fill(),e.fillStyle=i,e.textAlign=`left`,e.textBaseline=`middle`,e.font=Q(z.fontSize,500),e.fillText(n,I+7,c+9.5),a&&(e.font=Q(z.fontSize-1),e.fillText(a,I+7,c+24))},Gn=e=>R[0]?.scale.mode===`percent`?c.formatPercent(p.toScaled(R[0].scale,e),J):Z(e),Kn=e=>{if(e.color)return X(e.color);let t=e.kind??`line`;return X(t===`takeProfit`?zt():t===`stopLoss`?Bt():t===`alert`?C:t===`line`?w:e.side===`sell`?Bt():zt())},qn=e=>bt.get(e.id)??e.price,Jn=()=>{if(!Be||!R.length)return null;if(V!==null){let e=V,t=e>=0&&e<Y()?ln().close[e]:NaN;return{index:e,pane:R[0],y:p.yOf(R[0].scale,t),price:t}}if(!B&&Et){let e=Math.round(cn(Et.time)),t=Et.price;return{index:e,pane:R[0],y:D(t)?p.yOf(R[0].scale,t):NaN,price:t}}if(!B||B.x>I||B.y>L)return null;let e=yn(B.y);if(!e)return null;let t=Math.round(Yt(B.x)),n=B.y,r=p.valueAt(e.scale,n);if(e.id===b&&k.crosshair!==`free`&&t>=0&&t<Y()&&ut===`cursor`){let i=ln(),a=1/0;for(let o of[i.open[t],i.high[t],i.low[t],i.close[t]]){let t=p.yOf(e.scale,o);Math.abs(t-B.y)<a&&(a=Math.abs(t-B.y),n=t,r=o)}}return{index:t,pane:e,y:n,price:r}},Yn=e=>R.find(t=>t.id===(e??b))??null,Xn=e=>e?{x:Jt,y:t=>p.yOf(e.scale,t),index:cn,left:0,right:I,top:e.top,bottom:e.top+e.height}:null,Zn=(e,t)=>{let n=It(),r=Math.abs(t),i=[],a=Math.floor(r/c.DAY),o=Math.floor(r%c.DAY/c.HOUR),s=Math.floor(r%c.HOUR/c.MINUTE);return a&&i.push(d.fill(n.days,{count:a})),o&&i.push(d.fill(n.hours,{count:o})),s&&!a&&i.push(d.fill(n.minutes,{count:s})),`${d.fill(It().bars,{count:e})}, ${i.join(` `)||d.fill(n.minutes,{count:0})}`},Qn=(e,t)=>e.id===b?Z(t):Mn(e,t),$n=e=>{let t=10**-Ht();return Number((Math.round(e/t)*t).toFixed(Ht()))},er=()=>{let e=Y();return e?N.close[e-1]:NaN},tr=(e,t,n)=>{let r=It(),i=e===`buy`?t===`stop`?r.buyStop:r.buyLimit:t===`stop`?r.sellStop:r.sellLimit;return d.fill(i,{price:Z(n)})},nr=(e,t,n,r,i,a=`center`)=>{e.font=Q(z.fontSize,500);let o=e.measureText(t).width+16,s=E(a===`center`?n-o/2:a===`right`?n-o:n,2,Math.max(2,I-o-2));return Rn(e,s,r,o,22,11),e.fillStyle=i,e.fill(),e.fillStyle=ie(i),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t,s+o/2,r+11.5),o},rr=(e,t,n,r,i)=>(St.push({x:e,y:t,w:n,h:r,action:i}),Ct===St.length-1),ir=(e,t)=>{let n=Y(),r=n?N.close[n-1]:NaN,i=G?[...W,G]:W;if(!i.length)return;let a=It(),o={target:a.target,stop:a.stop,riskReward:a.riskReward,profit:a.profit,long:a.long,short:a.short};for(let n of R){let l=Xn(n);if(!l)continue;let u=i.filter(e=>(e.pane??b)===n.id);if(u.length){e.save(),e.beginPath(),e.rect(0,n.top,I,n.height),e.clip();for(let i of u){let u=s.paintDrawing(e,i,l,{...t,color:X(i.color??w),font:Q(z.fontSize,500),fontFamily:z.fontFamily,formatPrice:e=>Qn(n,e),formatPercent:e=>c.formatPercent(e,J),formatSpan:Zn,textOn:ie,defaultText:a.text,position:o,last:n.id===b?r:NaN,fill:d.fill},{selected:i===G||i.id===dt,hovered:i.id===ft});u&>.set(i.id,u)}e.restore()}}},ar=(e,n,r)=>{let i=R[0];if(!i)return;St=[];let a=Y(),o=t.toCss(z.text),l=t.toCss(z.textMuted),u=t.toCss(z.background),m=X(zt()),h=X(Bt()),_=It(),v=a?N.close[a-1]:NaN,y=i.top+i.height,x=y-32,S=[],C=(t,n,r,i=`left`)=>{e.font=Q(z.fontSize,500);let a=e.measureText(t).width+16,o=E(i===`center`?n-a/2:n,2,Math.max(2,I-a-2));return{left:o,top:r,right:o+a,bottom:r+22}},T=null;if(H?.kind===`create`&&a){let t=Math.round(p.yOf(i.scale,H.price))+.5;if(D(t)&&t>=i.top&&t<=y){let n=xi(H),r=tr(H.side,n,H.price);e.font=Q(z.fontSize,500);let a=C(r,I-56-(e.measureText(r).width+16),E(t-11,i.top+2,y-24));T={y:t,color:H.side===`buy`?m:h,text:r,type:n,box:a},S.push(a)}}let ee=At?_.replayHint:K&&a?d.fill(_.replay,{time:c.formatCrosshairTime(nn(N.time[a-1]),Kt(),J)}):``;ee&&S.push(C(ee,I/2,x,`center`));let te=!!H&&a>0&&!ee;te&&S.push(C(_.orderHint,8,x));let ne=[];e.font=Q(z.fontSize,600);for(let t of k.priceLines??[]){let n=qn(t),r=p.yOf(i.scale,n),a=Math.round(r)+.5;if(!D(a)||a<i.top||a>y)continue;let o=Kn(t),s=t.kind??`line`,c=re[s],l=t.title??(c?_[c]:``),d=[];if(l&&d.push({text:l,fill:o,color:ie(o)}),t.quantity!==void 0&&t.quantity!==``&&d.push({text:String(t.quantity),fill:u,color:o}),s===`position`&&typeof t.quantity==`number`&&D(v)){let e=(v-n)*t.quantity*(t.side===`sell`?-1:1),r=e>=0?m:h;d.push({text:`${e>=0?`+`:`−`}${Z(Math.abs(e))}`,fill:r,color:ie(r)})}t.cancellable&&d.push({text:`×`,fill:u,color:o,cancel:!0});let f=d.length>0||!!t.draggable,g=d.map(t=>t.cancel?20:e.measureText(t.text).width+12),b=t.draggable?14:0,x=f?g.reduce((e,t)=>e+t,0)+b:0;ne.push({line:t,price:n,at:r,y:a,top:Math.round(a-9.5),left:Math.round(I-x-56),color:o,parts:d,widths:g,grip:b,total:x})}let ae=ne.filter(e=>e.total>0).sort((e,t)=>Number(t.line.kind===`position`)-Number(e.line.kind===`position`));if(f.placeTags(ae.map(e=>({right:I-56,top:e.top,width:e.total,height:18})),T?[T.box]:[],6).forEach((e,t)=>{let n=ae[t];n&&(n.left=Math.round(e),S.push({left:n.left-4,top:n.top-4,right:n.left+n.total+4,bottom:n.top+22}))}),e.save(),e.beginPath(),e.rect(0,i.top,I,i.height),e.clip(),n&&k.highLowMarkers!==!1&&Lt()!==`line`&&Lt()!==`area`&&Lt()!==`baseline`){let t=-1/0,r=1/0,a=-1,o=-1;for(let e=n.s0;e<=n.s1;e++)n.cols.high[e]>t&&(t=n.cols.high[e],a=e),n.cols.low[e]<r&&(r=n.cols.low[e],o=e);e.font=Q(z.fontSize),e.fillStyle=l,e.strokeStyle=l,e.lineWidth=1;let s=sr.map(e=>({left:0,top:e.top,right:e.right,bottom:e.bottom}));for(let[c,l,u]of[[a,t,!1],[o,r,!0]]){if(c<0||!D(l))continue;let t=Jt(Sn(n,c)),r=Z(l),a=e.measureText(r).width,o=i.top+8,d=y-8,m=E(p.yOf(i.scale,l)+(u?9:-9),o,d),h=I-4-(t+17+a),g=t-17-a-4,_=(h<0||t>I*.6)&&g>=Math.min(0,h),v=[],b=u?1:-1;for(let e of[0,1,2,3,-1,-2]){let n=E(m+e*b*17,o,d);if(!v.some(e=>e.y===n))for(let e of[_,!_])v.push({y:n,left:e,tx:E(e?t-17-a:t+17,2,I-a-2)})}for(let e of sr){let n=e.bottom+10;if(!(n>d||v.some(e=>e.y===n)))for(let e of[_,!_])v.push({y:n,left:e,tx:E(e?t-17-a:t+17,2,I-a-2)})}let x=v.map(e=>({left:e.tx-2,top:e.y-8,right:e.tx+a+2,bottom:e.y+8})),C=f.firstFree(x,[...S,...s]);C<0&&(C=f.firstFree(x,S));let w=v[C],T=x[C];if(!w||!T)continue;S.push(T);let ee=w.left?-1:1;e.textBaseline=`middle`,e.textAlign=`left`,e.beginPath(),e.moveTo(t,m),e.lineTo(t+ee*14,w.y),e.stroke(),e.fillText(r,w.tx,w.y)}}if(n&&k.markers?.length){let t=new Map;e.font=Q(z.fontSize,600),e.textAlign=`center`;let r=k.markers.length>400;for(let o of k.markers){let s=cn(o.time);if(s<0||s>a-1)continue;let c=Math.floor(s/n.size);if(c<n.g0||c>n.g1)continue;let l=Math.round(Jt(Sn(n,c))),d=o.side===`sell`,f=o.color?X(o.color):d?h:m,g=`${c}:${d}`,_=t.get(g)??0;t.set(g,_+(o.text&&!r?30:16));let v=p.yOf(i.scale,d?n.cols.high[c]:n.cols.low[c]),y=d?-1:1,b=v+y*(6+_);e.fillStyle=f,e.beginPath(),e.moveTo(l,b),e.lineTo(l-5.5,b+y*7),e.lineTo(l-2,b+y*7),e.lineTo(l-2,b+y*12),e.lineTo(l+2,b+y*12),e.lineTo(l+2,b+y*7),e.lineTo(l+5.5,b+y*7),e.closePath(),e.fill(),o.text&&!r&&(e.textBaseline=d?`bottom`:`top`,e.fillText(o.text,l,b+y*14)),o.price!==void 0&&D(o.price)&&(e.beginPath(),e.arc(l,p.yOf(i.scale,o.price),3,0,Math.PI*2),e.fill(),e.lineWidth=1.5,e.strokeStyle=u,e.stroke())}}e.restore(),ir(e,{text:o,background:u,up:m,down:h}),e.save(),e.beginPath(),e.rect(0,i.top,I,i.height),e.clip();for(let t of ne){let{line:n,y:r,color:i}=t,a=n.kind??`line`,o=n.lineStyle??(a===`position`||a===`line`?`solid`:`dashed`);if(e.save(),e.strokeStyle=i,e.lineWidth=xt===n.id||U?.kind===`order`&&U.line.id===n.id||H?.kind===`move`&&H.id===n.id?1.5:1,s.setDash(e,o,1),e.beginPath(),e.moveTo(0,r),e.lineTo(I,r),e.stroke(),e.restore(),!t.total)continue;let{parts:c,widths:l,grip:d,total:f,top:p}=t,m=t.left;if(e.font=Q(z.fontSize,600),m+f<I-56&&(e.save(),e.strokeStyle=i,e.lineWidth=1,e.setLineDash([]),e.beginPath(),e.moveTo(m+f,r),e.lineTo(Math.min(m+f+6,I-56),r),e.stroke(),e.restore()),H?.kind===`move`&&H.id===n.id&&(Rn(e,m-3.5,p-3.5,f+7,25,5),e.strokeStyle=X(w),e.lineWidth=2,e.setLineDash([]),e.stroke()),Rn(e,m-.5,p-.5,f+1,19,3),e.fillStyle=u,e.fill(),e.strokeStyle=i,e.lineWidth=1,e.setLineDash([]),e.stroke(),d){e.fillStyle=i;for(let t=0;t<3;t++)e.fillRect(m+4,p+5+t*3.5,6,1.5);m+=d}e.textBaseline=`middle`,e.textAlign=`center`,c.forEach((t,r)=>{let a=l[r]??0,o=t.fill;t.cancel&&(rr(m,p,a,18,()=>q(`orderCancel`,{id:n.id,line:n}))&&(o=i),e.fillStyle=i,e.fillRect(m,p+3,1,12)),o!==u&&(e.fillStyle=o,e.fillRect(m,p,a,18)),e.fillStyle=t.cancel&&o!==u?ie(i):t.color,t.cancel&&(e.font=Q(z.fontSize+3,500)),e.fillText(t.text,m+a/2,p+(t.cancel?9:9.5)),e.font=Q(z.fontSize,600),m+=a})}let se=k.lastPriceLine!==!1&&a>0,ce=a>0&&N.close[a-1]>=N.open[a-1],le=Lt()===`line`||Lt()===`area`?X(w):ce?m:h;if(se){let t=Math.round(p.yOf(i.scale,v))+.5;e.save(),e.strokeStyle=le,e.setLineDash([1,2]),e.beginPath(),e.moveTo(0,t),e.lineTo(I,t),e.stroke(),e.restore()}e.restore();let ue=[];for(let e of Oe){let t=a-1;for(;t>=0&&!D(e.values[t]);)t--;if(t<0)continue;let n=e.values[t],r=En(i.scale,n,Tn(e)),o=p.yOfScaled(i.scale,r);!D(o)||o<i.top||o>i.top+i.height||ue.push({y:o,text:i.scale.mode===`percent`?c.formatPercent(r,J):Z(n),color:X(e.color)})}let O=[],de={position:3,order:2,takeProfit:2,stopLoss:2};for(let e of ne)O.push({pane:i,y:e.at,text:Gn(e.price),fill:e.color,priority:H?.kind===`move`&&H.id===e.line.id?6:de[e.line.kind??`line`]??1});for(let e of W){let t=Yn(e.pane);if(!t||e.type!==`horizontalLine`||!e.points[0])continue;let n=e.points[0].price,r=p.yOf(t.scale,n);r<t.top||r>t.top+t.height||O.push({pane:t,y:r,text:t.id===b?Gn(n):Qn(t,n),fill:X(e.color??w),priority:0})}for(let e of ue)O.push({pane:i,y:e.y,text:e.text,fill:e.color,priority:1});if(se){let e;if(k.countdown){let t=Gt(),n=N.time[a-1],r=n+t.ms;if(t.unit===`month`){let e=new Date(n);r=Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t.count,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes())}e=c.formatCountdown(r-Date.now(),_)}O.push({pane:i,y:p.yOf(i.scale,v),text:Gn(v),fill:le,second:e,priority:5})}T&&H?.kind===`create`&&O.push({pane:i,y:T.y,text:Gn(H.price),fill:T.color,priority:7});for(let e of R){let t=O.filter(t=>t.pane===e);if(!t.length)continue;let n=f.stackLabels(t.map(e=>({top:Math.round(e.y-9),height:e.second?32:18,priority:e.priority})),e.top,Math.min(e.top+e.height,L),1);t.forEach((e,t)=>e.top=n[t]??null)}e.font=Q(z.fontSize),e.textAlign=`left`,e.textBaseline=`middle`,e.fillStyle=l;for(let t of R){let n=O.filter(e=>e.pane===t&&e.top!=null);for(let r of t.ticks){let i=p.yOfScaled(t.scale,r);i<t.top+8||i>t.top+t.height-8||n.some(e=>i>(e.top??0)-6&&i<(e.top??0)+(e.second?32:18)+6)||e.fillText(Mn(t,r),I+8,i)}}e.textAlign=`center`;for(let t of r)e.font=Q(z.fontSize,t.bold?600:400),e.fillStyle=t.bold?o:l,e.fillText(t.text,t.x,L+g/2);for(let t of[...O].sort((e,t)=>e.priority-t.priority))t.top!=null&&Wn(e,t.y,t.text,t.fill,ie(t.fill),t.second,t.top);if(At){let n=B&&B.x<=I?B.x:NaN;D(n)&&(e.fillStyle=t.toCss(z.background,.62),e.fillRect(n,0,I-n,L),e.strokeStyle=X(w),e.lineWidth=1.5,e.beginPath(),e.moveTo(Math.round(n)+.5,0),e.lineTo(Math.round(n)+.5,L),e.stroke())}ee&&nr(e,ee,I/2,x,X(w)),T&&(e.save(),e.strokeStyle=T.color,e.lineWidth=1.5,e.setLineDash(T.type===`stop`?[2,3]:[6,4]),e.beginPath(),e.moveTo(0,T.y),e.lineTo(I,T.y),e.stroke(),e.restore(),nr(e,T.text,T.box.left,T.box.top,T.color,`left`)),te&&nr(e,_.orderHint,8,x,t.toCss(z.text,.86),`left`);let A=Jn();if(A&&n&&!At){let n=Math.round(Jt(A.index))+.5;e.save(),e.strokeStyle=t.toCss(z.textMuted,.75),e.lineWidth=1,e.setLineDash([4,3]),e.beginPath(),n>=0&&n<=I&&(e.moveTo(n,0),e.lineTo(n,L));let r=Math.round(A.y)+.5;D(r)&&r>=A.pane.top&&r<=A.pane.top+A.pane.height&&(e.moveTo(0,r),e.lineTo(I,r)),e.stroke(),e.restore();let o=t.toCss(z.text);if(D(A.y)&&A.y>=A.pane.top&&A.y<=A.pane.top+A.pane.height){let t=p.scaledAt(A.pane.scale,A.y),n=A.pane.id===b?Gn(p.fromScaled(A.pane.scale,t)):Mn(A.pane,t);Wn(e,A.y,n,o,u)}if(n>=0&&n<=I&&a){let t=c.formatCrosshairTime(nn(Xt(A.index)),Kt(),J);e.font=Q(z.fontSize,500);let r=e.measureText(t).width+16,i=E(n-r/2,0,Ie-r);Rn(e,i,L+3,r,21,3),e.fillStyle=o,e.fill(),e.fillStyle=u,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t,i+r/2,L+14)}if(k.orderEntry&&B&&A.pane.id===b&&D(A.y)&&ut===`cursor`&&!U&&a){let t=I-18-4,n=E(Math.round(A.y-9),i.top+1,i.top+i.height-18-1),r=$n(A.price),a=$n(v),s=r<a?`buy`:`sell`,c=$e?s===`buy`?`sell`:`buy`:s,l=oe(c,r,a),d=rr(t,n,18,18,()=>q(`orderCreate`,{price:r,side:c,orderType:l}));Rn(e,t,n,18,18,4),e.fillStyle=d?X(w):o,e.fill(),e.strokeStyle=d?ie(X(w)):u,e.lineWidth=1.5,e.beginPath(),e.moveTo(t+5,n+9),e.lineTo(t+18-5,n+9),e.moveTo(t+9,n+5),e.lineTo(t+9,n+18-5),e.stroke(),d&&nr(e,tr(c,l,r),t-6,n-2,c===`buy`?m:h,`right`)}}},or=``,sr=[],cr=new Map,lr=new Map,ur=e=>{let t=lr.get(e);return t||(t=fe(`div`,{position:`absolute`,left:`4px`,display:`flex`,flexDirection:`column`,alignItems:`flex-start`,gap:`1px`,maxWidth:`calc(100% - 12px)`,overflow:`hidden`,fontSize:`12px`,lineHeight:`18px`,fontVariantNumeric:`tabular-nums`,whiteSpace:`nowrap`,pointerEvents:`none`}),ge.appendChild(t),lr.set(e,t)),t},dr=(e,t,n,r)=>{let i=fe(`div`,{display:`flex`,flexWrap:`wrap`,alignItems:`center`,columnGap:`6px`,maxWidth:`100%`,minWidth:`0`,boxSizing:`border-box`,padding:`0 4px`,borderRadius:`4px`,background:`color-mix(in srgb, var(--surface-color, var(--background-color, #fff)) 86%, transparent)`}),a=null;if(n)a=fe(`button`,{all:`unset`,cursor:`pointer`,pointerEvents:`auto`,color:`var(--text-color, #1f2937)`,fontWeight:`500`,borderRadius:`3px`,...se}),a.type=`button`,a.textContent=t,a.setAttribute(`aria-label`,d.fill(It().toggleIndicator,{name:t})),a.addEventListener(`click`,e=>{e.stopPropagation();let t=!qt(n);De.set(n.id,t),q(`indicatorToggle`,{id:n.id,visible:t}),hr(),$()}),a.addEventListener(`pointerdown`,e=>e.stopPropagation()),i.appendChild(a);else if(t){let e=fe(`span`,{fontWeight:`600`,...se});e.textContent=t,i.appendChild(e)}let o=[];for(let e=0;e<r;e++){let e=fe(`span`,se);i.appendChild(e),o.push(e)}return e.appendChild(i),{row:i,values:o,button:a}},fr=()=>{cr.clear();for(let e of lr.values())e.remove();if(lr.clear(),k.legend===!1)return;let e=ur(b),t=[k.symbol,k.labels?.timeframe??(typeof k.timeframe==`string`?k.timeframe:``)].filter(Boolean).join(` · `);cr.set(`ohlc`,dr(e,t,null,1));for(let t of Te){let n=t.mergeLegend?1:t.outputs.length;t.overlay&&t.type===`volume`?cr.set(t.id,dr(e,pr(t),t,1)):t.overlay&&cr.set(t.id,dr(e,pr(t),t,n))}for(let t of Oe)cr.set(`compare:${t.id}`,dr(e,``,null,1));for(let e of Te)e.overlay||cr.set(e.id,dr(ur(e.id),pr(e),e,e.mergeLegend?1:e.outputs.length))},pr=e=>e.type===`volume`?It().volume:e.titleKey?`${It()[e.titleKey]} ${e.title}`:e.title,mr=(e,t,n)=>{if(!e)return;e.textContent!==t&&(e.textContent=t);let r=n??``;e.style.color!==r&&(e.style.color=r)},hr=()=>{let e=[k.legend!==!1,k.symbol,k.timeframe,...Te.map(e=>`${e.id}:${pr(e)}:${e.outputs.length}`),...Oe.map(e=>e.id),Pt.toggleIndicator,k.labels?.timeframe].join(`|`);if(e!==or&&(or=e,fr()),k.legend===!1)return;for(let e of R){let t=lr.get(e.id);if(!t)continue;t.style.top=`${e.top+6}px`;let n=`${Math.max(60,Math.floor(I-10))}px`;t.style.maxWidth!==n&&(t.style.maxWidth=n);let r=`${Math.max(18,Math.floor(e.height-10))}px`;t.style.maxHeight!==r&&(t.style.maxHeight=r)}let t=lr.get(b),n=t?Array.from(t.children,e=>({right:t.offsetLeft+e.offsetLeft+e.offsetWidth,top:t.offsetTop+e.offsetTop,bottom:t.offsetTop+e.offsetTop+e.offsetHeight})):[],r=n.length!==sr.length||n.some((e,t)=>{let n=sr[t];return!n||n.right!==e.right||n.top!==e.top||n.bottom!==e.bottom});sr=n,r&&$();let i=Y(),a=Jn(),o=E(a&&a.index>=0&&a.index<i?a.index:i-1,0,Math.max(0,i-1)),s=It(),l=cr.get(`ohlc`),u=X(zt()),d=X(Bt());if(l&&i){let e=ln(),t=e.open[o],n=e.close[o],r=o>0?e.close[o-1]:t,i=n-r,a=n>=t?u:d,f=l.values[0],p=[[s.open,e.open[o]],[s.high,e.high[o]],[s.low,e.low[o]],[s.close,n]].map(([e,t])=>`<span style="${ce}"><span style="color:var(--text-secondary-color,#6b7280)">${gr(String(e))}</span><span style="color:${a}">${gr(Z(t))}</span></span>`).join(``),m=r?i/r*100:NaN,h=`${p}${`<span style="${ce}">${s.change?`<span style="color:var(--text-secondary-color,#6b7280)">${gr(s.change)}</span>`:``}<span style="color:${i>=0?u:d}">${i>=0?`+`:`−`}${gr(Z(Math.abs(i)))} (${gr(c.formatPercent(m,J))})</span></span>`}${N.hasVolume?`<span style="${ce}"><span style="color:var(--text-secondary-color,#6b7280)">${gr(s.volume)}</span>${gr(c.formatVolume(N.volume[o],J))}</span>`:``}`;f&&f.dataset.html!==h&&(f.innerHTML=h,f.dataset.html=h,f.style.display=`inline-flex`,f.style.columnGap=`6px`,f.style.flexWrap=`wrap`)}for(let e of Te){let t=cr.get(e.id);if(!t)continue;let n=qt(e);t.row.style.opacity=n?`1`:`0.5`,t.button&&(t.button.setAttribute(`aria-pressed`,String(n)),t.button.style.textDecoration=n?`none`:`line-through`);let r=e.outputs.length;if(e.mergeLegend){let r=e.outputs.find(e=>D(e.values[o]));mr(t.values[0],n&&i&&r?Nn(e,r.values[o]):``,r?X(rn(r.color)):void 0);continue}e.outputs.forEach((a,s)=>{let l=t.values[e.type===`macd`?(s+r-1)%r:s];if(!n||!i){mr(l,``);return}if(a.kind===`volume`){let e=N.close[o]>=N.open[o]?u:d;mr(l,c.formatVolume(N.volume[o],J),e);return}let f=o-a.shift,p=f>=0&&f<i?a.values[f]:NaN,m=a.color?X(rn(a.color)):void 0;a.kind===`histogram`&&(m=p>=0?u:d),a.kind===`dots`&&!a.color&&(m=p<=N.close[o]?u:d);let h=e.outputs.length>1&&!e.plainLegend?`${a.label} `:``;mr(l,`${h}${Nn(e,p)}`,m)})}for(let e of Oe){let t=cr.get(`compare:${e.id}`);if(!t)continue;let n=e.values[o],r=Tn(e),i=D(r)?(n/r-1)*100:NaN;mr(t.values[0],`${e.name} ${Z(n)} ${c.formatPercent(i,J)}`,X(e.color))}},gr=e=>e.replace(/[&<>"]/g,e=>e===`&`?`&`:e===`<`?`<`:e===`>`?`>`:`"`),$=()=>{A||Ke||(Ke=de?.requestAnimationFrame?de.requestAnimationFrame(yr):setTimeout(()=>yr(Date.now()),16))},_r=e=>{let t=!1;if(rt){let n=Math.min(1,(e-rt.start)/320),r=1-(1-n)**3;F=rt.from+(rt.to-rt.from)*r,n>=1?rt=null:t=!0}if(nt){let n=Math.min(64,e-nt.t);nt.t=e;let r=F;F-=nt.v*n/P,nt.v*=Math.exp(-n/320),bn(),Math.abs(nt.v)<.02||F===r?nt=null:t=!0}return t},vr=e=>{e.font=Q(z.fontSize,500);let t=0;for(let n of R)for(let r of n.ticks)t=Math.max(t,e.measureText(Mn(n,r)).width);let n=Y();n&&(t=Math.max(t,e.measureText(Gn(N.close[n-1])).width),k.countdown&&(t=Math.max(t,e.measureText(`00:00:00`).width)));let r=Math.max(_,Math.ceil(t+18));(r>Fe||r<Fe-12)&&(Fe=r)};function yr(e){if(Ke=0,A||(Ie=j.clientWidth,Le=j.clientHeight,Ie<=0||Le<=0))return;let t=_r(typeof performance<`u`?performance.now():e??Date.now()),n=de?.devicePixelRatio||1;dn(),Ln(me,n),Ln(he,n);let r=me.getContext(`2d`),i=he.getContext(`2d`);L=Math.max(1,Le-g);for(let e=0;e<2;e++){I=Math.max(1,Ie-Fe),vn(),it&&wr(it),bn(),Be=xn(),An(Be);for(let e of R){let t=p.scaleTicks(e.scale,e.id===b?44:30),n=e.study?.range,r=e.study?.bands;e.ticks=n&&r?[...r,(n[0]+n[1])/2].sort((e,t)=>e-t):t.scaled,e.step=t.step}let e=Fe;if(i&&vr(i),Fe===e)break}let a=Be;it=null;let o=i?jn(a,i):[];In(a,n),r&&(r.setTransform(n,0,0,n,0,0),r.clearRect(0,0,Ie,Le),Un(r,a,o)),i&&(i.setTransform(n,0,0,n,0,0),i.clearRect(0,0,Ie,Le),ar(i,a,o)),hr(),br(),$r(),Kr(),Sr(),B&&!U&&Ur(B.x,B.y)!==Ct&&(li(B.x,B.y),$()),t&&$()}let br=()=>{let e=Y(),t=R[0],n=e>0&&t&&Jt(e-1)>I+P*.5;if(_e.style.display=n?`flex`:`none`,n&&t){_e.style.left=`${I-40}px`,_e.style.top=`${t.top+t.height-40}px`;let e=It().scrollToRealtime;_e.getAttribute(`aria-label`)!==e&&(_e.setAttribute(`aria-label`,e),_e.title=e)}},xr=()=>{let e=F-I/P;return{from:e,to:F,fromTime:Xt(e),toTime:Xt(F)}},Sr=()=>{let e=Y();if(!e)return;let t=xr();(!wt||Math.abs(wt.from-t.from)>1e-6||Math.abs(wt.to-t.to)>1e-6)&&(wt=t,Tt||q(`visibleRangeChange`,t)),Tt=!1,t.from<10&&Ot!==N.time[0]&&(Ot=N.time[0],q(`historyRequest`,{firstTime:N.time[0],count:e}));let n=Jn(),r=n&&(B||V!==null)?n:null,i=r?`${r.index}|${r.price}|${r.pane.id}`:``;if(i!==Dt){if(Dt=i,!r)q(`crosshairMove`,null);else{let t={index:r.index,time:Xt(r.index),bar:r.index>=0&&r.index<e?m.readBar(N,r.index):null,price:r.price,pane:r.pane.id,x:Jt(r.index),y:r.y};q(`crosshairMove`,t)}}},Cr=e=>{let t=j.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}},wr=e=>{P=I/(e.to-e.from),F=e.to,bn()},Tr=(e,t)=>{let n=Y();n&&hn()&&(e=Math.min(I,Jt(n-1)));let r=Yt(e);P*=t,bn(),F=r+(I-e)/P,bn(),nt=null,rt=null,$()},Er=(e,t,n)=>{let r=Math.round(Yt(e));return{time:Xt(r),price:p.valueAt(n.scale,t)}},Dr=(e,t)=>{e!==ut&&(ut=e,G=null,pt=0,t&&q(`drawingToolChange`,e),$())},Or=e=>{e!==dt&&(dt=e,yt=!1,q(`drawingSelect`,e),$())},kr=()=>({canUndo:st.length>0,canRedo:ct.length>0}),Ar=()=>{let e=kr(),t=`${e.canUndo}|${e.canRedo}`;t!==lt&&(lt=t,q(`undoChange`,e))},jr=(e,t=!0)=>{e!==ot&&(st.push(ot),st.length>T&&st.shift(),ct.length=0,ot=e),W=e,t&&(at=e,q(`drawingsChange`,e)),dt&&!e.some(e=>e.id===dt)&&Or(null),Ar(),$()},Mr=e=>{ot=e,W=e,at=e,G=null,dt&&!e.some(e=>e.id===dt)&&Or(null),q(`drawingsChange`,e),Ar(),$()},Nr=()=>{let e=st.pop();e&&(_t&&Jr(!1),ct.push(ot),Mr(e))},Pr=()=>{let e=ct.pop();e&&(st.push(ot),Mr(e))},Fr=(e,t)=>{W.some(t=>t.id===e)&&jr(W.map(n=>n.id===e?{...n,...t,id:n.id,type:n.type}:n))},Ir=e=>{W.some(t=>t.id===e)&&(dt===e&&Or(null),jr(W.filter(t=>t.id!==e)))},Lr=(e,t,n)=>{let r=p.yOf(t.scale,e.price),i=Math.max(12,t.height*.07),a=p.valueAt(t.scale,r+(n?-2:2)*i),o=p.valueAt(t.scale,r+(n?1:-1)*i),s=Math.max(6,Math.round(I*.16/P)),c=Xt(Math.round(cn(e.time))+s);return[e,{time:c,price:$n(a)},{time:c,price:$n(o)}]},Rr=()=>{if(!G)return;let e=G;G=null,pt=0,jr([...W,e]),Or(e.id),k.keepDrawingMode||Dr(`cursor`,!0),e.type===`text`&&qr(e.id,!0)},zr=()=>{if(!G)return;if(pt--,pt<=0){Rr();return}let e=G.points[G.points.length-1];e&&(G={...G,points:[...G.points,e]})},Br=(e,t)=>{let n=Yn(mt);!G||!n||pt<=0||(G={...G,points:[...G.points.slice(0,-1),Er(e,t,n)]})},Vr=(e,t)=>{let n=R[0];if(!n||e>I)return null;for(let e of k.priceLines??[])if(e.draggable&&Math.abs(p.yOf(n.scale,qn(e))-t)<=5)return e;return null},Hr=(e,t)=>{if(e>I)return null;let n=yn(t),r=Xn(n);if(!n||!r)return null;for(let i=W.length-1;i>=0;i--){let a=W[i];if(!a||(a.pane??b)!==n.id)continue;let o=s.hitDrawing(a,r,{x:e,y:t},6,gt.get(a.id));if(o)return{drawing:a,hit:o,pane:n}}return null},Ur=(e,t)=>St.findIndex(n=>e>=n.x&&e<=n.x+n.w&&t>=n.y&&t<=n.y+n.h),Wr=e=>{for(let t=1;t<R.length;t++)if(Math.abs(R[t].top-e)<=4)return t;return-1},Gr=()=>{M.style.height=`auto`,M.style.height=`${Math.max(28,M.scrollHeight+2)}px`},Kr=()=>{if(!_t)return;let e=_t.id,t=W.find(t=>t.id===e),n=t?Yn(t.pane):null,r=t?.points[0];if(!t||!n||!r)return;let i=Jt(cn(r.time)),a=p.yOf(n.scale,r.price);M.style.left=`${E(i,2,Math.max(2,I-160))}px`,M.style.top=`${E(a,2,Math.max(2,L-40))}px`};function qr(e,t){let n=W.find(t=>t.id===e);n&&!n.locked&&(_t={id:e,created:t},M.value=t?``:n.text??``,M.placeholder=It().text,M.setAttribute(`aria-label`,It().editText),M.style.display=`block`,Kr(),Gr(),M.focus(),M.select(),$())}function Jr(e){if(!_t)return;let{id:t,created:n}=_t;_t=null,M.style.display=`none`;let r=M.value.replace(/\s+$/,``),i=W.find(e=>e.id===t);if(i&&n&&(!e||!r)){let e=st.pop();Mr(e??W.filter(e=>e.id!==t))}else if(i&&e&&r!==(i.text??``)){if(n){let e=W.map(e=>e.id===t?{...e,text:r}:e);ot=e,W=e,at=e,q(`drawingsChange`,e)}else Fr(t,{text:r})}(O.activeElement===M||O.activeElement===O.body)&&j.focus(),$()}M.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),Jr(!0)):e.key===`Escape`&&(e.preventDefault(),Jr(!1))}),M.addEventListener(`input`,Gr),M.addEventListener(`blur`,()=>Jr(!0)),M.addEventListener(`pointerdown`,e=>e.stopPropagation()),M.addEventListener(`dblclick`,e=>e.stopPropagation());let Yr=(e,t=``,n=1.5)=>`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="${n}" stroke-linecap="round" stroke-linejoin="round"${t?` stroke-dasharray="${t}"`:``} aria-hidden="true"><path d="${e}"/></svg>`,Xr=(e,t,n,r)=>{let i=O.createElement(`button`);return i.type=`button`,i.setAttribute(`aria-label`,e),i.title=e,r!==void 0&&i.setAttribute(`aria-pressed`,String(r)),i.innerHTML=t,i.addEventListener(`click`,e=>{e.stopPropagation(),n()}),i},Zr=()=>{let e=O.createElement(`span`);return e.className=`sep`,e},Qr=e=>{ye.textContent=``;let t=It();ye.setAttribute(`aria-label`,t.lineStyle);let n=e.id,r=[];if(!e.locked){let i=X(e.color??w),a=Xr(t.color,`<span style="display:block;width:14px;height:14px;border-radius:50%;background:${i};box-shadow:inset 0 0 0 1px rgba(127,127,127,.35)"></span>`,()=>{yt=!yt,vt=``,$r()});a.setAttribute(`aria-expanded`,String(yt)),r.push(a);let o=e.lineWidth??1.5,c=[1,2,3,4];r.push(Xr(`${t.lineWidth}: ${o}px`,`${Yr(`M2 8h12`,``,Math.min(4,o))}<span style="font-size:11px;margin-left:3px">${o}</span>`,()=>Fr(n,{lineWidth:c.find(e=>e>o)??c[0]})));let l=e.lineStyle??`solid`;r.push(Xr(t.lineStyle,Yr(`M2 8h12`,l===`dashed`?`3.5 2.5`:l===`dotted`?`0.1 3`:``,l===`dotted`?2.2:1.6),()=>Fr(n,{lineStyle:te[(te.indexOf(l)+1)%te.length]}))),s.isFillable(e.type)&&r.push(Xr(t.fill,`<svg width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><rect x="2.5" y="3.5" width="11" height="9" rx="1.5" fill="currentColor" fill-opacity=".3" stroke="currentColor" stroke-width="1.3"/></svg>`,()=>Fr(n,{fill:e.fill===!1}),e.fill!==!1)),e.type===`text`&&r.push(Xr(t.editText,Yr(`M3 13h3l7-7-3-3-7 7zM9 4l3 3`),()=>qr(n,!1))),r.push(Zr())}if(r.push(Xr(t.lock,e.locked?Yr(`M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 4 0v2`):Yr(`M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 3.8-.9`),()=>Fr(n,{locked:!e.locked}),!!e.locked)),!e.locked){let e=Xr(t.remove,Yr(`M3 4.5h10M6.5 4.5V3h3v1.5M4.5 4.5l.7 8.5h5.6l.7-8.5`),()=>Ir(n));e.style.color=`var(--danger-color, #f23645)`,r.push(e)}if(ye.append(...r),yt&&!e.locked){let r=fe(`div`,{position:`absolute`,left:`0`,top:`calc(100% + 4px)`,display:`flex`,gap:`2px`,padding:`4px`,borderRadius:`8px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 85%, transparent)`,background:`var(--surface-elevated-color, var(--surface-color, #fff))`,boxShadow:`0 8px 24px -8px rgba(15, 23, 42, 0.35)`});for(let i of ee){let a=Xr(`${t.color} ${i}`,`<span style="display:block;width:16px;height:16px;border-radius:50%;background:${i}"></span>`,()=>{yt=!1,Fr(n,{color:i})},(e.color??``).toLowerCase()===i);r.appendChild(a)}ye.appendChild(r)}};function $r(){let e=dt?W.find(e=>e.id===dt):void 0,t=e?Yn(e.pane):null,n=Xn(t),r=U?.kind===`drawing`&&U.moved;if(!e||!t||!n||k.drawingToolbar===!1||_t||r||G){ye.style.display=`none`,vt=``,yt=!1;return}let i=[e.id,e.color,e.lineWidth,e.lineStyle,e.fill,e.locked,yt,J,He].join(`|`);i!==vt&&(vt=i,Qr(e)),ye.style.display=`flex`;let a=s.handlePoints(e,n,gt.get(e.id)),o=gt.get(e.id);e.type===`text`&&o&&a.push({x:o.x+o.w,y:o.y+o.h});let c=1/0,l=-1/0,u=1/0,d=-1/0;for(let e of a)c=Math.min(c,E(e.x,0,I)),l=Math.max(l,E(e.x,0,I)),u=Math.min(u,E(e.y,t.top,t.top+t.height)),d=Math.max(d,E(e.y,t.top,t.top+t.height));e.type===`horizontalLine`&&(c=I*.35,l=I*.65);let f=ye.offsetWidth||200,p=ye.offsetHeight||34,m=E((c+l)/2-f/2,4,Math.max(4,I-f-4)),h=u-p-14;h<4&&(h=d+32),ye.style.left=`${Math.round(m)}px`,ye.style.top=`${Math.round(E(h,4,Math.max(4,L-p-4)))}px`}ye.addEventListener(`pointerdown`,e=>e.stopPropagation()),ye.addEventListener(`dblclick`,e=>e.stopPropagation()),ye.addEventListener(`pointermove`,e=>e.stopPropagation()),ye.addEventListener(`pointerenter`,()=>{B=null,ft=null,j.style.cursor=`default`,$()});let ei=()=>({active:!!K,picking:At,playing:!!K?.playing,speed:K?.speed??jt,index:Y(),total:K?K.source.length:Y(),time:Y()?N.time[Y()-1]:NaN}),ti=()=>q(`replayChange`,ei()),ni=(e,t)=>({time:e.time.subarray(0,t),open:e.open.subarray(0,t),high:e.high.subarray(0,t),low:e.low.subarray(0,t),close:e.close.subarray(0,t),volume:e.volume.subarray(0,t)}),ri=(e,t)=>{let n=e.hasVolume;m.setBars(N,ni(e,t)),N.hasVolume=n,xe=m.createPyramid(),we=m.createPyramid(),Ce=0,Ot=NaN,fn(0)},ii=()=>{K?.timer&&clearInterval(K.timer),K&&(K.timer=null,K.playing=!1)},ai=e=>{if(At=!1,!K){if(!Y())return;let e=m.createStore();m.setBars(e,ni(N,Y())),e.hasVolume=N.hasVolume,K={source:e,playing:!1,speed:jt,timer:null}}ii();let t=E(Math.round(e)+1,1,K.source.length);ri(K.source,t),F=t-1+(k.rightOffset??8);for(let e of Re.values())e.auto=!0;ti()},oi=e=>{if(!K)return;let t=K.source,n=Y(),r=hn(),i=-1;for(let n=0;n<e&&Y()<t.length;n++){let e=m.updateBar(N,m.readBar(t,Y()));i<0&&(i=e)}N.hasVolume=t.hasVolume,i>=0&&(r&&(F+=Y()-n),fn(i)),Y()>=t.length&&ii(),ti()},si=e=>{if(!K)return;if(e!==void 0&&e>0&&(K.speed=jt=e),ii(),Y()>=K.source.length){ti();return}let t=Math.max(16,1e3/K.speed),n=Math.max(1,Math.round(K.speed*t/1e3));K.playing=!0,K.timer=setInterval(()=>oi(n),t),ti()},ci=e=>{let t=At;if(At=!1,!K){t&&(ti(),$());return}ii();let n=K.source;K=null,e&&ri(n,n.length),ti()},li=(e,t)=>{let n=`crosshair`;xt=null;let r=null,i=U?-1:Ur(e,t);if(i!==Ct&&(Ct=i),U?.kind===`pan`&&U.moved)n=`grabbing`;else if(i>=0)n=`pointer`;else if(At&&e<=I&&t<=L)n=`pointer`;else if(Wr(t)>0)n=`row-resize`;else if(e>I&&t<L)n=`ns-resize`;else if(t>L)n=`ew-resize`;else if(ut===`cursor`){let i=Vr(e,t);if(i)n=`ns-resize`,xt=i.id;else{let i=Hr(e,t);i&&(r=i.drawing.id,n=i.drawing.locked?`pointer`:i.hit.part===`handle`?`move`:`pointer`)}}r!==ft&&(ft=r),j.style.cursor!==n&&(j.style.cursor=n)},ui=e=>{if(e.button!==0&&e.pointerType===`mouse`)return;let{x:t,y:n}=Cr(e);if(B={x:t,y:n},V=null,H&&bi(!0),nt=null,rt=null,_t&&Jr(!0),yt&&(yt=!1,$()),e.pointerType===`touch`&&(et.set(e.pointerId,{x:t,y:n}),et.size===2)){let[e,t]=[...et.values()];tt={distance:Math.hypot(e.x-t.x,e.y-t.y),spacing:P},U=null;return}try{j.setPointerCapture(e.pointerId)}catch{}let r=Ur(t,n),i=St[r];if(i){U={kind:`button`,action:i.action};return}if(At&&t<=I&&n<=L){ai(Math.min(Y()-1,Math.round(Yt(t))));return}let a=Wr(n);if(a>0){let e=R[a-1],t=R[a];U={kind:`separator`,index:a,y:n,above:e.height,below:t.height};return}if(t>I&&n<L){let e=yn(n);e&&(U={kind:`axisY`,pane:e,y:n,min:e.scale.min,max:e.scale.max});return}if(n>L){U={kind:`axisX`,x:t,spacing:P};return}let o=yn(n);if(ut!==`cursor`&&o&&Y()){if(G){Br(t,n),zr(),U=null,$();return}let e=ut,r=s.isPosition(e),i=r?R[0]:o,a=Er(t,E(n,i.top,i.top+i.height),i),c=s.anchorCount(e);if(mt=i.id,G={id:`drawing-${Date.now().toString(36)}-${++ht}`,type:e,points:r?Lr({...a,price:$n(a.price)},i,e===`longPosition`):c===1?[a]:[a,a],...i.id===b?{}:{pane:i.id}},c===1){Rr();return}pt=c-1,U={kind:`create`,pane:i,x:t,y:n,moved:!1},$();return}if(ut===`cursor`){let e=Vr(t,n);if(e){U={kind:`order`,line:e,startPrice:e.price};return}let r=Hr(t,n);if(r){Or(r.drawing.id),r.drawing.locked||(U={kind:`drawing`,id:r.drawing.id,pane:r.pane,handle:r.hit.part===`handle`?r.hit.index:-1,x:t,y:n,original:r.drawing,moved:!1});return}}U={kind:`pan`,x:t,y:n,right:F,pane:o,moved:!1,lastX:t,lastY:n,lastT:e.timeStamp,velocity:0}},di=e=>{let{x:t,y:n}=Cr(e);if(B={x:t,y:n},$e=e.altKey,e.pointerType===`touch`&&et.has(e.pointerId)&&(et.set(e.pointerId,{x:t,y:n}),tt&&et.size===2)){let[e,t]=[...et.values()],n=Math.hypot(e.x-t.x,e.y-t.y),r=Y(),i=r&&hn()?Math.min(I,Jt(r-1)):(e.x+t.x)/2,a=Yt(i);P=tt.spacing*n/Math.max(1,tt.distance),bn(),F=a+(I-i)/P,bn(),$();return}let r=U;if(!r){G&&Br(t,n),li(t,n),$();return}switch(r.kind){case`pan`:{let i=t-r.x;if(!r.moved&&Math.hypot(i,n-r.y)<3)break;r.moved=!0,F=r.right-i/P,r.pane&&!r.pane.scale.auto&&p.panScale(r.pane.scale,n-r.lastY),r.lastY=n;let a=Math.max(1,e.timeStamp-r.lastT);r.velocity=.6*((t-r.lastX)/a)+.4*r.velocity,r.lastX=t,r.lastT=e.timeStamp,bn(),j.style.cursor=`grabbing`;break}case`axisY`:{let e=r.pane.scale;e.min=r.min,e.max=r.max,p.zoomScale(e,Math.exp((n-r.y)*.006));break}case`axisX`:{let e=F;P=r.spacing*Math.exp((t-r.x)*.006),bn(),F=e,bn();break}case`separator`:{let e=n-r.y,t=R[r.index-1],i=R[r.index];if(!t||!i)break;let a=r.above+r.below,o=E(r.below-e,y,a-y);ze.set(i.id,o),t.id!==b&&ze.set(t.id,a-o);break}case`order`:bt.set(r.line.id,$n(p.valueAt(R[0].scale,n)));break;case`drawing`:{if(!r.moved&&Math.hypot(t-r.x,n-r.y)<3)break;r.moved=!0;let e=r.pane.scale,i;if(r.handle>=0)i=s.moveHandle(r.original,r.handle,Er(t,n,r.pane));else{let a=Math.round(Yt(t)-Yt(r.x)),o=p.scaledAt(e,n)-p.scaledAt(e,r.y);i=r.original.points.map(t=>({time:Xt(Math.round(cn(t.time))+a),price:p.fromScaled(e,p.toScaled(e,t.price)+o)}))}W=W.map(e=>e.id===r.id?{...e,points:i}:e);break}case`create`:Math.hypot(t-r.x,n-r.y)>=4&&(r.moved=!0),Br(t,n);break;default:li(t,n)}$()},fi=e=>{et.delete(e.pointerId),et.size<2&&(tt=null);let t=U;U=null;let{x:n,y:r}=Cr(e);if(e.pointerType===`touch`&&(B=null),!t){$();return}switch(t.kind){case`pan`:if(t.moved)k.kineticScroll!==!1&&e.timeStamp-t.lastT<60&&Math.abs(t.velocity)>.25&&(nt={v:t.velocity,t:typeof performance<`u`?performance.now():Date.now()});else{dt&&Or(null);let e=yn(r);e&&n<=I&&q(`click`,{index:Math.round(Yt(n)),time:Xt(Math.round(Yt(n))),price:p.valueAt(e.scale,r),pane:e.id})}break;case`order`:{let e=bt.get(t.line.id);e!==void 0&&e!==t.startPrice?q(`orderMove`,{id:t.line.id,price:e,previousPrice:t.startPrice,line:t.line}):bt.delete(t.line.id);break}case`drawing`:t.moved&&jr(W);break;case`create`:t.moved&&zr();break;case`button`:Ur(n,r)>=0&&t.action()}li(n,r),$()},pi=e=>{U||e.pointerType===`touch`||(B=null,ft=null,xt=null,$())},mi=e=>{let t=k.wheel??`zoom`;if(t===`none`)return;let{x:n}=Cr(e),r=e.deltaMode===1?16:e.deltaMode===2?I:1,i=e.deltaX*r,a=e.deltaY*r,o=e.ctrlKey||e.metaKey;if(t===`modifier`&&!o&&Math.abs(i)<=Math.abs(a))return;if(e.preventDefault(),V=null,Math.abs(i)>Math.abs(a)||e.shiftKey){F+=(Math.abs(i)>Math.abs(a)?i:a)/P,bn(),nt=null,$();return}let s=Math.exp(-a*(e.ctrlKey?.01:.0015));Tr(Math.min(n,I),s)},hi=e=>{let{x:t,y:n}=Cr(e),r=ut===`cursor`?Hr(t,n):null;if(r?.drawing.type===`text`){qr(r.drawing.id,!1);return}if(t>I&&n<L){let e=yn(n);e&&(e.scale.auto=!0)}else if(n>L)P=k.barSpacing??8,Fi.scrollToRealtime(!0);else for(let e of Re.values())e.auto=!0;$()},gi=e=>{if(e<0||e>=Y())return;let t=ln(),n=It();ve.textContent=d.fill(n.announcement,{time:c.formatCrosshairTime(nn(N.time[e]),Kt(),J),open:Z(t.open[e]),high:Z(t.high[e]),low:Z(t.low[e]),close:Z(t.close[e])})},_i=(...e)=>{let t=[`zh`,`ja`].includes(n.languageOf(J));ve.textContent=e.filter(Boolean).map(e=>e.replace(/[.。]$/,``)).join(t?`。`:`. `)},vi=()=>(k.priceLines??[]).filter(e=>e.draggable||e.cancellable),yi=e=>{let t=re[e.kind??`line`];return e.title??(t?It()[t]:``)},bi=e=>{H?.kind===`move`&&e&&(H.override===void 0?bt.delete(H.id):bt.set(H.id,H.override)),H=null},xi=e=>e.pinned??oe(e.side,e.price,$n(er())),Si=e=>{let t=Y();if(!k.orderEntry||!t||e.ctrlKey||e.metaKey)return!1;let n=It(),r=e.code===`KeyB`?`b`:e.code===`KeyS`?`s`:void 0,i=e.altKey?r?`alt+${r}`:``:e.key.length===1?e.key.toLowerCase():e.key;if(i===`b`||i===`s`||i===`alt+b`||i===`alt+s`){let e=i.endsWith(`b`)?`buy`:`sell`,r,a;if(H?.kind===`create`&&H.side===e)a=H.price,i.startsWith(`alt`)&&(r=xi(H)===`limit`?`stop`:`limit`);else{bi(!0);let n=Jn();a=$n(n&&n.pane.id===b&&D(n.price)?n.price:N.close[t-1]),i.startsWith(`alt`)&&(r=oe(e,a,$n(N.close[t-1]))===`limit`?`stop`:`limit`)}return H={kind:`create`,side:e,price:a,pinned:r},_i(tr(e,xi(H),a),n.orderHint,n.orderTypeHint),!0}if(e.altKey)return!1;if(i===`o`){let t=vi();if(!t.length)return!1;let r=H?.kind===`move`?H.id:null;bi(!0);let i=t.findIndex(e=>e.id===r),a=e.shiftKey?-1:1,o=t[i<0?a>0?0:t.length-1:(i+a+t.length)%t.length];if(!o)return!1;H={kind:`move`,id:o.id,start:qn(o),override:bt.get(o.id)};let s=d.fill(n.orderLine,{title:yi(o),price:Z(qn(o))});return _i(s,o.draggable?n.orderHint:``,o.cancellable?n.orderCancelHint:``),!0}if(!H)return!1;let a=H.kind===`move`?H.id:null,o=(k.priceLines??[]).find(e=>e.id===a);switch(e.key){case`ArrowUp`:case`ArrowDown`:{let t=10**-Ht()*(e.shiftKey?10:1)*(e.key===`ArrowUp`?1:-1);if(H.kind===`create`)H.price=$n(H.price+t),_i(tr(H.side,xi(H),H.price));else if(o?.draggable){let e=$n(qn(o)+t);bt.set(o.id,e),_i(Z(e))}return!0}case`Enter`:{if(H.kind===`create`){let{price:e,side:t}=H,r=xi(H);return bi(!1),q(`orderCreate`,{price:e,side:t,orderType:r}),_i(tr(t,r,e),d.fill(n.orderPlaced,{price:Z(e)})),!0}let e=H.start;bi(!1);let t=o?bt.get(o.id):void 0;return o&&t!==void 0&&t!==e&&(q(`orderMove`,{id:o.id,price:t,previousPrice:e,line:o}),_i(d.fill(n.orderPlaced,{price:Z(t)}))),!0}case`Escape`:return H.kind===`create`?_i(n.orderCancelled):o&&_i(d.fill(n.orderLine,{title:yi(o),price:Z(H.start)})),bi(!0),!0;case`Delete`:case`Backspace`:return o?.cancellable&&(bi(!0),q(`orderCancel`,{id:o.id,line:o}),_i(n.orderCancelled)),!0;default:return!1}},Ci=e=>{e.key===`Alt`&&$e!==(e.type===`keydown`)&&($e=e.type===`keydown`,B&&k.orderEntry&&$())};j.addEventListener(`pointerdown`,ui),j.addEventListener(`pointermove`,di),j.addEventListener(`pointerup`,fi),j.addEventListener(`pointercancel`,fi),j.addEventListener(`pointerleave`,pi),j.addEventListener(`wheel`,mi,{passive:!1}),j.addEventListener(`dblclick`,hi),j.addEventListener(`keydown`,e=>{if(Ci(e),e.target===j&&Si(e)){e.preventDefault(),$();return}if((e.ctrlKey||e.metaKey)&&!e.altKey){let t=e.key.toLowerCase();(t===`z`||t===`y`)&&(t===`y`||e.shiftKey?Pr():Nr(),e.preventDefault());return}let t=Y(),n=Math.max(1,Math.floor(I/P/2)),r=e=>{V=E(e,0,Math.max(0,t-1));let n=Jt(V);n<P&&(F+=(P-n)/P+1),n>I-P&&(F-=(n-I+P)/P-1),bn(),gi(V)},i=V??Math.min(t-1,Math.round(F));switch(e.key){case`ArrowLeft`:r(i-(e.shiftKey?10:1));break;case`ArrowRight`:r(i+(e.shiftKey?10:1));break;case`PageUp`:r(i-n);break;case`PageDown`:r(i+n);break;case`Home`:r(0);break;case`End`:r(t-1),Fi.scrollToRealtime(!0);break;case`+`:case`=`:case`ArrowUp`:Tr(V===null?I:Jt(V),1.2);break;case`-`:case`_`:case`ArrowDown`:Tr(V===null?I:Jt(V),1/1.2);break;case`Escape`:yt?yt=!1:At?ci(!1):G?(G=null,pt=0):ut===`cursor`?dt?Or(null):V=null:Dr(`cursor`,!0);break;case`Delete`:case`Backspace`:{let e=W.find(e=>e.id===dt);if(!e||e.locked)return;Ir(e.id);break}default:return}e.preventDefault(),$()}),j.addEventListener(`keyup`,Ci),j.addEventListener(`focus`,()=>{let e=!0;try{e=j.matches(`:focus-visible`)}catch{}e&&(j.style.boxShadow=`inset 0 0 0 2px ${t.toCss(z.primary,.6)}`)}),j.addEventListener(`blur`,()=>{j.style.boxShadow=``,H&&(bi(!0),$()),V!==null&&(V=null,$())}),_e.addEventListener(`pointerdown`,e=>e.stopPropagation()),_e.addEventListener(`click`,()=>Fi.scrollToRealtime(!0));let wi=typeof ResizeObserver==`function`?new ResizeObserver(()=>$()):null;wi?.observe(j);let Ti=()=>{if(A)return;let e=o.readTheme(j);o.themeColorsChanged(z,e)&&He++,z=e,or=``,$()},Ei=o.watchTheme(Ti),Di=null;typeof MutationObserver==`function`&&j.ownerDocument&&(Di=new MutationObserver(()=>{if(k.locale)return;let e=J;Ft(),J!==e&&(or=``,Ue++,Mi(),$())}),Di.observe(j.ownerDocument.documentElement,{attributes:!0,attributeFilter:[`lang`]}));let Oi=()=>{if(A)return null;Ke&&(de?.cancelAnimationFrame?de.cancelAnimationFrame(Ke):clearTimeout(Ke),Ke=0),yr();let e=de?.devicePixelRatio||1,n=O.createElement(`canvas`);n.width=Math.max(1,Math.round(Ie*e)),n.height=Math.max(1,Math.round(Le*e));let r=n.getContext(`2d`);if(!r)return null;r.fillStyle=t.toCss(z.background),r.fillRect(0,0,n.width,n.height);try{r.drawImage(me,0,0),We&&r.drawImage(We.canvas,0,0,Math.round(I*e),Math.round(L*e)),r.drawImage(he,0,0)}catch{}r.setTransform(e,0,0,e,0,0);let i=j.getBoundingClientRect(),a=de??null;return ge.querySelectorAll(`span, button`).forEach(e=>{let n=e.textContent??``;if(e.children.length||!n.trim()||!a)return;let o=e.getBoundingClientRect(),s=a.getComputedStyle(e);r.font=`${s.fontWeight} ${s.fontSize} ${s.fontFamily}`,r.fillStyle=s.color||t.toCss(z.text),r.textAlign=`left`,r.textBaseline=`middle`,r.fillText(n,o.left-i.left,o.top-i.top+o.height/2)}),n},ki=!1,Ai=()=>{let e=O.fullscreenElement===j;e!==ki&&(ki=e,j.style.background=e?t.toCss(z.background):``,q(`fullscreenChange`,e),$())};O.addEventListener(`fullscreenchange`,Ai);let ji=async(t=new Set)=>{let n=++Ge,r=await i.createRenderer(k.renderer??`auto`,()=>e.createDataCanvas(O),e=>{A||We?.kind!==e||(We.destroy(),We.canvas.remove(),We=null,ji(new Set([...t,e])))},t);if(A||n!==Ge){r?.destroy();return}We&&(We.destroy(),We.canvas.remove()),We=r,Je=``,r&&(j.dataset.renderer=r.kind,j.insertBefore(r.canvas,he),q(`renderer`,r.kind)),Ze(r?.kind??null),$()},Mi=()=>{let e=k.symbol??``;j.setAttribute(`aria-label`,k.ariaLabel??d.fill(It().chart,{symbol:e}).trim());let t=!!k.countdown&&k.lastPriceLine!==!1;t&&!kt&&(kt=setInterval($,1e3)),!t&&kt&&(clearInterval(kt),kt=null)},Ni=e=>{let t=k;Ft();let n=t.timeZone&&c.isTimeZone(t.timeZone)?t.timeZone:void 0,r=!!e&&(t.utcOffset!==e.utcOffset||n!==$t);if($t=n,(!e||t.indicators!==e.indicators)&&pn(),r)for(let e of Te)Ee.set(e,0);if((!e||t.compare!==e.compare)&&mn(),t.bars&&(!e||t.bars!==e.bars)?(K&&ci(!1),e?_n(t.bars):gn(t.bars)):!t.bars&&e?.bars&&(K&&ci(!1),gn([])),e&&t.barSpacing!==e.barSpacing&&t.barSpacing&&(P=t.barSpacing),e&&t.scaleMode!==e.scaleMode){let e=Re.get(b);e&&(e.auto=!0)}if(t.drawings&&t.drawings!==at&&(!e||t.drawings!==e.drawings)&&(e?jr(t.drawings,!1):W=ot=t.drawings),e&&(t.drawingMode??`cursor`)!==(e.drawingMode??`cursor`)&&Dr(t.drawingMode??`cursor`,!1),e&&t.priceLines!==e.priceLines&&(bt.clear(),H?.kind===`move`)){let e=H.id,t=vi().find(t=>t.id===e);H=t?{kind:`move`,id:e,start:t.price,override:void 0}:null}t.orderEntry?j.setAttribute(`aria-keyshortcuts`,ae):(j.removeAttribute(`aria-keyshortcuts`),H&&bi(!0)),e&&t.chartStyle!==e.chartStyle&&(Ce=Math.min(Ce,0)),Ue++,Mi(),$()};Ni(null),ji();let Pi=a.followDefaultRenderer(()=>k.renderer,()=>void ji()),Fi={setOptions(e){if(A)return;let t=k;k={...e},Ni(t),(e.renderer??`auto`)!==(t.renderer??`auto`)&&ji()},setBars(e){K&&ci(!1),gn(e)},update(e){if(K){m.updateBar(K.source,e);return}let t=Y(),n=hn(),r=m.updateBar(N,e);r<0||(Y()>t&&n&&(F+=Y()-t),fn(r))},appendBars(e){if(K){m.appendBars(K.source,e);return}let t=Y(),n=hn(),r=m.appendBars(N,e);r<0||(n&&(F+=Y()-t),fn(r))},prependBars(e){K&&m.prependBars(K.source,e);let t=m.prependBars(N,e);t&&(xe=m.createPyramid(),we=m.createPyramid(),Ce=0,F+=t,V!==null&&(V+=t),fn(0))},getBarCount:()=>Y(),getBar:e=>e>=0&&e<Y()?m.readBar(N,Math.floor(e)):null,scrollToRealtime(e=!0){let t=Y()-1+(k.rightOffset??8);nt=null,e&&D(F)&&Math.abs(t-F)*P<I*6?rt={from:F,to:t,start:typeof performance<`u`?performance.now():Date.now()}:F=t,$()},fitContent(){let e=Y();e&&Fi.setVisibleRange({from:-.5,to:e-1+(k.rightOffset??8)})},getVisibleRange:()=>xr(),setVisibleRange({from:e,to:t}){t>e&&(nt=null,rt=null,it={from:e,to:t},wr(it),$())},getVisibleTimeRange(){let e=xr();return{from:Zt(e.from),to:Zt(e.to)}},setVisibleTimeRange({from:e,to:t}){Y()&&t>e&&Fi.setVisibleRange({from:Qt(e),to:Qt(t)})},setCrosshair(e,t){Et=e===null||!D(e)?null:{time:e,price:t??NaN},$()},setScaleMode(e){k={...k,scaleMode:e};let t=Re.get(b);t&&(t.auto=!0),$()},resetPriceScales(){for(let e of Re.values())e.auto=!0;$()},setDrawingTool:e=>Dr(e,!0),getDrawingTool:()=>ut,getDrawings:()=>W,setDrawings(e){jr(e,!1)},removeDrawing:Ir,updateDrawing:Fr,selectDrawing:e=>Or(e),undo:Nr,redo:Pr,getUndoState:kr,startReplay(e){if(!Y()&&!K)return;if(e===void 0){K&&ci(!0),At=!0,ti(),$();return}let t=K?K.source:N;ai(m.indexOfTime(t.time,t.length,e))},replayStep:(e=1)=>oi(Math.max(1,Math.floor(e))),replayPlay:e=>si(e),replayPause(){K&&(ii(),ti())},stopReplay:()=>ci(!0),getReplayState:ei,toDataURL(e=`image/png`,t){return Oi()?.toDataURL(e,t)??``},toBlob(e=`image/png`,t){let n=Oi();return new Promise(r=>{!n||typeof n.toBlob!=`function`?r(null):n.toBlob(r,e,t)})},async requestFullscreen(){typeof j.requestFullscreen==`function`&&await j.requestFullscreen()},async exitFullscreen(){O.fullscreenElement===j&&typeof O.exitFullscreen==`function`&&await O.exitFullscreen()},isFullscreen:()=>O.fullscreenElement===j,setIndicatorVisible(e,t){De.set(e,t),$()},getRenderer:()=>We?.kind??null,ready:Qe,refreshTheme:Ti,resize:()=>$(),on(e,t){let n=Nt.get(e);return n||Nt.set(e,n=new Set),n.add(t),()=>n.delete(t)},destroy(){A||(A=!0,Ke&&(de?.cancelAnimationFrame?de.cancelAnimationFrame(Ke):clearTimeout(Ke)),kt&&clearInterval(kt),K?.timer&&clearInterval(K.timer),O.removeEventListener(`fullscreenchange`,Ai),wi?.disconnect(),Pi(),Ei(),Di?.disconnect(),j.removeEventListener(`wheel`,mi),We?.destroy(),We=null,Ze(null),Nt.clear(),j.remove())}};return ne.set(Fi,{setTimeRange(e){Tt=!0,Fi.setVisibleTimeRange(e)}}),Fi};exports.createTradingChart=le,exports.syncHooks=ne;
|
|
2
2
|
//# sourceMappingURL=chart.cjs.map
|