lightweight-charts-drawing 0.1.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.
@@ -0,0 +1,2 @@
1
+ (function(y,q){typeof exports=="object"&&typeof module<"u"?q(exports):typeof define=="function"&&define.amd?define(["exports"],q):(y=typeof globalThis<"u"?globalThis:y||self,q(y.LightweightChartsDrawing={}))})(this,(function(y){"use strict";var kr=Object.defineProperty;var Fr=(y,q,V)=>q in y?kr(y,q,{enumerable:!0,configurable:!0,writable:!0,value:V}):y[q]=V;var u=(y,q,V)=>Fr(y,typeof q!="symbol"?q+"":q,V);const q={lineColor:"#2962FF",lineWidth:2,lineDash:[],fillColor:"rgba(41, 98, 255, 0.1)",fillOpacity:.1,showLabels:!0,labelFont:"12px sans-serif",labelColor:"#2962FF"};function V(f,s,t){const i=t.x-s.x,e=t.y-s.y,n=i*i+e*e;if(n===0){const h=f.x-s.x,d=f.y-s.y;return Math.sqrt(h*h+d*d)}let o=((f.x-s.x)*i+(f.y-s.y)*e)/n;o=Math.max(0,Math.min(1,o));const r=s.x+o*i,a=s.y+o*e,c=f.x-r,l=f.y-a;return Math.sqrt(c*c+l*l)}function Fn(f,s,t){const i=t.x-s.x,e=t.y-s.y,n=i*i+e*e;if(n===0){const a=f.x-s.x,c=f.y-s.y;return Math.sqrt(a*a+c*c)}const o=Math.abs(e*f.x-i*f.y+t.x*s.y-t.y*s.x),r=Math.sqrt(n);return o/r}function D(f,s){const t=s.x-f.x,i=s.y-f.y;return Math.sqrt(t*t+i*i)}function ns(f,s,t){return D(f,s)<=t}function M(f,s,t,i,e,n){const o=s.x-f.x,r=s.y-f.y;let a={...f},c={...s};if(o===0)return e&&(a={x:f.x,y:0}),n&&(c={x:s.x,y:i}),{start:a,end:c};const l=r/o,h=f.y-l*f.x;if(e){const d=h;d>=0&&d<=i?a={x:0,y:d}:d<0?a={x:-h/l,y:0}:a={x:(i-h)/l,y:i}}if(n){const d=l*t+h;d>=0&&d<=i?c={x:t,y:d}:d<0?c={x:-h/l,y:0}:c={x:(i-h)/l,y:i}}return{start:a,end:c}}function zn(f,s){return Math.atan2(s.y-f.y,s.x-f.x)}function Q(f,s){return zn(f,s)*(180/Math.PI)}function is(f,s,t){const i=Math.cos(t),e=Math.sin(t),n=f.x-s.x,o=f.y-s.y;return{x:s.x+n*i-o*e,y:s.y+n*e+o*i}}function k(f,s){return{x:(f.x+s.x)/2,y:(f.y+s.y)/2}}function ss(f,s,t){return{x:f.x+(s.x-f.x)*t,y:f.y+(s.y-f.y)*t}}class I{constructor(s,t=[],i={},e={}){u(this,"id");u(this,"_anchors",[]);u(this,"_style");u(this,"_options");u(this,"_state","normal");u(this,"_series",null);u(this,"_chart",null);u(this,"_container",null);u(this,"_requestUpdateFn",null);this.id=s,this._anchors=[...t],this._style={...q,...i},this._options={visible:!0,locked:!1,zIndex:0,extendLeft:!1,extendRight:!1,...e}}get anchors(){return this._anchors}get style(){return this._style}get options(){return this._options}get state(){return this._state}set anchors(s){this._anchors=[...s],this.requestUpdate()}set style(s){this._style={...s},this.requestUpdate()}set options(s){this._options={...s},this.requestUpdate()}set state(s){this._state=s,this.requestUpdate()}attach(s,t,i){this._series&&this.detach(),this._series=s,this._chart=t,this._container=i??null,s.attachPrimitive(this)}detach(){this._series&&(this._series.detachPrimitive(this),this._series=null,this._chart=null,this._container=null,this._requestUpdateFn=null)}isAttached(){return this._series!==null}requestUpdate(){this._requestUpdateFn&&this._requestUpdateFn()}attached(s){this._chart=s.chart,this._series=s.series,this._requestUpdateFn=s.requestUpdate}detached(){this._chart=null,this._series=null,this._container=null,this._requestUpdateFn=null}hitTest(s,t){const i=this.getViewport();if(!i)return null;const e={x:s,y:t};return this.testHit(e,i)?{cursorStyle:this._options.locked?"default":"pointer",externalId:this.id,zOrder:"normal"}:null}autoscaleInfo(){if(this._anchors.length===0)return null;const s=this._anchors.map(t=>t.price);return{priceRange:{minValue:Math.min(...s),maxValue:Math.max(...s)}}}setAnchors(s){this._anchors=[...s],this.requestUpdate()}updateAnchor(s,t){s>=0&&s<this._anchors.length&&(this._anchors[s]={...t},this.requestUpdate())}updateStyle(s){this._style={...this._style,...s},this.requestUpdate()}updateOptions(s){this._options={...this._options,...s},this.requestUpdate()}setState(s){this._state=s,this.requestUpdate()}hitTestAnchor(s,t){const i=this.getControlPoints(t),e=8;for(const n of i){const o=s.x-n.x,r=s.y-n.y;if(Math.sqrt(o*o+r*r)<=e)return n.index}return null}getControlPoints(s){const t=[];for(let i=0;i<this._anchors.length;i++){const e=this._anchors[i],n=this.anchorToPixel(e,s);n&&t.push({index:i,x:n.x,y:n.y,radius:6})}return t}anchorToPixel(s,t){const i=t.timeScale.timeToCoordinate(s.time),e=t.priceScale.priceToCoordinate(s.price);return i===null||e===null?null:{x:i,y:e}}pixelToAnchor(s,t){const i=t.timeScale.coordinateToTime(s.x),e=t.priceScale.coordinateToPrice(s.y);return i===null||e===null?null:{time:i,price:e}}getViewport(){var i;if(!this._chart||!this._series)return null;const s=this._chart.timeScale(),t=((i=this._container)==null?void 0:i.clientHeight)??400;return{width:s.width(),height:t,timeScale:{coordinateToTime:e=>s.coordinateToTime(e),timeToCoordinate:e=>s.timeToCoordinate(e),logicalToCoordinate:e=>s.logicalToCoordinate(e)},priceScale:{coordinateToPrice:e=>this._series.coordinateToPrice(e),priceToCoordinate:e=>this._series.priceToCoordinate(e)}}}toJSON(){return{id:this.id,type:this.type,anchors:[...this._anchors],style:{...this._style},options:{...this._options}}}fromJSON(s){this._anchors=[...s.anchors],this._style={...q,...s.style},this._options={...this._options,...s.options},this.requestUpdate()}}class rs{constructor(){u(this,"_drawings",new Map);u(this,"_selectedId",null);u(this,"_chart",null);u(this,"_series",null);u(this,"_container",null);u(this,"_listeners",new Map);u(this,"_isAttached",!1);u(this,"_activeTool",null);u(this,"_isDragging",!1);u(this,"_dragAnchorIndex",null);this.handleMouseDown=this.handleMouseDown.bind(this),this.handleMouseMove=this.handleMouseMove.bind(this),this.handleMouseUp=this.handleMouseUp.bind(this),this.handleClick=this.handleClick.bind(this)}attach(s,t,i){this._isAttached&&this.detach(),this._chart=s,this._series=t,this._container=i,this._isAttached=!0;for(const e of this._drawings.values())e.attach(t,s,this._container??void 0);s.subscribeClick(this.handleClick),i.addEventListener("mousedown",this.handleMouseDown),i.addEventListener("mousemove",this.handleMouseMove),i.addEventListener("mouseup",this.handleMouseUp)}detach(){if(this._isAttached){for(const s of this._drawings.values())s.detach();this._chart&&this._chart.unsubscribeClick(this.handleClick),this._container&&(this._container.removeEventListener("mousedown",this.handleMouseDown),this._container.removeEventListener("mousemove",this.handleMouseMove),this._container.removeEventListener("mouseup",this.handleMouseUp)),this._chart=null,this._series=null,this._container=null,this._isAttached=!1}}isAttached(){return this._isAttached}addDrawing(s){if(this._drawings.has(s.id)){console.warn(`Drawing with id ${s.id} already exists`);return}this._drawings.set(s.id,s),this._isAttached&&this._series&&this._chart&&s.attach(this._series,this._chart,this._container??void 0),this.emit("drawing:added",{drawingId:s.id,drawing:s})}removeDrawing(s){const t=this._drawings.get(s);t&&(this._selectedId===s&&this.deselectAll(),t.detach(),this._drawings.delete(s),this.emit("drawing:removed",{drawingId:s}))}getDrawing(s){return this._drawings.get(s)}getAllDrawings(){return Array.from(this._drawings.values())}clearAll(){for(const s of this._drawings.values())s.detach();this._drawings.clear(),this._selectedId=null,this.emit("drawing:cleared",{})}selectDrawing(s){const t=this._drawings.get(s);if(t){if(this._selectedId&&this._selectedId!==s){const i=this._drawings.get(this._selectedId);i&&i.setState("normal")}t.setState("selected"),this._selectedId=s,this.emit("drawing:selected",{drawingId:s,drawing:t})}}deselectAll(){if(this._selectedId){const s=this._drawings.get(this._selectedId);s&&s.setState("normal");const t=this._selectedId;this._selectedId=null,this.emit("drawing:deselected",{drawingId:t})}}getSelectedDrawing(){return this._selectedId&&this._drawings.get(this._selectedId)||null}setActiveTool(s){this._activeTool=s,this.emit("tool:changed",{toolType:s||void 0})}getActiveTool(){return this._activeTool}hitTest(s){const t=this.getViewport();if(!t)return null;const i=Array.from(this._drawings.values()).reverse();for(const e of i)if(e.options.visible&&e.testHit(s,t))return e;return null}hitTestAnchor(s){if(!this._selectedId)return null;const t=this._drawings.get(this._selectedId);if(!t)return null;const i=this.getViewport();return i?t.hitTestAnchor(s,i):null}handleClick(s){if(!s.point)return;const t={x:s.point.x,y:s.point.y};if(!this._activeTool){const i=this.hitTest(t);i?this.selectDrawing(i.id):this.deselectAll()}}handleMouseDown(s){const t=this.getPointFromEvent(s);if(t&&this._selectedId){const i=this.hitTestAnchor(t);if(i!==null){const e=this._drawings.get(this._selectedId);if(e&&!e.options.locked){this._isDragging=!0,this._dragAnchorIndex=i,e.setState("editing");return}}}}handleMouseMove(s){if(!this._isDragging||this._dragAnchorIndex===null||!this._selectedId)return;const t=this._drawings.get(this._selectedId);if(!t)return;const i=this.getPointFromEvent(s);if(!i)return;const e=this.getViewport();if(!e)return;const n=e.timeScale.coordinateToTime(i.x),o=e.priceScale.coordinateToPrice(i.y);n!==null&&o!==null&&(t.updateAnchor(this._dragAnchorIndex,{time:n,price:o}),this.emit("drawing:updated",{drawingId:t.id,drawing:t}))}handleMouseUp(s){if(this._isDragging&&this._selectedId){const t=this._drawings.get(this._selectedId);t&&t.setState("selected")}this._isDragging=!1,this._dragAnchorIndex=null}getPointFromEvent(s){if(!this._container)return null;const t=this._container.getBoundingClientRect();return{x:s.clientX-t.left,y:s.clientY-t.top}}getViewport(){var i;if(!this._chart||!this._series)return null;const s=this._chart.timeScale(),t=((i=this._container)==null?void 0:i.clientHeight)??400;return{width:s.width(),height:t,timeScale:{coordinateToTime:e=>s.coordinateToTime(e),timeToCoordinate:e=>s.timeToCoordinate(e),logicalToCoordinate:e=>s.logicalToCoordinate(e)},priceScale:{coordinateToPrice:e=>this._series.coordinateToPrice(e),priceToCoordinate:e=>this._series.priceToCoordinate(e)}}}exportDrawings(){return this.getAllDrawings().map(s=>s.toJSON())}importDrawings(s,t){for(const i of s){const e=t(i.type,i);e&&this.addDrawing(e)}}on(s,t){return this._listeners.has(s)||this._listeners.set(s,new Set),this._listeners.get(s).add(t),()=>{var i;(i=this._listeners.get(s))==null||i.delete(t)}}emit(s,t){const i={type:s,...t},e=this._listeners.get(s);if(e)for(const n of e)n(i)}}class Te{constructor(s){u(this,"_state","idle");u(this,"_anchors",[]);u(this,"_previewAnchor",null);u(this,"_editingAnchorIndex",null);u(this,"_config");this._config=s}getState(){return this._state}getAnchors(){return[...this._anchors]}getPreviewAnchor(){return this._previewAnchor}onMouseDown(s){const t=this.pointToAnchor(s.point);if(t)switch(this._state){case"idle":this._anchors=[t],this._state="placing",this.notifyAnchorAdded(t,0);break;case"placing":this._anchors.length<this._config.requiredAnchors&&(this._anchors.push(t),this.notifyAnchorAdded(t,this._anchors.length-1),this._anchors.length>=this._config.requiredAnchors&&(this._state="complete",this._previewAnchor=null,this.notifyComplete()));break}}onMouseMove(s){const t=this.pointToAnchor(s.point);if(t)switch(this._state){case"placing":this._previewAnchor=t,this.notifyPreviewMove(t);break;case"editing":this._editingAnchorIndex!==null&&(this._anchors[this._editingAnchorIndex]=t,this.notifyAnchorUpdated(t,this._editingAnchorIndex));break}}onMouseUp(s){this._state==="editing"&&(this._editingAnchorIndex=null,this._state="complete")}onKeyDown(s){s==="Escape"&&this.cancel()}isComplete(){return this._state==="complete"}reset(){this._state="idle",this._anchors=[],this._previewAnchor=null,this._editingAnchorIndex=null}startEditingAnchor(s){s>=0&&s<this._anchors.length&&(this._state="editing",this._editingAnchorIndex=s)}setAnchors(s){this._anchors=[...s],s.length>=this._config.requiredAnchors&&(this._state="complete")}pointToAnchor(s){let t=this._config.pixelToChart(s);return t&&this._config.snapConfig&&(t=this.applySnap(t,s)),t}applySnap(s,t){return s}cancel(){var s,t;this.reset(),(t=(s=this._config).onCancel)==null||t.call(s)}notifyAnchorAdded(s,t){var i,e;(e=(i=this._config).onAnchorAdded)==null||e.call(i,s,t)}notifyAnchorUpdated(s,t){var i,e;(e=(i=this._config).onAnchorUpdated)==null||e.call(i,s,t)}notifyPreviewMove(s){var t,i;(i=(t=this._config).onPreviewMove)==null||i.call(t,s)}notifyComplete(){var s,t;(t=(s=this._config).onComplete)==null||t.call(s)}}class os extends Te{constructor(s){super({...s,requiredAnchors:2})}}class as extends Te{constructor(s){super({...s,requiredAnchors:3})}}class cs extends Te{constructor(s){super({...s,requiredAnchors:1})}}function A(f,s,t=1){f.strokeStyle=s.lineColor,f.lineWidth=s.lineWidth*t,f.lineCap="round",f.lineJoin="round",s.lineDash&&s.lineDash.length>0?f.setLineDash(s.lineDash.map(i=>i*t)):f.setLineDash([]),s.fillColor&&(f.fillStyle=s.fillColor)}function R(f,s,t,i=1){f.beginPath(),f.moveTo(s.x*i,s.y*i),f.lineTo(t.x*i,t.y*i),f.stroke()}function F(f,s,t,i=[5,5],e=1){f.save(),f.setLineDash(i.map(n=>n*e)),R(f,s,t,e),f.restore()}function vn(f,s,t=!1,i=1,e="#2962FF"){const n=s.x*i,o=s.y*i,r=4*i,a=1.5*i;f.beginPath(),f.arc(n,o,r,0,Math.PI*2),f.fillStyle="#131722",f.fill(),f.beginPath(),f.arc(n,o,r-a/2,0,Math.PI*2),f.strokeStyle=t?"#ffffff":e,f.lineWidth=a,f.stroke()}function L(f,s,t=null,i=1,e="#2962FF"){for(const n of s)vn(f,n,n.index===t,i,e)}function ls(f,s,t,i=10,e=1){const n=Math.atan2(t.y-s.y,t.x-s.x),o=i*e,r=t.x*e,a=t.y*e;f.beginPath(),f.moveTo(r,a),f.lineTo(r-o*Math.cos(n-Math.PI/6),a-o*Math.sin(n-Math.PI/6)),f.moveTo(r,a),f.lineTo(r-o*Math.cos(n+Math.PI/6),a-o*Math.sin(n+Math.PI/6)),f.stroke()}function kn(f,s,t,i=10,e=1){const n=Math.atan2(t.y-s.y,t.x-s.x),o=i*e,r=t.x*e,a=t.y*e;f.beginPath(),f.moveTo(r,a),f.lineTo(r-o*Math.cos(n-Math.PI/6),a-o*Math.sin(n-Math.PI/6)),f.lineTo(r-o*Math.cos(n+Math.PI/6),a-o*Math.sin(n+Math.PI/6)),f.closePath(),f.fill()}function Un(f,s,t,i=!1,e=1){f.beginPath(),f.arc(s.x*e,s.y*e,t*e,0,Math.PI*2),i&&f.fill(),f.stroke()}function ie(f,s,t,i,e=!1,n=1){const o=s.x*n,r=s.y*n,a=t*n,c=i*n;e&&f.fillRect(o,r,a,c),f.strokeRect(o,r,a,c)}function st(f,s,t,i="12px sans-serif",e="#000000",n="left",o="middle",r=1){f.save(),f.font=i,f.fillStyle=e,f.textAlign=n,f.textBaseline=o,f.fillText(s,t.x*r,t.y*r),f.restore()}function z(f,s,t,i={},e=1){var x;const{font:n="12px sans-serif",textColor:o="#ffffff",backgroundColor:r="rgba(0, 0, 0, 0.7)",padding:a=4,borderRadius:c=3}=i;f.save(),f.font=n;const h=f.measureText(s).width,d=parseInt(((x=n.match(/(\d+)px/))==null?void 0:x[1])??"12"),p=t.x*e,g=t.y*e,_=a*e,w=c*e;f.fillStyle=r,f.beginPath(),f.roundRect(p-_,g-d/2-_,h+_*2,d+_*2,w),f.fill(),f.fillStyle=o,f.textAlign="left",f.textBaseline="middle",f.fillText(s,p,g),f.restore()}function hs(f,s){const t=s-f,i=f!==0?t/f*100:0;return{change:t,percentage:i}}function ds(f,s=2){return f.toFixed(s)}function us(f,s=2){return`${f>=0?"+":""}${f.toFixed(s)}%`}class re{anchorToPixel(s,t){const i=t.timeScale.timeToCoordinate(s.time),e=t.priceScale.priceToCoordinate(s.price);return i===null||e===null?null:{x:i,y:e}}drawAnchorPoint(s,t,i){vn(s,{x:t.x,y:t.y},!0,i)}}class fs extends re{render(s,t,i,e,n,o){if(t.length===0)return;const r=this.anchorToPixel(t[0],e);if(r&&(this.drawAnchorPoint(s,r,o),i)){const a=this.anchorToPixel(i,e);if(!a)return;s.strokeStyle=n.lineColor,s.lineWidth=n.lineWidth*o,s.globalAlpha=.7,F(s,r,a,[5,5],o),this.drawAnchorPoint(s,a,o),s.globalAlpha=1}}}class ps extends re{render(s,t,i,e,n,o){const r=t[0]||i;if(!r)return;const a=this.anchorToPixel(r,e);if(!a)return;s.strokeStyle=n.lineColor,s.lineWidth=n.lineWidth*o,s.globalAlpha=t.length===0?.5:.7;const c={x:0,y:a.y},l={x:e.width,y:a.y};t.length===0?F(s,c,l,[5,5],o):R(s,c,l,o),this.drawAnchorPoint(s,a,o),s.globalAlpha=1}}class gs extends re{render(s,t,i,e,n,o){const r=t[0]||i;if(!r)return;const a=this.anchorToPixel(r,e);if(!a)return;s.strokeStyle=n.lineColor,s.lineWidth=n.lineWidth*o,s.globalAlpha=t.length===0?.5:.7;const c={x:a.x,y:0},l={x:a.x,y:e.height};t.length===0?F(s,c,l,[5,5],o):R(s,c,l,o),this.drawAnchorPoint(s,a,o),s.globalAlpha=1}}class xs extends re{render(s,t,i,e,n,o){if(t.length===0)return;const r=[];for(const a of t){const c=this.anchorToPixel(a,e);c&&r.push(c)}if(i){const a=this.anchorToPixel(i,e);a&&r.push(a)}if(r.length!==0){s.strokeStyle=n.lineColor,s.lineWidth=n.lineWidth*o,s.globalAlpha=.7;for(let a=0;a<r.length-1;a++)a===r.length-2&&i?F(s,r[a],r[a+1],[5,5],o):R(s,r[a],r[a+1],o);for(const a of r)this.drawAnchorPoint(s,a,o);s.globalAlpha=1}}}class qn{constructor(s){u(this,"_renderer");this._renderer=new _s(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class _s{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible)return;const o=this._drawing.computeGeometry(n);A(t,this._drawing.style,e);for(const a of o)this.renderGeometry(t,a,n,e);const r=this._drawing.state;if(r==="selected"||r==="editing"||r==="hovered"){const a=this._drawing.getControlPoints(n);L(t,a,null,e,this._drawing.style.lineColor)}}renderGeometry(s,t,i,e){switch(t.type){case"line":this.renderLine(s,t,i,e);break;case"arc":this.renderArc(s,t,e);break;case"rectangle":this.renderRectangle(s,t,e);break;case"polygon":this.renderPolygon(s,t,e);break;case"text":this.renderText(s,t,e);break}}renderLine(s,t,i,e){let n=t.start,o=t.end;if(t.extendLeft||t.extendRight){const r=M(n,o,i.width,i.height,t.extendLeft??!1,t.extendRight??!1);n=r.start,o=r.end}R(s,n,o,e)}renderArc(s,t,i){s.beginPath(),s.arc(t.center.x*i,t.center.y*i,t.radius*i,t.startAngle,t.endAngle,t.counterClockwise),s.stroke()}renderRectangle(s,t,i){const e=t.topLeft.x*i,n=t.topLeft.y*i,o=t.width*i,r=t.height*i;t.rotation?(s.save(),s.translate(e+o/2,n+r/2),s.rotate(t.rotation),s.strokeRect(-o/2,-r/2,o,r),s.restore()):s.strokeRect(e,n,o,r)}renderPolygon(s,t,i){if(!(t.points.length<2)){s.beginPath(),s.moveTo(t.points[0].x*i,t.points[0].y*i);for(let e=1;e<t.points.length;e++)s.lineTo(t.points[e].x*i,t.points[e].y*i);t.closed&&(s.closePath(),s.fill()),s.stroke()}}renderText(s,t,i){s.save(),t.font&&(s.font=t.font),t.color&&(s.fillStyle=t.color),t.align&&(s.textAlign=t.align),t.baseline&&(s.textBaseline=t.baseline);const e=t.position.x*i,n=t.position.y*i;t.rotation?(s.translate(e,n),s.rotate(t.rotation),s.fillText(t.text,0,0)):s.fillText(t.text,e,n),s.restore()}}const X=class X extends I{constructor(s,t=[],i={},e={}){super(s,t,i,e)}isValid(){return this._anchors.length>=X.REQUIRED_ANCHORS}paneViews(){return[new qn(this)]}computeGeometry(s){if(!this.isValid())return[];const t=this.anchorToPixel(this._anchors[0],s),i=this.anchorToPixel(this._anchors[1],s);return!t||!i?[]:[{type:"line",start:t,end:i,extendLeft:this._options.extendLeft,extendRight:this._options.extendRight}]}testHit(s,t){if(!this.isValid())return!1;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return!1;const n=this._options.extendLeft||this._options.extendRight;let o;return n?o=Fn(s,i,e):o=V(s,i,e),o<=X.HIT_THRESHOLD}static timeToSeconds(s){return typeof s=="number"?s:typeof s=="string"?new Date(s).getTime()/1e3:typeof s=="object"&&s!==null&&"year"in s?new Date(s.year,s.month-1,s.day).getTime()/1e3:NaN}getAngle(){if(!this.isValid())return 0;const s=this._anchors[1].price-this._anchors[0].price,t=X.timeToSeconds(this._anchors[1].time)-X.timeToSeconds(this._anchors[0].time);return Math.atan2(s,t)*(180/Math.PI)}getPriceChange(){if(!this.isValid())return{absolute:0,percentage:0};const s=this._anchors[0].price,i=this._anchors[1].price-s,e=s!==0?i/s*100:0;return{absolute:i,percentage:e}}getTimeSpan(){if(!this.isValid())return 0;const s=X.timeToSeconds(this._anchors[0].time),t=X.timeToSeconds(this._anchors[1].time);return Math.round(Math.abs(t-s)/86400)}};u(X,"HIT_THRESHOLD",5),u(X,"REQUIRED_ANCHORS",2);let rt=X;class Nn{constructor(s){u(this,"_renderer");this._renderer=new ws(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class ws{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;A(t,this._drawing.style,e),this.renderLine(t,r,a,n,e),this.renderLabels(t,r,a,e);const c=this._drawing.state;if(c==="selected"||c==="editing"||c==="hovered"){const l=this._drawing.getControlPoints(n);L(t,l,null,e,this._drawing.style.lineColor)}}renderLine(s,t,i,e,n){let o=t,r=i;const a=this._drawing.options;if(a.extendLeft||a.extendRight){const c=M(t,i,e.width,e.height,a.extendLeft??!1,a.extendRight??!1);o=c.start,r=c.end}R(s,o,r,n)}renderLabels(s,t,i,e){const n=this._drawing.trendLineOptions;if(!n.showAngle&&!n.showPriceChange&&!n.showPercentChange&&!n.showBars)return;const o=[];if(n.showAngle){const d=Q(t,i);o.push(`${d.toFixed(1)}°`)}if(n.showPriceChange){const{absolute:d}=this._drawing.getPriceChange(),p=d>=0?"+":"";o.push(`${p}${d.toFixed(2)}`)}if(n.showPercentChange){const{percentage:d}=this._drawing.getPriceChange(),p=d>=0?"+":"";o.push(`${p}${d.toFixed(2)}%`)}if(n.showBars){const d=this._drawing.getTimeSpan();o.push(`${d} bars`)}if(o.length===0)return;const r=k(t,i),a=20,l=i.y<t.y?r.y-a:r.y+a,h=o.join(" | ");z(s,h,{x:r.x,y:l},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e)}}class oe extends rt{constructor(t,i=[],e={},n={}){const{showAngle:o,showPriceChange:r,showPercentChange:a,showBars:c,...l}=n;super(t,i,e,l);u(this,"type","trend-line");u(this,"_trendLineOptions");this._trendLineOptions={...this._options,showAngle:o??!1,showPriceChange:r??!1,showPercentChange:a??!1,showBars:c??!1}}get trendLineOptions(){return this._trendLineOptions}setTrendLineOptions(t){this._trendLineOptions={...this._trendLineOptions,...t},this.requestUpdate()}paneViews(){return[new Nn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o={type:"line",start:i,end:e,extendLeft:this._options.extendLeft,extendRight:this._options.extendRight};if(n.push(o),this._trendLineOptions.showAngle||this._trendLineOptions.showPriceChange||this._trendLineOptions.showPercentChange||this._trendLineOptions.showBars){const r=this.computeLabelGeometry(i,e);n.push(...r)}return n}computeLabelGeometry(t,i){const e=[],n=k(t,i),o=15,r=[];if(this._trendLineOptions.showAngle){const a=Q(t,i);r.push(`${a.toFixed(1)}°`)}if(this._trendLineOptions.showPriceChange){const{absolute:a}=this.getPriceChange(),c=a>=0?"+":"";r.push(`${c}${a.toFixed(2)}`)}if(this._trendLineOptions.showPercentChange){const{percentage:a}=this.getPriceChange(),c=a>=0?"+":"";r.push(`${c}${a.toFixed(2)}%`)}if(this._trendLineOptions.showBars){const a=this.getTimeSpan();r.push(`${a} bars`)}return r.length>0&&e.push({type:"text",position:{x:n.x,y:n.y-o},text:r.join(" | "),font:this._style.labelFont,color:this._style.labelColor,align:"center",baseline:"bottom"}),e}clone(t){return new oe(t,[...this._anchors],{...this._style},{...this._trendLineOptions})}toJSON(){return{...super.toJSON(),options:{...this._trendLineOptions}}}fromJSON(t){super.fromJSON(t),t.options&&(this._trendLineOptions={...this._trendLineOptions,...t.options})}static create(t,i,e,n,o){return new oe(t,[i,e],n,o)}}class Bn{constructor(s){u(this,"_renderer");this._renderer=new ys(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class ys{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=n.priceScale.priceToCoordinate(o.price);if(r===null)return;A(t,this._drawing.style,e);const a={x:0,y:r},c={x:n.width,y:r};R(t,a,c,e);const l=this._drawing.horizontalLineOptions;if(l.showPrice){const d=l.labelText||o.price.toFixed(2);z(t,d,{x:n.width-10,y:r},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e)}const h=this._drawing.state;if(h==="selected"||h==="editing"){const d=this._drawing.getControlPoints(n);L(t,d,null,e)}}}const pt=class pt extends I{constructor(t,i=[],e={},n={}){const{showPrice:o,showLabel:r,labelText:a,...c}=n;super(t,i,e,c);u(this,"type","horizontal-line");u(this,"_horizontalLineOptions");this._horizontalLineOptions={...this._options,showPrice:o??!0,showLabel:r??!1,labelText:a??""}}get horizontalLineOptions(){return this._horizontalLineOptions}setHorizontalLineOptions(t){this._horizontalLineOptions={...this._horizontalLineOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=pt.REQUIRED_ANCHORS}paneViews(){return[new Bn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this._anchors[0],e=t.priceScale.priceToCoordinate(i.price);if(e===null)return[];const n=[],o={type:"line",start:{x:0,y:e},end:{x:t.width,y:e}};if(n.push(o),this._horizontalLineOptions.showPrice){const r=i.price.toFixed(2);n.push({type:"text",position:{x:t.width-5,y:e-10},text:r,align:"right",baseline:"bottom",color:this._style.labelColor,font:this._style.labelFont})}return n}testHit(t,i){if(!this.isValid())return!1;const e=this._anchors[0],n=i.priceScale.priceToCoordinate(e.price);return n===null?!1:Math.abs(t.y-n)<=pt.HIT_THRESHOLD}clone(t){return new pt(t,[...this._anchors],{...this._style},{...this._horizontalLineOptions})}static create(t,i,e,n,o){return new pt(t,[{time:e,price:i}],n,o)}};u(pt,"REQUIRED_ANCHORS",1),u(pt,"HIT_THRESHOLD",5);let be=pt;class Gn{constructor(s){u(this,"_renderer");this._renderer=new Ps(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ps{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=n.timeScale.timeToCoordinate(o.time);if(r===null)return;A(t,this._drawing.style,e);const a={x:r,y:0},c={x:r,y:n.height};R(t,a,c,e);const l=this._drawing.verticalLineOptions;if(l.showTime){const d=l.labelText||String(o.time);z(t,d,{x:r,y:n.height-10},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e)}const h=this._drawing.state;if(h==="selected"||h==="editing"){const d=this._drawing.getControlPoints(n);L(t,d,null,e)}}}const gt=class gt extends I{constructor(t,i=[],e={},n={}){const{showTime:o,showLabel:r,labelText:a,...c}=n;super(t,i,e,c);u(this,"type","vertical-line");u(this,"_verticalLineOptions");this._verticalLineOptions={...this._options,showTime:o??!0,showLabel:r??!1,labelText:a??""}}get verticalLineOptions(){return this._verticalLineOptions}setVerticalLineOptions(t){this._verticalLineOptions={...this._verticalLineOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=gt.REQUIRED_ANCHORS}paneViews(){return[new Gn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this._anchors[0],e=t.timeScale.timeToCoordinate(i.time);if(e===null)return[];const n=[],o={type:"line",start:{x:e,y:0},end:{x:e,y:t.height}};return n.push(o),n}testHit(t,i){if(!this.isValid())return!1;const e=this._anchors[0],n=i.timeScale.timeToCoordinate(e.time);return n===null?!1:Math.abs(t.x-n)<=gt.HIT_THRESHOLD}clone(t){return new gt(t,[...this._anchors],{...this._style},{...this._verticalLineOptions})}static create(t,i,e,n,o){return new gt(t,[{time:i,price:e}],n,o)}};u(gt,"REQUIRED_ANCHORS",1),u(gt,"HIT_THRESHOLD",5);let Re=gt;class Wn{constructor(s){u(this,"_renderer");this._renderer=new Os(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Os{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;A(t,this._drawing.style,e);const c=M(r,a,n.width,n.height,!1,!0);if(R(t,r,c.end,e),this._drawing.rayOptions.showAngle){const h=Q(r,a),d=k(r,a);z(t,`${h.toFixed(1)}°`,{x:d.x,y:d.y-15},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e)}const l=this._drawing.state;if(l==="selected"||l==="editing"){const h=this._drawing.getControlPoints(n);L(t,h,null,e)}}}class ae extends rt{constructor(t,i=[],e={},n={}){const{showAngle:o,...r}=n;super(t,i,e,{...r,extendRight:!0});u(this,"type","ray");u(this,"_rayOptions");this._rayOptions={...this._options,showAngle:o??!1}}get rayOptions(){return this._rayOptions}setRayOptions(t){this._rayOptions={...this._rayOptions,...t},this.requestUpdate()}paneViews(){return[new Wn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);return!i||!e?[]:[{type:"line",start:i,end:e,extendLeft:!1,extendRight:!0}]}clone(t){return new ae(t,[...this._anchors],{...this._style},{...this._rayOptions})}static create(t,i,e,n,o){return new ae(t,[i,e],n,o)}}class $n{constructor(s){u(this,"_renderer");this._renderer=new ms(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class ms{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;A(t,this._drawing.style,e),R(t,r,a,e),t.fillStyle=this._drawing.style.lineColor;const c=this._drawing.arrowOptions.arrowSize??12;kn(t,r,a,c,e),this._drawing.arrowOptions.showBothEnds&&kn(t,a,r,c,e);const l=this._drawing.state;if(l==="selected"||l==="editing"){const h=this._drawing.getControlPoints(n);L(t,h,null,e)}}}class ce extends rt{constructor(t,i=[],e={},n={}){const{arrowSize:o,showBothEnds:r,...a}=n;super(t,i,e,a);u(this,"type","arrow");u(this,"_arrowOptions");this._arrowOptions={...this._options,arrowSize:o??12,showBothEnds:r??!1}}get arrowOptions(){return this._arrowOptions}setArrowOptions(t){this._arrowOptions={...this._arrowOptions,...t},this.requestUpdate()}paneViews(){return[new $n(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);return!i||!e?[]:[{type:"line",start:i,end:e}]}clone(t){return new ce(t,[...this._anchors],{...this._style},{...this._arrowOptions})}static create(t,i,e,n,o){return new ce(t,[i,e],n,o)}}class Qn{constructor(s){u(this,"_renderer");this._renderer=new Ts(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ts{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;A(t,this._drawing.style,e);const c=M(r,a,n.width,n.height,!0,!0);if(R(t,c.start,c.end,e),this._drawing.extendedLineOptions.showAngle){const h=Q(r,a),d=k(r,a);z(t,`${h.toFixed(1)}°`,{x:d.x,y:d.y-15},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e)}const l=this._drawing.state;if(l==="selected"||l==="editing"){const h=this._drawing.getControlPoints(n);L(t,h,null,e)}}}class le extends rt{constructor(t,i=[],e={},n={}){const{showAngle:o,...r}=n;super(t,i,e,{...r,extendLeft:!0,extendRight:!0});u(this,"type","extended-line");u(this,"_extendedLineOptions");this._extendedLineOptions={...this._options,showAngle:o??!1}}get extendedLineOptions(){return this._extendedLineOptions}setExtendedLineOptions(t){this._extendedLineOptions={...this._extendedLineOptions,...t},this.requestUpdate()}paneViews(){return[new Qn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);return!i||!e?[]:[{type:"line",start:i,end:e,extendLeft:!0,extendRight:!0}]}clone(t){return new le(t,[...this._anchors],{...this._style},{...this._extendedLineOptions})}static create(t,i,e,n,o){return new le(t,[i,e],n,o)}}class Xn{constructor(s){u(this,"_renderer");this._renderer=new bs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class bs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=n.timeScale.timeToCoordinate(o.time),a=n.priceScale.priceToCoordinate(o.price);if(r===null||a===null)return;A(t,this._drawing.style,e),R(t,{x:0,y:a},{x:n.width,y:a},e),R(t,{x:r,y:0},{x:r,y:n.height},e);const c=this._drawing.crossLineOptions;c.showPrice&&z(t,o.price.toFixed(2),{x:n.width-10,y:a},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e),c.showTime&&z(t,String(o.time),{x:r,y:n.height-10},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e);const l=this._drawing.state;if(l==="selected"||l==="editing"){const h=this._drawing.getControlPoints(n);L(t,h,null,e)}}}const ot=class ot extends I{constructor(t,i=[],e={},n={}){const{showPrice:o,showTime:r,...a}=n;super(t,i,e,a);u(this,"type","cross-line");u(this,"_crossLineOptions");this._crossLineOptions={...this._options,showPrice:o??!0,showTime:r??!0}}get crossLineOptions(){return this._crossLineOptions}setCrossLineOptions(t){this._crossLineOptions={...this._crossLineOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=ot.REQUIRED_ANCHORS}paneViews(){return[new Xn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this._anchors[0],e=t.timeScale.timeToCoordinate(i.time),n=t.priceScale.priceToCoordinate(i.price);if(e===null||n===null)return[];const o=[];return o.push({type:"line",start:{x:0,y:n},end:{x:t.width,y:n}}),o.push({type:"line",start:{x:e,y:0},end:{x:e,y:t.height}}),o}testHit(t,i){if(!this.isValid())return!1;const e=this._anchors[0],n=i.timeScale.timeToCoordinate(e.time),o=i.priceScale.priceToCoordinate(e.price);return n===null||o===null?!1:Math.abs(t.x-n)<=ot.HIT_THRESHOLD||Math.abs(t.y-o)<=ot.HIT_THRESHOLD}clone(t){return new ot(t,[...this._anchors],{...this._style},{...this._crossLineOptions})}static create(t,i,e,n){return new ot(t,[i],e,n)}};u(ot,"REQUIRED_ANCHORS",1),u(ot,"HIT_THRESHOLD",5);let Ce=ot;class jn{constructor(s){u(this,"_renderer");this._renderer=new Rs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Rs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;A(t,this._drawing.style,e),R(t,r,a,e),t.fillStyle=this._drawing.style.lineColor,t.beginPath(),t.arc(r.x*e,r.y*e,4*e,0,Math.PI*2),t.fill(),t.beginPath(),t.arc(a.x*e,a.y*e,4*e,0,Math.PI*2),t.fill();const c=this._drawing.infoLineOptions,l=[];if(c.showDistance){const d=D(r,a);l.push(`${d.toFixed(0)}px`)}if(c.showAngle){const d=Q(r,a);l.push(`${d.toFixed(1)}°`)}if(c.showPriceChange){const d=this._drawing.getPriceChange(),p=d.absolute>=0?"+":"";l.push(`${p}${d.absolute.toFixed(2)}`)}if(c.showPercentChange){const d=this._drawing.getPriceChange(),p=d.percentage>=0?"+":"";l.push(`${p}${d.percentage.toFixed(2)}%`)}if(c.showBars){const d=this._drawing.getTimeSpan();l.push(`${d} bars`)}if(l.length>0){const d=k(r,a);z(t,l.join(" | "),{x:d.x,y:d.y-20},{font:this._drawing.style.labelFont||"11px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"DD",padding:6,borderRadius:4},e)}const h=this._drawing.state;if(h==="selected"||h==="editing"){const d=this._drawing.getControlPoints(n);L(t,d,null,e)}}}class he extends rt{constructor(t,i=[],e={},n={}){const{showDistance:o,showAngle:r,showPriceChange:a,showPercentChange:c,showBars:l,showTime:h,...d}=n;super(t,i,e,d);u(this,"type","info-line");u(this,"_infoLineOptions");this._infoLineOptions={...this._options,showDistance:o??!0,showAngle:r??!0,showPriceChange:a??!0,showPercentChange:c??!0,showBars:l??!0,showTime:h??!1}}get infoLineOptions(){return this._infoLineOptions}setInfoLineOptions(t){this._infoLineOptions={...this._infoLineOptions,...t},this.requestUpdate()}paneViews(){return[new jn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o={type:"line",start:i,end:e};n.push(o);const r=this.computeLabelGeometry(i,e);return n.push(...r),n}computeLabelGeometry(t,i){const e=[],n=k(t,i),o=20,r=[];if(this._infoLineOptions.showDistance){const a=D(t,i);r.push(`${a.toFixed(0)}px`)}if(this._infoLineOptions.showAngle){const a=Q(t,i);r.push(`${a.toFixed(1)}°`)}if(this._infoLineOptions.showPriceChange){const{absolute:a}=this.getPriceChange(),c=a>=0?"+":"";r.push(`${c}${a.toFixed(2)}`)}if(this._infoLineOptions.showPercentChange){const{percentage:a}=this.getPriceChange(),c=a>=0?"+":"";r.push(`${c}${a.toFixed(2)}%`)}if(this._infoLineOptions.showBars){const a=this.getTimeSpan();r.push(`${a} bars`)}return r.length>0&&e.push({type:"text",position:{x:n.x,y:n.y-o},text:r.join(" | "),font:this._style.labelFont,color:this._style.labelColor,align:"center",baseline:"bottom"}),e}getMeasurements(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return null;const{absolute:n,percentage:o}=this.getPriceChange();return{distance:D(i,e),angle:Q(i,e),priceChange:n,percentChange:o,bars:this.getTimeSpan()}}clone(t){return new he(t,[...this._anchors],{...this._style},{...this._infoLineOptions})}static create(t,i,e,n,o){return new he(t,[i,e],n,o)}}class Yn{constructor(s){u(this,"_renderer");this._renderer=new Cs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Cs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;A(t,this._drawing.style,e),R(t,r,a,e);const c=this._drawing.trendAngleOptions;if(c.showArc){const h=(c.arcRadius??40)*e,d=Math.atan2(r.y-a.y,a.x-r.x);t.save(),t.setLineDash([4*e,4*e]),t.strokeStyle=this._drawing.style.lineColor+"80",t.lineWidth=1*e,t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo((r.x+h/e+20)*e,r.y*e),t.stroke(),t.restore(),t.beginPath(),t.strokeStyle=this._drawing.style.lineColor,t.lineWidth=2*e,d>=0?t.arc(r.x*e,r.y*e,h,0,-d,!0):t.arc(r.x*e,r.y*e,h,0,-d,!1),t.stroke(),t.beginPath(),t.fillStyle=this._drawing.style.lineColor+"20",t.moveTo(r.x*e,r.y*e),d>=0?t.arc(r.x*e,r.y*e,h,0,-d,!0):t.arc(r.x*e,r.y*e,h,0,-d,!1),t.closePath(),t.fill()}if(c.showDegrees){const h=Q(r,a),d=(c.arcRadius??40)+15,p=Math.atan2(r.y-a.y,a.x-r.x)/2,g=r.x+d*Math.cos(-p),_=r.y-d*Math.sin(-p);z(t,`${h.toFixed(1)}°`,{x:g,y:_},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e)}const l=this._drawing.state;if(l==="selected"||l==="editing"){const h=this._drawing.getControlPoints(n);L(t,h,null,e)}}}class de extends rt{constructor(t,i=[],e={},n={}){const{showArc:o,arcRadius:r,showDegrees:a,...c}=n;super(t,i,e,c);u(this,"type","trend-angle");u(this,"_trendAngleOptions");this._trendAngleOptions={...this._options,showArc:o??!0,arcRadius:r??40,showDegrees:a??!0}}get trendAngleOptions(){return this._trendAngleOptions}setTrendAngleOptions(t){this._trendAngleOptions={...this._trendAngleOptions,...t},this.requestUpdate()}paneViews(){return[new Yn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o={type:"line",start:i,end:e};if(n.push(o),this._trendAngleOptions.showArc){const r=this.getAngleRadians(i,e),a={type:"arc",center:i,radius:this._trendAngleOptions.arcRadius??40,startAngle:0,endAngle:r};n.push(a)}return n}getAngleRadians(t,i){return Math.atan2(t.y-i.y,i.x-t.x)}getAngle(){return this.isValid()?Q({x:0,y:0},{x:this._anchors[1].price-this._anchors[0].price,y:0}):0}clone(t){return new de(t,[...this._anchors],{...this._style},{...this._trendAngleOptions})}static create(t,i,e,n,o){return new de(t,[i,e],n,o)}}class Jn{constructor(s){u(this,"_renderer");this._renderer=new Ss(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ss{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=n.timeScale.timeToCoordinate(o.time),a=n.priceScale.priceToCoordinate(o.price);if(r===null||a===null)return;A(t,this._drawing.style,e);const c=this._drawing.horizontalRayOptions,l=c.direction??"right",h={x:r,y:a},d={x:l==="right"?n.width:0,y:a};R(t,h,d,e),t.fillStyle=this._drawing.style.lineColor,t.beginPath(),t.arc(r*e,a*e,4*e,0,Math.PI*2),t.fill();const p=8*e,g=l==="right"?(n.width-15)*e:15*e;if(t.beginPath(),l==="right"?(t.moveTo(g,a*e),t.lineTo(g-p,a*e-p/2),t.lineTo(g-p,a*e+p/2)):(t.moveTo(g,a*e),t.lineTo(g+p,a*e-p/2),t.lineTo(g+p,a*e+p/2)),t.closePath(),t.fill(),c.showPrice){const w=l==="right"?n.width-10:10;z(t,o.price.toFixed(2),{x:w,y:a},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e)}const _=this._drawing.state;if(_==="selected"||_==="editing"){const w=this._drawing.getControlPoints(n);L(t,w,null,e)}}}const xt=class xt extends I{constructor(t,i=[],e={},n={}){const{showPrice:o,direction:r,...a}=n;super(t,i,e,a);u(this,"type","horizontal-ray");u(this,"_horizontalRayOptions");this._horizontalRayOptions={...this._options,showPrice:o??!0,direction:r??"right"}}get horizontalRayOptions(){return this._horizontalRayOptions}setHorizontalRayOptions(t){this._horizontalRayOptions={...this._horizontalRayOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=xt.REQUIRED_ANCHORS}paneViews(){return[new Jn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this._anchors[0],e=t.timeScale.timeToCoordinate(i.time),n=t.priceScale.priceToCoordinate(i.price);if(e===null||n===null)return[];const o=[],r={type:"line",start:{x:e,y:n},end:{x:this._horizontalRayOptions.direction==="right"?t.width:0,y:n}};return o.push(r),o}testHit(t,i){if(!this.isValid())return!1;const e=this._anchors[0],n=i.timeScale.timeToCoordinate(e.time),o=i.priceScale.priceToCoordinate(e.price);return n===null||o===null||Math.abs(t.y-o)>xt.HIT_THRESHOLD?!1:this._horizontalRayOptions.direction==="right"?t.x>=n:t.x<=n}clone(t){return new xt(t,[...this._anchors],{...this._style},{...this._horizontalRayOptions})}static create(t,i,e,n,o){return new xt(t,[{time:i,price:e}],n,o)}};u(xt,"REQUIRED_ANCHORS",1),u(xt,"HIT_THRESHOLD",5);let Se=xt;class Zn{constructor(s){u(this,"_renderer");this._renderer=new Hs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Hs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c={x:Math.min(r.x,a.x),y:Math.min(r.y,a.y)},l=Math.abs(a.x-r.x),h=Math.abs(a.y-r.y);if(A(t,this._drawing.style,e),this._drawing.rectangleOptions.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.fillRect(c.x*e,c.y*e,l*e,h*e)),ie(t,c,l,h,!1,e),this._drawing.rectangleOptions.showDimensions){const g=`$${this._drawing.getPriceRange().range.toFixed(2)}`,_=c.x+l/2,w=c.y+h/2;z(t,g,{x:_,y:w},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:4,borderRadius:3},e)}const d=this._drawing.state;if(d==="selected"||d==="editing"){const p=this._drawing.getControlPoints(n);L(t,p,null,e)}}}const G=class G extends I{constructor(t,i=[],e={},n={}){const{filled:o,showDimensions:r,...a}=n;super(t,i,e,a);u(this,"type","rectangle");u(this,"_rectangleOptions");this._rectangleOptions={...this._options,filled:o??!0,showDimensions:r??!1}}get rectangleOptions(){return this._rectangleOptions}setRectangleOptions(t){this._rectangleOptions={...this._rectangleOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=G.REQUIRED_ANCHORS}paneViews(){return[new Zn(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n={x:Math.min(i.x,e.x),y:Math.min(i.y,e.y)},o=Math.abs(e.x-i.x),r=Math.abs(e.y-i.y);return[{type:"rectangle",topLeft:n,width:o,height:r}]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=Math.min(e.x,n.x),r=Math.max(e.x,n.x),a=Math.min(e.y,n.y),c=Math.max(e.y,n.y);if(this._rectangleOptions.filled)return t.x>=o&&t.x<=r&&t.y>=a&&t.y<=c;const l=Math.abs(t.x-o)<=G.HIT_THRESHOLD&&t.y>=a&&t.y<=c,h=Math.abs(t.x-r)<=G.HIT_THRESHOLD&&t.y>=a&&t.y<=c,d=Math.abs(t.y-a)<=G.HIT_THRESHOLD&&t.x>=o&&t.x<=r,p=Math.abs(t.y-c)<=G.HIT_THRESHOLD&&t.x>=o&&t.x<=r;return l||h||d||p}getPriceRange(){if(!this.isValid())return{min:0,max:0,range:0};const t=Math.min(this._anchors[0].price,this._anchors[1].price),i=Math.max(this._anchors[0].price,this._anchors[1].price);return{min:t,max:i,range:i-t}}clone(t){return new G(t,[...this._anchors],{...this._style},{...this._rectangleOptions})}static create(t,i,e,n,o){return new G(t,[i,e],n,o)}};u(G,"REQUIRED_ANCHORS",2),u(G,"HIT_THRESHOLD",5);let He=G;class Kn{constructor(s){u(this,"_renderer");this._renderer=new Ls(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ls{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.getCorners(n);if(!o||o.length<4)return;if(A(t,this._drawing.style,e),this._drawing.rotatedRectangleOptions.filled&&this._drawing.style.fillColor){t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(o[0].x*e,o[0].y*e);for(let a=1;a<o.length;a++)t.lineTo(o[a].x*e,o[a].y*e);t.closePath(),t.fill()}t.beginPath(),t.moveTo(o[0].x*e,o[0].y*e);for(let a=1;a<o.length;a++)t.lineTo(o[a].x*e,o[a].y*e);t.closePath(),t.stroke();const r=this._drawing.state;if(r==="selected"||r==="editing"){const a=this._drawing.getControlPoints(n);L(t,a,null,e)}}}const _t=class _t extends I{constructor(t,i=[],e={},n={}){const{filled:o,showDimensions:r,...a}=n;super(t,i,e,a);u(this,"type","rotated-rectangle");u(this,"_rotatedRectangleOptions");this._rotatedRectangleOptions={...this._options,filled:o??!0,showDimensions:r??!1}}get rotatedRectangleOptions(){return this._rotatedRectangleOptions}setRotatedRectangleOptions(t){this._rotatedRectangleOptions={...this._rotatedRectangleOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=_t.REQUIRED_ANCHORS}paneViews(){return[new Kn(this)]}getCorners(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return null;const o=e.x-i.x,r=e.y-i.y,a=Math.sqrt(o*o+r*r);if(a===0)return null;const c=-r/a,l=o/a,h=n.x-i.x,d=n.y-i.y,p=h*c+d*l;return[i,e,{x:e.x+c*p,y:e.y+l*p},{x:i.x+c*p,y:i.y+l*p}]}computeGeometry(t){const i=this.getCorners(t);return i?[{type:"polygon",points:i,closed:!0}]:[]}testHit(t,i){const e=this.getCorners(i);if(!e)return!1;if(this._rotatedRectangleOptions.filled)return this.pointInPolygon(t,e);for(let n=0;n<e.length;n++){const o=(n+1)%e.length;if(V(t,e[n],e[o])<=_t.HIT_THRESHOLD)return!0}return!1}pointInPolygon(t,i){let e=!1;for(let n=0,o=i.length-1;n<i.length;o=n++){const r=i[n].x,a=i[n].y,c=i[o].x,l=i[o].y;a>t.y!=l>t.y&&t.x<(c-r)*(t.y-a)/(l-a)+r&&(e=!e)}return e}clone(t){return new _t(t,[...this._anchors],{...this._style},{...this._rotatedRectangleOptions})}static create(t,i,e,n,o,r){return new _t(t,[i,e,n],o,r)}};u(_t,"REQUIRED_ANCHORS",3),u(_t,"HIT_THRESHOLD",5);let Le=_t;class ti{constructor(s){u(this,"_renderer");this._renderer=new Is(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Is{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=D(r,a);A(t,this._drawing.style,e),this._drawing.circleOptions.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor),Un(t,r,c,this._drawing.circleOptions.filled??!1,e);const l=this._drawing.state;if(l==="selected"||l==="editing"){const h=this._drawing.getControlPoints(n);L(t,h,null,e)}}}const wt=class wt extends I{constructor(t,i=[],e={},n={}){const{filled:o,...r}=n;super(t,i,e,r);u(this,"type","circle");u(this,"_circleOptions");this._circleOptions={...this._options,filled:o??!0}}get circleOptions(){return this._circleOptions}setCircleOptions(t){this._circleOptions={...this._circleOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=wt.REQUIRED_ANCHORS}paneViews(){return[new ti(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=D(i,e);return[{type:"arc",center:i,radius:n,startAngle:0,endAngle:Math.PI*2}]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=D(e,n),r=D(t,e);return this._circleOptions.filled?r<=o:Math.abs(r-o)<=wt.HIT_THRESHOLD}getRadius(t){if(!this.isValid())return 0;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);return!i||!e?0:D(i,e)}clone(t){return new wt(t,[...this._anchors],{...this._style},{...this._circleOptions})}static create(t,i,e,n,o){return new wt(t,[i,e],n,o)}};u(wt,"REQUIRED_ANCHORS",2),u(wt,"HIT_THRESHOLD",5);let Ie=wt;class ei{constructor(s){u(this,"_renderer");this._renderer=new Vs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Vs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=[];for(const c of o){const l=this._drawing.anchorToPixel(c,n);if(!l)return;r.push(l)}A(t,this._drawing.style,e),t.beginPath(),t.moveTo(r[0].x*e,r[0].y*e),t.lineTo(r[1].x*e,r[1].y*e),t.lineTo(r[2].x*e,r[2].y*e),t.closePath(),this._drawing.triangleOptions.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.fill()),t.stroke();const a=this._drawing.state;if(a==="selected"||a==="editing"){const c=this._drawing.getControlPoints(n);L(t,c,null,e)}}}const yt=class yt extends I{constructor(t,i=[],e={},n={}){const{filled:o,...r}=n;super(t,i,e,r);u(this,"type","triangle");u(this,"_triangleOptions");this._triangleOptions={...this._options,filled:o??!0}}get triangleOptions(){return this._triangleOptions}setTriangleOptions(t){this._triangleOptions={...this._triangleOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=yt.REQUIRED_ANCHORS}paneViews(){return[new ei(this)]}computeGeometry(t){if(!this.isValid())return[];const i=[];for(const n of this._anchors){const o=this.anchorToPixel(n,t);if(!o)return[];i.push(o)}return[{type:"polygon",points:i,closed:!0}]}testHit(t,i){if(!this.isValid())return!1;const e=[];for(const n of this._anchors){const o=this.anchorToPixel(n,i);if(!o)return!1;e.push(o)}if(this._triangleOptions.filled)return this.isPointInTriangle(t,e[0],e[1],e[2]);for(let n=0;n<3;n++){const o=(n+1)%3;if(V(t,e[n],e[o])<=yt.HIT_THRESHOLD)return!0}return!1}isPointInTriangle(t,i,e,n){const o=(d,p,g)=>(d.x-g.x)*(p.y-g.y)-(p.x-g.x)*(d.y-g.y),r=o(t,i,e),a=o(t,e,n),c=o(t,n,i),l=r<0||a<0||c<0,h=r>0||a>0||c>0;return!(l&&h)}clone(t){return new yt(t,[...this._anchors],{...this._style},{...this._triangleOptions})}static create(t,i,e,n,o,r){return new yt(t,[i,e,n],o,r)}};u(yt,"REQUIRED_ANCHORS",3),u(yt,"HIT_THRESHOLD",5);let Ve=yt;class ni{constructor(s){u(this,"_renderer");this._renderer=new As(s)}zOrder(){return"bottom"}renderer(){return this._renderer}}class As{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=n.priceScale.priceToCoordinate(o[0].price),a=n.priceScale.priceToCoordinate(o[1].price);if(r===null||a===null)return;const c=Math.min(r,a),l=Math.max(r,a),h=l-c;A(t,this._drawing.style,e),this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.fillRect(0,c*e,n.width*e,h*e)),R(t,{x:0,y:c},{x:n.width,y:c},e),R(t,{x:0,y:l},{x:n.width,y:l},e);const d=this._drawing.priceRangeOptions,p=this._drawing.getRangeInfo(),g=(c+l)/2,_=[];if(d.showRange&&_.push(`$${p.range.toFixed(2)}`),d.showPercentage){const x=p.percentage>=0?"+":"";_.push(`${x}${p.percentage.toFixed(2)}%`)}_.length>0&&z(t,_.join(" | "),{x:n.width/2,y:g},{font:this._drawing.style.labelFont||"12px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"CC",padding:6,borderRadius:4},e),d.showPrices&&(z(t,p.max.toFixed(2),{x:n.width-10,y:c},{font:"11px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"AA",padding:3,borderRadius:2},e),z(t,p.min.toFixed(2),{x:n.width-10,y:l},{font:"11px sans-serif",textColor:"#ffffff",backgroundColor:this._drawing.style.lineColor+"AA",padding:3,borderRadius:2},e));const w=this._drawing.state;if(w==="selected"||w==="editing"){const x=this._drawing.getControlPoints(n);L(t,x,null,e)}}}const vt=class vt extends I{constructor(t,i=[],e={},n={}){const{showPrices:o,showRange:r,showPercentage:a,...c}=n;super(t,i,e,c);u(this,"type","price-range");u(this,"_priceRangeOptions");this._priceRangeOptions={...this._options,showPrices:o??!0,showRange:r??!0,showPercentage:a??!0}}get priceRangeOptions(){return this._priceRangeOptions}setPriceRangeOptions(t){this._priceRangeOptions={...this._priceRangeOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=vt.REQUIRED_ANCHORS}paneViews(){return[new ni(this)]}computeGeometry(t){if(!this.isValid())return[];const i=t.priceScale.priceToCoordinate(this._anchors[0].price),e=t.priceScale.priceToCoordinate(this._anchors[1].price);if(i===null||e===null)return[];const n=Math.min(i,e),o=Math.abs(e-i),r=[],a={type:"rectangle",topLeft:{x:0,y:n},width:t.width,height:o};return r.push(a),r}testHit(t,i){if(!this.isValid())return!1;const e=i.priceScale.priceToCoordinate(this._anchors[0].price),n=i.priceScale.priceToCoordinate(this._anchors[1].price);if(e===null||n===null)return!1;const o=Math.min(e,n),r=Math.max(e,n);return t.y>=o&&t.y<=r}getRangeInfo(){if(!this.isValid())return{min:0,max:0,range:0,percentage:0};const t=Math.min(this._anchors[0].price,this._anchors[1].price),i=Math.max(this._anchors[0].price,this._anchors[1].price),e=i-t,n=t!==0?e/t*100:0;return{min:t,max:i,range:e,percentage:n}}clone(t){return new vt(t,[...this._anchors],{...this._style},{...this._priceRangeOptions})}static create(t,i,e,n,o,r){return new vt(t,[{time:n,price:i},{time:n,price:e}],o,r)}};u(vt,"REQUIRED_ANCHORS",2),u(vt,"HIT_THRESHOLD",5);let Ae=vt;class ii{constructor(s){u(this,"_renderer");this._renderer=new Es(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Es{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.getEllipseParams(n);if(!o)return;const{center:r,radiusX:a,radiusY:c}=o,l=this._drawing.ellipseOptions,h=this._drawing.style;t.save(),l.filled&&h.fillColor&&(t.fillStyle=h.fillColor,t.globalAlpha=h.fillOpacity??.1,t.beginPath(),t.ellipse(r.x*e,r.y*e,a*e,c*e,0,0,Math.PI*2),t.fill(),t.globalAlpha=1),t.strokeStyle=h.lineColor,t.lineWidth=h.lineWidth*e,h.lineDash&&h.lineDash.length>0&&t.setLineDash(h.lineDash.map(p=>p*e)),t.beginPath(),t.ellipse(r.x*e,r.y*e,a*e,c*e,0,0,Math.PI*2),t.stroke(),t.restore();const d=this._drawing.state;if(d==="selected"||d==="editing"){const p=this._drawing.getControlPoints(n);L(t,p,null,e)}}}const at=class at extends I{constructor(t,i=[],e={},n={}){const{filled:o,...r}=n;super(t,i,e,r);u(this,"type","ellipse");u(this,"_ellipseOptions");this._ellipseOptions={...this._options,filled:o??!0}}get ellipseOptions(){return this._ellipseOptions}setEllipseOptions(t){this._ellipseOptions={...this._ellipseOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=at.REQUIRED_ANCHORS}paneViews(){return[new ii(this)]}getEllipseParams(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return null;const n={x:(i.x+e.x)/2,y:(i.y+e.y)/2},o=Math.abs(e.x-i.x)/2,r=Math.abs(e.y-i.y)/2;return{center:n,radiusX:o,radiusY:r}}computeGeometry(t){const i=this.getEllipseParams(t);return i?[{type:"arc",center:i.center,radius:Math.max(i.radiusX,i.radiusY),startAngle:0,endAngle:Math.PI*2}]:[]}testHit(t,i){const e=this.getEllipseParams(i);if(!e)return!1;const{center:n,radiusX:o,radiusY:r}=e;if(o===0||r===0)return!1;const a=t.x-n.x,c=t.y-n.y,l=a*a/(o*o)+c*c/(r*r);if(this._ellipseOptions.filled)return l<=1;const h=(o-at.HIT_THRESHOLD)/o,d=(o+at.HIT_THRESHOLD)/o;return l>=h*h&&l<=d*d}clone(t){return new at(t,[...this._anchors],{...this._style},{...this._ellipseOptions})}static create(t,i,e,n,o){return new at(t,[i,e],n,o)}};u(at,"REQUIRED_ANCHORS",2),u(at,"HIT_THRESHOLD",5);let Ee=at;class si{constructor(s){u(this,"_renderer");this._renderer=new Ms(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ms{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.getArcParams(n);if(!o)return;const{center:r,radius:a,startAngle:c,endAngle:l}=o,h=this._drawing.arcOptions,d=this._drawing.style;t.save(),h.filled&&d.fillColor&&(t.fillStyle=d.fillColor,t.globalAlpha=d.fillOpacity??.1,t.beginPath(),t.moveTo(r.x*e,r.y*e),t.arc(r.x*e,r.y*e,a*e,c,l),t.closePath(),t.fill(),t.globalAlpha=1),t.strokeStyle=d.lineColor,t.lineWidth=d.lineWidth*e,d.lineDash&&d.lineDash.length>0&&t.setLineDash(d.lineDash.map(g=>g*e)),t.beginPath(),t.arc(r.x*e,r.y*e,a*e,c,l),t.stroke(),h.filled&&(t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo((r.x+a*Math.cos(c))*e,(r.y+a*Math.sin(c))*e),t.moveTo(r.x*e,r.y*e),t.lineTo((r.x+a*Math.cos(l))*e,(r.y+a*Math.sin(l))*e),t.stroke()),t.restore();const p=this._drawing.state;if(p==="selected"||p==="editing"){const g=this._drawing.getControlPoints(n);L(t,g,null,e)}}}const j=class j extends I{constructor(t,i=[],e={},n={}){const{filled:o,...r}=n;super(t,i,e,r);u(this,"type","arc");u(this,"_arcOptions");this._arcOptions={...this._options,filled:o??!1}}get arcOptions(){return this._arcOptions}setArcOptions(t){this._arcOptions={...this._arcOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=j.REQUIRED_ANCHORS}paneViews(){return[new si(this)]}getArcParams(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return null;const o=e.x-i.x,r=e.y-i.y,a=Math.sqrt(o*o+r*r);if(a===0)return null;const c=Math.atan2(e.y-i.y,e.x-i.x),l=Math.atan2(n.y-i.y,n.x-i.x);return{center:i,radius:a,startAngle:c,endAngle:l}}computeGeometry(t){const i=this.getArcParams(t);return i?[{type:"arc",center:i.center,radius:i.radius,startAngle:i.startAngle,endAngle:i.endAngle}]:[]}testHit(t,i){const e=this.getArcParams(i);if(!e)return!1;const{center:n,radius:o,startAngle:r,endAngle:a}=e,c=t.x-n.x,l=t.y-n.y,h=Math.sqrt(c*c+l*l),d=o-j.HIT_THRESHOLD,p=o+j.HIT_THRESHOLD;if(this._arcOptions.filled){if(h>o+j.HIT_THRESHOLD)return!1}else if(h<d||h>p)return!1;let g=Math.atan2(l,c),_=r,w=a,x=g;for(;_<0;)_+=Math.PI*2;for(;w<0;)w+=Math.PI*2;for(;x<0;)x+=Math.PI*2;return _<=w?x>=_&&x<=w:x>=_||x<=w}clone(t){return new j(t,[...this._anchors],{...this._style},{...this._arcOptions})}static create(t,i,e,n,o,r){return new j(t,[i,e,n],o,r)}};u(j,"REQUIRED_ANCHORS",3),u(j,"HIT_THRESHOLD",5);let Me=j;class ri{constructor(s){u(this,"_renderer");this._renderer=new Ds(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ds{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=[];for(const l of o){const h=this._drawing.anchorToPixel(l,n);h&&r.push(h)}if(r.length<2)return;const a=this._drawing.pathOptions;if(A(t,this._drawing.style,e),a.filled&&a.closed&&this._drawing.style.fillColor){t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(r[0].x*e,r[0].y*e);for(let l=1;l<r.length;l++)t.lineTo(r[l].x*e,r[l].y*e);t.closePath(),t.fill()}t.beginPath(),t.moveTo(r[0].x*e,r[0].y*e);for(let l=1;l<r.length;l++)t.lineTo(r[l].x*e,r[l].y*e);a.closed&&t.closePath(),t.stroke();const c=this._drawing.state;if(c==="selected"||c==="editing"){const l=r.map((h,d)=>({index:d,x:h.x,y:h.y,radius:6}));L(t,l,null,e)}}}const Pt=class Pt extends I{constructor(t,i=[],e={},n={}){const{closed:o,filled:r,...a}=n;super(t,i,e,a);u(this,"type","path");u(this,"_pathOptions");this._pathOptions={...this._options,closed:o??!1,filled:r??!1}}get pathOptions(){return this._pathOptions}setPathOptions(t){this._pathOptions={...this._pathOptions,...t},this.requestUpdate()}addPoint(t){this._anchors.push(t),this.requestUpdate()}setClosed(t){this._pathOptions.closed=t,this.requestUpdate()}isValid(){return this._anchors.length>=Pt.REQUIRED_ANCHORS}paneViews(){return[new ri(this)]}computeGeometry(t){if(!this.isValid())return[];const i=[];for(const n of this._anchors){const o=this.anchorToPixel(n,t);o&&i.push(o)}return i.length<2?[]:[{type:"polygon",points:i,closed:this._pathOptions.closed??!1}]}testHit(t,i){if(!this.isValid())return!1;const e=[];for(const o of this._anchors){const r=this.anchorToPixel(o,i);r&&e.push(r)}if(e.length<2)return!1;if(this._pathOptions.filled&&this._pathOptions.closed&&this.pointInPolygon(t,e))return!0;const n=this._pathOptions.closed?e.length:e.length-1;for(let o=0;o<n;o++){const r=(o+1)%e.length;if(V(t,e[o],e[r])<=Pt.HIT_THRESHOLD)return!0}return!1}pointInPolygon(t,i){let e=!1;for(let n=0,o=i.length-1;n<i.length;o=n++){const r=i[n].x,a=i[n].y,c=i[o].x,l=i[o].y;a>t.y!=l>t.y&&t.x<(c-r)*(t.y-a)/(l-a)+r&&(e=!e)}return e}clone(t){return new Pt(t,[...this._anchors],{...this._style},{...this._pathOptions})}static create(t,i,e,n){return new Pt(t,i,e,n)}};u(Pt,"REQUIRED_ANCHORS",2),u(Pt,"HIT_THRESHOLD",5);let De=Pt;class oi{constructor(s){u(this,"_renderer");this._renderer=new vs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class vs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=[];for(const l of o){const h=this._drawing.anchorToPixel(l,n);h&&r.push(h)}if(r.length<2)return;const a=this._drawing.polylineOptions;A(t,this._drawing.style,e),t.beginPath(),t.moveTo(r[0].x*e,r[0].y*e);for(let l=1;l<r.length;l++)t.lineTo(r[l].x*e,r[l].y*e);if(t.stroke(),a.showVertices){const l=(a.vertexRadius??4)*e;t.fillStyle=this._drawing.style.lineColor||"#2962FF";for(const d of r)t.beginPath(),t.arc(d.x*e,d.y*e,l,0,Math.PI*2),t.fill();t.fillStyle="#ffffff";const h=l*.5;for(const d of r)t.beginPath(),t.arc(d.x*e,d.y*e,h,0,Math.PI*2),t.fill()}const c=this._drawing.state;if(c==="selected"||c==="editing"){const l=r.map((h,d)=>({index:d,x:h.x,y:h.y,radius:6}));L(t,l,null,e)}}}const ct=class ct extends I{constructor(t,i=[],e={},n={}){const{showVertices:o,vertexRadius:r,...a}=n;super(t,i,e,a);u(this,"type","polyline");u(this,"_polylineOptions");this._polylineOptions={...this._options,showVertices:o??!0,vertexRadius:r??4}}get polylineOptions(){return this._polylineOptions}setPolylineOptions(t){this._polylineOptions={...this._polylineOptions,...t},this.requestUpdate()}addPoint(t){this._anchors.push(t),this.requestUpdate()}insertPoint(t,i){this._anchors.splice(t,0,i),this.requestUpdate()}removePoint(t){this._anchors.length>2&&(this._anchors.splice(t,1),this.requestUpdate())}isValid(){return this._anchors.length>=ct.REQUIRED_ANCHORS}paneViews(){return[new oi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=[];for(const n of this._anchors){const o=this.anchorToPixel(n,t);o&&i.push(o)}return i.length<2?[]:[{type:"polygon",points:i,closed:!1}]}testHit(t,i){if(!this.isValid())return!1;const e=[];for(const o of this._anchors){const r=this.anchorToPixel(o,i);r&&e.push(r)}if(e.length<2)return!1;const n=this._polylineOptions.vertexRadius??4;for(const o of e)if(D(t,o)<=n+ct.HIT_THRESHOLD)return!0;for(let o=0;o<e.length-1;o++)if(V(t,e[o],e[o+1])<=ct.HIT_THRESHOLD)return!0;return!1}getTotalLength(t){if(!this.isValid())return 0;const i=[];for(const n of this._anchors){const o=this.anchorToPixel(n,t);o&&i.push(o)}let e=0;for(let n=0;n<i.length-1;n++)e+=D(i[n],i[n+1]);return e}clone(t){return new ct(t,[...this._anchors],{...this._style},{...this._polylineOptions})}static create(t,i,e,n){return new ct(t,i,e,n)}};u(ct,"REQUIRED_ANCHORS",2),u(ct,"HIT_THRESHOLD",5);let ve=ct;class ai{constructor(s){u(this,"_renderer");this._renderer=new ks(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class ks{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.getControlPointsPixels(n);if(!o)return;const{start:r,control1:a,control2:c,end:l}=o,h=this._drawing.curveOptions;if(A(t,this._drawing.style,e),h.showControlLines&&(t.save(),t.strokeStyle=this._drawing.style.lineColor||"#2962FF",t.globalAlpha=.3,t.setLineDash([4*e,4*e]),t.lineWidth=1*e,t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo(a.x*e,a.y*e),t.stroke(),t.beginPath(),t.moveTo(c.x*e,c.y*e),t.lineTo(l.x*e,l.y*e),t.stroke(),t.restore()),A(t,this._drawing.style,e),t.beginPath(),t.moveTo(r.x*e,r.y*e),t.bezierCurveTo(a.x*e,a.y*e,c.x*e,c.y*e,l.x*e,l.y*e),t.stroke(),h.showControlLines){const p=4*e;t.fillStyle=this._drawing.style.lineColor||"#2962FF",t.beginPath(),t.arc(a.x*e,a.y*e,p,0,Math.PI*2),t.strokeStyle=this._drawing.style.lineColor||"#2962FF",t.lineWidth=2*e,t.stroke(),t.fillStyle="#ffffff",t.fill(),t.beginPath(),t.arc(c.x*e,c.y*e,p,0,Math.PI*2),t.stroke(),t.fill()}const d=this._drawing.state;if(d==="selected"||d==="editing"){const p=[{index:0,x:r.x,y:r.y,radius:6},{index:1,x:a.x,y:a.y,radius:6},{index:2,x:c.x,y:c.y,radius:6},{index:3,x:l.x,y:l.y,radius:6}];L(t,p,null,e)}}}const B=class B extends I{constructor(t,i=[],e={},n={}){const{showControlLines:o,resolution:r,...a}=n;super(t,i,e,a);u(this,"type","curve");u(this,"_curveOptions");this._curveOptions={...this._options,showControlLines:o??!0,resolution:r??50}}get curveOptions(){return this._curveOptions}setCurveOptions(t){this._curveOptions={...this._curveOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=B.REQUIRED_ANCHORS}paneViews(){return[new ai(this)]}getCurvePoints(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t),o=this.anchorToPixel(this._anchors[3],t);if(!i||!e||!n||!o)return null;const r=this._curveOptions.resolution??50,a=[];for(let c=0;c<=r;c++){const l=c/r;a.push(this.cubicBezier(i,e,n,o,l))}return a}getControlPointsPixels(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t),o=this.anchorToPixel(this._anchors[3],t);return!i||!e||!n||!o?null:{start:i,control1:e,control2:n,end:o}}cubicBezier(t,i,e,n,o){const r=o*o,a=r*o,c=1-o,l=c*c,h=l*c;return{x:h*t.x+3*l*o*i.x+3*c*r*e.x+a*n.x,y:h*t.y+3*l*o*i.y+3*c*r*e.y+a*n.y}}computeGeometry(t){const i=this.getCurvePoints(t);return!i||i.length<2?[]:[{type:"polygon",points:i,closed:!1}]}testHit(t,i){const e=this.getCurvePoints(i);if(!e||e.length<2)return!1;for(let o=0;o<e.length-1;o++){const r=e[o],a=e[o+1];if(this.distanceToSegment(t,r,a)<=B.HIT_THRESHOLD)return!0}const n=this.getControlPointsPixels(i);return!!(n&&(D(t,n.start)<=B.HIT_THRESHOLD*2||D(t,n.control1)<=B.HIT_THRESHOLD*2||D(t,n.control2)<=B.HIT_THRESHOLD*2||D(t,n.end)<=B.HIT_THRESHOLD*2))}distanceToSegment(t,i,e){const n=e.x-i.x,o=e.y-i.y,r=n*n+o*o;if(r===0)return D(t,i);let a=((t.x-i.x)*n+(t.y-i.y)*o)/r;a=Math.max(0,Math.min(1,a));const c={x:i.x+a*n,y:i.y+a*o};return D(t,c)}clone(t){return new B(t,[...this._anchors],{...this._style},{...this._curveOptions})}static create(t,i,e,n,o,r,a){return new B(t,[i,e,n,o],r,a)}};u(B,"REQUIRED_ANCHORS",4),u(B,"HIT_THRESHOLD",5);let ke=B;class ci{constructor(s){u(this,"_renderer");this._renderer=new Fs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Fs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.getMainPoints(n),r=this._drawing.getBezierControlPoints(n);if(!o||!r)return;const{start:a,middle:c,end:l}=o,{cp1:h,cp2:d,cp3:p,cp4:g}=r,_=this._drawing.doubleCurveOptions;if(A(t,this._drawing.style,e),_.showControlPoints&&(t.save(),t.strokeStyle=this._drawing.style.lineColor||"#2962FF",t.globalAlpha=.3,t.setLineDash([4*e,4*e]),t.lineWidth=1*e,t.beginPath(),t.moveTo(a.x*e,a.y*e),t.lineTo(h.x*e,h.y*e),t.stroke(),t.beginPath(),t.moveTo(d.x*e,d.y*e),t.lineTo(c.x*e,c.y*e),t.stroke(),t.beginPath(),t.moveTo(c.x*e,c.y*e),t.lineTo(p.x*e,p.y*e),t.stroke(),t.beginPath(),t.moveTo(g.x*e,g.y*e),t.lineTo(l.x*e,l.y*e),t.stroke(),t.restore()),A(t,this._drawing.style,e),t.beginPath(),t.moveTo(a.x*e,a.y*e),t.bezierCurveTo(h.x*e,h.y*e,d.x*e,d.y*e,c.x*e,c.y*e),t.bezierCurveTo(p.x*e,p.y*e,g.x*e,g.y*e,l.x*e,l.y*e),t.stroke(),_.showControlPoints){const P=3*e;t.fillStyle=this._drawing.style.lineColor||"#2962FF",t.globalAlpha=.5;for(const O of[h,d,p,g])t.beginPath(),t.arc(O.x*e,O.y*e,P,0,Math.PI*2),t.fill();t.globalAlpha=1}const w=4*e;t.fillStyle=this._drawing.style.lineColor||"#2962FF";for(const P of[a,c,l])t.beginPath(),t.arc(P.x*e,P.y*e,w,0,Math.PI*2),t.fill();const x=this._drawing.state;if(x==="selected"||x==="editing"){const P=[{index:0,x:a.x,y:a.y,radius:6},{index:1,x:c.x,y:c.y,radius:6},{index:2,x:l.x,y:l.y,radius:6}];L(t,P,null,e)}}}const W=class W extends I{constructor(t,i=[],e={},n={}){const{showControlPoints:o,curvature:r,resolution:a,...c}=n;super(t,i,e,c);u(this,"type","double-curve");u(this,"_doubleCurveOptions");this._doubleCurveOptions={...this._options,showControlPoints:o??!1,curvature:r??.5,resolution:a??50}}get doubleCurveOptions(){return this._doubleCurveOptions}setDoubleCurveOptions(t){this._doubleCurveOptions={...this._doubleCurveOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=W.REQUIRED_ANCHORS}paneViews(){return[new ci(this)]}getMainPoints(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);return!i||!e||!n?null:{start:i,middle:e,end:n}}getBezierControlPoints(t){const i=this.getMainPoints(t);if(!i)return null;const{start:e,middle:n,end:o}=i,r=this._doubleCurveOptions.curvature??.5,a=n.x-e.x,c=o.x-n.x,l={x:e.x+a*r,y:e.y},h={x:n.x-a*r,y:n.y},d={x:n.x+c*r,y:n.y},p={x:o.x-c*r,y:o.y};return{cp1:l,cp2:h,cp3:d,cp4:p}}getCurvePoints(t){const i=this.getMainPoints(t),e=this.getBezierControlPoints(t);if(!i||!e)return null;const{start:n,middle:o,end:r}=i,{cp1:a,cp2:c,cp3:l,cp4:h}=e,d=this._doubleCurveOptions.resolution??50,p=Math.floor(d/2),g=[];for(let _=0;_<=p;_++){const w=_/p;g.push(this.cubicBezier(n,a,c,o,w))}for(let _=1;_<=p;_++){const w=_/p;g.push(this.cubicBezier(o,l,h,r,w))}return g}cubicBezier(t,i,e,n,o){const r=o*o,a=r*o,c=1-o,l=c*c,h=l*c;return{x:h*t.x+3*l*o*i.x+3*c*r*e.x+a*n.x,y:h*t.y+3*l*o*i.y+3*c*r*e.y+a*n.y}}computeGeometry(t){const i=this.getCurvePoints(t);return!i||i.length<2?[]:[{type:"polygon",points:i,closed:!1}]}testHit(t,i){const e=this.getCurvePoints(i);if(!e||e.length<2)return!1;for(let o=0;o<e.length-1;o++){const r=e[o],a=e[o+1];if(this.distanceToSegment(t,r,a)<=W.HIT_THRESHOLD)return!0}const n=this.getMainPoints(i);return!!(n&&(D(t,n.start)<=W.HIT_THRESHOLD*2||D(t,n.middle)<=W.HIT_THRESHOLD*2||D(t,n.end)<=W.HIT_THRESHOLD*2))}distanceToSegment(t,i,e){const n=e.x-i.x,o=e.y-i.y,r=n*n+o*o;if(r===0)return D(t,i);let a=((t.x-i.x)*n+(t.y-i.y)*o)/r;a=Math.max(0,Math.min(1,a));const c={x:i.x+a*n,y:i.y+a*o};return D(t,c)}clone(t){return new W(t,[...this._anchors],{...this._style},{...this._doubleCurveOptions})}static create(t,i,e,n,o,r){return new W(t,[i,e,n],o,r)}};u(W,"REQUIRED_ANCHORS",3),u(W,"HIT_THRESHOLD",5);let Fe=W;class li{constructor(s){u(this,"_renderer");this._renderer=new zs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class zs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this.calculateOffset(r,a,c),h={x:r.x+l.x,y:r.y+l.y},d={x:a.x+l.x,y:a.y+l.y};A(t,this._drawing.style,e);const p=this._drawing.channelOptions;let g=r,_=a,w=h,x=d;if(p.extendLines){const O=M(r,a,n.width,n.height,!0,!0),m=M(h,d,n.width,n.height,!0,!0);g=O.start,_=O.end,w=m.start,x=m.end}if(p.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(g.x*e,g.y*e),t.lineTo(_.x*e,_.y*e),t.lineTo(x.x*e,x.y*e),t.lineTo(w.x*e,w.y*e),t.closePath(),t.fill()),R(t,g,_,e),R(t,w,x,e),p.showMiddleLine){const O={x:(r.x+h.x)/2,y:(r.y+h.y)/2},m={x:(a.x+d.x)/2,y:(a.y+d.y)/2};let T=O,b=m;if(p.extendLines){const C=M(O,m,n.width,n.height,!0,!0);T=C.start,b=C.end}F(t,T,b,[5,5],e)}const P=this._drawing.state;if(P==="selected"||P==="editing"){const O=this._drawing.getControlPoints(n);L(t,O,null,e)}}calculateOffset(s,t,i){const e=t.x-s.x,n=t.y-s.y,o=Math.sqrt(e*e+n*n);if(o===0)return{x:0,y:i.y-s.y};const r=-n/o,a=e/o,c=i.x-s.x,l=i.y-s.y,h=c*r+l*a;return{x:r*h,y:a*h}}}const lt=class lt extends I{constructor(t,i=[],e={},n={}){const{filled:o,showMiddleLine:r,extendLines:a,...c}=n;super(t,i,e,c);u(this,"type","parallel-channel");u(this,"_channelOptions");this._channelOptions={...this._options,filled:o??!0,showMiddleLine:r??!0,extendLines:a??!1}}get channelOptions(){return this._channelOptions}setChannelOptions(t){this._channelOptions={...this._channelOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=lt.REQUIRED_ANCHORS}paneViews(){return[new li(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[];o.push({type:"line",start:i,end:e,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines});const r=this.calculateOffset(i,e,n),a={x:i.x+r.x,y:i.y+r.y},c={x:e.x+r.x,y:e.y+r.y};if(o.push({type:"line",start:a,end:c,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines}),this._channelOptions.showMiddleLine){const l={x:(i.x+a.x)/2,y:(i.y+a.y)/2},h={x:(e.x+c.x)/2,y:(e.y+c.y)/2};o.push({type:"line",start:l,end:h,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines})}return o}calculateOffset(t,i,e){const n=i.x-t.x,o=i.y-t.y,r=Math.sqrt(n*n+o*o);if(r===0)return{x:0,y:e.y-t.y};const a=-o/r,c=n/r,l=e.x-t.x,h=e.y-t.y,d=l*a+h*c;return{x:a*d,y:c*d}}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;if(V(t,e,n)<=lt.HIT_THRESHOLD)return!0;const r=this.calculateOffset(e,n,o),a={x:e.x+r.x,y:e.y+r.y},c={x:n.x+r.x,y:n.y+r.y};if(V(t,a,c)<=lt.HIT_THRESHOLD)return!0;if(this._channelOptions.filled){const l=Math.min(e.x,n.x,a.x,c.x),h=Math.max(e.x,n.x,a.x,c.x),d=Math.min(e.y,n.y,a.y,c.y),p=Math.max(e.y,n.y,a.y,c.y);if(t.x>=l&&t.x<=h&&t.y>=d&&t.y<=p)return!0}return!1}clone(t){return new lt(t,[...this._anchors],{...this._style},{...this._channelOptions})}static create(t,i,e,n,o,r){return new lt(t,[i,e,n],o,r)}};u(lt,"REQUIRED_ANCHORS",3),u(lt,"HIT_THRESHOLD",5);let ze=lt;class hi{constructor(s){u(this,"_renderer");this._renderer=new Us(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Us{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.channelOptions,{slope:l,stdDev:h}=this._drawing.calculateRegression(r,a),d=h*(c.standardDeviations??2),p=Math.sqrt(1+l*l),g=-l/p,_=1/p,w=g*d,x=_*d,P={x:r.x+w,y:r.y+x},O={x:a.x+w,y:a.y+x},m={x:r.x-w,y:r.y-x},T={x:a.x-w,y:a.y-x};A(t,this._drawing.style,e);let b=r,C=a,H=P,S=O,E=m,v=T;if(c.extendLines){const N=M(r,a,n.width,n.height,!0,!0),ft=M(P,O,n.width,n.height,!0,!0),se=M(m,T,n.width,n.height,!0,!0);b=N.start,C=N.end,H=ft.start,S=ft.end,E=se.start,v=se.end}c.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(H.x*e,H.y*e),t.lineTo(S.x*e,S.y*e),t.lineTo(v.x*e,v.y*e),t.lineTo(E.x*e,E.y*e),t.closePath(),t.fill()),R(t,H,S,e),R(t,E,v,e),c.showMiddleLine&&F(t,b,C,[5,5],e);const U=this._drawing.state;if(U==="selected"||U==="editing"){const N=this._drawing.getControlPoints(n);L(t,N,null,e)}}}const Y=class Y extends I{constructor(t,i=[],e={},n={}){const{filled:o,showMiddleLine:r,extendLines:a,standardDeviations:c,...l}=n;super(t,i,e,l);u(this,"type","regression-trend");u(this,"_channelOptions");this._channelOptions={...this._options,filled:o??!0,showMiddleLine:r??!0,extendLines:a??!1,standardDeviations:c??2}}get channelOptions(){return this._channelOptions}setChannelOptions(t){this._channelOptions={...this._channelOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Y.REQUIRED_ANCHORS}paneViews(){return[new hi(this)]}calculateRegression(t,i){const e=i.x-t.x,n=i.y-t.y;if(Math.abs(e)<.001)return{slope:0,intercept:t.y,stdDev:20};const o=n/e,r=t.y-o*t.x,a=Math.sqrt(e*e+n*n),c=Math.max(10,a*.1);return{slope:o,intercept:r,stdDev:c}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],{slope:o,stdDev:r}=this.calculateRegression(i,e),a=r*(this._channelOptions.standardDeviations??2),c=Math.sqrt(1+o*o),l=-o/c,h=1/c,d=l*a,p=h*a;n.push({type:"line",start:i,end:e,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines});const g={x:i.x+d,y:i.y+p},_={x:e.x+d,y:e.y+p};n.push({type:"line",start:g,end:_,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines});const w={x:i.x-d,y:i.y-p},x={x:e.x-d,y:e.y-p};return n.push({type:"line",start:w,end:x,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines}),n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;if(V(t,e,n)<=Y.HIT_THRESHOLD)return!0;const{slope:o,stdDev:r}=this.calculateRegression(e,n),a=r*(this._channelOptions.standardDeviations??2),c=Math.sqrt(1+o*o),l=-o/c,h=1/c,d=l*a,p=h*a,g={x:e.x+d,y:e.y+p},_={x:n.x+d,y:n.y+p};if(V(t,g,_)<=Y.HIT_THRESHOLD)return!0;const w={x:e.x-d,y:e.y-p},x={x:n.x-d,y:n.y-p};if(V(t,w,x)<=Y.HIT_THRESHOLD)return!0;if(this._channelOptions.filled){const P=Math.min(g.x,_.x,w.x,x.x),O=Math.max(g.x,_.x,w.x,x.x),m=Math.min(g.y,_.y,w.y,x.y),T=Math.max(g.y,_.y,w.y,x.y);if(t.x>=P&&t.x<=O&&t.y>=m&&t.y<=T)return!0}return!1}clone(t){return new Y(t,[...this._anchors],{...this._style},{...this._channelOptions})}static create(t,i,e,n,o){return new Y(t,[i,e],n,o)}};u(Y,"REQUIRED_ANCHORS",2),u(Y,"HIT_THRESHOLD",5);let Ue=Y;class di{constructor(s){u(this,"_renderer");this._renderer=new qs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class qs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.channelOptions,h=c.y,d={x:r.x,y:h},p={x:a.x,y:h};A(t,this._drawing.style,e);let g=r,_=a,w=d,x=p;if(l.extendLines){const O=M(r,a,n.width,n.height,!0,!0),m=M(d,p,n.width,n.height,!0,!0);g=O.start,_=O.end,w=m.start,x=m.end}l.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(g.x*e,g.y*e),t.lineTo(_.x*e,_.y*e),t.lineTo(x.x*e,x.y*e),t.lineTo(w.x*e,w.y*e),t.closePath(),t.fill()),R(t,g,_,e),R(t,w,x,e);const P=this._drawing.state;if(P==="selected"||P==="editing"){const O=this._drawing.getControlPoints(n);L(t,O,null,e)}}}const ht=class ht extends I{constructor(t,i=[],e={},n={}){const{filled:o,extendLines:r,flatPosition:a,...c}=n;super(t,i,e,c);u(this,"type","flat-top-bottom");u(this,"_channelOptions");this._channelOptions={...this._options,filled:o??!0,extendLines:r??!1,flatPosition:a??"top"}}get channelOptions(){return this._channelOptions}setChannelOptions(t){this._channelOptions={...this._channelOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=ht.REQUIRED_ANCHORS}paneViews(){return[new di(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[];o.push({type:"line",start:i,end:e,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines});const r=n.y,a={x:i.x,y:r},c={x:e.x,y:r};return o.push({type:"line",start:a,end:c,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines}),o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;if(V(t,e,n)<=ht.HIT_THRESHOLD)return!0;const r=o.y,a={x:e.x,y:r},c={x:n.x,y:r};if(V(t,a,c)<=ht.HIT_THRESHOLD)return!0;if(this._channelOptions.filled){const l=Math.min(e.x,n.x),h=Math.max(e.x,n.x),d=Math.min(e.y,n.y,r),p=Math.max(e.y,n.y,r);if(t.x>=l&&t.x<=h&&t.y>=d&&t.y<=p)return!0}return!1}clone(t){return new ht(t,[...this._anchors],{...this._style},{...this._channelOptions})}static create(t,i,e,n,o,r){return new ht(t,[i,e,n],o,r)}};u(ht,"REQUIRED_ANCHORS",3),u(ht,"HIT_THRESHOLD",5);let qe=ht;class ui{constructor(s){u(this,"_renderer");this._renderer=new Ns(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ns{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n),l=this._drawing.anchorToPixel(o[3],n);if(!r||!a||!c||!l)return;const h=this._drawing.channelOptions;A(t,this._drawing.style,e);let d=r,p=a,g=c,_=l;if(h.extendLines){const x=M(r,a,n.width,n.height,!0,!0),P=M(c,l,n.width,n.height,!0,!0);d=x.start,p=x.end,g=P.start,_=P.end}if(h.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(d.x*e,d.y*e),t.lineTo(p.x*e,p.y*e),t.lineTo(_.x*e,_.y*e),t.lineTo(g.x*e,g.y*e),t.closePath(),t.fill()),R(t,d,p,e),R(t,g,_,e),h.showMiddleLine){const x={x:(r.x+c.x)/2,y:(r.y+c.y)/2},P={x:(a.x+l.x)/2,y:(a.y+l.y)/2};let O=x,m=P;if(h.extendLines){const T=M(x,P,n.width,n.height,!0,!0);O=T.start,m=T.end}F(t,O,m,[5,5],e)}const w=this._drawing.state;if(w==="selected"||w==="editing"){const x=this._drawing.getControlPoints(n);L(t,x,null,e)}}}const dt=class dt extends I{constructor(t,i=[],e={},n={}){const{filled:o,extendLines:r,showMiddleLine:a,...c}=n;super(t,i,e,c);u(this,"type","disjoint-channel");u(this,"_channelOptions");this._channelOptions={...this._options,filled:o??!0,extendLines:r??!1,showMiddleLine:a??!1}}get channelOptions(){return this._channelOptions}setChannelOptions(t){this._channelOptions={...this._channelOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=dt.REQUIRED_ANCHORS}paneViews(){return[new ui(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t),o=this.anchorToPixel(this._anchors[3],t);if(!i||!e||!n||!o)return[];const r=[];if(r.push({type:"line",start:i,end:e,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines}),r.push({type:"line",start:n,end:o,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines}),this._channelOptions.showMiddleLine){const a={x:(i.x+n.x)/2,y:(i.y+n.y)/2},c={x:(e.x+o.x)/2,y:(e.y+o.y)/2};r.push({type:"line",start:a,end:c,extendLeft:this._channelOptions.extendLines,extendRight:this._channelOptions.extendLines})}return r}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i),r=this.anchorToPixel(this._anchors[3],i);return!e||!n||!o||!r?!1:!!(V(t,e,n)<=dt.HIT_THRESHOLD||V(t,o,r)<=dt.HIT_THRESHOLD||this._channelOptions.filled&&this.isPointInPolygon(t,[e,n,r,o]))}isPointInPolygon(t,i){let e=!1;for(let n=0,o=i.length-1;n<i.length;o=n++){const r=i[n].x,a=i[n].y,c=i[o].x,l=i[o].y;a>t.y!=l>t.y&&t.x<(c-r)*(t.y-a)/(l-a)+r&&(e=!e)}return e}clone(t){return new dt(t,[...this._anchors],{...this._style},{...this._channelOptions})}static create(t,i,e,n,o,r,a){return new dt(t,[i,e,n,o],r,a)}};u(dt,"REQUIRED_ANCHORS",4),u(dt,"HIT_THRESHOLD",5);let Ne=dt;const Bs={0:"#787B86",.236:"#F7525F",.382:"#FF9800",.5:"#4CAF50",.618:"#2196F3",.786:"#9C27B0",1:"#787B86",1.618:"#00BCD4",2.618:"#E91E63"};class fi{constructor(s){u(this,"_renderer");this._renderer=new Gs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Gs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.fibOptions,l=c.levels??ue,h=o[0].price,d=o[1].price,p=d-h,g=c.extendLines?0:Math.min(r.x,a.x),_=c.extendLines?n.width:Math.max(r.x,a.x);if(this._drawing.style.fillColor){const x=[...l].sort((P,O)=>P-O);for(let P=0;P<x.length-1;P++){const O=x[P],m=x[P+1],T=c.reverseDirection?d-p*O:h+p*O,b=c.reverseDirection?d-p*m:h+p*m,C=n.priceScale.priceToCoordinate(T),H=n.priceScale.priceToCoordinate(b);C===null||H===null||(t.fillStyle=this._drawing.style.fillColor,t.globalAlpha=.1,t.fillRect(g*e,Math.min(C,H)*e,(_-g)*e,Math.abs(H-C)*e),t.globalAlpha=1)}}for(const x of l){const P=c.reverseDirection?d-p*x:h+p*x,O=n.priceScale.priceToCoordinate(P);if(O===null)continue;const m=Bs[x]??this._drawing.style.lineColor;t.strokeStyle=m,t.lineWidth=this._drawing.style.lineWidth*e,R(t,{x:g,y:O},{x:_,y:O},e);const T=[];c.showPercentages&&T.push(`${(x*100).toFixed(1)}%`),c.showPrices&&T.push(P.toFixed(2)),T.length>0&&z(t,T.join(" - "),{x:_-5,y:O},{font:"11px sans-serif",textColor:"#ffffff",backgroundColor:m+"CC",padding:3,borderRadius:2},e)}A(t,this._drawing.style,e),t.setLineDash([5,5]),R(t,r,a,e),t.setLineDash([]);const w=this._drawing.state;if(w==="selected"||w==="editing"){const x=this._drawing.getControlPoints(n);L(t,x,null,e)}}}const ue=[0,.236,.382,.5,.618,.786,1,1.618,2.618],Ot=class Ot extends I{constructor(t,i=[],e={},n={}){const{levels:o,showPrices:r,showPercentages:a,extendLines:c,reverseDirection:l,...h}=n;super(t,i,e,h);u(this,"type","fib-retracement");u(this,"_fibOptions");this._fibOptions={...this._options,levels:o??ue,showPrices:r??!0,showPercentages:a??!0,extendLines:c??!1,reverseDirection:l??!1}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Ot.REQUIRED_ANCHORS}paneViews(){return[new fi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=this._fibOptions.levels??ue,r=this._anchors[0].price,a=this._anchors[1].price,c=a-r;for(const l of o){const h=this._fibOptions.reverseDirection?a-c*l:r+c*l,d=t.priceScale.priceToCoordinate(h);d!==null&&n.push({type:"line",start:{x:this._fibOptions.extendLines?0:Math.min(i.x,e.x),y:d},end:{x:this._fibOptions.extendLines?t.width:Math.max(i.x,e.x),y:d}})}return n}getPriceAtLevel(t){if(!this.isValid())return 0;const i=this._anchors[0].price,e=this._anchors[1].price,n=e-i;return this._fibOptions.reverseDirection?e-n*t:i+n*t}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=this._fibOptions.levels??ue,r=this._anchors[0].price,a=this._anchors[1].price,c=a-r,l=this._fibOptions.extendLines?0:Math.min(e.x,n.x),h=this._fibOptions.extendLines?i.width:Math.max(e.x,n.x);for(const d of o){const p=this._fibOptions.reverseDirection?a-c*d:r+c*d,g=i.priceScale.priceToCoordinate(p);if(g!==null&&t.x>=l&&t.x<=h&&Math.abs(t.y-g)<=Ot.HIT_THRESHOLD)return!0}return!1}clone(t){return new Ot(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o){return new Ot(t,[i,e],n,o)}};u(Ot,"REQUIRED_ANCHORS",2),u(Ot,"HIT_THRESHOLD",5);let Be=Ot;const Ws={0:"#787B86",.236:"#F7525F",.382:"#FF9800",.5:"#4CAF50",.618:"#2196F3",.786:"#9C27B0",1:"#787B86",1.272:"#00BCD4",1.618:"#E91E63",2:"#795548",2.618:"#607D8B",3.618:"#9E9E9E",4.236:"#FF5722"};class pi{constructor(s){u(this,"_renderer");this._renderer=new $s(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class $s{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.fibOptions,h=l.levels??fe,d=o[0].price,p=o[1].price,g=o[2].price,_=p-d;A(t,this._drawing.style,e),F(t,r,a,[5,5],e),F(t,a,c,[5,5],e);for(const x of h){const P=g+_*x,O=n.priceScale.priceToCoordinate(P);if(O===null)continue;const m=Ws[x]??this._drawing.style.lineColor;t.strokeStyle=m,t.lineWidth=this._drawing.style.lineWidth*e;const T=l.extendLines?0:c.x;R(t,{x:T,y:O},{x:n.width,y:O},e);const b=[];l.showPercentages&&b.push(`${(x*100).toFixed(1)}%`),l.showPrices&&b.push(P.toFixed(2)),b.length>0&&z(t,b.join(" - "),{x:n.width-5,y:O},{font:"11px sans-serif",textColor:"#ffffff",backgroundColor:m+"CC",padding:3,borderRadius:2},e)}const w=this._drawing.state;if(w==="selected"||w==="editing"){const x=this._drawing.getControlPoints(n);L(t,x,null,e)}}}const fe=[0,.236,.382,.5,.618,.786,1,1.272,1.618,2,2.618,3.618,4.236],mt=class mt extends I{constructor(t,i=[],e={},n={}){const{levels:o,showPrices:r,showPercentages:a,extendLines:c,...l}=n;super(t,i,e,l);u(this,"type","fib-extension");u(this,"_fibOptions");this._fibOptions={...this._options,levels:o??fe,showPrices:r??!0,showPercentages:a??!0,extendLines:c??!1}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=mt.REQUIRED_ANCHORS}paneViews(){return[new pi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=this._fibOptions.levels??fe,a=this._anchors[0].price,c=this._anchors[1].price,l=this._anchors[2].price,h=c-a;for(const d of r){const p=l+h*d,g=t.priceScale.priceToCoordinate(p);if(g===null)continue;const _=this._fibOptions.extendLines?0:n.x,w=(this._fibOptions.extendLines,t.width);o.push({type:"line",start:{x:_,y:g},end:{x:w,y:g}})}return o}getPriceAtLevel(t){if(!this.isValid())return 0;const i=this._anchors[0].price,e=this._anchors[1].price,n=this._anchors[2].price,o=e-i;return n+o*t}testHit(t,i){if(!this.isValid()||!this.anchorToPixel(this._anchors[2],i))return!1;const n=this._fibOptions.levels??fe,o=this._anchors[0].price,r=this._anchors[1].price,a=this._anchors[2].price,c=r-o;for(const l of n){const h=a+c*l,d=i.priceScale.priceToCoordinate(h);if(d!==null&&Math.abs(t.y-d)<=mt.HIT_THRESHOLD)return!0}return!1}clone(t){return new mt(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o,r){return new mt(t,[i,e,n],o,r)}};u(mt,"REQUIRED_ANCHORS",3),u(mt,"HIT_THRESHOLD",5);let Ge=mt;class gi{constructor(s){u(this,"_renderer");this._renderer=new Qs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Qs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.fibOptions,h=l.levels??pe,d=this._drawing.calculateOffset(r,a,c);if(A(t,this._drawing.style,e),l.filled&&this._drawing.style.fillColor){t.fillStyle=this._drawing.style.fillColor;for(let g=0;g<h.length-1;g++){const _=h[g],w=h[g+1],x={x:r.x+d.x*_,y:r.y+d.y*_},P={x:a.x+d.x*_,y:a.y+d.y*_},O={x:r.x+d.x*w,y:r.y+d.y*w},m={x:a.x+d.x*w,y:a.y+d.y*w};t.beginPath(),t.moveTo(x.x*e,x.y*e),t.lineTo(P.x*e,P.y*e),t.lineTo(m.x*e,m.y*e),t.lineTo(O.x*e,O.y*e),t.closePath(),t.fill()}}for(const g of h){const _=d.x*g,w=d.y*g;let x={x:r.x+_,y:r.y+w},P={x:a.x+_,y:a.y+w};if(l.extendLines){const m=M(x,P,n.width,n.height,!0,!0);x=m.start,P=m.end}const O=g===0||g===.5||g===1||g===.618;if(t.globalAlpha=O?1:.6,R(t,x,P,e),t.globalAlpha=1,l.showPercentages){const m=P.x+5,T=P.y,b=`${(g*100).toFixed(1)}%`;st(t,b,{x:m,y:T},"10px sans-serif",this._drawing.style.lineColor||"#fff","left","middle",e)}}const p=this._drawing.state;if(p==="selected"||p==="editing"){const g=this._drawing.getControlPoints(n);L(t,g,null,e)}}}const pe=[0,.236,.382,.5,.618,.786,1,1.618,2.618],Tt=class Tt extends I{constructor(t,i=[],e={},n={}){const{levels:o,showPrices:r,showPercentages:a,extendLines:c,filled:l,...h}=n;super(t,i,e,h);u(this,"type","fib-channel");u(this,"_fibOptions");this._fibOptions={...this._options,levels:o??pe,showPrices:r??!0,showPercentages:a??!0,extendLines:c??!1,filled:l??!0}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Tt.REQUIRED_ANCHORS}paneViews(){return[new gi(this)]}calculateOffset(t,i,e){const n=i.x-t.x,o=i.y-t.y,r=Math.sqrt(n*n+o*o);if(r===0)return{x:0,y:e.y-t.y};const a=-o/r,c=n/r,l=e.x-t.x,h=e.y-t.y,d=l*a+h*c;return{x:a*d,y:c*d}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=this._fibOptions.levels??pe,a=this.calculateOffset(i,e,n);for(const c of r){const l=a.x*c,h=a.y*c,d={x:i.x+l,y:i.y+h},p={x:e.x+l,y:e.y+h};o.push({type:"line",start:d,end:p,extendLeft:this._fibOptions.extendLines,extendRight:this._fibOptions.extendLines})}return o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=this._fibOptions.levels??pe,a=this.calculateOffset(e,n,o);for(const c of r){const l=a.x*c,h=a.y*c,d={x:e.x+l,y:e.y+h},p={x:n.x+l,y:n.y+h};if(V(t,d,p)<=Tt.HIT_THRESHOLD)return!0}return!1}clone(t){return new Tt(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o,r){return new Tt(t,[i,e,n],o,r)}};u(Tt,"REQUIRED_ANCHORS",3),u(Tt,"HIT_THRESHOLD",5);let We=Tt;class xi{constructor(s){u(this,"_renderer");this._renderer=new Xs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Xs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.fibOptions,l=c.intervals??ge,h=a.x-r.x;if(A(t,this._drawing.style,e),c.filled&&this._drawing.style.fillColor){t.fillStyle=this._drawing.style.fillColor;for(let p=0;p<l.length-1;p++){const g=r.x+h*l[p],_=r.x+h*l[p+1];p%2===0&&t.fillRect(g*e,0,(_-g)*e,n.height*e)}}for(let p=0;p<l.length;p++){const g=l[p],_=r.x+h*g;if(_<0||_>n.width)continue;const w={x:_,y:0},x={x:_,y:n.height},P=[0,1,2,3,5,8,13,21,34,55,89].includes(g);if(t.globalAlpha=P?1:.5,R(t,w,x,e),t.globalAlpha=1,c.showLabels){const O=String(g);st(t,O,{x:_+3,y:15},"10px sans-serif",this._drawing.style.lineColor||"#fff","left","middle",e)}}const d=this._drawing.state;if(d==="selected"||d==="editing"){const p=this._drawing.getControlPoints(n);L(t,p,null,e)}}}const ge=[0,1,2,3,5,8,13,21,34,55,89],bt=class bt extends I{constructor(t,i=[],e={},n={}){const{intervals:o,showLabels:r,filled:a,...c}=n;super(t,i,e,c);u(this,"type","fib-time-zone");u(this,"_fibOptions");this._fibOptions={...this._options,intervals:o??ge,showLabels:r??!0,filled:a??!0}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=bt.REQUIRED_ANCHORS}paneViews(){return[new xi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=this._fibOptions.intervals??ge,r=e.x-i.x;for(const a of o){const c=i.x+r*a;n.push({type:"line",start:{x:c,y:0},end:{x:c,y:t.height}})}return n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=this._fibOptions.intervals??ge,r=n.x-e.x;for(const a of o){const c=e.x+r*a;if(Math.abs(t.x-c)<=bt.HIT_THRESHOLD)return!0}return!1}clone(t){return new bt(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o){return new bt(t,[i,e],n,o)}};u(bt,"REQUIRED_ANCHORS",2),u(bt,"HIT_THRESHOLD",5);let $e=bt;class _i{constructor(s){u(this,"_renderer");this._renderer=new js(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class js{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.fibOptions,l=c.ratios??xe;if(A(t,this._drawing.style,e),c.filled&&this._drawing.style.fillColor){t.fillStyle=this._drawing.style.fillColor;const d=[...l].sort((p,g)=>p-g);for(let p=0;p<d.length-1;p++){const g=this._drawing.getFanLineEnd(r,a,d[p],n.width),_=this._drawing.getFanLineEnd(r,a,d[p+1],n.width);t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo(g.x*e,g.y*e),t.lineTo(_.x*e,_.y*e),t.closePath(),t.fill()}}for(const d of l){let p=this._drawing.getFanLineEnd(r,a,d,n.width);c.extendLines&&(p=M(r,p,n.width,n.height,!1,!0).end);const g=d===.382||d===.5||d===.618||d===1;if(t.globalAlpha=g?1:.6,R(t,r,p,e),t.globalAlpha=1,c.showLabels){const _={x:(r.x+p.x)/2,y:(r.y+p.y)/2},w=d===1?"1:1":`${d}`;st(t,w,_,"10px sans-serif",this._drawing.style.lineColor||"#fff","left","middle",e)}}R(t,r,a,e);const h=this._drawing.state;if(h==="selected"||h==="editing"){const d=this._drawing.getControlPoints(n);L(t,d,null,e)}}}const xe=[.25,.382,.5,.618,.75,1,1.618,2,4],Rt=class Rt extends I{constructor(t,i=[],e={},n={}){const{ratios:o,showLabels:r,extendLines:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","fib-speed-fan");u(this,"_fibOptions");this._fibOptions={...this._options,ratios:o??xe,showLabels:r??!0,extendLines:a??!0,filled:c??!0}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Rt.REQUIRED_ANCHORS}paneViews(){return[new _i(this)]}getFanLineEnd(t,i,e,n){const o=i.x-t.x,a=(i.y-t.y)*e,c=(n-t.x)/Math.max(1,o);return{x:t.x+o*c,y:t.y+a*c}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=this._fibOptions.ratios??xe;for(const r of o){const a=this.getFanLineEnd(i,e,r,t.width);n.push({type:"line",start:i,end:a,extendRight:this._fibOptions.extendLines})}return n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=this._fibOptions.ratios??xe;for(const r of o){const a=this.getFanLineEnd(e,n,r,i.width);if(V(t,e,a)<=Rt.HIT_THRESHOLD)return!0}return!1}clone(t){return new Rt(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o){return new Rt(t,[i,e],n,o)}};u(Rt,"REQUIRED_ANCHORS",2),u(Rt,"HIT_THRESHOLD",5);let Qe=Rt;class wi{constructor(s){u(this,"_renderer");this._renderer=new Ys(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ys{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.fibOptions,h=l.levels??_e,d=a.x-r.x;if(A(t,this._drawing.style,e),l.filled&&this._drawing.style.fillColor){t.fillStyle=this._drawing.style.fillColor;for(let g=0;g<h.length-1;g++){const _=c.x+d*h[g],w=c.x+d*h[g+1];g%2===0&&t.fillRect(_*e,0,(w-_)*e,n.height*e)}}for(const g of h){const _=c.x+d*g;if(_<0||_>n.width)continue;const w={x:_,y:0},x={x:_,y:n.height},P=g===0||g===.5||g===1||g===1.618;if(t.globalAlpha=P?1:.6,R(t,w,x,e),t.globalAlpha=1,l.showLabels){const O=`${(g*100).toFixed(1)}%`;st(t,O,{x:_+3,y:15},"10px sans-serif",this._drawing.style.lineColor||"#fff","left","middle",e)}}t.globalAlpha=.5,R(t,r,a,e),R(t,a,c,e),t.globalAlpha=1;const p=this._drawing.state;if(p==="selected"||p==="editing"){const g=this._drawing.getControlPoints(n);L(t,g,null,e)}}}const _e=[0,.382,.5,.618,1,1.618,2,2.618,4.236],Ct=class Ct extends I{constructor(t,i=[],e={},n={}){const{levels:o,showLabels:r,filled:a,...c}=n;super(t,i,e,c);u(this,"type","fib-time-extension");u(this,"_fibOptions");this._fibOptions={...this._options,levels:o??_e,showLabels:r??!0,filled:a??!0}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Ct.REQUIRED_ANCHORS}paneViews(){return[new wi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=this._fibOptions.levels??_e,a=e.x-i.x;for(const c of r){const l=n.x+a*c;o.push({type:"line",start:{x:l,y:0},end:{x:l,y:t.height}})}return o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=this._fibOptions.levels??_e,a=n.x-e.x;for(const c of r){const l=o.x+a*c;if(Math.abs(t.x-l)<=Ct.HIT_THRESHOLD)return!0}return!1}clone(t){return new Ct(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o,r){return new Ct(t,[i,e,n],o,r)}};u(Ct,"REQUIRED_ANCHORS",3),u(Ct,"HIT_THRESHOLD",5);let Xe=Ct;class yi{constructor(s){u(this,"_renderer");this._renderer=new Js(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Js{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.fibOptions,l=c.levels??we,h=D(r,a);A(t,this._drawing.style,e);const d=[...l].sort((g,_)=>_-g);for(const g of d){const _=h*g;c.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.arc(r.x*e,r.y*e,_*e,0,Math.PI*2),t.fill());const w=g===.382||g===.5||g===.618||g===1;if(t.globalAlpha=w?1:.6,t.beginPath(),t.arc(r.x*e,r.y*e,_*e,0,Math.PI*2),t.stroke(),t.globalAlpha=1,c.showLabels){const x=`${(g*100).toFixed(1)}%`,P={x:r.x+_,y:r.y};st(t,x,P,"10px sans-serif",this._drawing.style.lineColor||"#fff","left","middle",e)}}t.globalAlpha=.5,t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo(a.x*e,a.y*e),t.stroke(),t.globalAlpha=1;const p=this._drawing.state;if(p==="selected"||p==="editing"){const g=this._drawing.getControlPoints(n);L(t,g,null,e)}}}const we=[.236,.382,.5,.618,.786,1,1.618,2.618],St=class St extends I{constructor(t,i=[],e={},n={}){const{levels:o,showLabels:r,filled:a,...c}=n;super(t,i,e,c);u(this,"type","fib-circles");u(this,"_fibOptions");this._fibOptions={...this._options,levels:o??we,showLabels:r??!0,filled:a??!1}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=St.REQUIRED_ANCHORS}paneViews(){return[new yi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=this._fibOptions.levels??we,r=D(i,e);for(const a of o){const c=r*a;n.push({type:"arc",center:i,radius:c,startAngle:0,endAngle:Math.PI*2})}return n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=this._fibOptions.levels??we,r=D(e,n),a=D(t,e);for(const c of o){const l=r*c;if(Math.abs(a-l)<=St.HIT_THRESHOLD)return!0}return!1}clone(t){return new St(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o){return new St(t,[i,e],n,o)}};u(St,"REQUIRED_ANCHORS",2),u(St,"HIT_THRESHOLD",5);let je=St;class Pi{constructor(s){u(this,"_renderer");this._renderer=new Zs(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Zs{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.fibOptions,l=D(r,a)/Ye;A(t,this._drawing.style,e);const h=this._drawing.getSpiralPoints(r,l,c.rotations??4,c.clockwise??!0);if(c.showSquares&&this.drawFibSquares(t,r,l,c.clockwise??!0,e),h.length>1){t.beginPath(),t.moveTo(h[0].x*e,h[0].y*e);for(let p=1;p<h.length;p++)t.lineTo(h[p].x*e,h[p].y*e);t.stroke()}t.globalAlpha=.5,t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo(a.x*e,a.y*e),t.stroke(),t.globalAlpha=1;const d=this._drawing.state;if(d==="selected"||d==="editing"){const p=this._drawing.getControlPoints(n);L(t,p,null,e)}}drawFibSquares(s,t,i,e,n){s.globalAlpha=.3;const o=[1,1,2,3,5,8];let r=t.x,a=t.y;const c=i/8;for(let l=0;l<o.length;l++){const h=o[l]*c;s.strokeRect(r*n,a*n,h*n,h*n),l%4===0?r+=h:l%4===1?a+=h:l%4===2?r-=h:a-=h}s.globalAlpha=1}}const Ye=1.618033988749895,Ht=class Ht extends I{constructor(t,i=[],e={},n={}){const{rotations:o,clockwise:r,showSquares:a,...c}=n;super(t,i,e,c);u(this,"type","fib-spiral");u(this,"_fibOptions");this._fibOptions={...this._options,rotations:o??4,clockwise:r??!0,showSquares:a??!1}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Ht.REQUIRED_ANCHORS}paneViews(){return[new Pi(this)]}getSpiralPoints(t,i,e,n){const o=[],r=e*90,a=Math.log(Ye)/(Math.PI/2);for(let c=0;c<=r;c++){const l=c/r*e*Math.PI*2,h=i*Math.exp(a*l),d=n?-l:l;o.push({x:t.x+h*Math.cos(d),y:t.y+h*Math.sin(d)})}return o}computeGeometry(t){return[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=D(e,n)/Ye,r=this.getSpiralPoints(e,o,this._fibOptions.rotations??4,this._fibOptions.clockwise??!0);for(let a=0;a<r.length-1;a++){const c=r[a],l=r[a+1],h=l.x-c.x,d=l.y-c.y,p=Math.sqrt(h*h+d*d);if(p===0)continue;const g=Math.max(0,Math.min(1,((t.x-c.x)*h+(t.y-c.y)*d)/(p*p))),_=c.x+g*h,w=c.y+g*d;if(Math.sqrt((t.x-_)**2+(t.y-w)**2)<=Ht.HIT_THRESHOLD)return!0}return!1}clone(t){return new Ht(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o){return new Ht(t,[i,e],n,o)}};u(Ht,"REQUIRED_ANCHORS",2),u(Ht,"HIT_THRESHOLD",8);let Je=Ht;class Oi{constructor(s){u(this,"_renderer");this._renderer=new Ks(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Ks{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.fibOptions,l=c.levels??ye,h=D(r,a),d=Math.atan2(a.y-r.y,a.x-r.x),p=c.fullCircle?0:d-Math.PI/2,g=c.fullCircle?Math.PI*2:d+Math.PI/2;A(t,this._drawing.style,e);for(const w of l){const x=h*w,P=w===.382||w===.5||w===.618||w===1;if(t.globalAlpha=P?1:.6,t.beginPath(),t.arc(r.x*e,r.y*e,x*e,p,g),t.stroke(),t.globalAlpha=1,c.showLabels){const O=(p+g)/2,m={x:r.x+x*Math.cos(O),y:r.y+x*Math.sin(O)},T=`${(w*100).toFixed(1)}%`;st(t,T,m,"10px sans-serif",this._drawing.style.lineColor||"#fff","left","middle",e)}}t.globalAlpha=.5,R(t,r,a,e),t.globalAlpha=1;const _=this._drawing.state;if(_==="selected"||_==="editing"){const w=this._drawing.getControlPoints(n);L(t,w,null,e)}}}const ye=[.236,.382,.5,.618,.786,1],Lt=class Lt extends I{constructor(t,i=[],e={},n={}){const{levels:o,showLabels:r,fullCircle:a,...c}=n;super(t,i,e,c);u(this,"type","fib-arcs");u(this,"_fibOptions");this._fibOptions={...this._options,levels:o??ye,showLabels:r??!0,fullCircle:a??!1}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Lt.REQUIRED_ANCHORS}paneViews(){return[new Oi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=this._fibOptions.levels??ye,r=D(i,e),a=Math.atan2(e.y-i.y,e.x-i.x),c=this._fibOptions.fullCircle?0:a-Math.PI/2,l=this._fibOptions.fullCircle?Math.PI*2:a+Math.PI/2;for(const h of o){const d=r*h;n.push({type:"arc",center:i,radius:d,startAngle:c,endAngle:l})}return n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=this._fibOptions.levels??ye,r=D(e,n),a=D(t,e);for(const c of o){const l=r*c;if(Math.abs(a-l)<=Lt.HIT_THRESHOLD)return!0}return!1}clone(t){return new Lt(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o){return new Lt(t,[i,e],n,o)}};u(Lt,"REQUIRED_ANCHORS",2),u(Lt,"HIT_THRESHOLD",5);let Ze=Lt;class mi{constructor(s){u(this,"_renderer");this._renderer=new tr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class tr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.fibOptions,h=l.levels??Pe;A(t,this._drawing.style,e),l.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo(a.x*e,a.y*e),t.lineTo(c.x*e,c.y*e),t.closePath(),t.fill()),R(t,r,a,e),R(t,r,c,e);for(const p of h){if(p===0||p===1)continue;const g=this._drawing.getWedgeLineEnd(r,a,c,p),_=p===.382||p===.5||p===.618;if(t.globalAlpha=_?.8:.5,R(t,r,g,e),t.globalAlpha=1,l.showLabels){const w={x:(r.x+g.x)/2,y:(r.y+g.y)/2},x=`${(p*100).toFixed(1)}%`;st(t,x,w,"10px sans-serif",this._drawing.style.lineColor||"#fff","left","middle",e)}}t.globalAlpha=.5,R(t,a,c,e),t.globalAlpha=1;const d=this._drawing.state;if(d==="selected"||d==="editing"){const p=this._drawing.getControlPoints(n);L(t,p,null,e)}}}const Pe=[0,.236,.382,.5,.618,.786,1],J=class J extends I{constructor(t,i=[],e={},n={}){const{levels:o,showLabels:r,filled:a,...c}=n;super(t,i,e,c);u(this,"type","fib-wedge");u(this,"_fibOptions");this._fibOptions={...this._options,levels:o??Pe,showLabels:r??!0,filled:a??!0}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=J.REQUIRED_ANCHORS}paneViews(){return[new mi(this)]}getWedgeLineEnd(t,i,e,n){return{x:i.x+(e.x-i.x)*n,y:i.y+(e.y-i.y)*n}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=this._fibOptions.levels??Pe;o.push({type:"line",start:i,end:e}),o.push({type:"line",start:i,end:n});for(const a of r){if(a===0||a===1)continue;const c=this.getWedgeLineEnd(i,e,n,a);o.push({type:"line",start:i,end:c})}return o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;if(V(t,e,n)<=J.HIT_THRESHOLD||V(t,e,o)<=J.HIT_THRESHOLD)return!0;const r=this._fibOptions.levels??Pe;for(const a of r){if(a===0||a===1)continue;const c=this.getWedgeLineEnd(e,n,o,a);if(V(t,e,c)<=J.HIT_THRESHOLD)return!0}return!1}clone(t){return new J(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o,r){return new J(t,[i,e,n],o,r)}};u(J,"REQUIRED_ANCHORS",3),u(J,"HIT_THRESHOLD",5);let Ke=J;class Ti{constructor(s){u(this,"_renderer");this._renderer=new er(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class er{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.fibOptions,h=l.levels??Oe,d=k(a,c);if(A(t,this._drawing.style,e),l.filled&&this._drawing.style.fillColor){t.fillStyle=this._drawing.style.fillColor;const x=[...h].sort((P,O)=>P-O);for(let P=0;P<x.length-1;P++){const O=this._drawing.getFanLineEnd(r,a,c,x[P]),m=this._drawing.getFanLineEnd(r,a,c,x[P+1]);t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo(O.x*e,O.y*e),t.lineTo(m.x*e,m.y*e),t.closePath(),t.fill()}}const p=d.x-r.x,g=d.y-r.y;let _={x:r.x+p*3,y:r.y+g*3};l.extendLines&&(_=M(r,_,n.width,n.height,!1,!0).end),F(t,r,_,[5,5],e);for(const x of h){let P=this._drawing.getFanLineEnd(r,a,c,x);l.extendLines&&(P=M(r,P,n.width,n.height,!1,!0).end);const O=x===.382||x===.5||x===.618;if(t.globalAlpha=O?1:.6,R(t,r,P,e),t.globalAlpha=1,l.showLabels){const m={x:(r.x+P.x)/2,y:(r.y+P.y)/2},T=`${(x*100).toFixed(1)}%`;st(t,T,m,"10px sans-serif",this._drawing.style.lineColor||"#fff","left","middle",e)}}t.globalAlpha=.5,R(t,r,a,e),R(t,r,c,e),R(t,a,c,e),t.globalAlpha=1;const w=this._drawing.state;if(w==="selected"||w==="editing"){const x=this._drawing.getControlPoints(n);L(t,x,null,e)}}}const Oe=[.236,.382,.5,.618,.786,1],ut=class ut extends I{constructor(t,i=[],e={},n={}){const{levels:o,showLabels:r,extendLines:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","pitchfan");u(this,"_fibOptions");this._fibOptions={...this._options,levels:o??Oe,showLabels:r??!0,extendLines:a??!0,filled:c??!0}}get fibOptions(){return this._fibOptions}setFibOptions(t){this._fibOptions={...this._fibOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=ut.REQUIRED_ANCHORS}paneViews(){return[new Ti(this)]}getFanLineEnd(t,i,e,n){const o={x:i.x+(e.x-i.x)*n,y:i.y+(e.y-i.y)*n},r=o.x-t.x,a=o.y-t.y;return{x:t.x+r*3,y:t.y+a*3}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=this._fibOptions.levels??Oe,a=k(e,n),c=a.x-i.x,l=a.y-i.y,h={x:i.x+c*3,y:i.y+l*3};o.push({type:"line",start:i,end:h,extendRight:this._fibOptions.extendLines});for(const d of r){const p=this.getFanLineEnd(i,e,n,d);o.push({type:"line",start:i,end:p,extendRight:this._fibOptions.extendLines})}return o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=k(n,o),a=r.x-e.x,c=r.y-e.y,l={x:e.x+a*3,y:e.y+c*3};if(V(t,e,l)<=ut.HIT_THRESHOLD)return!0;const h=this._fibOptions.levels??Oe;for(const d of h){const p=this.getFanLineEnd(e,n,o,d);if(V(t,e,p)<=ut.HIT_THRESHOLD)return!0}return!1}clone(t){return new ut(t,[...this._anchors],{...this._style},{...this._fibOptions})}static create(t,i,e,n,o,r){return new ut(t,[i,e,n],o,r)}};u(ut,"REQUIRED_ANCHORS",3),u(ut,"HIT_THRESHOLD",5);let tn=ut;class bi{constructor(s){u(this,"_renderer");this._renderer=new nr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class nr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.pitchforkOptions,h=k(a,c),d=h.x-r.x,p=h.y-r.y;A(t,this._drawing.style,e);const g={x:r.x+d*3,y:r.y+p*3},_={x:a.x+d*3,y:a.y+p*3},w={x:c.x+d*3,y:c.y+p*3};let x=g,P=_,O=w;if(l.extendLines){const T=M(r,g,n.width,n.height,!1,!0),b=M(a,_,n.width,n.height,!1,!0),C=M(c,w,n.width,n.height,!1,!0);x=T.end,P=b.end,O=C.end}l.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(a.x*e,a.y*e),t.lineTo(P.x*e,P.y*e),t.lineTo(O.x*e,O.y*e),t.lineTo(c.x*e,c.y*e),t.closePath(),t.fill()),l.showMedianLine&&F(t,r,x,[5,5],e),l.showOuterLines&&(R(t,a,P,e),R(t,c,O,e)),t.globalAlpha=.5,R(t,r,a,e),R(t,r,c,e),R(t,a,c,e),t.globalAlpha=1;const m=this._drawing.state;if(m==="selected"||m==="editing"){const T=this._drawing.getControlPoints(n);L(t,T,null,e)}}}const Z=class Z extends I{constructor(t,i=[],e={},n={}){const{showMedianLine:o,showOuterLines:r,extendLines:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","andrews-pitchfork");u(this,"_pitchforkOptions");this._pitchforkOptions={...this._options,showMedianLine:o??!0,showOuterLines:r??!0,extendLines:a??!0,filled:c??!0}}get pitchforkOptions(){return this._pitchforkOptions}setPitchforkOptions(t){this._pitchforkOptions={...this._pitchforkOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Z.REQUIRED_ANCHORS}paneViews(){return[new bi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=k(e,n);this._pitchforkOptions.showMedianLine&&o.push({type:"line",start:i,end:r,extendRight:this._pitchforkOptions.extendLines});const a=r.x-i.x,c=r.y-i.y;if(this._pitchforkOptions.showOuterLines){const l={x:e.x+a*2,y:e.y+c*2};o.push({type:"line",start:e,end:l,extendRight:this._pitchforkOptions.extendLines});const h={x:n.x+a*2,y:n.y+c*2};o.push({type:"line",start:n,end:h,extendRight:this._pitchforkOptions.extendLines})}return o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=k(n,o);if(V(t,e,r)<=Z.HIT_THRESHOLD)return!0;const a=r.x-e.x,c=r.y-e.y,l={x:n.x+a*2,y:n.y+c*2},h={x:o.x+a*2,y:o.y+c*2};return V(t,n,l)<=Z.HIT_THRESHOLD||V(t,o,h)<=Z.HIT_THRESHOLD}clone(t){return new Z(t,[...this._anchors],{...this._style},{...this._pitchforkOptions})}static create(t,i,e,n,o,r){return new Z(t,[i,e,n],o,r)}};u(Z,"REQUIRED_ANCHORS",3),u(Z,"HIT_THRESHOLD",5);let en=Z;class Ri{constructor(s){u(this,"_renderer");this._renderer=new ir(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class ir{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.pitchforkOptions,h=this._drawing.getSchiffPivot(r,a),d=k(a,c),p=d.x-h.x,g=d.y-h.y;A(t,this._drawing.style,e);const _={x:h.x+p*3,y:h.y+g*3},w={x:a.x+p*3,y:a.y+g*3},x={x:c.x+p*3,y:c.y+g*3};let P=_,O=w,m=x;if(l.extendLines){const b=M(h,_,n.width,n.height,!1,!0),C=M(a,w,n.width,n.height,!1,!0),H=M(c,x,n.width,n.height,!1,!0);P=b.end,O=C.end,m=H.end}l.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(a.x*e,a.y*e),t.lineTo(O.x*e,O.y*e),t.lineTo(m.x*e,m.y*e),t.lineTo(c.x*e,c.y*e),t.closePath(),t.fill()),l.showMedianLine&&F(t,h,P,[5,5],e),l.showOuterLines&&(R(t,a,O,e),R(t,c,m,e)),t.globalAlpha=.5,R(t,r,a,e),R(t,r,c,e),R(t,a,c,e),t.globalAlpha=1;const T=this._drawing.state;if(T==="selected"||T==="editing"){const b=this._drawing.getControlPoints(n);L(t,b,null,e)}}}const K=class K extends I{constructor(t,i=[],e={},n={}){const{showMedianLine:o,showOuterLines:r,extendLines:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","schiff-pitchfork");u(this,"_pitchforkOptions");this._pitchforkOptions={...this._options,showMedianLine:o??!0,showOuterLines:r??!0,extendLines:a??!0,filled:c??!0}}get pitchforkOptions(){return this._pitchforkOptions}setPitchforkOptions(t){this._pitchforkOptions={...this._pitchforkOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=K.REQUIRED_ANCHORS}paneViews(){return[new Ri(this)]}getSchiffPivot(t,i){return k(t,i)}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=this.getSchiffPivot(i,e),a=k(e,n);this._pitchforkOptions.showMedianLine&&o.push({type:"line",start:r,end:a,extendRight:this._pitchforkOptions.extendLines});const c=a.x-r.x,l=a.y-r.y;if(this._pitchforkOptions.showOuterLines){const h={x:e.x+c*2,y:e.y+l*2};o.push({type:"line",start:e,end:h,extendRight:this._pitchforkOptions.extendLines});const d={x:n.x+c*2,y:n.y+l*2};o.push({type:"line",start:n,end:d,extendRight:this._pitchforkOptions.extendLines})}return o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=this.getSchiffPivot(e,n),a=k(n,o);if(V(t,r,a)<=K.HIT_THRESHOLD)return!0;const c=a.x-r.x,l=a.y-r.y,h={x:n.x+c*2,y:n.y+l*2},d={x:o.x+c*2,y:o.y+l*2};return V(t,n,h)<=K.HIT_THRESHOLD||V(t,o,d)<=K.HIT_THRESHOLD}clone(t){return new K(t,[...this._anchors],{...this._style},{...this._pitchforkOptions})}static create(t,i,e,n,o,r){return new K(t,[i,e,n],o,r)}};u(K,"REQUIRED_ANCHORS",3),u(K,"HIT_THRESHOLD",5);let nn=K;class Ci{constructor(s){u(this,"_renderer");this._renderer=new sr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class sr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.pitchforkOptions,h=this._drawing.getModifiedSchiffPivot(r,a),d=k(a,c),p=d.x-h.x,g=d.y-h.y;A(t,this._drawing.style,e);const _={x:h.x+p*3,y:h.y+g*3},w={x:a.x+p*3,y:a.y+g*3},x={x:c.x+p*3,y:c.y+g*3};let P=_,O=w,m=x;if(l.extendLines){const b=M(h,_,n.width,n.height,!1,!0),C=M(a,w,n.width,n.height,!1,!0),H=M(c,x,n.width,n.height,!1,!0);P=b.end,O=C.end,m=H.end}l.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(a.x*e,a.y*e),t.lineTo(O.x*e,O.y*e),t.lineTo(m.x*e,m.y*e),t.lineTo(c.x*e,c.y*e),t.closePath(),t.fill()),l.showMedianLine&&F(t,h,P,[5,5],e),l.showOuterLines&&(R(t,a,O,e),R(t,c,m,e)),t.globalAlpha=.5,R(t,r,a,e),R(t,r,c,e),R(t,a,c,e),t.globalAlpha=1;const T=this._drawing.state;if(T==="selected"||T==="editing"){const b=this._drawing.getControlPoints(n);L(t,b,null,e)}}}const tt=class tt extends I{constructor(t,i=[],e={},n={}){const{showMedianLine:o,showOuterLines:r,extendLines:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","modified-schiff-pitchfork");u(this,"_pitchforkOptions");this._pitchforkOptions={...this._options,showMedianLine:o??!0,showOuterLines:r??!0,extendLines:a??!0,filled:c??!0}}get pitchforkOptions(){return this._pitchforkOptions}setPitchforkOptions(t){this._pitchforkOptions={...this._pitchforkOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=tt.REQUIRED_ANCHORS}paneViews(){return[new Ci(this)]}getModifiedSchiffPivot(t,i){const e={x:t.x,y:i.y};return k(t,e)}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=this.getModifiedSchiffPivot(i,e),a=k(e,n);this._pitchforkOptions.showMedianLine&&o.push({type:"line",start:r,end:a,extendRight:this._pitchforkOptions.extendLines});const c=a.x-r.x,l=a.y-r.y;if(this._pitchforkOptions.showOuterLines){const h={x:e.x+c*2,y:e.y+l*2};o.push({type:"line",start:e,end:h,extendRight:this._pitchforkOptions.extendLines});const d={x:n.x+c*2,y:n.y+l*2};o.push({type:"line",start:n,end:d,extendRight:this._pitchforkOptions.extendLines})}return o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=this.getModifiedSchiffPivot(e,n),a=k(n,o);if(V(t,r,a)<=tt.HIT_THRESHOLD)return!0;const c=a.x-r.x,l=a.y-r.y,h={x:n.x+c*2,y:n.y+l*2},d={x:o.x+c*2,y:o.y+l*2};return V(t,n,h)<=tt.HIT_THRESHOLD||V(t,o,d)<=tt.HIT_THRESHOLD}clone(t){return new tt(t,[...this._anchors],{...this._style},{...this._pitchforkOptions})}static create(t,i,e,n,o,r){return new tt(t,[i,e,n],o,r)}};u(tt,"REQUIRED_ANCHORS",3),u(tt,"HIT_THRESHOLD",5);let sn=tt;class Si{constructor(s){u(this,"_renderer");this._renderer=new rr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class rr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.pitchforkOptions,h=k(a,c),d=h.x-r.x,p=h.y-r.y,g=this._drawing.getConvergencePoint(r,h,3);A(t,this._drawing.style,e);const _={x:r.x+d*3,y:r.y+p*3};let w=_,x=g;if(l.extendLines){w=M(r,_,n.width,n.height,!1,!0).end;const m=M(a,g,n.width,n.height,!1,!0),T=M(c,g,n.width,n.height,!1,!0);x={x:Math.max(m.end.x,T.end.x,g.x),y:(m.end.y+T.end.y)/2}}if(l.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.beginPath(),t.moveTo(a.x*e,a.y*e),t.lineTo(x.x*e,x.y*e),t.lineTo(c.x*e,c.y*e),t.closePath(),t.fill()),l.showMedianLine&&F(t,r,w,[5,5],e),l.showOuterLines)if(l.extendLines){const O=M(a,g,n.width,n.height,!1,!0),m=M(c,g,n.width,n.height,!1,!0);R(t,a,O.end,e),R(t,c,m.end,e)}else R(t,a,g,e),R(t,c,g,e);t.globalAlpha=.5,R(t,r,a,e),R(t,r,c,e),R(t,a,c,e),t.globalAlpha=1;const P=this._drawing.state;if(P==="selected"||P==="editing"){const O=this._drawing.getControlPoints(n);L(t,O,null,e)}}}const et=class et extends I{constructor(t,i=[],e={},n={}){const{showMedianLine:o,showOuterLines:r,extendLines:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","inside-pitchfork");u(this,"_pitchforkOptions");this._pitchforkOptions={...this._options,showMedianLine:o??!0,showOuterLines:r??!0,extendLines:a??!0,filled:c??!0}}get pitchforkOptions(){return this._pitchforkOptions}setPitchforkOptions(t){this._pitchforkOptions={...this._pitchforkOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=et.REQUIRED_ANCHORS}paneViews(){return[new Si(this)]}getConvergencePoint(t,i,e=3){const n=i.x-t.x,o=i.y-t.y;return{x:t.x+n*e,y:t.y+o*e}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=k(e,n);this._pitchforkOptions.showMedianLine&&o.push({type:"line",start:i,end:r,extendRight:this._pitchforkOptions.extendLines});const a=this.getConvergencePoint(i,r,3);return this._pitchforkOptions.showOuterLines&&(o.push({type:"line",start:e,end:a,extendRight:this._pitchforkOptions.extendLines}),o.push({type:"line",start:n,end:a,extendRight:this._pitchforkOptions.extendLines})),o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=k(n,o),a=this.getConvergencePoint(e,r,3);return V(t,e,r)<=et.HIT_THRESHOLD||V(t,n,a)<=et.HIT_THRESHOLD||V(t,o,a)<=et.HIT_THRESHOLD}clone(t){return new et(t,[...this._anchors],{...this._style},{...this._pitchforkOptions})}static create(t,i,e,n,o,r){return new et(t,[i,e,n],o,r)}};u(et,"REQUIRED_ANCHORS",3),u(et,"HIT_THRESHOLD",5);let rn=et;class Hi{constructor(s){u(this,"_renderer");this._renderer=new or(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class or{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.gannOptions,l=c.priceLevels??Dt,h=c.timeLevels??Dt,d=Math.min(r.x,a.x),p=Math.max(r.x,a.x),g=Math.min(r.y,a.y),_=Math.max(r.y,a.y),w=p-d,x=_-g;A(t,this._drawing.style,e),c.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.fillRect(d*e,g*e,w*e,x*e)),ie(t,{x:d,y:g},w,x,!1,e),t.globalAlpha=.6;for(const O of l){if(O===0||O===1)continue;const m=g+x*O;F(t,{x:d,y:m},{x:p,y:m},[3,3],e),z(t,`${(O*100).toFixed(0)}%`,{x:p+5,y:m},{font:"10px sans-serif",textColor:this._drawing.style.lineColor,backgroundColor:"transparent",padding:2},e)}for(const O of h){if(O===0||O===1)continue;const m=d+w*O;F(t,{x:m,y:g},{x:m,y:_},[3,3],e)}t.globalAlpha=1,c.showDiagonals&&(t.globalAlpha=.5,R(t,{x:d,y:g},{x:p,y:_},e),R(t,{x:d,y:_},{x:p,y:g},e),t.globalAlpha=1);const P=this._drawing.state;if(P==="selected"||P==="editing"){const O=this._drawing.getControlPoints(n);L(t,O,null,e)}}}const Dt=[0,.25,.333,.5,.667,.75,1],kt=class kt extends I{constructor(t,i=[],e={},n={}){const{priceLevels:o,timeLevels:r,showDiagonals:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","gann-box");u(this,"_gannOptions");this._gannOptions={...this._options,priceLevels:o??Dt,timeLevels:r??Dt,showDiagonals:a??!0,filled:c??!1}}get gannOptions(){return this._gannOptions}setGannOptions(t){this._gannOptions={...this._gannOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=kt.REQUIRED_ANCHORS}paneViews(){return[new Hi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=this._gannOptions.priceLevels??Dt,r=this._gannOptions.timeLevels??Dt,a=Math.min(i.x,e.x),c=Math.max(i.x,e.x),l=Math.min(i.y,e.y),h=Math.max(i.y,e.y),d=c-a,p=h-l;n.push({type:"rectangle",topLeft:{x:a,y:l},width:d,height:p});for(const g of o){if(g===0||g===1)continue;const _=l+p*g;n.push({type:"line",start:{x:a,y:_},end:{x:c,y:_}})}for(const g of r){if(g===0||g===1)continue;const _=a+d*g;n.push({type:"line",start:{x:_,y:l},end:{x:_,y:h}})}return this._gannOptions.showDiagonals&&(n.push({type:"line",start:{x:a,y:l},end:{x:c,y:h}}),n.push({type:"line",start:{x:a,y:h},end:{x:c,y:l}})),n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=Math.min(e.x,n.x),r=Math.max(e.x,n.x),a=Math.min(e.y,n.y),c=Math.max(e.y,n.y);return t.x>=o&&t.x<=r&&t.y>=a&&t.y<=c}clone(t){return new kt(t,[...this._anchors],{...this._style},{...this._gannOptions})}static create(t,i,e,n,o){return new kt(t,[i,e],n,o)}};u(kt,"REQUIRED_ANCHORS",2),u(kt,"HIT_THRESHOLD",5);let on=kt;const ar={"8x1":"#F44336","4x1":"#E91E63","3x1":"#9C27B0","2x1":"#673AB7","1x1":"#2196F3","1x2":"#00BCD4","1x3":"#4CAF50","1x4":"#8BC34A","1x8":"#CDDC39"};class Li{constructor(s){u(this,"_renderer");this._renderer=new cr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class cr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.gannOptions,l=c.angles??me,h=a.x-r.x,d=a.y-r.y,p=Math.sqrt(h*h+d*d);if(p===0)return;const g=h/p,_=d/p;A(t,this._drawing.style,e);for(const x of l){const P=g*p*3,O=_*p*3*x.ratio;let m={x:r.x+P,y:r.y+O};c.extendLines&&(m=M(r,m,n.width,n.height,!1,!0).end);const T=ar[x.label]??this._drawing.style.lineColor;if(t.strokeStyle=T,t.lineWidth=(x.label==="1x1"?2:1)*this._drawing.style.lineWidth*e,R(t,r,m,e),c.showLabels){const b={x:r.x+P*.3,y:r.y+O*.3};z(t,x.label,b,{font:"10px sans-serif",textColor:"#ffffff",backgroundColor:T+"CC",padding:2,borderRadius:2},e)}}const w=this._drawing.state;if(w==="selected"||w==="editing"){const x=this._drawing.getControlPoints(n);L(t,x,null,e)}}}const me=[{ratio:8,label:"8x1"},{ratio:4,label:"4x1"},{ratio:3,label:"3x1"},{ratio:2,label:"2x1"},{ratio:1,label:"1x1"},{ratio:.5,label:"1x2"},{ratio:.333,label:"1x3"},{ratio:.25,label:"1x4"},{ratio:.125,label:"1x8"}],It=class It extends I{constructor(t,i=[],e={},n={}){const{angles:o,showLabels:r,extendLines:a,...c}=n;super(t,i,e,c);u(this,"type","gann-fan");u(this,"_gannOptions");this._gannOptions={...this._options,angles:o??me,showLabels:r??!0,extendLines:a??!0}}get gannOptions(){return this._gannOptions}setGannOptions(t){this._gannOptions={...this._gannOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=It.REQUIRED_ANCHORS}paneViews(){return[new Li(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=this._gannOptions.angles??me,r=e.x-i.x,a=e.y-i.y,c=Math.sqrt(r*r+a*a);if(c===0)return[];const l=r/c,h=a/c;for(const d of o){const p=l*c*2,g=h*c*2*d.ratio,_={x:i.x+p,y:i.y+g};n.push({type:"line",start:i,end:_,extendRight:this._gannOptions.extendLines})}return n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=this._gannOptions.angles??me,r=n.x-e.x,a=n.y-e.y,c=Math.sqrt(r*r+a*a);if(c===0)return!1;const l=r/c,h=a/c;for(const d of o){const p=l*c*2,g=h*c*2*d.ratio,_={x:e.x+p,y:e.y+g};if(V(t,e,_)<=It.HIT_THRESHOLD)return!0}return!1}clone(t){return new It(t,[...this._anchors],{...this._style},{...this._gannOptions})}static create(t,i,e,n,o){return new It(t,[i,e],n,o)}};u(It,"REQUIRED_ANCHORS",2),u(It,"HIT_THRESHOLD",5);let an=It;class Ii{constructor(s){u(this,"_renderer");this._renderer=new lr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class lr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n);if(!r)return;const a=this._drawing.gannOptions,c=this._drawing.getSquarePixelSize(n)/2,l=a.levels??cn,h=r.x-c,d=r.x+c,p=r.y-c,g=r.y+c,_=c*2;A(t,this._drawing.style,e),a.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.fillRect(h*e,p*e,_*e,_*e)),ie(t,{x:h,y:p},_,_,!1,e),t.globalAlpha=.5;for(const x of l){if(x===0||x===1)continue;const P=p+_*x;x===.5?(t.globalAlpha=.8,R(t,{x:h,y:P},{x:d,y:P},e),t.globalAlpha=.5):F(t,{x:h,y:P},{x:d,y:P},[3,3],e),a.showLabels&&z(t,`${(x*100).toFixed(0)}%`,{x:d+5,y:P},{font:"10px sans-serif",textColor:this._drawing.style.lineColor,backgroundColor:"transparent",padding:2},e)}for(const x of l){if(x===0||x===1)continue;const P=h+_*x;x===.5?(t.globalAlpha=.8,R(t,{x:P,y:p},{x:P,y:g},e),t.globalAlpha=.5):F(t,{x:P,y:p},{x:P,y:g},[3,3],e)}if(t.globalAlpha=1,a.showDiagonals&&(t.globalAlpha=.7,R(t,{x:h,y:p},{x:d,y:g},e),R(t,{x:h,y:g},{x:d,y:p},e),t.globalAlpha=1),a.showArcs){t.globalAlpha=.4;const x=_/4;t.beginPath(),t.arc(h*e,p*e,x*e,0,Math.PI/2),t.stroke(),t.beginPath(),t.arc(d*e,p*e,x*e,Math.PI/2,Math.PI),t.stroke(),t.beginPath(),t.arc(d*e,g*e,x*e,Math.PI,Math.PI*1.5),t.stroke(),t.beginPath(),t.arc(h*e,g*e,x*e,Math.PI*1.5,Math.PI*2),t.stroke(),t.globalAlpha=1}t.beginPath(),t.arc(r.x*e,r.y*e,3*e,0,Math.PI*2),t.fill();const w=this._drawing.state;if(w==="selected"||w==="editing"){const x=this._drawing.getControlPoints(n);L(t,x,null,e)}}}const cn=[0,.125,.25,.375,.5,.625,.75,.875,1],Ft=class Ft extends I{constructor(t,i=[],e={},n={}){const{squareSize:o,levels:r,showDiagonals:a,showArcs:c,showLabels:l,filled:h,...d}=n;super(t,i,e,d);u(this,"type","gann-square-fixed");u(this,"_gannOptions");this._gannOptions={...this._options,squareSize:o??50,levels:r??cn,showDiagonals:a??!0,showArcs:c??!1,showLabels:l??!0,filled:h??!1}}get gannOptions(){return this._gannOptions}setGannOptions(t){this._gannOptions={...this._gannOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Ft.REQUIRED_ANCHORS}paneViews(){return[new Ii(this)]}getSquarePixelSize(t){if(!this.isValid())return 0;const i=this._anchors[0],e=(this._gannOptions.squareSize??50)/2,n=t.priceScale.priceToCoordinate(i.price+e),o=t.priceScale.priceToCoordinate(i.price-e);return n===null||o===null?0:Math.abs(o-n)}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);if(!i)return[];const e=[],n=this.getSquarePixelSize(t)/2,o=this._gannOptions.levels??cn,r=i.x-n,a=i.x+n,c=i.y-n,l=i.y+n,h=n*2;e.push({type:"rectangle",topLeft:{x:r,y:c},width:h,height:h});for(const d of o){if(d===0||d===1)continue;const p=c+h*d;e.push({type:"line",start:{x:r,y:p},end:{x:a,y:p}})}for(const d of o){if(d===0||d===1)continue;const p=r+h*d;e.push({type:"line",start:{x:p,y:c},end:{x:p,y:l}})}return this._gannOptions.showDiagonals&&(e.push({type:"line",start:{x:r,y:c},end:{x:a,y:l}}),e.push({type:"line",start:{x:r,y:l},end:{x:a,y:c}})),e}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=this.getSquarePixelSize(i)/2;return t.x>=e.x-n&&t.x<=e.x+n&&t.y>=e.y-n&&t.y<=e.y+n}clone(t){return new Ft(t,[...this._anchors],{...this._style},{...this._gannOptions})}static create(t,i,e,n){return new Ft(t,[i],e,n)}};u(Ft,"REQUIRED_ANCHORS",1),u(Ft,"HIT_THRESHOLD",5);let ln=Ft;class Vi{constructor(s){u(this,"_renderer");this._renderer=new hr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class hr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n);if(!r)return;const a=this._drawing.gannOptions,c=this._drawing.getSquareRadius(n),l=a.divisions??hn;A(t,this._drawing.style,e),a.filled&&this._drawing.style.fillColor&&(t.fillStyle=this._drawing.style.fillColor,t.fillRect((r.x-c)*e,(r.y-c)*e,c*2*e,c*2*e)),ie(t,{x:r.x-c,y:r.y-c},c*2,c*2,!1,e),t.globalAlpha=.4;for(let d=1;d<l;d++){const p=c*d/l;ie(t,{x:r.x-p,y:r.y-p},p*2,p*2,!1,e)}t.globalAlpha=1,a.showCardinalCross&&(t.globalAlpha=.8,R(t,{x:r.x-c,y:r.y},{x:r.x+c,y:r.y},e),R(t,{x:r.x,y:r.y-c},{x:r.x,y:r.y+c},e),t.globalAlpha=1),a.showDiagonals&&(t.globalAlpha=.6,R(t,{x:r.x-c,y:r.y-c},{x:r.x+c,y:r.y+c},e),R(t,{x:r.x-c,y:r.y+c},{x:r.x+c,y:r.y-c},e),t.globalAlpha=1),a.showSpiral&&this.drawSpiral(t,r,c,l,e),a.showLabels&&this.drawNumberLabels(t,r,c,l,e),t.beginPath(),t.arc(r.x*e,r.y*e,3*e,0,Math.PI*2),t.fill();const h=this._drawing.state;if(h==="selected"||h==="editing"){const d=this._drawing.getControlPoints(n);L(t,d,null,e)}}drawSpiral(s,t,i,e,n){s.globalAlpha=.5,s.beginPath();const o=3,r=100;for(let a=0;a<=r;a++){const c=a/r*o*Math.PI*2,l=c/(o*Math.PI*2)*i,h=t.x+l*Math.cos(c-Math.PI/2),d=t.y+l*Math.sin(c-Math.PI/2);a===0?s.moveTo(h*n,d*n):s.lineTo(h*n,d*n)}s.stroke(),s.globalAlpha=1}drawNumberLabels(s,t,i,e,n){const o=i/e,r=Math.max(8,Math.min(12,o*.4));s.font=`${r*n}px sans-serif`,s.fillStyle=this._drawing.style.lineColor||"#fff",s.textAlign="center",s.textBaseline="middle",s.fillText("1",t.x*n,t.y*n);let a=2,c=1;const l=Math.min(e,4);for(;c<=l&&a<=81;){const h=o*c;for(let d=-c+1;d<=c&&a<=81;d++){const p=t.x+h,g=t.y-o*d;Math.abs(p-t.x)<=i&&Math.abs(g-t.y)<=i&&s.fillText(String(a),p*n,g*n),a++}for(let d=c-1;d>=-c&&a<=81;d--){const p=t.x+o*d,g=t.y-h;Math.abs(p-t.x)<=i&&Math.abs(g-t.y)<=i&&s.fillText(String(a),p*n,g*n),a++}for(let d=-c+1;d<=c&&a<=81;d++){const p=t.x-h,g=t.y+o*d;Math.abs(p-t.x)<=i&&Math.abs(g-t.y)<=i&&s.fillText(String(a),p*n,g*n),a++}for(let d=-c+1;d<=c&&a<=81;d++){const p=t.x+o*d,g=t.y+h;Math.abs(p-t.x)<=i&&Math.abs(g-t.y)<=i&&s.fillText(String(a),p*n,g*n),a++}c++}}}const hn=8,zt=class zt extends I{constructor(t,i=[],e={},n={}){const{divisions:o,showDiagonals:r,showCardinalCross:a,showSpiral:c,showLabels:l,filled:h,...d}=n;super(t,i,e,d);u(this,"type","gann-square");u(this,"_gannOptions");this._gannOptions={...this._options,divisions:o??hn,showDiagonals:r??!0,showCardinalCross:a??!0,showSpiral:c??!1,showLabels:l??!0,filled:h??!1}}get gannOptions(){return this._gannOptions}setGannOptions(t){this._gannOptions={...this._gannOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=zt.REQUIRED_ANCHORS}paneViews(){return[new Vi(this)]}getSquareRadius(t){if(!this.isValid())return 0;const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return 0;const n=Math.abs(e.x-i.x),o=Math.abs(e.y-i.y);return Math.max(n,o)}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);if(!i)return[];const e=[],n=this.getSquareRadius(t),o=this._gannOptions.divisions??hn;e.push({type:"rectangle",topLeft:{x:i.x-n,y:i.y-n},width:n*2,height:n*2});for(let r=1;r<o;r++){const a=n*r/o;e.push({type:"rectangle",topLeft:{x:i.x-a,y:i.y-a},width:a*2,height:a*2})}return this._gannOptions.showCardinalCross&&(e.push({type:"line",start:{x:i.x-n,y:i.y},end:{x:i.x+n,y:i.y}}),e.push({type:"line",start:{x:i.x,y:i.y-n},end:{x:i.x,y:i.y+n}})),this._gannOptions.showDiagonals&&(e.push({type:"line",start:{x:i.x-n,y:i.y-n},end:{x:i.x+n,y:i.y+n}}),e.push({type:"line",start:{x:i.x-n,y:i.y+n},end:{x:i.x+n,y:i.y-n}})),e}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=this.getSquareRadius(i);return t.x>=e.x-n&&t.x<=e.x+n&&t.y>=e.y-n&&t.y<=e.y+n}clone(t){return new zt(t,[...this._anchors],{...this._style},{...this._gannOptions})}static create(t,i,e,n,o){return new zt(t,[i,e],n,o)}};u(zt,"REQUIRED_ANCHORS",2),u(zt,"HIT_THRESHOLD",5);let dn=zt;class Ai{constructor(s){u(this,"_renderer");this._renderer=new dr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class dr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.positionOptions,h=this._drawing.getPositionInfo(),d=200;t.fillStyle="rgba(239, 83, 80, 0.3)";const p=Math.min(r.y,a.y),g=Math.abs(a.y-r.y);t.fillRect(r.x*e,p*e,d*e,g*e),t.strokeStyle="#ef5350",t.lineWidth=1*e,t.strokeRect(r.x*e,p*e,d*e,g*e),t.fillStyle="rgba(38, 166, 154, 0.3)";const _=Math.min(r.y,c.y),w=Math.abs(c.y-r.y);t.fillRect(r.x*e,_*e,d*e,w*e),t.strokeStyle="#26a69a",t.lineWidth=1*e,t.strokeRect(r.x*e,_*e,d*e,w*e),t.strokeStyle="#2196F3",t.lineWidth=2*e,R(t,{x:r.x,y:r.y},{x:r.x+d,y:r.y},e),t.strokeStyle="#ef5350",t.lineWidth=2*e,t.setLineDash([5*e,3*e]),R(t,{x:r.x,y:a.y},{x:r.x+d,y:a.y},e),t.strokeStyle="#26a69a",R(t,{x:r.x,y:c.y},{x:r.x+d,y:c.y},e),t.setLineDash([]);const x=11;t.font=`${x*e}px sans-serif`,t.textAlign="left",t.textBaseline="middle";const P=r.x+d+5;t.fillStyle="#2196F3";let O="Entry";l.showPrices&&(O+=`: $${h.entry.toFixed(2)}`),t.fillText(O,P*e,r.y*e),t.fillStyle="#ef5350";let m="Stop";l.showPrices&&(m+=`: $${h.stopLoss.toFixed(2)}`),l.showPercentage&&(m+=` (-${h.riskPercent.toFixed(2)}%)`),t.fillText(m,P*e,a.y*e),t.fillStyle="#26a69a";let T="Target";if(l.showPrices&&(T+=`: $${h.takeProfit.toFixed(2)}`),l.showPercentage&&(T+=` (+${h.rewardPercent.toFixed(2)}%)`),t.fillText(T,P*e,c.y*e),l.showRiskReward){t.fillStyle="#ffffff";const C=`R:R = 1:${h.riskRewardRatio.toFixed(2)}`,H=(r.y+c.y)/2;t.fillText(C,(r.x+10)*e,H*e)}t.fillStyle="#26a69a",t.font=`bold ${14*e}px sans-serif`,t.fillText("LONG",(r.x+10)*e,(r.y-15)*e);const b=this._drawing.state;if(b==="selected"||b==="editing"){const C=this._drawing.getControlPoints(n);L(t,C,null,e)}}}const Ut=class Ut extends I{constructor(t,i=[],e={},n={}){const{showPrices:o,showPercentage:r,showRiskReward:a,showPnL:c,quantity:l,accountSize:h,...d}=n;super(t,i,e,d);u(this,"type","long-position");u(this,"_positionOptions");this._positionOptions={...this._options,showPrices:o??!0,showPercentage:r??!0,showRiskReward:a??!0,showPnL:c??!0,quantity:l??1,accountSize:h??1e4}}get positionOptions(){return this._positionOptions}setPositionOptions(t){this._positionOptions={...this._positionOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Ut.REQUIRED_ANCHORS}paneViews(){return[new Ai(this)]}getPositionInfo(){if(!this.isValid())return{entry:0,stopLoss:0,takeProfit:0,risk:0,reward:0,riskRewardRatio:0,riskPercent:0,rewardPercent:0};const t=this._anchors[0].price,i=this._anchors[1].price,e=this._anchors[2].price,n=Math.abs(t-i),o=Math.abs(e-t),r=n!==0?o/n:0,a=t!==0?n/t*100:0,c=t!==0?o/t*100:0;return{entry:t,stopLoss:i,takeProfit:e,risk:n,reward:o,riskRewardRatio:r,riskPercent:a,rewardPercent:c}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=200,a=Math.min(i.y,e.y),c=Math.abs(e.y-i.y);o.push({type:"rectangle",topLeft:{x:i.x,y:a},width:r,height:c});const l=Math.min(i.y,n.y),h=Math.abs(n.y-i.y);return o.push({type:"rectangle",topLeft:{x:i.x,y:l},width:r,height:h}),o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=200,a=e.x,c=e.x+r,l=Math.min(n.y,o.y),h=Math.max(n.y,o.y);return t.x>=a&&t.x<=c&&t.y>=l&&t.y<=h}clone(t){return new Ut(t,[...this._anchors],{...this._style},{...this._positionOptions})}static create(t,i,e,n,o,r){return new Ut(t,[i,e,n],o,r)}};u(Ut,"REQUIRED_ANCHORS",3),u(Ut,"HIT_THRESHOLD",5);let un=Ut;class Ei{constructor(s){u(this,"_renderer");this._renderer=new ur(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class ur{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.positionOptions,h=this._drawing.getPositionInfo(),d=200;t.fillStyle="rgba(239, 83, 80, 0.3)";const p=Math.min(r.y,a.y),g=Math.abs(a.y-r.y);t.fillRect(r.x*e,p*e,d*e,g*e),t.strokeStyle="#ef5350",t.lineWidth=1*e,t.strokeRect(r.x*e,p*e,d*e,g*e),t.fillStyle="rgba(38, 166, 154, 0.3)";const _=Math.min(r.y,c.y),w=Math.abs(c.y-r.y);t.fillRect(r.x*e,_*e,d*e,w*e),t.strokeStyle="#26a69a",t.lineWidth=1*e,t.strokeRect(r.x*e,_*e,d*e,w*e),t.strokeStyle="#2196F3",t.lineWidth=2*e,R(t,{x:r.x,y:r.y},{x:r.x+d,y:r.y},e),t.strokeStyle="#ef5350",t.lineWidth=2*e,t.setLineDash([5*e,3*e]),R(t,{x:r.x,y:a.y},{x:r.x+d,y:a.y},e),t.strokeStyle="#26a69a",R(t,{x:r.x,y:c.y},{x:r.x+d,y:c.y},e),t.setLineDash([]);const x=11;t.font=`${x*e}px sans-serif`,t.textAlign="left",t.textBaseline="middle";const P=r.x+d+5;t.fillStyle="#2196F3";let O="Entry";l.showPrices&&(O+=`: $${h.entry.toFixed(2)}`),t.fillText(O,P*e,r.y*e),t.fillStyle="#ef5350";let m="Stop";l.showPrices&&(m+=`: $${h.stopLoss.toFixed(2)}`),l.showPercentage&&(m+=` (-${h.riskPercent.toFixed(2)}%)`),t.fillText(m,P*e,a.y*e),t.fillStyle="#26a69a";let T="Target";if(l.showPrices&&(T+=`: $${h.takeProfit.toFixed(2)}`),l.showPercentage&&(T+=` (+${h.rewardPercent.toFixed(2)}%)`),t.fillText(T,P*e,c.y*e),l.showRiskReward){t.fillStyle="#ffffff";const C=`R:R = 1:${h.riskRewardRatio.toFixed(2)}`,H=(r.y+c.y)/2;t.fillText(C,(r.x+10)*e,H*e)}t.fillStyle="#ef5350",t.font=`bold ${14*e}px sans-serif`,t.fillText("SHORT",(r.x+10)*e,(r.y+15)*e);const b=this._drawing.state;if(b==="selected"||b==="editing"){const C=this._drawing.getControlPoints(n);L(t,C,null,e)}}}const qt=class qt extends I{constructor(t,i=[],e={},n={}){const{showPrices:o,showPercentage:r,showRiskReward:a,showPnL:c,quantity:l,accountSize:h,...d}=n;super(t,i,e,d);u(this,"type","short-position");u(this,"_positionOptions");this._positionOptions={...this._options,showPrices:o??!0,showPercentage:r??!0,showRiskReward:a??!0,showPnL:c??!0,quantity:l??1,accountSize:h??1e4}}get positionOptions(){return this._positionOptions}setPositionOptions(t){this._positionOptions={...this._positionOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=qt.REQUIRED_ANCHORS}paneViews(){return[new Ei(this)]}getPositionInfo(){if(!this.isValid())return{entry:0,stopLoss:0,takeProfit:0,risk:0,reward:0,riskRewardRatio:0,riskPercent:0,rewardPercent:0};const t=this._anchors[0].price,i=this._anchors[1].price,e=this._anchors[2].price,n=Math.abs(i-t),o=Math.abs(t-e),r=n!==0?o/n:0,a=t!==0?n/t*100:0,c=t!==0?o/t*100:0;return{entry:t,stopLoss:i,takeProfit:e,risk:n,reward:o,riskRewardRatio:r,riskPercent:a,rewardPercent:c}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=200,a=Math.min(i.y,e.y),c=Math.abs(e.y-i.y);o.push({type:"rectangle",topLeft:{x:i.x,y:a},width:r,height:c});const l=Math.min(i.y,n.y),h=Math.abs(n.y-i.y);return o.push({type:"rectangle",topLeft:{x:i.x,y:l},width:r,height:h}),o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=200,a=e.x,c=e.x+r,l=Math.min(n.y,o.y),h=Math.max(n.y,o.y);return t.x>=a&&t.x<=c&&t.y>=l&&t.y<=h}clone(t){return new qt(t,[...this._anchors],{...this._style},{...this._positionOptions})}static create(t,i,e,n,o,r){return new qt(t,[i,e,n],o,r)}};u(qt,"REQUIRED_ANCHORS",3),u(qt,"HIT_THRESHOLD",5);let fn=qt;class Mi{constructor(s){u(this,"_renderer");this._renderer=new fr(s)}zOrder(){return"bottom"}renderer(){return this._renderer}}class fr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i,bitmapSize:e}=s,n=i,o=this._drawing.getViewport();if(!o||!this._drawing.options.visible||!this._drawing.isValid())return;const r=this._drawing.anchors,a=this._drawing.anchorToPixel(r[0],o),c=this._drawing.anchorToPixel(r[1],o);if(!a||!c)return;const l=this._drawing.dateRangeOptions,h=this._drawing.getDateRangeInfo(),d=this._drawing.style.lineColor||"#2196F3",p=Math.min(a.x,c.x),g=Math.max(a.x,c.x),_=g-p,w=e.height/n;l.filled&&(t.fillStyle=d+"20",t.fillRect(p*n,0,_*n,w*n)),t.strokeStyle=d,t.lineWidth=1*n,t.setLineDash([5*n,3*n]),R(t,{x:a.x,y:0},{x:a.x,y:w},n),R(t,{x:c.x,y:0},{x:c.x,y:w},n),t.setLineDash([]);const x=w/2;t.strokeStyle=d,t.lineWidth=2*n,R(t,{x:p,y:x},{x:g,y:x},n);const P=8;t.fillStyle=d,t.beginPath(),t.moveTo(p*n,x*n),t.lineTo((p+P)*n,(x-P/2)*n),t.lineTo((p+P)*n,(x+P/2)*n),t.closePath(),t.fill(),t.beginPath(),t.moveTo(g*n,x*n),t.lineTo((g-P)*n,(x-P/2)*n),t.lineTo((g-P)*n,(x+P/2)*n),t.closePath(),t.fill();const O=(p+g)/2,m=12;t.font=`${m*n}px sans-serif`,t.textAlign="center",t.textBaseline="bottom";let T="";if(l.showBars&&(T+=`${h.bars} bars`),l.showDays&&(T&&(T+=" | "),T+=`${h.days} days`),T){const H=t.measureText(T).width/n,S=6,E=x-10;t.fillStyle="#1e222d",t.fillRect((O-H/2-S)*n,(E-m-S)*n,(H+S*2)*n,(m+S*2)*n),t.strokeStyle=d,t.lineWidth=1*n,t.strokeRect((O-H/2-S)*n,(E-m-S)*n,(H+S*2)*n,(m+S*2)*n),t.fillStyle="#ffffff",t.fillText(T,O*n,E*n)}if(l.showDates){t.font=`${10*n}px sans-serif`,t.fillStyle=d;const C=this.formatTime(h.startTime);t.textAlign="center",t.textBaseline="top",t.fillText(C,a.x*n,(w-25)*n);const H=this.formatTime(h.endTime);t.fillText(H,c.x*n,(w-25)*n)}const b=this._drawing.state;if(b==="selected"||b==="editing"){const C=this._drawing.getControlPoints(o);L(t,C,null,n)}}formatTime(s){return typeof s=="string"?s:typeof s=="number"?new Date(s*1e3).toISOString().split("T")[0]:String(s)}}const Nt=class Nt extends I{constructor(t,i=[],e={},n={}){const{showBars:o,showDays:r,showDates:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","date-range");u(this,"_dateRangeOptions");this._dateRangeOptions={...this._options,showBars:o??!0,showDays:r??!0,showDates:a??!0,filled:c??!0}}get dateRangeOptions(){return this._dateRangeOptions}setDateRangeOptions(t){this._dateRangeOptions={...this._dateRangeOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Nt.REQUIRED_ANCHORS}paneViews(){return[new Mi(this)]}getDateRangeInfo(){if(!this.isValid())return{startTime:null,endTime:null,days:0,bars:0};const t=this._anchors[0].time,i=this._anchors[1].time;let e=0;if(typeof t=="string"&&typeof i=="string"){const o=new Date(t),r=new Date(i);e=Math.abs(Math.floor((r.getTime()-o.getTime())/(1e3*60*60*24)))}else typeof t=="number"&&typeof i=="number"&&(e=Math.abs(Math.floor((i-t)/(3600*24))));return{startTime:t,endTime:i,days:e,bars:e}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=Math.min(i.x,e.x),r=Math.abs(e.x-i.x);return n.push({type:"rectangle",topLeft:{x:o,y:0},width:r,height:t.height}),n.push({type:"line",start:{x:i.x,y:0},end:{x:i.x,y:t.height}}),n.push({type:"line",start:{x:e.x,y:0},end:{x:e.x,y:t.height}}),n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=Math.min(e.x,n.x),r=Math.max(e.x,n.x);return t.x>=o&&t.x<=r}clone(t){return new Nt(t,[...this._anchors],{...this._style},{...this._dateRangeOptions})}static create(t,i,e,n,o){return new Nt(t,[i,e],n,o)}};u(Nt,"REQUIRED_ANCHORS",2),u(Nt,"HIT_THRESHOLD",5);let pn=Nt;class Di{constructor(s){u(this,"_renderer");this._renderer=new pr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class pr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.measureOptions,l=this._drawing.getMeasureInfo(),h=Math.min(r.x,a.x),d=Math.max(r.x,a.x),p=Math.min(r.y,a.y),g=Math.max(r.y,a.y),_=d-h,w=g-p,x=l.isUp?"#26a69a":"#ef5350";c.filled&&(t.fillStyle=x+"20",t.fillRect(h*e,p*e,_*e,w*e)),t.strokeStyle=x,t.lineWidth=1*e,t.strokeRect(h*e,p*e,_*e,w*e),t.lineWidth=2*e,R(t,r,a,e),t.setLineDash([3*e,3*e]),t.lineWidth=1*e,t.globalAlpha=.5,R(t,r,{x:a.x,y:r.y},e),R(t,{x:a.x,y:r.y},a,e),t.setLineDash([]),t.globalAlpha=1;const P=(h+d)/2,O=(p+g)/2,m=11,T=m+4,b=8,C=[];if(c.showPrices){const S=l.priceChange>=0?"+":"";C.push(`${S}$${l.priceChange.toFixed(2)}`)}if(c.showPercentage){const S=l.priceChangePercent>=0?"+":"";C.push(`${S}${l.priceChangePercent.toFixed(2)}%`)}if(c.showBars&&C.push(`${l.bars} bars`),c.showDays&&C.push(`${l.days} days`),C.length>0){t.font=`${m*e}px sans-serif`;let S=0;for(const ft of C){const se=t.measureText(ft).width/e;S=Math.max(S,se)}const E=S+b*2,v=C.length*T+b*2,U=P-E/2,N=O-v/2;t.fillStyle="#1e222d",t.fillRect(U*e,N*e,E*e,v*e),t.strokeStyle=x,t.lineWidth=1*e,t.strokeRect(U*e,N*e,E*e,v*e),t.fillStyle=x,t.textAlign="center",t.textBaseline="middle";for(let ft=0;ft<C.length;ft++){const se=N+b+(ft+.5)*T;t.fillText(C[ft],P*e,se*e)}}t.fillStyle=x,t.beginPath(),t.arc(r.x*e,r.y*e,4*e,0,Math.PI*2),t.fill(),t.beginPath(),t.arc(a.x*e,a.y*e,4*e,0,Math.PI*2),t.fill();const H=this._drawing.state;if(H==="selected"||H==="editing"){const S=this._drawing.getControlPoints(n);L(t,S,null,e)}}}const Bt=class Bt extends I{constructor(t,i=[],e={},n={}){const{showPrices:o,showPercentage:r,showBars:a,showDays:c,filled:l,...h}=n;super(t,i,e,h);u(this,"type","date-price-range");u(this,"_measureOptions");this._measureOptions={...this._options,showPrices:o??!0,showPercentage:r??!0,showBars:a??!0,showDays:c??!0,filled:l??!0}}get measureOptions(){return this._measureOptions}setMeasureOptions(t){this._measureOptions={...this._measureOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Bt.REQUIRED_ANCHORS}paneViews(){return[new Di(this)]}getMeasureInfo(){if(!this.isValid())return{startPrice:0,endPrice:0,priceChange:0,priceChangePercent:0,startTime:null,endTime:null,days:0,bars:0,isUp:!0};const t=this._anchors[0].price,i=this._anchors[1].price,e=i-t,n=t!==0?e/t*100:0,o=e>=0,r=this._anchors[0].time,a=this._anchors[1].time;let c=0;if(typeof r=="string"&&typeof a=="string"){const h=new Date(r),d=new Date(a);c=Math.abs(Math.floor((d.getTime()-h.getTime())/(1e3*60*60*24)))}else typeof r=="number"&&typeof a=="number"&&(c=Math.abs(Math.floor((a-r)/(3600*24))));return{startPrice:t,endPrice:i,priceChange:e,priceChangePercent:n,startTime:r,endTime:a,days:c,bars:c,isUp:o}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[],o=Math.min(i.x,e.x),r=Math.max(i.x,e.x),a=Math.min(i.y,e.y),c=Math.max(i.y,e.y),l=r-o,h=c-a;return n.push({type:"rectangle",topLeft:{x:o,y:a},width:l,height:h}),n.push({type:"line",start:i,end:e}),n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;const o=Math.min(e.x,n.x),r=Math.max(e.x,n.x),a=Math.min(e.y,n.y),c=Math.max(e.y,n.y);return t.x>=o&&t.x<=r&&t.y>=a&&t.y<=c}clone(t){return new Bt(t,[...this._anchors],{...this._style},{...this._measureOptions})}static create(t,i,e,n,o){return new Bt(t,[i,e],n,o)}};u(Bt,"REQUIRED_ANCHORS",2),u(Bt,"HIT_THRESHOLD",5);let gn=Bt;class vi{constructor(s){u(this,"_renderer");this._renderer=new gr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class gr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.projectionOptions,h=this._drawing.getProjectionInfo(),d=this._drawing.style.lineColor||"#9C27B0",p=a.y-r.y,g=a.x-r.x,_={x:c.x+g,y:c.y+p},w=h.isUp?"#26a69a":"#ef5350";if(l.filled){const m=Math.min(c.x,_.x),T=Math.min(c.y,_.y),b=Math.abs(_.x-c.x),C=Math.abs(_.y-c.y);t.fillStyle=w+"20",t.fillRect(m*e,T*e,b*e,C*e)}t.strokeStyle=d,t.lineWidth=2*e,R(t,r,a,e),t.strokeStyle=w,t.lineWidth=2*e,R(t,c,_,e),t.strokeStyle=d,t.lineWidth=1*e,t.globalAlpha=.5,F(t,r,c,[5,3],e),F(t,a,_,[5,3],e),t.globalAlpha=1;const x=[{point:r,label:"A"},{point:a,label:"B"},{point:c,label:"C"},{point:_,label:"D"}],P=11;t.font=`bold ${P*e}px sans-serif`,t.textAlign="center",t.textBaseline="middle";for(const{point:m,label:T}of x)t.fillStyle=T==="D"?w:d,t.beginPath(),t.arc(m.x*e,m.y*e,6*e,0,Math.PI*2),t.fill(),t.fillStyle="#ffffff",t.fillText(T,m.x*e,m.y*e);if(l.showLabels){const m=_.x+15,T=_.y,b=6,C=P+3,H=[];if(l.showPrices&&H.push(`Target: $${h.targetPrice.toFixed(2)}`),l.showPercentage){const S=h.movePercent>=0?"+":"";H.push(`Move: ${S}${h.movePercent.toFixed(2)}%`)}if(H.length>0){t.font=`${P*e}px sans-serif`;let S=0;for(const U of H){const N=t.measureText(U).width/e;S=Math.max(S,N)}const E=S+b*2,v=H.length*C+b*2;t.fillStyle="#1e222d",t.fillRect(m*e,(T-v/2)*e,E*e,v*e),t.strokeStyle=w,t.lineWidth=1*e,t.strokeRect(m*e,(T-v/2)*e,E*e,v*e),t.fillStyle=w,t.textAlign="left",t.textBaseline="top";for(let U=0;U<H.length;U++){const N=T-v/2+b+U*C;t.fillText(H[U],(m+b)*e,N*e)}}}const O=this._drawing.state;if(O==="selected"||O==="editing"){const m=this._drawing.getControlPoints(n);L(t,m,null,e)}}}const $=class $ extends I{constructor(t,i=[],e={},n={}){const{showPrices:o,showPercentage:r,showLabels:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","projection");u(this,"_projectionOptions");this._projectionOptions={...this._options,showPrices:o??!0,showPercentage:r??!0,showLabels:a??!0,filled:c??!0}}get projectionOptions(){return this._projectionOptions}setProjectionOptions(t){this._projectionOptions={...this._projectionOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=$.REQUIRED_ANCHORS}paneViews(){return[new vi(this)]}getProjectionInfo(){if(!this.isValid())return{priceA:0,priceB:0,priceC:0,targetPrice:0,moveSize:0,movePercent:0,isUp:!0};const t=this._anchors[0].price,i=this._anchors[1].price,e=this._anchors[2].price,n=i-t,o=t!==0?n/t*100:0,r=e+n,a=n>=0;return{priceA:t,priceB:i,priceC:e,targetPrice:r,moveSize:n,movePercent:o,isUp:a}}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[];o.push({type:"line",start:i,end:e});const r=e.y-i.y,a=e.x-i.x,c={x:n.x+a,y:n.y+r};o.push({type:"line",start:n,end:c}),o.push({type:"line",start:i,end:n}),o.push({type:"line",start:e,end:c});const l=Math.min(n.x,c.x),h=Math.max(n.x,c.x),d=Math.min(n.y,c.y),p=Math.max(n.y,c.y);return o.push({type:"rectangle",topLeft:{x:l,y:d},width:h-l,height:p-d}),o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=n.y-e.y,a=n.x-e.x,c={x:o.x+a,y:o.y+r};return V(t,e,n)<=$.HIT_THRESHOLD||V(t,o,c)<=$.HIT_THRESHOLD||V(t,e,o)<=$.HIT_THRESHOLD||V(t,n,c)<=$.HIT_THRESHOLD}clone(t){return new $(t,[...this._anchors],{...this._style},{...this._projectionOptions})}static create(t,i,e,n,o,r){return new $(t,[i,e,n],o,r)}};u($,"REQUIRED_ANCHORS",3),u($,"HIT_THRESHOLD",5);let xn=$;class ki{constructor(s){u(this,"_renderer");this._renderer=new xr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class xr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.forecastOptions,l=this._drawing.getForecastInfo(),h=l.isUp?"#26a69a":"#ef5350",d=this._drawing.style.lineColor||h,p={x:a.x,y:r.y};if(c.filled){const w=Math.min(r.x,a.x),x=Math.min(r.y,a.y),P=Math.abs(a.x-r.x),O=Math.abs(a.y-r.y);t.fillStyle=h+"15",t.fillRect(w*e,x*e,P*e,O*e)}t.strokeStyle=h,t.lineWidth=2*e,R(t,r,a,e),t.strokeStyle=d,t.lineWidth=1*e,t.globalAlpha=.5,F(t,r,p,[5,3],e),F(t,p,a,[5,3],e),t.globalAlpha=1;const g=11;if(t.font=`bold ${g*e}px sans-serif`,t.textAlign="center",t.textBaseline="middle",t.fillStyle=d,t.beginPath(),t.arc(r.x*e,r.y*e,5*e,0,Math.PI*2),t.fill(),t.fillStyle=h,t.beginPath(),t.arc(a.x*e,a.y*e,5*e,0,Math.PI*2),t.fill(),c.showLabels){const w=[];if(c.showPrices&&w.push(`Target: $${l.targetPrice.toFixed(2)}`),c.showPercentage){const x=l.percentChange>=0?"+":"";w.push(`${x}${l.percentChange.toFixed(2)}%`)}if(w.length>0){const x=a.x+10,P=a.y,O=6,m=g+3;t.font=`${g*e}px sans-serif`;let T=0;for(const H of w){const S=t.measureText(H).width/e;T=Math.max(T,S)}const b=T+O*2,C=w.length*m+O*2;t.fillStyle="#1e222d",t.fillRect(x*e,(P-C/2)*e,b*e,C*e),t.strokeStyle=h,t.lineWidth=1*e,t.strokeRect(x*e,(P-C/2)*e,b*e,C*e),t.fillStyle=h,t.textAlign="left",t.textBaseline="top";for(let H=0;H<w.length;H++){const S=P-C/2+O+H*m;t.fillText(w[H],(x+O)*e,S*e)}}}const _=this._drawing.state;if(_==="selected"||_==="editing"){const w=this._drawing.getControlPoints(n);L(t,w,null,e)}}}const nt=class nt extends I{constructor(t,i=[],e={},n={}){const{showPrices:o,showPercentage:r,showLabels:a,filled:c,...l}=n;super(t,i,e,l);u(this,"type","forecast");u(this,"_forecastOptions");this._forecastOptions={...this._options,showPrices:o??!0,showPercentage:r??!0,showLabels:a??!0,filled:c??!0}}get forecastOptions(){return this._forecastOptions}setForecastOptions(t){this._forecastOptions={...this._forecastOptions,...t},this.requestUpdate()}getForecastInfo(){if(!this.isValid())return{startPrice:0,targetPrice:0,priceChange:0,percentChange:0,isUp:!0};const t=this._anchors[0].price,i=this._anchors[1].price,e=i-t,n=t!==0?e/t*100:0,o=e>=0;return{startPrice:t,targetPrice:i,priceChange:e,percentChange:n,isUp:o}}isValid(){return this._anchors.length>=nt.REQUIRED_ANCHORS}paneViews(){return[new ki(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t);if(!i||!e)return[];const n=[];return n.push({type:"line",start:i,end:e}),n.push({type:"line",start:i,end:{x:e.x,y:i.y}}),n.push({type:"line",start:{x:e.x,y:i.y},end:e}),n}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;if(V(t,e,n)<=nt.HIT_THRESHOLD)return!0;const o={x:n.x,y:e.y};if(V(t,e,o)<=nt.HIT_THRESHOLD||V(t,o,n)<=nt.HIT_THRESHOLD)return!0;if(this._forecastOptions.filled){const r=Math.min(e.x,n.x),a=Math.max(e.x,n.x),c=Math.min(e.y,n.y),l=Math.max(e.y,n.y);if(t.x>=r&&t.x<=a&&t.y>=c&&t.y<=l)return!0}return!1}clone(t){return new nt(t,[...this._anchors],{...this._style},{...this._forecastOptions})}static create(t,i,e,n,o){return new nt(t,[i,e],n,o)}};u(nt,"REQUIRED_ANCHORS",2),u(nt,"HIT_THRESHOLD",5);let _n=nt;class Fi{constructor(s){u(this,"_renderer");this._renderer=new _r(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class _r{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n),c=this._drawing.anchorToPixel(o[2],n);if(!r||!a||!c)return;const l=this._drawing.barsPatternOptions,h=this._drawing.style.lineColor||"#FF9800",d=l.patternColor??"#FF9800",p=a.x-r.x,g=a.y-r.y,_={x:c.x+p,y:c.y+g};if(l.filled){const O=Math.min(r.x,a.x),m=Math.min(r.y,a.y),T=Math.abs(a.x-r.x),b=Math.abs(a.y-r.y);t.fillStyle=h+"15",t.fillRect(O*e,m*e,T*e,b*e),t.strokeStyle=h,t.lineWidth=1*e,t.strokeRect(O*e,m*e,T*e,b*e)}if(t.strokeStyle=h,t.lineWidth=2*e,R(t,r,a,e),l.filled){const O=Math.min(c.x,_.x),m=Math.min(c.y,_.y),T=Math.abs(_.x-c.x),b=Math.abs(_.y-c.y);t.fillStyle=d+"20",t.fillRect(O*e,m*e,T*e,b*e),t.strokeStyle=d,t.lineWidth=1*e,t.setLineDash([4*e,3*e]),t.strokeRect(O*e,m*e,T*e,b*e),t.setLineDash([])}t.strokeStyle=d,t.lineWidth=2*e,R(t,c,_,e),t.strokeStyle=h,t.lineWidth=1*e,t.globalAlpha=.5,F(t,a,c,[5,3],e),t.globalAlpha=1;const w=11;t.font=`bold ${w*e}px sans-serif`,t.textAlign="center",t.textBaseline="middle";const x=[{point:r,label:"A",color:h},{point:a,label:"B",color:h},{point:c,label:"C",color:d},{point:_,label:"D",color:d}];for(const{point:O,label:m,color:T}of x)t.fillStyle=T,t.beginPath(),t.arc(O.x*e,O.y*e,6*e,0,Math.PI*2),t.fill(),t.fillStyle="#ffffff",t.fillText(m,O.x*e,O.y*e);l.showLabels&&(t.font=`${w*e}px sans-serif`,t.fillStyle=h,t.textAlign="center",t.textBaseline="bottom",t.fillText("Source",(r.x+a.x)/2*e,(Math.min(r.y,a.y)-8)*e),t.fillStyle=d,t.fillText("Pattern",(c.x+_.x)/2*e,(Math.min(c.y,_.y)-8)*e));const P=this._drawing.state;if(P==="selected"||P==="editing"){const O=this._drawing.getControlPoints(n);L(t,O,null,e)}}}const it=class it extends I{constructor(t,i=[],e={},n={}){const{showLabels:o,filled:r,patternColor:a,...c}=n;super(t,i,e,c);u(this,"type","bars-pattern");u(this,"_barsPatternOptions");this._barsPatternOptions={...this._options,showLabels:o??!0,filled:r??!0,patternColor:a??"#FF9800"}}get barsPatternOptions(){return this._barsPatternOptions}setBarsPatternOptions(t){this._barsPatternOptions={...this._barsPatternOptions,...t},this.requestUpdate()}getPatternInfo(){if(!this.isValid())return{priceRange:0,timeSpan:0,projectedEndPrice:0};const t=this._anchors[0].price,i=this._anchors[1].price,e=this._anchors[2].price,n=Math.abs(i-t),o=e+(i-t);return{priceRange:n,timeSpan:0,projectedEndPrice:o}}isValid(){return this._anchors.length>=it.REQUIRED_ANCHORS}paneViews(){return[new Fi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t),e=this.anchorToPixel(this._anchors[1],t),n=this.anchorToPixel(this._anchors[2],t);if(!i||!e||!n)return[];const o=[],r=Math.min(i.x,e.x),a=Math.min(i.y,e.y);o.push({type:"rectangle",topLeft:{x:r,y:a},width:Math.abs(e.x-i.x),height:Math.abs(e.y-i.y)}),o.push({type:"line",start:i,end:e});const c=e.x-i.x,l=e.y-i.y,h={x:n.x+c,y:n.y+l},d=Math.min(n.x,h.x),p=Math.min(n.y,h.y);return o.push({type:"rectangle",topLeft:{x:d,y:p},width:Math.abs(h.x-n.x),height:Math.abs(h.y-n.y)}),o.push({type:"line",start:n,end:h}),o.push({type:"line",start:e,end:n}),o}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i),o=this.anchorToPixel(this._anchors[2],i);if(!e||!n||!o)return!1;const r=n.x-e.x,a=n.y-e.y,c={x:o.x+r,y:o.y+a};if(V(t,e,n)<=it.HIT_THRESHOLD||V(t,o,c)<=it.HIT_THRESHOLD||V(t,n,o)<=it.HIT_THRESHOLD)return!0;const l=Math.min(e.x,n.x),h=Math.max(e.x,n.x),d=Math.min(e.y,n.y),p=Math.max(e.y,n.y);if(t.x>=l&&t.x<=h&&t.y>=d&&t.y<=p)return!0;const g=Math.min(o.x,c.x),_=Math.max(o.x,c.x),w=Math.min(o.y,c.y),x=Math.max(o.y,c.y);return t.x>=g&&t.x<=_&&t.y>=w&&t.y<=x}clone(t){return new it(t,[...this._anchors],{...this._style},{...this._barsPatternOptions})}static create(t,i,e,n,o,r){return new it(t,[i,e,n],o,r)}};u(it,"REQUIRED_ANCHORS",3),u(it,"HIT_THRESHOLD",5);let wn=it;class zi{constructor(s){u(this,"_renderer");this._renderer=new wr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class wr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=this._drawing.anchorToPixel(o,n);if(!r)return;const a=this._drawing.textOptions,c=a.text??"",l=(a.fontSize??14)*e,h=a.fontFamily??"sans-serif",d=a.fontWeight??"normal",p=(a.padding??8)*e;t.font=`${d} ${l}px ${h}`,t.textAlign=a.textAlign??"left",t.textBaseline="middle";const _=t.measureText(c).width,w=l,x=r.x*e,P=r.y*e;let O=x;a.textAlign==="center"?O=x-_/2:a.textAlign==="right"&&(O=x-_),a.backgroundColor&&(t.fillStyle=a.backgroundColor,t.beginPath(),t.roundRect(O-p,P-w/2-p,_+p*2,w+p*2,4*e),t.fill()),a.borderColor&&(t.strokeStyle=a.borderColor,t.lineWidth=1*e,t.beginPath(),t.roundRect(O-p,P-w/2-p,_+p*2,w+p*2,4*e),t.stroke()),t.fillStyle=this._drawing.style.labelColor??"#000000",t.fillText(c,x,P);const m=this._drawing.state;if(m==="selected"||m==="editing"){const T=this._drawing.getControlPoints(n);L(t,T,null,e)}}}const Gt=class Gt extends I{constructor(t,i=[],e={},n={}){const{text:o,fontSize:r,fontFamily:a,fontWeight:c,textAlign:l,backgroundColor:h,borderColor:d,padding:p,...g}=n;super(t,i,e,g);u(this,"type","text-annotation");u(this,"_textOptions");this._textOptions={...this._options,text:o??"Text",fontSize:r??14,fontFamily:a??"sans-serif",fontWeight:c??"normal",textAlign:l??"left",backgroundColor:h??"rgba(255, 255, 255, 0.9)",borderColor:d??this._style.lineColor,padding:p??8}}get textOptions(){return this._textOptions}setTextOptions(t){this._textOptions={...this._textOptions,...t},this.requestUpdate()}setText(t){this._textOptions.text=t,this.requestUpdate()}getText(){return this._textOptions.text??""}isValid(){return this._anchors.length>=Gt.REQUIRED_ANCHORS}paneViews(){return[new zi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"text",position:i,text:this._textOptions.text??"",font:`${this._textOptions.fontWeight} ${this._textOptions.fontSize}px ${this._textOptions.fontFamily}`,color:this._style.labelColor,align:this._textOptions.textAlign,baseline:"middle"}]:[]}testHit(t,i){var a;if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=(((a=this._textOptions.text)==null?void 0:a.length)??0)*(this._textOptions.fontSize??14)*.6,o=(this._textOptions.fontSize??14)*1.5,r=this._textOptions.padding??8;return t.x>=e.x-r&&t.x<=e.x+n+r&&t.y>=e.y-o/2-r&&t.y<=e.y+o/2+r}clone(t){return new Gt(t,[...this._anchors],{...this._style},{...this._textOptions})}static create(t,i,e,n,o){return new Gt(t,[i],n,{...o,text:e})}};u(Gt,"REQUIRED_ANCHORS",1),u(Gt,"HIT_THRESHOLD",10);let yn=Gt;class Ui{constructor(s){u(this,"_renderer");this._renderer=new yr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class yr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.calloutOptions,l=c.text??"",h=(c.fontSize??12)*e,d=c.fontFamily??"sans-serif",p=(c.padding??8)*e;t.font=`${h}px ${d}`,t.textAlign="left",t.textBaseline="middle";const _=t.measureText(l).width,w=h,x=a.x*e,P=a.y*e,O=r.x*e,m=r.y*e,T=_+p*2,b=w+p*2;t.strokeStyle=c.borderColor??"#FFC107",t.lineWidth=2*e,R(t,{x:r.x,y:r.y},{x:a.x,y:a.y},e),t.fillStyle=c.borderColor??"#FFC107",t.beginPath(),t.arc(O,m,4*e,0,Math.PI*2),t.fill(),t.fillStyle=c.backgroundColor??"rgba(255, 255, 200, 0.95)",t.beginPath(),t.roundRect(x-p,P-b/2,T,b,4*e),t.fill(),t.strokeStyle=c.borderColor??"#FFC107",t.lineWidth=1*e,t.stroke(),t.fillStyle=this._drawing.style.labelColor??"#000000",t.fillText(l,x,P);const C=this._drawing.state;if(C==="selected"||C==="editing"){const H=this._drawing.getControlPoints(n);L(t,H,null,e)}}}const Vt=class Vt extends I{constructor(t,i=[],e={},n={}){const{text:o,fontSize:r,fontFamily:a,backgroundColor:c,borderColor:l,padding:h,pointerSize:d,...p}=n;super(t,i,e,p);u(this,"type","callout");u(this,"_calloutOptions");this._calloutOptions={...this._options,text:o??"Callout",fontSize:r??12,fontFamily:a??"sans-serif",backgroundColor:c??"rgba(255, 255, 200, 0.95)",borderColor:l??"#FFC107",padding:h??8,pointerSize:d??10}}get calloutOptions(){return this._calloutOptions}setCalloutOptions(t){this._calloutOptions={...this._calloutOptions,...t},this.requestUpdate()}setText(t){this._calloutOptions.text=t,this.requestUpdate()}getText(){return this._calloutOptions.text??""}isValid(){return this._anchors.length>=Vt.REQUIRED_ANCHORS}paneViews(){return[new Ui(this)]}computeGeometry(t){return[]}testHit(t,i){var l;if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i),n=this.anchorToPixel(this._anchors[1],i);if(!e||!n)return!1;if(Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))<=Vt.HIT_THRESHOLD)return!0;const r=this._calloutOptions,a=(((l=r.text)==null?void 0:l.length)??0)*(r.fontSize??12)*.6+(r.padding??8)*2,c=(r.fontSize??12)*1.5+(r.padding??8)*2;return t.x>=n.x&&t.x<=n.x+a&&t.y>=n.y-c/2&&t.y<=n.y+c/2}clone(t){return new Vt(t,[...this._anchors],{...this._style},{...this._calloutOptions})}static create(t,i,e,n,o,r){return new Vt(t,[i,e],o,{...r,text:n})}};u(Vt,"REQUIRED_ANCHORS",2),u(Vt,"HIT_THRESHOLD",10);let Pn=Vt;class qi{constructor(s){u(this,"_renderer");this._renderer=new Pr(s)}zOrder(){return"normal"}renderer(){return this._renderer}}class Pr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=[];for(const h of o){const d=this._drawing.anchorToPixel(h,n);d&&r.push(d)}if(r.length<2)return;const c=(this._drawing.brushOptions.brushSize??3)*e;A(t,this._drawing.style,e),t.lineWidth=c,t.lineCap="round",t.lineJoin="round",t.beginPath(),t.moveTo(r[0].x*e,r[0].y*e);for(let h=1;h<r.length-1;h++)t.quadraticCurveTo(r[h].x*e,r[h].y*e,(r[h].x+r[h+1].x)/2*e,(r[h].y+r[h+1].y)/2*e);r.length>1&&t.lineTo(r[r.length-1].x*e,r[r.length-1].y*e),t.stroke();const l=this._drawing.state;if(l==="selected"||l==="editing"){const h=[{index:0,x:r[0].x,y:r[0].y,radius:6},{index:r.length-1,x:r[r.length-1].x,y:r[r.length-1].y,radius:6}];L(t,h,null,e)}}}const At=class At extends I{constructor(t,i=[],e={},n={}){const{brushSize:o,smoothing:r,...a}=n;super(t,i,e,a);u(this,"type","brush");u(this,"_brushOptions");this._brushOptions={...this._options,brushSize:o??3,smoothing:r??.5}}get brushOptions(){return this._brushOptions}setBrushOptions(t){this._brushOptions={...this._brushOptions,...t},this.requestUpdate()}addPoint(t){this._anchors.push(t),this.requestUpdate()}isValid(){return this._anchors.length>=At.REQUIRED_ANCHORS}paneViews(){return[new qi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=[];for(const n of this._anchors){const o=this.anchorToPixel(n,t);o&&i.push(o)}return i.length<2?[]:[{type:"polygon",points:i,closed:!1}]}testHit(t,i){if(!this.isValid())return!1;const e=[];for(const n of this._anchors){const o=this.anchorToPixel(n,i);o&&e.push(o)}for(let n=0;n<e.length-1;n++)if(V(t,e[n],e[n+1])<=At.HIT_THRESHOLD+(this._brushOptions.brushSize??3))return!0;return!1}clone(t){return new At(t,[...this._anchors],{...this._style},{...this._brushOptions})}static create(t,i,e,n){return new At(t,i,e,n)}};u(At,"REQUIRED_ANCHORS",2),u(At,"HIT_THRESHOLD",10);let On=At;class Ni{constructor(s){u(this,"_renderer");this._renderer=new Or(s)}zOrder(){return"bottom"}renderer(){return this._renderer}}class Or{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.highlighterOptions,r=o.highlighterWidth??20,a=o.opacity??.4,c=[];for(const h of this._drawing.anchors){const d=this._drawing.anchorToPixel(h,n);d&&c.push(d)}if(c.length<2)return;t.save(),t.globalAlpha=a,t.strokeStyle=this._drawing.style.lineColor||"#FFEB3B",t.lineWidth=r*e,t.lineCap="round",t.lineJoin="round",t.beginPath(),t.moveTo(c[0].x*e,c[0].y*e);for(let h=1;h<c.length;h++)t.lineTo(c[h].x*e,c[h].y*e);t.stroke(),t.restore();const l=this._drawing.state;if(l==="selected"||l==="editing"){const h=this._drawing.getControlPoints(n);L(t,h,null,e)}}}const Et=class Et extends I{constructor(t,i=[],e={},n={}){const{highlighterWidth:o,opacity:r,...a}=n;super(t,i,e,a);u(this,"type","highlighter");u(this,"_highlighterOptions");this._highlighterOptions={...this._options,highlighterWidth:o??20,opacity:r??.4}}get highlighterOptions(){return this._highlighterOptions}setHighlighterOptions(t){this._highlighterOptions={...this._highlighterOptions,...t},this.requestUpdate()}addPoint(t){this._anchors.push(t),this.requestUpdate()}isValid(){return this._anchors.length>=Et.REQUIRED_ANCHORS}paneViews(){return[new Ni(this)]}computeGeometry(t){if(!this.isValid())return[];const i=[];for(const n of this._anchors){const o=this.anchorToPixel(n,t);o&&i.push(o)}return i.length<2?[]:[{type:"polygon",points:i,closed:!1}]}testHit(t,i){if(!this.isValid())return!1;const e=[];for(const n of this._anchors){const o=this.anchorToPixel(n,i);o&&e.push(o)}for(let n=0;n<e.length-1;n++)if(V(t,e[n],e[n+1])<=Et.HIT_THRESHOLD+(this._highlighterOptions.highlighterWidth??20)/2)return!0;return!1}clone(t){return new Et(t,[...this._anchors],{...this._style},{...this._highlighterOptions})}static create(t,i,e,n){return new Et(t,i,e,n)}};u(Et,"REQUIRED_ANCHORS",2),u(Et,"HIT_THRESHOLD",15);let mn=Et;class Bi{constructor(s){u(this,"_renderer");this._renderer=new mr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class mr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.getArrowVertices(n);if(!o||o.length<3)return;const r=this._drawing.arrowOptions,a=this._drawing.style;t.save(),t.beginPath(),t.moveTo(o[0].x*e,o[0].y*e);for(let l=1;l<o.length;l++)t.lineTo(o[l].x*e,o[l].y*e);t.closePath(),r.filled&&(t.fillStyle=a.lineColor,t.fill()),t.strokeStyle=a.lineColor,t.lineWidth=a.lineWidth*e,t.stroke(),t.restore();const c=this._drawing.state;if(c==="selected"||c==="editing"){const l=this._drawing.getControlPoints(n);L(t,l,null,e)}}}const Wt=class Wt extends I{constructor(t,i=[],e={},n={}){const{direction:o,size:r,filled:a,...c}=n;super(t,i,e,c);u(this,"type","arrow-marker");u(this,"_arrowOptions");this._arrowOptions={...this._options,direction:o??"up",size:r??20,filled:a??!0}}get arrowOptions(){return this._arrowOptions}setArrowOptions(t){this._arrowOptions={...this._arrowOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Wt.REQUIRED_ANCHORS}paneViews(){return[new Bi(this)]}getArrowVertices(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t);if(!i)return null;const e=this._arrowOptions.size??20,n=this._arrowOptions.direction??"up",o=e*.5,r=e;switch(n){case"up":return[{x:i.x,y:i.y-r/2},{x:i.x-o,y:i.y+r/2},{x:i.x+o,y:i.y+r/2}];case"down":return[{x:i.x,y:i.y+r/2},{x:i.x-o,y:i.y-r/2},{x:i.x+o,y:i.y-r/2}];case"left":return[{x:i.x-r/2,y:i.y},{x:i.x+r/2,y:i.y-o},{x:i.x+r/2,y:i.y+o}];case"right":return[{x:i.x+r/2,y:i.y},{x:i.x-r/2,y:i.y-o},{x:i.x-r/2,y:i.y+o}];default:return null}}computeGeometry(t){const i=this.getArrowVertices(t);return i?[{type:"polygon",points:i,closed:!0}]:[]}testHit(t,i){const e=this.getArrowVertices(i);return!e||e.length<3?!1:this.pointInTriangle(t,e[0],e[1],e[2])}pointInTriangle(t,i,e,n){const o=(d,p,g)=>(d.x-g.x)*(p.y-g.y)-(p.x-g.x)*(d.y-g.y),r=o(t,i,e),a=o(t,e,n),c=o(t,n,i),l=r<0||a<0||c<0,h=r>0||a>0||c>0;return!(l&&h)}clone(t){return new Wt(t,[...this._anchors],{...this._style},{...this._arrowOptions})}static create(t,i,e,n){return new Wt(t,[i],e,n)}};u(Wt,"REQUIRED_ANCHORS",1),u(Wt,"HIT_THRESHOLD",10);let Tn=Wt;class Gi{constructor(s){u(this,"_renderer");this._renderer=new Tr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Tr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.getArrowVertices(n);if(!o||o.length<3)return;const r=this._drawing.style;t.save(),t.beginPath(),t.moveTo(o[0].x*e,o[0].y*e);for(let c=1;c<o.length;c++)t.lineTo(o[c].x*e,o[c].y*e);t.closePath(),t.fillStyle=r.lineColor,t.fill(),t.strokeStyle=r.lineColor,t.lineWidth=1*e,t.stroke(),t.restore();const a=this._drawing.state;if(a==="selected"||a==="editing"){const c=this._drawing.getControlPoints(n);L(t,c,null,e)}}}const $t=class $t extends I{constructor(t,i=[],e={},n={}){const{size:o,...r}=n,a={lineColor:"#26a69a",...e};super(t,i,a,r);u(this,"type","arrow-mark-up");u(this,"_arrowOptions");this._arrowOptions={...this._options,size:o??16}}get arrowOptions(){return this._arrowOptions}setArrowOptions(t){this._arrowOptions={...this._arrowOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=$t.REQUIRED_ANCHORS}paneViews(){return[new Gi(this)]}getArrowVertices(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t);if(!i)return null;const e=this._arrowOptions.size??16,n=e*.6,o=e;return[{x:i.x,y:i.y-o},{x:i.x-n,y:i.y},{x:i.x+n,y:i.y}]}computeGeometry(t){const i=this.getArrowVertices(t);return i?[{type:"polygon",points:i,closed:!0}]:[]}testHit(t,i){const e=this.getArrowVertices(i);return!e||e.length<3?!1:this.pointInTriangle(t,e[0],e[1],e[2])}pointInTriangle(t,i,e,n){const o=(d,p,g)=>(d.x-g.x)*(p.y-g.y)-(p.x-g.x)*(d.y-g.y),r=o(t,i,e),a=o(t,e,n),c=o(t,n,i),l=r<0||a<0||c<0,h=r>0||a>0||c>0;return!(l&&h)}clone(t){return new $t(t,[...this._anchors],{...this._style},{...this._arrowOptions})}static create(t,i,e,n){return new $t(t,[i],e,n)}};u($t,"REQUIRED_ANCHORS",1),u($t,"HIT_THRESHOLD",10);let bn=$t;class Wi{constructor(s){u(this,"_renderer");this._renderer=new br(s)}zOrder(){return"top"}renderer(){return this._renderer}}class br{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.getArrowVertices(n);if(!o||o.length<3)return;const r=this._drawing.style;t.save(),t.beginPath(),t.moveTo(o[0].x*e,o[0].y*e);for(let c=1;c<o.length;c++)t.lineTo(o[c].x*e,o[c].y*e);t.closePath(),t.fillStyle=r.lineColor,t.fill(),t.strokeStyle=r.lineColor,t.lineWidth=1*e,t.stroke(),t.restore();const a=this._drawing.state;if(a==="selected"||a==="editing"){const c=this._drawing.getControlPoints(n);L(t,c,null,e)}}}const Qt=class Qt extends I{constructor(t,i=[],e={},n={}){const{size:o,...r}=n,a={lineColor:"#ef5350",...e};super(t,i,a,r);u(this,"type","arrow-mark-down");u(this,"_arrowOptions");this._arrowOptions={...this._options,size:o??16}}get arrowOptions(){return this._arrowOptions}setArrowOptions(t){this._arrowOptions={...this._arrowOptions,...t},this.requestUpdate()}isValid(){return this._anchors.length>=Qt.REQUIRED_ANCHORS}paneViews(){return[new Wi(this)]}getArrowVertices(t){if(!this.isValid())return null;const i=this.anchorToPixel(this._anchors[0],t);if(!i)return null;const e=this._arrowOptions.size??16,n=e*.6,o=e;return[{x:i.x,y:i.y+o},{x:i.x-n,y:i.y},{x:i.x+n,y:i.y}]}computeGeometry(t){const i=this.getArrowVertices(t);return i?[{type:"polygon",points:i,closed:!0}]:[]}testHit(t,i){const e=this.getArrowVertices(i);return!e||e.length<3?!1:this.pointInTriangle(t,e[0],e[1],e[2])}pointInTriangle(t,i,e,n){const o=(d,p,g)=>(d.x-g.x)*(p.y-g.y)-(p.x-g.x)*(d.y-g.y),r=o(t,i,e),a=o(t,e,n),c=o(t,n,i),l=r<0||a<0||c<0,h=r>0||a>0||c>0;return!(l&&h)}clone(t){return new Qt(t,[...this._anchors],{...this._style},{...this._arrowOptions})}static create(t,i,e,n){return new Qt(t,[i],e,n)}};u(Qt,"REQUIRED_ANCHORS",1),u(Qt,"HIT_THRESHOLD",10);let Rn=Qt;class $i{constructor(s){u(this,"_renderer");this._renderer=new Rr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Rr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors,r=this._drawing.anchorToPixel(o[0],n),a=this._drawing.anchorToPixel(o[1],n);if(!r||!a)return;const c=this._drawing.textOptions,l=this._drawing.style,h=c.text??"",d=(c.fontSize??12)*e,p=c.fontFamily??"sans-serif",g=c.fontWeight??"normal",_=6*e;t.save(),c.showConnector&&(t.strokeStyle=l.lineColor,t.lineWidth=1*e,t.beginPath(),t.moveTo(r.x*e,r.y*e),t.lineTo(a.x*e,a.y*e),t.stroke(),t.fillStyle=l.lineColor,t.beginPath(),t.arc(r.x*e,r.y*e,4*e,0,Math.PI*2),t.fill()),t.font=`${g} ${d}px ${p}`,t.textAlign=c.textAlign??"left",t.textBaseline="middle";const x=t.measureText(h).width,P=d,O=a.x*e,m=a.y*e;let T=O;c.textAlign==="center"?T=O-x/2:c.textAlign==="right"&&(T=O-x),t.fillStyle="rgba(30, 34, 45, 0.95)",t.beginPath(),t.roundRect(T-_,m-P/2-_,x+_*2,P+_*2,3*e),t.fill(),t.strokeStyle=l.lineColor,t.lineWidth=1*e,t.stroke(),t.fillStyle=l.labelColor??"#FFFFFF",t.fillText(h,O,m),t.restore();const b=this._drawing.state;if(b==="selected"||b==="editing"){const C=this._drawing.getControlPoints(n);L(t,C,null,e)}}}const Mt=class Mt extends I{constructor(t,i=[],e={},n={}){const{text:o,fontSize:r,fontFamily:a,fontWeight:c,textAlign:l,showConnector:h,connectorLength:d,...p}=n;super(t,i,e,p);u(this,"type","anchored-text");u(this,"_textOptions");this._textOptions={...this._options,text:o??"Anchored Text",fontSize:r??12,fontFamily:a??"sans-serif",fontWeight:c??"normal",textAlign:l??"left",showConnector:h??!0,connectorLength:d??30}}get textOptions(){return this._textOptions}setTextOptions(t){this._textOptions={...this._textOptions,...t},this.requestUpdate()}setText(t){this._textOptions.text=t,this.requestUpdate()}getText(){return this._textOptions.text??""}isValid(){return this._anchors.length>=Mt.REQUIRED_ANCHORS}paneViews(){return[new $i(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[1],t);return i?[{type:"text",position:i,text:this._textOptions.text??"",font:`${this._textOptions.fontWeight} ${this._textOptions.fontSize}px ${this._textOptions.fontFamily}`,color:this._style.labelColor,align:this._textOptions.textAlign,baseline:"middle"}]:[]}testHit(t,i){var c;if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(e){const l=t.x-e.x,h=t.y-e.y;if(Math.sqrt(l*l+h*h)<=Mt.HIT_THRESHOLD)return!0}const n=this.anchorToPixel(this._anchors[1],i);if(!n)return!1;const o=(((c=this._textOptions.text)==null?void 0:c.length)??0)*(this._textOptions.fontSize??12)*.6,r=(this._textOptions.fontSize??12)*1.5,a=6;return t.x>=n.x-a&&t.x<=n.x+o+a&&t.y>=n.y-r/2-a&&t.y<=n.y+r/2+a}clone(t){return new Mt(t,[...this._anchors],{...this._style},{...this._textOptions})}static create(t,i,e,n,o,r){return new Mt(t,[i,e],o,{...r,text:n})}};u(Mt,"REQUIRED_ANCHORS",2),u(Mt,"HIT_THRESHOLD",10);let Cn=Mt;class Qi{constructor(s){u(this,"_renderer");this._renderer=new Cr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Cr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=this._drawing.anchorToPixel(o,n);if(!r)return;const a=this._drawing.noteOptions,c=a.text??"",l=(a.fontSize??11)*e,h=a.backgroundColor??"#FFEB3B",d=a.iconColor??"#000000",p=(a.width??120)*e,g=8*e,_=16*e,w=r.x*e,x=r.y*e;t.save(),t.font=`${l}px sans-serif`;const P=this.wrapText(t,c,p-g*2-(a.showIcon?_+g:0)),O=l*1.3,T=Math.max(P.length*O,_)+g*2;t.fillStyle=h,t.beginPath(),t.moveTo(w,x),t.lineTo(w+p-10*e,x),t.lineTo(w+p,x+10*e),t.lineTo(w+p,x+T),t.lineTo(w,x+T),t.closePath(),t.fill(),t.fillStyle=this.darkenColor(h,.2),t.beginPath(),t.moveTo(w+p-10*e,x),t.lineTo(w+p-10*e,x+10*e),t.lineTo(w+p,x+10*e),t.closePath(),t.fill(),t.strokeStyle=this.darkenColor(h,.3),t.lineWidth=1*e,t.beginPath(),t.moveTo(w,x),t.lineTo(w+p-10*e,x),t.lineTo(w+p,x+10*e),t.lineTo(w+p,x+T),t.lineTo(w,x+T),t.closePath(),t.stroke();let b=w+g;a.showIcon&&(t.fillStyle=d,t.font=`bold ${_}px sans-serif`,t.textAlign="left",t.textBaseline="top",t.fillText("📝",w+g,x+g),b=w+g+_+g/2),t.fillStyle=d,t.font=`${l}px sans-serif`,t.textAlign="left",t.textBaseline="top";for(let H=0;H<P.length;H++)t.fillText(P[H],b,x+g+H*O);t.restore();const C=this._drawing.state;if(C==="selected"||C==="editing"){const H=this._drawing.getControlPoints(n);L(t,H,null,e)}}wrapText(s,t,i){const e=t.split(" "),n=[];let o="";for(const r of e){const a=o?`${o} ${r}`:r;s.measureText(a).width>i&&o?(n.push(o),o=r):o=a}return o&&n.push(o),n.length>0?n:[""]}darkenColor(s,t){let i=parseInt(s.slice(1,3),16),e=parseInt(s.slice(3,5),16),n=parseInt(s.slice(5,7),16);return i=Math.floor(i*(1-t)),e=Math.floor(e*(1-t)),n=Math.floor(n*(1-t)),`#${i.toString(16).padStart(2,"0")}${e.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`}}const Xt=class Xt extends I{constructor(t,i=[],e={},n={}){const{text:o,fontSize:r,backgroundColor:a,iconColor:c,width:l,showIcon:h,...d}=n;super(t,i,e,d);u(this,"type","note");u(this,"_noteOptions");this._noteOptions={...this._options,text:o??"Note",fontSize:r??11,backgroundColor:a??"#FFEB3B",iconColor:c??"#000000",width:l??120,showIcon:h??!0}}get noteOptions(){return this._noteOptions}setNoteOptions(t){this._noteOptions={...this._noteOptions,...t},this.requestUpdate()}setText(t){this._noteOptions.text=t,this.requestUpdate()}getText(){return this._noteOptions.text??""}isValid(){return this._anchors.length>=Xt.REQUIRED_ANCHORS}paneViews(){return[new Qi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"polygon",points:[i],closed:!1}]:[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=this._noteOptions.width??120;return t.x>=e.x&&t.x<=e.x+n&&t.y>=e.y&&t.y<=e.y+60}clone(t){return new Xt(t,[...this._anchors],{...this._style},{...this._noteOptions})}static create(t,i,e,n,o){return new Xt(t,[i],n,{...o,text:e})}};u(Xt,"REQUIRED_ANCHORS",1),u(Xt,"HIT_THRESHOLD",15);let Sn=Xt;class Xi{constructor(s){u(this,"_renderer");this._renderer=new Sr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Sr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=this._drawing.anchorToPixel(o,n);if(!r)return;const a=this._drawing.noteOptions,c=(a.fontSize??11)*e,l=a.backgroundColor??"rgba(30, 34, 45, 0.95)",h=a.priceColor??"#26a69a",d=a.noteColor??"#d1d4dc",p=6*e,g=6*e,_=r.x*e,w=r.y*e;t.save();const x=[];a.showPrice&&x.push({text:`$${o.price.toFixed(2)}`,color:h}),a.note&&x.push({text:a.note,color:d}),x.length===0&&x.push({text:`$${o.price.toFixed(2)}`,color:h}),t.font=`${c}px sans-serif`;let P=0;for(const S of x){const E=t.measureText(S.text);P=Math.max(P,E.width)}const O=c*1.3,m=P+p*2+g+p,T=x.length*O+p*2;t.fillStyle=h,t.beginPath(),t.arc(_,w,g/2,0,Math.PI*2),t.fill(),t.strokeStyle=h,t.lineWidth=1*e,t.beginPath(),t.moveTo(_+g/2,w),t.lineTo(_+g+p/2,w),t.stroke();const b=_+g+p,C=w-T/2;t.fillStyle=l,t.beginPath(),t.roundRect(b,C,m,T,3*e),t.fill(),t.strokeStyle=h,t.lineWidth=1*e,t.stroke(),t.textAlign="left",t.textBaseline="middle";for(let S=0;S<x.length;S++)t.fillStyle=x[S].color,t.font=S===0?`bold ${c}px sans-serif`:`${c}px sans-serif`,t.fillText(x[S].text,b+p,C+p+O*(S+.5));t.restore();const H=this._drawing.state;if(H==="selected"||H==="editing"){const S=this._drawing.getControlPoints(n);L(t,S,null,e)}}}const jt=class jt extends I{constructor(t,i=[],e={},n={}){const{note:o,showPrice:r,showTime:a,fontSize:c,backgroundColor:l,priceColor:h,noteColor:d,...p}=n;super(t,i,e,p);u(this,"type","price-note");u(this,"_noteOptions");this._noteOptions={...this._options,note:o??"",showPrice:r??!0,showTime:a??!1,fontSize:c??11,backgroundColor:l??"rgba(30, 34, 45, 0.95)",priceColor:h??"#26a69a",noteColor:d??"#d1d4dc"}}get noteOptions(){return this._noteOptions}setNoteOptions(t){this._noteOptions={...this._noteOptions,...t},this.requestUpdate()}setNote(t){this._noteOptions.note=t,this.requestUpdate()}getNote(){return this._noteOptions.note??""}getPrice(){var t;return((t=this._anchors[0])==null?void 0:t.price)??0}isValid(){return this._anchors.length>=jt.REQUIRED_ANCHORS}paneViews(){return[new Xi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"polygon",points:[i],closed:!1}]:[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=80,o=40;return t.x>=e.x-10&&t.x<=e.x+n&&t.y>=e.y-o/2&&t.y<=e.y+o/2}clone(t){return new jt(t,[...this._anchors],{...this._style},{...this._noteOptions})}static create(t,i,e,n,o){return new jt(t,[i],n,{...o,note:e})}};u(jt,"REQUIRED_ANCHORS",1),u(jt,"HIT_THRESHOLD",10);let Hn=jt;class ji{constructor(s){u(this,"_renderer");this._renderer=new Hr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Hr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i,bitmapSize:e}=s,n=i,o=this._drawing.getViewport();if(!o||!this._drawing.options.visible||!this._drawing.isValid())return;const r=this._drawing.anchors[0],a=this._drawing.anchorToPixel(r,o);if(!a)return;const c=this._drawing.labelOptions,l=(c.fontSize??11)*n,h=c.backgroundColor??"#2962FF",d=c.textColor??"#FFFFFF",p=c.decimals??2,g=4*n,_=6*n,w=a.x*n,x=a.y*n,P=e.width;t.save(),t.strokeStyle=h,t.lineWidth=1*n,t.setLineDash([4*n,2*n]),t.beginPath(),t.moveTo(w,x),t.lineTo(P,x),t.stroke(),t.setLineDash([]);const O=`$${r.price.toFixed(p)}`;t.font=`bold ${l}px sans-serif`;const b=t.measureText(O).width+g*2,C=l+g*2,H=P-b-2*n,S=x-C/2;t.fillStyle=h,t.beginPath(),c.showArrow?(t.moveTo(H,S),t.lineTo(H+b,S),t.lineTo(H+b,S+C),t.lineTo(H,S+C),t.lineTo(H-_,x),t.closePath()):t.roundRect(H,S,b,C,2*n),t.fill(),t.fillStyle=d,t.textAlign="center",t.textBaseline="middle",t.fillText(O,H+b/2,x),t.fillStyle=h,t.beginPath(),t.arc(w,x,4*n,0,Math.PI*2),t.fill(),t.restore();const E=this._drawing.state;if(E==="selected"||E==="editing"){const v=this._drawing.getControlPoints(o);L(t,v,null,n)}}}const Yt=class Yt extends I{constructor(t,i=[],e={},n={}){const{fontSize:o,backgroundColor:r,textColor:a,showArrow:c,arrowDirection:l,decimals:h,...d}=n;super(t,i,e,d);u(this,"type","price-label");u(this,"_labelOptions");this._labelOptions={...this._options,fontSize:o??11,backgroundColor:r??"#2962FF",textColor:a??"#FFFFFF",showArrow:c??!0,arrowDirection:l??"left",decimals:h??2}}get labelOptions(){return this._labelOptions}setLabelOptions(t){this._labelOptions={...this._labelOptions,...t},this.requestUpdate()}getPrice(){var t;return((t=this._anchors[0])==null?void 0:t.price)??0}isValid(){return this._anchors.length>=Yt.REQUIRED_ANCHORS}paneViews(){return[new ji(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"polygon",points:[i],closed:!1}]:[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;if(Math.abs(t.y-e.y)<=5&&t.x>=e.x)return!0;const o=70,r=20;return t.x>=i.width-o-10&&t.x<=i.width&&t.y>=e.y-r/2&&t.y<=e.y+r/2}clone(t){return new Yt(t,[...this._anchors],{...this._style},{...this._labelOptions})}static create(t,i,e,n){return new Yt(t,[i],e,n)}};u(Yt,"REQUIRED_ANCHORS",1),u(Yt,"HIT_THRESHOLD",10);let Ln=Yt;class Yi{constructor(s){u(this,"_renderer");this._renderer=new Lr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Lr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=this._drawing.anchorToPixel(o,n);if(!r)return;const a=this._drawing.flagOptions,c=this._drawing.getFlagColor(),l=(a.size??20)*e,h=l*1.5,d=l,p=l*.6,g=r.x*e,_=r.y*e;t.save(),t.strokeStyle=c,t.lineWidth=2*e,t.beginPath(),t.moveTo(g,_),t.lineTo(g,_-h),t.stroke(),t.fillStyle=c,t.beginPath(),t.moveTo(g,_-h),t.lineTo(g+d,_-h+p/2),t.lineTo(g,_-h+p),t.closePath(),t.fill(),t.beginPath(),t.arc(g,_,3*e,0,Math.PI*2),t.fill();const w=a.label;if(w){const P=10*e;t.font=`bold ${P}px sans-serif`,t.fillStyle="#FFFFFF",t.textAlign="center",t.textBaseline="middle";const O=t.measureText(w),m=3*e,T=O.width+m*2,b=P+m*2,C=g+d/2,H=_-h-b/2-2*e;t.fillStyle="rgba(0, 0, 0, 0.7)",t.beginPath(),t.roundRect(C-T/2,H-b/2,T,b,2*e),t.fill(),t.fillStyle="#FFFFFF",t.fillText(w,C,H)}t.restore();const x=this._drawing.state;if(x==="selected"||x==="editing"){const P=this._drawing.getControlPoints(n);L(t,P,null,e)}}}const Jt=class Jt extends I{constructor(t,i=[],e={},n={}){const{flagColor:o,customColor:r,label:a,size:c,...l}=n;super(t,i,e,l);u(this,"type","flag-mark");u(this,"_flagOptions");this._flagOptions={...this._options,flagColor:o??"red",customColor:r??"#FF0000",label:a??"",size:c??20}}get flagOptions(){return this._flagOptions}setFlagOptions(t){this._flagOptions={...this._flagOptions,...t},this.requestUpdate()}getFlagColor(){return{red:"#ef5350",green:"#26a69a",blue:"#2196F3",yellow:"#FFEB3B",purple:"#9C27B0",custom:this._flagOptions.customColor??"#FF0000"}[this._flagOptions.flagColor??"red"]}setLabel(t){this._flagOptions.label=t,this.requestUpdate()}getLabel(){return this._flagOptions.label??""}isValid(){return this._anchors.length>=Jt.REQUIRED_ANCHORS}paneViews(){return[new Yi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"polygon",points:[i],closed:!1}]:[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=this._flagOptions.size??20;return t.x>=e.x-5&&t.x<=e.x+n+5&&t.y>=e.y-n*1.5&&t.y<=e.y+5}clone(t){return new Jt(t,[...this._anchors],{...this._style},{...this._flagOptions})}static create(t,i,e,n,o,r){return new Jt(t,[i],o,{...r,flagColor:e,label:n})}};u(Jt,"REQUIRED_ANCHORS",1),u(Jt,"HIT_THRESHOLD",15);let In=Jt;class Ji{constructor(s){u(this,"_renderer");this._renderer=new Ir(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Ir{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=this._drawing.anchorToPixel(o,n);if(!r)return;const a=this._drawing.pinOptions,c=a.color??"#E91E63",l=(a.size??24)*e,h=r.x*e,d=r.y*e;t.save();const p=l*.4,g=d-l;t.fillStyle=c,t.beginPath(),t.moveTo(h,d),t.bezierCurveTo(h-p*1.2,d-l*.5,h-p,g,h,g-p),t.bezierCurveTo(h+p,g,h+p*1.2,d-l*.5,h,d),t.closePath(),t.fill(),t.fillStyle="#FFFFFF",t.beginPath(),t.arc(h,g,p*.4,0,Math.PI*2),t.fill();const _=a.label;if(_){const x=10*e;t.font=`bold ${x}px sans-serif`,t.textAlign="center",t.textBaseline="bottom";const P=t.measureText(_),O=3*e,m=P.width+O*2,T=x+O*2,b=h,C=g-p-4*e;t.fillStyle="rgba(0, 0, 0, 0.7)",t.beginPath(),t.roundRect(b-m/2,C-T,m,T,2*e),t.fill(),t.fillStyle="#FFFFFF",t.fillText(_,b,C-O)}t.restore();const w=this._drawing.state;if(w==="selected"||w==="editing"){const x=this._drawing.getControlPoints(n);L(t,x,null,e)}}}const Zt=class Zt extends I{constructor(t,i=[],e={},n={}){const{color:o,size:r,label:a,...c}=n;super(t,i,e,c);u(this,"type","pin");u(this,"_pinOptions");this._pinOptions={...this._options,color:o??"#E91E63",size:r??24,label:a??""}}get pinOptions(){return this._pinOptions}setPinOptions(t){this._pinOptions={...this._pinOptions,...t},this.requestUpdate()}setLabel(t){this._pinOptions.label=t,this.requestUpdate()}getLabel(){return this._pinOptions.label??""}isValid(){return this._anchors.length>=Zt.REQUIRED_ANCHORS}paneViews(){return[new Ji(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"polygon",points:[i],closed:!1}]:[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=this._pinOptions.size??24;return t.x>=e.x-n/2&&t.x<=e.x+n/2&&t.y>=e.y-n*1.5&&t.y<=e.y}clone(t){return new Zt(t,[...this._anchors],{...this._style},{...this._pinOptions})}static create(t,i,e,n){return new Zt(t,[i],e,n)}};u(Zt,"REQUIRED_ANCHORS",1),u(Zt,"HIT_THRESHOLD",15);let Vn=Zt;class Zi{constructor(s){u(this,"_renderer");this._renderer=new Vr(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Vr{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=this._drawing.anchorToPixel(o,n);if(!r)return;const a=this._drawing.commentOptions,c=a.text??"",l=(a.fontSize??11)*e,h=a.backgroundColor??"#2962FF",d=a.textColor??"#FFFFFF",p=8*e,g=6*e,_=8*e,w=r.x*e,x=r.y*e;t.save(),t.font=`${l}px sans-serif`;const P=this.wrapText(t,c,120*e),O=l*1.3,m=P.length*O,b=Math.max(...P.map(v=>t.measureText(v).width))+p*2,C=m+p*2,H=w,S=x-_-C;t.fillStyle=h,t.beginPath(),t.roundRect(H,S,b,C,g),t.fill(),t.beginPath(),t.moveTo(H+10*e,S+C),t.lineTo(w,x),t.lineTo(H+20*e,S+C),t.closePath(),t.fill(),t.fillStyle=d,t.font=`${l}px sans-serif`,t.textAlign="left",t.textBaseline="top";for(let v=0;v<P.length;v++)t.fillText(P[v],H+p,S+p+v*O);t.restore();const E=this._drawing.state;if(E==="selected"||E==="editing"){const v=this._drawing.getControlPoints(n);L(t,v,null,e)}}wrapText(s,t,i){const e=t.split(" "),n=[];let o="";for(const r of e){const a=o?`${o} ${r}`:r;s.measureText(a).width>i&&o?(n.push(o),o=r):o=a}return o&&n.push(o),n.length>0?n:[""]}}const Kt=class Kt extends I{constructor(t,i=[],e={},n={}){const{text:o,fontSize:r,backgroundColor:a,textColor:c,...l}=n;super(t,i,e,l);u(this,"type","comment");u(this,"_commentOptions");this._commentOptions={...this._options,text:o??"Comment",fontSize:r??11,backgroundColor:a??"#2962FF",textColor:c??"#FFFFFF"}}get commentOptions(){return this._commentOptions}setCommentOptions(t){this._commentOptions={...this._commentOptions,...t},this.requestUpdate()}setText(t){this._commentOptions.text=t,this.requestUpdate()}getText(){return this._commentOptions.text??""}isValid(){return this._anchors.length>=Kt.REQUIRED_ANCHORS}paneViews(){return[new Zi(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"polygon",points:[i],closed:!1}]:[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);return e?t.x>=e.x&&t.x<=e.x+130&&t.y>=e.y-50-10&&t.y<=e.y:!1}clone(t){return new Kt(t,[...this._anchors],{...this._style},{...this._commentOptions})}static create(t,i,e,n,o){return new Kt(t,[i],n,{...o,text:e})}};u(Kt,"REQUIRED_ANCHORS",1),u(Kt,"HIT_THRESHOLD",15);let An=Kt;class Ki{constructor(s){u(this,"_renderer");this._renderer=new Ar(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Ar{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=this._drawing.anchorToPixel(o,n);if(!r)return;const a=this._drawing.signpostOptions,c=a.text??"",l=(a.fontSize??11)*e,h=a.backgroundColor??"#FF9800",d=a.textColor??"#000000",p=a.direction!=="left",g=10*e,_=8*e,w=24*e,x=30*e,P=r.x*e,O=r.y*e;t.save(),t.font=`bold ${l}px sans-serif`;const T=t.measureText(c).width+_*2;t.strokeStyle=h,t.lineWidth=2*e,t.beginPath(),t.moveTo(P,O),t.lineTo(P,O-x-w),t.stroke();const b=O-x-w;t.fillStyle=h,t.beginPath(),p?(t.moveTo(P,b),t.lineTo(P+T,b),t.lineTo(P+T+g,b+w/2),t.lineTo(P+T,b+w),t.lineTo(P,b+w)):(t.moveTo(P,b),t.lineTo(P-T,b),t.lineTo(P-T-g,b+w/2),t.lineTo(P-T,b+w),t.lineTo(P,b+w)),t.closePath(),t.fill(),t.fillStyle=d,t.font=`bold ${l}px sans-serif`,t.textBaseline="middle",p?(t.textAlign="left",t.fillText(c,P+_,b+w/2)):(t.textAlign="right",t.fillText(c,P-_,b+w/2)),t.fillStyle=h,t.beginPath(),t.arc(P,O,3*e,0,Math.PI*2),t.fill(),t.restore();const C=this._drawing.state;if(C==="selected"||C==="editing"){const H=this._drawing.getControlPoints(n);L(t,H,null,e)}}}const te=class te extends I{constructor(t,i=[],e={},n={}){const{text:o,fontSize:r,backgroundColor:a,textColor:c,direction:l,...h}=n;super(t,i,e,h);u(this,"type","signpost");u(this,"_signpostOptions");this._signpostOptions={...this._options,text:o??"Signpost",fontSize:r??11,backgroundColor:a??"#FF9800",textColor:c??"#000000",direction:l??"right"}}get signpostOptions(){return this._signpostOptions}setSignpostOptions(t){this._signpostOptions={...this._signpostOptions,...t},this.requestUpdate()}setText(t){this._signpostOptions.text=t,this.requestUpdate()}getText(){return this._signpostOptions.text??""}isValid(){return this._anchors.length>=te.REQUIRED_ANCHORS}paneViews(){return[new Ki(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"polygon",points:[i],closed:!1}]:[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=100,o=28;return this._signpostOptions.direction!=="left"?t.x>=e.x&&t.x<=e.x+n&&t.y>=e.y-o&&t.y<=e.y:t.x>=e.x-n&&t.x<=e.x&&t.y>=e.y-o&&t.y<=e.y}clone(t){return new te(t,[...this._anchors],{...this._style},{...this._signpostOptions})}static create(t,i,e,n,o){return new te(t,[i],n,{...o,text:e})}};u(te,"REQUIRED_ANCHORS",1),u(te,"HIT_THRESHOLD",15);let En=te;class ts{constructor(s){u(this,"_renderer");this._renderer=new Er(s)}zOrder(){return"top"}renderer(){return this._renderer}}class Er{constructor(s){u(this,"_drawing");this._drawing=s}draw(s){s.useBitmapCoordinateSpace(t=>{this.drawImpl(t)})}drawImpl(s){const{context:t,horizontalPixelRatio:i}=s,e=i,n=this._drawing.getViewport();if(!n||!this._drawing.options.visible||!this._drawing.isValid())return;const o=this._drawing.anchors[0],r=this._drawing.anchorToPixel(o,n);if(!r)return;const a=this._drawing.tableOptions,c=a.rows??[];if(c.length===0)return;const l=(a.fontSize??11)*e,h=a.backgroundColor??"#1e222d",d=a.headerColor??"#2a2e39",p=a.textColor??"#d1d4dc",g=a.borderColor??"#363a45",_=(a.cellPadding??6)*e,w=a.headerRow??!0,x=r.x*e,P=r.y*e;t.save(),t.font=`${l}px sans-serif`;const O=c[0].length,m=new Array(O).fill(0);for(const S of c)for(let E=0;E<S.length&&E<O;E++){const v=t.measureText(S[E]).width+_*2;m[E]=Math.max(m[E],v)}for(let S=0;S<O;S++)m[S]=Math.max(m[S],50*e);const T=l+_*2,b=m.reduce((S,E)=>S+E,0),C=c.length*T;t.fillStyle=h,t.fillRect(x,P,b,C);for(let S=0;S<c.length;S++){const E=P+S*T;S===0&&w&&(t.fillStyle=d,t.fillRect(x,E,b,T));let v=x;for(let U=0;U<O;U++){const N=S<c.length&&U<c[S].length?c[S][U]:"";t.fillStyle=p,t.font=S===0&&w?`bold ${l}px sans-serif`:`${l}px sans-serif`,t.textAlign="left",t.textBaseline="middle",t.fillText(N,v+_,E+T/2),U>0&&(t.strokeStyle=g,t.lineWidth=1*e,t.beginPath(),t.moveTo(v,E),t.lineTo(v,E+T),t.stroke()),v+=m[U]}S>0&&(t.strokeStyle=g,t.lineWidth=1*e,t.beginPath(),t.moveTo(x,E),t.lineTo(x+b,E),t.stroke())}t.strokeStyle=g,t.lineWidth=1*e,t.strokeRect(x,P,b,C),t.restore();const H=this._drawing.state;if(H==="selected"||H==="editing"){const S=this._drawing.getControlPoints(n);L(t,S,null,e)}}}const Mr=[["Label","Value"],["Price","0.00"],["Change","0.00%"]],ee=class ee extends I{constructor(t,i=[],e={},n={}){const{rows:o,headerRow:r,fontSize:a,backgroundColor:c,headerColor:l,textColor:h,borderColor:d,cellPadding:p,...g}=n;super(t,i,e,g);u(this,"type","table");u(this,"_tableOptions");this._tableOptions={...this._options,rows:o??Mr.map(_=>[..._]),headerRow:r??!0,fontSize:a??11,backgroundColor:c??"#1e222d",headerColor:l??"#2a2e39",textColor:h??"#d1d4dc",borderColor:d??"#363a45",cellPadding:p??6}}get tableOptions(){return this._tableOptions}setTableOptions(t){this._tableOptions={...this._tableOptions,...t},this.requestUpdate()}setRows(t){this._tableOptions.rows=t,this.requestUpdate()}getRows(){return this._tableOptions.rows??[]}isValid(){return this._anchors.length>=ee.REQUIRED_ANCHORS}paneViews(){return[new ts(this)]}computeGeometry(t){if(!this.isValid())return[];const i=this.anchorToPixel(this._anchors[0],t);return i?[{type:"polygon",points:[i],closed:!1}]:[]}testHit(t,i){if(!this.isValid())return!1;const e=this.anchorToPixel(this._anchors[0],i);if(!e)return!1;const n=this._tableOptions.rows??[],o=n.length>0?n[0].length:0,r=this._tableOptions.cellPadding??6,c=(this._tableOptions.fontSize??11)+r*2,h=o*80,d=n.length*c;return t.x>=e.x&&t.x<=e.x+h&&t.y>=e.y&&t.y<=e.y+d}clone(t){return new ee(t,[...this._anchors],{...this._style},{...this._tableOptions,rows:(this._tableOptions.rows??[]).map(i=>[...i])})}static create(t,i,e,n,o){return new ee(t,[i],n,{...o,rows:e})}};u(ee,"REQUIRED_ANCHORS",1),u(ee,"HIT_THRESHOLD",5);let Mn=ee;const es=[{type:"trend-line",name:"Trend Line",category:"line",requiredAnchors:2,factory:(f,s,t,i)=>new oe(f,s,t,i)},{type:"horizontal-line",name:"Horizontal Line",category:"line",requiredAnchors:1,factory:(f,s,t,i)=>new be(f,s,t,i)},{type:"vertical-line",name:"Vertical Line",category:"line",requiredAnchors:1,factory:(f,s,t,i)=>new Re(f,s,t,i)},{type:"ray",name:"Ray",category:"line",requiredAnchors:2,factory:(f,s,t,i)=>new ae(f,s,t,i)},{type:"arrow",name:"Arrow",category:"line",requiredAnchors:2,factory:(f,s,t,i)=>new ce(f,s,t,i)},{type:"extended-line",name:"Extended Line",category:"line",requiredAnchors:2,factory:(f,s,t,i)=>new le(f,s,t,i)},{type:"cross-line",name:"Cross Line",category:"line",requiredAnchors:1,factory:(f,s,t,i)=>new Ce(f,s,t,i)},{type:"info-line",name:"Info Line",category:"line",requiredAnchors:2,factory:(f,s,t,i)=>new he(f,s,t,i)},{type:"trend-angle",name:"Trend Angle",category:"line",requiredAnchors:2,factory:(f,s,t,i)=>new de(f,s,t,i)},{type:"horizontal-ray",name:"Horizontal Ray",category:"line",requiredAnchors:1,factory:(f,s,t,i)=>new Se(f,s,t,i)},{type:"rectangle",name:"Rectangle",category:"shape",requiredAnchors:2,factory:(f,s,t,i)=>new He(f,s,t,i)},{type:"circle",name:"Circle",category:"shape",requiredAnchors:2,factory:(f,s,t,i)=>new Ie(f,s,t,i)},{type:"triangle",name:"Triangle",category:"shape",requiredAnchors:3,factory:(f,s,t,i)=>new Ve(f,s,t,i)},{type:"price-range",name:"Price Range",category:"shape",requiredAnchors:2,factory:(f,s,t,i)=>new Ae(f,s,t,i)},{type:"parallel-channel",name:"Parallel Channel",category:"channel",requiredAnchors:3,factory:(f,s,t,i)=>new ze(f,s,t,i)},{type:"regression-trend",name:"Regression Trend",category:"channel",requiredAnchors:2,factory:(f,s,t,i)=>new Ue(f,s,t,i)},{type:"flat-top-bottom",name:"Flat Top/Bottom",category:"channel",requiredAnchors:3,factory:(f,s,t,i)=>new qe(f,s,t,i)},{type:"disjoint-channel",name:"Disjoint Channel",category:"channel",requiredAnchors:4,factory:(f,s,t,i)=>new Ne(f,s,t,i)},{type:"fib-retracement",name:"Fibonacci Retracement",category:"fibonacci",requiredAnchors:2,factory:(f,s,t,i)=>new Be(f,s,t,i)},{type:"fib-extension",name:"Fibonacci Extension",category:"fibonacci",requiredAnchors:3,factory:(f,s,t,i)=>new Ge(f,s,t,i)},{type:"fib-channel",name:"Fibonacci Channel",category:"fibonacci",requiredAnchors:3,factory:(f,s,t,i)=>new We(f,s,t,i)},{type:"fib-time-zone",name:"Fibonacci Time Zone",category:"fibonacci",requiredAnchors:2,factory:(f,s,t,i)=>new $e(f,s,t,i)},{type:"fib-speed-fan",name:"Fibonacci Speed Fan",category:"fibonacci",requiredAnchors:2,factory:(f,s,t,i)=>new Qe(f,s,t,i)},{type:"fib-time-extension",name:"Trend-Based Fib Time",category:"fibonacci",requiredAnchors:3,factory:(f,s,t,i)=>new Xe(f,s,t,i)},{type:"fib-circles",name:"Fibonacci Circles",category:"fibonacci",requiredAnchors:2,factory:(f,s,t,i)=>new je(f,s,t,i)},{type:"fib-spiral",name:"Fibonacci Spiral",category:"fibonacci",requiredAnchors:2,factory:(f,s,t,i)=>new Je(f,s,t,i)},{type:"fib-arcs",name:"Fibonacci Arcs",category:"fibonacci",requiredAnchors:2,factory:(f,s,t,i)=>new Ze(f,s,t,i)},{type:"fib-wedge",name:"Fibonacci Wedge",category:"fibonacci",requiredAnchors:3,factory:(f,s,t,i)=>new Ke(f,s,t,i)},{type:"pitchfan",name:"Pitchfan",category:"fibonacci",requiredAnchors:3,factory:(f,s,t,i)=>new tn(f,s,t,i)},{type:"andrews-pitchfork",name:"Andrews' Pitchfork",category:"pitchfork",requiredAnchors:3,factory:(f,s,t,i)=>new en(f,s,t,i)},{type:"schiff-pitchfork",name:"Schiff Pitchfork",category:"pitchfork",requiredAnchors:3,factory:(f,s,t,i)=>new nn(f,s,t,i)},{type:"modified-schiff-pitchfork",name:"Modified Schiff Pitchfork",category:"pitchfork",requiredAnchors:3,factory:(f,s,t,i)=>new sn(f,s,t,i)},{type:"inside-pitchfork",name:"Inside Pitchfork",category:"pitchfork",requiredAnchors:3,factory:(f,s,t,i)=>new rn(f,s,t,i)},{type:"gann-box",name:"Gann Box",category:"gann",requiredAnchors:2,factory:(f,s,t,i)=>new on(f,s,t,i)},{type:"gann-fan",name:"Gann Fan",category:"gann",requiredAnchors:2,factory:(f,s,t,i)=>new an(f,s,t,i)},{type:"gann-square-fixed",name:"Gann Square Fixed",category:"gann",requiredAnchors:1,factory:(f,s,t,i)=>new ln(f,s,t,i)},{type:"gann-square",name:"Gann Square",category:"gann",requiredAnchors:2,factory:(f,s,t,i)=>new dn(f,s,t,i)},{type:"long-position",name:"Long Position",category:"forecasting",requiredAnchors:3,factory:(f,s,t,i)=>new un(f,s,t,i)},{type:"short-position",name:"Short Position",category:"forecasting",requiredAnchors:3,factory:(f,s,t,i)=>new fn(f,s,t,i)},{type:"date-range",name:"Date Range",category:"measurement",requiredAnchors:2,factory:(f,s,t,i)=>new pn(f,s,t,i)},{type:"date-price-range",name:"Date and Price Range",category:"measurement",requiredAnchors:2,factory:(f,s,t,i)=>new gn(f,s,t,i)},{type:"projection",name:"Projection",category:"forecasting",requiredAnchors:3,factory:(f,s,t,i)=>new xn(f,s,t,i)},{type:"text-annotation",name:"Text",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new yn(f,s,t,i)},{type:"callout",name:"Callout",category:"annotation",requiredAnchors:2,factory:(f,s,t,i)=>new Pn(f,s,t,i)},{type:"brush",name:"Brush",category:"annotation",requiredAnchors:2,factory:(f,s,t,i)=>new On(f,s,t,i)},{type:"highlighter",name:"Highlighter",category:"annotation",requiredAnchors:2,factory:(f,s,t,i)=>new mn(f,s,t,i)},{type:"arrow-marker",name:"Arrow Marker",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new Tn(f,s,t,i)},{type:"arrow-mark-up",name:"Arrow Mark Up",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new bn(f,s,t,i)},{type:"arrow-mark-down",name:"Arrow Mark Down",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new Rn(f,s,t,i)},{type:"ellipse",name:"Ellipse",category:"shape",requiredAnchors:2,factory:(f,s,t,i)=>new Ee(f,s,t,i)},{type:"arc",name:"Arc",category:"shape",requiredAnchors:3,factory:(f,s,t,i)=>new Me(f,s,t,i)},{type:"rotated-rectangle",name:"Rotated Rectangle",category:"shape",requiredAnchors:3,factory:(f,s,t,i)=>new Le(f,s,t,i)},{type:"path",name:"Path",category:"shape",requiredAnchors:2,factory:(f,s,t,i)=>new De(f,s,t,i)},{type:"polyline",name:"Polyline",category:"shape",requiredAnchors:2,factory:(f,s,t,i)=>new ve(f,s,t,i)},{type:"curve",name:"Curve",category:"shape",requiredAnchors:4,factory:(f,s,t,i)=>new ke(f,s,t,i)},{type:"double-curve",name:"Double Curve",category:"shape",requiredAnchors:3,factory:(f,s,t,i)=>new Fe(f,s,t,i)},{type:"anchored-text",name:"Anchored Text",category:"annotation",requiredAnchors:2,factory:(f,s,t,i)=>new Cn(f,s,t,i)},{type:"note",name:"Note",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new Sn(f,s,t,i)},{type:"price-note",name:"Price Note",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new Hn(f,s,t,i)},{type:"price-label",name:"Price Label",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new Ln(f,s,t,i)},{type:"flag-mark",name:"Flag Mark",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new In(f,s,t,i)},{type:"pin",name:"Pin",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new Vn(f,s,t,i)},{type:"comment",name:"Comment",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new An(f,s,t,i)},{type:"signpost",name:"Signpost",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new En(f,s,t,i)},{type:"table",name:"Table",category:"annotation",requiredAnchors:1,factory:(f,s,t,i)=>new Mn(f,s,t,i)},{type:"forecast",name:"Forecast",category:"forecasting",requiredAnchors:2,factory:(f,s,t,i)=>new _n(f,s,t,i)},{type:"bars-pattern",name:"Bars Pattern",category:"forecasting",requiredAnchors:3,factory:(f,s,t,i)=>new wn(f,s,t,i)}],ne=class ne{constructor(){u(this,"_tools",new Map);for(const s of es)this._tools.set(s.type,s)}static getInstance(){return ne._instance||(ne._instance=new ne),ne._instance}register(s){this._tools.set(s.type,s)}get(s){return this._tools.get(s)}getAll(){return Array.from(this._tools.values())}getByCategory(s){return Array.from(this._tools.values()).filter(t=>t.category===s)}getCategories(){const s=new Set;for(const t of this._tools.values())s.add(t.category);return Array.from(s)}createDrawing(s,t,i,e,n){const o=this._tools.get(s);return o?o.factory(t,i,e,n):null}has(s){return this._tools.has(s)}};u(ne,"_instance");let Dn=ne;function Dr(){return Dn.getInstance()}const vr="0.1.0";y.AnchoredText=Cn,y.AnchoredTextPaneView=$i,y.AndrewsPitchfork=en,y.AndrewsPitchforkPaneView=bi,y.Arc=Me,y.ArcPaneView=si,y.Arrow=ce,y.ArrowMarkDown=Rn,y.ArrowMarkDownPaneView=Wi,y.ArrowMarkUp=bn,y.ArrowMarkUpPaneView=Gi,y.ArrowMarker=Tn,y.ArrowMarkerPaneView=Bi,y.ArrowPaneView=$n,y.BarsPattern=wn,y.BarsPatternPaneView=Fi,y.BaseLine=rt,y.Brush=On,y.BrushPaneView=qi,y.Callout=Pn,y.CalloutPaneView=Ui,y.Circle=Ie,y.CirclePaneView=ti,y.Comment=An,y.CommentPaneView=Zi,y.CrossLine=Ce,y.CrossLinePaneView=Xn,y.Curve=ke,y.CurvePaneView=ai,y.DEFAULT_DRAWING_STYLE=q,y.DatePriceRange=gn,y.DatePriceRangePaneView=Di,y.DateRange=pn,y.DateRangePaneView=Mi,y.DisjointChannel=Ne,y.DisjointChannelPaneView=ui,y.DoubleCurve=Fe,y.DoubleCurvePaneView=ci,y.Drawing=I,y.DrawingManager=rs,y.DrawingPaneView=qn,y.Ellipse=Ee,y.EllipsePaneView=ii,y.ExtendedLine=le,y.ExtendedLinePaneView=Qn,y.FIBONACCI_LEVELS=ue,y.FIB_ARC_LEVELS=ye,y.FIB_CHANNEL_LEVELS=pe,y.FIB_CIRCLE_LEVELS=we,y.FIB_EXTENSION_LEVELS=fe,y.FIB_SPEED_RATIOS=xe,y.FIB_TIME_EXTENSION_LEVELS=_e,y.FIB_TIME_INTERVALS=ge,y.FIB_WEDGE_LEVELS=Pe,y.FibArcs=Ze,y.FibArcsPaneView=Oi,y.FibChannel=We,y.FibChannelPaneView=gi,y.FibCircles=je,y.FibCirclesPaneView=yi,y.FibExtension=Ge,y.FibExtensionPaneView=pi,y.FibRetracement=Be,y.FibRetracementPaneView=fi,y.FibSpeedFan=Qe,y.FibSpeedFanPaneView=_i,y.FibSpiral=Je,y.FibSpiralPaneView=Pi,y.FibTimeExtension=Xe,y.FibTimeExtensionPaneView=wi,y.FibTimeZone=$e,y.FibTimeZonePaneView=xi,y.FibWedge=Ke,y.FibWedgePaneView=mi,y.FlagMark=In,y.FlagMarkPaneView=Yi,y.FlatTopBottom=qe,y.FlatTopBottomPaneView=di,y.Forecast=_n,y.ForecastPaneView=ki,y.GANN_FAN_ANGLES=me,y.GANN_LEVELS=Dt,y.GANN_SQUARE_DIVISIONS=hn,y.GANN_SQUARE_LEVELS=cn,y.GOLDEN_RATIO=Ye,y.GannBox=on,y.GannBoxPaneView=Hi,y.GannFan=an,y.GannFanPaneView=Li,y.GannSquare=dn,y.GannSquareFixed=ln,y.GannSquareFixedPaneView=Ii,y.GannSquarePaneView=Vi,y.Highlighter=mn,y.HighlighterPaneView=Ni,y.HorizontalLine=be,y.HorizontalLinePaneView=Bn,y.HorizontalLinePreviewRenderer=ps,y.HorizontalRay=Se,y.HorizontalRayPaneView=Jn,y.InfoLine=he,y.InfoLinePaneView=jn,y.InsidePitchfork=rn,y.InsidePitchforkPaneView=Si,y.InteractionHandler=Te,y.LinePreviewRenderer=fs,y.LongPosition=un,y.LongPositionPaneView=Ai,y.ModifiedSchiffPitchfork=sn,y.ModifiedSchiffPitchforkPaneView=Ci,y.Note=Sn,y.NotePaneView=Qi,y.PITCHFAN_LEVELS=Oe,y.ParallelChannel=ze,y.ParallelChannelPaneView=li,y.Path=De,y.PathPaneView=ri,y.Pin=Vn,y.PinPaneView=Ji,y.Pitchfan=tn,y.PitchfanPaneView=Ti,y.Polyline=ve,y.PolylinePaneView=oi,y.PreviewRenderer=re,y.PriceLabel=Ln,y.PriceLabelPaneView=ji,y.PriceNote=Hn,y.PriceNotePaneView=Xi,y.PriceRange=Ae,y.PriceRangePaneView=ni,y.Projection=xn,y.ProjectionPaneView=vi,y.Ray=ae,y.RayPaneView=Wn,y.Rectangle=He,y.RectanglePaneView=Zn,y.RegressionTrend=Ue,y.RegressionTrendPaneView=hi,y.RotatedRectangle=Le,y.RotatedRectanglePaneView=Kn,y.SchiffPitchfork=nn,y.SchiffPitchforkPaneView=Ri,y.ShortPosition=fn,y.ShortPositionPaneView=Ei,y.Signpost=En,y.SignpostPaneView=Ki,y.SinglePointInteractionHandler=cs,y.TOOL_DEFINITIONS=es,y.Table=Mn,y.TablePaneView=ts,y.TextAnnotation=yn,y.TextAnnotationPaneView=zi,y.ThreePointInteractionHandler=as,y.ThreePointPreviewRenderer=xs,y.ToolRegistry=Dn,y.TrendAngle=de,y.TrendAnglePaneView=Yn,y.TrendLine=oe,y.TrendLinePaneView=Nn,y.Triangle=Ve,y.TrianglePaneView=ei,y.TwoPointInteractionHandler=os,y.VERSION=vr,y.VerticalLine=Re,y.VerticalLinePaneView=Gn,y.VerticalLinePreviewRenderer=gs,y.applyStyle=A,y.calculatePriceChange=hs,y.distanceBetweenPoints=D,y.distanceToLine=Fn,y.distanceToLineSegment=V,y.drawArrowHead=ls,y.drawCircle=Un,y.drawControlPoint=vn,y.drawControlPoints=L,y.drawDashedLine=F,y.drawFilledArrowHead=kn,y.drawLabel=z,y.drawLine=R,y.drawRect=ie,y.drawText=st,y.extendLineToViewport=M,y.formatPercentage=us,y.formatPrice=ds,y.getLineAngle=zn,y.getLineAngleDegrees=Q,y.getToolRegistry=Dr,y.isPointNear=ns,y.lerp=ss,y.midpoint=k,y.rotatePoint=is,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})}));
2
+ //# sourceMappingURL=lightweight-charts-drawing.umd.js.map