@kodiak-finance/orderly-trading 2.8.13 → 2.8.14-prerelease.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useTradingLocalStorage.ts","../src/hooks/usePositionsCount.ts","../src/hooks/usePendingOrderCount.ts","../src/hooks/index.ts","../src/provider/tradingPageContext.tsx","../src/components/desktop/dataList/dataList.script.tsx","../src/components/desktop/dataList/setting/setting.ui.tsx","../src/components/desktop/dataList/setting/setting.script.tsx","../src/components/desktop/dataList/setting/setting.widget.tsx","../src/components/desktop/dataList/setting/index.ts","../src/components/base/positionHeader/positionHeader.ui.tsx","../src/components/base/positionHeader/positionHeader.script.tsx","../src/components/base/positionHeader/positionHeader.widget.tsx","../src/components/base/positionHeader/index.ts","../src/components/desktop/dataList/dataList.ui.tsx","../src/components/desktop/dataList/dataList.widget.tsx","../src/components/desktop/dataList/index.ts","../src/components/base/lastTrades/lastTrades.ui.tsx","../src/components/base/lastTrades/lastTrades.script.tsx","../src/components/base/lastTrades/lastTrades.widget.tsx","../src/components/base/lastTrades/index.ts","../src/components/desktop/assetView/faucet/faucet.ui.tsx","../src/components/desktop/assetView/faucet/faucet.script.tsx","../src/components/desktop/assetView/faucet/faucet.widget.tsx","../src/components/desktop/assetView/assetView.ui.tsx","../src/components/desktop/assetView/assetView.script.tsx","../src/components/desktop/assetView/assetView.widget.tsx","../src/components/desktop/assetView/index.ts","../src/components/base/orderBook/orderContext.tsx","../src/components/base/orderBook/types.ts","../src/components/base/orderBook/cellBar.tsx","../src/components/desktop/orderBook/cell.desktop.tsx","../src/components/desktop/orderBook/listBox.desktop.tsx","../src/components/desktop/orderBook/asks.desktop.tsx","../src/components/desktop/orderBook/bids.desktop.tsx","../src/components/desktop/orderBook/depthSelect.desktop.tsx","../src/components/desktop/orderBook/header.desktop.tsx","../src/components/base/orderBook/midPriceView.tsx","../src/components/base/orderBook/markPrice.tsx","../src/components/desktop/orderBook/markPrice.desktop.tsx","../src/components/desktop/orderBook/index.desktop.tsx","../src/components/mobile/fundingRate/fundingRate.ui.tsx","../src/components/mobile/fundingRateModal/fundingRateModal.script.tsx","../src/components/mobile/fundingRateModal/fundingRateModal.ui.tsx","../src/components/mobile/fundingRateModal/fundingRateModal.widget.tsx","../src/components/mobile/fundingRate/fundingRate.script.tsx","../src/components/mobile/fundingRate/fundingRate.widget.tsx","../src/components/mobile/fundingRate/index.ts","../src/components/mobile/orderBook/cell.tsx","../src/components/mobile/orderBook/listBox.tsx","../src/components/mobile/orderBook/asks.tsx","../src/components/mobile/orderBook/bids.tsx","../src/components/mobile/orderBook/depthSelect.tsx","../src/components/mobile/orderBook/header.tsx","../src/components/mobile/orderBook/markPrice.tsx","../src/components/mobile/orderBook/index.tsx","../src/components/base/orderBook/orderBook.ui.tsx","../src/utils/utils.ts","../src/components/base/orderBook/orderBook.script.tsx","../src/components/base/orderBook/orderBook.widget.tsx","../src/components/base/orderBook/index.ts","../src/components/desktop/riskRate/riskRate.ui.tsx","../src/components/desktop/riskRate/riskRate.script.tsx","../src/components/desktop/riskRate/riskRate.widget.tsx","../src/components/desktop/riskRate/index.ts","../src/components/desktop/orderBookAndTrades/orderBookAndTrades.ui.tsx","../src/components/desktop/orderBookAndTrades/orderBookAndTrades.script.tsx","../src/components/desktop/orderBookAndTrades/orderBookAndTrades.widget.tsx","../src/components/desktop/orderBookAndTrades/index.ts","../src/components/desktop/layout/switchLayout.tsx","../src/components/mobile/topTab/topTab.script.tsx","../src/components/mobile/tradingview/tradingview.script.tsx","../src/components/base/icons.tsx","../src/components/mobile/tradingview/tradingview.ui.tsx","../src/components/mobile/tradingview/tradingview.widget.tsx","../src/components/mobile/lastTrades/lastTrades.widget.tsx","../src/components/mobile/tradeData/tradeData.ui.tsx","../src/components/mobile/tradeData/tradeData.script.tsx","../src/components/mobile/tradeData/tradeData.widget.tsx","../src/components/mobile/tradeData/index.ts","../src/components/mobile/topTab/topTab.ui.tsx","../src/components/mobile/topTab/topTab.widget.tsx","../src/components/mobile/topTab/index.ts","../src/components/mobile/orderBookAndEntry/orderBookAndEntry.ui.tsx","../src/components/mobile/orderBookAndEntry/orderBookAndEntry.script.tsx","../src/components/mobile/orderBookAndEntry/orderBookAndEntry.widget.tsx","../src/components/mobile/orderBookAndEntry/index.ts","../src/components/mobile/dataList/dataList.script.tsx","../src/components/mobile/dataList/dataList.ui.tsx","../src/components/mobile/dataList/dataList.widget.tsx","../src/components/mobile/dataList/index.ts","../src/index.ts","../src/components/desktop/layout/splitLayout/splitLayout.tsx","../src/components/desktop/layout/splitLayout/splitLineBar.tsx","../src/components/mobile/bottomNavBar/bottomNavBar.ui.tsx","../src/components/mobile/bottomNavBar/account/account.widget.tsx","../src/components/mobile/bottomNavBar/account/account.script.tsx","../src/components/mobile/accountSheet/accountSheet.ui.tsx","../src/components/mobile/accountSheet/icons.tsx","../src/components/mobile/accountSheet/accountSheet.script.tsx","../src/components/mobile/accountSheet/accountSheet.widget.tsx","../src/components/mobile/bottomNavBar/account/account.ui.tsx","../src/components/mobile/bottomNavBar/balance/balance.ui.tsx","../src/components/mobile/bottomNavBar/balance/balance.script.tsx","../src/components/mobile/bottomNavBar/balance/balance.widget.tsx","../src/components/mobile/bottomNavBar/chain/chain.ui.tsx","../src/components/mobile/bottomNavBar/chain/chain.script.tsx","../src/components/mobile/bottomNavBar/chain/chain.widget.tsx","../src/components/mobile/bottomNavBar/bottomNavBar.script.tsx","../src/components/mobile/bottomNavBar/bottomNavBar.widget.tsx","../src/components/mobile/portfolioSheet/portfolioSheet.ui.tsx","../src/components/mobile/portfolioSheet/portfolioSheet.script.tsx","../src/components/mobile/portfolioSheet/riskIndicator.tsx","../src/components/mobile/portfolioSheet/portfolioSheet.widget.tsx","../src/components/mobile/fundingRateModal/index.ts","../src/pages/trading/trading.ui.tsx","../src/pages/trading/trading.ui.desktop.tsx","../src/components/desktop/layout/sortablePanel.tsx","../src/pages/trading/trading.script.tsx","../src/components/desktop/layout/useSplitPersistent.ts","../src/pages/trading/hooks/useFirstTimeDeposit.ts","../src/pages/trading/trading.ui.mobile.tsx","../src/pages/trading/trading.widget.tsx","../src/provider/tradingPageProvider.tsx","../src/pages/trading/trading.page.tsx"],"names":["useLocalStorage","useTradingLocalStorage","init_useTradingLocalStorage","__esmMin","props","unPnlPriceBasis","setUnPnlPriceBasic","pnlNotionalDecimalPrecision","setPnlNotionalDecimalPrecision","showAllSymbol","setShowAllSymbol","hideAssets","setHideAssets","useMemo","usePositionStream","useDataTap","usePositionsCount","init_usePositionsCount","symbol","data","count","useOrderStream","AlgoOrderRootType","OrderStatus","TabType","usePendingOrderCount","init_usePendingOrderCount","pendingOrdersPageSizeKey","tpslOrdersPageSizeKey","pendingOrders","pendingCount","tpslOrders","tpslCount","pendingOrderCount","tpSlOrderCount","init_hooks","createContext","useContext","TradingPageContext","useTradingPageContext","init_tradingPageContext","useDataListScript","init_dataList_script","inputs","current","sharePnLConfig","includedPendingOrder","localStorage","onSymbolChange","positionCount","useState","Button","Checkbox","Divider","DropdownMenuContent","DropdownMenuRoot","DropdownMenuTrigger","Flex","SettingFillIcon","Text","useTranslation","jsx","jsxs","Setting","UnPnlPriceBasisCheckBox","DecimalPrecisionCheckbox","RadioButton","SelIcon","UnselIcon","init_setting_ui","open","setOpen","t","checked","e","value","onValueChange","sel","label","onCheckChange","useSettingScript","init_setting_script","SettingWidget","init_setting_widget","state","setting_exports","__export","init_setting","Statistic","useScreen","Decimal","PositionHeader","MobileLayout","DesktopLayout","UnrealPnL","Notional","init_positionHeader_ui","isMobile","unrealPnLClsName","unrealPnLROIClsName","usePositionHeaderScript","init_positionHeader_script","calcMode","aggregated","unrealPnL","unrealPnlROI","notional","PositionHeaderWidget","init_positionHeader_widget","positionHeader_exports","init_positionHeader","React","Box","InfoCircleIcon","TabPanel","Tabs","Tooltip","DesktopOrderListWidget","LiquidationWidget","PositionHistoryWidget","PositionsWidget","createElement","LazySettingWidget","LazyPositionHeaderWidget","PositionsView","LiquidationTab","DataList","init_dataList_ui","mod","tabPanelItems","item","content","rest","DataListWidget","init_dataList_widget","dataList_exports","init_dataList","cn","Grid","ListView","OrderSide","commifyOptional","LastTrades","Row","Header","List","init_lastTrades_ui","left","mid","right","classNames","index","useMarketTradeStream","useSymbolsInfo","useLastTradesScript","init_lastTrades_script","isLoading","config","base","quote","baseDp","quoteDp","LastTradesWidget","init_lastTrades_widget","lastTrades_exports","init_lastTrades","FaucetUi","init_faucet_ui","useAccount","useConfig","useMutation","useWalletConnector","AccountStatusEnum","ChainNamespace","isTestnet","modal","toast","useFaucetScript","connectedChain","namespace","account","operatorUrl","getTestUSDC","isMutating","loading","setLoading","showFaucet","message","res","resolve","error","init_faucet_script","FaucetWidget","init_faucet_widget","useCallback","useAppContext","ArrowDownShortIcon","EyeIcon","EyeCloseIcon","ChevronDownIcon","gradientTextVariants","AuthGuard","LTVRiskTooltipWidget","Fragment","calculateTextColor","useCurrentStatusText","TooltipContent","TotalValue","AssetDetail","LTVDetail","AssetValueList","AssetView","init_assetView_ui","val","wrongNetwork","disabledConnect","statusText","description","formula","totalValue","visible","onToggleVisibility","unit","rule","placeholder","freeCollateral","marginRatioVal","renderMMR","isConnected","currentLtv","optionsOpen","setOptionsOpen","toggleOpen","prevOpen","showLTV","networkId","isFirstTimeDeposit","onDeposit","onWithdraw","onTransfer","toggleVisible","isMainAccount","hasSubAccount","title","titleColor","titleClsName","transferButton","depositButton","withdrawButton","useAccountInstance","useEventEmitter","useCollateral","useMarginRatio","useComputedLTV","DepositAndWithdrawWithDialogId","TransferDialogId","useAssetViewScript","init_assetView_script","ee","marginRatio","mmr","positionsInfo","openDepositAndWithdraw","viewName","onSettle","setVisible","_freeCollateral","_marginRatioVal","_mmr","_totalValue","AssetViewWidget","init_assetView_widget","assetView_exports","init_assetView","OrderBookContext","useOrderBookContext","ORDERBOOK_COIN_TYPE_KEY","ORDERBOOK_MOBILE_COIN_TYPE_KEY","OrderBookProvider","init_orderContext","mode","setMode","totalMode","setTotalMode","memoizedValue","init_types","CellBar","init_cellBar","direction","transform","x","parseNumber","getPrecisionByNumber","DesktopOrderBookCell","init_cell_desktop","cellHeight","showTotal","onItemClick","depth","symbolInfo","currentHover","accumulated","accumulatedAmount","price","quantity","base_dp","quote_dp","coinType","width","dp","totalAmount","isPendingOrder","priceStr","TooltipTrigger","TooltipRoot","TooltipArrow","calcHintInfo","DesktopListBox","Tip","init_listBox_desktop","qty","amount","sumQty","sumQtyAmount","type","countQty","findMaxItem","len","priceDp","maxQty","a","b","hoverIndex","setHoverIndex","isHover","hintInfo","info","contentDp","DesktopAsks","init_asks_desktop","max","DesktopBids","init_bids_desktop","Select","DesktopDepthSelect","init_depthSelect_desktop","options","d","CaretDownIcon","CaretUpIcon","Popover","Option","DesktopHeader","Title","init_header_desktop","onClick","setCoinType","popoverOpen","TriggerIcon","children","className","justifyEnd","ArrowUpShortIcon","MiddlePriceView","init_midPriceView","markPrice","lastPrice","iconSize","prevLastPrice","middlePrice","down","up","SimpleDialog","MarkPriceView","FlagIcon","init_markPrice","DesktopMarkPrice","Spread","init_markPrice_desktop","asks","bids","spread","bid1","ask1","dValue","useEffect","useRef","EMPTY_LIST","Spinner","DesktopOrderBook","init_index_desktop","onDepthChange","divRef","setShowTotal","resizeObserver","entries","entry","targetDiv","FundingRate","init_fundingRate_ui","predFundingRate","countDown","useFundingDetails","useFundingRateModalScript","init_fundingRateModal_script","fundingPeriod","capFunding","floorFunding","FundingRateModal","init_fundingRateModal_ui","i18n","registerSimpleDialog","registerSimpleSheet","FundingRateModalWidget","FundingRateDialogId","FundingRateSheetId","init_fundingRateModal_widget","useFundingRate","useFundingRateScript","init_fundingRate_script","FundingRateWidget","init_fundingRate_widget","init_fundingRate","OrderBookCell","init_cell","coinUnit","setCoinUnit","renderCell","ListBox","init_listBox","Asks","init_asks","Bids","init_bids","Picker","DepthSelect","init_depthSelect","init_header","_","MarkPrice","OrderBook","init_orderBook","init_orderBook_ui","getBasicSymbolInfo","init_utils","useOrderbookStream","removeTrailingZeros","DEFAULT_CELL_HEIGHT","SPACE","useOrderBookScript","usePendingOrderStream","init_orderBook_script","height","setCellHeight","level","setLevel","allDepths","cellsHeight","restSpace","selDepth","depths","OrderBookWidget","init_orderBook_widget","orderBook_exports","RiskRate","init_riskRate_ui","riskRate","riskRateColor","currentLeverage","maxLeverage","isHigh","isMedium","isLow","textColor","useLeverage","getRiskRateColor","useRiskRateScript","init_riskRate_script","curLeverage","riskRateNumber","_curLeverage","_maxLeverage","RiskRateWidget","init_riskRate_widget","riskRate_exports","init_riskRate","LazyLastTradesWidget","LazyOrderBookWidget","TwoColLayout","TabLayout","OrderBookAndTrades","init_orderBookAndTrades_ui","tab","containerRef","containerSize","useOrderBookAndTradesScript","init_orderBookAndTrades_script","setContainerSize","setTab","OrderBookAndTradesWidget","init_orderBookAndTrades_widget","orderBookAndTrades_exports","init_orderBookAndTrades","switchLayout_exports","LayoutIcon","MarketBottomIcon","MarketHideIcon","MarketLeftIcon","MarketTopIcon","OrderEntryIcon","SwitchLayout","SwitchLayoutDropDown","CloseIcon","DropdownMenuPortal","init_switchLayout","hoveredMarket","setHoveredMarket","renderItem","position","renderMarketItem","getIcon","isHovered","isSelected","getLabel","useTopTabScript","init_topTab_script","useTradingviewScript","setHeight","Key","MaxHeight","dragging","setDragging","dragRef","boxRef","offsetY","setOffsetY","topRef","handleTouchStart","event","rect","handleTouchMove","newHeight","MinHeight","handleTouchEnd","drag","init_tradingview_script","KlineDragIcon","init_icons","TradingviewWidget","TradingviewUI","init_tradingview_ui","tradingview_widget_exports","init_tradingview_widget","lastTrades_widget_exports","MWebLastTrades","TradeData","init_tradeData_ui","showUSDC","useTickerStream","useTradeDataScript","init_tradeData_script","ticker","vol_24h","close","volume","openInterest","TradeDataWidget","init_tradeData_widget","tradeData_exports","init_tradeData","LazyTradingviewWidget","LazyMWebLastTrades","LazyTradeDataWidget","TopTab","ChevronIcon","init_topTab_ui","tradingViewConfig","TopTabWidget","init_topTab_widget","topTab_exports","init_topTab","OrderEntryWidget","OrderBookAndEntry","init_orderBookAndEntry_ui","div","useOrderBookAndEntryScript","init_orderBookAndEntry_script","OrderBookAndEntryWidget","init_orderBookAndEntry_widget","orderBookAndEntry_exports","init_orderBookAndEntry","subTab","setSubTab","cancelAllOrders","cancelAllTPSLOrders","MobileOrderListWidget","MobileLiquidationWidget","MobilePositionHistoryWidget","MobilePositionsWidget","SymbolControlHeader","OrdersView","HistoryTab","forwardRef","Split","SplitLineBar","onMouseDown","disable","filterCls","cls","SplitLayout","ref","onSizeChange","barProps","ScanQRCodeWidget","ExtensionPositionEnum","ExtensionSlot","installExtension","ArrowRightShortIcon","HeadIcon","CopyIcon","USDCIcon","size","OrderlyIcon","AccountSheet","AccountInfo","ReferralInfo","TradingRewardsInfo","TWType","useChains","useCurEpochEstimate","useEpochInfo","useReferralInfo","useModal","useAccountSheetScript","linkDeviceStorage","accountId","address","hide","disconnect","chainId","showGetTestUSDC","chainName","useGetChains","onCopyAddress","affiliateCommission30D","traderCommission30D","isAffiliate","isTrader","onClickReferral","useReferral","curEpochId","estRewards","onClickTradingRewards","useTradingRewards","onDisconnect","gettingTestUSDC","_onClickReferral","_onClick","curEpochEstimate","list","curEpoch","mainChains","findByChainId","chain","AccountSheetWidget","useAccountScript","referral","tradingRewards","bottomSheetLeading","formatAddress","Account","MobileAccountMenuExtension","Balance","useBalanceScript","BalanceWidget","ChainIcon","ChainSelectorSheetId","Chain","r","useChainScript","currentChainId","setCurrentChainId","ChainWidget","BottomNavBar","renderContent","LinkDevice","showScanQRCode","showDialog","hideDialog","DesktopIcon","Dot","LinkIcon","MobileIcon","DotIcon","useBottomNavBarScript","BottomNavBarWidget","useId","Trans","ArrowLeftRightIcon","Input","inputFormatter","PlusIcon","ReduceIcon","RefreshIcon","useDebouncedCallback","DepositAndWithdrawWithSheetId","TransferSheetId","usePortfolioSheetScript","assets","useAssets","useMarginRatioAndLeverage","subAccounts","showSliderTip","setShowSliderTip","onSettlePnL","toggleHideAssets","totalCollateral","availableBalance","totalUnrealizedROI","update","leverageLevers","marks","leverage","setLeverage","step","onLeverageChange","onSave","err","onValueCommit","debouncedCommit","onInputChange","parsed","raw","clamped","prev","getMarginRatioColor","imr","high","low","RiskIndicator","PortfolioSheet","Asset","MarginRatio","Buttons","onUnsettleClick","clsName","PortfolioSheetWidget","DndContext","closestCenter","KeyboardSensor","PointerSensor","useSensor","useSensors","DragOverlay","restrictToVerticalAxis","arrayMove","SortableContext","sortableKeyboardCoordinates","verticalListSortingStrategy","CSS","SideMarketsWidget","SymbolInfoBarFullWidget","HorizontalMarketsWidget","OrderEntrySortKeys","TradingviewFullscreenKey","DepositStatusWidget","useSortable","SortablePanel","showIndicator","dragOverlay","nodeRef","dimensions","setDimensions","sortableResult","setNodeRef","attributes","listeners","transition","isDragging","setActivatorNodeRef","combinedRef","node","style","IndicatorIcon","useMediaQuery","useSplitPersistent","key","defaulValue","dep","useAssetsHistory","AssetHistorySideEnum","AssetHistoryStatusEnum","useFirstTimeDeposit","unavailable","startTime","endTime","meta","scrollBarWidth","topBarHeight","bottomBarHeight","space","symbolInfoBarHeight","orderEntryMinWidth","orderEntryMaxWidth","orderbookMinWidth","orderbookMaxWidth","orderbookMinHeight","orderbookMaxHeight","tradindviewMinHeight","tradingViewMinWidth","dataListMaxHeight","dataListInitialHeight","ORDERLY_ORDER_ENTRY_SIDE_MARKETS_LAYOUT","ORDERLY_SIDE_MARKETS_MODE_KEY","ORDERLY_HORIZONTAL_MARKETS_LAYOUT","useTradingScript","openMarketsSheet","setOpenMarketsSheet","restrictedInfo","onRouteChange","total","max2XL","min3XL","max4XL","layout","setLayout","marketLayout","setMarketLayout","canTrade","onShowPortfolioSheet","horizontalDraggable","positionsState","useOrderEntryPositions","marketsCollapseState","useMarketsCollapse","observerState","useObserverOrderEntry","marketsWidth","tradindviewMaxHeight","dataListMinHeight","splitSizeState","useSplitSize","tradingViewHeightState","useExtraHeight","map","resizeable","animating","setAnimating","panelSize","setPanelSize","onPanelSizeChange","collapsed","memoizedPanelSize","positions","setPositions","updatePositions","currentIdx","targetIdx","pos","i","showPositionIcon","mainSplitSize","setMainSplitSize","dataListSplitSize","setDataListSplitSize","orderBookSplitSize","setOrderbookSplitSize","dataListSplitHeightSM","setDataListSplitHeightSM","orderBookSplitHeightSM","setOrderbookSplitHeightSM","orderEntryHeight","setOrderEntryHeight","orderEntryViewRef","element","getOffsetSizeNum","tradingviewAndOrderbookSplitRef","max2XLSplitRef","extraHeight","setExtraHeight","dataListHeight","setDataListHeight","preSize","nextSize","boxHeight","splitTradingviewHeight","splitOrderbookHeight","tradingviewHeight","orderbookHeight","offset","splitDataListHeight","LazyRiskRateWidget","LazyAssetViewWidget","LazyDataListWidget","LazySwitchLayout","LazyOrderBookAndTradesWidget","onLayout","onMarketLayout","tradingViewFullScreen","sortableItems","setSortableItems","dropAnimationConfig","active","innerElement","sensors","activeId","setActiveId","handleDragStart","handleDragEnd","over","oldIndex","newIndex","newItems","minScreenHeight","minScreenHeightSM","horizontalMarketsView","containerPaddingX","stickyHorizontalMarketsView","marketsWidget","marketsView","symbolInfoBarView","library_path","restTradingViewConfig","tradingviewWidget","tradingView","orderbookWidget","orderbookView","dataListWidget","dataListView","orderInteractionWidgets","orderEntryView","tradingViewAndOrderbookView","renderTradingViewAndOrderbookView","mainView","MarketsSheetWidget","SymbolInfoBarWidget","SimpleSheet","LazyTopTabWidget","LazyOrderBookAndEntryWidget","MaybeEqual","topBar","Trading","TradingWidget","TradingPageProvider","basicSymbol","TradingPage"],"mappings":"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CN,OAAO,MACP,GAAG,IACH,UAAU,8BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,8BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,8BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,8BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,8BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,4BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,4BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,SACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,4BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,SACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,4BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF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","sourcesContent":["import { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\n\nexport const useTradingLocalStorage = (props?: {\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\",\n );\n const [pnlNotionalDecimalPrecision, setPnlNotionalDecimalPrecision] =\n useLocalStorage(\n \"pnlNotionalDecimalPrecision\",\n props?.pnlNotionalDecimalPrecision ?? 2,\n );\n const [showAllSymbol, setShowAllSymbol] = useLocalStorage(\n \"showAllSymbol\",\n true,\n );\n\n const [hideAssets, setHideAssets] = useLocalStorage(\"hideAssets\", false);\n\n return {\n unPnlPriceBasis,\n setUnPnlPriceBasic,\n pnlNotionalDecimalPrecision,\n setPnlNotionalDecimalPrecision,\n showAllSymbol,\n setShowAllSymbol,\n hideAssets,\n setHideAssets,\n };\n};\n","import { useMemo } from \"react\";\nimport { usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { useTradingLocalStorage } from \"./useTradingLocalStorage\";\n\nexport const usePositionsCount = (symbol?: string) => {\n const { showAllSymbol } = useTradingLocalStorage();\n const [data] = usePositionStream(showAllSymbol ? undefined : symbol);\n\n const count = useMemo(() => {\n return data.rows?.length;\n }, [data.rows?.length]);\n\n const positionCount = useDataTap(count) ?? 0;\n\n return {\n positionCount,\n };\n};\n","import { useOrderStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AlgoOrderRootType, OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport { TabType } from \"@kodiak-finance/orderly-ui-orders\";\nimport { useTradingLocalStorage } from \"./useTradingLocalStorage\";\n\nexport const usePendingOrderCount = (symbol?: string) => {\n const { showAllSymbol } = useTradingLocalStorage();\n\n const pendingOrdersPageSizeKey = `orderly_${TabType.pending}_pageSize`;\n const tpslOrdersPageSizeKey = `orderly_${TabType.tp_sl}_pageSize`;\n //\n // const [pendingOrderPageSize] = useLocalStorage(pendingOrdersPageSizeKey, 500);\n // const [tpslOrderPageSize] = useLocalStorage(tpslOrdersPageSizeKey, 500);\n\n const [pendingOrders, { total: pendingCount }] = useOrderStream(\n {\n symbol: showAllSymbol ? undefined : symbol,\n status: OrderStatus.INCOMPLETE,\n excludes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n // size: pendingOrderPageSize,\n size: 500,\n // sourceTypeAll: true,\n },\n {\n keeplive: true,\n },\n );\n\n const [tpslOrders, { total: tpslCount }] = useOrderStream(\n {\n symbol: showAllSymbol ? undefined : symbol,\n status: OrderStatus.INCOMPLETE,\n includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n // size: tpslOrderPageSize,\n size: 500,\n // sourceTypeAll: true,\n },\n {\n keeplive: true,\n },\n );\n\n const pendingOrderCount = useDataTap(pendingCount) ?? 0;\n const tpSlOrderCount = useDataTap(tpslCount) ?? 0;\n\n return {\n pendingOrderCount,\n tpSlOrderCount,\n };\n};\n","export { useTradingLocalStorage } from \"./useTradingLocalStorage\";\nexport { usePositionsCount } from \"./usePositionsCount\";\nexport { usePendingOrderCount } from \"./usePendingOrderCount\";\n","import { createContext, useContext } from \"react\";\nimport { TradingPageState } from \"../types/types\";\n\nexport const TradingPageContext = createContext({} as TradingPageState);\n\nexport const useTradingPageContext = () => {\n return useContext(TradingPageContext);\n};\n","import type { PositionsProps } from \"@kodiak-finance/orderly-ui-positions\";\nimport {\n usePendingOrderCount,\n usePositionsCount,\n useTradingLocalStorage,\n} from \"../../../hooks\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport enum DataListTabType {\n positions = \"Positions\",\n pending = \"Pending\",\n tp_sl = \"TP/SL\",\n filled = \"Filled\",\n positionHistory = \"Position history\",\n orderHistory = \"Order history\",\n liquidation = \"Liquidation\",\n assets = \"Assets\",\n}\n\nexport const useDataListScript = (\n inputs: { current?: DataListTabType } & PositionsProps,\n) => {\n const {\n current,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n includedPendingOrder,\n } = inputs;\n\n const localStorage = useTradingLocalStorage({ pnlNotionalDecimalPrecision });\n\n const { onSymbolChange } = useTradingPageContext();\n\n const { positionCount } = usePositionsCount(symbol);\n\n const { pendingOrderCount, tpSlOrderCount } = usePendingOrderCount(symbol);\n\n return {\n current,\n sharePnLConfig,\n symbol,\n calcMode: localStorage.unPnlPriceBasis,\n includedPendingOrder,\n ...localStorage,\n positionCount,\n pendingOrderCount,\n tpSlOrderCount,\n onSymbolChange,\n };\n};\n\nexport type DataListState = ReturnType<typeof useDataListScript>;\n","import { FC, useCallback, useState } from \"react\";\nimport {\n Button,\n Checkbox,\n Divider,\n DropdownMenuContent,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n SettingFillIcon,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SettingState } from \"./setting.script\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const Setting: FC<SettingState> = (props) => {\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n return (\n <Flex gap={0}>\n <Flex gap={1}>\n <Checkbox\n id=\"oui-checkbox-hideOtherSymbols\"\n color=\"white\"\n checked={props.hideOtherSymbols}\n onCheckedChange={(checked: boolean) => {\n props.setHideOtherSymbols(checked);\n }}\n />\n <label\n className=\"oui-text-xs oui-text-base-contrast-54 oui-cursor-pointer\"\n htmlFor=\"oui-checkbox-hideOtherSymbols\"\n >\n {t(\"trading.hideOtherSymbols\")}\n </label>\n </Flex>\n\n <DropdownMenuRoot open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"xs\"\n type=\"button\"\n variant=\"contained\"\n className=\"oui-bg-transparent hover:oui-bg-transparent\"\n >\n <SettingFillIcon\n size={16}\n color=\"white\"\n opacity={1}\n className=\"oui-text-white/[.36] hover:oui-text-white/80\"\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"oui-px-5 oui-py-3 oui-w-[360px]\"\n alignOffset={2}\n align=\"end\"\n >\n <div className=\"oui-flex oui-flex-col oui-text-sm\">\n <Text className=\"oui-text-base oui-pb-3\">\n {t(\"trading.portfolioSettings\")}\n </Text>\n <Divider />\n <Text className=\"oui-pb-3 oui-text-base-contrast-54 oui-mt-2\">\n {t(\"trading.portfolioSettings.decimalPrecision\")}\n </Text>\n <DecimalPrecisionCheckbox\n value={props.pnlNotionalDecimalPrecision}\n onValueChange={(e) => {\n props.setPnlNotionalDecimalPrecision(e);\n setOpen(false);\n }}\n />\n <Divider className=\"oui-my-3\" />\n <Text className=\"oui-pb-3 oui-text-base-contrast-54 oui-mt-2\">\n {t(\"trading.portfolioSettings.unrealPnlPriceBasis\")}\n </Text>\n <UnPnlPriceBasisCheckBox\n value={props.unPnlPriceBasis}\n onValueChange={(e) => {\n props.setUnPnlPriceBasic(e);\n setOpen(false);\n }}\n />\n </div>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst DecimalPrecisionCheckbox = (props: {\n value: number;\n onValueChange: (value: number) => void;\n}) => {\n const { value, onValueChange } = props;\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === 0}\n label={1}\n value={0}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === 1}\n label={0.1}\n value={1}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === 2}\n label={0.01}\n value={2}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\n// const InnerCheckbox = (props: {\n// sel: boolean;\n// label: any;\n// value: any;\n// onCheckChange: (value: any) => void;\n// }) => {\n// const { sel, label, value, onCheckChange } = props;\n// return (\n// <Flex\n// onClick={(e) => {\n// onCheckChange(value);\n// e.stopPropagation();\n// }}\n// gap={1}\n// >\n// <Checkbox color=\"white\" checked={sel} />\n// <Text size=\"xs\" intensity={sel ? 98 : 54}>\n// {`${label}`}\n// </Text>\n// </Flex>\n// );\n// };\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"2xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { SettingWidgetProps } from \"./setting.widget\";\n\nexport const useSettingScript = (props: SettingWidgetProps) => {\n return {\n ...props,\n };\n};\n\nexport type SettingState = ReturnType<typeof useSettingScript>;\n","import React from \"react\";\nimport { useSettingScript } from \"./setting.script\";\nimport { Setting } from \"./setting.ui\";\n\nexport type SettingWidgetProps = {\n pnlNotionalDecimalPrecision: any;\n setPnlNotionalDecimalPrecision: (value: number) => void;\n unPnlPriceBasis: any;\n setUnPnlPriceBasic: (value: string) => void;\n hideOtherSymbols: any;\n setHideOtherSymbols: (value: boolean) => void;\n};\n\nexport const SettingWidget: React.FC<SettingWidgetProps> = (props) => {\n const state = useSettingScript(props);\n return <Setting {...state} />;\n};\n","export { Setting } from \"./setting.ui\";\nexport { SettingWidget } from \"./setting.widget\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Checkbox,\n Divider,\n Flex,\n Statistic,\n Text,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport type { PositionHeaderState } from \"./positionHeader.script\";\n\nexport const PositionHeader: React.FC<PositionHeaderState> = (props) => {\n const { isMobile } = useScreen();\n return isMobile ? <MobileLayout {...props} /> : <DesktopLayout {...props} />;\n};\n\nconst MobileLayout: React.FC<PositionHeaderState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={2}\n width={\"100%\"}\n itemAlign={\"start\"}\n p={2}\n className=\"oui-rounded-b-xl oui-bg-base-9\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <UnrealPnL\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-54\",\n root: \"oui-text-sm\",\n }}\n {...props}\n />\n <Notional\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-54\",\n root: \"oui-text-sm\",\n }}\n {...props}\n />\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex className=\"oui-cursor-pointer oui-gap-[2px]\">\n <Checkbox\n id=\"oui-checkbox-hideOtherSymbols\"\n color=\"white\"\n checked={!props.showAllSymbol}\n onCheckedChange={(checked: boolean) => {\n props.setShowAllSymbol(!checked);\n }}\n />\n\n <label\n className=\"oui-cursor-pointer oui-text-2xs oui-text-base-contrast-54\"\n htmlFor=\"oui-checkbox-hideOtherSymbols\"\n >\n {t(\"trading.hideOtherSymbols\")}\n </label>\n </Flex>\n </Flex>\n );\n};\n\nconst DesktopLayout: React.FC<PositionHeaderState> = (props) => {\n return (\n <Flex py={2} px={3} gap={6} width={\"100%\"} justify={\"start\"}>\n <UnrealPnL\n {...props}\n classNames={{ label: \"oui-text-base-contrast-54\" }}\n />\n <Notional\n {...props}\n classNames={{ label: \"oui-text-base-contrast-54\" }}\n />\n </Flex>\n );\n};\n\nconst UnrealPnL: React.FC<\n PositionHeaderState & {\n classNames?: { root?: string; label?: string; value?: string };\n }\n> = (props) => {\n const { t } = useTranslation();\n\n const unrealPnLClsName =\n typeof props.unrealPnL === \"number\"\n ? props.unrealPnL >= 0\n ? \"oui-text-trade-profit\"\n : \"oui-text-trade-loss\"\n : \"oui-text-base-contrast-80\";\n\n const unrealPnLROIClsName =\n typeof props.unrealPnL === \"number\" && props.unrealPnlROI\n ? props.unrealPnlROI >= 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\"\n : \"oui-text-base-contrast-80\";\n\n return (\n <Statistic label={t(\"common.unrealizedPnl\")} classNames={props.classNames}>\n <Flex gap={1}>\n <Text.numeral\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n className={unrealPnLClsName}\n >\n {props.unrealPnL ?? \"--\"}\n </Text.numeral>\n {typeof props.unrealPnlROI !== \"undefined\" && (\n <Text.numeral\n prefix=\"(\"\n suffix=\")\"\n rule=\"percentages\"\n size=\"2xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n className={unrealPnLROIClsName}\n >\n {props.unrealPnlROI}\n </Text.numeral>\n )}\n </Flex>\n </Statistic>\n );\n};\n\nconst Notional: React.FC<\n PositionHeaderState & {\n classNames?: { root?: string; label?: string; value?: string };\n }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Statistic label={t(\"common.notional\")} classNames={props.classNames}>\n <Text.numeral\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n >\n {props.notional ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n","import { usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { useTradingLocalStorage } from \"../../../hooks\";\n\nexport const usePositionHeaderScript = (inputs: {\n pnlNotionalDecimalPrecision?: number;\n unPnlPriceBasis: \"markPrice\" | \"lastPrice\";\n symbol?: string;\n}) => {\n const { pnlNotionalDecimalPrecision, unPnlPriceBasis, symbol } = inputs;\n const calcMode = unPnlPriceBasis;\n\n const [data] = usePositionStream(symbol, {\n calcMode,\n });\n const aggregated = useDataTap(data.aggregated);\n\n const unrealPnL = aggregated?.total_unreal_pnl;\n const unrealPnlROI = aggregated?.unrealPnlROI;\n const notional = aggregated?.notional;\n const { showAllSymbol, setShowAllSymbol } = useTradingLocalStorage();\n\n return {\n pnlNotionalDecimalPrecision,\n unrealPnL,\n unrealPnlROI,\n notional,\n showAllSymbol,\n setShowAllSymbol,\n };\n};\n\nexport type PositionHeaderState = ReturnType<typeof usePositionHeaderScript>;\n","import React from \"react\";\nimport { usePositionHeaderScript } from \"./positionHeader.script\";\nimport { PositionHeader } from \"./positionHeader.ui\";\n\nexport const PositionHeaderWidget: React.FC<{\n pnlNotionalDecimalPrecision?: number;\n unPnlPriceBasis: \"markPrice\" | \"lastPrice\";\n symbol?: string;\n}> = (props) => {\n const state = usePositionHeaderScript(props);\n return <PositionHeader {...state} />;\n};\n","export { PositionHeader } from \"./positionHeader.ui\";\nexport { PositionHeaderWidget } from \"./positionHeader.widget\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetsModule } from \"@kodiak-finance/orderly-portfolio\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n Divider,\n Flex,\n InfoCircleIcon,\n TabPanel,\n Tabs,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { TabPanelProps } from \"@kodiak-finance/orderly-ui\";\nimport { DesktopOrderListWidget, TabType } from \"@kodiak-finance/orderly-ui-orders\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionsWidget,\n} from \"@kodiak-finance/orderly-ui-positions\";\nimport { DataListState, DataListTabType } from \"./dataList.script\";\n\nconst LazySettingWidget = React.lazy(() =>\n import(\"./setting\").then((mod) => {\n return { default: mod.SettingWidget };\n }),\n);\n\nconst LazyPositionHeaderWidget = React.lazy(() =>\n import(\"../../base/positionHeader\").then((mod) => {\n return { default: mod.PositionHeaderWidget };\n }),\n);\n\nconst PositionsView: React.FC<DataListState> = (props) => {\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\">\n <React.Suspense fallback={null}>\n <LazyPositionHeaderWidget\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n symbol={!!props.showAllSymbol ? undefined : props.symbol}\n unPnlPriceBasis={props.unPnlPriceBasis}\n />\n </React.Suspense>\n <Divider className=\"oui-w-full\" />\n <Box className=\"oui-h-[calc(100%_-_60px)]\" width=\"100%\">\n <PositionsWidget\n symbol={!!props.showAllSymbol ? undefined : props.symbol}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n sharePnLConfig={props.sharePnLConfig}\n calcMode={props.calcMode}\n includedPendingOrder={props.includedPendingOrder}\n onSymbolChange={props.onSymbolChange}\n />\n </Box>\n </Flex>\n );\n};\n\nexport const LiquidationTab: React.FC = () => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-space-x-1\">\n <span>{t(\"positions.liquidation\")}</span>\n <Tooltip\n className=\"oui-max-w-[275px] oui-bg-base-6\"\n content={\n <div>\n <div className=\"oui-text-pretty\">\n {t(\"positions.Liquidation.tooltip.liquidation\")}\n </div>\n <div>\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/perpetual-futures/liquidations\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"oui-text-primary\"\n >\n {t(\"positions.Liquidation.tooltip.viewMore\")}\n </a>\n </div>\n </div>\n }\n arrow={{ className: \"oui-fill-base-6\" }}\n >\n <button className=\"oui-hidden group-data-[state=active]:oui-block\">\n <InfoCircleIcon />\n </button>\n </Tooltip>\n </div>\n );\n};\n\nexport const DataList: React.FC<DataListState> = (props) => {\n const { t } = useTranslation();\n\n const {\n positionCount = 0,\n pendingOrderCount = 0,\n tpSlOrderCount = 0,\n showAllSymbol,\n symbol,\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n setShowAllSymbol,\n current,\n unPnlPriceBasis,\n setUnPnlPriceBasic,\n setPnlNotionalDecimalPrecision,\n } = props;\n\n const tabPanelItems: (TabPanelProps & { content?: React.ReactNode })[] = [\n {\n value: DataListTabType.positions,\n title: `${t(\"common.positions\")} ${positionCount > 0 ? `(${positionCount})` : \"\"}`,\n content: <PositionsView {...props} />,\n },\n {\n value: DataListTabType.pending,\n title: `${t(\"orders.status.pending\")} ${pendingOrderCount > 0 ? `(${pendingOrderCount})` : \"\"}`,\n content: (\n <DesktopOrderListWidget\n type={TabType.pending}\n ordersStatus={OrderStatus.INCOMPLETE}\n symbol={showAllSymbol ? undefined : symbol}\n onSymbolChange={onSymbolChange}\n testIds={{ tableBody: \"oui-testid-dataList-pending-table-body\" }}\n />\n ),\n },\n {\n value: DataListTabType.tp_sl,\n title: `${t(\"common.tpsl\")} ${tpSlOrderCount > 0 ? `(${tpSlOrderCount})` : \"\"}`,\n content: (\n <DesktopOrderListWidget\n type={TabType.tp_sl}\n ordersStatus={OrderStatus.INCOMPLETE}\n symbol={showAllSymbol ? undefined : symbol}\n onSymbolChange={onSymbolChange}\n testIds={{ tableBody: \"oui-testid-dataList-tpsl-table-body\" }}\n />\n ),\n },\n {\n value: DataListTabType.filled,\n title: t(\"orders.status.filled\"),\n content: (\n <DesktopOrderListWidget\n type={TabType.filled}\n symbol={showAllSymbol ? undefined : symbol}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n ordersStatus={OrderStatus.FILLED}\n onSymbolChange={onSymbolChange}\n testIds={{ tableBody: \"oui-testid-dataList-filled-table-body\" }}\n sharePnLConfig={sharePnLConfig}\n />\n ),\n },\n {\n value: DataListTabType.positionHistory,\n title: t(\"positions.positionHistory\"),\n content: (\n <PositionHistoryWidget\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n symbol={showAllSymbol ? undefined : symbol}\n onSymbolChange={onSymbolChange}\n sharePnLConfig={sharePnLConfig}\n />\n ),\n },\n {\n value: DataListTabType.orderHistory,\n title: t(\"orders.orderHistory\"),\n content: (\n <DesktopOrderListWidget\n type={TabType.orderHistory}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n symbol={showAllSymbol ? undefined : symbol}\n onSymbolChange={onSymbolChange}\n testIds={{ tableBody: \"oui-testid-dataList-orderHistory-table-body\" }}\n sharePnLConfig={sharePnLConfig}\n />\n ),\n },\n {\n value: DataListTabType.liquidation,\n title: <LiquidationTab />,\n content: (\n <LiquidationWidget symbol={showAllSymbol ? undefined : symbol} />\n ),\n },\n // {\n // value: DataListTabType.assets,\n // title: t(\"common.assets\"),\n // content: (\n // <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n // <AssetsModule.AssetsDataTableWidget />\n // </Flex>\n // ),\n // },\n ];\n\n return (\n <Tabs\n defaultValue={current || DataListTabType.positions}\n variant=\"contained\"\n trailing={\n <React.Suspense fallback={null}>\n <LazySettingWidget\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n setPnlNotionalDecimalPrecision={setPnlNotionalDecimalPrecision}\n unPnlPriceBasis={unPnlPriceBasis}\n setUnPnlPriceBasic={setUnPnlPriceBasic}\n hideOtherSymbols={!showAllSymbol}\n setHideOtherSymbols={(value) => setShowAllSymbol(!value)}\n />\n </React.Suspense>\n }\n size=\"lg\"\n className=\"oui-h-full\"\n classNames={{\n trigger: \"oui-group\",\n tabsContent: \"oui-h-[calc(100%_-_32px)]\",\n }}\n >\n {tabPanelItems.map((item) => {\n const { content, ...rest } = item;\n return (\n <TabPanel {...rest} key={`item-${rest.value}`}>\n {content}\n </TabPanel>\n );\n })}\n </Tabs>\n );\n};\n","import React from \"react\";\nimport type { PositionsProps } from \"@kodiak-finance/orderly-ui-positions\";\nimport { DataListTabType, useDataListScript } from \"./dataList.script\";\nimport { DataList } from \"./dataList.ui\";\n\nexport const DataListWidget: React.FC<\n { current?: DataListTabType } & PositionsProps\n> = (props) => {\n const state = useDataListScript(props);\n return <DataList {...state} />;\n};\n","export { DataList } from \"./dataList.ui\";\nexport { DataListWidget } from \"./dataList.widget\";\n","import React, { FC, ReactNode } from \"react\";\nimport { Box, cn, Grid, ListView, Text } from \"@kodiak-finance/orderly-ui\";\nimport { LastTradesState } from \"./lastTrades.script\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const LastTrades: FC<\n LastTradesState & {\n classNames?: {\n root?: string;\n list?: string;\n listHeader?: string;\n listItem?: {\n left?: string;\n mid?: string;\n right?: string;\n };\n };\n style?: React.CSSProperties;\n }\n> = (props) => {\n return (\n <Box\n className={cn(\n \"oui-grid oui-grid-rows=[auto,1fr] oui-h-full oui-w-full\",\n props.classNames?.root\n )}\n style={props.style}\n >\n <Box className=\"oui-pr-1\">\n <Header\n base={props.base}\n quote={props.quote}\n className={props.classNames?.listHeader}\n />\n </Box>\n <List\n data={props.data}\n isLoading={props.isLoading}\n baseDp={props.baseDp}\n quoteDp={props.quoteDp}\n classNames={props.classNames?.listItem}\n className={props.classNames?.list}\n />\n </Box>\n );\n};\n\nconst Row = (props: {\n key?: React.Key | null;\n classNames?: {\n root?: string;\n left?: string;\n mid?: string;\n right?: string;\n };\n left: ReactNode | string;\n mid: ReactNode | string;\n right: ReactNode | string;\n}) => {\n const { left, mid, right, classNames } = props;\n return (\n // <Flex\n // key={key}\n // height={20}\n // gap={2}\n // width={\"100%\"}\n // className={cn(\"oui-text-xs oui-tabular-nums\", classNames?.root)}\n // >\n // <Box className={cn(\"oui-flex-1\", classNames?.left)}>{left}</Box>\n // <Box className={cn(\"oui-flex-1\", classNames?.mid)}>{mid}</Box>\n // <Box className={cn(\"oui-flex-1 oui-text-right\", classNames?.right)}>\n // {right}\n // </Box>\n // </Flex>\n\n <Grid\n cols={3}\n gapX={2}\n width=\"100%\"\n className={cn(\"oui-text-xs oui-tabular-nums\", classNames?.root)}\n >\n <div className={cn(\"oui-flex-1\", classNames?.left)}>{left}</div>\n <div className={cn(\"oui-flex-1\", classNames?.mid)}>{mid}</div>\n <div className={cn(\"oui-flex-1 oui-text-right\", classNames?.right)}>\n {right}\n </div>\n </Grid>\n );\n};\n\nconst Header = (props: { base: string; quote: string; className?: string }) => {\n const { t } = useTranslation();\n return (\n <Row\n left={t(\"common.time\")}\n mid={`${t(\"common.price\")}(${props.quote})`}\n right={`${t(\"common.qty\")}(${props.base})`}\n classNames={{\n root: cn(\n \"oui-text-base-contrast-54 oui-h-[32px] oui-sticky\",\n props.className\n ),\n }}\n />\n );\n};\n\nconst List = (props: {\n data?: any[];\n isLoading?: boolean;\n baseDp: number;\n quoteDp: number;\n classNames?: {\n left?: string;\n mid?: string;\n right?: string;\n };\n className?: string;\n}) => {\n return (\n <ListView\n dataSource={props.data}\n className={cn(\n \"oui-last-trades-list\",\n \"oui-w-full oui-h-full\",\n props.className,\n \"oui-overflow-auto\"\n )}\n contentClassName=\"!oui-space-y-0 oui-pr-[-4px]\"\n renderItem={(item, index) => {\n return (\n <Row\n key={index}\n left={\n <Text.formatted rule={\"date\"} formatString=\"HH:mm:ss\">\n {item?.ts}\n </Text.formatted>\n }\n mid={commifyOptional(item?.price, { fix: props.quoteDp })}\n right={commifyOptional(item?.size, { fix: props.baseDp })}\n classNames={{\n left: cn(\"oui-text-base-contrast-80\", props.classNames?.left),\n right: cn(\n item.side === OrderSide.BUY\n ? \"oui-text-trade-profit\"\n : \"oui-text-trade-loss\",\n props.classNames?.mid\n ),\n mid: cn(\n item.side === OrderSide.BUY\n ? \"oui-text-trade-profit\"\n : \"oui-text-trade-loss\",\n props.classNames?.right\n ),\n }}\n />\n );\n }}\n />\n );\n};\n","import { useMarketTradeStream, useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\n\nexport const useLastTradesScript = (symbol: string) => {\n const { data, isLoading } = useMarketTradeStream(symbol);\n // const { quote, quote_dp, base, base_dp } = useContext(SymbolContext);\n const config = useSymbolsInfo()?.[symbol];\n const base = config?.(\"base\");\n const quote = config?.(\"quote\");\n const baseDp = config?.(\"base_dp\");\n const quoteDp = config?.(\"quote_dp\");\n// console.log(\"base, quote\", base, quote, \"baseDp, quoteDp\", baseDp, quoteDp);\n\n return {\n base,\n quote,\n data,\n isLoading,\n baseDp,\n quoteDp,\n };\n};\n\nexport type LastTradesState = ReturnType<typeof useLastTradesScript>;\n","import React from \"react\";\nimport { useLastTradesScript } from \"./lastTrades.script\";\nimport { LastTrades } from \"./lastTrades.ui\";\n\nexport const LastTradesWidget: React.FC<{\n symbol: string;\n classNames?: {\n root?: string;\n list?: string;\n listHeader?: string;\n listItem?: { left?: string; mid?: string; right?: string };\n };\n style?: React.CSSProperties;\n}> = (props) => {\n const state = useLastTradesScript(props.symbol);\n return (\n <LastTrades {...state} classNames={props.classNames} style={props.style} />\n );\n};\n","export { LastTrades } from \"./lastTrades.ui\";\nexport { LastTradesWidget } from \"./lastTrades.widget\";\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Button } from \"@kodiak-finance/orderly-ui\";\nimport { FaucetState } from \"./faucet.script\";\n\nexport function FaucetUi(props: FaucetState) {\n const { t } = useTranslation();\n\n if (!props.showFaucet) {\n return null;\n }\n\n return (\n <Button\n variant=\"outlined\"\n fullWidth\n size=\"md\"\n onClick={props.getFaucet}\n loading={props.loading}\n className=\"oui-text-primary-light oui-border-primary-light oui-rounded\"\n data-testid=\"oui-testid-assetView-getFaucet-button\"\n >\n {t(\"trading.faucet.getTestUSDC\")}\n </Button>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport {\n useAccount,\n useConfig,\n useMutation,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum, ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { isTestnet } from \"@kodiak-finance/orderly-utils\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useFaucetScript() {\n const { t } = useTranslation();\n const { connectedChain, namespace } = useWalletConnector();\n const { state, account } = useAccount();\n const config = useConfig();\n const operatorUrl = config.get<string>(\"operatorUrl\");\n\n const [getTestUSDC, { isMutating }] = useMutation(\n `${operatorUrl}/v1/faucet/usdc`\n );\n const [loading, setLoading] = useState<boolean>(false);\n\n const showFaucet = useMemo(() => {\n if (!connectedChain || !connectedChain.id) {\n return false;\n }\n return (\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected) &&\n isTestnet(parseInt(connectedChain.id as string))\n );\n }, [state, connectedChain]);\n\n const getFaucet = () => {\n if (loading) {\n return;\n }\n setLoading(true);\n const message = t(\"trading.faucet.getTestUSDC.success\", {\n quantity: namespace === ChainNamespace.solana ? \"100\" : \"1,000\",\n });\n\n return getTestUSDC({\n chain_id: account.walletAdapter?.chainId.toString(),\n user_address: state.address,\n broker_id: config.get(\"brokerId\"),\n }).then(\n (res) => {\n setLoading(false);\n if (res.success) {\n return modal.alert({\n title: t(\"trading.faucet.getTestUSDC\"),\n message,\n onOk: () => {\n return new Promise((resolve) => resolve(true));\n },\n });\n }\n res.message && toast.error(res.message);\n },\n (error: Error) => {\n toast.error(error.message);\n }\n );\n };\n return { getFaucet, showFaucet, loading };\n}\n\nexport type FaucetState = ReturnType<typeof useFaucetScript>;\n","import { FaucetUi } from \"./faucet.ui\";\nimport { useFaucetScript } from \"./faucet.script\";\n\nexport function FaucetWidget() {\n const state = useFaucetScript();\n return (\n <FaucetUi {...state}/>\n )\n}","import { FC, useMemo, useState, useCallback, ReactNode } from \"react\";\nimport { useAccount, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n Box,\n Button,\n ArrowDownShortIcon,\n EyeIcon,\n EyeCloseIcon,\n ChevronDownIcon,\n Tooltip,\n Divider,\n gradientTextVariants,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { LTVRiskTooltipWidget } from \"@kodiak-finance/orderly-ui-order-entry\";\nimport { AssetViewState } from \"./assetView.script\";\nimport { FaucetWidget } from \"./faucet/faucet.widget\";\n\ninterface StatusInfo {\n title: string;\n description: string;\n titleColor?: any;\n titleClsName?: string;\n}\n\ninterface TooltipContentProps {\n description: ReactNode;\n formula: ReactNode;\n}\n\ninterface TotalValueProps {\n totalValue?: number;\n visible?: boolean;\n onToggleVisibility?: () => void;\n}\n\ninterface AssetDetailProps {\n label: string;\n description?: ReactNode;\n formula?: ReactNode;\n visible: boolean;\n value?: number | string;\n unit?: string;\n rule?: \"percentages\";\n isConnected?: boolean;\n showPercentage?: boolean;\n placeholder?: string;\n}\n\ninterface AssetValueListProps {\n visible?: boolean;\n freeCollateral?: number | null;\n marginRatioVal?: number;\n renderMMR?: string | number;\n isConnected: boolean;\n currentLtv?: string | number;\n}\n\nconst calculateTextColor = (val: number): string => {\n if (val >= 0 && val < 50) {\n return \"oui-text-success\";\n } else if (val >= 50 && val < 80) {\n return \"oui-text-warning\";\n } else if (val >= 80) {\n return \"oui-text-danger\";\n } else {\n return \"\";\n }\n};\n\nconst useCurrentStatusText = (): StatusInfo => {\n const { state } = useAccount();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { t } = useTranslation();\n\n return useMemo(() => {\n const statusText = {\n wrongNetwork: {\n title: t(\"connector.wrongNetwork\"),\n description: t(\"connector.wrongNetwork.tooltip\"),\n titleColor: \"warning\",\n },\n connectWallet: {\n title: t(\"connector.connectWallet\"),\n description: t(\"connector.trade.connectWallet.tooltip\"),\n titleClsName:\n \"oui-text-transparent oui-bg-clip-text oui-gradient-brand\",\n },\n createAccount: {\n title: t(\"connector.createAccount\"),\n description: t(\"connector.trade.createAccount.tooltip\"),\n titleColor: \"primary\",\n },\n enableTrading: {\n title: t(\"connector.enableTrading\"),\n description: t(\"connector.trade.enableTrading.tooltip\"),\n titleColor: \"primary\",\n },\n empty: {\n title: \"\",\n description: \"\",\n },\n };\n\n if (disabledConnect) {\n return statusText.connectWallet;\n }\n\n if (wrongNetwork) {\n return statusText.wrongNetwork;\n }\n\n // EnableTradingWithoutConnected is enabled trading status, so we don't need to show anything\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return statusText.empty;\n }\n\n if (state.status <= AccountStatusEnum.NotConnected) {\n return statusText.connectWallet;\n }\n\n if (state.status <= AccountStatusEnum.NotSignedIn) {\n return statusText.createAccount;\n }\n\n if (state.status < AccountStatusEnum.EnableTrading) {\n return statusText.enableTrading;\n }\n\n return statusText.empty;\n }, [t, state.status, wrongNetwork, disabledConnect]);\n};\n\nexport const TooltipContent: FC<TooltipContentProps> = (props) => {\n const { description, formula } = props;\n return (\n <div className=\"oui-min-w-[204px] oui-max-w-[240px] oui-text-2xs oui-leading-normal oui-text-base-contrast-80\">\n {typeof description !== \"undefined\" && description !== null && (\n <span>{description}</span>\n )}\n <Divider className=\"oui-border-white/10\" my={2} />\n {typeof formula !== \"undefined\" && formula !== null && (\n <span>{formula}</span>\n )}\n </div>\n );\n};\n\nconst TotalValue: FC<TotalValueProps> = (props) => {\n const { t } = useTranslation();\n const { totalValue, visible = true, onToggleVisibility } = props;\n return (\n <Flex\n direction=\"column\"\n gap={1}\n className=\"oui-text-2xs\"\n itemAlign=\"center\"\n >\n <Text.numeral\n visible={visible}\n weight=\"bold\"\n size=\"2xl\"\n className={gradientTextVariants({ color: \"brand\" })}\n as=\"div\"\n padding={false}\n dp={2}\n >\n {totalValue ?? \"--\"}\n </Text.numeral>\n <Flex gap={1} itemAlign=\"center\">\n <Text size=\"2xs\" color=\"neutral\" weight=\"semibold\">\n {`${t(\"trading.asset.myAssets\")} (USDC)`}\n </Text>\n <button onClick={onToggleVisibility}>\n {visible ? (\n <EyeIcon size={18} className=\"oui-text-base-contrast-54\" />\n ) : (\n <EyeCloseIcon size={18} className=\"oui-text-base-contrast-54\" />\n )}\n </button>\n </Flex>\n </Flex>\n );\n};\n\nconst AssetDetail: FC<AssetDetailProps> = (props) => {\n const {\n label,\n description,\n formula,\n visible,\n value,\n unit,\n rule,\n placeholder,\n } = props;\n return (\n <Flex justify=\"between\">\n <Tooltip\n className={\"\"}\n content={<TooltipContent description={description} formula={formula} />}\n >\n <Text\n size=\"2xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n >\n {label}\n </Text>\n </Tooltip>\n <Text.numeral\n visible={visible}\n size=\"2xs\"\n unit={unit}\n unitClassName=\"oui-text-base-contrast-36 oui-ml-0.5\"\n as=\"div\"\n rule={rule}\n padding={false}\n dp={2}\n // suffix={value && unit}\n placeholder={placeholder}\n >\n {value || \"--\"}\n </Text.numeral>\n </Flex>\n );\n};\n\nconst LTVDetail: FC<Pick<AssetDetailProps, \"value\" | \"visible\">> = (props) => {\n const { visible, value } = props;\n const { t } = useTranslation();\n return (\n <Flex justify=\"between\">\n <Tooltip\n className={cn(\"oui-bg-base-6 oui-p-2\")}\n content={<LTVRiskTooltipWidget />}\n >\n <Text\n size=\"2xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n >\n {t(\"transfer.LTV\")}\n </Text>\n </Tooltip>\n <Text\n size=\"2xs\"\n className={cn(\n \"select-none\",\n visible && calculateTextColor(Number(value)),\n )}\n >\n {visible ? `${value}%` : \"*****\"}\n </Text>\n </Flex>\n );\n};\n\nconst AssetValueList: FC<AssetValueListProps> = (props) => {\n const {\n visible = true,\n freeCollateral,\n marginRatioVal,\n renderMMR,\n isConnected,\n currentLtv,\n } = props;\n\n const [optionsOpen, setOptionsOpen] = useLocalStorage(\n \"orderly_entry_asset_list_open\",\n false,\n );\n const [open, setOpen] = useState<boolean>(optionsOpen);\n\n const { t } = useTranslation();\n\n const toggleOpen = useCallback(() => {\n setOpen((prevOpen) => !prevOpen);\n setTimeout(() => {\n setOptionsOpen(!open);\n }, 0);\n }, []);\n\n const showLTV =\n typeof currentLtv === \"number\" &&\n !Number.isNaN(currentLtv) &&\n currentLtv > 0;\n\n return (\n <Box className=\"oui-group\">\n <Flex\n justify=\"center\"\n gap={1}\n itemAlign=\"center\"\n className=\"oui-cursor-pointer\"\n onClick={toggleOpen}\n >\n <Divider className=\"oui-flex-1\" />\n <ChevronDownIcon\n size={12}\n color=\"white\"\n className={cn(\"oui-transition-transform\", open && \"oui-rotate-180\")}\n />\n <Divider className=\"oui-flex-1\" />\n </Flex>\n <Box\n style={{ transform: \"translateZ(0)\" }}\n className={cn(\n \"oui-select-none oui-space-y-1.5 oui-overflow-hidden\",\n \"oui-transition-[max-height] oui-duration-150\",\n \"group-hover:oui-will-change-[max-height]\",\n open\n ? showLTV\n ? \"oui-max-h-[94px]\"\n : \"oui-max-h-[69px]\"\n : \"oui-max-h-0\",\n )}\n >\n <AssetDetail\n label={t(\"trading.asset.freeCollateral\")}\n description={t(\"trading.asset.freeCollateral.tooltip\")}\n formula={t(\"trading.asset.freeCollateral.formula\")}\n visible={visible}\n // TODO: change AssetDetail value\n value={freeCollateral! === 0 ? (\"0\" as any) : freeCollateral}\n unit=\"USDC\"\n />\n <AssetDetail\n label={t(\"trading.asset.marginRatio\")}\n description={t(\"trading.asset.marginRatio.tooltip\")}\n formula={t(\"trading.asset.marginRatio.formula\")}\n visible={visible}\n value={marginRatioVal}\n isConnected={isConnected}\n rule=\"percentages\"\n showPercentage={true}\n placeholder=\"--%\"\n />\n <AssetDetail\n label={t(\"trading.asset.maintenanceMarginRatio\")}\n description={t(\"trading.asset.maintenanceMarginRatio.tooltip\")}\n formula={t(\"trading.asset.maintenanceMarginRatio.formula\")}\n visible={visible}\n value={renderMMR}\n rule=\"percentages\"\n showPercentage={true}\n placeholder=\"--%\"\n />\n {showLTV && <LTVDetail visible={visible} value={currentLtv} />}\n </Box>\n </Box>\n );\n};\n\nexport const AssetView: FC<\n AssetViewState & { isFirstTimeDeposit?: boolean }\n> = ({\n networkId,\n isFirstTimeDeposit,\n totalValue,\n onDeposit,\n onWithdraw,\n onTransfer,\n toggleVisible,\n visible,\n freeCollateral,\n marginRatioVal,\n renderMMR,\n isConnected,\n isMainAccount,\n hasSubAccount,\n currentLtv,\n}) => {\n const { title, description, titleColor, titleClsName } =\n useCurrentStatusText();\n\n const { t } = useTranslation();\n\n const transferButton = hasSubAccount && (\n <Button\n fullWidth\n color=\"secondary\"\n size=\"md\"\n onClick={onTransfer}\n data-testid=\"oui-testid-assetView-transfer-button\"\n >\n <Text>{t(\"common.transfer\")}</Text>\n </Button>\n );\n\n const depositButton = isMainAccount && (\n <Button\n data-testid=\"oui-testid-assetView-deposit-button\"\n fullWidth\n size=\"md\"\n onClick={onDeposit}\n >\n {!hasSubAccount && <ArrowDownShortIcon color=\"white\" opacity={1} />}\n <Text>{t(\"common.deposit\")}</Text>\n </Button>\n );\n\n const withdrawButton = isMainAccount && (\n <Button\n fullWidth\n color=\"secondary\"\n size=\"md\"\n onClick={onWithdraw}\n data-testid=\"oui-testid-assetView-withdraw-button\"\n >\n {!hasSubAccount && (\n <ArrowDownShortIcon\n color=\"white\"\n opacity={1}\n className=\"oui-rotate-180\"\n />\n )}\n <Text>{t(\"common.withdraw\")}</Text>\n </Button>\n );\n\n return (\n <Box className=\"oui-relative\">\n {title && description && (\n <Flex direction=\"column\" gap={1} className=\"oui-mb-[32px]\">\n <Text\n size=\"lg\"\n weight=\"bold\"\n color={titleColor || \"inherit\"}\n className={titleClsName}\n >\n {title}\n </Text>\n <Text\n size=\"2xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className=\"oui-text-center\"\n >\n {description}\n </Text>\n </Flex>\n )}\n <AuthGuard\n networkId={networkId}\n buttonProps={{ size: \"md\", fullWidth: true }}\n >\n {isFirstTimeDeposit && isMainAccount ? (\n <>\n <Box>\n <Flex direction=\"column\" gap={1} className=\"oui-mb-[32px]\">\n <Text.gradient size=\"lg\" weight=\"bold\" color=\"brand\">\n {t(\"trading.asset.startTrading\")}\n </Text.gradient>\n <Text size=\"2xs\" color=\"neutral\" weight=\"semibold\">\n {t(\"trading.asset.startTrading.description\")}\n </Text>\n </Flex>\n </Box>\n <Button\n data-testid=\"oui-testid-assetView-deposit-button\"\n fullWidth\n size=\"md\"\n onClick={onDeposit}\n >\n <ArrowDownShortIcon color=\"white\" opacity={1} />\n <Text>{t(\"common.deposit\")}</Text>\n </Button>\n\n <Box className=\"oui-mt-3\">\n <FaucetWidget />\n </Box>\n </>\n ) : (\n <Box className=\"oui-space-y-4\">\n <TotalValue\n totalValue={totalValue}\n visible={visible}\n onToggleVisibility={toggleVisible}\n />\n <AssetValueList\n visible={visible}\n freeCollateral={freeCollateral}\n marginRatioVal={marginRatioVal}\n renderMMR={renderMMR}\n isConnected={isConnected}\n currentLtv={currentLtv}\n />\n <Flex\n gap={isMainAccount ? (hasSubAccount ? 2 : 3) : 0}\n itemAlign=\"center\"\n >\n {isMainAccount ? (\n <>\n {depositButton}\n {transferButton}\n {withdrawButton}\n </>\n ) : (\n transferButton\n )}\n </Flex>\n {isMainAccount && <FaucetWidget />}\n </Box>\n )}\n </AuthGuard>\n <div\n className={cn(\n \"oui-absolute oui-inset-0 oui-rotate-180\",\n \"oui-pointer-events-none oui-rounded-2xl oui-blur-[200px]\",\n )}\n style={{\n background:\n \"conic-gradient(from -40.91deg at 40.63% 50.41%, rgba(159, 115, 241, 0) -48.92deg, rgba(242, 98, 181, 0) 125.18deg, #5FC5FF 193.41deg, #FFAC89 216.02deg, #8155FF 236.07deg, #789DFF 259.95deg, rgba(159, 115, 241, 0) 311.08deg, rgba(242, 98, 181, 0) 485.18deg)\",\n }}\n />\n </Box>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n useAccountInstance,\n useEventEmitter,\n useLocalStorage,\n useAccount,\n useConfig,\n useCollateral,\n useMarginRatio,\n usePositionStream,\n useComputedLTV,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport {\n DepositAndWithdrawWithDialogId,\n TransferDialogId,\n} from \"@kodiak-finance/orderly-ui-transfer\";\n\nexport const useAssetViewScript = () => {\n const { t } = useTranslation();\n const account = useAccountInstance();\n const ee = useEventEmitter();\n\n const { totalValue } = useCollateral({\n dp: 2,\n });\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n const { state, isMainAccount } = useAccount();\n const { freeCollateral } = useCollateral({\n dp: 2,\n });\n const { marginRatio, mmr } = useMarginRatio();\n const isConnected = state.status >= AccountStatusEnum.Connected;\n const [{ aggregated }, positionsInfo] = usePositionStream();\n const marginRatioVal = useMemo(() => {\n return Math.min(\n 10,\n aggregated.notional === 0\n ? positionsInfo[\"margin_ratio\"](10)!\n : marginRatio,\n );\n }, [marginRatio, aggregated]);\n\n // const renderMMR = useMemo(() => {\n // if (!mmr) {\n // return \"\";\n // }\n // const bigMMR = new Decimal(mmr);\n // return bigMMR.mul(100).todp(2, 0).toFixed(2);\n // }, [mmr]);\n\n const openDepositAndWithdraw = useCallback(\n (viewName: \"deposit\" | \"withdraw\") => {\n // desktop always show dialog\n return modal.show(DepositAndWithdrawWithDialogId, {\n activeTab: viewName,\n });\n },\n [],\n );\n\n const onDeposit = useCallback(async () => {\n return openDepositAndWithdraw(\"deposit\");\n }, []);\n\n const onWithdraw = useCallback(async () => {\n return openDepositAndWithdraw(\"withdraw\");\n }, []);\n\n const onTransfer = useCallback(async () => {\n return modal.show(TransferDialogId);\n }, []);\n\n const onSettle = useCallback(async () => {\n return account\n .settle()\n .catch((e) => {\n if (e.code === -1104) {\n toast.error(t(\"settle.settlement.error\"));\n return Promise.reject(e);\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n }\n })\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\n });\n }, [account, t]);\n\n const [visible, setVisible] = useLocalStorage<boolean>(\n \"orderly_assets_visible\",\n true,\n );\n\n const toggleVisible = useCallback(() => {\n // @ts-ignore\n setVisible((visible: boolean) => {\n return !visible;\n });\n }, [visible]);\n\n const currentLtv = useComputedLTV();\n const _freeCollateral = useDataTap(freeCollateral) ?? undefined;\n const _marginRatioVal = useDataTap(marginRatioVal) ?? undefined;\n const _mmr = useDataTap(mmr) ?? undefined;\n const _totalValue = useDataTap(totalValue) ?? undefined;\n\n return {\n onDeposit,\n onWithdraw,\n onTransfer,\n onSettle,\n visible,\n toggleVisible,\n networkId,\n totalValue: _totalValue,\n status: state.status,\n freeCollateral: _freeCollateral,\n marginRatioVal: _marginRatioVal,\n renderMMR: _mmr,\n isConnected,\n isMainAccount,\n hasSubAccount: !!state.subAccounts?.length,\n currentLtv,\n };\n};\n\nexport type AssetViewState = ReturnType<typeof useAssetViewScript>;\n","import React from \"react\";\nimport { useAssetViewScript } from \"./assetView.script\";\nimport { AssetView } from \"./assetView.ui\";\n\ntype AssetViewWidgetProps = {\n isFirstTimeDeposit?: boolean;\n};\n\nexport const AssetViewWidget: React.FC<AssetViewWidgetProps> = (props) => {\n const state = useAssetViewScript();\n return <AssetView {...state} isFirstTimeDeposit={props.isFirstTimeDeposit} />;\n};\n","export { AssetView } from \"./assetView.ui\";\nexport { AssetViewWidget } from \"./assetView.widget\";\n","import React, {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useState,\n} from \"react\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport { QtyMode, TotalMode } from \"./types\";\n\nexport interface OrderBookContextValue {\n cellHeight: number;\n mode: QtyMode;\n depth?: string;\n onModeChange?: (mode: QtyMode) => void;\n onItemClick?: (item: number[]) => void;\n showTotal: boolean;\n totalMode: TotalMode;\n pendingOrders: ReadonlyArray<number> | number[];\n onTotalModeChange?: (mode: TotalMode) => void;\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const OrderBookContext = createContext({\n cellHeight: 22,\n} as OrderBookContextValue);\n\nexport const useOrderBookContext = () => useContext(OrderBookContext);\n\nexport const ORDERBOOK_COIN_TYPE_KEY = \"orderbook_coin_type\";\n\nexport const ORDERBOOK_MOBILE_COIN_TYPE_KEY = \"orderbook_mobile_coin_unit\";\n\ninterface OrderBookProviderProps {\n cellHeight: number;\n depth?: string;\n showTotal: boolean;\n pendingOrders: ReadonlyArray<number> | number[];\n onItemClick?: (item: number[]) => void;\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const OrderBookProvider: FC<\n PropsWithChildren<OrderBookProviderProps>\n> = (props) => {\n const [mode, setMode] = useState<QtyMode>(\"quantity\");\n const [totalMode, setTotalMode] = useState<QtyMode>(\"quantity\");\n const memoizedValue = React.useMemo<OrderBookContextValue>(() => {\n return {\n cellHeight: props.cellHeight,\n onItemClick: props.onItemClick,\n mode,\n totalMode: totalMode || \"quantity\",\n depth: props.depth,\n onModeChange: setMode,\n onTotalModeChange: setTotalMode,\n showTotal: props.showTotal || false,\n pendingOrders: props.pendingOrders,\n symbolInfo: props.symbolInfo,\n };\n }, [\n mode,\n props.cellHeight,\n props.depth,\n props.onItemClick,\n props.pendingOrders,\n props.showTotal,\n props.symbolInfo,\n totalMode,\n ]);\n return (\n <OrderBookContext.Provider value={memoizedValue}>\n {props.children}\n </OrderBookContext.Provider>\n );\n};\n","export type QtyMode = \"quantity\" | \"amount\";\nexport type TotalMode = \"quantity\" | \"amount\";\n\nexport enum OrderBookCellType {\n BID = \"bid\",\n ASK = \"ask\",\n}\n","import { cn } from \"@kodiak-finance/orderly-ui\";\nimport { FC, useMemo } from \"react\";\n\nexport enum CellBarDirection {\n LEFT_TO_RIGHT,\n RIGHT_TO_LEFT,\n}\n\ninterface CellBarProps {\n width: number;\n className?: string;\n direction?: CellBarDirection\n}\n\nexport const CellBar: FC<CellBarProps> = (props) => {\n const { direction = CellBarDirection.RIGHT_TO_LEFT } = props;\n const transform = useMemo(() => {\n const x = Math.max(props.width, 0);\n if (direction === CellBarDirection.LEFT_TO_RIGHT) {\n return { transform: `translateX(${x}%)` };\n }\n return { transform: `translateX(-${x}%)` };\n \n }, [props.width]);\n\n return (\n <div\n className={cn(\n \"oui-absolute oui-right-[-100%] oui-top-0 oui-h-full oui-w-full oui-transition-transform oui-pointer-events-none\",\n direction === CellBarDirection.LEFT_TO_RIGHT && \"oui-left-[-100%]\",\n props.className\n )}\n style={transform}\n />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { cn, Divider, parseNumber, Text } from \"@kodiak-finance/orderly-ui\";\nimport { getPrecisionByNumber } from \"@kodiak-finance/orderly-utils\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport { CellBar, CellBarDirection } from \"../../base/orderBook/cellBar\";\nimport {\n ORDERBOOK_COIN_TYPE_KEY,\n useOrderBookContext,\n} from \"../../base/orderBook/orderContext\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\n\nexport interface DesktopOrderBookCellProps {\n background: string;\n maxQty: number;\n price: number;\n quantity: number;\n // size: number;\n count: number;\n accumulated: number;\n accumulatedAmount: number;\n type: OrderBookCellType;\n symbolInfo: BasicSymbolInfo;\n base: string;\n quote: string;\n isHover: boolean;\n currentHover: boolean;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n}\n\nexport const DesktopOrderBookCell: FC<DesktopOrderBookCellProps> = (props) => {\n const { cellHeight, showTotal, onItemClick, depth, pendingOrders } =\n useOrderBookContext();\n const {\n symbolInfo,\n currentHover,\n accumulated,\n accumulatedAmount,\n count,\n price,\n quantity,\n base,\n quote,\n } = props;\n\n const { base_dp, quote_dp } = symbolInfo;\n\n const [coinType] = useLocalStorage<string>(ORDERBOOK_COIN_TYPE_KEY, base);\n\n const width = Number.isNaN(price) ? 0 : (accumulated / count) * 100;\n\n const dp = useMemo(() => {\n return getPrecisionByNumber(depth || `${quote_dp}`);\n }, [depth, quote_dp]);\n\n const totalAmount = Number.isNaN(accumulated)\n ? \"-\"\n : accumulatedAmount?.toString();\n\n const isPendingOrder = useMemo(() => {\n const priceStr = parseNumber(price, { dp: dp, padding: true });\n return pendingOrders.some(\n (item) => priceStr === parseNumber(item, { dp: dp, padding: true }),\n );\n }, [pendingOrders, price, dp]);\n\n return (\n <div\n className=\"oui-relative oui-flex oui-cursor-pointer oui-flex-row oui-justify-between oui-pl-3 oui-text-xs oui-tabular-nums oui-text-base-contrast-80\"\n style={{ height: `${cellHeight}px` }}\n onClick={() => {\n if (Number.isNaN(price) || Number.isNaN(quantity)) {\n return;\n }\n onItemClick?.([price, quantity]);\n }}\n onMouseEnter={props.onMouseEnter}\n onMouseLeave={props.onMouseLeave}\n >\n <div\n className={cn(\n \"oui-mr-2 oui-flex oui-basis-7/12 oui-flex-row oui-items-center\",\n showTotal && \"oui-basis-5/12\",\n )}\n >\n <div\n className={cn(\n \"oui-flex-1 oui-text-left\",\n props.type === OrderBookCellType.ASK\n ? \"oui-text-trade-loss\"\n : \"oui-text-trade-profit\",\n )}\n >\n <Text.numeral dp={dp}>{price}</Text.numeral>\n </div>\n <div className=\"oui-flex-1 oui-text-right oui-text-base-contrast-80\">\n <Text.numeral dp={base_dp}>{quantity}</Text.numeral>\n </div>\n </div>\n <div\n className={cn(\n \"oui-fex-row oui-relative oui-flex oui-basis-5/12 oui-items-center oui-justify-end oui-overflow-hidden\",\n showTotal && \"oui-basis-7/12\",\n )}\n >\n {showTotal ? (\n <>\n <div className={cn(\"oui-flex-1 oui-pr-3 oui-text-right\")}>\n <Text.numeral dp={base_dp} className=\"oui-z-10\">\n {accumulated}\n </Text.numeral>\n </div>\n <div className={cn(\"oui-flex-1 oui-pr-3 oui-text-right\")}>\n <Text.numeral dp={0} className=\"oui-z-10\">\n {totalAmount}\n </Text.numeral>\n </div>\n </>\n ) : (\n <div className={cn(\"oui-flex-1 oui-pr-3 oui-text-right\")}>\n {coinType === base && (\n <Text.numeral dp={base_dp} className=\"oui-z-10\">\n {accumulated}\n </Text.numeral>\n )}\n {coinType === quote && (\n <Text.numeral dp={0} className=\"oui-z-10\">\n {totalAmount}\n </Text.numeral>\n )}\n </div>\n )}\n <CellBar\n width={width}\n direction={CellBarDirection.LEFT_TO_RIGHT}\n className={\n props.type === OrderBookCellType.ASK\n ? \"oui-bg-trade-loss/10\"\n : \"oui-bg-trade-profit/10\"\n }\n />\n </div>\n\n {isPendingOrder && (\n <div\n className={cn(\n \"oui-pointer-events-none oui-absolute oui-left-[4px] oui-size-[4px] oui-rounded-full\",\n props.type === OrderBookCellType.ASK && \"oui-bg-trade-loss\",\n props.type === OrderBookCellType.BID && \"oui-bg-trade-profit\",\n )}\n style={{ top: `${cellHeight / 2 - 2}px` }}\n />\n )}\n\n {props.isHover && (\n <div className=\"oui-absolute oui-inset-0 oui-bg-white oui-opacity-[.12]\" />\n )}\n {currentHover && (\n <div\n className={cn(\n \"oui-absolute oui-inset-x-0\",\n props.type === OrderBookCellType.ASK && \"oui-top-0\",\n props.type === OrderBookCellType.BID && \"oui-bottom-0\",\n )}\n >\n <Divider\n lineStyle=\"dashed\"\n className={cn(\n \"oui-w-full\",\n props.type === OrderBookCellType.BID && \"oui-border-trade-profit\",\n props.type === OrderBookCellType.ASK && \"oui-border-trade-loss\",\n )}\n />\n </div>\n )}\n </div>\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n TooltipContent,\n TooltipTrigger,\n Text,\n TooltipRoot,\n TooltipArrow,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport { useOrderBookContext } from \"../../base/orderBook/orderContext\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { DesktopOrderBookCell } from \"./cell.desktop\";\n\ninterface DesktopListBoxProps {\n type: OrderBookCellType;\n data: number[][];\n countQty: number;\n}\n\nconst calcHintInfo = (item: number[] | null) => {\n if (!item) {\n return { sumQty: 0, sumQtyAmount: 0, avgPrice: 0 };\n }\n const [, , qty, amount] = item;\n const sumQty = !Number.isNaN(qty) ? qty : 0;\n const sumQtyAmount = !Number.isNaN(amount) ? amount : 0;\n return {\n sumQty: sumQty,\n sumQtyAmount: sumQtyAmount,\n avgPrice:\n sumQtyAmount === 0 || sumQty === 0\n ? 0\n : new Decimal(sumQtyAmount).div(sumQty).toNumber(),\n };\n};\n\nexport const DesktopListBox: React.FC<DesktopListBoxProps> = (props) => {\n const { data, type, countQty } = props;\n const { symbolInfo, depth } = useOrderBookContext();\n\n const findMaxItem = useCallback(() => {\n if (!data?.length) {\n return null;\n }\n if (type === OrderBookCellType.ASK) {\n const index = data.findIndex((item) => !Number.isNaN(item[0]));\n if (index !== -1) {\n return data[index];\n }\n return null;\n } else {\n const len = data.length;\n for (let index = len - 1; index >= 0; index--) {\n const item = data[index];\n if (!Number.isNaN(item[0])) {\n return item;\n }\n }\n return null;\n }\n }, [data, type]);\n\n const priceDp = useMemo(() => {\n if (depth?.toString().includes(\".\")) {\n return depth.toString().split(\".\")[1].length;\n }\n return 0;\n }, [depth]);\n\n const maxQty = useMemo(() => {\n return data.reduce((a, b) => Math.max(a, b[1]), 0);\n }, [data]);\n\n const [hoverIndex, setHoverIndex] = useState<number>(-1);\n\n return (\n <div className=\"oui-order-book-list oui-flex oui-flex-col oui-gap-px\">\n {data.map((item, index) => {\n return (\n <Tip\n key={index}\n index={index}\n item={item}\n countQty={countQty}\n setHoverIndex={setHoverIndex}\n hoverIndex={hoverIndex}\n type={type}\n maxQty={maxQty}\n priceDp={priceDp}\n symbolInfo={symbolInfo}\n findMaxItem={findMaxItem}\n />\n );\n })}\n </div>\n );\n};\n\nconst Tip: React.FC<{\n index: number;\n item: any;\n countQty: number;\n setHoverIndex: any;\n type: OrderBookCellType;\n maxQty: number;\n hoverIndex: number;\n priceDp: number;\n // base: any;\n // quote: any;\n // baseDp: number;\n // quoteDp: number;\n findMaxItem: () => number[] | null;\n symbolInfo: BasicSymbolInfo;\n}> = (props) => {\n const {\n index,\n item,\n setHoverIndex,\n type,\n maxQty,\n hoverIndex,\n priceDp,\n countQty,\n symbolInfo,\n findMaxItem,\n } = props;\n\n const { base, quote, base_dp: baseDp, quote_dp: quoteDp } = symbolInfo;\n const { t } = useTranslation();\n\n const isHover =\n hoverIndex !== -1\n ? type === OrderBookCellType.ASK\n ? index >= hoverIndex\n : index <= hoverIndex\n : false;\n\n const [open, setOpen] = useState(false);\n\n const hintInfo = useMemo(() => {\n const info = calcHintInfo(item);\n return info.avgPrice === 0 ? calcHintInfo(findMaxItem()) : info;\n }, [item, findMaxItem]);\n\n return (\n <TooltipRoot open={open} onOpenChange={setOpen}>\n <TooltipTrigger>\n <DesktopOrderBookCell\n background={\"\"}\n price={item[0]}\n quantity={item[1]}\n accumulated={item[2]}\n count={countQty}\n type={type}\n accumulatedAmount={item[3]}\n maxQty={maxQty}\n isHover={isHover}\n currentHover={hoverIndex === index}\n symbolInfo={symbolInfo}\n base={base}\n quote={quote}\n onMouseEnter={() => {\n setHoverIndex(index);\n setOpen(true);\n }}\n onMouseLeave={() => {\n setHoverIndex(-1);\n setOpen(false);\n }}\n />\n </TooltipTrigger>\n <TooltipContent\n className={cn(\n \"oui-rounded-base oui-flex oui-w-full oui-max-w-[400px] oui-flex-col oui-gap-2 oui-bg-base-6 oui-p-3 oui-text-2xs oui-shadow-md\",\n // type === OrderBookCellType.ASK ? `oui-mb-${30}` : \"oui-mt-0\"\n )}\n align={type === OrderBookCellType.ASK ? \"end\" : \"start\"}\n alignOffset={-25.4}\n side=\"left\"\n sideOffset={2}\n onPointerEnter={(e) => e.preventDefault()}\n >\n <Row\n title={`${t(\"common.avgPrice\")}≈`}\n content={hintInfo.avgPrice}\n // contentDp={priceDp}\n contentDp={quoteDp}\n />\n <Row\n title={`${t(\"trading.orderBook.sum\")} (${base})`}\n content={hintInfo.sumQty}\n contentDp={baseDp}\n />\n <Row\n title={`${t(\"trading.orderBook.sum\")} (${quote})`}\n content={hintInfo.sumQtyAmount}\n contentDp={quoteDp}\n />\n <TooltipArrow\n className=\"oui-fill-base-6\"\n style={{\n transform:\n type === OrderBookCellType.ASK\n ? \"translateX(80%)\"\n : \"translateX(-80%)\",\n }}\n />\n </TooltipContent>\n </TooltipRoot>\n );\n};\n\nconst Row: React.FC<{ title: string; content: number; contentDp: number }> = (\n props,\n) => {\n const { title, content, contentDp } = props;\n return (\n <div className=\"oui-flex oui-flex-row oui-justify-between oui-gap-4\">\n <div className=\"oui-select-none oui-text-base-contrast-36\">{title}</div>\n <div className=\"oui-text-end\">\n <Text.numeral dp={contentDp}>{content}</Text.numeral>\n </div>\n </div>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { DesktopListBox } from \"./listBox.desktop\";\n\nexport interface Props {\n data: number[][];\n}\n\nexport const DesktopAsks: FC<Props> = (props) => {\n const { data } = props;\n const countQty = useMemo(() => {\n let max = Number.NaN;\n const len = data.length;\n let index = 0;\n\n while (Number.isNaN(max) && index < len) {\n max = data[index][2];\n index++;\n }\n\n return max;\n }, [data]);\n\n return (\n <DesktopListBox\n type={OrderBookCellType.ASK}\n data={data}\n countQty={countQty}\n />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { DesktopListBox } from \"./listBox.desktop\";\n\nexport interface Props {\n data: any[];\n}\n\nexport const DesktopBids: FC<Props> = (props) => {\n const { data } = props;\n const countQty = useMemo(() => {\n let max = Number.NaN;\n // let len = data.length;\n let index = data.length - 1;\n\n while (Number.isNaN(max) && index > 0) {\n max = data[index][2];\n index--;\n }\n\n return max;\n // return data.length > 0 ? data[data.length - 1][2] : 0;\n }, [data]);\n return (\n <DesktopListBox\n type={OrderBookCellType.BID}\n data={data}\n countQty={countQty}\n />\n );\n};\n","import { Box, Select } from \"@kodiak-finance/orderly-ui\";\nimport { FC, useMemo } from \"react\";\n\ninterface DesktopDepthSelectProps {\n depths: string[];\n value?: string;\n onChange?: (depth: number) => void;\n}\n\nexport const DesktopDepthSelect: FC<DesktopDepthSelectProps> = (props) => {\n const options = useMemo(() => {\n return props.depths.map((d) => ({\n value: d,\n label: `${d}`,\n }));\n }, [props.depths]);\n\n return (\n <Box pl={3} width={97} className=\"oui-py-[10px]\">\n <Select.options\n options={options}\n size={\"xs\"}\n value={props.value}\n onValueChange={(value: any) => {\n props.onChange?.(value);\n }}\n />\n </Box>\n );\n};\n","import React, { FC, ReactNode } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n CaretDownIcon,\n CaretUpIcon,\n cn,\n Flex,\n Popover,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n ORDERBOOK_COIN_TYPE_KEY,\n useOrderBookContext,\n} from \"../../base/orderBook/orderContext\";\n\ninterface DesktopHeaderProps {\n quote: string;\n base: string;\n}\n\nconst Option: React.FC<{\n item: string;\n base: string;\n onClick: React.MouseEventHandler<HTMLElement>;\n}> = (props) => {\n const { item, base, onClick } = props;\n const { t } = useTranslation();\n const [coinType, setCoinType] = useLocalStorage(\n ORDERBOOK_COIN_TYPE_KEY,\n base,\n );\n return (\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-w-full oui-px-2 oui-py-[3px]\",\n \"oui-cursor-pointer\",\n \"oui-text-xs\",\n \"oui-text-base-contrast-54\",\n \"hover:oui-bg-base-6\",\n \"oui-rounded-[3px]\",\n \"oui-transition-all\",\n coinType === item && \"oui-bg-base-5\",\n )}\n onClick={(e) => {\n setCoinType(item);\n onClick(e);\n }}\n >\n {t(\"common.total\")}({item})\n <div\n className={cn(\n \"oui-transition-all\",\n \"oui-w-1\",\n \"oui-h-1\",\n \"oui-rounded-full\",\n \"oui-bg-gradient-to-r\",\n coinType === item &&\n \"oui-from-[rgb(var(--oui-gradient-brand-start))] oui-to-[rgb(var(--oui-gradient-brand-end))]\",\n )}\n />\n </Flex>\n );\n};\n\nexport const DesktopHeader: FC<DesktopHeaderProps> = (props) => {\n const { base, quote = \"USDC\" } = props;\n const { showTotal } = useOrderBookContext();\n const { t } = useTranslation();\n const [popoverOpen, setOpen] = React.useState<boolean>(false);\n const [coinType] = useLocalStorage(ORDERBOOK_COIN_TYPE_KEY, base);\n const TriggerIcon = popoverOpen ? CaretUpIcon : CaretDownIcon;\n return (\n <Flex pl={3} justify={\"between\"} className=\"oui-py-[6px]\">\n <Flex\n gap={1}\n className={cn(\"oui-basis-7/12\", showTotal && \"oui-basis-1/2\")}\n >\n <Box width={\"100%\"}>\n <Title\n id=\"oui-order-book-header-price\"\n className=\"oui-text-base-contrast-36\"\n >\n {`${t(\"common.price\")}(${quote})`}\n </Title>\n </Box>\n <Box width={\"100%\"}>\n <Title\n justifyEnd\n id=\"oui-order-book-header-qty\"\n className=\"oui-text-base-contrast-36\"\n >\n {`${t(\"common.qty\")}(${base})`}\n </Title>\n </Box>\n </Flex>\n <Flex\n gap={1}\n pr={3}\n className={cn(\"oui-basis-5/12\", showTotal && \"oui-basis-1/2\")}\n >\n {showTotal ? (\n <>\n <Box className=\"oui-text-base-contrast-36\" width={\"100%\"}>\n <Title id=\"oui-order-book-header-total-quote\" justifyEnd>\n {`${t(\"common.total\")}(${base})`}\n </Title>\n </Box>\n <Box className=\"oui-text-base-contrast-36\" width={\"100%\"}>\n <Title justifyEnd id=\"oui-order-book-header-total-base\">\n {`${t(\"common.total\")}(${quote})`}\n </Title>\n </Box>\n </>\n ) : (\n <Box width={\"100%\"}>\n <Popover\n open={popoverOpen}\n onOpenChange={setOpen}\n contentProps={{ className: cn(\"oui-w-28 oui-p-1\") }}\n content={\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n className={cn(\"oui-w-full oui-gap-0.5\")}\n >\n {[base, quote].map((item) => {\n return (\n <Option\n key={`type-${item}`}\n item={item}\n base={base}\n onClick={() => setOpen(false)}\n />\n );\n })}\n </Flex>\n }\n >\n <Flex\n justify=\"end\"\n itemAlign=\"center\"\n className=\"oui-cursor-pointer oui-select-none oui-text-base-contrast-36 oui-transition-all hover:oui-text-base-contrast\"\n >\n <Title justifyEnd id=\"oui-order-book-header-total-base\">\n {`${t(\"common.total\")}(${coinType})`}\n </Title>\n <TriggerIcon\n color=\"inherit\"\n className=\"oui-size-4 oui-text-3xs\"\n />\n </Flex>\n </Popover>\n </Box>\n )}\n </Flex>\n </Flex>\n );\n};\n\nconst Title: FC<{\n justifyEnd?: boolean;\n id?: string;\n children: ReactNode;\n className?: string;\n}> = (props) => {\n const { children, className, justifyEnd = false } = props;\n return (\n <Flex\n id={props.id}\n className={cn(\n className,\n \"oui-items-end oui-text-xs\",\n justifyEnd && \"oui-justify-end\",\n )}\n >\n {children}\n </Flex>\n );\n};\n","import {\n ArrowDownShortIcon,\n ArrowUpShortIcon,\n Box,\n cn,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { FC } from \"react\";\n\n/**\n * default style is desktop effect\n */\nexport const MiddlePriceView: FC<{\n markPrice: number;\n lastPrice: number[];\n quote_dp: number;\n className?: string;\n iconSize?: number;\n}> = (props) => {\n const {\n markPrice = 0,\n lastPrice,\n quote_dp,\n className,\n iconSize = 18,\n } = props;\n\n const [prevLastPrice, middlePrice] = lastPrice;\n\n const down = middlePrice < prevLastPrice;\n const up = middlePrice > prevLastPrice;\n\n return (\n <Flex\n gap={1}\n className={cn(\n up ? \"oui-text-trade-profit\" : down ? \"oui-text-trade-loss\" : \"\",\n className\n )}\n >\n <Text.numeral dp={quote_dp} intensity={98}>\n {middlePrice}\n </Text.numeral>\n <Box width={19}>\n {down && (\n <ArrowDownShortIcon size={iconSize} color=\"danger\" opacity={1} />\n )}\n {up && <ArrowUpShortIcon size={iconSize} color=\"success\" opacity={1} />}\n </Box>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Tooltip,\n cn,\n Flex,\n Text,\n SimpleDialog,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\n/**\n * default style is desktop effect\n */\nexport const MarkPriceView: FC<{\n markPrice: number;\n quote_dp: number;\n className?: string;\n iconSize?: number;\n}> = (props) => {\n const { isMobile } = useScreen();\n\n return isMobile ? <MobileLayout {...props} /> : <DesktopLayout {...props} />;\n};\n\nconst DesktopLayout: FC<{\n markPrice: number;\n quote_dp: number;\n className?: string;\n iconSize?: number;\n}> = (props) => {\n const { quote_dp, className, iconSize = 18 } = props;\n const { t } = useTranslation();\n return (\n <Tooltip\n content={t(\"trading.orderBook.markPrice.tooltip\")}\n className=\"oui-max-w-[270px]\"\n >\n <Flex\n gap={1}\n className={cn(\"oui-cursor-pointer oui-text-2xs\", className)}\n >\n <FlagIcon size={iconSize} />\n <Text.numeral\n dp={quote_dp}\n color=\"warning\"\n className=\"oui-underline oui-text-base oui-decoration-dashed oui-decoration-1 oui-underline-offset-4 oui-decoration-warning-darken\"\n >\n {props.markPrice}\n </Text.numeral>\n </Flex>\n </Tooltip>\n );\n};\n\nconst MobileLayout: FC<{\n markPrice: number;\n quote_dp: number;\n className?: string;\n iconSize?: number;\n}> = (props) => {\n const { quote_dp, className, iconSize = 18 } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n return (\n <>\n <Flex\n gap={1}\n className={cn(\"oui-cursor-pointer oui-text-2xs\", className)}\n onClick={() => {\n setOpen(true);\n }}\n >\n <FlagIcon size={iconSize} />\n <Text.numeral\n dp={quote_dp}\n color=\"warning\"\n className=\"oui-underline oui-decoration-dashed oui-decoration-1 oui-underline-offset-4 oui-decoration-warning-darken\"\n >\n {props.markPrice}\n </Text.numeral>\n </Flex>\n <SimpleDialog\n size=\"xs\"\n open={open}\n onOpenChange={setOpen}\n title={t(\"common.tips\")}\n actions={{\n primary: {\n label: t(\"common.ok\"),\n onClick: () => setOpen(false),\n },\n }}\n >\n <Text>{t(\"trading.orderBook.markPrice.tooltip\")}</Text>\n </SimpleDialog>\n </>\n );\n};\n\nconst FlagIcon = (props: { size: number }) => {\n return (\n <svg\n width={props.size}\n height={props.size}\n viewBox=\"0 0 18 18\"\n fill=\"currenColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-warning-darken\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.75 1.5a.75.75 0 0 1 .75.75h6a.75.75 0 0 1 .75.75v1.5h3a.75.75 0 0 1 .75.75V12a.75.75 0 0 1-.75.75H7.5a.75.75 0 0 1-.75-.75v-1.5H4.5v5.25a.75.75 0 0 1-1.5 0V2.25a.75.75 0 0 1 .75-.75M4.5 9h5.25V3.75H4.5zm6.75-3v3.75a.75.75 0 0 1-.75.75H8.25v.75h5.25V6z\"\n // fill=\"#FF7D00\"\n />\n </svg>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { cn, Flex, Text, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport { useOrderBookContext } from \"../../base/orderBook/orderContext\";\nimport { MiddlePriceView } from \"../../base/orderBook/midPriceView\";\nimport { MarkPriceView } from \"../../base/orderBook/markPrice\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\ninterface DesktopMarkPriceProps {\n markPrice: number;\n lastPrice: number[];\n asks: number[][];\n bids: number[][];\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const DesktopMarkPrice: FC<DesktopMarkPriceProps> = (props) => {\n const { markPrice = 0, lastPrice, asks, bids, symbolInfo } = props;\n const { showTotal } = useOrderBookContext();\n\n return (\n <div className=\"oui-flex oui-flex-row oui-pl-3 oui-tabular-nums oui-justify-between oui-text-base-contrast-80 oui-text-xs oui-relative oui-cursor-pointer oui-py-[6px]\">\n <div\n className={cn(\n \"oui-basis-7/12 oui-flex oui-flex-row oui-items-center oui-mr-2 oui-justify-between\",\n showTotal && \"oui-basis-5/12\"\n )}\n >\n <MiddlePriceView\n markPrice={markPrice}\n lastPrice={lastPrice}\n quote_dp={symbolInfo.quote_dp}\n className=\"oui-text-base\"\n />\n <MarkPriceView markPrice={markPrice} quote_dp={symbolInfo.quote_dp} />\n </div>\n <div\n className={cn(\n \"oui-basis-5/12 oui-flex oui-items-center oui-fex-row oui-overflow-hidden oui-relative oui-justify-end\",\n showTotal && \"oui-basis-7/12\",\n \"oui-pr-3\"\n )}\n >\n <Spread asks={asks} bids={bids} />\n </div>\n </div>\n );\n};\n\nconst Spread: FC<{\n asks: number[][];\n bids: number[][];\n}> = (props) => {\n const { asks, bids } = props;\n\n const { t } = useTranslation();\n\n const spread = useMemo(() => {\n if (bids.length === 0 && asks.length === 0) {\n return 0;\n }\n const bid1 = Number.isNaN(bids[0][0]) ? 0 : bids[0][0];\n const index = asks.reverse().findIndex((item) => !Number.isNaN(item[0]));\n\n let ask1 = 0.0;\n if (index !== -1) {\n ask1 = Number.isNaN(asks[index][0]) ? 0 : asks[index][0];\n }\n const dValue = new Decimal(ask1)\n .sub(bid1)\n .div(new Decimal(ask1).add(bid1).div(2));\n // 0.00006416604461251195\n // 0.000065\n // 0.0065\n return Math.ceil(dValue.toNumber() * 1000000 + 0.1) / 10000;\n }, [asks, bids]);\n\n return (\n <div>\n <Tooltip\n content={t(\"trading.orderBook.spreadRatio.tooltip\")}\n className=\"oui-max-w-[240px]\"\n >\n <Text\n size=\"2xs\"\n intensity={36}\n className={\n \"oui-cursor-pointer oui-underline oui-decoration-dashed oui-decoration-1 oui-underline-offset-4 oui-decoration-base-contrast-36\"\n }\n >\n {`${spread}%`}\n </Text>\n </Tooltip>\n </div>\n );\n};\n","import { FC, useEffect, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { cn, Grid, Spinner } from \"@kodiak-finance/orderly-ui\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport {\n ORDERBOOK_COIN_TYPE_KEY,\n OrderBookProvider,\n} from \"../../base/orderBook/orderContext\";\nimport { DesktopAsks } from \"./asks.desktop\";\nimport { DesktopBids } from \"./bids.desktop\";\nimport { DesktopDepthSelect } from \"./depthSelect.desktop\";\nimport { DesktopHeader } from \"./header.desktop\";\nimport { DesktopMarkPrice } from \"./markPrice.desktop\";\n\nexport interface DesktopOrderBookProps {\n asks: any[];\n bids: any[];\n markPrice: number;\n lastPrice: number[];\n onItemClick?: (item: number[]) => void;\n depths: string[];\n activeDepth?: string;\n onDepthChange?: (depth: number) => void;\n //\n autoSize?: boolean;\n level?: number;\n base: string;\n quote: string;\n\n isLoading?: boolean;\n\n cellHeight?: number;\n\n className?: string;\n pendingOrders?: number[];\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const DesktopOrderBook: FC<DesktopOrderBookProps> = (props) => {\n const { lastPrice, markPrice, quote, base, isLoading, onDepthChange } = props;\n\n const divRef = useRef<HTMLDivElement>(null);\n\n const [showTotal, setShowTotal] = useState(false);\n\n const [coinType, setCoinType] = useLocalStorage(\n ORDERBOOK_COIN_TYPE_KEY,\n base,\n );\n\n useEffect(() => {\n if (coinType !== quote && base) {\n setCoinType(base);\n }\n }, [base, quote]);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { inlineSize: width } = entry.borderBoxSize[0];\n setShowTotal(width >= 360);\n }\n });\n\n const targetDiv = divRef.current;\n\n if (targetDiv) {\n resizeObserver.observe(targetDiv);\n }\n\n return () => {\n if (targetDiv) {\n resizeObserver.unobserve(targetDiv);\n }\n };\n }, []);\n\n return (\n <OrderBookProvider\n cellHeight={props.cellHeight ?? 20}\n onItemClick={props.onItemClick}\n depth={props.activeDepth}\n showTotal={showTotal}\n pendingOrders={props.pendingOrders || EMPTY_LIST}\n symbolInfo={props.symbolInfo}\n >\n <Grid\n cols={1}\n rows={5}\n id=\"oui-orderbook-desktop\"\n ref={divRef}\n className=\"oui-relative oui-size-full oui-grid-rows-[auto,auto,1fr,auto,1fr]\"\n >\n <DesktopDepthSelect\n depths={props.depths}\n value={props.activeDepth}\n onChange={onDepthChange}\n />\n <DesktopHeader quote={quote} base={base} />\n <DesktopAsks data={[...props.asks]} />\n <DesktopMarkPrice\n lastPrice={lastPrice}\n markPrice={markPrice}\n // ======================================================================\n // == 🔥🔥🔥🔥🔥🔥🔥 DO NOT MODIFY THIS 🔥🔥🔥🔥🔥🔥🔥 ==\n // ======================================================================\n // Use shallow copy here to avoid mutating the original props array when sorting or modifying inside the component.\n // Note: This only clones the array itself, not the element objects.\n asks={[...props.asks]}\n bids={[...props.bids]}\n symbolInfo={props.symbolInfo}\n />\n <DesktopBids data={[...props.bids]} />\n {isLoading && (\n <div className=\"oui-bg-bg-8/70 oui-absolute oui-inset-0 oui-z-10 oui-flex oui-items-center oui-justify-center\">\n <Spinner />\n </div>\n )}\n </Grid>\n </OrderBookProvider>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { FundingRateState } from \"./fundingRate.script\";\n\nexport const FundingRate: FC<FundingRateState> = (props) => {\n const { data, onClick } = props;\n const predFundingRate = data.est_funding_rate;\n const countDown = data.countDown;\n const { t } = useTranslation();\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"} pb={2}>\n <Text\n size=\"2xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n onClick={onClick}\n >\n {t(\"trading.fundingRate.predFundingRate\")}\n </Text>\n {predFundingRate === null ? (\n \"--\"\n ) : (\n <div className=\"orderly-flex orderly-gap-1 oui-text-2xs oui-text-base-contrast-36\">\n {/* <span className=\"orderly-text-warning-darken\">{`${predFundingRate}%`}</span> */}\n <Text.numeral coloring suffix=\"%\" dp={4}>\n {predFundingRate ?? \"--\"}\n </Text.numeral>\n <span>{\" in\"}</span>\n <span>{\" \" + countDown}</span>\n </div>\n )}\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useFundingDetails } from \"@kodiak-finance/orderly-hooks\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\ninterface FundingRateOptions {\n symbol: string;\n}\n\nexport const useFundingRateModalScript = (options: FundingRateOptions) => {\n const { data, isLoading } = useFundingDetails(options.symbol);\n\n const fundingPeriod = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${data.funding_period}h`;\n }, [data, isLoading]);\n\n const capFunding = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.cap_funding).mul(100).toNumber()}%`;\n }, [data, isLoading]);\n\n const floorFunding = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.floor_funding).mul(100).toNumber()}%`;\n }, [data, isLoading]);\n\n return { fundingPeriod, capFunding, floorFunding };\n};\n\nexport type FundingRateModalState = ReturnType<\n typeof useFundingRateModalScript\n>;\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text, Divider } from \"@kodiak-finance/orderly-ui\";\nimport type { FundingRateModalState } from \"./fundingRateModal.script\";\n\nexport const FundingRateModal: React.FC<FundingRateModalState> = (props) => {\n const { t } = useTranslation();\n const { fundingPeriod, capFunding, floorFunding } = props;\n return (\n <Flex width={\"100%\"} itemAlign={\"center\"} direction=\"column\" gap={1}>\n <Flex justify=\"between\" itemAlign={\"center\"} width={\"100%\"}>\n <Text intensity={54}>\n {t(\"trading.fundingRate.predFundingRate.interval\")}\n </Text>\n <Text intensity={80}>{fundingPeriod}</Text>\n </Flex>\n <Flex justify=\"between\" itemAlign={\"center\"} width={\"100%\"}>\n <Text intensity={54}>\n {t(\"trading.fundingRate.predFundingRate.cap\")} /\n {t(\"trading.fundingRate.predFundingRate.floor\")}\n </Text>\n <Text intensity={80}>\n {capFunding} / {floorFunding}\n </Text>\n </Flex>\n <Divider my={4} className=\"oui-w-full\" intensity={8} />\n {t(\"markets.symbolInfoBar.predFundingRate.tooltip\")}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useFundingRateModalScript } from \"./fundingRateModal.script\";\nimport { FundingRateModal } from \"./fundingRateModal.ui\";\n\nexport const FundingRateModalWidget: React.FC<{ symbol: string }> = (props) => {\n const state = useFundingRateModalScript(props);\n return <FundingRateModal {...state} />;\n};\n\nexport const FundingRateDialogId = \"FundingRateDialogId\";\nexport const FundingRateSheetId = \"FundingRateSheetId\";\n\nregisterSimpleDialog(FundingRateDialogId, FundingRateModalWidget, {\n size: \"md\",\n classNames: { content: \"oui-border oui-border-line-6\" },\n title: () => i18n.t(\"funding.fundingRate\"),\n});\n\nregisterSimpleSheet(FundingRateSheetId, FundingRateModalWidget, {\n title: () => i18n.t(\"funding.fundingRate\"),\n});\n","import { useCallback } from \"react\";\nimport { useFundingRate } from \"@kodiak-finance/orderly-hooks\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { FundingRateDialogId } from \"../fundingRateModal/fundingRateModal.widget\";\n\nexport const useFundingRateScript = (symbol: string) => {\n const data = useFundingRate(symbol);\n const onClick = useCallback<React.MouseEventHandler<HTMLElement>>(() => {\n modal.show(FundingRateDialogId, { symbol });\n }, [symbol]);\n return {\n data,\n onClick,\n };\n};\n\nexport type FundingRateState = ReturnType<typeof useFundingRateScript>;\n","import React from \"react\";\nimport { useFundingRateScript } from \"./fundingRate.script\";\nimport { FundingRate } from \"./fundingRate.ui\";\n\nexport const FundingRateWidget: React.FC<{ symbol: string }> = (props) => {\n const state = useFundingRateScript(props.symbol);\n return <FundingRate {...state} />;\n};\n","export { FundingRate } from \"./fundingRate.ui\";\nexport { FundingRateWidget } from \"./fundingRate.widget\";\nexport { useFundingRateScript } from \"./fundingRate.script\";\n","import { FC, useContext, useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { Box, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { getPrecisionByNumber } from \"@kodiak-finance/orderly-utils\";\nimport { CellBar } from \"../../base/orderBook/cellBar\";\nimport {\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n OrderBookContext,\n} from \"../../base/orderBook/orderContext\";\nimport { OrderBookCellType, QtyMode } from \"../../base/orderBook/types\";\n\nexport interface OrderBookCellProps {\n background: string;\n price: number;\n quantity: number;\n accumulatedAmount: number;\n // size: number;\n count: number;\n accumulated: number;\n type: OrderBookCellType;\n mode: QtyMode;\n}\n\nexport const OrderBookCell: FC<OrderBookCellProps> = (props) => {\n const { accumulated, count, quantity, price, type, accumulatedAmount } =\n props;\n\n const width = (accumulated / count) * 100;\n\n const { cellHeight, onItemClick, depth, symbolInfo } =\n useContext(OrderBookContext);\n\n const { base_dp, quote_dp, base, quote } = symbolInfo;\n\n const [coinUnit, setCoinUnit] = useLocalStorage<\"qty\" | \"base\" | \"quote\">(\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n \"qty\",\n );\n\n const totalAmount = Number.isNaN(accumulated)\n ? \"-\"\n : accumulatedAmount?.toString();\n\n const dp = useMemo(() => {\n return getPrecisionByNumber(depth || `${quote_dp}`);\n }, [depth, quote_dp]);\n\n const renderCell = () => {\n switch (coinUnit) {\n case \"base\":\n return (\n <Text.numeral className=\"oui-text-base-contrast-80\" dp={base_dp}>\n {accumulated}\n </Text.numeral>\n );\n case \"quote\":\n return (\n <Text.numeral className=\"oui-text-base-contrast-80\" dp={0}>\n {totalAmount}\n </Text.numeral>\n );\n default:\n return (\n <Text.numeral className=\"oui-text-base-contrast-80\" dp={base_dp}>\n {Number.isNaN(quantity) ? \"-\" : quantity}\n </Text.numeral>\n );\n }\n };\n\n return (\n <Box\n className={cn(\n \"oui-relative oui-w-full oui-cursor-pointer oui-overflow-hidden oui-text-2xs oui-tabular-nums\",\n )}\n style={{ height: `${cellHeight}px` }}\n onClick={() => {\n if (Number.isNaN(price) || Number.isNaN(quantity)) {\n return;\n }\n onItemClick?.([price, quantity]);\n }}\n >\n <Flex itemAlign=\"center\" justify={\"between\"}>\n <Text.numeral\n color={type === OrderBookCellType.BID ? \"buy\" : \"sell\"}\n dp={dp}\n >\n {price}\n </Text.numeral>\n {renderCell()}\n </Flex>\n {Number.isNaN(width) ? null : (\n <CellBar\n width={width}\n className={cn(\n type === OrderBookCellType.ASK\n ? \"oui-bg-trade-loss/20\"\n : \"oui-bg-trade-profit/20\",\n )}\n />\n )}\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { Box } from \"@kodiak-finance/orderly-ui\";\nimport { useOrderBookContext } from \"../../base/orderBook/orderContext\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { OrderBookCell } from \"./cell\";\n\ninterface OrderBookListProps {\n type: OrderBookCellType;\n data: number[][];\n countQty: number;\n}\n\nexport const ListBox: FC<OrderBookListProps> = (props) => {\n const { data } = props;\n const { mode } = useOrderBookContext();\n return (\n <Box className=\"oui-order-book-list oui-flex oui-w-full oui-flex-col oui-gap-px\">\n {data.map((item, index) => {\n return (\n <OrderBookCell\n key={`item-${index}`}\n background={\"\"}\n price={item[0]}\n quantity={item[1]}\n accumulated={item[2]}\n accumulatedAmount={item[3]}\n count={props.countQty}\n type={props.type}\n mode={mode}\n />\n );\n })}\n </Box>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { ListBox } from \"./listBox\";\n\nexport interface Props {\n data: number[][];\n}\nexport const Asks: FC<Props> = (props) => {\n const { data } = props;\n const countQty = useMemo(() => {\n const len = data.length;\n let max = Number.NaN;\n\n let index = 0;\n\n while (Number.isNaN(max) && index < len) {\n max = data[index][2];\n index++;\n }\n\n return max;\n }, [data]);\n return (\n <ListBox type={OrderBookCellType.ASK} data={data} countQty={countQty} />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { ListBox } from \"./listBox\";\n\nexport interface Props {\n data: any[];\n}\n\nexport const Bids: FC<Props> = (props) => {\n const { data } = props;\n const countQty = useMemo(() => {\n let max = Number.NaN;\n // let len = data.length;\n let index = data.length - 1;\n\n while (Number.isNaN(max) && index > 0) {\n max = data[index][2];\n index--;\n }\n\n return max;\n // return data.length > 0 ? data[data.length - 1][2] : 0;\n }, [data]);\n\n return (\n <ListBox type={OrderBookCellType.BID} data={data} countQty={countQty} />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Box, Picker } from \"@kodiak-finance/orderly-ui\";\n\ninterface DepthSelectProps {\n depth: ReadonlyArray<string> | string[];\n value?: string;\n onChange?: (depth: number) => void;\n}\n\nexport const DepthSelect: FC<DepthSelectProps> = (props) => {\n const options = useMemo(() => {\n return props.depth.map((d) => ({\n value: d,\n label: `${d}`,\n }));\n }, [props.depth]);\n return (\n <Box id=\"oui-order-book-depth\" className=\"oui-w-full oui-pt-2\">\n {/* <Select size={\"small\"} value={\"0.001\"} /> */}\n <Picker\n options={options}\n fullWidth\n size={\"sm\"}\n value={props.value}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n onValueChange={(value) => {\n //\n props.onChange?.(value);\n }}\n />\n </Box>\n );\n};\n","import React, { FC, useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n CaretDownIcon,\n CaretUpIcon,\n Flex,\n Picker,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport { ORDERBOOK_MOBILE_COIN_TYPE_KEY } from \"../../base/orderBook/orderContext\";\n\ninterface Props {\n quote: string;\n base: string;\n}\n\nexport const Header: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n const { base, quote } = props;\n\n const [coinUnit, setCoinUnit] = useLocalStorage<\"qty\" | \"base\" | \"quote\">(\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n \"qty\",\n );\n\n const options = useMemo<SelectOption[]>(() => {\n return [\n {\n value: \"qty\",\n label: `${t(\"common.quantity\")}(${base})`,\n data: [t(\"common.quantity\"), base],\n },\n {\n value: \"base\",\n label: `${t(\"common.total\")}(${base})`,\n data: [t(\"common.total\"), base],\n },\n {\n value: \"quote\",\n label: `${t(\"common.total\")}(${quote})`,\n data: [t(\"common.total\"), quote],\n },\n ];\n }, [t, base, quote]);\n\n return (\n <Flex\n justify={\"between\"}\n width={\"100%\"}\n className=\"oui-py-[5px] oui-text-2xs oui-text-base-contrast-36\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n id=\"oui-order-book-header-price\"\n >\n <Text>{t(\"common.price\")}</Text>\n <Text>{`(${quote})`}</Text>\n </Flex>\n <Picker\n size=\"sm\"\n value={coinUnit}\n onValueChange={setCoinUnit}\n options={options}\n valueRenderer={(_, { open, data }) => {\n return (\n <Flex justify=\"between\" itemAlign=\"center\" gap={1}>\n {Array.isArray(data) && (\n <Flex direction={\"column\"} itemAlign={\"end\"}>\n {data[0] && <Text>{data[0]}</Text>}\n {data[1] && <Text>({data[1]})</Text>}\n </Flex>\n )}\n {open ? (\n <CaretUpIcon size={14} color=\"inherit\" />\n ) : (\n <CaretDownIcon size={14} color=\"inherit\" />\n )}\n </Flex>\n );\n }}\n />\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { MarkPriceView } from \"../../base/orderBook/markPrice\";\nimport { MiddlePriceView } from \"../../base/orderBook/midPriceView\";\nimport { useOrderBookContext } from \"../../base/orderBook/orderContext\";\n\ninterface MarkPriceProps {\n markPrice: number;\n lastPrice: number[];\n}\n\nexport const MarkPrice: FC<MarkPriceProps> = (props) => {\n const { symbolInfo } = useOrderBookContext();\n\n const { quote_dp } = symbolInfo;\n\n return (\n <Flex\n id=\"oui-order-book-mark-price\"\n className=\"oui-py-[6px]\"\n width={\"100%\"}\n justify={\"between\"}\n >\n <MiddlePriceView\n markPrice={props.markPrice}\n lastPrice={props.lastPrice}\n quote_dp={quote_dp}\n className=\"oui-text-sm\"\n iconSize={14}\n />\n <MarkPriceView\n markPrice={props.markPrice}\n quote_dp={quote_dp}\n className=\"oui-text-2xs\"\n iconSize={12}\n />\n </Flex>\n );\n};\n","import { FC, useEffect } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { cn, Flex, Spinner } from \"@kodiak-finance/orderly-ui\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport {\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n OrderBookProvider,\n} from \"../../base/orderBook/orderContext\";\nimport { FundingRateWidget } from \"../fundingRate\";\nimport { Asks } from \"./asks\";\nimport { Bids } from \"./bids\";\nimport { DepthSelect } from \"./depthSelect\";\nimport { Header } from \"./header\";\nimport { MarkPrice } from \"./markPrice\";\n\nexport interface OrderBookProps {\n asks: any[];\n bids: any[];\n markPrice: number;\n lastPrice: number[];\n onItemClick?: (item: number[]) => void;\n depths?: string[];\n activeDepth?: string;\n onDepthChange?: (depth: number) => void;\n //\n autoSize?: boolean;\n level?: number;\n base: string;\n quote: string;\n\n isLoading?: boolean;\n\n cellHeight?: number;\n\n className?: string;\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const OrderBook: FC<OrderBookProps> = (props) => {\n const { lastPrice, markPrice, quote, base, isLoading, onDepthChange } = props;\n\n const symbol = `PERP_${props.symbolInfo.base}_${props.symbolInfo.quote}`;\n\n const [coinUnit, setCoinUnit] = useLocalStorage<\"qty\" | \"base\" | \"quote\">(\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n \"qty\",\n );\n\n return (\n <OrderBookProvider\n cellHeight={props.cellHeight ?? 20}\n onItemClick={props.onItemClick}\n depth={props.activeDepth}\n pendingOrders={EMPTY_LIST}\n showTotal={false}\n symbolInfo={props.symbolInfo}\n >\n <Flex\n direction={\"column\"}\n p={2}\n id=\"oui-orderbook-mobile\"\n className={cn(\"oui-relative oui-size-full\", props.className)}\n justify={\"start\"}\n itemAlign={\"start\"}\n >\n <FundingRateWidget symbol={symbol} />\n <Header quote={quote} base={base} />\n <Asks data={props.asks} />\n <MarkPrice lastPrice={lastPrice} markPrice={markPrice} />\n <Bids data={props.bids} />\n <DepthSelect\n depth={props.depths || EMPTY_LIST}\n value={props.activeDepth}\n onChange={onDepthChange}\n />\n {isLoading && (\n <div className=\"oui-bg-base-800/70 oui-absolute oui-inset-0 oui-z-10 oui-flex oui-h-full oui-min-h-[420px] oui-items-center oui-justify-center\">\n <Spinner />\n </div>\n )}\n </Flex>\n </OrderBookProvider>\n );\n};\n","import React from \"react\";\nimport { Box } from \"@kodiak-finance/orderly-ui\";\nimport { DesktopOrderBook } from \"../../desktop/orderBook/index.desktop\";\nimport { OrderBook as MWebOrderBook } from \"../../mobile/orderBook\";\nimport type { OrderBookState } from \"./orderBook.script\";\n\nexport const OrderBook: React.FC<OrderBookState & { className?: string }> = (\n props,\n) => {\n return (\n <Box className=\"oui-font-semibold\" width={\"100%\"} height={\"100%\"}>\n {props.isMobile ? (\n <MWebOrderBook\n level={props.level}\n asks={props.asks!}\n bids={props.bids!}\n markPrice={props.markPrice!}\n lastPrice={props.lastPrice!}\n depths={props.depths}\n activeDepth={props.selDepth}\n base={props.base}\n quote={props.quote}\n isLoading={props.isLoading}\n onItemClick={props.onItemClick}\n cellHeight={props.cellHeight}\n onDepthChange={props.onDepthChange}\n className={props.className}\n symbolInfo={props.symbolInfo}\n />\n ) : (\n <DesktopOrderBook\n level={props.level}\n asks={props.asks!}\n bids={props.bids!}\n markPrice={props.markPrice!}\n lastPrice={props.lastPrice!}\n depths={props.depths}\n activeDepth={props.selDepth}\n base={props.base}\n quote={props.quote}\n isLoading={props.isLoading}\n onItemClick={props.onItemClick}\n cellHeight={props.cellHeight}\n onDepthChange={props.onDepthChange}\n className={props.className}\n pendingOrders={props.pendingOrders}\n symbolInfo={props.symbolInfo}\n />\n )}\n </Box>\n );\n};\n","import type { API } from \"@kodiak-finance/orderly-types\";\nimport type { BasicSymbolInfo } from \"../types/types\";\n\ntype ValueOf<T> = T[keyof T];\n\nexport const getBasicSymbolInfo = (\n symbolInfo: (\n key?: keyof API.SymbolExt,\n defaultValue?: ValueOf<API.SymbolExt>,\n ) => any,\n): BasicSymbolInfo => {\n return {\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n };\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useOrderbookStream,\n useOrderStream,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { removeTrailingZeros } from \"@kodiak-finance/orderly-utils\";\nimport { getBasicSymbolInfo } from \"../../../utils/utils\";\n\nconst CELL_MAX = 30;\n\nconst DEFAULT_CELL_HEIGHT = 20;\n\nconst SPACE = 104;\n\nexport const useOrderBookScript = (props: {\n symbol: string;\n height?: number;\n}) => {\n const { symbol, height } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n\n const [cellHeight, setCellHeight] = useState(DEFAULT_CELL_HEIGHT);\n\n const [level, setLevel] = useState(10);\n const { base, quote, quote_dp } = getBasicSymbolInfo(symbolInfo);\n // const counter = useRef(0);\n\n const [data, { onDepthChange, isLoading, onItemClick, depth, allDepths }] =\n useOrderbookStream(symbol, undefined, { level });\n\n // useEffect(() => {\n // counter.current = 0;\n // }, [symbol]);\n\n const pendingOrders = usePendingOrderStream(symbol);\n useEffect(() => {\n if (height) {\n // setCellHeight(height.content / level);\n const level = Math.floor(\n (height - SPACE) / ((DEFAULT_CELL_HEIGHT + 1) * 2),\n );\n\n const cellsHeight = (DEFAULT_CELL_HEIGHT + 1) * 2 * level;\n\n const restSpace = height - SPACE - cellsHeight;\n\n if (restSpace > 10) {\n setCellHeight(DEFAULT_CELL_HEIGHT + restSpace / level / 2);\n } else {\n setCellHeight(DEFAULT_CELL_HEIGHT);\n }\n\n setLevel(level);\n }\n }, [height]);\n\n const selDepth = useMemo(() => {\n if (typeof depth === \"undefined\" || typeof quote_dp === \"undefined\") {\n return undefined;\n }\n // // FIXME: hardcode for now, need to optimize it\n // counter.current++;\n // if (counter.current === 1 && DEFAULT_DEPTH[symbol]) {\n // return DEFAULT_DEPTH[symbol];\n // }\n\n return removeTrailingZeros(depth);\n }, [depth, quote_dp, symbol]);\n\n const depths = useMemo(() => {\n return allDepths?.map((e) => removeTrailingZeros(e)) || [];\n }, [allDepths, quote_dp]);\n\n const { isMobile } = useScreen();\n\n return {\n level,\n asks: data?.asks,\n bids: data?.bids,\n markPrice: data?.markPrice,\n lastPrice: data?.middlePrice,\n depths,\n selDepth,\n base,\n quote,\n isLoading,\n onItemClick,\n cellHeight,\n onDepthChange,\n pendingOrders,\n symbolInfo: getBasicSymbolInfo(symbolInfo),\n isMobile,\n };\n};\n\nexport const usePendingOrderStream = (symbol: string): number[] => {\n const [data] = useOrderStream({\n status: OrderStatus.INCOMPLETE,\n symbol: symbol,\n });\n\n const pendingOrders = useMemo(() => {\n const info = data\n ?.filter((item) => item.symbol === symbol)\n .reduce((a, b) => {\n // TODO: check if this is the correct price, when the data is from WS, it crashes\n const price = b.price || b.trigger_price || 0;\n return [...a, price];\n }, []);\n\n return info;\n }, [data, symbol]);\n\n return pendingOrders;\n};\n\nexport type OrderBookState = ReturnType<typeof useOrderBookScript>;\n","import React from \"react\";\nimport { useOrderBookScript } from \"./orderBook.script\";\nimport { OrderBook } from \"./orderBook.ui\";\n\ninterface OrderBookWidgetProps {\n className?: string;\n symbol: string;\n height?: number;\n}\n\nexport const OrderBookWidget: React.FC<OrderBookWidgetProps> = (props) => {\n const { className, symbol, height } = props;\n const state = useOrderBookScript({ symbol, height });\n return <OrderBook {...state} className={className} />;\n};\n","export { OrderBook } from \"./orderBook.ui\";\nexport { OrderBookWidget } from \"./orderBook.widget\";\nexport { useOrderBookScript } from \"./orderBook.script\";\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n Flex,\n Text,\n Box,\n Tooltip,\n modal,\n gradientTextVariants,\n cn,\n EditIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { LeverageWidgetWithDialogId } from \"@kodiak-finance/orderly-ui-leverage\";\nimport { TooltipContent } from \"../assetView/assetView.ui\";\nimport { RiskRateState } from \"./riskRate.script\";\n\nexport const RiskRate: FC<RiskRateState> = (props) => {\n const { riskRate, riskRateColor, currentLeverage, maxLeverage } = props;\n const { isHigh, isMedium, isLow } = riskRateColor;\n const { wrongNetwork } = useAppContext();\n const { t } = useTranslation();\n\n const textColor = wrongNetwork\n ? \"\"\n : isHigh\n ? \"oui-text-danger\"\n : isMedium\n ? \"oui-text-warning-darken\"\n : isLow\n ? gradientTextVariants({ color: \"brand\" })\n : \"\";\n\n const boxClsName = wrongNetwork\n ? \"oui-bg-gradient-to-r oui-opacity-20 oui-from-[#26fefe] oui-via-[#ff7d00] oui-to-[#d92d6b] oui-h-1.5 oui-rounded-full\"\n : isHigh\n ? \"oui-bg-gradient-to-tr oui-from-[#791438] oui-to-[#ff447c] oui-h-1.5 oui-rounded-full\"\n : isMedium\n ? \"oui-bg-gradient-to-tr oui-from-[#792e00] oui-to-[#ffb65d] oui-h-1.5 oui-rounded-full\"\n : isLow\n ? \"oui-bg-gradient-to-tr oui-from-[#59b0fe] oui-to-[#26fefe] oui-h-1.5 oui-rounded-full\"\n : \"oui-bg-gradient-to-r oui-opacity-20 oui-from-[#26fefe] oui-via-[#ff7d00] oui-to-[#d92d6b] oui-h-1.5 oui-rounded-full\";\n\n return (\n <Box data-risk={\"\"} className=\"oui-space-y-2\">\n <Flex\n itemAlign=\"center\"\n justify=\"start\"\n className=\"oui-w-full oui-bg-base-6 oui-rounded-full oui-h-2 oui-px-[1px]\"\n >\n <Box\n className={boxClsName}\n style={\n riskRate && riskRate !== \"--\"\n ? { width: riskRate }\n : { width: \"100%\" }\n }\n />\n </Flex>\n\n <Flex direction=\"row\" justify=\"between\">\n <Tooltip\n content={\n <TooltipContent\n description={t(\"trading.riskRate.tooltip\")}\n formula={t(\"trading.riskRate.formula\")}\n />\n }\n >\n <Text\n size=\"2xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className={cn(\n \"oui-cursor-pointer\",\n \"oui-border-b oui-border-dashed oui-border-b-white/10\",\n )}\n >\n {t(\"trading.riskRate\")}\n </Text>\n </Tooltip>\n <Text\n size=\"xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className={cn(textColor)}\n >\n {riskRate ?? \"--\"}\n </Text>\n </Flex>\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useLeverage,\n useMarginRatio,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\nconst getRiskRateColor = (riskRate: null | number) => {\n if (riskRate === null) {\n return { isHigh: false, isMedium: false, isLow: false, isDefault: true };\n }\n\n const isLow = riskRate < 40;\n const isMedium = riskRate >= 40 && riskRate < 80;\n const isHigh = riskRate >= 80;\n const isDefault = !isLow && !isMedium && !isHigh;\n\n return { isHigh, isMedium, isLow, isDefault };\n};\n\nexport const useRiskRateScript = () => {\n const { state } = useAccount();\n\n const isConnected =\n state.status >= AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n const { marginRatio, currentLeverage, mmr } = useMarginRatio();\n\n const { curLeverage } = useLeverage();\n\n const riskRate = useMemo(() => {\n if (!isConnected || marginRatio === null || mmr === null) {\n return \"--\";\n }\n\n if (marginRatio === 0 || mmr === 0) {\n return \"0%\";\n }\n\n const calculatedRiskRate = new Decimal(mmr)\n .div(marginRatio)\n .mul(100)\n .todp(2, Decimal.ROUND_UP);\n\n // Remove trailing zeroes and add percentage sign\n return `${calculatedRiskRate.toString().replace(/\\.?0+$/, \"\")}%`;\n }, [isConnected, marginRatio, mmr]);\n\n const riskRateNumber = riskRate === \"--\" ? null : parseFloat(riskRate);\n\n const riskRateColor = useMemo(() => {\n return getRiskRateColor(riskRateNumber);\n }, [riskRateNumber]);\n\n const _curLeverage = useDataTap(currentLeverage);\n const _maxLeverage = useDataTap(curLeverage);\n const _riskRate = useDataTap(riskRate);\n\n return {\n riskRate: _riskRate,\n riskRateColor,\n isConnected,\n currentLeverage: _curLeverage,\n maxLeverage: _maxLeverage,\n };\n};\n\nexport type RiskRateState = ReturnType<typeof useRiskRateScript>;\n","import React from \"react\";\nimport { useRiskRateScript } from \"./riskRate.script\";\nimport { RiskRate } from \"./riskRate.ui\";\n\nexport const RiskRateWidget: React.FC = () => {\n const state = useRiskRateScript();\n return <RiskRate {...state} />;\n};\n","export { RiskRate } from \"./riskRate.ui\";\nexport { RiskRateWidget } from \"./riskRate.widget\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, cn, Flex, Grid, TabPanel, Tabs, Text } from \"@kodiak-finance/orderly-ui\";\nimport type { OrderBookAndTradesState } from \"./orderBookAndTrades.script\";\n\nconst LazyLastTradesWidget = React.lazy(() =>\n import(\"../../base/lastTrades\").then((mod) => {\n return {\n default: mod.LastTradesWidget,\n };\n }),\n);\n\nconst LazyOrderBookWidget = React.lazy(() =>\n import(\"../../base/orderBook\").then((mod) => {\n return {\n default: mod.OrderBookWidget,\n };\n }),\n);\n\nconst TwoColLayout: React.FC<OrderBookAndTradesState> = (props) => {\n const { t } = useTranslation();\n return (\n <Grid\n cols={2}\n width={\"100%\"}\n gap={3}\n className=\"oui-auto-rows-fr\"\n style={{\n height: props.containerSize?.height,\n }}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n // pl={3}\n pt={3}\n pb={3}\n r=\"2xl\"\n className=\"oui-bg-base-9\"\n >\n <Title\n title={t(\"trading.orderBook\")}\n className=\"oui-pl-3 oui-text-sm\"\n />\n <React.Suspense fallback={null}>\n <LazyOrderBookWidget\n symbol={props.symbol}\n height={\n props.containerSize\n ? props.containerSize.height - 29 - 24\n : undefined\n }\n />\n </React.Suspense>\n </Flex>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n py={3}\n r=\"2xl\"\n className=\"oui-bg-base-9 oui-h-full\"\n >\n <Title\n title={t(\"trading.lastTrades\")}\n className=\"oui-text-sm oui-px-3\"\n />\n <React.Suspense fallback={null}>\n <LazyLastTradesWidget\n symbol={props.symbol}\n style={{\n height:\n props.containerSize && props.containerSize.height - 29 - 24,\n }}\n classNames={{ listHeader: \"oui-px-3\", list: \"oui-px-3\" }}\n />\n </React.Suspense>\n </Flex>\n </Grid>\n );\n};\n\nconst TabLayout: React.FC<OrderBookAndTradesState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Box\n // pl={3}\n pt={3}\n pb={3}\n pr={0}\n r=\"2xl\"\n className=\"oui-bg-base-9\"\n style={{ maxHeight: props.containerSize?.height }}\n >\n <Tabs\n value={props.tab}\n variant=\"contained\"\n onValueChange={(tab) => {\n props.setTab(tab as any);\n }}\n classNames={{\n tabsList: \"oui-pl-3\",\n // tabsContent: props.tab === \"lastTrades\" ? 'oui-pl-3' : ''\n }}\n size=\"lg\"\n >\n <TabPanel value=\"orderBook\" title={t(\"trading.orderBook\")}>\n <React.Suspense fallback={null}>\n <LazyOrderBookWidget\n symbol={props.symbol}\n height={\n props.containerSize\n ? props.containerSize.height - 29 - 18\n : undefined\n }\n />\n </React.Suspense>\n </TabPanel>\n <TabPanel value=\"lastTrades\" title={t(\"trading.lastTrades\")}>\n <React.Suspense fallback={null}>\n <LazyLastTradesWidget\n symbol={props.symbol}\n style={{\n height:\n props.containerSize && props.containerSize.height - 29 - 18,\n }}\n classNames={{\n root: \"oui-pt-[6px]\",\n listHeader: \"oui-px-3\",\n list: \"oui-px-3\",\n }}\n />\n </React.Suspense>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n\nconst Title: React.FC<{ title: string; className?: string }> = (props) => {\n return (\n <Text\n size=\"base\"\n intensity={80}\n className={cn(\"oui-pb-[5px]\", props.className)}\n >\n {props.title}\n </Text>\n );\n};\n\nexport const OrderBookAndTrades: React.FC<OrderBookAndTradesState> = (\n props,\n) => {\n const { containerRef, containerSize } = props;\n return (\n <div ref={containerRef} className=\"oui-h-full\">\n {(containerSize?.width ?? 0) >= 572 ? (\n <TwoColLayout {...props} />\n ) : (\n <TabLayout {...props} />\n )}\n </div>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nexport const useOrderBookAndTradesScript = (symbol: string) => {\n const [containerSize, setContainerSize] = useState<\n | {\n width: number;\n height: number;\n }\n | undefined\n >(undefined);\n\n const [tab, setTab] = useState<\"orderBook\" | \"lastTrades\">(\"orderBook\");\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n setContainerSize({\n width,\n height,\n });\n }\n });\n\n const targetDiv = containerRef.current;\n\n if (targetDiv) {\n resizeObserver.observe(targetDiv);\n }\n\n return () => {\n if (targetDiv) {\n resizeObserver.unobserve(targetDiv);\n }\n };\n }, []);\n\n return {\n symbol,\n containerSize,\n containerRef: containerRef,\n tab,\n setTab,\n };\n};\n\nexport type OrderBookAndTradesState = ReturnType<\n typeof useOrderBookAndTradesScript\n>;\n","import React from \"react\";\nimport { useOrderBookAndTradesScript } from \"./orderBookAndTrades.script\";\nimport { OrderBookAndTrades } from \"./orderBookAndTrades.ui\";\n\nexport const OrderBookAndTradesWidget: React.FC<{ symbol: string }> = (\n props,\n) => {\n const state = useOrderBookAndTradesScript(props.symbol);\n return <OrderBookAndTrades {...state} />;\n};\n","export { OrderBookAndTrades } from \"./orderBookAndTrades.ui\";\nexport { OrderBookAndTradesWidget } from \"./orderBookAndTrades.widget\";\nexport { useOrderBookAndTradesScript } from \"./orderBookAndTrades.script\";\n","import { FC, PropsWithChildren, SVGProps, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n CloseIcon,\n cn,\n Divider,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { MarketLayoutPosition } from \"../../../pages/trading/trading.script\";\n\nexport type LayoutPosition = \"left\" | \"right\";\n\nexport type SwitchLayoutProps = {\n layout?: LayoutPosition;\n onLayout?: (layout: LayoutPosition) => void;\n marketLayout?: MarketLayoutPosition;\n onMarketLayout?: (layout: MarketLayoutPosition) => void;\n};\n\nexport const SwitchLayout: FC<SwitchLayoutProps> = (props) => {\n const { t } = useTranslation();\n return (\n <SwitchLayoutDropDown {...props}>\n <Flex\n px={3}\n className={cn(\n \"oui-rounded-md\",\n \"oui-h-[28px]\",\n \"oui-cursor-pointer oui-transition-all\",\n \"oui-bg-base-6 hover:oui-bg-base-4\",\n \"oui-text-base-contrast-54 hover:oui-text-base-contrast-80\",\n )}\n gapX={1}\n ml={3}\n justify=\"center\"\n itemAlign=\"center\"\n >\n <LayoutIcon />\n <Text size=\"2xs\" weight=\"semibold\">\n {t(\"trading.layout\")}\n </Text>\n </Flex>\n </SwitchLayoutDropDown>\n );\n};\n\nexport const SwitchLayoutDropDown: FC<PropsWithChildren<SwitchLayoutProps>> = (\n props,\n) => {\n const [open, setOpen] = useState(false);\n const [hoveredMarket, setHoveredMarket] =\n useState<MarketLayoutPosition | null>(null);\n const { t } = useTranslation();\n const renderItem = (position: LayoutPosition) => {\n return (\n <Flex\n direction=\"column\"\n gapY={2}\n onClick={() => {\n props.onLayout?.(position);\n setOpen(false);\n }}\n className=\"oui-group\"\n >\n <Flex\n justify={position === \"right\" ? \"end\" : \"start\"}\n className={cn(\n \"oui-w-[148px] oui-h-[100px]\",\n \"oui-bg-base-10 oui-rounded-[10px]\",\n \"oui-border-[4px] oui-border-base-5 group-hover:oui-border-primary-light\",\n props.layout === position && \"!oui-border-primary-light\",\n )}\n >\n <Box p={1}>\n <OrderEntryIcon />\n </Box>\n </Flex>\n <Text\n size=\"2xs\"\n intensity={54}\n className={cn(\n \"oui-text-base-contrast-54 group-hover:oui-text-base-contrast-80\",\n props.layout === position && \"oui-text-base-contrast-80\",\n )}\n >\n {String(\n position === \"right\"\n ? t(\"trading.layout.advanced.right\")\n : t(\"trading.layout.advanced.left\"),\n )}\n </Text>\n </Flex>\n );\n };\n\n const renderMarketItem = (position: MarketLayoutPosition) => {\n const getIcon = (isHovered: boolean) => {\n const isSelected = props.marketLayout === position;\n switch (position) {\n case \"left\":\n return (\n <MarketLeftIcon isSelected={isSelected} isHovered={isHovered} />\n );\n case \"top\":\n return (\n <MarketTopIcon isSelected={isSelected} isHovered={isHovered} />\n );\n case \"bottom\":\n return (\n <MarketBottomIcon isSelected={isSelected} isHovered={isHovered} />\n );\n case \"hide\":\n return (\n <MarketHideIcon isSelected={isSelected} isHovered={isHovered} />\n );\n default:\n return (\n <MarketLeftIcon isSelected={isSelected} isHovered={isHovered} />\n );\n }\n };\n\n const getLabel = () => {\n switch (position) {\n case \"left\":\n return t(\"trading.layout.markets.left\");\n case \"top\":\n return t(\"trading.layout.markets.top\");\n case \"bottom\":\n return t(\"trading.layout.markets.bottom\");\n case \"hide\":\n return t(\"trading.layout.markets.hide\");\n default:\n return t(\"trading.layout.markets.left\");\n }\n };\n\n return (\n <Flex\n direction=\"column\"\n gapY={2}\n onClick={() => {\n props.onMarketLayout?.(position);\n setOpen(false);\n }}\n onMouseEnter={() => setHoveredMarket(position)}\n onMouseLeave={() => setHoveredMarket(null)}\n className=\"oui-group\"\n >\n <Flex justify=\"center\" className=\"oui-w-[148px] oui-h-[100px]\">\n {getIcon(hoveredMarket === position)}\n </Flex>\n <Text\n size=\"2xs\"\n intensity={54}\n className={cn(\n \"oui-text-base-contrast-54 group-hover:oui-text-base-contrast-80\",\n props.marketLayout === position && \"oui-text-base-contrast-80\",\n )}\n >\n {String(getLabel())}\n </Text>\n </Flex>\n );\n };\n\n const content = (\n <>\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n mt={3}\n className=\"oui-mb-[10px] oui-min-w-[500px]\"\n >\n <Text size=\"base\" intensity={98}>\n {t(\"trading.layout\")}\n </Text>\n <CloseIcon\n size={16}\n className=\"oui-text-base-contrast-80 oui-cursor-pointer\"\n opacity={0.98}\n onClick={() => {\n setOpen(false);\n }}\n />\n </Flex>\n <Divider />\n <Flex direction=\"column\" gapY={2} mt={5} itemAlign=\"start\">\n <Text size=\"xs\" intensity={98}>\n {String(t(\"trading.layout.advanced\"))}\n </Text>\n <Flex gapX={6}>\n {renderItem(\"right\")}\n {renderItem(\"left\")}\n </Flex>\n </Flex>\n <Flex direction=\"column\" gapY={2} mt={5} itemAlign=\"start\">\n <Text size=\"xs\" intensity={98}>\n {String(t(\"trading.layout.markets\"))}\n </Text>\n <Flex gapX={6}>\n {renderMarketItem(\"left\")}\n {renderMarketItem(\"top\")}\n {renderMarketItem(\"bottom\")}\n {renderMarketItem(\"hide\")}\n </Flex>\n </Flex>\n </>\n );\n\n return (\n <DropdownMenuRoot open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{props.children}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n align=\"end\"\n className={cn(\"oui-bg-base-8 oui-p-5 oui-pt-0 oui-font-semibold\")}\n >\n {content}\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n\nexport const LayoutIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M3.832 1.994c-.736 0-1.333.597-1.333 1.333v9.334c0 .737.597 1.333 1.333 1.333H6.5c.737 0 1.333-.596 1.333-1.333V3.327c0-.736-.596-1.333-1.333-1.333zm6.667 0c-.737 0-1.333.597-1.333 1.333v2.667c0 .737.596 1.333 1.333 1.333h2.667c.736 0 1.333-.596 1.333-1.333V3.327c0-.736-.597-1.333-1.333-1.333zm.437 6.679a2.7 2.7 0 0 0-1.033.607.284.284 0 0 0-.061.339c.222.411-.01.851-.512.876a.29.29 0 0 0-.26.217c-.05.207-.07.38-.07.608 0 .19.02.407.06.599a.28.28 0 0 0 .252.217c.506.044.756.429.53.92a.28.28 0 0 0 .06.321c.296.273.635.466 1.034.59a.285.285 0 0 0 .312-.104c.31-.427.757-.428 1.05 0a.28.28 0 0 0 .313.113 2.8 2.8 0 0 0 1.042-.599.28.28 0 0 0 .06-.33c-.23-.466.035-.894.513-.902a.28.28 0 0 0 .269-.209c.048-.199.06-.372.06-.616q0-.316-.069-.616a.276.276 0 0 0-.27-.217c-.469-.001-.732-.463-.502-.868a.27.27 0 0 0-.053-.339 2.8 2.8 0 0 0-1.059-.607.274.274 0 0 0-.312.112c-.268.417-.77.425-1.033.009a.284.284 0 0 0-.321-.121m.842 1.536a1.111 1.111 0 1 1 0 2.222 1.111 1.111 0 0 1 0-2.222\" />\n </svg>\n);\n\nexport const OrderEntryIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"36\"\n height=\"84\"\n viewBox=\"0 0 36 84\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect width=\"36\" height=\"17\" rx=\"2\" fill=\"#181C23\" />\n <rect y=\"19\" width=\"36\" height=\"54\" rx=\"2\" fill=\"#181C23\" />\n <rect y=\"75\" width=\"36\" height=\"9\" rx=\"2\" fill=\"#181C23\" />\n <rect\n x=\"3\"\n y=\"79\"\n width=\"30\"\n height=\"1\"\n rx=\"0.5\"\n fill=\"url(#paint0_linear_17647_26849)\"\n />\n <rect x=\"3\" y=\"22\" width=\"14\" height=\"6\" rx=\"2\" fill=\"#008676\" />\n <rect x=\"19\" y=\"22\" width=\"14\" height=\"6\" rx=\"2\" fill=\"#D92D6B\" />\n <rect x=\"3\" y=\"11\" width=\"14\" height=\"3\" rx=\"1.5\" fill=\"#333948\" />\n <rect x=\"19\" y=\"11\" width=\"14\" height=\"3\" rx=\"1.5\" fill=\"#335FFC\" />\n <rect x=\"3\" y=\"62\" width=\"30\" height=\"8\" rx=\"2\" fill=\"#008676\" />\n <defs>\n <linearGradient\n id=\"paint0_linear_17647_26849\"\n x1=\"33\"\n y1=\"79.5\"\n x2=\"3\"\n y2=\"79.5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#779eff\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nexport const MarketLeftIcon: FC<\n SVGProps<SVGSVGElement> & { isSelected?: boolean; isHovered?: boolean }\n> = ({ isSelected, isHovered, ...props }) => {\n const getStrokeColor = () => {\n if (isSelected) return \"#779eff\"; // primary-light color\n if (isHovered) return \"#779eff\"; // primary-light color\n return \"#333948\"; // base-5 color\n };\n\n return (\n <svg\n width=\"148\"\n height=\"100\"\n viewBox=\"0 0 148 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"144\"\n height=\"96\"\n rx=\"10\"\n fill=\"#07080A\"\n stroke={getStrokeColor()}\n strokeWidth=\"4\"\n />\n <rect x=\"8\" y=\"8\" width=\"24\" height=\"84\" rx=\"2\" fill=\"#181C23\" />\n <rect x=\"16\" y=\"10\" width=\"4\" height=\"2\" rx=\"1\" fill=\"#333948\" />\n <rect x=\"21\" y=\"10\" width=\"4\" height=\"2\" rx=\"1\" fill=\"#333948\" />\n <rect x=\"26\" y=\"10\" width=\"4\" height=\"2\" rx=\"1\" fill=\"#333948\" />\n <rect x=\"10\" y=\"10\" width=\"5\" height=\"2\" rx=\"1\" fill=\"#335FFC\" />\n <rect x=\"10\" y=\"14\" width=\"20\" height=\"76\" rx=\"2\" fill=\"#282E3A\" />\n </svg>\n );\n};\n\nexport const MarketTopIcon: FC<\n SVGProps<SVGSVGElement> & { isSelected?: boolean; isHovered?: boolean }\n> = ({ isSelected, isHovered, ...props }) => {\n const getStrokeColor = () => {\n if (isSelected) return \"#779eff\"; // primary-light color\n if (isHovered) return \"#779eff\"; // primary-light color\n return \"#333948\"; // base-5 color\n };\n\n return (\n <svg\n width=\"148\"\n height=\"100\"\n viewBox=\"0 0 148 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"144\"\n height=\"96\"\n rx=\"10\"\n fill=\"#07080A\"\n stroke={getStrokeColor()}\n strokeWidth=\"4\"\n />\n <rect x=\"8\" y=\"8\" width=\"132\" height=\"8\" rx=\"2\" fill=\"#181C23\" />\n <g clipPath=\"url(#clip0_31319_74729)\">\n <rect x=\"10\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#335FFC\" />\n <rect x=\"28\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"46\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"64\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"82\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"100\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"118\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"136\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n </g>\n <defs>\n <clipPath id=\"clip0_31319_74729\">\n <rect\n width=\"130\"\n height=\"4\"\n fill=\"white\"\n transform=\"translate(10 10)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport const MarketBottomIcon: FC<\n SVGProps<SVGSVGElement> & { isSelected?: boolean; isHovered?: boolean }\n> = ({ isSelected, isHovered, ...props }) => {\n const getStrokeColor = () => {\n if (isSelected) return \"#779eff\"; // primary-light color\n if (isHovered) return \"#779eff\"; // primary-light color\n return \"#333948\"; // base-5 color\n };\n\n return (\n <svg\n width=\"148\"\n height=\"100\"\n viewBox=\"0 0 148 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"144\"\n height=\"96\"\n rx=\"10\"\n fill=\"#07080A\"\n stroke={getStrokeColor()}\n strokeWidth=\"4\"\n />\n <rect x=\"8\" y=\"84\" width=\"132\" height=\"8\" rx=\"2\" fill=\"#181C23\" />\n <g clipPath=\"url(#clip0_31319_74743)\">\n <rect x=\"10\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#335FFC\" />\n <rect x=\"28\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"46\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"64\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"82\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"100\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"118\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"136\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n </g>\n <defs>\n <clipPath id=\"clip0_31319_74743\">\n <rect\n width=\"130\"\n height=\"4\"\n fill=\"white\"\n transform=\"translate(10 86)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport const MarketHideIcon: FC<\n SVGProps<SVGSVGElement> & { isSelected?: boolean; isHovered?: boolean }\n> = ({ isSelected, isHovered, ...props }) => {\n const getStrokeColor = () => {\n if (isSelected) return \"#779eff\"; // primary-light color\n if (isHovered) return \"#779eff\"; // primary-light color\n return \"#333948\"; // base-5 color\n };\n\n return (\n <svg\n width=\"148\"\n height=\"100\"\n viewBox=\"0 0 148 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"144\"\n height=\"96\"\n rx=\"10\"\n fill=\"#07080A\"\n stroke={getStrokeColor()}\n strokeWidth=\"4\"\n />\n <g clipPath=\"url(#clip0_31319_74757)\">\n <rect x=\"8\" y=\"8\" width=\"132\" height=\"84\" rx=\"2\" fill=\"#181C23\" />\n <rect\n x=\"66.8789\"\n y=\"-76\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 66.8789 -76)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"73.9492\"\n y=\"-68.929\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 73.9492 -68.929)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"81.0195\"\n y=\"-61.8579\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 81.0195 -61.8579)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"88.0938\"\n y=\"-54.7867\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 88.0938 -54.7867)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"95.1641\"\n y=\"-47.7157\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 95.1641 -47.7157)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"102.234\"\n y=\"-40.6447\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 102.234 -40.6447)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"109.305\"\n y=\"-33.5736\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 109.305 -33.5736)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"116.375\"\n y=\"-26.5026\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 116.375 -26.5026)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"123.449\"\n y=\"-19.4315\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 123.449 -19.4315)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"130.52\"\n y=\"-12.3604\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 130.52 -12.3604)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"137.59\"\n y=\"-5.28931\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 137.59 -5.28931)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"144.66\"\n y=\"1.78174\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 144.66 1.78174)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"151.73\"\n y=\"8.85278\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 151.73 8.85278)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"158.805\"\n y=\"15.9238\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 158.805 15.9238)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"165.875\"\n y=\"22.995\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 165.875 22.995)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"172.945\"\n y=\"30.066\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 172.945 30.066)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"180.016\"\n y=\"37.1371\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 180.016 37.1371)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"187.086\"\n y=\"44.2081\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 187.086 44.2081)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"194.156\"\n y=\"51.2792\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 194.156 51.2792)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"201.23\"\n y=\"58.3503\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 201.23 58.3503)\"\n fill=\"#20252F\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_31319_74757\">\n <rect\n width=\"132\"\n height=\"84\"\n fill=\"white\"\n transform=\"translate(8 8)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import { useState } from \"react\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport enum TopTabType {\n chart = \"chart\",\n trades = \"trades\",\n data = \"data\",\n}\n\nexport const useTopTabScript = () => {\n const [tab, setTab] = useState<TopTabType>(TopTabType.chart);\n const { symbol } = useTradingPageContext();\n const [visible, setVisible] = useState(true);\n\n const toggleContentVisible = () => {\n setVisible((e) => !e);\n };\n\n return {\n tab,\n setTab,\n symbol,\n toggleContentVisible,\n setVisible,\n visible,\n };\n};\n\nexport type TopTabState = ReturnType<typeof useTopTabScript>;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { TradingviewWidgetProps } from \"./tradingview.widget\";\n\nconst MaxHeight = 354;\nconst MinHeight = 234;\nconst Key = \"TRADINGVIEW_MOBILE_HEIGHT\";\n\nexport function useTradingviewScript(props: TradingviewWidgetProps) {\n const [height, setHeight] = useLocalStorage(Key, MaxHeight);\n const [dragging, setDragging] = useState(false);\n const dragRef = useRef<HTMLDivElement>(null);\n const boxRef = useRef<HTMLDivElement>(null);\n const [offsetY, setOffsetY] = useState(0);\n const topRef = useRef<number>(0);\n\n const handleTouchStart = useCallback((e: TouchEvent) => {\n if (!boxRef.current) {\n return;\n }\n setDragging(true);\n const event = e.touches[0];\n const rect = boxRef.current.getBoundingClientRect();\n e.stopPropagation();\n e.preventDefault();\n\n const offsetY = event.clientY - rect.bottom;\n topRef.current = rect.top;\n setOffsetY(offsetY);\n }, []);\n\n const handleTouchMove = useCallback(\n (e: TouchEvent) => {\n if (!boxRef.current) {\n return;\n }\n if (dragging) {\n e.stopPropagation();\n e.preventDefault();\n\n const event = e.touches[0];\n\n const newHeight = event.clientY - topRef.current - offsetY;\n setHeight(\n Math.min(Math.max(Math.round(newHeight), MinHeight), MaxHeight),\n );\n return false;\n }\n },\n [dragging, offsetY],\n );\n\n const handleTouchEnd = useCallback(() => {\n setDragging(false);\n }, []);\n\n useEffect(() => {\n const drag = dragRef.current;\n if (!drag) {\n return;\n }\n\n drag.addEventListener(\"touchstart\", handleTouchStart);\n\n return () => {\n drag.removeEventListener(\"touchstart\", handleTouchStart);\n };\n }, [handleTouchStart]);\n\n useEffect(() => {\n document.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n document.addEventListener(\"touchend\", handleTouchEnd);\n\n return () => {\n document.removeEventListener(\"touchmove\", handleTouchMove);\n document.removeEventListener(\"touchend\", handleTouchEnd);\n };\n }, [dragging, handleTouchMove, handleTouchEnd]);\n return {\n ...props,\n\n height,\n dragging,\n dragRef,\n boxRef,\n };\n}\n\nexport type TradingviewState = ReturnType<typeof useTradingviewScript>;\n","import React, { FC, SVGProps } from \"react\";\n\nexport const KlineDragIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g id=\"Arrows-expand\">\n <path\n id=\"Vector\"\n d=\"M5.9989 1.00708C5.8709 1.00708 5.7369 1.05008 5.6394 1.14758L3.7959 3.00708L4.4989 3.71008L5.4989 2.72607V4.50708C5.4989 4.78308 5.7229 5.00708 5.9989 5.00708C6.2749 5.00708 6.4989 4.78308 6.4989 4.50708V2.72607L7.4989 3.71008L8.2019 3.00708L6.3584 1.14758C6.2604 1.05008 6.1269 1.00708 5.9989 1.00708ZM5.9989 7.00707C5.7229 7.00707 5.4989 7.23107 5.4989 7.50707V9.28808L4.4989 8.30407L3.7959 9.00707L5.6394 10.8666C5.8349 11.0616 6.1629 11.0616 6.3584 10.8666L8.2019 9.00707L7.4989 8.30407L6.4989 9.28808V7.50707C6.4989 7.23107 6.2749 7.00707 5.9989 7.00707Z\"\n />\n </g>\n </svg>\n);\n","import React from \"react\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\nimport { TradingviewWidget } from \"@kodiak-finance/orderly-ui-tradingview\";\nimport { KlineDragIcon } from \"../../base/icons\";\nimport type { TradingviewState } from \"./tradingview.script\";\n\nexport const TradingviewUI: React.FC<TradingviewState> = (props) => {\n return (\n <div\n className=\"oui-pb-1 oui-flex oui-flex-col oui-gap-1\"\n style={{ height: props.height }}\n ref={props.boxRef}\n >\n <div className=\"oui-w-full oui-h-full\">\n <TradingviewWidget\n symbol={props.symbol}\n libraryPath={props.tradingViewConfig?.library_path}\n mode={3}\n scriptSRC={props.tradingViewConfig?.scriptSRC}\n customCssUrl={props.tradingViewConfig?.customCssUrl}\n {...props.tradingViewConfig}\n />\n </div>\n <div className=\"oui-relative oui-w-full\">\n <div\n ref={props.dragRef}\n className={cn(\n \"oui-h-[1px] oui-absolute oui-left-0 oui-right-0 oui-bottom-0 oui-top-0 oui-z-10 oui-mt-[7px] oui-bg-base-contrast-12\",\n props.dragging && \"oui-bg-primary \",\n )}\n >\n <KlineDragIcon\n className={cn(\n \"oui-w-3 oui-h-3 oui-absolute oui-left-1/2 -oui-top-[5px] -oui-translate-y-[0.5px] oui-text-base-contrast-12\",\n props.dragging && \" oui-text-primary\",\n )}\n />\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { TradingViewConfigInterface } from \"../../../types/types\";\nimport { useTradingviewScript } from \"./tradingview.script\";\nimport { TradingviewUI } from \"./tradingview.ui\";\n\nexport interface TradingviewWidgetProps {\n symbol: string;\n tradingViewConfig: TradingViewConfigInterface;\n}\n\nexport const TradingviewWidget: React.FC<TradingviewWidgetProps> = (props) => {\n const state = useTradingviewScript(props);\n return <TradingviewUI {...state} />;\n};\n","import React from \"react\";\nimport { LastTradesWidget } from \"../../base/lastTrades\";\n\nexport const MWebLastTrades: React.FC<{ symbol: string }> = (props) => {\n return (\n <LastTradesWidget\n symbol={props.symbol}\n classNames={{\n root: \"oui-px-3 \",\n list: \"oui-min-h-[141px] oui-max-h-[202px] oui-w-full\",\n listHeader: \"oui-text-xs oui-text-base-contrast-36\",\n listItem: {\n left: \"oui-text-xs\",\n mid: \"oui-text-xs\",\n right: \"oui-text-xs\",\n },\n }}\n />\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { TradeDataState } from \"./tradeData.script\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const TradeData: FC<TradeDataState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex direction={\"column\"} gap={2}>\n <Row\n title={t(\"common.markPrice\")}\n value={props.ticker?.mark_price}\n dp={props.symbolInfo.quote_dp}\n />\n <Row\n title={t(\"common.indexPrice\")}\n value={props.ticker?.index_price}\n dp={props.symbolInfo.quote_dp}\n />\n <Row\n title={t(\"markets.column.24hVolume\")}\n value={props.vol_24h}\n dp={props.symbolInfo.quote_dp}\n rule=\"human\"\n showUSDC\n />\n <Row\n title={t(\"trading.column.24High\")}\n value={props.ticker?.[\"24h_high\"]}\n dp={props.symbolInfo.quote_dp}\n />\n <Row\n title={t(\"trading.column.24Low\")}\n value={props.ticker?.[\"24h_low\"]}\n dp={props.symbolInfo.quote_dp}\n />\n <Row\n title={t(\"markets.openInterest\")}\n value={props.openInterest}\n dp={props.symbolInfo.quote_dp}\n rule=\"human\"\n showUSDC\n />\n </Flex>\n );\n};\n\nconst Row = (props: {\n title: string;\n value: any;\n dp?: number;\n rule?: \"percentages\" | \"price\" | \"human\";\n showUSDC?: boolean;\n}) => {\n const { title, value, showUSDC, dp, rule = \"price\" } = props;\n return (\n <Flex justify={\"between\"} width={\"100%\"} className=\"oui-text-xs\">\n <Text intensity={36}>{title}</Text>\n <Flex gap={1}>\n <Text.numeral rule={rule} dp={dp} intensity={80}>\n {value}\n </Text.numeral>\n {showUSDC && <Text intensity={36}>USDC</Text>}\n </Flex>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTickerStream } from \"@kodiak-finance/orderly-hooks\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport const useTradeDataScript = (props: { symbol: string }) => {\n const { symbol } = props;\n const ticker = useTickerStream(symbol);\n const { symbolInfo } = useTradingPageContext();\n const vol_24h = useMemo(() => {\n const close = ticker?.[\"24h_close\"];\n const volume = ticker?.[\"24h_volume\"];\n if (close && volume && !isNaN(close) && !isNaN(volume)) {\n return new Decimal(close)\n .mul(volume)\n .toFixed(symbolInfo.quote_dp, Decimal.ROUND_DOWN);\n }\n return undefined;\n }, [ticker]);\n\n const openInterest = useMemo(() => {\n const markPrice = ticker?.[\"mark_price\"];\n const openInterest = ticker?.[\"open_interest\"];\n if (markPrice && openInterest && !isNaN(markPrice)) {\n return new Decimal(markPrice)\n .mul(Number(openInterest))\n .toFixed(symbolInfo.quote_dp, Decimal.ROUND_DOWN);\n }\n return undefined;\n }, [ticker]);\n return {\n ticker,\n symbolInfo,\n vol_24h,\n openInterest,\n };\n};\n\nexport type TradeDataState = ReturnType<typeof useTradeDataScript>;\n","import React from \"react\";\nimport { useTradeDataScript } from \"./tradeData.script\";\nimport { TradeData } from \"./tradeData.ui\";\n\nexport const TradeDataWidget: React.FC<{ symbol: string }> = (props) => {\n const state = useTradeDataScript(props);\n return <TradeData {...state} />;\n};\n","export { TradeData } from \"./tradeData.ui\";\nexport { TradeDataWidget } from \"./tradeData.widget\";\nexport { useTradeDataScript } from \"./tradeData.script\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, cn, TabPanel, Tabs } from \"@kodiak-finance/orderly-ui\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\nimport { TopTabState, TopTabType } from \"./topTab.script\";\n\nconst LazyTradingviewWidget = React.lazy(() =>\n import(\"../tradingview/tradingview.widget\").then((mod) => {\n return { default: mod.TradingviewWidget };\n }),\n);\n\nconst LazyMWebLastTrades = React.lazy(() =>\n import(\"../lastTrades/lastTrades.widget\").then((mod) => {\n return { default: mod.MWebLastTrades };\n }),\n);\n\nconst LazyTradeDataWidget = React.lazy(() =>\n import(\"../tradeData\").then((mod) => {\n return { default: mod.TradeDataWidget };\n }),\n);\n\nexport const TopTab: React.FC<TopTabState & { className?: string }> = (\n props,\n) => {\n const { t } = useTranslation();\n const { tradingViewConfig } = useTradingPageContext();\n\n return (\n <Tabs\n variant=\"contained\"\n value={props.tab}\n contentVisible={props.visible}\n onValueChange={(e) => {\n props.setTab(e as TopTabType);\n props.setVisible(true);\n }}\n className={props.className}\n classNames={{\n tabsList: \"oui-p-2\",\n tabsContent: \"oui-min-h-[176px] oui-max-h-[396px]\",\n }}\n style={{\n marginBottom: props.tab === TopTabType.chart ? \"8px\" : 0,\n }}\n trailing={\n <button className=\"oui-px-5\" onClick={props.toggleContentVisible}>\n <ChevronIcon\n className={props.visible ? \"oui-rotate-0\" : \"oui-rotate-180\"}\n />\n </button>\n }\n >\n <TabPanel title={t(\"trading.tabs.chart\")} value={TopTabType.chart}>\n <React.Suspense fallback={null}>\n <LazyTradingviewWidget\n symbol={props.symbol}\n tradingViewConfig={tradingViewConfig}\n />\n </React.Suspense>\n </TabPanel>\n <TabPanel title={t(\"trading.tabs.trades\")} value={TopTabType.trades}>\n <React.Suspense fallback={null}>\n <LazyMWebLastTrades symbol={props.symbol} />\n </React.Suspense>\n </TabPanel>\n <TabPanel title={t(\"trading.tabs.data\")} value={TopTabType.data}>\n <Box px={3}>\n <React.Suspense fallback={null}>\n <LazyTradeDataWidget symbol={props.symbol} />\n </React.Suspense>\n </Box>\n </TabPanel>\n </Tabs>\n );\n};\n\nconst ChevronIcon: React.FC<{ className?: string }> = (props) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\n \"oui-fill-base-contrast-54 hover:oui-fill-base-contrast-80\",\n props.className,\n )}\n >\n <path\n d=\"M5.721 4.585 2.726 6.578a.51.51 0 0 0-.14.7.51.51 0 0 0 .702.14l2.714-1.806 2.715 1.806c.23.153.549.089.702-.14a.51.51 0 0 0-.14-.7L6.283 4.585a.51.51 0 0 0-.562 0\"\n // fill=\"url(#a)\"\n />\n <defs>\n {/* <linearGradient\n id=\"a\"\n x1=\"9.502\"\n y1=\"6.001\"\n x2=\"2.502\"\n y2=\"6.001\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient> */}\n </defs>\n </svg>\n );\n};\n","import React from \"react\";\nimport { useTopTabScript } from \"./topTab.script\";\nimport { TopTab } from \"./topTab.ui\";\n\nexport const TopTabWidget: React.FC<{ className?: string }> = (props) => {\n const state = useTopTabScript();\n return <TopTab className={props.className} {...state} />;\n};\n","export { TopTab } from \"./topTab.ui\";\nexport { TopTabWidget } from \"./topTab.widget\";\nexport { useTopTabScript } from \"./topTab.script\";\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\nimport { OrderEntryWidget } from \"@kodiak-finance/orderly-ui-order-entry\";\nimport type { OrderBookAndEntryState } from \"./orderBookAndEntry.script\";\n\nconst LazyOrderBookWidget = React.lazy(() =>\n import(\"../../base/orderBook\").then((mod) => {\n return { default: mod.OrderBookWidget };\n }),\n);\n\nexport const OrderBookAndEntry: React.FC<\n OrderBookAndEntryState & { className?: string }\n> = (props) => {\n const [height, setHeight] = useState(0);\n const divRef = useRef(null);\n\n useEffect(() => {\n const div = divRef.current;\n if (!div) {\n return;\n }\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setHeight(entry.contentRect.height);\n }\n });\n resizeObserver.observe(div);\n return () => {\n resizeObserver.unobserve(div);\n };\n }, []);\n return (\n <div\n className={cn(\n \"oui-mx-1 oui-grid oui-grid-cols-[4fr,6fr] oui-gap-1 \",\n props.className,\n )}\n >\n <div\n className=\"oui-rounded-xl oui-bg-base-9\"\n style={{ height: `${height + 16}px` }}\n >\n <React.Suspense fallback={null}>\n <LazyOrderBookWidget\n symbol={props.symbol}\n height={height ? height - 44 : undefined}\n />\n </React.Suspense>\n </div>\n <div className=\"oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <OrderEntryWidget symbol={props.symbol} containerRef={divRef} />\n </div>\n </div>\n );\n};\n","import { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport const useOrderBookAndEntryScript = () => {\n const { symbol } = useTradingPageContext();\n return {\n symbol,\n };\n};\n\nexport type OrderBookAndEntryState = ReturnType<\n typeof useOrderBookAndEntryScript\n>;\n","import React from \"react\";\nimport { useOrderBookAndEntryScript } from \"./orderBookAndEntry.script\";\nimport { OrderBookAndEntry } from \"./orderBookAndEntry.ui\";\n\nexport const OrderBookAndEntryWidget: React.FC<{ className?: string }> = (\n props,\n) => {\n const state = useOrderBookAndEntryScript();\n return <OrderBookAndEntry className={props.className} {...state} />;\n};\n","export { OrderBookAndEntry } from \"./orderBookAndEntry.ui\";\nexport { OrderBookAndEntryWidget } from \"./orderBookAndEntry.widget\";\nexport { useOrderBookAndEntryScript } from \"./orderBookAndEntry.script\";\n","import { useState } from \"react\";\nimport { useOrderStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { TabType } from \"@kodiak-finance/orderly-ui-orders\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport {\n usePendingOrderCount,\n usePositionsCount,\n useTradingLocalStorage,\n} from \"../../../hooks\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport enum DataListTabType {\n position = \"Position\",\n pending = \"Pending\",\n tp_sl = \"TP/SL\",\n history = \"History\",\n liquidation = \"Liquidation\",\n assets = \"Assets\",\n}\n\nexport enum DataListTabSubType {\n positionHistory = \"Position history\",\n orderHistory = \"Order history\",\n}\n\nexport const useDataListScript = (props: {\n symbol: string;\n className?: string;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { symbol, sharePnLConfig } = props;\n const [tab, setTab] = useState<DataListTabType>(DataListTabType.position);\n const [subTab, setSubTab] = useState<DataListTabSubType>(\n DataListTabSubType.positionHistory,\n );\n const { t } = useTranslation();\n\n const { onSymbolChange } = useTradingPageContext();\n const localStorage = useTradingLocalStorage();\n\n const [_, { cancelAllOrders, cancelAllTPSLOrders }] = useOrderStream({});\n const { positionCount } = usePositionsCount(symbol);\n const { pendingOrderCount, tpSlOrderCount } = usePendingOrderCount(symbol);\n\n const onCloseAll = (type: TabType) => {\n const title =\n type === TabType.pending\n ? t(\"orders.pending.cancelAll\")\n : type === TabType.tp_sl\n ? t(\"orders.tpsl.cancelAll\")\n : \"\";\n const content =\n type === TabType.pending\n ? t(\"orders.pending.cancelAll.description\")\n : type === TabType.tp_sl\n ? t(\"orders.tpsl.cancelAll.description\")\n : \"\";\n modal.confirm({\n title: title,\n content: <Text size=\"2xs\">{content}</Text>,\n\n onOk: async () => {\n try {\n // await cancelAll(null, { source_type: \"ALL\" });\n if (tab === DataListTabType.tp_sl) {\n await cancelAllTPSLOrders(symbol);\n } else {\n await cancelAllOrders(symbol);\n }\n return Promise.resolve(true);\n } catch (error) {\n // @ts-ignore\n if (error?.message !== undefined) {\n // @ts-ignore\n toast.error(error.message);\n }\n return Promise.resolve(false);\n } finally {\n Promise.resolve();\n }\n },\n });\n };\n\n return {\n tab,\n setTab,\n subTab,\n setSubTab,\n sharePnLConfig,\n symbol,\n positionCount,\n pendingOrderCount,\n tpSlOrderCount,\n ...localStorage,\n onCloseAll,\n onSymbolChange,\n };\n};\n\nexport type DataListState = ReturnType<typeof useDataListScript>;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetsModule } from \"@kodiak-finance/orderly-portfolio\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Checkbox,\n Divider,\n Flex,\n TabPanel,\n Tabs,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { TabPanelProps } from \"@kodiak-finance/orderly-ui\";\nimport { MobileOrderListWidget, TabType } from \"@kodiak-finance/orderly-ui-orders\";\nimport {\n MobileLiquidationWidget,\n MobilePositionHistoryWidget,\n MobilePositionsWidget,\n} from \"@kodiak-finance/orderly-ui-positions\";\nimport {\n type DataListState,\n DataListTabSubType,\n DataListTabType,\n} from \"./dataList.script\";\n\nconst LazyPositionHeaderWidget = React.lazy(() =>\n import(\"../../base/positionHeader\").then((mod) => {\n return { default: mod.PositionHeaderWidget };\n }),\n);\n\nconst SymbolControlHeader: React.FC<\n DataListState & { type: TabType; ordersStatus?: OrderStatus }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n px={2}\n py={2}\n width={\"100%\"}\n justify={\"between\"}\n gap={2}\n className=\"oui-rounded-b-xl oui-bg-base-9\"\n >\n <Flex className=\"oui-cursor-pointer oui-gap-[2px]\">\n <Checkbox\n color=\"white\"\n checked={!props.showAllSymbol}\n onCheckedChange={(checked: boolean) => {\n props.setShowAllSymbol(!checked);\n }}\n />\n <Text\n size=\"2xs\"\n intensity={54}\n onClick={() => {\n props.setShowAllSymbol(!props.showAllSymbol);\n }}\n >\n {t(\"trading.hideOtherSymbols\")}\n </Text>\n </Flex>\n <Button\n variant=\"outlined\"\n size=\"xs\"\n color=\"secondary\"\n onClick={() => props.onCloseAll(props.type)}\n >\n {t(\"trading.orders.closeAll\")}\n </Button>\n </Flex>\n );\n};\n\nconst OrdersView: React.FC<\n DataListState & { type: TabType; ordersStatus?: OrderStatus }\n> = (props) => {\n return (\n <Flex direction={\"column\"} pb={2} width={\"100%\"}>\n <Divider className=\"oui-w-full\" />\n {props.type !== TabType.orderHistory && (\n <SymbolControlHeader {...props} />\n )}\n <MobileOrderListWidget\n symbol={props.showAllSymbol ? undefined : props.symbol}\n onSymbolChange={props.onSymbolChange}\n type={props.type}\n ordersStatus={props.ordersStatus}\n classNames={{\n root: \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden\",\n content: \"!oui-space-y-1\",\n cell: \"oui-py-2 oui-bg-base-9 oui-p-2 oui-rounded-xl\",\n }}\n sharePnLConfig={props.sharePnLConfig}\n showFilter={props.type === TabType.orderHistory}\n filterConfig={{ range: { from: undefined, to: undefined } }}\n />\n </Flex>\n );\n};\n\nconst PositionsView: React.FC<DataListState> = (props) => {\n return (\n <Flex direction={\"column\"} gap={2}>\n <React.Suspense fallback={null}>\n <LazyPositionHeaderWidget\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n symbol={props.showAllSymbol ? undefined : props.symbol}\n unPnlPriceBasis={props.unPnlPriceBasis}\n />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <MobilePositionsWidget\n symbol={props.showAllSymbol ? undefined : props.symbol}\n onSymbolChange={props.onSymbolChange}\n sharePnLConfig={props.sharePnLConfig}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n />\n </React.Suspense>\n </Flex>\n );\n};\n\nconst HistoryTab: React.FC<DataListState> = (props) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-min-h-[300px]\">\n <Tabs\n value={props.subTab}\n onValueChange={(e: any) => props.setSubTab(e)}\n size=\"md\"\n classNames={{ tabsList: \"oui-bg-base-9 oui-rounded-t-xl oui-p-2\" }}\n >\n <TabPanel\n title={t(\"positions.positionHistory\")}\n value={DataListTabSubType.positionHistory}\n >\n <MobilePositionHistoryWidget\n symbol={props.showAllSymbol ? undefined : props.symbol}\n onSymbolChange={props.onSymbolChange}\n classNames={{ cell: \"oui-p-2 oui-bg-base-9 oui-rounded-xl\" }}\n sharePnLConfig={props.sharePnLConfig}\n />\n </TabPanel>\n <TabPanel\n title={t(\"orders.orderHistory\")}\n value={DataListTabSubType.orderHistory}\n >\n <OrdersView type={TabType.orderHistory} {...props} />\n </TabPanel>\n </Tabs>\n </div>\n );\n};\n\nexport const DataList: React.FC<DataListState & { className?: string }> = (\n props,\n) => {\n const { t } = useTranslation();\n const {\n positionCount = 0,\n pendingOrderCount = 0,\n tpSlOrderCount = 0,\n showAllSymbol,\n symbol,\n tab,\n setTab,\n className,\n } = props;\n\n const tabPanelItems: (TabPanelProps & { content?: React.ReactNode })[] = [\n {\n title: `${t(\"common.positions\")} ${positionCount > 0 ? `(${positionCount})` : \"\"}`,\n value: DataListTabType.position,\n content: <PositionsView {...props} />,\n },\n {\n title: `${t(\"orders.status.pending\")} ${pendingOrderCount > 0 ? `(${pendingOrderCount})` : \"\"}`,\n value: DataListTabType.pending,\n content: (\n <OrdersView\n type={TabType.pending}\n ordersStatus={OrderStatus.INCOMPLETE}\n {...props}\n />\n ),\n },\n {\n title: `${t(\"common.tpsl\")} ${tpSlOrderCount > 0 ? `(${tpSlOrderCount})` : \"\"}`,\n value: DataListTabType.tp_sl,\n content: (\n <OrdersView\n type={TabType.tp_sl}\n ordersStatus={OrderStatus.INCOMPLETE}\n {...props}\n />\n ),\n },\n {\n title: t(\"trading.history\"),\n value: DataListTabType.history,\n content: <HistoryTab {...props} />,\n },\n {\n title: t(\"positions.liquidation\"),\n value: DataListTabType.liquidation,\n content: (\n <MobileLiquidationWidget\n enableLoadMore\n symbol={showAllSymbol ? undefined : symbol}\n classNames={{ cell: \"oui-p-2 oui-bg-base-9 oui-rounded-xl\" }}\n />\n ),\n },\n // {\n // title: t(\"common.assets\"),\n // value: DataListTabType.assets,\n // content: <AssetsModule.AssetsWidget />,\n // },\n ];\n\n return (\n <Tabs\n value={tab}\n defaultValue={DataListTabType.position}\n onValueChange={(e) => setTab(e as DataListTabType)}\n size=\"lg\"\n className={className}\n classNames={{\n tabsList:\n \"oui-bg-base-9 oui-rounded-t-xl oui-p-2 oui-overflow-x-scroll oui-hide-scrollbar\",\n }}\n >\n {tabPanelItems.map((item) => {\n const { content, ...rest } = item;\n return (\n <TabPanel {...rest} key={`item-${rest.value}`}>\n {content}\n </TabPanel>\n );\n })}\n </Tabs>\n );\n};\n","import React from \"react\";\nimport type { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { useDataListScript } from \"./dataList.script\";\nimport { DataList } from \"./dataList.ui\";\n\nexport const DataListWidget: React.FC<{\n symbol: string;\n className?: string;\n sharePnLConfig?: SharePnLConfig;\n}> = (props) => {\n const state = useDataListScript(props);\n return <DataList {...state} className={props.className} />;\n};\n","export { DataList } from \"./dataList.ui\";\nexport { DataListWidget } from \"./dataList.widget\";\nexport { useDataListScript } from \"./dataList.script\";\n","export type {\n ShareOptions,\n TradingPageProps,\n ReferralProps,\n TradingRewardsProps,\n} from \"./types/types\";\n\nexport * from \"./components/desktop/dataList\";\nexport * from \"./components/base/lastTrades\";\nexport * from \"./components/desktop/assetView\";\nexport * from \"./components/base/orderBook\";\nexport * from \"./components/desktop/riskRate\";\nexport * from \"./components/desktop/orderBookAndTrades\";\nexport * from \"./components/desktop/layout/splitLayout/splitLayout\";\nexport * from \"./components/mobile/bottomNavBar\";\nexport * from \"./components/mobile/portfolioSheet\";\nexport * from \"./components/mobile/fundingRate\";\nexport * from \"./components/mobile/fundingRateModal\";\nexport * from \"./pages/trading\";\nexport * from \"./provider/tradingPageContext\";\nexport * from \"./provider/tradingPageProvider\";\nexport * from \"./hooks\";\n","import React, { PropsWithChildren, forwardRef } from \"react\";\nimport Split, { SplitProps } from \"@uiw/react-split\";\nimport { SplitLineBar } from \"./splitLineBar\";\n\ntype SplitLayoutProps = PropsWithChildren<SplitProps> & {\n onSizeChange?: (size: string) => void;\n};\n\nexport const SplitLayout = forwardRef<Split, SplitLayoutProps>((props, ref) => {\n const { onSizeChange, ...rest } = props;\n return (\n <Split\n ref={ref}\n {...rest}\n lineBar\n renderBar={(barProps) => <SplitLineBar {...barProps} mode={props.mode} />}\n onDragEnd={(_, width) => onSizeChange?.(`${width}`)}\n />\n );\n});\n","import React, { HTMLAttributes, useMemo } from \"react\";\nimport { SplitProps } from \"@uiw/react-split\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type SplitLineBarProps = Pick<SplitProps, \"mode\"> &\n HTMLAttributes<HTMLDivElement>;\n\nexport const SplitLineBar: React.FC<SplitLineBarProps> = (props) => {\n const { onMouseDown, mode = \"horizontal\", ...rest } = props;\n\n const disable = useMemo(\n () => props.className?.split(\" \").includes(\"disable\"),\n [props.className],\n );\n\n const filterCls = useMemo(\n () => props.className?.split(\" \").filter((cls) => cls !== \"disable\"),\n [props.className],\n );\n\n return (\n <div\n {...rest}\n className={cn(\n filterCls,\n \"!oui-transition-none\",\n \"!oui-shadow-none !oui-bg-transparent\",\n \"hover:!oui-bg-primary-light hover:!oui-shadow-[0px_0px_4px_0px] hover:!oui-shadow-primary-light/80\",\n \"active:!oui-bg-primary-light active:!oui-shadow-[0px_0px_4px_0px] active:!oui-shadow-primary-light/80\",\n \"focus:!oui-bg-primary-light focus:!oui-shadow-[0px_0px_4px_0px] focus:!oui-shadow-primary-light/80\",\n mode === \"horizontal\"\n ? \"!oui-w-[2px] !oui-min-w-[2px] !oui-mx-[3px]\"\n : \"!oui-h-[2px] !oui-min-h-[2px] !oui-my-[3px]\",\n disable && \"oui-pointer-events-none\",\n )}\n >\n <div\n onMouseDown={onMouseDown}\n className={cn(\n \"!oui-transition-none\",\n mode === \"horizontal\" ? \"after:!oui-w-[2px]\" : \"after:!oui-h-[2px]\",\n \"after:!oui-bg-transparent after:!oui-shadow-transparent\",\n )}\n />\n </div>\n );\n};\n","import { FC, SVGProps, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Flex, SimpleDialog, Text } from \"@kodiak-finance/orderly-ui\";\nimport { ScanQRCodeWidget } from \"@kodiak-finance/orderly-ui-scaffold\";\nimport { MobileAccountMenuExtension } from \"./account/account.widget\";\nimport { BalanceWidget } from \"./balance\";\nimport { BottomNavBarState } from \"./bottomNavBar.script\";\nimport { ChainWidget } from \"./chain\";\n\nexport const BottomNavBar: FC<BottomNavBarState> = (props) => {\n const renderContent = () => {\n if (props.wrongNetwork) {\n return null;\n }\n\n if (\n !props.disabledConnect &&\n props.status === AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n return <LinkDevice onDisconnect={props.onDisconnect} />;\n }\n\n return <ChainWidget />;\n };\n\n const showScanQRCode =\n !props.disabledConnect &&\n props.status !== AccountStatusEnum.EnableTradingWithoutConnected &&\n props.status < AccountStatusEnum.EnableTrading;\n\n return (\n <div className=\"oui-bg-base-9 oui-border-t oui-border-line-4\">\n <Flex\n height={64}\n gap={1}\n justify={\"end\"}\n itemAlign={\"center\"}\n className=\"oui-px-[14px]\"\n // style={{\n // height: \"calc(64px + env(safe-area-inset-bottom))\"\n // }}\n >\n <BalanceWidget />\n <Flex gap={2}>\n {showScanQRCode && <ScanQRCodeWidget />}\n {renderContent()}\n <MobileAccountMenuExtension />\n </Flex>\n </Flex>\n <div className=\"oui-h-[env(safe-area-inset-bottom)]\" />\n </div>\n );\n};\n\ntype LinkDeviceProps = {\n onDisconnect: () => void;\n};\n\nconst LinkDevice: FC<LinkDeviceProps> = (props) => {\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n const showDialog = () => {\n setOpen(true);\n };\n\n const hideDialog = () => {\n setOpen(false);\n };\n\n return (\n <>\n <SimpleDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"common.tips\")}\n size=\"xs\"\n actions={{\n secondary: {\n label: t(\"common.cancel\"),\n onClick: hideDialog,\n size: \"md\",\n fullWidth: true,\n },\n primary: {\n label: t(\"connector.disconnect\"),\n onClick: async () => {\n await props.onDisconnect();\n hideDialog();\n },\n size: \"md\",\n variant: \"outlined\",\n color: \"danger\",\n },\n }}\n >\n <Text intensity={54} size=\"sm\">\n {t(\"linkDevice.scanQRCode.connected.description\")}\n </Text>\n </SimpleDialog>\n <Flex\n className=\"oui-text-base-contrast oui-px-[6px]\"\n intensity={500}\n height={28}\n r=\"md\"\n onClick={showDialog}\n >\n <DesktopIcon />\n <Dot />\n <LinkIcon />\n <Dot />\n <MobileIcon />\n </Flex>\n </>\n );\n};\n\nconst Dot = () => {\n return (\n <Flex className=\"oui-gap-x-[1px] oui-px-[1px]\">\n <DotIcon />\n <DotIcon />\n <DotIcon />\n </Flex>\n );\n};\n\nconst DesktopIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M4.5 2.93a2.25 2.25 0 0 0-2.25 2.25v5.25a.75.75 0 0 0-.75.75v1.5c0 1.272.93 2.25 2.25 2.25h10.5c1.318 0 2.25-.978 2.25-2.25v-1.5a.75.75 0 0 0-.75-.75V5.18a2.25 2.25 0 0 0-2.25-2.25zm0 1.5h9a.75.75 0 0 1 .75.75v5.25H3.75V5.18a.75.75 0 0 1 .75-.75M3 11.93h12v.75c0 .46-.277.75-.75.75H3.75c-.474 0-.75-.29-.75-.75z\" />\n </svg>\n);\n\nconst MobileIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M13.498 3.715a2.25 2.25 0 0 0-2.25-2.25h-4.5a2.25 2.25 0 0 0-2.25 2.25v10.5a2.25 2.25 0 0 0 2.25 2.25h4.5a2.25 2.25 0 0 0 2.25-2.25zm-1.5 0v9.75h-6v-9.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 .75.75m-2.25 11.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0\" />\n </svg>\n);\n\nconst LinkIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.007 6a5 5 0 1 1 10 0 5 5 0 0 1-10 0m7.486-2.344A.6.6 0 0 1 8.91 3.5c.15 0 .305.048.418.156a.55.55 0 0 1 0 .798L5.254 8.337a.62.62 0 0 1-.837 0L2.67 6.673a.55.55 0 0 1 0-.798.62.62 0 0 1 .837 0l1.329 1.266z\"\n fill=\"url(#a)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"11.007\"\n y1=\"5.999\"\n x2=\"1.007\"\n y2=\"5.999\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nconst DotIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"2\"\n height=\"2\"\n viewBox=\"0 0 2 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M.667.334a.667.667 0 1 1 0 1.333.667.667 0 0 1 0-1.333\"\n fill=\"url(#a)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"1.333\"\n y1=\"1.001\"\n x2=\"0\"\n y2=\"1.001\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { ExtensionPositionEnum, ExtensionSlot, installExtension } from \"@kodiak-finance/orderly-ui\";\nimport { useAccountScript } from \"./account.script\";\nimport { Account } from \"./account.ui\";\n\nexport const AccountWidget = () => {\n const state = useAccountScript();\n return (<Account {...state} />);\n};\ninstallExtension<any>({\n name: \"mobile-account-menu\",\n scope: [\"*\"],\n positions: [ExtensionPositionEnum.MobileAccountMenu],\n builder: useAccountScript,\n __isInternal: true,\n })((props:any) => {\n return <Account {...props} />;\n });\n \n export const MobileAccountMenuExtension = () => {\n return <ExtensionSlot position={ExtensionPositionEnum.MobileAccountMenu} />;\n };\n ","import { AccountState as AccountStateType } from \"@kodiak-finance/orderly-core\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { useTradingPageContext } from \"../../../../provider/tradingPageContext\";\nimport { AccountSheetWidget } from \"../../accountSheet\";\n\nexport const useAccountScript = () => {\n const { t } = useTranslation();\n const { referral, tradingRewards, bottomSheetLeading } =\n useTradingPageContext();\n const { account, state } = useAccount();\n\n const onShowAccountSheet = () => {\n modal.sheet({\n title: t(\"common.account\"),\n leading: bottomSheetLeading,\n content: <AccountSheetWidget {...referral} {...tradingRewards} />,\n });\n };\n\n return {\n onShowAccountSheet,\n address: account.address,\n state: state as AccountStateType,\n };\n};\n\nexport type AccountState = ReturnType<typeof useAccountScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { ArrowRightShortIcon, Button, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { AccountSheetState } from \"./accountSheet.script\";\nimport { CopyIcon, HeadIcon, OrderlyIcon, USDCIcon } from \"./icons\";\n\nexport const AccountSheet: FC<AccountSheetState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex direction={\"column\"} gap={4}>\n <AccountInfo {...props} />\n <ReferralInfo {...props} />\n <TradingRewardsInfo {...props} />\n <Flex gap={3} width={\"100%\"} justify={\"center\"}>\n {props.showGetTestUSDC && (\n <Button\n variant=\"outlined\"\n // color=\"primary\"\n size=\"md\"\n onClick={props.onGetTestUSDC}\n fullWidth\n loading={props.gettingTestUSDC}\n className=\"oui-border-primary-light oui-text-primary-light\"\n >\n {t(\"trading.faucet.getTestUSDC\")}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"danger\"\n size=\"md\"\n onClick={props.onDisconnect}\n className={props.showGetTestUSDC ? \"oui-w-full\" : \"oui-w-[50%]\"}\n >\n {t(\"connector.disconnect\")}\n </Button>\n </Flex>\n </Flex>\n );\n};\nexport const AccountInfo: FC<AccountSheetState> = (props) => {\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Flex gap={3}>\n <HeadIcon />\n <Flex\n direction={\"column\"}\n justify={\"start\"}\n itemAlign={\"start\"}\n className=\"oui-gap-[2px]\"\n >\n <Text.formatted rule={\"address\"}>{props.address}</Text.formatted>\n <Text.formatted\n size=\"2xs\"\n intensity={80}\n // @ts-ignore\n prefix={\n <div className=\"oui-h-1 oui-w-1 oui-rounded-full oui-bg-success oui-pr-1\" />\n }\n >\n {props.chainName}\n </Text.formatted>\n </Flex>\n </Flex>\n <button\n className=\"oui-cursor-pointer\"\n onClick={() => {\n props.onCopyAddress();\n }}\n >\n <CopyIcon />\n </button>\n </Flex>\n );\n};\n\nexport const ReferralInfo: FC<AccountSheetState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n r=\"lg\"\n p={3}\n className=\"oui-bg-base-6\"\n width={\"100%\"}\n >\n <button\n onClick={props.onClickReferral}\n className=\"oui-cursor-pointer oui-w-full\"\n >\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text size=\"2xs\">{t(\"affiliate.referral\")}</Text>\n <ArrowRightShortIcon color=\"white\" opacity={0.98} size={16} />\n </Flex>\n </button>\n {props.isAffiliate && (\n <Flex\n gradient=\"primary\"\n p={4}\n r=\"lg\"\n width={\"100%\"}\n angle={180}\n justify={\"between\"}\n >\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text size=\"xs\">{t(\"common.affiliate\")}</Text>\n <Text size=\"2xs\" intensity={54}>\n ({t(\"affiliate.commission.30d\")})\n </Text>\n </Flex>\n <Flex className=\"oui-gap-[6px]\">\n <USDCIcon />\n <Text.numeral\n dp={2}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n rule=\"price\"\n >\n {props.affiliateCommission30D ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n )}\n {props.isTrader && (\n <Flex\n gradient=\"success\"\n p={4}\n r=\"lg\"\n width={\"100%\"}\n angle={180}\n justify={\"between\"}\n >\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text size=\"xs\">{t(\"affiliate.trader\")}</Text>\n <Text size=\"2xs\" intensity={54}>\n ({t(\"affiliate.commission.30d\")})\n </Text>\n </Flex>\n <Flex className=\"oui-gap-[6px]\">\n <USDCIcon />\n <Text.numeral\n dp={2}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n rule=\"price\"\n >\n {props.traderCommission30D ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n )}\n </Flex>\n );\n};\n\nexport const TradingRewardsInfo: FC<AccountSheetState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n r=\"lg\"\n p={3}\n className=\"oui-bg-base-6\"\n width={\"100%\"}\n >\n <button\n onClick={props.onClickTradingRewards}\n className=\"oui-cursor-pointer oui-w-full\"\n >\n <Flex justify={\"between\"} width={\"100%\"}>\n <Flex gap={1} className=\"oui-text-base-contrast oui-text-2xs\">\n <Text>{t(\"common.tradingRewards\")}</Text>\n <Text intensity={54}>\n (\n <Text>{`${(\n t(\"tradingRewards.epoch\") as string\n )?.toLowerCase()} `}</Text>\n <Text intensity={98}>{props.curEpochId}</Text> )\n </Text>\n </Flex>\n <ArrowRightShortIcon color=\"white\" opacity={0.98} size={16} />\n </Flex>\n </button>\n <Flex\n p={4}\n r=\"lg\"\n width={\"100%\"}\n angle={180}\n justify={\"between\"}\n className=\"oui-bg-gradient-to-t oui-from-[#2d0061] oui-to-[#bd6bed]\"\n >\n <Text size=\"2xs\" intensity={80}>\n {t(\"tradingRewards.myEstRewards\")}\n </Text>\n\n <Flex className=\"oui-gap-[6px]\">\n <OrderlyIcon />\n <Text.numeral\n dp={2}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n rule=\"price\"\n >\n {props.estRewards}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n","export const HeadIcon = () => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-rounded-full\"\n >\n <g clipPath=\"url(#a)\">\n <path\n d=\"m31.002 14.493-8.326-22.51L.166.31l8.327 22.51z\"\n fill=\"#03435D\"\n />\n <path\n d=\"m4.456-8.716-18.03 15.84 15.84 18.03 18.03-15.84z\"\n fill=\"#157CF2\"\n />\n <path\n d=\"m17.548 38.67 22.825-7.416-7.416-22.825-22.826 7.416z\"\n fill=\"#F3E200\"\n />\n </g>\n <defs>\n <clipPath id=\"a\">\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#fff\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport const CopyIcon = () => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.832 2.492A3.333 3.333 0 0 0 2.5 5.826v5a3.333 3.333 0 0 0 3.333 3.333 3.333 3.333 0 0 0 3.334 3.333h5a3.333 3.333 0 0 0 3.333-3.333v-5a3.333 3.333 0 0 0-3.333-3.333 3.333 3.333 0 0 0-3.334-3.334zm8.334 5c.92 0 1.666.746 1.666 1.667v5c0 .92-.746 1.666-1.666 1.666h-5c-.92 0-1.667-.745-1.667-1.666h3.333a3.333 3.333 0 0 0 3.334-3.334z\"\n fill=\"rgb(var(--oui-color-primary))\"\n />\n </svg>\n );\n};\n\nexport const USDCIcon = (props: { size?: number }) => {\n const { size = 20 } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#a)\">\n <path\n d=\"M10 20c5.542 0 10-4.458 10-10S15.542 0 10 0 0 4.458 0 10s4.458 10 10 10\"\n fill=\"#2775CA\"\n />\n <path\n d=\"M13 11.473c0-1.452-.94-1.95-2.82-2.158-1.344-.166-1.613-.498-1.613-1.078s.448-.955 1.343-.955c.806 0 1.254.25 1.478.872.045.124.18.207.313.207h.717c.179 0 .313-.125.313-.29v-.042c-.179-.913-.985-1.618-2.015-1.701v-.996c0-.166-.134-.29-.358-.332h-.671c-.18 0-.314.124-.359.332v.954c-1.343.166-2.194.996-2.194 2.034 0 1.369.896 1.908 2.776 2.116 1.254.207 1.657.456 1.657 1.12s-.627 1.12-1.477 1.12c-1.165 0-1.568-.456-1.702-1.078a.32.32 0 0 0-.313-.25h-.762c-.179 0-.313.125-.313.291v.042c.179 1.037.895 1.784 2.373 1.991v.996c0 .166.134.29.358.332h.672c.18 0 .313-.124.358-.332v-.996C12.105 13.465 13 12.593 13 11.473\"\n fill=\"#fff\"\n fillOpacity=\".98\"\n />\n <path\n d=\"M7.74 16.57c-3.458-1.215-5.23-4.986-3.945-8.324.665-1.821 2.127-3.208 3.944-3.859.178-.086.266-.216.266-.433v-.607c0-.174-.088-.304-.266-.347-.044 0-.133 0-.177.043-4.21 1.3-6.516 5.68-5.186 9.798.798 2.428 2.704 4.292 5.186 5.072.177.087.355 0 .399-.173.044-.043.044-.087.044-.173v-.608c0-.13-.133-.303-.266-.39m4.698-13.527c-.178-.086-.355 0-.4.174-.043.043-.043.086-.043.173v.607c0 .174.133.347.266.434 3.457 1.213 5.23 4.985 3.944 8.323-.664 1.821-2.127 3.209-3.944 3.859-.178.086-.266.216-.266.433v.607c0 .174.088.304.266.347.044 0 .133 0 .177-.043 4.21-1.3 6.515-5.68 5.186-9.798-.798-2.471-2.748-4.335-5.186-5.116\"\n fill=\"#fff\"\n />\n </g>\n <defs>\n <clipPath id=\"a\">\n <path fill=\"#fff\" d=\"M0 0h20v20H0z\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport const OrderlyIcon = (props: { size?: number }) => {\n const { size = 20 } = props;\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_6403_64483)\">\n <path\n d=\"M10.0245 19.9493C15.5198 19.9493 19.9747 15.4944 19.9747 9.99908C19.9747 4.50371 15.5198 0.0488281 10.0245 0.0488281C4.5291 0.0488281 0.0742188 4.50371 0.0742188 9.99908C0.0742188 15.4944 4.5291 19.9493 10.0245 19.9493Z\"\n fill=\"url(#paint0_linear_6403_64483)\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.1553 4.89304C14.2199 4.94541 14.1821 5.04758 14.0989 5.04758H5.95035C5.86716 5.04758 5.82936 4.94541 5.894 4.89304C7.0223 3.97912 8.45953 3.43164 10.0246 3.43164C11.5898 3.43164 13.0269 3.97912 14.1553 4.89304Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.47013 11.7869C7.42315 11.7199 7.34748 11.6777 7.26565 11.6777H3.82985C3.75113 11.6777 3.69375 11.7525 3.71563 11.8281C4.5078 14.565 7.0326 16.566 10.0247 16.566C13.017 16.566 15.5417 14.565 16.3339 11.8281C16.3558 11.7525 16.2984 11.6777 16.2197 11.6777H12.7839C12.702 11.6777 12.6264 11.7199 12.5795 11.7869C12.0155 12.5911 11.0815 13.1167 10.0248 13.1167C8.96803 13.1167 8.03406 12.5911 7.47013 11.7869Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.3347 7.90519C12.3822 7.95756 12.449 7.9891 12.5196 7.9891H16.1137C16.1952 7.9891 16.253 7.90983 16.2261 7.83301C15.9724 7.10689 15.5948 6.43893 15.1187 5.85447C15.074 5.79961 15.0067 5.76855 14.9358 5.76855H5.11323C5.04247 5.76855 4.97512 5.79961 4.93044 5.85447C4.45429 6.43893 4.0767 7.10689 3.82306 7.83301C3.79622 7.90983 3.85398 7.9891 3.93536 7.9891H7.52952C7.60022 7.9891 7.66694 7.95756 7.71445 7.90519C8.28491 7.2763 9.10861 6.88136 10.0246 6.88136C10.9405 6.88136 11.7643 7.2763 12.3347 7.90519Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.1164 10.9586C13.0553 10.9586 13.0118 10.899 13.0284 10.8401C13.1033 10.5722 13.1433 10.2898 13.1433 9.9981C13.1433 9.58758 13.064 9.19556 12.9199 8.83657C12.8954 8.77581 12.9392 8.70801 13.0046 8.70801H16.392C16.4349 8.70801 16.472 8.73831 16.4799 8.78052C16.5538 9.17511 16.5925 9.58216 16.5925 9.9982C16.5925 10.2978 16.5724 10.5926 16.5337 10.8815C16.5277 10.9258 16.4897 10.9586 16.4451 10.9586H13.1164ZM7.02223 10.8401C7.03868 10.899 6.99532 10.9586 6.93421 10.9586H3.60551C3.56084 10.9586 3.52285 10.9258 3.5169 10.8815C3.47807 10.5926 3.45801 10.2978 3.45801 9.9982C3.45801 9.58216 3.4967 9.17511 3.57069 8.78052C3.57859 8.73831 3.61563 8.70801 3.65856 8.70801H7.04593C7.11141 8.70801 7.15516 8.77581 7.13076 8.83657C6.98657 9.19556 6.90722 9.58758 6.90722 9.9981C6.90722 10.2898 6.94728 10.5722 7.02223 10.8401Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_6403_64483\"\n x1=\"10.0245\"\n y1=\"0.0488561\"\n x2=\"10.0245\"\n y2=\"19.9493\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#C750FF\" />\n <stop offset=\"1\" stopColor=\"#5800E8\" />\n </linearGradient>\n <clipPath id=\"clip0_6403_64483\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n TWType,\n useAccount,\n useChains,\n useConfig,\n useCurEpochEstimate,\n useEpochInfo,\n useLocalStorage,\n useMutation,\n useReferralInfo,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum, ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { modal, toast, useModal } from \"@kodiak-finance/orderly-ui\";\nimport { isTestnet } from \"@kodiak-finance/orderly-utils\";\nimport { ReferralProps, TradingRewardsProps } from \"../../../types/types\";\n\nexport const useAccountSheetScript = (\n props: ReferralProps & TradingRewardsProps,\n) => {\n const { t } = useTranslation();\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n const { account, state } = useAccount();\n const accountId = account.accountId;\n const address = account.address;\n const { hide } = useModal();\n\n const config = useConfig();\n\n const { connectedChain, disconnect, namespace } = useWalletConnector();\n\n const chainId =\n account.chainId || connectedChain?.id || linkDeviceStorage?.chainId;\n\n const showGetTestUSDC = useMemo(() => {\n if (chainId) {\n return (\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected) &&\n // @ts-ignore\n isTestnet(parseInt(chainId))\n );\n }\n\n return false;\n }, [state.status, chainId]);\n\n const chainName = useGetChains(chainId);\n\n const operatorUrl = config.get<string>(\"operatorUrl\");\n\n const onCopyAddress = () => {\n navigator.clipboard.writeText(address ?? \"\");\n toast.success(t(\"common.copy.copied\"));\n };\n\n const {\n affiliateCommission30D,\n traderCommission30D,\n isAffiliate,\n isTrader,\n onClickReferral,\n } = useReferral(props.onClickReferral);\n\n const { curEpochId, estRewards, onClickTradingRewards } = useTradingRewards(\n props.onClickTradingRewards,\n );\n\n const onDisconnect = async () => {\n // The cache must be cleared first, otherwise it will be possible entered link device mode\n localStorage.removeItem(\"orderly_link_device\");\n await disconnect({\n label: state.connectWallet?.name,\n });\n await account.disconnect();\n hide();\n };\n\n const [getTestUSDC, { isMutating: gettingTestUSDC }] = useMutation(\n `${operatorUrl}/v1/faucet/usdc`,\n );\n\n const onGetTestUSDC = () => {\n if (\n state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n // return modal.show(WalletConnectSheet, {\n // status: state.status,\n // });\n return;\n }\n\n const message = t(\"trading.faucet.getTestUSDC.success\", {\n quantity: namespace === ChainNamespace.solana ? \"100\" : \"1,000\",\n });\n\n return getTestUSDC({\n chain_id: chainId?.toString(),\n user_address: state.address,\n broker_id: config.get(\"brokerId\"),\n }).then(\n (res: any) => {\n if (res.success) {\n return modal.alert({\n title: t(\"trading.faucet.getTestUSDC\"),\n message,\n onOk: () => {\n return Promise.resolve(true);\n },\n });\n }\n res.message && toast.error(res.message);\n // return Promise.reject(res);\n },\n (error: Error) => {\n toast.error(error.message);\n },\n );\n };\n return {\n accountId,\n address,\n chainId,\n chainName,\n onCopyAddress,\n\n affiliateCommission30D,\n onClickReferral,\n isAffiliate,\n isTrader,\n traderCommission30D,\n\n curEpochId,\n onClickTradingRewards,\n estRewards,\n\n onDisconnect,\n showGetTestUSDC,\n onGetTestUSDC,\n gettingTestUSDC,\n };\n};\n\nconst useReferral = (_onClickReferral?: () => void) => {\n const { data, isLoading, isAffiliate, isTrader } = useReferralInfo();\n\n const affiliateCommission30D = useMemo(() => {\n if (isAffiliate) {\n return data?.referrer_info?.[\"30d_referrer_rebate\"];\n }\n return undefined;\n }, [data, isAffiliate]);\n\n const traderCommission30D = useMemo(() => {\n if (isTrader) {\n return data?.referee_info?.[\"30d_referee_rebate\"];\n }\n return undefined;\n }, [data, isTrader]);\n\n const onClickReferral = () => {\n _onClickReferral?.();\n };\n\n return {\n onClickReferral,\n affiliateCommission30D,\n traderCommission30D,\n isAffiliate,\n isTrader,\n\n // WARNING: test data\n // affiliateCommission30D: 1234.43,\n // traderCommission30D:44343.33,\n // isAffiliate: true,\n // isTrader: true,\n };\n};\n\nconst useTradingRewards = (_onClick?: () => void) => {\n const [curEpochEstimate] = useCurEpochEstimate(TWType.normal);\n const [list, curEpoch] = useEpochInfo(TWType.normal);\n const curEpochId = useMemo(() => {\n return curEpoch.curEpochInfo?.epoch_id ?? \"--\";\n }, [curEpoch]);\n\n const estRewards = useMemo(() => {\n if (typeof curEpochEstimate?.est_r_wallet === \"undefined\") {\n return \"--\";\n }\n return curEpochEstimate?.est_r_wallet;\n }, [curEpochEstimate]);\n\n const onClickTradingRewards = () => {\n _onClick?.();\n };\n\n return {\n curEpochId,\n estRewards,\n onClickTradingRewards,\n };\n};\n\nfunction useGetChains(chainId: number) {\n const [mainChains, { findByChainId }] = useChains(\"mainnet\", {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const chainName = useMemo(() => {\n // @ts-ignore\n const chain = findByChainId(parseInt(chainId), \"network_infos\");\n\n if (!chain) {\n return \"Unknown\";\n }\n // // @ts-ignore\n // if (isTestnet(chain.chain_id)) {\n // return \"Testnet\";\n // }\n // @ts-ignore\n return chain.name;\n }, [chainId, findByChainId]);\n\n return chainName;\n}\n\nexport type AccountSheetState = ReturnType<typeof useAccountSheetScript>;\n","import { ReferralProps, TradingRewardsProps } from \"../../../types/types\";\nimport { useAccountSheetScript } from \"./accountSheet.script\";\nimport { AccountSheet } from \"./accountSheet.ui\";\n\nexport const AccountSheetWidget = (\n props: ReferralProps & TradingRewardsProps\n) => {\n const state = useAccountSheetScript(props);\n return <AccountSheet {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button, formatAddress } from \"@kodiak-finance/orderly-ui\";\nimport { AccountState } from \"./account.script\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\n\nexport const Account: FC<AccountState> = (props) => {\n return (\n <AuthGuard\n buttonProps={{\n size: \"sm\",\n }}\n >\n <Button\n variant=\"gradient\"\n size={\"sm\"}\n className=\"oui-max-w-[83px]\"\n onClick={(e) => {\n props.onShowAccountSheet();\n }}\n >\n {formatAddress(props.address!, [4, 4])}\n </Button>\n </AuthGuard>\n );\n};\n","import { FC } from \"react\";\nimport { BalanceState } from \"./balance.script\";\n\nexport const Balance: FC<BalanceState> = () => {\n return null;\n};\n","export const useBalanceScript = () => {\n return {};\n};\n\nexport type BalanceState = ReturnType<typeof useBalanceScript>;\n","import { useBalanceScript } from \"./balance.script\";\nimport { Balance } from \"./balance.ui\";\n\nexport const BalanceWidget = () => {\n const state = useBalanceScript();\n return <Balance {...state} />;\n};\n","import { FC } from \"react\";\nimport { Box, ChainIcon, modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { ChainState } from \"./chain.script\";\nimport { ChainSelectorSheetId } from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const Chain: FC<ChainState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <button\n onClick={(e) => {\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorSheetId, {\n // networkId: props.networkId,\n bridgeLessOnly: false,\n isWrongNetwork: props.wrongNetwork,\n })\n .then(\n (r: any) => {\n if (r?.chainId) {\n props.setCurrentChainId(r?.chainId);\n }\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n }}\n >\n <Box className=\"oui-relative oui-rounded-t-[6px] oui-rounded-bl-[6px] oui-rounded-br-[3px] oui-bg-base-5 oui-px-2 oui-h-7 oui-flex oui-items-center\">\n <ChainIcon chainId={props.currentChainId!} size=\"2xs\" />\n <div className=\"oui-absolute oui-right-0 oui-bottom-0\">\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9 6V0L0 9h6a3 3 0 0 0 3-3\" fill=\"url(#a)\" />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"9\"\n y1=\"4.5\"\n x2=\"0\"\n y2=\"4.5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop\n offset=\"1\"\n stopColor=\"rgb(var(--oui-gradient-brand-start))\"\n />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </Box>\n </button>\n );\n};\n","import { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\n\nexport const useChainScript = () => {\n const config = useConfig();\n const { wrongNetwork, currentChainId, setCurrentChainId } = useAppContext();\n\n const networkId = config.get(\"networkId\");\n\n return {\n currentChainId,\n setCurrentChainId,\n networkId,\n wrongNetwork,\n };\n};\n\nexport type ChainState = ReturnType<typeof useChainScript>;\n","import React from \"react\";\nimport { useChainScript } from \"./chain.script\";\nimport { Chain } from \"./chain.ui\";\n\nexport const ChainWidget: React.FC = () => {\n const state = useChainScript();\n return <Chain {...state} />;\n};\n","import { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\n\nexport const useBottomNavBarScript = () => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { account, state } = useAccount();\n\n /** link device, acally wallet not connect */\n const onDisconnect = async () => {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n };\n\n return {\n wrongNetwork,\n disabledConnect,\n status: state.status,\n onDisconnect,\n };\n};\n\nexport type BottomNavBarState = ReturnType<typeof useBottomNavBarScript>;\n","import React from \"react\";\nimport { useBottomNavBarScript } from \"./bottomNavBar.script\";\nimport { BottomNavBar } from \"./bottomNavBar.ui\";\n\nexport const BottomNavBarWidget: React.FC = () => {\n const state = useBottomNavBarScript();\n return <BottomNavBar {...state} />;\n};\n","import { FC, useCallback, useId } from \"react\";\nimport React from \"react\";\nimport { Trans, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n ArrowDownShortIcon,\n ArrowLeftRightIcon,\n ArrowUpShortIcon,\n Button,\n cn,\n Divider,\n EyeCloseIcon,\n EyeIcon,\n Flex,\n Grid,\n Input,\n inputFormatter,\n InputFormatter,\n modal,\n PlusIcon,\n ReduceIcon,\n RefreshIcon,\n Statistic,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { LeverageProps, LeverageSlider } from \"@kodiak-finance/orderly-ui-leverage\";\nimport { USDCIcon } from \"../accountSheet/icons\";\nimport {\n getMarginRatioColor,\n PortfolioSheetState,\n} from \"./portfolioSheet.script\";\nimport { RiskIndicator } from \"./riskIndicator\";\n\nexport const PortfolioSheet: FC<PortfolioSheetState> = (props) => {\n return (\n <Flex direction={\"column\"} gap={4} width={\"100%\"}>\n <Asset {...props} />\n <Divider className=\"oui-w-full\" />\n <MarginRatio {...props} />\n {/* <Leverage {...props} /> */}\n {/* <Divider className=\"oui-w-full\" /> */}\n {/* <AvailableBalance {...props} /> */}\n <Buttons {...props} />\n </Flex>\n );\n};\n\nconst Asset: FC<PortfolioSheetState> = (props) => {\n const { t } = useTranslation();\n\n const onUnsettleClick = useCallback(() => {\n return modal.confirm({\n title: t(\"settle.settlePnl\"),\n // maxWidth: \"xs\",\n content: (\n <Text intensity={54} size=\"xs\">\n {/* @ts-ignore */}\n <Trans i18nKey=\"settle.settlePnl.description\" />\n </Text>\n ),\n onCancel: () => {\n return Promise.reject();\n },\n onOk: () => {\n if (typeof props.onSettlePnL !== \"function\") {\n return Promise.resolve();\n }\n return props.onSettlePnL().catch((e) => {});\n },\n });\n }, [t]);\n\n const clsName =\n props.totalUnrealizedROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\";\n\n return (\n <Flex direction={\"column\"} gap={3} width={\"100%\"}>\n <Flex direction={\"column\"} itemAlign={\"start\"} width={\"100%\"}>\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n suffix={\n props.hideAssets ? (\n <EyeIcon\n opacity={1}\n size={16}\n className=\"oui-text-primary-light\"\n />\n ) : (\n <EyeCloseIcon\n opacity={1}\n size={16}\n className=\"oui-text-primary-light\"\n />\n )\n }\n onClick={() => {\n props.toggleHideAssets();\n }}\n className=\"oui-cursor-pointer\"\n >\n {`${t(\"common.totalValue\")} (USDC)`}\n </Text.formatted>\n <Text.numeral\n size=\"base\"\n // coloring\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.totalValue ?? \"--\"}\n </Text.numeral>\n </Flex>\n <Grid cols={2} rows={1} width={\"100%\"}>\n <Statistic\n label={`${t(\"common.unrealizedPnl\")} (USDC)`}\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-36\",\n }}\n >\n <Flex gap={1}>\n <Text.numeral\n size=\"xs\"\n coloring\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.aggregated.unrealPnL}\n </Text.numeral>\n {!props.hideAssets && (\n <Text.numeral\n size=\"xs\"\n dp={2}\n padding={false}\n rule=\"percentages\"\n prefix={\"(\"}\n suffix={\")\"}\n className={clsName}\n >\n {props.totalUnrealizedROI}\n </Text.numeral>\n )}\n </Flex>\n </Statistic>\n <Statistic\n label={`${t(\"trading.asset.unsettledPnl\")} (USDC)`}\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-36\",\n }}\n >\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text.numeral\n size=\"xs\"\n coloring\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.aggregated.unsettledPnL}\n </Text.numeral>\n <button\n className=\"oui-flex oui-gap-1 oui-items-center\"\n onClick={onUnsettleClick}\n >\n <RefreshIcon\n opacity={1}\n size={12}\n className=\"oui-text-primary-light\"\n />\n <Text size=\"2xs\" color=\"primary\">\n {t(\"settle.settlePnl\")}\n </Text>\n </button>\n </Flex>\n </Statistic>\n </Grid>\n </Flex>\n );\n};\nconst MarginRatio: FC<PortfolioSheetState> = (props) => {\n const { t } = useTranslation();\n\n const { high, mid, low } = getMarginRatioColor(\n props.marginRatioVal,\n props.mmr,\n );\n\n return (\n <Grid cols={2} rows={1} width={\"100%\"}>\n <Statistic\n label={t(\"trading.asset.marginRatio\")}\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-36\",\n }}\n >\n <Flex gap={2}>\n <Text.numeral\n size=\"xs\"\n rule=\"percentages\"\n color=\"primary\"\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.marginRatioVal}\n </Text.numeral>\n {!props.hideAssets && (\n <RiskIndicator\n className={\n low\n ? \"oui-rotate-0\"\n : mid\n ? \"oui-rotate-90\"\n : high\n ? \"oui-rotate-180\"\n : \"\"\n }\n />\n )}\n </Flex>\n </Statistic>\n <Statistic\n label={`${t(\"trading.asset.free&TotalCollateral\")} (USDC)`}\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-36\",\n }}\n >\n <Flex justify={\"start\"} width={\"100%\"} gap={1}>\n <Text.numeral\n size=\"xs\"\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.freeCollateral}\n </Text.numeral>\n <Text size=\"xs\">/</Text>\n <Text.numeral\n size=\"xs\"\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.totalCollateral}\n </Text.numeral>\n </Flex>\n </Statistic>\n </Grid>\n );\n};\n\nconst IconButton: React.FC<{\n Icon: React.ComponentType<any>;\n onClick: React.MouseEventHandler<SVGSVGElement>;\n disabled: boolean;\n}> = (props) => {\n const { Icon, onClick, disabled } = props;\n return (\n <Icon\n onClick={disabled ? undefined : onClick}\n className={cn(\n \"oui-text-white oui-m-2 oui-transition-all\",\n disabled\n ? \"oui-cursor-not-allowed oui-opacity-20\"\n : \"oui-cursor-pointer oui-opacity-100\",\n )}\n />\n );\n};\n\nconst LeverageInput: React.FC<PortfolioSheetState> = (props) => {\n const formatters = React.useMemo<InputFormatter[]>(\n () => [\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ],\n [],\n );\n const id = useId();\n return (\n <label\n htmlFor={id}\n className={cn(\n \"oui-w-full\",\n \"oui-rounded\",\n \"oui-bg-base-6\",\n \"oui-flex\",\n \"oui-items-center\",\n \"oui-justify-between\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-light\",\n \"oui-input-root\",\n )}\n >\n <IconButton\n Icon={ReduceIcon}\n onClick={props.onLeverageReduce}\n disabled={props.isReduceDisabled}\n />\n <Flex itemAlign=\"center\" justify=\"center\">\n <Input\n // {...props}\n value={props.value}\n id={id}\n autoComplete=\"off\"\n classNames={{\n input: cn(\"oui-text-center\"),\n root: cn(\n \"oui-text-center\",\n \"oui-w-6\",\n \"oui-px-0\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-none\",\n ),\n }}\n formatters={formatters}\n onChange={props.onInputChange}\n />\n <div className=\"oui-select-none\">x</div>\n </Flex>\n <IconButton\n Icon={PlusIcon}\n onClick={props.onLeverageIncrease}\n disabled={props.isIncreaseDisabled}\n />\n </label>\n );\n};\n\nexport const LeverageSelector: React.FC<PortfolioSheetState> = (props) => {\n const { value, onLeverageChange, onValueCommit } = props;\n return (\n <Flex itemAlign=\"center\" justify=\"between\" width={\"100%\"} mt={2}>\n {[1, 5, 10, 20, 50].map((option) => (\n <Flex\n key={option}\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\n `oui-transition-all oui-cursor-pointer oui-box-border oui-bg-clip-padding oui-px-3 oui-py-2.5 oui-rounded-md oui-border oui-border-solid`,\n value === option\n ? \"oui-border-primary oui-bg-base-6\"\n : \"oui-border-line-12\",\n )}\n onClick={() => {\n onLeverageChange(option);\n onValueCommit(option);\n }}\n >\n <Flex\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(`oui-h-3 oui-w-9 oui-select-none`)}\n >\n {option}x\n </Flex>\n </Flex>\n ))}\n </Flex>\n );\n};\n\nconst Buttons: FC<PortfolioSheetState> = (props) => {\n const { t } = useTranslation();\n\n if (props.isMainAccount) {\n return (\n <Grid\n cols={props.hasSubAccount ? 3 : 2}\n rows={1}\n gap={3}\n className=\"oui-grid-row-[1fr,1fr]\"\n width={\"100%\"}\n pt={2}\n pb={4}\n >\n <Button\n icon={<ArrowDownShortIcon color=\"white\" opacity={0.8} />}\n size=\"md\"\n fullWidth\n onClick={props.onDeposit}\n >\n {t(\"common.deposit\")}\n </Button>\n {props.hasSubAccount && (\n <Button\n icon={<ArrowLeftRightIcon color=\"white\" opacity={0.8} />}\n color=\"gray\"\n size=\"md\"\n onClick={props.onTransfer}\n data-testid=\"oui-testid-assetView-transfer-button\"\n >\n <Text>{t(\"common.transfer\")}</Text>\n </Button>\n )}\n <Button\n icon={<ArrowUpShortIcon color=\"white\" opacity={0.8} />}\n size=\"md\"\n fullWidth\n className=\"oui-bg-base-2 hover:oui-bg-base-2/50\"\n onClick={props.onWithdraw}\n >\n {t(\"common.withdraw\")}\n </Button>\n </Grid>\n );\n }\n\n return (\n <Button\n fullWidth\n color=\"secondary\"\n size=\"md\"\n onClick={props.onTransfer}\n data-testid=\"oui-testid-assetView-transfer-button\"\n >\n <Text>{t(\"common.transfer\")}</Text>\n </Button>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useDebouncedCallback,\n useEventEmitter,\n useLeverage,\n useMarginRatio,\n usePositionStream,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { modal, SliderMarks, toast } from \"@kodiak-finance/orderly-ui\";\nimport {\n DepositAndWithdrawWithSheetId,\n TransferSheetId,\n} from \"@kodiak-finance/orderly-ui-transfer\";\nimport { useTradingLocalStorage } from \"../../../hooks\";\n\nexport const usePortfolioSheetScript = () => {\n const { state, account, isMainAccount } = useAccount();\n const assets = useAssets();\n const marginRatio = useMarginRatioAndLeverage();\n const ee = useEventEmitter();\n const { t } = useTranslation();\n const subAccounts = state.subAccounts ?? [];\n\n const [showSliderTip, setShowSliderTip] = useState(false);\n\n const onSettlePnL = useCallback(async () => {\n return account\n .settle()\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(t(\"settle.settlement.error\"));\n return Promise.reject(e);\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n return Promise.reject(e);\n }\n\n if (e?.code === \"ACTION_REJECTED\") {\n toast.error(t(\"connector.userRejected\"));\n return Promise.reject(e);\n }\n })\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\n });\n }, [account, t]);\n\n const onDeposit = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, {\n activeTab: \"deposit\",\n });\n }, []);\n\n const onWithdraw = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, {\n activeTab: \"withdraw\",\n });\n }, []);\n\n const onTransfer = useCallback(() => {\n modal.show(TransferSheetId);\n }, []);\n\n return {\n ...assets,\n ...marginRatio,\n onSettlePnL,\n onDeposit,\n onWithdraw,\n showSliderTip,\n setShowSliderTip,\n isMainAccount,\n onTransfer,\n hasSubAccount: subAccounts?.length > 0,\n };\n};\n\nconst useAssets = () => {\n const { hideAssets, setHideAssets } = useTradingLocalStorage();\n const toggleHideAssets = () => {\n setHideAssets(!hideAssets);\n };\n const { totalCollateral, freeCollateral, totalValue, availableBalance } =\n useCollateral({\n dp: 2,\n });\n return {\n hideAssets,\n toggleHideAssets,\n totalCollateral,\n freeCollateral,\n totalValue,\n availableBalance,\n };\n};\n\nconst useMarginRatioAndLeverage = () => {\n const { t } = useTranslation();\n const [{ aggregated, totalUnrealizedROI }, positionsInfo] =\n usePositionStream();\n const { marginRatio, currentLeverage, mmr } = useMarginRatio();\n\n const marginRatioVal = useMemo(() => {\n return Math.min(\n 10,\n aggregated.notional === 0\n ? positionsInfo[\"margin_ratio\"](10)!\n : marginRatio,\n );\n }, [marginRatio, aggregated]);\n\n const { update, curLeverage, maxLeverage, leverageLevers } = useLeverage();\n\n const marks = useMemo<SliderMarks>(() => {\n return leverageLevers?.map((e) => ({\n label: `${e}x`,\n value: e,\n }));\n }, [leverageLevers]);\n\n const [leverage, setLeverage] = useState<number>(curLeverage ?? 0);\n\n const step = 100 / ((marks?.length || 0) - 1);\n\n // const leverageValue = useMemo(() => {\n // const index = leverageLevers.findIndex((item: any) => item === leverage);\n\n // return index * step;\n // }, [leverageLevers, leverage, step]);\n\n const onLeverageChange = (leverage: number) => {\n // maxLeverage / 100 * leverage;\n setLeverage(leverage);\n // updateLeverage(leverage);\n };\n\n const onSave = async (leverage: number) => {\n try {\n update({ leverage }).then(\n () => {\n toast.success(t(\"leverage.updated\"));\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch {\n //\n }\n };\n\n const onValueCommit = useCallback((value: number | number[]) => {\n onSave(Array.isArray(value) ? value[0] : value);\n }, []);\n\n const debouncedCommit = useDebouncedCallback(onValueCommit, 500);\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value, 10);\n const raw = Number.isNaN(parsed) ? 0 : parsed;\n const clamped = Math.min(Math.max(raw, 1), maxLeverage);\n setLeverage(clamped);\n debouncedCommit(clamped);\n },\n [debouncedCommit, maxLeverage],\n );\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => {\n onSave(prev + 1);\n return prev + 1;\n });\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => {\n onSave(prev - 1);\n return prev - 1;\n });\n };\n\n return {\n aggregated,\n totalUnrealizedROI,\n positionsInfo,\n marginRatio,\n marginRatioVal,\n mmr,\n currentLeverage,\n step,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled: leverage <= 1,\n isIncreaseDisabled: leverage >= maxLeverage,\n onValueCommit,\n value: leverage,\n maxLeverage,\n onSaveLeverage: onSave,\n };\n};\n\nexport function getMarginRatioColor(marginRatio: number, mmr: number | null) {\n if (mmr === null) {\n return { isRed: false, isYellow: false, isGreen: true };\n }\n const imr = mmr * 2;\n\n const high = marginRatio <= imr;\n const mid = marginRatio > imr && marginRatio < 1;\n const low = marginRatio >= 1;\n return { high, mid, low };\n}\n\nexport type PortfolioSheetState = ReturnType<typeof usePortfolioSheetScript>;\n","import { FC } from \"react\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\n\ninterface RiskIndicatorProps {\n size?: number;\n className?: string;\n}\n\nexport const RiskIndicator: FC<RiskIndicatorProps> = (props) => {\n const { size = 20, className } = props;\n\n return (\n <div\n className=\"oui-flex oui-justify-center oui-items-end\"\n style={{\n background: \"url(/images/riskLevelBg.png)\",\n backgroundSize: \"contain\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center bottom\",\n width: `${size}px`,\n height: `14px`,\n }}\n >\n <div\n className={cn(\n \"oui-relative oui-w-[2px] oui-h-[2px] oui-rounded-full oui-bg-white after:oui-block after:oui-content-[''] after:oui-absolute after:oui-right-0 after:oui-w-[10px] after:oui-h-[2px] after:oui-bg-white/50\",\n className\n // {\n // \"oui-rotate-0\": value > 1,\n // \"oui-rotate-90\": value >= 0.05 && value <= 1,\n // \"oui-rotate-180\": value < 0.05,\n // }\n )}\n ></div>\n </div>\n );\n};\n","import { usePortfolioSheetScript } from \"./portfolioSheet.script\";\nimport { PortfolioSheet } from \"./portfolioSheet.ui\";\n\nexport const PortfolioSheetWidget = () => {\n const state = usePortfolioSheetScript();\n return <PortfolioSheet {...state} />;\n};\n","export {\n useFundingRateModalScript,\n type FundingRateModalState,\n} from \"./fundingRateModal.script\";\nexport { FundingRateModal } from \"./fundingRateModal.ui\";\nexport {\n FundingRateModalWidget,\n FundingRateDialogId,\n FundingRateSheetId,\n} from \"./fundingRateModal.widget\";\n","import { FC } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport type { TradingState } from \"./trading.script\";\nimport { DesktopLayout } from \"./trading.ui.desktop\";\nimport { MobileLayout } from \"./trading.ui.mobile\";\n\nexport const Trading: FC<TradingState> = (props) => {\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <MobileLayout {...props} />;\n }\n\n return (\n <DesktopLayout\n className=\"oui-h-[calc(100vh_-_48px_-_29px)] oui-bg-base-10\"\n {...props}\n />\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragOverlay,\n DragStartEvent,\n DragEndEvent,\n Modifier,\n type ClientRect,\n} from \"@dnd-kit/core\";\nimport { restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS, Transform } from \"@dnd-kit/utilities\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport {\n SideMarketsWidget,\n SymbolInfoBarFullWidget,\n HorizontalMarketsWidget,\n} from \"@kodiak-finance/orderly-markets\";\nimport {\n OrderEntrySortKeys,\n TradingviewFullscreenKey,\n} from \"@kodiak-finance/orderly-types\";\nimport { Box, cn, Flex } from \"@kodiak-finance/orderly-ui\";\nimport { OrderEntryWidget } from \"@kodiak-finance/orderly-ui-order-entry\";\nimport { TradingviewWidget } from \"@kodiak-finance/orderly-ui-tradingview\";\nimport { DepositStatusWidget } from \"@kodiak-finance/orderly-ui-transfer\";\nimport { SortablePanel } from \"../../components/desktop/layout/sortablePanel\";\nimport { SplitLayout } from \"../../components/desktop/layout/splitLayout\";\nimport {\n dataListInitialHeight,\n getOffsetSizeNum,\n TradingState,\n} from \"./trading.script\";\nimport {\n scrollBarWidth,\n topBarHeight,\n bottomBarHeight,\n space,\n symbolInfoBarHeight,\n orderEntryMinWidth,\n orderEntryMaxWidth,\n orderbookMinWidth,\n orderbookMaxWidth,\n orderbookMinHeight,\n orderbookMaxHeight,\n tradindviewMinHeight,\n tradingViewMinWidth,\n dataListMaxHeight,\n} from \"./trading.script\";\n\nconst LazyRiskRateWidget = React.lazy(() =>\n import(\"../../components/desktop/riskRate\").then((mod) => {\n return {\n default: mod.RiskRateWidget,\n };\n }),\n);\n\nconst LazyAssetViewWidget = React.lazy(() =>\n import(\"../../components/desktop/assetView\").then((mod) => {\n return {\n default: mod.AssetViewWidget,\n };\n }),\n);\n\nconst LazyDataListWidget = React.lazy(() =>\n import(\"../../components/desktop/dataList\").then((mod) => {\n return {\n default: mod.DataListWidget,\n };\n }),\n);\n\nconst LazySwitchLayout = React.lazy(() =>\n import(\"../../components/desktop/layout/switchLayout\").then((mod) => {\n return {\n default: mod.SwitchLayout,\n };\n }),\n);\n\nconst LazyOrderBookAndTradesWidget = React.lazy(() =>\n import(\"../../components/desktop/orderBookAndTrades\").then((mod) => {\n return {\n default: mod.OrderBookAndTradesWidget,\n };\n }),\n);\n\nexport type DesktopLayoutProps = TradingState & {\n className?: string;\n};\n\nconst scaleModifier: Modifier = ({\n transform,\n draggingNodeRect,\n}: {\n transform: Transform;\n draggingNodeRect: ClientRect | null;\n}) => {\n if (draggingNodeRect) {\n return {\n ...transform,\n scaleX: 2.05,\n scaleY: 2.05,\n };\n }\n return transform;\n};\n\nexport const DesktopLayout: React.FC<DesktopLayoutProps> = (props) => {\n const {\n resizeable,\n panelSize,\n onPanelSizeChange,\n layout,\n onLayout,\n marketLayout,\n onMarketLayout,\n orderBookSplitSize,\n setOrderbookSplitSize,\n dataListSplitSize,\n setDataListSplitSize,\n mainSplitSize,\n setMainSplitSize,\n dataListSplitHeightSM,\n setDataListSplitHeightSM,\n orderBookSplitHeightSM,\n setOrderbookSplitHeightSM,\n max2XL,\n max4XL,\n animating,\n setAnimating,\n updatePositions,\n showPositionIcon,\n horizontalDraggable,\n marketsWidth,\n tradindviewMaxHeight,\n dataListMinHeight,\n } = props;\n\n const [tradingViewFullScreen] = useLocalStorage(\n TradingviewFullscreenKey,\n false,\n );\n\n const [sortableItems, setSortableItems] = useLocalStorage<string[]>(\n OrderEntrySortKeys,\n [\"margin\", \"assets\", \"orderEntry\"],\n );\n\n const dropAnimationConfig = useMemo(() => {\n return {\n keyframes({\n transform,\n }: {\n transform: {\n initial: Transform;\n final: Transform;\n };\n }) {\n return [\n {\n transform: CSS.Transform.toString({\n ...transform.initial,\n scaleX: 1.05,\n scaleY: 1.05,\n }),\n },\n {\n transform: CSS.Transform.toString({\n ...transform.final,\n scaleX: 1,\n scaleY: 1,\n // scaleX: 0.85,\n // scaleY: 0.85,\n }),\n },\n ];\n },\n sideEffects: ({ active, dragOverlay }) => {\n // console.log(active.node);\n active.node.style.opacity = \"0\";\n const innerElement = dragOverlay.node.querySelector(\".inner-content\");\n if (innerElement) {\n // innerElement.animate(\n // [{ transform: \"scale(1.05)\" }, { transform: \"scale(1)\" }],\n // {\n // duration: 200,\n // easing: \"ease-out\",\n // },\n // );\n innerElement.classList.add(\"oui-animate-shake\");\n }\n return () => {\n active.node.style.opacity = \"\";\n };\n },\n };\n }, []);\n\n // Configure sensors for drag and drop interactions\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n // State for drag overlay management\n const [activeId, setActiveId] = useState<string | null>(null);\n\n /**\n * Handle drag start event for sortable panels\n * Sets the active dragging item for overlay rendering\n */\n function handleDragStart(event: DragStartEvent) {\n setActiveId(event.active.id as string);\n }\n\n /**\n * Handle drag end event for sortable panels\n * Updates the order of sortable items and corresponding positions\n */\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n\n if (active.id !== over?.id && over) {\n const oldIndex = sortableItems.indexOf(active.id as string);\n const newIndex = sortableItems.indexOf(over.id as string);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n // Update sortableItems order\n const newItems = arrayMove(sortableItems, oldIndex, newIndex);\n setSortableItems(newItems as string[]);\n\n // Also update positions to keep them in sync\n // updatePositions(oldIndex, newIndex);\n }\n }\n\n // Reset active id after drag ends\n setActiveId(null);\n }\n\n const minScreenHeight = useMemo(() => {\n return tradingViewFullScreen\n ? 0\n : symbolInfoBarHeight +\n orderbookMaxHeight +\n dataListInitialHeight +\n space * 4;\n }, [tradingViewFullScreen]);\n\n const minScreenHeightSM =\n topBarHeight +\n bottomBarHeight +\n symbolInfoBarHeight +\n tradindviewMinHeight +\n orderbookMinHeight +\n dataListMinHeight +\n space * 4;\n\n const horizontalMarketsView = (\n <HorizontalMarketsWidget\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n maxItems={-1} // show all markets\n dropdownPos={marketLayout === \"bottom\" ? \"top\" : \"bottom\"}\n />\n );\n\n const containerPaddingX = useMemo(() => (max2XL ? 12 : 8), [max2XL]);\n\n const stickyHorizontalMarketsView = (\n <Box\n className={cn(\n \"oui-bg-base-10\",\n // -8 is for reducing the container's padding\n \"oui-sticky oui-z-30 oui-mb-[-8px] oui-py-2\",\n // Split line disabled for > 2xl screens\n !max2XL && \"oui-mt-[-8px]\",\n )}\n style={{\n bottom: 0,\n minWidth:\n (max2XL ? 1024 : 1440) - scrollBarWidth - containerPaddingX * 2,\n }}\n >\n {horizontalMarketsView}\n </Box>\n );\n\n const marketsWidget = (\n <SideMarketsWidget\n resizeable={resizeable}\n panelSize={panelSize}\n onPanelSizeChange={onPanelSizeChange as any}\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n />\n );\n\n const marketsView = (\n <Box\n intensity={900}\n pt={3}\n r=\"2xl\"\n height=\"100%\"\n width={marketsWidth}\n style={{ minWidth: marketsWidth }}\n className=\"oui-transition-all oui-duration-150\"\n onTransitionEnd={() => setAnimating(false)}\n >\n {!animating && marketLayout === \"left\" && marketsWidget}\n </Box>\n );\n\n const symbolInfoBarView = (\n <Box\n intensity={900}\n r=\"2xl\"\n px={3}\n width=\"100%\"\n style={{\n minHeight: symbolInfoBarHeight,\n height: symbolInfoBarHeight,\n }}\n >\n <SymbolInfoBarFullWidget\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n trailing={\n <React.Suspense fallback={null}>\n <LazySwitchLayout\n layout={layout}\n onLayout={onLayout}\n marketLayout={marketLayout}\n onMarketLayout={onMarketLayout}\n />\n </React.Suspense>\n }\n />\n </Box>\n );\n\n const { library_path, ...restTradingViewConfig } = props.tradingViewConfig;\n\n const tradingviewWidget = (\n <TradingviewWidget\n classNames={{\n root: cn(\n tradingViewFullScreen\n ? \"!oui-absolute oui-top-0 oui-left-0 oui-right-0 oui-bottom-0 oui-z-[40] oui-bg-base-10\"\n : \"oui-z-1\",\n ),\n content: cn(\n tradingViewFullScreen\n ? \"oui-top-3 oui-bottom-3 oui-left-3 oui-right-3 oui-bg-base-9 oui-rounded-[16px] oui-overflow-hidden\"\n : \"\",\n ),\n }}\n symbol={props.symbol}\n {...restTradingViewConfig}\n libraryPath={library_path}\n />\n );\n\n const tradingView = (\n <Box\n width=\"100%\"\n height=\"100%\"\n intensity={900}\n r=\"2xl\"\n style={{ flex: 1, minWidth: tradingViewMinWidth }}\n className=\"oui-overflow-hidden\"\n >\n {tradingviewWidget}\n </Box>\n );\n\n const orderbookWidget = (\n <React.Suspense fallback={null}>\n <LazyOrderBookAndTradesWidget symbol={props.symbol} />\n </React.Suspense>\n );\n\n const orderbookView = (\n <Box\n r=\"2xl\"\n height=\"100%\"\n style={{\n minWidth: orderbookMinWidth,\n maxWidth: horizontalDraggable ? orderbookMaxWidth : orderbookMinWidth,\n width: orderBookSplitSize,\n }}\n className=\"oui-overflow-hidden\"\n >\n {orderbookWidget}\n </Box>\n );\n\n const dataListWidget = (\n <React.Suspense fallback={null}>\n <LazyDataListWidget\n current={undefined}\n symbol={props.symbol}\n sharePnLConfig={props.sharePnLConfig}\n />\n </React.Suspense>\n );\n\n const dataListView = (\n <Box\n intensity={900}\n r=\"2xl\"\n p={2}\n style={{\n height: dataListSplitSize,\n // height: `calc(100% - ${symbolInfoBarHeight}px - ${orderbookMaxHeight}px - ${space}px)`,\n minHeight: dataListInitialHeight,\n // minHeight: `max(${dataListMinHeight}px, calc(100vh - ${symbolInfoBarHeight}px - ${orderbookMaxHeight}px - ${space}px))`,\n }}\n className=\"oui-overflow-hidden\"\n >\n {dataListWidget}\n </Box>\n );\n\n const orderInteractionWidgets = useMemo(() => {\n return {\n margin: {\n className: \"\",\n element: (\n <React.Suspense fallback={null}>\n <LazyRiskRateWidget />\n </React.Suspense>\n ),\n },\n assets: {\n className: \"oui-border oui-border-line-12\",\n element: (\n <>\n <React.Suspense fallback={null}>\n <LazyAssetViewWidget\n isFirstTimeDeposit={props.isFirstTimeDeposit}\n />\n </React.Suspense>\n <DepositStatusWidget\n className=\"oui-mt-3 oui-gap-y-2\"\n onClick={props.navigateToPortfolio}\n />\n </>\n ),\n },\n orderEntry: {\n className: \"\",\n element: (\n <OrderEntryWidget\n symbol={props.symbol}\n disableFeatures={\n props.disableFeatures as unknown as (\n | \"slippageSetting\"\n | \"feesInfo\"\n )[]\n }\n />\n ),\n },\n };\n }, [\n props.isFirstTimeDeposit,\n props.disableFeatures,\n props.navigateToPortfolio,\n props.symbol,\n ]);\n\n const orderEntryView = (\n <Flex\n gapY={2}\n direction=\"column\"\n height=\"100%\"\n style={{\n minWidth: orderEntryMinWidth,\n maxWidth: horizontalDraggable ? orderEntryMaxWidth : orderEntryMinWidth,\n width: mainSplitSize,\n }}\n >\n {sortableItems.map((key: string) => {\n return (\n <SortablePanel\n key={key}\n id={key}\n showIndicator={showPositionIcon}\n className={\n orderInteractionWidgets[\n key as keyof typeof orderInteractionWidgets\n ].className\n }\n >\n {\n orderInteractionWidgets[\n key as keyof typeof orderInteractionWidgets\n ].element\n }\n </SortablePanel>\n );\n })}\n </Flex>\n );\n\n const renderTradingView = () => {\n if (max4XL && layout === \"right\") {\n return (\n <Flex\n gap={2}\n className=\"oui-flex-1 oui-overflow-hidden\"\n style={{ minWidth: marketsWidth + tradingViewMinWidth + space }}\n >\n {marketLayout === \"left\" && marketsView}\n {tradingView}\n </Flex>\n );\n }\n\n return tradingView;\n };\n\n const tradingViewAndOrderbookView = (\n <SplitLayout\n style={{\n // the style width is not set, and a child node style needs to be set to flex: 1 to adapt\n flex: 1,\n minHeight: orderbookMinHeight,\n // maxHeight: orderbookMaxHeight,\n }}\n onSizeChange={setOrderbookSplitSize}\n disable={!horizontalDraggable}\n >\n {renderTradingView()}\n {orderbookView}\n </SplitLayout>\n );\n\n const renderTradingViewAndOrderbookView = () => {\n if (max4XL && layout === \"left\") {\n return (\n <Flex gapX={2} style={{ minHeight: orderbookMinHeight }} height=\"100%\">\n {tradingViewAndOrderbookView}\n {marketLayout === \"left\" && marketsView}\n </Flex>\n );\n }\n return tradingViewAndOrderbookView;\n };\n\n const mainView = (\n <Flex\n direction=\"column\"\n className=\"oui-flex-1 oui-overflow-hidden\"\n gap={2}\n style={{\n minWidth: max4XL\n ? marketsWidth + tradingViewMinWidth + orderbookMinWidth + space * 2\n : tradingViewMinWidth + orderbookMinWidth + space,\n }}\n >\n {symbolInfoBarView}\n <SplitLayout\n style={{\n // height: orderbookMaxHeight + dataListInitialHeight + space,\n maxHeight: `calc(100% - ${symbolInfoBarHeight}px - ${space}px)`,\n }}\n className=\"oui-w-full\"\n mode=\"vertical\"\n onSizeChange={setDataListSplitSize}\n >\n {renderTradingViewAndOrderbookView()}\n {dataListView}\n </SplitLayout>\n </Flex>\n );\n\n const onSizeChange = (width: string) =>\n layout === \"left\"\n ? setMainSplitSize(getOffsetSizeNum(width))\n : setMainSplitSize(width);\n\n if (max2XL) {\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToVerticalAxis]}\n >\n <SortableContext\n items={sortableItems}\n strategy={verticalListSortingStrategy}\n >\n <Box height=\"100%\">\n {marketLayout === \"top\" && (\n <Box\n className={cn(\"oui-mt-2 oui-max-h-8 oui-px-3\", props.className)}\n >\n {horizontalMarketsView}\n </Box>\n )}\n\n <SplitLayout\n ref={props.max2XLSplitRef}\n style={{\n minHeight: minScreenHeightSM,\n minWidth: 1024 - scrollBarWidth,\n // height: props.extraHeight ? props.extraHeight : undefined,\n }}\n className={cn(\n \"oui-flex oui-flex-1\",\n \"oui-size-full oui-min-w-[1018px]\",\n \"oui-px-3 oui-py-2\",\n props.className,\n )}\n onSizeChange={setDataListSplitHeightSM}\n onDragging={props.onDataListSplitHeightDragging}\n mode=\"vertical\"\n >\n <Flex\n gapX={2}\n itemAlign=\"stretch\"\n className={cn(\n \"oui-flex-1\",\n layout === \"left\" && \"oui-flex-row-reverse\",\n )}\n style={{\n minHeight: Math.max(\n symbolInfoBarHeight +\n tradindviewMinHeight +\n orderbookMinHeight +\n space * 2,\n props.orderEntryHeight,\n ),\n maxHeight:\n symbolInfoBarHeight +\n tradindviewMaxHeight +\n orderbookMaxHeight +\n space * 2,\n }}\n >\n <Flex\n height=\"100%\"\n className=\"oui-w-[calc(100%_-_280px_-_12px)] oui-flex-1\"\n direction=\"column\"\n gapY={2}\n >\n {symbolInfoBarView}\n <Flex\n width=\"100%\"\n height=\"100%\"\n gapX={2}\n itemAlign=\"stretch\"\n style={{\n minHeight:\n tradindviewMinHeight + orderbookMinHeight + space,\n maxHeight:\n tradindviewMaxHeight + orderbookMaxHeight + space,\n }}\n className={cn(\n \"oui-flex-1\",\n layout === \"left\" && \"oui-flex-row-reverse\",\n )}\n >\n {marketLayout === \"left\" && (\n <Box\n intensity={900}\n pt={3}\n r=\"2xl\"\n width={marketsWidth}\n style={{\n minHeight:\n tradindviewMinHeight + orderbookMinHeight + space,\n maxHeight:\n tradindviewMaxHeight + orderbookMaxHeight + space,\n }}\n >\n {marketsWidget}\n </Box>\n )}\n <SplitLayout\n ref={props.tradingviewAndOrderbookSplitRef}\n mode=\"vertical\"\n style={{ width: `calc(100% - ${marketsWidth}px)` }}\n className=\"oui-flex-1\"\n onSizeChange={setOrderbookSplitHeightSM}\n onDragging={props.onTradingviewAndOrderbookDragging}\n >\n <Box\n width=\"100%\"\n intensity={900}\n r=\"2xl\"\n style={{\n minHeight: tradindviewMinHeight,\n maxHeight: tradindviewMaxHeight,\n height: 1200,\n }}\n >\n {tradingviewWidget}\n </Box>\n\n <Box\n r=\"2xl\"\n height=\"100%\"\n width=\"100%\"\n style={{\n minHeight: orderbookMinHeight,\n maxHeight: orderbookMaxHeight,\n height: orderBookSplitHeightSM,\n }}\n className=\"oui-flex-1\"\n >\n {orderbookWidget}\n </Box>\n </SplitLayout>\n </Flex>\n </Flex>\n <Flex\n ref={props.orderEntryViewRef}\n id=\"orderEntryView\"\n gapY={3}\n direction=\"column\"\n className=\"oui-relative\"\n style={{\n width: orderEntryMinWidth,\n // force order entry render actual content height\n height: \"max-content\",\n // height:\n // props.extraHeight && props.extraHeight > 100\n // ? undefined\n // : \"max-content\",\n }}\n >\n <Flex\n gapY={2}\n direction=\"column\"\n height=\"100%\"\n style={{\n minWidth: orderEntryMinWidth,\n maxWidth: horizontalDraggable\n ? orderEntryMaxWidth\n : orderEntryMinWidth,\n width: mainSplitSize,\n }}\n >\n {sortableItems.map((key: string) => {\n return (\n <SortablePanel\n key={key}\n id={key}\n showIndicator={showPositionIcon}\n className={\n orderInteractionWidgets[\n key as keyof typeof orderInteractionWidgets\n ].className\n }\n >\n {\n orderInteractionWidgets[\n key as keyof typeof orderInteractionWidgets\n ].element\n }\n </SortablePanel>\n );\n })}\n </Flex>\n <Box height={props.extraHeight} />\n </Flex>\n </Flex>\n\n <Box\n intensity={900}\n r=\"2xl\"\n p={2}\n style={{\n height: dataListSplitHeightSM,\n minHeight: Math.max(dataListMinHeight, props.dataListHeight),\n maxHeight: dataListMaxHeight,\n }}\n className=\"oui-overflow-hidden\"\n >\n {dataListWidget}\n </Box>\n\n {marketLayout === \"bottom\" && stickyHorizontalMarketsView}\n </SplitLayout>\n </Box>\n </SortableContext>\n <DragOverlay dropAnimation={dropAnimationConfig}>\n {activeId ? (\n <SortablePanel\n id={activeId}\n showIndicator={showPositionIcon}\n dragOverlay\n className={`${\n orderInteractionWidgets[\n activeId as keyof typeof orderInteractionWidgets\n ].className\n } oui-shadow-lg oui-shadow-base-9`}\n >\n {\n orderInteractionWidgets[\n activeId as keyof typeof orderInteractionWidgets\n ].element\n }\n </SortablePanel>\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToVerticalAxis]}\n >\n <SortableContext\n items={sortableItems}\n strategy={verticalListSortingStrategy}\n >\n <Flex\n style={{\n minHeight: minScreenHeight,\n minWidth: 1440 - scrollBarWidth,\n }}\n className={cn(\n props.className,\n \"oui-justify-start\",\n tradingViewFullScreen &&\n \"oui-relative oui-h-[calc(100vh-80px)] oui-w-screen oui-overflow-hidden !oui-p-0\",\n )}\n width=\"100%\"\n p={2}\n gap={2}\n itemAlign=\"stretch\"\n direction=\"column\"\n >\n {/* Horizontal Markets View on top for !=2xl screens */}\n {marketLayout === \"top\" && horizontalMarketsView}\n\n {/* Main Content Group */}\n <Flex\n className={cn(\n \"oui-flex-1 oui-overflow-hidden\",\n layout === \"left\" && \"oui-flex-row-reverse\",\n )}\n gap={2}\n >\n {!max4XL && marketLayout === \"left\" && marketsView}\n <SplitLayout\n className={cn(\"oui-flex oui-flex-1 oui-overflow-hidden\")}\n onSizeChange={onSizeChange}\n disable={!horizontalDraggable}\n >\n {layout === \"left\" && orderEntryView}\n {mainView}\n {layout === \"right\" && orderEntryView}\n </SplitLayout>\n </Flex>\n\n {marketLayout === \"bottom\" && stickyHorizontalMarketsView}\n </Flex>\n </SortableContext>\n <DragOverlay\n dropAnimation={dropAnimationConfig}\n\n // style={{\n // transform: \"scale(1.05)\",\n // }}\n // transition=\"transform 200ms ease\"\n // className=\"oui-animate-pop\"\n >\n {activeId ? (\n <SortablePanel\n id={activeId}\n showIndicator={showPositionIcon}\n dragOverlay\n className={`${\n orderInteractionWidgets[\n activeId as keyof typeof orderInteractionWidgets\n ].className\n } oui-shadow-lg oui-shadow-base-9`}\n >\n {\n orderInteractionWidgets[\n activeId as keyof typeof orderInteractionWidgets\n ].element\n }\n </SortablePanel>\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n};\n","import React, { type FC, PropsWithChildren, SVGProps } from \"react\";\nimport { useRef, useEffect } from \"react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Box, cn } from \"@kodiak-finance/orderly-ui\";\n\ntype SortablePanelProps = {\n id: string;\n className?: string;\n showIndicator: boolean;\n dragOverlay?: boolean;\n};\n\nexport const SortablePanel: FC<PropsWithChildren<SortablePanelProps>> = (\n props,\n) => {\n const { showIndicator, dragOverlay } = props;\n const nodeRef = useRef<HTMLDivElement>(null);\n const [dimensions, setDimensions] = React.useState<{\n width: number;\n height: number;\n } | null>(null);\n\n // useSortable hook with custom configuration to prevent dimension changes\n const sortableResult = useSortable({\n id: props.id,\n });\n\n const {\n setNodeRef,\n attributes,\n listeners,\n transform,\n transition,\n isDragging,\n setActivatorNodeRef,\n } = sortableResult;\n\n // Store original dimensions when dragging starts\n useEffect(() => {\n if (isDragging && nodeRef.current && !dimensions) {\n const rect = nodeRef.current.getBoundingClientRect();\n // Store dimensions for placeholder\n setDimensions({\n width: rect.width,\n height: rect.height,\n });\n } else if (!isDragging && dimensions) {\n // Reset dimensions when dragging ends\n setDimensions(null);\n }\n }, [isDragging, dimensions]);\n\n // Combine refs to use both sortable ref and our dimension ref\n const combinedRef = (node: HTMLDivElement | null) => {\n setNodeRef(node);\n // Use a callback ref to properly set the node reference\n (nodeRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n };\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n // Ensure the item maintains its box model during drag\n // boxSizing: \"border-box\" as const,\n };\n\n // When dragging, render a placeholder with fixed dimensions\n if (isDragging && dimensions && !dragOverlay) {\n return (\n <Box\n intensity={900}\n r=\"2xl\"\n p={3}\n className={cn(\"oui-relative\")}\n // ref={combinedRef}\n style={{\n ...style,\n width: dimensions.width,\n height: dimensions.height,\n minWidth: dimensions.width,\n minHeight: dimensions.height,\n maxWidth: dimensions.width,\n maxHeight: dimensions.height,\n // Placeholder styling with subtle visual feedback\n border: \"1px solid rgb(var(--oui-color-primary))\",\n backgroundImage: `repeating-linear-gradient(135deg, rgb(var(--oui-color-base-6)) 0px, rgb(var(--oui-color-base-6)) 4px, transparent 4px, transparent 8px)`,\n }}\n ></Box>\n );\n }\n\n return (\n <Box\n intensity={900}\n r=\"2xl\"\n p={3}\n width=\"100%\"\n className={cn(\n \"oui-relative\",\n props.className,\n // dragOverlay && \"oui-scale-105\",\n )}\n ref={combinedRef}\n style={style}\n >\n <div\n className={cn(\n \"inner-content oui-transition-transform\",\n dragOverlay && \"oui-scale-95\",\n )}\n >\n {props.children}\n </div>\n {showIndicator && (\n <button\n {...attributes}\n {...listeners}\n className=\"oui-absolute oui-right-0 oui-top-4 oui-cursor-move oui-py-1\"\n style={{ touchAction: \"none\" }}\n ref={setActivatorNodeRef}\n >\n <IndicatorIcon\n className={cn(\n \"oui-text-base-contrast-20 hover:oui-text-base-contrast-80\",\n )}\n />\n </button>\n )}\n </Box>\n );\n};\n\nconst IndicatorIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"10\"\n height=\"16\"\n viewBox=\"0 0 10 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"6\" height=\"2\" rx=\"1\" />\n <rect x=\"2\" y=\"7\" width=\"6\" height=\"2\" rx=\"1\" />\n <rect x=\"2\" y=\"12\" width=\"6\" height=\"2\" rx=\"1\" />\n </svg>\n);\n","import { RefObject, useEffect, useMemo, useRef, useState } from \"react\";\nimport Split from \"@uiw/react-split\";\nimport {\n useAccount,\n useCollateral,\n useLocalStorage,\n useMediaQuery,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport type { LayoutPosition } from \"../../components/desktop/layout/switchLayout\";\nimport { useSplitPersistent } from \"../../components/desktop/layout/useSplitPersistent\";\nimport { PortfolioSheetWidget } from \"../../components/mobile/portfolioSheet\";\nimport { useTradingLocalStorage } from \"../../hooks/\";\nimport { useTradingPageContext } from \"../../provider/tradingPageContext\";\nimport { TradingPageState } from \"../../types/types\";\nimport { useFirstTimeDeposit } from \"./hooks/useFirstTimeDeposit\";\n\nexport type TradingState = ReturnType<typeof useTradingScript>;\n\nexport const scrollBarWidth = 6;\nexport const topBarHeight = 48;\nexport const bottomBarHeight = 29;\nexport const space = 8;\nexport const symbolInfoBarHeight = 54;\n\nexport const orderEntryMinWidth = 280;\nexport const orderEntryMaxWidth = 360;\n\nexport const orderbookMinWidth = 280;\nexport const orderbookMaxWidth = 732;\n\nexport const orderbookMinHeight = 464;\nexport const orderbookMaxHeight = 728;\n\nexport const tradindviewMinHeight = 320;\n\nexport const tradingViewMinWidth = 540;\n\nexport const dataListMaxHeight = 800;\nexport const dataListInitialHeight = 350;\n\nconst ORDERLY_ORDER_ENTRY_SIDE_MARKETS_LAYOUT =\n \"orderly_order_entry_side_markets_layout\";\n\nconst ORDERLY_SIDE_MARKETS_MODE_KEY = \"orderly_side_markets_mode\";\n\nconst ORDERLY_HORIZONTAL_MARKETS_LAYOUT = \"orderly_horizontal_markets_layout\";\n\nexport type MarketLayoutPosition = \"left\" | \"top\" | \"bottom\" | \"hide\";\n\nexport const useTradingScript = () => {\n const [openMarketsSheet, setOpenMarketsSheet] = useState(false);\n const props = useTradingPageContext();\n const { state } = useAccount();\n const { t } = useTranslation();\n const { wrongNetwork, disabledConnect, restrictedInfo, onRouteChange } =\n useAppContext();\n const { hideAssets, setHideAssets } = useTradingLocalStorage();\n\n const isFirstTimeDeposit = useFirstTimeDeposit();\n\n const { totalValue } = useCollateral();\n\n const total = useDataTap(totalValue);\n\n /** max-width: 1279px */\n const max2XL = useMediaQuery(\"(max-width: 1279px)\");\n\n /** min-width: 1440px */\n const min3XL = useMediaQuery(\"(min-width: 1440px)\");\n\n /** max-width: 1680px */\n const max4XL = useMediaQuery(\"(max-width: 1680px)\");\n\n // Order entry and side market list position, default Order entry in right\n const [layout, setLayout] = useLocalStorage<LayoutPosition>(\n ORDERLY_ORDER_ENTRY_SIDE_MARKETS_LAYOUT,\n \"right\",\n );\n\n // Horizontal markets layout position, default left\n const [marketLayout, setMarketLayout] = useLocalStorage<MarketLayoutPosition>(\n ORDERLY_HORIZONTAL_MARKETS_LAYOUT,\n \"left\",\n );\n\n const canTrade = useMemo<boolean>(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status >= AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n const onShowPortfolioSheet = () => {\n if (canTrade) {\n modal.sheet({\n title: t(\"trading.asset&Margin\"),\n leading: props.bottomSheetLeading,\n content: <PortfolioSheetWidget />,\n });\n }\n };\n\n const horizontalDraggable = useMemo(() => min3XL, [min3XL]);\n\n const positionsState = useOrderEntryPositions({\n canTrade,\n isFirstTimeDeposit,\n });\n\n const marketsCollapseState = useMarketsCollapse({ resizeable: min3XL });\n\n const observerState = useObserverOrderEntry({ max2XL });\n\n const marketsWidth = useMemo(() => {\n switch (marketsCollapseState.panelSize) {\n case \"small\":\n return 0;\n case \"middle\":\n return 70;\n case \"large\":\n return 280;\n default:\n return 0;\n }\n }, [marketsCollapseState.panelSize]);\n\n const tradindviewMaxHeight = max2XL ? 1200 : 600;\n\n const dataListMinHeight = canTrade ? 379 : 277;\n\n const splitSizeState = useSplitSize({ dep: layout });\n\n const tradingViewHeightState = useExtraHeight({\n orderEntryViewRef: observerState.orderEntryViewRef,\n tradindviewMaxHeight,\n dataListMinHeight,\n });\n\n const navigateToPortfolio =\n typeof onRouteChange === \"function\"\n ? () => onRouteChange({ href: \"/portfolio\", name: t(\"common.portfolio\") })\n : undefined;\n\n const map = {\n layout,\n onLayout: setLayout,\n marketLayout,\n onMarketLayout: setMarketLayout,\n max2XL,\n min3XL,\n max4XL,\n canTrade,\n openMarketsSheet,\n onOpenMarketsSheetChange: setOpenMarketsSheet,\n horizontalDraggable,\n ...marketsCollapseState,\n ...positionsState,\n ...splitSizeState,\n ...observerState,\n restrictedInfo,\n ...tradingViewHeightState,\n marketsWidth,\n tradindviewMaxHeight,\n dataListMinHeight,\n total,\n hideAssets,\n setHideAssets,\n onShowPortfolioSheet,\n navigateToPortfolio,\n isFirstTimeDeposit,\n };\n\n return { ...props, ...map } as TradingPageState & typeof map;\n};\n\nconst useMarketsCollapse = (options: { resizeable: boolean }) => {\n const { resizeable } = options;\n const [animating, setAnimating] = useState(false);\n\n const [panelSize, setPanelSize] = useLocalStorage<\n \"small\" | \"middle\" | \"large\"\n >(ORDERLY_SIDE_MARKETS_MODE_KEY, \"large\");\n\n const onPanelSizeChange = (collapsed: \"small\" | \"middle\" | \"large\") => {\n setPanelSize(collapsed);\n setAnimating(true);\n };\n\n const memoizedPanelSize = useMemo<\"small\" | \"middle\" | \"large\">(() => {\n // Force only two states\n const normalized = panelSize === \"large\" ? \"large\" : \"middle\";\n // under 1440px markets force collapsed\n return resizeable ? normalized : \"middle\";\n }, [resizeable, panelSize]);\n\n return {\n resizeable: resizeable,\n panelSize: memoizedPanelSize,\n onPanelSizeChange: onPanelSizeChange,\n animating: animating,\n setAnimating: setAnimating,\n } as const;\n};\n\nconst useOrderEntryPositions = (options: {\n canTrade: boolean;\n isFirstTimeDeposit: boolean;\n}) => {\n const { canTrade, isFirstTimeDeposit } = options;\n\n const [positions, setPositions] = useLocalStorage(\n \"orderly_assets_orderEntry_margin_positions\",\n [0, 1, 2],\n );\n\n const updatePositions = (currentIdx: number, targetIdx: number) => {\n const pos = [...positions];\n // [0,1,2] => [1,2,0]\n if (currentIdx === 0 && targetIdx === pos.length - 1) {\n pos[targetIdx] = positions[currentIdx];\n for (let i = 0; i < pos.length - 1; i++) {\n pos[i] = positions[i + 1];\n }\n\n // [0,1,2] => [2,0,1]\n } else if (currentIdx === pos.length - 1 && targetIdx === 0) {\n pos[targetIdx] = positions[currentIdx];\n for (let i = 1; i < pos.length; i++) {\n pos[i] = positions[i - 1];\n }\n } else {\n // [0,1,2] => [1,0,2], [0,1,2] => [0,2,1]\n [pos[currentIdx], pos[targetIdx]] = [pos[targetIdx], pos[currentIdx]];\n }\n setPositions(pos);\n };\n\n const showPositionIcon = useMemo(\n () => canTrade && !isFirstTimeDeposit,\n [canTrade, isFirstTimeDeposit],\n );\n\n const pos = useMemo(() => {\n return showPositionIcon ? (positions as number[]) : [0, 1, 2];\n }, [showPositionIcon, positions]);\n\n return {\n positions: pos,\n showPositionIcon,\n updatePositions,\n };\n};\n\nconst useSplitSize = (options: { dep: any }) => {\n const { dep } = options;\n const [mainSplitSize, setMainSplitSize] = useSplitPersistent(\n \"orderly_main_split_size\",\n `${orderEntryMinWidth}px`,\n dep,\n );\n const [dataListSplitSize, setDataListSplitSize] = useSplitPersistent(\n \"orderly_datalist_split_size\",\n `${dataListInitialHeight}px`,\n // undefined,\n );\n const [orderBookSplitSize, setOrderbookSplitSize] = useSplitPersistent(\n \"orderly_orderbook_split_size\",\n \"280px\",\n dep,\n );\n\n const [dataListSplitHeightSM, setDataListSplitHeightSM] = useSplitPersistent(\n \"orderly_datalist_split_height_sm\",\n \"350px\",\n );\n\n const [orderBookSplitHeightSM, setOrderbookSplitHeightSM] =\n useSplitPersistent(\"orderly_orderbook_split_height_sm\", \"280px\");\n\n return {\n orderBookSplitSize,\n setOrderbookSplitSize,\n dataListSplitSize,\n setDataListSplitSize,\n mainSplitSize,\n setMainSplitSize,\n dataListSplitHeightSM,\n setDataListSplitHeightSM,\n orderBookSplitHeightSM,\n setOrderbookSplitHeightSM,\n };\n};\n\nconst useObserverOrderEntry = (options: { max2XL: boolean }) => {\n const { max2XL } = options;\n const [orderEntryHeight, setOrderEntryHeight] = useState(0);\n const orderEntryViewRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = orderEntryViewRef.current;\n\n if (!element || !max2XL) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const height = entry.contentRect.height;\n if (height) {\n setOrderEntryHeight(height);\n }\n }\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.unobserve(element);\n };\n }, [orderEntryViewRef, max2XL]);\n\n return {\n orderEntryViewRef,\n orderEntryHeight,\n };\n};\n\nexport function getOffsetSizeNum(size: string | null) {\n if (size) {\n return `${100 - Math.min(Number(size), 100)}`;\n }\n return \"\";\n}\n\nfunction useExtraHeight(options: {\n orderEntryViewRef: RefObject<HTMLDivElement>;\n tradindviewMaxHeight: number;\n dataListMinHeight: number;\n}) {\n const { tradindviewMaxHeight, dataListMinHeight } = options;\n const tradingviewAndOrderbookSplitRef = useRef<Split>(null);\n const max2XLSplitRef = useRef<Split>(null);\n\n const [extraHeight, setExtraHeight] = useLocalStorage(\n \"orderly_order_entry_extra_height\",\n 0,\n );\n\n const space = 10 + 12;\n\n const [dataListHeight, setDataListHeight] = useLocalStorage(\n \"orderly_trading_data_list_height\",\n dataListMinHeight,\n );\n\n const onTradingviewAndOrderbookDragging = (\n preSize: number,\n nextSize: number,\n ) => {\n const boxHeight = tradingviewAndOrderbookSplitRef?.current?.boxHeight;\n if (!boxHeight) {\n return;\n }\n\n const splitTradingviewHeight = (boxHeight * preSize) / 100;\n const splitOrderbookHeight = (boxHeight * nextSize) / 100;\n\n const tradingviewHeight = Math.min(\n Math.max(splitTradingviewHeight, tradindviewMinHeight),\n tradindviewMaxHeight,\n );\n\n const orderbookHeight = Math.min(\n Math.max(splitOrderbookHeight, orderbookMinHeight),\n orderbookMaxHeight,\n );\n\n const orderEntryHeight =\n options.orderEntryViewRef.current?.clientHeight || 0;\n\n // console.log(\"tradingviewHeight\", splitTradingviewHeight, tradingviewHeight);\n // console.log(\"orderbookHeight\", splitOrderbookHeight, orderbookHeight);\n\n if (splitOrderbookHeight >= orderbookHeight) {\n const offset = splitOrderbookHeight - orderbookHeight;\n // console.log(\"offset ---\", offset);\n setExtraHeight(Math.max(0, extraHeight - offset));\n } else if (\n tradingviewHeight + orderbookHeight <\n tradindviewMaxHeight + orderbookMaxHeight\n ) {\n const height =\n tradingviewHeight + orderbookHeight + space + symbolInfoBarHeight;\n\n const offset = Math.max(0, height - orderEntryHeight);\n // console.log(\"offset ++++\", height, offset);\n setExtraHeight(extraHeight + offset);\n }\n };\n\n const onDataListSplitHeightDragging = (preSize: number, nextSize: number) => {\n const boxHeight = max2XLSplitRef?.current?.boxHeight;\n if (!boxHeight) {\n return;\n }\n\n // const splitTradingAndOrderbookHeight = (boxHeight * preSize) / 100;\n const splitDataListHeight = (boxHeight * nextSize) / 100;\n\n if (\n splitDataListHeight >= dataListMinHeight &&\n splitDataListHeight <= dataListMaxHeight\n ) {\n setDataListHeight(splitDataListHeight);\n const offset = splitDataListHeight - dataListHeight;\n if (offset > 0) {\n setExtraHeight(Math.max(0, extraHeight - offset));\n }\n }\n };\n\n return {\n max2XLSplitRef,\n tradingviewAndOrderbookSplitRef,\n onTradingviewAndOrderbookDragging,\n onDataListSplitHeightDragging,\n extraHeight,\n dataListHeight,\n };\n}\n","import { useMemo } from \"react\";\n\nexport const useSplitPersistent = (\n key: string,\n defaulValue?: string,\n dep?: any\n): [string | undefined, (size: string) => void] => {\n const size = useMemo(() => {\n const size = localStorage.getItem(key);\n\n if (size) {\n return `${size}%`;\n }\n return defaulValue;\n }, [key, defaulValue, dep]);\n\n const setSize = (size: string) => {\n localStorage.setItem(key, size);\n };\n\n return [size, setSize];\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useCollateral,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n AccountStatusEnum,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n} from \"@kodiak-finance/orderly-types\";\n\nexport const useFirstTimeDeposit = () => {\n const { state } = useAccount();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { totalValue } = useCollateral({\n dp: 2,\n });\n\n const unavailable =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n const { startTime, endTime } = useMemo(() => {\n const d = new Date();\n // must set last second of today, when wallet ws changed, it will get latest data from api\n const today = new Date(\n d.getFullYear(),\n d.getMonth(),\n d.getDate(),\n 23,\n 59,\n 59,\n );\n\n const endTime = today.getTime();\n // 90 days ago timestamp\n const startTime = endTime - 90 * 24 * 60 * 60 * 1000;\n\n return {\n startTime,\n endTime,\n };\n }, []);\n\n const [_, { meta }] = useAssetsHistory(\n {\n startTime,\n endTime,\n page: 1,\n pageSize: 5,\n side: AssetHistorySideEnum.DEPOSIT,\n status: AssetHistoryStatusEnum.COMPLETED,\n },\n {\n shouldUpdateOnWalletChanged: (data) =>\n data.side === AssetHistorySideEnum.DEPOSIT &&\n data.transStatus === AssetHistoryStatusEnum.COMPLETED,\n },\n );\n\n return !unavailable && totalValue === 0 && meta?.total === 0;\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n MarketsSheetWidget,\n SymbolInfoBarWidget,\n} from \"@kodiak-finance/orderly-markets\";\nimport {\n Box,\n SimpleSheet,\n EyeCloseIcon,\n EyeIcon,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { TradingState } from \"./trading.script\";\n\nconst LazyTopTabWidget = React.lazy(() =>\n import(\"../../components/mobile/topTab\").then((mod) => {\n return { default: mod.TopTabWidget };\n }),\n);\n\nconst LazyOrderBookAndEntryWidget = React.lazy(() =>\n import(\"../../components/mobile/orderBookAndEntry\").then((mod) => {\n return { default: mod.OrderBookAndEntryWidget };\n }),\n);\n\nconst LazyDataListWidget = React.lazy(() =>\n import(\"../../components/mobile/dataList\").then((mod) => {\n return { default: mod.DataListWidget };\n }),\n);\n\nconst MaybeEqual: React.FC = () => {\n return (\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 8 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.456 3.48a3.5 3.5 0 0 0 .431-.567 9 9 0 0 0 .361-.654l-.648-.66-.107.185q-.071.12-.142.244a3 3 0 0 1-.27.396 1.4 1.4 0 0 1-.318.29.67.67 0 0 1-.38.114q-.307 0-.666-.194t-.742-.42q-.383-.227-.777-.42a1.7 1.7 0 0 0-.771-.194q-.401.001-.72.154a2.1 2.1 0 0 0-.57.404 2.6 2.6 0 0 0-.43.574 5 5 0 0 0-.307.646l.649.66q.165-.437.464-.833.298-.395.742-.396.347 0 .7.194.354.193.721.42.37.227.763.42.396.195.826.195.374.001.665-.155.29-.151.526-.404m.352 2.941a3.5 3.5 0 0 0 .431-.566q.196-.315.361-.654l-.648-.66-.107.184-.142.244a3 3 0 0 1-.27.396 1.4 1.4 0 0 1-.318.29.67.67 0 0 1-.38.115q-.307 0-.666-.195-.36-.193-.742-.42-.383-.226-.778-.42a1.7 1.7 0 0 0-.77-.194q-.401.001-.72.154a2.1 2.1 0 0 0-.57.405 2.6 2.6 0 0 0-.43.574 5 5 0 0 0-.307.646l.649.66q.165-.437.464-.833.297-.395.742-.396.347 0 .7.194.354.193.721.42.369.226.763.42.396.194.826.194.374.001.665-.154.29-.152.526-.404\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n\nexport const MobileLayout: React.FC<TradingState> = (props) => {\n const { t } = useTranslation();\n const topBar = (\n <Box intensity={900} className=\"oui-rounded-xl\" mx={1} px={3} height={54}>\n <SymbolInfoBarWidget\n symbol={props.symbol}\n onSymbol={() => props.onOpenMarketsSheetChange(true)}\n trailing={\n <Flex\n direction={\"column\"}\n itemAlign={\"end\"}\n className=\"oui-cursor-pointer oui-text-[11px]\"\n onClick={props.onShowPortfolioSheet}\n >\n <Flex>\n <Text intensity={54}>{t(\"common.totalValue\")}</Text>\n <button\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.setHideAssets(!props.hideAssets);\n }}\n className=\"oui-px-1\"\n >\n {props.hideAssets ? (\n <EyeIcon\n color=\"primary\"\n opacity={1}\n size={16}\n className=\"oui-text-primary-light\"\n />\n ) : (\n <EyeCloseIcon\n color=\"primary\"\n opacity={1}\n size={16}\n className=\"oui-text-primary-light\"\n />\n )}\n </button>\n <MaybeEqual />\n </Flex>\n <Text.numeral\n suffix={<Text intensity={20}>&nbsp;USDC</Text>}\n dp={2}\n visible={!props.hideAssets}\n >\n {props.canTrade ? (props.total ?? \"--\") : \"--\"}\n </Text.numeral>\n </Flex>\n }\n />\n <SimpleSheet\n open={props.openMarketsSheet}\n onOpenChange={props.onOpenMarketsSheetChange}\n classNames={{\n body: \"oui-h-full oui-pb-0\",\n content: \"oui-w-[280px] !oui-p-0\",\n }}\n contentProps={{ side: \"left\", closeable: false }}\n >\n <MarketsSheetWidget\n symbol={props.symbol}\n onSymbolChange={(symbol) => {\n props.onOpenMarketsSheetChange(false);\n props.onSymbolChange?.(symbol);\n }}\n />\n </SimpleSheet>\n </Box>\n );\n\n return (\n <div className=\"oui-relative oui-grid oui-gap-1 oui-bg-base-10\">\n <main className=\"oui-hide-scrollbar oui-space-y-1 oui-overflow-y-auto\">\n {topBar}\n <React.Suspense fallback={null}>\n <LazyTopTabWidget className=\"oui-mx-1 oui-rounded-xl oui-bg-base-9\" />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyOrderBookAndEntryWidget />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyDataListWidget\n symbol={props.symbol}\n className=\"oui-mx-1 oui-rounded-xl\"\n sharePnLConfig={props.sharePnLConfig}\n />\n </React.Suspense>\n </main>\n </div>\n );\n};\n","import React from \"react\";\nimport { useTradingScript } from \"./trading.script\";\nimport { Trading } from \"./trading.ui\";\n\nexport const TradingWidget: React.FC = () => {\n const state = useTradingScript();\n return <Trading {...state} />;\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { TradingPageState, TradingPageProps } from \"../types/types\";\nimport { getBasicSymbolInfo } from \"../utils/utils\";\nimport { TradingPageContext } from \"./tradingPageContext\";\n\nexport const TradingPageProvider: FC<PropsWithChildren<TradingPageProps>> = (\n props,\n) => {\n const { symbol, children } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n const memoizedValue = useMemo<TradingPageState>(() => {\n const basicSymbol = getBasicSymbolInfo(symbolInfo);\n return {\n ...props,\n symbolInfo: {\n ...basicSymbol,\n symbol: symbol,\n },\n };\n }, [props, symbol, symbolInfo]);\n return (\n <TradingPageContext.Provider value={memoizedValue}>\n {children}\n </TradingPageContext.Provider>\n );\n};\n","import React from \"react\";\nimport { TradingPageProvider } from \"../../provider/tradingPageProvider\";\nimport { TradingPageProps } from \"../../types/types\";\nimport { TradingWidget } from \"./trading.widget\";\n\nexport const TradingPage: React.FC<TradingPageProps> = (props) => {\n return (\n <TradingPageProvider\n symbol={props.symbol}\n tradingViewConfig={props.tradingViewConfig}\n onSymbolChange={props.onSymbolChange}\n disableFeatures={props.disableFeatures}\n overrideFeatures={props.overrideFeatures}\n referral={props.referral}\n tradingRewards={props.tradingRewards}\n bottomSheetLeading={props.bottomSheetLeading}\n sharePnLConfig={props.sharePnLConfig}\n >\n <TradingWidget />\n </TradingPageProvider>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/csvExportService.ts","../src/hooks/useTradingLocalStorage.ts","../src/hooks/usePositionsCount.ts","../src/hooks/usePendingOrderCount.ts","../src/hooks/index.ts","../src/provider/tradingPageContext.tsx","../src/components/desktop/dataList/dataList.script.tsx","../src/components/desktop/dataList/setting/setting.ui.tsx","../src/components/desktop/dataList/setting/setting.script.tsx","../src/components/desktop/dataList/setting/setting.widget.tsx","../src/components/desktop/dataList/setting/index.ts","../src/components/base/positionHeader/positionHeader.ui.tsx","../src/components/base/positionHeader/positionHeader.script.tsx","../src/components/base/positionHeader/positionHeader.widget.tsx","../src/components/base/positionHeader/index.ts","../src/components/desktop/dataList/dataList.ui.tsx","../src/components/desktop/dataList/dataList.widget.tsx","../src/components/desktop/dataList/index.ts","../src/components/base/lastTrades/lastTrades.ui.tsx","../src/components/base/lastTrades/lastTrades.script.tsx","../src/components/base/lastTrades/lastTrades.widget.tsx","../src/components/base/lastTrades/index.ts","../src/components/desktop/assetView/faucet/faucet.ui.tsx","../src/components/desktop/assetView/faucet/faucet.script.tsx","../src/components/desktop/assetView/faucet/faucet.widget.tsx","../src/components/desktop/assetView/assetView.ui.tsx","../src/components/desktop/assetView/assetView.script.tsx","../src/components/desktop/assetView/assetView.widget.tsx","../src/components/desktop/assetView/index.ts","../src/components/base/orderBook/orderContext.tsx","../src/components/base/orderBook/types.ts","../src/components/base/orderBook/cellBar.tsx","../src/components/desktop/orderBook/cell.desktop.tsx","../src/components/desktop/orderBook/listBox.desktop.tsx","../src/components/desktop/orderBook/asks.desktop.tsx","../src/components/desktop/orderBook/bids.desktop.tsx","../src/components/desktop/orderBook/depthSelect.desktop.tsx","../src/components/desktop/orderBook/header.desktop.tsx","../src/components/base/orderBook/midPriceView.tsx","../src/components/base/orderBook/markPrice.tsx","../src/components/desktop/orderBook/markPrice.desktop.tsx","../src/components/desktop/orderBook/index.desktop.tsx","../src/components/mobile/fundingRate/fundingRate.ui.tsx","../src/components/mobile/fundingRateModal/fundingRateModal.script.tsx","../src/components/mobile/fundingRateModal/fundingRateModal.ui.tsx","../src/components/mobile/fundingRateModal/fundingRateModal.widget.tsx","../src/components/mobile/fundingRate/fundingRate.script.tsx","../src/components/mobile/fundingRate/fundingRate.widget.tsx","../src/components/mobile/fundingRate/index.ts","../src/components/mobile/orderBook/cell.tsx","../src/components/mobile/orderBook/listBox.tsx","../src/components/mobile/orderBook/asks.tsx","../src/components/mobile/orderBook/bids.tsx","../src/components/mobile/orderBook/depthSelect.tsx","../src/components/mobile/orderBook/header.tsx","../src/components/mobile/orderBook/markPrice.tsx","../src/components/mobile/orderBook/index.tsx","../src/components/base/orderBook/orderBook.ui.tsx","../src/utils/utils.ts","../src/components/base/orderBook/orderBook.script.tsx","../src/components/base/orderBook/orderBook.widget.tsx","../src/components/base/orderBook/index.ts","../src/components/desktop/riskRate/riskRate.ui.tsx","../src/components/desktop/riskRate/riskRate.script.tsx","../src/components/desktop/riskRate/riskRate.widget.tsx","../src/components/desktop/riskRate/index.ts","../src/components/desktop/orderBookAndTrades/orderBookAndTrades.ui.tsx","../src/components/desktop/orderBookAndTrades/orderBookAndTrades.script.tsx","../src/components/desktop/orderBookAndTrades/orderBookAndTrades.widget.tsx","../src/components/desktop/orderBookAndTrades/index.ts","../src/components/desktop/layout/switchLayout.tsx","../src/components/mobile/topTab/topTab.script.tsx","../src/components/mobile/tradingview/tradingview.script.tsx","../src/components/base/icons.tsx","../src/components/mobile/tradingview/tradingview.ui.tsx","../src/components/mobile/tradingview/tradingview.widget.tsx","../src/components/mobile/lastTrades/lastTrades.widget.tsx","../src/components/mobile/tradeData/tradeData.ui.tsx","../src/components/mobile/tradeData/tradeData.script.tsx","../src/components/mobile/tradeData/tradeData.widget.tsx","../src/components/mobile/tradeData/index.ts","../src/components/mobile/topTab/topTab.ui.tsx","../src/components/mobile/topTab/topTab.widget.tsx","../src/components/mobile/topTab/index.ts","../src/components/mobile/orderBookAndEntry/orderBookAndEntry.ui.tsx","../src/components/mobile/orderBookAndEntry/orderBookAndEntry.script.tsx","../src/components/mobile/orderBookAndEntry/orderBookAndEntry.widget.tsx","../src/components/mobile/orderBookAndEntry/index.ts","../src/components/mobile/dataList/dataList.script.tsx","../src/components/mobile/dataList/dataList.ui.tsx","../src/components/mobile/dataList/dataList.widget.tsx","../src/components/mobile/dataList/index.ts","../src/index.ts","../src/components/desktop/layout/splitLayout/splitLayout.tsx","../src/components/desktop/layout/splitLayout/splitLineBar.tsx","../src/components/mobile/bottomNavBar/bottomNavBar.ui.tsx","../src/components/mobile/bottomNavBar/account/account.widget.tsx","../src/components/mobile/bottomNavBar/account/account.script.tsx","../src/components/mobile/accountSheet/accountSheet.ui.tsx","../src/components/mobile/accountSheet/icons.tsx","../src/components/mobile/accountSheet/accountSheet.script.tsx","../src/components/mobile/accountSheet/accountSheet.widget.tsx","../src/components/mobile/bottomNavBar/account/account.ui.tsx","../src/components/mobile/bottomNavBar/balance/balance.ui.tsx","../src/components/mobile/bottomNavBar/balance/balance.script.tsx","../src/components/mobile/bottomNavBar/balance/balance.widget.tsx","../src/components/mobile/bottomNavBar/chain/chain.ui.tsx","../src/components/mobile/bottomNavBar/chain/chain.script.tsx","../src/components/mobile/bottomNavBar/chain/chain.widget.tsx","../src/components/mobile/bottomNavBar/bottomNavBar.script.tsx","../src/components/mobile/bottomNavBar/bottomNavBar.widget.tsx","../src/components/mobile/portfolioSheet/portfolioSheet.ui.tsx","../src/components/mobile/portfolioSheet/portfolioSheet.script.tsx","../src/components/mobile/portfolioSheet/riskIndicator.tsx","../src/components/mobile/portfolioSheet/portfolioSheet.widget.tsx","../src/components/mobile/fundingRateModal/index.ts","../src/pages/trading/trading.ui.tsx","../src/pages/trading/trading.ui.desktop.tsx","../src/components/desktop/layout/sortablePanel.tsx","../src/pages/trading/trading.script.tsx","../src/components/desktop/layout/useSplitPersistent.ts","../src/pages/trading/hooks/useFirstTimeDeposit.ts","../src/pages/trading/trading.ui.mobile.tsx","../src/pages/trading/trading.widget.tsx","../src/provider/tradingPageProvider.tsx","../src/pages/trading/trading.page.tsx"],"names":["generateCSV","downloadCSV","formatTimestamp","formatNumber","formatPercent","getPositionExportColumns","getOrderExportColumns","getPositionHistoryExportColumns","getLiquidationExportColumns","exportToCSVFile","init_csvExportService","__esmMin","options","columns","data","headers","col","rows","row","value","csv","filename","blob","link","url","timestamp","numTimestamp","date","decimals","num","v","tabType","baseColumns","useLocalStorage","useTradingLocalStorage","init_useTradingLocalStorage","props","unPnlPriceBasis","setUnPnlPriceBasic","pnlNotionalDecimalPrecision","setPnlNotionalDecimalPrecision","showAllSymbol","setShowAllSymbol","hideAssets","setHideAssets","useMemo","usePositionStream","useDataTap","usePositionsCount","init_usePositionsCount","symbol","count","useOrderStream","AlgoOrderRootType","OrderStatus","TabType","usePendingOrderCount","init_usePendingOrderCount","pendingOrdersPageSizeKey","tpslOrdersPageSizeKey","pendingOrders","pendingCount","tpslOrders","tpslCount","pendingOrderCount","tpSlOrderCount","init_hooks","createContext","useContext","TradingPageContext","useTradingPageContext","init_tradingPageContext","useDataListScript","init_dataList_script","inputs","current","sharePnLConfig","includedPendingOrder","localStorage","onSymbolChange","positionCount","useState","Button","Checkbox","Divider","DropdownMenuContent","DropdownMenuRoot","DropdownMenuTrigger","Flex","SettingFillIcon","Text","useTranslation","jsx","jsxs","Setting","UnPnlPriceBasisCheckBox","DecimalPrecisionCheckbox","RadioButton","SelIcon","UnselIcon","init_setting_ui","open","setOpen","t","checked","e","onValueChange","sel","label","onCheckChange","useSettingScript","init_setting_script","SettingWidget","init_setting_widget","state","setting_exports","__export","init_setting","Statistic","useScreen","Decimal","PositionHeader","MobileLayout","DesktopLayout","UnrealPnL","Notional","init_positionHeader_ui","isMobile","unrealPnLClsName","unrealPnLROIClsName","usePositionHeaderScript","init_positionHeader_script","calcMode","aggregated","unrealPnL","unrealPnlROI","notional","PositionHeaderWidget","init_positionHeader_widget","onExport","scriptProps","positionHeader_exports","init_positionHeader","React","useRef","Box","InfoCircleIcon","TabPanel","Tabs","Tooltip","DesktopOrderListWidget","LiquidationWidget","PositionHistoryWidget","PositionsWidget","createElement","LazySettingWidget","LazyPositionHeaderWidget","PositionsView","LiquidationTab","DataList","init_dataList_ui","mod","currentTab","setCurrentTab","positionsRef","pendingRef","tpSlRef","positionHistoryRef","filledOrdersRef","orderHistoryRef","liquidationRef","isCurrentTabEmpty","handleExport","tabPanelItems","item","content","rest","DataListWidget","init_dataList_widget","dataList_exports","init_dataList","cn","Grid","ListView","OrderSide","commifyOptional","LastTrades","Row","Header","List","init_lastTrades_ui","left","mid","right","classNames","index","useMarketTradeStream","useSymbolsInfo","useLastTradesScript","init_lastTrades_script","isLoading","config","base","quote","baseDp","quoteDp","LastTradesWidget","init_lastTrades_widget","lastTrades_exports","init_lastTrades","FaucetUi","init_faucet_ui","useAccount","useConfig","useMutation","useWalletConnector","AccountStatusEnum","ChainNamespace","isTestnet","modal","toast","useFaucetScript","connectedChain","namespace","account","operatorUrl","getTestUSDC","isMutating","loading","setLoading","showFaucet","message","res","resolve","error","init_faucet_script","FaucetWidget","init_faucet_widget","useCallback","useAppContext","ArrowDownShortIcon","EyeIcon","EyeCloseIcon","ChevronDownIcon","gradientTextVariants","AuthGuard","LTVRiskTooltipWidget","Fragment","calculateTextColor","useCurrentStatusText","TooltipContent","TotalValue","AssetDetail","LTVDetail","AssetValueList","AssetView","init_assetView_ui","val","wrongNetwork","disabledConnect","statusText","description","formula","totalValue","visible","onToggleVisibility","unit","rule","placeholder","freeCollateral","marginRatioVal","renderMMR","isConnected","currentLtv","optionsOpen","setOptionsOpen","toggleOpen","prevOpen","showLTV","networkId","isFirstTimeDeposit","onDeposit","onWithdraw","onTransfer","toggleVisible","isMainAccount","hasSubAccount","title","titleColor","titleClsName","transferButton","depositButton","withdrawButton","useAccountInstance","useEventEmitter","useCollateral","useMarginRatio","useComputedLTV","DepositAndWithdrawWithDialogId","TransferDialogId","useAssetViewScript","init_assetView_script","ee","marginRatio","mmr","positionsInfo","openDepositAndWithdraw","viewName","onSettle","setVisible","_freeCollateral","_marginRatioVal","_mmr","_totalValue","AssetViewWidget","init_assetView_widget","assetView_exports","init_assetView","OrderBookContext","useOrderBookContext","ORDERBOOK_COIN_TYPE_KEY","ORDERBOOK_MOBILE_COIN_TYPE_KEY","OrderBookProvider","init_orderContext","mode","setMode","totalMode","setTotalMode","memoizedValue","init_types","CellBar","init_cellBar","direction","transform","x","parseNumber","getPrecisionByNumber","DesktopOrderBookCell","init_cell_desktop","cellHeight","showTotal","onItemClick","depth","symbolInfo","currentHover","accumulated","accumulatedAmount","price","quantity","base_dp","quote_dp","coinType","width","dp","totalAmount","isPendingOrder","priceStr","TooltipTrigger","TooltipRoot","TooltipArrow","calcHintInfo","DesktopListBox","Tip","init_listBox_desktop","qty","amount","sumQty","sumQtyAmount","type","countQty","findMaxItem","len","priceDp","maxQty","a","b","hoverIndex","setHoverIndex","isHover","hintInfo","info","contentDp","DesktopAsks","init_asks_desktop","max","DesktopBids","init_bids_desktop","Select","DesktopDepthSelect","init_depthSelect_desktop","d","CaretDownIcon","CaretUpIcon","Popover","Option","DesktopHeader","Title","init_header_desktop","onClick","setCoinType","popoverOpen","TriggerIcon","children","className","justifyEnd","ArrowUpShortIcon","MiddlePriceView","init_midPriceView","markPrice","lastPrice","iconSize","prevLastPrice","middlePrice","down","up","SimpleDialog","MarkPriceView","FlagIcon","init_markPrice","DesktopMarkPrice","Spread","init_markPrice_desktop","asks","bids","spread","bid1","ask1","dValue","useEffect","EMPTY_LIST","Spinner","DesktopOrderBook","init_index_desktop","onDepthChange","divRef","setShowTotal","resizeObserver","entries","entry","targetDiv","FundingRate","init_fundingRate_ui","predFundingRate","countDown","useFundingDetails","useFundingRateModalScript","init_fundingRateModal_script","fundingPeriod","capFunding","floorFunding","FundingRateModal","init_fundingRateModal_ui","i18n","registerSimpleDialog","registerSimpleSheet","FundingRateModalWidget","FundingRateDialogId","FundingRateSheetId","init_fundingRateModal_widget","useFundingRate","useFundingRateScript","init_fundingRate_script","FundingRateWidget","init_fundingRate_widget","init_fundingRate","OrderBookCell","init_cell","coinUnit","setCoinUnit","renderCell","ListBox","init_listBox","Asks","init_asks","Bids","init_bids","Picker","DepthSelect","init_depthSelect","init_header","_","MarkPrice","OrderBook","init_orderBook","init_orderBook_ui","getBasicSymbolInfo","init_utils","useOrderbookStream","removeTrailingZeros","DEFAULT_CELL_HEIGHT","SPACE","useOrderBookScript","usePendingOrderStream","init_orderBook_script","height","setCellHeight","level","setLevel","allDepths","cellsHeight","restSpace","selDepth","depths","OrderBookWidget","init_orderBook_widget","orderBook_exports","RiskRate","init_riskRate_ui","riskRate","riskRateColor","currentLeverage","maxLeverage","isHigh","isMedium","isLow","textColor","useLeverage","getRiskRateColor","useRiskRateScript","init_riskRate_script","curLeverage","riskRateNumber","_curLeverage","_maxLeverage","RiskRateWidget","init_riskRate_widget","riskRate_exports","init_riskRate","LazyLastTradesWidget","LazyOrderBookWidget","TwoColLayout","TabLayout","OrderBookAndTrades","init_orderBookAndTrades_ui","tab","containerRef","containerSize","useOrderBookAndTradesScript","init_orderBookAndTrades_script","setContainerSize","setTab","OrderBookAndTradesWidget","init_orderBookAndTrades_widget","orderBookAndTrades_exports","init_orderBookAndTrades","switchLayout_exports","LayoutIcon","MarketBottomIcon","MarketHideIcon","MarketLeftIcon","MarketTopIcon","OrderEntryIcon","SwitchLayout","SwitchLayoutDropDown","CloseIcon","DropdownMenuPortal","init_switchLayout","hoveredMarket","setHoveredMarket","renderItem","position","renderMarketItem","getIcon","isHovered","isSelected","getLabel","useTopTabScript","init_topTab_script","useTradingviewScript","setHeight","Key","MaxHeight","dragging","setDragging","dragRef","boxRef","offsetY","setOffsetY","topRef","handleTouchStart","event","rect","handleTouchMove","newHeight","MinHeight","handleTouchEnd","drag","init_tradingview_script","KlineDragIcon","init_icons","TradingviewWidget","TradingviewUI","init_tradingview_ui","tradingview_widget_exports","init_tradingview_widget","lastTrades_widget_exports","MWebLastTrades","TradeData","init_tradeData_ui","showUSDC","useTickerStream","useTradeDataScript","init_tradeData_script","ticker","vol_24h","close","volume","openInterest","TradeDataWidget","init_tradeData_widget","tradeData_exports","init_tradeData","LazyTradingviewWidget","LazyMWebLastTrades","LazyTradeDataWidget","TopTab","ChevronIcon","init_topTab_ui","tradingViewConfig","TopTabWidget","init_topTab_widget","topTab_exports","init_topTab","OrderEntryWidget","OrderBookAndEntry","init_orderBookAndEntry_ui","div","useOrderBookAndEntryScript","init_orderBookAndEntry_script","OrderBookAndEntryWidget","init_orderBookAndEntry_widget","orderBookAndEntry_exports","init_orderBookAndEntry","subTab","setSubTab","cancelAllOrders","cancelAllTPSLOrders","MobileOrderListWidget","MobileLiquidationWidget","MobilePositionHistoryWidget","MobilePositionsWidget","SymbolControlHeader","OrdersView","HistoryTab","ref","mobilePositionsRef","mobilePendingRef","mobileTpSlRef","mobilePositionHistoryRef","mobileOrderHistoryRef","mobileLiquidationRef","handleExportPositions","handleExportPending","handleExportTpSl","handleExportPositionHistory","handleExportOrderHistory","handleExportLiquidation","forwardRef","Split","SplitLineBar","onMouseDown","disable","filterCls","cls","SplitLayout","onSizeChange","barProps","ScanQRCodeWidget","ExtensionPositionEnum","ExtensionSlot","installExtension","ArrowRightShortIcon","HeadIcon","CopyIcon","USDCIcon","size","OrderlyIcon","AccountSheet","AccountInfo","ReferralInfo","TradingRewardsInfo","TWType","useChains","useCurEpochEstimate","useEpochInfo","useReferralInfo","useModal","useAccountSheetScript","linkDeviceStorage","accountId","address","hide","disconnect","chainId","showGetTestUSDC","chainName","useGetChains","onCopyAddress","affiliateCommission30D","traderCommission30D","isAffiliate","isTrader","onClickReferral","useReferral","curEpochId","estRewards","onClickTradingRewards","useTradingRewards","onDisconnect","gettingTestUSDC","_onClickReferral","_onClick","curEpochEstimate","list","curEpoch","mainChains","findByChainId","chain","AccountSheetWidget","useAccountScript","referral","tradingRewards","bottomSheetLeading","formatAddress","Account","MobileAccountMenuExtension","Balance","useBalanceScript","BalanceWidget","ChainIcon","ChainSelectorSheetId","Chain","r","useChainScript","currentChainId","setCurrentChainId","ChainWidget","BottomNavBar","renderContent","LinkDevice","showScanQRCode","showDialog","hideDialog","DesktopIcon","Dot","LinkIcon","MobileIcon","DotIcon","useBottomNavBarScript","BottomNavBarWidget","useId","Trans","ArrowLeftRightIcon","Input","inputFormatter","PlusIcon","ReduceIcon","RefreshIcon","useDebouncedCallback","DepositAndWithdrawWithSheetId","TransferSheetId","usePortfolioSheetScript","assets","useAssets","useMarginRatioAndLeverage","subAccounts","showSliderTip","setShowSliderTip","onSettlePnL","toggleHideAssets","totalCollateral","availableBalance","totalUnrealizedROI","update","leverageLevers","marks","leverage","setLeverage","step","onLeverageChange","onSave","err","onValueCommit","debouncedCommit","onInputChange","parsed","raw","clamped","prev","getMarginRatioColor","imr","high","low","RiskIndicator","PortfolioSheet","Asset","MarginRatio","Buttons","onUnsettleClick","clsName","PortfolioSheetWidget","DndContext","closestCenter","KeyboardSensor","PointerSensor","useSensor","useSensors","DragOverlay","restrictToVerticalAxis","arrayMove","SortableContext","sortableKeyboardCoordinates","verticalListSortingStrategy","CSS","SideMarketsWidget","SymbolInfoBarFullWidget","HorizontalMarketsWidget","OrderEntrySortKeys","TradingviewFullscreenKey","DepositStatusWidget","useSortable","SortablePanel","showIndicator","dragOverlay","nodeRef","dimensions","setDimensions","sortableResult","setNodeRef","attributes","listeners","transition","isDragging","setActivatorNodeRef","combinedRef","node","style","IndicatorIcon","useMediaQuery","useSplitPersistent","key","defaulValue","dep","useAssetsHistory","AssetHistorySideEnum","AssetHistoryStatusEnum","useFirstTimeDeposit","unavailable","startTime","endTime","meta","scrollBarWidth","topBarHeight","bottomBarHeight","space","symbolInfoBarHeight","orderEntryMinWidth","orderEntryMaxWidth","orderbookMinWidth","orderbookMaxWidth","orderbookMinHeight","orderbookMaxHeight","tradindviewMinHeight","tradingViewMinWidth","dataListMaxHeight","dataListInitialHeight","ORDERLY_ORDER_ENTRY_SIDE_MARKETS_LAYOUT","ORDERLY_SIDE_MARKETS_MODE_KEY","ORDERLY_HORIZONTAL_MARKETS_LAYOUT","useTradingScript","openMarketsSheet","setOpenMarketsSheet","restrictedInfo","onRouteChange","total","max2XL","min3XL","max4XL","layout","setLayout","marketLayout","setMarketLayout","canTrade","onShowPortfolioSheet","horizontalDraggable","positionsState","useOrderEntryPositions","marketsCollapseState","useMarketsCollapse","observerState","useObserverOrderEntry","marketsWidth","tradindviewMaxHeight","dataListMinHeight","splitSizeState","useSplitSize","tradingViewHeightState","useExtraHeight","map","resizeable","animating","setAnimating","panelSize","setPanelSize","onPanelSizeChange","collapsed","memoizedPanelSize","positions","setPositions","updatePositions","currentIdx","targetIdx","pos","i","showPositionIcon","mainSplitSize","setMainSplitSize","dataListSplitSize","setDataListSplitSize","orderBookSplitSize","setOrderbookSplitSize","dataListSplitHeightSM","setDataListSplitHeightSM","orderBookSplitHeightSM","setOrderbookSplitHeightSM","orderEntryHeight","setOrderEntryHeight","orderEntryViewRef","element","getOffsetSizeNum","tradingviewAndOrderbookSplitRef","max2XLSplitRef","extraHeight","setExtraHeight","dataListHeight","setDataListHeight","preSize","nextSize","boxHeight","splitTradingviewHeight","splitOrderbookHeight","tradingviewHeight","orderbookHeight","offset","splitDataListHeight","LazyRiskRateWidget","LazyAssetViewWidget","LazyDataListWidget","LazySwitchLayout","LazyOrderBookAndTradesWidget","onLayout","onMarketLayout","tradingViewFullScreen","sortableItems","setSortableItems","dropAnimationConfig","active","innerElement","sensors","activeId","setActiveId","handleDragStart","handleDragEnd","over","oldIndex","newIndex","newItems","minScreenHeight","minScreenHeightSM","horizontalMarketsView","containerPaddingX","stickyHorizontalMarketsView","marketsWidget","marketsView","symbolInfoBarView","library_path","restTradingViewConfig","tradingviewWidget","tradingView","orderbookWidget","orderbookView","dataListWidget","dataListView","orderInteractionWidgets","orderEntryView","tradingViewAndOrderbookView","renderTradingViewAndOrderbookView","mainView","MarketsSheetWidget","SymbolInfoBarWidget","SimpleSheet","LazyTopTabWidget","LazyOrderBookAndEntryWidget","MaybeEqual","topBar","Trading","TradingWidget","TradingPageProvider","basicSymbol","TradingPage"],"mappings":"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K,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,8BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,8BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,8BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,WACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,4BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,4BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,SACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,4BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,SACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,4BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,UACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,IACH,UAAU,6BACV,KAAK,UACP,EACAA,EAAC,QACC,EAAE,SACF,EAAE,UACF,MAAM,IACN,OAAO,MACP,GAAG,I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","sourcesContent":["import { API } from \"@kodiak-finance/orderly-types\";\n\n/**\n * CSV Export Service\n * Handles CSV generation for all data types with proper formatting and column mapping\n */\n\ninterface CSVColumnConfig {\n key: string;\n title: string;\n formatter?: (value: any) => string | number;\n}\n\ninterface ExportOptions {\n filename: string;\n columns: CSVColumnConfig[];\n data: any[];\n}\n\n/**\n * Convert data to CSV format\n */\nexport const generateCSV = (options: ExportOptions): string => {\n const { columns, data } = options;\n\n // Create header row\n const headers = columns.map((col) => `\"${col.title}\"`).join(\",\");\n\n // Create data rows\n const rows = data.map((row) => {\n return columns\n .map((col) => {\n let value = row[col.key];\n\n // Apply formatter if provided\n if (col.formatter) {\n value = col.formatter(value);\n }\n\n // Escape quotes and wrap in quotes\n const stringValue = String(value ?? \"\");\n const escapedValue = stringValue.replace(/\"/g, '\"\"');\n return `\"${escapedValue}\"`;\n })\n .join(\",\");\n });\n\n return [headers, ...rows].join(\"\\n\");\n};\n\n/**\n * Trigger browser download\n */\nexport const downloadCSV = (csv: string, filename: string) => {\n const blob = new Blob([csv], { type: \"text/csv;charset=utf-8;\" });\n const link = document.createElement(\"a\");\n const url = URL.createObjectURL(blob);\n\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", `${filename}.csv`);\n link.style.visibility = \"hidden\";\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n/**\n * Format timestamp to readable date\n */\nexport const formatTimestamp = (timestamp: number | string): string => {\n if (!timestamp) return \"--\";\n const numTimestamp = Number(timestamp);\n // Check if timestamp is in milliseconds or seconds\n const date = new Date(\n numTimestamp > 10000000000 ? numTimestamp : numTimestamp * 1000,\n );\n return (\n date.toISOString().split(\"T\")[0] + \" \" + date.toTimeString().slice(0, 8)\n );\n};\n\n/**\n * Format number with decimal precision\n */\nexport const formatNumber = (value: any, decimals = 2): string => {\n if (value === null || value === undefined) return \"--\";\n const num = Number(value);\n if (isNaN(num)) return \"--\";\n return num.toFixed(decimals);\n};\n\n/**\n * Format percentage\n */\nexport const formatPercent = (value: any, decimals = 2): string => {\n if (value === null || value === undefined) return \"--\";\n const num = Number(value);\n if (isNaN(num)) return \"--\";\n return (num * 100).toFixed(decimals) + \"%\";\n};\n\n// ============================================\n// POSITIONS EXPORT\n// ============================================\n\nexport const getPositionExportColumns = (): CSVColumnConfig[] => [\n { key: \"symbol\", title: \"Symbol\" },\n {\n key: \"position_qty\",\n title: \"Position Qty\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"average_open_price\",\n title: \"Avg Open Price\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"mark_price\",\n title: \"Mark Price\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"settle_price\",\n title: \"Settle Price\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"est_liq_price\",\n title: \"Est. Liquidation Price\",\n formatter: (v) => (v === null ? \"--\" : formatNumber(v, 4)),\n },\n {\n key: \"cost_position\",\n title: \"Cost Position\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"unsettled_pnl\",\n title: \"Unsettled PnL\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"pnl_24_h\",\n title: \"PnL 24h\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"leverage\",\n title: \"Leverage\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"imr\",\n title: \"Initial Margin Ratio\",\n formatter: (v) => formatPercent(v, 4),\n },\n {\n key: \"mmr\",\n title: \"Maintenance Margin Ratio\",\n formatter: (v) => formatPercent(v, 4),\n },\n {\n key: \"IMR_withdraw_orders\",\n title: \"IMR with Withdraw Orders\",\n formatter: (v) => formatPercent(v, 4),\n },\n {\n key: \"MMR_with_orders\",\n title: \"MMR with Orders\",\n formatter: (v) => formatPercent(v, 4),\n },\n {\n key: \"pending_long_qty\",\n title: \"Pending Long Qty\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"pending_short_qty\",\n title: \"Pending Short Qty\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"last_sum_unitary_funding\",\n title: \"Last Sum Unitary Funding\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"fee_24_h\",\n title: \"Fee 24h\",\n formatter: (v) => formatNumber(v, 8),\n },\n {\n key: \"seq\",\n title: \"Sequence\",\n },\n {\n key: \"timestamp\",\n title: \"Timestamp\",\n formatter: formatTimestamp,\n },\n {\n key: \"updated_time\",\n title: \"Updated Time\",\n formatter: formatTimestamp,\n },\n];\n\n// ============================================\n// ORDERS EXPORT\n// ============================================\n\nexport const getOrderExportColumns = (tabType: string): CSVColumnConfig[] => {\n // Order History has a different set of fields than pending/filled orders\n if (tabType === \"orderHistory\") {\n return [\n {\n key: \"order_id\",\n title: \"Order ID\",\n },\n { key: \"symbol\", title: \"Symbol\" },\n { key: \"side\", title: \"Side\" },\n { key: \"type\", title: \"Order Type\" },\n { key: \"status\", title: \"Status\" },\n {\n key: \"quantity\",\n title: \"Quantity\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"visible_quantity\",\n title: \"Visible Quantity\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"total_executed_quantity\",\n title: \"Total Executed Qty\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"average_executed_price\",\n title: \"Avg Executed Price\",\n formatter: (v) => (v === null ? \"--\" : formatNumber(v, 4)),\n },\n {\n key: \"total_fee\",\n title: \"Fee\",\n formatter: (v) => formatNumber(v, 8),\n },\n {\n key: \"fee_asset\",\n title: \"Fee Asset\",\n },\n {\n key: \"realized_pnl\",\n title: \"Realized PnL\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"created_time\",\n title: \"Created Time\",\n formatter: formatTimestamp,\n },\n {\n key: \"updated_time\",\n title: \"Updated Time\",\n formatter: formatTimestamp,\n },\n ];\n }\n\n // Pending and Filled orders columns\n const baseColumns: CSVColumnConfig[] = [\n { key: \"symbol\", title: \"Symbol\" },\n {\n key: \"order_id\",\n title: \"Order ID\",\n },\n {\n key: \"user_id\",\n title: \"User ID\",\n },\n { key: \"side\", title: \"Side\" },\n { key: \"type\", title: \"Order Type\" },\n { key: \"status\", title: \"Status\" },\n {\n key: \"price\",\n title: \"Price\",\n formatter: (v) => (v === null ? \"--\" : formatNumber(v, 4)),\n },\n {\n key: \"quantity\",\n title: \"Quantity\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"visible\",\n title: \"Visible\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"visible_quantity\",\n title: \"Visible Quantity\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"executed\",\n title: \"Executed\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"total_executed_quantity\",\n title: \"Total Executed Qty\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"average_executed_price\",\n title: \"Avg Executed Price\",\n formatter: (v) => (v === null ? \"--\" : formatNumber(v, 4)),\n },\n {\n key: \"amount\",\n title: \"Amount\",\n formatter: (v) => (v === null ? \"--\" : formatNumber(v, 2)),\n },\n {\n key: \"total_fee\",\n title: \"Fee\",\n formatter: (v) => formatNumber(v, 8),\n },\n {\n key: \"fee_asset\",\n title: \"Fee Asset\",\n },\n {\n key: \"created_time\",\n title: \"Created Time\",\n formatter: formatTimestamp,\n },\n {\n key: \"updated_time\",\n title: \"Updated Time\",\n formatter: formatTimestamp,\n },\n ];\n\n // Add TP/SL specific columns for tp_sl tab\n if (tabType === \"tp_sl\") {\n baseColumns.splice(6, 0, {\n key: \"trigger_price\",\n title: \"Trigger Price\",\n formatter: (v) => formatNumber(v, 4),\n });\n }\n\n return baseColumns;\n};\n\n// ============================================\n// POSITION HISTORY EXPORT\n// ============================================\n\nexport const getPositionHistoryExportColumns = (): CSVColumnConfig[] => [\n {\n key: \"position_id\",\n title: \"Position ID\",\n },\n { key: \"symbol\", title: \"Symbol\" },\n {\n key: \"position_status\",\n title: \"Status\",\n },\n {\n key: \"type\",\n title: \"Type\",\n },\n {\n key: \"side\",\n title: \"Side\",\n },\n {\n key: \"closed_position_qty\",\n title: \"Closed Position Qty\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"max_position_qty\",\n title: \"Max Position Qty\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"avg_open_price\",\n title: \"Avg Open Price\",\n formatter: (v) => (v === null ? \"--\" : formatNumber(v, 4)),\n },\n {\n key: \"avg_close_price\",\n title: \"Avg Close Price\",\n formatter: (v) => (v === null ? \"--\" : formatNumber(v, 4)),\n },\n {\n key: \"realized_pnl\",\n title: \"Realized PnL\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"accumulated_funding_fee\",\n title: \"Accumulated Funding Fee\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"trading_fee\",\n title: \"Trading Fee\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"insurance_fund_fee\",\n title: \"Insurance Fund Fee\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"liquidator_fee\",\n title: \"Liquidator Fee\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"leverage\",\n title: \"Leverage\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"open_timestamp\",\n title: \"Time Opened\",\n formatter: formatTimestamp,\n },\n {\n key: \"close_timestamp\",\n title: \"Time Closed\",\n formatter: (v) => (v ? formatTimestamp(v) : \"--\"),\n },\n {\n key: \"last_update_time\",\n title: \"Updated Time\",\n formatter: formatTimestamp,\n },\n];\n\n// ============================================\n// LIQUIDATION EXPORT\n// ============================================\n\nexport const getLiquidationExportColumns = (): CSVColumnConfig[] => [\n {\n key: \"timestamp\",\n title: \"Time\",\n formatter: formatTimestamp,\n },\n {\n key: \"type\",\n title: \"Type\",\n },\n {\n key: \"liquidation_id\",\n title: \"Liquidation ID\",\n },\n {\n key: \"symbol\",\n title: \"Symbol\",\n },\n {\n key: \"position_qty\",\n title: \"Position Qty\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"mark_price\",\n title: \"Mark Price\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"transfer_price\",\n title: \"Transfer Price\",\n formatter: (v) => formatNumber(v, 4),\n },\n {\n key: \"liquidator_fee\",\n title: \"Liquidator Fee\",\n formatter: (v) => formatNumber(v, 8),\n },\n {\n key: \"abs_liquidation_fee\",\n title: \"Abs Liquidation Fee\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"insurance_fund_fee\",\n title: \"Insurance Fund Fee\",\n formatter: (v) => formatNumber(v, 8),\n },\n {\n key: \"abs_insurance_fund_fee\",\n title: \"Abs Insurance Fund Fee\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"cost_position_transfer\",\n title: \"Cost Position Transfer\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"margin_ratio\",\n title: \"Margin Ratio\",\n formatter: (v) => formatPercent(v, 4),\n },\n {\n key: \"account_mmr\",\n title: \"Account MMR\",\n formatter: (v) => formatPercent(v, 4),\n },\n {\n key: \"position_notional\",\n title: \"Position Notional\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"collateral_value\",\n title: \"Collateral Value\",\n formatter: (v) => formatNumber(v, 2),\n },\n {\n key: \"transfer_amount_to_insurance_fund\",\n title: \"Transfer Amount to Insurance Fund\",\n formatter: (v) => formatNumber(v, 2),\n },\n];\n\n// ============================================\n// EXPORT HANDLER\n// ============================================\n\nexport const exportToCSVFile = (options: ExportOptions) => {\n const csv = generateCSV(options);\n downloadCSV(csv, options.filename);\n};\n","import { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\n\nexport const useTradingLocalStorage = (props?: {\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\",\n );\n const [pnlNotionalDecimalPrecision, setPnlNotionalDecimalPrecision] =\n useLocalStorage(\n \"pnlNotionalDecimalPrecision\",\n props?.pnlNotionalDecimalPrecision ?? 2,\n );\n const [showAllSymbol, setShowAllSymbol] = useLocalStorage(\n \"showAllSymbol\",\n true,\n );\n\n const [hideAssets, setHideAssets] = useLocalStorage(\"hideAssets\", false);\n\n return {\n unPnlPriceBasis,\n setUnPnlPriceBasic,\n pnlNotionalDecimalPrecision,\n setPnlNotionalDecimalPrecision,\n showAllSymbol,\n setShowAllSymbol,\n hideAssets,\n setHideAssets,\n };\n};\n","import { useMemo } from \"react\";\nimport { usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { useTradingLocalStorage } from \"./useTradingLocalStorage\";\n\nexport const usePositionsCount = (symbol?: string) => {\n const { showAllSymbol } = useTradingLocalStorage();\n const [data] = usePositionStream(showAllSymbol ? undefined : symbol);\n\n const count = useMemo(() => {\n return data.rows?.length;\n }, [data.rows?.length]);\n\n const positionCount = useDataTap(count) ?? 0;\n\n return {\n positionCount,\n };\n};\n","import { useOrderStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AlgoOrderRootType, OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport { TabType } from \"@kodiak-finance/orderly-ui-orders\";\nimport { useTradingLocalStorage } from \"./useTradingLocalStorage\";\n\nexport const usePendingOrderCount = (symbol?: string) => {\n const { showAllSymbol } = useTradingLocalStorage();\n\n const pendingOrdersPageSizeKey = `orderly_${TabType.pending}_pageSize`;\n const tpslOrdersPageSizeKey = `orderly_${TabType.tp_sl}_pageSize`;\n //\n // const [pendingOrderPageSize] = useLocalStorage(pendingOrdersPageSizeKey, 500);\n // const [tpslOrderPageSize] = useLocalStorage(tpslOrdersPageSizeKey, 500);\n\n const [pendingOrders, { total: pendingCount }] = useOrderStream(\n {\n symbol: showAllSymbol ? undefined : symbol,\n status: OrderStatus.INCOMPLETE,\n excludes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n // size: pendingOrderPageSize,\n size: 500,\n // sourceTypeAll: true,\n },\n {\n keeplive: true,\n },\n );\n\n const [tpslOrders, { total: tpslCount }] = useOrderStream(\n {\n symbol: showAllSymbol ? undefined : symbol,\n status: OrderStatus.INCOMPLETE,\n includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n // size: tpslOrderPageSize,\n size: 500,\n // sourceTypeAll: true,\n },\n {\n keeplive: true,\n },\n );\n\n const pendingOrderCount = useDataTap(pendingCount) ?? 0;\n const tpSlOrderCount = useDataTap(tpslCount) ?? 0;\n\n return {\n pendingOrderCount,\n tpSlOrderCount,\n };\n};\n","export { useTradingLocalStorage } from \"./useTradingLocalStorage\";\nexport { usePositionsCount } from \"./usePositionsCount\";\nexport { usePendingOrderCount } from \"./usePendingOrderCount\";\n","import { createContext, useContext } from \"react\";\nimport { TradingPageState } from \"../types/types\";\n\nexport const TradingPageContext = createContext({} as TradingPageState);\n\nexport const useTradingPageContext = () => {\n return useContext(TradingPageContext);\n};\n","import type { PositionsProps } from \"@kodiak-finance/orderly-ui-positions\";\nimport {\n usePendingOrderCount,\n usePositionsCount,\n useTradingLocalStorage,\n} from \"../../../hooks\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport enum DataListTabType {\n positions = \"Positions\",\n pending = \"Pending\",\n tp_sl = \"TP/SL\",\n filled = \"Filled\",\n positionHistory = \"Position history\",\n orderHistory = \"Order history\",\n liquidation = \"Liquidation\",\n assets = \"Assets\",\n}\n\nexport const useDataListScript = (\n inputs: { current?: DataListTabType } & PositionsProps,\n) => {\n const {\n current,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n includedPendingOrder,\n } = inputs;\n\n const localStorage = useTradingLocalStorage({ pnlNotionalDecimalPrecision });\n\n const { onSymbolChange } = useTradingPageContext();\n\n const { positionCount } = usePositionsCount(symbol);\n\n const { pendingOrderCount, tpSlOrderCount } = usePendingOrderCount(symbol);\n\n return {\n current,\n sharePnLConfig,\n symbol,\n calcMode: localStorage.unPnlPriceBasis,\n includedPendingOrder,\n ...localStorage,\n positionCount,\n pendingOrderCount,\n tpSlOrderCount,\n onSymbolChange,\n };\n};\n\nexport type DataListState = ReturnType<typeof useDataListScript>;\n","import { FC, useCallback, useState } from \"react\";\nimport {\n Button,\n Checkbox,\n Divider,\n DropdownMenuContent,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n SettingFillIcon,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SettingState } from \"./setting.script\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const Setting: FC<SettingState> = (props) => {\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n return (\n <Flex gap={0}>\n <Flex gap={1}>\n <Checkbox\n id=\"oui-checkbox-hideOtherSymbols\"\n color=\"white\"\n checked={props.hideOtherSymbols}\n onCheckedChange={(checked: boolean) => {\n props.setHideOtherSymbols(checked);\n }}\n />\n <label\n className=\"oui-text-xs oui-text-base-contrast-54 oui-cursor-pointer\"\n htmlFor=\"oui-checkbox-hideOtherSymbols\"\n >\n {t(\"trading.hideOtherSymbols\")}\n </label>\n </Flex>\n\n <DropdownMenuRoot open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"xs\"\n type=\"button\"\n variant=\"contained\"\n className=\"oui-bg-transparent hover:oui-bg-transparent\"\n >\n <SettingFillIcon\n size={16}\n color=\"white\"\n opacity={1}\n className=\"oui-text-white/[.36] hover:oui-text-white/80\"\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"oui-px-5 oui-py-3 oui-w-[360px]\"\n alignOffset={2}\n align=\"end\"\n >\n <div className=\"oui-flex oui-flex-col oui-text-sm\">\n <Text className=\"oui-text-base oui-pb-3\">\n {t(\"trading.portfolioSettings\")}\n </Text>\n <Divider />\n <Text className=\"oui-pb-3 oui-text-base-contrast-54 oui-mt-2\">\n {t(\"trading.portfolioSettings.decimalPrecision\")}\n </Text>\n <DecimalPrecisionCheckbox\n value={props.pnlNotionalDecimalPrecision}\n onValueChange={(e) => {\n props.setPnlNotionalDecimalPrecision(e);\n setOpen(false);\n }}\n />\n <Divider className=\"oui-my-3\" />\n <Text className=\"oui-pb-3 oui-text-base-contrast-54 oui-mt-2\">\n {t(\"trading.portfolioSettings.unrealPnlPriceBasis\")}\n </Text>\n <UnPnlPriceBasisCheckBox\n value={props.unPnlPriceBasis}\n onValueChange={(e) => {\n props.setUnPnlPriceBasic(e);\n setOpen(false);\n }}\n />\n </div>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst DecimalPrecisionCheckbox = (props: {\n value: number;\n onValueChange: (value: number) => void;\n}) => {\n const { value, onValueChange } = props;\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === 0}\n label={1}\n value={0}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === 1}\n label={0.1}\n value={1}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === 2}\n label={0.01}\n value={2}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\n// const InnerCheckbox = (props: {\n// sel: boolean;\n// label: any;\n// value: any;\n// onCheckChange: (value: any) => void;\n// }) => {\n// const { sel, label, value, onCheckChange } = props;\n// return (\n// <Flex\n// onClick={(e) => {\n// onCheckChange(value);\n// e.stopPropagation();\n// }}\n// gap={1}\n// >\n// <Checkbox color=\"white\" checked={sel} />\n// <Text size=\"xs\" intensity={sel ? 98 : 54}>\n// {`${label}`}\n// </Text>\n// </Flex>\n// );\n// };\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"2xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { SettingWidgetProps } from \"./setting.widget\";\n\nexport const useSettingScript = (props: SettingWidgetProps) => {\n return {\n ...props,\n };\n};\n\nexport type SettingState = ReturnType<typeof useSettingScript>;\n","import React from \"react\";\nimport { useSettingScript } from \"./setting.script\";\nimport { Setting } from \"./setting.ui\";\n\nexport type SettingWidgetProps = {\n pnlNotionalDecimalPrecision: any;\n setPnlNotionalDecimalPrecision: (value: number) => void;\n unPnlPriceBasis: any;\n setUnPnlPriceBasic: (value: string) => void;\n hideOtherSymbols: any;\n setHideOtherSymbols: (value: boolean) => void;\n};\n\nexport const SettingWidget: React.FC<SettingWidgetProps> = (props) => {\n const state = useSettingScript(props);\n return <Setting {...state} />;\n};\n","export { Setting } from \"./setting.ui\";\nexport { SettingWidget } from \"./setting.widget\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Button,\n Checkbox,\n Divider,\n Flex,\n Statistic,\n Text,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport type { PositionHeaderState } from \"./positionHeader.script\";\n\nexport const PositionHeader: React.FC<\n PositionHeaderState & { onExport?: () => void }\n> = (props) => {\n const { isMobile } = useScreen();\n return isMobile ? <MobileLayout {...props} /> : <DesktopLayout {...props} />;\n};\n\nconst MobileLayout: React.FC<\n PositionHeaderState & { onExport?: () => void }\n> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={2}\n width={\"100%\"}\n itemAlign={\"start\"}\n p={2}\n className=\"oui-rounded-b-xl oui-bg-base-9\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <UnrealPnL\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-54\",\n root: \"oui-text-sm\",\n }}\n {...props}\n />\n <Notional\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-54\",\n root: \"oui-text-sm\",\n }}\n {...props}\n />\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"} align={\"center\"}>\n <Flex className=\"oui-cursor-pointer oui-gap-[2px]\">\n <Checkbox\n id=\"oui-checkbox-hideOtherSymbols\"\n color=\"white\"\n checked={!props.showAllSymbol}\n onCheckedChange={(checked: boolean) => {\n props.setShowAllSymbol(!checked);\n }}\n />\n\n <label\n className=\"oui-cursor-pointer oui-text-2xs oui-text-base-contrast-54\"\n htmlFor=\"oui-checkbox-hideOtherSymbols\"\n >\n {t(\"trading.hideOtherSymbols\")}\n </label>\n </Flex>\n {props.onExport && (\n <Button\n variant=\"outlined\"\n size=\"xs\"\n color=\"secondary\"\n onClick={props.onExport}\n >\n {t(\"common.export\") || \"Export CSV\"}\n </Button>\n )}\n </Flex>\n </Flex>\n );\n};\n\nconst DesktopLayout: React.FC<PositionHeaderState> = (props) => {\n return (\n <Flex py={2} px={3} gap={6} width={\"100%\"} justify={\"start\"}>\n <UnrealPnL\n {...props}\n classNames={{ label: \"oui-text-base-contrast-54\" }}\n />\n <Notional\n {...props}\n classNames={{ label: \"oui-text-base-contrast-54\" }}\n />\n </Flex>\n );\n};\n\nconst UnrealPnL: React.FC<\n PositionHeaderState & {\n classNames?: { root?: string; label?: string; value?: string };\n }\n> = (props) => {\n const { t } = useTranslation();\n\n const unrealPnLClsName =\n typeof props.unrealPnL === \"number\"\n ? props.unrealPnL >= 0\n ? \"oui-text-trade-profit\"\n : \"oui-text-trade-loss\"\n : \"oui-text-base-contrast-80\";\n\n const unrealPnLROIClsName =\n typeof props.unrealPnL === \"number\" && props.unrealPnlROI\n ? props.unrealPnlROI >= 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\"\n : \"oui-text-base-contrast-80\";\n\n return (\n <Statistic label={t(\"common.unrealizedPnl\")} classNames={props.classNames}>\n <Flex gap={1}>\n <Text.numeral\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n className={unrealPnLClsName}\n >\n {props.unrealPnL ?? \"--\"}\n </Text.numeral>\n {typeof props.unrealPnlROI !== \"undefined\" && (\n <Text.numeral\n prefix=\"(\"\n suffix=\")\"\n rule=\"percentages\"\n size=\"2xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n className={unrealPnLROIClsName}\n >\n {props.unrealPnlROI}\n </Text.numeral>\n )}\n </Flex>\n </Statistic>\n );\n};\n\nconst Notional: React.FC<\n PositionHeaderState & {\n classNames?: { root?: string; label?: string; value?: string };\n }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Statistic label={t(\"common.notional\")} classNames={props.classNames}>\n <Text.numeral\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n intensity={80}\n >\n {props.notional ?? \"--\"}\n </Text.numeral>\n </Statistic>\n );\n};\n","import { usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { useTradingLocalStorage } from \"../../../hooks\";\n\nexport const usePositionHeaderScript = (inputs: {\n pnlNotionalDecimalPrecision?: number;\n unPnlPriceBasis: \"markPrice\" | \"lastPrice\";\n symbol?: string;\n}) => {\n const { pnlNotionalDecimalPrecision, unPnlPriceBasis, symbol } = inputs;\n const calcMode = unPnlPriceBasis;\n\n const [data] = usePositionStream(symbol, {\n calcMode,\n });\n const aggregated = useDataTap(data.aggregated);\n\n const unrealPnL = aggregated?.total_unreal_pnl;\n const unrealPnlROI = aggregated?.unrealPnlROI;\n const notional = aggregated?.notional;\n const { showAllSymbol, setShowAllSymbol } = useTradingLocalStorage();\n\n return {\n pnlNotionalDecimalPrecision,\n unrealPnL,\n unrealPnlROI,\n notional,\n showAllSymbol,\n setShowAllSymbol,\n };\n};\n\nexport type PositionHeaderState = ReturnType<typeof usePositionHeaderScript>;\n","import React from \"react\";\nimport { usePositionHeaderScript } from \"./positionHeader.script\";\nimport { PositionHeader } from \"./positionHeader.ui\";\n\nexport const PositionHeaderWidget: React.FC<{\n pnlNotionalDecimalPrecision?: number;\n unPnlPriceBasis: \"markPrice\" | \"lastPrice\";\n symbol?: string;\n onExport?: () => void;\n}> = (props) => {\n const { onExport, ...scriptProps } = props;\n const state = usePositionHeaderScript(scriptProps);\n return <PositionHeader {...state} onExport={onExport} />;\n};\n","export { PositionHeader } from \"./positionHeader.ui\";\nexport { PositionHeaderWidget } from \"./positionHeader.widget\";\n","import React, { useRef, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetsModule } from \"@kodiak-finance/orderly-portfolio\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n Button,\n Divider,\n Flex,\n InfoCircleIcon,\n TabPanel,\n Tabs,\n Tooltip,\n Table,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { TabPanelProps } from \"@kodiak-finance/orderly-ui\";\nimport {\n DesktopOrderListWidget,\n TabType,\n OrderListInstance,\n} from \"@kodiak-finance/orderly-ui-orders\";\nimport {\n LiquidationWidget,\n LiquidationInstance,\n PositionHistoryWidget,\n PositionHistoryInstance,\n PositionsWidget,\n PositionsInstance,\n} from \"@kodiak-finance/orderly-ui-positions\";\nimport {\n getPositionExportColumns,\n getOrderExportColumns,\n getPositionHistoryExportColumns,\n getLiquidationExportColumns,\n exportToCSVFile,\n} from \"../../../utils/csvExportService\";\nimport { DataListState, DataListTabType } from \"./dataList.script\";\n\nconst LazySettingWidget = React.lazy(() =>\n import(\"./setting\").then((mod) => {\n return { default: mod.SettingWidget };\n }),\n);\n\nconst LazyPositionHeaderWidget = React.lazy(() =>\n import(\"../../base/positionHeader\").then((mod) => {\n return { default: mod.PositionHeaderWidget };\n }),\n);\n\nconst PositionsView: React.FC<\n DataListState & { positionsRef: React.RefObject<PositionsInstance> }\n> = (props) => {\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\">\n <React.Suspense fallback={null}>\n <LazyPositionHeaderWidget\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n symbol={!!props.showAllSymbol ? undefined : props.symbol}\n unPnlPriceBasis={props.unPnlPriceBasis}\n />\n </React.Suspense>\n <Divider className=\"oui-w-full\" />\n <Box className=\"oui-h-[calc(100%_-_60px)]\" width=\"100%\">\n <PositionsWidget\n ref={props.positionsRef}\n symbol={!!props.showAllSymbol ? undefined : props.symbol}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n sharePnLConfig={props.sharePnLConfig}\n calcMode={props.calcMode}\n includedPendingOrder={props.includedPendingOrder}\n onSymbolChange={props.onSymbolChange}\n />\n </Box>\n </Flex>\n );\n};\n\nexport const LiquidationTab: React.FC = () => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-space-x-1\">\n <span>{t(\"positions.liquidation\")}</span>\n <Tooltip\n className=\"oui-max-w-[275px] oui-bg-base-6\"\n content={\n <div>\n <div className=\"oui-text-pretty\">\n {t(\"positions.Liquidation.tooltip.liquidation\")}\n </div>\n <div>\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/perpetual-futures/liquidations\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"oui-text-primary\"\n >\n {t(\"positions.Liquidation.tooltip.viewMore\")}\n </a>\n </div>\n </div>\n }\n arrow={{ className: \"oui-fill-base-6\" }}\n >\n <button className=\"oui-hidden group-data-[state=active]:oui-block\">\n <InfoCircleIcon />\n </button>\n </Tooltip>\n </div>\n );\n};\n\nexport const DataList: React.FC<DataListState> = (props) => {\n const { t } = useTranslation();\n const [currentTab, setCurrentTab] = useState(\n props.current || DataListTabType.positions,\n );\n\n const positionsRef = useRef<PositionsInstance>(null);\n const pendingRef = useRef<OrderListInstance>(null);\n const tpSlRef = useRef<OrderListInstance>(null);\n const positionHistoryRef = useRef<PositionHistoryInstance>(null);\n const filledOrdersRef = useRef<OrderListInstance>(null);\n const orderHistoryRef = useRef<OrderListInstance>(null);\n const liquidationRef = useRef<LiquidationInstance>(null);\n\n const {\n positionCount = 0,\n pendingOrderCount = 0,\n tpSlOrderCount = 0,\n showAllSymbol,\n symbol,\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n setShowAllSymbol,\n current,\n unPnlPriceBasis,\n setUnPnlPriceBasic,\n setPnlNotionalDecimalPrecision,\n } = props;\n\n const isCurrentTabEmpty = (() => {\n switch (currentTab) {\n case DataListTabType.positions: {\n const data = positionsRef.current?.getDataSource?.();\n return !data || data.length === 0;\n }\n case DataListTabType.pending: {\n const data = pendingRef.current?.getDataSource?.();\n return !data || data.length === 0;\n }\n case DataListTabType.tp_sl: {\n const data = tpSlRef.current?.getDataSource?.();\n return !data || data.length === 0;\n }\n case DataListTabType.filled: {\n const data = filledOrdersRef.current?.getDataSource?.();\n return !data || data.length === 0;\n }\n case DataListTabType.positionHistory: {\n const data = positionHistoryRef.current?.getDataSource?.();\n return !data || data.length === 0;\n }\n case DataListTabType.orderHistory: {\n const data = orderHistoryRef.current?.getDataSource?.();\n return !data || data.length === 0;\n }\n case DataListTabType.liquidation: {\n const data = liquidationRef.current?.getDataSource?.();\n return !data || data.length === 0;\n }\n default:\n return true;\n }\n })();\n\n const handleExport = () => {\n switch (currentTab) {\n case DataListTabType.positions: {\n const data = positionsRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `positions_${new Date().getTime()}`,\n columns: getPositionExportColumns(),\n data,\n });\n }\n break;\n }\n case DataListTabType.pending: {\n const data = pendingRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `pending_orders_${new Date().getTime()}`,\n columns: getOrderExportColumns(\"pending\"),\n data,\n });\n }\n break;\n }\n case DataListTabType.tp_sl: {\n const data = tpSlRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `tp_sl_orders_${new Date().getTime()}`,\n columns: getOrderExportColumns(\"tp_sl\"),\n data,\n });\n }\n break;\n }\n case DataListTabType.filled: {\n const data = filledOrdersRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `filled_orders_${new Date().getTime()}`,\n columns: getOrderExportColumns(\"filled\"),\n data,\n });\n }\n break;\n }\n case DataListTabType.positionHistory: {\n const data = positionHistoryRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `position_history_${new Date().getTime()}`,\n columns: getPositionHistoryExportColumns(),\n data,\n });\n }\n break;\n }\n case DataListTabType.orderHistory: {\n const data = orderHistoryRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `order_history_${new Date().getTime()}`,\n columns: getOrderExportColumns(\"orderHistory\"),\n data,\n });\n }\n break;\n }\n case DataListTabType.liquidation: {\n const data = liquidationRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `liquidation_${new Date().getTime()}`,\n columns: getLiquidationExportColumns(),\n data,\n });\n }\n break;\n }\n default:\n break;\n }\n };\n\n const tabPanelItems: (TabPanelProps & { content?: React.ReactNode })[] = [\n {\n value: DataListTabType.positions,\n title: `${t(\"common.positions\")} ${positionCount > 0 ? `(${positionCount})` : \"\"}`,\n content: <PositionsView {...props} positionsRef={positionsRef} />,\n },\n {\n value: DataListTabType.pending,\n title: `${t(\"orders.status.pending\")} ${pendingOrderCount > 0 ? `(${pendingOrderCount})` : \"\"}`,\n content: (\n <DesktopOrderListWidget\n ref={pendingRef}\n type={TabType.pending}\n ordersStatus={OrderStatus.INCOMPLETE}\n symbol={showAllSymbol ? undefined : symbol}\n onSymbolChange={onSymbolChange}\n testIds={{ tableBody: \"oui-testid-dataList-pending-table-body\" }}\n />\n ),\n },\n {\n value: DataListTabType.tp_sl,\n title: `${t(\"common.tpsl\")} ${tpSlOrderCount > 0 ? `(${tpSlOrderCount})` : \"\"}`,\n content: (\n <DesktopOrderListWidget\n ref={tpSlRef}\n type={TabType.tp_sl}\n ordersStatus={OrderStatus.INCOMPLETE}\n symbol={showAllSymbol ? undefined : symbol}\n onSymbolChange={onSymbolChange}\n testIds={{ tableBody: \"oui-testid-dataList-tpsl-table-body\" }}\n />\n ),\n },\n {\n value: DataListTabType.filled,\n title: t(\"orders.status.filled\"),\n content: (\n <DesktopOrderListWidget\n ref={filledOrdersRef}\n type={TabType.filled}\n symbol={showAllSymbol ? undefined : symbol}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n ordersStatus={OrderStatus.FILLED}\n onSymbolChange={onSymbolChange}\n testIds={{ tableBody: \"oui-testid-dataList-filled-table-body\" }}\n sharePnLConfig={sharePnLConfig}\n />\n ),\n },\n {\n value: DataListTabType.positionHistory,\n title: t(\"positions.positionHistory\"),\n content: (\n <PositionHistoryWidget\n ref={positionHistoryRef}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n symbol={showAllSymbol ? undefined : symbol}\n onSymbolChange={onSymbolChange}\n sharePnLConfig={sharePnLConfig}\n />\n ),\n },\n {\n value: DataListTabType.orderHistory,\n title: t(\"orders.orderHistory\"),\n content: (\n <DesktopOrderListWidget\n ref={orderHistoryRef}\n type={TabType.orderHistory}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n symbol={showAllSymbol ? undefined : symbol}\n onSymbolChange={onSymbolChange}\n testIds={{ tableBody: \"oui-testid-dataList-orderHistory-table-body\" }}\n sharePnLConfig={sharePnLConfig}\n />\n ),\n },\n {\n value: DataListTabType.liquidation,\n title: <LiquidationTab />,\n content: (\n <LiquidationWidget\n ref={liquidationRef}\n symbol={showAllSymbol ? undefined : symbol}\n />\n ),\n },\n // {\n // value: DataListTabType.assets,\n // title: t(\"common.assets\"),\n // content: (\n // <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n // <AssetsModule.AssetsDataTableWidget />\n // </Flex>\n // ),\n // },\n ];\n\n return (\n <Tabs\n defaultValue={current || DataListTabType.positions}\n onValueChange={(value) => setCurrentTab(value as DataListTabType)}\n variant=\"contained\"\n trailing={\n <Flex gap={2} itemAlign=\"center\">\n <Button\n color=\"gray\"\n size=\"sm\"\n className=\"oui-bg-base-4\"\n disabled={isCurrentTabEmpty}\n onClick={handleExport}\n >\n Export to CSV\n </Button>\n <React.Suspense fallback={null}>\n <LazySettingWidget\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n setPnlNotionalDecimalPrecision={setPnlNotionalDecimalPrecision}\n unPnlPriceBasis={unPnlPriceBasis}\n setUnPnlPriceBasic={setUnPnlPriceBasic}\n hideOtherSymbols={!showAllSymbol}\n setHideOtherSymbols={(value) => setShowAllSymbol(!value)}\n />\n </React.Suspense>\n </Flex>\n }\n size=\"lg\"\n className=\"oui-h-full\"\n classNames={{\n trigger: \"oui-group\",\n tabsContent: \"oui-h-[calc(100%_-_32px)]\",\n }}\n >\n {tabPanelItems.map((item) => {\n const { content, ...rest } = item;\n return (\n <TabPanel {...rest} key={`item-${rest.value}`}>\n {content}\n </TabPanel>\n );\n })}\n </Tabs>\n );\n};\n","import React from \"react\";\nimport type { PositionsProps } from \"@kodiak-finance/orderly-ui-positions\";\nimport { DataListTabType, useDataListScript } from \"./dataList.script\";\nimport { DataList } from \"./dataList.ui\";\n\nexport const DataListWidget: React.FC<\n { current?: DataListTabType } & PositionsProps\n> = (props) => {\n const state = useDataListScript(props);\n return <DataList {...state} />;\n};\n","export { DataList } from \"./dataList.ui\";\nexport { DataListWidget } from \"./dataList.widget\";\n","import React, { FC, ReactNode } from \"react\";\nimport { Box, cn, Grid, ListView, Text } from \"@kodiak-finance/orderly-ui\";\nimport { LastTradesState } from \"./lastTrades.script\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const LastTrades: FC<\n LastTradesState & {\n classNames?: {\n root?: string;\n list?: string;\n listHeader?: string;\n listItem?: {\n left?: string;\n mid?: string;\n right?: string;\n };\n };\n style?: React.CSSProperties;\n }\n> = (props) => {\n return (\n <Box\n className={cn(\n \"oui-grid oui-grid-rows=[auto,1fr] oui-h-full oui-w-full\",\n props.classNames?.root\n )}\n style={props.style}\n >\n <Box className=\"oui-pr-1\">\n <Header\n base={props.base}\n quote={props.quote}\n className={props.classNames?.listHeader}\n />\n </Box>\n <List\n data={props.data}\n isLoading={props.isLoading}\n baseDp={props.baseDp}\n quoteDp={props.quoteDp}\n classNames={props.classNames?.listItem}\n className={props.classNames?.list}\n />\n </Box>\n );\n};\n\nconst Row = (props: {\n key?: React.Key | null;\n classNames?: {\n root?: string;\n left?: string;\n mid?: string;\n right?: string;\n };\n left: ReactNode | string;\n mid: ReactNode | string;\n right: ReactNode | string;\n}) => {\n const { left, mid, right, classNames } = props;\n return (\n // <Flex\n // key={key}\n // height={20}\n // gap={2}\n // width={\"100%\"}\n // className={cn(\"oui-text-xs oui-tabular-nums\", classNames?.root)}\n // >\n // <Box className={cn(\"oui-flex-1\", classNames?.left)}>{left}</Box>\n // <Box className={cn(\"oui-flex-1\", classNames?.mid)}>{mid}</Box>\n // <Box className={cn(\"oui-flex-1 oui-text-right\", classNames?.right)}>\n // {right}\n // </Box>\n // </Flex>\n\n <Grid\n cols={3}\n gapX={2}\n width=\"100%\"\n className={cn(\"oui-text-xs oui-tabular-nums\", classNames?.root)}\n >\n <div className={cn(\"oui-flex-1\", classNames?.left)}>{left}</div>\n <div className={cn(\"oui-flex-1\", classNames?.mid)}>{mid}</div>\n <div className={cn(\"oui-flex-1 oui-text-right\", classNames?.right)}>\n {right}\n </div>\n </Grid>\n );\n};\n\nconst Header = (props: { base: string; quote: string; className?: string }) => {\n const { t } = useTranslation();\n return (\n <Row\n left={t(\"common.time\")}\n mid={`${t(\"common.price\")}(${props.quote})`}\n right={`${t(\"common.qty\")}(${props.base})`}\n classNames={{\n root: cn(\n \"oui-text-base-contrast-54 oui-h-[32px] oui-sticky\",\n props.className\n ),\n }}\n />\n );\n};\n\nconst List = (props: {\n data?: any[];\n isLoading?: boolean;\n baseDp: number;\n quoteDp: number;\n classNames?: {\n left?: string;\n mid?: string;\n right?: string;\n };\n className?: string;\n}) => {\n return (\n <ListView\n dataSource={props.data}\n className={cn(\n \"oui-last-trades-list\",\n \"oui-w-full oui-h-full\",\n props.className,\n \"oui-overflow-auto\"\n )}\n contentClassName=\"!oui-space-y-0 oui-pr-[-4px]\"\n renderItem={(item, index) => {\n return (\n <Row\n key={index}\n left={\n <Text.formatted rule={\"date\"} formatString=\"HH:mm:ss\">\n {item?.ts}\n </Text.formatted>\n }\n mid={commifyOptional(item?.price, { fix: props.quoteDp })}\n right={commifyOptional(item?.size, { fix: props.baseDp })}\n classNames={{\n left: cn(\"oui-text-base-contrast-80\", props.classNames?.left),\n right: cn(\n item.side === OrderSide.BUY\n ? \"oui-text-trade-profit\"\n : \"oui-text-trade-loss\",\n props.classNames?.mid\n ),\n mid: cn(\n item.side === OrderSide.BUY\n ? \"oui-text-trade-profit\"\n : \"oui-text-trade-loss\",\n props.classNames?.right\n ),\n }}\n />\n );\n }}\n />\n );\n};\n","import { useMarketTradeStream, useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\n\nexport const useLastTradesScript = (symbol: string) => {\n const { data, isLoading } = useMarketTradeStream(symbol);\n // const { quote, quote_dp, base, base_dp } = useContext(SymbolContext);\n const config = useSymbolsInfo()?.[symbol];\n const base = config?.(\"base\");\n const quote = config?.(\"quote\");\n const baseDp = config?.(\"base_dp\");\n const quoteDp = config?.(\"quote_dp\");\n// console.log(\"base, quote\", base, quote, \"baseDp, quoteDp\", baseDp, quoteDp);\n\n return {\n base,\n quote,\n data,\n isLoading,\n baseDp,\n quoteDp,\n };\n};\n\nexport type LastTradesState = ReturnType<typeof useLastTradesScript>;\n","import React from \"react\";\nimport { useLastTradesScript } from \"./lastTrades.script\";\nimport { LastTrades } from \"./lastTrades.ui\";\n\nexport const LastTradesWidget: React.FC<{\n symbol: string;\n classNames?: {\n root?: string;\n list?: string;\n listHeader?: string;\n listItem?: { left?: string; mid?: string; right?: string };\n };\n style?: React.CSSProperties;\n}> = (props) => {\n const state = useLastTradesScript(props.symbol);\n return (\n <LastTrades {...state} classNames={props.classNames} style={props.style} />\n );\n};\n","export { LastTrades } from \"./lastTrades.ui\";\nexport { LastTradesWidget } from \"./lastTrades.widget\";\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Button } from \"@kodiak-finance/orderly-ui\";\nimport { FaucetState } from \"./faucet.script\";\n\nexport function FaucetUi(props: FaucetState) {\n const { t } = useTranslation();\n\n if (!props.showFaucet) {\n return null;\n }\n\n return (\n <Button\n variant=\"outlined\"\n fullWidth\n size=\"md\"\n onClick={props.getFaucet}\n loading={props.loading}\n className=\"oui-text-primary-light oui-border-primary-light oui-rounded\"\n data-testid=\"oui-testid-assetView-getFaucet-button\"\n >\n {t(\"trading.faucet.getTestUSDC\")}\n </Button>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport {\n useAccount,\n useConfig,\n useMutation,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum, ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { isTestnet } from \"@kodiak-finance/orderly-utils\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useFaucetScript() {\n const { t } = useTranslation();\n const { connectedChain, namespace } = useWalletConnector();\n const { state, account } = useAccount();\n const config = useConfig();\n const operatorUrl = config.get<string>(\"operatorUrl\");\n\n const [getTestUSDC, { isMutating }] = useMutation(\n `${operatorUrl}/v1/faucet/usdc`\n );\n const [loading, setLoading] = useState<boolean>(false);\n\n const showFaucet = useMemo(() => {\n if (!connectedChain || !connectedChain.id) {\n return false;\n }\n return (\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected) &&\n isTestnet(parseInt(connectedChain.id as string))\n );\n }, [state, connectedChain]);\n\n const getFaucet = () => {\n if (loading) {\n return;\n }\n setLoading(true);\n const message = t(\"trading.faucet.getTestUSDC.success\", {\n quantity: namespace === ChainNamespace.solana ? \"100\" : \"1,000\",\n });\n\n return getTestUSDC({\n chain_id: account.walletAdapter?.chainId.toString(),\n user_address: state.address,\n broker_id: config.get(\"brokerId\"),\n }).then(\n (res) => {\n setLoading(false);\n if (res.success) {\n return modal.alert({\n title: t(\"trading.faucet.getTestUSDC\"),\n message,\n onOk: () => {\n return new Promise((resolve) => resolve(true));\n },\n });\n }\n res.message && toast.error(res.message);\n },\n (error: Error) => {\n toast.error(error.message);\n }\n );\n };\n return { getFaucet, showFaucet, loading };\n}\n\nexport type FaucetState = ReturnType<typeof useFaucetScript>;\n","import { FaucetUi } from \"./faucet.ui\";\nimport { useFaucetScript } from \"./faucet.script\";\n\nexport function FaucetWidget() {\n const state = useFaucetScript();\n return (\n <FaucetUi {...state}/>\n )\n}","import { FC, useMemo, useState, useCallback, ReactNode } from \"react\";\nimport { useAccount, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n Box,\n Button,\n ArrowDownShortIcon,\n EyeIcon,\n EyeCloseIcon,\n ChevronDownIcon,\n Tooltip,\n Divider,\n gradientTextVariants,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { LTVRiskTooltipWidget } from \"@kodiak-finance/orderly-ui-order-entry\";\nimport { AssetViewState } from \"./assetView.script\";\nimport { FaucetWidget } from \"./faucet/faucet.widget\";\n\ninterface StatusInfo {\n title: string;\n description: string;\n titleColor?: any;\n titleClsName?: string;\n}\n\ninterface TooltipContentProps {\n description: ReactNode;\n formula: ReactNode;\n}\n\ninterface TotalValueProps {\n totalValue?: number;\n visible?: boolean;\n onToggleVisibility?: () => void;\n}\n\ninterface AssetDetailProps {\n label: string;\n description?: ReactNode;\n formula?: ReactNode;\n visible: boolean;\n value?: number | string;\n unit?: string;\n rule?: \"percentages\";\n isConnected?: boolean;\n showPercentage?: boolean;\n placeholder?: string;\n}\n\ninterface AssetValueListProps {\n visible?: boolean;\n freeCollateral?: number | null;\n marginRatioVal?: number;\n renderMMR?: string | number;\n isConnected: boolean;\n currentLtv?: string | number;\n}\n\nconst calculateTextColor = (val: number): string => {\n if (val >= 0 && val < 50) {\n return \"oui-text-success\";\n } else if (val >= 50 && val < 80) {\n return \"oui-text-warning\";\n } else if (val >= 80) {\n return \"oui-text-danger\";\n } else {\n return \"\";\n }\n};\n\nconst useCurrentStatusText = (): StatusInfo => {\n const { state } = useAccount();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { t } = useTranslation();\n\n return useMemo(() => {\n const statusText = {\n wrongNetwork: {\n title: t(\"connector.wrongNetwork\"),\n description: t(\"connector.wrongNetwork.tooltip\"),\n titleColor: \"warning\",\n },\n connectWallet: {\n title: t(\"connector.connectWallet\"),\n description: t(\"connector.trade.connectWallet.tooltip\"),\n titleClsName:\n \"oui-text-transparent oui-bg-clip-text oui-gradient-brand\",\n },\n createAccount: {\n title: t(\"connector.createAccount\"),\n description: t(\"connector.trade.createAccount.tooltip\"),\n titleColor: \"primary\",\n },\n enableTrading: {\n title: t(\"connector.enableTrading\"),\n description: t(\"connector.trade.enableTrading.tooltip\"),\n titleColor: \"primary\",\n },\n empty: {\n title: \"\",\n description: \"\",\n },\n };\n\n if (disabledConnect) {\n return statusText.connectWallet;\n }\n\n if (wrongNetwork) {\n return statusText.wrongNetwork;\n }\n\n // EnableTradingWithoutConnected is enabled trading status, so we don't need to show anything\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return statusText.empty;\n }\n\n if (state.status <= AccountStatusEnum.NotConnected) {\n return statusText.connectWallet;\n }\n\n if (state.status <= AccountStatusEnum.NotSignedIn) {\n return statusText.createAccount;\n }\n\n if (state.status < AccountStatusEnum.EnableTrading) {\n return statusText.enableTrading;\n }\n\n return statusText.empty;\n }, [t, state.status, wrongNetwork, disabledConnect]);\n};\n\nexport const TooltipContent: FC<TooltipContentProps> = (props) => {\n const { description, formula } = props;\n return (\n <div className=\"oui-min-w-[204px] oui-max-w-[240px] oui-text-2xs oui-leading-normal oui-text-base-contrast-80\">\n {typeof description !== \"undefined\" && description !== null && (\n <span>{description}</span>\n )}\n <Divider className=\"oui-border-white/10\" my={2} />\n {typeof formula !== \"undefined\" && formula !== null && (\n <span>{formula}</span>\n )}\n </div>\n );\n};\n\nconst TotalValue: FC<TotalValueProps> = (props) => {\n const { t } = useTranslation();\n const { totalValue, visible = true, onToggleVisibility } = props;\n return (\n <Flex\n direction=\"column\"\n gap={1}\n className=\"oui-text-2xs\"\n itemAlign=\"center\"\n >\n <Text.numeral\n visible={visible}\n weight=\"bold\"\n size=\"2xl\"\n className={gradientTextVariants({ color: \"brand\" })}\n as=\"div\"\n padding={false}\n dp={2}\n >\n {totalValue ?? \"--\"}\n </Text.numeral>\n <Flex gap={1} itemAlign=\"center\">\n <Text size=\"2xs\" color=\"neutral\" weight=\"semibold\">\n {`${t(\"trading.asset.myAssets\")} (USDC)`}\n </Text>\n <button onClick={onToggleVisibility}>\n {visible ? (\n <EyeIcon size={18} className=\"oui-text-base-contrast-54\" />\n ) : (\n <EyeCloseIcon size={18} className=\"oui-text-base-contrast-54\" />\n )}\n </button>\n </Flex>\n </Flex>\n );\n};\n\nconst AssetDetail: FC<AssetDetailProps> = (props) => {\n const {\n label,\n description,\n formula,\n visible,\n value,\n unit,\n rule,\n placeholder,\n } = props;\n return (\n <Flex justify=\"between\">\n <Tooltip\n className={\"\"}\n content={<TooltipContent description={description} formula={formula} />}\n >\n <Text\n size=\"2xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n >\n {label}\n </Text>\n </Tooltip>\n <Text.numeral\n visible={visible}\n size=\"2xs\"\n unit={unit}\n unitClassName=\"oui-text-base-contrast-36 oui-ml-0.5\"\n as=\"div\"\n rule={rule}\n padding={false}\n dp={2}\n // suffix={value && unit}\n placeholder={placeholder}\n >\n {value || \"--\"}\n </Text.numeral>\n </Flex>\n );\n};\n\nconst LTVDetail: FC<Pick<AssetDetailProps, \"value\" | \"visible\">> = (props) => {\n const { visible, value } = props;\n const { t } = useTranslation();\n return (\n <Flex justify=\"between\">\n <Tooltip\n className={cn(\"oui-bg-base-6 oui-p-2\")}\n content={<LTVRiskTooltipWidget />}\n >\n <Text\n size=\"2xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n >\n {t(\"transfer.LTV\")}\n </Text>\n </Tooltip>\n <Text\n size=\"2xs\"\n className={cn(\n \"select-none\",\n visible && calculateTextColor(Number(value)),\n )}\n >\n {visible ? `${value}%` : \"*****\"}\n </Text>\n </Flex>\n );\n};\n\nconst AssetValueList: FC<AssetValueListProps> = (props) => {\n const {\n visible = true,\n freeCollateral,\n marginRatioVal,\n renderMMR,\n isConnected,\n currentLtv,\n } = props;\n\n const [optionsOpen, setOptionsOpen] = useLocalStorage(\n \"orderly_entry_asset_list_open\",\n false,\n );\n const [open, setOpen] = useState<boolean>(optionsOpen);\n\n const { t } = useTranslation();\n\n const toggleOpen = useCallback(() => {\n setOpen((prevOpen) => !prevOpen);\n setTimeout(() => {\n setOptionsOpen(!open);\n }, 0);\n }, []);\n\n const showLTV =\n typeof currentLtv === \"number\" &&\n !Number.isNaN(currentLtv) &&\n currentLtv > 0;\n\n return (\n <Box className=\"oui-group\">\n <Flex\n justify=\"center\"\n gap={1}\n itemAlign=\"center\"\n className=\"oui-cursor-pointer\"\n onClick={toggleOpen}\n >\n <Divider className=\"oui-flex-1\" />\n <ChevronDownIcon\n size={12}\n color=\"white\"\n className={cn(\"oui-transition-transform\", open && \"oui-rotate-180\")}\n />\n <Divider className=\"oui-flex-1\" />\n </Flex>\n <Box\n style={{ transform: \"translateZ(0)\" }}\n className={cn(\n \"oui-select-none oui-space-y-1.5 oui-overflow-hidden\",\n \"oui-transition-[max-height] oui-duration-150\",\n \"group-hover:oui-will-change-[max-height]\",\n open\n ? showLTV\n ? \"oui-max-h-[94px]\"\n : \"oui-max-h-[69px]\"\n : \"oui-max-h-0\",\n )}\n >\n <AssetDetail\n label={t(\"trading.asset.freeCollateral\")}\n description={t(\"trading.asset.freeCollateral.tooltip\")}\n formula={t(\"trading.asset.freeCollateral.formula\")}\n visible={visible}\n // TODO: change AssetDetail value\n value={freeCollateral! === 0 ? (\"0\" as any) : freeCollateral}\n unit=\"USDC\"\n />\n <AssetDetail\n label={t(\"trading.asset.marginRatio\")}\n description={t(\"trading.asset.marginRatio.tooltip\")}\n formula={t(\"trading.asset.marginRatio.formula\")}\n visible={visible}\n value={marginRatioVal}\n isConnected={isConnected}\n rule=\"percentages\"\n showPercentage={true}\n placeholder=\"--%\"\n />\n <AssetDetail\n label={t(\"trading.asset.maintenanceMarginRatio\")}\n description={t(\"trading.asset.maintenanceMarginRatio.tooltip\")}\n formula={t(\"trading.asset.maintenanceMarginRatio.formula\")}\n visible={visible}\n value={renderMMR}\n rule=\"percentages\"\n showPercentage={true}\n placeholder=\"--%\"\n />\n {showLTV && <LTVDetail visible={visible} value={currentLtv} />}\n </Box>\n </Box>\n );\n};\n\nexport const AssetView: FC<\n AssetViewState & { isFirstTimeDeposit?: boolean }\n> = ({\n networkId,\n isFirstTimeDeposit,\n totalValue,\n onDeposit,\n onWithdraw,\n onTransfer,\n toggleVisible,\n visible,\n freeCollateral,\n marginRatioVal,\n renderMMR,\n isConnected,\n isMainAccount,\n hasSubAccount,\n currentLtv,\n}) => {\n const { title, description, titleColor, titleClsName } =\n useCurrentStatusText();\n\n const { t } = useTranslation();\n\n const transferButton = hasSubAccount && (\n <Button\n fullWidth\n color=\"secondary\"\n size=\"md\"\n onClick={onTransfer}\n data-testid=\"oui-testid-assetView-transfer-button\"\n >\n <Text>{t(\"common.transfer\")}</Text>\n </Button>\n );\n\n const depositButton = isMainAccount && (\n <Button\n data-testid=\"oui-testid-assetView-deposit-button\"\n fullWidth\n size=\"md\"\n onClick={onDeposit}\n >\n {!hasSubAccount && <ArrowDownShortIcon color=\"white\" opacity={1} />}\n <Text>{t(\"common.deposit\")}</Text>\n </Button>\n );\n\n const withdrawButton = isMainAccount && (\n <Button\n fullWidth\n color=\"secondary\"\n size=\"md\"\n onClick={onWithdraw}\n data-testid=\"oui-testid-assetView-withdraw-button\"\n >\n {!hasSubAccount && (\n <ArrowDownShortIcon\n color=\"white\"\n opacity={1}\n className=\"oui-rotate-180\"\n />\n )}\n <Text>{t(\"common.withdraw\")}</Text>\n </Button>\n );\n\n return (\n <Box className=\"oui-relative\">\n {title && description && (\n <Flex direction=\"column\" gap={1} className=\"oui-mb-[32px]\">\n <Text\n size=\"lg\"\n weight=\"bold\"\n color={titleColor || \"inherit\"}\n className={titleClsName}\n >\n {title}\n </Text>\n <Text\n size=\"2xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className=\"oui-text-center\"\n >\n {description}\n </Text>\n </Flex>\n )}\n <AuthGuard\n networkId={networkId}\n buttonProps={{ size: \"md\", fullWidth: true }}\n >\n {isFirstTimeDeposit && isMainAccount ? (\n <>\n <Box>\n <Flex direction=\"column\" gap={1} className=\"oui-mb-[32px]\">\n <Text.gradient size=\"lg\" weight=\"bold\" color=\"brand\">\n {t(\"trading.asset.startTrading\")}\n </Text.gradient>\n <Text size=\"2xs\" color=\"neutral\" weight=\"semibold\">\n {t(\"trading.asset.startTrading.description\")}\n </Text>\n </Flex>\n </Box>\n <Button\n data-testid=\"oui-testid-assetView-deposit-button\"\n fullWidth\n size=\"md\"\n onClick={onDeposit}\n >\n <ArrowDownShortIcon color=\"white\" opacity={1} />\n <Text>{t(\"common.deposit\")}</Text>\n </Button>\n\n <Box className=\"oui-mt-3\">\n <FaucetWidget />\n </Box>\n </>\n ) : (\n <Box className=\"oui-space-y-4\">\n <TotalValue\n totalValue={totalValue}\n visible={visible}\n onToggleVisibility={toggleVisible}\n />\n <AssetValueList\n visible={visible}\n freeCollateral={freeCollateral}\n marginRatioVal={marginRatioVal}\n renderMMR={renderMMR}\n isConnected={isConnected}\n currentLtv={currentLtv}\n />\n <Flex\n gap={isMainAccount ? (hasSubAccount ? 2 : 3) : 0}\n itemAlign=\"center\"\n >\n {isMainAccount ? (\n <>\n {depositButton}\n {transferButton}\n {withdrawButton}\n </>\n ) : (\n transferButton\n )}\n </Flex>\n {isMainAccount && <FaucetWidget />}\n </Box>\n )}\n </AuthGuard>\n <div\n className={cn(\n \"oui-absolute oui-inset-0 oui-rotate-180\",\n \"oui-pointer-events-none oui-rounded-2xl oui-blur-[200px]\",\n )}\n style={{\n background:\n \"conic-gradient(from -40.91deg at 40.63% 50.41%, rgba(159, 115, 241, 0) -48.92deg, rgba(242, 98, 181, 0) 125.18deg, #5FC5FF 193.41deg, #FFAC89 216.02deg, #8155FF 236.07deg, #789DFF 259.95deg, rgba(159, 115, 241, 0) 311.08deg, rgba(242, 98, 181, 0) 485.18deg)\",\n }}\n />\n </Box>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n useAccountInstance,\n useEventEmitter,\n useLocalStorage,\n useAccount,\n useConfig,\n useCollateral,\n useMarginRatio,\n usePositionStream,\n useComputedLTV,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport {\n DepositAndWithdrawWithDialogId,\n TransferDialogId,\n} from \"@kodiak-finance/orderly-ui-transfer\";\n\nexport const useAssetViewScript = () => {\n const { t } = useTranslation();\n const account = useAccountInstance();\n const ee = useEventEmitter();\n\n const { totalValue } = useCollateral({\n dp: 2,\n });\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n const { state, isMainAccount } = useAccount();\n const { freeCollateral } = useCollateral({\n dp: 2,\n });\n const { marginRatio, mmr } = useMarginRatio();\n const isConnected = state.status >= AccountStatusEnum.Connected;\n const [{ aggregated }, positionsInfo] = usePositionStream();\n const marginRatioVal = useMemo(() => {\n return Math.min(\n 10,\n aggregated.notional === 0\n ? positionsInfo[\"margin_ratio\"](10)!\n : marginRatio,\n );\n }, [marginRatio, aggregated]);\n\n // const renderMMR = useMemo(() => {\n // if (!mmr) {\n // return \"\";\n // }\n // const bigMMR = new Decimal(mmr);\n // return bigMMR.mul(100).todp(2, 0).toFixed(2);\n // }, [mmr]);\n\n const openDepositAndWithdraw = useCallback(\n (viewName: \"deposit\" | \"withdraw\") => {\n // desktop always show dialog\n return modal.show(DepositAndWithdrawWithDialogId, {\n activeTab: viewName,\n });\n },\n [],\n );\n\n const onDeposit = useCallback(async () => {\n return openDepositAndWithdraw(\"deposit\");\n }, []);\n\n const onWithdraw = useCallback(async () => {\n return openDepositAndWithdraw(\"withdraw\");\n }, []);\n\n const onTransfer = useCallback(async () => {\n return modal.show(TransferDialogId);\n }, []);\n\n const onSettle = useCallback(async () => {\n return account\n .settle()\n .catch((e) => {\n if (e.code === -1104) {\n toast.error(t(\"settle.settlement.error\"));\n return Promise.reject(e);\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n }\n })\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\n });\n }, [account, t]);\n\n const [visible, setVisible] = useLocalStorage<boolean>(\n \"orderly_assets_visible\",\n true,\n );\n\n const toggleVisible = useCallback(() => {\n // @ts-ignore\n setVisible((visible: boolean) => {\n return !visible;\n });\n }, [visible]);\n\n const currentLtv = useComputedLTV();\n const _freeCollateral = useDataTap(freeCollateral) ?? undefined;\n const _marginRatioVal = useDataTap(marginRatioVal) ?? undefined;\n const _mmr = useDataTap(mmr) ?? undefined;\n const _totalValue = useDataTap(totalValue) ?? undefined;\n\n return {\n onDeposit,\n onWithdraw,\n onTransfer,\n onSettle,\n visible,\n toggleVisible,\n networkId,\n totalValue: _totalValue,\n status: state.status,\n freeCollateral: _freeCollateral,\n marginRatioVal: _marginRatioVal,\n renderMMR: _mmr,\n isConnected,\n isMainAccount,\n hasSubAccount: !!state.subAccounts?.length,\n currentLtv,\n };\n};\n\nexport type AssetViewState = ReturnType<typeof useAssetViewScript>;\n","import React from \"react\";\nimport { useAssetViewScript } from \"./assetView.script\";\nimport { AssetView } from \"./assetView.ui\";\n\ntype AssetViewWidgetProps = {\n isFirstTimeDeposit?: boolean;\n};\n\nexport const AssetViewWidget: React.FC<AssetViewWidgetProps> = (props) => {\n const state = useAssetViewScript();\n return <AssetView {...state} isFirstTimeDeposit={props.isFirstTimeDeposit} />;\n};\n","export { AssetView } from \"./assetView.ui\";\nexport { AssetViewWidget } from \"./assetView.widget\";\n","import React, {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useState,\n} from \"react\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport { QtyMode, TotalMode } from \"./types\";\n\nexport interface OrderBookContextValue {\n cellHeight: number;\n mode: QtyMode;\n depth?: string;\n onModeChange?: (mode: QtyMode) => void;\n onItemClick?: (item: number[]) => void;\n showTotal: boolean;\n totalMode: TotalMode;\n pendingOrders: ReadonlyArray<number> | number[];\n onTotalModeChange?: (mode: TotalMode) => void;\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const OrderBookContext = createContext({\n cellHeight: 22,\n} as OrderBookContextValue);\n\nexport const useOrderBookContext = () => useContext(OrderBookContext);\n\nexport const ORDERBOOK_COIN_TYPE_KEY = \"orderbook_coin_type\";\n\nexport const ORDERBOOK_MOBILE_COIN_TYPE_KEY = \"orderbook_mobile_coin_unit\";\n\ninterface OrderBookProviderProps {\n cellHeight: number;\n depth?: string;\n showTotal: boolean;\n pendingOrders: ReadonlyArray<number> | number[];\n onItemClick?: (item: number[]) => void;\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const OrderBookProvider: FC<\n PropsWithChildren<OrderBookProviderProps>\n> = (props) => {\n const [mode, setMode] = useState<QtyMode>(\"quantity\");\n const [totalMode, setTotalMode] = useState<QtyMode>(\"quantity\");\n const memoizedValue = React.useMemo<OrderBookContextValue>(() => {\n return {\n cellHeight: props.cellHeight,\n onItemClick: props.onItemClick,\n mode,\n totalMode: totalMode || \"quantity\",\n depth: props.depth,\n onModeChange: setMode,\n onTotalModeChange: setTotalMode,\n showTotal: props.showTotal || false,\n pendingOrders: props.pendingOrders,\n symbolInfo: props.symbolInfo,\n };\n }, [\n mode,\n props.cellHeight,\n props.depth,\n props.onItemClick,\n props.pendingOrders,\n props.showTotal,\n props.symbolInfo,\n totalMode,\n ]);\n return (\n <OrderBookContext.Provider value={memoizedValue}>\n {props.children}\n </OrderBookContext.Provider>\n );\n};\n","export type QtyMode = \"quantity\" | \"amount\";\nexport type TotalMode = \"quantity\" | \"amount\";\n\nexport enum OrderBookCellType {\n BID = \"bid\",\n ASK = \"ask\",\n}\n","import { cn } from \"@kodiak-finance/orderly-ui\";\nimport { FC, useMemo } from \"react\";\n\nexport enum CellBarDirection {\n LEFT_TO_RIGHT,\n RIGHT_TO_LEFT,\n}\n\ninterface CellBarProps {\n width: number;\n className?: string;\n direction?: CellBarDirection\n}\n\nexport const CellBar: FC<CellBarProps> = (props) => {\n const { direction = CellBarDirection.RIGHT_TO_LEFT } = props;\n const transform = useMemo(() => {\n const x = Math.max(props.width, 0);\n if (direction === CellBarDirection.LEFT_TO_RIGHT) {\n return { transform: `translateX(${x}%)` };\n }\n return { transform: `translateX(-${x}%)` };\n \n }, [props.width]);\n\n return (\n <div\n className={cn(\n \"oui-absolute oui-right-[-100%] oui-top-0 oui-h-full oui-w-full oui-transition-transform oui-pointer-events-none\",\n direction === CellBarDirection.LEFT_TO_RIGHT && \"oui-left-[-100%]\",\n props.className\n )}\n style={transform}\n />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { cn, Divider, parseNumber, Text } from \"@kodiak-finance/orderly-ui\";\nimport { getPrecisionByNumber } from \"@kodiak-finance/orderly-utils\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport { CellBar, CellBarDirection } from \"../../base/orderBook/cellBar\";\nimport {\n ORDERBOOK_COIN_TYPE_KEY,\n useOrderBookContext,\n} from \"../../base/orderBook/orderContext\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\n\nexport interface DesktopOrderBookCellProps {\n background: string;\n maxQty: number;\n price: number;\n quantity: number;\n // size: number;\n count: number;\n accumulated: number;\n accumulatedAmount: number;\n type: OrderBookCellType;\n symbolInfo: BasicSymbolInfo;\n base: string;\n quote: string;\n isHover: boolean;\n currentHover: boolean;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n}\n\nexport const DesktopOrderBookCell: FC<DesktopOrderBookCellProps> = (props) => {\n const { cellHeight, showTotal, onItemClick, depth, pendingOrders } =\n useOrderBookContext();\n const {\n symbolInfo,\n currentHover,\n accumulated,\n accumulatedAmount,\n count,\n price,\n quantity,\n base,\n quote,\n } = props;\n\n const { base_dp, quote_dp } = symbolInfo;\n\n const [coinType] = useLocalStorage<string>(ORDERBOOK_COIN_TYPE_KEY, base);\n\n const width = Number.isNaN(price) ? 0 : (accumulated / count) * 100;\n\n const dp = useMemo(() => {\n return getPrecisionByNumber(depth || `${quote_dp}`);\n }, [depth, quote_dp]);\n\n const totalAmount = Number.isNaN(accumulated)\n ? \"-\"\n : accumulatedAmount?.toString();\n\n const isPendingOrder = useMemo(() => {\n const priceStr = parseNumber(price, { dp: dp, padding: true });\n return pendingOrders.some(\n (item) => priceStr === parseNumber(item, { dp: dp, padding: true }),\n );\n }, [pendingOrders, price, dp]);\n\n return (\n <div\n className=\"oui-relative oui-flex oui-cursor-pointer oui-flex-row oui-justify-between oui-pl-3 oui-text-xs oui-tabular-nums oui-text-base-contrast-80\"\n style={{ height: `${cellHeight}px` }}\n onClick={() => {\n if (Number.isNaN(price) || Number.isNaN(quantity)) {\n return;\n }\n onItemClick?.([price, quantity]);\n }}\n onMouseEnter={props.onMouseEnter}\n onMouseLeave={props.onMouseLeave}\n >\n <div\n className={cn(\n \"oui-mr-2 oui-flex oui-basis-7/12 oui-flex-row oui-items-center\",\n showTotal && \"oui-basis-5/12\",\n )}\n >\n <div\n className={cn(\n \"oui-flex-1 oui-text-left\",\n props.type === OrderBookCellType.ASK\n ? \"oui-text-trade-loss\"\n : \"oui-text-trade-profit\",\n )}\n >\n <Text.numeral dp={dp}>{price}</Text.numeral>\n </div>\n <div className=\"oui-flex-1 oui-text-right oui-text-base-contrast-80\">\n <Text.numeral dp={base_dp}>{quantity}</Text.numeral>\n </div>\n </div>\n <div\n className={cn(\n \"oui-fex-row oui-relative oui-flex oui-basis-5/12 oui-items-center oui-justify-end oui-overflow-hidden\",\n showTotal && \"oui-basis-7/12\",\n )}\n >\n {showTotal ? (\n <>\n <div className={cn(\"oui-flex-1 oui-pr-3 oui-text-right\")}>\n <Text.numeral dp={base_dp} className=\"oui-z-10\">\n {accumulated}\n </Text.numeral>\n </div>\n <div className={cn(\"oui-flex-1 oui-pr-3 oui-text-right\")}>\n <Text.numeral dp={0} className=\"oui-z-10\">\n {totalAmount}\n </Text.numeral>\n </div>\n </>\n ) : (\n <div className={cn(\"oui-flex-1 oui-pr-3 oui-text-right\")}>\n {coinType === base && (\n <Text.numeral dp={base_dp} className=\"oui-z-10\">\n {accumulated}\n </Text.numeral>\n )}\n {coinType === quote && (\n <Text.numeral dp={0} className=\"oui-z-10\">\n {totalAmount}\n </Text.numeral>\n )}\n </div>\n )}\n <CellBar\n width={width}\n direction={CellBarDirection.LEFT_TO_RIGHT}\n className={\n props.type === OrderBookCellType.ASK\n ? \"oui-bg-trade-loss/10\"\n : \"oui-bg-trade-profit/10\"\n }\n />\n </div>\n\n {isPendingOrder && (\n <div\n className={cn(\n \"oui-pointer-events-none oui-absolute oui-left-[4px] oui-size-[4px] oui-rounded-full\",\n props.type === OrderBookCellType.ASK && \"oui-bg-trade-loss\",\n props.type === OrderBookCellType.BID && \"oui-bg-trade-profit\",\n )}\n style={{ top: `${cellHeight / 2 - 2}px` }}\n />\n )}\n\n {props.isHover && (\n <div className=\"oui-absolute oui-inset-0 oui-bg-white oui-opacity-[.12]\" />\n )}\n {currentHover && (\n <div\n className={cn(\n \"oui-absolute oui-inset-x-0\",\n props.type === OrderBookCellType.ASK && \"oui-top-0\",\n props.type === OrderBookCellType.BID && \"oui-bottom-0\",\n )}\n >\n <Divider\n lineStyle=\"dashed\"\n className={cn(\n \"oui-w-full\",\n props.type === OrderBookCellType.BID && \"oui-border-trade-profit\",\n props.type === OrderBookCellType.ASK && \"oui-border-trade-loss\",\n )}\n />\n </div>\n )}\n </div>\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n TooltipContent,\n TooltipTrigger,\n Text,\n TooltipRoot,\n TooltipArrow,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport { useOrderBookContext } from \"../../base/orderBook/orderContext\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { DesktopOrderBookCell } from \"./cell.desktop\";\n\ninterface DesktopListBoxProps {\n type: OrderBookCellType;\n data: number[][];\n countQty: number;\n}\n\nconst calcHintInfo = (item: number[] | null) => {\n if (!item) {\n return { sumQty: 0, sumQtyAmount: 0, avgPrice: 0 };\n }\n const [, , qty, amount] = item;\n const sumQty = !Number.isNaN(qty) ? qty : 0;\n const sumQtyAmount = !Number.isNaN(amount) ? amount : 0;\n return {\n sumQty: sumQty,\n sumQtyAmount: sumQtyAmount,\n avgPrice:\n sumQtyAmount === 0 || sumQty === 0\n ? 0\n : new Decimal(sumQtyAmount).div(sumQty).toNumber(),\n };\n};\n\nexport const DesktopListBox: React.FC<DesktopListBoxProps> = (props) => {\n const { data, type, countQty } = props;\n const { symbolInfo, depth } = useOrderBookContext();\n\n const findMaxItem = useCallback(() => {\n if (!data?.length) {\n return null;\n }\n if (type === OrderBookCellType.ASK) {\n const index = data.findIndex((item) => !Number.isNaN(item[0]));\n if (index !== -1) {\n return data[index];\n }\n return null;\n } else {\n const len = data.length;\n for (let index = len - 1; index >= 0; index--) {\n const item = data[index];\n if (!Number.isNaN(item[0])) {\n return item;\n }\n }\n return null;\n }\n }, [data, type]);\n\n const priceDp = useMemo(() => {\n if (depth?.toString().includes(\".\")) {\n return depth.toString().split(\".\")[1].length;\n }\n return 0;\n }, [depth]);\n\n const maxQty = useMemo(() => {\n return data.reduce((a, b) => Math.max(a, b[1]), 0);\n }, [data]);\n\n const [hoverIndex, setHoverIndex] = useState<number>(-1);\n\n return (\n <div className=\"oui-order-book-list oui-flex oui-flex-col oui-gap-px\">\n {data.map((item, index) => {\n return (\n <Tip\n key={index}\n index={index}\n item={item}\n countQty={countQty}\n setHoverIndex={setHoverIndex}\n hoverIndex={hoverIndex}\n type={type}\n maxQty={maxQty}\n priceDp={priceDp}\n symbolInfo={symbolInfo}\n findMaxItem={findMaxItem}\n />\n );\n })}\n </div>\n );\n};\n\nconst Tip: React.FC<{\n index: number;\n item: any;\n countQty: number;\n setHoverIndex: any;\n type: OrderBookCellType;\n maxQty: number;\n hoverIndex: number;\n priceDp: number;\n // base: any;\n // quote: any;\n // baseDp: number;\n // quoteDp: number;\n findMaxItem: () => number[] | null;\n symbolInfo: BasicSymbolInfo;\n}> = (props) => {\n const {\n index,\n item,\n setHoverIndex,\n type,\n maxQty,\n hoverIndex,\n priceDp,\n countQty,\n symbolInfo,\n findMaxItem,\n } = props;\n\n const { base, quote, base_dp: baseDp, quote_dp: quoteDp } = symbolInfo;\n const { t } = useTranslation();\n\n const isHover =\n hoverIndex !== -1\n ? type === OrderBookCellType.ASK\n ? index >= hoverIndex\n : index <= hoverIndex\n : false;\n\n const [open, setOpen] = useState(false);\n\n const hintInfo = useMemo(() => {\n const info = calcHintInfo(item);\n return info.avgPrice === 0 ? calcHintInfo(findMaxItem()) : info;\n }, [item, findMaxItem]);\n\n return (\n <TooltipRoot open={open} onOpenChange={setOpen}>\n <TooltipTrigger>\n <DesktopOrderBookCell\n background={\"\"}\n price={item[0]}\n quantity={item[1]}\n accumulated={item[2]}\n count={countQty}\n type={type}\n accumulatedAmount={item[3]}\n maxQty={maxQty}\n isHover={isHover}\n currentHover={hoverIndex === index}\n symbolInfo={symbolInfo}\n base={base}\n quote={quote}\n onMouseEnter={() => {\n setHoverIndex(index);\n setOpen(true);\n }}\n onMouseLeave={() => {\n setHoverIndex(-1);\n setOpen(false);\n }}\n />\n </TooltipTrigger>\n <TooltipContent\n className={cn(\n \"oui-rounded-base oui-flex oui-w-full oui-max-w-[400px] oui-flex-col oui-gap-2 oui-bg-base-6 oui-p-3 oui-text-2xs oui-shadow-md\",\n // type === OrderBookCellType.ASK ? `oui-mb-${30}` : \"oui-mt-0\"\n )}\n align={type === OrderBookCellType.ASK ? \"end\" : \"start\"}\n alignOffset={-25.4}\n side=\"left\"\n sideOffset={2}\n onPointerEnter={(e) => e.preventDefault()}\n >\n <Row\n title={`${t(\"common.avgPrice\")}≈`}\n content={hintInfo.avgPrice}\n // contentDp={priceDp}\n contentDp={quoteDp}\n />\n <Row\n title={`${t(\"trading.orderBook.sum\")} (${base})`}\n content={hintInfo.sumQty}\n contentDp={baseDp}\n />\n <Row\n title={`${t(\"trading.orderBook.sum\")} (${quote})`}\n content={hintInfo.sumQtyAmount}\n contentDp={quoteDp}\n />\n <TooltipArrow\n className=\"oui-fill-base-6\"\n style={{\n transform:\n type === OrderBookCellType.ASK\n ? \"translateX(80%)\"\n : \"translateX(-80%)\",\n }}\n />\n </TooltipContent>\n </TooltipRoot>\n );\n};\n\nconst Row: React.FC<{ title: string; content: number; contentDp: number }> = (\n props,\n) => {\n const { title, content, contentDp } = props;\n return (\n <div className=\"oui-flex oui-flex-row oui-justify-between oui-gap-4\">\n <div className=\"oui-select-none oui-text-base-contrast-36\">{title}</div>\n <div className=\"oui-text-end\">\n <Text.numeral dp={contentDp}>{content}</Text.numeral>\n </div>\n </div>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { DesktopListBox } from \"./listBox.desktop\";\n\nexport interface Props {\n data: number[][];\n}\n\nexport const DesktopAsks: FC<Props> = (props) => {\n const { data } = props;\n const countQty = useMemo(() => {\n let max = Number.NaN;\n const len = data.length;\n let index = 0;\n\n while (Number.isNaN(max) && index < len) {\n max = data[index][2];\n index++;\n }\n\n return max;\n }, [data]);\n\n return (\n <DesktopListBox\n type={OrderBookCellType.ASK}\n data={data}\n countQty={countQty}\n />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { DesktopListBox } from \"./listBox.desktop\";\n\nexport interface Props {\n data: any[];\n}\n\nexport const DesktopBids: FC<Props> = (props) => {\n const { data } = props;\n const countQty = useMemo(() => {\n let max = Number.NaN;\n // let len = data.length;\n let index = data.length - 1;\n\n while (Number.isNaN(max) && index > 0) {\n max = data[index][2];\n index--;\n }\n\n return max;\n // return data.length > 0 ? data[data.length - 1][2] : 0;\n }, [data]);\n return (\n <DesktopListBox\n type={OrderBookCellType.BID}\n data={data}\n countQty={countQty}\n />\n );\n};\n","import { Box, Select } from \"@kodiak-finance/orderly-ui\";\nimport { FC, useMemo } from \"react\";\n\ninterface DesktopDepthSelectProps {\n depths: string[];\n value?: string;\n onChange?: (depth: number) => void;\n}\n\nexport const DesktopDepthSelect: FC<DesktopDepthSelectProps> = (props) => {\n const options = useMemo(() => {\n return props.depths.map((d) => ({\n value: d,\n label: `${d}`,\n }));\n }, [props.depths]);\n\n return (\n <Box pl={3} width={97} className=\"oui-py-[10px]\">\n <Select.options\n options={options}\n size={\"xs\"}\n value={props.value}\n onValueChange={(value: any) => {\n props.onChange?.(value);\n }}\n />\n </Box>\n );\n};\n","import React, { FC, ReactNode } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n CaretDownIcon,\n CaretUpIcon,\n cn,\n Flex,\n Popover,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n ORDERBOOK_COIN_TYPE_KEY,\n useOrderBookContext,\n} from \"../../base/orderBook/orderContext\";\n\ninterface DesktopHeaderProps {\n quote: string;\n base: string;\n}\n\nconst Option: React.FC<{\n item: string;\n base: string;\n onClick: React.MouseEventHandler<HTMLElement>;\n}> = (props) => {\n const { item, base, onClick } = props;\n const { t } = useTranslation();\n const [coinType, setCoinType] = useLocalStorage(\n ORDERBOOK_COIN_TYPE_KEY,\n base,\n );\n return (\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-w-full oui-px-2 oui-py-[3px]\",\n \"oui-cursor-pointer\",\n \"oui-text-xs\",\n \"oui-text-base-contrast-54\",\n \"hover:oui-bg-base-6\",\n \"oui-rounded-[3px]\",\n \"oui-transition-all\",\n coinType === item && \"oui-bg-base-5\",\n )}\n onClick={(e) => {\n setCoinType(item);\n onClick(e);\n }}\n >\n {t(\"common.total\")}({item})\n <div\n className={cn(\n \"oui-transition-all\",\n \"oui-w-1\",\n \"oui-h-1\",\n \"oui-rounded-full\",\n \"oui-bg-gradient-to-r\",\n coinType === item &&\n \"oui-from-[rgb(var(--oui-gradient-brand-start))] oui-to-[rgb(var(--oui-gradient-brand-end))]\",\n )}\n />\n </Flex>\n );\n};\n\nexport const DesktopHeader: FC<DesktopHeaderProps> = (props) => {\n const { base, quote = \"USDC\" } = props;\n const { showTotal } = useOrderBookContext();\n const { t } = useTranslation();\n const [popoverOpen, setOpen] = React.useState<boolean>(false);\n const [coinType] = useLocalStorage(ORDERBOOK_COIN_TYPE_KEY, base);\n const TriggerIcon = popoverOpen ? CaretUpIcon : CaretDownIcon;\n return (\n <Flex pl={3} justify={\"between\"} className=\"oui-py-[6px]\">\n <Flex\n gap={1}\n className={cn(\"oui-basis-7/12\", showTotal && \"oui-basis-1/2\")}\n >\n <Box width={\"100%\"}>\n <Title\n id=\"oui-order-book-header-price\"\n className=\"oui-text-base-contrast-36\"\n >\n {`${t(\"common.price\")}(${quote})`}\n </Title>\n </Box>\n <Box width={\"100%\"}>\n <Title\n justifyEnd\n id=\"oui-order-book-header-qty\"\n className=\"oui-text-base-contrast-36\"\n >\n {`${t(\"common.qty\")}(${base})`}\n </Title>\n </Box>\n </Flex>\n <Flex\n gap={1}\n pr={3}\n className={cn(\"oui-basis-5/12\", showTotal && \"oui-basis-1/2\")}\n >\n {showTotal ? (\n <>\n <Box className=\"oui-text-base-contrast-36\" width={\"100%\"}>\n <Title id=\"oui-order-book-header-total-quote\" justifyEnd>\n {`${t(\"common.total\")}(${base})`}\n </Title>\n </Box>\n <Box className=\"oui-text-base-contrast-36\" width={\"100%\"}>\n <Title justifyEnd id=\"oui-order-book-header-total-base\">\n {`${t(\"common.total\")}(${quote})`}\n </Title>\n </Box>\n </>\n ) : (\n <Box width={\"100%\"}>\n <Popover\n open={popoverOpen}\n onOpenChange={setOpen}\n contentProps={{ className: cn(\"oui-w-28 oui-p-1\") }}\n content={\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n className={cn(\"oui-w-full oui-gap-0.5\")}\n >\n {[base, quote].map((item) => {\n return (\n <Option\n key={`type-${item}`}\n item={item}\n base={base}\n onClick={() => setOpen(false)}\n />\n );\n })}\n </Flex>\n }\n >\n <Flex\n justify=\"end\"\n itemAlign=\"center\"\n className=\"oui-cursor-pointer oui-select-none oui-text-base-contrast-36 oui-transition-all hover:oui-text-base-contrast\"\n >\n <Title justifyEnd id=\"oui-order-book-header-total-base\">\n {`${t(\"common.total\")}(${coinType})`}\n </Title>\n <TriggerIcon\n color=\"inherit\"\n className=\"oui-size-4 oui-text-3xs\"\n />\n </Flex>\n </Popover>\n </Box>\n )}\n </Flex>\n </Flex>\n );\n};\n\nconst Title: FC<{\n justifyEnd?: boolean;\n id?: string;\n children: ReactNode;\n className?: string;\n}> = (props) => {\n const { children, className, justifyEnd = false } = props;\n return (\n <Flex\n id={props.id}\n className={cn(\n className,\n \"oui-items-end oui-text-xs\",\n justifyEnd && \"oui-justify-end\",\n )}\n >\n {children}\n </Flex>\n );\n};\n","import {\n ArrowDownShortIcon,\n ArrowUpShortIcon,\n Box,\n cn,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { FC } from \"react\";\n\n/**\n * default style is desktop effect\n */\nexport const MiddlePriceView: FC<{\n markPrice: number;\n lastPrice: number[];\n quote_dp: number;\n className?: string;\n iconSize?: number;\n}> = (props) => {\n const {\n markPrice = 0,\n lastPrice,\n quote_dp,\n className,\n iconSize = 18,\n } = props;\n\n const [prevLastPrice, middlePrice] = lastPrice;\n\n const down = middlePrice < prevLastPrice;\n const up = middlePrice > prevLastPrice;\n\n return (\n <Flex\n gap={1}\n className={cn(\n up ? \"oui-text-trade-profit\" : down ? \"oui-text-trade-loss\" : \"\",\n className\n )}\n >\n <Text.numeral dp={quote_dp} intensity={98}>\n {middlePrice}\n </Text.numeral>\n <Box width={19}>\n {down && (\n <ArrowDownShortIcon size={iconSize} color=\"danger\" opacity={1} />\n )}\n {up && <ArrowUpShortIcon size={iconSize} color=\"success\" opacity={1} />}\n </Box>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Tooltip,\n cn,\n Flex,\n Text,\n SimpleDialog,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\n/**\n * default style is desktop effect\n */\nexport const MarkPriceView: FC<{\n markPrice: number;\n quote_dp: number;\n className?: string;\n iconSize?: number;\n}> = (props) => {\n const { isMobile } = useScreen();\n\n return isMobile ? <MobileLayout {...props} /> : <DesktopLayout {...props} />;\n};\n\nconst DesktopLayout: FC<{\n markPrice: number;\n quote_dp: number;\n className?: string;\n iconSize?: number;\n}> = (props) => {\n const { quote_dp, className, iconSize = 18 } = props;\n const { t } = useTranslation();\n return (\n <Tooltip\n content={t(\"trading.orderBook.markPrice.tooltip\")}\n className=\"oui-max-w-[270px]\"\n >\n <Flex\n gap={1}\n className={cn(\"oui-cursor-pointer oui-text-2xs\", className)}\n >\n <FlagIcon size={iconSize} />\n <Text.numeral\n dp={quote_dp}\n color=\"warning\"\n className=\"oui-underline oui-text-base oui-decoration-dashed oui-decoration-1 oui-underline-offset-4 oui-decoration-warning-darken\"\n >\n {props.markPrice}\n </Text.numeral>\n </Flex>\n </Tooltip>\n );\n};\n\nconst MobileLayout: FC<{\n markPrice: number;\n quote_dp: number;\n className?: string;\n iconSize?: number;\n}> = (props) => {\n const { quote_dp, className, iconSize = 18 } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n return (\n <>\n <Flex\n gap={1}\n className={cn(\"oui-cursor-pointer oui-text-2xs\", className)}\n onClick={() => {\n setOpen(true);\n }}\n >\n <FlagIcon size={iconSize} />\n <Text.numeral\n dp={quote_dp}\n color=\"warning\"\n className=\"oui-underline oui-decoration-dashed oui-decoration-1 oui-underline-offset-4 oui-decoration-warning-darken\"\n >\n {props.markPrice}\n </Text.numeral>\n </Flex>\n <SimpleDialog\n size=\"xs\"\n open={open}\n onOpenChange={setOpen}\n title={t(\"common.tips\")}\n actions={{\n primary: {\n label: t(\"common.ok\"),\n onClick: () => setOpen(false),\n },\n }}\n >\n <Text>{t(\"trading.orderBook.markPrice.tooltip\")}</Text>\n </SimpleDialog>\n </>\n );\n};\n\nconst FlagIcon = (props: { size: number }) => {\n return (\n <svg\n width={props.size}\n height={props.size}\n viewBox=\"0 0 18 18\"\n fill=\"currenColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-warning-darken\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.75 1.5a.75.75 0 0 1 .75.75h6a.75.75 0 0 1 .75.75v1.5h3a.75.75 0 0 1 .75.75V12a.75.75 0 0 1-.75.75H7.5a.75.75 0 0 1-.75-.75v-1.5H4.5v5.25a.75.75 0 0 1-1.5 0V2.25a.75.75 0 0 1 .75-.75M4.5 9h5.25V3.75H4.5zm6.75-3v3.75a.75.75 0 0 1-.75.75H8.25v.75h5.25V6z\"\n // fill=\"#FF7D00\"\n />\n </svg>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { cn, Flex, Text, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport { useOrderBookContext } from \"../../base/orderBook/orderContext\";\nimport { MiddlePriceView } from \"../../base/orderBook/midPriceView\";\nimport { MarkPriceView } from \"../../base/orderBook/markPrice\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\ninterface DesktopMarkPriceProps {\n markPrice: number;\n lastPrice: number[];\n asks: number[][];\n bids: number[][];\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const DesktopMarkPrice: FC<DesktopMarkPriceProps> = (props) => {\n const { markPrice = 0, lastPrice, asks, bids, symbolInfo } = props;\n const { showTotal } = useOrderBookContext();\n\n return (\n <div className=\"oui-flex oui-flex-row oui-pl-3 oui-tabular-nums oui-justify-between oui-text-base-contrast-80 oui-text-xs oui-relative oui-cursor-pointer oui-py-[6px]\">\n <div\n className={cn(\n \"oui-basis-7/12 oui-flex oui-flex-row oui-items-center oui-mr-2 oui-justify-between\",\n showTotal && \"oui-basis-5/12\"\n )}\n >\n <MiddlePriceView\n markPrice={markPrice}\n lastPrice={lastPrice}\n quote_dp={symbolInfo.quote_dp}\n className=\"oui-text-base\"\n />\n <MarkPriceView markPrice={markPrice} quote_dp={symbolInfo.quote_dp} />\n </div>\n <div\n className={cn(\n \"oui-basis-5/12 oui-flex oui-items-center oui-fex-row oui-overflow-hidden oui-relative oui-justify-end\",\n showTotal && \"oui-basis-7/12\",\n \"oui-pr-3\"\n )}\n >\n <Spread asks={asks} bids={bids} />\n </div>\n </div>\n );\n};\n\nconst Spread: FC<{\n asks: number[][];\n bids: number[][];\n}> = (props) => {\n const { asks, bids } = props;\n\n const { t } = useTranslation();\n\n const spread = useMemo(() => {\n if (bids.length === 0 && asks.length === 0) {\n return 0;\n }\n const bid1 = Number.isNaN(bids[0][0]) ? 0 : bids[0][0];\n const index = asks.reverse().findIndex((item) => !Number.isNaN(item[0]));\n\n let ask1 = 0.0;\n if (index !== -1) {\n ask1 = Number.isNaN(asks[index][0]) ? 0 : asks[index][0];\n }\n const dValue = new Decimal(ask1)\n .sub(bid1)\n .div(new Decimal(ask1).add(bid1).div(2));\n // 0.00006416604461251195\n // 0.000065\n // 0.0065\n return Math.ceil(dValue.toNumber() * 1000000 + 0.1) / 10000;\n }, [asks, bids]);\n\n return (\n <div>\n <Tooltip\n content={t(\"trading.orderBook.spreadRatio.tooltip\")}\n className=\"oui-max-w-[240px]\"\n >\n <Text\n size=\"2xs\"\n intensity={36}\n className={\n \"oui-cursor-pointer oui-underline oui-decoration-dashed oui-decoration-1 oui-underline-offset-4 oui-decoration-base-contrast-36\"\n }\n >\n {`${spread}%`}\n </Text>\n </Tooltip>\n </div>\n );\n};\n","import { FC, useEffect, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { cn, Grid, Spinner } from \"@kodiak-finance/orderly-ui\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport {\n ORDERBOOK_COIN_TYPE_KEY,\n OrderBookProvider,\n} from \"../../base/orderBook/orderContext\";\nimport { DesktopAsks } from \"./asks.desktop\";\nimport { DesktopBids } from \"./bids.desktop\";\nimport { DesktopDepthSelect } from \"./depthSelect.desktop\";\nimport { DesktopHeader } from \"./header.desktop\";\nimport { DesktopMarkPrice } from \"./markPrice.desktop\";\n\nexport interface DesktopOrderBookProps {\n asks: any[];\n bids: any[];\n markPrice: number;\n lastPrice: number[];\n onItemClick?: (item: number[]) => void;\n depths: string[];\n activeDepth?: string;\n onDepthChange?: (depth: number) => void;\n //\n autoSize?: boolean;\n level?: number;\n base: string;\n quote: string;\n\n isLoading?: boolean;\n\n cellHeight?: number;\n\n className?: string;\n pendingOrders?: number[];\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const DesktopOrderBook: FC<DesktopOrderBookProps> = (props) => {\n const { lastPrice, markPrice, quote, base, isLoading, onDepthChange } = props;\n\n const divRef = useRef<HTMLDivElement>(null);\n\n const [showTotal, setShowTotal] = useState(false);\n\n const [coinType, setCoinType] = useLocalStorage(\n ORDERBOOK_COIN_TYPE_KEY,\n base,\n );\n\n useEffect(() => {\n if (coinType !== quote && base) {\n setCoinType(base);\n }\n }, [base, quote]);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { inlineSize: width } = entry.borderBoxSize[0];\n setShowTotal(width >= 360);\n }\n });\n\n const targetDiv = divRef.current;\n\n if (targetDiv) {\n resizeObserver.observe(targetDiv);\n }\n\n return () => {\n if (targetDiv) {\n resizeObserver.unobserve(targetDiv);\n }\n };\n }, []);\n\n return (\n <OrderBookProvider\n cellHeight={props.cellHeight ?? 20}\n onItemClick={props.onItemClick}\n depth={props.activeDepth}\n showTotal={showTotal}\n pendingOrders={props.pendingOrders || EMPTY_LIST}\n symbolInfo={props.symbolInfo}\n >\n <Grid\n cols={1}\n rows={5}\n id=\"oui-orderbook-desktop\"\n ref={divRef}\n className=\"oui-relative oui-size-full oui-grid-rows-[auto,auto,1fr,auto,1fr]\"\n >\n <DesktopDepthSelect\n depths={props.depths}\n value={props.activeDepth}\n onChange={onDepthChange}\n />\n <DesktopHeader quote={quote} base={base} />\n <DesktopAsks data={[...props.asks]} />\n <DesktopMarkPrice\n lastPrice={lastPrice}\n markPrice={markPrice}\n // ======================================================================\n // == 🔥🔥🔥🔥🔥🔥🔥 DO NOT MODIFY THIS 🔥🔥🔥🔥🔥🔥🔥 ==\n // ======================================================================\n // Use shallow copy here to avoid mutating the original props array when sorting or modifying inside the component.\n // Note: This only clones the array itself, not the element objects.\n asks={[...props.asks]}\n bids={[...props.bids]}\n symbolInfo={props.symbolInfo}\n />\n <DesktopBids data={[...props.bids]} />\n {isLoading && (\n <div className=\"oui-bg-bg-8/70 oui-absolute oui-inset-0 oui-z-10 oui-flex oui-items-center oui-justify-center\">\n <Spinner />\n </div>\n )}\n </Grid>\n </OrderBookProvider>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { FundingRateState } from \"./fundingRate.script\";\n\nexport const FundingRate: FC<FundingRateState> = (props) => {\n const { data, onClick } = props;\n const predFundingRate = data.est_funding_rate;\n const countDown = data.countDown;\n const { t } = useTranslation();\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"} pb={2}>\n <Text\n size=\"2xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n onClick={onClick}\n >\n {t(\"trading.fundingRate.predFundingRate\")}\n </Text>\n {predFundingRate === null ? (\n \"--\"\n ) : (\n <div className=\"orderly-flex orderly-gap-1 oui-text-2xs oui-text-base-contrast-36\">\n {/* <span className=\"orderly-text-warning-darken\">{`${predFundingRate}%`}</span> */}\n <Text.numeral coloring suffix=\"%\" dp={4}>\n {predFundingRate ?? \"--\"}\n </Text.numeral>\n <span>{\" in\"}</span>\n <span>{\" \" + countDown}</span>\n </div>\n )}\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useFundingDetails } from \"@kodiak-finance/orderly-hooks\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\ninterface FundingRateOptions {\n symbol: string;\n}\n\nexport const useFundingRateModalScript = (options: FundingRateOptions) => {\n const { data, isLoading } = useFundingDetails(options.symbol);\n\n const fundingPeriod = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${data.funding_period}h`;\n }, [data, isLoading]);\n\n const capFunding = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.cap_funding).mul(100).toNumber()}%`;\n }, [data, isLoading]);\n\n const floorFunding = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.floor_funding).mul(100).toNumber()}%`;\n }, [data, isLoading]);\n\n return { fundingPeriod, capFunding, floorFunding };\n};\n\nexport type FundingRateModalState = ReturnType<\n typeof useFundingRateModalScript\n>;\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text, Divider } from \"@kodiak-finance/orderly-ui\";\nimport type { FundingRateModalState } from \"./fundingRateModal.script\";\n\nexport const FundingRateModal: React.FC<FundingRateModalState> = (props) => {\n const { t } = useTranslation();\n const { fundingPeriod, capFunding, floorFunding } = props;\n return (\n <Flex width={\"100%\"} itemAlign={\"center\"} direction=\"column\" gap={1}>\n <Flex justify=\"between\" itemAlign={\"center\"} width={\"100%\"}>\n <Text intensity={54}>\n {t(\"trading.fundingRate.predFundingRate.interval\")}\n </Text>\n <Text intensity={80}>{fundingPeriod}</Text>\n </Flex>\n <Flex justify=\"between\" itemAlign={\"center\"} width={\"100%\"}>\n <Text intensity={54}>\n {t(\"trading.fundingRate.predFundingRate.cap\")} /\n {t(\"trading.fundingRate.predFundingRate.floor\")}\n </Text>\n <Text intensity={80}>\n {capFunding} / {floorFunding}\n </Text>\n </Flex>\n <Divider my={4} className=\"oui-w-full\" intensity={8} />\n {t(\"markets.symbolInfoBar.predFundingRate.tooltip\")}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useFundingRateModalScript } from \"./fundingRateModal.script\";\nimport { FundingRateModal } from \"./fundingRateModal.ui\";\n\nexport const FundingRateModalWidget: React.FC<{ symbol: string }> = (props) => {\n const state = useFundingRateModalScript(props);\n return <FundingRateModal {...state} />;\n};\n\nexport const FundingRateDialogId = \"FundingRateDialogId\";\nexport const FundingRateSheetId = \"FundingRateSheetId\";\n\nregisterSimpleDialog(FundingRateDialogId, FundingRateModalWidget, {\n size: \"md\",\n classNames: { content: \"oui-border oui-border-line-6\" },\n title: () => i18n.t(\"funding.fundingRate\"),\n});\n\nregisterSimpleSheet(FundingRateSheetId, FundingRateModalWidget, {\n title: () => i18n.t(\"funding.fundingRate\"),\n});\n","import { useCallback } from \"react\";\nimport { useFundingRate } from \"@kodiak-finance/orderly-hooks\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { FundingRateDialogId } from \"../fundingRateModal/fundingRateModal.widget\";\n\nexport const useFundingRateScript = (symbol: string) => {\n const data = useFundingRate(symbol);\n const onClick = useCallback<React.MouseEventHandler<HTMLElement>>(() => {\n modal.show(FundingRateDialogId, { symbol });\n }, [symbol]);\n return {\n data,\n onClick,\n };\n};\n\nexport type FundingRateState = ReturnType<typeof useFundingRateScript>;\n","import React from \"react\";\nimport { useFundingRateScript } from \"./fundingRate.script\";\nimport { FundingRate } from \"./fundingRate.ui\";\n\nexport const FundingRateWidget: React.FC<{ symbol: string }> = (props) => {\n const state = useFundingRateScript(props.symbol);\n return <FundingRate {...state} />;\n};\n","export { FundingRate } from \"./fundingRate.ui\";\nexport { FundingRateWidget } from \"./fundingRate.widget\";\nexport { useFundingRateScript } from \"./fundingRate.script\";\n","import { FC, useContext, useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { Box, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { getPrecisionByNumber } from \"@kodiak-finance/orderly-utils\";\nimport { CellBar } from \"../../base/orderBook/cellBar\";\nimport {\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n OrderBookContext,\n} from \"../../base/orderBook/orderContext\";\nimport { OrderBookCellType, QtyMode } from \"../../base/orderBook/types\";\n\nexport interface OrderBookCellProps {\n background: string;\n price: number;\n quantity: number;\n accumulatedAmount: number;\n // size: number;\n count: number;\n accumulated: number;\n type: OrderBookCellType;\n mode: QtyMode;\n}\n\nexport const OrderBookCell: FC<OrderBookCellProps> = (props) => {\n const { accumulated, count, quantity, price, type, accumulatedAmount } =\n props;\n\n const width = (accumulated / count) * 100;\n\n const { cellHeight, onItemClick, depth, symbolInfo } =\n useContext(OrderBookContext);\n\n const { base_dp, quote_dp, base, quote } = symbolInfo;\n\n const [coinUnit, setCoinUnit] = useLocalStorage<\"qty\" | \"base\" | \"quote\">(\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n \"qty\",\n );\n\n const totalAmount = Number.isNaN(accumulated)\n ? \"-\"\n : accumulatedAmount?.toString();\n\n const dp = useMemo(() => {\n return getPrecisionByNumber(depth || `${quote_dp}`);\n }, [depth, quote_dp]);\n\n const renderCell = () => {\n switch (coinUnit) {\n case \"base\":\n return (\n <Text.numeral className=\"oui-text-base-contrast-80\" dp={base_dp}>\n {accumulated}\n </Text.numeral>\n );\n case \"quote\":\n return (\n <Text.numeral className=\"oui-text-base-contrast-80\" dp={0}>\n {totalAmount}\n </Text.numeral>\n );\n default:\n return (\n <Text.numeral className=\"oui-text-base-contrast-80\" dp={base_dp}>\n {Number.isNaN(quantity) ? \"-\" : quantity}\n </Text.numeral>\n );\n }\n };\n\n return (\n <Box\n className={cn(\n \"oui-relative oui-w-full oui-cursor-pointer oui-overflow-hidden oui-text-2xs oui-tabular-nums\",\n )}\n style={{ height: `${cellHeight}px` }}\n onClick={() => {\n if (Number.isNaN(price) || Number.isNaN(quantity)) {\n return;\n }\n onItemClick?.([price, quantity]);\n }}\n >\n <Flex itemAlign=\"center\" justify={\"between\"}>\n <Text.numeral\n color={type === OrderBookCellType.BID ? \"buy\" : \"sell\"}\n dp={dp}\n >\n {price}\n </Text.numeral>\n {renderCell()}\n </Flex>\n {Number.isNaN(width) ? null : (\n <CellBar\n width={width}\n className={cn(\n type === OrderBookCellType.ASK\n ? \"oui-bg-trade-loss/20\"\n : \"oui-bg-trade-profit/20\",\n )}\n />\n )}\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { Box } from \"@kodiak-finance/orderly-ui\";\nimport { useOrderBookContext } from \"../../base/orderBook/orderContext\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { OrderBookCell } from \"./cell\";\n\ninterface OrderBookListProps {\n type: OrderBookCellType;\n data: number[][];\n countQty: number;\n}\n\nexport const ListBox: FC<OrderBookListProps> = (props) => {\n const { data } = props;\n const { mode } = useOrderBookContext();\n return (\n <Box className=\"oui-order-book-list oui-flex oui-w-full oui-flex-col oui-gap-px\">\n {data.map((item, index) => {\n return (\n <OrderBookCell\n key={`item-${index}`}\n background={\"\"}\n price={item[0]}\n quantity={item[1]}\n accumulated={item[2]}\n accumulatedAmount={item[3]}\n count={props.countQty}\n type={props.type}\n mode={mode}\n />\n );\n })}\n </Box>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { ListBox } from \"./listBox\";\n\nexport interface Props {\n data: number[][];\n}\nexport const Asks: FC<Props> = (props) => {\n const { data } = props;\n const countQty = useMemo(() => {\n const len = data.length;\n let max = Number.NaN;\n\n let index = 0;\n\n while (Number.isNaN(max) && index < len) {\n max = data[index][2];\n index++;\n }\n\n return max;\n }, [data]);\n return (\n <ListBox type={OrderBookCellType.ASK} data={data} countQty={countQty} />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { OrderBookCellType } from \"../../base/orderBook/types\";\nimport { ListBox } from \"./listBox\";\n\nexport interface Props {\n data: any[];\n}\n\nexport const Bids: FC<Props> = (props) => {\n const { data } = props;\n const countQty = useMemo(() => {\n let max = Number.NaN;\n // let len = data.length;\n let index = data.length - 1;\n\n while (Number.isNaN(max) && index > 0) {\n max = data[index][2];\n index--;\n }\n\n return max;\n // return data.length > 0 ? data[data.length - 1][2] : 0;\n }, [data]);\n\n return (\n <ListBox type={OrderBookCellType.BID} data={data} countQty={countQty} />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Box, Picker } from \"@kodiak-finance/orderly-ui\";\n\ninterface DepthSelectProps {\n depth: ReadonlyArray<string> | string[];\n value?: string;\n onChange?: (depth: number) => void;\n}\n\nexport const DepthSelect: FC<DepthSelectProps> = (props) => {\n const options = useMemo(() => {\n return props.depth.map((d) => ({\n value: d,\n label: `${d}`,\n }));\n }, [props.depth]);\n return (\n <Box id=\"oui-order-book-depth\" className=\"oui-w-full oui-pt-2\">\n {/* <Select size={\"small\"} value={\"0.001\"} /> */}\n <Picker\n options={options}\n fullWidth\n size={\"sm\"}\n value={props.value}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n onValueChange={(value) => {\n //\n props.onChange?.(value);\n }}\n />\n </Box>\n );\n};\n","import React, { FC, useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n CaretDownIcon,\n CaretUpIcon,\n Flex,\n Picker,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport { ORDERBOOK_MOBILE_COIN_TYPE_KEY } from \"../../base/orderBook/orderContext\";\n\ninterface Props {\n quote: string;\n base: string;\n}\n\nexport const Header: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n const { base, quote } = props;\n\n const [coinUnit, setCoinUnit] = useLocalStorage<\"qty\" | \"base\" | \"quote\">(\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n \"qty\",\n );\n\n const options = useMemo<SelectOption[]>(() => {\n return [\n {\n value: \"qty\",\n label: `${t(\"common.quantity\")}(${base})`,\n data: [t(\"common.quantity\"), base],\n },\n {\n value: \"base\",\n label: `${t(\"common.total\")}(${base})`,\n data: [t(\"common.total\"), base],\n },\n {\n value: \"quote\",\n label: `${t(\"common.total\")}(${quote})`,\n data: [t(\"common.total\"), quote],\n },\n ];\n }, [t, base, quote]);\n\n return (\n <Flex\n justify={\"between\"}\n width={\"100%\"}\n className=\"oui-py-[5px] oui-text-2xs oui-text-base-contrast-36\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n id=\"oui-order-book-header-price\"\n >\n <Text>{t(\"common.price\")}</Text>\n <Text>{`(${quote})`}</Text>\n </Flex>\n <Picker\n size=\"sm\"\n value={coinUnit}\n onValueChange={setCoinUnit}\n options={options}\n valueRenderer={(_, { open, data }) => {\n return (\n <Flex justify=\"between\" itemAlign=\"center\" gap={1}>\n {Array.isArray(data) && (\n <Flex direction={\"column\"} itemAlign={\"end\"}>\n {data[0] && <Text>{data[0]}</Text>}\n {data[1] && <Text>({data[1]})</Text>}\n </Flex>\n )}\n {open ? (\n <CaretUpIcon size={14} color=\"inherit\" />\n ) : (\n <CaretDownIcon size={14} color=\"inherit\" />\n )}\n </Flex>\n );\n }}\n />\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { MarkPriceView } from \"../../base/orderBook/markPrice\";\nimport { MiddlePriceView } from \"../../base/orderBook/midPriceView\";\nimport { useOrderBookContext } from \"../../base/orderBook/orderContext\";\n\ninterface MarkPriceProps {\n markPrice: number;\n lastPrice: number[];\n}\n\nexport const MarkPrice: FC<MarkPriceProps> = (props) => {\n const { symbolInfo } = useOrderBookContext();\n\n const { quote_dp } = symbolInfo;\n\n return (\n <Flex\n id=\"oui-order-book-mark-price\"\n className=\"oui-py-[6px]\"\n width={\"100%\"}\n justify={\"between\"}\n >\n <MiddlePriceView\n markPrice={props.markPrice}\n lastPrice={props.lastPrice}\n quote_dp={quote_dp}\n className=\"oui-text-sm\"\n iconSize={14}\n />\n <MarkPriceView\n markPrice={props.markPrice}\n quote_dp={quote_dp}\n className=\"oui-text-2xs\"\n iconSize={12}\n />\n </Flex>\n );\n};\n","import { FC, useEffect } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { cn, Flex, Spinner } from \"@kodiak-finance/orderly-ui\";\nimport { BasicSymbolInfo } from \"../../../types/types\";\nimport {\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n OrderBookProvider,\n} from \"../../base/orderBook/orderContext\";\nimport { FundingRateWidget } from \"../fundingRate\";\nimport { Asks } from \"./asks\";\nimport { Bids } from \"./bids\";\nimport { DepthSelect } from \"./depthSelect\";\nimport { Header } from \"./header\";\nimport { MarkPrice } from \"./markPrice\";\n\nexport interface OrderBookProps {\n asks: any[];\n bids: any[];\n markPrice: number;\n lastPrice: number[];\n onItemClick?: (item: number[]) => void;\n depths?: string[];\n activeDepth?: string;\n onDepthChange?: (depth: number) => void;\n //\n autoSize?: boolean;\n level?: number;\n base: string;\n quote: string;\n\n isLoading?: boolean;\n\n cellHeight?: number;\n\n className?: string;\n symbolInfo: BasicSymbolInfo;\n}\n\nexport const OrderBook: FC<OrderBookProps> = (props) => {\n const { lastPrice, markPrice, quote, base, isLoading, onDepthChange } = props;\n\n const symbol = `PERP_${props.symbolInfo.base}_${props.symbolInfo.quote}`;\n\n const [coinUnit, setCoinUnit] = useLocalStorage<\"qty\" | \"base\" | \"quote\">(\n ORDERBOOK_MOBILE_COIN_TYPE_KEY,\n \"qty\",\n );\n\n return (\n <OrderBookProvider\n cellHeight={props.cellHeight ?? 20}\n onItemClick={props.onItemClick}\n depth={props.activeDepth}\n pendingOrders={EMPTY_LIST}\n showTotal={false}\n symbolInfo={props.symbolInfo}\n >\n <Flex\n direction={\"column\"}\n p={2}\n id=\"oui-orderbook-mobile\"\n className={cn(\"oui-relative oui-size-full\", props.className)}\n justify={\"start\"}\n itemAlign={\"start\"}\n >\n <FundingRateWidget symbol={symbol} />\n <Header quote={quote} base={base} />\n <Asks data={props.asks} />\n <MarkPrice lastPrice={lastPrice} markPrice={markPrice} />\n <Bids data={props.bids} />\n <DepthSelect\n depth={props.depths || EMPTY_LIST}\n value={props.activeDepth}\n onChange={onDepthChange}\n />\n {isLoading && (\n <div className=\"oui-bg-base-800/70 oui-absolute oui-inset-0 oui-z-10 oui-flex oui-h-full oui-min-h-[420px] oui-items-center oui-justify-center\">\n <Spinner />\n </div>\n )}\n </Flex>\n </OrderBookProvider>\n );\n};\n","import React from \"react\";\nimport { Box } from \"@kodiak-finance/orderly-ui\";\nimport { DesktopOrderBook } from \"../../desktop/orderBook/index.desktop\";\nimport { OrderBook as MWebOrderBook } from \"../../mobile/orderBook\";\nimport type { OrderBookState } from \"./orderBook.script\";\n\nexport const OrderBook: React.FC<OrderBookState & { className?: string }> = (\n props,\n) => {\n return (\n <Box className=\"oui-font-semibold\" width={\"100%\"} height={\"100%\"}>\n {props.isMobile ? (\n <MWebOrderBook\n level={props.level}\n asks={props.asks!}\n bids={props.bids!}\n markPrice={props.markPrice!}\n lastPrice={props.lastPrice!}\n depths={props.depths}\n activeDepth={props.selDepth}\n base={props.base}\n quote={props.quote}\n isLoading={props.isLoading}\n onItemClick={props.onItemClick}\n cellHeight={props.cellHeight}\n onDepthChange={props.onDepthChange}\n className={props.className}\n symbolInfo={props.symbolInfo}\n />\n ) : (\n <DesktopOrderBook\n level={props.level}\n asks={props.asks!}\n bids={props.bids!}\n markPrice={props.markPrice!}\n lastPrice={props.lastPrice!}\n depths={props.depths}\n activeDepth={props.selDepth}\n base={props.base}\n quote={props.quote}\n isLoading={props.isLoading}\n onItemClick={props.onItemClick}\n cellHeight={props.cellHeight}\n onDepthChange={props.onDepthChange}\n className={props.className}\n pendingOrders={props.pendingOrders}\n symbolInfo={props.symbolInfo}\n />\n )}\n </Box>\n );\n};\n","import type { API } from \"@kodiak-finance/orderly-types\";\nimport type { BasicSymbolInfo } from \"../types/types\";\n\ntype ValueOf<T> = T[keyof T];\n\nexport const getBasicSymbolInfo = (\n symbolInfo: (\n key?: keyof API.SymbolExt,\n defaultValue?: ValueOf<API.SymbolExt>,\n ) => any,\n): BasicSymbolInfo => {\n return {\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n };\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useOrderbookStream,\n useOrderStream,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { removeTrailingZeros } from \"@kodiak-finance/orderly-utils\";\nimport { getBasicSymbolInfo } from \"../../../utils/utils\";\n\nconst CELL_MAX = 30;\n\nconst DEFAULT_CELL_HEIGHT = 20;\n\nconst SPACE = 104;\n\nexport const useOrderBookScript = (props: {\n symbol: string;\n height?: number;\n}) => {\n const { symbol, height } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n\n const [cellHeight, setCellHeight] = useState(DEFAULT_CELL_HEIGHT);\n\n const [level, setLevel] = useState(10);\n const { base, quote, quote_dp } = getBasicSymbolInfo(symbolInfo);\n // const counter = useRef(0);\n\n const [data, { onDepthChange, isLoading, onItemClick, depth, allDepths }] =\n useOrderbookStream(symbol, undefined, { level });\n\n // useEffect(() => {\n // counter.current = 0;\n // }, [symbol]);\n\n const pendingOrders = usePendingOrderStream(symbol);\n useEffect(() => {\n if (height) {\n // setCellHeight(height.content / level);\n const level = Math.floor(\n (height - SPACE) / ((DEFAULT_CELL_HEIGHT + 1) * 2),\n );\n\n const cellsHeight = (DEFAULT_CELL_HEIGHT + 1) * 2 * level;\n\n const restSpace = height - SPACE - cellsHeight;\n\n if (restSpace > 10) {\n setCellHeight(DEFAULT_CELL_HEIGHT + restSpace / level / 2);\n } else {\n setCellHeight(DEFAULT_CELL_HEIGHT);\n }\n\n setLevel(level);\n }\n }, [height]);\n\n const selDepth = useMemo(() => {\n if (typeof depth === \"undefined\" || typeof quote_dp === \"undefined\") {\n return undefined;\n }\n // // FIXME: hardcode for now, need to optimize it\n // counter.current++;\n // if (counter.current === 1 && DEFAULT_DEPTH[symbol]) {\n // return DEFAULT_DEPTH[symbol];\n // }\n\n return removeTrailingZeros(depth);\n }, [depth, quote_dp, symbol]);\n\n const depths = useMemo(() => {\n return allDepths?.map((e) => removeTrailingZeros(e)) || [];\n }, [allDepths, quote_dp]);\n\n const { isMobile } = useScreen();\n\n return {\n level,\n asks: data?.asks,\n bids: data?.bids,\n markPrice: data?.markPrice,\n lastPrice: data?.middlePrice,\n depths,\n selDepth,\n base,\n quote,\n isLoading,\n onItemClick,\n cellHeight,\n onDepthChange,\n pendingOrders,\n symbolInfo: getBasicSymbolInfo(symbolInfo),\n isMobile,\n };\n};\n\nexport const usePendingOrderStream = (symbol: string): number[] => {\n const [data] = useOrderStream({\n status: OrderStatus.INCOMPLETE,\n symbol: symbol,\n });\n\n const pendingOrders = useMemo(() => {\n const info = data\n ?.filter((item) => item.symbol === symbol)\n .reduce((a, b) => {\n // TODO: check if this is the correct price, when the data is from WS, it crashes\n const price = b.price || b.trigger_price || 0;\n return [...a, price];\n }, []);\n\n return info;\n }, [data, symbol]);\n\n return pendingOrders;\n};\n\nexport type OrderBookState = ReturnType<typeof useOrderBookScript>;\n","import React from \"react\";\nimport { useOrderBookScript } from \"./orderBook.script\";\nimport { OrderBook } from \"./orderBook.ui\";\n\ninterface OrderBookWidgetProps {\n className?: string;\n symbol: string;\n height?: number;\n}\n\nexport const OrderBookWidget: React.FC<OrderBookWidgetProps> = (props) => {\n const { className, symbol, height } = props;\n const state = useOrderBookScript({ symbol, height });\n return <OrderBook {...state} className={className} />;\n};\n","export { OrderBook } from \"./orderBook.ui\";\nexport { OrderBookWidget } from \"./orderBook.widget\";\nexport { useOrderBookScript } from \"./orderBook.script\";\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n Flex,\n Text,\n Box,\n Tooltip,\n modal,\n gradientTextVariants,\n cn,\n EditIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { LeverageWidgetWithDialogId } from \"@kodiak-finance/orderly-ui-leverage\";\nimport { TooltipContent } from \"../assetView/assetView.ui\";\nimport { RiskRateState } from \"./riskRate.script\";\n\nexport const RiskRate: FC<RiskRateState> = (props) => {\n const { riskRate, riskRateColor, currentLeverage, maxLeverage } = props;\n const { isHigh, isMedium, isLow } = riskRateColor;\n const { wrongNetwork } = useAppContext();\n const { t } = useTranslation();\n\n const textColor = wrongNetwork\n ? \"\"\n : isHigh\n ? \"oui-text-danger\"\n : isMedium\n ? \"oui-text-warning-darken\"\n : isLow\n ? gradientTextVariants({ color: \"brand\" })\n : \"\";\n\n const boxClsName = wrongNetwork\n ? \"oui-bg-gradient-to-r oui-opacity-20 oui-from-[#26fefe] oui-via-[#ff7d00] oui-to-[#d92d6b] oui-h-1.5 oui-rounded-full\"\n : isHigh\n ? \"oui-bg-gradient-to-tr oui-from-[#791438] oui-to-[#ff447c] oui-h-1.5 oui-rounded-full\"\n : isMedium\n ? \"oui-bg-gradient-to-tr oui-from-[#792e00] oui-to-[#ffb65d] oui-h-1.5 oui-rounded-full\"\n : isLow\n ? \"oui-bg-gradient-to-tr oui-from-[#59b0fe] oui-to-[#26fefe] oui-h-1.5 oui-rounded-full\"\n : \"oui-bg-gradient-to-r oui-opacity-20 oui-from-[#26fefe] oui-via-[#ff7d00] oui-to-[#d92d6b] oui-h-1.5 oui-rounded-full\";\n\n return (\n <Box data-risk={\"\"} className=\"oui-space-y-2\">\n <Flex\n itemAlign=\"center\"\n justify=\"start\"\n className=\"oui-w-full oui-bg-base-6 oui-rounded-full oui-h-2 oui-px-[1px]\"\n >\n <Box\n className={boxClsName}\n style={\n riskRate && riskRate !== \"--\"\n ? { width: riskRate }\n : { width: \"100%\" }\n }\n />\n </Flex>\n\n <Flex direction=\"row\" justify=\"between\">\n <Tooltip\n content={\n <TooltipContent\n description={t(\"trading.riskRate.tooltip\")}\n formula={t(\"trading.riskRate.formula\")}\n />\n }\n >\n <Text\n size=\"2xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className={cn(\n \"oui-cursor-pointer\",\n \"oui-border-b oui-border-dashed oui-border-b-white/10\",\n )}\n >\n {t(\"trading.riskRate\")}\n </Text>\n </Tooltip>\n <Text\n size=\"xs\"\n color=\"neutral\"\n weight=\"semibold\"\n className={cn(textColor)}\n >\n {riskRate ?? \"--\"}\n </Text>\n </Flex>\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useLeverage,\n useMarginRatio,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\nconst getRiskRateColor = (riskRate: null | number) => {\n if (riskRate === null) {\n return { isHigh: false, isMedium: false, isLow: false, isDefault: true };\n }\n\n const isLow = riskRate < 40;\n const isMedium = riskRate >= 40 && riskRate < 80;\n const isHigh = riskRate >= 80;\n const isDefault = !isLow && !isMedium && !isHigh;\n\n return { isHigh, isMedium, isLow, isDefault };\n};\n\nexport const useRiskRateScript = () => {\n const { state } = useAccount();\n\n const isConnected =\n state.status >= AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n const { marginRatio, currentLeverage, mmr } = useMarginRatio();\n\n const { curLeverage } = useLeverage();\n\n const riskRate = useMemo(() => {\n if (!isConnected || marginRatio === null || mmr === null) {\n return \"--\";\n }\n\n if (marginRatio === 0 || mmr === 0) {\n return \"0%\";\n }\n\n const calculatedRiskRate = new Decimal(mmr)\n .div(marginRatio)\n .mul(100)\n .todp(2, Decimal.ROUND_UP);\n\n // Remove trailing zeroes and add percentage sign\n return `${calculatedRiskRate.toString().replace(/\\.?0+$/, \"\")}%`;\n }, [isConnected, marginRatio, mmr]);\n\n const riskRateNumber = riskRate === \"--\" ? null : parseFloat(riskRate);\n\n const riskRateColor = useMemo(() => {\n return getRiskRateColor(riskRateNumber);\n }, [riskRateNumber]);\n\n const _curLeverage = useDataTap(currentLeverage);\n const _maxLeverage = useDataTap(curLeverage);\n const _riskRate = useDataTap(riskRate);\n\n return {\n riskRate: _riskRate,\n riskRateColor,\n isConnected,\n currentLeverage: _curLeverage,\n maxLeverage: _maxLeverage,\n };\n};\n\nexport type RiskRateState = ReturnType<typeof useRiskRateScript>;\n","import React from \"react\";\nimport { useRiskRateScript } from \"./riskRate.script\";\nimport { RiskRate } from \"./riskRate.ui\";\n\nexport const RiskRateWidget: React.FC = () => {\n const state = useRiskRateScript();\n return <RiskRate {...state} />;\n};\n","export { RiskRate } from \"./riskRate.ui\";\nexport { RiskRateWidget } from \"./riskRate.widget\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, cn, Flex, Grid, TabPanel, Tabs, Text } from \"@kodiak-finance/orderly-ui\";\nimport type { OrderBookAndTradesState } from \"./orderBookAndTrades.script\";\n\nconst LazyLastTradesWidget = React.lazy(() =>\n import(\"../../base/lastTrades\").then((mod) => {\n return {\n default: mod.LastTradesWidget,\n };\n }),\n);\n\nconst LazyOrderBookWidget = React.lazy(() =>\n import(\"../../base/orderBook\").then((mod) => {\n return {\n default: mod.OrderBookWidget,\n };\n }),\n);\n\nconst TwoColLayout: React.FC<OrderBookAndTradesState> = (props) => {\n const { t } = useTranslation();\n return (\n <Grid\n cols={2}\n width={\"100%\"}\n gap={3}\n className=\"oui-auto-rows-fr\"\n style={{\n height: props.containerSize?.height,\n }}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n // pl={3}\n pt={3}\n pb={3}\n r=\"2xl\"\n className=\"oui-bg-base-9\"\n >\n <Title\n title={t(\"trading.orderBook\")}\n className=\"oui-pl-3 oui-text-sm\"\n />\n <React.Suspense fallback={null}>\n <LazyOrderBookWidget\n symbol={props.symbol}\n height={\n props.containerSize\n ? props.containerSize.height - 29 - 24\n : undefined\n }\n />\n </React.Suspense>\n </Flex>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n py={3}\n r=\"2xl\"\n className=\"oui-bg-base-9 oui-h-full\"\n >\n <Title\n title={t(\"trading.lastTrades\")}\n className=\"oui-text-sm oui-px-3\"\n />\n <React.Suspense fallback={null}>\n <LazyLastTradesWidget\n symbol={props.symbol}\n style={{\n height:\n props.containerSize && props.containerSize.height - 29 - 24,\n }}\n classNames={{ listHeader: \"oui-px-3\", list: \"oui-px-3\" }}\n />\n </React.Suspense>\n </Flex>\n </Grid>\n );\n};\n\nconst TabLayout: React.FC<OrderBookAndTradesState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Box\n // pl={3}\n pt={3}\n pb={3}\n pr={0}\n r=\"2xl\"\n className=\"oui-bg-base-9\"\n style={{ maxHeight: props.containerSize?.height }}\n >\n <Tabs\n value={props.tab}\n variant=\"contained\"\n onValueChange={(tab) => {\n props.setTab(tab as any);\n }}\n classNames={{\n tabsList: \"oui-pl-3\",\n // tabsContent: props.tab === \"lastTrades\" ? 'oui-pl-3' : ''\n }}\n size=\"lg\"\n >\n <TabPanel value=\"orderBook\" title={t(\"trading.orderBook\")}>\n <React.Suspense fallback={null}>\n <LazyOrderBookWidget\n symbol={props.symbol}\n height={\n props.containerSize\n ? props.containerSize.height - 29 - 18\n : undefined\n }\n />\n </React.Suspense>\n </TabPanel>\n <TabPanel value=\"lastTrades\" title={t(\"trading.lastTrades\")}>\n <React.Suspense fallback={null}>\n <LazyLastTradesWidget\n symbol={props.symbol}\n style={{\n height:\n props.containerSize && props.containerSize.height - 29 - 18,\n }}\n classNames={{\n root: \"oui-pt-[6px]\",\n listHeader: \"oui-px-3\",\n list: \"oui-px-3\",\n }}\n />\n </React.Suspense>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n\nconst Title: React.FC<{ title: string; className?: string }> = (props) => {\n return (\n <Text\n size=\"base\"\n intensity={80}\n className={cn(\"oui-pb-[5px]\", props.className)}\n >\n {props.title}\n </Text>\n );\n};\n\nexport const OrderBookAndTrades: React.FC<OrderBookAndTradesState> = (\n props,\n) => {\n const { containerRef, containerSize } = props;\n return (\n <div ref={containerRef} className=\"oui-h-full\">\n {(containerSize?.width ?? 0) >= 572 ? (\n <TwoColLayout {...props} />\n ) : (\n <TabLayout {...props} />\n )}\n </div>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nexport const useOrderBookAndTradesScript = (symbol: string) => {\n const [containerSize, setContainerSize] = useState<\n | {\n width: number;\n height: number;\n }\n | undefined\n >(undefined);\n\n const [tab, setTab] = useState<\"orderBook\" | \"lastTrades\">(\"orderBook\");\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n setContainerSize({\n width,\n height,\n });\n }\n });\n\n const targetDiv = containerRef.current;\n\n if (targetDiv) {\n resizeObserver.observe(targetDiv);\n }\n\n return () => {\n if (targetDiv) {\n resizeObserver.unobserve(targetDiv);\n }\n };\n }, []);\n\n return {\n symbol,\n containerSize,\n containerRef: containerRef,\n tab,\n setTab,\n };\n};\n\nexport type OrderBookAndTradesState = ReturnType<\n typeof useOrderBookAndTradesScript\n>;\n","import React from \"react\";\nimport { useOrderBookAndTradesScript } from \"./orderBookAndTrades.script\";\nimport { OrderBookAndTrades } from \"./orderBookAndTrades.ui\";\n\nexport const OrderBookAndTradesWidget: React.FC<{ symbol: string }> = (\n props,\n) => {\n const state = useOrderBookAndTradesScript(props.symbol);\n return <OrderBookAndTrades {...state} />;\n};\n","export { OrderBookAndTrades } from \"./orderBookAndTrades.ui\";\nexport { OrderBookAndTradesWidget } from \"./orderBookAndTrades.widget\";\nexport { useOrderBookAndTradesScript } from \"./orderBookAndTrades.script\";\n","import { FC, PropsWithChildren, SVGProps, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n CloseIcon,\n cn,\n Divider,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { MarketLayoutPosition } from \"../../../pages/trading/trading.script\";\n\nexport type LayoutPosition = \"left\" | \"right\";\n\nexport type SwitchLayoutProps = {\n layout?: LayoutPosition;\n onLayout?: (layout: LayoutPosition) => void;\n marketLayout?: MarketLayoutPosition;\n onMarketLayout?: (layout: MarketLayoutPosition) => void;\n};\n\nexport const SwitchLayout: FC<SwitchLayoutProps> = (props) => {\n const { t } = useTranslation();\n return (\n <SwitchLayoutDropDown {...props}>\n <Flex\n px={3}\n className={cn(\n \"oui-rounded-md\",\n \"oui-h-[28px]\",\n \"oui-cursor-pointer oui-transition-all\",\n \"oui-bg-base-6 hover:oui-bg-base-4\",\n \"oui-text-base-contrast-54 hover:oui-text-base-contrast-80\",\n )}\n gapX={1}\n ml={3}\n justify=\"center\"\n itemAlign=\"center\"\n >\n <LayoutIcon />\n <Text size=\"2xs\" weight=\"semibold\">\n {t(\"trading.layout\")}\n </Text>\n </Flex>\n </SwitchLayoutDropDown>\n );\n};\n\nexport const SwitchLayoutDropDown: FC<PropsWithChildren<SwitchLayoutProps>> = (\n props,\n) => {\n const [open, setOpen] = useState(false);\n const [hoveredMarket, setHoveredMarket] =\n useState<MarketLayoutPosition | null>(null);\n const { t } = useTranslation();\n const renderItem = (position: LayoutPosition) => {\n return (\n <Flex\n direction=\"column\"\n gapY={2}\n onClick={() => {\n props.onLayout?.(position);\n setOpen(false);\n }}\n className=\"oui-group\"\n >\n <Flex\n justify={position === \"right\" ? \"end\" : \"start\"}\n className={cn(\n \"oui-w-[148px] oui-h-[100px]\",\n \"oui-bg-base-10 oui-rounded-[10px]\",\n \"oui-border-[4px] oui-border-base-5 group-hover:oui-border-primary-light\",\n props.layout === position && \"!oui-border-primary-light\",\n )}\n >\n <Box p={1}>\n <OrderEntryIcon />\n </Box>\n </Flex>\n <Text\n size=\"2xs\"\n intensity={54}\n className={cn(\n \"oui-text-base-contrast-54 group-hover:oui-text-base-contrast-80\",\n props.layout === position && \"oui-text-base-contrast-80\",\n )}\n >\n {String(\n position === \"right\"\n ? t(\"trading.layout.advanced.right\")\n : t(\"trading.layout.advanced.left\"),\n )}\n </Text>\n </Flex>\n );\n };\n\n const renderMarketItem = (position: MarketLayoutPosition) => {\n const getIcon = (isHovered: boolean) => {\n const isSelected = props.marketLayout === position;\n switch (position) {\n case \"left\":\n return (\n <MarketLeftIcon isSelected={isSelected} isHovered={isHovered} />\n );\n case \"top\":\n return (\n <MarketTopIcon isSelected={isSelected} isHovered={isHovered} />\n );\n case \"bottom\":\n return (\n <MarketBottomIcon isSelected={isSelected} isHovered={isHovered} />\n );\n case \"hide\":\n return (\n <MarketHideIcon isSelected={isSelected} isHovered={isHovered} />\n );\n default:\n return (\n <MarketLeftIcon isSelected={isSelected} isHovered={isHovered} />\n );\n }\n };\n\n const getLabel = () => {\n switch (position) {\n case \"left\":\n return t(\"trading.layout.markets.left\");\n case \"top\":\n return t(\"trading.layout.markets.top\");\n case \"bottom\":\n return t(\"trading.layout.markets.bottom\");\n case \"hide\":\n return t(\"trading.layout.markets.hide\");\n default:\n return t(\"trading.layout.markets.left\");\n }\n };\n\n return (\n <Flex\n direction=\"column\"\n gapY={2}\n onClick={() => {\n props.onMarketLayout?.(position);\n setOpen(false);\n }}\n onMouseEnter={() => setHoveredMarket(position)}\n onMouseLeave={() => setHoveredMarket(null)}\n className=\"oui-group\"\n >\n <Flex justify=\"center\" className=\"oui-w-[148px] oui-h-[100px]\">\n {getIcon(hoveredMarket === position)}\n </Flex>\n <Text\n size=\"2xs\"\n intensity={54}\n className={cn(\n \"oui-text-base-contrast-54 group-hover:oui-text-base-contrast-80\",\n props.marketLayout === position && \"oui-text-base-contrast-80\",\n )}\n >\n {String(getLabel())}\n </Text>\n </Flex>\n );\n };\n\n const content = (\n <>\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n mt={3}\n className=\"oui-mb-[10px] oui-min-w-[500px]\"\n >\n <Text size=\"base\" intensity={98}>\n {t(\"trading.layout\")}\n </Text>\n <CloseIcon\n size={16}\n className=\"oui-text-base-contrast-80 oui-cursor-pointer\"\n opacity={0.98}\n onClick={() => {\n setOpen(false);\n }}\n />\n </Flex>\n <Divider />\n <Flex direction=\"column\" gapY={2} mt={5} itemAlign=\"start\">\n <Text size=\"xs\" intensity={98}>\n {String(t(\"trading.layout.advanced\"))}\n </Text>\n <Flex gapX={6}>\n {renderItem(\"right\")}\n {renderItem(\"left\")}\n </Flex>\n </Flex>\n <Flex direction=\"column\" gapY={2} mt={5} itemAlign=\"start\">\n <Text size=\"xs\" intensity={98}>\n {String(t(\"trading.layout.markets\"))}\n </Text>\n <Flex gapX={6}>\n {renderMarketItem(\"left\")}\n {renderMarketItem(\"top\")}\n {renderMarketItem(\"bottom\")}\n {renderMarketItem(\"hide\")}\n </Flex>\n </Flex>\n </>\n );\n\n return (\n <DropdownMenuRoot open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{props.children}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n align=\"end\"\n className={cn(\"oui-bg-base-8 oui-p-5 oui-pt-0 oui-font-semibold\")}\n >\n {content}\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n\nexport const LayoutIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M3.832 1.994c-.736 0-1.333.597-1.333 1.333v9.334c0 .737.597 1.333 1.333 1.333H6.5c.737 0 1.333-.596 1.333-1.333V3.327c0-.736-.596-1.333-1.333-1.333zm6.667 0c-.737 0-1.333.597-1.333 1.333v2.667c0 .737.596 1.333 1.333 1.333h2.667c.736 0 1.333-.596 1.333-1.333V3.327c0-.736-.597-1.333-1.333-1.333zm.437 6.679a2.7 2.7 0 0 0-1.033.607.284.284 0 0 0-.061.339c.222.411-.01.851-.512.876a.29.29 0 0 0-.26.217c-.05.207-.07.38-.07.608 0 .19.02.407.06.599a.28.28 0 0 0 .252.217c.506.044.756.429.53.92a.28.28 0 0 0 .06.321c.296.273.635.466 1.034.59a.285.285 0 0 0 .312-.104c.31-.427.757-.428 1.05 0a.28.28 0 0 0 .313.113 2.8 2.8 0 0 0 1.042-.599.28.28 0 0 0 .06-.33c-.23-.466.035-.894.513-.902a.28.28 0 0 0 .269-.209c.048-.199.06-.372.06-.616q0-.316-.069-.616a.276.276 0 0 0-.27-.217c-.469-.001-.732-.463-.502-.868a.27.27 0 0 0-.053-.339 2.8 2.8 0 0 0-1.059-.607.274.274 0 0 0-.312.112c-.268.417-.77.425-1.033.009a.284.284 0 0 0-.321-.121m.842 1.536a1.111 1.111 0 1 1 0 2.222 1.111 1.111 0 0 1 0-2.222\" />\n </svg>\n);\n\nexport const OrderEntryIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"36\"\n height=\"84\"\n viewBox=\"0 0 36 84\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect width=\"36\" height=\"17\" rx=\"2\" fill=\"#181C23\" />\n <rect y=\"19\" width=\"36\" height=\"54\" rx=\"2\" fill=\"#181C23\" />\n <rect y=\"75\" width=\"36\" height=\"9\" rx=\"2\" fill=\"#181C23\" />\n <rect\n x=\"3\"\n y=\"79\"\n width=\"30\"\n height=\"1\"\n rx=\"0.5\"\n fill=\"url(#paint0_linear_17647_26849)\"\n />\n <rect x=\"3\" y=\"22\" width=\"14\" height=\"6\" rx=\"2\" fill=\"#008676\" />\n <rect x=\"19\" y=\"22\" width=\"14\" height=\"6\" rx=\"2\" fill=\"#D92D6B\" />\n <rect x=\"3\" y=\"11\" width=\"14\" height=\"3\" rx=\"1.5\" fill=\"#333948\" />\n <rect x=\"19\" y=\"11\" width=\"14\" height=\"3\" rx=\"1.5\" fill=\"#335FFC\" />\n <rect x=\"3\" y=\"62\" width=\"30\" height=\"8\" rx=\"2\" fill=\"#008676\" />\n <defs>\n <linearGradient\n id=\"paint0_linear_17647_26849\"\n x1=\"33\"\n y1=\"79.5\"\n x2=\"3\"\n y2=\"79.5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#779eff\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nexport const MarketLeftIcon: FC<\n SVGProps<SVGSVGElement> & { isSelected?: boolean; isHovered?: boolean }\n> = ({ isSelected, isHovered, ...props }) => {\n const getStrokeColor = () => {\n if (isSelected) return \"#779eff\"; // primary-light color\n if (isHovered) return \"#779eff\"; // primary-light color\n return \"#333948\"; // base-5 color\n };\n\n return (\n <svg\n width=\"148\"\n height=\"100\"\n viewBox=\"0 0 148 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"144\"\n height=\"96\"\n rx=\"10\"\n fill=\"#07080A\"\n stroke={getStrokeColor()}\n strokeWidth=\"4\"\n />\n <rect x=\"8\" y=\"8\" width=\"24\" height=\"84\" rx=\"2\" fill=\"#181C23\" />\n <rect x=\"16\" y=\"10\" width=\"4\" height=\"2\" rx=\"1\" fill=\"#333948\" />\n <rect x=\"21\" y=\"10\" width=\"4\" height=\"2\" rx=\"1\" fill=\"#333948\" />\n <rect x=\"26\" y=\"10\" width=\"4\" height=\"2\" rx=\"1\" fill=\"#333948\" />\n <rect x=\"10\" y=\"10\" width=\"5\" height=\"2\" rx=\"1\" fill=\"#335FFC\" />\n <rect x=\"10\" y=\"14\" width=\"20\" height=\"76\" rx=\"2\" fill=\"#282E3A\" />\n </svg>\n );\n};\n\nexport const MarketTopIcon: FC<\n SVGProps<SVGSVGElement> & { isSelected?: boolean; isHovered?: boolean }\n> = ({ isSelected, isHovered, ...props }) => {\n const getStrokeColor = () => {\n if (isSelected) return \"#779eff\"; // primary-light color\n if (isHovered) return \"#779eff\"; // primary-light color\n return \"#333948\"; // base-5 color\n };\n\n return (\n <svg\n width=\"148\"\n height=\"100\"\n viewBox=\"0 0 148 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"144\"\n height=\"96\"\n rx=\"10\"\n fill=\"#07080A\"\n stroke={getStrokeColor()}\n strokeWidth=\"4\"\n />\n <rect x=\"8\" y=\"8\" width=\"132\" height=\"8\" rx=\"2\" fill=\"#181C23\" />\n <g clipPath=\"url(#clip0_31319_74729)\">\n <rect x=\"10\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#335FFC\" />\n <rect x=\"28\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"46\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"64\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"82\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"100\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"118\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"136\" y=\"10\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n </g>\n <defs>\n <clipPath id=\"clip0_31319_74729\">\n <rect\n width=\"130\"\n height=\"4\"\n fill=\"white\"\n transform=\"translate(10 10)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport const MarketBottomIcon: FC<\n SVGProps<SVGSVGElement> & { isSelected?: boolean; isHovered?: boolean }\n> = ({ isSelected, isHovered, ...props }) => {\n const getStrokeColor = () => {\n if (isSelected) return \"#779eff\"; // primary-light color\n if (isHovered) return \"#779eff\"; // primary-light color\n return \"#333948\"; // base-5 color\n };\n\n return (\n <svg\n width=\"148\"\n height=\"100\"\n viewBox=\"0 0 148 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"144\"\n height=\"96\"\n rx=\"10\"\n fill=\"#07080A\"\n stroke={getStrokeColor()}\n strokeWidth=\"4\"\n />\n <rect x=\"8\" y=\"84\" width=\"132\" height=\"8\" rx=\"2\" fill=\"#181C23\" />\n <g clipPath=\"url(#clip0_31319_74743)\">\n <rect x=\"10\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#335FFC\" />\n <rect x=\"28\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"46\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"64\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"82\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"100\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"118\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n <rect x=\"136\" y=\"86\" width=\"16\" height=\"4\" rx=\"2\" fill=\"#333948\" />\n </g>\n <defs>\n <clipPath id=\"clip0_31319_74743\">\n <rect\n width=\"130\"\n height=\"4\"\n fill=\"white\"\n transform=\"translate(10 86)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport const MarketHideIcon: FC<\n SVGProps<SVGSVGElement> & { isSelected?: boolean; isHovered?: boolean }\n> = ({ isSelected, isHovered, ...props }) => {\n const getStrokeColor = () => {\n if (isSelected) return \"#779eff\"; // primary-light color\n if (isHovered) return \"#779eff\"; // primary-light color\n return \"#333948\"; // base-5 color\n };\n\n return (\n <svg\n width=\"148\"\n height=\"100\"\n viewBox=\"0 0 148 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"144\"\n height=\"96\"\n rx=\"10\"\n fill=\"#07080A\"\n stroke={getStrokeColor()}\n strokeWidth=\"4\"\n />\n <g clipPath=\"url(#clip0_31319_74757)\">\n <rect x=\"8\" y=\"8\" width=\"132\" height=\"84\" rx=\"2\" fill=\"#181C23\" />\n <rect\n x=\"66.8789\"\n y=\"-76\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 66.8789 -76)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"73.9492\"\n y=\"-68.929\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 73.9492 -68.929)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"81.0195\"\n y=\"-61.8579\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 81.0195 -61.8579)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"88.0938\"\n y=\"-54.7867\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 88.0938 -54.7867)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"95.1641\"\n y=\"-47.7157\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 95.1641 -47.7157)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"102.234\"\n y=\"-40.6447\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 102.234 -40.6447)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"109.305\"\n y=\"-33.5736\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 109.305 -33.5736)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"116.375\"\n y=\"-26.5026\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 116.375 -26.5026)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"123.449\"\n y=\"-19.4315\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 123.449 -19.4315)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"130.52\"\n y=\"-12.3604\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 130.52 -12.3604)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"137.59\"\n y=\"-5.28931\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 137.59 -5.28931)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"144.66\"\n y=\"1.78174\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 144.66 1.78174)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"151.73\"\n y=\"8.85278\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 151.73 8.85278)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"158.805\"\n y=\"15.9238\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 158.805 15.9238)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"165.875\"\n y=\"22.995\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 165.875 22.995)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"172.945\"\n y=\"30.066\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 172.945 30.066)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"180.016\"\n y=\"37.1371\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 180.016 37.1371)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"187.086\"\n y=\"44.2081\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 187.086 44.2081)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"194.156\"\n y=\"51.2792\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 194.156 51.2792)\"\n fill=\"#20252F\"\n />\n <rect\n x=\"201.23\"\n y=\"58.3503\"\n width=\"4\"\n height=\"188\"\n rx=\"2\"\n transform=\"rotate(45 201.23 58.3503)\"\n fill=\"#20252F\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_31319_74757\">\n <rect\n width=\"132\"\n height=\"84\"\n fill=\"white\"\n transform=\"translate(8 8)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import { useState } from \"react\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport enum TopTabType {\n chart = \"chart\",\n trades = \"trades\",\n data = \"data\",\n}\n\nexport const useTopTabScript = () => {\n const [tab, setTab] = useState<TopTabType>(TopTabType.chart);\n const { symbol } = useTradingPageContext();\n const [visible, setVisible] = useState(true);\n\n const toggleContentVisible = () => {\n setVisible((e) => !e);\n };\n\n return {\n tab,\n setTab,\n symbol,\n toggleContentVisible,\n setVisible,\n visible,\n };\n};\n\nexport type TopTabState = ReturnType<typeof useTopTabScript>;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { TradingviewWidgetProps } from \"./tradingview.widget\";\n\nconst MaxHeight = 354;\nconst MinHeight = 234;\nconst Key = \"TRADINGVIEW_MOBILE_HEIGHT\";\n\nexport function useTradingviewScript(props: TradingviewWidgetProps) {\n const [height, setHeight] = useLocalStorage(Key, MaxHeight);\n const [dragging, setDragging] = useState(false);\n const dragRef = useRef<HTMLDivElement>(null);\n const boxRef = useRef<HTMLDivElement>(null);\n const [offsetY, setOffsetY] = useState(0);\n const topRef = useRef<number>(0);\n\n const handleTouchStart = useCallback((e: TouchEvent) => {\n if (!boxRef.current) {\n return;\n }\n setDragging(true);\n const event = e.touches[0];\n const rect = boxRef.current.getBoundingClientRect();\n e.stopPropagation();\n e.preventDefault();\n\n const offsetY = event.clientY - rect.bottom;\n topRef.current = rect.top;\n setOffsetY(offsetY);\n }, []);\n\n const handleTouchMove = useCallback(\n (e: TouchEvent) => {\n if (!boxRef.current) {\n return;\n }\n if (dragging) {\n e.stopPropagation();\n e.preventDefault();\n\n const event = e.touches[0];\n\n const newHeight = event.clientY - topRef.current - offsetY;\n setHeight(\n Math.min(Math.max(Math.round(newHeight), MinHeight), MaxHeight),\n );\n return false;\n }\n },\n [dragging, offsetY],\n );\n\n const handleTouchEnd = useCallback(() => {\n setDragging(false);\n }, []);\n\n useEffect(() => {\n const drag = dragRef.current;\n if (!drag) {\n return;\n }\n\n drag.addEventListener(\"touchstart\", handleTouchStart);\n\n return () => {\n drag.removeEventListener(\"touchstart\", handleTouchStart);\n };\n }, [handleTouchStart]);\n\n useEffect(() => {\n document.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n document.addEventListener(\"touchend\", handleTouchEnd);\n\n return () => {\n document.removeEventListener(\"touchmove\", handleTouchMove);\n document.removeEventListener(\"touchend\", handleTouchEnd);\n };\n }, [dragging, handleTouchMove, handleTouchEnd]);\n return {\n ...props,\n\n height,\n dragging,\n dragRef,\n boxRef,\n };\n}\n\nexport type TradingviewState = ReturnType<typeof useTradingviewScript>;\n","import React, { FC, SVGProps } from \"react\";\n\nexport const KlineDragIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g id=\"Arrows-expand\">\n <path\n id=\"Vector\"\n d=\"M5.9989 1.00708C5.8709 1.00708 5.7369 1.05008 5.6394 1.14758L3.7959 3.00708L4.4989 3.71008L5.4989 2.72607V4.50708C5.4989 4.78308 5.7229 5.00708 5.9989 5.00708C6.2749 5.00708 6.4989 4.78308 6.4989 4.50708V2.72607L7.4989 3.71008L8.2019 3.00708L6.3584 1.14758C6.2604 1.05008 6.1269 1.00708 5.9989 1.00708ZM5.9989 7.00707C5.7229 7.00707 5.4989 7.23107 5.4989 7.50707V9.28808L4.4989 8.30407L3.7959 9.00707L5.6394 10.8666C5.8349 11.0616 6.1629 11.0616 6.3584 10.8666L8.2019 9.00707L7.4989 8.30407L6.4989 9.28808V7.50707C6.4989 7.23107 6.2749 7.00707 5.9989 7.00707Z\"\n />\n </g>\n </svg>\n);\n","import React from \"react\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\nimport { TradingviewWidget } from \"@kodiak-finance/orderly-ui-tradingview\";\nimport { KlineDragIcon } from \"../../base/icons\";\nimport type { TradingviewState } from \"./tradingview.script\";\n\nexport const TradingviewUI: React.FC<TradingviewState> = (props) => {\n return (\n <div\n className=\"oui-pb-1 oui-flex oui-flex-col oui-gap-1\"\n style={{ height: props.height }}\n ref={props.boxRef}\n >\n <div className=\"oui-w-full oui-h-full\">\n <TradingviewWidget\n symbol={props.symbol}\n libraryPath={props.tradingViewConfig?.library_path}\n mode={3}\n scriptSRC={props.tradingViewConfig?.scriptSRC}\n customCssUrl={props.tradingViewConfig?.customCssUrl}\n {...props.tradingViewConfig}\n />\n </div>\n <div className=\"oui-relative oui-w-full\">\n <div\n ref={props.dragRef}\n className={cn(\n \"oui-h-[1px] oui-absolute oui-left-0 oui-right-0 oui-bottom-0 oui-top-0 oui-z-10 oui-mt-[7px] oui-bg-base-contrast-12\",\n props.dragging && \"oui-bg-primary \",\n )}\n >\n <KlineDragIcon\n className={cn(\n \"oui-w-3 oui-h-3 oui-absolute oui-left-1/2 -oui-top-[5px] -oui-translate-y-[0.5px] oui-text-base-contrast-12\",\n props.dragging && \" oui-text-primary\",\n )}\n />\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { TradingViewConfigInterface } from \"../../../types/types\";\nimport { useTradingviewScript } from \"./tradingview.script\";\nimport { TradingviewUI } from \"./tradingview.ui\";\n\nexport interface TradingviewWidgetProps {\n symbol: string;\n tradingViewConfig: TradingViewConfigInterface;\n}\n\nexport const TradingviewWidget: React.FC<TradingviewWidgetProps> = (props) => {\n const state = useTradingviewScript(props);\n return <TradingviewUI {...state} />;\n};\n","import React from \"react\";\nimport { LastTradesWidget } from \"../../base/lastTrades\";\n\nexport const MWebLastTrades: React.FC<{ symbol: string }> = (props) => {\n return (\n <LastTradesWidget\n symbol={props.symbol}\n classNames={{\n root: \"oui-px-3 \",\n list: \"oui-min-h-[141px] oui-max-h-[202px] oui-w-full\",\n listHeader: \"oui-text-xs oui-text-base-contrast-36\",\n listItem: {\n left: \"oui-text-xs\",\n mid: \"oui-text-xs\",\n right: \"oui-text-xs\",\n },\n }}\n />\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { TradeDataState } from \"./tradeData.script\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const TradeData: FC<TradeDataState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex direction={\"column\"} gap={2}>\n <Row\n title={t(\"common.markPrice\")}\n value={props.ticker?.mark_price}\n dp={props.symbolInfo.quote_dp}\n />\n <Row\n title={t(\"common.indexPrice\")}\n value={props.ticker?.index_price}\n dp={props.symbolInfo.quote_dp}\n />\n <Row\n title={t(\"markets.column.24hVolume\")}\n value={props.vol_24h}\n dp={props.symbolInfo.quote_dp}\n rule=\"human\"\n showUSDC\n />\n <Row\n title={t(\"trading.column.24High\")}\n value={props.ticker?.[\"24h_high\"]}\n dp={props.symbolInfo.quote_dp}\n />\n <Row\n title={t(\"trading.column.24Low\")}\n value={props.ticker?.[\"24h_low\"]}\n dp={props.symbolInfo.quote_dp}\n />\n <Row\n title={t(\"markets.openInterest\")}\n value={props.openInterest}\n dp={props.symbolInfo.quote_dp}\n rule=\"human\"\n showUSDC\n />\n </Flex>\n );\n};\n\nconst Row = (props: {\n title: string;\n value: any;\n dp?: number;\n rule?: \"percentages\" | \"price\" | \"human\";\n showUSDC?: boolean;\n}) => {\n const { title, value, showUSDC, dp, rule = \"price\" } = props;\n return (\n <Flex justify={\"between\"} width={\"100%\"} className=\"oui-text-xs\">\n <Text intensity={36}>{title}</Text>\n <Flex gap={1}>\n <Text.numeral rule={rule} dp={dp} intensity={80}>\n {value}\n </Text.numeral>\n {showUSDC && <Text intensity={36}>USDC</Text>}\n </Flex>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTickerStream } from \"@kodiak-finance/orderly-hooks\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport const useTradeDataScript = (props: { symbol: string }) => {\n const { symbol } = props;\n const ticker = useTickerStream(symbol);\n const { symbolInfo } = useTradingPageContext();\n const vol_24h = useMemo(() => {\n const close = ticker?.[\"24h_close\"];\n const volume = ticker?.[\"24h_volume\"];\n if (close && volume && !isNaN(close) && !isNaN(volume)) {\n return new Decimal(close)\n .mul(volume)\n .toFixed(symbolInfo.quote_dp, Decimal.ROUND_DOWN);\n }\n return undefined;\n }, [ticker]);\n\n const openInterest = useMemo(() => {\n const markPrice = ticker?.[\"mark_price\"];\n const openInterest = ticker?.[\"open_interest\"];\n if (markPrice && openInterest && !isNaN(markPrice)) {\n return new Decimal(markPrice)\n .mul(Number(openInterest))\n .toFixed(symbolInfo.quote_dp, Decimal.ROUND_DOWN);\n }\n return undefined;\n }, [ticker]);\n return {\n ticker,\n symbolInfo,\n vol_24h,\n openInterest,\n };\n};\n\nexport type TradeDataState = ReturnType<typeof useTradeDataScript>;\n","import React from \"react\";\nimport { useTradeDataScript } from \"./tradeData.script\";\nimport { TradeData } from \"./tradeData.ui\";\n\nexport const TradeDataWidget: React.FC<{ symbol: string }> = (props) => {\n const state = useTradeDataScript(props);\n return <TradeData {...state} />;\n};\n","export { TradeData } from \"./tradeData.ui\";\nexport { TradeDataWidget } from \"./tradeData.widget\";\nexport { useTradeDataScript } from \"./tradeData.script\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, cn, TabPanel, Tabs } from \"@kodiak-finance/orderly-ui\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\nimport { TopTabState, TopTabType } from \"./topTab.script\";\n\nconst LazyTradingviewWidget = React.lazy(() =>\n import(\"../tradingview/tradingview.widget\").then((mod) => {\n return { default: mod.TradingviewWidget };\n }),\n);\n\nconst LazyMWebLastTrades = React.lazy(() =>\n import(\"../lastTrades/lastTrades.widget\").then((mod) => {\n return { default: mod.MWebLastTrades };\n }),\n);\n\nconst LazyTradeDataWidget = React.lazy(() =>\n import(\"../tradeData\").then((mod) => {\n return { default: mod.TradeDataWidget };\n }),\n);\n\nexport const TopTab: React.FC<TopTabState & { className?: string }> = (\n props,\n) => {\n const { t } = useTranslation();\n const { tradingViewConfig } = useTradingPageContext();\n\n return (\n <Tabs\n variant=\"contained\"\n value={props.tab}\n contentVisible={props.visible}\n onValueChange={(e) => {\n props.setTab(e as TopTabType);\n props.setVisible(true);\n }}\n className={props.className}\n classNames={{\n tabsList: \"oui-p-2\",\n tabsContent: \"oui-min-h-[176px] oui-max-h-[396px]\",\n }}\n style={{\n marginBottom: props.tab === TopTabType.chart ? \"8px\" : 0,\n }}\n trailing={\n <button className=\"oui-px-5\" onClick={props.toggleContentVisible}>\n <ChevronIcon\n className={props.visible ? \"oui-rotate-0\" : \"oui-rotate-180\"}\n />\n </button>\n }\n >\n <TabPanel title={t(\"trading.tabs.chart\")} value={TopTabType.chart}>\n <React.Suspense fallback={null}>\n <LazyTradingviewWidget\n symbol={props.symbol}\n tradingViewConfig={tradingViewConfig}\n />\n </React.Suspense>\n </TabPanel>\n <TabPanel title={t(\"trading.tabs.trades\")} value={TopTabType.trades}>\n <React.Suspense fallback={null}>\n <LazyMWebLastTrades symbol={props.symbol} />\n </React.Suspense>\n </TabPanel>\n <TabPanel title={t(\"trading.tabs.data\")} value={TopTabType.data}>\n <Box px={3}>\n <React.Suspense fallback={null}>\n <LazyTradeDataWidget symbol={props.symbol} />\n </React.Suspense>\n </Box>\n </TabPanel>\n </Tabs>\n );\n};\n\nconst ChevronIcon: React.FC<{ className?: string }> = (props) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\n \"oui-fill-base-contrast-54 hover:oui-fill-base-contrast-80\",\n props.className,\n )}\n >\n <path\n d=\"M5.721 4.585 2.726 6.578a.51.51 0 0 0-.14.7.51.51 0 0 0 .702.14l2.714-1.806 2.715 1.806c.23.153.549.089.702-.14a.51.51 0 0 0-.14-.7L6.283 4.585a.51.51 0 0 0-.562 0\"\n // fill=\"url(#a)\"\n />\n <defs>\n {/* <linearGradient\n id=\"a\"\n x1=\"9.502\"\n y1=\"6.001\"\n x2=\"2.502\"\n y2=\"6.001\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient> */}\n </defs>\n </svg>\n );\n};\n","import React from \"react\";\nimport { useTopTabScript } from \"./topTab.script\";\nimport { TopTab } from \"./topTab.ui\";\n\nexport const TopTabWidget: React.FC<{ className?: string }> = (props) => {\n const state = useTopTabScript();\n return <TopTab className={props.className} {...state} />;\n};\n","export { TopTab } from \"./topTab.ui\";\nexport { TopTabWidget } from \"./topTab.widget\";\nexport { useTopTabScript } from \"./topTab.script\";\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\nimport { OrderEntryWidget } from \"@kodiak-finance/orderly-ui-order-entry\";\nimport type { OrderBookAndEntryState } from \"./orderBookAndEntry.script\";\n\nconst LazyOrderBookWidget = React.lazy(() =>\n import(\"../../base/orderBook\").then((mod) => {\n return { default: mod.OrderBookWidget };\n }),\n);\n\nexport const OrderBookAndEntry: React.FC<\n OrderBookAndEntryState & { className?: string }\n> = (props) => {\n const [height, setHeight] = useState(0);\n const divRef = useRef(null);\n\n useEffect(() => {\n const div = divRef.current;\n if (!div) {\n return;\n }\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setHeight(entry.contentRect.height);\n }\n });\n resizeObserver.observe(div);\n return () => {\n resizeObserver.unobserve(div);\n };\n }, []);\n return (\n <div\n className={cn(\n \"oui-mx-1 oui-grid oui-grid-cols-[4fr,6fr] oui-gap-1 \",\n props.className,\n )}\n >\n <div\n className=\"oui-rounded-xl oui-bg-base-9\"\n style={{ height: `${height + 16}px` }}\n >\n <React.Suspense fallback={null}>\n <LazyOrderBookWidget\n symbol={props.symbol}\n height={height ? height - 44 : undefined}\n />\n </React.Suspense>\n </div>\n <div className=\"oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <OrderEntryWidget symbol={props.symbol} containerRef={divRef} />\n </div>\n </div>\n );\n};\n","import { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport const useOrderBookAndEntryScript = () => {\n const { symbol } = useTradingPageContext();\n return {\n symbol,\n };\n};\n\nexport type OrderBookAndEntryState = ReturnType<\n typeof useOrderBookAndEntryScript\n>;\n","import React from \"react\";\nimport { useOrderBookAndEntryScript } from \"./orderBookAndEntry.script\";\nimport { OrderBookAndEntry } from \"./orderBookAndEntry.ui\";\n\nexport const OrderBookAndEntryWidget: React.FC<{ className?: string }> = (\n props,\n) => {\n const state = useOrderBookAndEntryScript();\n return <OrderBookAndEntry className={props.className} {...state} />;\n};\n","export { OrderBookAndEntry } from \"./orderBookAndEntry.ui\";\nexport { OrderBookAndEntryWidget } from \"./orderBookAndEntry.widget\";\nexport { useOrderBookAndEntryScript } from \"./orderBookAndEntry.script\";\n","import { useState } from \"react\";\nimport { useOrderStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { TabType } from \"@kodiak-finance/orderly-ui-orders\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport {\n usePendingOrderCount,\n usePositionsCount,\n useTradingLocalStorage,\n} from \"../../../hooks\";\nimport { useTradingPageContext } from \"../../../provider/tradingPageContext\";\n\nexport enum DataListTabType {\n position = \"Position\",\n pending = \"Pending\",\n tp_sl = \"TP/SL\",\n history = \"History\",\n liquidation = \"Liquidation\",\n assets = \"Assets\",\n}\n\nexport enum DataListTabSubType {\n positionHistory = \"Position history\",\n orderHistory = \"Order history\",\n}\n\nexport const useDataListScript = (props: {\n symbol: string;\n className?: string;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { symbol, sharePnLConfig } = props;\n const [tab, setTab] = useState<DataListTabType>(DataListTabType.position);\n const [subTab, setSubTab] = useState<DataListTabSubType>(\n DataListTabSubType.positionHistory,\n );\n const { t } = useTranslation();\n\n const { onSymbolChange } = useTradingPageContext();\n const localStorage = useTradingLocalStorage();\n\n const [_, { cancelAllOrders, cancelAllTPSLOrders }] = useOrderStream({});\n const { positionCount } = usePositionsCount(symbol);\n const { pendingOrderCount, tpSlOrderCount } = usePendingOrderCount(symbol);\n\n const onCloseAll = (type: TabType) => {\n const title =\n type === TabType.pending\n ? t(\"orders.pending.cancelAll\")\n : type === TabType.tp_sl\n ? t(\"orders.tpsl.cancelAll\")\n : \"\";\n const content =\n type === TabType.pending\n ? t(\"orders.pending.cancelAll.description\")\n : type === TabType.tp_sl\n ? t(\"orders.tpsl.cancelAll.description\")\n : \"\";\n modal.confirm({\n title: title,\n content: <Text size=\"2xs\">{content}</Text>,\n\n onOk: async () => {\n try {\n // await cancelAll(null, { source_type: \"ALL\" });\n if (tab === DataListTabType.tp_sl) {\n await cancelAllTPSLOrders(symbol);\n } else {\n await cancelAllOrders(symbol);\n }\n return Promise.resolve(true);\n } catch (error) {\n // @ts-ignore\n if (error?.message !== undefined) {\n // @ts-ignore\n toast.error(error.message);\n }\n return Promise.resolve(false);\n } finally {\n Promise.resolve();\n }\n },\n });\n };\n\n return {\n tab,\n setTab,\n subTab,\n setSubTab,\n sharePnLConfig,\n symbol,\n positionCount,\n pendingOrderCount,\n tpSlOrderCount,\n ...localStorage,\n onCloseAll,\n onSymbolChange,\n };\n};\n\nexport type DataListState = ReturnType<typeof useDataListScript>;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useRef } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetsModule } from \"@kodiak-finance/orderly-portfolio\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Checkbox,\n Divider,\n Flex,\n TabPanel,\n Tabs,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { TabPanelProps } from \"@kodiak-finance/orderly-ui\";\nimport {\n MobileOrderListWidget,\n TabType,\n} from \"@kodiak-finance/orderly-ui-orders\";\nimport {\n MobileLiquidationWidget,\n MobilePositionHistoryWidget,\n MobilePositionsWidget,\n} from \"@kodiak-finance/orderly-ui-positions\";\nimport { useMobileExport } from \"../../../hooks/useMobileExport\";\nimport {\n getPositionExportColumns,\n getOrderExportColumns,\n getPositionHistoryExportColumns,\n getLiquidationExportColumns,\n exportToCSVFile,\n} from \"../../../utils/csvExportService\";\nimport {\n type DataListState,\n DataListTabSubType,\n DataListTabType,\n} from \"./dataList.script\";\n\nconst LazyPositionHeaderWidget = React.lazy(() =>\n import(\"../../base/positionHeader\").then((mod) => {\n return { default: mod.PositionHeaderWidget };\n }),\n);\n\nconst SymbolControlHeader: React.FC<\n DataListState & {\n type: TabType;\n ordersStatus?: OrderStatus;\n onExport?: () => void;\n isExportDisabled?: boolean;\n }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n px={2}\n py={2}\n width={\"100%\"}\n justify={\"between\"}\n gap={2}\n className=\"oui-rounded-b-xl oui-bg-base-9\"\n >\n <Flex className=\"oui-cursor-pointer oui-gap-[2px]\">\n <Checkbox\n color=\"white\"\n checked={!props.showAllSymbol}\n onCheckedChange={(checked: boolean) => {\n props.setShowAllSymbol(!checked);\n }}\n />\n <Text\n size=\"2xs\"\n intensity={54}\n onClick={() => {\n props.setShowAllSymbol(!props.showAllSymbol);\n }}\n >\n {t(\"trading.hideOtherSymbols\")}\n </Text>\n </Flex>\n <Flex gap={1}>\n {props.onExport && (\n <Button\n variant=\"outlined\"\n size=\"xs\"\n color=\"secondary\"\n disabled={props.isExportDisabled}\n onClick={props.onExport}\n >\n {t(\"common.export\") || \"Export CSV\"}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n size=\"xs\"\n color=\"secondary\"\n onClick={() => props.onCloseAll(props.type)}\n >\n {t(\"trading.orders.closeAll\")}\n </Button>\n </Flex>\n </Flex>\n );\n};\n\nconst OrdersView = React.forwardRef<\n any,\n DataListState & {\n type: TabType;\n ordersStatus?: OrderStatus;\n onExport?: () => void;\n isExportDisabled?: boolean;\n }\n>((props, ref) => {\n return (\n <Flex direction={\"column\"} pb={2} width={\"100%\"}>\n <Divider className=\"oui-w-full\" />\n {props.type !== TabType.orderHistory && (\n <SymbolControlHeader\n {...props}\n onExport={props.onExport}\n isExportDisabled={props.isExportDisabled}\n />\n )}\n <MobileOrderListWidget\n symbol={props.showAllSymbol ? undefined : props.symbol}\n onSymbolChange={props.onSymbolChange}\n type={props.type}\n ordersStatus={props.ordersStatus}\n classNames={{\n root: \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden\",\n content: \"!oui-space-y-1\",\n cell: \"oui-py-2 oui-bg-base-9 oui-p-2 oui-rounded-xl\",\n }}\n sharePnLConfig={props.sharePnLConfig}\n showFilter={props.type === TabType.orderHistory}\n filterConfig={{ range: { from: undefined, to: undefined } }}\n onExport={\n props.type === TabType.orderHistory ? props.onExport : undefined\n }\n ref={ref}\n />\n </Flex>\n );\n});\n\nconst PositionsView = React.forwardRef<\n any,\n DataListState & { onExport?: () => void }\n>((props, ref) => {\n return (\n <Flex direction={\"column\"} gap={2}>\n <React.Suspense fallback={null}>\n <LazyPositionHeaderWidget\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n symbol={props.showAllSymbol ? undefined : props.symbol}\n unPnlPriceBasis={props.unPnlPriceBasis}\n onExport={props.onExport}\n />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <MobilePositionsWidget\n symbol={props.showAllSymbol ? undefined : props.symbol}\n onSymbolChange={props.onSymbolChange}\n sharePnLConfig={props.sharePnLConfig}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n ref={ref}\n />\n </React.Suspense>\n </Flex>\n );\n});\n\nconst HistoryTab: React.FC<\n DataListState & {\n onExportPositionHistory?: () => void;\n onExportOrderHistory?: () => void;\n positionHistoryRef?: React.RefObject<any>;\n orderHistoryRef?: React.RefObject<any>;\n }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-min-h-[300px]\">\n <Tabs\n value={props.subTab}\n onValueChange={(e: any) => props.setSubTab(e)}\n size=\"md\"\n classNames={{ tabsList: \"oui-bg-base-9 oui-rounded-t-xl oui-p-2\" }}\n >\n <TabPanel\n title={t(\"positions.positionHistory\")}\n value={DataListTabSubType.positionHistory}\n >\n <MobilePositionHistoryWidget\n symbol={props.showAllSymbol ? undefined : props.symbol}\n onSymbolChange={props.onSymbolChange}\n classNames={{ cell: \"oui-p-2 oui-bg-base-9 oui-rounded-xl\" }}\n sharePnLConfig={props.sharePnLConfig}\n ref={props.positionHistoryRef}\n onExport={props.onExportPositionHistory}\n />\n </TabPanel>\n <TabPanel\n title={t(\"orders.orderHistory\")}\n value={DataListTabSubType.orderHistory}\n >\n <OrdersView\n type={TabType.orderHistory}\n {...props}\n ref={props.orderHistoryRef}\n onExport={props.onExportOrderHistory}\n />\n </TabPanel>\n </Tabs>\n </div>\n );\n};\n\nexport const DataList: React.FC<DataListState & { className?: string }> = (\n props,\n) => {\n const { t } = useTranslation();\n const mobilePositionsRef = useRef<any>(null);\n const mobilePendingRef = useRef<any>(null);\n const mobileTpSlRef = useRef<any>(null);\n const mobilePositionHistoryRef = useRef<any>(null);\n const mobileOrderHistoryRef = useRef<any>(null);\n const mobileLiquidationRef = useRef<any>(null);\n\n const {\n positionCount = 0,\n pendingOrderCount = 0,\n tpSlOrderCount = 0,\n showAllSymbol,\n symbol,\n tab,\n setTab,\n className,\n } = props;\n\n // Helper function to check if current tab has data\n const isCurrentTabEmpty = (() => {\n switch (tab) {\n case DataListTabType.position:\n return (\n !mobilePositionsRef.current?.getDataSource?.() ||\n mobilePositionsRef.current.getDataSource().length === 0\n );\n case DataListTabType.pending:\n return (\n !mobilePendingRef.current?.getDataSource?.() ||\n mobilePendingRef.current.getDataSource().length === 0\n );\n case DataListTabType.tp_sl:\n return (\n !mobileTpSlRef.current?.getDataSource?.() ||\n mobileTpSlRef.current.getDataSource().length === 0\n );\n case DataListTabType.liquidation:\n return (\n !mobileLiquidationRef.current?.getDataSource?.() ||\n mobileLiquidationRef.current.getDataSource().length === 0\n );\n default:\n return true;\n }\n })();\n\n // Export handlers for each tab\n const handleExportPositions = () => {\n const data = mobilePositionsRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `positions_${new Date().getTime()}`,\n columns: getPositionExportColumns(),\n data,\n });\n }\n };\n\n const handleExportPending = () => {\n const data = mobilePendingRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `pending_orders_${new Date().getTime()}`,\n columns: getOrderExportColumns(\"pending\"),\n data,\n });\n }\n };\n\n const handleExportTpSl = () => {\n const data = mobileTpSlRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `tp_sl_orders_${new Date().getTime()}`,\n columns: getOrderExportColumns(\"tp_sl\"),\n data,\n });\n }\n };\n\n const handleExportPositionHistory = () => {\n const data = mobilePositionHistoryRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `position_history_${new Date().getTime()}`,\n columns: getPositionHistoryExportColumns(),\n data,\n });\n }\n };\n\n const handleExportOrderHistory = () => {\n const data = mobileOrderHistoryRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `order_history_${new Date().getTime()}`,\n columns: getOrderExportColumns(\"orderHistory\"),\n data,\n });\n }\n };\n\n const handleExportLiquidation = () => {\n const data = mobileLiquidationRef.current?.getDataSource?.();\n if (data && data.length > 0) {\n exportToCSVFile({\n filename: `liquidation_${new Date().getTime()}`,\n columns: getLiquidationExportColumns(),\n data,\n });\n }\n };\n\n const tabPanelItems: (TabPanelProps & { content?: React.ReactNode })[] = [\n {\n title: `${t(\"common.positions\")} ${positionCount > 0 ? `(${positionCount})` : \"\"}`,\n value: DataListTabType.position,\n content: (\n <PositionsView\n {...props}\n ref={mobilePositionsRef}\n onExport={handleExportPositions}\n />\n ),\n },\n {\n title: `${t(\"orders.status.pending\")} ${pendingOrderCount > 0 ? `(${pendingOrderCount})` : \"\"}`,\n value: DataListTabType.pending,\n content: (\n <OrdersView\n type={TabType.pending}\n ordersStatus={OrderStatus.INCOMPLETE}\n {...props}\n ref={mobilePendingRef}\n onExport={handleExportPending}\n isExportDisabled={\n tab === DataListTabType.pending && isCurrentTabEmpty\n }\n />\n ),\n },\n {\n title: `${t(\"common.tpsl\")} ${tpSlOrderCount > 0 ? `(${tpSlOrderCount})` : \"\"}`,\n value: DataListTabType.tp_sl,\n content: (\n <OrdersView\n type={TabType.tp_sl}\n ordersStatus={OrderStatus.INCOMPLETE}\n {...props}\n ref={mobileTpSlRef}\n onExport={handleExportTpSl}\n isExportDisabled={tab === DataListTabType.tp_sl && isCurrentTabEmpty}\n />\n ),\n },\n {\n title: t(\"trading.history\"),\n value: DataListTabType.history,\n content: (\n <HistoryTab\n {...props}\n positionHistoryRef={mobilePositionHistoryRef}\n orderHistoryRef={mobileOrderHistoryRef}\n onExportPositionHistory={handleExportPositionHistory}\n onExportOrderHistory={handleExportOrderHistory}\n />\n ),\n },\n {\n title: t(\"positions.liquidation\"),\n value: DataListTabType.liquidation,\n content: (\n <MobileLiquidationWidget\n enableLoadMore\n symbol={showAllSymbol ? undefined : symbol}\n classNames={{ cell: \"oui-p-2 oui-bg-base-9 oui-rounded-xl\" }}\n ref={mobileLiquidationRef}\n onExport={handleExportLiquidation}\n />\n ),\n },\n ];\n\n return (\n <Tabs\n value={tab}\n defaultValue={DataListTabType.position}\n onValueChange={(e) => setTab(e as DataListTabType)}\n size=\"lg\"\n className={className}\n classNames={{\n tabsList:\n \"oui-bg-base-9 oui-rounded-t-xl oui-p-2 oui-overflow-x-scroll oui-hide-scrollbar\",\n }}\n >\n {tabPanelItems.map((item) => {\n const { content, ...rest } = item;\n return (\n <TabPanel {...rest} key={`item-${rest.value}`}>\n {content}\n </TabPanel>\n );\n })}\n </Tabs>\n );\n};\n","import React from \"react\";\nimport type { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { useDataListScript } from \"./dataList.script\";\nimport { DataList } from \"./dataList.ui\";\n\nexport const DataListWidget: React.FC<{\n symbol: string;\n className?: string;\n sharePnLConfig?: SharePnLConfig;\n}> = (props) => {\n const state = useDataListScript(props);\n return <DataList {...state} className={props.className} />;\n};\n","export { DataList } from \"./dataList.ui\";\nexport { DataListWidget } from \"./dataList.widget\";\nexport { useDataListScript } from \"./dataList.script\";\n","export type {\n ShareOptions,\n TradingPageProps,\n ReferralProps,\n TradingRewardsProps,\n} from \"./types/types\";\n\nexport * from \"./components/desktop/dataList\";\nexport * from \"./components/base/lastTrades\";\nexport * from \"./components/desktop/assetView\";\nexport * from \"./components/base/orderBook\";\nexport * from \"./components/desktop/riskRate\";\nexport * from \"./components/desktop/orderBookAndTrades\";\nexport * from \"./components/desktop/layout/splitLayout/splitLayout\";\nexport * from \"./components/mobile/bottomNavBar\";\nexport * from \"./components/mobile/portfolioSheet\";\nexport * from \"./components/mobile/fundingRate\";\nexport * from \"./components/mobile/fundingRateModal\";\nexport * from \"./pages/trading\";\nexport * from \"./provider/tradingPageContext\";\nexport * from \"./provider/tradingPageProvider\";\nexport * from \"./hooks\";\n","import React, { PropsWithChildren, forwardRef } from \"react\";\nimport Split, { SplitProps } from \"@uiw/react-split\";\nimport { SplitLineBar } from \"./splitLineBar\";\n\ntype SplitLayoutProps = PropsWithChildren<SplitProps> & {\n onSizeChange?: (size: string) => void;\n};\n\nexport const SplitLayout = forwardRef<Split, SplitLayoutProps>((props, ref) => {\n const { onSizeChange, ...rest } = props;\n return (\n <Split\n ref={ref}\n {...rest}\n lineBar\n renderBar={(barProps) => <SplitLineBar {...barProps} mode={props.mode} />}\n onDragEnd={(_, width) => onSizeChange?.(`${width}`)}\n />\n );\n});\n","import React, { HTMLAttributes, useMemo } from \"react\";\nimport { SplitProps } from \"@uiw/react-split\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type SplitLineBarProps = Pick<SplitProps, \"mode\"> &\n HTMLAttributes<HTMLDivElement>;\n\nexport const SplitLineBar: React.FC<SplitLineBarProps> = (props) => {\n const { onMouseDown, mode = \"horizontal\", ...rest } = props;\n\n const disable = useMemo(\n () => props.className?.split(\" \").includes(\"disable\"),\n [props.className],\n );\n\n const filterCls = useMemo(\n () => props.className?.split(\" \").filter((cls) => cls !== \"disable\"),\n [props.className],\n );\n\n return (\n <div\n {...rest}\n className={cn(\n filterCls,\n \"!oui-transition-none\",\n \"!oui-shadow-none !oui-bg-transparent\",\n \"hover:!oui-bg-primary-light hover:!oui-shadow-[0px_0px_4px_0px] hover:!oui-shadow-primary-light/80\",\n \"active:!oui-bg-primary-light active:!oui-shadow-[0px_0px_4px_0px] active:!oui-shadow-primary-light/80\",\n \"focus:!oui-bg-primary-light focus:!oui-shadow-[0px_0px_4px_0px] focus:!oui-shadow-primary-light/80\",\n mode === \"horizontal\"\n ? \"!oui-w-[2px] !oui-min-w-[2px] !oui-mx-[3px]\"\n : \"!oui-h-[2px] !oui-min-h-[2px] !oui-my-[3px]\",\n disable && \"oui-pointer-events-none\",\n )}\n >\n <div\n onMouseDown={onMouseDown}\n className={cn(\n \"!oui-transition-none\",\n mode === \"horizontal\" ? \"after:!oui-w-[2px]\" : \"after:!oui-h-[2px]\",\n \"after:!oui-bg-transparent after:!oui-shadow-transparent\",\n )}\n />\n </div>\n );\n};\n","import { FC, SVGProps, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Flex, SimpleDialog, Text } from \"@kodiak-finance/orderly-ui\";\nimport { ScanQRCodeWidget } from \"@kodiak-finance/orderly-ui-scaffold\";\nimport { MobileAccountMenuExtension } from \"./account/account.widget\";\nimport { BalanceWidget } from \"./balance\";\nimport { BottomNavBarState } from \"./bottomNavBar.script\";\nimport { ChainWidget } from \"./chain\";\n\nexport const BottomNavBar: FC<BottomNavBarState> = (props) => {\n const renderContent = () => {\n if (props.wrongNetwork) {\n return null;\n }\n\n if (\n !props.disabledConnect &&\n props.status === AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n return <LinkDevice onDisconnect={props.onDisconnect} />;\n }\n\n return <ChainWidget />;\n };\n\n const showScanQRCode =\n !props.disabledConnect &&\n props.status !== AccountStatusEnum.EnableTradingWithoutConnected &&\n props.status < AccountStatusEnum.EnableTrading;\n\n return (\n <div className=\"oui-bg-base-9 oui-border-t oui-border-line-4\">\n <Flex\n height={64}\n gap={1}\n justify={\"end\"}\n itemAlign={\"center\"}\n className=\"oui-px-[14px]\"\n // style={{\n // height: \"calc(64px + env(safe-area-inset-bottom))\"\n // }}\n >\n <BalanceWidget />\n <Flex gap={2}>\n {showScanQRCode && <ScanQRCodeWidget />}\n {renderContent()}\n <MobileAccountMenuExtension />\n </Flex>\n </Flex>\n <div className=\"oui-h-[env(safe-area-inset-bottom)]\" />\n </div>\n );\n};\n\ntype LinkDeviceProps = {\n onDisconnect: () => void;\n};\n\nconst LinkDevice: FC<LinkDeviceProps> = (props) => {\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n const showDialog = () => {\n setOpen(true);\n };\n\n const hideDialog = () => {\n setOpen(false);\n };\n\n return (\n <>\n <SimpleDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"common.tips\")}\n size=\"xs\"\n actions={{\n secondary: {\n label: t(\"common.cancel\"),\n onClick: hideDialog,\n size: \"md\",\n fullWidth: true,\n },\n primary: {\n label: t(\"connector.disconnect\"),\n onClick: async () => {\n await props.onDisconnect();\n hideDialog();\n },\n size: \"md\",\n variant: \"outlined\",\n color: \"danger\",\n },\n }}\n >\n <Text intensity={54} size=\"sm\">\n {t(\"linkDevice.scanQRCode.connected.description\")}\n </Text>\n </SimpleDialog>\n <Flex\n className=\"oui-text-base-contrast oui-px-[6px]\"\n intensity={500}\n height={28}\n r=\"md\"\n onClick={showDialog}\n >\n <DesktopIcon />\n <Dot />\n <LinkIcon />\n <Dot />\n <MobileIcon />\n </Flex>\n </>\n );\n};\n\nconst Dot = () => {\n return (\n <Flex className=\"oui-gap-x-[1px] oui-px-[1px]\">\n <DotIcon />\n <DotIcon />\n <DotIcon />\n </Flex>\n );\n};\n\nconst DesktopIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M4.5 2.93a2.25 2.25 0 0 0-2.25 2.25v5.25a.75.75 0 0 0-.75.75v1.5c0 1.272.93 2.25 2.25 2.25h10.5c1.318 0 2.25-.978 2.25-2.25v-1.5a.75.75 0 0 0-.75-.75V5.18a2.25 2.25 0 0 0-2.25-2.25zm0 1.5h9a.75.75 0 0 1 .75.75v5.25H3.75V5.18a.75.75 0 0 1 .75-.75M3 11.93h12v.75c0 .46-.277.75-.75.75H3.75c-.474 0-.75-.29-.75-.75z\" />\n </svg>\n);\n\nconst MobileIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M13.498 3.715a2.25 2.25 0 0 0-2.25-2.25h-4.5a2.25 2.25 0 0 0-2.25 2.25v10.5a2.25 2.25 0 0 0 2.25 2.25h4.5a2.25 2.25 0 0 0 2.25-2.25zm-1.5 0v9.75h-6v-9.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 .75.75m-2.25 11.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0\" />\n </svg>\n);\n\nconst LinkIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.007 6a5 5 0 1 1 10 0 5 5 0 0 1-10 0m7.486-2.344A.6.6 0 0 1 8.91 3.5c.15 0 .305.048.418.156a.55.55 0 0 1 0 .798L5.254 8.337a.62.62 0 0 1-.837 0L2.67 6.673a.55.55 0 0 1 0-.798.62.62 0 0 1 .837 0l1.329 1.266z\"\n fill=\"url(#a)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"11.007\"\n y1=\"5.999\"\n x2=\"1.007\"\n y2=\"5.999\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nconst DotIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"2\"\n height=\"2\"\n viewBox=\"0 0 2 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M.667.334a.667.667 0 1 1 0 1.333.667.667 0 0 1 0-1.333\"\n fill=\"url(#a)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"1.333\"\n y1=\"1.001\"\n x2=\"0\"\n y2=\"1.001\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { ExtensionPositionEnum, ExtensionSlot, installExtension } from \"@kodiak-finance/orderly-ui\";\nimport { useAccountScript } from \"./account.script\";\nimport { Account } from \"./account.ui\";\n\nexport const AccountWidget = () => {\n const state = useAccountScript();\n return (<Account {...state} />);\n};\ninstallExtension<any>({\n name: \"mobile-account-menu\",\n scope: [\"*\"],\n positions: [ExtensionPositionEnum.MobileAccountMenu],\n builder: useAccountScript,\n __isInternal: true,\n })((props:any) => {\n return <Account {...props} />;\n });\n \n export const MobileAccountMenuExtension = () => {\n return <ExtensionSlot position={ExtensionPositionEnum.MobileAccountMenu} />;\n };\n ","import { AccountState as AccountStateType } from \"@kodiak-finance/orderly-core\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { useTradingPageContext } from \"../../../../provider/tradingPageContext\";\nimport { AccountSheetWidget } from \"../../accountSheet\";\n\nexport const useAccountScript = () => {\n const { t } = useTranslation();\n const { referral, tradingRewards, bottomSheetLeading } =\n useTradingPageContext();\n const { account, state } = useAccount();\n\n const onShowAccountSheet = () => {\n modal.sheet({\n title: t(\"common.account\"),\n leading: bottomSheetLeading,\n content: <AccountSheetWidget {...referral} {...tradingRewards} />,\n });\n };\n\n return {\n onShowAccountSheet,\n address: account.address,\n state: state as AccountStateType,\n };\n};\n\nexport type AccountState = ReturnType<typeof useAccountScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { ArrowRightShortIcon, Button, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { AccountSheetState } from \"./accountSheet.script\";\nimport { CopyIcon, HeadIcon, OrderlyIcon, USDCIcon } from \"./icons\";\n\nexport const AccountSheet: FC<AccountSheetState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex direction={\"column\"} gap={4}>\n <AccountInfo {...props} />\n <ReferralInfo {...props} />\n <TradingRewardsInfo {...props} />\n <Flex gap={3} width={\"100%\"} justify={\"center\"}>\n {props.showGetTestUSDC && (\n <Button\n variant=\"outlined\"\n // color=\"primary\"\n size=\"md\"\n onClick={props.onGetTestUSDC}\n fullWidth\n loading={props.gettingTestUSDC}\n className=\"oui-border-primary-light oui-text-primary-light\"\n >\n {t(\"trading.faucet.getTestUSDC\")}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"danger\"\n size=\"md\"\n onClick={props.onDisconnect}\n className={props.showGetTestUSDC ? \"oui-w-full\" : \"oui-w-[50%]\"}\n >\n {t(\"connector.disconnect\")}\n </Button>\n </Flex>\n </Flex>\n );\n};\nexport const AccountInfo: FC<AccountSheetState> = (props) => {\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Flex gap={3}>\n <HeadIcon />\n <Flex\n direction={\"column\"}\n justify={\"start\"}\n itemAlign={\"start\"}\n className=\"oui-gap-[2px]\"\n >\n <Text.formatted rule={\"address\"}>{props.address}</Text.formatted>\n <Text.formatted\n size=\"2xs\"\n intensity={80}\n // @ts-ignore\n prefix={\n <div className=\"oui-h-1 oui-w-1 oui-rounded-full oui-bg-success oui-pr-1\" />\n }\n >\n {props.chainName}\n </Text.formatted>\n </Flex>\n </Flex>\n <button\n className=\"oui-cursor-pointer\"\n onClick={() => {\n props.onCopyAddress();\n }}\n >\n <CopyIcon />\n </button>\n </Flex>\n );\n};\n\nexport const ReferralInfo: FC<AccountSheetState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n r=\"lg\"\n p={3}\n className=\"oui-bg-base-6\"\n width={\"100%\"}\n >\n <button\n onClick={props.onClickReferral}\n className=\"oui-cursor-pointer oui-w-full\"\n >\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text size=\"2xs\">{t(\"affiliate.referral\")}</Text>\n <ArrowRightShortIcon color=\"white\" opacity={0.98} size={16} />\n </Flex>\n </button>\n {props.isAffiliate && (\n <Flex\n gradient=\"primary\"\n p={4}\n r=\"lg\"\n width={\"100%\"}\n angle={180}\n justify={\"between\"}\n >\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text size=\"xs\">{t(\"common.affiliate\")}</Text>\n <Text size=\"2xs\" intensity={54}>\n ({t(\"affiliate.commission.30d\")})\n </Text>\n </Flex>\n <Flex className=\"oui-gap-[6px]\">\n <USDCIcon />\n <Text.numeral\n dp={2}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n rule=\"price\"\n >\n {props.affiliateCommission30D ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n )}\n {props.isTrader && (\n <Flex\n gradient=\"success\"\n p={4}\n r=\"lg\"\n width={\"100%\"}\n angle={180}\n justify={\"between\"}\n >\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text size=\"xs\">{t(\"affiliate.trader\")}</Text>\n <Text size=\"2xs\" intensity={54}>\n ({t(\"affiliate.commission.30d\")})\n </Text>\n </Flex>\n <Flex className=\"oui-gap-[6px]\">\n <USDCIcon />\n <Text.numeral\n dp={2}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n rule=\"price\"\n >\n {props.traderCommission30D ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n )}\n </Flex>\n );\n};\n\nexport const TradingRewardsInfo: FC<AccountSheetState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n r=\"lg\"\n p={3}\n className=\"oui-bg-base-6\"\n width={\"100%\"}\n >\n <button\n onClick={props.onClickTradingRewards}\n className=\"oui-cursor-pointer oui-w-full\"\n >\n <Flex justify={\"between\"} width={\"100%\"}>\n <Flex gap={1} className=\"oui-text-base-contrast oui-text-2xs\">\n <Text>{t(\"common.tradingRewards\")}</Text>\n <Text intensity={54}>\n (\n <Text>{`${(\n t(\"tradingRewards.epoch\") as string\n )?.toLowerCase()} `}</Text>\n <Text intensity={98}>{props.curEpochId}</Text> )\n </Text>\n </Flex>\n <ArrowRightShortIcon color=\"white\" opacity={0.98} size={16} />\n </Flex>\n </button>\n <Flex\n p={4}\n r=\"lg\"\n width={\"100%\"}\n angle={180}\n justify={\"between\"}\n className=\"oui-bg-gradient-to-t oui-from-[#2d0061] oui-to-[#bd6bed]\"\n >\n <Text size=\"2xs\" intensity={80}>\n {t(\"tradingRewards.myEstRewards\")}\n </Text>\n\n <Flex className=\"oui-gap-[6px]\">\n <OrderlyIcon />\n <Text.numeral\n dp={2}\n padding={false}\n rm={Decimal.ROUND_DOWN}\n rule=\"price\"\n >\n {props.estRewards}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n","export const HeadIcon = () => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-rounded-full\"\n >\n <g clipPath=\"url(#a)\">\n <path\n d=\"m31.002 14.493-8.326-22.51L.166.31l8.327 22.51z\"\n fill=\"#03435D\"\n />\n <path\n d=\"m4.456-8.716-18.03 15.84 15.84 18.03 18.03-15.84z\"\n fill=\"#157CF2\"\n />\n <path\n d=\"m17.548 38.67 22.825-7.416-7.416-22.825-22.826 7.416z\"\n fill=\"#F3E200\"\n />\n </g>\n <defs>\n <clipPath id=\"a\">\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#fff\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport const CopyIcon = () => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.832 2.492A3.333 3.333 0 0 0 2.5 5.826v5a3.333 3.333 0 0 0 3.333 3.333 3.333 3.333 0 0 0 3.334 3.333h5a3.333 3.333 0 0 0 3.333-3.333v-5a3.333 3.333 0 0 0-3.333-3.333 3.333 3.333 0 0 0-3.334-3.334zm8.334 5c.92 0 1.666.746 1.666 1.667v5c0 .92-.746 1.666-1.666 1.666h-5c-.92 0-1.667-.745-1.667-1.666h3.333a3.333 3.333 0 0 0 3.334-3.334z\"\n fill=\"rgb(var(--oui-color-primary))\"\n />\n </svg>\n );\n};\n\nexport const USDCIcon = (props: { size?: number }) => {\n const { size = 20 } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#a)\">\n <path\n d=\"M10 20c5.542 0 10-4.458 10-10S15.542 0 10 0 0 4.458 0 10s4.458 10 10 10\"\n fill=\"#2775CA\"\n />\n <path\n d=\"M13 11.473c0-1.452-.94-1.95-2.82-2.158-1.344-.166-1.613-.498-1.613-1.078s.448-.955 1.343-.955c.806 0 1.254.25 1.478.872.045.124.18.207.313.207h.717c.179 0 .313-.125.313-.29v-.042c-.179-.913-.985-1.618-2.015-1.701v-.996c0-.166-.134-.29-.358-.332h-.671c-.18 0-.314.124-.359.332v.954c-1.343.166-2.194.996-2.194 2.034 0 1.369.896 1.908 2.776 2.116 1.254.207 1.657.456 1.657 1.12s-.627 1.12-1.477 1.12c-1.165 0-1.568-.456-1.702-1.078a.32.32 0 0 0-.313-.25h-.762c-.179 0-.313.125-.313.291v.042c.179 1.037.895 1.784 2.373 1.991v.996c0 .166.134.29.358.332h.672c.18 0 .313-.124.358-.332v-.996C12.105 13.465 13 12.593 13 11.473\"\n fill=\"#fff\"\n fillOpacity=\".98\"\n />\n <path\n d=\"M7.74 16.57c-3.458-1.215-5.23-4.986-3.945-8.324.665-1.821 2.127-3.208 3.944-3.859.178-.086.266-.216.266-.433v-.607c0-.174-.088-.304-.266-.347-.044 0-.133 0-.177.043-4.21 1.3-6.516 5.68-5.186 9.798.798 2.428 2.704 4.292 5.186 5.072.177.087.355 0 .399-.173.044-.043.044-.087.044-.173v-.608c0-.13-.133-.303-.266-.39m4.698-13.527c-.178-.086-.355 0-.4.174-.043.043-.043.086-.043.173v.607c0 .174.133.347.266.434 3.457 1.213 5.23 4.985 3.944 8.323-.664 1.821-2.127 3.209-3.944 3.859-.178.086-.266.216-.266.433v.607c0 .174.088.304.266.347.044 0 .133 0 .177-.043 4.21-1.3 6.515-5.68 5.186-9.798-.798-2.471-2.748-4.335-5.186-5.116\"\n fill=\"#fff\"\n />\n </g>\n <defs>\n <clipPath id=\"a\">\n <path fill=\"#fff\" d=\"M0 0h20v20H0z\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport const OrderlyIcon = (props: { size?: number }) => {\n const { size = 20 } = props;\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_6403_64483)\">\n <path\n d=\"M10.0245 19.9493C15.5198 19.9493 19.9747 15.4944 19.9747 9.99908C19.9747 4.50371 15.5198 0.0488281 10.0245 0.0488281C4.5291 0.0488281 0.0742188 4.50371 0.0742188 9.99908C0.0742188 15.4944 4.5291 19.9493 10.0245 19.9493Z\"\n fill=\"url(#paint0_linear_6403_64483)\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.1553 4.89304C14.2199 4.94541 14.1821 5.04758 14.0989 5.04758H5.95035C5.86716 5.04758 5.82936 4.94541 5.894 4.89304C7.0223 3.97912 8.45953 3.43164 10.0246 3.43164C11.5898 3.43164 13.0269 3.97912 14.1553 4.89304Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.47013 11.7869C7.42315 11.7199 7.34748 11.6777 7.26565 11.6777H3.82985C3.75113 11.6777 3.69375 11.7525 3.71563 11.8281C4.5078 14.565 7.0326 16.566 10.0247 16.566C13.017 16.566 15.5417 14.565 16.3339 11.8281C16.3558 11.7525 16.2984 11.6777 16.2197 11.6777H12.7839C12.702 11.6777 12.6264 11.7199 12.5795 11.7869C12.0155 12.5911 11.0815 13.1167 10.0248 13.1167C8.96803 13.1167 8.03406 12.5911 7.47013 11.7869Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.3347 7.90519C12.3822 7.95756 12.449 7.9891 12.5196 7.9891H16.1137C16.1952 7.9891 16.253 7.90983 16.2261 7.83301C15.9724 7.10689 15.5948 6.43893 15.1187 5.85447C15.074 5.79961 15.0067 5.76855 14.9358 5.76855H5.11323C5.04247 5.76855 4.97512 5.79961 4.93044 5.85447C4.45429 6.43893 4.0767 7.10689 3.82306 7.83301C3.79622 7.90983 3.85398 7.9891 3.93536 7.9891H7.52952C7.60022 7.9891 7.66694 7.95756 7.71445 7.90519C8.28491 7.2763 9.10861 6.88136 10.0246 6.88136C10.9405 6.88136 11.7643 7.2763 12.3347 7.90519Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.1164 10.9586C13.0553 10.9586 13.0118 10.899 13.0284 10.8401C13.1033 10.5722 13.1433 10.2898 13.1433 9.9981C13.1433 9.58758 13.064 9.19556 12.9199 8.83657C12.8954 8.77581 12.9392 8.70801 13.0046 8.70801H16.392C16.4349 8.70801 16.472 8.73831 16.4799 8.78052C16.5538 9.17511 16.5925 9.58216 16.5925 9.9982C16.5925 10.2978 16.5724 10.5926 16.5337 10.8815C16.5277 10.9258 16.4897 10.9586 16.4451 10.9586H13.1164ZM7.02223 10.8401C7.03868 10.899 6.99532 10.9586 6.93421 10.9586H3.60551C3.56084 10.9586 3.52285 10.9258 3.5169 10.8815C3.47807 10.5926 3.45801 10.2978 3.45801 9.9982C3.45801 9.58216 3.4967 9.17511 3.57069 8.78052C3.57859 8.73831 3.61563 8.70801 3.65856 8.70801H7.04593C7.11141 8.70801 7.15516 8.77581 7.13076 8.83657C6.98657 9.19556 6.90722 9.58758 6.90722 9.9981C6.90722 10.2898 6.94728 10.5722 7.02223 10.8401Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_6403_64483\"\n x1=\"10.0245\"\n y1=\"0.0488561\"\n x2=\"10.0245\"\n y2=\"19.9493\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#C750FF\" />\n <stop offset=\"1\" stopColor=\"#5800E8\" />\n </linearGradient>\n <clipPath id=\"clip0_6403_64483\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n TWType,\n useAccount,\n useChains,\n useConfig,\n useCurEpochEstimate,\n useEpochInfo,\n useLocalStorage,\n useMutation,\n useReferralInfo,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum, ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { modal, toast, useModal } from \"@kodiak-finance/orderly-ui\";\nimport { isTestnet } from \"@kodiak-finance/orderly-utils\";\nimport { ReferralProps, TradingRewardsProps } from \"../../../types/types\";\n\nexport const useAccountSheetScript = (\n props: ReferralProps & TradingRewardsProps,\n) => {\n const { t } = useTranslation();\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n const { account, state } = useAccount();\n const accountId = account.accountId;\n const address = account.address;\n const { hide } = useModal();\n\n const config = useConfig();\n\n const { connectedChain, disconnect, namespace } = useWalletConnector();\n\n const chainId =\n account.chainId || connectedChain?.id || linkDeviceStorage?.chainId;\n\n const showGetTestUSDC = useMemo(() => {\n if (chainId) {\n return (\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected) &&\n // @ts-ignore\n isTestnet(parseInt(chainId))\n );\n }\n\n return false;\n }, [state.status, chainId]);\n\n const chainName = useGetChains(chainId);\n\n const operatorUrl = config.get<string>(\"operatorUrl\");\n\n const onCopyAddress = () => {\n navigator.clipboard.writeText(address ?? \"\");\n toast.success(t(\"common.copy.copied\"));\n };\n\n const {\n affiliateCommission30D,\n traderCommission30D,\n isAffiliate,\n isTrader,\n onClickReferral,\n } = useReferral(props.onClickReferral);\n\n const { curEpochId, estRewards, onClickTradingRewards } = useTradingRewards(\n props.onClickTradingRewards,\n );\n\n const onDisconnect = async () => {\n // The cache must be cleared first, otherwise it will be possible entered link device mode\n localStorage.removeItem(\"orderly_link_device\");\n await disconnect({\n label: state.connectWallet?.name,\n });\n await account.disconnect();\n hide();\n };\n\n const [getTestUSDC, { isMutating: gettingTestUSDC }] = useMutation(\n `${operatorUrl}/v1/faucet/usdc`,\n );\n\n const onGetTestUSDC = () => {\n if (\n state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n // return modal.show(WalletConnectSheet, {\n // status: state.status,\n // });\n return;\n }\n\n const message = t(\"trading.faucet.getTestUSDC.success\", {\n quantity: namespace === ChainNamespace.solana ? \"100\" : \"1,000\",\n });\n\n return getTestUSDC({\n chain_id: chainId?.toString(),\n user_address: state.address,\n broker_id: config.get(\"brokerId\"),\n }).then(\n (res: any) => {\n if (res.success) {\n return modal.alert({\n title: t(\"trading.faucet.getTestUSDC\"),\n message,\n onOk: () => {\n return Promise.resolve(true);\n },\n });\n }\n res.message && toast.error(res.message);\n // return Promise.reject(res);\n },\n (error: Error) => {\n toast.error(error.message);\n },\n );\n };\n return {\n accountId,\n address,\n chainId,\n chainName,\n onCopyAddress,\n\n affiliateCommission30D,\n onClickReferral,\n isAffiliate,\n isTrader,\n traderCommission30D,\n\n curEpochId,\n onClickTradingRewards,\n estRewards,\n\n onDisconnect,\n showGetTestUSDC,\n onGetTestUSDC,\n gettingTestUSDC,\n };\n};\n\nconst useReferral = (_onClickReferral?: () => void) => {\n const { data, isLoading, isAffiliate, isTrader } = useReferralInfo();\n\n const affiliateCommission30D = useMemo(() => {\n if (isAffiliate) {\n return data?.referrer_info?.[\"30d_referrer_rebate\"];\n }\n return undefined;\n }, [data, isAffiliate]);\n\n const traderCommission30D = useMemo(() => {\n if (isTrader) {\n return data?.referee_info?.[\"30d_referee_rebate\"];\n }\n return undefined;\n }, [data, isTrader]);\n\n const onClickReferral = () => {\n _onClickReferral?.();\n };\n\n return {\n onClickReferral,\n affiliateCommission30D,\n traderCommission30D,\n isAffiliate,\n isTrader,\n\n // WARNING: test data\n // affiliateCommission30D: 1234.43,\n // traderCommission30D:44343.33,\n // isAffiliate: true,\n // isTrader: true,\n };\n};\n\nconst useTradingRewards = (_onClick?: () => void) => {\n const [curEpochEstimate] = useCurEpochEstimate(TWType.normal);\n const [list, curEpoch] = useEpochInfo(TWType.normal);\n const curEpochId = useMemo(() => {\n return curEpoch.curEpochInfo?.epoch_id ?? \"--\";\n }, [curEpoch]);\n\n const estRewards = useMemo(() => {\n if (typeof curEpochEstimate?.est_r_wallet === \"undefined\") {\n return \"--\";\n }\n return curEpochEstimate?.est_r_wallet;\n }, [curEpochEstimate]);\n\n const onClickTradingRewards = () => {\n _onClick?.();\n };\n\n return {\n curEpochId,\n estRewards,\n onClickTradingRewards,\n };\n};\n\nfunction useGetChains(chainId: number) {\n const [mainChains, { findByChainId }] = useChains(\"mainnet\", {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const chainName = useMemo(() => {\n // @ts-ignore\n const chain = findByChainId(parseInt(chainId), \"network_infos\");\n\n if (!chain) {\n return \"Unknown\";\n }\n // // @ts-ignore\n // if (isTestnet(chain.chain_id)) {\n // return \"Testnet\";\n // }\n // @ts-ignore\n return chain.name;\n }, [chainId, findByChainId]);\n\n return chainName;\n}\n\nexport type AccountSheetState = ReturnType<typeof useAccountSheetScript>;\n","import { ReferralProps, TradingRewardsProps } from \"../../../types/types\";\nimport { useAccountSheetScript } from \"./accountSheet.script\";\nimport { AccountSheet } from \"./accountSheet.ui\";\n\nexport const AccountSheetWidget = (\n props: ReferralProps & TradingRewardsProps\n) => {\n const state = useAccountSheetScript(props);\n return <AccountSheet {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button, formatAddress } from \"@kodiak-finance/orderly-ui\";\nimport { AccountState } from \"./account.script\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\n\nexport const Account: FC<AccountState> = (props) => {\n return (\n <AuthGuard\n buttonProps={{\n size: \"sm\",\n }}\n >\n <Button\n variant=\"gradient\"\n size={\"sm\"}\n className=\"oui-max-w-[83px]\"\n onClick={(e) => {\n props.onShowAccountSheet();\n }}\n >\n {formatAddress(props.address!, [4, 4])}\n </Button>\n </AuthGuard>\n );\n};\n","import { FC } from \"react\";\nimport { BalanceState } from \"./balance.script\";\n\nexport const Balance: FC<BalanceState> = () => {\n return null;\n};\n","export const useBalanceScript = () => {\n return {};\n};\n\nexport type BalanceState = ReturnType<typeof useBalanceScript>;\n","import { useBalanceScript } from \"./balance.script\";\nimport { Balance } from \"./balance.ui\";\n\nexport const BalanceWidget = () => {\n const state = useBalanceScript();\n return <Balance {...state} />;\n};\n","import { FC } from \"react\";\nimport { Box, ChainIcon, modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { ChainState } from \"./chain.script\";\nimport { ChainSelectorSheetId } from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const Chain: FC<ChainState> = (props) => {\n const { t } = useTranslation();\n\n return (\n <button\n onClick={(e) => {\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorSheetId, {\n // networkId: props.networkId,\n bridgeLessOnly: false,\n isWrongNetwork: props.wrongNetwork,\n })\n .then(\n (r: any) => {\n if (r?.chainId) {\n props.setCurrentChainId(r?.chainId);\n }\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n }}\n >\n <Box className=\"oui-relative oui-rounded-t-[6px] oui-rounded-bl-[6px] oui-rounded-br-[3px] oui-bg-base-5 oui-px-2 oui-h-7 oui-flex oui-items-center\">\n <ChainIcon chainId={props.currentChainId!} size=\"2xs\" />\n <div className=\"oui-absolute oui-right-0 oui-bottom-0\">\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9 6V0L0 9h6a3 3 0 0 0 3-3\" fill=\"url(#a)\" />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"9\"\n y1=\"4.5\"\n x2=\"0\"\n y2=\"4.5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop\n offset=\"1\"\n stopColor=\"rgb(var(--oui-gradient-brand-start))\"\n />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </Box>\n </button>\n );\n};\n","import { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\n\nexport const useChainScript = () => {\n const config = useConfig();\n const { wrongNetwork, currentChainId, setCurrentChainId } = useAppContext();\n\n const networkId = config.get(\"networkId\");\n\n return {\n currentChainId,\n setCurrentChainId,\n networkId,\n wrongNetwork,\n };\n};\n\nexport type ChainState = ReturnType<typeof useChainScript>;\n","import React from \"react\";\nimport { useChainScript } from \"./chain.script\";\nimport { Chain } from \"./chain.ui\";\n\nexport const ChainWidget: React.FC = () => {\n const state = useChainScript();\n return <Chain {...state} />;\n};\n","import { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\n\nexport const useBottomNavBarScript = () => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { account, state } = useAccount();\n\n /** link device, acally wallet not connect */\n const onDisconnect = async () => {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n };\n\n return {\n wrongNetwork,\n disabledConnect,\n status: state.status,\n onDisconnect,\n };\n};\n\nexport type BottomNavBarState = ReturnType<typeof useBottomNavBarScript>;\n","import React from \"react\";\nimport { useBottomNavBarScript } from \"./bottomNavBar.script\";\nimport { BottomNavBar } from \"./bottomNavBar.ui\";\n\nexport const BottomNavBarWidget: React.FC = () => {\n const state = useBottomNavBarScript();\n return <BottomNavBar {...state} />;\n};\n","import { FC, useCallback, useId } from \"react\";\nimport React from \"react\";\nimport { Trans, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n ArrowDownShortIcon,\n ArrowLeftRightIcon,\n ArrowUpShortIcon,\n Button,\n cn,\n Divider,\n EyeCloseIcon,\n EyeIcon,\n Flex,\n Grid,\n Input,\n inputFormatter,\n InputFormatter,\n modal,\n PlusIcon,\n ReduceIcon,\n RefreshIcon,\n Statistic,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { LeverageProps, LeverageSlider } from \"@kodiak-finance/orderly-ui-leverage\";\nimport { USDCIcon } from \"../accountSheet/icons\";\nimport {\n getMarginRatioColor,\n PortfolioSheetState,\n} from \"./portfolioSheet.script\";\nimport { RiskIndicator } from \"./riskIndicator\";\n\nexport const PortfolioSheet: FC<PortfolioSheetState> = (props) => {\n return (\n <Flex direction={\"column\"} gap={4} width={\"100%\"}>\n <Asset {...props} />\n <Divider className=\"oui-w-full\" />\n <MarginRatio {...props} />\n {/* <Leverage {...props} /> */}\n {/* <Divider className=\"oui-w-full\" /> */}\n {/* <AvailableBalance {...props} /> */}\n <Buttons {...props} />\n </Flex>\n );\n};\n\nconst Asset: FC<PortfolioSheetState> = (props) => {\n const { t } = useTranslation();\n\n const onUnsettleClick = useCallback(() => {\n return modal.confirm({\n title: t(\"settle.settlePnl\"),\n // maxWidth: \"xs\",\n content: (\n <Text intensity={54} size=\"xs\">\n {/* @ts-ignore */}\n <Trans i18nKey=\"settle.settlePnl.description\" />\n </Text>\n ),\n onCancel: () => {\n return Promise.reject();\n },\n onOk: () => {\n if (typeof props.onSettlePnL !== \"function\") {\n return Promise.resolve();\n }\n return props.onSettlePnL().catch((e) => {});\n },\n });\n }, [t]);\n\n const clsName =\n props.totalUnrealizedROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\";\n\n return (\n <Flex direction={\"column\"} gap={3} width={\"100%\"}>\n <Flex direction={\"column\"} itemAlign={\"start\"} width={\"100%\"}>\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n suffix={\n props.hideAssets ? (\n <EyeIcon\n opacity={1}\n size={16}\n className=\"oui-text-primary-light\"\n />\n ) : (\n <EyeCloseIcon\n opacity={1}\n size={16}\n className=\"oui-text-primary-light\"\n />\n )\n }\n onClick={() => {\n props.toggleHideAssets();\n }}\n className=\"oui-cursor-pointer\"\n >\n {`${t(\"common.totalValue\")} (USDC)`}\n </Text.formatted>\n <Text.numeral\n size=\"base\"\n // coloring\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.totalValue ?? \"--\"}\n </Text.numeral>\n </Flex>\n <Grid cols={2} rows={1} width={\"100%\"}>\n <Statistic\n label={`${t(\"common.unrealizedPnl\")} (USDC)`}\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-36\",\n }}\n >\n <Flex gap={1}>\n <Text.numeral\n size=\"xs\"\n coloring\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.aggregated.unrealPnL}\n </Text.numeral>\n {!props.hideAssets && (\n <Text.numeral\n size=\"xs\"\n dp={2}\n padding={false}\n rule=\"percentages\"\n prefix={\"(\"}\n suffix={\")\"}\n className={clsName}\n >\n {props.totalUnrealizedROI}\n </Text.numeral>\n )}\n </Flex>\n </Statistic>\n <Statistic\n label={`${t(\"trading.asset.unsettledPnl\")} (USDC)`}\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-36\",\n }}\n >\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text.numeral\n size=\"xs\"\n coloring\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.aggregated.unsettledPnL}\n </Text.numeral>\n <button\n className=\"oui-flex oui-gap-1 oui-items-center\"\n onClick={onUnsettleClick}\n >\n <RefreshIcon\n opacity={1}\n size={12}\n className=\"oui-text-primary-light\"\n />\n <Text size=\"2xs\" color=\"primary\">\n {t(\"settle.settlePnl\")}\n </Text>\n </button>\n </Flex>\n </Statistic>\n </Grid>\n </Flex>\n );\n};\nconst MarginRatio: FC<PortfolioSheetState> = (props) => {\n const { t } = useTranslation();\n\n const { high, mid, low } = getMarginRatioColor(\n props.marginRatioVal,\n props.mmr,\n );\n\n return (\n <Grid cols={2} rows={1} width={\"100%\"}>\n <Statistic\n label={t(\"trading.asset.marginRatio\")}\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-36\",\n }}\n >\n <Flex gap={2}>\n <Text.numeral\n size=\"xs\"\n rule=\"percentages\"\n color=\"primary\"\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.marginRatioVal}\n </Text.numeral>\n {!props.hideAssets && (\n <RiskIndicator\n className={\n low\n ? \"oui-rotate-0\"\n : mid\n ? \"oui-rotate-90\"\n : high\n ? \"oui-rotate-180\"\n : \"\"\n }\n />\n )}\n </Flex>\n </Statistic>\n <Statistic\n label={`${t(\"trading.asset.free&TotalCollateral\")} (USDC)`}\n classNames={{\n label: \"oui-text-2xs oui-text-base-contrast-36\",\n }}\n >\n <Flex justify={\"start\"} width={\"100%\"} gap={1}>\n <Text.numeral\n size=\"xs\"\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.freeCollateral}\n </Text.numeral>\n <Text size=\"xs\">/</Text>\n <Text.numeral\n size=\"xs\"\n dp={2}\n padding={false}\n visible={!props.hideAssets}\n >\n {props.totalCollateral}\n </Text.numeral>\n </Flex>\n </Statistic>\n </Grid>\n );\n};\n\nconst IconButton: React.FC<{\n Icon: React.ComponentType<any>;\n onClick: React.MouseEventHandler<SVGSVGElement>;\n disabled: boolean;\n}> = (props) => {\n const { Icon, onClick, disabled } = props;\n return (\n <Icon\n onClick={disabled ? undefined : onClick}\n className={cn(\n \"oui-text-white oui-m-2 oui-transition-all\",\n disabled\n ? \"oui-cursor-not-allowed oui-opacity-20\"\n : \"oui-cursor-pointer oui-opacity-100\",\n )}\n />\n );\n};\n\nconst LeverageInput: React.FC<PortfolioSheetState> = (props) => {\n const formatters = React.useMemo<InputFormatter[]>(\n () => [\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ],\n [],\n );\n const id = useId();\n return (\n <label\n htmlFor={id}\n className={cn(\n \"oui-w-full\",\n \"oui-rounded\",\n \"oui-bg-base-6\",\n \"oui-flex\",\n \"oui-items-center\",\n \"oui-justify-between\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-light\",\n \"oui-input-root\",\n )}\n >\n <IconButton\n Icon={ReduceIcon}\n onClick={props.onLeverageReduce}\n disabled={props.isReduceDisabled}\n />\n <Flex itemAlign=\"center\" justify=\"center\">\n <Input\n // {...props}\n value={props.value}\n id={id}\n autoComplete=\"off\"\n classNames={{\n input: cn(\"oui-text-center\"),\n root: cn(\n \"oui-text-center\",\n \"oui-w-6\",\n \"oui-px-0\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-none\",\n ),\n }}\n formatters={formatters}\n onChange={props.onInputChange}\n />\n <div className=\"oui-select-none\">x</div>\n </Flex>\n <IconButton\n Icon={PlusIcon}\n onClick={props.onLeverageIncrease}\n disabled={props.isIncreaseDisabled}\n />\n </label>\n );\n};\n\nexport const LeverageSelector: React.FC<PortfolioSheetState> = (props) => {\n const { value, onLeverageChange, onValueCommit } = props;\n return (\n <Flex itemAlign=\"center\" justify=\"between\" width={\"100%\"} mt={2}>\n {[1, 5, 10, 20, 50].map((option) => (\n <Flex\n key={option}\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\n `oui-transition-all oui-cursor-pointer oui-box-border oui-bg-clip-padding oui-px-3 oui-py-2.5 oui-rounded-md oui-border oui-border-solid`,\n value === option\n ? \"oui-border-primary oui-bg-base-6\"\n : \"oui-border-line-12\",\n )}\n onClick={() => {\n onLeverageChange(option);\n onValueCommit(option);\n }}\n >\n <Flex\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(`oui-h-3 oui-w-9 oui-select-none`)}\n >\n {option}x\n </Flex>\n </Flex>\n ))}\n </Flex>\n );\n};\n\nconst Buttons: FC<PortfolioSheetState> = (props) => {\n const { t } = useTranslation();\n\n if (props.isMainAccount) {\n return (\n <Grid\n cols={props.hasSubAccount ? 3 : 2}\n rows={1}\n gap={3}\n className=\"oui-grid-row-[1fr,1fr]\"\n width={\"100%\"}\n pt={2}\n pb={4}\n >\n <Button\n icon={<ArrowDownShortIcon color=\"white\" opacity={0.8} />}\n size=\"md\"\n fullWidth\n onClick={props.onDeposit}\n >\n {t(\"common.deposit\")}\n </Button>\n {props.hasSubAccount && (\n <Button\n icon={<ArrowLeftRightIcon color=\"white\" opacity={0.8} />}\n color=\"gray\"\n size=\"md\"\n onClick={props.onTransfer}\n data-testid=\"oui-testid-assetView-transfer-button\"\n >\n <Text>{t(\"common.transfer\")}</Text>\n </Button>\n )}\n <Button\n icon={<ArrowUpShortIcon color=\"white\" opacity={0.8} />}\n size=\"md\"\n fullWidth\n className=\"oui-bg-base-2 hover:oui-bg-base-2/50\"\n onClick={props.onWithdraw}\n >\n {t(\"common.withdraw\")}\n </Button>\n </Grid>\n );\n }\n\n return (\n <Button\n fullWidth\n color=\"secondary\"\n size=\"md\"\n onClick={props.onTransfer}\n data-testid=\"oui-testid-assetView-transfer-button\"\n >\n <Text>{t(\"common.transfer\")}</Text>\n </Button>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useDebouncedCallback,\n useEventEmitter,\n useLeverage,\n useMarginRatio,\n usePositionStream,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { modal, SliderMarks, toast } from \"@kodiak-finance/orderly-ui\";\nimport {\n DepositAndWithdrawWithSheetId,\n TransferSheetId,\n} from \"@kodiak-finance/orderly-ui-transfer\";\nimport { useTradingLocalStorage } from \"../../../hooks\";\n\nexport const usePortfolioSheetScript = () => {\n const { state, account, isMainAccount } = useAccount();\n const assets = useAssets();\n const marginRatio = useMarginRatioAndLeverage();\n const ee = useEventEmitter();\n const { t } = useTranslation();\n const subAccounts = state.subAccounts ?? [];\n\n const [showSliderTip, setShowSliderTip] = useState(false);\n\n const onSettlePnL = useCallback(async () => {\n return account\n .settle()\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(t(\"settle.settlement.error\"));\n return Promise.reject(e);\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n return Promise.reject(e);\n }\n\n if (e?.code === \"ACTION_REJECTED\") {\n toast.error(t(\"connector.userRejected\"));\n return Promise.reject(e);\n }\n })\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\n });\n }, [account, t]);\n\n const onDeposit = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, {\n activeTab: \"deposit\",\n });\n }, []);\n\n const onWithdraw = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, {\n activeTab: \"withdraw\",\n });\n }, []);\n\n const onTransfer = useCallback(() => {\n modal.show(TransferSheetId);\n }, []);\n\n return {\n ...assets,\n ...marginRatio,\n onSettlePnL,\n onDeposit,\n onWithdraw,\n showSliderTip,\n setShowSliderTip,\n isMainAccount,\n onTransfer,\n hasSubAccount: subAccounts?.length > 0,\n };\n};\n\nconst useAssets = () => {\n const { hideAssets, setHideAssets } = useTradingLocalStorage();\n const toggleHideAssets = () => {\n setHideAssets(!hideAssets);\n };\n const { totalCollateral, freeCollateral, totalValue, availableBalance } =\n useCollateral({\n dp: 2,\n });\n return {\n hideAssets,\n toggleHideAssets,\n totalCollateral,\n freeCollateral,\n totalValue,\n availableBalance,\n };\n};\n\nconst useMarginRatioAndLeverage = () => {\n const { t } = useTranslation();\n const [{ aggregated, totalUnrealizedROI }, positionsInfo] =\n usePositionStream();\n const { marginRatio, currentLeverage, mmr } = useMarginRatio();\n\n const marginRatioVal = useMemo(() => {\n return Math.min(\n 10,\n aggregated.notional === 0\n ? positionsInfo[\"margin_ratio\"](10)!\n : marginRatio,\n );\n }, [marginRatio, aggregated]);\n\n const { update, curLeverage, maxLeverage, leverageLevers } = useLeverage();\n\n const marks = useMemo<SliderMarks>(() => {\n return leverageLevers?.map((e) => ({\n label: `${e}x`,\n value: e,\n }));\n }, [leverageLevers]);\n\n const [leverage, setLeverage] = useState<number>(curLeverage ?? 0);\n\n const step = 100 / ((marks?.length || 0) - 1);\n\n // const leverageValue = useMemo(() => {\n // const index = leverageLevers.findIndex((item: any) => item === leverage);\n\n // return index * step;\n // }, [leverageLevers, leverage, step]);\n\n const onLeverageChange = (leverage: number) => {\n // maxLeverage / 100 * leverage;\n setLeverage(leverage);\n // updateLeverage(leverage);\n };\n\n const onSave = async (leverage: number) => {\n try {\n update({ leverage }).then(\n () => {\n toast.success(t(\"leverage.updated\"));\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch {\n //\n }\n };\n\n const onValueCommit = useCallback((value: number | number[]) => {\n onSave(Array.isArray(value) ? value[0] : value);\n }, []);\n\n const debouncedCommit = useDebouncedCallback(onValueCommit, 500);\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value, 10);\n const raw = Number.isNaN(parsed) ? 0 : parsed;\n const clamped = Math.min(Math.max(raw, 1), maxLeverage);\n setLeverage(clamped);\n debouncedCommit(clamped);\n },\n [debouncedCommit, maxLeverage],\n );\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => {\n onSave(prev + 1);\n return prev + 1;\n });\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => {\n onSave(prev - 1);\n return prev - 1;\n });\n };\n\n return {\n aggregated,\n totalUnrealizedROI,\n positionsInfo,\n marginRatio,\n marginRatioVal,\n mmr,\n currentLeverage,\n step,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled: leverage <= 1,\n isIncreaseDisabled: leverage >= maxLeverage,\n onValueCommit,\n value: leverage,\n maxLeverage,\n onSaveLeverage: onSave,\n };\n};\n\nexport function getMarginRatioColor(marginRatio: number, mmr: number | null) {\n if (mmr === null) {\n return { isRed: false, isYellow: false, isGreen: true };\n }\n const imr = mmr * 2;\n\n const high = marginRatio <= imr;\n const mid = marginRatio > imr && marginRatio < 1;\n const low = marginRatio >= 1;\n return { high, mid, low };\n}\n\nexport type PortfolioSheetState = ReturnType<typeof usePortfolioSheetScript>;\n","import { FC } from \"react\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\n\ninterface RiskIndicatorProps {\n size?: number;\n className?: string;\n}\n\nexport const RiskIndicator: FC<RiskIndicatorProps> = (props) => {\n const { size = 20, className } = props;\n\n return (\n <div\n className=\"oui-flex oui-justify-center oui-items-end\"\n style={{\n background: \"url(/images/riskLevelBg.png)\",\n backgroundSize: \"contain\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center bottom\",\n width: `${size}px`,\n height: `14px`,\n }}\n >\n <div\n className={cn(\n \"oui-relative oui-w-[2px] oui-h-[2px] oui-rounded-full oui-bg-white after:oui-block after:oui-content-[''] after:oui-absolute after:oui-right-0 after:oui-w-[10px] after:oui-h-[2px] after:oui-bg-white/50\",\n className\n // {\n // \"oui-rotate-0\": value > 1,\n // \"oui-rotate-90\": value >= 0.05 && value <= 1,\n // \"oui-rotate-180\": value < 0.05,\n // }\n )}\n ></div>\n </div>\n );\n};\n","import { usePortfolioSheetScript } from \"./portfolioSheet.script\";\nimport { PortfolioSheet } from \"./portfolioSheet.ui\";\n\nexport const PortfolioSheetWidget = () => {\n const state = usePortfolioSheetScript();\n return <PortfolioSheet {...state} />;\n};\n","export {\n useFundingRateModalScript,\n type FundingRateModalState,\n} from \"./fundingRateModal.script\";\nexport { FundingRateModal } from \"./fundingRateModal.ui\";\nexport {\n FundingRateModalWidget,\n FundingRateDialogId,\n FundingRateSheetId,\n} from \"./fundingRateModal.widget\";\n","import { FC } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport type { TradingState } from \"./trading.script\";\nimport { DesktopLayout } from \"./trading.ui.desktop\";\nimport { MobileLayout } from \"./trading.ui.mobile\";\n\nexport const Trading: FC<TradingState> = (props) => {\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <MobileLayout {...props} />;\n }\n\n return (\n <DesktopLayout\n className=\"oui-h-[calc(100vh_-_48px_-_29px)] oui-bg-base-10\"\n {...props}\n />\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragOverlay,\n DragStartEvent,\n DragEndEvent,\n Modifier,\n type ClientRect,\n} from \"@dnd-kit/core\";\nimport { restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS, Transform } from \"@dnd-kit/utilities\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport {\n SideMarketsWidget,\n SymbolInfoBarFullWidget,\n HorizontalMarketsWidget,\n} from \"@kodiak-finance/orderly-markets\";\nimport {\n OrderEntrySortKeys,\n TradingviewFullscreenKey,\n} from \"@kodiak-finance/orderly-types\";\nimport { Box, cn, Flex } from \"@kodiak-finance/orderly-ui\";\nimport { OrderEntryWidget } from \"@kodiak-finance/orderly-ui-order-entry\";\nimport { TradingviewWidget } from \"@kodiak-finance/orderly-ui-tradingview\";\nimport { DepositStatusWidget } from \"@kodiak-finance/orderly-ui-transfer\";\nimport { SortablePanel } from \"../../components/desktop/layout/sortablePanel\";\nimport { SplitLayout } from \"../../components/desktop/layout/splitLayout\";\nimport {\n dataListInitialHeight,\n getOffsetSizeNum,\n TradingState,\n} from \"./trading.script\";\nimport {\n scrollBarWidth,\n topBarHeight,\n bottomBarHeight,\n space,\n symbolInfoBarHeight,\n orderEntryMinWidth,\n orderEntryMaxWidth,\n orderbookMinWidth,\n orderbookMaxWidth,\n orderbookMinHeight,\n orderbookMaxHeight,\n tradindviewMinHeight,\n tradingViewMinWidth,\n dataListMaxHeight,\n} from \"./trading.script\";\n\nconst LazyRiskRateWidget = React.lazy(() =>\n import(\"../../components/desktop/riskRate\").then((mod) => {\n return {\n default: mod.RiskRateWidget,\n };\n }),\n);\n\nconst LazyAssetViewWidget = React.lazy(() =>\n import(\"../../components/desktop/assetView\").then((mod) => {\n return {\n default: mod.AssetViewWidget,\n };\n }),\n);\n\nconst LazyDataListWidget = React.lazy(() =>\n import(\"../../components/desktop/dataList\").then((mod) => {\n return {\n default: mod.DataListWidget,\n };\n }),\n);\n\nconst LazySwitchLayout = React.lazy(() =>\n import(\"../../components/desktop/layout/switchLayout\").then((mod) => {\n return {\n default: mod.SwitchLayout,\n };\n }),\n);\n\nconst LazyOrderBookAndTradesWidget = React.lazy(() =>\n import(\"../../components/desktop/orderBookAndTrades\").then((mod) => {\n return {\n default: mod.OrderBookAndTradesWidget,\n };\n }),\n);\n\nexport type DesktopLayoutProps = TradingState & {\n className?: string;\n};\n\nconst scaleModifier: Modifier = ({\n transform,\n draggingNodeRect,\n}: {\n transform: Transform;\n draggingNodeRect: ClientRect | null;\n}) => {\n if (draggingNodeRect) {\n return {\n ...transform,\n scaleX: 2.05,\n scaleY: 2.05,\n };\n }\n return transform;\n};\n\nexport const DesktopLayout: React.FC<DesktopLayoutProps> = (props) => {\n const {\n resizeable,\n panelSize,\n onPanelSizeChange,\n layout,\n onLayout,\n marketLayout,\n onMarketLayout,\n orderBookSplitSize,\n setOrderbookSplitSize,\n dataListSplitSize,\n setDataListSplitSize,\n mainSplitSize,\n setMainSplitSize,\n dataListSplitHeightSM,\n setDataListSplitHeightSM,\n orderBookSplitHeightSM,\n setOrderbookSplitHeightSM,\n max2XL,\n max4XL,\n animating,\n setAnimating,\n updatePositions,\n showPositionIcon,\n horizontalDraggable,\n marketsWidth,\n tradindviewMaxHeight,\n dataListMinHeight,\n } = props;\n\n const [tradingViewFullScreen] = useLocalStorage(\n TradingviewFullscreenKey,\n false,\n );\n\n const [sortableItems, setSortableItems] = useLocalStorage<string[]>(\n OrderEntrySortKeys,\n [\"margin\", \"assets\", \"orderEntry\"],\n );\n\n const dropAnimationConfig = useMemo(() => {\n return {\n keyframes({\n transform,\n }: {\n transform: {\n initial: Transform;\n final: Transform;\n };\n }) {\n return [\n {\n transform: CSS.Transform.toString({\n ...transform.initial,\n scaleX: 1.05,\n scaleY: 1.05,\n }),\n },\n {\n transform: CSS.Transform.toString({\n ...transform.final,\n scaleX: 1,\n scaleY: 1,\n // scaleX: 0.85,\n // scaleY: 0.85,\n }),\n },\n ];\n },\n sideEffects: ({ active, dragOverlay }) => {\n // console.log(active.node);\n active.node.style.opacity = \"0\";\n const innerElement = dragOverlay.node.querySelector(\".inner-content\");\n if (innerElement) {\n // innerElement.animate(\n // [{ transform: \"scale(1.05)\" }, { transform: \"scale(1)\" }],\n // {\n // duration: 200,\n // easing: \"ease-out\",\n // },\n // );\n innerElement.classList.add(\"oui-animate-shake\");\n }\n return () => {\n active.node.style.opacity = \"\";\n };\n },\n };\n }, []);\n\n // Configure sensors for drag and drop interactions\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n // State for drag overlay management\n const [activeId, setActiveId] = useState<string | null>(null);\n\n /**\n * Handle drag start event for sortable panels\n * Sets the active dragging item for overlay rendering\n */\n function handleDragStart(event: DragStartEvent) {\n setActiveId(event.active.id as string);\n }\n\n /**\n * Handle drag end event for sortable panels\n * Updates the order of sortable items and corresponding positions\n */\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n\n if (active.id !== over?.id && over) {\n const oldIndex = sortableItems.indexOf(active.id as string);\n const newIndex = sortableItems.indexOf(over.id as string);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n // Update sortableItems order\n const newItems = arrayMove(sortableItems, oldIndex, newIndex);\n setSortableItems(newItems as string[]);\n\n // Also update positions to keep them in sync\n // updatePositions(oldIndex, newIndex);\n }\n }\n\n // Reset active id after drag ends\n setActiveId(null);\n }\n\n const minScreenHeight = useMemo(() => {\n return tradingViewFullScreen\n ? 0\n : symbolInfoBarHeight +\n orderbookMaxHeight +\n dataListInitialHeight +\n space * 4;\n }, [tradingViewFullScreen]);\n\n const minScreenHeightSM =\n topBarHeight +\n bottomBarHeight +\n symbolInfoBarHeight +\n tradindviewMinHeight +\n orderbookMinHeight +\n dataListMinHeight +\n space * 4;\n\n const horizontalMarketsView = (\n <HorizontalMarketsWidget\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n maxItems={-1} // show all markets\n dropdownPos={marketLayout === \"bottom\" ? \"top\" : \"bottom\"}\n />\n );\n\n const containerPaddingX = useMemo(() => (max2XL ? 12 : 8), [max2XL]);\n\n const stickyHorizontalMarketsView = (\n <Box\n className={cn(\n \"oui-bg-base-10\",\n // -8 is for reducing the container's padding\n \"oui-sticky oui-z-30 oui-mb-[-8px] oui-py-2\",\n // Split line disabled for > 2xl screens\n !max2XL && \"oui-mt-[-8px]\",\n )}\n style={{\n bottom: 0,\n minWidth:\n (max2XL ? 1024 : 1440) - scrollBarWidth - containerPaddingX * 2,\n }}\n >\n {horizontalMarketsView}\n </Box>\n );\n\n const marketsWidget = (\n <SideMarketsWidget\n resizeable={resizeable}\n panelSize={panelSize}\n onPanelSizeChange={onPanelSizeChange as any}\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n />\n );\n\n const marketsView = (\n <Box\n intensity={900}\n pt={3}\n r=\"2xl\"\n height=\"100%\"\n width={marketsWidth}\n style={{ minWidth: marketsWidth }}\n className=\"oui-transition-all oui-duration-150\"\n onTransitionEnd={() => setAnimating(false)}\n >\n {!animating && marketLayout === \"left\" && marketsWidget}\n </Box>\n );\n\n const symbolInfoBarView = (\n <Box\n intensity={900}\n r=\"2xl\"\n px={3}\n width=\"100%\"\n style={{\n minHeight: symbolInfoBarHeight,\n height: symbolInfoBarHeight,\n }}\n >\n <SymbolInfoBarFullWidget\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n trailing={\n <React.Suspense fallback={null}>\n <LazySwitchLayout\n layout={layout}\n onLayout={onLayout}\n marketLayout={marketLayout}\n onMarketLayout={onMarketLayout}\n />\n </React.Suspense>\n }\n />\n </Box>\n );\n\n const { library_path, ...restTradingViewConfig } = props.tradingViewConfig;\n\n const tradingviewWidget = (\n <TradingviewWidget\n classNames={{\n root: cn(\n tradingViewFullScreen\n ? \"!oui-absolute oui-top-0 oui-left-0 oui-right-0 oui-bottom-0 oui-z-[40] oui-bg-base-10\"\n : \"oui-z-1\",\n ),\n content: cn(\n tradingViewFullScreen\n ? \"oui-top-3 oui-bottom-3 oui-left-3 oui-right-3 oui-bg-base-9 oui-rounded-[16px] oui-overflow-hidden\"\n : \"\",\n ),\n }}\n symbol={props.symbol}\n {...restTradingViewConfig}\n libraryPath={library_path}\n />\n );\n\n const tradingView = (\n <Box\n width=\"100%\"\n height=\"100%\"\n intensity={900}\n r=\"2xl\"\n style={{ flex: 1, minWidth: tradingViewMinWidth }}\n className=\"oui-overflow-hidden\"\n >\n {tradingviewWidget}\n </Box>\n );\n\n const orderbookWidget = (\n <React.Suspense fallback={null}>\n <LazyOrderBookAndTradesWidget symbol={props.symbol} />\n </React.Suspense>\n );\n\n const orderbookView = (\n <Box\n r=\"2xl\"\n height=\"100%\"\n style={{\n minWidth: orderbookMinWidth,\n maxWidth: horizontalDraggable ? orderbookMaxWidth : orderbookMinWidth,\n width: orderBookSplitSize,\n }}\n className=\"oui-overflow-hidden\"\n >\n {orderbookWidget}\n </Box>\n );\n\n const dataListWidget = (\n <React.Suspense fallback={null}>\n <LazyDataListWidget\n current={undefined}\n symbol={props.symbol}\n sharePnLConfig={props.sharePnLConfig}\n />\n </React.Suspense>\n );\n\n const dataListView = (\n <Box\n intensity={900}\n r=\"2xl\"\n p={2}\n style={{\n height: dataListSplitSize,\n // height: `calc(100% - ${symbolInfoBarHeight}px - ${orderbookMaxHeight}px - ${space}px)`,\n minHeight: dataListInitialHeight,\n // minHeight: `max(${dataListMinHeight}px, calc(100vh - ${symbolInfoBarHeight}px - ${orderbookMaxHeight}px - ${space}px))`,\n }}\n className=\"oui-overflow-hidden\"\n >\n {dataListWidget}\n </Box>\n );\n\n const orderInteractionWidgets = useMemo(() => {\n return {\n margin: {\n className: \"\",\n element: (\n <React.Suspense fallback={null}>\n <LazyRiskRateWidget />\n </React.Suspense>\n ),\n },\n assets: {\n className: \"oui-border oui-border-line-12\",\n element: (\n <>\n <React.Suspense fallback={null}>\n <LazyAssetViewWidget\n isFirstTimeDeposit={props.isFirstTimeDeposit}\n />\n </React.Suspense>\n <DepositStatusWidget\n className=\"oui-mt-3 oui-gap-y-2\"\n onClick={props.navigateToPortfolio}\n />\n </>\n ),\n },\n orderEntry: {\n className: \"\",\n element: (\n <OrderEntryWidget\n symbol={props.symbol}\n disableFeatures={\n props.disableFeatures as unknown as (\n | \"slippageSetting\"\n | \"feesInfo\"\n )[]\n }\n />\n ),\n },\n };\n }, [\n props.isFirstTimeDeposit,\n props.disableFeatures,\n props.navigateToPortfolio,\n props.symbol,\n ]);\n\n const orderEntryView = (\n <Flex\n gapY={2}\n direction=\"column\"\n height=\"100%\"\n style={{\n minWidth: orderEntryMinWidth,\n maxWidth: horizontalDraggable ? orderEntryMaxWidth : orderEntryMinWidth,\n width: mainSplitSize,\n }}\n >\n {sortableItems.map((key: string) => {\n return (\n <SortablePanel\n key={key}\n id={key}\n showIndicator={showPositionIcon}\n className={\n orderInteractionWidgets[\n key as keyof typeof orderInteractionWidgets\n ].className\n }\n >\n {\n orderInteractionWidgets[\n key as keyof typeof orderInteractionWidgets\n ].element\n }\n </SortablePanel>\n );\n })}\n </Flex>\n );\n\n const renderTradingView = () => {\n if (max4XL && layout === \"right\") {\n return (\n <Flex\n gap={2}\n className=\"oui-flex-1 oui-overflow-hidden\"\n style={{ minWidth: marketsWidth + tradingViewMinWidth + space }}\n >\n {marketLayout === \"left\" && marketsView}\n {tradingView}\n </Flex>\n );\n }\n\n return tradingView;\n };\n\n const tradingViewAndOrderbookView = (\n <SplitLayout\n style={{\n // the style width is not set, and a child node style needs to be set to flex: 1 to adapt\n flex: 1,\n minHeight: orderbookMinHeight,\n // maxHeight: orderbookMaxHeight,\n }}\n onSizeChange={setOrderbookSplitSize}\n disable={!horizontalDraggable}\n >\n {renderTradingView()}\n {orderbookView}\n </SplitLayout>\n );\n\n const renderTradingViewAndOrderbookView = () => {\n if (max4XL && layout === \"left\") {\n return (\n <Flex gapX={2} style={{ minHeight: orderbookMinHeight }} height=\"100%\">\n {tradingViewAndOrderbookView}\n {marketLayout === \"left\" && marketsView}\n </Flex>\n );\n }\n return tradingViewAndOrderbookView;\n };\n\n const mainView = (\n <Flex\n direction=\"column\"\n className=\"oui-flex-1 oui-overflow-hidden\"\n gap={2}\n style={{\n minWidth: max4XL\n ? marketsWidth + tradingViewMinWidth + orderbookMinWidth + space * 2\n : tradingViewMinWidth + orderbookMinWidth + space,\n }}\n >\n {symbolInfoBarView}\n <SplitLayout\n style={{\n // height: orderbookMaxHeight + dataListInitialHeight + space,\n maxHeight: `calc(100% - ${symbolInfoBarHeight}px - ${space}px)`,\n }}\n className=\"oui-w-full\"\n mode=\"vertical\"\n onSizeChange={setDataListSplitSize}\n >\n {renderTradingViewAndOrderbookView()}\n {dataListView}\n </SplitLayout>\n </Flex>\n );\n\n const onSizeChange = (width: string) =>\n layout === \"left\"\n ? setMainSplitSize(getOffsetSizeNum(width))\n : setMainSplitSize(width);\n\n if (max2XL) {\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToVerticalAxis]}\n >\n <SortableContext\n items={sortableItems}\n strategy={verticalListSortingStrategy}\n >\n <Box height=\"100%\">\n {marketLayout === \"top\" && (\n <Box\n className={cn(\"oui-mt-2 oui-max-h-8 oui-px-3\", props.className)}\n >\n {horizontalMarketsView}\n </Box>\n )}\n\n <SplitLayout\n ref={props.max2XLSplitRef}\n style={{\n minHeight: minScreenHeightSM,\n minWidth: 1024 - scrollBarWidth,\n // height: props.extraHeight ? props.extraHeight : undefined,\n }}\n className={cn(\n \"oui-flex oui-flex-1\",\n \"oui-size-full oui-min-w-[1018px]\",\n \"oui-px-3 oui-py-2\",\n props.className,\n )}\n onSizeChange={setDataListSplitHeightSM}\n onDragging={props.onDataListSplitHeightDragging}\n mode=\"vertical\"\n >\n <Flex\n gapX={2}\n itemAlign=\"stretch\"\n className={cn(\n \"oui-flex-1\",\n layout === \"left\" && \"oui-flex-row-reverse\",\n )}\n style={{\n minHeight: Math.max(\n symbolInfoBarHeight +\n tradindviewMinHeight +\n orderbookMinHeight +\n space * 2,\n props.orderEntryHeight,\n ),\n maxHeight:\n symbolInfoBarHeight +\n tradindviewMaxHeight +\n orderbookMaxHeight +\n space * 2,\n }}\n >\n <Flex\n height=\"100%\"\n className=\"oui-w-[calc(100%_-_280px_-_12px)] oui-flex-1\"\n direction=\"column\"\n gapY={2}\n >\n {symbolInfoBarView}\n <Flex\n width=\"100%\"\n height=\"100%\"\n gapX={2}\n itemAlign=\"stretch\"\n style={{\n minHeight:\n tradindviewMinHeight + orderbookMinHeight + space,\n maxHeight:\n tradindviewMaxHeight + orderbookMaxHeight + space,\n }}\n className={cn(\n \"oui-flex-1\",\n layout === \"left\" && \"oui-flex-row-reverse\",\n )}\n >\n {marketLayout === \"left\" && (\n <Box\n intensity={900}\n pt={3}\n r=\"2xl\"\n width={marketsWidth}\n style={{\n minHeight:\n tradindviewMinHeight + orderbookMinHeight + space,\n maxHeight:\n tradindviewMaxHeight + orderbookMaxHeight + space,\n }}\n >\n {marketsWidget}\n </Box>\n )}\n <SplitLayout\n ref={props.tradingviewAndOrderbookSplitRef}\n mode=\"vertical\"\n style={{ width: `calc(100% - ${marketsWidth}px)` }}\n className=\"oui-flex-1\"\n onSizeChange={setOrderbookSplitHeightSM}\n onDragging={props.onTradingviewAndOrderbookDragging}\n >\n <Box\n width=\"100%\"\n intensity={900}\n r=\"2xl\"\n style={{\n minHeight: tradindviewMinHeight,\n maxHeight: tradindviewMaxHeight,\n height: 1200,\n }}\n >\n {tradingviewWidget}\n </Box>\n\n <Box\n r=\"2xl\"\n height=\"100%\"\n width=\"100%\"\n style={{\n minHeight: orderbookMinHeight,\n maxHeight: orderbookMaxHeight,\n height: orderBookSplitHeightSM,\n }}\n className=\"oui-flex-1\"\n >\n {orderbookWidget}\n </Box>\n </SplitLayout>\n </Flex>\n </Flex>\n <Flex\n ref={props.orderEntryViewRef}\n id=\"orderEntryView\"\n gapY={3}\n direction=\"column\"\n className=\"oui-relative\"\n style={{\n width: orderEntryMinWidth,\n // force order entry render actual content height\n height: \"max-content\",\n // height:\n // props.extraHeight && props.extraHeight > 100\n // ? undefined\n // : \"max-content\",\n }}\n >\n <Flex\n gapY={2}\n direction=\"column\"\n height=\"100%\"\n style={{\n minWidth: orderEntryMinWidth,\n maxWidth: horizontalDraggable\n ? orderEntryMaxWidth\n : orderEntryMinWidth,\n width: mainSplitSize,\n }}\n >\n {sortableItems.map((key: string) => {\n return (\n <SortablePanel\n key={key}\n id={key}\n showIndicator={showPositionIcon}\n className={\n orderInteractionWidgets[\n key as keyof typeof orderInteractionWidgets\n ].className\n }\n >\n {\n orderInteractionWidgets[\n key as keyof typeof orderInteractionWidgets\n ].element\n }\n </SortablePanel>\n );\n })}\n </Flex>\n <Box height={props.extraHeight} />\n </Flex>\n </Flex>\n\n <Box\n intensity={900}\n r=\"2xl\"\n p={2}\n style={{\n height: dataListSplitHeightSM,\n minHeight: Math.max(dataListMinHeight, props.dataListHeight),\n maxHeight: dataListMaxHeight,\n }}\n className=\"oui-overflow-hidden\"\n >\n {dataListWidget}\n </Box>\n\n {marketLayout === \"bottom\" && stickyHorizontalMarketsView}\n </SplitLayout>\n </Box>\n </SortableContext>\n <DragOverlay dropAnimation={dropAnimationConfig}>\n {activeId ? (\n <SortablePanel\n id={activeId}\n showIndicator={showPositionIcon}\n dragOverlay\n className={`${\n orderInteractionWidgets[\n activeId as keyof typeof orderInteractionWidgets\n ].className\n } oui-shadow-lg oui-shadow-base-9`}\n >\n {\n orderInteractionWidgets[\n activeId as keyof typeof orderInteractionWidgets\n ].element\n }\n </SortablePanel>\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToVerticalAxis]}\n >\n <SortableContext\n items={sortableItems}\n strategy={verticalListSortingStrategy}\n >\n <Flex\n style={{\n minHeight: minScreenHeight,\n minWidth: 1440 - scrollBarWidth,\n }}\n className={cn(\n props.className,\n \"oui-justify-start\",\n tradingViewFullScreen &&\n \"oui-relative oui-h-[calc(100vh-80px)] oui-w-screen oui-overflow-hidden !oui-p-0\",\n )}\n width=\"100%\"\n p={2}\n gap={2}\n itemAlign=\"stretch\"\n direction=\"column\"\n >\n {/* Horizontal Markets View on top for !=2xl screens */}\n {marketLayout === \"top\" && horizontalMarketsView}\n\n {/* Main Content Group */}\n <Flex\n className={cn(\n \"oui-flex-1 oui-overflow-hidden\",\n layout === \"left\" && \"oui-flex-row-reverse\",\n )}\n gap={2}\n >\n {!max4XL && marketLayout === \"left\" && marketsView}\n <SplitLayout\n className={cn(\"oui-flex oui-flex-1 oui-overflow-hidden\")}\n onSizeChange={onSizeChange}\n disable={!horizontalDraggable}\n >\n {layout === \"left\" && orderEntryView}\n {mainView}\n {layout === \"right\" && orderEntryView}\n </SplitLayout>\n </Flex>\n\n {marketLayout === \"bottom\" && stickyHorizontalMarketsView}\n </Flex>\n </SortableContext>\n <DragOverlay\n dropAnimation={dropAnimationConfig}\n\n // style={{\n // transform: \"scale(1.05)\",\n // }}\n // transition=\"transform 200ms ease\"\n // className=\"oui-animate-pop\"\n >\n {activeId ? (\n <SortablePanel\n id={activeId}\n showIndicator={showPositionIcon}\n dragOverlay\n className={`${\n orderInteractionWidgets[\n activeId as keyof typeof orderInteractionWidgets\n ].className\n } oui-shadow-lg oui-shadow-base-9`}\n >\n {\n orderInteractionWidgets[\n activeId as keyof typeof orderInteractionWidgets\n ].element\n }\n </SortablePanel>\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n};\n","import React, { type FC, PropsWithChildren, SVGProps } from \"react\";\nimport { useRef, useEffect } from \"react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Box, cn } from \"@kodiak-finance/orderly-ui\";\n\ntype SortablePanelProps = {\n id: string;\n className?: string;\n showIndicator: boolean;\n dragOverlay?: boolean;\n};\n\nexport const SortablePanel: FC<PropsWithChildren<SortablePanelProps>> = (\n props,\n) => {\n const { showIndicator, dragOverlay } = props;\n const nodeRef = useRef<HTMLDivElement>(null);\n const [dimensions, setDimensions] = React.useState<{\n width: number;\n height: number;\n } | null>(null);\n\n // useSortable hook with custom configuration to prevent dimension changes\n const sortableResult = useSortable({\n id: props.id,\n });\n\n const {\n setNodeRef,\n attributes,\n listeners,\n transform,\n transition,\n isDragging,\n setActivatorNodeRef,\n } = sortableResult;\n\n // Store original dimensions when dragging starts\n useEffect(() => {\n if (isDragging && nodeRef.current && !dimensions) {\n const rect = nodeRef.current.getBoundingClientRect();\n // Store dimensions for placeholder\n setDimensions({\n width: rect.width,\n height: rect.height,\n });\n } else if (!isDragging && dimensions) {\n // Reset dimensions when dragging ends\n setDimensions(null);\n }\n }, [isDragging, dimensions]);\n\n // Combine refs to use both sortable ref and our dimension ref\n const combinedRef = (node: HTMLDivElement | null) => {\n setNodeRef(node);\n // Use a callback ref to properly set the node reference\n (nodeRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n };\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n // Ensure the item maintains its box model during drag\n // boxSizing: \"border-box\" as const,\n };\n\n // When dragging, render a placeholder with fixed dimensions\n if (isDragging && dimensions && !dragOverlay) {\n return (\n <Box\n intensity={900}\n r=\"2xl\"\n p={3}\n className={cn(\"oui-relative\")}\n // ref={combinedRef}\n style={{\n ...style,\n width: dimensions.width,\n height: dimensions.height,\n minWidth: dimensions.width,\n minHeight: dimensions.height,\n maxWidth: dimensions.width,\n maxHeight: dimensions.height,\n // Placeholder styling with subtle visual feedback\n border: \"1px solid rgb(var(--oui-color-primary))\",\n backgroundImage: `repeating-linear-gradient(135deg, rgb(var(--oui-color-base-6)) 0px, rgb(var(--oui-color-base-6)) 4px, transparent 4px, transparent 8px)`,\n }}\n ></Box>\n );\n }\n\n return (\n <Box\n intensity={900}\n r=\"2xl\"\n p={3}\n width=\"100%\"\n className={cn(\n \"oui-relative\",\n props.className,\n // dragOverlay && \"oui-scale-105\",\n )}\n ref={combinedRef}\n style={style}\n >\n <div\n className={cn(\n \"inner-content oui-transition-transform\",\n dragOverlay && \"oui-scale-95\",\n )}\n >\n {props.children}\n </div>\n {showIndicator && (\n <button\n {...attributes}\n {...listeners}\n className=\"oui-absolute oui-right-0 oui-top-4 oui-cursor-move oui-py-1\"\n style={{ touchAction: \"none\" }}\n ref={setActivatorNodeRef}\n >\n <IndicatorIcon\n className={cn(\n \"oui-text-base-contrast-20 hover:oui-text-base-contrast-80\",\n )}\n />\n </button>\n )}\n </Box>\n );\n};\n\nconst IndicatorIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"10\"\n height=\"16\"\n viewBox=\"0 0 10 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"6\" height=\"2\" rx=\"1\" />\n <rect x=\"2\" y=\"7\" width=\"6\" height=\"2\" rx=\"1\" />\n <rect x=\"2\" y=\"12\" width=\"6\" height=\"2\" rx=\"1\" />\n </svg>\n);\n","import { RefObject, useEffect, useMemo, useRef, useState } from \"react\";\nimport Split from \"@uiw/react-split\";\nimport {\n useAccount,\n useCollateral,\n useLocalStorage,\n useMediaQuery,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport type { LayoutPosition } from \"../../components/desktop/layout/switchLayout\";\nimport { useSplitPersistent } from \"../../components/desktop/layout/useSplitPersistent\";\nimport { PortfolioSheetWidget } from \"../../components/mobile/portfolioSheet\";\nimport { useTradingLocalStorage } from \"../../hooks/\";\nimport { useTradingPageContext } from \"../../provider/tradingPageContext\";\nimport { TradingPageState } from \"../../types/types\";\nimport { useFirstTimeDeposit } from \"./hooks/useFirstTimeDeposit\";\n\nexport type TradingState = ReturnType<typeof useTradingScript>;\n\nexport const scrollBarWidth = 6;\nexport const topBarHeight = 48;\nexport const bottomBarHeight = 29;\nexport const space = 8;\nexport const symbolInfoBarHeight = 54;\n\nexport const orderEntryMinWidth = 280;\nexport const orderEntryMaxWidth = 360;\n\nexport const orderbookMinWidth = 280;\nexport const orderbookMaxWidth = 732;\n\nexport const orderbookMinHeight = 464;\nexport const orderbookMaxHeight = 728;\n\nexport const tradindviewMinHeight = 320;\n\nexport const tradingViewMinWidth = 540;\n\nexport const dataListMaxHeight = 800;\nexport const dataListInitialHeight = 350;\n\nconst ORDERLY_ORDER_ENTRY_SIDE_MARKETS_LAYOUT =\n \"orderly_order_entry_side_markets_layout\";\n\nconst ORDERLY_SIDE_MARKETS_MODE_KEY = \"orderly_side_markets_mode\";\n\nconst ORDERLY_HORIZONTAL_MARKETS_LAYOUT = \"orderly_horizontal_markets_layout\";\n\nexport type MarketLayoutPosition = \"left\" | \"top\" | \"bottom\" | \"hide\";\n\nexport const useTradingScript = () => {\n const [openMarketsSheet, setOpenMarketsSheet] = useState(false);\n const props = useTradingPageContext();\n const { state } = useAccount();\n const { t } = useTranslation();\n const { wrongNetwork, disabledConnect, restrictedInfo, onRouteChange } =\n useAppContext();\n const { hideAssets, setHideAssets } = useTradingLocalStorage();\n\n const isFirstTimeDeposit = useFirstTimeDeposit();\n\n const { totalValue } = useCollateral();\n\n const total = useDataTap(totalValue);\n\n /** max-width: 1279px */\n const max2XL = useMediaQuery(\"(max-width: 1279px)\");\n\n /** min-width: 1440px */\n const min3XL = useMediaQuery(\"(min-width: 1440px)\");\n\n /** max-width: 1680px */\n const max4XL = useMediaQuery(\"(max-width: 1680px)\");\n\n // Order entry and side market list position, default Order entry in right\n const [layout, setLayout] = useLocalStorage<LayoutPosition>(\n ORDERLY_ORDER_ENTRY_SIDE_MARKETS_LAYOUT,\n \"right\",\n );\n\n // Horizontal markets layout position, default left\n const [marketLayout, setMarketLayout] = useLocalStorage<MarketLayoutPosition>(\n ORDERLY_HORIZONTAL_MARKETS_LAYOUT,\n \"left\",\n );\n\n const canTrade = useMemo<boolean>(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status >= AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n const onShowPortfolioSheet = () => {\n if (canTrade) {\n modal.sheet({\n title: t(\"trading.asset&Margin\"),\n leading: props.bottomSheetLeading,\n content: <PortfolioSheetWidget />,\n });\n }\n };\n\n const horizontalDraggable = useMemo(() => min3XL, [min3XL]);\n\n const positionsState = useOrderEntryPositions({\n canTrade,\n isFirstTimeDeposit,\n });\n\n const marketsCollapseState = useMarketsCollapse({ resizeable: min3XL });\n\n const observerState = useObserverOrderEntry({ max2XL });\n\n const marketsWidth = useMemo(() => {\n switch (marketsCollapseState.panelSize) {\n case \"small\":\n return 0;\n case \"middle\":\n return 70;\n case \"large\":\n return 280;\n default:\n return 0;\n }\n }, [marketsCollapseState.panelSize]);\n\n const tradindviewMaxHeight = max2XL ? 1200 : 600;\n\n const dataListMinHeight = canTrade ? 379 : 277;\n\n const splitSizeState = useSplitSize({ dep: layout });\n\n const tradingViewHeightState = useExtraHeight({\n orderEntryViewRef: observerState.orderEntryViewRef,\n tradindviewMaxHeight,\n dataListMinHeight,\n });\n\n const navigateToPortfolio =\n typeof onRouteChange === \"function\"\n ? () => onRouteChange({ href: \"/portfolio\", name: t(\"common.portfolio\") })\n : undefined;\n\n const map = {\n layout,\n onLayout: setLayout,\n marketLayout,\n onMarketLayout: setMarketLayout,\n max2XL,\n min3XL,\n max4XL,\n canTrade,\n openMarketsSheet,\n onOpenMarketsSheetChange: setOpenMarketsSheet,\n horizontalDraggable,\n ...marketsCollapseState,\n ...positionsState,\n ...splitSizeState,\n ...observerState,\n restrictedInfo,\n ...tradingViewHeightState,\n marketsWidth,\n tradindviewMaxHeight,\n dataListMinHeight,\n total,\n hideAssets,\n setHideAssets,\n onShowPortfolioSheet,\n navigateToPortfolio,\n isFirstTimeDeposit,\n };\n\n return { ...props, ...map } as TradingPageState & typeof map;\n};\n\nconst useMarketsCollapse = (options: { resizeable: boolean }) => {\n const { resizeable } = options;\n const [animating, setAnimating] = useState(false);\n\n const [panelSize, setPanelSize] = useLocalStorage<\n \"small\" | \"middle\" | \"large\"\n >(ORDERLY_SIDE_MARKETS_MODE_KEY, \"large\");\n\n const onPanelSizeChange = (collapsed: \"small\" | \"middle\" | \"large\") => {\n setPanelSize(collapsed);\n setAnimating(true);\n };\n\n const memoizedPanelSize = useMemo<\"small\" | \"middle\" | \"large\">(() => {\n // Force only two states\n const normalized = panelSize === \"large\" ? \"large\" : \"middle\";\n // under 1440px markets force collapsed\n return resizeable ? normalized : \"middle\";\n }, [resizeable, panelSize]);\n\n return {\n resizeable: resizeable,\n panelSize: memoizedPanelSize,\n onPanelSizeChange: onPanelSizeChange,\n animating: animating,\n setAnimating: setAnimating,\n } as const;\n};\n\nconst useOrderEntryPositions = (options: {\n canTrade: boolean;\n isFirstTimeDeposit: boolean;\n}) => {\n const { canTrade, isFirstTimeDeposit } = options;\n\n const [positions, setPositions] = useLocalStorage(\n \"orderly_assets_orderEntry_margin_positions\",\n [0, 1, 2],\n );\n\n const updatePositions = (currentIdx: number, targetIdx: number) => {\n const pos = [...positions];\n // [0,1,2] => [1,2,0]\n if (currentIdx === 0 && targetIdx === pos.length - 1) {\n pos[targetIdx] = positions[currentIdx];\n for (let i = 0; i < pos.length - 1; i++) {\n pos[i] = positions[i + 1];\n }\n\n // [0,1,2] => [2,0,1]\n } else if (currentIdx === pos.length - 1 && targetIdx === 0) {\n pos[targetIdx] = positions[currentIdx];\n for (let i = 1; i < pos.length; i++) {\n pos[i] = positions[i - 1];\n }\n } else {\n // [0,1,2] => [1,0,2], [0,1,2] => [0,2,1]\n [pos[currentIdx], pos[targetIdx]] = [pos[targetIdx], pos[currentIdx]];\n }\n setPositions(pos);\n };\n\n const showPositionIcon = useMemo(\n () => canTrade && !isFirstTimeDeposit,\n [canTrade, isFirstTimeDeposit],\n );\n\n const pos = useMemo(() => {\n return showPositionIcon ? (positions as number[]) : [0, 1, 2];\n }, [showPositionIcon, positions]);\n\n return {\n positions: pos,\n showPositionIcon,\n updatePositions,\n };\n};\n\nconst useSplitSize = (options: { dep: any }) => {\n const { dep } = options;\n const [mainSplitSize, setMainSplitSize] = useSplitPersistent(\n \"orderly_main_split_size\",\n `${orderEntryMinWidth}px`,\n dep,\n );\n const [dataListSplitSize, setDataListSplitSize] = useSplitPersistent(\n \"orderly_datalist_split_size\",\n `${dataListInitialHeight}px`,\n // undefined,\n );\n const [orderBookSplitSize, setOrderbookSplitSize] = useSplitPersistent(\n \"orderly_orderbook_split_size\",\n \"280px\",\n dep,\n );\n\n const [dataListSplitHeightSM, setDataListSplitHeightSM] = useSplitPersistent(\n \"orderly_datalist_split_height_sm\",\n \"350px\",\n );\n\n const [orderBookSplitHeightSM, setOrderbookSplitHeightSM] =\n useSplitPersistent(\"orderly_orderbook_split_height_sm\", \"280px\");\n\n return {\n orderBookSplitSize,\n setOrderbookSplitSize,\n dataListSplitSize,\n setDataListSplitSize,\n mainSplitSize,\n setMainSplitSize,\n dataListSplitHeightSM,\n setDataListSplitHeightSM,\n orderBookSplitHeightSM,\n setOrderbookSplitHeightSM,\n };\n};\n\nconst useObserverOrderEntry = (options: { max2XL: boolean }) => {\n const { max2XL } = options;\n const [orderEntryHeight, setOrderEntryHeight] = useState(0);\n const orderEntryViewRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = orderEntryViewRef.current;\n\n if (!element || !max2XL) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const height = entry.contentRect.height;\n if (height) {\n setOrderEntryHeight(height);\n }\n }\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.unobserve(element);\n };\n }, [orderEntryViewRef, max2XL]);\n\n return {\n orderEntryViewRef,\n orderEntryHeight,\n };\n};\n\nexport function getOffsetSizeNum(size: string | null) {\n if (size) {\n return `${100 - Math.min(Number(size), 100)}`;\n }\n return \"\";\n}\n\nfunction useExtraHeight(options: {\n orderEntryViewRef: RefObject<HTMLDivElement>;\n tradindviewMaxHeight: number;\n dataListMinHeight: number;\n}) {\n const { tradindviewMaxHeight, dataListMinHeight } = options;\n const tradingviewAndOrderbookSplitRef = useRef<Split>(null);\n const max2XLSplitRef = useRef<Split>(null);\n\n const [extraHeight, setExtraHeight] = useLocalStorage(\n \"orderly_order_entry_extra_height\",\n 0,\n );\n\n const space = 10 + 12;\n\n const [dataListHeight, setDataListHeight] = useLocalStorage(\n \"orderly_trading_data_list_height\",\n dataListMinHeight,\n );\n\n const onTradingviewAndOrderbookDragging = (\n preSize: number,\n nextSize: number,\n ) => {\n const boxHeight = tradingviewAndOrderbookSplitRef?.current?.boxHeight;\n if (!boxHeight) {\n return;\n }\n\n const splitTradingviewHeight = (boxHeight * preSize) / 100;\n const splitOrderbookHeight = (boxHeight * nextSize) / 100;\n\n const tradingviewHeight = Math.min(\n Math.max(splitTradingviewHeight, tradindviewMinHeight),\n tradindviewMaxHeight,\n );\n\n const orderbookHeight = Math.min(\n Math.max(splitOrderbookHeight, orderbookMinHeight),\n orderbookMaxHeight,\n );\n\n const orderEntryHeight =\n options.orderEntryViewRef.current?.clientHeight || 0;\n\n // console.log(\"tradingviewHeight\", splitTradingviewHeight, tradingviewHeight);\n // console.log(\"orderbookHeight\", splitOrderbookHeight, orderbookHeight);\n\n if (splitOrderbookHeight >= orderbookHeight) {\n const offset = splitOrderbookHeight - orderbookHeight;\n // console.log(\"offset ---\", offset);\n setExtraHeight(Math.max(0, extraHeight - offset));\n } else if (\n tradingviewHeight + orderbookHeight <\n tradindviewMaxHeight + orderbookMaxHeight\n ) {\n const height =\n tradingviewHeight + orderbookHeight + space + symbolInfoBarHeight;\n\n const offset = Math.max(0, height - orderEntryHeight);\n // console.log(\"offset ++++\", height, offset);\n setExtraHeight(extraHeight + offset);\n }\n };\n\n const onDataListSplitHeightDragging = (preSize: number, nextSize: number) => {\n const boxHeight = max2XLSplitRef?.current?.boxHeight;\n if (!boxHeight) {\n return;\n }\n\n // const splitTradingAndOrderbookHeight = (boxHeight * preSize) / 100;\n const splitDataListHeight = (boxHeight * nextSize) / 100;\n\n if (\n splitDataListHeight >= dataListMinHeight &&\n splitDataListHeight <= dataListMaxHeight\n ) {\n setDataListHeight(splitDataListHeight);\n const offset = splitDataListHeight - dataListHeight;\n if (offset > 0) {\n setExtraHeight(Math.max(0, extraHeight - offset));\n }\n }\n };\n\n return {\n max2XLSplitRef,\n tradingviewAndOrderbookSplitRef,\n onTradingviewAndOrderbookDragging,\n onDataListSplitHeightDragging,\n extraHeight,\n dataListHeight,\n };\n}\n","import { useMemo } from \"react\";\n\nexport const useSplitPersistent = (\n key: string,\n defaulValue?: string,\n dep?: any\n): [string | undefined, (size: string) => void] => {\n const size = useMemo(() => {\n const size = localStorage.getItem(key);\n\n if (size) {\n return `${size}%`;\n }\n return defaulValue;\n }, [key, defaulValue, dep]);\n\n const setSize = (size: string) => {\n localStorage.setItem(key, size);\n };\n\n return [size, setSize];\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useCollateral,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n AccountStatusEnum,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n} from \"@kodiak-finance/orderly-types\";\n\nexport const useFirstTimeDeposit = () => {\n const { state } = useAccount();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { totalValue } = useCollateral({\n dp: 2,\n });\n\n const unavailable =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n const { startTime, endTime } = useMemo(() => {\n const d = new Date();\n // must set last second of today, when wallet ws changed, it will get latest data from api\n const today = new Date(\n d.getFullYear(),\n d.getMonth(),\n d.getDate(),\n 23,\n 59,\n 59,\n );\n\n const endTime = today.getTime();\n // 90 days ago timestamp\n const startTime = endTime - 90 * 24 * 60 * 60 * 1000;\n\n return {\n startTime,\n endTime,\n };\n }, []);\n\n const [_, { meta }] = useAssetsHistory(\n {\n startTime,\n endTime,\n page: 1,\n pageSize: 5,\n side: AssetHistorySideEnum.DEPOSIT,\n status: AssetHistoryStatusEnum.COMPLETED,\n },\n {\n shouldUpdateOnWalletChanged: (data) =>\n data.side === AssetHistorySideEnum.DEPOSIT &&\n data.transStatus === AssetHistoryStatusEnum.COMPLETED,\n },\n );\n\n return !unavailable && totalValue === 0 && meta?.total === 0;\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n MarketsSheetWidget,\n SymbolInfoBarWidget,\n} from \"@kodiak-finance/orderly-markets\";\nimport {\n Box,\n SimpleSheet,\n EyeCloseIcon,\n EyeIcon,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { TradingState } from \"./trading.script\";\n\nconst LazyTopTabWidget = React.lazy(() =>\n import(\"../../components/mobile/topTab\").then((mod) => {\n return { default: mod.TopTabWidget };\n }),\n);\n\nconst LazyOrderBookAndEntryWidget = React.lazy(() =>\n import(\"../../components/mobile/orderBookAndEntry\").then((mod) => {\n return { default: mod.OrderBookAndEntryWidget };\n }),\n);\n\nconst LazyDataListWidget = React.lazy(() =>\n import(\"../../components/mobile/dataList\").then((mod) => {\n return { default: mod.DataListWidget };\n }),\n);\n\nconst MaybeEqual: React.FC = () => {\n return (\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 8 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.456 3.48a3.5 3.5 0 0 0 .431-.567 9 9 0 0 0 .361-.654l-.648-.66-.107.185q-.071.12-.142.244a3 3 0 0 1-.27.396 1.4 1.4 0 0 1-.318.29.67.67 0 0 1-.38.114q-.307 0-.666-.194t-.742-.42q-.383-.227-.777-.42a1.7 1.7 0 0 0-.771-.194q-.401.001-.72.154a2.1 2.1 0 0 0-.57.404 2.6 2.6 0 0 0-.43.574 5 5 0 0 0-.307.646l.649.66q.165-.437.464-.833.298-.395.742-.396.347 0 .7.194.354.193.721.42.37.227.763.42.396.195.826.195.374.001.665-.155.29-.151.526-.404m.352 2.941a3.5 3.5 0 0 0 .431-.566q.196-.315.361-.654l-.648-.66-.107.184-.142.244a3 3 0 0 1-.27.396 1.4 1.4 0 0 1-.318.29.67.67 0 0 1-.38.115q-.307 0-.666-.195-.36-.193-.742-.42-.383-.226-.778-.42a1.7 1.7 0 0 0-.77-.194q-.401.001-.72.154a2.1 2.1 0 0 0-.57.405 2.6 2.6 0 0 0-.43.574 5 5 0 0 0-.307.646l.649.66q.165-.437.464-.833.297-.395.742-.396.347 0 .7.194.354.193.721.42.369.226.763.42.396.194.826.194.374.001.665-.154.29-.152.526-.404\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n\nexport const MobileLayout: React.FC<TradingState> = (props) => {\n const { t } = useTranslation();\n const topBar = (\n <Box intensity={900} className=\"oui-rounded-xl\" mx={1} px={3} height={54}>\n <SymbolInfoBarWidget\n symbol={props.symbol}\n onSymbol={() => props.onOpenMarketsSheetChange(true)}\n trailing={\n <Flex\n direction={\"column\"}\n itemAlign={\"end\"}\n className=\"oui-cursor-pointer oui-text-[11px]\"\n onClick={props.onShowPortfolioSheet}\n >\n <Flex>\n <Text intensity={54}>{t(\"common.totalValue\")}</Text>\n <button\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.setHideAssets(!props.hideAssets);\n }}\n className=\"oui-px-1\"\n >\n {props.hideAssets ? (\n <EyeIcon\n color=\"primary\"\n opacity={1}\n size={16}\n className=\"oui-text-primary-light\"\n />\n ) : (\n <EyeCloseIcon\n color=\"primary\"\n opacity={1}\n size={16}\n className=\"oui-text-primary-light\"\n />\n )}\n </button>\n <MaybeEqual />\n </Flex>\n <Text.numeral\n suffix={<Text intensity={20}>&nbsp;USDC</Text>}\n dp={2}\n visible={!props.hideAssets}\n >\n {props.canTrade ? (props.total ?? \"--\") : \"--\"}\n </Text.numeral>\n </Flex>\n }\n />\n <SimpleSheet\n open={props.openMarketsSheet}\n onOpenChange={props.onOpenMarketsSheetChange}\n classNames={{\n body: \"oui-h-full oui-pb-0\",\n content: \"oui-w-[280px] !oui-p-0\",\n }}\n contentProps={{ side: \"left\", closeable: false }}\n >\n <MarketsSheetWidget\n symbol={props.symbol}\n onSymbolChange={(symbol) => {\n props.onOpenMarketsSheetChange(false);\n props.onSymbolChange?.(symbol);\n }}\n />\n </SimpleSheet>\n </Box>\n );\n\n return (\n <div className=\"oui-relative oui-grid oui-gap-1 oui-bg-base-10\">\n <main className=\"oui-hide-scrollbar oui-space-y-1 oui-overflow-y-auto\">\n {topBar}\n <React.Suspense fallback={null}>\n <LazyTopTabWidget className=\"oui-mx-1 oui-rounded-xl oui-bg-base-9\" />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyOrderBookAndEntryWidget />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyDataListWidget\n symbol={props.symbol}\n className=\"oui-mx-1 oui-rounded-xl\"\n sharePnLConfig={props.sharePnLConfig}\n />\n </React.Suspense>\n </main>\n </div>\n );\n};\n","import React from \"react\";\nimport { useTradingScript } from \"./trading.script\";\nimport { Trading } from \"./trading.ui\";\n\nexport const TradingWidget: React.FC = () => {\n const state = useTradingScript();\n return <Trading {...state} />;\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { TradingPageState, TradingPageProps } from \"../types/types\";\nimport { getBasicSymbolInfo } from \"../utils/utils\";\nimport { TradingPageContext } from \"./tradingPageContext\";\n\nexport const TradingPageProvider: FC<PropsWithChildren<TradingPageProps>> = (\n props,\n) => {\n const { symbol, children } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n const memoizedValue = useMemo<TradingPageState>(() => {\n const basicSymbol = getBasicSymbolInfo(symbolInfo);\n return {\n ...props,\n symbolInfo: {\n ...basicSymbol,\n symbol: symbol,\n },\n };\n }, [props, symbol, symbolInfo]);\n return (\n <TradingPageContext.Provider value={memoizedValue}>\n {children}\n </TradingPageContext.Provider>\n );\n};\n","import React from \"react\";\nimport { TradingPageProvider } from \"../../provider/tradingPageProvider\";\nimport { TradingPageProps } from \"../../types/types\";\nimport { TradingWidget } from \"./trading.widget\";\n\nexport const TradingPage: React.FC<TradingPageProps> = (props) => {\n return (\n <TradingPageProvider\n symbol={props.symbol}\n tradingViewConfig={props.tradingViewConfig}\n onSymbolChange={props.onSymbolChange}\n disableFeatures={props.disableFeatures}\n overrideFeatures={props.overrideFeatures}\n referral={props.referral}\n tradingRewards={props.tradingRewards}\n bottomSheetLeading={props.bottomSheetLeading}\n sharePnLConfig={props.sharePnLConfig}\n >\n <TradingWidget />\n </TradingPageProvider>\n );\n};\n"]}