@eaera-com/eaera-widgets-v2 0.1.74 → 0.1.76
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/components/base/EaeraButton.d.ts +3 -1
- package/dist/components/base/EaeraButton.mjs +1 -1
- package/dist/components/base/EaeraCarousel.mjs +1 -1
- package/dist/components/base/EaeraDatePicker.mjs +1 -1
- package/dist/components/base/EaeraDateTimePicker.mjs +1 -1
- package/dist/components/base/EaeraDrawer.mjs +1 -1
- package/dist/components/base/EaeraPopconfirm.mjs +1 -1
- package/dist/components/base/EaeraUploadDefault.mjs +1 -1
- package/dist/components/chunks/EaeraButton-BPVKRBOn.mjs +1 -0
- package/dist/components/chunks/{EaeraButtonGroup-B5wTBG3Y.mjs → EaeraButtonGroup-BROLavKb.mjs} +1 -1
- package/dist/components/chunks/{EaeraCalendar-BFZSCkQq.mjs → EaeraCalendar-QOYXhJey.mjs} +1 -1
- package/dist/components/chunks/{EaeraCarousel-BV02zb3u.mjs → EaeraCarousel-nVdAknBO.mjs} +1 -1
- package/dist/components/chunks/{EaeraDatePicker-CAm9fHms.mjs → EaeraDatePicker-Bwt5r5gk.mjs} +1 -1
- package/dist/components/chunks/{EaeraDateTimePicker-DXW1M3R7.mjs → EaeraDateTimePicker-Hv_ma8qU.mjs} +1 -1
- package/dist/components/chunks/{EaeraDrawer-C3Pj4wvV.mjs → EaeraDrawer-D7drsvOk.mjs} +1 -1
- package/dist/components/chunks/{EaeraDynamicFieldRow-Cv4oclH6.mjs → EaeraDynamicFieldRow-mZ5_nqkn.mjs} +1 -1
- package/dist/components/chunks/{EaeraForm-DKeyWXY3.mjs → EaeraForm-DEoXRjat.mjs} +1 -1
- package/dist/components/chunks/{EaeraPopconfirm-DxtJgCN5.mjs → EaeraPopconfirm-K_C8Pf9V.mjs} +1 -1
- package/dist/components/chunks/{EaeraTableV2-ZUpzVKhm.mjs → EaeraTableV2-CBaM5zp9.mjs} +1 -1
- package/dist/components/chunks/{EaeraUploadDefault-Cs4SEmWT.mjs → EaeraUploadDefault-r9WuE9Ri.mjs} +1 -1
- package/dist/components/chunks/EaeraWidgetGrowthBalanceProfitChart-DFmBk9dM.mjs +1 -0
- package/dist/components/chunks/{EaeraWidgetMarginCalculator-CAZcI1eg.mjs → EaeraWidgetMarginCalculator-BokNy1a7.mjs} +1 -1
- package/dist/components/chunks/EaeraWidgetMonthlyGainChart-Cef4Ckp0.mjs +1 -0
- package/dist/components/chunks/{EaeraWidgetPositionCalculator-BF6O7ATq.mjs → EaeraWidgetPositionCalculator-D36MGO-E.mjs} +1 -1
- package/dist/components/chunks/EaeraWidgetTradeVolumeStatistics-sjd61z36.mjs +1 -0
- package/dist/components/chunks/{index-B_ESts1X.mjs → index-9zJYqMyX.mjs} +1 -1
- package/dist/components/chunks/{index-CqpcR_2l.mjs → index-CgcRJ8oq.mjs} +1 -1
- package/dist/components/chunks/{index-CS3c4zka.mjs → index-ChWzksXo.mjs} +1 -1
- package/dist/components/chunks/{index-iEvfkNT8.mjs → index-Cm-cRnqS.mjs} +1 -1
- package/dist/components/chunks/index-Cu4uZ9Nd.mjs +1 -0
- package/dist/components/chunks/{index-CP8Qcgp3.mjs → index-DD9Bx0uF.mjs} +1 -1
- package/dist/components/chunks/index-DhwN0sRS.mjs +1 -0
- package/dist/components/chunks/index-wGZD3Xyh.mjs +1 -0
- package/dist/components/composite/EaeraCalendar.mjs +1 -1
- package/dist/components/composite/EaeraDynamicFieldRow.mjs +1 -1
- package/dist/components/composite/EaeraForm.mjs +1 -1
- package/dist/components/composite/EaeraTableV2.mjs +1 -1
- package/dist/components/custom/EaeraButtonGroup.mjs +1 -1
- package/dist/components/custom/EaeraWidgetGrowthBalanceProfitChart.mjs +1 -1
- package/dist/components/custom/EaeraWidgetMarginCalculator.mjs +1 -1
- package/dist/components/custom/EaeraWidgetMonthlyGainChart.mjs +1 -1
- package/dist/components/custom/EaeraWidgetPositionCalculator.mjs +1 -1
- package/dist/components/custom/EaeraWidgetTradeVolumeStatistics.mjs +1 -1
- package/dist/components/index.mjs +1 -1
- package/dist/components/webtrade/EaeraCfdOrderPlacement.mjs +1 -1
- package/dist/components/webtrade/EaeraCfdWatchlist.mjs +1 -1
- package/dist/components/webtrade/EaeraLightweightChart.mjs +1 -1
- package/dist/components/webtrade/EaeraOrderPlacement.mjs +1 -1
- package/dist/components/webtrade/EaeraOrderlineOverlay.mjs +1 -1
- package/dist/components/webtrade/EaeraTimeNSales.mjs +1 -1
- package/dist/components/webtrade/EaeraTradingTable.mjs +1 -1
- package/dist/components/webtrade/EaeraWatchlist.mjs +1 -1
- package/dist/design-system/components/_button.scss +48 -46
- package/dist/eaera-widgets-v2.es.js +23 -11
- package/dist/eaera-widgets-v2.umd.cjs +3 -3
- package/package.json +1 -1
- package/dist/components/chunks/EaeraButton-DGfjUoa6.mjs +0 -1
- package/dist/components/chunks/EaeraWidgetGrowthBalanceProfitChart-Czy9mp1p.mjs +0 -1
- package/dist/components/chunks/EaeraWidgetMonthlyGainChart-DR2cG9Ku.mjs +0 -1
- package/dist/components/chunks/EaeraWidgetTradeVolumeStatistics-DaXxwNPF.mjs +0 -1
- package/dist/components/chunks/index-0bXWe0Hv.mjs +0 -1
- package/dist/components/chunks/index-uox7lRH5.mjs +0 -1
- package/dist/components/chunks/index-xImZAwVl.mjs +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{computed as e,provide as t,inject as l,defineComponent as o,shallowRef as s,ref as a,watch as i,resolveComponent as r,openBlock as c,createElementBlock as n,createElementVNode as m,createVNode as u,unref as d,createSlots as p,withCtx as v,toDisplayString as y,normalizeClass as b,normalizeStyle as g,Fragment as w,renderList as _,createBlock as f,withDirectives as S,withModifiers as k}from"vue";import{a as C}from"./vendor-vueuse-core-B96HGhR7.mjs";import x from"../composite/EaeraDropdownV2.mjs";import{_ as I}from"./EaeraInput-CkbcAxy0.mjs";import{useI18n as E}from"vue-i18n";import"element-plus";import{ElLoadingDirective as H}from"element-plus/es";import"@lucide/vue";import"./vendor-email-misspelled-0hsXkSSK.mjs";import"./vendor-unorm-Degftfa1.mjs";import"./useEaeraInputPhoneNumber-B72aLnQs.mjs";import"@element-plus/icons-vue";import"echarts/core";import"echarts/renderers";import"echarts/charts";import"echarts/components";import"vue-echarts";import"./vendor-currency-symbol-map-C-1fEG2R.mjs";import{_ as R}from"./EaeraTableV2-ZUpzVKhm.mjs";import{_ as D}from"./EaeraTooltip-BIlULHv4.mjs";const G=Symbol("EAERA_WATCHLIST_CONTEXT_KEY"),T=(l,o)=>{const s={inputPlaceholder:e(()=>l.inputPlaceholder),searchData:e(()=>l.searchData),categories:e(()=>l.categories),selectedCategory:e(()=>l.selectedCategory),isFiltered:e(()=>l.isFiltered),tableHeight:e(()=>l.tableHeight),viewingSymbols:e(()=>l.viewingSymbols),viewingSymbolGroups:e(()=>l.viewingSymbolGroups),listSymbols:e(()=>l.listSymbols),groupLoadingRowIds:e(()=>l.groupLoadingRowIds),favoriteSymbolIds:e(()=>l.favoriteSymbolIds),viewingSymbolId:e(()=>l.viewingSymbolId),listSymbolsLoading:e(()=>l.listSymbolsLoading),sorting:e(()=>l.sorting),onResize:(e,t)=>o("resize",e,t),onSelectCategory:e=>o("selectCategory",e),onSearchDataUpdate:e=>o("update:searchData",e),onGroupExpandChange:e=>o("groupExpandChange",e),onGroupRowClick:e=>o("groupRowClick",e),onGroupSortChanged:e=>o("groupSortChanged",e),onItemSortChanged:e=>o("itemSortChanged",e),onSelectSymbol:e=>o("selectSymbol",e),onToggleFavorite:e=>o("toggleFavorite",e),onShowSymbolInfo:e=>o("showSymbolInfo",e)};return t(G,s),s},j=()=>{const e=l(G);if(!e)throw new Error("useEaeraWatchlist must be used inside EaeraWatchlist");return e},W={class:"custom-watchlist-filter"},F={class:"custom-watchlist-filter__row"},L={class:"custom-watchlist-filter__field"},z={class:"custom-watchlist-filter__field"},U=["onClick"],A={class:"custom-watchlist-filter__category-count"},N={class:"custom-watchlist-filter__dropdown-trigger-content"},B={key:0,class:"custom-watchlist-filter__selected"},V={key:1,class:"custom-watchlist-filter__placeholder"},P=o({__name:"EaeraWatchlistFilter",setup(e){const{inputPlaceholder:t,searchData:l,categories:o,selectedCategory:f,onSelectCategory:S,onSearchDataUpdate:k}=j(),C=s(),E=a(!1),H=a(!1),R=a(""),D=a(!1);i(l,e=>{e!==R.value&&(R.value=e)},{immediate:!0});const G=e=>{D.value||k(e)},T=()=>D.value=!0,P=e=>k(e.data),K=e=>{D.value=!1;const t=e.data??R.value;k(t)};return(e,s)=>{const a=r("eaera-icon"),i=I,k=x;return c(),n("div",W,[m("div",F,[m("div",L,[u(i,{modelValue:R.value,"onUpdate:modelValue":s[0]||(s[0]=e=>R.value=e),class:"watchlist-input",placeholder:d(t),clearable:"",onInput:G,onCompositionstart:T,onCompositionupdate:P,onCompositionend:K},p({_:2},[d(l)?void 0:{name:"suffix",fn:v(()=>[u(a,{icon:"Search2",size:"16",class:"icon-primary"})]),key:"0"}]),1032,["modelValue","placeholder"])]),m("div",z,[u(k,{class:"custom-watchlist-filter__dropdown","popper-class":"with-border",onVisibleChange:s[4]||(s[4]=e=>E.value=e)},{dropdown:v(()=>[m("div",{class:"custom-watchlist-filter__dropdown-menu",style:g({width:`${C.value?.clientWidth??100}px`})},[(c(!0),n(w,null,_(d(o),e=>(c(),n("div",{key:e.id,class:"custom-watchlist-filter__category"},[m("div",{class:"custom-watchlist-filter__category-content label-md",onClick:t=>d(S)(e)},[m("div",null,y(e.name),1),m("div",A,y(e.count),1)],8,U)]))),128))],4)]),default:v(()=>[m("div",{ref_key:"dropdownRef",ref:C,class:"custom-watchlist-filter__dropdown-trigger"},[m("div",N,[d(f)?.name?(c(),n("span",B,y(d(f).name),1)):(c(),n("span",V,y(e.$t("watch-list.filter.categories")),1)),m("div",{class:"custom-watchlist-filter__icon-wrapper",onMouseenter:s[1]||(s[1]=e=>H.value=!0),onMouseleave:s[2]||(s[2]=e=>H.value=!1),onClick:s[3]||(s[3]=e=>d(S)(null))},[u(a,{icon:H.value&&d(f)?"XCircle":"ChevronDown",size:"16",class:b(["icon-primary","custom-watchlist-filter__dropdown-icon",E.value&&"is-open"])},null,8,["icon","class"])],32)])],512)]),_:1})])])])}}}),K={class:"custom-watchlist-table"},M={key:0,class:"custom-watchlist-table__group"},O={key:1,class:"custom-watchlist-table__items"},$=o({__name:"EaeraWatchlistTable",setup(e){const{isFiltered:t,tableHeight:l,viewingSymbols:o,listSymbolsLoading:s}=j();return(e,a)=>(c(),n("div",K,[d(t)?(c(),n("div",O,[u(d(de),{symbols:d(o),"max-height":d(l),loading:d(s),"show-header":""},null,8,["symbols","max-height","loading"])])):(c(),n("div",M,[u(d(te))]))]))}}),X={class:"custom-watchlist-group-table__symbol-cell"},Y={class:"custom-watchlist-group-table__symbol body-md__w"},q={class:"custom-watchlist-group-table__name body-sm"},J={key:0},Q={class:"custom-watchlist-group-table__empty"},Z={class:"custom-watchlist-group-table__empty-content"},ee={class:"custom-watchlist-group-table__empty-text body-sm"},te=o({__name:"EaeraWatchlistGroupTable",setup(t){const{tableHeight:l,viewingSymbolGroups:o,listSymbols:s,groupLoadingRowIds:p,sorting:b,onGroupExpandChange:g,onGroupRowClick:w,onGroupSortChanged:_}=j(),{t:S}=E(),k=a(),C=({columnIndex:e})=>0===e?[1,1]:1===e?[1,4]:[0,0],x=e=>{g(e)},I=async e=>{await w(e),k.value?.rowExpansion(e)},H=e(()=>[{key:"expand",type:"expand",width:30},{key:"ticker_symbol",label:S("watch-list.table.symbol"),sortable:!0,sort_key:"ticker_symbol",customHeaderClass:"flex justify-start items-center",cellClass:"py-0",minWidth:100},{key:"last",label:S("watch-list.table.last-price"),sortable:!0,sort_key:"last",align:"right",minWidth:110},{key:"volume",label:S("watch-list.table.volume"),sortable:!0,sort_key:"volume",align:"right",minWidth:100}]),D=e(()=>k.value?.sort),G=e=>{_(e)},T=(e,t,l)=>e!==l?.key?"SortDefault2":"asc"===t?"SortUp2":"SortDown2",W=({row:e})=>p.value.includes(e.id)?"loading-row":"";return i(b,e=>{e||k.value?.sortTable("",null)}),(e,t)=>{const a=r("NoData"),i=r("eaera-icon");return c(),f(d(R),{ref_key:"watchListTableRef",ref:k,class:"watchlist-table","max-height":d(l),items:d(o),fields:H.value,"span-method":C,stripe:!1,"hide-footer":"","row-class-name":W,onRowClick:I,onExpandChange:x,"onUpdate:onSortChanged":G},{"cell(ticker_symbol)":v(({item:e})=>[m("div",X,[m("div",Y,y(e.host_exchange)+":"+y(e.base_symbol),1),m("div",q,y(e.name),1)])]),"cell(expand)":v(({row:e})=>[d(p).includes(e.id)?(c(),n("div",J)):(c(),f(d(de),{key:1,symbols:d(s)[e.id]||[],"inside-group":""},null,8,["symbols"]))]),empty:v(()=>[m("div",Q,[m("div",Z,[u(a),m("span",ee,y(d(S)("watch-list.table.empty.group")),1)])])]),"sort-icon":v(({sortKey:e,direction:t})=>[u(i,{icon:T(e,t,D.value),size:"14",class:"custom-watchlist-group-table__sort-icon","active-color":"var(--primary-green)"},null,8,["icon"])]),_:1},8,["max-height","items","fields"])}}});var le=(e=>(e.Active="active",e.MarketClosed="market-closed",e.Expired="expired",e.NotTradableYet="not-tradable-yet",e))(le||{});const oe={class:"custom-watchlist-item-table__symbol-cell"},se={class:"custom-watchlist-item-table__symbol-main body-md__w"},ae=["onClick"],ie={class:"custom-watchlist-item-table__description-row body-sm"},re={style:{width:"100%"}},ce={style:{width:"100%"}},ne={key:0},me={class:"custom-watchlist-item-table__empty-content"},ue={class:"custom-watchlist-item-table__empty-text body-sm"},de=o({__name:"EaeraWatchlistItemTable",props:{insideGroup:{type:Boolean},symbols:{},maxHeight:{},showHeader:{type:Boolean},loading:{type:Boolean}},setup(t){const{favoriteSymbolIds:l,viewingSymbolId:o,sorting:s,selectedCategory:p,listSymbolsLoading:w,onItemSortChanged:_,onSelectSymbol:C,onToggleFavorite:x,onShowSymbolInfo:I}=j(),{t:G}=E(),T=t,W=a(),F=a(null),L=e(()=>[{key:"",label:"",width:30},{key:"ticker_symbol",label:G("watch-list.table.symbol"),sortable:!0,sort_key:"ticker_symbol",customHeaderClass:"flex justify-start items-center",align:"left",minWidth:100},{key:"last",label:G("watch-list.table.last-price"),sortable:!0,sort_key:"last",align:"right",customHeaderClass:"flex justify-end items-center",minWidth:110},{key:"volume",label:G("watch-list.table.volume"),sortable:!0,sort_key:"volume",customHeaderClass:"flex justify-end items-center",minWidth:100,align:"right"}]),z=e(()=>F.value?"ticker_symbol"===F.value.key?[...T.symbols].sort((e,t)=>{const l=e.ticker_symbol.toUpperCase(),o=t.ticker_symbol.toUpperCase();return l<o?"desc"===F.value?.direction?-1:1:l>o?"desc"===F.value?.direction?1:-1:0}):"volume"===F.value.key?[...T.symbols].sort((e,t)=>e.volume<t.volume?"asc"===F.value?.direction?-1:1:e.volume>t.volume?"asc"===F.value?.direction?1:-1:0):"last"===F.value.key?[...T.symbols].sort((e,t)=>{const l=Number(e.last),o=Number(t.last);return l<o?"asc"===F.value?.direction?-1:1:l>o?"asc"===F.value?.direction?1:-1:0}):T.symbols:T.symbols),U=e(()=>e=>l.value.includes(e.id)?{icon:"Star3",color:"#FFD700"}:{icon:"StarOutline",color:"var(--primary-green)"}),A=e(()=>W.value?.sort),N=e(()=>T.insideGroup?T.loading:w.value),B=e=>e!==le.Active,V=({key:e,direction:t})=>{e&&t?(F.value={key:e,direction:t,selfSort:!0},_({key:e,direction:t})):(F.value?.selfSort&&_(null),F.value=null)},P=e=>{C(e)},K=({row:e})=>e.id===o.value?"active-row":"",M=(e,t)=>{if(t&&t!==le.Active)return"var(--text-disabled)";const l=Number(e);return l>0?"var(--text-green)":l<0?"var(--text-red)":"var(--text-primary)"},O=(e,t,l)=>e!==l?.key?"SortDefault2":"asc"===t?"SortUp2":"SortDown2";return i(W,e=>{e&&(T.insideGroup||s.value&&(e.sortTable("",s.value.sort_by),F.value={key:s.value.sort_by,direction:s.value.order,selfSort:!1}))}),i(()=>p.value?.id,()=>F.value=null),(e,t)=>{const l=r("eaera-icon"),o=D,s=r("client-only"),a=H;return c(),f(s,null,{default:v(()=>[S((c(),n("div",null,[u(d(R),{ref_key:"watchListTableRef",ref:W,class:b(["expanding-rows-table watchlist-table expanded",[!z.value?.length&&!T.insideGroup&&"empty",T.insideGroup&&"inside-group"]]),"allow-sort-reset":"","hide-footer":"","max-height":T.maxHeight,height:T.maxHeight,"show-header":T.showHeader,items:z.value,fields:L.value,stripe:!1,"row-class-name":K,loading:N.value,"onUpdate:onSortChanged":V,onOnRowClick:P},{"cell()":v(({item:e})=>[m("div",null,[u(l,{icon:"Info",size:"16",class:b(["custom-watchlist-item-table__info-icon",B(e.state)&&"is-disabled"]),onClick:k(t=>(async e=>{const t=T.symbols.find(t=>t.id===e);t&&await I(t)})(e.id),["stop"])},null,8,["class","onClick"])])]),"cell(ticker_symbol)":v(({item:e})=>[m("div",oe,[m("div",se,[m("span",{class:b(["custom-watchlist-item-table__symbol-text",B(e.state)&&"is-inactive"])},y(e.ticker_symbol),3),m("div",{class:"custom-watchlist-item-table__favorite",onClick:k(t=>{return l=e.id,void x(l);var l},["stop"])},[u(l,{icon:U.value(e).icon,color:U.value(e).color,size:"16"},null,8,["icon","color"])],8,ae)]),m("div",ie,[u(o,{content:e.description,placement:"right"},{default:v(()=>[m("span",{class:b(["custom-watchlist-item-table__description-text",B(e.state)&&"is-inactive"])},y(e.description),3)]),_:2},1032,["content"])])])]),"cell(last)":v(({item:e})=>[m("div",{style:g({color:M(e.last,e.state),width:"100%"})},[m("div",re,[m("div",null,y(e.last),1)])],4)]),"cell(volume)":v(({item:e})=>[m("div",{style:g({color:M(e.volume,e.state),width:"100%"})},[m("div",ce,[m("div",null,y(e.volume),1)])],4)]),empty:v(()=>[N.value?(c(),n("div",ne)):(c(),n("div",{key:1,class:"custom-watchlist-item-table__empty",style:g({height:T.maxHeight?`calc(${T.maxHeight} - 32px)`:"auto"})},[m("div",me,[m("span",ue,y(d(G)("watch-list.table.empty.symbol")),1)])],4))]),"sort-icon":v(({sortKey:e,direction:t})=>[u(l,{icon:O(e,t,A.value),size:"14",class:"custom-watchlist-item-table__sort-icon","active-color":"var(--icon-success)"},null,8,["icon"])]),_:1},8,["class","max-height","height","show-header","items","fields","loading"])])),[[a,N.value]])]),_:1})}}}),pe={class:"custom-watchlist__table"},he=o({__name:"index",props:{inputPlaceholder:{},searchData:{},categories:{},selectedCategory:{},isFiltered:{type:Boolean},tableHeight:{},viewingSymbols:{},viewingSymbolGroups:{},listSymbols:{},groupLoadingRowIds:{},favoriteSymbolIds:{},viewingSymbolId:{},listSymbolsLoading:{type:Boolean},sorting:{}},emits:["resize","selectCategory","update:searchData","groupExpandChange","groupRowClick","groupSortChanged","itemSortChanged","selectSymbol","toggleFavorite","showSymbolInfo"],setup(e,{emit:t}){const l=s(null),o=s(null),{width:a,height:r}=C(l),p=T(e,t);return i([a,r],()=>{l.value&&o.value&&p.onResize(a.value,r.value-o.value.clientHeight)}),(e,t)=>(c(),n("div",{ref_key:"watchlistRef",ref:l,class:"custom-watchlist"},[m("div",{ref_key:"watchlistFilterRef",ref:o,class:"custom-watchlist__filter"},[u(d(P))],512),m("div",pe,[u(d($))])],512))}});export{le as S,he as _,T as p,j as u};
|
|
1
|
+
import{computed as e,provide as t,inject as l,defineComponent as o,shallowRef as s,ref as a,watch as i,resolveComponent as r,openBlock as c,createElementBlock as n,createElementVNode as m,createVNode as u,unref as d,createSlots as p,withCtx as v,toDisplayString as y,normalizeClass as b,normalizeStyle as g,Fragment as w,renderList as _,createBlock as f,withDirectives as S,withModifiers as k}from"vue";import{a as C}from"./vendor-vueuse-core-B96HGhR7.mjs";import x from"../composite/EaeraDropdownV2.mjs";import{_ as I}from"./EaeraInput-CkbcAxy0.mjs";import{useI18n as E}from"vue-i18n";import"element-plus";import{ElLoadingDirective as H}from"element-plus/es";import"@lucide/vue";import"./vendor-email-misspelled-0hsXkSSK.mjs";import"./vendor-unorm-Degftfa1.mjs";import"./useEaeraInputPhoneNumber-B72aLnQs.mjs";import"@element-plus/icons-vue";import"echarts/core";import"echarts/renderers";import"echarts/charts";import"echarts/components";import"vue-echarts";import"./vendor-currency-symbol-map-C-1fEG2R.mjs";import{_ as R}from"./EaeraTableV2-CBaM5zp9.mjs";import{_ as D}from"./EaeraTooltip-BIlULHv4.mjs";const G=Symbol("EAERA_WATCHLIST_CONTEXT_KEY"),T=(l,o)=>{const s={inputPlaceholder:e(()=>l.inputPlaceholder),searchData:e(()=>l.searchData),categories:e(()=>l.categories),selectedCategory:e(()=>l.selectedCategory),isFiltered:e(()=>l.isFiltered),tableHeight:e(()=>l.tableHeight),viewingSymbols:e(()=>l.viewingSymbols),viewingSymbolGroups:e(()=>l.viewingSymbolGroups),listSymbols:e(()=>l.listSymbols),groupLoadingRowIds:e(()=>l.groupLoadingRowIds),favoriteSymbolIds:e(()=>l.favoriteSymbolIds),viewingSymbolId:e(()=>l.viewingSymbolId),listSymbolsLoading:e(()=>l.listSymbolsLoading),sorting:e(()=>l.sorting),onResize:(e,t)=>o("resize",e,t),onSelectCategory:e=>o("selectCategory",e),onSearchDataUpdate:e=>o("update:searchData",e),onGroupExpandChange:e=>o("groupExpandChange",e),onGroupRowClick:e=>o("groupRowClick",e),onGroupSortChanged:e=>o("groupSortChanged",e),onItemSortChanged:e=>o("itemSortChanged",e),onSelectSymbol:e=>o("selectSymbol",e),onToggleFavorite:e=>o("toggleFavorite",e),onShowSymbolInfo:e=>o("showSymbolInfo",e)};return t(G,s),s},j=()=>{const e=l(G);if(!e)throw new Error("useEaeraWatchlist must be used inside EaeraWatchlist");return e},W={class:"custom-watchlist-filter"},F={class:"custom-watchlist-filter__row"},L={class:"custom-watchlist-filter__field"},z={class:"custom-watchlist-filter__field"},U=["onClick"],A={class:"custom-watchlist-filter__category-count"},N={class:"custom-watchlist-filter__dropdown-trigger-content"},B={key:0,class:"custom-watchlist-filter__selected"},V={key:1,class:"custom-watchlist-filter__placeholder"},P=o({__name:"EaeraWatchlistFilter",setup(e){const{inputPlaceholder:t,searchData:l,categories:o,selectedCategory:f,onSelectCategory:S,onSearchDataUpdate:k}=j(),C=s(),E=a(!1),H=a(!1),R=a(""),D=a(!1);i(l,e=>{e!==R.value&&(R.value=e)},{immediate:!0});const G=e=>{D.value||k(e)},T=()=>D.value=!0,P=e=>k(e.data),K=e=>{D.value=!1;const t=e.data??R.value;k(t)};return(e,s)=>{const a=r("eaera-icon"),i=I,k=x;return c(),n("div",W,[m("div",F,[m("div",L,[u(i,{modelValue:R.value,"onUpdate:modelValue":s[0]||(s[0]=e=>R.value=e),class:"watchlist-input",placeholder:d(t),clearable:"",onInput:G,onCompositionstart:T,onCompositionupdate:P,onCompositionend:K},p({_:2},[d(l)?void 0:{name:"suffix",fn:v(()=>[u(a,{icon:"Search2",size:"16",class:"icon-primary"})]),key:"0"}]),1032,["modelValue","placeholder"])]),m("div",z,[u(k,{class:"custom-watchlist-filter__dropdown","popper-class":"with-border",onVisibleChange:s[4]||(s[4]=e=>E.value=e)},{dropdown:v(()=>[m("div",{class:"custom-watchlist-filter__dropdown-menu",style:g({width:`${C.value?.clientWidth??100}px`})},[(c(!0),n(w,null,_(d(o),e=>(c(),n("div",{key:e.id,class:"custom-watchlist-filter__category"},[m("div",{class:"custom-watchlist-filter__category-content label-md",onClick:t=>d(S)(e)},[m("div",null,y(e.name),1),m("div",A,y(e.count),1)],8,U)]))),128))],4)]),default:v(()=>[m("div",{ref_key:"dropdownRef",ref:C,class:"custom-watchlist-filter__dropdown-trigger"},[m("div",N,[d(f)?.name?(c(),n("span",B,y(d(f).name),1)):(c(),n("span",V,y(e.$t("watch-list.filter.categories")),1)),m("div",{class:"custom-watchlist-filter__icon-wrapper",onMouseenter:s[1]||(s[1]=e=>H.value=!0),onMouseleave:s[2]||(s[2]=e=>H.value=!1),onClick:s[3]||(s[3]=e=>d(S)(null))},[u(a,{icon:H.value&&d(f)?"XCircle":"ChevronDown",size:"16",class:b(["icon-primary","custom-watchlist-filter__dropdown-icon",E.value&&"is-open"])},null,8,["icon","class"])],32)])],512)]),_:1})])])])}}}),K={class:"custom-watchlist-table"},M={key:0,class:"custom-watchlist-table__group"},O={key:1,class:"custom-watchlist-table__items"},$=o({__name:"EaeraWatchlistTable",setup(e){const{isFiltered:t,tableHeight:l,viewingSymbols:o,listSymbolsLoading:s}=j();return(e,a)=>(c(),n("div",K,[d(t)?(c(),n("div",O,[u(d(de),{symbols:d(o),"max-height":d(l),loading:d(s),"show-header":""},null,8,["symbols","max-height","loading"])])):(c(),n("div",M,[u(d(te))]))]))}}),X={class:"custom-watchlist-group-table__symbol-cell"},Y={class:"custom-watchlist-group-table__symbol body-md__w"},q={class:"custom-watchlist-group-table__name body-sm"},J={key:0},Q={class:"custom-watchlist-group-table__empty"},Z={class:"custom-watchlist-group-table__empty-content"},ee={class:"custom-watchlist-group-table__empty-text body-sm"},te=o({__name:"EaeraWatchlistGroupTable",setup(t){const{tableHeight:l,viewingSymbolGroups:o,listSymbols:s,groupLoadingRowIds:p,sorting:b,onGroupExpandChange:g,onGroupRowClick:w,onGroupSortChanged:_}=j(),{t:S}=E(),k=a(),C=({columnIndex:e})=>0===e?[1,1]:1===e?[1,4]:[0,0],x=e=>{g(e)},I=async e=>{await w(e),k.value?.rowExpansion(e)},H=e(()=>[{key:"expand",type:"expand",width:30},{key:"ticker_symbol",label:S("watch-list.table.symbol"),sortable:!0,sort_key:"ticker_symbol",customHeaderClass:"flex justify-start items-center",cellClass:"py-0",minWidth:100},{key:"last",label:S("watch-list.table.last-price"),sortable:!0,sort_key:"last",align:"right",minWidth:110},{key:"volume",label:S("watch-list.table.volume"),sortable:!0,sort_key:"volume",align:"right",minWidth:100}]),D=e(()=>k.value?.sort),G=e=>{_(e)},T=(e,t,l)=>e!==l?.key?"SortDefault2":"asc"===t?"SortUp2":"SortDown2",W=({row:e})=>p.value.includes(e.id)?"loading-row":"";return i(b,e=>{e||k.value?.sortTable("",null)}),(e,t)=>{const a=r("NoData"),i=r("eaera-icon");return c(),f(d(R),{ref_key:"watchListTableRef",ref:k,class:"watchlist-table","max-height":d(l),items:d(o),fields:H.value,"span-method":C,stripe:!1,"hide-footer":"","row-class-name":W,onRowClick:I,onExpandChange:x,"onUpdate:onSortChanged":G},{"cell(ticker_symbol)":v(({item:e})=>[m("div",X,[m("div",Y,y(e.host_exchange)+":"+y(e.base_symbol),1),m("div",q,y(e.name),1)])]),"cell(expand)":v(({row:e})=>[d(p).includes(e.id)?(c(),n("div",J)):(c(),f(d(de),{key:1,symbols:d(s)[e.id]||[],"inside-group":""},null,8,["symbols"]))]),empty:v(()=>[m("div",Q,[m("div",Z,[u(a),m("span",ee,y(d(S)("watch-list.table.empty.group")),1)])])]),"sort-icon":v(({sortKey:e,direction:t})=>[u(i,{icon:T(e,t,D.value),size:"14",class:"custom-watchlist-group-table__sort-icon","active-color":"var(--primary-green)"},null,8,["icon"])]),_:1},8,["max-height","items","fields"])}}});var le=(e=>(e.Active="active",e.MarketClosed="market-closed",e.Expired="expired",e.NotTradableYet="not-tradable-yet",e))(le||{});const oe={class:"custom-watchlist-item-table__symbol-cell"},se={class:"custom-watchlist-item-table__symbol-main body-md__w"},ae=["onClick"],ie={class:"custom-watchlist-item-table__description-row body-sm"},re={style:{width:"100%"}},ce={style:{width:"100%"}},ne={key:0},me={class:"custom-watchlist-item-table__empty-content"},ue={class:"custom-watchlist-item-table__empty-text body-sm"},de=o({__name:"EaeraWatchlistItemTable",props:{insideGroup:{type:Boolean},symbols:{},maxHeight:{},showHeader:{type:Boolean},loading:{type:Boolean}},setup(t){const{favoriteSymbolIds:l,viewingSymbolId:o,sorting:s,selectedCategory:p,listSymbolsLoading:w,onItemSortChanged:_,onSelectSymbol:C,onToggleFavorite:x,onShowSymbolInfo:I}=j(),{t:G}=E(),T=t,W=a(),F=a(null),L=e(()=>[{key:"",label:"",width:30},{key:"ticker_symbol",label:G("watch-list.table.symbol"),sortable:!0,sort_key:"ticker_symbol",customHeaderClass:"flex justify-start items-center",align:"left",minWidth:100},{key:"last",label:G("watch-list.table.last-price"),sortable:!0,sort_key:"last",align:"right",customHeaderClass:"flex justify-end items-center",minWidth:110},{key:"volume",label:G("watch-list.table.volume"),sortable:!0,sort_key:"volume",customHeaderClass:"flex justify-end items-center",minWidth:100,align:"right"}]),z=e(()=>F.value?"ticker_symbol"===F.value.key?[...T.symbols].sort((e,t)=>{const l=e.ticker_symbol.toUpperCase(),o=t.ticker_symbol.toUpperCase();return l<o?"desc"===F.value?.direction?-1:1:l>o?"desc"===F.value?.direction?1:-1:0}):"volume"===F.value.key?[...T.symbols].sort((e,t)=>e.volume<t.volume?"asc"===F.value?.direction?-1:1:e.volume>t.volume?"asc"===F.value?.direction?1:-1:0):"last"===F.value.key?[...T.symbols].sort((e,t)=>{const l=Number(e.last),o=Number(t.last);return l<o?"asc"===F.value?.direction?-1:1:l>o?"asc"===F.value?.direction?1:-1:0}):T.symbols:T.symbols),U=e(()=>e=>l.value.includes(e.id)?{icon:"Star3",color:"#FFD700"}:{icon:"StarOutline",color:"var(--primary-green)"}),A=e(()=>W.value?.sort),N=e(()=>T.insideGroup?T.loading:w.value),B=e=>e!==le.Active,V=({key:e,direction:t})=>{e&&t?(F.value={key:e,direction:t,selfSort:!0},_({key:e,direction:t})):(F.value?.selfSort&&_(null),F.value=null)},P=e=>{C(e)},K=({row:e})=>e.id===o.value?"active-row":"",M=(e,t)=>{if(t&&t!==le.Active)return"var(--text-disabled)";const l=Number(e);return l>0?"var(--text-green)":l<0?"var(--text-red)":"var(--text-primary)"},O=(e,t,l)=>e!==l?.key?"SortDefault2":"asc"===t?"SortUp2":"SortDown2";return i(W,e=>{e&&(T.insideGroup||s.value&&(e.sortTable("",s.value.sort_by),F.value={key:s.value.sort_by,direction:s.value.order,selfSort:!1}))}),i(()=>p.value?.id,()=>F.value=null),(e,t)=>{const l=r("eaera-icon"),o=D,s=r("client-only"),a=H;return c(),f(s,null,{default:v(()=>[S((c(),n("div",null,[u(d(R),{ref_key:"watchListTableRef",ref:W,class:b(["expanding-rows-table watchlist-table expanded",[!z.value?.length&&!T.insideGroup&&"empty",T.insideGroup&&"inside-group"]]),"allow-sort-reset":"","hide-footer":"","max-height":T.maxHeight,height:T.maxHeight,"show-header":T.showHeader,items:z.value,fields:L.value,stripe:!1,"row-class-name":K,loading:N.value,"onUpdate:onSortChanged":V,onOnRowClick:P},{"cell()":v(({item:e})=>[m("div",null,[u(l,{icon:"Info",size:"16",class:b(["custom-watchlist-item-table__info-icon",B(e.state)&&"is-disabled"]),onClick:k(t=>(async e=>{const t=T.symbols.find(t=>t.id===e);t&&await I(t)})(e.id),["stop"])},null,8,["class","onClick"])])]),"cell(ticker_symbol)":v(({item:e})=>[m("div",oe,[m("div",se,[m("span",{class:b(["custom-watchlist-item-table__symbol-text",B(e.state)&&"is-inactive"])},y(e.ticker_symbol),3),m("div",{class:"custom-watchlist-item-table__favorite",onClick:k(t=>{return l=e.id,void x(l);var l},["stop"])},[u(l,{icon:U.value(e).icon,color:U.value(e).color,size:"16"},null,8,["icon","color"])],8,ae)]),m("div",ie,[u(o,{content:e.description,placement:"right"},{default:v(()=>[m("span",{class:b(["custom-watchlist-item-table__description-text",B(e.state)&&"is-inactive"])},y(e.description),3)]),_:2},1032,["content"])])])]),"cell(last)":v(({item:e})=>[m("div",{style:g({color:M(e.last,e.state),width:"100%"})},[m("div",re,[m("div",null,y(e.last),1)])],4)]),"cell(volume)":v(({item:e})=>[m("div",{style:g({color:M(e.volume,e.state),width:"100%"})},[m("div",ce,[m("div",null,y(e.volume),1)])],4)]),empty:v(()=>[N.value?(c(),n("div",ne)):(c(),n("div",{key:1,class:"custom-watchlist-item-table__empty",style:g({height:T.maxHeight?`calc(${T.maxHeight} - 32px)`:"auto"})},[m("div",me,[m("span",ue,y(d(G)("watch-list.table.empty.symbol")),1)])],4))]),"sort-icon":v(({sortKey:e,direction:t})=>[u(l,{icon:O(e,t,A.value),size:"14",class:"custom-watchlist-item-table__sort-icon","active-color":"var(--icon-success)"},null,8,["icon"])]),_:1},8,["class","max-height","height","show-header","items","fields","loading"])])),[[a,N.value]])]),_:1})}}}),pe={class:"custom-watchlist__table"},he=o({__name:"index",props:{inputPlaceholder:{},searchData:{},categories:{},selectedCategory:{},isFiltered:{type:Boolean},tableHeight:{},viewingSymbols:{},viewingSymbolGroups:{},listSymbols:{},groupLoadingRowIds:{},favoriteSymbolIds:{},viewingSymbolId:{},listSymbolsLoading:{type:Boolean},sorting:{}},emits:["resize","selectCategory","update:searchData","groupExpandChange","groupRowClick","groupSortChanged","itemSortChanged","selectSymbol","toggleFavorite","showSymbolInfo"],setup(e,{emit:t}){const l=s(null),o=s(null),{width:a,height:r}=C(l),p=T(e,t);return i([a,r],()=>{l.value&&o.value&&p.onResize(a.value,r.value-o.value.clientHeight)}),(e,t)=>(c(),n("div",{ref_key:"watchlistRef",ref:l,class:"custom-watchlist"},[m("div",{ref_key:"watchlistFilterRef",ref:o,class:"custom-watchlist__filter"},[u(d(P))],512),m("div",pe,[u(d($))])],512))}});export{le as S,he as _,T as p,j as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ElLoadingDirective as e}from"element-plus/es";import{ref as t,computed as a,watch as r,defineComponent as l,onMounted as o,onUnmounted as i,openBlock as n,createElementBlock as s,createElementVNode as c,unref as u,toDisplayString as d,Fragment as m,createCommentVNode as p,createVNode as v,withCtx as g,renderList as y,normalizeClass as f,createBlock as b,resolveDynamicComponent as w,shallowRef as x,nextTick as C,normalizeStyle as k,Teleport as T,Transition as L,withModifiers as S,createTextVNode as M,withDirectives as F,renderSlot as D}from"vue";import{b as P,a as O}from"./vendor-vueuse-core-B96HGhR7.mjs";import{isBusinessDay as _,ColorType as R,CandlestickSeries as E,AreaSeries as $,LineSeries as z,createChart as j}from"lightweight-charts";import{ElNotification as B}from"element-plus";import{Square as I,Columns2 as A,Rows2 as N,Columns3 as H,Rows3 as V,Grid2X2 as K,ChartCandlestick as W,Camera as U,Table as Y,Scan as Z,CalendarDays as q}from"@lucide/vue";import"./vendor-email-misspelled-0hsXkSSK.mjs";import"./vendor-unorm-Degftfa1.mjs";import"./useEaeraInputPhoneNumber-B72aLnQs.mjs";import"@element-plus/icons-vue";import"echarts/core";import"echarts/renderers";import"echarts/charts";import"echarts/components";import"vue-echarts";import"./vendor-currency-symbol-map-C-1fEG2R.mjs";import{useI18n as G}from"vue-i18n";import"./vendor-sortablejs-D3DyHO5Y.mjs";import{_ as X}from"./index-DaBf9nij.mjs";import{_ as J,O as Q}from"./index-iEvfkNT8.mjs";import{_ as ee}from"./_plugin-vue_export-helper-BCo6x5W8.mjs";import{_ as te}from"./EaeraDialog-uLsXC20k.mjs";import{_ as ae}from"./EaeraButton-DGfjUoa6.mjs";import{t as re,a as le}from"./vendor-html-to-image-DzdJgLib.mjs";import{_ as oe}from"./EaeraDivider-Dggvc36a.mjs";import ie from"../composite/EaeraDropdownV2.mjs";import{_ as ne}from"./EaeraTooltip-BIlULHv4.mjs";import{_ as se}from"./EaeraDatePicker-CAm9fHms.mjs";const ce={Candlestick:"candlestick",Line:"line",Area:"area"},ue={Single:"single",TwoRows:"two-rows",TwoCols:"two-cols",ThreeRows:"three-rows",ThreeCols:"three-cols",Four:"four"},de=e=>{switch(e){case ue.Single:return 1;case ue.TwoRows:case ue.TwoCols:return 2;case ue.ThreeRows:case ue.ThreeCols:return 3;case ue.Four:return 4;default:return 1}},me={OneMinute:"1m",FiveMinutes:"5m",FifteenMinutes:"15m",ThirtyMinutes:"30m",OneHour:"1h",FourHours:"4h",OneDay:"1d",OneWeek:"1w",OneMonth:"1mn"},he={OneDay:"1D",OneWeek:"1W",OneMonth:"1M",ThreeMonths:"3M",SixMonths:"6M",OneYear:"1Y",All:"ALL",Custom:"CUSTOM"},pe={Drawing:"drawing",Orderline:"orderline"},ve=[me.OneMinute,me.FiveMinutes,me.FifteenMinutes,me.ThirtyMinutes,me.OneHour,me.FourHours,me.OneDay,me.OneWeek,me.OneMonth],ge=[he.OneDay,he.OneWeek,he.OneMonth,he.ThreeMonths,he.SixMonths,he.OneYear,he.All,he.Custom],ye=[{value:ce.Candlestick,icon:"Candle3"},{value:ce.Line,icon:"LineChart2"},{value:ce.Area,icon:"AreaChart"}],fe=["download-image","copy-image-to-clipboard","open-image-in-new-tab"],be={[me.OneMinute]:60,[me.FiveMinutes]:300,[me.FifteenMinutes]:900,[me.ThirtyMinutes]:1800,[me.OneHour]:3600,[me.FourHours]:14400,[me.OneDay]:86400,[me.OneWeek]:604800,[me.OneMonth]:2592e3},we=(e,t=100,a=1.272)=>{const r=[],l=Math.floor(Date.now()/1e3),o=be[e]??900;let i=a;for(let n=t-1;n>=0;n--){const e=2e-4,t=i,a=t+15e-5*(Math.random()-.48)+(Math.random()-.5)*e,s=Math.max(t,a)+Math.random()*e*.6,c=Math.min(t,a)-Math.random()*e*.6,u=l-n*o;r.push({time:u,open:+t.toFixed(5),high:+s.toFixed(5),low:+c.toFixed(5),close:+a.toFixed(5)}),i=a}return r},xe=(e,l,o={})=>{const{t:i}=G(),n=t(e.selectedTimeRange??he.OneDay),s=t(e.customTimeRange??null),c=t(e.isExpanded??!1),u=P("multi-chart:layout",e.multiChartLayout??ue.Single),d=t("chart-0"),m=e.selectedTimeFrame??me.OneMinute,p=e.selectedChartType??ce.Candlestick,v=e.dataBarCount??100,g=P("multi-chart:configs",{"chart-0":{timeFrame:m,chartType:p}}),y=e.symbol??"",f=e.overlaySubtitle??"",b=P("multi-chart:symbols",{"chart-0":y}),w=P("multi-chart:descriptions",{"chart-0":f}),x=t(null),C=a(()=>{const e=de(u.value);return Array.from({length:e},(e,t)=>`chart-${t}`)});r(C,e=>{const t=u.value,a={...g.value},r={...w.value},l={...b.value};try{const t={...a},o={...r},i={...l},n=t["chart-0"]??{timeFrame:m,chartType:p},s=o["chart-0"]??f,c=i["chart-0"]??y;e.forEach(e=>{const a=t[e];a&&a.timeFrame&&a.chartType||(t[e]={...n}),o[e]||(o[e]=s),i[e]||(i[e]=c)});const u={},d={},v={};e.forEach(e=>{if(!t[e]||!o[e]||!i[e])throw new Error(`Incomplete config for chart pane "${e}"`);u[e]=t[e],d[e]=o[e],v[e]=i[e]}),g.value=u,w.value=d,b.value=v}catch(o){console.error("Failed to expand chart layout:",o),u.value=t,g.value=a,w.value=r,b.value=l,B.error({message:i("chart.multi-chart.error.expansion-failed"),duration:5e3})}},{immediate:!0}),r(()=>e.selectedTimeFrame,e=>{if(e){const t=d.value;g.value[t]&&(g.value[t]={...g.value[t],timeFrame:e})}}),r(()=>e.selectedChartType,e=>{if(e){const t=d.value;g.value[t]&&(g.value[t]={...g.value[t],chartType:e})}}),r(()=>e.selectedTimeRange,e=>{e&&(n.value=e)}),r(()=>e.customTimeRange,e=>{void 0!==e&&(s.value=e??null)}),r(()=>e.isExpanded,e=>{"boolean"==typeof e&&(c.value=e)}),r(()=>e.multiChartLayout,e=>{e&&(u.value=e)}),r(()=>e.symbol,e=>{const t=d.value;if(void 0!==e&&b.value[t]!==e){b.value={...b.value,[t]:e};const{[t]:a,...r}=R.value;R.value=r}}),r(d,t=>{const a=b.value[t];void 0!==a&&a!==e.symbol&&l("activeSymbolChange",a)}),r(()=>e.overlaySubtitle,e=>{const t=d.value,a=e??"";w.value[t]!==a&&(w.value={...w.value,[t]:a})});const k=(e,t)=>{const a=i(e);return"string"==typeof a&&a.trim().length>0?a:t},T=a(()=>ve.map(e=>({label:k(`chart.time-frame.${e}`,e),value:e}))),L=a(()=>ge.map(e=>({label:k(`chart.time-range.${e}`,e),value:e}))),S=a(()=>ye.map(e=>({label:k(`chart.type.${e.value}`,e.value),value:e.value,icon:e.icon,chartIcon:e.icon}))),M=a(()=>fe.map(e=>"download-image"===e?{value:e,label:k("chart.snapshot.download-image","Download image"),desc:k("chart.snapshot.download-image-shortcut","Ctrl + Alt + S")}:"copy-image-to-clipboard"===e?{value:e,label:k("chart.snapshot.copy-image-to-clipboard","Copy image"),desc:k("chart.snapshot.copy-image-to-clipboard-shortcut","Ctrl + Shift + S")}:{value:e,label:k("chart.snapshot.open-in-new-tab","Open in new tab"),desc:k("chart.snapshot.open-in-new-tab-shortcut","Alt + S")})),F=a(()=>g.value[d.value]??{timeFrame:m,chartType:p}),D=a(()=>e.chartData&&e.chartData.length>0?e.chartData:we(F.value.timeFrame,v)),O=a(()=>{const e=D.value;return e.length>0?e[e.length-1].close:null}),_=a(()=>({selectedTimeFrame:F.value.timeFrame,selectedTimeRange:n.value,selectedChartType:F.value.chartType,customTimeRange:s.value,isExpanded:c.value,isLoading:e.isLoading??!1}));r(_,e=>{l("stateChange",e)},{immediate:!0});const R=t({}),E=e=>g.value[e]?.timeFrame??m,$=async e=>{const t=o.snapshotTargetRef?.value;if(t)switch(e){case"download-image":await(async e=>{try{const t=await re(e,{quality:1,pixelRatio:2}),a=document.createElement("a");a.href=t,a.download=`chart-snapshot-${Date.now()}.png`,a.click()}catch(t){console.error("Failed to download chart image:",t),B.error({message:i("chart.snapshot.error.download"),duration:5e3})}})(t);break;case"copy-image-to-clipboard":await(async e=>{try{const t=await le(e,{quality:1,pixelRatio:2});if(!t?.type||"undefined"==typeof ClipboardItem)throw new Error("Failed to generate image blob");const a=new ClipboardItem({[t.type]:t});await navigator.clipboard.write([a])}catch(t){console.error("Failed to copy chart image to clipboard:",t),B.error({message:i("chart.snapshot.error.copy"),duration:5e3})}})(t);break;case"open-image-in-new-tab":await(async e=>{try{const t=await re(e,{quality:1,pixelRatio:2}),a=window.open();a&&(a.document.write(`\n <html>\n <head><title>Chart Snapshot</title></head>\n <body style="margin:0;display:flex;justify-content:center;align-items:center;min-height:100vh;background:#000;">\n <img src="${t}" style="max-width:100%;max-height:100vh;" />\n </body>\n </html>\n `),a.document.close())}catch(t){console.error("Failed to open chart image in new tab:",t),B.error({message:i("chart.snapshot.error.open"),duration:5e3})}})(t)}};return{symbol:a(()=>e.symbol??""),overlaySubtitle:a(()=>e.overlaySubtitle??""),chartData:D,selectedTimeFrame:a(()=>F.value.timeFrame),selectedTimeRange:a(()=>n.value),selectedChartType:a(()=>F.value.chartType),customTimeRange:a(()=>s.value),timeFrameOptions:a(()=>e.timeFrameOptions&&e.timeFrameOptions.length>0?e.timeFrameOptions:T.value),timeRangeOptions:a(()=>e.timeRangeOptions&&e.timeRangeOptions.length>0?e.timeRangeOptions:L.value),chartTypeOptions:a(()=>e.chartTypeOptions&&e.chartTypeOptions.length>0?e.chartTypeOptions:S.value),snapshotOptions:a(()=>void 0!==e.snapshotOptions?e.snapshotOptions:M.value),isLoading:a(()=>e.isLoading??!1),isExpanded:a(()=>c.value),isMultiChart:a(()=>u.value!==ue.Single),multiChartLayout:a(()=>u.value),chartIds:C,selectedChartId:a(()=>d.value),activeChartLastPrice:O,tickSize:a(()=>e.tickSize),dark:a(()=>e.dark),chartDomId:a(()=>e.chartDomId??"eaera-lightweight-chart-canvas"),overlayTitle:a(()=>e.overlayTitle??""),state:_,getTimeFrameForChart:E,getChartTypeForChart:e=>g.value[e]?.chartType??p,getChartDataForChart:t=>{if(e.chartData&&e.chartData.length>0)return e.chartData;const a=E(t),r=R.value[t];if(r&&r.length>0){const e=be[a],t=r[r.length-1].time,l=Math.floor(Date.now()/1e3)-e;if(Math.abs(t-l)<2*e)return r}const l=we(a,v);return R.value={...R.value,[t]:l},l},getSymbolForChart:e=>b.value[e]??y,getSymbolDescriptionForChart:e=>w.value[e]??f,onResize:(e,t)=>l("resize",e,t),onChangeTimeFrame:e=>{const t=d.value;g.value[t]&&(g.value[t]={...g.value[t],timeFrame:e}),l("changeTimeFrame",e)},onChangeTimeRange:e=>{n.value=e,l("changeTimeRange",e)},onChangeChartType:e=>{const t=d.value;g.value[t]&&(g.value[t]={...g.value[t],chartType:e}),l("changeChartType",e)},onChangeCustomRange:e=>{s.value=e,l("changeCustomRange",e)},onLoadMoreLeft:()=>l("loadMoreLeft"),onSnapshot:async e=>{await $(e)},onToggleExpanded:()=>{c.value=!c.value,l("toggleExpanded")},onChangeMultiChartLayout:e=>{const t=u.value,a=de(t),r=de(e);if(r<a)return void(x.value=e);if(r>a){const e={...g.value},t={...w.value},l={...b.value},o=d.value,i=e[o]??e["chart-0"],n=t[o]??f,s=l[o]??y;for(let c=a;c<r;c++){const a=`chart-${c}`;e[a]||(e[a]={...i}),t[a]||(t[a]=n),l[a]||(l[a]=s)}g.value=e,w.value=t,b.value=l}u.value=e;parseInt(d.value.split("-")[1]??"0",10)>=r&&(d.value="chart-0"),l("changeMultiChartLayout",e)},onSelectChart:e=>{d.value=e},confirmLayoutSwitch:e=>{const t=x.value;if(!t)return;const a=de(t),r={},o={},i={};e.slice(0,a).forEach((e,t)=>{const a=`chart-${t}`;r[a]=g.value[e]??{timeFrame:m,chartType:p},o[a]=w.value[e]??f,i[a]=b.value[e]??y}),g.value=r,w.value=o,b.value=i,d.value="chart-0",u.value=t,x.value=null,l("changeMultiChartLayout",t)},cancelLayoutSwitch:()=>{x.value=null},pendingLayoutSwitch:a(()=>x.value)}},Ce=e=>e,ke={class:"p-2.5"},Te={class:"w-full h-8 flex items-center justify-between"},Le={class:"h-full flex items-center gap-1"},Se={key:0,class:"flex items-center gap-1 text-label-lg text-[var(--er-text-primary)]"},Me={class:"whitespace-nowrap"},Fe={class:"text-[var(--er-text-secondary)] whitespace-nowrap"},De={class:"flex items-center"},Pe={type:"button",class:"flex items-center justify-center h-8 px-3 border-none rounded-lg bg-transparent text-label-lg text-[var(--er-text-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Oe={class:"flex items-center"},_e={type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Re={class:"h-full flex items-center gap-1"},Ee={class:"flex items-center"},$e={type:"button",class:"flex items-center justify-center h-8 px-3 border-none rounded-lg bg-transparent text-label-lg text-[var(--er-text-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},ze={class:"flex items-center"},je={type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Be={key:1,class:"flex items-center"},Ie={type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Ae={key:0,class:"text-body-xs text-[var(--er-text-secondary)]"},Ne={class:"flex items-center"},He={type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Ve={class:"flex flex-col gap-2 py-4 px-3 min-w-[150px]"},Ke={class:"flex items-center gap-3"},We={class:"w-4"},Ue=["onClick"],Ye=l({__name:"EaeraLightweightChartHeader",props:{context:{}},setup(e){const t=e,{t:r}=G(),{symbol:l,overlayTitle:x,overlaySubtitle:C,selectedTimeFrame:k,timeFrameOptions:T,chartTypeOptions:L,snapshotOptions:S,isExpanded:M,isMultiChart:F,multiChartLayout:D,onChangeTimeFrame:P,onChangeChartType:O,onSnapshot:_,onToggleExpanded:R,onChangeMultiChartLayout:E}=t.context,$=a(()=>T.value.map(e=>({label:e.label,value:e.value,itemClick:()=>P(e.value)}))),z=a(()=>L.value.map(e=>({label:e.label,value:e.value,itemClick:()=>O(e.value)}))),j=a(()=>S.value.map(e=>({label:e.label,value:e.value,desc:e.desc,itemClick:()=>_(e.value)}))),B=a(()=>[{order:1,options:[{icon:I,id:ue.Single}]},{order:2,options:[{icon:A,id:ue.TwoCols},{icon:N,id:ue.TwoRows}]},{order:3,options:[{icon:H,id:ue.ThreeCols},{icon:V,id:ue.ThreeRows}]},{order:4,options:[{icon:K,id:ue.Four}]}]),q=a(()=>C.value||x.value||""),X=a(()=>{const e=`chart.time-frame.sc.${k.value}`,t=r(e);if("string"==typeof t&&t.trim().length>0&&t!==e)return t;const a=T.value.find(e=>e.value===k.value);return a?.label??k.value}),J=e=>{const t=e.key.toLowerCase();return"escape"===t&&M.value?(e.preventDefault(),void R()):"s"===t?e.ctrlKey&&e.altKey&&!e.shiftKey?(e.preventDefault(),void _("download-image")):e.ctrlKey&&e.shiftKey&&!e.altKey?(e.preventDefault(),void _("copy-image-to-clipboard")):void(!e.altKey||e.ctrlKey||e.shiftKey||(e.preventDefault(),_("open-image-in-new-tab"))):void 0};return o(()=>window.addEventListener("keydown",J)),i(()=>window.removeEventListener("keydown",J)),(e,t)=>{const a=ne,r=ie,o=oe;return n(),s("div",ke,[c("div",Te,[c("div",Le,[u(F)?(n(),s(m,{key:1},[c("div",De,[v(r,{"use-menu":"","dropdown-options":$.value},{menu_item:g(({data:e})=>[c("div",null,d(e.label),1)]),default:g(()=>[c("button",Pe,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.time-frame")},{default:g(()=>[c("span",null,d(X.value),1)]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])]),v(o,{direction:"vertical"}),c("div",Oe,[v(r,{"use-menu":"","dropdown-options":z.value},{menu_item:g(({data:e})=>[c("div",null,d(e.label),1)]),default:g(()=>[c("button",_e,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.chart-type-selector")},{default:g(()=>[v(u(W),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])])],64)):(n(),s("div",Se,[c("span",Me,d(u(l)),1),q.value?(n(),s(m,{key:0},[t[1]||(t[1]=c("span",{class:"text-[var(--er-text-secondary)]"},"/",-1)),c("span",Fe,d(q.value),1)],64)):p("",!0)]))]),c("div",Re,[u(F)?p("",!0):(n(),s(m,{key:0},[c("div",Ee,[v(r,{"use-menu":"","dropdown-options":$.value},{menu_item:g(({data:e})=>[c("div",null,d(e.label),1)]),default:g(()=>[c("button",$e,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.time-frame")},{default:g(()=>[c("span",null,d(X.value),1)]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])]),v(o,{direction:"vertical"}),c("div",ze,[v(r,{"use-menu":"","dropdown-options":z.value},{menu_item:g(({data:e})=>[c("div",null,d(e.label),1)]),default:g(()=>[c("button",je,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.chart-type-selector")},{default:g(()=>[v(u(W),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])])],64)),u(S).length?(n(),s("div",Be,[v(r,{"use-menu":"","dropdown-options":j.value},{menu_item:g(({data:e})=>[c("div",null,[c("div",null,d(e.label),1),e.desc?(n(),s("div",Ae,d(e.desc),1)):p("",!0)])]),default:g(()=>[c("button",Ie,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.snapshot")},{default:g(()=>[v(u(U),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])])):p("",!0),c("div",Ne,[v(r,null,{dropdown:g(()=>[c("div",Ve,[(n(!0),s(m,null,y(B.value,(e,t)=>(n(),s("div",{key:t},[c("div",Ke,[c("span",We,d(e.order),1),(n(!0),s(m,null,y(e.options,(e,t)=>(n(),s("div",{key:t,class:f(["cursor-pointer p-[2px] border rounded-xs transition-colors",u(D)===e.id?"border-[var(--er-border-action)] bg-[var(--er-surface-elevated)] text-[var(--er-text-brand)]":"border-[var(--er-border-default)] hover:bg-[var(--er-surface-muted)]"]),onClick:t=>u(E)(e.id)},[(n(),b(w(e.icon),{size:20}))],10,Ue))),128))])]))),128))])]),default:g(()=>[c("button",He,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.multi-chart")},{default:g(()=>[v(u(Y),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])]),_:1})]),c("button",{type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]",onClick:t[0]||(t[0]=(...e)=>u(R)&&u(R)(...e))},[v(a,{placement:"bottom",content:e.$t("chart.tools.tooltip.fullscreen")},{default:g(()=>[v(u(Z),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])])])])}}}),Ze={class:"border-t border-[var(--er-border-default)] px-3 py-2"},qe={class:"flex justify-between items-center h-6"},Ge={class:"h-full flex items-center gap-2 select-none"},Xe={class:"h-full flex items-center gap-0.5"},Je=["onClick"],Qe={class:"h-full flex items-center select-none"},et={class:"text-label-md text-[var(--er-text-primary)] whitespace-nowrap","aria-live":"polite"},tt=l({__name:"EaeraLightweightChartFooter",props:{context:{}},setup(e){const r=e,{selectedTimeRange:l,timeRangeOptions:p,onChangeTimeRange:g,onChangeTimeFrame:b,onChangeCustomRange:w}=r.context,x=t(null),C=a(()=>p.value.filter(e=>e.value!==he.Custom)),k=(e,t)=>{g(e),b(t)},T=()=>{x.value?.handleOpen()},L=e=>{if(!e||2!==e.length)return;const t={startDate:e[0],endDate:e[1]};w(t),k(he.Custom,me.ThirtyMinutes)},S=e=>{const t=Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC",a=-e.getTimezoneOffset(),r=`UTC${a>=0?"+":"-"}${String(Math.floor(Math.abs(a)/60)).padStart(2,"0")}:${String(Math.abs(a)%60).padStart(2,"0")}`;return`${new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"long",day:"numeric"}).format(e)} ${new Intl.DateTimeFormat("en-US",{timeZone:t,hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(e)} ${r}`},M=t("");let F;const D=()=>{M.value=S(new Date)};return o(()=>{D(),F=window.setInterval(D,1e3)}),i(()=>{void 0!==F&&clearInterval(F)}),(e,t)=>{const a=oe;return n(),s("div",Ze,[c("div",qe,[c("div",Ge,[c("div",Xe,[(n(!0),s(m,null,y(C.value,e=>(n(),s("button",{key:e.value,type:"button",class:f(["h-full flex items-center px-1 border-none rounded text-label-md text-[var(--er-text-primary)] cursor-pointer whitespace-nowrap bg-transparent hover:bg-[var(--er-surface-elevated)]",{"bg-[var(--er-surface-elevated)]":u(l)===e.value}]),onClick:t=>(e=>{switch(e){case he.OneDay:k(he.OneDay,me.OneMinute);break;case he.OneWeek:k(he.OneWeek,me.ThirtyMinutes);break;case he.OneMonth:k(he.OneMonth,me.ThirtyMinutes);break;case he.ThreeMonths:k(he.ThreeMonths,me.OneDay);break;case he.SixMonths:k(he.SixMonths,me.OneWeek);break;default:k(e,me.OneWeek)}})(e.value)},d(e.label),11,Je))),128)),v(a,{direction:"vertical",class:"mx-1"}),c("button",{type:"button",class:"flex items-center justify-center w-6 h-6 p-0 border-none rounded bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]",onClick:T},[v(u(q),{size:20,"absolute-stroke-width":"","stroke-width":"1.2"})]),v(u(se),{ref_key:"customDateRef",ref:x,"value-format":"YYYY-MM-DD",type:"daterange",class:"hidden",onChange:L},null,512)])]),c("div",Qe,[c("span",et,d(M.value),1)])])])}}}),at=(e,t,a=6)=>{if(!e.length||a<=0)return e;const r=Math.max(1,Math.floor((e=>({[me.OneMinute]:6e4,[me.FiveMinutes]:3e5,[me.FifteenMinutes]:9e5,[me.ThirtyMinutes]:18e5,[me.OneHour]:36e5,[me.FourHours]:144e5,[me.OneDay]:864e5,[me.OneWeek]:6048e5,[me.OneMonth]:2592e6}[e]))(t)/1e3)),l=e[e.length-1]?.time;if("number"!=typeof l||Number.isNaN(l))return e;const o=Array.from({length:a},(e,t)=>({time:l+r*(t+1)}));return[...e,...o]},rt=e=>{const t=lt(e);return t?((e,t)=>new Intl.DateTimeFormat(void 0,{timeZone:"UTC",...t}).format(e))(t,{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}):""},lt=e=>{if(null==e)return null;if("number"==typeof e)return new Date(1e3*e);if("string"==typeof e){const t=new Date(e);return Number.isNaN(t.getTime())?null:t}return _(e)?new Date(e.year,e.month-1,e.day):null},ot=e=>e?{surfacePrimary:"#191D23",surfacePositive:"#16c784",surfaceNegative:"#ef4444",surfaceElevated:"#323A45",textPrimary:"#F0F1F3",textSecondary:"#B1B9C5",borderPrimary:"#323A45",borderPrimaryInverse:"#D8DCE2",borderAction:"#A259FB",areaTop:"#A259FB4D",areaBottom:"#A259FB0D"}:{surfacePrimary:"white",surfacePositive:"#16c784",surfaceNegative:"#ef4444",surfaceElevated:"#d8dce2",textPrimary:"#0f1115",textSecondary:"#4b5768",borderPrimary:"#d8dce2",borderPrimaryInverse:"#323a45",borderAction:"#A259FB",areaTop:"#A259FB4D",areaBottom:"#A259FB0D"},it=e=>{const t={width:0,height:0};const a=(e=>{const t=ot(e);return{background:{type:R.Solid,color:t.surfacePrimary},textColor:t.textSecondary}})(e),r=(e=>{const t=ot(e);return{vertLines:{color:t.borderPrimary,visible:!0,style:0},horzLines:{color:t.borderPrimary,visible:!0,style:0}}})(e),l=(e=>{const t=ot(e);return{mode:0,vertLine:{color:t.borderPrimaryInverse,width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:t.surfaceElevated},horzLine:{color:t.borderPrimaryInverse,width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:t.surfacePositive}}})(e),o=(e=>{const t=ot(e);return{rightPriceScale:{borderColor:t.borderPrimary,scaleMargins:{top:.3,bottom:.1},textColor:t.textSecondary},timeScale:{borderColor:t.borderPrimary,timeVisible:!0,rightOffsetPixels:48,allowShiftVisibleRangeOnWhitespaceReplacement:!0,textColor:t.textSecondary}}})(e);return{...t,layout:a,grid:r,crosshair:l,localization:{timeFormatter:e=>rt(e)},...o}},nt=e=>{const t=ot(e);return{upColor:t.surfacePositive,downColor:t.surfaceNegative,borderVisible:!1,wickUpColor:t.surfacePositive,wickDownColor:t.surfaceNegative}},st=["id"],ct={class:"absolute top-2 left-2 z-10 flex gap-x-4 gap-y-1 flex-wrap w-full"},ut={key:0,class:"text-label-lg font-semibold max-w-[calc(100%-1rem)]"},dt={class:"text-[var(--er-text-secondary)] whitespace-nowrap"},mt={key:1,class:"flex flex-wrap gap-x-2 gap-y-0.5 text-label-lg font-semibold max-w-[calc(100%-1rem)]"},ht={class:"text-[var(--er-text-secondary)]"},pt={class:"text-[var(--er-text-secondary)]"},vt={class:"text-[var(--er-text-secondary)]"},gt={class:"text-[var(--er-text-secondary)]"},yt=l({__name:"EaeraChartCanvas",props:{chartData:{default:()=>[]},selectedChartType:{default:ce.Candlestick},selectedTimeFrame:{default:me.OneMinute},dark:{type:Boolean,default:!1},tickSize:{default:null},symbol:{default:""},symbolDescription:{default:""},isMultiChart:{type:Boolean,default:!1},chartDomId:{default:void 0},openLabel:{default:"O"},highLabel:{default:"H"},lowLabel:{default:"L"},closeLabel:{default:"C"}},emits:["loadMoreLeft","resize"],setup(e,{expose:l,emit:u}){const m=e,v=u,g="undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10),y=a(()=>m.chartDomId??`eaera-chart-canvas-${g}`),f=x(null),b=x(null),{width:w,height:T}=O(f),L=x(null),S=x(null),M=t(0),F=()=>{M.value+=1},D={openPrice:null,highPrice:null,lowPrice:null,closePrice:null,time:null,state:null,symbolLabel:m.symbol},P=x({...D}),_=a(()=>P.value.state?{color:`var(--er-text-${P.value.state})`}:{}),R=a(()=>m.dark??!1),B=a(()=>{const e=Number(m.tickSize??.01);return!Number.isFinite(e)||e<=0?.01:e}),I=e=>{if(!Number.isFinite(e)||e<=0)return 2;const t=e.toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:20}),a=(t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t).split(".")[1];return a?a.length:0},A=e=>Number.isFinite(e)?Number(e.toFixed(I(B.value))):e,N=a(()=>{const e=new Map;return m.chartData.forEach(t=>{e.set(t.time,t)}),e}),H=a(()=>{const e=at(m.chartData,m.selectedTimeFrame,30);return m.selectedChartType===ce.Line||m.selectedChartType===ce.Area?e.map(e=>"open"in e?{time:e.time,value:e.close}:{time:e.time}):e}),V=a(()=>m.chartData.map(e=>e.time)),K=()=>{P.value={...D,symbolLabel:m.symbol}},W=()=>{S.value&&L.value&&(S.value.applyOptions({priceFormat:{type:"price",precision:I(B.value),minMove:B.value}}),L.value.priceScale("right").applyOptions({ticksVisible:!1,ensureEdgeTickMarksVisible:!0}))},U=()=>{L.value&&S.value&&(L.value.removeSeries(S.value),S.value=null)},Y=e=>{if(L.value){switch(U(),e){case ce.Candlestick:S.value=L.value.addSeries(E,nt(R.value));break;case ce.Line:S.value=L.value.addSeries(z,(t=R.value,{color:ot(t).borderAction,lineWidth:2,lineStyle:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4}));break;case ce.Area:S.value=L.value.addSeries($,(e=>{const t=ot(e);return{lineColor:t.borderAction,topColor:t.areaTop,bottomColor:t.areaBottom,lineWidth:2,lineStyle:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4}})(R.value));break;default:S.value=L.value.addSeries(E,nt(R.value))}var t;W(),F()}},Z=()=>{S.value&&(S.value.setData(H.value),W(),F())};let q=null,G=null;const X=()=>{L.value&&(q&&(L.value.unsubscribeCrosshairMove(q),q=null),G&&(L.value.timeScale().unsubscribeVisibleLogicalRangeChange(G),G=null))},J=()=>{((e,t)=>{L.value&&(L.value.applyOptions({width:e,height:t}),F(),v("resize",e,t))})(Math.max(0,w.value),Math.max(0,T.value))},Q=()=>{b.value&&(L.value=j(b.value,it(R.value)),F(),Y(m.selectedChartType),Z(),L.value&&(X(),q=e=>{const t="number"==typeof e.time?e.time:null;if(null===t)return void K();const a=N.value.get(t);a?P.value={openPrice:A(a.open),highPrice:A(a.high),lowPrice:A(a.low),closePrice:A(a.close),time:t,state:a.close>=a.open?"success":"error",symbolLabel:m.symbol}:K()},G=e=>{e&&e.from<=10&&v("loadMoreLeft")},L.value.subscribeCrosshairMove(q),L.value.timeScale().subscribeVisibleLogicalRangeChange(G)),J())};return r([w,T],J),r(()=>m.selectedChartType,e=>{Y(e),Z()}),r([()=>m.chartData,()=>m.selectedTimeFrame,B],()=>{Z()}),r(R,()=>{L.value&&(L.value.applyOptions(it(R.value)),Y(m.selectedChartType),Z())},{immediate:!0}),r(()=>m.symbol,e=>{P.value.symbolLabel=e}),o(async()=>{await C(),Q()}),i(()=>{X(),U(),L.value&&(L.value.remove(),L.value=null,F()),K()}),l({chartInstance:L,currentSeries:S,chartRenderKey:M,crosshairData:P,chartDataTimes:V,roundPriceByTickSize:A,clearCrosshairData:K,syncSeriesData:Z}),(t,a)=>(n(),s("div",{ref_key:"containerRef",ref:f,class:"relative w-full h-full min-h-0 min-w-0"},[c("div",{id:y.value,ref_key:"chartRef",ref:b,class:"w-full h-full"},null,8,st),c("div",ct,[e.isMultiChart&&e.symbolDescription?(n(),s("div",ut,[c("span",dt,d(e.symbolDescription),1)])):p("",!0),null!==P.value.closePrice?(n(),s("div",mt,[c("div",null,[c("span",ht,d(e.openLabel),1),c("span",{style:k(_.value)},d(P.value.openPrice),5)]),c("div",null,[c("span",pt,d(e.highLabel),1),c("span",{style:k(_.value)},d(P.value.highPrice),5)]),c("div",null,[c("span",vt,d(e.lowLabel),1),c("span",{style:k(_.value)},d(P.value.lowPrice),5)]),c("div",null,[c("span",gt,d(e.closeLabel),1),c("span",{style:k(_.value)},d(P.value.closePrice),5)])])):p("",!0)])],512))}}),ft=l({__name:"EaeraLightweightChartDrawingPlugin",props:{chart:{},series:{},symbol:{},selectedTimeFrame:{},chartDataTimes:{},isDark:{type:Boolean},floatingTarget:{},headerHeight:{},footerHeight:{},config:{}},emits:["stateChange"],setup(e,{emit:t}){const r=e,l=t,o=a(()=>r.selectedTimeFrame),i=a(()=>({position:"absolute",left:"0px",right:"0px",top:`${r.headerHeight}px`,bottom:`${r.footerHeight}px`,height:"auto",zIndex:20})),s=e=>{l("stateChange",e)};return(t,a)=>(n(),b(u(X),{chart:e.chart,series:e.series,symbol:e.symbol,"selected-time-frame":o.value,"chart-data-times":e.chartDataTimes,drawings:e.config.drawings,"is-dark":e.isDark,"create-drawing":e.config.createDrawing,"update-drawing":e.config.updateDrawing,"delete-drawing":e.config.deleteDrawing,"load-drawings":e.config.loadDrawings,"delete-all-drawings":e.config.deleteAllDrawings,"floating-target":e.floatingTarget,"floating-layer-style":i.value,"show-sidebar":e.config.showSidebar??!0,"show-floating-toolbar":e.config.showFloatingToolbar??!0,onStateChange:s},null,8,["chart","series","symbol","selected-time-frame","chart-data-times","drawings","is-dark","create-drawing","update-drawing","delete-drawing","load-drawings","delete-all-drawings","floating-target","floating-layer-style","show-sidebar","show-floating-toolbar"]))}}),bt=l({__name:"EaeraLightweightChartOrderlinePlugin",props:{chart:{},series:{},renderKey:{},isDark:{type:Boolean},config:{}},emits:["stateChange"],setup(e,{expose:a,emit:r}){const l=e,o=r,i=t(null),s=e=>{l.config.onDeleteLine(e)},c=(e,t)=>{l.config.onLinePriceChange(e,t)},d=(e,t)=>{l.config.onLinePricePreview?.(e,t)},m=e=>{l.config.onDragStateChange?.(e)},p=(e,t,a)=>{l.config.onSLTPChange?.(e,t,a)},v=e=>{o("stateChange",e)};return a({openMenu:e=>{i.value?.openMenu?.(e)}}),(t,a)=>(n(),b(u(J),{ref_key:"overlayRef",ref:i,"order-lines":e.config.orderLines,"chart-instance":e.chart,"series-instance":e.series,"order-line-tool":e.config.orderLineTool??null,"render-key":e.renderKey,"market-price":e.config.marketPrice??null,"tick-size":e.config.tickSize??null,dark:e.isDark,onDeleteLine:s,onLinePriceChange:c,onLinePricePreview:d,onDragStateChange:m,onSlTpChange:p,onStateChange:v},null,8,["order-lines","chart-instance","series-instance","order-line-tool","render-key","market-price","tick-size","dark"]))}}),wt=["onClick"],xt=.01,Ct="text-[color:var(--er-text-success)]",kt="text-[color:var(--er-text-danger)]",Tt="border-[color:var(--er-surface-muted)] bg-[color:var(--er-surface-elevated)]",Lt=ee(l({__name:"ChartContextMenu",props:{symbol:{},tickSize:{default:null}},emits:["action"],setup(e,{expose:r,emit:l}){const u=e,w=l,x=t(!1),C=t({x:0,y:0}),M=t(null),F=t("plot"),D=t(null),P=a(()=>({position:"fixed",zIndex:2,top:`${C.value.y}px`,left:`${C.value.x}px`})),O=["fixed","z-[2]","flex","flex-col","min-w-[240px]","py-2","border","rounded-sm","shadow-lg","surface-[var(--er-surface-page)]"],_=["flex","items-center","h-8","px-2","cursor-pointer","select-none","rounded-sm","hover:bg-[var(--er-action-neutral-subtle-hover)]"],R=["px-2","font-[family-name:var(--er-font-brand),system-ui,sans-serif]","text-[14px]","font-normal","leading-5","tracking-[0.018em]","text-[color:var(--er-action-neutral-default)]","whitespace-nowrap"];a(()=>[...O,Tt].join(" "));const E=a(()=>{const e=u.symbol||"GBPUSD",t=null!=M.value?M.value.toFixed(5):"—";return[{label:"Reset chart view",tone:"neutral",action:"reset-view"},..."plot"===F.value?[{label:`Buy Market 0.01 ${e}`,tone:"buy",action:"buy-market"},{label:`Sell Market 0.01 ${e}`,tone:"sell",action:"sell-market"},{label:`Buy Limit 0.01 ${e}`,tone:"buy",action:"buy-limit"},{label:`Sell Limit 0.01 ${e}`,tone:"sell",action:"sell-limit"},{label:`Buy Stop 0.01 ${e}`,tone:"buy",action:"buy-stop"},{label:`Buy Stop Limit 0.01 ${e}`,tone:"buy",action:"buy-stop-limit"},{label:`Sell Stop 0.01 ${e}`,tone:"sell",action:"sell-stop"},{label:`Sell Stop Limit 0.01 ${e}`,tone:"sell",action:"sell-stop-limit"},{label:"Lock vertical cursor line by time",tone:"neutral",action:"lock-cursor"}]:[],{label:`Copy price ${t}`,tone:"neutral",action:"copy-price"},{label:"Paste",tone:"neutral",action:"paste"}]}),$=new Set(["buy-limit","sell-limit","buy-stop","buy-stop-limit","sell-stop","sell-stop-limit"]),z={"buy-limit":{title:"Buy Limit",side:"buy",showStopLimitPrice:!1},"sell-limit":{title:"Sell Limit",side:"sell",showStopLimitPrice:!1},"buy-stop":{title:"Buy Stop",side:"buy",showStopLimitPrice:!1},"buy-stop-limit":{title:"Buy Stop Limit",side:"buy",showStopLimitPrice:!0},"sell-stop":{title:"Sell Stop",side:"sell",showStopLimitPrice:!1},"sell-stop-limit":{title:"Sell Stop Limit",side:"sell",showStopLimitPrice:!0}},j={"buy-market":{side:"buy",orderType:"market"},"sell-market":{side:"sell",orderType:"market"},"buy-limit":{side:"buy",orderType:"buy_limit"},"sell-limit":{side:"sell",orderType:"sell_limit"},"buy-stop":{side:"buy",orderType:"buy_stop"},"buy-stop-limit":{side:"buy",orderType:"buy_stop_limit"},"sell-stop":{side:"sell",orderType:"sell_stop"},"sell-stop-limit":{side:"sell",orderType:"sell_stop_limit"}},B=()=>{x.value=!1,D.value=null},I=()=>{D.value=null,x.value=!1},A=e=>{if(!D.value)return;const t=j[D.value.action];t&&(w("action",D.value.action,{symbol:u.symbol,price:e.price?Number(e.price):M.value,side:t.side,orderType:t.orderType,volume:e.volume?Number(e.volume):xt,stopLimitPrice:e.stopLimitPrice?Number(e.stopLimitPrice):void 0,takeProfit:e.takeProfitEnabled&&e.takeProfit?Number(e.takeProfit):void 0,stopLoss:e.stopLossEnabled&&e.stopLoss?Number(e.stopLoss):void 0,comment:e.comment||void 0}),I())},N=e=>{(x.value||D.value)&&B()},H=e=>{"Escape"===e.key&&(x.value||D.value)&&B()};return o(()=>{document.addEventListener("mousedown",N),document.addEventListener("keydown",H)}),i(()=>{document.removeEventListener("mousedown",N),document.removeEventListener("keydown",H)}),r({open:(e,t,a,r="plot")=>{C.value={x:e,y:t},M.value=a,F.value=r,D.value=null,x.value=!0},close:B}),(t,a)=>(n(),b(T,{to:"body"},[v(L,{name:"context-menu-fade"},{default:g(()=>[D.value?(n(),s("div",{key:0,class:f("fixed z-[2]"),style:k(P.value),onMousedown:a[0]||(a[0]=S(()=>{},["stop"]))},[v(Q,{title:D.value.title,"status-tag-text":D.value.statusTagText,side:D.value.side,symbol:e.symbol,"reference-price":M.value,"tick-size":e.tickSize,"show-stop-limit-price":D.value.showStopLimitPrice,"initial-comment":D.value.initialComment,onConfirm:A,onDiscard:I,onClose:I},null,8,["title","status-tag-text","side","symbol","reference-price","tick-size","show-stop-limit-price","initial-comment"])],36)):x.value?(n(),s("div",{key:1,class:f(O),style:k({top:`${C.value.y}px`,left:`${C.value.x}px`}),onClick:a[1]||(a[1]=S(()=>{},["stop"]))},[(n(!0),s(m,null,y(E.value,(e,t)=>{return n(),s("div",{key:t,class:f((e.tone,[..._].join(" "))),onClick:t=>(e=>{if("buy-market"===e.action||"sell-market"===e.action){const t=j[e.action];return w("action",e.action,{symbol:u.symbol,price:M.value,side:t.side,orderType:t.orderType,volume:xt}),void B()}if($.has(e.action)){const t=z[e.action];return void(D.value={action:e.action,title:t.title,statusTagText:`${t.title} 0.01`,side:t.side,showStopLimitPrice:t.showStopLimitPrice,initialComment:""})}w("action",e.action,{symbol:u.symbol,price:M.value}),B()})(e)},[c("span",{class:f((a=e.tone,"buy"===a?[...R,Ct].join(" "):"sell"===a?[...R,kt].join(" "):R.join(" ")))},d(e.label),3)],10,wt);var a}),128))],4)):p("",!0)]),_:1})]))}}),[["__scopeId","data-v-a1ce2602"]]),St={class:"flex flex-col gap-3 py-2"},Mt={class:"text-body-sm text-[var(--er-text-secondary)]"},Ft=["onClick"],Dt={class:"flex items-center gap-1.5"},Pt={key:0,width:"10",height:"10",viewBox:"0 0 12 12",fill:"none"},Ot={class:"text-label-md font-medium text-[var(--er-text-primary)] truncate"},_t={class:"flex justify-end gap-3"},Rt=l({__name:"SwitchMultiChartDialog",props:{isVisible:{type:Boolean},sourceLayout:{},sourcePanes:{},targetCount:{}},emits:["confirm","cancel"],setup(e,{emit:l}){const o=e,i=l,u=t([]),w={width:"120px",height:"64px"},x=a(()=>{switch(o.sourceLayout){case ue.TwoRows:case ue.ThreeRows:return"grid-cols-1";case ue.TwoCols:return"grid-cols-2";case ue.ThreeCols:return"grid-cols-3";case ue.Four:return"grid-cols-2 grid-rows-2";default:return"grid-cols-1"}}),C=e=>u.value.includes(e),k=()=>{u.value.length===o.targetCount&&i("confirm",[...u.value])},T=()=>{i("cancel")},L=()=>{i("cancel")};return r(()=>o.isVisible,e=>{e&&(u.value=o.sourcePanes.slice(0,o.targetCount).map(e=>e.id))},{immediate:!0}),(t,a)=>{const r=ae,l=te;return n(),b(l,{"dialog-visible":e.isVisible,width:"400px","append-body":"","destroy-on-close":"","close-on-click-modal":!0,"close-on-press-escape":!0,onClose:L},{header:g(()=>[...a[0]||(a[0]=[c("span",{class:"text-title-sm"},"Switch Multi-Chart",-1)])]),default:g(()=>[c("div",St,[c("span",Mt," Select "+d(e.targetCount)+" pane"+d(e.targetCount>1?"s":"")+" to keep* ",1),c("div",{class:f(["grid gap-1 justify-start",x.value])},[(n(!0),s(m,null,y(e.sourcePanes,e=>{return n(),s("div",{key:e.id,class:f(["flex flex-col items-center justify-center rounded-sm border cursor-pointer transition-colors p-2",C(e.id)?"border-[var(--er-border-action)] bg-[var(--er-surface-elevated)]":(t=e.id,!C(t)&&u.value.length>=o.targetCount?"border-[var(--er-border-default)] opacity-40 cursor-not-allowed":"border-[var(--er-border-default)] hover:bg-[var(--er-surface-muted)]")]),style:w,onClick:t=>(e=>{C(e)?u.value=u.value.filter(t=>t!==e):u.value.length>=o.targetCount||(u.value=[...u.value,e])})(e.id)},[c("div",Dt,[c("div",{class:f(["flex items-center justify-center w-4 h-4 rounded-sm border transition-colors shrink-0",C(e.id)?"border-[var(--er-border-action)] bg-[var(--er-border-action)]":"border-[var(--er-border-muted)]"])},[C(e.id)?(n(),s("svg",Pt,[...a[1]||(a[1]=[c("path",{d:"M10 3L4.5 8.5L2 6",stroke:"white","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):p("",!0)],2),c("span",Ot,d(e.symbol||`Pane ${e.index+1}`),1)])],10,Ft);var t}),128))],2)])]),footer:g(()=>[c("div",_t,[v(r,{color:"secondary",onClick:T},{default:g(()=>[...a[2]||(a[2]=[M("Cancel",-1)])]),_:1}),v(r,{color:"primary",disabled:u.value.length!==e.targetCount,onClick:k},{default:g(()=>[...a[3]||(a[3]=[M(" Confirm ",-1)])]),_:1},8,["disabled"])])]),_:1},8,["dialog-visible"])}}}),Et={key:1,class:"relative w-full flex-1 min-h-0"},$t=["onClick"],zt=l({__name:"index",props:{symbol:{},chartData:{},selectedTimeFrame:{},selectedTimeRange:{},selectedChartType:{},customTimeRange:{},timeFrameOptions:{},timeRangeOptions:{},chartTypeOptions:{},snapshotOptions:{},isLoading:{type:Boolean},isExpanded:{type:Boolean},multiChartLayout:{},dataBarCount:{},tickSize:{},dark:{type:Boolean},chartDomId:{},overlayTitle:{},overlaySubtitle:{},openLabel:{},highLabel:{},lowLabel:{},closeLabel:{},plugins:{},drawingPlugin:{},orderlinePlugin:{}},emits:["resize","changeTimeFrame","changeTimeRange","changeChartType","changeCustomRange","loadMoreLeft","toggleExpanded","changeMultiChartLayout","stateChange","drawingStateChange","orderlineStateChange","contextMenuAction","activeSymbolChange"],setup(r,{expose:l,emit:o}){const i=r,c=o,d=x(null),g=xe(i,c,{snapshotTargetRef:d}),{isLoading:w,symbol:C,overlaySubtitle:k,chartData:T,selectedTimeFrame:L,selectedChartType:M,tickSize:P,dark:O,isMultiChart:_,multiChartLayout:R,chartIds:E,selectedChartId:$}=g,z=x(null),j=t({}),B=x(null),I=x(null),A=x(null),N=x(null),H=a(()=>O.value??!1),V=a(()=>B.value?.$el?.offsetHeight??0),K=a(()=>I.value?.$el?.offsetHeight??0),W=a(()=>E.value.map((e,t)=>({id:e,index:t,symbol:g.getSymbolForChart(e),description:g.getSymbolDescriptionForChart(e),timeFrame:g.getTimeFrameForChart(e)}))),U=a(()=>z.value?.chartInstance??null),Y=a(()=>z.value?.currentSeries??null),Z=a(()=>z.value?.chartRenderKey??0),q=a(()=>z.value?.chartDataTimes??[]),G=a(()=>i.plugins??[]),X=a(()=>i.drawingPlugin??null),J=a(()=>i.orderlinePlugin??null),Q=a(()=>G.value.includes(pe.Drawing)&&!!X.value),ee=a(()=>G.value.includes(pe.Orderline)&&!!J.value),te=a(()=>Q.value&&(X.value?.showSidebar??!0)),ae=e=>{c("drawingStateChange",e)},re=e=>{c("orderlineStateChange",e)},le=e=>{if(_.value)return;const t=z.value;if(!t)return;let a=t.crosshairData?.closePrice??null,r="plot";const l=t.chartInstance,o=t.currentSeries;if(l&&o){const i=l.chartElement().getBoundingClientRect(),n=e.clientY-i.top,s=o.coordinateToPrice(n);null!=s&&(a=t.roundPriceByTickSize?.(s));const c=l.priceScale("right").width(),u=l.priceScale("left").width(),d=e.clientX-i.left;(d<u||d>i.width-c)&&(r="axis")}A.value?.open(e.clientX,e.clientY,a,r)},oe=(e,t)=>{c("contextMenuAction",e,t)},ie=a(()=>["flex flex-1 flex-col min-h-0 min-w-0 h-full overflow-hidden relative rounded-xs bg-[var(--er-surface-page)]",{"rounded-l-none":te.value&&!_.value}]),ne=a(()=>{switch(R.value){case ue.TwoRows:case ue.ThreeRows:return"flex flex-col";case ue.TwoCols:case ue.ThreeCols:return"flex flex-row";case ue.Four:return"grid grid-cols-2 grid-rows-2";default:return"flex flex-row"}}),se=e=>["min-h-0 min-w-0 rounded-sm overflow-hidden ring-1 transition-all cursor-pointer",R.value===ue.Four?"h-full w-full":"flex-1",$.value===e?"ring-[var(--er-border-action)]":"ring-[var(--er-border-default)]"];return l({state:g.state,selectedTimeFrame:g.selectedTimeFrame,selectedTimeRange:g.selectedTimeRange,selectedChartType:g.selectedChartType,customTimeRange:g.customTimeRange,isExpanded:g.isExpanded,isMultiChart:g.isMultiChart,multiChartLayout:g.multiChartLayout,selectedChartId:g.selectedChartId,activeChartLastPrice:g.activeChartLastPrice,chartInstance:U,currentSeries:Y,chartRenderKey:Z,headerHeight:V,footerHeight:K,takeSnapshot:g.onSnapshot,openMenu:e=>{N.value?.openMenu?.(e)}}),(t,a)=>{const r=e;return n(),s("div",{class:"flex h-full w-full min-h-0 min-w-0 gap-1 overflow-hidden",onContextmenu:S(le,["prevent"])},[!u(_)&&Q.value&&X.value?(n(),b(ft,{key:0,chart:U.value,series:Y.value,symbol:u(C),"selected-time-frame":u(L),"chart-data-times":q.value,"is-dark":H.value,"floating-target":d.value,"header-height":V.value,"footer-height":K.value,config:X.value,onStateChange:ae},null,8,["chart","series","symbol","selected-time-frame","chart-data-times","is-dark","floating-target","header-height","footer-height","config"])):p("",!0),F((n(),s("div",{ref_key:"lightweightChartRef",ref:d,class:f(ie.value)},[!u(_)&&ee.value&&J.value?(n(),b(bt,{key:0,ref_key:"orderlinePluginRef",ref:N,chart:U.value,series:Y.value,"render-key":Z.value,"is-dark":H.value,config:J.value,onStateChange:re},null,8,["chart","series","render-key","is-dark","config"])):p("",!0),v(u(Ye),{ref_key:"headerRef",ref:B,context:u(g)},null,8,["context"]),u(_)?(n(),s("div",{key:2,class:f(["w-full flex-1 min-h-0 gap-2 p-1",ne.value])},[(n(!0),s(m,null,y(u(E),e=>(n(),s("div",{key:e,class:f(se(e)),onClick:t=>u(g).onSelectChart(e)},[v(yt,{ref_for:!0,ref:t=>((e,t)=>{j.value[e]=t??null})(e,t),"chart-data":u(g).getChartDataForChart(e),"selected-chart-type":u(g).getChartTypeForChart(e),"selected-time-frame":u(g).getTimeFrameForChart(e),dark:H.value,"tick-size":u(P),symbol:u(g).getSymbolForChart(e),"symbol-description":u(g).getSymbolDescriptionForChart(e),"is-multi-chart":!0,"open-label":i.openLabel,"high-label":i.highLabel,"low-label":i.lowLabel,"close-label":i.closeLabel,onLoadMoreLeft:u(g).onLoadMoreLeft},null,8,["chart-data","selected-chart-type","selected-time-frame","dark","tick-size","symbol","symbol-description","open-label","high-label","low-label","close-label","onLoadMoreLeft"])],10,$t))),128))],2)):(n(),s("div",Et,[v(yt,{ref_key:"primaryCanvasRef",ref:z,"chart-data":u(T),"selected-chart-type":u(M),"selected-time-frame":u(L),dark:H.value,"tick-size":u(P),symbol:u(C),"symbol-description":u(k),"is-multi-chart":!1,"open-label":i.openLabel,"high-label":i.highLabel,"low-label":i.lowLabel,"close-label":i.closeLabel,onLoadMoreLeft:u(g).onLoadMoreLeft,onResize:u(g).onResize},null,8,["chart-data","selected-chart-type","selected-time-frame","dark","tick-size","symbol","symbol-description","open-label","high-label","low-label","close-label","onLoadMoreLeft","onResize"])])),v(u(tt),{ref_key:"footerRef",ref:I,context:u(g)},null,8,["context"]),D(t.$slots,"chart-overlay")],2)),[[r,u(w)]]),u(_)?p("",!0):(n(),b(Lt,{key:1,ref_key:"contextMenuRef",ref:A,symbol:u(C),onAction:oe},null,8,["symbol"])),u(g).pendingLayoutSwitch.value?(n(),b(Rt,{key:2,"is-visible":!!u(g).pendingLayoutSwitch.value,"source-layout":u(R),"source-panes":W.value,"target-count":u(de)(u(g).pendingLayoutSwitch.value),onConfirm:u(g).confirmLayoutSwitch,onCancel:u(g).cancelLayoutSwitch},null,8,["is-visible","source-layout","source-panes","target-count","onConfirm","onCancel"])):p("",!0)],32)}}});export{ue as C,pe as E,me as T,zt as _,ce as a,he as b,de as g,xe as p,Ce as u};
|
|
1
|
+
import{ElLoadingDirective as e}from"element-plus/es";import{ref as t,computed as a,watch as r,defineComponent as l,onMounted as o,onUnmounted as i,openBlock as n,createElementBlock as s,createElementVNode as c,unref as u,toDisplayString as d,Fragment as m,createCommentVNode as p,createVNode as v,withCtx as g,renderList as y,normalizeClass as f,createBlock as b,resolveDynamicComponent as w,shallowRef as x,nextTick as C,normalizeStyle as k,Teleport as T,Transition as L,withModifiers as S,createTextVNode as M,withDirectives as F,renderSlot as D}from"vue";import{b as P,a as O}from"./vendor-vueuse-core-B96HGhR7.mjs";import{isBusinessDay as _,ColorType as R,CandlestickSeries as E,AreaSeries as $,LineSeries as z,createChart as j}from"lightweight-charts";import{ElNotification as B}from"element-plus";import{Square as I,Columns2 as A,Rows2 as N,Columns3 as H,Rows3 as V,Grid2X2 as K,ChartCandlestick as W,Camera as U,Table as Y,Scan as Z,CalendarDays as q}from"@lucide/vue";import"./vendor-email-misspelled-0hsXkSSK.mjs";import"./vendor-unorm-Degftfa1.mjs";import"./useEaeraInputPhoneNumber-B72aLnQs.mjs";import"@element-plus/icons-vue";import"echarts/core";import"echarts/renderers";import"echarts/charts";import"echarts/components";import"vue-echarts";import"./vendor-currency-symbol-map-C-1fEG2R.mjs";import{useI18n as G}from"vue-i18n";import"./vendor-sortablejs-D3DyHO5Y.mjs";import{_ as X}from"./index-DaBf9nij.mjs";import{_ as J,O as Q}from"./index-Cm-cRnqS.mjs";import{_ as ee}from"./_plugin-vue_export-helper-BCo6x5W8.mjs";import{_ as te}from"./EaeraDialog-uLsXC20k.mjs";import{_ as ae}from"./EaeraButton-BPVKRBOn.mjs";import{t as re,a as le}from"./vendor-html-to-image-DzdJgLib.mjs";import{_ as oe}from"./EaeraDivider-Dggvc36a.mjs";import ie from"../composite/EaeraDropdownV2.mjs";import{_ as ne}from"./EaeraTooltip-BIlULHv4.mjs";import{_ as se}from"./EaeraDatePicker-Bwt5r5gk.mjs";const ce={Candlestick:"candlestick",Line:"line",Area:"area"},ue={Single:"single",TwoRows:"two-rows",TwoCols:"two-cols",ThreeRows:"three-rows",ThreeCols:"three-cols",Four:"four"},de=e=>{switch(e){case ue.Single:return 1;case ue.TwoRows:case ue.TwoCols:return 2;case ue.ThreeRows:case ue.ThreeCols:return 3;case ue.Four:return 4;default:return 1}},me={OneMinute:"1m",FiveMinutes:"5m",FifteenMinutes:"15m",ThirtyMinutes:"30m",OneHour:"1h",FourHours:"4h",OneDay:"1d",OneWeek:"1w",OneMonth:"1mn"},he={OneDay:"1D",OneWeek:"1W",OneMonth:"1M",ThreeMonths:"3M",SixMonths:"6M",OneYear:"1Y",All:"ALL",Custom:"CUSTOM"},pe={Drawing:"drawing",Orderline:"orderline"},ve=[me.OneMinute,me.FiveMinutes,me.FifteenMinutes,me.ThirtyMinutes,me.OneHour,me.FourHours,me.OneDay,me.OneWeek,me.OneMonth],ge=[he.OneDay,he.OneWeek,he.OneMonth,he.ThreeMonths,he.SixMonths,he.OneYear,he.All,he.Custom],ye=[{value:ce.Candlestick,icon:"Candle3"},{value:ce.Line,icon:"LineChart2"},{value:ce.Area,icon:"AreaChart"}],fe=["download-image","copy-image-to-clipboard","open-image-in-new-tab"],be={[me.OneMinute]:60,[me.FiveMinutes]:300,[me.FifteenMinutes]:900,[me.ThirtyMinutes]:1800,[me.OneHour]:3600,[me.FourHours]:14400,[me.OneDay]:86400,[me.OneWeek]:604800,[me.OneMonth]:2592e3},we=(e,t=100,a=1.272)=>{const r=[],l=Math.floor(Date.now()/1e3),o=be[e]??900;let i=a;for(let n=t-1;n>=0;n--){const e=2e-4,t=i,a=t+15e-5*(Math.random()-.48)+(Math.random()-.5)*e,s=Math.max(t,a)+Math.random()*e*.6,c=Math.min(t,a)-Math.random()*e*.6,u=l-n*o;r.push({time:u,open:+t.toFixed(5),high:+s.toFixed(5),low:+c.toFixed(5),close:+a.toFixed(5)}),i=a}return r},xe=(e,l,o={})=>{const{t:i}=G(),n=t(e.selectedTimeRange??he.OneDay),s=t(e.customTimeRange??null),c=t(e.isExpanded??!1),u=P("multi-chart:layout",e.multiChartLayout??ue.Single),d=t("chart-0"),m=e.selectedTimeFrame??me.OneMinute,p=e.selectedChartType??ce.Candlestick,v=e.dataBarCount??100,g=P("multi-chart:configs",{"chart-0":{timeFrame:m,chartType:p}}),y=e.symbol??"",f=e.overlaySubtitle??"",b=P("multi-chart:symbols",{"chart-0":y}),w=P("multi-chart:descriptions",{"chart-0":f}),x=t(null),C=a(()=>{const e=de(u.value);return Array.from({length:e},(e,t)=>`chart-${t}`)});r(C,e=>{const t=u.value,a={...g.value},r={...w.value},l={...b.value};try{const t={...a},o={...r},i={...l},n=t["chart-0"]??{timeFrame:m,chartType:p},s=o["chart-0"]??f,c=i["chart-0"]??y;e.forEach(e=>{const a=t[e];a&&a.timeFrame&&a.chartType||(t[e]={...n}),o[e]||(o[e]=s),i[e]||(i[e]=c)});const u={},d={},v={};e.forEach(e=>{if(!t[e]||!o[e]||!i[e])throw new Error(`Incomplete config for chart pane "${e}"`);u[e]=t[e],d[e]=o[e],v[e]=i[e]}),g.value=u,w.value=d,b.value=v}catch(o){console.error("Failed to expand chart layout:",o),u.value=t,g.value=a,w.value=r,b.value=l,B.error({message:i("chart.multi-chart.error.expansion-failed"),duration:5e3})}},{immediate:!0}),r(()=>e.selectedTimeFrame,e=>{if(e){const t=d.value;g.value[t]&&(g.value[t]={...g.value[t],timeFrame:e})}}),r(()=>e.selectedChartType,e=>{if(e){const t=d.value;g.value[t]&&(g.value[t]={...g.value[t],chartType:e})}}),r(()=>e.selectedTimeRange,e=>{e&&(n.value=e)}),r(()=>e.customTimeRange,e=>{void 0!==e&&(s.value=e??null)}),r(()=>e.isExpanded,e=>{"boolean"==typeof e&&(c.value=e)}),r(()=>e.multiChartLayout,e=>{e&&(u.value=e)}),r(()=>e.symbol,e=>{const t=d.value;if(void 0!==e&&b.value[t]!==e){b.value={...b.value,[t]:e};const{[t]:a,...r}=R.value;R.value=r}}),r(d,t=>{const a=b.value[t];void 0!==a&&a!==e.symbol&&l("activeSymbolChange",a)}),r(()=>e.overlaySubtitle,e=>{const t=d.value,a=e??"";w.value[t]!==a&&(w.value={...w.value,[t]:a})});const k=(e,t)=>{const a=i(e);return"string"==typeof a&&a.trim().length>0?a:t},T=a(()=>ve.map(e=>({label:k(`chart.time-frame.${e}`,e),value:e}))),L=a(()=>ge.map(e=>({label:k(`chart.time-range.${e}`,e),value:e}))),S=a(()=>ye.map(e=>({label:k(`chart.type.${e.value}`,e.value),value:e.value,icon:e.icon,chartIcon:e.icon}))),M=a(()=>fe.map(e=>"download-image"===e?{value:e,label:k("chart.snapshot.download-image","Download image"),desc:k("chart.snapshot.download-image-shortcut","Ctrl + Alt + S")}:"copy-image-to-clipboard"===e?{value:e,label:k("chart.snapshot.copy-image-to-clipboard","Copy image"),desc:k("chart.snapshot.copy-image-to-clipboard-shortcut","Ctrl + Shift + S")}:{value:e,label:k("chart.snapshot.open-in-new-tab","Open in new tab"),desc:k("chart.snapshot.open-in-new-tab-shortcut","Alt + S")})),F=a(()=>g.value[d.value]??{timeFrame:m,chartType:p}),D=a(()=>e.chartData&&e.chartData.length>0?e.chartData:we(F.value.timeFrame,v)),O=a(()=>{const e=D.value;return e.length>0?e[e.length-1].close:null}),_=a(()=>({selectedTimeFrame:F.value.timeFrame,selectedTimeRange:n.value,selectedChartType:F.value.chartType,customTimeRange:s.value,isExpanded:c.value,isLoading:e.isLoading??!1}));r(_,e=>{l("stateChange",e)},{immediate:!0});const R=t({}),E=e=>g.value[e]?.timeFrame??m,$=async e=>{const t=o.snapshotTargetRef?.value;if(t)switch(e){case"download-image":await(async e=>{try{const t=await re(e,{quality:1,pixelRatio:2}),a=document.createElement("a");a.href=t,a.download=`chart-snapshot-${Date.now()}.png`,a.click()}catch(t){console.error("Failed to download chart image:",t),B.error({message:i("chart.snapshot.error.download"),duration:5e3})}})(t);break;case"copy-image-to-clipboard":await(async e=>{try{const t=await le(e,{quality:1,pixelRatio:2});if(!t?.type||"undefined"==typeof ClipboardItem)throw new Error("Failed to generate image blob");const a=new ClipboardItem({[t.type]:t});await navigator.clipboard.write([a])}catch(t){console.error("Failed to copy chart image to clipboard:",t),B.error({message:i("chart.snapshot.error.copy"),duration:5e3})}})(t);break;case"open-image-in-new-tab":await(async e=>{try{const t=await re(e,{quality:1,pixelRatio:2}),a=window.open();a&&(a.document.write(`\n <html>\n <head><title>Chart Snapshot</title></head>\n <body style="margin:0;display:flex;justify-content:center;align-items:center;min-height:100vh;background:#000;">\n <img src="${t}" style="max-width:100%;max-height:100vh;" />\n </body>\n </html>\n `),a.document.close())}catch(t){console.error("Failed to open chart image in new tab:",t),B.error({message:i("chart.snapshot.error.open"),duration:5e3})}})(t)}};return{symbol:a(()=>e.symbol??""),overlaySubtitle:a(()=>e.overlaySubtitle??""),chartData:D,selectedTimeFrame:a(()=>F.value.timeFrame),selectedTimeRange:a(()=>n.value),selectedChartType:a(()=>F.value.chartType),customTimeRange:a(()=>s.value),timeFrameOptions:a(()=>e.timeFrameOptions&&e.timeFrameOptions.length>0?e.timeFrameOptions:T.value),timeRangeOptions:a(()=>e.timeRangeOptions&&e.timeRangeOptions.length>0?e.timeRangeOptions:L.value),chartTypeOptions:a(()=>e.chartTypeOptions&&e.chartTypeOptions.length>0?e.chartTypeOptions:S.value),snapshotOptions:a(()=>void 0!==e.snapshotOptions?e.snapshotOptions:M.value),isLoading:a(()=>e.isLoading??!1),isExpanded:a(()=>c.value),isMultiChart:a(()=>u.value!==ue.Single),multiChartLayout:a(()=>u.value),chartIds:C,selectedChartId:a(()=>d.value),activeChartLastPrice:O,tickSize:a(()=>e.tickSize),dark:a(()=>e.dark),chartDomId:a(()=>e.chartDomId??"eaera-lightweight-chart-canvas"),overlayTitle:a(()=>e.overlayTitle??""),state:_,getTimeFrameForChart:E,getChartTypeForChart:e=>g.value[e]?.chartType??p,getChartDataForChart:t=>{if(e.chartData&&e.chartData.length>0)return e.chartData;const a=E(t),r=R.value[t];if(r&&r.length>0){const e=be[a],t=r[r.length-1].time,l=Math.floor(Date.now()/1e3)-e;if(Math.abs(t-l)<2*e)return r}const l=we(a,v);return R.value={...R.value,[t]:l},l},getSymbolForChart:e=>b.value[e]??y,getSymbolDescriptionForChart:e=>w.value[e]??f,onResize:(e,t)=>l("resize",e,t),onChangeTimeFrame:e=>{const t=d.value;g.value[t]&&(g.value[t]={...g.value[t],timeFrame:e}),l("changeTimeFrame",e)},onChangeTimeRange:e=>{n.value=e,l("changeTimeRange",e)},onChangeChartType:e=>{const t=d.value;g.value[t]&&(g.value[t]={...g.value[t],chartType:e}),l("changeChartType",e)},onChangeCustomRange:e=>{s.value=e,l("changeCustomRange",e)},onLoadMoreLeft:()=>l("loadMoreLeft"),onSnapshot:async e=>{await $(e)},onToggleExpanded:()=>{c.value=!c.value,l("toggleExpanded")},onChangeMultiChartLayout:e=>{const t=u.value,a=de(t),r=de(e);if(r<a)return void(x.value=e);if(r>a){const e={...g.value},t={...w.value},l={...b.value},o=d.value,i=e[o]??e["chart-0"],n=t[o]??f,s=l[o]??y;for(let c=a;c<r;c++){const a=`chart-${c}`;e[a]||(e[a]={...i}),t[a]||(t[a]=n),l[a]||(l[a]=s)}g.value=e,w.value=t,b.value=l}u.value=e;parseInt(d.value.split("-")[1]??"0",10)>=r&&(d.value="chart-0"),l("changeMultiChartLayout",e)},onSelectChart:e=>{d.value=e},confirmLayoutSwitch:e=>{const t=x.value;if(!t)return;const a=de(t),r={},o={},i={};e.slice(0,a).forEach((e,t)=>{const a=`chart-${t}`;r[a]=g.value[e]??{timeFrame:m,chartType:p},o[a]=w.value[e]??f,i[a]=b.value[e]??y}),g.value=r,w.value=o,b.value=i,d.value="chart-0",u.value=t,x.value=null,l("changeMultiChartLayout",t)},cancelLayoutSwitch:()=>{x.value=null},pendingLayoutSwitch:a(()=>x.value)}},Ce=e=>e,ke={class:"p-2.5"},Te={class:"w-full h-8 flex items-center justify-between"},Le={class:"h-full flex items-center gap-1"},Se={key:0,class:"flex items-center gap-1 text-label-lg text-[var(--er-text-primary)]"},Me={class:"whitespace-nowrap"},Fe={class:"text-[var(--er-text-secondary)] whitespace-nowrap"},De={class:"flex items-center"},Pe={type:"button",class:"flex items-center justify-center h-8 px-3 border-none rounded-lg bg-transparent text-label-lg text-[var(--er-text-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Oe={class:"flex items-center"},_e={type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Re={class:"h-full flex items-center gap-1"},Ee={class:"flex items-center"},$e={type:"button",class:"flex items-center justify-center h-8 px-3 border-none rounded-lg bg-transparent text-label-lg text-[var(--er-text-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},ze={class:"flex items-center"},je={type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Be={key:1,class:"flex items-center"},Ie={type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Ae={key:0,class:"text-body-xs text-[var(--er-text-secondary)]"},Ne={class:"flex items-center"},He={type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]"},Ve={class:"flex flex-col gap-2 py-4 px-3 min-w-[150px]"},Ke={class:"flex items-center gap-3"},We={class:"w-4"},Ue=["onClick"],Ye=l({__name:"EaeraLightweightChartHeader",props:{context:{}},setup(e){const t=e,{t:r}=G(),{symbol:l,overlayTitle:x,overlaySubtitle:C,selectedTimeFrame:k,timeFrameOptions:T,chartTypeOptions:L,snapshotOptions:S,isExpanded:M,isMultiChart:F,multiChartLayout:D,onChangeTimeFrame:P,onChangeChartType:O,onSnapshot:_,onToggleExpanded:R,onChangeMultiChartLayout:E}=t.context,$=a(()=>T.value.map(e=>({label:e.label,value:e.value,itemClick:()=>P(e.value)}))),z=a(()=>L.value.map(e=>({label:e.label,value:e.value,itemClick:()=>O(e.value)}))),j=a(()=>S.value.map(e=>({label:e.label,value:e.value,desc:e.desc,itemClick:()=>_(e.value)}))),B=a(()=>[{order:1,options:[{icon:I,id:ue.Single}]},{order:2,options:[{icon:A,id:ue.TwoCols},{icon:N,id:ue.TwoRows}]},{order:3,options:[{icon:H,id:ue.ThreeCols},{icon:V,id:ue.ThreeRows}]},{order:4,options:[{icon:K,id:ue.Four}]}]),q=a(()=>C.value||x.value||""),X=a(()=>{const e=`chart.time-frame.sc.${k.value}`,t=r(e);if("string"==typeof t&&t.trim().length>0&&t!==e)return t;const a=T.value.find(e=>e.value===k.value);return a?.label??k.value}),J=e=>{const t=e.key.toLowerCase();return"escape"===t&&M.value?(e.preventDefault(),void R()):"s"===t?e.ctrlKey&&e.altKey&&!e.shiftKey?(e.preventDefault(),void _("download-image")):e.ctrlKey&&e.shiftKey&&!e.altKey?(e.preventDefault(),void _("copy-image-to-clipboard")):void(!e.altKey||e.ctrlKey||e.shiftKey||(e.preventDefault(),_("open-image-in-new-tab"))):void 0};return o(()=>window.addEventListener("keydown",J)),i(()=>window.removeEventListener("keydown",J)),(e,t)=>{const a=ne,r=ie,o=oe;return n(),s("div",ke,[c("div",Te,[c("div",Le,[u(F)?(n(),s(m,{key:1},[c("div",De,[v(r,{"use-menu":"","dropdown-options":$.value},{menu_item:g(({data:e})=>[c("div",null,d(e.label),1)]),default:g(()=>[c("button",Pe,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.time-frame")},{default:g(()=>[c("span",null,d(X.value),1)]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])]),v(o,{direction:"vertical"}),c("div",Oe,[v(r,{"use-menu":"","dropdown-options":z.value},{menu_item:g(({data:e})=>[c("div",null,d(e.label),1)]),default:g(()=>[c("button",_e,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.chart-type-selector")},{default:g(()=>[v(u(W),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])])],64)):(n(),s("div",Se,[c("span",Me,d(u(l)),1),q.value?(n(),s(m,{key:0},[t[1]||(t[1]=c("span",{class:"text-[var(--er-text-secondary)]"},"/",-1)),c("span",Fe,d(q.value),1)],64)):p("",!0)]))]),c("div",Re,[u(F)?p("",!0):(n(),s(m,{key:0},[c("div",Ee,[v(r,{"use-menu":"","dropdown-options":$.value},{menu_item:g(({data:e})=>[c("div",null,d(e.label),1)]),default:g(()=>[c("button",$e,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.time-frame")},{default:g(()=>[c("span",null,d(X.value),1)]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])]),v(o,{direction:"vertical"}),c("div",ze,[v(r,{"use-menu":"","dropdown-options":z.value},{menu_item:g(({data:e})=>[c("div",null,d(e.label),1)]),default:g(()=>[c("button",je,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.chart-type-selector")},{default:g(()=>[v(u(W),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])])],64)),u(S).length?(n(),s("div",Be,[v(r,{"use-menu":"","dropdown-options":j.value},{menu_item:g(({data:e})=>[c("div",null,[c("div",null,d(e.label),1),e.desc?(n(),s("div",Ae,d(e.desc),1)):p("",!0)])]),default:g(()=>[c("button",Ie,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.snapshot")},{default:g(()=>[v(u(U),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])]),_:1},8,["dropdown-options"])])):p("",!0),c("div",Ne,[v(r,null,{dropdown:g(()=>[c("div",Ve,[(n(!0),s(m,null,y(B.value,(e,t)=>(n(),s("div",{key:t},[c("div",Ke,[c("span",We,d(e.order),1),(n(!0),s(m,null,y(e.options,(e,t)=>(n(),s("div",{key:t,class:f(["cursor-pointer p-[2px] border rounded-xs transition-colors",u(D)===e.id?"border-[var(--er-border-action)] bg-[var(--er-surface-elevated)] text-[var(--er-text-brand)]":"border-[var(--er-border-default)] hover:bg-[var(--er-surface-muted)]"]),onClick:t=>u(E)(e.id)},[(n(),b(w(e.icon),{size:20}))],10,Ue))),128))])]))),128))])]),default:g(()=>[c("button",He,[v(a,{placement:"right",content:e.$t("chart.tools.tooltip.multi-chart")},{default:g(()=>[v(u(Y),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])]),_:1})]),c("button",{type:"button",class:"flex items-center justify-center w-8 h-8 p-0 border-none rounded-lg bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]",onClick:t[0]||(t[0]=(...e)=>u(R)&&u(R)(...e))},[v(a,{placement:"bottom",content:e.$t("chart.tools.tooltip.fullscreen")},{default:g(()=>[v(u(Z),{size:20,"stroke-width":"1.2","absolute-stroke-width":""})]),_:1},8,["content"])])])])])}}}),Ze={class:"border-t border-[var(--er-border-default)] px-3 py-2"},qe={class:"flex justify-between items-center h-6"},Ge={class:"h-full flex items-center gap-2 select-none"},Xe={class:"h-full flex items-center gap-0.5"},Je=["onClick"],Qe={class:"h-full flex items-center select-none"},et={class:"text-label-md text-[var(--er-text-primary)] whitespace-nowrap","aria-live":"polite"},tt=l({__name:"EaeraLightweightChartFooter",props:{context:{}},setup(e){const r=e,{selectedTimeRange:l,timeRangeOptions:p,onChangeTimeRange:g,onChangeTimeFrame:b,onChangeCustomRange:w}=r.context,x=t(null),C=a(()=>p.value.filter(e=>e.value!==he.Custom)),k=(e,t)=>{g(e),b(t)},T=()=>{x.value?.handleOpen()},L=e=>{if(!e||2!==e.length)return;const t={startDate:e[0],endDate:e[1]};w(t),k(he.Custom,me.ThirtyMinutes)},S=e=>{const t=Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC",a=-e.getTimezoneOffset(),r=`UTC${a>=0?"+":"-"}${String(Math.floor(Math.abs(a)/60)).padStart(2,"0")}:${String(Math.abs(a)%60).padStart(2,"0")}`;return`${new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"long",day:"numeric"}).format(e)} ${new Intl.DateTimeFormat("en-US",{timeZone:t,hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(e)} ${r}`},M=t("");let F;const D=()=>{M.value=S(new Date)};return o(()=>{D(),F=window.setInterval(D,1e3)}),i(()=>{void 0!==F&&clearInterval(F)}),(e,t)=>{const a=oe;return n(),s("div",Ze,[c("div",qe,[c("div",Ge,[c("div",Xe,[(n(!0),s(m,null,y(C.value,e=>(n(),s("button",{key:e.value,type:"button",class:f(["h-full flex items-center px-1 border-none rounded text-label-md text-[var(--er-text-primary)] cursor-pointer whitespace-nowrap bg-transparent hover:bg-[var(--er-surface-elevated)]",{"bg-[var(--er-surface-elevated)]":u(l)===e.value}]),onClick:t=>(e=>{switch(e){case he.OneDay:k(he.OneDay,me.OneMinute);break;case he.OneWeek:k(he.OneWeek,me.ThirtyMinutes);break;case he.OneMonth:k(he.OneMonth,me.ThirtyMinutes);break;case he.ThreeMonths:k(he.ThreeMonths,me.OneDay);break;case he.SixMonths:k(he.SixMonths,me.OneWeek);break;default:k(e,me.OneWeek)}})(e.value)},d(e.label),11,Je))),128)),v(a,{direction:"vertical",class:"mx-1"}),c("button",{type:"button",class:"flex items-center justify-center w-6 h-6 p-0 border-none rounded bg-transparent text-[var(--er-icon-primary)] cursor-pointer hover:bg-[var(--er-surface-hover)]",onClick:T},[v(u(q),{size:20,"absolute-stroke-width":"","stroke-width":"1.2"})]),v(u(se),{ref_key:"customDateRef",ref:x,"value-format":"YYYY-MM-DD",type:"daterange",class:"hidden",onChange:L},null,512)])]),c("div",Qe,[c("span",et,d(M.value),1)])])])}}}),at=(e,t,a=6)=>{if(!e.length||a<=0)return e;const r=Math.max(1,Math.floor((e=>({[me.OneMinute]:6e4,[me.FiveMinutes]:3e5,[me.FifteenMinutes]:9e5,[me.ThirtyMinutes]:18e5,[me.OneHour]:36e5,[me.FourHours]:144e5,[me.OneDay]:864e5,[me.OneWeek]:6048e5,[me.OneMonth]:2592e6}[e]))(t)/1e3)),l=e[e.length-1]?.time;if("number"!=typeof l||Number.isNaN(l))return e;const o=Array.from({length:a},(e,t)=>({time:l+r*(t+1)}));return[...e,...o]},rt=e=>{const t=lt(e);return t?((e,t)=>new Intl.DateTimeFormat(void 0,{timeZone:"UTC",...t}).format(e))(t,{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}):""},lt=e=>{if(null==e)return null;if("number"==typeof e)return new Date(1e3*e);if("string"==typeof e){const t=new Date(e);return Number.isNaN(t.getTime())?null:t}return _(e)?new Date(e.year,e.month-1,e.day):null},ot=e=>e?{surfacePrimary:"#191D23",surfacePositive:"#16c784",surfaceNegative:"#ef4444",surfaceElevated:"#323A45",textPrimary:"#F0F1F3",textSecondary:"#B1B9C5",borderPrimary:"#323A45",borderPrimaryInverse:"#D8DCE2",borderAction:"#A259FB",areaTop:"#A259FB4D",areaBottom:"#A259FB0D"}:{surfacePrimary:"white",surfacePositive:"#16c784",surfaceNegative:"#ef4444",surfaceElevated:"#d8dce2",textPrimary:"#0f1115",textSecondary:"#4b5768",borderPrimary:"#d8dce2",borderPrimaryInverse:"#323a45",borderAction:"#A259FB",areaTop:"#A259FB4D",areaBottom:"#A259FB0D"},it=e=>{const t={width:0,height:0};const a=(e=>{const t=ot(e);return{background:{type:R.Solid,color:t.surfacePrimary},textColor:t.textSecondary}})(e),r=(e=>{const t=ot(e);return{vertLines:{color:t.borderPrimary,visible:!0,style:0},horzLines:{color:t.borderPrimary,visible:!0,style:0}}})(e),l=(e=>{const t=ot(e);return{mode:0,vertLine:{color:t.borderPrimaryInverse,width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:t.surfaceElevated},horzLine:{color:t.borderPrimaryInverse,width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:t.surfacePositive}}})(e),o=(e=>{const t=ot(e);return{rightPriceScale:{borderColor:t.borderPrimary,scaleMargins:{top:.3,bottom:.1},textColor:t.textSecondary},timeScale:{borderColor:t.borderPrimary,timeVisible:!0,rightOffsetPixels:48,allowShiftVisibleRangeOnWhitespaceReplacement:!0,textColor:t.textSecondary}}})(e);return{...t,layout:a,grid:r,crosshair:l,localization:{timeFormatter:e=>rt(e)},...o}},nt=e=>{const t=ot(e);return{upColor:t.surfacePositive,downColor:t.surfaceNegative,borderVisible:!1,wickUpColor:t.surfacePositive,wickDownColor:t.surfaceNegative}},st=["id"],ct={class:"absolute top-2 left-2 z-10 flex gap-x-4 gap-y-1 flex-wrap w-full"},ut={key:0,class:"text-label-lg font-semibold max-w-[calc(100%-1rem)]"},dt={class:"text-[var(--er-text-secondary)] whitespace-nowrap"},mt={key:1,class:"flex flex-wrap gap-x-2 gap-y-0.5 text-label-lg font-semibold max-w-[calc(100%-1rem)]"},ht={class:"text-[var(--er-text-secondary)]"},pt={class:"text-[var(--er-text-secondary)]"},vt={class:"text-[var(--er-text-secondary)]"},gt={class:"text-[var(--er-text-secondary)]"},yt=l({__name:"EaeraChartCanvas",props:{chartData:{default:()=>[]},selectedChartType:{default:ce.Candlestick},selectedTimeFrame:{default:me.OneMinute},dark:{type:Boolean,default:!1},tickSize:{default:null},symbol:{default:""},symbolDescription:{default:""},isMultiChart:{type:Boolean,default:!1},chartDomId:{default:void 0},openLabel:{default:"O"},highLabel:{default:"H"},lowLabel:{default:"L"},closeLabel:{default:"C"}},emits:["loadMoreLeft","resize"],setup(e,{expose:l,emit:u}){const m=e,v=u,g="undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10),y=a(()=>m.chartDomId??`eaera-chart-canvas-${g}`),f=x(null),b=x(null),{width:w,height:T}=O(f),L=x(null),S=x(null),M=t(0),F=()=>{M.value+=1},D={openPrice:null,highPrice:null,lowPrice:null,closePrice:null,time:null,state:null,symbolLabel:m.symbol},P=x({...D}),_=a(()=>P.value.state?{color:`var(--er-text-${P.value.state})`}:{}),R=a(()=>m.dark??!1),B=a(()=>{const e=Number(m.tickSize??.01);return!Number.isFinite(e)||e<=0?.01:e}),I=e=>{if(!Number.isFinite(e)||e<=0)return 2;const t=e.toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:20}),a=(t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t).split(".")[1];return a?a.length:0},A=e=>Number.isFinite(e)?Number(e.toFixed(I(B.value))):e,N=a(()=>{const e=new Map;return m.chartData.forEach(t=>{e.set(t.time,t)}),e}),H=a(()=>{const e=at(m.chartData,m.selectedTimeFrame,30);return m.selectedChartType===ce.Line||m.selectedChartType===ce.Area?e.map(e=>"open"in e?{time:e.time,value:e.close}:{time:e.time}):e}),V=a(()=>m.chartData.map(e=>e.time)),K=()=>{P.value={...D,symbolLabel:m.symbol}},W=()=>{S.value&&L.value&&(S.value.applyOptions({priceFormat:{type:"price",precision:I(B.value),minMove:B.value}}),L.value.priceScale("right").applyOptions({ticksVisible:!1,ensureEdgeTickMarksVisible:!0}))},U=()=>{L.value&&S.value&&(L.value.removeSeries(S.value),S.value=null)},Y=e=>{if(L.value){switch(U(),e){case ce.Candlestick:S.value=L.value.addSeries(E,nt(R.value));break;case ce.Line:S.value=L.value.addSeries(z,(t=R.value,{color:ot(t).borderAction,lineWidth:2,lineStyle:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4}));break;case ce.Area:S.value=L.value.addSeries($,(e=>{const t=ot(e);return{lineColor:t.borderAction,topColor:t.areaTop,bottomColor:t.areaBottom,lineWidth:2,lineStyle:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4}})(R.value));break;default:S.value=L.value.addSeries(E,nt(R.value))}var t;W(),F()}},Z=()=>{S.value&&(S.value.setData(H.value),W(),F())};let q=null,G=null;const X=()=>{L.value&&(q&&(L.value.unsubscribeCrosshairMove(q),q=null),G&&(L.value.timeScale().unsubscribeVisibleLogicalRangeChange(G),G=null))},J=()=>{((e,t)=>{L.value&&(L.value.applyOptions({width:e,height:t}),F(),v("resize",e,t))})(Math.max(0,w.value),Math.max(0,T.value))},Q=()=>{b.value&&(L.value=j(b.value,it(R.value)),F(),Y(m.selectedChartType),Z(),L.value&&(X(),q=e=>{const t="number"==typeof e.time?e.time:null;if(null===t)return void K();const a=N.value.get(t);a?P.value={openPrice:A(a.open),highPrice:A(a.high),lowPrice:A(a.low),closePrice:A(a.close),time:t,state:a.close>=a.open?"success":"error",symbolLabel:m.symbol}:K()},G=e=>{e&&e.from<=10&&v("loadMoreLeft")},L.value.subscribeCrosshairMove(q),L.value.timeScale().subscribeVisibleLogicalRangeChange(G)),J())};return r([w,T],J),r(()=>m.selectedChartType,e=>{Y(e),Z()}),r([()=>m.chartData,()=>m.selectedTimeFrame,B],()=>{Z()}),r(R,()=>{L.value&&(L.value.applyOptions(it(R.value)),Y(m.selectedChartType),Z())},{immediate:!0}),r(()=>m.symbol,e=>{P.value.symbolLabel=e}),o(async()=>{await C(),Q()}),i(()=>{X(),U(),L.value&&(L.value.remove(),L.value=null,F()),K()}),l({chartInstance:L,currentSeries:S,chartRenderKey:M,crosshairData:P,chartDataTimes:V,roundPriceByTickSize:A,clearCrosshairData:K,syncSeriesData:Z}),(t,a)=>(n(),s("div",{ref_key:"containerRef",ref:f,class:"relative w-full h-full min-h-0 min-w-0"},[c("div",{id:y.value,ref_key:"chartRef",ref:b,class:"w-full h-full"},null,8,st),c("div",ct,[e.isMultiChart&&e.symbolDescription?(n(),s("div",ut,[c("span",dt,d(e.symbolDescription),1)])):p("",!0),null!==P.value.closePrice?(n(),s("div",mt,[c("div",null,[c("span",ht,d(e.openLabel),1),c("span",{style:k(_.value)},d(P.value.openPrice),5)]),c("div",null,[c("span",pt,d(e.highLabel),1),c("span",{style:k(_.value)},d(P.value.highPrice),5)]),c("div",null,[c("span",vt,d(e.lowLabel),1),c("span",{style:k(_.value)},d(P.value.lowPrice),5)]),c("div",null,[c("span",gt,d(e.closeLabel),1),c("span",{style:k(_.value)},d(P.value.closePrice),5)])])):p("",!0)])],512))}}),ft=l({__name:"EaeraLightweightChartDrawingPlugin",props:{chart:{},series:{},symbol:{},selectedTimeFrame:{},chartDataTimes:{},isDark:{type:Boolean},floatingTarget:{},headerHeight:{},footerHeight:{},config:{}},emits:["stateChange"],setup(e,{emit:t}){const r=e,l=t,o=a(()=>r.selectedTimeFrame),i=a(()=>({position:"absolute",left:"0px",right:"0px",top:`${r.headerHeight}px`,bottom:`${r.footerHeight}px`,height:"auto",zIndex:20})),s=e=>{l("stateChange",e)};return(t,a)=>(n(),b(u(X),{chart:e.chart,series:e.series,symbol:e.symbol,"selected-time-frame":o.value,"chart-data-times":e.chartDataTimes,drawings:e.config.drawings,"is-dark":e.isDark,"create-drawing":e.config.createDrawing,"update-drawing":e.config.updateDrawing,"delete-drawing":e.config.deleteDrawing,"load-drawings":e.config.loadDrawings,"delete-all-drawings":e.config.deleteAllDrawings,"floating-target":e.floatingTarget,"floating-layer-style":i.value,"show-sidebar":e.config.showSidebar??!0,"show-floating-toolbar":e.config.showFloatingToolbar??!0,onStateChange:s},null,8,["chart","series","symbol","selected-time-frame","chart-data-times","drawings","is-dark","create-drawing","update-drawing","delete-drawing","load-drawings","delete-all-drawings","floating-target","floating-layer-style","show-sidebar","show-floating-toolbar"]))}}),bt=l({__name:"EaeraLightweightChartOrderlinePlugin",props:{chart:{},series:{},renderKey:{},isDark:{type:Boolean},config:{}},emits:["stateChange"],setup(e,{expose:a,emit:r}){const l=e,o=r,i=t(null),s=e=>{l.config.onDeleteLine(e)},c=(e,t)=>{l.config.onLinePriceChange(e,t)},d=(e,t)=>{l.config.onLinePricePreview?.(e,t)},m=e=>{l.config.onDragStateChange?.(e)},p=(e,t,a)=>{l.config.onSLTPChange?.(e,t,a)},v=e=>{o("stateChange",e)};return a({openMenu:e=>{i.value?.openMenu?.(e)}}),(t,a)=>(n(),b(u(J),{ref_key:"overlayRef",ref:i,"order-lines":e.config.orderLines,"chart-instance":e.chart,"series-instance":e.series,"order-line-tool":e.config.orderLineTool??null,"render-key":e.renderKey,"market-price":e.config.marketPrice??null,"tick-size":e.config.tickSize??null,dark:e.isDark,onDeleteLine:s,onLinePriceChange:c,onLinePricePreview:d,onDragStateChange:m,onSlTpChange:p,onStateChange:v},null,8,["order-lines","chart-instance","series-instance","order-line-tool","render-key","market-price","tick-size","dark"]))}}),wt=["onClick"],xt=.01,Ct="text-[color:var(--er-text-success)]",kt="text-[color:var(--er-text-danger)]",Tt="border-[color:var(--er-surface-muted)] bg-[color:var(--er-surface-elevated)]",Lt=ee(l({__name:"ChartContextMenu",props:{symbol:{},tickSize:{default:null}},emits:["action"],setup(e,{expose:r,emit:l}){const u=e,w=l,x=t(!1),C=t({x:0,y:0}),M=t(null),F=t("plot"),D=t(null),P=a(()=>({position:"fixed",zIndex:2,top:`${C.value.y}px`,left:`${C.value.x}px`})),O=["fixed","z-[2]","flex","flex-col","min-w-[240px]","py-2","border","rounded-sm","shadow-lg","surface-[var(--er-surface-page)]"],_=["flex","items-center","h-8","px-2","cursor-pointer","select-none","rounded-sm","hover:bg-[var(--er-action-neutral-subtle-hover)]"],R=["px-2","font-[family-name:var(--er-font-brand),system-ui,sans-serif]","text-[14px]","font-normal","leading-5","tracking-[0.018em]","text-[color:var(--er-action-neutral-default)]","whitespace-nowrap"];a(()=>[...O,Tt].join(" "));const E=a(()=>{const e=u.symbol||"GBPUSD",t=null!=M.value?M.value.toFixed(5):"—";return[{label:"Reset chart view",tone:"neutral",action:"reset-view"},..."plot"===F.value?[{label:`Buy Market 0.01 ${e}`,tone:"buy",action:"buy-market"},{label:`Sell Market 0.01 ${e}`,tone:"sell",action:"sell-market"},{label:`Buy Limit 0.01 ${e}`,tone:"buy",action:"buy-limit"},{label:`Sell Limit 0.01 ${e}`,tone:"sell",action:"sell-limit"},{label:`Buy Stop 0.01 ${e}`,tone:"buy",action:"buy-stop"},{label:`Buy Stop Limit 0.01 ${e}`,tone:"buy",action:"buy-stop-limit"},{label:`Sell Stop 0.01 ${e}`,tone:"sell",action:"sell-stop"},{label:`Sell Stop Limit 0.01 ${e}`,tone:"sell",action:"sell-stop-limit"},{label:"Lock vertical cursor line by time",tone:"neutral",action:"lock-cursor"}]:[],{label:`Copy price ${t}`,tone:"neutral",action:"copy-price"},{label:"Paste",tone:"neutral",action:"paste"}]}),$=new Set(["buy-limit","sell-limit","buy-stop","buy-stop-limit","sell-stop","sell-stop-limit"]),z={"buy-limit":{title:"Buy Limit",side:"buy",showStopLimitPrice:!1},"sell-limit":{title:"Sell Limit",side:"sell",showStopLimitPrice:!1},"buy-stop":{title:"Buy Stop",side:"buy",showStopLimitPrice:!1},"buy-stop-limit":{title:"Buy Stop Limit",side:"buy",showStopLimitPrice:!0},"sell-stop":{title:"Sell Stop",side:"sell",showStopLimitPrice:!1},"sell-stop-limit":{title:"Sell Stop Limit",side:"sell",showStopLimitPrice:!0}},j={"buy-market":{side:"buy",orderType:"market"},"sell-market":{side:"sell",orderType:"market"},"buy-limit":{side:"buy",orderType:"buy_limit"},"sell-limit":{side:"sell",orderType:"sell_limit"},"buy-stop":{side:"buy",orderType:"buy_stop"},"buy-stop-limit":{side:"buy",orderType:"buy_stop_limit"},"sell-stop":{side:"sell",orderType:"sell_stop"},"sell-stop-limit":{side:"sell",orderType:"sell_stop_limit"}},B=()=>{x.value=!1,D.value=null},I=()=>{D.value=null,x.value=!1},A=e=>{if(!D.value)return;const t=j[D.value.action];t&&(w("action",D.value.action,{symbol:u.symbol,price:e.price?Number(e.price):M.value,side:t.side,orderType:t.orderType,volume:e.volume?Number(e.volume):xt,stopLimitPrice:e.stopLimitPrice?Number(e.stopLimitPrice):void 0,takeProfit:e.takeProfitEnabled&&e.takeProfit?Number(e.takeProfit):void 0,stopLoss:e.stopLossEnabled&&e.stopLoss?Number(e.stopLoss):void 0,comment:e.comment||void 0}),I())},N=e=>{(x.value||D.value)&&B()},H=e=>{"Escape"===e.key&&(x.value||D.value)&&B()};return o(()=>{document.addEventListener("mousedown",N),document.addEventListener("keydown",H)}),i(()=>{document.removeEventListener("mousedown",N),document.removeEventListener("keydown",H)}),r({open:(e,t,a,r="plot")=>{C.value={x:e,y:t},M.value=a,F.value=r,D.value=null,x.value=!0},close:B}),(t,a)=>(n(),b(T,{to:"body"},[v(L,{name:"context-menu-fade"},{default:g(()=>[D.value?(n(),s("div",{key:0,class:f("fixed z-[2]"),style:k(P.value),onMousedown:a[0]||(a[0]=S(()=>{},["stop"]))},[v(Q,{title:D.value.title,"status-tag-text":D.value.statusTagText,side:D.value.side,symbol:e.symbol,"reference-price":M.value,"tick-size":e.tickSize,"show-stop-limit-price":D.value.showStopLimitPrice,"initial-comment":D.value.initialComment,onConfirm:A,onDiscard:I,onClose:I},null,8,["title","status-tag-text","side","symbol","reference-price","tick-size","show-stop-limit-price","initial-comment"])],36)):x.value?(n(),s("div",{key:1,class:f(O),style:k({top:`${C.value.y}px`,left:`${C.value.x}px`}),onClick:a[1]||(a[1]=S(()=>{},["stop"]))},[(n(!0),s(m,null,y(E.value,(e,t)=>{return n(),s("div",{key:t,class:f((e.tone,[..._].join(" "))),onClick:t=>(e=>{if("buy-market"===e.action||"sell-market"===e.action){const t=j[e.action];return w("action",e.action,{symbol:u.symbol,price:M.value,side:t.side,orderType:t.orderType,volume:xt}),void B()}if($.has(e.action)){const t=z[e.action];return void(D.value={action:e.action,title:t.title,statusTagText:`${t.title} 0.01`,side:t.side,showStopLimitPrice:t.showStopLimitPrice,initialComment:""})}w("action",e.action,{symbol:u.symbol,price:M.value}),B()})(e)},[c("span",{class:f((a=e.tone,"buy"===a?[...R,Ct].join(" "):"sell"===a?[...R,kt].join(" "):R.join(" ")))},d(e.label),3)],10,wt);var a}),128))],4)):p("",!0)]),_:1})]))}}),[["__scopeId","data-v-a1ce2602"]]),St={class:"flex flex-col gap-3 py-2"},Mt={class:"text-body-sm text-[var(--er-text-secondary)]"},Ft=["onClick"],Dt={class:"flex items-center gap-1.5"},Pt={key:0,width:"10",height:"10",viewBox:"0 0 12 12",fill:"none"},Ot={class:"text-label-md font-medium text-[var(--er-text-primary)] truncate"},_t={class:"flex justify-end gap-3"},Rt=l({__name:"SwitchMultiChartDialog",props:{isVisible:{type:Boolean},sourceLayout:{},sourcePanes:{},targetCount:{}},emits:["confirm","cancel"],setup(e,{emit:l}){const o=e,i=l,u=t([]),w={width:"120px",height:"64px"},x=a(()=>{switch(o.sourceLayout){case ue.TwoRows:case ue.ThreeRows:return"grid-cols-1";case ue.TwoCols:return"grid-cols-2";case ue.ThreeCols:return"grid-cols-3";case ue.Four:return"grid-cols-2 grid-rows-2";default:return"grid-cols-1"}}),C=e=>u.value.includes(e),k=()=>{u.value.length===o.targetCount&&i("confirm",[...u.value])},T=()=>{i("cancel")},L=()=>{i("cancel")};return r(()=>o.isVisible,e=>{e&&(u.value=o.sourcePanes.slice(0,o.targetCount).map(e=>e.id))},{immediate:!0}),(t,a)=>{const r=ae,l=te;return n(),b(l,{"dialog-visible":e.isVisible,width:"400px","append-body":"","destroy-on-close":"","close-on-click-modal":!0,"close-on-press-escape":!0,onClose:L},{header:g(()=>[...a[0]||(a[0]=[c("span",{class:"text-title-sm"},"Switch Multi-Chart",-1)])]),default:g(()=>[c("div",St,[c("span",Mt," Select "+d(e.targetCount)+" pane"+d(e.targetCount>1?"s":"")+" to keep* ",1),c("div",{class:f(["grid gap-1 justify-start",x.value])},[(n(!0),s(m,null,y(e.sourcePanes,e=>{return n(),s("div",{key:e.id,class:f(["flex flex-col items-center justify-center rounded-sm border cursor-pointer transition-colors p-2",C(e.id)?"border-[var(--er-border-action)] bg-[var(--er-surface-elevated)]":(t=e.id,!C(t)&&u.value.length>=o.targetCount?"border-[var(--er-border-default)] opacity-40 cursor-not-allowed":"border-[var(--er-border-default)] hover:bg-[var(--er-surface-muted)]")]),style:w,onClick:t=>(e=>{C(e)?u.value=u.value.filter(t=>t!==e):u.value.length>=o.targetCount||(u.value=[...u.value,e])})(e.id)},[c("div",Dt,[c("div",{class:f(["flex items-center justify-center w-4 h-4 rounded-sm border transition-colors shrink-0",C(e.id)?"border-[var(--er-border-action)] bg-[var(--er-border-action)]":"border-[var(--er-border-muted)]"])},[C(e.id)?(n(),s("svg",Pt,[...a[1]||(a[1]=[c("path",{d:"M10 3L4.5 8.5L2 6",stroke:"white","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):p("",!0)],2),c("span",Ot,d(e.symbol||`Pane ${e.index+1}`),1)])],10,Ft);var t}),128))],2)])]),footer:g(()=>[c("div",_t,[v(r,{color:"contrast",onClick:T},{default:g(()=>[...a[2]||(a[2]=[M("Cancel",-1)])]),_:1}),v(r,{color:"primary",disabled:u.value.length!==e.targetCount,onClick:k},{default:g(()=>[...a[3]||(a[3]=[M(" Confirm ",-1)])]),_:1},8,["disabled"])])]),_:1},8,["dialog-visible"])}}}),Et={key:1,class:"relative w-full flex-1 min-h-0"},$t=["onClick"],zt=l({__name:"index",props:{symbol:{},chartData:{},selectedTimeFrame:{},selectedTimeRange:{},selectedChartType:{},customTimeRange:{},timeFrameOptions:{},timeRangeOptions:{},chartTypeOptions:{},snapshotOptions:{},isLoading:{type:Boolean},isExpanded:{type:Boolean},multiChartLayout:{},dataBarCount:{},tickSize:{},dark:{type:Boolean},chartDomId:{},overlayTitle:{},overlaySubtitle:{},openLabel:{},highLabel:{},lowLabel:{},closeLabel:{},plugins:{},drawingPlugin:{},orderlinePlugin:{}},emits:["resize","changeTimeFrame","changeTimeRange","changeChartType","changeCustomRange","loadMoreLeft","toggleExpanded","changeMultiChartLayout","stateChange","drawingStateChange","orderlineStateChange","contextMenuAction","activeSymbolChange"],setup(r,{expose:l,emit:o}){const i=r,c=o,d=x(null),g=xe(i,c,{snapshotTargetRef:d}),{isLoading:w,symbol:C,overlaySubtitle:k,chartData:T,selectedTimeFrame:L,selectedChartType:M,tickSize:P,dark:O,isMultiChart:_,multiChartLayout:R,chartIds:E,selectedChartId:$}=g,z=x(null),j=t({}),B=x(null),I=x(null),A=x(null),N=x(null),H=a(()=>O.value??!1),V=a(()=>B.value?.$el?.offsetHeight??0),K=a(()=>I.value?.$el?.offsetHeight??0),W=a(()=>E.value.map((e,t)=>({id:e,index:t,symbol:g.getSymbolForChart(e),description:g.getSymbolDescriptionForChart(e),timeFrame:g.getTimeFrameForChart(e)}))),U=a(()=>z.value?.chartInstance??null),Y=a(()=>z.value?.currentSeries??null),Z=a(()=>z.value?.chartRenderKey??0),q=a(()=>z.value?.chartDataTimes??[]),G=a(()=>i.plugins??[]),X=a(()=>i.drawingPlugin??null),J=a(()=>i.orderlinePlugin??null),Q=a(()=>G.value.includes(pe.Drawing)&&!!X.value),ee=a(()=>G.value.includes(pe.Orderline)&&!!J.value),te=a(()=>Q.value&&(X.value?.showSidebar??!0)),ae=e=>{c("drawingStateChange",e)},re=e=>{c("orderlineStateChange",e)},le=e=>{if(_.value)return;const t=z.value;if(!t)return;let a=t.crosshairData?.closePrice??null,r="plot";const l=t.chartInstance,o=t.currentSeries;if(l&&o){const i=l.chartElement().getBoundingClientRect(),n=e.clientY-i.top,s=o.coordinateToPrice(n);null!=s&&(a=t.roundPriceByTickSize?.(s));const c=l.priceScale("right").width(),u=l.priceScale("left").width(),d=e.clientX-i.left;(d<u||d>i.width-c)&&(r="axis")}A.value?.open(e.clientX,e.clientY,a,r)},oe=(e,t)=>{c("contextMenuAction",e,t)},ie=a(()=>["flex flex-1 flex-col min-h-0 min-w-0 h-full overflow-hidden relative rounded-xs bg-[var(--er-surface-page)]",{"rounded-l-none":te.value&&!_.value}]),ne=a(()=>{switch(R.value){case ue.TwoRows:case ue.ThreeRows:return"flex flex-col";case ue.TwoCols:case ue.ThreeCols:return"flex flex-row";case ue.Four:return"grid grid-cols-2 grid-rows-2";default:return"flex flex-row"}}),se=e=>["min-h-0 min-w-0 rounded-sm overflow-hidden ring-1 transition-all cursor-pointer",R.value===ue.Four?"h-full w-full":"flex-1",$.value===e?"ring-[var(--er-border-action)]":"ring-[var(--er-border-default)]"];return l({state:g.state,selectedTimeFrame:g.selectedTimeFrame,selectedTimeRange:g.selectedTimeRange,selectedChartType:g.selectedChartType,customTimeRange:g.customTimeRange,isExpanded:g.isExpanded,isMultiChart:g.isMultiChart,multiChartLayout:g.multiChartLayout,selectedChartId:g.selectedChartId,activeChartLastPrice:g.activeChartLastPrice,chartInstance:U,currentSeries:Y,chartRenderKey:Z,headerHeight:V,footerHeight:K,takeSnapshot:g.onSnapshot,openMenu:e=>{N.value?.openMenu?.(e)}}),(t,a)=>{const r=e;return n(),s("div",{class:"flex h-full w-full min-h-0 min-w-0 gap-1 overflow-hidden",onContextmenu:S(le,["prevent"])},[!u(_)&&Q.value&&X.value?(n(),b(ft,{key:0,chart:U.value,series:Y.value,symbol:u(C),"selected-time-frame":u(L),"chart-data-times":q.value,"is-dark":H.value,"floating-target":d.value,"header-height":V.value,"footer-height":K.value,config:X.value,onStateChange:ae},null,8,["chart","series","symbol","selected-time-frame","chart-data-times","is-dark","floating-target","header-height","footer-height","config"])):p("",!0),F((n(),s("div",{ref_key:"lightweightChartRef",ref:d,class:f(ie.value)},[!u(_)&&ee.value&&J.value?(n(),b(bt,{key:0,ref_key:"orderlinePluginRef",ref:N,chart:U.value,series:Y.value,"render-key":Z.value,"is-dark":H.value,config:J.value,onStateChange:re},null,8,["chart","series","render-key","is-dark","config"])):p("",!0),v(u(Ye),{ref_key:"headerRef",ref:B,context:u(g)},null,8,["context"]),u(_)?(n(),s("div",{key:2,class:f(["w-full flex-1 min-h-0 gap-2 p-1",ne.value])},[(n(!0),s(m,null,y(u(E),e=>(n(),s("div",{key:e,class:f(se(e)),onClick:t=>u(g).onSelectChart(e)},[v(yt,{ref_for:!0,ref:t=>((e,t)=>{j.value[e]=t??null})(e,t),"chart-data":u(g).getChartDataForChart(e),"selected-chart-type":u(g).getChartTypeForChart(e),"selected-time-frame":u(g).getTimeFrameForChart(e),dark:H.value,"tick-size":u(P),symbol:u(g).getSymbolForChart(e),"symbol-description":u(g).getSymbolDescriptionForChart(e),"is-multi-chart":!0,"open-label":i.openLabel,"high-label":i.highLabel,"low-label":i.lowLabel,"close-label":i.closeLabel,onLoadMoreLeft:u(g).onLoadMoreLeft},null,8,["chart-data","selected-chart-type","selected-time-frame","dark","tick-size","symbol","symbol-description","open-label","high-label","low-label","close-label","onLoadMoreLeft"])],10,$t))),128))],2)):(n(),s("div",Et,[v(yt,{ref_key:"primaryCanvasRef",ref:z,"chart-data":u(T),"selected-chart-type":u(M),"selected-time-frame":u(L),dark:H.value,"tick-size":u(P),symbol:u(C),"symbol-description":u(k),"is-multi-chart":!1,"open-label":i.openLabel,"high-label":i.highLabel,"low-label":i.lowLabel,"close-label":i.closeLabel,onLoadMoreLeft:u(g).onLoadMoreLeft,onResize:u(g).onResize},null,8,["chart-data","selected-chart-type","selected-time-frame","dark","tick-size","symbol","symbol-description","open-label","high-label","low-label","close-label","onLoadMoreLeft","onResize"])])),v(u(tt),{ref_key:"footerRef",ref:I,context:u(g)},null,8,["context"]),D(t.$slots,"chart-overlay")],2)),[[r,u(w)]]),u(_)?p("",!0):(n(),b(Lt,{key:1,ref_key:"contextMenuRef",ref:A,symbol:u(C),onAction:oe},null,8,["symbol"])),u(g).pendingLayoutSwitch.value?(n(),b(Rt,{key:2,"is-visible":!!u(g).pendingLayoutSwitch.value,"source-layout":u(R),"source-panes":W.value,"target-count":u(de)(u(g).pendingLayoutSwitch.value),onConfirm:u(g).confirmLayoutSwitch,onCancel:u(g).cancelLayoutSwitch},null,8,["is-visible","source-layout","source-panes","target-count","onConfirm","onCancel"])):p("",!0)],32)}}});export{ue as C,pe as E,me as T,zt as _,ce as a,he as b,de as g,xe as p,Ce as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ref as e,watch as a,computed as l,provide as s,inject as t,defineComponent as o,shallowRef as i,openBlock as n,createElementBlock as r,createElementVNode as m,createVNode as c,unref as d,createSlots as u,withCtx as p,renderSlot as v,normalizeStyle as b,toDisplayString as _,Fragment as y,renderList as g,normalizeClass as f,createBlock as S,resolveDynamicComponent as w,onMounted as z,nextTick as k,onBeforeUnmount as T,useSlots as L,normalizeProps as N,guardReactiveProps as E}from"vue";import{a as C}from"./vendor-vueuse-core-B96HGhR7.mjs";import{useI18n as V}from"vue-i18n";import"element-plus";import"element-plus/es";import{ChevronUp as x,ChevronDown as O,Search as j}from"@lucide/vue";import"./vendor-email-misspelled-0hsXkSSK.mjs";import{_ as F}from"./EaeraInput-CkbcAxy0.mjs";import"./vendor-unorm-Degftfa1.mjs";import"./useEaeraInputPhoneNumber-B72aLnQs.mjs";import"@element-plus/icons-vue";import P from"../composite/EaeraDropdownV2.mjs";import"echarts/core";import"echarts/renderers";import"echarts/charts";import"echarts/components";import"vue-echarts";import"./vendor-currency-symbol-map-C-1fEG2R.mjs";import"./vendor-sortablejs-D3DyHO5Y.mjs";import{_ as H}from"./EaeraTableV2-
|
|
1
|
+
import{ref as e,watch as a,computed as l,provide as s,inject as t,defineComponent as o,shallowRef as i,openBlock as n,createElementBlock as r,createElementVNode as m,createVNode as c,unref as d,createSlots as u,withCtx as p,renderSlot as v,normalizeStyle as b,toDisplayString as _,Fragment as y,renderList as g,normalizeClass as f,createBlock as S,resolveDynamicComponent as w,onMounted as z,nextTick as k,onBeforeUnmount as T,useSlots as L,normalizeProps as N,guardReactiveProps as E}from"vue";import{a as C}from"./vendor-vueuse-core-B96HGhR7.mjs";import{useI18n as V}from"vue-i18n";import"element-plus";import"element-plus/es";import{ChevronUp as x,ChevronDown as O,Search as j}from"@lucide/vue";import"./vendor-email-misspelled-0hsXkSSK.mjs";import{_ as F}from"./EaeraInput-CkbcAxy0.mjs";import"./vendor-unorm-Degftfa1.mjs";import"./useEaeraInputPhoneNumber-B72aLnQs.mjs";import"@element-plus/icons-vue";import P from"../composite/EaeraDropdownV2.mjs";import"echarts/core";import"echarts/renderers";import"echarts/charts";import"echarts/components";import"vue-echarts";import"./vendor-currency-symbol-map-C-1fEG2R.mjs";import"./vendor-sortablejs-D3DyHO5Y.mjs";import{_ as H}from"./EaeraTableV2-CBaM5zp9.mjs";const M=Symbol("EAERA_TIME_N_SALES_CONTEXT_KEY"),$=(t,o)=>{const{t:i}=V(),n=e(t.searchValue),r=e(t.minTradeSize),m=e(!1);a(()=>t.searchValue,e=>{n.value=e}),a(()=>t.minTradeSize,e=>{r.value=e});const c=(e,a)=>{const l=i(e);return"string"==typeof l&&l.trim().length>0?l:a},d=l(()=>[{key:"date",label:c("time-and-sales.table.date","Date"),minWidth:50},{key:"time",label:c("time-and-sales.table.time","Time"),minWidth:60},{key:"price",label:c("time-and-sales.table.price","Price"),minWidth:70,align:"right"},{key:"size",label:c("time-and-sales.table.size","Size"),minWidth:50,align:"right"}].map(e=>({...e,cellClass:"fs-10",cell:{dataClass:"text-primary"}}))),u=l(()=>({searchValue:n.value,minTradeSize:r.value,showingDropdown:m.value}));a(u,e=>{o("stateChange",e)},{immediate:!0});const p={searchValue:l({get:()=>n.value,set:e=>{n.value=e,o("update:searchValue",e)}}),searchPlaceholder:l(()=>t.searchPlaceholder??""),searchOptions:l(()=>t.searchOptions??[]),selectedSearchOption:l(()=>t.selectedSearchOption??""),loadingSearchOptions:l(()=>t.loadingSearchOptions??!1),minTradeSize:l({get:()=>r.value,set:e=>{r.value=e,o("update:minTradeSize",e)}}),minTradeSizePlaceholder:l(()=>t.minTradeSizePlaceholder||c("time-and-sales.table.size","Size")),rows:l(()=>t.rows??[]),fields:l(()=>t.fields&&t.fields.length>0?t.fields:d.value),tableHeight:l(()=>Number(t.tableHeight)||0),tableMaxHeight:l(()=>`${Math.max((Number(t.tableHeight)||0)-16,0)}px`),loading:l(()=>t.loading??!1),fetchingSymbolLabel:l(()=>t.fetchingSymbolLabel||c("market.search.fetching-symbol","Fetching symbol")),symbolNotFoundLabel:l(()=>t.symbolNotFoundLabel||c("market.search.symbol-not-found","Symbol not found")),emptyLabel:l(()=>t.emptyLabel||c("time-and-sales.table.empty","No data")),showingDropdown:l({get:()=>m.value,set:e=>{m.value=e}}),state:u,onResize:(e,a)=>o("resize",e,a),onSelectSearchOption:e=>o("select-search-option",e),onLoadMore:()=>o("load-more")};return s(M,p),p},D=()=>{const e=t(M);if(!e)throw new Error("useEaeraTimeNSales must be used inside EaeraTimeNSales");return e},R={class:"custom-time-n-sales-search__row"},W={class:"custom-time-n-sales-search__symbol-field"},A={class:"custom-time-n-sales-search__dropdown-anchor"},I={key:0,class:"custom-time-n-sales-search__empty body-sm text-placeholder"},B={key:0},q={key:1},U={key:1,class:"custom-time-n-sales-search__option-list"},K=["onClick"],X={class:"body-md__w"},Y={class:"body-sm"},G={class:"custom-time-n-sales-search__size-field"},J={class:"custom-time-n-sales-search__size-icons"},Q=o({__name:"EaeraTimeNSalesSearch",setup(s){const{searchValue:t,searchPlaceholder:o,searchOptions:z,selectedSearchOption:k,loadingSearchOptions:T,minTradeSize:L,minTradeSizePlaceholder:N,fetchingSymbolLabel:E,symbolNotFoundLabel:V,showingDropdown:H,onSelectSearchOption:M}=D(),$=i(null),Q=e(),{width:Z}=C($),ee=l(()=>`${Math.max(Z.value,200)}px`),ae=e(t.value),le=e(!1),se=l({get:()=>L.value,set:e=>{L.value=e}});a(t,e=>{ae.value=e});const te=e=>{le.value||(t.value=e)},oe=()=>{le.value=!0},ie=e=>{t.value=e.data},ne=e=>{le.value=!1;const a=e.data??ae.value;t.value=a},re=e=>{M(e)},me=e=>{H.value=e},ce=()=>{L.value=(e=>{const a=Number(e);return!Number.isFinite(a)||a<1?"":`${a}`})(L.value)},de=()=>{const e=Number(L.value||"1"),a=Number.isFinite(e)&&e>=1?e:1;L.value=`${a+1}`},ue=()=>{const e=Number(L.value||"1"),a=Number.isFinite(e)&&e>=1?e:1;L.value=`${Math.max(1,a-1)}`},he=l(()=>[{value:"up",icon:x,onClick:de},{value:"down",icon:O,onClick:ue}]);return a(t,e=>{e?Q.value?.openDropdown():Q.value?.closeDropdown()},{immediate:!0}),(e,a)=>(n(),r("div",{ref_key:"searchRef",ref:$,class:"custom-time-n-sales-search"},[m("div",R,[m("div",W,[c(d(F),{modelValue:ae.value,"onUpdate:modelValue":a[0]||(a[0]=e=>ae.value=e),placeholder:d(o),clearable:"",class:"watchlist-input custom-time-n-sales-search__symbol-input",onInput:te,onCompositionstart:oe,onCompositionupdate:ie,onCompositionend:ne},u({_:2},[d(t)?void 0:{name:"suffix",fn:p(()=>[c(d(j),{size:16,class:"icon-primary"})]),key:"0"}]),1032,["modelValue","placeholder"]),m("div",A,[c(d(P),{ref_key:"dropdownRef",ref:Q,trigger:"click",placement:"bottom-start",class:"custom-time-n-sales-search__dropdown",onVisibleChange:me},{dropdown:p(()=>[v(e.$slots,"dropdown",{options:d(z),selected:d(k),minWidth:ee.value,loading:d(T),fetchingSymbolLabel:d(E),symbolNotFoundLabel:d(V),selectOption:re},()=>[m("div",{class:"custom-time-n-sales-search__dropdown-panel",style:b({minWidth:ee.value})},[d(T)||!d(z).length?(n(),r("div",I,[d(T)?(n(),r("div",B,_(d(E)),1)):(n(),r("div",q,_(d(V)),1))])):(n(),r("div",U,[(n(!0),r(y,null,g(d(z),e=>(n(),r("div",{key:e.value,class:f(["custom-time-n-sales-search__option",e.value===d(k)&&"is-selected"]),onClick:a=>re(e.value)},[m("div",X,_(e.label),1),m("div",Y,_(e.description),1)],10,K))),128))]))],4)])]),default:p(()=>[a[2]||(a[2]=m("div",{class:"custom-time-n-sales-search__dropdown-trigger"},null,-1))]),_:3},512)])]),m("div",G,[c(d(F),{modelValue:se.value,"onUpdate:modelValue":a[1]||(a[1]=e=>se.value=e),class:"watchlist-input custom-time-n-sales-search__size-input",placeholder:d(N),onChange:ce,onInput:ce},{suffix:p(()=>[m("div",J,[(n(!0),r(y,null,g(he.value,e=>(n(),S(w(e.icon),{key:e.value,size:12,class:"icon-primary custom-time-n-sales-search__size-icon",onClick:e.onClick},null,8,["onClick"]))),128))])]),_:1},8,["modelValue","placeholder"])])])],512))}}),Z={class:"custom-time-n-sales-table"},ee=o({__name:"EaeraTimeNSalesTable",setup(a){const{rows:l,fields:s,tableMaxHeight:t,loading:o,emptyLabel:u,onLoadMore:v}=D(),b=e(),y=i(null),g=()=>{const e=y.value;e&&((e,a=50)=>{const{scrollTop:l,clientHeight:s,scrollHeight:t}=e;return l+s>=t-a})(e)&&v()},f=()=>{g()};let S=null;const w=()=>{null==S&&(S=requestAnimationFrame(()=>{S=null,g()}))};return z(async()=>{await k(),(()=>{const e=b.value?.$el;if(!e)return;const a=e.querySelector(".el-scrollbar__wrap");a&&(y.value=a,a.addEventListener("scroll",f,{passive:!0}),a.addEventListener("wheel",w,{passive:!0}))})()}),T(()=>{(()=>{const e=y.value;e&&(e.removeEventListener("scroll",f),e.removeEventListener("wheel",w),y.value=null)})(),null!=S&&(cancelAnimationFrame(S),S=null)}),(e,a)=>(n(),r("div",Z,[c(d(H),{ref_key:"tableRef",ref:b,class:"watchlist-table custom-time-n-sales-table__table",items:d(l),fields:d(s),"max-height":d(t),stripe:!1,"hide-footer":"",loading:d(o)},{empty:p(()=>[m("div",null,_(d(u)),1)]),_:1},8,["items","fields","max-height","loading"])]))}}),ae={class:"custom-time-n-sales"},le={class:"custom-time-n-sales__table"},se=o({__name:"index",props:{searchValue:{},searchPlaceholder:{},searchOptions:{},selectedSearchOption:{},loadingSearchOptions:{type:Boolean},minTradeSize:{},minTradeSizePlaceholder:{},rows:{},fields:{},tableHeight:{},loading:{type:Boolean},fetchingSymbolLabel:{},symbolNotFoundLabel:{},emptyLabel:{}},emits:["resize","update:searchValue","select-search-option","update:minTradeSize","load-more","stateChange"],setup(e,{expose:l,emit:s}){const t=L(),o=i(null),{width:b,height:_}=C(o),y=$(e,s);return l({state:y.state}),a([b,_],()=>{o.value&&y.onResize(b.value,_.value)}),(e,a)=>(n(),r("div",ae,[m("div",{ref_key:"searchRef",ref:o,class:"custom-time-n-sales__search"},[c(d(Q),null,u({_:2},[d(t)["search-dropdown"]?{name:"dropdown",fn:p(a=>[v(e.$slots,"search-dropdown",N(E(a)))]),key:"0"}:void 0]),1024)],512),m("div",le,[c(d(ee))])]))}});export{se as _,$ as p,D as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineComponent as e,ref as l,computed as t,watch as n,openBlock as r,createElementBlock as i,withModifiers as a,createElementVNode as o,toDisplayString as s,createCommentVNode as u,createVNode as d,unref as c,createBlock as v,withCtx as m,createTextVNode as p,Fragment as f,normalizeClass as g,provide as y,inject as b,onMounted as _,onBeforeUnmount as x,normalizeStyle as k,renderList as P}from"vue";import{_ as S}from"./EaeraButton-DGfjUoa6.mjs";import{_ as C}from"./EaeraInput-CkbcAxy0.mjs";import{_ as w}from"./EaeraCheckbox-C_faN0pV.mjs";import{_ as L}from"./EaeraSwitch-BI3E0zPf.mjs";import{_ as E}from"./EaeraInputNumber-COC6rdNn.mjs";import{_ as T}from"./EaeraTag-BgmzVuUW.mjs";import{X as B}from"@lucide/vue";import{_ as N}from"./_plugin-vue_export-helper-BCo6x5W8.mjs";const z={class:"orderline-context-menu__header"},M={class:"orderline-context-menu__title-group"},D={class:"orderline-context-menu__title"},I={key:0,class:"orderline-context-menu__status"},A={class:"orderline-context-menu__status-text"},F={key:0,class:"orderline-context-menu__market"},R={class:"orderline-context-menu__market-left"},$={key:1,class:"orderline-context-menu__prices"},O={class:"orderline-context-menu__price-value"},q={key:1,class:"orderline-context-menu__price-sep"},H={class:"orderline-context-menu__price-value"},V={key:0,class:"orderline-context-menu__symbol-info"},j={class:"orderline-context-menu__symbol"},U={class:"orderline-context-menu__inputs"},Y={class:"orderline-context-menu__field"},K={key:0,class:"orderline-context-menu__field"},W={class:"orderline-context-menu__field"},X={key:1,class:"orderline-context-menu__margin"},G={class:"orderline-context-menu__advanced-toggle"},J={class:"orderline-context-menu__sl-tp"},Q={class:"orderline-context-menu__field"},Z={class:"orderline-context-menu__field-header"},ee={class:"orderline-context-menu__field-label-inline"},le={key:0,class:"orderline-context-menu__field-error"},te={class:"orderline-context-menu__field"},ne={class:"orderline-context-menu__field-header"},re={class:"orderline-context-menu__field-label-inline"},ie={key:0,class:"orderline-context-menu__field-error"},ae={class:"orderline-context-menu__comment"},oe={class:"orderline-context-menu__comment-header"},se={class:"orderline-context-menu__comment-counter"},ue={class:"orderline-context-menu__actions"},de=N(e({__name:"OrderlineContextMenu",props:{title:{},statusTagText:{default:""},side:{default:void 0},bid:{default:null},ask:{default:null},symbol:{default:""},advanced:{type:Boolean,default:!1},showStopLimitPrice:{type:Boolean,default:!1},marginText:{default:""},initialPrice:{default:""},initialStopLimitPrice:{default:""},initialVolume:{default:"0.01"},initialStopLoss:{default:""},initialTakeProfit:{default:""},initialStopLossEnabled:{type:Boolean,default:!1},initialTakeProfitEnabled:{type:Boolean,default:!1},initialComment:{default:""},referencePrice:{default:null},tickSize:{default:null},priceDisabled:{type:Boolean,default:!1},volumeDisabled:{type:Boolean,default:!1}},emits:["confirm","discard","close","update:advanced","update:stop-loss","update:take-profit"],setup(e,{emit:y}){const b=e,_=y,x=l(null!==b.initialPrice&&void 0!==b.initialPrice?String(b.initialPrice):b.referencePrice?String(b.referencePrice):""),k=l(null!==b.initialStopLimitPrice&&void 0!==b.initialStopLimitPrice?String(b.initialStopLimitPrice):""),P=l(null!==b.initialVolume&&void 0!==b.initialVolume?String(b.initialVolume):""),N=l(b.initialStopLossEnabled),de=l(null!==b.initialStopLoss&&void 0!==b.initialStopLoss?String(b.initialStopLoss):""),ce=l(b.initialTakeProfitEnabled),ve=l(null!==b.initialTakeProfit&&void 0!==b.initialTakeProfit?String(b.initialTakeProfit):""),me=l(b.initialComment),pe=t(()=>{const e=Number(de.value);return Number.isFinite(e)?e:void 0}),fe=t(()=>{const e=Number(ve.value);return Number.isFinite(e)?e:void 0}),ge=t(()=>{const e=Number(b.tickSize);return Number.isFinite(e)&&e>0?e:1e-5}),ye=t(()=>{const e=Number(b.referencePrice);return Number.isFinite(e)?e:null}),be=t(()=>N.value&&void 0!==pe.value&&null!==ye.value&&pe.value>=ye.value?"Must be below order price":""),he=t(()=>ce.value&&void 0!==fe.value&&null!==ye.value&&fe.value<=ye.value?"Must be above order price":""),_e=()=>{_("update:stop-loss",{enabled:N.value,price:pe.value})},xe=()=>{_("update:take-profit",{enabled:ce.value,price:fe.value})};n(()=>b.initialPrice,e=>{null!=e&&(x.value=String(e))}),n(()=>b.initialStopLoss,e=>{de.value=null!=e?String(e):""}),n(()=>b.initialTakeProfit,e=>{ve.value=null!=e?String(e):""}),n(()=>b.initialComment,e=>{me.value=e??""});const ke=e=>{x.value=null==e?"":String(e)},Pe=e=>{k.value=null==e?"":String(e)},Se=e=>{P.value=null==e?"":String(e)},Ce=e=>{de.value=null==e?"":String(e),_e()},we=e=>{ve.value=null==e?"":String(e),xe()},Le=e=>{me.value=e??""},Ee=()=>{_("confirm",{price:x.value,stopLimitPrice:k.value,volume:P.value,stopLossEnabled:N.value,stopLoss:de.value,takeProfitEnabled:ce.value,takeProfit:ve.value,comment:me.value}),_("close")},Te=()=>{_("discard"),_("close")};return(l,t)=>{const n=T,y=E,Be=L,Ne=w,ze=C,Me=S;return r(),i("div",{class:"orderline-context-menu",onMousedown:t[4]||(t[4]=a(()=>{},["stop"]))},[o("div",z,[o("div",M,[o("span",D,s(e.title),1),e.statusTagText?(r(),i("div",I,[t[5]||(t[5]=o("span",{class:"orderline-context-menu__status-dot"},null,-1)),o("span",A,s(e.statusTagText),1)])):u("",!0)]),o("button",{type:"button",class:"orderline-context-menu__close","aria-label":"Close",onClick:t[0]||(t[0]=e=>_("close"))},[d(c(B),{size:18})])]),e.side||e.bid||e.ask?(r(),i("div",F,[o("div",R,[e.side?(r(),v(n,{key:0,color:"buy"===e.side?"success":"danger",size:"sm",effect:"light",round:!1},{default:m(()=>[p(s("buy"===e.side?"BUY":"SELL"),1)]),_:1},8,["color"])):u("",!0),e.bid||e.ask?(r(),i("div",$,[e.bid?(r(),i(f,{key:0},[t[6]||(t[6]=o("span",{class:"orderline-context-menu__price-label"},"Bid",-1)),o("span",O,s(e.bid),1)],64)):u("",!0),e.bid&&e.ask?(r(),i("span",q,"/")):u("",!0),e.ask?(r(),i(f,{key:2},[t[7]||(t[7]=o("span",{class:"orderline-context-menu__price-label"},"Ask",-1)),o("span",H,s(e.ask),1)],64)):u("",!0)])):u("",!0)]),e.symbol?(r(),i("div",V,[o("span",j,s(e.symbol),1),t[8]||(t[8]=o("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none"},[o("circle",{cx:"6",cy:"6",r:"5.25",stroke:"currentColor","stroke-width":"1"}),o("path",{d:"M6 5v3.5M6 3.5v.5",stroke:"currentColor","stroke-width":"1","stroke-linecap":"round"})],-1))])):u("",!0)])):u("",!0),o("div",U,[o("div",Y,[t[9]||(t[9]=o("div",{class:"orderline-context-menu__field-label"},[o("span",null,"Price"),o("span",{class:"orderline-context-menu__required"},"*")],-1)),d(y,{value:x.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:ge.value,disabled:e.priceDisabled},class:"w-full",onHandleChange:ke},null,8,["value","other-props"])]),e.showStopLimitPrice?(r(),i("div",K,[t[10]||(t[10]=o("div",{class:"orderline-context-menu__field-label"},[o("span",null,"Stop Limit Price"),o("span",{class:"orderline-context-menu__required"},"*")],-1)),d(y,{value:k.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:ge.value},class:"w-full",onHandleChange:Pe},null,8,["value","other-props"])])):u("",!0),o("div",W,[t[11]||(t[11]=o("div",{class:"orderline-context-menu__field-label"},[o("span",null,"Volume"),o("span",{class:"orderline-context-menu__required"},"*")],-1)),d(y,{value:P.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:.01,disabled:e.volumeDisabled},class:"w-full",onHandleChange:Se},null,8,["value","other-props"])])]),e.marginText?(r(),i("p",X,s(e.marginText),1)):u("",!0),o("div",G,[o("span",{class:g(["orderline-context-menu__advanced-label",{"orderline-context-menu__advanced-label--active":e.advanced}])}," Advanced ",2),d(Be,{"model-value":e.advanced,size:"sm","onUpdate:modelValue":t[1]||(t[1]=e=>_("update:advanced",e))},null,8,["model-value"])]),e.advanced?(r(),i(f,{key:2},[o("div",J,[o("div",Q,[o("div",Z,[o("div",ee,[d(Ne,{"model-value":N.value,size:"sm",color:"success","onUpdate:modelValue":t[2]||(t[2]=e=>(e=>{if(N.value=e,e&&!de.value&&null!==ye.value){const e=ge.value,l="buy"===b.side?ye.value-20*e:ye.value+20*e;de.value=String(Number(l.toFixed(8)))}_e()})(Boolean(e)))},null,8,["model-value"]),t[12]||(t[12]=o("span",null,"Stop Loss",-1))]),t[13]||(t[13]=o("span",{class:"orderline-context-menu__required"},"*",-1))]),d(y,{value:pe.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:ge.value,disabled:!N.value},class:"w-full",onHandleChange:Ce},null,8,["value","other-props"]),be.value?(r(),i("span",le,s(be.value),1)):u("",!0)]),o("div",te,[o("div",ne,[o("div",re,[t[14]||(t[14]=o("span",null,"Take Profit",-1)),d(Ne,{"model-value":ce.value,size:"sm",color:"success","onUpdate:modelValue":t[3]||(t[3]=e=>(e=>{if(ce.value=e,e&&!ve.value&&null!==ye.value){const e=ge.value,l="buy"===b.side?ye.value+30*e:ye.value-30*e;ve.value=String(Number(l.toFixed(8)))}xe()})(Boolean(e)))},null,8,["model-value"])]),t[15]||(t[15]=o("span",{class:"orderline-context-menu__required"},"*",-1))]),d(y,{value:fe.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:ge.value,disabled:!ce.value},class:"w-full",onHandleChange:we},null,8,["value","other-props"]),he.value?(r(),i("span",ie,s(he.value),1)):u("",!0)])]),o("div",ae,[o("div",oe,[t[16]||(t[16]=o("span",null,"Comment",-1)),o("span",se,s(me.value.length)+"/"+s(30),1)]),d(ze,{value:me.value,placeholder:"Add a comment",size:"sm","other-props":{maxlength:30},class:"w-full",onHandleChange:Le},null,8,["value","other-props"])])],64)):u("",!0),o("div",ue,[d(Me,{color:"contrast",plain:"",size:"sm",onClick:Te},{default:m(()=>[...t[17]||(t[17]=[p("Discard",-1)])]),_:1}),d(Me,{color:"primary",size:"sm",onClick:Ee},{default:m(()=>[...t[18]||(t[18]=[p("Confirm",-1)])]),_:1})])],32)}}}),[["__scopeId","data-v-2d8976ac"]]),ce=e=>e?{surfacePrimary:"#191D23",surfacePositive:"#16c784",surfaceNegative:"#ef4444",surfaceElevated:"#323A45",surfaceAction:"#A259FB",textPrimary:"#F0F1F3",textSecondary:"#B1B9C5",borderPrimary:"#323A45",borderPrimaryInverse:"#D8DCE2",borderAction:"#A259FB"}:{surfacePrimary:"white",surfacePositive:"#16c784",surfaceNegative:"#ef4444",surfaceElevated:"#d8dce2",surfaceAction:"#A259FB",textPrimary:"#0f1115",textSecondary:"#4b5768",borderPrimary:"#d8dce2",borderPrimaryInverse:"#323a45",borderAction:"#A259FB"},ve=(e="neutral",l="order",t,n)=>{const r=ce(t),i="position"===l;let a;return a="stop-loss"===n?r.surfaceNegative:"take-profit"===n?r.surfacePositive:i?r.borderAction:"buy"===e?r.surfacePositive:"sell"===e?r.surfaceNegative:r.borderAction,{lineColor:a,lineWidth:2,lineDash:[0,0],badgeBackgroundColor:r.surfacePrimary,badgeBorderColor:a,badgeTextColor:i?r.textPrimary:a,handleColor:a,handleBackgroundColor:i?r.surfacePrimary:"transparent",handleBorderColor:i?r.surfacePrimary:"transparent",deleteColor:i?r.textPrimary:a,deleteBackgroundColor:i?r.borderAction:r.surfacePrimary,deleteBorderColor:a,fontSize:12}},me=Symbol("EAERA_ORDERLINE_OVERLAY_CONTEXT_KEY"),pe=(e,r)=>{const i=l(null),a=l({}),o=t(()=>({draggingLineId:i.value,draftPrices:a.value}));n(o,e=>{r("stateChange",e)},{immediate:!0});const s={orderLines:t(()=>e.orderLines??[]),chartInstance:t(()=>e.chartInstance??null),seriesInstance:t(()=>e.seriesInstance??null),orderLineTool:t(()=>e.orderLineTool??null),renderKey:t(()=>e.renderKey??0),marketPrice:t(()=>e.marketPrice??null),tickSize:t(()=>e.tickSize??null),dark:t(()=>e.dark),state:o,onDeleteLine:e=>{r("deleteLine",e)},onLinePriceChange:(e,l)=>{r("linePriceChange",e,l)},onLinePricePreview:(e,l)=>{r("linePricePreview",e,l)},onDragStateChange:e=>{i.value=e,r("dragStateChange",e)},onDraftPricesChange:e=>{a.value=e},onSLTPChange:(e,l,t)=>{r("slTpChange",e,l,t)}};return y(me,s),s},fe=()=>{const e=b(me);if(!e)throw new Error("useEaeraOrderlineOverlay must be used inside EaeraOrderlineOverlay");return e},ge=["onMousedown","onDblclick"],ye=["onDblclick"],be=e({__name:"index",props:{orderLines:{},chartInstance:{},seriesInstance:{},orderLineTool:{},renderKey:{},marketPrice:{},tickSize:{},dark:{type:Boolean}},emits:["deleteLine","linePriceChange","linePricePreview","dragStateChange","slTpChange","stateChange"],setup(e,{expose:a,emit:d}){const m=pe(e,d),{orderLines:y,chartInstance:b,seriesInstance:S,orderLineTool:C,renderKey:w,marketPrice:L,tickSize:E,dark:T,state:B,onDeleteLine:N,onLinePriceChange:z,onLinePricePreview:M,onDragStateChange:D,onDraftPricesChange:I,onSLTPChange:A}=m,F=l(0),R=l(0),$=new Set,O=l(!1);let q=null,H=null,V=null;const j=l(null),U=l(null),Y=l({}),K=()=>b.value,W=()=>S.value,X=(e,l,t)=>Math.min(Math.max(e,l),t),G=(e,l,t)=>{const n=t.filter(e=>e>0),r={height:`${Math.max(l,1)}px`};if(n.length>=2){const[l,t]=n;return{...r,backgroundImage:`repeating-linear-gradient(to right, ${e} 0, ${e} ${l}px, transparent ${l}px, transparent ${l+t}px)`,backgroundSize:`${l+t}px 100%`}}return{...r,backgroundColor:e}},J=()=>{null!==H&&"undefined"!=typeof window&&(window.cancelAnimationFrame(H),H=null)},Q=()=>{R.value+=1,H=window.requestAnimationFrame(Q)},Z=()=>{"undefined"!=typeof window&&null===H&&0!==y.value.length&&(H=window.requestAnimationFrame(Q))},ee=()=>{q?.disconnect(),$.clear()},le=()=>{if("undefined"==typeof ResizeObserver)return;q||(q=new ResizeObserver(()=>{F.value+=1}));const e=K(),l=e?.chartElement(),t=[l,e&&"function"==typeof e.panes?e.panes()[0]?.getHTMLElement?.()??null:null].filter(e=>null!=e);t.length===$.size&&t.every(e=>$.has(e))||(ee(),t.forEach(e=>{q?.observe(e),$.add(e)}),F.value+=1)},te=e=>{const l=(e=>{const l=Number(e);if(!Number.isFinite(l)||l<=0)return 2;const t=l.toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:20}),n=(t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t).split(".")[1];return n?n.length:0})(E.value);return Number(e).toFixed(l)},ne=(e,l)=>{if(!Number.isFinite(l))return l;const t=Number(E.value)||1e-5;if("stop-loss"===e.lineRole&&void 0!==e.entryPrice)return"buy"===e.side?Math.min(l,e.entryPrice-t):Math.max(l,e.entryPrice+t);if("take-profit"===e.lineRole&&void 0!==e.entryPrice)return"buy"===e.side?Math.max(l,e.entryPrice+t):Math.min(l,e.entryPrice-t);const n=(e=>{if("number"==typeof e)return Number.isFinite(e)?e:null;if("string"==typeof e&&""!==e.trim()){const l=Number(e);return Number.isFinite(l)?l:null}return null})(L.value);return null===n?l:"buy"===e.side?Math.min(l,n):"sell"===e.side?Math.max(l,n):l},re=t(()=>{const e=w.value,l=F.value,t=R.value;return e<0||l<0||t<0?null:(()=>{const e=K(),l=j.value?.getBoundingClientRect();if(!e||!l)return null;const t=e.chartElement(),n=t.getBoundingClientRect(),r="function"==typeof e.panes?e.panes()[0]?.getHTMLElement?.()??null:null,i=r?.getBoundingClientRect(),a=e.paneSize?.(0),o=e.priceScale("left").width(),s=e.priceScale("right").width(),u=e.timeScale().height(),d=a?.width??Math.max(0,t.clientWidth-o-s),c=a?.height??Math.max(0,t.clientHeight-u);return{top:(i?i.top:n.top)-l.top,left:n.left-l.left+o,width:d,height:i?.height??c}})()}),ie=t(()=>{const e=re.value;return e?{top:`${e.top}px`,left:`${e.left}px`,width:`${e.width}px`,height:`${e.height}px`}:null}),ae=l(null),oe=l(null),se=new Set;let ue=!0;const me=e=>{const l=y.value.find(l=>l.id===e);l&&(be.value={x:0,y:0},oe.value=e,ae.value=(e=>{const{primary:l,quantity:t}=(e=>{const l=e.split("|").map(e=>e.trim());return{primary:l[0]??"",quantity:l[1]??"",price:l[2]??""}})(e.label),n=e.readonly&&"order"===e.type,r=l.replace(/^[+-]/,""),i=e.parentId??e.id,a=y.value.find(e=>e.parentId===i&&"stop-loss"===e.lineRole),o=y.value.find(e=>e.parentId===i&&"take-profit"===e.lineRole),s=y.value.find(e=>e.id===i),u=s?.price??e.entryPrice??e.price;return{title:n?"Market Order":"Order",statusTagText:t?`${l} ${t}`:l,price:e.price,side:"neutral"!==e.side?e.side:void 0,volume:r,advanced:n,entryPrice:u,initialStopLossEnabled:!!a,initialStopLoss:a?.price,initialTakeProfitEnabled:!!o,initialTakeProfit:o?.price}})(l))};n(()=>y.value,e=>{const l=new Set;for(const t of e)l.add(t.id);se.clear(),l.forEach(e=>se.add(e)),ue?ue=!1:oe.value&&!l.has(oe.value)&&(ae.value=null,oe.value=null)},{deep:!0});const fe=t(()=>!!oe.value&&(y.value.find(e=>e.id===oe.value)?.readonly??!1)),be=l({x:0,y:0}),he=l(!1),_e=t(()=>{const e=K(),l=j.value;return e&&l?{width:l.clientWidth,height:l.clientHeight}:null}),xe=t(()=>{if(!ae.value||!_e.value)return null;const{width:e,height:l}=_e.value,t=X(e-382-20+be.value.x,0,e-382);return{position:"absolute",top:`${X(20+be.value.y,0,l-460)}px`,left:`${t}px`}});let ke=0,Pe=0;const Se=e=>{if(!_e.value)return;e.target.closest('input, button, select, textarea, [role="switch"], [role="checkbox"]')||(he.value=!0,ke=e.clientX-be.value.x,Pe=e.clientY-be.value.y,document.body.style.userSelect="none",window.addEventListener("pointermove",Ce),window.addEventListener("pointerup",we))},Ce=e=>{be.value={x:e.clientX-ke,y:e.clientY-Pe}},we=()=>{he.value=!1,document.body.style.userSelect="",window.removeEventListener("pointermove",Ce),window.removeEventListener("pointerup",we)},Le=e=>{const l=y.value.find(l=>l.id===e);return l?l.parentId??l.id:null},Ee=e=>{const l=Le(oe.value??"");if(!l)return;const t=y.value.find(e=>e.parentId===l&&"take-profit"===e.lineRole),n=t?.price??null,r=e.enabled&&void 0!==e.price?e.price:null;A(l,r,n)},Te=e=>{const l=Le(oe.value??"");if(!l)return;const t=y.value.find(e=>e.parentId===l&&"stop-loss"===e.lineRole),n=t?.price??null,r=e.enabled&&void 0!==e.price?e.price:null;A(l,n,r)},Be=e=>{ae.value=null,oe.value=null},Ne=()=>{ae.value=null,oe.value=null},ze=()=>{oe.value&&(N(oe.value),Ne())},Me=t(()=>"boolean"==typeof T.value?T.value:O.value),De=t(()=>{const e=w.value,l=R.value,t=W(),n=K(),r=re.value;return!t||!n||!r||e<0||l<0?[]:y.value.map(e=>{const l=(e=>Y.value[e.id]??e.price)(e),t=((e,l)=>{const t=W();if(!t)return null;const n=t.priceToCoordinate(e);if(null!==n)return n;const r=t.priceScale().getVisibleRange();if(!r)return null;const i=Math.min(r.from,r.to);return e>Math.max(r.from,r.to)?-1:e<i?l+1:null})(l,r.height);if(null===t)return null;const n=((e,l)=>e<0?"top":e>l?"bottom":"middle")(t,r.height),i=X(t,0,r.height),a=ce(Me.value),o={...ve(e.side,e.type,Me.value,e.lineRole),...e.options},[s,u,d]=((e,l)=>{const t=e.split("|").map(e=>e.trim()),n=te(l);return t.length>=3?(t[t.length-1]=n,t):2===t.length?[...t,n]:1===t.length?[t[0],"",n]:["","",n]})(e.label,l),c=a.textPrimary,[v]=[s],m={volume:v,pnl:u,price:d};return{...e,livePrice:l,edgePlacement:n,orderParts:{primary:v,quantity:u,price:d},positionParts:m,containerStyle:{top:`${i}px`},lineStyle:G(o.lineColor,o.lineWidth,o.lineDash),lineColor:o.lineColor,badgeWrapperStyle:{marginLeft:"12px"},badgeStyle:{borderColor:o.badgeBorderColor,backgroundColor:o.badgeBackgroundColor,color:o.badgeTextColor},middleStyle:{backgroundColor:o.badgeBackgroundColor,color:a.textPrimary},volumeStyle:{backgroundColor:"transparent",color:a.textPrimary},separatorStyle:{backgroundColor:a.borderPrimaryInverse},deleteStyle:{backgroundColor:o.deleteBackgroundColor,color:o.deleteColor,borderColor:o.deleteBorderColor},deleteButtonStyle:{color:o.deleteColor,borderColor:o.deleteBorderColor},priceStyle:{color:a.textPrimary},pnlStyle:{color:c},dragStyle:{backgroundColor:o.handleBackgroundColor,color:o.handleColor}}}).filter(e=>null!==e)}),Ie=()=>{const e=U.value;if(!e)return;const l=Y.value[e];if(U.value=null,D(null),document.body.style.userSelect="",window.removeEventListener("mousemove",Ae),window.removeEventListener("mouseup",Ie),"number"==typeof l){z(e,l);const{[e]:t,...n}=Y.value;Y.value=n,I(n)}},Ae=e=>{const l=U.value,t=W(),n=(()=>{const e=K();if(!e)return null;const l="function"==typeof e.panes?e.panes()[0]?.getHTMLElement?.()??null:null;return l?.getBoundingClientRect()??e.chartElement().getBoundingClientRect()})();if(!l||!t||!n)return;const r=e.clientY-n.top,i=t.coordinateToPrice(r);if("number"!=typeof i||Number.isNaN(i))return;const a=y.value.find(e=>e.id===l);if(!a)return;const o=ne(a,i),s=Number(te(o)),u={...Y.value,[l]:s};Y.value=u,I(u),M(l,s),((e,l)=>{const t=C.value?.orderLines.find(l=>l.localId===e);t?.updatePrice(l)})(l,s)},Fe=e=>{O.value=e.matches};return n(()=>w.value,()=>{le()},{immediate:!0}),n(()=>y.value.length,e=>{e>0?Z():J()},{immediate:!0}),_(()=>{le(),Z(),"undefined"!=typeof window&&"function"==typeof window.matchMedia&&(V=window.matchMedia("(prefers-color-scheme: dark)"),O.value=V.matches,V.addEventListener("change",Fe))}),x(()=>{window.removeEventListener("mousemove",Ae),window.removeEventListener("mouseup",Ie),window.removeEventListener("pointermove",Ce),window.removeEventListener("pointerup",we),ee(),J(),V?.removeEventListener("change",Fe),V=null}),a({state:B,openMenu:e=>{be.value={x:0,y:0},oe.value=e.lineId??null,ae.value=e.menuData}}),(e,l)=>(r(),i("div",{ref_key:"overlayRootRef",ref:j,class:"custom-order-line-overlay"},[ie.value?(r(),i("div",{key:0,class:"custom-order-line-overlay__pane",style:k(ie.value)},[(r(!0),i(f,null,P(De.value,e=>(r(),i("div",{key:e.id,class:g(["custom-order-line-item",`custom-order-line-item--edge-${e.edgePlacement}`]),style:k(e.containerStyle)},["middle"===e.edgePlacement?(r(),i("div",{key:0,class:g(["custom-order-line-item__line",{"custom-order-line-item__line--draggable":"order"===e.type&&!e.readonly,"custom-order-line-item__line--clickable":e.readonly}]),style:k(e.lineStyle),onMousedown:l=>{return"order"!==e.type||e.readonly?void 0:(t=e.id,(n=l).preventDefault(),n.stopPropagation(),U.value=t,D(t),document.body.style.userSelect="none",window.addEventListener("mousemove",Ae),void window.addEventListener("mouseup",Ie));var t,n},onDblclick:l=>e.readonly?me(e.id):void 0},null,46,ge)):u("",!0),o("div",{class:g(["custom-order-line-item__label",{"custom-order-line-item__label--clickable":e.readonly}]),style:k({color:e.lineColor}),onDblclick:l=>e.readonly?me(e.id):void 0},[p(s(e.orderParts.primary)+" ",1),l[0]||(l[0]=o("span",{class:"custom-order-line-item__label-sep"},"·",-1)),p(" "+s(e.orderParts.quantity)+" ",1),l[1]||(l[1]=o("span",{class:"custom-order-line-item__label-sep"},"·",-1)),p(" "+s(e.orderParts.price),1)],46,ye)],6))),128))],4)):u("",!0),ae.value&&xe.value?(r(),v(de,{key:1,class:g(["custom-order-line-overlay__menu",{"custom-order-line-overlay__menu--dragging":he.value}]),style:k(xe.value),title:ae.value.title,"status-tag-text":ae.value.statusTagText,"reference-price":ae.value.entryPrice??ae.value.price,"tick-size":c(E),side:ae.value.side,advanced:ae.value.advanced,"initial-volume":ae.value.volume,"initial-stop-loss":ae.value.initialStopLoss,"initial-take-profit":ae.value.initialTakeProfit,"initial-stop-loss-enabled":ae.value.initialStopLossEnabled,"initial-take-profit-enabled":ae.value.initialTakeProfitEnabled,"price-disabled":fe.value,"volume-disabled":fe.value,onPointerdown:Se,onClose:Ne,onConfirm:Be,onDiscard:ze,"onUpdate:stopLoss":Ee,"onUpdate:takeProfit":Te},null,8,["class","style","title","status-tag-text","reference-price","tick-size","side","advanced","initial-volume","initial-stop-loss","initial-take-profit","initial-stop-loss-enabled","initial-take-profit-enabled","price-disabled","volume-disabled"])):u("",!0)],512))}});export{de as O,be as _,pe as p,fe as u};
|
|
1
|
+
import{defineComponent as e,ref as l,computed as t,watch as n,openBlock as r,createElementBlock as i,withModifiers as a,createElementVNode as o,toDisplayString as s,createCommentVNode as u,createVNode as d,unref as c,createBlock as v,withCtx as m,createTextVNode as p,Fragment as f,normalizeClass as g,provide as y,inject as b,onMounted as _,onBeforeUnmount as x,normalizeStyle as k,renderList as P}from"vue";import{_ as S}from"./EaeraButton-BPVKRBOn.mjs";import{_ as C}from"./EaeraInput-CkbcAxy0.mjs";import{_ as w}from"./EaeraCheckbox-C_faN0pV.mjs";import{_ as L}from"./EaeraSwitch-BI3E0zPf.mjs";import{_ as E}from"./EaeraInputNumber-COC6rdNn.mjs";import{_ as T}from"./EaeraTag-BgmzVuUW.mjs";import{X as B}from"@lucide/vue";import{_ as N}from"./_plugin-vue_export-helper-BCo6x5W8.mjs";const z={class:"orderline-context-menu__header"},M={class:"orderline-context-menu__title-group"},D={class:"orderline-context-menu__title"},I={key:0,class:"orderline-context-menu__status"},A={class:"orderline-context-menu__status-text"},F={key:0,class:"orderline-context-menu__market"},R={class:"orderline-context-menu__market-left"},$={key:1,class:"orderline-context-menu__prices"},O={class:"orderline-context-menu__price-value"},q={key:1,class:"orderline-context-menu__price-sep"},H={class:"orderline-context-menu__price-value"},V={key:0,class:"orderline-context-menu__symbol-info"},j={class:"orderline-context-menu__symbol"},U={class:"orderline-context-menu__inputs"},Y={class:"orderline-context-menu__field"},K={key:0,class:"orderline-context-menu__field"},W={class:"orderline-context-menu__field"},X={key:1,class:"orderline-context-menu__margin"},G={class:"orderline-context-menu__advanced-toggle"},J={class:"orderline-context-menu__sl-tp"},Q={class:"orderline-context-menu__field"},Z={class:"orderline-context-menu__field-header"},ee={class:"orderline-context-menu__field-label-inline"},le={key:0,class:"orderline-context-menu__field-error"},te={class:"orderline-context-menu__field"},ne={class:"orderline-context-menu__field-header"},re={class:"orderline-context-menu__field-label-inline"},ie={key:0,class:"orderline-context-menu__field-error"},ae={class:"orderline-context-menu__comment"},oe={class:"orderline-context-menu__comment-header"},se={class:"orderline-context-menu__comment-counter"},ue={class:"orderline-context-menu__actions"},de=N(e({__name:"OrderlineContextMenu",props:{title:{},statusTagText:{default:""},side:{default:void 0},bid:{default:null},ask:{default:null},symbol:{default:""},advanced:{type:Boolean,default:!1},showStopLimitPrice:{type:Boolean,default:!1},marginText:{default:""},initialPrice:{default:""},initialStopLimitPrice:{default:""},initialVolume:{default:"0.01"},initialStopLoss:{default:""},initialTakeProfit:{default:""},initialStopLossEnabled:{type:Boolean,default:!1},initialTakeProfitEnabled:{type:Boolean,default:!1},initialComment:{default:""},referencePrice:{default:null},tickSize:{default:null},priceDisabled:{type:Boolean,default:!1},volumeDisabled:{type:Boolean,default:!1}},emits:["confirm","discard","close","update:advanced","update:stop-loss","update:take-profit"],setup(e,{emit:y}){const b=e,_=y,x=l(null!==b.initialPrice&&void 0!==b.initialPrice?String(b.initialPrice):b.referencePrice?String(b.referencePrice):""),k=l(null!==b.initialStopLimitPrice&&void 0!==b.initialStopLimitPrice?String(b.initialStopLimitPrice):""),P=l(null!==b.initialVolume&&void 0!==b.initialVolume?String(b.initialVolume):""),N=l(b.initialStopLossEnabled),de=l(null!==b.initialStopLoss&&void 0!==b.initialStopLoss?String(b.initialStopLoss):""),ce=l(b.initialTakeProfitEnabled),ve=l(null!==b.initialTakeProfit&&void 0!==b.initialTakeProfit?String(b.initialTakeProfit):""),me=l(b.initialComment),pe=t(()=>{const e=Number(de.value);return Number.isFinite(e)?e:void 0}),fe=t(()=>{const e=Number(ve.value);return Number.isFinite(e)?e:void 0}),ge=t(()=>{const e=Number(b.tickSize);return Number.isFinite(e)&&e>0?e:1e-5}),ye=t(()=>{const e=Number(b.referencePrice);return Number.isFinite(e)?e:null}),be=t(()=>N.value&&void 0!==pe.value&&null!==ye.value&&pe.value>=ye.value?"Must be below order price":""),he=t(()=>ce.value&&void 0!==fe.value&&null!==ye.value&&fe.value<=ye.value?"Must be above order price":""),_e=()=>{_("update:stop-loss",{enabled:N.value,price:pe.value})},xe=()=>{_("update:take-profit",{enabled:ce.value,price:fe.value})};n(()=>b.initialPrice,e=>{null!=e&&(x.value=String(e))}),n(()=>b.initialStopLoss,e=>{de.value=null!=e?String(e):""}),n(()=>b.initialTakeProfit,e=>{ve.value=null!=e?String(e):""}),n(()=>b.initialComment,e=>{me.value=e??""});const ke=e=>{x.value=null==e?"":String(e)},Pe=e=>{k.value=null==e?"":String(e)},Se=e=>{P.value=null==e?"":String(e)},Ce=e=>{de.value=null==e?"":String(e),_e()},we=e=>{ve.value=null==e?"":String(e),xe()},Le=e=>{me.value=e??""},Ee=()=>{_("confirm",{price:x.value,stopLimitPrice:k.value,volume:P.value,stopLossEnabled:N.value,stopLoss:de.value,takeProfitEnabled:ce.value,takeProfit:ve.value,comment:me.value}),_("close")},Te=()=>{_("discard"),_("close")};return(l,t)=>{const n=T,y=E,Be=L,Ne=w,ze=C,Me=S;return r(),i("div",{class:"orderline-context-menu",onMousedown:t[4]||(t[4]=a(()=>{},["stop"]))},[o("div",z,[o("div",M,[o("span",D,s(e.title),1),e.statusTagText?(r(),i("div",I,[t[5]||(t[5]=o("span",{class:"orderline-context-menu__status-dot"},null,-1)),o("span",A,s(e.statusTagText),1)])):u("",!0)]),o("button",{type:"button",class:"orderline-context-menu__close","aria-label":"Close",onClick:t[0]||(t[0]=e=>_("close"))},[d(c(B),{size:18})])]),e.side||e.bid||e.ask?(r(),i("div",F,[o("div",R,[e.side?(r(),v(n,{key:0,color:"buy"===e.side?"success":"danger",size:"sm",effect:"light",round:!1},{default:m(()=>[p(s("buy"===e.side?"BUY":"SELL"),1)]),_:1},8,["color"])):u("",!0),e.bid||e.ask?(r(),i("div",$,[e.bid?(r(),i(f,{key:0},[t[6]||(t[6]=o("span",{class:"orderline-context-menu__price-label"},"Bid",-1)),o("span",O,s(e.bid),1)],64)):u("",!0),e.bid&&e.ask?(r(),i("span",q,"/")):u("",!0),e.ask?(r(),i(f,{key:2},[t[7]||(t[7]=o("span",{class:"orderline-context-menu__price-label"},"Ask",-1)),o("span",H,s(e.ask),1)],64)):u("",!0)])):u("",!0)]),e.symbol?(r(),i("div",V,[o("span",j,s(e.symbol),1),t[8]||(t[8]=o("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none"},[o("circle",{cx:"6",cy:"6",r:"5.25",stroke:"currentColor","stroke-width":"1"}),o("path",{d:"M6 5v3.5M6 3.5v.5",stroke:"currentColor","stroke-width":"1","stroke-linecap":"round"})],-1))])):u("",!0)])):u("",!0),o("div",U,[o("div",Y,[t[9]||(t[9]=o("div",{class:"orderline-context-menu__field-label"},[o("span",null,"Price"),o("span",{class:"orderline-context-menu__required"},"*")],-1)),d(y,{value:x.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:ge.value,disabled:e.priceDisabled},class:"w-full",onHandleChange:ke},null,8,["value","other-props"])]),e.showStopLimitPrice?(r(),i("div",K,[t[10]||(t[10]=o("div",{class:"orderline-context-menu__field-label"},[o("span",null,"Stop Limit Price"),o("span",{class:"orderline-context-menu__required"},"*")],-1)),d(y,{value:k.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:ge.value},class:"w-full",onHandleChange:Pe},null,8,["value","other-props"])])):u("",!0),o("div",W,[t[11]||(t[11]=o("div",{class:"orderline-context-menu__field-label"},[o("span",null,"Volume"),o("span",{class:"orderline-context-menu__required"},"*")],-1)),d(y,{value:P.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:.01,disabled:e.volumeDisabled},class:"w-full",onHandleChange:Se},null,8,["value","other-props"])])]),e.marginText?(r(),i("p",X,s(e.marginText),1)):u("",!0),o("div",G,[o("span",{class:g(["orderline-context-menu__advanced-label",{"orderline-context-menu__advanced-label--active":e.advanced}])}," Advanced ",2),d(Be,{"model-value":e.advanced,size:"sm","onUpdate:modelValue":t[1]||(t[1]=e=>_("update:advanced",e))},null,8,["model-value"])]),e.advanced?(r(),i(f,{key:2},[o("div",J,[o("div",Q,[o("div",Z,[o("div",ee,[d(Ne,{"model-value":N.value,size:"sm",color:"success","onUpdate:modelValue":t[2]||(t[2]=e=>(e=>{if(N.value=e,e&&!de.value&&null!==ye.value){const e=ge.value,l="buy"===b.side?ye.value-20*e:ye.value+20*e;de.value=String(Number(l.toFixed(8)))}_e()})(Boolean(e)))},null,8,["model-value"]),t[12]||(t[12]=o("span",null,"Stop Loss",-1))]),t[13]||(t[13]=o("span",{class:"orderline-context-menu__required"},"*",-1))]),d(y,{value:pe.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:ge.value,disabled:!N.value},class:"w-full",onHandleChange:Ce},null,8,["value","other-props"]),be.value?(r(),i("span",le,s(be.value),1)):u("",!0)]),o("div",te,[o("div",ne,[o("div",re,[t[14]||(t[14]=o("span",null,"Take Profit",-1)),d(Ne,{"model-value":ce.value,size:"sm",color:"success","onUpdate:modelValue":t[3]||(t[3]=e=>(e=>{if(ce.value=e,e&&!ve.value&&null!==ye.value){const e=ge.value,l="buy"===b.side?ye.value+30*e:ye.value-30*e;ve.value=String(Number(l.toFixed(8)))}xe()})(Boolean(e)))},null,8,["model-value"])]),t[15]||(t[15]=o("span",{class:"orderline-context-menu__required"},"*",-1))]),d(y,{value:fe.value,placeholder:"0",controls:!0,size:"sm","other-props":{min:0,step:ge.value,disabled:!ce.value},class:"w-full",onHandleChange:we},null,8,["value","other-props"]),he.value?(r(),i("span",ie,s(he.value),1)):u("",!0)])]),o("div",ae,[o("div",oe,[t[16]||(t[16]=o("span",null,"Comment",-1)),o("span",se,s(me.value.length)+"/"+s(30),1)]),d(ze,{value:me.value,placeholder:"Add a comment",size:"sm","other-props":{maxlength:30},class:"w-full",onHandleChange:Le},null,8,["value","other-props"])])],64)):u("",!0),o("div",ue,[d(Me,{color:"contrast",plain:"",size:"sm",onClick:Te},{default:m(()=>[...t[17]||(t[17]=[p("Discard",-1)])]),_:1}),d(Me,{color:"primary",size:"sm",onClick:Ee},{default:m(()=>[...t[18]||(t[18]=[p("Confirm",-1)])]),_:1})])],32)}}}),[["__scopeId","data-v-2d8976ac"]]),ce=e=>e?{surfacePrimary:"#191D23",surfacePositive:"#16c784",surfaceNegative:"#ef4444",surfaceElevated:"#323A45",surfaceAction:"#A259FB",textPrimary:"#F0F1F3",textSecondary:"#B1B9C5",borderPrimary:"#323A45",borderPrimaryInverse:"#D8DCE2",borderAction:"#A259FB"}:{surfacePrimary:"white",surfacePositive:"#16c784",surfaceNegative:"#ef4444",surfaceElevated:"#d8dce2",surfaceAction:"#A259FB",textPrimary:"#0f1115",textSecondary:"#4b5768",borderPrimary:"#d8dce2",borderPrimaryInverse:"#323a45",borderAction:"#A259FB"},ve=(e="neutral",l="order",t,n)=>{const r=ce(t),i="position"===l;let a;return a="stop-loss"===n?r.surfaceNegative:"take-profit"===n?r.surfacePositive:i?r.borderAction:"buy"===e?r.surfacePositive:"sell"===e?r.surfaceNegative:r.borderAction,{lineColor:a,lineWidth:2,lineDash:[0,0],badgeBackgroundColor:r.surfacePrimary,badgeBorderColor:a,badgeTextColor:i?r.textPrimary:a,handleColor:a,handleBackgroundColor:i?r.surfacePrimary:"transparent",handleBorderColor:i?r.surfacePrimary:"transparent",deleteColor:i?r.textPrimary:a,deleteBackgroundColor:i?r.borderAction:r.surfacePrimary,deleteBorderColor:a,fontSize:12}},me=Symbol("EAERA_ORDERLINE_OVERLAY_CONTEXT_KEY"),pe=(e,r)=>{const i=l(null),a=l({}),o=t(()=>({draggingLineId:i.value,draftPrices:a.value}));n(o,e=>{r("stateChange",e)},{immediate:!0});const s={orderLines:t(()=>e.orderLines??[]),chartInstance:t(()=>e.chartInstance??null),seriesInstance:t(()=>e.seriesInstance??null),orderLineTool:t(()=>e.orderLineTool??null),renderKey:t(()=>e.renderKey??0),marketPrice:t(()=>e.marketPrice??null),tickSize:t(()=>e.tickSize??null),dark:t(()=>e.dark),state:o,onDeleteLine:e=>{r("deleteLine",e)},onLinePriceChange:(e,l)=>{r("linePriceChange",e,l)},onLinePricePreview:(e,l)=>{r("linePricePreview",e,l)},onDragStateChange:e=>{i.value=e,r("dragStateChange",e)},onDraftPricesChange:e=>{a.value=e},onSLTPChange:(e,l,t)=>{r("slTpChange",e,l,t)}};return y(me,s),s},fe=()=>{const e=b(me);if(!e)throw new Error("useEaeraOrderlineOverlay must be used inside EaeraOrderlineOverlay");return e},ge=["onMousedown","onDblclick"],ye=["onDblclick"],be=e({__name:"index",props:{orderLines:{},chartInstance:{},seriesInstance:{},orderLineTool:{},renderKey:{},marketPrice:{},tickSize:{},dark:{type:Boolean}},emits:["deleteLine","linePriceChange","linePricePreview","dragStateChange","slTpChange","stateChange"],setup(e,{expose:a,emit:d}){const m=pe(e,d),{orderLines:y,chartInstance:b,seriesInstance:S,orderLineTool:C,renderKey:w,marketPrice:L,tickSize:E,dark:T,state:B,onDeleteLine:N,onLinePriceChange:z,onLinePricePreview:M,onDragStateChange:D,onDraftPricesChange:I,onSLTPChange:A}=m,F=l(0),R=l(0),$=new Set,O=l(!1);let q=null,H=null,V=null;const j=l(null),U=l(null),Y=l({}),K=()=>b.value,W=()=>S.value,X=(e,l,t)=>Math.min(Math.max(e,l),t),G=(e,l,t)=>{const n=t.filter(e=>e>0),r={height:`${Math.max(l,1)}px`};if(n.length>=2){const[l,t]=n;return{...r,backgroundImage:`repeating-linear-gradient(to right, ${e} 0, ${e} ${l}px, transparent ${l}px, transparent ${l+t}px)`,backgroundSize:`${l+t}px 100%`}}return{...r,backgroundColor:e}},J=()=>{null!==H&&"undefined"!=typeof window&&(window.cancelAnimationFrame(H),H=null)},Q=()=>{R.value+=1,H=window.requestAnimationFrame(Q)},Z=()=>{"undefined"!=typeof window&&null===H&&0!==y.value.length&&(H=window.requestAnimationFrame(Q))},ee=()=>{q?.disconnect(),$.clear()},le=()=>{if("undefined"==typeof ResizeObserver)return;q||(q=new ResizeObserver(()=>{F.value+=1}));const e=K(),l=e?.chartElement(),t=[l,e&&"function"==typeof e.panes?e.panes()[0]?.getHTMLElement?.()??null:null].filter(e=>null!=e);t.length===$.size&&t.every(e=>$.has(e))||(ee(),t.forEach(e=>{q?.observe(e),$.add(e)}),F.value+=1)},te=e=>{const l=(e=>{const l=Number(e);if(!Number.isFinite(l)||l<=0)return 2;const t=l.toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:20}),n=(t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t).split(".")[1];return n?n.length:0})(E.value);return Number(e).toFixed(l)},ne=(e,l)=>{if(!Number.isFinite(l))return l;const t=Number(E.value)||1e-5;if("stop-loss"===e.lineRole&&void 0!==e.entryPrice)return"buy"===e.side?Math.min(l,e.entryPrice-t):Math.max(l,e.entryPrice+t);if("take-profit"===e.lineRole&&void 0!==e.entryPrice)return"buy"===e.side?Math.max(l,e.entryPrice+t):Math.min(l,e.entryPrice-t);const n=(e=>{if("number"==typeof e)return Number.isFinite(e)?e:null;if("string"==typeof e&&""!==e.trim()){const l=Number(e);return Number.isFinite(l)?l:null}return null})(L.value);return null===n?l:"buy"===e.side?Math.min(l,n):"sell"===e.side?Math.max(l,n):l},re=t(()=>{const e=w.value,l=F.value,t=R.value;return e<0||l<0||t<0?null:(()=>{const e=K(),l=j.value?.getBoundingClientRect();if(!e||!l)return null;const t=e.chartElement(),n=t.getBoundingClientRect(),r="function"==typeof e.panes?e.panes()[0]?.getHTMLElement?.()??null:null,i=r?.getBoundingClientRect(),a=e.paneSize?.(0),o=e.priceScale("left").width(),s=e.priceScale("right").width(),u=e.timeScale().height(),d=a?.width??Math.max(0,t.clientWidth-o-s),c=a?.height??Math.max(0,t.clientHeight-u);return{top:(i?i.top:n.top)-l.top,left:n.left-l.left+o,width:d,height:i?.height??c}})()}),ie=t(()=>{const e=re.value;return e?{top:`${e.top}px`,left:`${e.left}px`,width:`${e.width}px`,height:`${e.height}px`}:null}),ae=l(null),oe=l(null),se=new Set;let ue=!0;const me=e=>{const l=y.value.find(l=>l.id===e);l&&(be.value={x:0,y:0},oe.value=e,ae.value=(e=>{const{primary:l,quantity:t}=(e=>{const l=e.split("|").map(e=>e.trim());return{primary:l[0]??"",quantity:l[1]??"",price:l[2]??""}})(e.label),n=e.readonly&&"order"===e.type,r=l.replace(/^[+-]/,""),i=e.parentId??e.id,a=y.value.find(e=>e.parentId===i&&"stop-loss"===e.lineRole),o=y.value.find(e=>e.parentId===i&&"take-profit"===e.lineRole),s=y.value.find(e=>e.id===i),u=s?.price??e.entryPrice??e.price;return{title:n?"Market Order":"Order",statusTagText:t?`${l} ${t}`:l,price:e.price,side:"neutral"!==e.side?e.side:void 0,volume:r,advanced:n,entryPrice:u,initialStopLossEnabled:!!a,initialStopLoss:a?.price,initialTakeProfitEnabled:!!o,initialTakeProfit:o?.price}})(l))};n(()=>y.value,e=>{const l=new Set;for(const t of e)l.add(t.id);se.clear(),l.forEach(e=>se.add(e)),ue?ue=!1:oe.value&&!l.has(oe.value)&&(ae.value=null,oe.value=null)},{deep:!0});const fe=t(()=>!!oe.value&&(y.value.find(e=>e.id===oe.value)?.readonly??!1)),be=l({x:0,y:0}),he=l(!1),_e=t(()=>{const e=K(),l=j.value;return e&&l?{width:l.clientWidth,height:l.clientHeight}:null}),xe=t(()=>{if(!ae.value||!_e.value)return null;const{width:e,height:l}=_e.value,t=X(e-382-20+be.value.x,0,e-382);return{position:"absolute",top:`${X(20+be.value.y,0,l-460)}px`,left:`${t}px`}});let ke=0,Pe=0;const Se=e=>{if(!_e.value)return;e.target.closest('input, button, select, textarea, [role="switch"], [role="checkbox"]')||(he.value=!0,ke=e.clientX-be.value.x,Pe=e.clientY-be.value.y,document.body.style.userSelect="none",window.addEventListener("pointermove",Ce),window.addEventListener("pointerup",we))},Ce=e=>{be.value={x:e.clientX-ke,y:e.clientY-Pe}},we=()=>{he.value=!1,document.body.style.userSelect="",window.removeEventListener("pointermove",Ce),window.removeEventListener("pointerup",we)},Le=e=>{const l=y.value.find(l=>l.id===e);return l?l.parentId??l.id:null},Ee=e=>{const l=Le(oe.value??"");if(!l)return;const t=y.value.find(e=>e.parentId===l&&"take-profit"===e.lineRole),n=t?.price??null,r=e.enabled&&void 0!==e.price?e.price:null;A(l,r,n)},Te=e=>{const l=Le(oe.value??"");if(!l)return;const t=y.value.find(e=>e.parentId===l&&"stop-loss"===e.lineRole),n=t?.price??null,r=e.enabled&&void 0!==e.price?e.price:null;A(l,n,r)},Be=e=>{ae.value=null,oe.value=null},Ne=()=>{ae.value=null,oe.value=null},ze=()=>{oe.value&&(N(oe.value),Ne())},Me=t(()=>"boolean"==typeof T.value?T.value:O.value),De=t(()=>{const e=w.value,l=R.value,t=W(),n=K(),r=re.value;return!t||!n||!r||e<0||l<0?[]:y.value.map(e=>{const l=(e=>Y.value[e.id]??e.price)(e),t=((e,l)=>{const t=W();if(!t)return null;const n=t.priceToCoordinate(e);if(null!==n)return n;const r=t.priceScale().getVisibleRange();if(!r)return null;const i=Math.min(r.from,r.to);return e>Math.max(r.from,r.to)?-1:e<i?l+1:null})(l,r.height);if(null===t)return null;const n=((e,l)=>e<0?"top":e>l?"bottom":"middle")(t,r.height),i=X(t,0,r.height),a=ce(Me.value),o={...ve(e.side,e.type,Me.value,e.lineRole),...e.options},[s,u,d]=((e,l)=>{const t=e.split("|").map(e=>e.trim()),n=te(l);return t.length>=3?(t[t.length-1]=n,t):2===t.length?[...t,n]:1===t.length?[t[0],"",n]:["","",n]})(e.label,l),c=a.textPrimary,[v]=[s],m={volume:v,pnl:u,price:d};return{...e,livePrice:l,edgePlacement:n,orderParts:{primary:v,quantity:u,price:d},positionParts:m,containerStyle:{top:`${i}px`},lineStyle:G(o.lineColor,o.lineWidth,o.lineDash),lineColor:o.lineColor,badgeWrapperStyle:{marginLeft:"12px"},badgeStyle:{borderColor:o.badgeBorderColor,backgroundColor:o.badgeBackgroundColor,color:o.badgeTextColor},middleStyle:{backgroundColor:o.badgeBackgroundColor,color:a.textPrimary},volumeStyle:{backgroundColor:"transparent",color:a.textPrimary},separatorStyle:{backgroundColor:a.borderPrimaryInverse},deleteStyle:{backgroundColor:o.deleteBackgroundColor,color:o.deleteColor,borderColor:o.deleteBorderColor},deleteButtonStyle:{color:o.deleteColor,borderColor:o.deleteBorderColor},priceStyle:{color:a.textPrimary},pnlStyle:{color:c},dragStyle:{backgroundColor:o.handleBackgroundColor,color:o.handleColor}}}).filter(e=>null!==e)}),Ie=()=>{const e=U.value;if(!e)return;const l=Y.value[e];if(U.value=null,D(null),document.body.style.userSelect="",window.removeEventListener("mousemove",Ae),window.removeEventListener("mouseup",Ie),"number"==typeof l){z(e,l);const{[e]:t,...n}=Y.value;Y.value=n,I(n)}},Ae=e=>{const l=U.value,t=W(),n=(()=>{const e=K();if(!e)return null;const l="function"==typeof e.panes?e.panes()[0]?.getHTMLElement?.()??null:null;return l?.getBoundingClientRect()??e.chartElement().getBoundingClientRect()})();if(!l||!t||!n)return;const r=e.clientY-n.top,i=t.coordinateToPrice(r);if("number"!=typeof i||Number.isNaN(i))return;const a=y.value.find(e=>e.id===l);if(!a)return;const o=ne(a,i),s=Number(te(o)),u={...Y.value,[l]:s};Y.value=u,I(u),M(l,s),((e,l)=>{const t=C.value?.orderLines.find(l=>l.localId===e);t?.updatePrice(l)})(l,s)},Fe=e=>{O.value=e.matches};return n(()=>w.value,()=>{le()},{immediate:!0}),n(()=>y.value.length,e=>{e>0?Z():J()},{immediate:!0}),_(()=>{le(),Z(),"undefined"!=typeof window&&"function"==typeof window.matchMedia&&(V=window.matchMedia("(prefers-color-scheme: dark)"),O.value=V.matches,V.addEventListener("change",Fe))}),x(()=>{window.removeEventListener("mousemove",Ae),window.removeEventListener("mouseup",Ie),window.removeEventListener("pointermove",Ce),window.removeEventListener("pointerup",we),ee(),J(),V?.removeEventListener("change",Fe),V=null}),a({state:B,openMenu:e=>{be.value={x:0,y:0},oe.value=e.lineId??null,ae.value=e.menuData}}),(e,l)=>(r(),i("div",{ref_key:"overlayRootRef",ref:j,class:"custom-order-line-overlay"},[ie.value?(r(),i("div",{key:0,class:"custom-order-line-overlay__pane",style:k(ie.value)},[(r(!0),i(f,null,P(De.value,e=>(r(),i("div",{key:e.id,class:g(["custom-order-line-item",`custom-order-line-item--edge-${e.edgePlacement}`]),style:k(e.containerStyle)},["middle"===e.edgePlacement?(r(),i("div",{key:0,class:g(["custom-order-line-item__line",{"custom-order-line-item__line--draggable":"order"===e.type&&!e.readonly,"custom-order-line-item__line--clickable":e.readonly}]),style:k(e.lineStyle),onMousedown:l=>{return"order"!==e.type||e.readonly?void 0:(t=e.id,(n=l).preventDefault(),n.stopPropagation(),U.value=t,D(t),document.body.style.userSelect="none",window.addEventListener("mousemove",Ae),void window.addEventListener("mouseup",Ie));var t,n},onDblclick:l=>e.readonly?me(e.id):void 0},null,46,ge)):u("",!0),o("div",{class:g(["custom-order-line-item__label",{"custom-order-line-item__label--clickable":e.readonly}]),style:k({color:e.lineColor}),onDblclick:l=>e.readonly?me(e.id):void 0},[p(s(e.orderParts.primary)+" ",1),l[0]||(l[0]=o("span",{class:"custom-order-line-item__label-sep"},"·",-1)),p(" "+s(e.orderParts.quantity)+" ",1),l[1]||(l[1]=o("span",{class:"custom-order-line-item__label-sep"},"·",-1)),p(" "+s(e.orderParts.price),1)],46,ye)],6))),128))],4)):u("",!0),ae.value&&xe.value?(r(),v(de,{key:1,class:g(["custom-order-line-overlay__menu",{"custom-order-line-overlay__menu--dragging":he.value}]),style:k(xe.value),title:ae.value.title,"status-tag-text":ae.value.statusTagText,"reference-price":ae.value.entryPrice??ae.value.price,"tick-size":c(E),side:ae.value.side,advanced:ae.value.advanced,"initial-volume":ae.value.volume,"initial-stop-loss":ae.value.initialStopLoss,"initial-take-profit":ae.value.initialTakeProfit,"initial-stop-loss-enabled":ae.value.initialStopLossEnabled,"initial-take-profit-enabled":ae.value.initialTakeProfitEnabled,"price-disabled":fe.value,"volume-disabled":fe.value,onPointerdown:Se,onClose:Ne,onConfirm:Be,onDiscard:ze,"onUpdate:stopLoss":Ee,"onUpdate:takeProfit":Te},null,8,["class","style","title","status-tag-text","reference-price","tick-size","side","advanced","initial-volume","initial-stop-loss","initial-take-profit","initial-stop-loss-enabled","initial-take-profit-enabled","price-disabled","volume-disabled"])):u("",!0)],512))}});export{de as O,be as _,pe as p,fe as u};
|