candleview 2.0.1 → 2.0.2
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.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { default as default_2 } from 'react';
|
|
2
2
|
import { JSX } from 'react/jsx-runtime';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
declare enum AIBrandType {
|
|
5
5
|
Aliyun = "aliyun",
|
|
6
6
|
OpenAI = "openai",
|
|
7
7
|
DeepSeek = "deepseek",
|
|
@@ -11,7 +11,7 @@ export declare enum AIBrandType {
|
|
|
11
11
|
|
|
12
12
|
declare interface AIConfig {
|
|
13
13
|
apiKey: string;
|
|
14
|
-
brand:
|
|
14
|
+
brand: string;
|
|
15
15
|
model: string;
|
|
16
16
|
maxAnalyzeData?: number;
|
|
17
17
|
}
|
package/dist/index.js
CHANGED
|
@@ -505,7 +505,7 @@ ${X}`)}else I(H?`Command executed: ${E}`:`命令已执行: ${E}`)},vt=E=>{if(!r)
|
|
|
505
505
|
[style*="overflowY: auto"]::-webkit-scrollbar-track {
|
|
506
506
|
background: transparent;
|
|
507
507
|
}
|
|
508
|
-
`}),this.renderCursorTools(),this.renderLineTools(),this.renderTecGraphTools(),this.renderMarkTools(),m.jsx("div",{style:{height:"1px",background:this.props.currentTheme.toolbar.border,margin:"10px 0",flexShrink:0}}),this.props.ai&&this.renderAITools(),this.renderTerminalButton(),m.jsx("div",{style:{height:"1px",background:this.props.currentTheme.toolbar.border,margin:"10px 0",flexShrink:0}}),this.renderOtherTools(),m.jsx("div",{style:{height:"1px",background:this.props.currentTheme.toolbar.border,margin:"10px 0",flexShrink:0}}),this.renderTrash()]})})}),this.renderDrawingModal(),this.renderBrushModal(),this.renderCursorModal(),this.renderEmojiSelectPopUp(),this.renderFibonacciModal(),this.renderProjectInfoModal(),this.renderIrregularShapeModal(),this.renderTextToolModal(),this.props.ai&&this.renderAIToolsModal()]})}}class yt extends A.Component{constructor(t){super(t),this.toggleOpen=()=>{this.setState(e=>({isOpen:!e.isOpen}))},this.state={isOpen:t.defaultOpen||!1}}render(){const{title:t,tools:e,currentTheme:i,activeTool:r,onToolSelect:s}=this.props,{isOpen:a}=this.state;return m.jsxs("div",{style:{borderBottom:`1px solid ${i.toolbar.border}`},children:[m.jsxs("button",{onClick:this.toggleOpen,style:{width:"100%",background:"transparent",border:"none",padding:"12px 12px",color:i.layout.textColor,cursor:"pointer",display:"flex",justifyContent:"space-between",alignItems:"center",fontSize:"13px",fontWeight:"600",transition:"background-color 0.2s"},onMouseEnter:n=>{n.currentTarget.style.background=i.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("span",{children:t}),m.jsx("span",{style:{transform:a?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s",fontSize:"12px"},children:"▼"})]}),a&&m.jsx("div",{style:{padding:"0px",background:i.toolbar.background},children:m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0px"},children:e.map(n=>{const o=n.icon,h=r===n.id;return m.jsxs("button",{onClick:()=>s(n.id),style:{background:h?i.toolbar.button.active:"transparent",border:h?`2px solid ${i.toolbar.button.active}`:"2px solid transparent",padding:"10px 10px",borderRadius:"0px",color:h?i.toolbar.button.activeTextColor||"#FFFFFF":i.layout.textColor,textAlign:"left",cursor:"pointer",fontSize:"12px",fontWeight:"500",transition:"all 0.2s ease",display:"flex",alignItems:"center",gap:"0px",width:"100%"},onMouseEnter:l=>{h||(l.currentTarget.style.background=i.toolbar.button.hover)},onMouseLeave:l=>{h||(l.currentTarget.style.background="transparent")},children:[m.jsx(o,{size:24,color:h?i.toolbar.button.activeTextColor||i.layout.textColor:i.toolbar.button.color}),m.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start",flex:1,paddingLeft:"5px"},children:[m.jsx("div",{style:{fontWeight:"600",fontSize:"12px",lineHeight:"1.2"},children:n.name}),m.jsx("div",{style:{fontSize:"10px",opacity:.7,lineHeight:"1.2",marginTop:"2px",textAlign:"left"},children:n.description})]})]},n.id)})})})]})}}const xe=[{id:"ma",name:"Moving Average (MA)",type:R.MA},{id:"ema",name:"Exponential Moving Average (EMA)",type:R.EMA},{id:"bollinger",name:"Bollinger Bands",type:R.BOLLINGER},{id:"ichimoku",name:"Ichimoku Cloud",type:R.ICHIMOKU},{id:"donchian",name:"Donchian Channel",type:R.DONCHIAN},{id:"envelope",name:"Envelope",type:R.ENVELOPE},{id:"vwap",name:"Volume Weighted Average Price (VWAP)",type:R.VWAP}],De=[{id:"heatmap",name:"Heat Map",type:R.HEATMAP},{id:"market-profile",name:"Market Profile",type:R.MARKETPROFILE}],Li=[{id:"rsi",name:"Relative Strength Index (RSI)",type:U.RSI},{id:"macd",name:"MACD",type:U.MACD},{id:"volume",name:"Volume",type:U.VOLUME},{id:"sar",name:"Parabolic SAR (SAR)",type:U.SAR},{id:"kdj",name:"KDJ",type:U.KDJ},{id:"atr",name:"Average True Range (ATR)",type:U.ATR},{id:"stochastic",name:"Stochastic Oscillator",type:U.STOCHASTIC},{id:"cci",name:"Commodity Channel Index (CCI)",type:U.CCI},{id:"bbwidth",name:"Bollinger Bands Width",type:U.BBWIDTH},{id:"adx",name:"Average Directional Index (ADX)",type:U.ADX},{id:"obv",name:"On Balance Volume (OBV)",type:U.OBV}];function wl(f){return[{type:f.timeframeSections.second,sectionKey:"Second",values:[D.ONE_SECOND,D.FIVE_SECONDS,D.FIFTEEN_SECONDS,D.THIRTY_SECONDS]},{type:f.timeframeSections.minute,sectionKey:"Minute",values:[D.ONE_MINUTE,D.THREE_MINUTES,D.FIVE_MINUTES,D.FIFTEEN_MINUTES,D.THIRTY_MINUTES,D.FORTY_FIVE_MINUTES]},{type:f.timeframeSections.hour,sectionKey:"Hour",values:[D.ONE_HOUR,D.TWO_HOURS,D.THREE_HOURS,D.FOUR_HOURS,D.SIX_HOURS,D.EIGHT_HOURS,D.TWELVE_HOURS]},{type:f.timeframeSections.day,sectionKey:"Day",values:[D.ONE_DAY,D.THREE_DAYS]},{type:f.timeframeSections.week,sectionKey:"Week",values:[D.ONE_WEEK,D.TWO_WEEKS]},{type:f.timeframeSections.month,sectionKey:"Month",values:[D.ONE_MONTH,D.THREE_MONTHS,D.SIX_MONTHS]}]}function vl(f,t){var e=xe.find(r=>r.id===t);e||(e=De.find(r=>r.id===t));let i;switch(e?.type){case R.MA:i={...qi,nonce:Date.now()};break;case R.EMA:i={...$i,nonce:Date.now()};break;case R.BOLLINGER:i={...zi,nonce:Date.now()};break;case R.ICHIMOKU:i={...Gi,nonce:Date.now()};break;case R.DONCHIAN:i={...Ki,nonce:Date.now()};break;case R.ENVELOPE:i={...Zi,nonce:Date.now()};break;case R.VWAP:i={...Ji,nonce:Date.now()};break;case R.HEATMAP:i={...Qi,nonce:Date.now()};break;case R.MARKETPROFILE:i={...tr,nonce:Date.now()};break;default:i=null;break}i&&(f.setState({selectedMainIndicator:i}),f.props.handleSelectedMainChartIndicator(i))}function xl(f,t){f.setState(e=>{const i=e.selectedSubChartIndicators.includes(t);let r;return i?r=e.selectedSubChartIndicators.filter(s=>s!==t):r=[...e.selectedSubChartIndicators,t],f.props.handleSelectedSubChartIndicator&&f.props.handleSelectedSubChartIndicator(r),{selectedSubChartIndicators:r}})}class Dl extends A.Component{constructor(){super(...arguments),this.timeframeModalRef=A.createRef(),this.chartTypeModalRef=A.createRef(),this.indicatorModalRef=A.createRef(),this.timezoneModalRef=A.createRef(),this.mobileMenuModalRef=A.createRef(),this.state={mainIndicatorsSearch:"",subChartIndicatorsSearch:"",chartTypeSearch:"",selectedMainIndicator:null,selectedSubChartIndicators:[],timeframeSections:{Second:!0,Minute:!0,Hour:!0,Day:!0,Week:!0,Month:!0},timezoneSearch:"",indicatorSections:{technicalIndicators:!0,chart:!0,subChartIndicators:!0},windowWidth:typeof window<"u"?window.innerWidth:1024},this.handleResize=()=>{this.setState({windowWidth:window.innerWidth})},this.isMobileView=()=>this.state.windowWidth<=500,this.toggleMobileMenu=()=>{this.props.onMobileMenuToggle()},this.closeMobileMenu=()=>{this.props.isMobileMenuOpen&&this.props.onMobileMenuToggle()},this.handleTimeframeSelect=t=>{this.props.onTimeframeSelect(t),this.props.onCloseModals&&this.props.onCloseModals(),this.closeMobileMenu()},this.handleChartTypeSelect=t=>{this.props.onChartTypeSelect(t),this.props.onCloseModals&&this.props.onCloseModals(),this.closeMobileMenu()},this.handleTimezoneSelect=t=>{this.props.onTimezoneSelect(t),this.props.onCloseModals&&this.props.onCloseModals(),this.closeMobileMenu()},this.handleMainIndicatorsSearch=t=>{this.setState({mainIndicatorsSearch:t.target.value})},this.handleTimezoneSearch=t=>{this.setState({timezoneSearch:t.target.value})},this.filteredMaps=()=>{const{mainIndicatorsSearch:t}=this.state;return t?De.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())):De},this.filteredMainIndicators=()=>{const{mainIndicatorsSearch:t}=this.state;return t?xe.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())):xe},this.filteredSubChartIndicators=()=>{const{subChartIndicatorsSearch:t}=this.state;return t?Li.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())):Li},this.toggleTimeframeSection=t=>{this.setState(e=>({timeframeSections:{...e.timeframeSections,[t]:!e.timeframeSections[t]}}))},this.toggleIndicatorSection=t=>{this.setState(e=>({indicatorSections:{...e.indicatorSections,[t]:!e.indicatorSections[t]}}))},this.getChartTypeLabel=t=>{const{i18n:e}=this.props;switch(t){case $.Candle:return e.chartTypes.candle;case $.HollowCandle:return e.chartTypes.hollowCandle;case $.Bar:return e.chartTypes.bar;case $.BaseLine:return e.chartTypes.baseline;case $.Line:return e.chartTypes.line;case $.Area:return e.chartTypes.area;case $.StepLine:return e.chartTypes.stepLine;case $.HeikinAshi:return e.chartTypes.heikinAshi;case $.Histogram:return e.chartTypes.histogram;case $.LineBreak:return e.chartTypes.linebreak;case $.Mountain:return e.chartTypes.mountain;case $.BaselineArea:return e.chartTypes.baselinearea;case $.HighLow:return e.chartTypes.highlow;case $.HLCArea:return e.chartTypes.hlcarea;default:return""}},this.handleMenuItemClick=t=>{this.props.onCloseModals&&this.props.onCloseModals(),t&&t()},this.handleChartTypeSearch=t=>{this.setState({chartTypeSearch:t.target.value})},this.renderChartTypeModal=()=>{const{isChartTypeModalOpen:t,currentTheme:e,activeMainChartType:i,i18n:r}=this.props,{chartTypeSearch:s}=this.state;if(!t)return null;const a=s?Ce.filter(n=>this.getChartTypeLabel(n.type).toLowerCase().includes(s.toLowerCase())):Ce;return m.jsxs("div",{ref:this.chartTypeModalRef,"data-chart-type-modal":"true",style:{position:"absolute",top:(this.isMobileView(),"43px"),left:this.isMobileView()?"0px":"0",zIndex:1e3,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"0",minWidth:this.isMobileView()?"calc(100vw - 20px)":"200px",maxWidth:this.isMobileView()?"calc(100vw - 20px)":"none",maxHeight:"400px",overflow:"hidden",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)",display:"flex",flexDirection:"column"},children:[m.jsx("div",{style:{padding:"8px",borderBottom:`1px solid ${e.toolbar.border}`,flexShrink:0},children:m.jsxs("div",{style:{position:"relative",width:"100%"},children:[m.jsx("input",{type:"text",placeholder:r.searchChartTypes,value:s,onChange:this.handleChartTypeSearch,style:{width:"100%",background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"8px 32px 8px 12px",color:e.layout.textColor,fontSize:"13px",outline:"none",boxSizing:"border-box"},onFocus:n=>{n.target.style.borderColor=e.toolbar.button.active},onBlur:n=>{n.target.style.borderColor=e.toolbar.border}}),s&&m.jsx("button",{onClick:()=>this.setState({chartTypeSearch:""}),style:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",background:"transparent",border:"none",borderRadius:"50%",width:"18px",height:"18px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",color:e.toolbar.button.color,opacity:.6,transition:"all 0.2s ease",fontSize:"12px",padding:0},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover,n.currentTarget.style.opacity="1"},onMouseLeave:n=>{n.currentTarget.style.background="transparent",n.currentTarget.style.opacity="0.6"},children:m.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[m.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),m.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})}),m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2px",overflowY:"auto",flex:1,padding:"8px",maxHeight:"352px"},className:"modal-scrollbar",children:a.map(n=>{const o=i===n.type;return m.jsxs("button",{onClick:()=>this.handleChartTypeSelect(n.type),style:{background:o?e.toolbar.button.active:"transparent",border:"none",borderRadius:"0px",padding:"6px 8px",cursor:"pointer",color:o?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",gap:"12px",minHeight:"32px",width:"100%"},onMouseEnter:h=>{o||(h.currentTarget.style.background=e.toolbar.button.hover)},onMouseLeave:h=>{o||(h.currentTarget.style.background="transparent")},children:[m.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"20px",height:"20px",flexShrink:0},children:_e(n.type,{size:30})}),m.jsx("div",{style:{fontSize:"13px",fontWeight:"500",color:o?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,flex:1,textAlign:"left"},children:this.getChartTypeLabel(n.type)})]},n.type)})})]})},this.renderIndicatorModal=()=>{const{isIndicatorModalOpen:t,currentTheme:e,i18n:i}=this.props,{mainIndicatorsSearch:r,indicatorSections:s}=this.state,a=this.filteredMainIndicators(),n=this.filteredMaps(),o=this.filteredSubChartIndicators();if(!t)return null;const h=[{type:i.mainChartIndicators||"技术指标",sectionKey:"technicalIndicators",values:a},{type:i.subChartIndicators||"副图指标",sectionKey:"subChartIndicators",values:o},{type:i.chartMaps||"图",sectionKey:"chart",values:n}];return m.jsxs("div",{ref:this.indicatorModalRef,"data-indicator-modal":"true",style:{position:"absolute",top:(this.isMobileView(),"43px"),left:this.isMobileView()?"0px":"0",zIndex:1e3,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"0",minWidth:this.isMobileView()?"calc(100vw - 20px)":"280px",maxWidth:this.isMobileView()?"calc(100vw - 20px)":"none",maxHeight:"400px",overflow:"hidden",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)",display:"flex",flexDirection:"column"},children:[m.jsx("div",{style:{padding:"8px",borderBottom:`1px solid ${e.toolbar.border}`,flexShrink:0},children:m.jsxs("div",{style:{position:"relative",width:"100%"},children:[m.jsx("input",{type:"text",placeholder:i.searchIndicators,value:r,onChange:this.handleMainIndicatorsSearch,style:{width:"100%",background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"8px 32px 8px 12px",color:e.layout.textColor,fontSize:"13px",outline:"none",boxSizing:"border-box"},onFocus:l=>{l.target.style.borderColor=e.toolbar.button.active},onBlur:l=>{l.target.style.borderColor=e.toolbar.border}}),r&&m.jsx("button",{onClick:()=>this.setState({mainIndicatorsSearch:""}),style:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",background:"transparent",border:"none",borderRadius:"50%",width:"18px",height:"18px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",color:e.toolbar.button.color,opacity:.6,transition:"all 0.2s ease",fontSize:"12px",padding:0},onMouseEnter:l=>{l.currentTarget.style.background=e.toolbar.button.hover,l.currentTarget.style.opacity="1"},onMouseLeave:l=>{l.currentTarget.style.background="transparent",l.currentTarget.style.opacity="0.6"},children:m.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[m.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),m.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})}),m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px",overflowY:"auto",flex:1,padding:"8px",maxHeight:"352px"},className:"modal-scrollbar",children:h.map(l=>{const d=s[l.sectionKey],c=l.sectionKey==="subChartIndicators";return m.jsxs("div",{children:[m.jsxs("button",{onClick:()=>this.toggleIndicatorSection(l.sectionKey),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 10px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"32px"},onMouseEnter:u=>{u.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:u=>{u.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"12px",fontWeight:"600",opacity:.8,textTransform:"uppercase"},children:l.type}),m.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"16px",height:"16px",transition:"transform 0.2s ease",transform:d?"rotate(180deg)":"rotate(0deg)"},children:m.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("polyline",{points:"6 9 12 15 18 9"})})})]}),d&&m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:l.values.map(u=>{const g=c?this.state.selectedSubChartIndicators.includes(u.type):!1;return m.jsxs("button",{onClick:()=>{c?xl(this,u.type):vl(this,u.id)},style:{background:"transparent",border:"none",padding:"6px 8px",borderRadius:"0px",cursor:"pointer",display:"flex",alignItems:"center",transition:"all 0.2s ease",minHeight:"32px",width:"100%",textAlign:"left"},onMouseEnter:p=>{p.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:p=>{p.currentTarget.style.background="transparent"},children:[c?m.jsx(A.Fragment,{children:m.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"16px",height:"16px",border:`2px solid ${g?e.toolbar.button.active:e.toolbar.border}`,borderRadius:"3px",marginRight:"10px",background:g?e.toolbar.button.active:"transparent",transition:"all 0.2s ease",flexShrink:0,position:"relative"},children:g&&m.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#ffffff",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)"},children:m.jsx("polyline",{points:"20 6 9 17 4 12"})})})}):null,m.jsx("div",{style:{fontSize:"13px",fontWeight:"500",color:e.layout.textColor,textAlign:"left",flex:1,lineHeight:"1.4"},children:u.name})]},u.id)})})]},l.type)})})]})}}componentDidMount(){typeof window<"u"&&window.addEventListener("resize",this.handleResize)}componentWillUnmount(){typeof window<"u"&&window.removeEventListener("resize",this.handleResize)}componentDidUpdate(t){t.selectedSubChartIndicators!==this.props.selectedSubChartIndicators&&this.setState({selectedSubChartIndicators:this.props.selectedSubChartIndicators||[]})}getCurrentTimezoneDisplayName(){const{i18n:t}=this.props;return{[j.NEW_YORK]:t.options.newYork.split(" ")[0],[j.CHICAGO]:t.options.chicago.split(" ")[0],[j.DENVER]:t.options.denver.split(" ")[0],[j.LOS_ANGELES]:t.options.losAngeles.split(" ")[0],[j.TORONTO]:t.options.toronto.split(" ")[0],[j.LONDON]:t.options.london.split(" ")[0],[j.PARIS]:t.options.paris.split(" ")[0],[j.FRANKFURT]:t.options.frankfurt.split(" ")[0],[j.ZURICH]:t.options.zurich.split(" ")[0],[j.MOSCOW]:t.options.moscow.split(" ")[0],[j.DUBAI]:t.options.dubai.split(" ")[0],[j.KARACHI]:t.options.karachi.split(" ")[0],[j.KOLKATA]:t.options.kolkata.split(" ")[0],[j.SHANGHAI]:t.options.shanghai.split(" ")[0],[j.HONG_KONG]:t.options.hongKong.split(" ")[0],[j.SINGAPORE]:t.options.singapore.split(" ")[0],[j.TOKYO]:t.options.tokyo.split(" ")[0],[j.SEOUL]:t.options.seoul.split(" ")[0],[j.SYDNEY]:t.options.sydney.split(" ")[0],[j.AUCKLAND]:t.options.auckland.split(" ")[0],[j.UTC]:"UTC"}[this.props.currentTimezone]||this.props.currentTimezone.split("/").pop()||this.props.currentTimezone}renderMobileMenuModal(){const{isMobileMenuOpen:t}=this.props,{currentTheme:e,i18n:i,activeTimeframe:r,activeMainChartType:s,currentTimezone:a}=this.props;return t?m.jsx("div",{ref:this.mobileMenuModalRef,"data-mobile-menu-modal":"true",style:{position:"absolute",top:"43px",left:"0px",zIndex:1001,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"8px 0",minWidth:"200px",maxHeight:"400px",overflowY:"auto",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)"},className:"modal-scrollbar",children:m.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onTimeframeClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.timeframe||"Timeframe"}),m.jsx("div",{style:{fontSize:"13px",opacity:.7},children:r})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onTimezoneClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.timezone||"Timezone"}),m.jsx("div",{style:{fontSize:"13px",opacity:.7},children:this.getCurrentTimezoneDisplayName()})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onChartTypeClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.chartType||"Chart Type"}),m.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[m.jsx("div",{style:{fontSize:"13px",opacity:.7},children:this.getChartTypeLabel(s)}),_e(s,{size:16})]})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onIndicatorClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.Indicators}),m.jsx(vi,{size:16,color:e.toolbar.button.color})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onFullscreenClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.toolbarButtons.fullScreen}),m.jsx(Ci,{size:16,color:e.toolbar.button.color})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onCameraClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.toolbarButtons.screenshot}),m.jsx(wi,{size:16,color:e.toolbar.button.color})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onThemeToggle),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.theme}),m.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[m.jsx("div",{style:{fontSize:"13px",opacity:.7},children:this.props.isDarkTheme?i.dark:i.light}),m.jsx("div",{style:{width:"32px",height:"18px",borderRadius:"9px",background:this.props.isDarkTheme?e.toolbar.button.active:e.toolbar.border,position:"relative",display:"flex",alignItems:"center",padding:"2px"},children:m.jsx("div",{style:{width:"14px",height:"14px",borderRadius:"50%",background:e.layout.textColor,transform:this.props.isDarkTheme?"translateX(14px)":"translateX(0)",transition:"transform 0.3s ease"}})})]})]})]})}):null}renderTimeframeModal(){const{isTimeframeModalOpen:t,currentTheme:e,activeTimeframe:i}=this.props,{timeframeSections:r}=this.state;if(!t)return null;const s=wl(this.props.i18n);return m.jsx("div",{ref:this.timeframeModalRef,"data-timeframe-modal":"true",style:{position:"absolute",top:(this.isMobileView(),"43px"),left:(this.isMobileView(),"0px"),zIndex:1e3,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"0",minWidth:this.isMobileView()?"calc(100vw - 20px)":"180px",maxWidth:this.isMobileView()?"calc(100vw - 20px)":"none",maxHeight:"400px",overflowY:"auto",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)"},className:"modal-scrollbar",children:m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:s.map(a=>{const n=r[a.sectionKey];return m.jsxs("div",{children:[m.jsxs("button",{onClick:()=>this.toggleTimeframeSection(a.sectionKey),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 10px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"32px"},onMouseEnter:o=>{o.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:o=>{o.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"12px",fontWeight:"600",opacity:.8,textTransform:"uppercase"},children:a.type}),m.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"16px",height:"16px",transition:"transform 0.2s ease",transform:n?"rotate(180deg)":"rotate(0deg)"},children:m.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("polyline",{points:"6 9 12 15 18 9"})})})]}),n&&m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:a.values.map(o=>{const h=i===o;return m.jsx("button",{onClick:()=>this.handleTimeframeSelect(o),style:{background:h?e.toolbar.button.active:"transparent",border:"none",borderRadius:"0px",padding:"6px 15px",cursor:"pointer",color:h?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",minHeight:"32px",width:"100%"},onMouseEnter:l=>{h||(l.currentTarget.style.background=e.toolbar.button.hover)},onMouseLeave:l=>{h||(l.currentTarget.style.background="transparent")},children:m.jsx("div",{style:{fontSize:"13px",fontWeight:"500",color:h?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,flex:1,textAlign:"left"},children:$o(o,this.props.i18n)})},o)})})]},a.type)})})})}renderTimezoneModal(){const{isTimezoneModalOpen:t,currentTheme:e,i18n:i}=this.props,{timezoneSearch:r}=this.state;if(!t)return null;const s=[{id:j.NEW_YORK,name:i.options.newYork,offset:"-05:00/-04:00"},{id:j.CHICAGO,name:i.options.chicago,offset:"-06:00/-05:00"},{id:j.DENVER,name:i.options.denver,offset:"-07:00/-06:00"},{id:j.LOS_ANGELES,name:i.options.losAngeles,offset:"-08:00/-07:00"},{id:j.TORONTO,name:i.options.toronto,offset:"-05:00/-04:00"},{id:j.LONDON,name:i.options.london,offset:"+00:00/+01:00"},{id:j.PARIS,name:i.options.paris,offset:"+01:00/+02:00"},{id:j.FRANKFURT,name:i.options.frankfurt,offset:"+01:00/+02:00"},{id:j.ZURICH,name:i.options.zurich,offset:"+01:00/+02:00"},{id:j.MOSCOW,name:i.options.moscow,offset:"+03:00"},{id:j.DUBAI,name:i.options.dubai,offset:"+04:00"},{id:j.KARACHI,name:i.options.karachi,offset:"+05:00"},{id:j.KOLKATA,name:i.options.kolkata,offset:"+05:30"},{id:j.SHANGHAI,name:i.options.shanghai,offset:"+08:00"},{id:j.HONG_KONG,name:i.options.hongKong,offset:"+08:00"},{id:j.SINGAPORE,name:i.options.singapore,offset:"+08:00"},{id:j.TOKYO,name:i.options.tokyo,offset:"+09:00"},{id:j.SEOUL,name:i.options.seoul,offset:"+09:00"},{id:j.SYDNEY,name:i.options.sydney,offset:"+10:00/+11:00"},{id:j.AUCKLAND,name:i.options.auckland,offset:"+12:00/+13:00"},{id:j.UTC,name:i.options.utc,offset:"+00:00"}],a=r?s.filter(n=>n.name.toLowerCase().includes(r.toLowerCase())||n.id.toLowerCase().includes(r.toLowerCase())):s;return m.jsxs("div",{ref:this.timezoneModalRef,"data-timezone-modal":"true",style:{position:"absolute",top:(this.isMobileView(),"43px"),left:(this.isMobileView(),"0px"),zIndex:1e3,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"0",minWidth:this.isMobileView()?"calc(100vw - 20px)":"300px",maxWidth:this.isMobileView()?"calc(100vw - 20px)":"none",maxHeight:"400px",overflow:"hidden",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)",display:"flex",flexDirection:"column"},children:[m.jsx("div",{style:{padding:"8px",borderBottom:`1px solid ${e.toolbar.border}`,flexShrink:0},children:m.jsxs("div",{style:{position:"relative",width:"100%"},children:[m.jsx("input",{type:"text",placeholder:i.searchTimezones,value:r,onChange:this.handleTimezoneSearch,style:{width:"100%",background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"8px 32px 8px 12px",color:e.layout.textColor,fontSize:"13px",outline:"none",boxSizing:"border-box"},onFocus:n=>{n.target.style.borderColor=e.toolbar.button.active},onBlur:n=>{n.target.style.borderColor=e.toolbar.border}}),r&&m.jsx("button",{onClick:()=>this.setState({timezoneSearch:""}),style:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",background:"transparent",border:"none",borderRadius:"50%",width:"18px",height:"18px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",color:e.toolbar.button.color,opacity:.6,transition:"all 0.2s ease",fontSize:"12px",padding:0},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover,n.currentTarget.style.opacity="1"},onMouseLeave:n=>{n.currentTarget.style.background="transparent",n.currentTarget.style.opacity="0.6"},children:m.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[m.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),m.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})}),m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2px",overflowY:"auto",flex:1,padding:"8px",maxHeight:"300px"},className:"modal-scrollbar",children:a.map(n=>{const o=this.props.currentTimezone===n.id;return m.jsxs("button",{onClick:()=>this.handleTimezoneSelect(n.id),style:{background:o?e.toolbar.button.active:"transparent",border:"none",borderRadius:"0px",padding:"8px 12px",cursor:"pointer",color:o?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,textAlign:"left",transition:"all 0.2s ease",display:"flex",flexDirection:"column",gap:"2px",minHeight:"48px",width:"100%"},onMouseEnter:h=>{o||(h.currentTarget.style.background=e.toolbar.button.hover)},onMouseLeave:h=>{o||(h.currentTarget.style.background="transparent")},children:[m.jsx("div",{style:{fontSize:"13px",fontWeight:"500",color:o&&e.toolbar.button.activeTextColor||e.layout.textColor,textAlign:"left"},children:n.name}),m.jsxs("div",{style:{fontSize:"11px",fontWeight:"400",color:o?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,opacity:.7,textAlign:"left"},children:[n.id," • UTC",n.offset]})]},n.id)})})]})}render(){const{currentTheme:t,activeTimeframe:e,activeMainChartType:i,isDarkTheme:r,isTimeframeModalOpen:s,isIndicatorModalOpen:a,isChartTypeModalOpen:n,isTimezoneModalOpen:o,isMobileMenuOpen:h,onThemeToggle:l,onTimeframeClick:d,onIndicatorClick:c,onChartTypeClick:u,onFullscreenClick:g,onTimezoneClick:p,onCameraClick:M,i18n:k}=this.props;return this.isMobileView()?m.jsxs("div",{style:{background:t.panel.backgroundColor,borderBottom:`1px solid ${t.panel.borderColor}`,padding:"9px 13px",display:"flex",alignItems:"center",justifyContent:"space-between",height:"43px",boxSizing:"border-box",gap:"0",position:"relative"},children:[m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsx("button",{onClick:this.toggleMobileMenu,className:"mobile-menu-button",style:{background:h?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"7px 11px",cursor:"pointer",color:h?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{h||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{h||(P.currentTarget.style.background="transparent")},children:m.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[m.jsx("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),m.jsx("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),m.jsx("line",{x1:"3",y1:"18",x2:"21",y2:"18"})]})}),this.renderMobileMenuModal()]}),m.jsx("div",{style:{fontSize:"14px",fontWeight:"600",color:t.layout.textColor},children:e}),m.jsx("button",{onClick:l,style:{background:"transparent",border:"none",borderRadius:"20px",padding:"4px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:r?"flex-end":"flex-start",width:"44px",height:"24px",transition:"all 0.3s ease",position:"relative"},onMouseEnter:P=>{P.currentTarget.style.background=t.toolbar.button.hover},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:m.jsx("div",{style:{width:"16px",height:"16px",borderRadius:"50%",background:r?t.toolbar.button.active:t.toolbar.button.color,transition:"all 0.3s ease",display:"flex",alignItems:"center",justifyContent:"center"},children:r?m.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})}):m.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[m.jsx("circle",{cx:"12",cy:"12",r:"5"}),m.jsx("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),m.jsx("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),m.jsx("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),m.jsx("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),m.jsx("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),m.jsx("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),m.jsx("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),m.jsx("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]})})}),this.renderTimeframeModal(),this.renderChartTypeModal(),this.renderIndicatorModal(),this.renderTimezoneModal()]}):m.jsxs("div",{style:{background:t.panel.backgroundColor,borderBottom:`1px solid ${t.panel.borderColor}`,padding:"9px 13px",display:"flex",alignItems:"center",justifyContent:"flex-start",height:"43px",boxSizing:"border-box",gap:"0",position:"relative"},children:[m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsx("button",{onClick:d,className:"timeframe-button",style:{background:s?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"7px 11px",cursor:"pointer",color:s?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{s||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{s||(P.currentTarget.style.background="transparent")},children:e}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),this.renderTimeframeModal()]}),m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsxs("button",{onClick:p,className:"timezone-button",style:{background:o?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"7px 11px",cursor:"pointer",color:o?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{o||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{o||(P.currentTarget.style.background="transparent")},children:[m.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[m.jsx("circle",{cx:"12",cy:"12",r:"10"}),m.jsx("polyline",{points:"12 6 12 12 16 14"})]}),this.getCurrentTimezoneDisplayName()]}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),this.renderTimezoneModal()]}),m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsx("button",{onClick:u,className:"chart-type-button",style:{background:n?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"7px 11px",cursor:"pointer",color:n?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{n||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{n||(P.currentTarget.style.background="transparent")},children:_e(i,{size:17})}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),this.renderChartTypeModal()]}),m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsxs("button",{onClick:c,className:"indicator-button",style:{background:a?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"3px 11px",cursor:"pointer",color:a?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{a||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{a||(P.currentTarget.style.background="transparent")},children:[m.jsx(vi,{size:25,color:a?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color}),k.Indicators]}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),this.renderIndicatorModal()]}),m.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0"},children:[m.jsx("button",{title:k.toolbarButtons.fullScreen,onClick:g,style:{background:"transparent",border:"none",borderRadius:"0",padding:"7px",cursor:"pointer",color:t.toolbar.button.color,display:"flex",alignItems:"center",justifyContent:"center",transition:"all 0.2s ease",minHeight:"31px",minWidth:"31px"},onMouseEnter:P=>{P.currentTarget.style.background=t.toolbar.button.hover},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:m.jsx(Ci,{size:17,color:t.toolbar.button.color})}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),m.jsx("button",{title:k.toolbarButtons.screenshot,onClick:M,style:{background:"transparent",border:"none",borderRadius:"0",padding:"7px",cursor:"pointer",color:t.toolbar.button.color,display:"flex",alignItems:"center",justifyContent:"center",transition:"all 0.2s ease",minHeight:"31px",minWidth:"31px"},onMouseEnter:P=>{P.currentTarget.style.background=t.toolbar.button.hover},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:m.jsx(wi,{size:17,color:t.toolbar.button.color})}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}})]}),m.jsx("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:m.jsx("button",{onClick:l,style:{background:"transparent",border:"none",borderRadius:"20px",padding:"4px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:r?"flex-end":"flex-start",width:"44px",height:"24px",transition:"all 0.3s ease",position:"relative"},onMouseEnter:P=>{P.currentTarget.style.background=t.toolbar.button.hover},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:m.jsx("div",{style:{width:"16px",height:"16px",borderRadius:"50%",background:r?t.toolbar.button.active:t.toolbar.button.color,transition:"all 0.3s ease",display:"flex",alignItems:"center",justifyContent:"center"},children:r?m.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})}):m.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[m.jsx("circle",{cx:"12",cy:"12",r:"5"}),m.jsx("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),m.jsx("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),m.jsx("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),m.jsx("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"4.22"}),m.jsx("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),m.jsx("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),m.jsx("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),m.jsx("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]})})})})]})}}class yl{constructor(t){this._image=null,this._isLoaded=!1,this._options={size:100,opacity:.3,offsetX:20,offsetY:20,borderColor:"rgba(128, 128, 128, 0.2)",borderWidth:2,borderRadius:50,...t},this._loadImage()}getMarkType(){throw new Error("Method not implemented.")}attached(t){this._chart=t.chart,this.requestUpdate()}updateAllViews(){}requestUpdate(){if(this._chart)try{this._chart.timeScale().applyOptions({})}catch{}}_loadImage(){this._image=new Image,this._image.crossOrigin="anonymous",this._options.src.startsWith("data:image")?this._image.src=this._options.src:this._image.src=this._options.src,this._image.onload=()=>{this._isLoaded=!0,this.requestUpdate()},this._image.onerror=t=>{console.error("Failed to load watermark image:",t),this._isLoaded=!1}}time(){return Date.now()}priceValue(){return 0}paneViews(){return this._renderer||(this._renderer={draw:t=>{if(!this._isLoaded||!this._image)return;const e=t.context??t._context;if(!e||!this._chart)return;const i=this._chart.chartElement()?.querySelector("canvas");if(!i)return;const r=i.width,s=i.height,a=this._options.size||100,n=this._options.offsetX||20,o=this._options.offsetY||20,h=this._options.borderRadius||50,l=r-a-n,d=s-a-o;e.save(),e.globalAlpha=this._options.opacity||.3,e.beginPath();const c=a/2*(h/50);e.arc(l+a/2,d+a/2,c,0,Math.PI*2),e.closePath(),e.clip(),e.drawImage(this._image,l,d,a,a),this._options.borderWidth&&this._options.borderWidth>0&&(e.beginPath(),e.arc(l+a/2,d+a/2,c,0,Math.PI*2),e.strokeStyle=this._options.borderColor||"rgba(128, 128, 128, 0.2)",e.lineWidth=this._options.borderWidth,e.stroke()),e.restore()}}),[{renderer:()=>this._renderer}]}updateImage(t){this._options.src=t,this._isLoaded=!1,this._loadImage(),this.requestUpdate()}updateOptions(t){this._options={...this._options,...t},t.src&&t.src!==this._options.src&&(this._isLoaded=!1,this._loadImage()),this.requestUpdate()}getOptions(){return{...this._options}}isImageLoaded(){return this._isLoaded}}class El{constructor(t){this.watermark=null,this.isVisible=!0,this.props=t}addWatermark(t){const{chartSeries:e}=this.props;return!e||this.watermark?Promise.resolve(!1):(this.watermark=new yl(t),e.series.attachPrimitive(this.watermark),this.isVisible=!0,new Promise(i=>{const r=()=>{this.watermark?.isImageLoaded()?i(!0):setTimeout(r,100)};setTimeout(r,100)}))}updateWatermarkImage(t){this.watermark&&this.watermark.updateImage(t)}updateWatermarkOptions(t){this.watermark&&this.watermark.updateOptions(t)}setVisible(t){const{chartSeries:e}=this.props;!e||!this.watermark||(t&&!this.isVisible?(e.series.attachPrimitive(this.watermark),this.isVisible=!0):!t&&this.isVisible&&(e.series.detachPrimitive(this.watermark),this.isVisible=!1))}toggleVisibility(){return this.setVisible(!this.isVisible),this.isVisible}removeWatermark(){const{chartSeries:t}=this.props;t&&this.watermark&&(t.series.detachPrimitive(this.watermark),this.watermark=null,this.isVisible=!1)}getWatermarkOptions(){return this.watermark?this.watermark.getOptions():null}isWatermarkVisible(){return this.isVisible}isImageLoaded(){return this.watermark?this.watermark.isImageLoaded():!1}updateProps(t){this.props={...this.props,...t}}destroy(){this.removeWatermark()}static async imageToBase64(t){return new Promise((e,i)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>{const s=document.createElement("canvas");s.width=r.width,s.height=r.height;const a=s.getContext("2d");if(!a){i(new Error("Could not get canvas context"));return}a.drawImage(r,0,0),e(s.toDataURL("image/png"))},r.onerror=()=>{i(new Error("Failed to load image"))},r.src=t})}}class rr extends A.Component{constructor(t){super(t),this.candleViewRef=A.createRef(),this.chartRef=A.createRef(),this.chartContainerRef=A.createRef(),this.chartLayerRef=A.createRef(),this.chart=null,this.resizeObserver=null,this.realTimeInterval=null,this.currentSeries=null,this.chartManager=null,this.updateTimeout=null,this.viewportManager=null,this.chartEventManager=null,this.aiPanelResizeRef=A.createRef(),this.isDragging=!1,this.startX=0,this.startChartWidth=0,this.startPanelWidth=0,this.containerWidth=0,this.terminalResizeRef=A.createRef(),this.isDraggingTerminal=!1,this.startY=0,this.startTerminalHeightRatio=0,this.containerHeight=0,this.preparedData=[],this.originalData=[],this.aiManager=null,this.LOGO="https://raw.githubusercontent.com/0xhappyboy/candleview/main/assets/logo/logo_50x50.jpeg",this.handleTerminalResizeMouseDown=r=>{r.preventDefault(),this.isDraggingTerminal=!0,this.setState({isResizingTerminal:!0});const s=this.candleViewRef.current;s&&(this.startY=r.clientY,this.startTerminalHeightRatio=this.state.terminalHeightRatio,this.containerHeight=s.clientHeight),document.body.style.cursor="row-resize",document.body.style.userSelect="none"},this.handleTerminalMouseMove=r=>{if(!this.isDraggingTerminal||!this.containerHeight)return;const s=r.clientY-this.startY,a=Math.max(.3,Math.min(.5,this.startTerminalHeightRatio-s/this.containerHeight));this.setState({terminalHeightRatio:a})},this.handleTerminalMouseUp=()=>{this.isDraggingTerminal&&(this.isDraggingTerminal=!1,this.setState({isResizingTerminal:!1}),document.body.style.cursor="",document.body.style.userSelect="")},this.handleResizeMouseDown=r=>{r.preventDefault(),this.isDragging=!0,this.setState({isResizingAiPanel:!0}),this.aiPanelResizeRef.current&&(this.aiPanelResizeRef.current.style.backgroundColor=this.state.currentTheme.divider.dragging);const s=this.candleViewRef.current;s&&(this.containerWidth=s.clientWidth,this.startX=r.clientX,this.startChartWidth=this.state.aiPanelWidthRatio,this.startPanelWidth=1-this.state.aiPanelWidthRatio),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},this.handleMouseMove=r=>{if(!this.isDragging||!this.containerWidth)return;const s=r.clientX-this.startX;if(!this.state.ai)return;const a=Math.max(.3,Math.min(.9,this.startChartWidth+s/this.containerWidth));this.setState({aiPanelWidthRatio:a},()=>{if(this.chart){const n=this.chartContainerRef.current;if(n){const o=n.clientWidth,h=n.clientHeight;o>0&&h>0&&this.chart.applyOptions({width:o,height:h})}}})},this.handleMouseUp=()=>{this.isDragging&&(this.isDragging=!1,this.setState({isResizingAiPanel:!1}),this.aiPanelResizeRef.current&&(this.aiPanelResizeRef.current.style.backgroundColor=this.state.currentTheme.divider.normal),document.body.style.cursor="",document.body.style.userSelect="")},this.loadDataAsync=r=>{this.setState({dataLoadProgress:0,isDataLoading:!0}),this.loadExternalData().then(()=>(this.setState({dataLoadProgress:30}),this.loadInternalData())).then(()=>{this.setState({dataLoadProgress:70}),r&&r(),this.setState({dataLoadProgress:100,isDataLoading:!1,loadError:null})}).catch(s=>{this.setState({isDataLoading:!1,loadError:s.message})})},this.loadExternalData=async()=>new Promise((r,s)=>{try{this.setState({dataLoadProgress:10});const a=Fi.loadData({data:this.props.data,url:this.props.url});this.originalData=a,this.setState({dataLoadProgress:30}),r()}catch(a){s(a)}}),this.loadInternalData=async()=>new Promise(r=>{this.setState({dataLoadProgress:40});const s=Gt.handleData(this.originalData,be({timeframe:this.state.timeframe,timezone:this.state.timezone},this.state.currentMainChartType,this.state.virtualDataBeforeCount,this.state.virtualDataAfterCount),this.state.currentMainChartType);this.setState({dataLoadProgress:50}),setTimeout(()=>{this.preparedData=s,this.setState({dataLoadProgress:60}),this.setState({displayData:s,dataLoadProgress:70},()=>{r()})},50)}),this.handleTimeFormatClick=()=>{this.setState({isTimeFormatModalOpen:!0})},this.handleCloseTimeClick=()=>{this.setState({isCloseTimeModalOpen:!0})},this.handleTradingDayClick=()=>{this.setState({isTradingDayModalOpen:!0})},this.handleTimezoneClick=()=>{this.setState({isTimezoneModalOpen:!0})},this.handleCloseModals=()=>{this.setState({isTimeframeModalOpen:!1,isIndicatorModalOpen:!1,isChartTypeModalOpen:!1,isSubChartModalOpen:!1,isTimezoneModalOpen:!1,isTimeFormatModalOpen:!1,isCloseTimeModalOpen:!1,isTradingDayModalOpen:!1,isMobileMenuOpen:!1})},this.handleTimezoneSelect=r=>{this.setState({currentTimezone:r,timezone:r,isTimezoneModalOpen:!1,isDataLoading:!0,dataLoadProgress:0},()=>{setTimeout(()=>{this.setState({dataLoadProgress:20}),this.loadInternalDataAsync(()=>{this.setState({dataLoadProgress:70}),this.initChart(),this.viewportManager?.positionChart(this.state.activeTimeframe),setTimeout(()=>{this.setState({isDataLoading:!1,dataLoadProgress:100})},50)})},50)})},this.handleTimeframeSelect=r=>{const s=r;this.setState({activeTimeframe:s,timeframe:s,isTimeframeModalOpen:!1,isDataLoading:!0,dataLoadProgress:0},()=>{setTimeout(()=>{this.setState({dataLoadProgress:10}),this.loadInternalDataAsync(()=>{this.setState({dataLoadProgress:60}),this.initChart(),this.viewportManager?.positionChart(this.state.activeTimeframe),setTimeout(()=>{this.setState({isDataLoading:!1,dataLoadProgress:100})},50)})},50)})},this.loadInternalDataAsync=r=>new Promise(s=>{this.state.isDataLoading||this.setState({isDataLoading:!0}),this.setState({dataLoadProgress:10}),setTimeout(()=>{setTimeout(()=>{this.setState({dataLoadProgress:30});const o=Gt.handleData(this.originalData,be({timeframe:this.state.timeframe,timezone:this.state.timezone},this.state.currentMainChartType,this.state.virtualDataBeforeCount,this.state.virtualDataAfterCount),this.state.currentMainChartType);this.setState({dataLoadProgress:50}),setTimeout(()=>{this.preparedData=o,this.setState({displayData:o,dataLoadProgress:60},()=>{r&&r(),s()})},50)},0)},0)}),this.initChart=()=>{if(!(!this.state.displayData||this.state.displayData.length===0||!this.currentSeries||!this.currentSeries.series))try{this.state.isDataLoading&&this.setState({dataLoadProgress:80}),this.currentSeries.series.setData(this.state.displayData),this.state.isDataLoading&&setTimeout(()=>{this.setState({dataLoadProgress:90})},50)}catch{this.setState({isDataLoading:!1,dataLoadProgress:100})}},this.refreshChart=()=>{if(!(!this.state.displayData||this.state.displayData.length===0||!this.currentSeries||!this.currentSeries.series||!this.chart))try{const r=this.chart.timeScale(),s=r.getVisibleRange();this.state.isDataLoading&&this.setState({dataLoadProgress:85}),this.currentSeries.series.setData(this.state.displayData),s&&setTimeout(()=>{try{r.setVisibleRange(s),this.state.isDataLoading&&setTimeout(()=>{this.setState({dataLoadProgress:95})},50)}catch{this.state.isDataLoading&&this.setState({isDataLoading:!1,dataLoadProgress:100})}},10)}catch{this.state.isDataLoading&&this.setState({isDataLoading:!1,dataLoadProgress:100})}},this.handleExternalSelectedSubChartIndicator=r=>{this.setState(s=>{const a=s.selectedSubChartIndicators.includes(r);let n;return a?n=s.selectedSubChartIndicators.filter(o=>o!==r):n=[...s.selectedSubChartIndicators,r],{selectedSubChartIndicators:n}})},this.handleSelectedSubChartIndicator=r=>{this.setState({selectedSubChartIndicators:r,isSubChartModalOpen:!1})},this.handleRemoveSubChartIndicator=r=>{this.setState(s=>({selectedSubChartIndicators:s.selectedSubChartIndicators.filter(n=>n!==r)}))},this.handleCameraClick=()=>{const{handleScreenshotCapture:r}=this.props;r?Se(this,s=>{s.success&&s.dataUrl&&s.blob?r({dataUrl:s.dataUrl,blob:s.blob,width:s.width,height:s.height,timestamp:s.timestamp}):this.fallbackToDownload(s.dataUrl)}):Se(this)},this.fallbackToDownload=r=>{if(r){const s=document.createElement("a");s.download=`chart-screenshot-${new Date().getTime()}.png`,s.href=r,s.click()}else Se(this)},this.serializeDrawings=()=>this.chartLayerRef.current?this.chartLayerRef.current.serializeDrawings():"[]",this.handleSubChartClick=()=>{this.setState({isSubChartModalOpen:!this.state.isSubChartModalOpen})},this.deserializeDrawings=r=>{this.chartLayerRef.current&&this.chartLayerRef.current.deserializeDrawings(r)},this.clearAllDrawings=()=>{this.chartLayerRef.current&&this.chartLayerRef.current.clearAllDrawings()},this.viewportDataBufferSize=500,this.handleVisibleTimeRangeChange=r=>{if(!r)return;r.from>this.viewportDataBufferSize&&(r.from=r.from-this.viewportDataBufferSize);const s=this.viewportManager?.getViewportDataPoints(r,this.preparedData)||[];this.setState({displayData:s})},this.handleEmojiSelect=r=>{this.setState({selectedEmoji:r})},this.handleThemeToggle=()=>{this.setState(r=>{const s=!r.isDarkTheme,a=s?"dark":"light";return{isDarkTheme:s,currentTheme:this.getThemeConfig(a)}},()=>{this.updateChartTheme()})},this.handleMobileMenuToggle=()=>{this.setState(r=>({isMobileMenuOpen:!r.isMobileMenuOpen}))},this.handleClickOutside=r=>{const s=r.target,a=this.state.isMobileMenuOpen&&!s.closest(".mobile-menu-button")&&!s.closest("[data-mobile-menu-modal]"),n=this.state.isTimeFormatModalOpen&&!s.closest(".time-format-button")&&!s.closest("[data-timeformat-modal]"),o=this.state.isCloseTimeModalOpen&&!s.closest(".close-time-button")&&!s.closest("[data-close-time-modal]"),h=this.state.isTradingDayModalOpen&&!s.closest(".trading-day-button")&&!s.closest("[data-trading-day-modal]"),l=this.state.isTimezoneModalOpen&&!s.closest(".timezone-button")&&!s.closest("[data-timezone-modal]"),d=this.state.isTimeframeModalOpen&&!s.closest(".timeframe-button")&&!s.closest("[data-timeframe-modal]"),c=this.state.isIndicatorModalOpen&&!s.closest(".indicator-button")&&!s.closest("[data-indicator-modal]"),u=this.state.isTradeModalOpen&&!s.closest(".trade-button")&&!s.closest("[data-trade-modal]"),g=this.state.isChartTypeModalOpen&&!s.closest(".chart-type-button")&&!s.closest("[data-chart-type-modal]"),p=this.state.isSubChartModalOpen&&!s.closest(".subchart-button")&&!s.closest("[data-subchart-modal]");a&&this.setState({isMobileMenuOpen:!1}),p&&this.setState({isSubChartModalOpen:!1}),d&&this.setState({isTimeframeModalOpen:!1}),c&&this.setState({isIndicatorModalOpen:!1}),u&&this.setState({isTradeModalOpen:!1}),g&&this.setState({isChartTypeModalOpen:!1}),l&&this.setState({isTimezoneModalOpen:!1}),n&&this.setState({isTimeFormatModalOpen:!1}),o&&this.setState({isCloseTimeModalOpen:!1}),h&&this.setState({isTradingDayModalOpen:!1})},this.handleToolSelect=r=>{this.setState({activeTool:r})},this.handleChartTypeSelect=r=>{this.setState({currentMainChartType:r,isChartTypeModalOpen:!1})},this.handleCloseChartTypeModal=()=>{this.setState({isChartTypeModalOpen:!1})},this.handleCloseDrawing=()=>{this.setState({activeTool:null})},this.handleTimeframeClick=()=>{this.setState({isTimeframeModalOpen:!this.state.isTimeframeModalOpen})},this.handleChartTypeClick=()=>{this.setState({isChartTypeModalOpen:!this.state.isChartTypeModalOpen})},this.handleIndicatorClick=()=>{this.setState({isIndicatorModalOpen:!this.state.isIndicatorModalOpen})},this.handleTradeClick=()=>{this.setState({isTradeModalOpen:!this.state.isTradeModalOpen})},this.handleSelectedMainChartIndicator=r=>{this.setState({selectedMainChartIndicator:r,isIndicatorModalOpen:!1})},this.handleMainChartIndicatorChange=r=>{this.setState({selectedMainChartIndicator:r})},this.handleCloseIndicatorModal=()=>{this.setState({isIndicatorModalOpen:!1})},this.handleCloseTimeframeModal=()=>{this.setState({isTimeframeModalOpen:!1})},this.handleCloseTradeModal=()=>{this.setState({isTradeModalOpen:!1})},this.handleTradeAction=r=>{this.setState({isTradeModalOpen:!1})},this.handleFullscreen=()=>{const r=this.chartContainerRef.current;r&&(document.fullscreenElement?document.exitFullscreen?.():r.requestFullscreen?.())},this.handleCompareClick=()=>{},this.handleReplayClick=()=>{},this.stopRealTimeDataSimulation=()=>{this.realTimeInterval&&(clearInterval(this.realTimeInterval),this.realTimeInterval=null)},this.handleContextMenu=r=>{r.preventDefault(),r.stopPropagation()},this.handleLeftArrowClick=()=>{this.chart&&this.viewportManager&&this.viewportManager.scrollChart("left")},this.handleRightArrowClick=()=>{this.chart&&this.viewportManager&&this.viewportManager.scrollChart("right")},this.handleRefreshClick=()=>{this.setState({isDataLoading:!0,dataLoadProgress:0}),setTimeout(()=>{this.setState({dataLoadProgress:20}),this.refreshExternalData(()=>{this.setState({dataLoadProgress:50}),this.refreshInternalData(()=>{this.setState({dataLoadProgress:80}),this.refreshChart(),this.viewportManager?.positionChart(this.state.activeTimeframe),this.setState({isDataLoading:!1,dataLoadProgress:100})})})},100)},this.handleZoomIn=()=>{this.viewportManager&&this.viewportManager.zoomIn()},this.handleZoomOut=()=>{this.viewportManager&&this.viewportManager.zoomOut()},this.handleAIFunctionSelect=r=>{const s=this.aiManager?.aiToolIdToFunctionType(r);if(s){this.setState({currentAIFunctionType:s},()=>{}),this.setState({openAiChat:this.aiManager?.isChartType(r)||!1},()=>{});const a=this.aiManager?.getAITypeFromFunctionType(s);a&&this.setState({currentAIBrandType:a},()=>{})}},this.handleTerminalCommand=r=>{console.log("Terminal command:",r),this.setState({terminalCommand:r})},this.handleToggleTerminal=()=>{this.setState(r=>({terminal:!r.terminal}))},this.openTerminal=()=>{this.setState({terminal:!0})},this.closeTerminal=()=>{this.setState({terminal:!1})};const e=1,i=.3;this.state={isIndicatorModalOpen:!1,isTimeframeModalOpen:!1,isTradeModalOpen:!1,isChartTypeModalOpen:!1,isSubChartModalOpen:!1,isMobileMenuOpen:!1,activeTool:null,currentMainChartType:$.Candle,currentTheme:this.getThemeConfig(t.theme||"dark"),currentI18N:this.getI18nConfig(t.i18n||"zh-cn"),chartInitialized:!1,isDarkTheme:t.theme!=="light",selectedEmoji:"😀",selectedSubChartIndicators:[],selectedMainChartIndicator:null,subChartPanelHeight:200,isResizing:!1,showInfoLayer:!0,isTimezoneModalOpen:!1,currentTimezone:"Asia/Shanghai",isTimeFormatModalOpen:!1,isCloseTimeModalOpen:!1,isTradingDayModalOpen:!1,activeTimeframe:D.ONE_DAY,timeframe:Vo(t.timeframe)||D.ONE_DAY,timezone:qo(t.timezone)||j.SHANGHAI,savedVisibleRange:null,virtualDataBeforeCount:500,virtualDataAfterCount:500,displayData:[],isDataLoading:!1,dataLoadProgress:0,loadError:null,toppanel:t.toppanel||!1,leftpanel:t.leftpanel||!1,ai:t.ai||!1,aiconfigs:t.aiconfigs||[],openAiChat:!1,currentAIFunctionType:null,currentAIBrandType:null,aiPanelWidthRatio:e,isResizingAiPanel:!1,terminalCommand:"",terminal:this.props.terminal||!1,terminalHeightRatio:i,isResizingTerminal:!1},this.chartEventManager=new Wi,this.aiManager=new ml}componentDidMount(){this.chart||(this.setState({isDataLoading:!0}),this.loadDataAsync(()=>{setTimeout(()=>{this.initializeChart()},50)}),document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("mousemove",this.handleTerminalMouseMove),document.addEventListener("mouseup",this.handleTerminalMouseUp))}componentDidUpdate(t,e){if(t.theme!==this.props.theme){const r=this.props.theme||"dark";this.setState({currentTheme:this.getThemeConfig(r)}),this.handleThemeToggle()}if(t.terminal!==this.props.terminal&&this.props.terminal&&this.setState({terminal:this.props.terminal}),e.openAiChat!==this.state.openAiChat&&this.setState({aiPanelWidthRatio:this.state.openAiChat?.7:1}),t.aiconfigs!==this.props.aiconfigs&&this.props.aiconfigs&&this.setState({aiconfigs:this.props.aiconfigs}),t.i18n!==this.props.i18n&&(this.setState({currentI18N:this.getI18nConfig(this.props.i18n||"en")}),this.updateChartI18n(this.props.i18n||"en")),t.data!==this.props.data||t.url!==this.props.url){this.setState({isDataLoading:!0,dataLoadProgress:0}),this.loadDataAsync(()=>{this.refreshChart()});return}}componentWillUnmount(){const t=this.viewportManager?.getVisibleTimeRange();if(t)try{localStorage.setItem("candleView_visibleRange",JSON.stringify(t))}catch{}this.updateTimeout&&clearTimeout(this.updateTimeout),this.resizeObserver&&this.chartContainerRef.current&&(this.resizeObserver.unobserve(this.chartContainerRef.current),this.resizeObserver.disconnect()),this.chart&&this.chart.remove(),this.realTimeInterval&&clearInterval(this.realTimeInterval),document.removeEventListener("mousedown",this.handleClickOutside,!0),document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("mousemove",this.handleTerminalMouseMove),document.removeEventListener("mouseup",this.handleTerminalMouseUp)}initializeChart(){if(!this.chartRef.current||!this.chartContainerRef.current)return;const t=this.chartContainerRef.current,{currentTheme:e,chartInitialized:i}=this.state,r=t.clientWidth,s=t.clientHeight;if(!(r===0||s===0)&&!i)try{this.setState({dataLoadProgress:75}),this.chart&&(this.chart.remove(),this.currentSeries=null),this.chartManager=new Ho(this.chartRef.current,r,s,e,this.props.i18n),this.chart=this.chartManager.getChart(),this.setState({dataLoadProgress:80}),this.viewportManager=new Qo(this.chart,this.currentSeries),this.chartEventManager?.registerVisibleTimeRangeChangeEvent(this.chart,n=>{this.handleVisibleTimeRangeChange(n)}),this.currentSeries=vr(this.chart,e),new El({chartSeries:this.currentSeries,chart:this.chart}).addWatermark({src:this.LOGO,size:40,opacity:2,offsetX:20,offsetY:45}),this.state.displayData&&this.state.displayData.length>0&&(this.setState({dataLoadProgress:85}),this.refreshInternalData(()=>{this.initChart(),this.viewportManager?.positionChart(this.state.activeTimeframe),this.setState({dataLoadProgress:90}),this.setupResizeObserver(),this.setState({chartInitialized:!0,dataLoadProgress:95}),setTimeout(()=>{this.setState({dataLoadProgress:100})},50)}))}catch{this.setState({chartInitialized:!1,dataLoadProgress:100})}}refreshExternalData(t){const e=Fi.loadData({data:this.props.data,url:this.props.url});this.originalData=e,t?.()}refreshInternalData(t){const e=Gt.handleData(this.originalData,be({timeframe:this.state.timeframe,timezone:this.state.timezone},this.state.currentMainChartType,this.state.virtualDataBeforeCount,this.state.virtualDataAfterCount),this.state.currentMainChartType);this.preparedData=e,this.setState({displayData:e},()=>{t?.()})}setupResizeObserver(){this.chartContainerRef.current&&(this.resizeObserver=new wr(t=>{for(const e of t)if(e.target===this.chartContainerRef.current&&this.chart){const{width:i,height:r}=e.contentRect,s=Math.max(i,100),a=Math.max(r,100);requestAnimationFrame(()=>{try{if(this.chart){const n=this.chart.timeScale(),o=n.getVisibleRange();this.chart.applyOptions({width:s,height:a}),o&&setTimeout(()=>{try{n.setVisibleRange(o)}catch{}},10)}}catch{}})}}),this.resizeObserver.observe(this.chartContainerRef.current))}updateChartI18n(t){this.chart&&this.chart.applyOptions({localization:{locale:t}})}updateChartTheme(){const{currentTheme:t}=this.state;if(this.chart)try{this.chart.applyOptions({layout:t.layout,grid:{vertLines:{color:t.grid.vertLines.color+"30",style:1,visible:!0},horzLines:{color:t.grid.horzLines.color+"30",style:1,visible:!0}}}),this.chart.applyOptions({timeScale:{borderColor:t.grid.vertLines.color},rightPriceScale:{borderColor:t.grid.horzLines.color}})}catch{}this.currentSeries&&Lr(this.currentSeries,t)}getThemeConfig(t){return t==="light"?el:tl}getI18nConfig(t){return t==="en"?dt:No}render(){const{currentTheme:t,isDataLoading:e,ai:i,openAiChat:r,terminal:s,terminalHeightRatio:a}=this.state,{height:n=500,width:o="100%"}=this.props,h=s?1-a:1,l=s?a:0,d=i?this.state.aiPanelWidthRatio:1,c=i?1-this.state.aiPanelWidthRatio:0,u=`
|
|
508
|
+
`}),this.renderCursorTools(),this.renderLineTools(),this.renderTecGraphTools(),this.renderMarkTools(),m.jsx("div",{style:{height:"1px",background:this.props.currentTheme.toolbar.border,margin:"10px 0",flexShrink:0}}),this.props.ai&&this.props.aiconfigs.length>0&&this.renderAITools(),this.renderTerminalButton(),m.jsx("div",{style:{height:"1px",background:this.props.currentTheme.toolbar.border,margin:"10px 0",flexShrink:0}}),this.renderOtherTools(),m.jsx("div",{style:{height:"1px",background:this.props.currentTheme.toolbar.border,margin:"10px 0",flexShrink:0}}),this.renderTrash()]})})}),this.renderDrawingModal(),this.renderBrushModal(),this.renderCursorModal(),this.renderEmojiSelectPopUp(),this.renderFibonacciModal(),this.renderProjectInfoModal(),this.renderIrregularShapeModal(),this.renderTextToolModal(),this.props.ai&&this.props.aiconfigs.length>0&&this.renderAIToolsModal()]})}}class yt extends A.Component{constructor(t){super(t),this.toggleOpen=()=>{this.setState(e=>({isOpen:!e.isOpen}))},this.state={isOpen:t.defaultOpen||!1}}render(){const{title:t,tools:e,currentTheme:i,activeTool:r,onToolSelect:s}=this.props,{isOpen:a}=this.state;return m.jsxs("div",{style:{borderBottom:`1px solid ${i.toolbar.border}`},children:[m.jsxs("button",{onClick:this.toggleOpen,style:{width:"100%",background:"transparent",border:"none",padding:"12px 12px",color:i.layout.textColor,cursor:"pointer",display:"flex",justifyContent:"space-between",alignItems:"center",fontSize:"13px",fontWeight:"600",transition:"background-color 0.2s"},onMouseEnter:n=>{n.currentTarget.style.background=i.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("span",{children:t}),m.jsx("span",{style:{transform:a?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s",fontSize:"12px"},children:"▼"})]}),a&&m.jsx("div",{style:{padding:"0px",background:i.toolbar.background},children:m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0px"},children:e.map(n=>{const o=n.icon,h=r===n.id;return m.jsxs("button",{onClick:()=>s(n.id),style:{background:h?i.toolbar.button.active:"transparent",border:h?`2px solid ${i.toolbar.button.active}`:"2px solid transparent",padding:"10px 10px",borderRadius:"0px",color:h?i.toolbar.button.activeTextColor||"#FFFFFF":i.layout.textColor,textAlign:"left",cursor:"pointer",fontSize:"12px",fontWeight:"500",transition:"all 0.2s ease",display:"flex",alignItems:"center",gap:"0px",width:"100%"},onMouseEnter:l=>{h||(l.currentTarget.style.background=i.toolbar.button.hover)},onMouseLeave:l=>{h||(l.currentTarget.style.background="transparent")},children:[m.jsx(o,{size:24,color:h?i.toolbar.button.activeTextColor||i.layout.textColor:i.toolbar.button.color}),m.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start",flex:1,paddingLeft:"5px"},children:[m.jsx("div",{style:{fontWeight:"600",fontSize:"12px",lineHeight:"1.2"},children:n.name}),m.jsx("div",{style:{fontSize:"10px",opacity:.7,lineHeight:"1.2",marginTop:"2px",textAlign:"left"},children:n.description})]})]},n.id)})})})]})}}const xe=[{id:"ma",name:"Moving Average (MA)",type:R.MA},{id:"ema",name:"Exponential Moving Average (EMA)",type:R.EMA},{id:"bollinger",name:"Bollinger Bands",type:R.BOLLINGER},{id:"ichimoku",name:"Ichimoku Cloud",type:R.ICHIMOKU},{id:"donchian",name:"Donchian Channel",type:R.DONCHIAN},{id:"envelope",name:"Envelope",type:R.ENVELOPE},{id:"vwap",name:"Volume Weighted Average Price (VWAP)",type:R.VWAP}],De=[{id:"heatmap",name:"Heat Map",type:R.HEATMAP},{id:"market-profile",name:"Market Profile",type:R.MARKETPROFILE}],Li=[{id:"rsi",name:"Relative Strength Index (RSI)",type:U.RSI},{id:"macd",name:"MACD",type:U.MACD},{id:"volume",name:"Volume",type:U.VOLUME},{id:"sar",name:"Parabolic SAR (SAR)",type:U.SAR},{id:"kdj",name:"KDJ",type:U.KDJ},{id:"atr",name:"Average True Range (ATR)",type:U.ATR},{id:"stochastic",name:"Stochastic Oscillator",type:U.STOCHASTIC},{id:"cci",name:"Commodity Channel Index (CCI)",type:U.CCI},{id:"bbwidth",name:"Bollinger Bands Width",type:U.BBWIDTH},{id:"adx",name:"Average Directional Index (ADX)",type:U.ADX},{id:"obv",name:"On Balance Volume (OBV)",type:U.OBV}];function wl(f){return[{type:f.timeframeSections.second,sectionKey:"Second",values:[D.ONE_SECOND,D.FIVE_SECONDS,D.FIFTEEN_SECONDS,D.THIRTY_SECONDS]},{type:f.timeframeSections.minute,sectionKey:"Minute",values:[D.ONE_MINUTE,D.THREE_MINUTES,D.FIVE_MINUTES,D.FIFTEEN_MINUTES,D.THIRTY_MINUTES,D.FORTY_FIVE_MINUTES]},{type:f.timeframeSections.hour,sectionKey:"Hour",values:[D.ONE_HOUR,D.TWO_HOURS,D.THREE_HOURS,D.FOUR_HOURS,D.SIX_HOURS,D.EIGHT_HOURS,D.TWELVE_HOURS]},{type:f.timeframeSections.day,sectionKey:"Day",values:[D.ONE_DAY,D.THREE_DAYS]},{type:f.timeframeSections.week,sectionKey:"Week",values:[D.ONE_WEEK,D.TWO_WEEKS]},{type:f.timeframeSections.month,sectionKey:"Month",values:[D.ONE_MONTH,D.THREE_MONTHS,D.SIX_MONTHS]}]}function vl(f,t){var e=xe.find(r=>r.id===t);e||(e=De.find(r=>r.id===t));let i;switch(e?.type){case R.MA:i={...qi,nonce:Date.now()};break;case R.EMA:i={...$i,nonce:Date.now()};break;case R.BOLLINGER:i={...zi,nonce:Date.now()};break;case R.ICHIMOKU:i={...Gi,nonce:Date.now()};break;case R.DONCHIAN:i={...Ki,nonce:Date.now()};break;case R.ENVELOPE:i={...Zi,nonce:Date.now()};break;case R.VWAP:i={...Ji,nonce:Date.now()};break;case R.HEATMAP:i={...Qi,nonce:Date.now()};break;case R.MARKETPROFILE:i={...tr,nonce:Date.now()};break;default:i=null;break}i&&(f.setState({selectedMainIndicator:i}),f.props.handleSelectedMainChartIndicator(i))}function xl(f,t){f.setState(e=>{const i=e.selectedSubChartIndicators.includes(t);let r;return i?r=e.selectedSubChartIndicators.filter(s=>s!==t):r=[...e.selectedSubChartIndicators,t],f.props.handleSelectedSubChartIndicator&&f.props.handleSelectedSubChartIndicator(r),{selectedSubChartIndicators:r}})}class Dl extends A.Component{constructor(){super(...arguments),this.timeframeModalRef=A.createRef(),this.chartTypeModalRef=A.createRef(),this.indicatorModalRef=A.createRef(),this.timezoneModalRef=A.createRef(),this.mobileMenuModalRef=A.createRef(),this.state={mainIndicatorsSearch:"",subChartIndicatorsSearch:"",chartTypeSearch:"",selectedMainIndicator:null,selectedSubChartIndicators:[],timeframeSections:{Second:!0,Minute:!0,Hour:!0,Day:!0,Week:!0,Month:!0},timezoneSearch:"",indicatorSections:{technicalIndicators:!0,chart:!0,subChartIndicators:!0},windowWidth:typeof window<"u"?window.innerWidth:1024},this.handleResize=()=>{this.setState({windowWidth:window.innerWidth})},this.isMobileView=()=>this.state.windowWidth<=500,this.toggleMobileMenu=()=>{this.props.onMobileMenuToggle()},this.closeMobileMenu=()=>{this.props.isMobileMenuOpen&&this.props.onMobileMenuToggle()},this.handleTimeframeSelect=t=>{this.props.onTimeframeSelect(t),this.props.onCloseModals&&this.props.onCloseModals(),this.closeMobileMenu()},this.handleChartTypeSelect=t=>{this.props.onChartTypeSelect(t),this.props.onCloseModals&&this.props.onCloseModals(),this.closeMobileMenu()},this.handleTimezoneSelect=t=>{this.props.onTimezoneSelect(t),this.props.onCloseModals&&this.props.onCloseModals(),this.closeMobileMenu()},this.handleMainIndicatorsSearch=t=>{this.setState({mainIndicatorsSearch:t.target.value})},this.handleTimezoneSearch=t=>{this.setState({timezoneSearch:t.target.value})},this.filteredMaps=()=>{const{mainIndicatorsSearch:t}=this.state;return t?De.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())):De},this.filteredMainIndicators=()=>{const{mainIndicatorsSearch:t}=this.state;return t?xe.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())):xe},this.filteredSubChartIndicators=()=>{const{subChartIndicatorsSearch:t}=this.state;return t?Li.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())):Li},this.toggleTimeframeSection=t=>{this.setState(e=>({timeframeSections:{...e.timeframeSections,[t]:!e.timeframeSections[t]}}))},this.toggleIndicatorSection=t=>{this.setState(e=>({indicatorSections:{...e.indicatorSections,[t]:!e.indicatorSections[t]}}))},this.getChartTypeLabel=t=>{const{i18n:e}=this.props;switch(t){case $.Candle:return e.chartTypes.candle;case $.HollowCandle:return e.chartTypes.hollowCandle;case $.Bar:return e.chartTypes.bar;case $.BaseLine:return e.chartTypes.baseline;case $.Line:return e.chartTypes.line;case $.Area:return e.chartTypes.area;case $.StepLine:return e.chartTypes.stepLine;case $.HeikinAshi:return e.chartTypes.heikinAshi;case $.Histogram:return e.chartTypes.histogram;case $.LineBreak:return e.chartTypes.linebreak;case $.Mountain:return e.chartTypes.mountain;case $.BaselineArea:return e.chartTypes.baselinearea;case $.HighLow:return e.chartTypes.highlow;case $.HLCArea:return e.chartTypes.hlcarea;default:return""}},this.handleMenuItemClick=t=>{this.props.onCloseModals&&this.props.onCloseModals(),t&&t()},this.handleChartTypeSearch=t=>{this.setState({chartTypeSearch:t.target.value})},this.renderChartTypeModal=()=>{const{isChartTypeModalOpen:t,currentTheme:e,activeMainChartType:i,i18n:r}=this.props,{chartTypeSearch:s}=this.state;if(!t)return null;const a=s?Ce.filter(n=>this.getChartTypeLabel(n.type).toLowerCase().includes(s.toLowerCase())):Ce;return m.jsxs("div",{ref:this.chartTypeModalRef,"data-chart-type-modal":"true",style:{position:"absolute",top:(this.isMobileView(),"43px"),left:this.isMobileView()?"0px":"0",zIndex:1e3,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"0",minWidth:this.isMobileView()?"calc(100vw - 20px)":"200px",maxWidth:this.isMobileView()?"calc(100vw - 20px)":"none",maxHeight:"400px",overflow:"hidden",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)",display:"flex",flexDirection:"column"},children:[m.jsx("div",{style:{padding:"8px",borderBottom:`1px solid ${e.toolbar.border}`,flexShrink:0},children:m.jsxs("div",{style:{position:"relative",width:"100%"},children:[m.jsx("input",{type:"text",placeholder:r.searchChartTypes,value:s,onChange:this.handleChartTypeSearch,style:{width:"100%",background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"8px 32px 8px 12px",color:e.layout.textColor,fontSize:"13px",outline:"none",boxSizing:"border-box"},onFocus:n=>{n.target.style.borderColor=e.toolbar.button.active},onBlur:n=>{n.target.style.borderColor=e.toolbar.border}}),s&&m.jsx("button",{onClick:()=>this.setState({chartTypeSearch:""}),style:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",background:"transparent",border:"none",borderRadius:"50%",width:"18px",height:"18px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",color:e.toolbar.button.color,opacity:.6,transition:"all 0.2s ease",fontSize:"12px",padding:0},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover,n.currentTarget.style.opacity="1"},onMouseLeave:n=>{n.currentTarget.style.background="transparent",n.currentTarget.style.opacity="0.6"},children:m.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[m.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),m.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})}),m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2px",overflowY:"auto",flex:1,padding:"8px",maxHeight:"352px"},className:"modal-scrollbar",children:a.map(n=>{const o=i===n.type;return m.jsxs("button",{onClick:()=>this.handleChartTypeSelect(n.type),style:{background:o?e.toolbar.button.active:"transparent",border:"none",borderRadius:"0px",padding:"6px 8px",cursor:"pointer",color:o?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",gap:"12px",minHeight:"32px",width:"100%"},onMouseEnter:h=>{o||(h.currentTarget.style.background=e.toolbar.button.hover)},onMouseLeave:h=>{o||(h.currentTarget.style.background="transparent")},children:[m.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"20px",height:"20px",flexShrink:0},children:_e(n.type,{size:30})}),m.jsx("div",{style:{fontSize:"13px",fontWeight:"500",color:o?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,flex:1,textAlign:"left"},children:this.getChartTypeLabel(n.type)})]},n.type)})})]})},this.renderIndicatorModal=()=>{const{isIndicatorModalOpen:t,currentTheme:e,i18n:i}=this.props,{mainIndicatorsSearch:r,indicatorSections:s}=this.state,a=this.filteredMainIndicators(),n=this.filteredMaps(),o=this.filteredSubChartIndicators();if(!t)return null;const h=[{type:i.mainChartIndicators||"技术指标",sectionKey:"technicalIndicators",values:a},{type:i.subChartIndicators||"副图指标",sectionKey:"subChartIndicators",values:o},{type:i.chartMaps||"图",sectionKey:"chart",values:n}];return m.jsxs("div",{ref:this.indicatorModalRef,"data-indicator-modal":"true",style:{position:"absolute",top:(this.isMobileView(),"43px"),left:this.isMobileView()?"0px":"0",zIndex:1e3,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"0",minWidth:this.isMobileView()?"calc(100vw - 20px)":"280px",maxWidth:this.isMobileView()?"calc(100vw - 20px)":"none",maxHeight:"400px",overflow:"hidden",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)",display:"flex",flexDirection:"column"},children:[m.jsx("div",{style:{padding:"8px",borderBottom:`1px solid ${e.toolbar.border}`,flexShrink:0},children:m.jsxs("div",{style:{position:"relative",width:"100%"},children:[m.jsx("input",{type:"text",placeholder:i.searchIndicators,value:r,onChange:this.handleMainIndicatorsSearch,style:{width:"100%",background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"8px 32px 8px 12px",color:e.layout.textColor,fontSize:"13px",outline:"none",boxSizing:"border-box"},onFocus:l=>{l.target.style.borderColor=e.toolbar.button.active},onBlur:l=>{l.target.style.borderColor=e.toolbar.border}}),r&&m.jsx("button",{onClick:()=>this.setState({mainIndicatorsSearch:""}),style:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",background:"transparent",border:"none",borderRadius:"50%",width:"18px",height:"18px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",color:e.toolbar.button.color,opacity:.6,transition:"all 0.2s ease",fontSize:"12px",padding:0},onMouseEnter:l=>{l.currentTarget.style.background=e.toolbar.button.hover,l.currentTarget.style.opacity="1"},onMouseLeave:l=>{l.currentTarget.style.background="transparent",l.currentTarget.style.opacity="0.6"},children:m.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[m.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),m.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})}),m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px",overflowY:"auto",flex:1,padding:"8px",maxHeight:"352px"},className:"modal-scrollbar",children:h.map(l=>{const d=s[l.sectionKey],c=l.sectionKey==="subChartIndicators";return m.jsxs("div",{children:[m.jsxs("button",{onClick:()=>this.toggleIndicatorSection(l.sectionKey),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 10px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"32px"},onMouseEnter:u=>{u.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:u=>{u.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"12px",fontWeight:"600",opacity:.8,textTransform:"uppercase"},children:l.type}),m.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"16px",height:"16px",transition:"transform 0.2s ease",transform:d?"rotate(180deg)":"rotate(0deg)"},children:m.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("polyline",{points:"6 9 12 15 18 9"})})})]}),d&&m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:l.values.map(u=>{const g=c?this.state.selectedSubChartIndicators.includes(u.type):!1;return m.jsxs("button",{onClick:()=>{c?xl(this,u.type):vl(this,u.id)},style:{background:"transparent",border:"none",padding:"6px 8px",borderRadius:"0px",cursor:"pointer",display:"flex",alignItems:"center",transition:"all 0.2s ease",minHeight:"32px",width:"100%",textAlign:"left"},onMouseEnter:p=>{p.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:p=>{p.currentTarget.style.background="transparent"},children:[c?m.jsx(A.Fragment,{children:m.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"16px",height:"16px",border:`2px solid ${g?e.toolbar.button.active:e.toolbar.border}`,borderRadius:"3px",marginRight:"10px",background:g?e.toolbar.button.active:"transparent",transition:"all 0.2s ease",flexShrink:0,position:"relative"},children:g&&m.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#ffffff",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)"},children:m.jsx("polyline",{points:"20 6 9 17 4 12"})})})}):null,m.jsx("div",{style:{fontSize:"13px",fontWeight:"500",color:e.layout.textColor,textAlign:"left",flex:1,lineHeight:"1.4"},children:u.name})]},u.id)})})]},l.type)})})]})}}componentDidMount(){typeof window<"u"&&window.addEventListener("resize",this.handleResize)}componentWillUnmount(){typeof window<"u"&&window.removeEventListener("resize",this.handleResize)}componentDidUpdate(t){t.selectedSubChartIndicators!==this.props.selectedSubChartIndicators&&this.setState({selectedSubChartIndicators:this.props.selectedSubChartIndicators||[]})}getCurrentTimezoneDisplayName(){const{i18n:t}=this.props;return{[j.NEW_YORK]:t.options.newYork.split(" ")[0],[j.CHICAGO]:t.options.chicago.split(" ")[0],[j.DENVER]:t.options.denver.split(" ")[0],[j.LOS_ANGELES]:t.options.losAngeles.split(" ")[0],[j.TORONTO]:t.options.toronto.split(" ")[0],[j.LONDON]:t.options.london.split(" ")[0],[j.PARIS]:t.options.paris.split(" ")[0],[j.FRANKFURT]:t.options.frankfurt.split(" ")[0],[j.ZURICH]:t.options.zurich.split(" ")[0],[j.MOSCOW]:t.options.moscow.split(" ")[0],[j.DUBAI]:t.options.dubai.split(" ")[0],[j.KARACHI]:t.options.karachi.split(" ")[0],[j.KOLKATA]:t.options.kolkata.split(" ")[0],[j.SHANGHAI]:t.options.shanghai.split(" ")[0],[j.HONG_KONG]:t.options.hongKong.split(" ")[0],[j.SINGAPORE]:t.options.singapore.split(" ")[0],[j.TOKYO]:t.options.tokyo.split(" ")[0],[j.SEOUL]:t.options.seoul.split(" ")[0],[j.SYDNEY]:t.options.sydney.split(" ")[0],[j.AUCKLAND]:t.options.auckland.split(" ")[0],[j.UTC]:"UTC"}[this.props.currentTimezone]||this.props.currentTimezone.split("/").pop()||this.props.currentTimezone}renderMobileMenuModal(){const{isMobileMenuOpen:t}=this.props,{currentTheme:e,i18n:i,activeTimeframe:r,activeMainChartType:s,currentTimezone:a}=this.props;return t?m.jsx("div",{ref:this.mobileMenuModalRef,"data-mobile-menu-modal":"true",style:{position:"absolute",top:"43px",left:"0px",zIndex:1001,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"8px 0",minWidth:"200px",maxHeight:"400px",overflowY:"auto",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)"},className:"modal-scrollbar",children:m.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onTimeframeClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.timeframe||"Timeframe"}),m.jsx("div",{style:{fontSize:"13px",opacity:.7},children:r})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onTimezoneClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.timezone||"Timezone"}),m.jsx("div",{style:{fontSize:"13px",opacity:.7},children:this.getCurrentTimezoneDisplayName()})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onChartTypeClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.chartType||"Chart Type"}),m.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[m.jsx("div",{style:{fontSize:"13px",opacity:.7},children:this.getChartTypeLabel(s)}),_e(s,{size:16})]})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onIndicatorClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.Indicators}),m.jsx(vi,{size:16,color:e.toolbar.button.color})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onFullscreenClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.toolbarButtons.fullScreen}),m.jsx(Ci,{size:16,color:e.toolbar.button.color})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onCameraClick),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.toolbarButtons.screenshot}),m.jsx(wi,{size:16,color:e.toolbar.button.color})]}),m.jsxs("button",{onClick:()=>this.handleMenuItemClick(this.props.onThemeToggle),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 16px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"40px"},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:n=>{n.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"14px",fontWeight:"500"},children:i.theme}),m.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[m.jsx("div",{style:{fontSize:"13px",opacity:.7},children:this.props.isDarkTheme?i.dark:i.light}),m.jsx("div",{style:{width:"32px",height:"18px",borderRadius:"9px",background:this.props.isDarkTheme?e.toolbar.button.active:e.toolbar.border,position:"relative",display:"flex",alignItems:"center",padding:"2px"},children:m.jsx("div",{style:{width:"14px",height:"14px",borderRadius:"50%",background:e.layout.textColor,transform:this.props.isDarkTheme?"translateX(14px)":"translateX(0)",transition:"transform 0.3s ease"}})})]})]})]})}):null}renderTimeframeModal(){const{isTimeframeModalOpen:t,currentTheme:e,activeTimeframe:i}=this.props,{timeframeSections:r}=this.state;if(!t)return null;const s=wl(this.props.i18n);return m.jsx("div",{ref:this.timeframeModalRef,"data-timeframe-modal":"true",style:{position:"absolute",top:(this.isMobileView(),"43px"),left:(this.isMobileView(),"0px"),zIndex:1e3,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"0",minWidth:this.isMobileView()?"calc(100vw - 20px)":"180px",maxWidth:this.isMobileView()?"calc(100vw - 20px)":"none",maxHeight:"400px",overflowY:"auto",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)"},className:"modal-scrollbar",children:m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:s.map(a=>{const n=r[a.sectionKey];return m.jsxs("div",{children:[m.jsxs("button",{onClick:()=>this.toggleTimeframeSection(a.sectionKey),style:{background:"transparent",border:"none",borderRadius:"0px",padding:"12px 10px",cursor:"pointer",color:e.layout.textColor,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",minHeight:"32px"},onMouseEnter:o=>{o.currentTarget.style.background=e.toolbar.button.hover},onMouseLeave:o=>{o.currentTarget.style.background="transparent"},children:[m.jsx("div",{style:{fontSize:"12px",fontWeight:"600",opacity:.8,textTransform:"uppercase"},children:a.type}),m.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"16px",height:"16px",transition:"transform 0.2s ease",transform:n?"rotate(180deg)":"rotate(0deg)"},children:m.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("polyline",{points:"6 9 12 15 18 9"})})})]}),n&&m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:a.values.map(o=>{const h=i===o;return m.jsx("button",{onClick:()=>this.handleTimeframeSelect(o),style:{background:h?e.toolbar.button.active:"transparent",border:"none",borderRadius:"0px",padding:"6px 15px",cursor:"pointer",color:h?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,textAlign:"left",transition:"all 0.2s ease",display:"flex",alignItems:"center",minHeight:"32px",width:"100%"},onMouseEnter:l=>{h||(l.currentTarget.style.background=e.toolbar.button.hover)},onMouseLeave:l=>{h||(l.currentTarget.style.background="transparent")},children:m.jsx("div",{style:{fontSize:"13px",fontWeight:"500",color:h?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,flex:1,textAlign:"left"},children:$o(o,this.props.i18n)})},o)})})]},a.type)})})})}renderTimezoneModal(){const{isTimezoneModalOpen:t,currentTheme:e,i18n:i}=this.props,{timezoneSearch:r}=this.state;if(!t)return null;const s=[{id:j.NEW_YORK,name:i.options.newYork,offset:"-05:00/-04:00"},{id:j.CHICAGO,name:i.options.chicago,offset:"-06:00/-05:00"},{id:j.DENVER,name:i.options.denver,offset:"-07:00/-06:00"},{id:j.LOS_ANGELES,name:i.options.losAngeles,offset:"-08:00/-07:00"},{id:j.TORONTO,name:i.options.toronto,offset:"-05:00/-04:00"},{id:j.LONDON,name:i.options.london,offset:"+00:00/+01:00"},{id:j.PARIS,name:i.options.paris,offset:"+01:00/+02:00"},{id:j.FRANKFURT,name:i.options.frankfurt,offset:"+01:00/+02:00"},{id:j.ZURICH,name:i.options.zurich,offset:"+01:00/+02:00"},{id:j.MOSCOW,name:i.options.moscow,offset:"+03:00"},{id:j.DUBAI,name:i.options.dubai,offset:"+04:00"},{id:j.KARACHI,name:i.options.karachi,offset:"+05:00"},{id:j.KOLKATA,name:i.options.kolkata,offset:"+05:30"},{id:j.SHANGHAI,name:i.options.shanghai,offset:"+08:00"},{id:j.HONG_KONG,name:i.options.hongKong,offset:"+08:00"},{id:j.SINGAPORE,name:i.options.singapore,offset:"+08:00"},{id:j.TOKYO,name:i.options.tokyo,offset:"+09:00"},{id:j.SEOUL,name:i.options.seoul,offset:"+09:00"},{id:j.SYDNEY,name:i.options.sydney,offset:"+10:00/+11:00"},{id:j.AUCKLAND,name:i.options.auckland,offset:"+12:00/+13:00"},{id:j.UTC,name:i.options.utc,offset:"+00:00"}],a=r?s.filter(n=>n.name.toLowerCase().includes(r.toLowerCase())||n.id.toLowerCase().includes(r.toLowerCase())):s;return m.jsxs("div",{ref:this.timezoneModalRef,"data-timezone-modal":"true",style:{position:"absolute",top:(this.isMobileView(),"43px"),left:(this.isMobileView(),"0px"),zIndex:1e3,background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"0",minWidth:this.isMobileView()?"calc(100vw - 20px)":"300px",maxWidth:this.isMobileView()?"calc(100vw - 20px)":"none",maxHeight:"400px",overflow:"hidden",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)",display:"flex",flexDirection:"column"},children:[m.jsx("div",{style:{padding:"8px",borderBottom:`1px solid ${e.toolbar.border}`,flexShrink:0},children:m.jsxs("div",{style:{position:"relative",width:"100%"},children:[m.jsx("input",{type:"text",placeholder:i.searchTimezones,value:r,onChange:this.handleTimezoneSearch,style:{width:"100%",background:e.toolbar.background,border:`1px solid ${e.toolbar.border}`,borderRadius:"0px",padding:"8px 32px 8px 12px",color:e.layout.textColor,fontSize:"13px",outline:"none",boxSizing:"border-box"},onFocus:n=>{n.target.style.borderColor=e.toolbar.button.active},onBlur:n=>{n.target.style.borderColor=e.toolbar.border}}),r&&m.jsx("button",{onClick:()=>this.setState({timezoneSearch:""}),style:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",background:"transparent",border:"none",borderRadius:"50%",width:"18px",height:"18px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",color:e.toolbar.button.color,opacity:.6,transition:"all 0.2s ease",fontSize:"12px",padding:0},onMouseEnter:n=>{n.currentTarget.style.background=e.toolbar.button.hover,n.currentTarget.style.opacity="1"},onMouseLeave:n=>{n.currentTarget.style.background="transparent",n.currentTarget.style.opacity="0.6"},children:m.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[m.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),m.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})}),m.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2px",overflowY:"auto",flex:1,padding:"8px",maxHeight:"300px"},className:"modal-scrollbar",children:a.map(n=>{const o=this.props.currentTimezone===n.id;return m.jsxs("button",{onClick:()=>this.handleTimezoneSelect(n.id),style:{background:o?e.toolbar.button.active:"transparent",border:"none",borderRadius:"0px",padding:"8px 12px",cursor:"pointer",color:o?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,textAlign:"left",transition:"all 0.2s ease",display:"flex",flexDirection:"column",gap:"2px",minHeight:"48px",width:"100%"},onMouseEnter:h=>{o||(h.currentTarget.style.background=e.toolbar.button.hover)},onMouseLeave:h=>{o||(h.currentTarget.style.background="transparent")},children:[m.jsx("div",{style:{fontSize:"13px",fontWeight:"500",color:o&&e.toolbar.button.activeTextColor||e.layout.textColor,textAlign:"left"},children:n.name}),m.jsxs("div",{style:{fontSize:"11px",fontWeight:"400",color:o?e.toolbar.button.activeTextColor||e.layout.textColor:e.toolbar.button.color,opacity:.7,textAlign:"left"},children:[n.id," • UTC",n.offset]})]},n.id)})})]})}render(){const{currentTheme:t,activeTimeframe:e,activeMainChartType:i,isDarkTheme:r,isTimeframeModalOpen:s,isIndicatorModalOpen:a,isChartTypeModalOpen:n,isTimezoneModalOpen:o,isMobileMenuOpen:h,onThemeToggle:l,onTimeframeClick:d,onIndicatorClick:c,onChartTypeClick:u,onFullscreenClick:g,onTimezoneClick:p,onCameraClick:M,i18n:k}=this.props;return this.isMobileView()?m.jsxs("div",{style:{background:t.panel.backgroundColor,borderBottom:`1px solid ${t.panel.borderColor}`,padding:"9px 13px",display:"flex",alignItems:"center",justifyContent:"space-between",height:"43px",boxSizing:"border-box",gap:"0",position:"relative"},children:[m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsx("button",{onClick:this.toggleMobileMenu,className:"mobile-menu-button",style:{background:h?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"7px 11px",cursor:"pointer",color:h?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{h||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{h||(P.currentTarget.style.background="transparent")},children:m.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[m.jsx("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),m.jsx("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),m.jsx("line",{x1:"3",y1:"18",x2:"21",y2:"18"})]})}),this.renderMobileMenuModal()]}),m.jsx("div",{style:{fontSize:"14px",fontWeight:"600",color:t.layout.textColor},children:e}),m.jsx("button",{onClick:l,style:{background:"transparent",border:"none",borderRadius:"20px",padding:"4px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:r?"flex-end":"flex-start",width:"44px",height:"24px",transition:"all 0.3s ease",position:"relative"},onMouseEnter:P=>{P.currentTarget.style.background=t.toolbar.button.hover},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:m.jsx("div",{style:{width:"16px",height:"16px",borderRadius:"50%",background:r?t.toolbar.button.active:t.toolbar.button.color,transition:"all 0.3s ease",display:"flex",alignItems:"center",justifyContent:"center"},children:r?m.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})}):m.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[m.jsx("circle",{cx:"12",cy:"12",r:"5"}),m.jsx("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),m.jsx("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),m.jsx("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),m.jsx("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),m.jsx("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),m.jsx("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),m.jsx("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),m.jsx("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]})})}),this.renderTimeframeModal(),this.renderChartTypeModal(),this.renderIndicatorModal(),this.renderTimezoneModal()]}):m.jsxs("div",{style:{background:t.panel.backgroundColor,borderBottom:`1px solid ${t.panel.borderColor}`,padding:"9px 13px",display:"flex",alignItems:"center",justifyContent:"flex-start",height:"43px",boxSizing:"border-box",gap:"0",position:"relative"},children:[m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsx("button",{onClick:d,className:"timeframe-button",style:{background:s?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"7px 11px",cursor:"pointer",color:s?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{s||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{s||(P.currentTarget.style.background="transparent")},children:e}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),this.renderTimeframeModal()]}),m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsxs("button",{onClick:p,className:"timezone-button",style:{background:o?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"7px 11px",cursor:"pointer",color:o?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{o||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{o||(P.currentTarget.style.background="transparent")},children:[m.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[m.jsx("circle",{cx:"12",cy:"12",r:"10"}),m.jsx("polyline",{points:"12 6 12 12 16 14"})]}),this.getCurrentTimezoneDisplayName()]}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),this.renderTimezoneModal()]}),m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsx("button",{onClick:u,className:"chart-type-button",style:{background:n?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"7px 11px",cursor:"pointer",color:n?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{n||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{n||(P.currentTarget.style.background="transparent")},children:_e(i,{size:17})}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),this.renderChartTypeModal()]}),m.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[m.jsxs("button",{onClick:c,className:"indicator-button",style:{background:a?t.toolbar.button.active:"transparent",border:"none",borderRadius:"0",padding:"3px 11px",cursor:"pointer",color:a?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color,fontSize:"12px",fontWeight:"500",display:"flex",alignItems:"center",gap:"7px",transition:"all 0.2s ease",minHeight:"31px"},onMouseEnter:P=>{a||(P.currentTarget.style.background=t.toolbar.button.hover)},onMouseLeave:P=>{a||(P.currentTarget.style.background="transparent")},children:[m.jsx(vi,{size:25,color:a?t.toolbar.button.activeTextColor||t.layout.textColor:t.toolbar.button.color}),k.Indicators]}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),this.renderIndicatorModal()]}),m.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0"},children:[m.jsx("button",{title:k.toolbarButtons.fullScreen,onClick:g,style:{background:"transparent",border:"none",borderRadius:"0",padding:"7px",cursor:"pointer",color:t.toolbar.button.color,display:"flex",alignItems:"center",justifyContent:"center",transition:"all 0.2s ease",minHeight:"31px",minWidth:"31px"},onMouseEnter:P=>{P.currentTarget.style.background=t.toolbar.button.hover},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:m.jsx(Ci,{size:17,color:t.toolbar.button.color})}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}}),m.jsx("button",{title:k.toolbarButtons.screenshot,onClick:M,style:{background:"transparent",border:"none",borderRadius:"0",padding:"7px",cursor:"pointer",color:t.toolbar.button.color,display:"flex",alignItems:"center",justifyContent:"center",transition:"all 0.2s ease",minHeight:"31px",minWidth:"31px"},onMouseEnter:P=>{P.currentTarget.style.background=t.toolbar.button.hover},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:m.jsx(wi,{size:17,color:t.toolbar.button.color})}),m.jsx("div",{style:{width:"1px",height:"16px",background:t.toolbar.border,margin:"0 4px"}})]}),m.jsx("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:m.jsx("button",{onClick:l,style:{background:"transparent",border:"none",borderRadius:"20px",padding:"4px",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:r?"flex-end":"flex-start",width:"44px",height:"24px",transition:"all 0.3s ease",position:"relative"},onMouseEnter:P=>{P.currentTarget.style.background=t.toolbar.button.hover},onMouseLeave:P=>{P.currentTarget.style.background="transparent"},children:m.jsx("div",{style:{width:"16px",height:"16px",borderRadius:"50%",background:r?t.toolbar.button.active:t.toolbar.button.color,transition:"all 0.3s ease",display:"flex",alignItems:"center",justifyContent:"center"},children:r?m.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:m.jsx("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})}):m.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[m.jsx("circle",{cx:"12",cy:"12",r:"5"}),m.jsx("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),m.jsx("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),m.jsx("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),m.jsx("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"4.22"}),m.jsx("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),m.jsx("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),m.jsx("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),m.jsx("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]})})})})]})}}class yl{constructor(t){this._image=null,this._isLoaded=!1,this._options={size:100,opacity:.3,offsetX:20,offsetY:20,borderColor:"rgba(128, 128, 128, 0.2)",borderWidth:2,borderRadius:50,...t},this._loadImage()}getMarkType(){throw new Error("Method not implemented.")}attached(t){this._chart=t.chart,this.requestUpdate()}updateAllViews(){}requestUpdate(){if(this._chart)try{this._chart.timeScale().applyOptions({})}catch{}}_loadImage(){this._image=new Image,this._image.crossOrigin="anonymous",this._options.src.startsWith("data:image")?this._image.src=this._options.src:this._image.src=this._options.src,this._image.onload=()=>{this._isLoaded=!0,this.requestUpdate()},this._image.onerror=t=>{console.error("Failed to load watermark image:",t),this._isLoaded=!1}}time(){return Date.now()}priceValue(){return 0}paneViews(){return this._renderer||(this._renderer={draw:t=>{if(!this._isLoaded||!this._image)return;const e=t.context??t._context;if(!e||!this._chart)return;const i=this._chart.chartElement()?.querySelector("canvas");if(!i)return;const r=i.width,s=i.height,a=this._options.size||100,n=this._options.offsetX||20,o=this._options.offsetY||20,h=this._options.borderRadius||50,l=r-a-n,d=s-a-o;e.save(),e.globalAlpha=this._options.opacity||.3,e.beginPath();const c=a/2*(h/50);e.arc(l+a/2,d+a/2,c,0,Math.PI*2),e.closePath(),e.clip(),e.drawImage(this._image,l,d,a,a),this._options.borderWidth&&this._options.borderWidth>0&&(e.beginPath(),e.arc(l+a/2,d+a/2,c,0,Math.PI*2),e.strokeStyle=this._options.borderColor||"rgba(128, 128, 128, 0.2)",e.lineWidth=this._options.borderWidth,e.stroke()),e.restore()}}),[{renderer:()=>this._renderer}]}updateImage(t){this._options.src=t,this._isLoaded=!1,this._loadImage(),this.requestUpdate()}updateOptions(t){this._options={...this._options,...t},t.src&&t.src!==this._options.src&&(this._isLoaded=!1,this._loadImage()),this.requestUpdate()}getOptions(){return{...this._options}}isImageLoaded(){return this._isLoaded}}class El{constructor(t){this.watermark=null,this.isVisible=!0,this.props=t}addWatermark(t){const{chartSeries:e}=this.props;return!e||this.watermark?Promise.resolve(!1):(this.watermark=new yl(t),e.series.attachPrimitive(this.watermark),this.isVisible=!0,new Promise(i=>{const r=()=>{this.watermark?.isImageLoaded()?i(!0):setTimeout(r,100)};setTimeout(r,100)}))}updateWatermarkImage(t){this.watermark&&this.watermark.updateImage(t)}updateWatermarkOptions(t){this.watermark&&this.watermark.updateOptions(t)}setVisible(t){const{chartSeries:e}=this.props;!e||!this.watermark||(t&&!this.isVisible?(e.series.attachPrimitive(this.watermark),this.isVisible=!0):!t&&this.isVisible&&(e.series.detachPrimitive(this.watermark),this.isVisible=!1))}toggleVisibility(){return this.setVisible(!this.isVisible),this.isVisible}removeWatermark(){const{chartSeries:t}=this.props;t&&this.watermark&&(t.series.detachPrimitive(this.watermark),this.watermark=null,this.isVisible=!1)}getWatermarkOptions(){return this.watermark?this.watermark.getOptions():null}isWatermarkVisible(){return this.isVisible}isImageLoaded(){return this.watermark?this.watermark.isImageLoaded():!1}updateProps(t){this.props={...this.props,...t}}destroy(){this.removeWatermark()}static async imageToBase64(t){return new Promise((e,i)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>{const s=document.createElement("canvas");s.width=r.width,s.height=r.height;const a=s.getContext("2d");if(!a){i(new Error("Could not get canvas context"));return}a.drawImage(r,0,0),e(s.toDataURL("image/png"))},r.onerror=()=>{i(new Error("Failed to load image"))},r.src=t})}}class rr extends A.Component{constructor(t){super(t),this.candleViewRef=A.createRef(),this.chartRef=A.createRef(),this.chartContainerRef=A.createRef(),this.chartLayerRef=A.createRef(),this.chart=null,this.resizeObserver=null,this.realTimeInterval=null,this.currentSeries=null,this.chartManager=null,this.updateTimeout=null,this.viewportManager=null,this.chartEventManager=null,this.aiPanelResizeRef=A.createRef(),this.isDragging=!1,this.startX=0,this.startChartWidth=0,this.startPanelWidth=0,this.containerWidth=0,this.terminalResizeRef=A.createRef(),this.isDraggingTerminal=!1,this.startY=0,this.startTerminalHeightRatio=0,this.containerHeight=0,this.preparedData=[],this.originalData=[],this.aiManager=null,this.LOGO="https://raw.githubusercontent.com/0xhappyboy/candleview/main/assets/logo/logo_50x50.jpeg",this.handleTerminalResizeMouseDown=r=>{r.preventDefault(),this.isDraggingTerminal=!0,this.setState({isResizingTerminal:!0});const s=this.candleViewRef.current;s&&(this.startY=r.clientY,this.startTerminalHeightRatio=this.state.terminalHeightRatio,this.containerHeight=s.clientHeight),document.body.style.cursor="row-resize",document.body.style.userSelect="none"},this.handleTerminalMouseMove=r=>{if(!this.isDraggingTerminal||!this.containerHeight)return;const s=r.clientY-this.startY,a=Math.max(.3,Math.min(.5,this.startTerminalHeightRatio-s/this.containerHeight));this.setState({terminalHeightRatio:a})},this.handleTerminalMouseUp=()=>{this.isDraggingTerminal&&(this.isDraggingTerminal=!1,this.setState({isResizingTerminal:!1}),document.body.style.cursor="",document.body.style.userSelect="")},this.handleResizeMouseDown=r=>{r.preventDefault(),this.isDragging=!0,this.setState({isResizingAiPanel:!0}),this.aiPanelResizeRef.current&&(this.aiPanelResizeRef.current.style.backgroundColor=this.state.currentTheme.divider.dragging);const s=this.candleViewRef.current;s&&(this.containerWidth=s.clientWidth,this.startX=r.clientX,this.startChartWidth=this.state.aiPanelWidthRatio,this.startPanelWidth=1-this.state.aiPanelWidthRatio),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},this.handleMouseMove=r=>{if(!this.isDragging||!this.containerWidth)return;const s=r.clientX-this.startX;if(!this.state.ai)return;const a=Math.max(.3,Math.min(.9,this.startChartWidth+s/this.containerWidth));this.setState({aiPanelWidthRatio:a},()=>{if(this.chart){const n=this.chartContainerRef.current;if(n){const o=n.clientWidth,h=n.clientHeight;o>0&&h>0&&this.chart.applyOptions({width:o,height:h})}}})},this.handleMouseUp=()=>{this.isDragging&&(this.isDragging=!1,this.setState({isResizingAiPanel:!1}),this.aiPanelResizeRef.current&&(this.aiPanelResizeRef.current.style.backgroundColor=this.state.currentTheme.divider.normal),document.body.style.cursor="",document.body.style.userSelect="")},this.loadDataAsync=r=>{this.setState({dataLoadProgress:0,isDataLoading:!0}),this.loadExternalData().then(()=>(this.setState({dataLoadProgress:30}),this.loadInternalData())).then(()=>{this.setState({dataLoadProgress:70}),r&&r(),this.setState({dataLoadProgress:100,isDataLoading:!1,loadError:null})}).catch(s=>{this.setState({isDataLoading:!1,loadError:s.message})})},this.loadExternalData=async()=>new Promise((r,s)=>{try{this.setState({dataLoadProgress:10});const a=Fi.loadData({data:this.props.data,url:this.props.url});this.originalData=a,this.setState({dataLoadProgress:30}),r()}catch(a){s(a)}}),this.loadInternalData=async()=>new Promise(r=>{this.setState({dataLoadProgress:40});const s=Gt.handleData(this.originalData,be({timeframe:this.state.timeframe,timezone:this.state.timezone},this.state.currentMainChartType,this.state.virtualDataBeforeCount,this.state.virtualDataAfterCount),this.state.currentMainChartType);this.setState({dataLoadProgress:50}),setTimeout(()=>{this.preparedData=s,this.setState({dataLoadProgress:60}),this.setState({displayData:s,dataLoadProgress:70},()=>{r()})},50)}),this.handleTimeFormatClick=()=>{this.setState({isTimeFormatModalOpen:!0})},this.handleCloseTimeClick=()=>{this.setState({isCloseTimeModalOpen:!0})},this.handleTradingDayClick=()=>{this.setState({isTradingDayModalOpen:!0})},this.handleTimezoneClick=()=>{this.setState({isTimezoneModalOpen:!0})},this.handleCloseModals=()=>{this.setState({isTimeframeModalOpen:!1,isIndicatorModalOpen:!1,isChartTypeModalOpen:!1,isSubChartModalOpen:!1,isTimezoneModalOpen:!1,isTimeFormatModalOpen:!1,isCloseTimeModalOpen:!1,isTradingDayModalOpen:!1,isMobileMenuOpen:!1})},this.handleTimezoneSelect=r=>{this.setState({currentTimezone:r,timezone:r,isTimezoneModalOpen:!1,isDataLoading:!0,dataLoadProgress:0},()=>{setTimeout(()=>{this.setState({dataLoadProgress:20}),this.loadInternalDataAsync(()=>{this.setState({dataLoadProgress:70}),this.initChart(),this.viewportManager?.positionChart(this.state.activeTimeframe),setTimeout(()=>{this.setState({isDataLoading:!1,dataLoadProgress:100})},50)})},50)})},this.handleTimeframeSelect=r=>{const s=r;this.setState({activeTimeframe:s,timeframe:s,isTimeframeModalOpen:!1,isDataLoading:!0,dataLoadProgress:0},()=>{setTimeout(()=>{this.setState({dataLoadProgress:10}),this.loadInternalDataAsync(()=>{this.setState({dataLoadProgress:60}),this.initChart(),this.viewportManager?.positionChart(this.state.activeTimeframe),setTimeout(()=>{this.setState({isDataLoading:!1,dataLoadProgress:100})},50)})},50)})},this.loadInternalDataAsync=r=>new Promise(s=>{this.state.isDataLoading||this.setState({isDataLoading:!0}),this.setState({dataLoadProgress:10}),setTimeout(()=>{setTimeout(()=>{this.setState({dataLoadProgress:30});const o=Gt.handleData(this.originalData,be({timeframe:this.state.timeframe,timezone:this.state.timezone},this.state.currentMainChartType,this.state.virtualDataBeforeCount,this.state.virtualDataAfterCount),this.state.currentMainChartType);this.setState({dataLoadProgress:50}),setTimeout(()=>{this.preparedData=o,this.setState({displayData:o,dataLoadProgress:60},()=>{r&&r(),s()})},50)},0)},0)}),this.initChart=()=>{if(!(!this.state.displayData||this.state.displayData.length===0||!this.currentSeries||!this.currentSeries.series))try{this.state.isDataLoading&&this.setState({dataLoadProgress:80}),this.currentSeries.series.setData(this.state.displayData),this.state.isDataLoading&&setTimeout(()=>{this.setState({dataLoadProgress:90})},50)}catch{this.setState({isDataLoading:!1,dataLoadProgress:100})}},this.refreshChart=()=>{if(!(!this.state.displayData||this.state.displayData.length===0||!this.currentSeries||!this.currentSeries.series||!this.chart))try{const r=this.chart.timeScale(),s=r.getVisibleRange();this.state.isDataLoading&&this.setState({dataLoadProgress:85}),this.currentSeries.series.setData(this.state.displayData),s&&setTimeout(()=>{try{r.setVisibleRange(s),this.state.isDataLoading&&setTimeout(()=>{this.setState({dataLoadProgress:95})},50)}catch{this.state.isDataLoading&&this.setState({isDataLoading:!1,dataLoadProgress:100})}},10)}catch{this.state.isDataLoading&&this.setState({isDataLoading:!1,dataLoadProgress:100})}},this.handleExternalSelectedSubChartIndicator=r=>{this.setState(s=>{const a=s.selectedSubChartIndicators.includes(r);let n;return a?n=s.selectedSubChartIndicators.filter(o=>o!==r):n=[...s.selectedSubChartIndicators,r],{selectedSubChartIndicators:n}})},this.handleSelectedSubChartIndicator=r=>{this.setState({selectedSubChartIndicators:r,isSubChartModalOpen:!1})},this.handleRemoveSubChartIndicator=r=>{this.setState(s=>({selectedSubChartIndicators:s.selectedSubChartIndicators.filter(n=>n!==r)}))},this.handleCameraClick=()=>{const{handleScreenshotCapture:r}=this.props;r?Se(this,s=>{s.success&&s.dataUrl&&s.blob?r({dataUrl:s.dataUrl,blob:s.blob,width:s.width,height:s.height,timestamp:s.timestamp}):this.fallbackToDownload(s.dataUrl)}):Se(this)},this.fallbackToDownload=r=>{if(r){const s=document.createElement("a");s.download=`chart-screenshot-${new Date().getTime()}.png`,s.href=r,s.click()}else Se(this)},this.serializeDrawings=()=>this.chartLayerRef.current?this.chartLayerRef.current.serializeDrawings():"[]",this.handleSubChartClick=()=>{this.setState({isSubChartModalOpen:!this.state.isSubChartModalOpen})},this.deserializeDrawings=r=>{this.chartLayerRef.current&&this.chartLayerRef.current.deserializeDrawings(r)},this.clearAllDrawings=()=>{this.chartLayerRef.current&&this.chartLayerRef.current.clearAllDrawings()},this.viewportDataBufferSize=500,this.handleVisibleTimeRangeChange=r=>{if(!r)return;r.from>this.viewportDataBufferSize&&(r.from=r.from-this.viewportDataBufferSize);const s=this.viewportManager?.getViewportDataPoints(r,this.preparedData)||[];this.setState({displayData:s})},this.handleEmojiSelect=r=>{this.setState({selectedEmoji:r})},this.handleThemeToggle=()=>{this.setState(r=>{const s=!r.isDarkTheme,a=s?"dark":"light";return{isDarkTheme:s,currentTheme:this.getThemeConfig(a)}},()=>{this.updateChartTheme()})},this.handleMobileMenuToggle=()=>{this.setState(r=>({isMobileMenuOpen:!r.isMobileMenuOpen}))},this.handleClickOutside=r=>{const s=r.target,a=this.state.isMobileMenuOpen&&!s.closest(".mobile-menu-button")&&!s.closest("[data-mobile-menu-modal]"),n=this.state.isTimeFormatModalOpen&&!s.closest(".time-format-button")&&!s.closest("[data-timeformat-modal]"),o=this.state.isCloseTimeModalOpen&&!s.closest(".close-time-button")&&!s.closest("[data-close-time-modal]"),h=this.state.isTradingDayModalOpen&&!s.closest(".trading-day-button")&&!s.closest("[data-trading-day-modal]"),l=this.state.isTimezoneModalOpen&&!s.closest(".timezone-button")&&!s.closest("[data-timezone-modal]"),d=this.state.isTimeframeModalOpen&&!s.closest(".timeframe-button")&&!s.closest("[data-timeframe-modal]"),c=this.state.isIndicatorModalOpen&&!s.closest(".indicator-button")&&!s.closest("[data-indicator-modal]"),u=this.state.isTradeModalOpen&&!s.closest(".trade-button")&&!s.closest("[data-trade-modal]"),g=this.state.isChartTypeModalOpen&&!s.closest(".chart-type-button")&&!s.closest("[data-chart-type-modal]"),p=this.state.isSubChartModalOpen&&!s.closest(".subchart-button")&&!s.closest("[data-subchart-modal]");a&&this.setState({isMobileMenuOpen:!1}),p&&this.setState({isSubChartModalOpen:!1}),d&&this.setState({isTimeframeModalOpen:!1}),c&&this.setState({isIndicatorModalOpen:!1}),u&&this.setState({isTradeModalOpen:!1}),g&&this.setState({isChartTypeModalOpen:!1}),l&&this.setState({isTimezoneModalOpen:!1}),n&&this.setState({isTimeFormatModalOpen:!1}),o&&this.setState({isCloseTimeModalOpen:!1}),h&&this.setState({isTradingDayModalOpen:!1})},this.handleToolSelect=r=>{this.setState({activeTool:r})},this.handleChartTypeSelect=r=>{this.setState({currentMainChartType:r,isChartTypeModalOpen:!1})},this.handleCloseChartTypeModal=()=>{this.setState({isChartTypeModalOpen:!1})},this.handleCloseDrawing=()=>{this.setState({activeTool:null})},this.handleTimeframeClick=()=>{this.setState({isTimeframeModalOpen:!this.state.isTimeframeModalOpen})},this.handleChartTypeClick=()=>{this.setState({isChartTypeModalOpen:!this.state.isChartTypeModalOpen})},this.handleIndicatorClick=()=>{this.setState({isIndicatorModalOpen:!this.state.isIndicatorModalOpen})},this.handleTradeClick=()=>{this.setState({isTradeModalOpen:!this.state.isTradeModalOpen})},this.handleSelectedMainChartIndicator=r=>{this.setState({selectedMainChartIndicator:r,isIndicatorModalOpen:!1})},this.handleMainChartIndicatorChange=r=>{this.setState({selectedMainChartIndicator:r})},this.handleCloseIndicatorModal=()=>{this.setState({isIndicatorModalOpen:!1})},this.handleCloseTimeframeModal=()=>{this.setState({isTimeframeModalOpen:!1})},this.handleCloseTradeModal=()=>{this.setState({isTradeModalOpen:!1})},this.handleTradeAction=r=>{this.setState({isTradeModalOpen:!1})},this.handleFullscreen=()=>{const r=this.chartContainerRef.current;r&&(document.fullscreenElement?document.exitFullscreen?.():r.requestFullscreen?.())},this.handleCompareClick=()=>{},this.handleReplayClick=()=>{},this.stopRealTimeDataSimulation=()=>{this.realTimeInterval&&(clearInterval(this.realTimeInterval),this.realTimeInterval=null)},this.handleContextMenu=r=>{r.preventDefault(),r.stopPropagation()},this.handleLeftArrowClick=()=>{this.chart&&this.viewportManager&&this.viewportManager.scrollChart("left")},this.handleRightArrowClick=()=>{this.chart&&this.viewportManager&&this.viewportManager.scrollChart("right")},this.handleRefreshClick=()=>{this.setState({isDataLoading:!0,dataLoadProgress:0}),setTimeout(()=>{this.setState({dataLoadProgress:20}),this.refreshExternalData(()=>{this.setState({dataLoadProgress:50}),this.refreshInternalData(()=>{this.setState({dataLoadProgress:80}),this.refreshChart(),this.viewportManager?.positionChart(this.state.activeTimeframe),this.setState({isDataLoading:!1,dataLoadProgress:100})})})},100)},this.handleZoomIn=()=>{this.viewportManager&&this.viewportManager.zoomIn()},this.handleZoomOut=()=>{this.viewportManager&&this.viewportManager.zoomOut()},this.handleAIFunctionSelect=r=>{const s=this.aiManager?.aiToolIdToFunctionType(r);if(s){this.setState({currentAIFunctionType:s},()=>{}),this.setState({openAiChat:this.aiManager?.isChartType(r)||!1},()=>{});const a=this.aiManager?.getAITypeFromFunctionType(s);a&&this.setState({currentAIBrandType:a},()=>{})}},this.handleTerminalCommand=r=>{console.log("Terminal command:",r),this.setState({terminalCommand:r})},this.handleToggleTerminal=()=>{this.setState(r=>({terminal:!r.terminal}))},this.openTerminal=()=>{this.setState({terminal:!0})},this.closeTerminal=()=>{this.setState({terminal:!1})};const e=1,i=.3;this.state={isIndicatorModalOpen:!1,isTimeframeModalOpen:!1,isTradeModalOpen:!1,isChartTypeModalOpen:!1,isSubChartModalOpen:!1,isMobileMenuOpen:!1,activeTool:null,currentMainChartType:$.Candle,currentTheme:this.getThemeConfig(t.theme||"dark"),currentI18N:this.getI18nConfig(t.i18n||"zh-cn"),chartInitialized:!1,isDarkTheme:t.theme!=="light",selectedEmoji:"😀",selectedSubChartIndicators:[],selectedMainChartIndicator:null,subChartPanelHeight:200,isResizing:!1,showInfoLayer:!0,isTimezoneModalOpen:!1,currentTimezone:"Asia/Shanghai",isTimeFormatModalOpen:!1,isCloseTimeModalOpen:!1,isTradingDayModalOpen:!1,activeTimeframe:D.ONE_DAY,timeframe:Vo(t.timeframe)||D.ONE_DAY,timezone:qo(t.timezone)||j.SHANGHAI,savedVisibleRange:null,virtualDataBeforeCount:500,virtualDataAfterCount:500,displayData:[],isDataLoading:!1,dataLoadProgress:0,loadError:null,toppanel:t.toppanel||!1,leftpanel:t.leftpanel||!1,ai:t.ai||!1,aiconfigs:t.aiconfigs||[],openAiChat:!1,currentAIFunctionType:null,currentAIBrandType:null,aiPanelWidthRatio:e,isResizingAiPanel:!1,terminalCommand:"",terminal:this.props.terminal||!1,terminalHeightRatio:i,isResizingTerminal:!1},this.chartEventManager=new Wi,this.aiManager=new ml}componentDidMount(){this.chart||(this.setState({isDataLoading:!0}),this.loadDataAsync(()=>{setTimeout(()=>{this.initializeChart()},50)}),document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("mousemove",this.handleTerminalMouseMove),document.addEventListener("mouseup",this.handleTerminalMouseUp))}componentDidUpdate(t,e){if(t.theme!==this.props.theme){const r=this.props.theme||"dark";this.setState({currentTheme:this.getThemeConfig(r)}),this.handleThemeToggle()}if(t.terminal!==this.props.terminal&&this.props.terminal&&this.setState({terminal:this.props.terminal}),e.openAiChat!==this.state.openAiChat&&this.setState({aiPanelWidthRatio:this.state.openAiChat?.7:1}),t.aiconfigs!==this.props.aiconfigs&&this.props.aiconfigs&&this.setState({aiconfigs:this.props.aiconfigs}),t.i18n!==this.props.i18n&&(this.setState({currentI18N:this.getI18nConfig(this.props.i18n||"en")}),this.updateChartI18n(this.props.i18n||"en")),t.data!==this.props.data||t.url!==this.props.url){this.setState({isDataLoading:!0,dataLoadProgress:0}),this.loadDataAsync(()=>{this.refreshChart()});return}}componentWillUnmount(){const t=this.viewportManager?.getVisibleTimeRange();if(t)try{localStorage.setItem("candleView_visibleRange",JSON.stringify(t))}catch{}this.updateTimeout&&clearTimeout(this.updateTimeout),this.resizeObserver&&this.chartContainerRef.current&&(this.resizeObserver.unobserve(this.chartContainerRef.current),this.resizeObserver.disconnect()),this.chart&&this.chart.remove(),this.realTimeInterval&&clearInterval(this.realTimeInterval),document.removeEventListener("mousedown",this.handleClickOutside,!0),document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("mousemove",this.handleTerminalMouseMove),document.removeEventListener("mouseup",this.handleTerminalMouseUp)}initializeChart(){if(!this.chartRef.current||!this.chartContainerRef.current)return;const t=this.chartContainerRef.current,{currentTheme:e,chartInitialized:i}=this.state,r=t.clientWidth,s=t.clientHeight;if(!(r===0||s===0)&&!i)try{this.setState({dataLoadProgress:75}),this.chart&&(this.chart.remove(),this.currentSeries=null),this.chartManager=new Ho(this.chartRef.current,r,s,e,this.props.i18n),this.chart=this.chartManager.getChart(),this.setState({dataLoadProgress:80}),this.viewportManager=new Qo(this.chart,this.currentSeries),this.chartEventManager?.registerVisibleTimeRangeChangeEvent(this.chart,n=>{this.handleVisibleTimeRangeChange(n)}),this.currentSeries=vr(this.chart,e),new El({chartSeries:this.currentSeries,chart:this.chart}).addWatermark({src:this.LOGO,size:40,opacity:2,offsetX:20,offsetY:45}),this.state.displayData&&this.state.displayData.length>0&&(this.setState({dataLoadProgress:85}),this.refreshInternalData(()=>{this.initChart(),this.viewportManager?.positionChart(this.state.activeTimeframe),this.setState({dataLoadProgress:90}),this.setupResizeObserver(),this.setState({chartInitialized:!0,dataLoadProgress:95}),setTimeout(()=>{this.setState({dataLoadProgress:100})},50)}))}catch{this.setState({chartInitialized:!1,dataLoadProgress:100})}}refreshExternalData(t){const e=Fi.loadData({data:this.props.data,url:this.props.url});this.originalData=e,t?.()}refreshInternalData(t){const e=Gt.handleData(this.originalData,be({timeframe:this.state.timeframe,timezone:this.state.timezone},this.state.currentMainChartType,this.state.virtualDataBeforeCount,this.state.virtualDataAfterCount),this.state.currentMainChartType);this.preparedData=e,this.setState({displayData:e},()=>{t?.()})}setupResizeObserver(){this.chartContainerRef.current&&(this.resizeObserver=new wr(t=>{for(const e of t)if(e.target===this.chartContainerRef.current&&this.chart){const{width:i,height:r}=e.contentRect,s=Math.max(i,100),a=Math.max(r,100);requestAnimationFrame(()=>{try{if(this.chart){const n=this.chart.timeScale(),o=n.getVisibleRange();this.chart.applyOptions({width:s,height:a}),o&&setTimeout(()=>{try{n.setVisibleRange(o)}catch{}},10)}}catch{}})}}),this.resizeObserver.observe(this.chartContainerRef.current))}updateChartI18n(t){this.chart&&this.chart.applyOptions({localization:{locale:t}})}updateChartTheme(){const{currentTheme:t}=this.state;if(this.chart)try{this.chart.applyOptions({layout:t.layout,grid:{vertLines:{color:t.grid.vertLines.color+"30",style:1,visible:!0},horzLines:{color:t.grid.horzLines.color+"30",style:1,visible:!0}}}),this.chart.applyOptions({timeScale:{borderColor:t.grid.vertLines.color},rightPriceScale:{borderColor:t.grid.horzLines.color}})}catch{}this.currentSeries&&Lr(this.currentSeries,t)}getThemeConfig(t){return t==="light"?el:tl}getI18nConfig(t){return t==="en"?dt:No}render(){const{currentTheme:t,isDataLoading:e,ai:i,openAiChat:r,terminal:s,terminalHeightRatio:a}=this.state,{height:n=500,width:o="100%"}=this.props,h=s?1-a:1,l=s?a:0,d=i?this.state.aiPanelWidthRatio:1,c=i?1-this.state.aiPanelWidthRatio:0,u=`
|
|
509
509
|
.custom-scrollbar::-webkit-scrollbar {
|
|
510
510
|
width: 6px;
|
|
511
511
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -52344,7 +52344,7 @@ class Fl extends rt.Component {
|
|
|
52344
52344
|
margin: "10px 0",
|
|
52345
52345
|
flexShrink: 0
|
|
52346
52346
|
} }),
|
|
52347
|
-
this.props.ai && this.renderAITools(),
|
|
52347
|
+
this.props.ai && this.props.aiconfigs.length > 0 && this.renderAITools(),
|
|
52348
52348
|
this.renderTerminalButton(),
|
|
52349
52349
|
/* @__PURE__ */ m.jsx("div", { style: {
|
|
52350
52350
|
height: "1px",
|
|
@@ -52369,7 +52369,7 @@ class Fl extends rt.Component {
|
|
|
52369
52369
|
this.renderProjectInfoModal(),
|
|
52370
52370
|
this.renderIrregularShapeModal(),
|
|
52371
52371
|
this.renderTextToolModal(),
|
|
52372
|
-
this.props.ai && this.renderAIToolsModal()
|
|
52372
|
+
this.props.ai && this.props.aiconfigs.length > 0 && this.renderAIToolsModal()
|
|
52373
52373
|
] });
|
|
52374
52374
|
}
|
|
52375
52375
|
}
|