@tradecanvas/commons 1.24.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=function(e){return e[e.Background=0]=`Background`,e[e.Main=1]=`Main`,e[e.Panel=2]=`Panel`,e[e.Overlay=3]=`Overlay`,e[e.UI=4]=`UI`,e[e.Hover=5]=`Hover`,e}({}),t={"background.color":`color`,"panes.background":`color`,"panes.separatorColor":`color`,"panes.titleColor":`color`,"grid.horizontal.visible":`boolean`,"grid.horizontal.color":`color`,"grid.horizontal.style":`lineStyle`,"grid.horizontal.width":`width`,"grid.vertical.visible":`boolean`,"grid.vertical.color":`color`,"grid.vertical.style":`lineStyle`,"grid.vertical.width":`width`,"crosshair.horizontal.visible":`boolean`,"crosshair.horizontal.color":`color`,"crosshair.horizontal.style":`lineStyle`,"crosshair.horizontal.width":`width`,"crosshair.vertical.visible":`boolean`,"crosshair.vertical.color":`color`,"crosshair.vertical.style":`lineStyle`,"crosshair.vertical.width":`width`,"crosshair.labelBackground":`color`,"crosshair.labelTextColor":`color`,"axis.price.lineColor":`color`,"axis.price.textColor":`color`,"axis.time.lineColor":`color`,"axis.time.textColor":`color`,"legend.textColor":`color`,"legend.labelColor":`color`,"watermark.color":`color`,"lastPrice.visible":`boolean`,"lastPrice.upColor":`color`,"lastPrice.downColor":`color`,"lastPrice.style":`lineStyle`,"lastPrice.width":`width`,"volume.upColor":`color`,"volume.downColor":`color`,"sessionBreaks.color":`color`,"sessionBreaks.style":`lineStyle`,"sessionBreaks.width":`width`,"highLow.color":`color`,"trading.buyColor":`color`,"trading.sellColor":`color`,"trading.profitColor":`color`,"trading.lossColor":`color`,"trading.entryColor":`color`,"markers.longColor":`color`,"markers.shortColor":`color`,"markers.neutralColor":`color`,"tradeZones.profitColor":`color`,"tradeZones.lossColor":`color`,"tradeZones.activeColor":`color`,"drawings.handleColor":`color`,"series.candlestick.upColor":`color`,"series.candlestick.downColor":`color`,"series.candlestick.wickUpColor":`color`,"series.candlestick.wickDownColor":`color`,"series.heikinAshi.upColor":`color`,"series.heikinAshi.downColor":`color`,"series.heikinAshi.wickUpColor":`color`,"series.heikinAshi.wickDownColor":`color`,"series.hollowCandle.upColor":`color`,"series.hollowCandle.downColor":`color`,"series.volumeCandles.upColor":`color`,"series.volumeCandles.downColor":`color`,"series.volumeCandles.wickUpColor":`color`,"series.volumeCandles.wickDownColor":`color`,"series.equivolume.upColor":`color`,"series.equivolume.downColor":`color`,"series.equivolume.wickUpColor":`color`,"series.equivolume.wickDownColor":`color`,"series.bar.upColor":`color`,"series.bar.downColor":`color`,"series.hiLo.upColor":`color`,"series.hiLo.downColor":`color`,"series.renko.upColor":`color`,"series.renko.downColor":`color`,"series.lineBreak.upColor":`color`,"series.lineBreak.downColor":`color`,"series.rangeBars.upColor":`color`,"series.rangeBars.downColor":`color`,"series.kagi.upColor":`color`,"series.kagi.downColor":`color`,"series.pointAndFigure.upColor":`color`,"series.pointAndFigure.downColor":`color`,"series.baseline.upColor":`color`,"series.baseline.downColor":`color`,"series.baseline.lineWidth":`width`,"series.line.color":`color`,"series.line.lineWidth":`width`,"series.stepLine.color":`color`,"series.stepLine.lineWidth":`width`,"series.lineWithMarkers.color":`color`,"series.lineWithMarkers.lineWidth":`width`,"series.area.lineColor":`color`,"series.area.lineWidth":`width`,"series.area.topColor":`color`,"series.area.bottomColor":`color`,"series.hlcArea.lineColor":`color`,"series.hlcArea.lineWidth":`width`,"series.hlcArea.topColor":`color`,"series.hlcArea.bottomColor":`color`},n={color:`#4c8dff`,lineWidth:1,lineStyle:`solid`,fillColor:`rgba(76, 141, 255, 0.1)`,fillOpacity:.1,fontSize:12},r={enabled:!0,orderColors:{buy:`#1fa874`,sell:`#e8505b`},positionColors:{profit:`#1fa874`,loss:`#e8505b`,entry:`#4c8dff`},depthOverlay:{enabled:!1,bidColor:`rgba(31, 168, 116,0.15)`,askColor:`rgba(232, 80, 91,0.15)`,maxWidth:100},contextMenu:{enabled:!0},lineButtons:{cancel:!0,close:!0,reverse:!0,removeStops:!0},fillMarks:!0,pricePrecision:2,dragThreshold:3},i={longColor:`#1fa874`,shortColor:`#e8505b`,neutralColor:`#9E9E9E`,arrowSize:12,showLabel:!0,showConfidence:!0},a={profitColor:`#1fa874`,lossColor:`#e8505b`,activeColor:`#4c8dff`,fillOpacity:.12,borderWidth:1,showLabel:!0,showPnl:!0},o={enabled:!0,maxRetries:1/0,baseDelay:1e3,maxDelay:3e4,backoffMultiplier:2},s={historyLimit:500,autoScroll:!0,showCurrentPriceLine:!0,aggregateTicks:!1},c=[`change`,`changePercent`,`open`,`high`,`low`,`prevClose`,`volume`,`bid`,`ask`,`time`];function l(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.symbol==`string`?t.symbol.trim():``;if(!n||n.length>64||!u(t.last))return null;let r={symbol:n,last:t.last};for(let e of c){let n=t[e];u(n)&&(r[e]=n)}let i=r.prevClose??r.open;if(r.change===void 0&&i!==void 0&&(r.change=r.last-i),r.changePercent===void 0&&r.change!==void 0){let e=r.last-r.change;e!==0&&(r.changePercent=r.change/e*100)}return r}function u(e){return typeof e==`number`&&Number.isFinite(e)}var d=300,f=1e3,p=(e,t)=>{if(typeof e!=`string`)return;let n=e.trim();return n?n.slice(0,t):void 0},ee=e=>{if(typeof e==`string`)try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.href:void 0}catch{return}};function te(e,t=20){if(!Array.isArray(e))return[];let n=[];for(let t of e){if(!t||typeof t!=`object`)continue;let e=t,r=p(e.title,d);if(!r||typeof e.time!=`number`||!Number.isFinite(e.time))continue;let i={title:r,time:e.time},a=ee(e.url);a&&(i.url=a);let o=p(e.source,d);o&&(i.source=o);let s=p(e.summary,f);s&&(i.summary=s);let c=p(e.id,d);c&&(i.id=c),n.push(i)}return n.sort((e,t)=>t.time-e.time).slice(0,Math.max(0,t))}function ne(e,t,n){return Math.max(t,Math.min(n,e))}function re(e,t,n){return e+(t-e)*n}function ie(e,t,n){return e===t?0:(n-e)/(t-e)}function ae(e,t){return Math.round(e/t)*t}function m(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function oe(e,t,n){return m(m(t-e,!1)/(n-1),!0)}function se(e){return e>0xe8d4a51000?e:e*1e3}function ce(e){return{time:se(e.time??e.t??0),open:e.open??e.o??0,high:e.high??e.h??0,low:e.low??e.l??0,close:e.close??e.c??0,volume:e.volume??e.v??0}}function le(e,t,n){let r=Math.max(0,t),i=Math.min(e.length,n+1);return e.slice(r,i)}function ue(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=n+r>>>1;if(e[i].time<t)n=i+1;else if(e[i].time>t)r=i-1;else return i}return n}function de(e,t,n,r=.05){if(e.length===0)return{min:0,max:1};let i=Math.max(0,t),a=Math.min(e.length-1,n),o=1/0,s=-1/0;for(let t=i;t<=a;t++)e[t].low<o&&(o=e[t].low),e[t].high>s&&(s=e[t].high);if(o===1/0)return{min:0,max:1};let c=s-o||1;return{min:o-c*r,max:s+c*r}}function fe(e,t){return{...e,high:Math.max(e.high,t.price),low:Math.min(e.low,t.price),close:t.price,volume:e.volume+(t.volume??0),time:t.time}}function pe(e,t=1){let n=e.slice(1);return(n.length===3||n.length===4)&&(n=[...n.slice(0,3)].map(e=>e+e).join(``)),`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}function me(e,t){let n=e.trim();if(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n))return pe(n,t);let r=n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);return r?`rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})`:e}function he(e,t,n){let r=e=>(e=e.replace(`#`,``),e.length===3&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),{r:parseInt(e.slice(0,2),16),g:parseInt(e.slice(2,4),16),b:parseInt(e.slice(4,6),16)}),i=r(e),a=r(t);return`rgb(${Math.round(i.r+(a.r-i.r)*n)},${Math.round(i.g+(a.g-i.g)*n)},${Math.round(i.b+(a.b-i.b)*n)})`}var h=6e4,g=1440*h,_=15*h,ge=8192,v=7*g,_e=4096,ve=new Set([`UTC`,`Etc/UTC`,`GMT`,`Etc/GMT`,`UCT`,`Etc/UCT`,`Universal`,`Etc/Universal`,`Zulu`,`Etc/Zulu`]),ye=new Map,y=new Map,be=new Map;function xe(e){let t=ye.get(e);return t||(t=new Intl.DateTimeFormat(`en-US`,{timeZone:e,hourCycle:`h23`,year:`numeric`,month:`numeric`,day:`numeric`,hour:`numeric`,minute:`numeric`,second:`numeric`}),ye.set(e,t)),t}function b(e){if(!e)return!1;try{return xe(e),!0}catch{return!1}}function x(e,t){if(!Number.isFinite(t)||ve.has(e))return 0;let n=be.get(e);n||(n=new Map,be.set(e,n));let r=Math.floor(t/v),i=n.get(r);return i||(i=Se(e,r*v),n.size>=_e&&n.clear(),n.set(r,i)),t<i.change?i.before:i.after}function Se(e,t){let n=S(e,t),r=t+v-_,i=S(e,r);if(i===n)return{before:n,change:1/0,after:i};let a=t;for(;r-a>_;){let t=a+Math.floor((r-a)/_/2)*_;S(e,t)===n?a=t:r=t}return{before:n,change:r,after:i}}function S(e,t){let n=Math.floor(t/_),r=`${e}|${n}`,i=y.get(r);if(i!==void 0)return i;let a=n*_,o=1970,s=1,c=1,l=0,u=0,d=0;for(let t of xe(e).formatToParts(new Date(a))){let e=Number(t.value);switch(t.type){case`year`:o=e;break;case`month`:s=e;break;case`day`:c=e;break;case`hour`:l=e%24;break;case`minute`:u=e;break;case`second`:d=e;break}}let f=Math.round((Date.UTC(o,s-1,c,l,u,d)-a)/h);return y.size>=ge&&y.clear(),y.set(r,f),f}function C(e,t){return e===null?-new Date(t).getTimezoneOffset():typeof e==`number`?e:x(e,t)}function Ce(e,t){let n=e-C(t,e-g)*h;if(n+C(t,n)*h===e)return n;let r=e-C(t,e+g)*h;return r+C(t,r)*h===e?r:n}var we=new Map;function Te(e,t,n){let r=`${e}|${JSON.stringify(t)}|${n===null?`local`:typeof n==`number`?`fixed:${n}`:n}`,i=we.get(r);if(i)return i;let a=n===null?void 0:typeof n==`number`?`UTC`:n,o;try{o=new Intl.DateTimeFormat(e,{...t,timeZone:a})}catch{o=new Intl.DateTimeFormat(`en-US`,{...t,timeZone:a})}let s=typeof n==`number`?n*h:0;return i=e=>o.format(new Date(e+s)),we.set(r,i),i}var Ee={"1s":1e3,"5s":5e3,"15s":15e3,"30s":3e4,"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"45m":27e5,"1h":36e5,"2h":72e5,"3h":108e5,"4h":144e5,"6h":216e5,"8h":288e5,"12h":432e5,"1d":864e5,"2d":1728e5,"3d":2592e5,"1w":6048e5,"2w":12096e5,"1M":2592e6,"3M":7776e6,"6M":15552e6,"12M":31536e6},w={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5,M:2592e6},De=/^([1-9]\d*)([smhdwM])$/;function T(e){let t=De.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isSafeInteger(n)?{count:n,unit:t[2]}:null}var Oe=1e6;function ke(e){let t=/^([1-9]\d*)T$/.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isSafeInteger(n)&&n<=Oe?n:null}function Ae(e){return T(e)!==null}function E(e){let t=Ee[e];if(t!==void 0)return t;let n=T(e);return n?n.count*w[n.unit]:NaN}function je(e,t){let n=new Date(e),r=E(t);return r>=864e5?n.toLocaleDateString(void 0,{month:`short`,day:`numeric`}):r>=36e5?n.toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`}):n.toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Me(e,t){let n=E(t);return Math.floor(e/n)*n}function Ne(e,t){if(t===null){let t=new Date(e);return{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate(),hours:t.getHours(),minutes:t.getMinutes()}}let n=new Date(e+C(t,e)*6e4);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hours:n.getUTCHours(),minutes:n.getUTCMinutes()}}function Pe(e){return e.hours===0&&e.minutes===0}var Fe=20*36e5;function Ie(e){let t=Math.min(e.length,64);if(t<2)return;let n=e=>e>0xe8d4a51000?e:e*1e3,r=1/0;for(let i=1;i<t;i++){let t=Math.abs(n(e[i].time)-n(e[i-1].time));t>0&&t<r&&(r=t)}return r===1/0?void 0:r>=Fe}function Le(e,t=Date.now()){let n=C(e,t),r=n>=0?`+`:`-`,i=Math.abs(n),a=Math.floor(i/60),o=i%60;return o===0?`UTC${r}${a}`:`UTC${r}${a}:${String(o).padStart(2,`0`)}`}var Re=Date.UTC(1970,0,5);function ze(e,t,n=1){let{count:r,unit:i}=T(t)??{count:1,unit:`m`};if(i===`s`||i===`m`||i===`h`||i===`d`){let t=r*w[i];return Math.floor(e/t)*t}let a=new Date(e);if(i===`w`){let e=w.d,t=(a.getUTCDay()-n+7)%7,i=Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate()-t);if(r<=1)return i;let o=Math.floor((i-Re)/(7*e));return Re+Math.floor(o/r)*r*7*e}let o=a.getUTCFullYear()*12+a.getUTCMonth(),s=Math.floor(o/r)*r;return Date.UTC(Math.floor(s/12),s%12,1)}var Be=64,D=new Map;function Ve(e,t){let n=`${e}|${t}`,r=D.get(n);return r||(D.size>=Be&&D.clear(),r=new Intl.NumberFormat(e,{minimumFractionDigits:t,maximumFractionDigits:t}),D.set(n,r)),r}function He(e,t=2,n=`en-US`){return Ve(n,t).format(e)}function Ue(e,t){if(!(t>e)||!Number.isFinite(e)||!Number.isFinite(t))return 2;let n=oe(e,t,8);return n>0&&n<1?Math.ceil(-Math.log10(n))+1:2}function We(e,t,n,r=2,i=`en-US`){if((t===`percentage`||t===`indexedTo100`)&&n&&n!==0){if(t===`percentage`){let t=(e/n-1)*100;return`${t>0?`+`:``}${t.toFixed(2)}%`}return He(e/n*100,2,i)}return He(e,r,i)}function Ge(e,t,n=1){let r=Number.isInteger(n)&&n>1?n:1;if(!Number.isFinite(e)||!Number.isInteger(t)||t<2)return String(e);let i=t*r,a=Math.round(Math.abs(e)*i),o=Math.floor(a/i),s=a-o*i,c=Math.floor(s/r),l=String(t-1).length,u=r>1?String(Math.floor((s-c*r)/r*10)):``;return`${e<0&&a>0?`-`:``}${o}'${String(c).padStart(l,`0`)}${u}`}function Ke(e){if(!Number.isInteger(e.denominator)||e.denominator<2)return null;let t=Number.isInteger(e.subDenominator)&&(e.subDenominator??0)>1?e.subDenominator:1;return 1/(e.denominator*t)}function qe(e){return e?typeof e==`function`?e:Ke(e)===null?null:t=>Ge(t,e.denominator,e.subDenominator):null}function Je(e){return e>=1e9?(e/1e9).toFixed(2)+`B`:e>=1e6?(e/1e6).toFixed(2)+`M`:e>=1e3?(e/1e3).toFixed(2)+`K`:e.toFixed(0)}function Ye(e){let t=0;for(let n of e){let e=n.toString(),r=e.indexOf(`.`);r>=0&&(t=Math.max(t,e.length-r-1))}return Math.min(t,8)}var Xe=[`close`,`open`,`high`,`low`,`hl2`,`hlc3`,`ohlc4`,`hlcc4`];function Ze(e){return typeof e==`string`&&Xe.includes(e)}function Qe(e,t){switch(t){case`open`:return e.open;case`high`:return e.high;case`low`:return e.low;case`hl2`:return(e.high+e.low)/2;case`hlc3`:return(e.high+e.low+e.close)/3;case`ohlc4`:return(e.open+e.high+e.low+e.close)/4;case`hlcc4`:return(e.high+e.low+2*e.close)/4;default:return e.close}}var $e=/^ind:([^:]+):(.+)$/;function et(e,t){return`ind:${e}:${t}`}function tt(e){if(typeof e!=`string`)return null;let t=$e.exec(e);return t?{instanceId:t[1],key:t[2]}:null}var nt=864e5;function rt(e,t,n=1){let r=[],i=null;for(let a of e){let e=ze(a.time,t,n);i===null||e!==i.time?(i={time:e,open:a.open,high:a.high,low:a.low,close:a.close,volume:a.volume},r.push(i)):(a.high>i.high&&(i.high=a.high),a.low<i.low&&(i.low=a.low),i.close=a.close,i.volume+=a.volume)}return r}var it=e=>e===`s`||e===`m`||e===`h`||e===`d`;function at(e,t){let n=T(e),r=T(t);if(!n||!r)return!1;let i=E(e);return n.unit===`d`&&n.count>1?!1:it(r.unit)?it(n.unit)&&E(t)%i===0:n.unit===r.unit?r.count%n.count===0:it(n.unit)&&nt%i===0}function ot(e,t){let n=null,r=0;for(let i of t){if(!at(i,e))continue;let t=E(i);t>r&&(n=i,r=t)}return n}function st(e,t){if(!e)return 0;if(e===t)return 1e3;if(e.startsWith(t))return 600-Math.min(100,e.length-t.length);let n=e.indexOf(t);return n>=0?300-Math.min(100,n):0}function ct(e,t,n=50,r){let i=t.trim().toUpperCase();if(!i)return e.slice(0,n);let a=[];for(let t of e){let e=Math.max(st(t.symbol.toUpperCase(),i),st((t.description??``).toUpperCase(),i)*.8);e>0&&a.push({info:t,score:e+(r?.(t)??0)})}return a.sort((e,t)=>t.score-e.score||e.info.symbol.localeCompare(t.info.symbol)),a.slice(0,n).map(e=>e.info)}function lt(e){let t=typeof e==`number`?e:Number(e);if(!Number.isFinite(t)||t<=0)return 0;for(let e=0;e<=12;e++){let n=t*10**e;if(Math.abs(n-Math.round(n))<1e-9*Math.max(1,n))return e}return 12}function ut(e){let t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return null;let n=Number(t[1]),r=Number(t[2]);return n===24&&r===0?1440:n<24&&r<60?n*60+r:null}var O=864e5,k=6e4,dt=8;function ft(e,t){let n=e?.timezone,r=(e?.sessions??[]).flatMap(e=>{let t=ut(e.start),n=ut(e.end);return t===null||n===null||t===n?[]:[{start:t,end:n,days:Array.isArray(e.days)?e.days:null}]});if(!n||!b(n)||r.length===0||!Number.isFinite(t))return{state:`always`,next:null};let i=x(n,t)*k,a=Math.floor((t+i)/O)*O,o=e=>e-x(n,e-x(n,e-i)*k)*k,s=[];for(let e=-1;e<=dt;e++){let t=a+e*O,n=(Math.floor(t/O)+4)%7;for(let e of r){if(e.days&&!e.days.includes(n))continue;let r=t+e.start*k,i=(e.end>e.start?t:t+O)+e.end*k;s.push([o(r),o(i)])}}s.sort((e,t)=>e[0]-t[0]);let c=[];for(let[e,t]of s){let n=c[c.length-1];n&&e<=n[1]?c[c.length-1]=[n[0],Math.max(n[1],t)]:c.push([e,t])}let l=c.find(([e,n])=>e<=t&&t<n);if(l)return{state:`open`,next:l[1]};let u=c.find(([e])=>e>t);return{state:`closed`,next:u?u[0]:null}}var pt=48,mt=2e3,ht=1e4;function gt(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(t.length>=pt)break;if(typeof n!=`object`||!n)continue;let{value:e,visible:r,color:i}=n;if(typeof e!=`number`||!Number.isFinite(e)||Math.abs(e)>ht||r!==void 0&&typeof r!=`boolean`)continue;let a={value:e,visible:r??!0};typeof i==`string`&&i&&(a.color=i),t.push(a)}return t}function _t(e,t){switch(e.kind){case`boolean`:return typeof t==`boolean`?t:void 0;case`number`:return typeof t!=`number`||!Number.isFinite(t)?void 0:Math.min(e.max??1/0,Math.max(e.min??-1/0,t));case`choice`:return typeof t==`string`&&e.choices.some(e=>e.value===t)?t:void 0;case`levels`:return gt(t);case`text`:return typeof t==`string`?t.slice(0,mt):void 0}}function vt(e,t){if(!e||typeof t!=`object`||!t)return{};let n={};for(let[r,i]of Object.entries(t)){let t=e[r];if(!t)continue;let a=_t(t,i);a!==void 0&&(n[r]=a)}return n}function yt(e){return Array.isArray(e)?e.map(e=>({...e})):e}function bt(e,t,n){let r=e?.[n];return r?yt((t&&n in t?_t(r,t[n]):void 0)??r.default):t?.[n]}function xt(e,t){let n={};for(let r of Object.keys(e??{}))n[r]=bt(e,t,r);return n}var St=[`solid`,`dashed`,`dotted`],Ct=64,wt=2e3,Tt=20,Et=200;function A(e,t,n){return typeof e==`number`&&Number.isFinite(e)?Math.min(n,Math.max(t,e)):void 0}function Dt(e){return typeof e==`string`&&e.length>0&&e.length<=Ct?e:void 0}function Ot(e){if(typeof e!=`object`||!e)return{};let t=e,n={},r=Dt(t.color);r!==void 0&&(n.color=r);let i=A(t.lineWidth,.5,Tt);i!==void 0&&(n.lineWidth=i),St.includes(t.lineStyle)&&(n.lineStyle=t.lineStyle);let a=Dt(t.fillColor);a!==void 0&&(n.fillColor=a);let o=A(t.fillOpacity,0,1);o!==void 0&&(n.fillOpacity=o);let s=A(t.fontSize,6,Et);return s!==void 0&&(n.fontSize=s),typeof t.text==`string`&&(n.text=t.text.slice(0,wt)),n}var j=e=>typeof e==`number`&&Number.isFinite(e)&&e>0,M=(e,t,n)=>typeof e==`number`&&Number.isInteger(e)&&e>=t&&e<=n,N=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function kt(e){if(!N(e))return{};let t={};if(N(e.renko)){let{boxSize:n,atrPeriod:r}=e.renko;t.renko={...j(n)||n===`atr`?{boxSize:n}:{},...M(r,1,500)?{atrPeriod:r}:{}}}if(N(e.lineBreak)){let{lines:n}=e.lineBreak;t.lineBreak=M(n,1,10)?{lines:n}:{}}if(N(e.kagi)){let{reversal:n,reversalType:r}=e.kagi;t.kagi={...j(n)?{reversal:n}:{},...r===`percent`||r===`price`?{reversalType:r}:{}}}if(N(e.pointAndFigure)){let{boxSize:n,reversal:r}=e.pointAndFigure;t.pointAndFigure={...j(n)||n===`auto`?{boxSize:n}:{},...M(r,1,10)?{reversal:r}:{}}}if(N(e.rangeBars)){let{range:n}=e.rangeBars;t.rangeBars=j(n)||n===`auto`?{range:n}:{}}return t}var At=`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,jt={family:At,sizeSmall:10,sizeMedium:12,sizeLarge:14},P={amber:`#f2a93b`,up:`#1fa874`,down:`#e8505b`,ochre:`#c98316`,blue:`#4c8dff`,violet:`#a57cff`,cyan:`#1398a8`,rose:`#e25592`,neutral:`#7d8696`,ink:`#0c1016`},Mt=.22;function F(e){return me(e,Mt)}var I=`#2eb88a`,L=`#e85a67`,Nt=[P.blue,P.ochre,P.violet,P.cyan,P.rose],R={name:`dark`,background:P.ink,text:`#d9dde4`,textSecondary:`#7d8696`,grid:`#161b23`,crosshair:`#8a93a3`,candleUp:I,candleDown:L,candleUpWick:I,candleDownWick:L,lineColor:P.amber,areaTopColor:`rgba(242, 169, 59, 0.32)`,areaBottomColor:`rgba(242, 169, 59, 0.0)`,volumeUp:F(I),volumeDown:F(L),axisLine:`#1f2630`,axisLabel:`#9aa3b2`,axisLabelBackground:`#1f2630`,font:jt},z={name:`light`,background:`#ffffff`,text:`#0f131a`,textSecondary:`#6b7380`,grid:`#eef0f3`,crosshair:`#8a93a3`,candleUp:`#16a36a`,candleDown:`#d9414f`,candleUpWick:`#16a36a`,candleDownWick:`#d9414f`,lineColor:`#c77a0a`,areaTopColor:`rgba(199, 122, 10, 0.24)`,areaBottomColor:`rgba(199, 122, 10, 0.0)`,volumeUp:F(`#16a36a`),volumeDown:F(`#d9414f`),axisLine:`#dde1e7`,axisLabel:`#5b6472`,axisLabelBackground:`#eef0f3`,font:jt},B={name:`terminal`,background:`#0E0E0E`,text:`#C0C0C0`,textSecondary:`#8A8A8A`,grid:`#1A1A1A`,crosshair:`#666666`,candleUp:`#00FF87`,candleDown:`#FF3B4D`,candleUpWick:`#00FF87`,candleDownWick:`#FF3B4D`,lineColor:`#3D8BFD`,areaTopColor:`rgba(61, 139, 253, 0.3)`,areaBottomColor:`rgba(61, 139, 253, 0.0)`,volumeUp:`rgba(0, 255, 135, 0.2)`,volumeDown:`rgba(255, 59, 77, 0.2)`,axisLine:`#1A1A1A`,axisLabel:`#8A8A8A`,axisLabelBackground:`#1A1A1A`,font:{family:`'Roboto Mono', 'JetBrains Mono', 'SF Mono', Consolas, monospace`,sizeSmall:10,sizeMedium:12,sizeLarge:14}},Pt=new Set([R.volumeUp,R.volumeDown,z.volumeUp,z.volumeDown,B.volumeUp,B.volumeDown]);function V(e){let t=(e,t)=>{if(!Pt.has(e))return e;let n=F(t);return n===t?e:n};return{up:t(e.volumeUp,e.candleUp),down:t(e.volumeDown,e.candleDown)}}var Ft=[`solid`,`dashed`,`dotted`],It=20,Lt=64,Rt=2,zt=[/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,/^[a-z]{3,30}$/i,/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i];function H(e){return typeof e==`string`&&e.length<=Lt&&zt.some(t=>t.test(e.trim()))}function Bt(e,t){switch(e){case`color`:return H(t);case`lineStyle`:return Ft.includes(t);case`width`:return typeof t==`number`&&Number.isFinite(t)&&t>0&&t<=It;case`boolean`:return typeof t==`boolean`}}function Vt(e){return Object.prototype.hasOwnProperty.call(t,e)}function Ht(e){let n={},r=[];if(typeof e!=`object`||!e||Array.isArray(e))return{overrides:{},rejected:r};for(let[i,a]of Object.entries(e))Vt(i)?a===null?n[i]=null:Bt(t[i],a)?n[i]=a:r.push(i):r.push(i);return{overrides:n,rejected:r}}function Ut(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let{background:t,separator:n}=e,r={...H(t)?{background:t}:{},...H(n)?{separator:n}:{}};return Object.keys(r).length>0?r:null}var Wt=/^[A-Za-z0-9_]{1,32}$/;function Gt(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e)){if(!Wt.test(n)||typeof r!=`object`||!r)continue;let{lineStyle:e,visible:i}=r,a={...Ft.includes(e)?{lineStyle:e}:{},...typeof i==`boolean`?{visible:i}:{}};Object.keys(a).length>0&&(t[n]=a)}return Object.keys(t).length>0?t:void 0}function Kt(e,t,n=1){return e===`solid`?[]:e===`dotted`?[n,n*2]:[...t]}function qt(e,t,n){let r=e=>t(`series.${n}.${e}`),i=r(`upColor`)??t(`series.candlestick.upColor`),a=r(`downColor`)??t(`series.candlestick.downColor`),o=i??e.candleUp,s=a??e.candleDown;return{up:o,down:s,wickUp:r(`wickUpColor`)??t(`series.candlestick.wickUpColor`)??(i===void 0?e.candleUpWick:o),wickDown:r(`wickDownColor`)??t(`series.candlestick.wickDownColor`)??(a===void 0?e.candleDownWick:s),line:r(`color`)??r(`lineColor`)??t(`series.line.color`)??e.lineColor,lineWidth:r(`lineWidth`)??t(`series.line.lineWidth`)??Rt,top:r(`topColor`)??t(`series.area.topColor`)??e.areaTopColor,bottom:r(`bottomColor`)??t(`series.area.bottomColor`)??e.areaBottomColor}}function U(e,t,n){return{visible:e(`${t}.visible`)??n.visible,color:e(`${t}.color`)??n.color,style:e(`${t}.style`)??n.style,width:e(`${t}.width`)??n.width}}function Jt(e,t,n){let{style:r,...i}=e,a=n,o=e=>a[e],s=qt(i,o,t),c=o(`background.color`)??i.background,l=(e,t)=>o(e)??t,u=e=>o(e)??null,d={panes:{background:l(`panes.background`,c),separator:l(`panes.separatorColor`,i.axisLine),title:l(`panes.titleColor`,i.textSecondary)},grid:{horizontal:U(o,`grid.horizontal`,{visible:!0,color:i.grid,style:`solid`,width:1}),vertical:U(o,`grid.vertical`,{visible:!0,color:i.grid,style:`solid`,width:1})},crosshair:{horizontal:U(o,`crosshair.horizontal`,{visible:!0,color:i.crosshair,style:`dashed`,width:1}),vertical:U(o,`crosshair.vertical`,{visible:!0,color:i.crosshair,style:`dashed`,width:1}),labelBackground:l(`crosshair.labelBackground`,i.text),labelText:l(`crosshair.labelTextColor`,c)},axis:{price:{line:l(`axis.price.lineColor`,i.axisLine),text:l(`axis.price.textColor`,i.axisLabel)},time:{line:l(`axis.time.lineColor`,i.axisLine),text:l(`axis.time.textColor`,i.axisLabel)}},legend:{text:l(`legend.textColor`,i.text),label:l(`legend.labelColor`,i.textSecondary)},watermark:{color:o(`watermark.color`)??null},lastPrice:{visible:o(`lastPrice.visible`)??!0,up:l(`lastPrice.upColor`,s.up),down:l(`lastPrice.downColor`,s.down),style:o(`lastPrice.style`)??`dashed`,width:o(`lastPrice.width`)??1},sessionBreaks:{color:o(`sessionBreaks.color`)??null,style:o(`sessionBreaks.style`)??null,width:o(`sessionBreaks.width`)??null},highLow:{color:o(`highLow.color`)??null},series:{lineWidth:s.lineWidth},trading:{buy:u(`trading.buyColor`),sell:u(`trading.sellColor`),profit:u(`trading.profitColor`),loss:u(`trading.lossColor`),entry:u(`trading.entryColor`)},markers:{long:u(`markers.longColor`),short:u(`markers.shortColor`),neutral:u(`markers.neutralColor`)},tradeZones:{profit:u(`tradeZones.profitColor`),loss:u(`tradeZones.lossColor`),active:u(`tradeZones.activeColor`)},drawings:{handle:u(`drawings.handleColor`)}};return{...i,background:c,candleUp:s.up,candleDown:s.down,candleUpWick:s.wickUp,candleDownWick:s.wickDown,lineColor:s.line,areaTopColor:s.top,areaBottomColor:s.bottom,volumeUp:l(`volume.upColor`,i.volumeUp),volumeDown:l(`volume.downColor`,i.volumeDown),style:d}}var Yt={"background.color":e=>e.background,"panes.background":(e,t)=>t.panes.background,"panes.separatorColor":(e,t)=>t.panes.separator,"panes.titleColor":(e,t)=>t.panes.title,"crosshair.labelBackground":(e,t)=>t.crosshair.labelBackground,"crosshair.labelTextColor":(e,t)=>t.crosshair.labelText,"axis.price.lineColor":(e,t)=>t.axis.price.line,"axis.price.textColor":(e,t)=>t.axis.price.text,"axis.time.lineColor":(e,t)=>t.axis.time.line,"axis.time.textColor":(e,t)=>t.axis.time.text,"legend.textColor":(e,t)=>t.legend.text,"legend.labelColor":(e,t)=>t.legend.label,"watermark.color":(e,t)=>t.watermark.color,"lastPrice.visible":(e,t)=>t.lastPrice.visible,"lastPrice.upColor":(e,t)=>t.lastPrice.up,"lastPrice.downColor":(e,t)=>t.lastPrice.down,"lastPrice.style":(e,t)=>t.lastPrice.style,"lastPrice.width":(e,t)=>t.lastPrice.width,"volume.upColor":e=>V(e).up,"volume.downColor":e=>V(e).down,"sessionBreaks.color":(e,t)=>t.sessionBreaks.color,"sessionBreaks.style":(e,t)=>t.sessionBreaks.style,"sessionBreaks.width":(e,t)=>t.sessionBreaks.width,"highLow.color":(e,t)=>t.highLow.color,"trading.buyColor":(e,t)=>t.trading.buy,"trading.sellColor":(e,t)=>t.trading.sell,"trading.profitColor":(e,t)=>t.trading.profit,"trading.lossColor":(e,t)=>t.trading.loss,"trading.entryColor":(e,t)=>t.trading.entry,"markers.longColor":(e,t)=>t.markers.long,"markers.shortColor":(e,t)=>t.markers.short,"markers.neutralColor":(e,t)=>t.markers.neutral,"tradeZones.profitColor":(e,t)=>t.tradeZones.profit,"tradeZones.lossColor":(e,t)=>t.tradeZones.loss,"tradeZones.activeColor":(e,t)=>t.tradeZones.active,"drawings.handleColor":(e,t)=>t.drawings.handle},Xt={visible:`visible`,color:`color`,style:`style`,width:`width`};function Zt(e,t,n,r=`candlestick`){let i=n.split(`.`);if(i[0]===`series`){let n=qt(e,e=>t[e],i[1]);switch(i[2]){case`upColor`:return n.up;case`downColor`:return n.down;case`wickUpColor`:return n.wickUp;case`wickDownColor`:return n.wickDown;case`color`:case`lineColor`:return n.line;case`lineWidth`:return n.lineWidth;case`topColor`:return n.top;case`bottomColor`:return n.bottom}}let a=Jt(e,r,t),o=a.style;return i[0]===`grid`||i[0]===`crosshair`&&(i[1]===`horizontal`||i[1]===`vertical`)?(i[0]===`grid`?o.grid:o.crosshair)[i[1]][Xt[i[2]]]:Yt[n]?.(a,o)??null}var Qt={autoScale:!0,rightMargin:5,minBarSpacing:2,maxBarSpacing:30,grid:{visible:!0,hLineStyle:`solid`,vLineStyle:`solid`},crosshair:{mode:`magnet`}},$t=[`1s`,`1m`,`3m`,`5m`,`15m`,`30m`,`1h`,`2h`,`4h`,`6h`,`8h`,`12h`,`1d`,`3d`,`1w`,`1M`],en=[`1m`,`5m`,`15m`,`30m`,`1h`,`2h`,`4h`,`1d`,`1w`,`1M`,`3M`,`6M`,`12M`],tn=[`1m`,`5m`,`15m`,`30m`,`1h`,`4h`,`1d`,`1w`,`1M`],nn=[`1m`,`5m`,`15m`,`1h`,`4h`,`1d`,`1w`],rn=8,an=2,on=70,sn=30,cn=60,ln=120,W={candlestick:`Candlestick`,line:`Line`,area:`Area`,bar:`OHLC Bar`,price:`Price`,volume:`Volume`,time:`Time`,open:`Open`,high:`High`,low:`Low`,close:`Close`,sma:`SMA`,ema:`EMA`,bollingerBands:`Bollinger Bands`,vwap:`VWAP`,ichimoku:`Ichimoku Cloud`,parabolicSAR:`Parabolic SAR`,supertrend:`Supertrend`,keltnerChannel:`Keltner Channel`,donchianChannel:`Donchian Channel`,rsi:`RSI`,macd:`MACD`,stochastic:`Stochastic`,atr:`ATR`,adx:`ADX`,obv:`OBV`,williamsR:`Williams %R`,cci:`CCI`,mfi:`MFI`,aroon:`Aroon`,roc:`ROC`,tsi:`TSI`,cmf:`CMF`,stddev:`Std Dev`,volumeProfile:`Volume Profile`,accumulationDistribution:`A/D Line`,vroc:`VROC`,trendLine:`Trend Line`,horizontalLine:`Horizontal Line`,verticalLine:`Vertical Line`,ray:`Ray`,extendedLine:`Extended Line`,parallelChannel:`Parallel Channel`,regressionChannel:`Regression Channel`,fibRetracement:`Fibonacci Retracement`,fibExtension:`Fibonacci Extension`,rectangle:`Rectangle`,ellipse:`Ellipse`,triangle:`Triangle`,pitchfork:`Andrews' Pitchfork`,elliottWave:`Elliott Wave`,priceRange:`Price Range`,dateRange:`Date Range`,measure:`Measure`,textTool:`Text`,arrow:`Arrow`,clearAll:`Clear All`,buy:`Buy`,sell:`Sell`,buyLimit:`Buy Limit`,sellLimit:`Sell Limit`,buyStop:`Buy Stop`,sellStop:`Sell Stop`,stopLoss:`Stop Loss`,takeProfit:`Take Profit`,market:`Market`,limit:`Limit`,stop:`Stop`,cancel:`Cancel`,modify:`Modify`,quantity:`Qty`,pnl:`P&L`,activeOrders:`Active Orders`,positions:`Positions`,noOrders:`No active orders`,noPositions:`No open positions`,placeOrder:`Place Order`,rightClickToTrade:`Right-click chart to place orders`,ceiling:`Ceiling`,floor:`Floor`,reference:`Reference`,session:`Session`,preOpen:`Pre-Open`,continuous:`Continuous`,preClose:`Pre-Close`,closed:`Closed`,settings:`Settings`,theme:`Theme`,darkTheme:`Dark`,lightTheme:`Light`,tools:`Tools`,indicators:`Indicators`,overlays:`Overlays`,panels:`Panels`,orders:`Orders`,autoScale:`Auto Scale`,crosshair:`Crosshair`,grid:`Grid`,loading:`Loading...`,error:`Error`,numberDecimalSeparator:`.`,numberGroupSeparator:`,`},un={candlestick:`Nến`,line:`Đường`,area:`Vùng`,bar:`Thanh OHLC`,price:`Giá`,volume:`Khối lượng`,time:`Thời gian`,open:`Mở`,high:`Cao`,low:`Thấp`,close:`Đóng`,sma:`SMA`,ema:`EMA`,bollingerBands:`Dải Bollinger`,vwap:`VWAP`,ichimoku:`Mây Ichimoku`,parabolicSAR:`Parabolic SAR`,supertrend:`Supertrend`,keltnerChannel:`Kênh Keltner`,donchianChannel:`Kênh Donchian`,rsi:`RSI`,macd:`MACD`,stochastic:`Stochastic`,atr:`ATR`,adx:`ADX`,obv:`OBV`,williamsR:`Williams %R`,cci:`CCI`,mfi:`MFI`,aroon:`Aroon`,roc:`ROC`,tsi:`TSI`,cmf:`CMF`,stddev:`Độ lệch chuẩn`,volumeProfile:`Phân bổ KL`,accumulationDistribution:`Tích lũy/Phân phối`,vroc:`VROC`,trendLine:`Đường xu hướng`,horizontalLine:`Đường ngang`,verticalLine:`Đường dọc`,ray:`Tia`,extendedLine:`Đường kéo dài`,parallelChannel:`Kênh song song`,regressionChannel:`Kênh hồi quy`,fibRetracement:`Fibonacci thoái lui`,fibExtension:`Fibonacci mở rộng`,rectangle:`Hình chữ nhật`,ellipse:`Hình elip`,triangle:`Tam giác`,pitchfork:`Chĩa ba Andrews`,elliottWave:`Sóng Elliott`,priceRange:`Khoảng giá`,dateRange:`Khoảng thời gian`,measure:`Đo lường`,textTool:`Chữ`,arrow:`Mũi tên`,clearAll:`Xóa tất cả`,buy:`Mua`,sell:`Bán`,buyLimit:`Mua giới hạn`,sellLimit:`Bán giới hạn`,buyStop:`Mua chặn`,sellStop:`Bán chặn`,stopLoss:`Cắt lỗ`,takeProfit:`Chốt lời`,market:`Thị trường`,limit:`Giới hạn`,stop:`Dừng`,cancel:`Hủy`,modify:`Sửa`,quantity:`KL`,pnl:`Lãi/Lỗ`,activeOrders:`Lệnh chờ`,positions:`Vị thế`,noOrders:`Không có lệnh chờ`,noPositions:`Không có vị thế mở`,placeOrder:`Đặt lệnh`,rightClickToTrade:`Nhấp chuột phải để đặt lệnh`,ceiling:`Trần`,floor:`Sàn`,reference:`Tham chiếu`,session:`Phiên`,preOpen:`Trước giờ mở`,continuous:`Liên tục`,preClose:`Trước giờ đóng`,closed:`Đóng cửa`,settings:`Cài đặt`,theme:`Giao diện`,darkTheme:`Tối`,lightTheme:`Sáng`,tools:`Công cụ`,indicators:`Chỉ báo`,overlays:`Phủ lên`,panels:`Bảng`,orders:`Lệnh`,autoScale:`Tự co giãn`,crosshair:`Chữ thập`,grid:`Lưới`,loading:`Đang tải...`,error:`Lỗi`,numberDecimalSeparator:`,`,numberGroupSeparator:`.`},G=new Map([[`en`,W],[`vi`,un]]),K=`en`,dn=W;function fn(e){K=e,dn=G.get(e)??W}function pn(){return K}function mn(e){return dn[e]??W[e]??e}function hn(e,t){G.set(e,t)}function gn(e){return G.get(e??K)??W}function q(e,t=2,n){let r=G.get(n??K)??W,i=r.numberDecimalSeparator,a=r.numberGroupSeparator,[o,s]=e.toFixed(t).split(`.`),c=o.startsWith(`-`),l=c?o.slice(1):o,u=``;for(let e=l.length-1,t=0;e>=0;e--,t++)t>0&&t%3==0&&(u=a+u),u=l[e]+u;return c&&(u=`-`+u),s?u+i+s:u}function _n(e){return q(e,0,`vi`)}function vn(e,t){return e>=1e9?q(e/1e9,2,t??K)+`B`:e>=1e6?q(e/1e6,2,t??K)+`M`:e>=1e3?q(e/1e3,2,t??K)+`K`:q(e,0,t??K)}var J={up:`#22C55E`,down:`#EF4444`,unchanged:`#EAB308`,ceiling:`#D946EF`,floor:`#06B6D4`,reference:`#EAB308`},Y=`Asia/Ho_Chi_Minh`,yn=[{name:`ATO`,startTime:`09:00`,endTime:`09:15`,type:`preOpen`},{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`}],bn=[{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`},{name:`PLO`,startTime:`14:45`,endTime:`15:00`,type:`postClose`}],xn=[{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`}],Sn=[{name:`ATO`,startTime:`08:45`,endTime:`09:00`,type:`preOpen`},{name:`Phiên 1`,startTime:`09:00`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`}],Cn={type:`stock`,exchange:`HOSE`,currency:`VND`,pricePrecision:2,volumeUnit:100,priceStep:.01,priceSteps:[{from:0,step:.01},{from:10,step:.05},{from:50,step:.1}],timeZone:Y,priceLimits:{enabled:!0,ceilingPercent:7,floorPercent:7},sessions:yn,colorScheme:J},wn={...Cn,priceSteps:void 0},Tn={type:`stock`,exchange:`HNX`,currency:`VND`,pricePrecision:1,volumeUnit:100,priceStep:.1,timeZone:Y,priceLimits:{enabled:!0,ceilingPercent:10,floorPercent:10},sessions:bn,colorScheme:J},En={type:`stock`,exchange:`UPCOM`,currency:`VND`,pricePrecision:1,volumeUnit:100,priceStep:.1,timeZone:Y,priceLimits:{enabled:!0,ceilingPercent:15,floorPercent:15},sessions:xn,colorScheme:J},Dn={type:`futures`,exchange:`HNX`,currency:`VND`,pricePrecision:1,volumeUnit:1,priceStep:.1,contractMultiplier:1e5,timeZone:Y,priceLimits:{enabled:!0,ceilingPercent:7,floorPercent:7},sessions:Sn,colorScheme:J},On={type:`crypto`,currency:`USDT`,pricePrecision:2,priceLimits:{enabled:!1}},kn={type:`stock`,exchange:`NYSE`,currency:`USD`,pricePrecision:2,priceStep:.01,timeZone:`America/New_York`,priceLimits:{enabled:!1},sessions:[{name:`Pre-Market`,startTime:`04:00`,endTime:`09:30`,type:`preOpen`},{name:`Regular`,startTime:`09:30`,endTime:`16:00`,type:`continuous`},{name:`After-Hours`,startTime:`16:00`,endTime:`20:00`,type:`postClose`}]};function An(e){return{...e,candleUp:J.up,candleDown:J.down,candleUpWick:J.up,candleDownWick:J.down,volumeUp:F(J.up),volumeDown:F(J.down)}}var X=1e-9;function jn(e,t){let n=t.priceStep;for(let r of t.priceSteps??[])e+X>=r.from&&(n=r.step);return n!==void 0&&n>0?n:void 0}function Mn(e,t){let n=t.priceStep;for(let r of t.priceSteps??[])e-X>r.from&&(n=r.step);return n!==void 0&&n>0?n:void 0}function Z(e,t,n=`nearest`){let r=jn(e,t);if(r===void 0||!Number.isFinite(e))return e;let i=e/r,a=n===`down`?Math.floor(i+X):n===`up`?Math.ceil(i-X):Math.round(i);return Number((a*r).toFixed(lt(r)))}function Nn(e,t){if(!t.priceLimits?.enabled||!t.priceLimits.ceilingPercent)return null;let n=t.priceLimits.ceilingPercent/100,r=(t.priceLimits.floorPercent??t.priceLimits.ceilingPercent)/100,i=e,a=i*(1+n),o=i*(1-r),s=jn(i,t);if(s===void 0)return{ceiling:a,floor:o,reference:i};let c=Z(i+s,t);if(Math.abs(i-s)<X)return{ceiling:c,floor:i,reference:i};let l=Z(a,t,`down`),u=Z(o,t,`up`);return l<=i&&(l=c),u>=i&&(u=Z(i-(Mn(i,t)??s),t)),u<=0&&(u=i),{ceiling:l,floor:u,reference:i}}var Q=(e,t)=>Math.round(e*t*1e9)/1e9;function Pn(e,t){let n=Math.round(Math.log10(t));return{...e,pricePrecision:e.pricePrecision===void 0?void 0:Math.max(0,e.pricePrecision-n),priceStep:e.priceStep===void 0?void 0:Q(e.priceStep,t),priceSteps:e.priceSteps?.map(e=>({from:Q(e.from,t),step:Q(e.step,t)})),priceLimits:e.priceLimits&&{...e.priceLimits,referencePrice:e.priceLimits.referencePrice===void 0?void 0:Q(e.priceLimits.referencePrice,t)}}}var Fn=6e4,In=864e5;function Ln(e,t){let n,r;if(t){let i=new Date(e+x(t,e)*Fn);n=i.getUTCHours(),r=i.getUTCMinutes()}else{let t=new Date(e);n=t.getHours(),r=t.getMinutes()}return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}function Rn(e,t=Date.now(),n){if(n!==void 0&&!b(n))return null;let r=Ln(t,n);for(let t of e)if(r>=t.startTime&&r<t.endTime)return t;return null}var $=e=>String(e).padStart(2,`0`),zn=e=>{let t=new Date(e);return`${t.getUTCFullYear()}-${$(t.getUTCMonth()+1)}-${$(t.getUTCDate())}`},Bn=4,Vn=7*36e5;function Hn(e,t,n){let r=Date.UTC(e,t-1,1),i=1+(Bn-new Date(r).getUTCDay()+7)%7,a=Date.UTC(e,t-1,i+14),o=e=>{let t=new Date(e).getUTCDay();return t===0||t===6||(n?.(zn(e))??!1)};for(;o(a);)a-=In;return zn(a)}function Un(e,t){let n=zn(e+Vn),r=(e,n)=>({symbol:`VN30F${$(e%100)}${$(n)}`,year:e,month:n,lastTradingDay:Hn(e,n,t)}),i=e=>e.month===12?r(e.year+1,1):r(e.year,e.month+1),a=new Date(e+Vn),o=r(a.getUTCFullYear(),a.getUTCMonth()+1);n>o.lastTradingDay&&(o=i(o));let s=[o,i(o)],c=i(s[1]);for(;s.length<4;)c.month%3==0&&s.push(c),c=i(c);return s}exports.CHART_STYLE_KEYS=t,exports.DARK_TERMINAL=B,exports.DARK_THEME=R,exports.DEFAULT_BAR_SPACING=an,exports.DEFAULT_BAR_WIDTH=rn,exports.DEFAULT_CHART_OPTIONS=Qt,exports.DEFAULT_DRAWING_STYLE=n,exports.DEFAULT_FONT_FAMILY=At,exports.DEFAULT_PANEL_HEIGHT=ln,exports.DEFAULT_RECONNECT=o,exports.DEFAULT_SIGNAL_STYLE=i,exports.DEFAULT_STREAM_CONFIG=s,exports.DEFAULT_TIMEFRAME_FAVORITES=nn,exports.DEFAULT_TRADE_ZONE_STYLE=a,exports.DEFAULT_TRADING_CONFIG=r,exports.HNX_SESSIONS=bn,exports.HOSE_SESSIONS=yn,exports.LIGHT_THEME=z,exports.LayerType=e,exports.MARKET_CRYPTO=On,exports.MARKET_HNX=Tn,exports.MARKET_HOSE=Cn,exports.MARKET_HOSE_ETF=wn,exports.MARKET_NYSE=kn,exports.MARKET_UPCOM=En,exports.MARKET_VN30F=Dn,exports.MIN_PANEL_HEIGHT=cn,exports.PRICE_AXIS_WIDTH=on,exports.PRICE_SOURCES=Xe,exports.TC_PALETTE=P,exports.TC_SERIES_COLORS=Nt,exports.TIMEFRAMES_CRYPTO=$t,exports.TIMEFRAMES_FOREX=tn,exports.TIMEFRAMES_STOCK=en,exports.TIME_AXIS_HEIGHT=sn,exports.UPCOM_SESSIONS=xn,exports.VN30F_SESSIONS=Sn,exports.VN_COLORS=J,exports.VOLUME_ALPHA=Mt,exports.alignToTimeframe=Me,exports.autoPricePrecision=Ue,exports.barsAreDaily=Ie,exports.chartStyleValue=Zt,exports.clamp=ne,exports.computePriceLimits=Nn,exports.computePriceRange=de,exports.computeTickStep=oe,exports.createVNTheme=An,exports.detectPrecision=Ye,exports.drawingOption=bt,exports.en=W,exports.findBarIndex=ue,exports.formatFraction=Ge,exports.formatNumber=q,exports.formatPrice=He,exports.formatPriceScaleLabel=We,exports.formatTimestamp=je,exports.formatVND=_n,exports.formatVolume=Je,exports.formatVolumeLoc=vn,exports.fractionTick=Ke,exports.getCurrentSession=Rn,exports.getLocale=pn,exports.getLocaleStrings=gn,exports.hexToRgba=pe,exports.indicatorSource=et,exports.inverseLerp=ie,exports.isDateOnly=Pe,exports.isPriceSource=Ze,exports.isTimeFrame=Ae,exports.isValidTimeZone=b,exports.lerp=re,exports.lerpColor=he,exports.lineDash=Kt,exports.marketStatus=ft,exports.mergeBar=fe,exports.niceNumber=m,exports.normalizeBar=ce,exports.normalizeBarTime=se,exports.offsetAt=C,exports.parseIndicatorSource=tt,exports.parseTimeframe=T,exports.pickBaseTimeframe=ot,exports.priceFormatterFor=qe,exports.priceStepAt=jn,exports.rankSymbols=ct,exports.readChartStyleOverrides=Ht,exports.readChartTypeOptions=kt,exports.readIndicatorPlotStyles=Gt,exports.readNews=te,exports.readPaneStyle=Ut,exports.readQuote=l,exports.registerLocale=hn,exports.resampleBars=rt,exports.resolveChartTheme=Jt,exports.resolveDrawingOptions=xt,exports.resolveVolumeColors=V,exports.roundToPriceStep=Z,exports.roundToStep=ae,exports.sanitizeDrawingOptions=vt,exports.sanitizeDrawingStyle=Ot,exports.scaleMarketPrices=Pn,exports.sessionMinute=ut,exports.setLocale=fn,exports.sliceVisibleData=le,exports.sourcePrice=Qe,exports.stepDecimals=lt,exports.t=mn,exports.tickBarCount=ke,exports.timeParts=Ne,exports.timeframeBucketStart=ze,exports.timeframeToMs=E,exports.tzLabel=Le,exports.vi=un,exports.vn30fContracts=Un,exports.vn30fLastTradingDay=Hn,exports.volumeColor=F,exports.wallToUtc=Ce,exports.withAlpha=me,exports.zoneOffsetMinutes=x,exports.zonedDateFormatter=Te;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=function(e){return e[e.Background=0]=`Background`,e[e.Main=1]=`Main`,e[e.Panel=2]=`Panel`,e[e.Overlay=3]=`Overlay`,e[e.UI=4]=`UI`,e[e.Hover=5]=`Hover`,e}({}),t={"background.color":`color`,"panes.background":`color`,"panes.separatorColor":`color`,"panes.titleColor":`color`,"grid.horizontal.visible":`boolean`,"grid.horizontal.color":`color`,"grid.horizontal.style":`lineStyle`,"grid.horizontal.width":`width`,"grid.vertical.visible":`boolean`,"grid.vertical.color":`color`,"grid.vertical.style":`lineStyle`,"grid.vertical.width":`width`,"crosshair.horizontal.visible":`boolean`,"crosshair.horizontal.color":`color`,"crosshair.horizontal.style":`lineStyle`,"crosshair.horizontal.width":`width`,"crosshair.vertical.visible":`boolean`,"crosshair.vertical.color":`color`,"crosshair.vertical.style":`lineStyle`,"crosshair.vertical.width":`width`,"crosshair.labelBackground":`color`,"crosshair.labelTextColor":`color`,"axis.price.lineColor":`color`,"axis.price.textColor":`color`,"axis.time.lineColor":`color`,"axis.time.textColor":`color`,"legend.textColor":`color`,"legend.labelColor":`color`,"watermark.color":`color`,"lastPrice.visible":`boolean`,"lastPrice.upColor":`color`,"lastPrice.downColor":`color`,"lastPrice.style":`lineStyle`,"lastPrice.width":`width`,"volume.upColor":`color`,"volume.downColor":`color`,"sessionBreaks.color":`color`,"sessionBreaks.style":`lineStyle`,"sessionBreaks.width":`width`,"highLow.color":`color`,"trading.buyColor":`color`,"trading.sellColor":`color`,"trading.profitColor":`color`,"trading.lossColor":`color`,"trading.entryColor":`color`,"markers.longColor":`color`,"markers.shortColor":`color`,"markers.neutralColor":`color`,"tradeZones.profitColor":`color`,"tradeZones.lossColor":`color`,"tradeZones.activeColor":`color`,"drawings.handleColor":`color`,"series.candlestick.upColor":`color`,"series.candlestick.downColor":`color`,"series.candlestick.wickUpColor":`color`,"series.candlestick.wickDownColor":`color`,"series.heikinAshi.upColor":`color`,"series.heikinAshi.downColor":`color`,"series.heikinAshi.wickUpColor":`color`,"series.heikinAshi.wickDownColor":`color`,"series.hollowCandle.upColor":`color`,"series.hollowCandle.downColor":`color`,"series.volumeCandles.upColor":`color`,"series.volumeCandles.downColor":`color`,"series.volumeCandles.wickUpColor":`color`,"series.volumeCandles.wickDownColor":`color`,"series.equivolume.upColor":`color`,"series.equivolume.downColor":`color`,"series.equivolume.wickUpColor":`color`,"series.equivolume.wickDownColor":`color`,"series.bar.upColor":`color`,"series.bar.downColor":`color`,"series.hiLo.upColor":`color`,"series.hiLo.downColor":`color`,"series.renko.upColor":`color`,"series.renko.downColor":`color`,"series.lineBreak.upColor":`color`,"series.lineBreak.downColor":`color`,"series.rangeBars.upColor":`color`,"series.rangeBars.downColor":`color`,"series.kagi.upColor":`color`,"series.kagi.downColor":`color`,"series.pointAndFigure.upColor":`color`,"series.pointAndFigure.downColor":`color`,"series.baseline.upColor":`color`,"series.baseline.downColor":`color`,"series.baseline.lineWidth":`width`,"series.line.color":`color`,"series.line.lineWidth":`width`,"series.stepLine.color":`color`,"series.stepLine.lineWidth":`width`,"series.lineWithMarkers.color":`color`,"series.lineWithMarkers.lineWidth":`width`,"series.area.lineColor":`color`,"series.area.lineWidth":`width`,"series.area.topColor":`color`,"series.area.bottomColor":`color`,"series.hlcArea.lineColor":`color`,"series.hlcArea.lineWidth":`width`,"series.hlcArea.topColor":`color`,"series.hlcArea.bottomColor":`color`},n={color:`#4c8dff`,lineWidth:1,lineStyle:`solid`,fillColor:`rgba(76, 141, 255, 0.1)`,fillOpacity:.1,fontSize:12},r={enabled:!0,orderColors:{buy:`#1fa874`,sell:`#e8505b`},positionColors:{profit:`#1fa874`,loss:`#e8505b`,entry:`#4c8dff`},depthOverlay:{enabled:!1,bidColor:`rgba(31, 168, 116,0.15)`,askColor:`rgba(232, 80, 91,0.15)`,maxWidth:100},contextMenu:{enabled:!0},lineButtons:{cancel:!0,close:!0,reverse:!0,removeStops:!0},fillMarks:!0,pricePrecision:2,dragThreshold:3},i={longColor:`#1fa874`,shortColor:`#e8505b`,neutralColor:`#9E9E9E`,arrowSize:12,showLabel:!0,showConfidence:!0},a={profitColor:`#1fa874`,lossColor:`#e8505b`,activeColor:`#4c8dff`,fillOpacity:.12,borderWidth:1,showLabel:!0,showPnl:!0},o={enabled:!0,maxRetries:1/0,baseDelay:1e3,maxDelay:3e4,backoffMultiplier:2},s={historyLimit:500,autoScroll:!0,showCurrentPriceLine:!0,aggregateTicks:!1},c=[`change`,`changePercent`,`open`,`high`,`low`,`prevClose`,`volume`,`bid`,`ask`,`time`];function l(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.symbol==`string`?t.symbol.trim():``;if(!n||n.length>64||!u(t.last))return null;let r={symbol:n,last:t.last};for(let e of c){let n=t[e];u(n)&&(r[e]=n)}let i=r.prevClose??r.open;if(r.change===void 0&&i!==void 0&&(r.change=r.last-i),r.changePercent===void 0&&r.change!==void 0){let e=r.last-r.change;e!==0&&(r.changePercent=r.change/e*100)}return r}function u(e){return typeof e==`number`&&Number.isFinite(e)}var d=300,ee=1e3,f=(e,t)=>{if(typeof e!=`string`)return;let n=e.trim();return n?n.slice(0,t):void 0},te=e=>{if(typeof e==`string`)try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.href:void 0}catch{return}};function ne(e,t=20){if(!Array.isArray(e))return[];let n=[];for(let t of e){if(!t||typeof t!=`object`)continue;let e=t,r=f(e.title,d);if(!r||typeof e.time!=`number`||!Number.isFinite(e.time))continue;let i={title:r,time:e.time},a=te(e.url);a&&(i.url=a);let o=f(e.source,d);o&&(i.source=o);let s=f(e.summary,ee);s&&(i.summary=s);let c=f(e.id,d);c&&(i.id=c),n.push(i)}return n.sort((e,t)=>t.time-e.time).slice(0,Math.max(0,t))}function re(e,t,n){return Math.max(t,Math.min(n,e))}function ie(e,t,n){return e+(t-e)*n}function ae(e,t,n){return e===t?0:(n-e)/(t-e)}function oe(e,t){return Math.round(e/t)*t}function se(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function ce(e,t,n){return se(se(t-e,!1)/(n-1),!0)}var le=1e11;function ue(e){let t=e.length>0?e[e.length-1].time:NaN;return Number.isFinite(t)?Math.abs(t)>=1e11?1:1e3:1}function de(e,t){return t===void 0?Math.abs(e)>=1e11?e:e*1e3:e*t}function fe(e){return{time:de(e.time??e.t??0),open:e.open??e.o??0,high:e.high??e.h??0,low:e.low??e.l??0,close:e.close??e.c??0,volume:e.volume??e.v??0}}function pe(e,t,n){let r=Math.max(0,t),i=Math.min(e.length,n+1);return e.slice(r,i)}function me(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=n+r>>>1;if(e[i].time<t)n=i+1;else if(e[i].time>t)r=i-1;else return i}return n}function he(e,t,n,r=.05){if(e.length===0)return{min:0,max:1};let i=Math.max(0,t),a=Math.min(e.length-1,n),o=1/0,s=-1/0;for(let t=i;t<=a;t++)e[t].low<o&&(o=e[t].low),e[t].high>s&&(s=e[t].high);if(o===1/0)return{min:0,max:1};let c=s-o||1;return{min:o-c*r,max:s+c*r}}function ge(e,t){return{...e,high:Math.max(e.high,t.price),low:Math.min(e.low,t.price),close:t.price,volume:e.volume+(t.volume??0),time:t.time}}function _e(e,t=1){let n=e.slice(1);return(n.length===3||n.length===4)&&(n=[...n.slice(0,3)].map(e=>e+e).join(``)),`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}function ve(e,t){let n=e.trim();if(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n))return _e(n,t);let r=n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);return r?`rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})`:e}function ye(e,t,n){let r=e=>(e=e.replace(`#`,``),e.length===3&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),{r:parseInt(e.slice(0,2),16),g:parseInt(e.slice(2,4),16),b:parseInt(e.slice(4,6),16)}),i=r(e),a=r(t);return`rgb(${Math.round(i.r+(a.r-i.r)*n)},${Math.round(i.g+(a.g-i.g)*n)},${Math.round(i.b+(a.b-i.b)*n)})`}var p=6e4,m=1440*p,h=15*p,be=8192,g=7*m,xe=4096,Se=new Set([`UTC`,`Etc/UTC`,`GMT`,`Etc/GMT`,`UCT`,`Etc/UCT`,`Universal`,`Etc/Universal`,`Zulu`,`Etc/Zulu`]),Ce=new Map,_=new Map,we=new Map;function Te(e){let t=Ce.get(e);return t||(t=new Intl.DateTimeFormat(`en-US`,{timeZone:e,hourCycle:`h23`,year:`numeric`,month:`numeric`,day:`numeric`,hour:`numeric`,minute:`numeric`,second:`numeric`}),Ce.set(e,t)),t}function Ee(e){if(!e)return!1;try{return Te(e),!0}catch{return!1}}function v(e,t){if(!Number.isFinite(t)||Se.has(e))return 0;let n=we.get(e);n||(n=new Map,we.set(e,n));let r=Math.floor(t/g),i=n.get(r);return i||(i=De(e,r*g),n.size>=xe&&n.clear(),n.set(r,i)),t<i.change?i.before:i.after}function De(e,t){let n=Oe(e,t),r=t+g-h,i=Oe(e,r);if(i===n)return{before:n,change:1/0,after:i};let a=t;for(;r-a>h;){let t=a+Math.floor((r-a)/h/2)*h;Oe(e,t)===n?a=t:r=t}return{before:n,change:r,after:i}}function Oe(e,t){let n=Math.floor(t/h),r=`${e}|${n}`,i=_.get(r);if(i!==void 0)return i;let a=n*h,o=1970,s=1,c=1,l=0,u=0,d=0;for(let t of Te(e).formatToParts(new Date(a))){let e=Number(t.value);switch(t.type){case`year`:o=e;break;case`month`:s=e;break;case`day`:c=e;break;case`hour`:l=e%24;break;case`minute`:u=e;break;case`second`:d=e;break}}let ee=Math.round((Date.UTC(o,s-1,c,l,u,d)-a)/p);return _.size>=be&&_.clear(),_.set(r,ee),ee}function y(e,t){return e===null?-new Date(t).getTimezoneOffset():typeof e==`number`?e:v(e,t)}function ke(e,t){let n=e-y(t,e-m)*p;if(n+y(t,n)*p===e)return n;let r=e-y(t,e+m)*p;return r+y(t,r)*p===e?r:n}var Ae=new Map;function je(e,t,n){let r=`${e}|${JSON.stringify(t)}|${n===null?`local`:typeof n==`number`?`fixed:${n}`:n}`,i=Ae.get(r);if(i)return i;let a=n===null?void 0:typeof n==`number`?`UTC`:n,o;try{o=new Intl.DateTimeFormat(e,{...t,timeZone:a})}catch{o=new Intl.DateTimeFormat(`en-US`,{...t,timeZone:a})}let s=typeof n==`number`?n*p:0;return i=e=>o.format(new Date(e+s)),Ae.set(r,i),i}var Me={"1s":1e3,"5s":5e3,"15s":15e3,"30s":3e4,"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"45m":27e5,"1h":36e5,"2h":72e5,"3h":108e5,"4h":144e5,"6h":216e5,"8h":288e5,"12h":432e5,"1d":864e5,"2d":1728e5,"3d":2592e5,"1w":6048e5,"2w":12096e5,"1M":2592e6,"3M":7776e6,"6M":15552e6,"12M":31536e6},b={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5,M:2592e6},Ne=/^([1-9]\d*)([smhdwM])$/;function x(e){let t=Ne.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isSafeInteger(n)?{count:n,unit:t[2]}:null}var Pe=1e6;function Fe(e){let t=/^([1-9]\d*)T$/.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isSafeInteger(n)&&n<=Pe?n:null}function Ie(e){return x(e)!==null}function S(e){let t=Me[e];if(t!==void 0)return t;let n=x(e);return n?n.count*b[n.unit]:NaN}function Le(e,t){let n=new Date(e),r=S(t);return r>=864e5?n.toLocaleDateString(void 0,{month:`short`,day:`numeric`}):r>=36e5?n.toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`}):n.toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Re(e,t){let n=S(t);return Math.floor(e/n)*n}function ze(e,t){if(t===null){let t=new Date(e);return{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate(),hours:t.getHours(),minutes:t.getMinutes()}}let n=new Date(e+y(t,e)*6e4);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hours:n.getUTCHours(),minutes:n.getUTCMinutes()}}function Be(e){return e.hours===0&&e.minutes===0}var Ve=20*36e5;function He(e){let t=Math.min(e.length,64);if(t<2)return;let n=ue(e),r=1/0;for(let i=1;i<t;i++){let t=Math.abs(e[i].time-e[i-1].time)*n;t>0&&t<r&&(r=t)}return r===1/0?void 0:r>=Ve}function Ue(e,t=Date.now()){let n=y(e,t),r=n>=0?`+`:`-`,i=Math.abs(n),a=Math.floor(i/60),o=i%60;return o===0?`UTC${r}${a}`:`UTC${r}${a}:${String(o).padStart(2,`0`)}`}var We=Date.UTC(1970,0,5);function Ge(e,t,n=1){let{count:r,unit:i}=x(t)??{count:1,unit:`m`};if(i===`s`||i===`m`||i===`h`||i===`d`){let t=r*b[i];return Math.floor(e/t)*t}let a=new Date(e);if(i===`w`){let e=b.d,t=(a.getUTCDay()-n+7)%7,i=Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate()-t);if(r<=1)return i;let o=Math.floor((i-We)/(7*e));return We+Math.floor(o/r)*r*7*e}let o=a.getUTCFullYear()*12+a.getUTCMonth(),s=Math.floor(o/r)*r;return Date.UTC(Math.floor(s/12),s%12,1)}var Ke=64,C=new Map;function qe(e,t){let n=`${e}|${t}`,r=C.get(n);return r||(C.size>=Ke&&C.clear(),r=new Intl.NumberFormat(e,{minimumFractionDigits:t,maximumFractionDigits:t}),C.set(n,r)),r}function w(e,t=2,n=`en-US`){return qe(n,t).format(e)}function Je(e,t){if(!(t>e)||!Number.isFinite(e)||!Number.isFinite(t))return 2;let n=ce(e,t,8);return n>0&&n<1?Math.ceil(-Math.log10(n))+1:2}function Ye(e,t,n,r=2,i=`en-US`){if((t===`percentage`||t===`indexedTo100`)&&n&&n!==0){if(t===`percentage`){let t=(e/n-1)*100;return`${t>0?`+`:``}${t.toFixed(2)}%`}return w(e/n*100,2,i)}return w(e,r,i)}function Xe(e,t,n=1){let r=Number.isInteger(n)&&n>1?n:1;if(!Number.isFinite(e)||!Number.isInteger(t)||t<2)return String(e);let i=t*r,a=Math.round(Math.abs(e)*i),o=Math.floor(a/i),s=a-o*i,c=Math.floor(s/r),l=String(t-1).length,u=r>1?String(Math.floor((s-c*r)/r*10)):``;return`${e<0&&a>0?`-`:``}${o}'${String(c).padStart(l,`0`)}${u}`}function Ze(e){if(!Number.isInteger(e.denominator)||e.denominator<2)return null;let t=Number.isInteger(e.subDenominator)&&(e.subDenominator??0)>1?e.subDenominator:1;return 1/(e.denominator*t)}function Qe(e){return e?typeof e==`function`?e:Ze(e)===null?null:t=>Xe(t,e.denominator,e.subDenominator):null}function $e(e){return e>=1e9?(e/1e9).toFixed(2)+`B`:e>=1e6?(e/1e6).toFixed(2)+`M`:e>=1e3?(e/1e3).toFixed(2)+`K`:e.toFixed(0)}function et(e){let t=0;for(let n of e){let e=n.toString(),r=e.indexOf(`.`);r>=0&&(t=Math.max(t,e.length-r-1))}return Math.min(t,8)}var tt=[`close`,`open`,`high`,`low`,`hl2`,`hlc3`,`ohlc4`,`hlcc4`];function nt(e){return typeof e==`string`&&tt.includes(e)}function rt(e,t){switch(t){case`open`:return e.open;case`high`:return e.high;case`low`:return e.low;case`hl2`:return(e.high+e.low)/2;case`hlc3`:return(e.high+e.low+e.close)/3;case`ohlc4`:return(e.open+e.high+e.low+e.close)/4;case`hlcc4`:return(e.high+e.low+2*e.close)/4;default:return e.close}}var it=/^ind:([^:]+):(.+)$/;function at(e,t){return`ind:${e}:${t}`}function ot(e){if(typeof e!=`string`)return null;let t=it.exec(e);return t?{instanceId:t[1],key:t[2]}:null}var st=864e5;function ct(e,t,n=1){let r=[],i=null;for(let a of e){let e=Ge(a.time,t,n);i===null||e!==i.time?(i={time:e,open:a.open,high:a.high,low:a.low,close:a.close,volume:a.volume},r.push(i)):(a.high>i.high&&(i.high=a.high),a.low<i.low&&(i.low=a.low),i.close=a.close,i.volume+=a.volume)}return r}var T=e=>e===`s`||e===`m`||e===`h`||e===`d`;function lt(e,t){let n=x(e),r=x(t);if(!n||!r)return!1;let i=S(e);return n.unit===`d`&&n.count>1?!1:T(r.unit)?T(n.unit)&&S(t)%i===0:n.unit===r.unit?r.count%n.count===0:T(n.unit)&&st%i===0}function ut(e,t){let n=null,r=0;for(let i of t){if(!lt(i,e))continue;let t=S(i);t>r&&(n=i,r=t)}return n}function dt(e,t){if(!e)return 0;if(e===t)return 1e3;if(e.startsWith(t))return 600-Math.min(100,e.length-t.length);let n=e.indexOf(t);return n>=0?300-Math.min(100,n):0}function ft(e,t,n=50,r){let i=t.trim().toUpperCase();if(!i)return e.slice(0,n);let a=[];for(let t of e){let e=Math.max(dt(t.symbol.toUpperCase(),i),dt((t.description??``).toUpperCase(),i)*.8);e>0&&a.push({info:t,score:e+(r?.(t)??0)})}return a.sort((e,t)=>t.score-e.score||e.info.symbol.localeCompare(t.info.symbol)),a.slice(0,n).map(e=>e.info)}function pt(e){let t=typeof e==`number`?e:Number(e);if(!Number.isFinite(t)||t<=0)return 0;for(let e=0;e<=12;e++){let n=t*10**e;if(Math.abs(n-Math.round(n))<1e-9*Math.max(1,n))return e}return 12}function E(e){let t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return null;let n=Number(t[1]),r=Number(t[2]);return n===24&&r===0?1440:n<24&&r<60?n*60+r:null}var D=864e5,O=6e4,mt=8;function ht(e,t){let n=e?.timezone,r=(e?.sessions??[]).flatMap(e=>{let t=E(e.start),n=E(e.end);return t===null||n===null||t===n?[]:[{start:t,end:n,days:Array.isArray(e.days)?e.days:null}]});if(!n||!Ee(n)||r.length===0||!Number.isFinite(t))return{state:`always`,next:null};let i=v(n,t)*O,a=Math.floor((t+i)/D)*D,o=e=>e-v(n,e-v(n,e-i)*O)*O,s=[];for(let e=-1;e<=mt;e++){let t=a+e*D,n=(Math.floor(t/D)+4)%7;for(let e of r){if(e.days&&!e.days.includes(n))continue;let r=t+e.start*O,i=(e.end>e.start?t:t+D)+e.end*O;s.push([o(r),o(i)])}}s.sort((e,t)=>e[0]-t[0]);let c=[];for(let[e,t]of s){let n=c[c.length-1];n&&e<=n[1]?c[c.length-1]=[n[0],Math.max(n[1],t)]:c.push([e,t])}let l=c.find(([e,n])=>e<=t&&t<n);if(l)return{state:`open`,next:l[1]};let u=c.find(([e])=>e>t);return{state:`closed`,next:u?u[0]:null}}var gt=48,_t=2e3,vt=1e4;function yt(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(t.length>=gt)break;if(typeof n!=`object`||!n)continue;let{value:e,visible:r,color:i}=n;if(typeof e!=`number`||!Number.isFinite(e)||Math.abs(e)>vt||r!==void 0&&typeof r!=`boolean`)continue;let a={value:e,visible:r??!0};typeof i==`string`&&i&&(a.color=i),t.push(a)}return t}function bt(e,t){switch(e.kind){case`boolean`:return typeof t==`boolean`?t:void 0;case`number`:return typeof t!=`number`||!Number.isFinite(t)?void 0:Math.min(e.max??1/0,Math.max(e.min??-1/0,t));case`choice`:return typeof t==`string`&&e.choices.some(e=>e.value===t)?t:void 0;case`levels`:return yt(t);case`text`:return typeof t==`string`?t.slice(0,_t):void 0}}function xt(e,t){if(!e||typeof t!=`object`||!t)return{};let n={};for(let[r,i]of Object.entries(t)){let t=e[r];if(!t)continue;let a=bt(t,i);a!==void 0&&(n[r]=a)}return n}function St(e){return Array.isArray(e)?e.map(e=>({...e})):e}function Ct(e,t,n){let r=e?.[n];return r?St((t&&n in t?bt(r,t[n]):void 0)??r.default):t?.[n]}function wt(e,t){let n={};for(let r of Object.keys(e??{}))n[r]=Ct(e,t,r);return n}var Tt=[`solid`,`dashed`,`dotted`],Et=64,Dt=2e3,Ot=20,kt=200;function k(e,t,n){return typeof e==`number`&&Number.isFinite(e)?Math.min(n,Math.max(t,e)):void 0}function At(e){return typeof e==`string`&&e.length>0&&e.length<=Et?e:void 0}function jt(e){if(typeof e!=`object`||!e)return{};let t=e,n={},r=At(t.color);r!==void 0&&(n.color=r);let i=k(t.lineWidth,.5,Ot);i!==void 0&&(n.lineWidth=i),Tt.includes(t.lineStyle)&&(n.lineStyle=t.lineStyle);let a=At(t.fillColor);a!==void 0&&(n.fillColor=a);let o=k(t.fillOpacity,0,1);o!==void 0&&(n.fillOpacity=o);let s=k(t.fontSize,6,kt);return s!==void 0&&(n.fontSize=s),typeof t.text==`string`&&(n.text=t.text.slice(0,Dt)),n}var A=e=>typeof e==`number`&&Number.isFinite(e)&&e>0,j=(e,t,n)=>typeof e==`number`&&Number.isInteger(e)&&e>=t&&e<=n,M=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function Mt(e){if(!M(e))return{};let t={};if(M(e.renko)){let{boxSize:n,atrPeriod:r}=e.renko;t.renko={...A(n)||n===`atr`?{boxSize:n}:{},...j(r,1,500)?{atrPeriod:r}:{}}}if(M(e.lineBreak)){let{lines:n}=e.lineBreak;t.lineBreak=j(n,1,10)?{lines:n}:{}}if(M(e.kagi)){let{reversal:n,reversalType:r}=e.kagi;t.kagi={...A(n)?{reversal:n}:{},...r===`percent`||r===`price`?{reversalType:r}:{}}}if(M(e.pointAndFigure)){let{boxSize:n,reversal:r}=e.pointAndFigure;t.pointAndFigure={...A(n)||n===`auto`?{boxSize:n}:{},...j(r,1,10)?{reversal:r}:{}}}if(M(e.rangeBars)){let{range:n}=e.rangeBars;t.rangeBars=A(n)||n===`auto`?{range:n}:{}}return t}var Nt=`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,Pt={family:Nt,sizeSmall:10,sizeMedium:12,sizeLarge:14},N={amber:`#f2a93b`,up:`#1fa874`,down:`#e8505b`,ochre:`#c98316`,blue:`#4c8dff`,violet:`#a57cff`,cyan:`#1398a8`,rose:`#e25592`,neutral:`#7d8696`,ink:`#0c1016`},Ft=.22;function P(e){return ve(e,Ft)}var F=`#2eb88a`,I=`#e85a67`,It=[N.blue,N.ochre,N.violet,N.cyan,N.rose],L={name:`dark`,background:N.ink,text:`#d9dde4`,textSecondary:`#7d8696`,grid:`#161b23`,crosshair:`#8a93a3`,candleUp:F,candleDown:I,candleUpWick:F,candleDownWick:I,lineColor:N.amber,areaTopColor:`rgba(242, 169, 59, 0.32)`,areaBottomColor:`rgba(242, 169, 59, 0.0)`,volumeUp:P(F),volumeDown:P(I),axisLine:`#1f2630`,axisLabel:`#9aa3b2`,axisLabelBackground:`#1f2630`,font:Pt},R={name:`light`,background:`#ffffff`,text:`#0f131a`,textSecondary:`#6b7380`,grid:`#eef0f3`,crosshair:`#8a93a3`,candleUp:`#16a36a`,candleDown:`#d9414f`,candleUpWick:`#16a36a`,candleDownWick:`#d9414f`,lineColor:`#c77a0a`,areaTopColor:`rgba(199, 122, 10, 0.24)`,areaBottomColor:`rgba(199, 122, 10, 0.0)`,volumeUp:P(`#16a36a`),volumeDown:P(`#d9414f`),axisLine:`#dde1e7`,axisLabel:`#5b6472`,axisLabelBackground:`#eef0f3`,font:Pt},z={name:`terminal`,background:`#0E0E0E`,text:`#C0C0C0`,textSecondary:`#8A8A8A`,grid:`#1A1A1A`,crosshair:`#666666`,candleUp:`#00FF87`,candleDown:`#FF3B4D`,candleUpWick:`#00FF87`,candleDownWick:`#FF3B4D`,lineColor:`#3D8BFD`,areaTopColor:`rgba(61, 139, 253, 0.3)`,areaBottomColor:`rgba(61, 139, 253, 0.0)`,volumeUp:`rgba(0, 255, 135, 0.2)`,volumeDown:`rgba(255, 59, 77, 0.2)`,axisLine:`#1A1A1A`,axisLabel:`#8A8A8A`,axisLabelBackground:`#1A1A1A`,font:{family:`'Roboto Mono', 'JetBrains Mono', 'SF Mono', Consolas, monospace`,sizeSmall:10,sizeMedium:12,sizeLarge:14}},Lt=new Set([L.volumeUp,L.volumeDown,R.volumeUp,R.volumeDown,z.volumeUp,z.volumeDown]);function B(e){let t=(e,t)=>{if(!Lt.has(e))return e;let n=P(t);return n===t?e:n};return{up:t(e.volumeUp,e.candleUp),down:t(e.volumeDown,e.candleDown)}}var Rt=[`solid`,`dashed`,`dotted`],zt=20,Bt=64,Vt=2,Ht=[/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,/^[a-z]{3,30}$/i,/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i];function V(e){return typeof e==`string`&&e.length<=Bt&&Ht.some(t=>t.test(e.trim()))}function Ut(e,t){switch(e){case`color`:return V(t);case`lineStyle`:return Rt.includes(t);case`width`:return typeof t==`number`&&Number.isFinite(t)&&t>0&&t<=zt;case`boolean`:return typeof t==`boolean`}}function Wt(e){return Object.prototype.hasOwnProperty.call(t,e)}function Gt(e){let n={},r=[];if(typeof e!=`object`||!e||Array.isArray(e))return{overrides:{},rejected:r};for(let[i,a]of Object.entries(e))Wt(i)?a===null?n[i]=null:Ut(t[i],a)?n[i]=a:r.push(i):r.push(i);return{overrides:n,rejected:r}}function Kt(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let{background:t,separator:n}=e,r={...V(t)?{background:t}:{},...V(n)?{separator:n}:{}};return Object.keys(r).length>0?r:null}var qt=/^[A-Za-z0-9_]{1,32}$/;function Jt(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e)){if(!qt.test(n)||typeof r!=`object`||!r)continue;let{lineStyle:e,visible:i}=r,a={...Rt.includes(e)?{lineStyle:e}:{},...typeof i==`boolean`?{visible:i}:{}};Object.keys(a).length>0&&(t[n]=a)}return Object.keys(t).length>0?t:void 0}function Yt(e,t,n=1){return e===`solid`?[]:e===`dotted`?[n,n*2]:[...t]}function Xt(e,t,n){let r=e=>t(`series.${n}.${e}`),i=r(`upColor`)??t(`series.candlestick.upColor`),a=r(`downColor`)??t(`series.candlestick.downColor`),o=i??e.candleUp,s=a??e.candleDown;return{up:o,down:s,wickUp:r(`wickUpColor`)??t(`series.candlestick.wickUpColor`)??(i===void 0?e.candleUpWick:o),wickDown:r(`wickDownColor`)??t(`series.candlestick.wickDownColor`)??(a===void 0?e.candleDownWick:s),line:r(`color`)??r(`lineColor`)??t(`series.line.color`)??e.lineColor,lineWidth:r(`lineWidth`)??t(`series.line.lineWidth`)??Vt,top:r(`topColor`)??t(`series.area.topColor`)??e.areaTopColor,bottom:r(`bottomColor`)??t(`series.area.bottomColor`)??e.areaBottomColor}}function H(e,t,n){return{visible:e(`${t}.visible`)??n.visible,color:e(`${t}.color`)??n.color,style:e(`${t}.style`)??n.style,width:e(`${t}.width`)??n.width}}function Zt(e,t,n){let{style:r,...i}=e,a=n,o=e=>a[e],s=Xt(i,o,t),c=o(`background.color`)??i.background,l=(e,t)=>o(e)??t,u=e=>o(e)??null,d={panes:{background:l(`panes.background`,c),separator:l(`panes.separatorColor`,i.axisLine),title:l(`panes.titleColor`,i.textSecondary)},grid:{horizontal:H(o,`grid.horizontal`,{visible:!0,color:i.grid,style:`solid`,width:1}),vertical:H(o,`grid.vertical`,{visible:!0,color:i.grid,style:`solid`,width:1})},crosshair:{horizontal:H(o,`crosshair.horizontal`,{visible:!0,color:i.crosshair,style:`dashed`,width:1}),vertical:H(o,`crosshair.vertical`,{visible:!0,color:i.crosshair,style:`dashed`,width:1}),labelBackground:l(`crosshair.labelBackground`,i.text),labelText:l(`crosshair.labelTextColor`,c)},axis:{price:{line:l(`axis.price.lineColor`,i.axisLine),text:l(`axis.price.textColor`,i.axisLabel)},time:{line:l(`axis.time.lineColor`,i.axisLine),text:l(`axis.time.textColor`,i.axisLabel)}},legend:{text:l(`legend.textColor`,i.text),label:l(`legend.labelColor`,i.textSecondary)},watermark:{color:o(`watermark.color`)??null},lastPrice:{visible:o(`lastPrice.visible`)??!0,up:l(`lastPrice.upColor`,s.up),down:l(`lastPrice.downColor`,s.down),style:o(`lastPrice.style`)??`dashed`,width:o(`lastPrice.width`)??1},sessionBreaks:{color:o(`sessionBreaks.color`)??null,style:o(`sessionBreaks.style`)??null,width:o(`sessionBreaks.width`)??null},highLow:{color:o(`highLow.color`)??null},series:{lineWidth:s.lineWidth},trading:{buy:u(`trading.buyColor`),sell:u(`trading.sellColor`),profit:u(`trading.profitColor`),loss:u(`trading.lossColor`),entry:u(`trading.entryColor`)},markers:{long:u(`markers.longColor`),short:u(`markers.shortColor`),neutral:u(`markers.neutralColor`)},tradeZones:{profit:u(`tradeZones.profitColor`),loss:u(`tradeZones.lossColor`),active:u(`tradeZones.activeColor`)},drawings:{handle:u(`drawings.handleColor`)}};return{...i,background:c,candleUp:s.up,candleDown:s.down,candleUpWick:s.wickUp,candleDownWick:s.wickDown,lineColor:s.line,areaTopColor:s.top,areaBottomColor:s.bottom,volumeUp:l(`volume.upColor`,i.volumeUp),volumeDown:l(`volume.downColor`,i.volumeDown),style:d}}var Qt={"background.color":e=>e.background,"panes.background":(e,t)=>t.panes.background,"panes.separatorColor":(e,t)=>t.panes.separator,"panes.titleColor":(e,t)=>t.panes.title,"crosshair.labelBackground":(e,t)=>t.crosshair.labelBackground,"crosshair.labelTextColor":(e,t)=>t.crosshair.labelText,"axis.price.lineColor":(e,t)=>t.axis.price.line,"axis.price.textColor":(e,t)=>t.axis.price.text,"axis.time.lineColor":(e,t)=>t.axis.time.line,"axis.time.textColor":(e,t)=>t.axis.time.text,"legend.textColor":(e,t)=>t.legend.text,"legend.labelColor":(e,t)=>t.legend.label,"watermark.color":(e,t)=>t.watermark.color,"lastPrice.visible":(e,t)=>t.lastPrice.visible,"lastPrice.upColor":(e,t)=>t.lastPrice.up,"lastPrice.downColor":(e,t)=>t.lastPrice.down,"lastPrice.style":(e,t)=>t.lastPrice.style,"lastPrice.width":(e,t)=>t.lastPrice.width,"volume.upColor":e=>B(e).up,"volume.downColor":e=>B(e).down,"sessionBreaks.color":(e,t)=>t.sessionBreaks.color,"sessionBreaks.style":(e,t)=>t.sessionBreaks.style,"sessionBreaks.width":(e,t)=>t.sessionBreaks.width,"highLow.color":(e,t)=>t.highLow.color,"trading.buyColor":(e,t)=>t.trading.buy,"trading.sellColor":(e,t)=>t.trading.sell,"trading.profitColor":(e,t)=>t.trading.profit,"trading.lossColor":(e,t)=>t.trading.loss,"trading.entryColor":(e,t)=>t.trading.entry,"markers.longColor":(e,t)=>t.markers.long,"markers.shortColor":(e,t)=>t.markers.short,"markers.neutralColor":(e,t)=>t.markers.neutral,"tradeZones.profitColor":(e,t)=>t.tradeZones.profit,"tradeZones.lossColor":(e,t)=>t.tradeZones.loss,"tradeZones.activeColor":(e,t)=>t.tradeZones.active,"drawings.handleColor":(e,t)=>t.drawings.handle},$t={visible:`visible`,color:`color`,style:`style`,width:`width`};function en(e,t,n,r=`candlestick`){let i=n.split(`.`);if(i[0]===`series`){let n=Xt(e,e=>t[e],i[1]);switch(i[2]){case`upColor`:return n.up;case`downColor`:return n.down;case`wickUpColor`:return n.wickUp;case`wickDownColor`:return n.wickDown;case`color`:case`lineColor`:return n.line;case`lineWidth`:return n.lineWidth;case`topColor`:return n.top;case`bottomColor`:return n.bottom}}let a=Zt(e,r,t),o=a.style;return i[0]===`grid`||i[0]===`crosshair`&&(i[1]===`horizontal`||i[1]===`vertical`)?(i[0]===`grid`?o.grid:o.crosshair)[i[1]][$t[i[2]]]:Qt[n]?.(a,o)??null}var tn={autoScale:!0,rightMargin:5,minBarSpacing:2,maxBarSpacing:30,grid:{visible:!0,hLineStyle:`solid`,vLineStyle:`solid`},crosshair:{mode:`magnet`}},nn=[`1s`,`1m`,`3m`,`5m`,`15m`,`30m`,`1h`,`2h`,`4h`,`6h`,`8h`,`12h`,`1d`,`3d`,`1w`,`1M`],rn=[`1m`,`5m`,`15m`,`30m`,`1h`,`2h`,`4h`,`1d`,`1w`,`1M`,`3M`,`6M`,`12M`],an=[`1m`,`5m`,`15m`,`30m`,`1h`,`4h`,`1d`,`1w`,`1M`],on=[`1m`,`5m`,`15m`,`1h`,`4h`,`1d`,`1w`],sn=8,cn=2,ln=70,un=30,dn=60,fn=120,U={candlestick:`Candlestick`,line:`Line`,area:`Area`,bar:`OHLC Bar`,price:`Price`,volume:`Volume`,time:`Time`,open:`Open`,high:`High`,low:`Low`,close:`Close`,sma:`SMA`,ema:`EMA`,bollingerBands:`Bollinger Bands`,vwap:`VWAP`,ichimoku:`Ichimoku Cloud`,parabolicSAR:`Parabolic SAR`,supertrend:`Supertrend`,keltnerChannel:`Keltner Channel`,donchianChannel:`Donchian Channel`,rsi:`RSI`,macd:`MACD`,stochastic:`Stochastic`,atr:`ATR`,adx:`ADX`,obv:`OBV`,williamsR:`Williams %R`,cci:`CCI`,mfi:`MFI`,aroon:`Aroon`,roc:`ROC`,tsi:`TSI`,cmf:`CMF`,stddev:`Std Dev`,volumeProfile:`Volume Profile`,accumulationDistribution:`A/D Line`,vroc:`VROC`,trendLine:`Trend Line`,horizontalLine:`Horizontal Line`,verticalLine:`Vertical Line`,ray:`Ray`,extendedLine:`Extended Line`,parallelChannel:`Parallel Channel`,regressionChannel:`Regression Channel`,fibRetracement:`Fibonacci Retracement`,fibExtension:`Fibonacci Extension`,rectangle:`Rectangle`,ellipse:`Ellipse`,triangle:`Triangle`,pitchfork:`Andrews' Pitchfork`,elliottWave:`Elliott Wave`,priceRange:`Price Range`,dateRange:`Date Range`,measure:`Measure`,textTool:`Text`,arrow:`Arrow`,clearAll:`Clear All`,buy:`Buy`,sell:`Sell`,buyLimit:`Buy Limit`,sellLimit:`Sell Limit`,buyStop:`Buy Stop`,sellStop:`Sell Stop`,stopLoss:`Stop Loss`,takeProfit:`Take Profit`,market:`Market`,limit:`Limit`,stop:`Stop`,cancel:`Cancel`,modify:`Modify`,quantity:`Qty`,pnl:`P&L`,activeOrders:`Active Orders`,positions:`Positions`,noOrders:`No active orders`,noPositions:`No open positions`,placeOrder:`Place Order`,rightClickToTrade:`Right-click chart to place orders`,ceiling:`Ceiling`,floor:`Floor`,reference:`Reference`,session:`Session`,preOpen:`Pre-Open`,continuous:`Continuous`,preClose:`Pre-Close`,closed:`Closed`,settings:`Settings`,theme:`Theme`,darkTheme:`Dark`,lightTheme:`Light`,tools:`Tools`,indicators:`Indicators`,overlays:`Overlays`,panels:`Panels`,orders:`Orders`,autoScale:`Auto Scale`,crosshair:`Crosshair`,grid:`Grid`,loading:`Loading...`,error:`Error`,numberDecimalSeparator:`.`,numberGroupSeparator:`,`},pn={candlestick:`Nến`,line:`Đường`,area:`Vùng`,bar:`Thanh OHLC`,price:`Giá`,volume:`Khối lượng`,time:`Thời gian`,open:`Mở`,high:`Cao`,low:`Thấp`,close:`Đóng`,sma:`SMA`,ema:`EMA`,bollingerBands:`Dải Bollinger`,vwap:`VWAP`,ichimoku:`Mây Ichimoku`,parabolicSAR:`Parabolic SAR`,supertrend:`Supertrend`,keltnerChannel:`Kênh Keltner`,donchianChannel:`Kênh Donchian`,rsi:`RSI`,macd:`MACD`,stochastic:`Stochastic`,atr:`ATR`,adx:`ADX`,obv:`OBV`,williamsR:`Williams %R`,cci:`CCI`,mfi:`MFI`,aroon:`Aroon`,roc:`ROC`,tsi:`TSI`,cmf:`CMF`,stddev:`Độ lệch chuẩn`,volumeProfile:`Phân bổ KL`,accumulationDistribution:`Tích lũy/Phân phối`,vroc:`VROC`,trendLine:`Đường xu hướng`,horizontalLine:`Đường ngang`,verticalLine:`Đường dọc`,ray:`Tia`,extendedLine:`Đường kéo dài`,parallelChannel:`Kênh song song`,regressionChannel:`Kênh hồi quy`,fibRetracement:`Fibonacci thoái lui`,fibExtension:`Fibonacci mở rộng`,rectangle:`Hình chữ nhật`,ellipse:`Hình elip`,triangle:`Tam giác`,pitchfork:`Chĩa ba Andrews`,elliottWave:`Sóng Elliott`,priceRange:`Khoảng giá`,dateRange:`Khoảng thời gian`,measure:`Đo lường`,textTool:`Chữ`,arrow:`Mũi tên`,clearAll:`Xóa tất cả`,buy:`Mua`,sell:`Bán`,buyLimit:`Mua giới hạn`,sellLimit:`Bán giới hạn`,buyStop:`Mua chặn`,sellStop:`Bán chặn`,stopLoss:`Cắt lỗ`,takeProfit:`Chốt lời`,market:`Thị trường`,limit:`Giới hạn`,stop:`Dừng`,cancel:`Hủy`,modify:`Sửa`,quantity:`KL`,pnl:`Lãi/Lỗ`,activeOrders:`Lệnh chờ`,positions:`Vị thế`,noOrders:`Không có lệnh chờ`,noPositions:`Không có vị thế mở`,placeOrder:`Đặt lệnh`,rightClickToTrade:`Nhấp chuột phải để đặt lệnh`,ceiling:`Trần`,floor:`Sàn`,reference:`Tham chiếu`,session:`Phiên`,preOpen:`Trước giờ mở`,continuous:`Liên tục`,preClose:`Trước giờ đóng`,closed:`Đóng cửa`,settings:`Cài đặt`,theme:`Giao diện`,darkTheme:`Tối`,lightTheme:`Sáng`,tools:`Công cụ`,indicators:`Chỉ báo`,overlays:`Phủ lên`,panels:`Bảng`,orders:`Lệnh`,autoScale:`Tự co giãn`,crosshair:`Chữ thập`,grid:`Lưới`,loading:`Đang tải...`,error:`Lỗi`,numberDecimalSeparator:`,`,numberGroupSeparator:`.`},W=new Map([[`en`,U],[`vi`,pn]]),G=`en`,mn=U;function hn(e){G=e,mn=W.get(e)??U}function gn(){return G}function _n(e){return mn[e]??U[e]??e}function vn(e,t){W.set(e,t)}function yn(e){return W.get(e??G)??U}function K(e,t=2,n){let r=W.get(n??G)??U,i=r.numberDecimalSeparator,a=r.numberGroupSeparator,[o,s]=e.toFixed(t).split(`.`),c=o.startsWith(`-`),l=c?o.slice(1):o,u=``;for(let e=l.length-1,t=0;e>=0;e--,t++)t>0&&t%3==0&&(u=a+u),u=l[e]+u;return c&&(u=`-`+u),s?u+i+s:u}function bn(e){return K(e,0,`vi`)}function xn(e,t){return e>=1e9?K(e/1e9,2,t??G)+`B`:e>=1e6?K(e/1e6,2,t??G)+`M`:e>=1e3?K(e/1e3,2,t??G)+`K`:K(e,0,t??G)}var q={up:`#22C55E`,down:`#EF4444`,unchanged:`#EAB308`,ceiling:`#D946EF`,floor:`#06B6D4`,reference:`#EAB308`},J=`Asia/Ho_Chi_Minh`,Sn=[{name:`ATO`,startTime:`09:00`,endTime:`09:15`,type:`preOpen`},{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`}],Cn=[{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`},{name:`PLO`,startTime:`14:45`,endTime:`15:00`,type:`postClose`}],wn=[{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`}],Tn=[{name:`ATO`,startTime:`08:45`,endTime:`09:00`,type:`preOpen`},{name:`Phiên 1`,startTime:`09:00`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`}],En={type:`stock`,exchange:`HOSE`,currency:`VND`,pricePrecision:2,volumeUnit:100,priceStep:.01,priceSteps:[{from:0,step:.01},{from:10,step:.05},{from:50,step:.1}],timeZone:J,priceLimits:{enabled:!0,ceilingPercent:7,floorPercent:7},sessions:Sn,colorScheme:q},Dn={...En,priceSteps:void 0},On={type:`stock`,exchange:`HNX`,currency:`VND`,pricePrecision:1,volumeUnit:100,priceStep:.1,timeZone:J,priceLimits:{enabled:!0,ceilingPercent:10,floorPercent:10},sessions:Cn,colorScheme:q},kn={type:`stock`,exchange:`UPCOM`,currency:`VND`,pricePrecision:1,volumeUnit:100,priceStep:.1,timeZone:J,priceLimits:{enabled:!0,ceilingPercent:15,floorPercent:15},sessions:wn,colorScheme:q},An={type:`futures`,exchange:`HNX`,currency:`VND`,pricePrecision:1,volumeUnit:1,priceStep:.1,contractMultiplier:1e5,timeZone:J,priceLimits:{enabled:!0,ceilingPercent:7,floorPercent:7},sessions:Tn,colorScheme:q},jn={type:`crypto`,currency:`USDT`,pricePrecision:2,priceLimits:{enabled:!1}},Mn={type:`stock`,exchange:`NYSE`,currency:`USD`,pricePrecision:2,priceStep:.01,timeZone:`America/New_York`,priceLimits:{enabled:!1},sessions:[{name:`Pre-Market`,startTime:`04:00`,endTime:`09:30`,type:`preOpen`},{name:`Regular`,startTime:`09:30`,endTime:`16:00`,type:`continuous`},{name:`After-Hours`,startTime:`16:00`,endTime:`20:00`,type:`postClose`}]};function Nn(e){return{...e,candleUp:q.up,candleDown:q.down,candleUpWick:q.up,candleDownWick:q.down,volumeUp:P(q.up),volumeDown:P(q.down)}}var Y=1e-9;function Pn(e,t){let n=t.priceStep;for(let r of t.priceSteps??[])e+Y>=r.from&&(n=r.step);return n!==void 0&&n>0?n:void 0}function Fn(e,t){let n=t.priceStep;for(let r of t.priceSteps??[])e-Y>r.from&&(n=r.step);return n!==void 0&&n>0?n:void 0}function X(e,t,n=`nearest`){let r=Pn(e,t);if(r===void 0||!Number.isFinite(e))return e;let i=e/r,a=n===`down`?Math.floor(i+Y):n===`up`?Math.ceil(i-Y):Math.round(i);return Number((a*r).toFixed(pt(r)))}function In(e,t){if(!t.priceLimits?.enabled||!t.priceLimits.ceilingPercent)return null;let n=t.priceLimits.ceilingPercent/100,r=(t.priceLimits.floorPercent??t.priceLimits.ceilingPercent)/100,i=e,a=i*(1+n),o=i*(1-r),s=Pn(i,t);if(s===void 0)return{ceiling:a,floor:o,reference:i};let c=X(i+s,t);if(Math.abs(i-s)<Y)return{ceiling:c,floor:i,reference:i};let l=X(a,t,`down`),u=X(o,t,`up`);return l<=i&&(l=c),u>=i&&(u=X(i-(Fn(i,t)??s),t)),u<=0&&(u=i),{ceiling:l,floor:u,reference:i}}var Z=(e,t)=>Math.round(e*t*1e9)/1e9;function Ln(e,t){let n=Math.round(Math.log10(t));return{...e,pricePrecision:e.pricePrecision===void 0?void 0:Math.max(0,e.pricePrecision-n),priceStep:e.priceStep===void 0?void 0:Z(e.priceStep,t),priceSteps:e.priceSteps?.map(e=>({from:Z(e.from,t),step:Z(e.step,t)})),priceLimits:e.priceLimits&&{...e.priceLimits,referencePrice:e.priceLimits.referencePrice===void 0?void 0:Z(e.priceLimits.referencePrice,t)}}}var Rn=6e4,zn=864e5;function Bn(e,t){let n,r;if(t){let i=new Date(e+v(t,e)*Rn);n=i.getUTCHours(),r=i.getUTCMinutes()}else{let t=new Date(e);n=t.getHours(),r=t.getMinutes()}return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}function Vn(e,t=Date.now(),n){if(n!==void 0&&!Ee(n))return null;let r=Bn(t,n);for(let t of e)if(r>=t.startTime&&r<t.endTime)return t;return null}var Q=e=>String(e).padStart(2,`0`),$=e=>{let t=new Date(e);return`${t.getUTCFullYear()}-${Q(t.getUTCMonth()+1)}-${Q(t.getUTCDate())}`},Hn=4,Un=7*36e5;function Wn(e,t,n){let r=Date.UTC(e,t-1,1),i=1+(Hn-new Date(r).getUTCDay()+7)%7,a=Date.UTC(e,t-1,i+14),o=e=>{let t=new Date(e).getUTCDay();return t===0||t===6||(n?.($(e))??!1)};for(;o(a);)a-=zn;return $(a)}function Gn(e,t){let n=$(e+Un),r=(e,n)=>({symbol:`VN30F${Q(e%100)}${Q(n)}`,year:e,month:n,lastTradingDay:Wn(e,n,t)}),i=e=>e.month===12?r(e.year+1,1):r(e.year,e.month+1),a=new Date(e+Un),o=r(a.getUTCFullYear(),a.getUTCMonth()+1);n>o.lastTradingDay&&(o=i(o));let s=[o,i(o)],c=i(s[1]);for(;s.length<4;)c.month%3==0&&s.push(c),c=i(c);return s}exports.CHART_STYLE_KEYS=t,exports.DARK_TERMINAL=z,exports.DARK_THEME=L,exports.DEFAULT_BAR_SPACING=cn,exports.DEFAULT_BAR_WIDTH=sn,exports.DEFAULT_CHART_OPTIONS=tn,exports.DEFAULT_DRAWING_STYLE=n,exports.DEFAULT_FONT_FAMILY=Nt,exports.DEFAULT_PANEL_HEIGHT=fn,exports.DEFAULT_RECONNECT=o,exports.DEFAULT_SIGNAL_STYLE=i,exports.DEFAULT_STREAM_CONFIG=s,exports.DEFAULT_TIMEFRAME_FAVORITES=on,exports.DEFAULT_TRADE_ZONE_STYLE=a,exports.DEFAULT_TRADING_CONFIG=r,exports.HNX_SESSIONS=Cn,exports.HOSE_SESSIONS=Sn,exports.LIGHT_THEME=R,exports.LayerType=e,exports.MARKET_CRYPTO=jn,exports.MARKET_HNX=On,exports.MARKET_HOSE=En,exports.MARKET_HOSE_ETF=Dn,exports.MARKET_NYSE=Mn,exports.MARKET_UPCOM=kn,exports.MARKET_VN30F=An,exports.MIN_PANEL_HEIGHT=dn,exports.MS_TIME_THRESHOLD=le,exports.PRICE_AXIS_WIDTH=ln,exports.PRICE_SOURCES=tt,exports.TC_PALETTE=N,exports.TC_SERIES_COLORS=It,exports.TIMEFRAMES_CRYPTO=nn,exports.TIMEFRAMES_FOREX=an,exports.TIMEFRAMES_STOCK=rn,exports.TIME_AXIS_HEIGHT=un,exports.UPCOM_SESSIONS=wn,exports.VN30F_SESSIONS=Tn,exports.VN_COLORS=q,exports.VOLUME_ALPHA=Ft,exports.alignToTimeframe=Re,exports.autoPricePrecision=Je,exports.barTimeUnit=ue,exports.barsAreDaily=He,exports.chartStyleValue=en,exports.clamp=re,exports.computePriceLimits=In,exports.computePriceRange=he,exports.computeTickStep=ce,exports.createVNTheme=Nn,exports.detectPrecision=et,exports.drawingOption=Ct,exports.en=U,exports.findBarIndex=me,exports.formatFraction=Xe,exports.formatNumber=K,exports.formatPrice=w,exports.formatPriceScaleLabel=Ye,exports.formatTimestamp=Le,exports.formatVND=bn,exports.formatVolume=$e,exports.formatVolumeLoc=xn,exports.fractionTick=Ze,exports.getCurrentSession=Vn,exports.getLocale=gn,exports.getLocaleStrings=yn,exports.hexToRgba=_e,exports.indicatorSource=at,exports.inverseLerp=ae,exports.isDateOnly=Be,exports.isPriceSource=nt,exports.isTimeFrame=Ie,exports.isValidTimeZone=Ee,exports.lerp=ie,exports.lerpColor=ye,exports.lineDash=Yt,exports.marketStatus=ht,exports.mergeBar=ge,exports.niceNumber=se,exports.normalizeBar=fe,exports.normalizeBarTime=de,exports.offsetAt=y,exports.parseIndicatorSource=ot,exports.parseTimeframe=x,exports.pickBaseTimeframe=ut,exports.priceFormatterFor=Qe,exports.priceStepAt=Pn,exports.rankSymbols=ft,exports.readChartStyleOverrides=Gt,exports.readChartTypeOptions=Mt,exports.readIndicatorPlotStyles=Jt,exports.readNews=ne,exports.readPaneStyle=Kt,exports.readQuote=l,exports.registerLocale=vn,exports.resampleBars=ct,exports.resolveChartTheme=Zt,exports.resolveDrawingOptions=wt,exports.resolveVolumeColors=B,exports.roundToPriceStep=X,exports.roundToStep=oe,exports.sanitizeDrawingOptions=xt,exports.sanitizeDrawingStyle=jt,exports.scaleMarketPrices=Ln,exports.sessionMinute=E,exports.setLocale=hn,exports.sliceVisibleData=pe,exports.sourcePrice=rt,exports.stepDecimals=pt,exports.t=_n,exports.tickBarCount=Fe,exports.timeParts=ze,exports.timeframeBucketStart=Ge,exports.timeframeToMs=S,exports.tzLabel=Ue,exports.vi=pn,exports.vn30fContracts=Gn,exports.vn30fLastTradingDay=Wn,exports.volumeColor=P,exports.wallToUtc=ke,exports.withAlpha=ve,exports.zoneOffsetMinutes=v,exports.zonedDateFormatter=je;
2
2
  //# sourceMappingURL=index.cjs.map