UNPKG

lwc-plugin-min-max-price-markers

Version:
2 lines (1 loc) 7.5 kB
(function(h,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("lightweight-charts")):typeof define=="function"&&define.amd?define(["exports","lightweight-charts"],l):(h=typeof globalThis<"u"?globalThis:h||self,l(h.MinMaxPriceMarkers={},h.LightweightCharts))})(this,function(h,l){"use strict";var D=Object.defineProperty;var U=(h,l,d)=>l in h?D(h,l,{enumerable:!0,configurable:!0,writable:!0,value:d}):h[l]=d;var a=(h,l,d)=>(U(h,typeof l!="symbol"?l+"":l,d),d);const d=(s,...e)=>{for(const t of e)for(const i in t)t[i]===void 0||!Object.prototype.hasOwnProperty.call(t,i)||["__proto__","constructor","prototype"].includes(i)||(typeof t[i]!="object"||s[i]===void 0||Array.isArray(t[i])?s[i]=t[i]:S(s[i],t[i]));return s},S=(s,...e)=>d(s,...e),T=s=>"value"in s&&typeof s.value=="number",z=s=>"open"in s&&"high"in s&&"low"in s&&"close"in s,C="-apple-system, BlinkMacSystemFont, 'Trebuchet MS', Roboto, Ubuntu, sans-serif",v=s=>{const{fontSize:e}=s;let{fontStyle:t,fontFamily:i}=s;return t!==void 0?t=`${t} `:t="",i||(i=C),`${t}${e}px ${i}`},M=/[2-9]/g;class R{constructor(e=50){a(this,"_maxSize");a(this,"_actualSize",0);a(this,"_usageTick",1);a(this,"_oldestTick",1);a(this,"_tick2Labels",{});a(this,"_cache",new Map);this._maxSize=e}reset(){this._actualSize=0,this._cache.clear(),this._usageTick=1,this._oldestTick=1,this._tick2Labels={}}measureText(e,t,i){return this._getMetrics(e,t,i).width}yMidCorrection(e,t,i){const r=this._getMetrics(e,t,i);return((r.actualBoundingBoxAscent||0)-(r.actualBoundingBoxDescent||0))/2}_getMetrics(e,t,i){const r=i||M,o=String(t).replace(r,"0");if(this._cache.has(o))return this._cache.get(o).metrics;if(this._actualSize===this._maxSize){const f=this._tick2Labels[this._oldestTick];delete this._tick2Labels[this._oldestTick],this._cache.delete(f),this._oldestTick++,this._actualSize--}e.save(),e.textBaseline="middle";const n=e.measureText(o);return e.restore(),n.width===0&&t.length||(this._cache.set(o,{metrics:n,tick:this._usageTick}),this._tick2Labels[this._usageTick]=o,this._actualSize++,this._usageTick++),n}}const k={textColor:"#000",zOrder:"aboveSeries"},y=10,x=4+y;class V{constructor(){a(this,"_data",null);a(this,"_textWidthCache",new R);a(this,"_fontSize",10);a(this,"_fontFamily","Roboto, sans-serif");a(this,"_font",v({fontSize:this._fontSize,fontFamily:this._fontFamily}));a(this,"_zOrder","normal")}setData(e){this._data=e}setParams(e){const{fontSize:t,fontFamily:i,zOrder:r}=e;(this._fontSize!==t||this._fontFamily!==i)&&(this._fontSize=t,this._fontFamily=i,this._font=v({fontSize:this._fontSize,fontFamily:this._fontFamily}),this._textWidthCache.reset()),this._zOrder=r}draw(e){this._zOrder!=="aboveSeries"&&e.useBitmapCoordinateSpace(t=>{this._drawImpl(t)})}drawBackground(e){this._zOrder==="aboveSeries"&&e.useBitmapCoordinateSpace(t=>{this._drawImpl(t)})}_drawImpl(e){const{context:t,horizontalPixelRatio:i,verticalPixelRatio:r}=e;if(this._data!==null){t.textBaseline="middle",t.font=this._font;for(let o=0;o<this._data.length;o++){const n=this._data[o];n.text&&(n.text.width=this._textWidthCache.measureText(t,n.text.content),n.text.height=this._fontSize,n.text.x=n.variant==="left"?n.x-n.text.width-x:n.x+x,O(n,t,i,r))}}}}const O=(s,e,t,i)=>{s.text&&(e.fillStyle=s.color,q(e,s.text.content,s.text.x,s.text.y,t,i),e.strokeStyle=s.color,I(s.variant==="left",e,F(s,t,i)))},F=(s,e,t)=>({x:Math.round(s.x*e),y:s.y*t,pixelRatio:e}),I=(s,e,t)=>{const i=t.x,r=t.y;e.beginPath(),e.lineWidth=1*t.pixelRatio,s?(e.moveTo(i,r),e.lineTo(i-y,r)):(e.moveTo(i,r),e.lineTo(i+y,r)),e.stroke()},q=(s,e,t,i,r,o)=>{s.save(),s.scale(r,o),s.fillText(e,t,i),s.restore()};class L{constructor(e){a(this,"_chart");a(this,"_series");a(this,"_data",[]);a(this,"_options");a(this,"_invalidated",!0);a(this,"_dataInvalidated",!0);a(this,"_markers",[]);a(this,"_renderer",new V);this._chart=e.chart,this._series=e.series,this._options=e.options,this._data=[]}renderer(){if(!this._series.options().visible)return null;this._invalidated&&this._makeValid();const e=this._chart.options().layout;return this._renderer.setParams({fontSize:e.fontSize,fontFamily:e.fontFamily,zOrder:this._options.zOrder}),this._renderer.setData(this._data),this._renderer}setMarkers(e){this._markers=e.markers,this.update("data")}update(e){this._invalidated=!0,e==="data"&&(this._dataInvalidated=!0)}updateOptions(e){this._invalidated=!0,this._options=e}zOrder(){return this._options.zOrder==="aboveSeries"?"top":this._options.zOrder}_makeValid(){const e=this._chart.timeScale(),t=this._markers;if(t!=null&&t.length&&(this._dataInvalidated&&(this._data=t.map(i=>({time:i.time,x:0,y:0,color:this._options.textColor,text:void 0,variant:i.variant})),this._dataInvalidated=!1),!!this._data.length)){for(let i=0;i<this._data.length;i++){const r=this._data[i],n=this._markers[i].price,f=this._series.dataByIndex(r.time,l.MismatchDirection.None),_=this._series.priceToCoordinate(n);!f||!_||(r.x=e.logicalToCoordinate(r.time),r.y=_,r.text={content:`${this._series.priceFormatter().format(n)}`,x:0,y:_,width:0,height:0})}this._invalidated=!1}}}class B{constructor(e){a(this,"_paneView",null);a(this,"_chart",null);a(this,"_series",null);a(this,"_requestUpdate");a(this,"_recalculationRequired",!0);a(this,"_markers",[]);a(this,"_options",k);a(this,"_dataChangedHandler",e=>this._onDataChanged(e));a(this,"_visibleRangeChanged",e=>this._onVisibleRangeChanged(e));this._options=e!=null&&e.options?S(k,e.options):k}applyOptions(e){this._options=S(this._options,e)}attached(e){this._recalculateMarkers(),this._chart=e.chart,this._series=e.series,this._paneView=new L({series:this._series,chart:this._chart,options:this._options}),this._requestUpdate=e.requestUpdate,this._recalculationRequired=!0,this.requestUpdate(),this._series.subscribeDataChanged(this._dataChangedHandler),this._chart.timeScale().subscribeVisibleLogicalRangeChange(this._visibleRangeChanged)}requestUpdate(){this._requestUpdate&&this._requestUpdate()}detached(){var e,t;(e=this._chart)==null||e.timeScale().unsubscribeVisibleLogicalRangeChange(this._visibleRangeChanged),(t=this._series)==null||t.unsubscribeDataChanged(this._dataChangedHandler),this._requestUpdate=void 0,this._markers=[],this._paneView=null,this._series=null,this._chart=null}paneViews(){return this._paneView?[this._paneView]:[]}updateAllViews(){this._paneView&&(this._recalculateMarkers(),this._paneView.setMarkers({markers:this._markers}),this._paneView.updateOptions(this._options),this._paneView.update())}_onDataChanged(e){!this._chart||!this._series||(this._recalculationRequired=!0,this.requestUpdate())}_onVisibleRangeChanged(e){!this._chart||!this._series||!e||(this._recalculationRequired=!0,this.requestUpdate())}_recalculateMarkers(){if(!this._recalculationRequired||!this._chart||!this._series)return;this._markers=[];const e=this._chart.timeScale(),t=this._series.data(),i=e.getVisibleLogicalRange();if(!i||!t.length)return;const r=this._series.barsInLogicalRange(i);if(!r)return;const o=r.from,n=r.to;if(!o||!n)return;const f=t.length;let _=-1/0,p=null,m=1/0,g=null;for(let b=0;b<f;b++){const c=t[b],u=c.time;u<o||u>n||(z(c)?(c.high>_&&(_=c.high,p=u),c.low<m&&(m=c.low,g=u)):T(c)&&(c.value>_&&(_=c.value,p=u),c.value<m&&(m=c.value,g=u)))}if(!p||!g)return;const w=g>p;this._markers.push({time:e.timeToIndex(p,!0),price:_,variant:w?"right":"left"}),this._markers.push({time:e.timeToIndex(g,!0),price:m,variant:w?"left":"right"}),this._recalculationRequired=!1}}h.MinMaxPriceMarkers=B,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});