"use strict";(self.webpackChunktradingview=self.webpackChunktradingview||[]).push([[7660],{59002:(t,e,i)=>{i.r(e),i.d(e,{LineToolEllipse:()=>_});var s=i(50151),n=i(4652),o=i(86441),r=i(12988),a=i(32679),l=i(88960),h=i(42752),p=i(73305),c=i(10568),d=i(64147);class _ extends c.InplaceTextLineDataSource{constructor(t,e,s,n){super(t,e??_.createProperties(t.backgroundTheme().spawnOwnership()),s,n),this._hasEditableCoordinates=new d.WatchedValue(!1),this._radius2=0,this._fakePoint=null,this.version=2,Promise.all([i.e(2870),i.e(2211),i.e(1583)]).then(i.bind(i,75649)).then((({EllipsePaneView:t})=>{this._setPaneViews([new t(this,this._model,this._openTextEditor.bind(this),this._closeTextEditor.bind(this),this.onSelectionChange.bind(this))])}))}snapTo45DegreesAvailable(){return!0}startChanging(t,e){super.startChanging(t,e),this._radius2=(0,n.distanceToLine)(this._screenPoint(0),this._screenPoint(1),this._screenPoint(2)).distance}addPoint(t,e,i){let s;const n=1===this._points.length?this._preparePoint(t,e):t;return s=this._addPointIntenal(n,e,i),2===this._points.length&&this._snapTo45DegreesApplicable(e)&&(s=this._addPointIntenal(this._calcPoint2(),e,i)),s&&(this._fakePoint=null),s}setPoint(t,e,i,r){const a={...e},l=this._model.mainSeries().interval();switch(t){case 0:case 1:const e=this._snapTo45DegreesApplicable(i);e&&this.snapPoint45Degree(a,this._points[0===t?1:0]),this._setPoint(t,{...a,interval:l}),this._setPoint(2,{...this._calcPoint2(void 0,void 0,e?void 0:this._radius2),interval:l}),e&&this._points[0].index===this._points[1].index&&this._fixVerticalDiameterPoints(this._points[0===t?0:1],this._points[0===t?1:0],this._points[2]);break;case 2:case 3:const r=this._screenPoint(0),h=this._screenPoint(1),p=(0,s.ensureNotNull)(this.pointToScreenPoint(a)),c=(0,n.distanceToLine)(r,h,p).distance,d=h.subtract(r),_=r.add(h).scaled(.5),P=new o.Point(-d.y,d.x).normalized(),u=_.add(P.scaled(c));this._setPoint(2,{...(0,s.ensureNotNull)(this.screenPointToPoint(u)),interval:l})}this._normalizePoints()}points(){const t=super.points();return 2===t.length&&this._fakePoint&&t.push(this._fakePoint),t}pointsCount(){return 3}name(){return"Ellipse"}migrateVersion(t,e,i){if(1===t&&2===this._points.length){const t=this._model.mainSeries().interval(),e=this._points[0].price,i=.5*(this._points[0].price+this._points[1].price);this._points[0]={price:i,index:this._points[0].index,interval:t},this._points[1]={price:i,index:this._points[1].index,interval:t},this._points.push({price:e,index:this._points[0].index,interval:t})}if(1===t&&2===this._timePoint.length){const t=this._timePoint[0].price,e=.5*(this._timePoint[0].price+this._timePoint[1].price);this._timePoint[0].price=e,this._timePoint[1].price=e;const i={price:t,offset:this._timePoint[0].offset,time_t:this._timePoint[0].time_t,interval:this._properties.childs().interval.value()};this._timePoint.push(i)}}template(){const t=super.template();return t.text=this.properties().childs().text.value(),t}editableTextProperties(){const t=this.properties().childs();return{text:t.text,textColor:t.textColor, textVisible:t.showLabel}}static createProperties(t,e){const i=new a.DefaultProperty({defaultName:"linetoolellipse",state:e,theme:t});return this._configureProperties(i),i}async _getPropertyDefinitionsViewModelClass(){return(await Promise.all([i.e(3401),i.e(3889),i.e(8009),i.e(6204),i.e(1963),i.e(8537)]).then(i.bind(i,99458))).EllipseCircleDefinitionsViewModel}_preparePoint(t,e){const i=this._preparePointInternal(t,this._points[0],e),s=this._points[1]??this._lastPoint;return this._snapTo45DegreesApplicable(e)&&this._points[0].index===s.index&&this._fixVerticalDiameterPoints(s,this._points[0],i),i}_applyTemplateImpl(t){super._applyTemplateImpl(t),this.properties().childs().text.setValue(t.text)}_createDataSourceBackgroundColorWV(){const{fillBackground:t,backgroundColor:e}=this.properties().childs();return(0,l.combine)((()=>t.value()?e.value():null),(0,h.convertPropertyToWatchedValue)(t).ownership(),(0,h.convertPropertyToWatchedValue)(e).ownership()).ownership()}static _configureProperties(t){super._configureProperties(t),t.hasChild("text")||t.addChild("text",new r.Property("")),t.addChild("linesColors",new p.LineToolColorsProperty([t.childs().color])),t.addChild("textsColors",new p.LineToolColorsProperty([t.childs().textColor],t.childs().showLabel)),t.addExcludedKey("text",1)}_preparePointInternal(t,e,i){const n={...t};return this._fakePoint=null,this._snapTo45DegreesApplicable(i)&&1===this._points.length&&(this.snapPoint45Degree(n,e),this._fakePoint=this._calcPoint2((0,s.ensureNotNull)(this.pointToScreenPoint(e)),(0,s.ensureNotNull)(this.pointToScreenPoint(n)))),n}_fixVerticalDiameterPoints(t,e,i){const n=(0,s.ensureNotNull)(this.pointToScreenPoint(t)),r=(0,s.ensureNotNull)(this.pointToScreenPoint(e)),a=this._model.timeScale(),l=a.indexToCoordinate(t.index),h=a.indexToCoordinate(i.index);let p=2*Math.abs(l-h);p*=e.price>t.price?1:-1,t.price=(0,s.ensureNotNull)(this.screenPointToPoint(new o.Point(n.x,r.y+p))).price}_calcPoint2(t,e,i){t=t??this._screenPoint(0),e=e??this._screenPoint(1);const n=Math.atan2(e.y-t.y,e.x-t.x)+Math.PI/2;i=i??e.subtract(t).length()/2;const r=t.add(e).scaled(.5).add(new o.Point(Math.cos(n)*i,Math.sin(n)*i));return(0,s.ensureNotNull)(this.screenPointToPoint(r))}_screenPoint(t){return(0,s.ensureNotNull)(this.pointToScreenPoint(this._points[t]))}}}}]);