@orderly.network/markets 2.6.2 → 2.6.3

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/pages/home/marketsHeader/marketsHeader.ui.tsx","../src/components/marketsProvider/index.tsx","../src/icons.tsx","../src/pages/home/marketsHeader/marketsHeader.script.tsx","../src/utils.ts","../src/pages/home/marketsHeader/marketsHeader.widget.tsx","../src/pages/home/marketsHeader/marketsHeader.mobile.ui.tsx","../src/pages/home/marketsDataList/marketsDataList.widget.tsx","../src/pages/home/marketsDataList/marketsDataList.mobile.ui.tsx","../src/components/marketsList/marketsList.ui.tsx","../src/components/collapseMarkets/index.tsx","../src/components/sideMarkets/column.tsx","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.ui.tsx","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.script.ts","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.widget.tsx","../src/components/marketsList/marketsList.script.ts","../src/type.ts","../src/components/marketsList/marketsList.widget.tsx","../src/components/searchInput/index.tsx","../src/components/shared/column.tsx","../src/components/shared/hooks/useFavoritesExtraProps.tsx","../src/components/favoritesEmpty/index.tsx","../src/components/favoritesTabs/favoritesTabs.ui.tsx","../src/components/favoritesTabs/favoritesTabs.script.ts","../src/components/favoritesTabs/favoritesTabs.widget.tsx","../src/pages/home/marketsDataList/marketsDataList.script.ts","../src/components/shared/hooks/useTabSort.ts","../src/pages/home/marketsDataList/marketsDataList.ui.tsx","../src/components/favoritesListFull/favoritesListFull.ui.tsx","../src/components/marketsListFull/column.tsx","../src/components/favoritesListFull/favoritesListFull.script.ts","../src/components/favoritesListFull/favoritesListFull.widget.tsx","../src/components/marketsListFull/marketsListFull.ui.tsx","../src/components/marketsListFull/marketsListFull.script.ts","../src/components/marketsListFull/marketsListFull.widget.tsx","../src/components/expandMarkets/expandMarkets.ui.tsx","../src/components/expandMarkets/expandMarkets.script.ts","../src/constant.ts","../src/components/expandMarkets/expandMarkets.widget.tsx","../src/components/fundingOverview/fundingOverview.ui.tsx","../src/components/fundingOverview/columns.tsx","../src/components/fundingOverview/fundingOverview.script.tsx","../src/components/fundingOverview/fundingOverview.widget.tsx","../src/components/fundingOverview/fundingOverview.mobile.ui.tsx","../src/components/fundingComparison/fundingComparison.ui.tsx","../src/components/fundingComparison/columns.tsx","../src/components/fundingComparison/useEXchanges.ts","../src/components/fundingComparison/fundingComparison.script.tsx","../src/components/fundingComparison/fundingComparison.widget.tsx","../src/components/fundingComparison/fundingComparison.mobile.ui.tsx","../src/components/sideMarkets/sideMarkets.ui.tsx","../src/components/sideMarkets/sideMarkets.script.ts","../src/components/sideMarkets/sideMarkets.widget.tsx","../src/components/dropDownMarkets/dropDownMarkets.ui.tsx","../src/components/dropDownMarkets/column.tsx","../src/components/dropDownMarkets/dropDownMarkets.script.ts","../src/components/dropDownMarkets/dropDownMarkets.widget.tsx","../src/components/marketsSheet/marketsSheet.ui.tsx","../src/components/marketsSheet/column.tsx","../src/components/marketsSheet/marketsSheet.script.ts","../src/components/marketsSheet/marketsSheet.widget.tsx","../src/components/symbolInfoBar/symbolInfoBar.ui.tsx","../src/components/symbolInfoBar/symbolInfoBar.script.ts","../src/components/symbolInfoBar/symbolInfoBar.widget.tsx","../src/components/symbolInfoBarFull/symbolInfoBarFull.ui.tsx","../src/components/symbolInfoBarFull/symbolInfoBarFull.script.ts","../src/components/symbolInfoBarFull/symbolInfoBarFull.widget.tsx","../src/deprecated/newListingList/newListingList.ui.tsx","../src/deprecated/newListingList/newListingList.script.ts","../src/deprecated/newListingList/widget.tsx","../src/deprecated/favoritesList/favoritesList.ui.tsx","../src/deprecated/favoritesList/favoritesList.script.ts","../src/deprecated/favoritesList/widget.tsx","../src/deprecated/recentList/recentList.ui.tsx","../src/deprecated/recentList/recentList.script.ts","../src/deprecated/recentList/widget.tsx","../src/pages/home/page.tsx","../src/pages/home/funding/funding.widget.tsx","../src/pages/home/funding/funding.mobile.ui.tsx","../src/pages/home/funding/funding.script.tsx","../src/pages/home/funding/funding.ui.tsx"],"names":["useMemo","useTranslation","Box","cn","Flex","Text","Decimal","createContext","useState","useContext","useCallback","jsx","MarketsContext","MarketsProvider","props","symbol","comparisonProps","children","onSymbolChange","searchValue","setSearchValue","clearSearchValue","memoizedValue","useMarketsContext","jsxs","EditIcon","TrashIcon","AllMarketsIcon","NewListingsIcon","FavoritesIcon","UnFavoritesIcon","SearchIcon","MoveToTopIcon","OrderlyIcon","FavoritesIcon2","UnFavoritesIcon2","TopIcon","DeleteIcon","AddIcon","ActiveAddIcon","ExpandIcon","CollapseIcon","TriangleDownIcon","ArrowLeftIcon","MarketsHeader","emblaRef","emblaApi","scrollIndex","enableScroll","news","gainers","losers","total24Amount","totalOpenInterest","tvl","favorite","t","cls","onSymbol","item","BlockList","CardItem","ScrollIndicator","list","index","BlockItem","ListItem","scrollPrev","scrollNext","useEffect","useEmblaCarousel","useMarkets","useQuery","MarketsType","formatSymbol","compareValues","aValue","bValue","aStr","bStr","aNum","bNum","aIsNumber","bIsNumber","aIsDate","bIsDate","aDate","bDate","sortList","sort","sortKey","sortOrder","sortedList","a","b","comparison","useSort","initialSort","onSortChange","setSort","onSort","options","nextSort","getSortedList","escapeRegExp","string","searchBySymbol","formatString","escapedSearchValue","reg","searchValueLower","exactMatches","startsWithMatches","otherMatches","formattedSymbol","symbolLower","compareSymbols","symbolA","symbolB","useSize","width","setWidth","height","setHeight","handleResize","useMarketsHeaderScript","setScrollIndex","data","useDataSource","markets","balance","prevValue","curValue","total_holding","useScreen","TabPanel","Tabs","MobileMarketsHeader","activeTab","setActiveTab","MarketsHeaderWidget","state","isMobile","DataTable","TokenIcon","Tooltip","Badge","CollapseMarkets","content","Button","CheckedSquareFillIcon","CheckSquareEmptyIcon","PlusIcon","CloseIcon","Divider","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","Input","CloseCircleFillIcon","FavoritesDropdownMenu","favoriteTabs","open","onOpenChange","inputVisible","selectedTabs","value","onValueChange","hide","hideInput","showInput","onCheck","addTab","confirm","overLen","renderInput","overTabs","header","checked","tab","footer","e","useFavoritesDropdownMenuScript","favorites","updateFavoriteTabs","updateSymbolFavoriteState","setOpen","setInputVisible","setValue","setSelectedTabs","clearState","newTab","find","FavoritesDropdownMenuWidget","useSideMarketsColumns","isFavoriteList","record","favoritesIcon","onDelSymbol","iconCls","actions","Fragment","MarketsList","loading","dataSource","getColumns","panelSize","isFavoritesList","renderHeader","emptyView","sideColumns","columns","MarketsPageTab","MarketsTabName","FundingTabName","MarketsTypeMap","useMarketsListScript","setLoading","selectedFavoriteTab","filterList","searchResults","MarketsListWidget","useRef","SearchInput","classNames","suffix","isComposingRef","onSearchValueChange","handleCompositionStart","handleCompositionEnd","event","i18n","getSymbolColumn","getLastColumn","get24hPercentageColumn","EmptyStateIcon","FavoritesEmpty","modal","FavoritesTab","container","inputRef","inputWidth","spanRef","editing","updateCurTab","onEdit","delTab","size","scrollable","updateSelectedFavoriteTab","addIconWidth","tabHeight","gradientColor","onDel","onKeyUp","renderActions","renderAdd","icon","isActive","renderContent","textProps","useFavoritesTabScript","updateFavorites","setEditing","setScrollable","scrollView","setInputWidth","updateScrollLayout","scrollWidth","clientWidth","scrollToRight","selectedTab","_favorites","tabs","rect","offset","FavoritesTabWidget","className","rest","useFavoritesProps","dataFilter","fav","getFavoritesProps","type","renderEmptyView","MobileMarketsDataList","onTabChange","tabSort","onTabSort","renderTab","useSessionStorage","useTabSort","setTabSort","MOBILE_MARKETS_TAB_SORT_STORAGE_KEY","useMarketsDataListScript","Trans","useMarketsListFullColumns","button","FavoritesListFull","pagination","usePagination","useFavoritesListFullScript","pageSize","setPage","filterData","FavoritesListFullWidget","MarketsListFull","useMarketsListFullScript","searchList","sortStore","MarketsListFullWidget","MarketsDataList","MarketsDataListWidget","ExpandMarkets","SIDE_MARKETS_TAB_SORT_STORAGE_KEY","useExpandMarketsScript","ExpandMarketsWidget","Picker","Select","createFundingRenderer","dp","useFundingOverviewColumns","selectedPeriod","setSelectedPeriod","FundingPeriodSelect","FundingOverview","isLoading","useFundingRateHistory","useFundingRates","useFundingOverviewScript","marketData","fundingHistory","isHistoryLoading","getPositiveRates","fundingRates","processedData","posRates","acc","period","history","h","fundingRate","fundingInterval","getFundingInterval","filteredData","next_funding_time","last_funding_rate_timestamp","diff","MobileFundingOverview","FundingOverviewWidget","useEXchanges","brokerName","brokerIconSrc","CDN_PREFIX","useFundingColumns","exchanges","getImgSrc","val","imgSrc","FundingComparison","useMarketsStream","getOpenInterest","open_interest","index_price","useFundingComparisonScript","futures","row","target","result","exchangeName","rate","wooFiRate","otherRate","exchange","MobileFundingComparison","FundingComparisonWidget","React","pick","EyeCloseIcon","IndicatorIcon","ref","SideMarketsHeader","resizeable","onPanelSizeChange","SideMarkets","useLocalStorage","SIDE_MARKETS_SEL_TAB_KEY","useSideMarketsScript","setPanelSize","SideMarketsWidget","useDropDownMarketsColumns","DropDownMarkets","DropDownMarketsConetnt","search","DROPDOWN_MARKETS_SEL_TAB_KEY","DROPDOWN_MARKETS_TAB_SORT_STORAGE_KEY","useDropDownMarketsScript","DropDownMarketsWidget","getMarketsSheetColumns","MarketsSheet","isFavorites","MARKETS_SHEET_SEL_TAB_KEY","useMarketsSheetScript","MarketsSheetWidget","SymbolInfoBar","leverage","symbolView","useSymbolsInfo","useTickerStream","useSymbolInfoBarScript","symbolsInfo","info","baseImr","getLeverage","base_imr","SymbolInfoBarWidget","useFundingRate","SymbolInfoBarFull","isFavorite","quotoDp","openInterest","containerRef","leadingElementRef","tailingElementRef","leadingVisible","tailingVisible","onScoll","fundingPeriod","capFunding","floorFunding","favoriteIcon","price","change","DataItem","FundingRate","label","hint","visible","leading","tailing","onClick","useFundingDetails","useMarketsStore","useSymbolInfoBarFullScript","fundingDetails","isFundingLoading","setLeadingVisible","setTailingVisible","intersectionObserver","entries","direction","SymbolInfoBarFullWidget","NewListingList","collapsed","useNewListingListScript","NewListingListWidget","FavoritesList","useFavoritesListScript","FavoritesListWidget","RecentList","useRecentListScript","RecentListWidget","LeftNavUI","MobileFunding","useFundingScript","Funding","FundingWidget","MarketsHomePage","MarketsMobileContent","MarketsDesktopContent"],"mappings":"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","sourcesContent":["import { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { OrderlyIcon } from \"../../../icons\";\nimport { MarketsHeaderReturns } from \"./marketsHeader.script\";\n\n/** -----------MarketsHeader start ------------ */\ntype MarketsHeaderProps = MarketsHeaderReturns & {\n className?: string;\n};\nexport const MarketsHeader: FC<MarketsHeaderProps> = (props) => {\n const {\n emblaRef,\n emblaApi,\n scrollIndex,\n enableScroll,\n news,\n gainers,\n losers,\n total24Amount,\n totalOpenInterest,\n tvl,\n favorite,\n } = props;\n const { onSymbolChange } = useMarketsContext();\n const { t } = useTranslation();\n\n const cls = cn(\n \"oui-min-w-0 oui-flex-[0_0_calc((100%_-_32px)_/_3)] 3xl:oui-flex-[0_0_calc((100%_-_48px)_/_4)]\",\n enableScroll && \"oui-cursor-pointer oui-select-none\",\n );\n\n const onSymbol = (item: any) => {\n onSymbolChange?.(item);\n favorite.addToHistory(item);\n };\n\n return (\n <div\n id=\"oui-markets-header\"\n className={cn(\"oui-overflow-hidden\", props.className)}\n ref={enableScroll ? emblaRef : undefined}\n >\n <Flex width=\"100%\" gapX={4}>\n <BlockList\n total24Amount={total24Amount}\n totalOpenInterest={totalOpenInterest}\n tvl={tvl}\n className={cls}\n />\n <CardItem\n data={news}\n title={\n <Text.gradient color=\"brand\">\n {t(\"markets.newListings\")}\n </Text.gradient>\n }\n className={cls}\n onSymbol={onSymbol}\n />\n <CardItem\n data={gainers}\n title={\n <Text className=\"oui-text-success-light\">\n {t(\"markets.topGainers\")}\n </Text>\n }\n className={cls}\n onSymbol={onSymbol}\n />\n <CardItem\n data={losers}\n title={\n <Text className=\"oui-text-danger-light\">\n {t(\"markets.topLosers\")}\n </Text>\n }\n className={cls}\n onSymbol={onSymbol}\n />\n </Flex>\n <div className=\"oui-mb-3 oui-mt-1 3xl:oui-mb-0 3xl:oui-mt-4\">\n <ScrollIndicator\n scrollIndex={scrollIndex}\n scrollPrev={emblaApi?.scrollPrev}\n scrollNext={emblaApi?.scrollNext}\n />\n </div>\n </div>\n );\n};\n/** -----------MarketsHeader end ------------ */\n\ntype BlockListProps = {\n className?: string;\n total24Amount?: number;\n totalOpenInterest?: number;\n tvl?: number;\n};\n\n/** -----------MarketsHeader start ------------ */\nconst BlockList: React.FC<BlockListProps> = (props) => {\n const { total24Amount, totalOpenInterest, tvl } = props;\n const { t } = useTranslation();\n\n const list = useMemo(() => {\n return [\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.column.24hVolume\")}\n </Flex>\n ),\n value: total24Amount,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.openInterest\")}\n </Flex>\n ),\n value: totalOpenInterest,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {`${t(\"common.assets\")} (TVL)`}\n </Flex>\n ),\n value: tvl,\n },\n ];\n }, [total24Amount, totalOpenInterest, tvl]);\n\n return (\n <Flex\n direction=\"column\"\n justify=\"between\"\n width=\"100%\"\n height={236}\n className={props.className}\n >\n {list?.map((item, index) => (\n <BlockItem key={`item-${index}`} {...item} />\n ))}\n </Flex>\n );\n};\n/** -----------MarketsHeader start ------------ */\n\ntype BlockItemProps = {\n label: ReactNode;\n value?: number;\n rule?: string;\n dp?: number;\n};\n\nconst BlockItem: React.FC<BlockItemProps> = (props) => {\n return (\n <Box intensity={900} r=\"lg\" px={4} py={3} width=\"100%\">\n <Text as=\"div\" intensity={36} size=\"xs\" weight=\"semibold\">\n {props.label}\n </Text>\n\n <Text.numeral\n size=\"base\"\n currency=\"$\"\n dp={props.dp || 0}\n rm={Decimal.ROUND_DOWN}\n rule={props.rule as any}\n >\n {props.value!}\n </Text.numeral>\n </Box>\n );\n};\n\ntype CardItemProps = {\n data?: TListItem[];\n title: ReactNode;\n className?: string;\n onSymbol: (item: any) => void;\n};\n\nconst CardItem: React.FC<CardItemProps> = (props) => {\n return (\n <Box\n intensity={900}\n r=\"lg\"\n py={4}\n pb={2}\n height={236}\n className={props.className}\n >\n <Box px={4}>\n <Text.gradient color=\"brand\" size=\"sm\" weight=\"semibold\">\n {props.title}\n </Text.gradient>\n </Box>\n\n <Flex direction=\"column\" itemAlign=\"start\" mt={2}>\n {props.data?.map((item, index) => (\n <ListItem key={item.symbol} item={item} onSymbol={props.onSymbol} />\n ))}\n </Flex>\n </Box>\n );\n};\n\ntype TListItem = {\n symbol: string;\n price: string;\n change: number;\n precision: number;\n [x: string]: any;\n};\n\ntype ListItemProps = {\n item: TListItem;\n className?: string;\n onSymbol: (item: any) => void;\n};\n\nconst ListItem: React.FC<ListItemProps> = (props) => {\n const { item } = props;\n\n return (\n <Flex\n width=\"100%\"\n gapX={3}\n py={2}\n px={4}\n className={cn(\"oui-cursor-pointer hover:oui-bg-base-8\", props.className)}\n onClick={() => {\n props.onSymbol(item);\n }}\n >\n <Flex width=\"100%\" gapX={1}>\n {/* <TokenIcon symbol={item.symbol} size=\"xs\" /> */}\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"xs\"\n weight=\"semibold\"\n showIcon\n >\n {item.symbol}\n </Text.formatted>\n </Flex>\n\n <Flex width=\"100%\" justify=\"end\">\n <Text.numeral\n currency=\"$\"\n size=\"xs\"\n weight=\"semibold\"\n dp={item.quote_dp}\n >\n {item[\"24h_close\"]}\n </Text.numeral>\n </Flex>\n\n <Flex width=\"100%\" justify=\"end\">\n <Text.numeral\n rule=\"percentages\"\n coloring\n size=\"xs\"\n weight=\"semibold\"\n showIdentifier\n >\n {item.change}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n\ninterface ScrollIndicatorProps {\n scrollIndex: number;\n scrollPrev?: () => void;\n scrollNext?: () => void;\n}\n\nconst ScrollIndicator: React.FC<ScrollIndicatorProps> = (props) => {\n const { scrollIndex, scrollPrev, scrollNext } = props;\n\n return (\n <Flex gapX={1} justify=\"center\" className=\"3xl:oui-hidden\">\n {[0, 1].map((item) => {\n return (\n <Box\n key={item}\n py={1}\n pl={item === 0 ? 1 : 0}\n pr={item === 1 ? 1 : 0}\n onClick={() => {\n if (scrollIndex === 0 && item === 1) {\n scrollNext?.();\n } else if (scrollIndex === 1 && item === 0) {\n scrollPrev?.();\n }\n }}\n className=\"oui-cursor-pointer\"\n >\n <Box\n key={item}\n width={8}\n height={4}\n r=\"full\"\n className={cn(\n \"oui-transition-all oui-duration-300\",\n scrollIndex === item\n ? \"oui-w-4 oui-bg-base-contrast-36\"\n : \"oui-bg-base-contrast-20\",\n )}\n />\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport default ScrollIndicator;\n","import {\n FC,\n createContext,\n PropsWithChildren,\n useState,\n useContext,\n useCallback,\n useMemo,\n} from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { LeftNavProps, RouterAdapter } from \"@orderly.network/ui-scaffold\";\n\ntype MarketsContextState = {\n symbol?: string;\n searchValue?: string;\n onSearchValueChange?: (searchValue: string) => void;\n clearSearchValue?: () => void;\n} & MarketsProviderProps;\n\nexport const MarketsContext = createContext<MarketsContextState>({});\n\nexport type MarketsProviderProps = {\n symbol?: string;\n onSymbolChange?: (symbol: API.Symbol) => void;\n // only for mobile\n navProps?: {\n logo?: {\n src: string;\n alt: string;\n };\n routerAdapter?: RouterAdapter;\n leftNav?: LeftNavProps;\n };\n comparisonProps?: {\n /**\n * Set Name of Exchanges in the comparison list.\n * @default 'Orderly'\n */\n exchangesName?: string;\n /**\n * Set Icon URL of Exchanges in the comparison list.\n * @default \"\"\n */\n exchangesIconSrc?: string;\n };\n};\n\nexport const MarketsProvider: FC<PropsWithChildren<MarketsProviderProps>> = (\n props,\n) => {\n const { symbol, comparisonProps, children, onSymbolChange } = props;\n const [searchValue, setSearchValue] = useState(\"\");\n\n const clearSearchValue = useCallback(() => {\n setSearchValue(\"\");\n }, []);\n\n const memoizedValue = useMemo<MarketsContextState>(() => {\n return {\n searchValue,\n onSearchValueChange: setSearchValue,\n clearSearchValue,\n symbol: symbol,\n onSymbolChange: onSymbolChange,\n comparisonProps: comparisonProps,\n };\n }, [searchValue, symbol, onSymbolChange, setSearchValue, comparisonProps]);\n\n return (\n <MarketsContext.Provider value={memoizedValue}>\n {children}\n </MarketsContext.Provider>\n );\n};\n\nexport const useMarketsContext = () => {\n return useContext<MarketsContextState>(MarketsContext);\n};\n","import React, { FC, PropsWithChildren, SVGProps } from \"react\";\n\nexport const EditIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"16\"\n height=\"16\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 0h16v16H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M3.333 12.667h.95L10.8 6.15l-.95-.95-6.517 6.517zM2.667 14a.65.65 0 0 1-.475-.192.65.65 0 0 1-.192-.475v-1.616a1.32 1.32 0 0 1 .383-.934l8.417-8.4q.2-.183.442-.283.24-.1.508-.1.267 0 .517.1.249.1.433.3l.917.933q.2.184.291.434a1.44 1.44 0 0 1 0 1.008 1.25 1.25 0 0 1-.291.442l-8.4 8.4a1.32 1.32 0 0 1-.933.383zm7.65-8.317L9.85 5.2l.95.95z\" />\n </g>\n </svg>\n);\n\nexport const TrashIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M7.205 1.334c-.345 0-.674.136-.918.38L6.001 2H2.667a.667.667 0 1 0 0 1.334h10.667a.667.667 0 1 0 0-1.334h-3.333l-.287-.286a1.3 1.3 0 0 0-.918-.38zM2.911 4.667l1.018 8.842c.088.66.656 1.158 1.322 1.158h5.498c.666 0 1.235-.497 1.323-1.163l1.019-8.837z\" />\n </svg>\n);\n\nexport const AllMarketsIcon: 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 <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"12\"\n height=\"12\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 0h12v12H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M8.5 10a.48.48 0 0 1-.356-.144A.48.48 0 0 1 8 9.5V7q0-.213.144-.356A.48.48 0 0 1 8.5 6.5h1q.212 0 .356.144A.48.48 0 0 1 10 7v2.5q0 .212-.144.356A.48.48 0 0 1 9.5 10zm-3 0a.48.48 0 0 1-.356-.144A.48.48 0 0 1 5 9.5v-7q0-.212.144-.356A.48.48 0 0 1 5.5 2h1q.213 0 .356.144A.48.48 0 0 1 7 2.5v7q0 .212-.144.356A.48.48 0 0 1 6.5 10zm-3 0a.48.48 0 0 1-.356-.144A.48.48 0 0 1 2 9.5V5q0-.213.144-.356A.48.48 0 0 1 2.5 4.5h1q.212 0 .356.144A.48.48 0 0 1 4 5v4.5q0 .212-.144.356A.48.48 0 0 1 3.5 10z\" />\n </g>\n </svg>\n);\n\nexport const NewListingsIcon: 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 <path d=\"M5.993.958a.416.416 0 0 0-.41.422v.416a.416.416 0 1 0 .832 0V1.38a.416.416 0 0 0-.422-.422M2.749 2.29a.416.416 0 0 0-.29.714l.291.292a.416.416 0 1 0 .589-.588l-.292-.292a.42.42 0 0 0-.298-.126m6.489 0a.42.42 0 0 0-.286.126l-.292.292a.416.416 0 1 0 .588.588l.292-.292a.416.416 0 0 0-.302-.714m-3.239.753a2.895 2.895 0 0 0-2.913 2.914A2.86 2.86 0 0 0 4.751 8.58v1.123c0 .458.374.833.832.833h.832a.835.835 0 0 0 .833-.833V8.58a2.86 2.86 0 0 0 1.665-2.622 2.895 2.895 0 0 0-2.914-2.914M1.421 5.541a.416.416 0 1 0 0 .833h.417a.416.416 0 1 0 0-.833zm8.74 0a.416.416 0 1 0 0 .833h.416a.417.417 0 1 0 0-.833zM3.037 8.492a.42.42 0 0 0-.287.126l-.291.292a.416.416 0 1 0 .588.588l.292-.292a.416.416 0 0 0-.302-.714m5.913 0a.416.416 0 0 0-.29.714l.292.292a.416.416 0 1 0 .588-.588l-.292-.292a.42.42 0 0 0-.298-.126\" />\n </svg>\n);\n\nexport const FavoritesIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"21\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 .5h20v20H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"m10 14.074-3.2 1.913a.6.6 0 0 1-.332.068.6.6 0 0 1-.277-.101.5.5 0 0 1-.186-.256.5.5 0 0 1-.005-.336l.84-3.556-2.82-2.394a.5.5 0 0 1-.174-.281.6.6 0 0 1 .013-.315.5.5 0 0 1 .173-.252.55.55 0 0 1 .305-.112l3.693-.33 1.467-3.393a.57.57 0 0 1 .211-.255A.54.54 0 0 1 10 4.39q.16 0 .292.083.131.082.211.255l1.467 3.414 3.693.309q.178.014.305.123.126.11.173.262t.002.304a.56.56 0 0 1-.183.27l-2.8 2.395.84 3.556a.5.5 0 0 1-.005.336.5.5 0 0 1-.186.256.6.6 0 0 1-.277.101.6.6 0 0 1-.332-.068z\" />\n </g>\n </svg>\n);\n\nexport const UnFavoritesIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"21\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 .5h20v20H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M7.333 14.396 10 12.813l2.688 1.583-.709-3 2.313-1.98-3.063-.27L10 6.292 8.77 9.146l-3.062.27 2.334 1.98zM10 14.074l-3.2 1.913a.6.6 0 0 1-.332.068.6.6 0 0 1-.277-.101.5.5 0 0 1-.186-.256.5.5 0 0 1-.005-.336l.84-3.556-2.82-2.394a.5.5 0 0 1-.174-.281.6.6 0 0 1 .013-.315.5.5 0 0 1 .173-.252.55.55 0 0 1 .305-.112l3.693-.33 1.467-3.393a.57.57 0 0 1 .211-.255A.54.54 0 0 1 10 4.39q.16 0 .292.083.131.082.211.255l1.467 3.414 3.693.309q.178.014.305.123.126.11.173.262t.002.304a.56.56 0 0 1-.183.27l-2.8 2.395.84 3.556a.5.5 0 0 1-.005.336.5.5 0 0 1-.186.256.6.6 0 0 1-.277.101.6.6 0 0 1-.332-.068z\" />\n </g>\n </svg>\n);\n\nexport const CirclePlusIcon: 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 <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"18\"\n height=\"18\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 0h18v18H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M8.325 12.6h1.35V9.675H12.6v-1.35H9.675V5.4h-1.35v2.925H5.4v1.35h2.925zm.68 3.6a7 7 0 0 1-2.799-.562A7.3 7.3 0 0 1 3.91 14.09a7.3 7.3 0 0 1-1.546-2.296A7 7 0 0 1 1.8 8.99q0-1.49.563-2.794a7.26 7.26 0 0 1 3.843-3.834A7 7 0 0 1 9.009 1.8q1.49 0 2.794.562 1.303.563 2.288 1.547a7.3 7.3 0 0 1 1.547 2.292q.561 1.308.562 2.794a7 7 0 0 1-.562 2.799 7.3 7.3 0 0 1-1.547 2.297 7.3 7.3 0 0 1-2.292 1.547 7 7 0 0 1-2.794.562M9 14.85q2.437 0 4.144-1.706Q14.85 11.437 14.85 9t-1.706-4.144Q11.437 3.15 9 3.15T4.856 4.856 3.15 9t1.706 4.144Q6.563 14.85 9 14.85\" />\n </g>\n </svg>\n);\n\nexport const SearchIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M5.841 1.14a4.667 4.667 0 0 0 0 9.333 4.74 4.74 0 0 0 2.875-.975l2.54 2.56a.6.6 0 0 0 .838 0 .6.6 0 0 0 0-.838L9.537 8.677a4.72 4.72 0 0 0 .971-2.871 4.667 4.667 0 0 0-4.667-4.667m0 1.166a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7\" />\n </svg>\n);\n\nexport const MoveToTopIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10 5.5a.76.76 0 0 0-.583.25l-4.334 4c0 .083-.083.25-.083.333 0 .25.167.417.417.417h2.916v6.667c0 .416.334.833.834.833h1.666c.5 0 .834-.417.834-.833V10.5h2.916c.25 0 .417-.167.417-.417 0-.083-.083-.25-.083-.333l-4.25-4.084c-.25-.083-.417-.166-.667-.166M2.177 3.06A.8.8 0 0 1 2.5 3h15a.834.834 0 1 1 0 1.667h-15a.833.833 0 0 1-.323-1.607\" />\n </svg>\n);\n\nexport const OrderlyIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"13\"\n viewBox=\"0 0 12 13\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.015.34h-.029a5.98 5.98 0 0 0-3.93 1.477c-.074.065-.027.184.072.184h7.745c.099 0 .146-.119.072-.184A5.98 5.98 0 0 0 6.015.341M3.48 7.866a.23.23 0 0 1 .187.1A2.85 2.85 0 0 0 6 9.178a2.85 2.85 0 0 0 2.334-1.213.23.23 0 0 1 .186-.1h3.104c.09 0 .155.086.13.172A6 6 0 0 1 6 12.327a6 6 0 0 1-5.755-4.29.134.134 0 0 1 .13-.172zM8.26 4.6a.29.29 0 0 0 .229.116h3.11c.09 0 .156-.086.13-.173a6 6 0 0 0-1.106-2.03.22.22 0 0 0-.165-.077H1.543a.22.22 0 0 0-.165.077 6 6 0 0 0-1.105 2.03.134.134 0 0 0 .13.173h3.11A.29.29 0 0 0 3.74 4.6 2.85 2.85 0 0 1 6 3.488c.92 0 1.738.436 2.26 1.112m.414 2.717c-.02.055.02.115.079.115h3.033a.135.135 0 0 0 .133-.112 6 6 0 0 0-.015-2.058.135.135 0 0 0-.133-.11H8.72c-.06 0-.1.061-.078.117a2.83 2.83 0 0 1 .032 2.048m-5.427.115c.06 0 .1-.06.079-.115a2.84 2.84 0 0 1 .032-2.048.085.085 0 0 0-.078-.118H.23a.135.135 0 0 0-.134.11A6 6 0 0 0 .08 7.32c.01.065.067.112.133.112z\"\n />\n </svg>\n);\n\nexport const FavoritesIcon2: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"13\"\n viewBox=\"0 0 12 13\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 1.72c-.286 0-.577.178-.75.532L4.2 4.438l-2.42.344c-.78.108-1.03.872-.47 1.42l1.75 1.703-.407 2.39c-.133.773.508 1.24 1.203.874.268-.142 1.648-.857 2.155-1.124l2.155 1.124c.695.367 1.339-.1 1.202-.874l-.421-2.39 1.749-1.702c.565-.547.326-1.31-.453-1.421l-2.436-.344L6.76 2.252c-.172-.354-.464-.531-.75-.531\" />\n </svg>\n);\n\nexport const UnFavoritesIcon2: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"13\"\n viewBox=\"0 0 12 13\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 1.72c-.286 0-.577.178-.75.532L4.2 4.438l-2.42.344c-.78.108-1.03.872-.47 1.42l1.75 1.703-.407 2.39c-.133.773.508 1.24 1.203.874.268-.142 1.648-.857 2.155-1.124l2.155 1.124c.695.367 1.339-.1 1.202-.874l-.421-2.39 1.749-1.702c.565-.547.326-1.31-.453-1.421l-2.436-.344L6.76 2.252c-.172-.354-.464-.531-.75-.531m0 1.297 1.03 2.108c.073.15.211.242.375.266l2.343.343-1.702 1.64a.48.48 0 0 0-.14.437l.405 2.312L6.246 9.03a.5.5 0 0 0-.468 0L3.7 10.123l.39-2.296a.52.52 0 0 0-.14-.453l-1.687-1.64 2.327-.328a.52.52 0 0 0 .39-.28z\" />\n </svg>\n);\n\nexport const TopIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"17\"\n viewBox=\"0 0 16 17\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M2.01 2.915a.667.667 0 1 0 0 1.334h12a.667.667 0 0 0 0-1.334zM7.343 13.59a.667.667 0 0 0 1.333 0V7.88l2 1.98.937-.938L8.49 5.777a.686.686 0 0 0-.959 0L4.405 8.923l.938.937 2-1.979z\" />\n </svg>\n);\n\nexport const DeleteIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"17\"\n viewBox=\"0 0 16 17\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M4.67 2.203A2.667 2.667 0 0 0 2.005 4.87v6.667a2.667 2.667 0 0 0 2.667 2.666h6.666a2.667 2.667 0 0 0 2.667-2.666V4.87a2.667 2.667 0 0 0-2.667-2.667zm1.334 3.334c.17 0 .349.057.48.187l1.52 1.52 1.52-1.52a.68.68 0 0 1 .48-.187c.17 0 .349.057.48.187.26.26.26.698 0 .959l-1.521 1.52 1.52 1.52c.26.262.26.699 0 .96a.687.687 0 0 1-.958 0L8.004 9.162l-1.52 1.52a.687.687 0 0 1-.96 0 .687.687 0 0 1 0-.958l1.521-1.52-1.52-1.521a.687.687 0 0 1 0-.96.68.68 0 0 1 .479-.186\" />\n </svg>\n);\n\nexport const AddIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M0 0h16v16H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M7.333 8.667h-4V7.333h4v-4h1.333v4h4v1.334h-4v4H7.333z\" />\n </g>\n </svg>\n);\n\nexport const ActiveAddIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M5.99536 1.46487C5.71936 1.46487 5.49536 1.68887 5.49536 1.96487V5.46487H1.99536C1.71936 5.46487 1.49536 5.68887 1.49536 5.96487C1.49536 6.24087 1.71936 6.46487 1.99536 6.46487H5.49536V9.96487C5.49536 10.2409 5.71936 10.4649 5.99536 10.4649C6.27136 10.4649 6.49536 10.2409 6.49536 9.96487V6.46487H9.99536C10.2714 6.46487 10.4954 6.24087 10.4954 5.96487C10.4954 5.68887 10.2714 5.46487 9.99536 5.46487H6.49536V1.96487C6.49536 1.68887 6.27136 1.46487 5.99536 1.46487Z\"\n fill=\"url(#paint0_linear_1951_55156)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_1951_55156\"\n x1=\"10.4954\"\n y1=\"5.96487\"\n x2=\"1.49536\"\n y2=\"5.96487\"\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\nexport const ExpandIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M6.326 8.826a.84.84 0 0 0-.6.234L2.16 12.627v-2.135H.492v4.167c0 .46.373.833.834.833h4.166v-1.667H3.357l3.567-3.567a.857.857 0 0 0 0-1.198.84.84 0 0 0-.598-.234M10.502.492V2.16h2.135L9.07 5.726a.857.857 0 0 0 0 1.199.86.86 0 0 0 1.197 0l3.568-3.568v2.135h1.667V1.326a.834.834 0 0 0-.834-.834z\" />\n </svg>\n);\n\nexport const CollapseIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M14.668.492a.85.85 0 0 0-.599.234l-3.567 3.568V2.159H8.835v4.167c0 .46.373.833.833.833h4.167V5.492H11.7l3.569-3.567a.86.86 0 0 0 0-1.199.85.85 0 0 0-.6-.234m-12.5 8.334v1.666h2.135L.736 14.06a.86.86 0 0 0 0 1.198.86.86 0 0 0 1.198 0l3.568-3.567v2.134h1.666V9.66a.834.834 0 0 0-.833-.833z\" />\n </svg>\n);\n\nexport const TriangleDownIcon: 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 <path d=\"M3.003 3.998a.494.494 0 0 0-.39.797l3 4c.2.266.597.266.797 0l3-4a.5.5 0 0 0-.407-.797z\" />\n </svg>\n);\n\nexport const ArrowLeftIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M9.186 3.348a.67.67 0 0 0-.436.27l-2.657 4a.69.69 0 0 0 0 .75l2.657 4a.68.68 0 0 0 .934.188.685.685 0 0 0 .187-.937L7.463 7.993 9.87 4.37a.685.685 0 0 0-.187-.938.65.65 0 0 0-.498-.083\" />\n </svg>\n);\n\nexport const ArrowRightIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M6.777 3.348a.65.65 0 0 0-.498.083.685.685 0 0 0-.187.938L8.5 7.993l-2.408 3.625a.685.685 0 0 0 .187.938.68.68 0 0 0 .934-.187l2.657-4a.69.69 0 0 0 0-.75l-2.657-4a.67.67 0 0 0-.436-.271\" />\n </svg>\n);\n\nconst BaseSortIcon = (props: PropsWithChildren) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n >\n {props.children}\n </svg>\n );\n};\n\nexport const SortingIcon = () => {\n return (\n <BaseSortIcon>\n <path\n d=\"M5 1.042a.47.47 0 0 0-.338.135L2.166 3.844c-.206.22-.005.531.338.531h4.992c.342 0 .543-.311.337-.531L5.338 1.177A.47.47 0 0 0 5 1.042m0 7.916a.47.47 0 0 1-.338-.135L2.166 6.156c-.206-.22-.005-.531.338-.531h4.992c.342 0 .543.311.337.531L5.338 8.823A.47.47 0 0 1 5 8.958\"\n fill=\"#fff\"\n fillOpacity=\".2\"\n />\n </BaseSortIcon>\n );\n};\n\nexport const AscendingIcon = () => {\n return (\n <BaseSortIcon>\n <path\n d=\"M5 1.042a.47.47 0 0 0-.338.135L2.166 3.844c-.206.22-.005.531.338.531h4.992c.342 0 .543-.311.337-.531L5.338 1.177A.47.47 0 0 0 5 1.042\"\n fill=\"#fff\"\n fillOpacity=\".8\"\n />\n <path\n d=\"M5 8.958a.47.47 0 0 1-.338-.135L2.166 6.156c-.206-.22-.005-.531.338-.531h4.992c.342 0 .543.311.337.531L5.338 8.823A.47.47 0 0 1 5 8.958\"\n fill=\"#fff\"\n fillOpacity=\".2\"\n />\n </BaseSortIcon>\n );\n};\n\nexport const DescendingIcon = () => {\n return (\n <BaseSortIcon>\n <path\n d=\"M5 1.042a.47.47 0 0 0-.338.135L2.166 3.844c-.206.22-.005.531.338.531h4.992c.342 0 .543-.311.337-.531L5.338 1.177A.47.47 0 0 0 5 1.042\"\n fill=\"#fff\"\n fillOpacity=\".2\"\n />\n <path\n d=\"M5 8.958a.47.47 0 0 1-.338-.135L2.166 6.156c-.206-.22-.005-.531.338-.531h4.992c.342 0 .543.311.337.531L5.338 8.823A.47.47 0 0 1 5 8.958\"\n fill=\"#fff\"\n fillOpacity=\".8\"\n />\n </BaseSortIcon>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { useMarkets, useQuery, MarketsType } from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { sortList, useSize } from \"../../../utils\";\n\n// export type EmblaCarouselType = Exclude<UseEmblaCarouselType[1], undefined>;\n// export type TEmblaApi = Pick<EmblaCarouselType, \"scrollPrev\" | \"scrollNext\">;\n// use UseEmblaCarouselType will bring type error\nexport type TEmblaApi = {\n scrollPrev: (jump?: boolean) => void;\n scrollNext: (jump?: boolean) => void;\n};\n\nexport type MarketsHeaderReturns = ReturnType<typeof useMarketsHeaderScript>;\n\nexport const useMarketsHeaderScript = () => {\n const [scrollIndex, setScrollIndex] = useState(0);\n const data = useDataSource();\n\n const { width } = useSize();\n\n const [emblaRef, emblaApi] = useEmblaCarousel({\n loop: true,\n // duration: 25,\n slidesToScroll: \"auto\",\n });\n\n useEffect(() => {\n emblaApi?.on(\"select\", () => {\n setScrollIndex(emblaApi?.selectedScrollSnap());\n });\n }, [emblaApi]);\n\n return {\n scrollIndex,\n setScrollIndex,\n emblaRef,\n emblaApi: emblaApi as TEmblaApi,\n enableScroll: width < 1440,\n ...data,\n };\n};\n\nexport function useDataSource() {\n const [markets, favorite] = useMarkets(MarketsType.ALL);\n const { data: balance } = useQuery(\"/v1/public/balance/stats\");\n\n const news = useMemo(\n () =>\n sortList(markets, { sortKey: \"created_time\", sortOrder: \"desc\" }).slice(\n 0,\n 5,\n ),\n [markets],\n );\n\n const gainers = useMemo(\n () =>\n sortList(markets, { sortKey: \"change\", sortOrder: \"desc\" }).slice(0, 5),\n [markets],\n );\n\n const losers = useMemo(\n () =>\n sortList(markets, { sortKey: \"change\", sortOrder: \"asc\" }).slice(0, 5),\n [markets],\n );\n\n const total24Amount = useMemo(\n () =>\n markets?.reduce((prevValue: Decimal, curValue: any) => {\n return prevValue.add(curValue[\"24h_amount\"] || 0);\n }, new Decimal(0)) || new Decimal(0),\n [markets],\n );\n\n const totalOpenInterest = useMemo(\n () =>\n markets?.reduce((prevValue: Decimal, curValue: any) => {\n return prevValue.add(curValue[\"openInterest\"] || 0);\n }, new Decimal(0)) || new Decimal(0),\n [markets],\n );\n\n const tvl = useMemo(() => {\n if (!balance) return 0;\n\n const { total_holding = 0 } = balance as any;\n return new Decimal(total_holding).toNumber();\n }, [balance]);\n\n return {\n markets,\n news,\n gainers,\n losers,\n total24Amount: total24Amount.toNumber(),\n totalOpenInterest: totalOpenInterest.toNumber(),\n tvl,\n favorite,\n };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { TableSort } from \"@orderly.network/ui\";\nimport { formatSymbol } from \"@orderly.network/utils\";\nimport { SortType } from \"./type\";\n\n/**\n * Compare two values intelligently\n */\nconst compareValues = (aValue: any, bValue: any): number => {\n // Handle null/undefined values (always sort to bottom)\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n\n // Convert to string first for type checking\n const aStr = String(aValue).trim();\n const bStr = String(bValue).trim();\n\n // More robust number detection - check if values can be converted to valid numbers\n const aNum = Number(aStr);\n const bNum = Number(bStr);\n const aIsNumber =\n !isNaN(aNum) && isFinite(aNum) && /^-?\\d*\\.?\\d+([eE][+-]?\\d+)?$/.test(aStr);\n const bIsNumber =\n !isNaN(bNum) && isFinite(bNum) && /^-?\\d*\\.?\\d+([eE][+-]?\\d+)?$/.test(bStr);\n\n if (aIsNumber && bIsNumber) {\n return aNum - bNum;\n }\n\n // Check if both are valid dates (ISO format or timestamp)\n const aIsDate = /^\\d{4}-\\d{2}-\\d{2}/.test(aStr) || /^\\d{13}$/.test(aStr);\n const bIsDate = /^\\d{4}-\\d{2}-\\d{2}/.test(bStr) || /^\\d{13}$/.test(bStr);\n\n if (aIsDate && bIsDate) {\n const aDate = new Date(aValue);\n const bDate = new Date(bValue);\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\n return aDate.getTime() - bDate.getTime();\n }\n }\n\n // String comparison - use localeCompare for proper string sorting\n return aStr.localeCompare(bStr, undefined, {\n sensitivity: \"base\",\n numeric: false, // Disable numeric sorting for pure string comparison\n caseFirst: \"upper\",\n });\n};\n\n/** get page data */\nexport function getPagedData(list: any[], pageSize: number, pageIndex: number) {\n const pageData: any[][] = [];\n let rows: any[] = [];\n for (let i = 0; i < list.length; i++) {\n rows.push(list[i]);\n if ((i + 1) % pageSize === 0 || i === list.length - 1) {\n pageData.push(rows);\n rows = [];\n }\n }\n return pageData[pageIndex - 1] || [];\n}\n\nexport function sortList(list: any[], sort?: SortType) {\n const { sortKey, sortOrder } = sort || {};\n const sortedList = [...(list || [])];\n\n if (sortKey && sortOrder) {\n // sort list\n sortedList.sort((a: any, b: any) => {\n const comparison = compareValues(a[sortKey], b[sortKey]);\n // Handle sort order: desc means reverse the comparison result\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n }\n return sortedList;\n}\n\nexport function useSort(\n initialSort?: SortType,\n onSortChange?: (sort?: SortType) => void,\n) {\n const [sort, setSort] = useState<SortType | undefined>(initialSort);\n\n const onSort = useCallback((options?: TableSort) => {\n const nextSort = options\n ? {\n sortKey: options.sortKey,\n sortOrder: options.sort,\n }\n : undefined;\n\n setSort(nextSort);\n onSortChange?.(nextSort);\n // initialSort, onSortChange is not needed to be in the dependency array, otherwise it will cause infinite loop\n }, []);\n\n const getSortedList = useCallback(\n (list: any[]) => sortList(list, sort),\n [sort],\n );\n\n return { sort, onSort, getSortedList };\n}\n\n/**\n * Escape special characters for use in regular expressions\n */\nfunction escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport function searchBySymbol<T extends Record<PropertyKey, any>>(\n list: T[],\n searchValue = \"\",\n formatString?: string,\n) {\n if (!searchValue) {\n return list;\n }\n\n // Escape special characters to prevent RegExp errors\n const escapedSearchValue = escapeRegExp(searchValue);\n const reg = new RegExp(escapedSearchValue, \"i\");\n\n const searchValueLower = searchValue.toLowerCase();\n\n // Split results into three groups: exact matches, starts with search and other matches\n const exactMatches: T[] = [];\n const startsWithMatches: T[] = [];\n const otherMatches: T[] = [];\n\n list?.forEach((item) => {\n const formattedSymbol = formatSymbol(item.symbol, formatString);\n const symbolLower = formattedSymbol.toLowerCase();\n if (reg.test(formattedSymbol)) {\n if (symbolLower === searchValueLower) {\n exactMatches.push(item);\n } else if (symbolLower.startsWith(searchValueLower)) {\n startsWithMatches.push(item);\n } else {\n otherMatches.push(item);\n }\n }\n });\n\n const compareSymbols = (a: T, b: T) => {\n const symbolA = formatSymbol(a.symbol, formatString);\n const symbolB = formatSymbol(b.symbol, formatString);\n if (symbolA < symbolB) return -1;\n if (symbolA > symbolB) return 1;\n return 0;\n };\n\n // Sort each group alphabetically\n startsWithMatches.sort(compareSymbols);\n otherMatches.sort(compareSymbols);\n\n // Combine results with prioritized matches first\n return [...exactMatches, ...startsWithMatches, ...otherMatches];\n}\n\nexport function useSize() {\n const [width, setWidth] = useState<number>(0);\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n setWidth(window.innerWidth);\n setHeight(window.innerHeight);\n\n const handleResize = () => {\n setHeight(window.innerHeight);\n setWidth(window.innerWidth);\n };\n\n window?.addEventListener(\"resize\", handleResize);\n\n return () => {\n window?.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n return {\n width,\n height,\n };\n}\n","import { FC } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { MobileMarketsHeader } from \"./marketsHeader.mobile.ui\";\nimport { useMarketsHeaderScript } from \"./marketsHeader.script\";\nimport { MarketsHeader } from \"./marketsHeader.ui\";\n\ntype MarketsHeaderWidgetProps = {\n className?: string;\n};\n\nexport const MarketsHeaderWidget: FC<MarketsHeaderWidgetProps> = (props) => {\n const state = useMarketsHeaderScript();\n const { isMobile } = useScreen();\n return isMobile ? (\n <MobileMarketsHeader className={props.className} {...state} />\n ) : (\n <MarketsHeader className={props.className} {...state} />\n );\n};\n","import { FC, ReactNode, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, Flex, TabPanel, Tabs, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { OrderlyIcon } from \"../../../icons\";\nimport { MarketsHeaderReturns } from \"./marketsHeader.script\";\n\ntype MobileMarketsHeaderProps = MarketsHeaderReturns & {\n className?: string;\n};\n\nexport const MobileMarketsHeader: FC<MobileMarketsHeaderProps> = (props) => {\n const {\n news,\n gainers,\n losers,\n total24Amount,\n totalOpenInterest,\n tvl,\n favorite,\n } = props;\n const [activeTab, setActiveTab] = useState(\"newListings\");\n const { onSymbolChange } = useMarketsContext();\n const { t } = useTranslation();\n\n const onSymbol = (item: any) => {\n onSymbolChange?.(item);\n favorite.addToHistory(item);\n };\n\n return (\n <div\n id=\"oui-markets-header\"\n className={cn(\"oui-overflow-hidden\", props.className)}\n >\n <BlockList\n total24Amount={total24Amount}\n totalOpenInterest={totalOpenInterest}\n tvl={tvl}\n />\n\n <Box intensity={900} r=\"xl\" p={3} mt={3}>\n <Tabs size=\"md\" value={activeTab} onValueChange={setActiveTab}>\n <TabPanel\n title={t(\"markets.newListings\")}\n value=\"newListings\"\n testid=\"oui-testid-markets-tab\"\n >\n <CardItem data={news} onSymbol={onSymbol} />\n </TabPanel>\n <TabPanel\n title={t(\"markets.topGainers\")}\n value=\"topGainers\"\n testid=\"oui-testid-funding-tab\"\n >\n <CardItem data={gainers} onSymbol={onSymbol} />\n </TabPanel>\n <TabPanel\n title={t(\"markets.topLosers\")}\n value=\"topLosers\"\n testid=\"oui-testid-funding-tab\"\n >\n <CardItem data={losers} onSymbol={onSymbol} />\n </TabPanel>\n </Tabs>\n </Box>\n </div>\n );\n};\n\ntype BlockListProps = {\n className?: string;\n total24Amount?: number;\n totalOpenInterest?: number;\n tvl?: number;\n};\n\nconst BlockList: React.FC<BlockListProps> = (props) => {\n const { total24Amount, totalOpenInterest, tvl } = props;\n const { t } = useTranslation();\n\n const list = useMemo(() => {\n return [\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.column.24hVolume\")}\n </Flex>\n ),\n value: total24Amount,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.openInterest\")}\n </Flex>\n ),\n value: totalOpenInterest,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {`${t(\"common.assets\")} (TVL)`}\n </Flex>\n ),\n value: tvl,\n },\n ];\n }, [total24Amount, totalOpenInterest, tvl]);\n\n return (\n <Flex\n intensity={900}\n r=\"xl\"\n width=\"100%\"\n py={3}\n className={props.className}\n >\n {list?.map((item, index) => (\n <BlockItem\n key={`item-${index}`}\n {...item}\n className={cn(\n index !== list.length - 1 && \"oui-border-r oui-border-line-6\",\n )}\n />\n ))}\n </Flex>\n );\n};\n\ntype BlockItemProps = {\n label: ReactNode;\n value?: number;\n rule?: string;\n dp?: number;\n className?: string;\n};\n\nconst BlockItem: React.FC<BlockItemProps> = (props) => {\n return (\n <Box px={3} width=\"100%\" className={props.className}>\n <Text as=\"div\" intensity={36} size=\"2xs\" weight=\"semibold\">\n {props.label}\n </Text>\n\n <Text.numeral\n size=\"base\"\n currency=\"$\"\n dp={props.dp || 2}\n rm={Decimal.ROUND_DOWN}\n rule={(props.rule as any) || \"human\"}\n >\n {props.value!}\n </Text.numeral>\n </Box>\n );\n};\n\ntype CardItemProps = {\n data?: TListItem[];\n className?: string;\n onSymbol: (item: any) => void;\n};\n\nconst CardItem: React.FC<CardItemProps> = (props) => {\n return (\n <Flex direction=\"column\" itemAlign=\"start\" mt={3}>\n {props.data?.map((item) => (\n <ListItem\n key={item.symbol}\n item={item}\n onSymbol={props.onSymbol}\n className=\"oui-px-0\"\n />\n ))}\n </Flex>\n );\n};\n\ntype TListItem = {\n symbol: string;\n price: string;\n change: number;\n precision: number;\n [x: string]: any;\n};\n\ntype ListItemProps = {\n item: TListItem;\n className?: string;\n onSymbol: (item: any) => void;\n};\n\nconst ListItem: React.FC<ListItemProps> = (props) => {\n const { item } = props;\n\n return (\n <Flex\n width=\"100%\"\n gapX={3}\n py={2}\n px={4}\n className={cn(\"oui-cursor-pointer hover:oui-bg-base-8\", props.className)}\n onClick={() => {\n props.onSymbol(item);\n }}\n >\n <Flex width=\"100%\" gapX={1}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"xs\"\n weight=\"semibold\"\n showIcon\n >\n {item.symbol}\n </Text.formatted>\n </Flex>\n\n <Flex width=\"100%\" justify=\"end\">\n <Text.numeral\n currency=\"$\"\n size=\"xs\"\n weight=\"semibold\"\n dp={item.quote_dp}\n >\n {item[\"24h_close\"]}\n </Text.numeral>\n </Flex>\n\n <Flex width=\"100%\" justify=\"end\">\n <Text.numeral\n rule=\"percentages\"\n coloring\n size=\"xs\"\n weight=\"semibold\"\n showIdentifier\n >\n {item.change}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport { MobileMarketsDataList } from \"./marketsDataList.mobile.ui\";\nimport { useMarketsDataListScript } from \"./marketsDataList.script\";\nimport { MarketsDataList } from \"./marketsDataList.ui\";\n\nexport const MarketsDataListWidget = () => {\n const { isMobile } = useScreen();\n\n const state = useMarketsDataListScript();\n\n return isMobile ? (\n <MobileMarketsDataList {...state} />\n ) : (\n <MarketsDataList {...state} />\n );\n};\n","import { useCallback } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, Column, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { MarketsListWidget } from \"../../../components/marketsList\";\nimport { SearchInput } from \"../../../components/searchInput\";\nimport {\n get24hPercentageColumn,\n getLastColumn,\n getSymbolColumn,\n} from \"../../../components/shared/column\";\nimport { useFavoritesProps } from \"../../../components/shared/hooks/useFavoritesExtraProps\";\nimport { AllMarketsIcon, FavoritesIcon, NewListingsIcon } from \"../../../icons\";\nimport { FavoriteInstance, MarketsTabName } from \"../../../type\";\nimport { UseMarketsDataListScript } from \"./marketsDataList.script\";\n\nexport type MobileMarketsDataListProps = UseMarketsDataListScript;\n\nexport const MobileMarketsDataList: React.FC<MobileMarketsDataListProps> = (\n props,\n) => {\n const { activeTab, onTabChange, tabSort, onTabSort } = props;\n const { t } = useTranslation();\n\n const getColumns = useCallback(\n (favorite: FavoriteInstance, isFavoriteList = false) => {\n return [\n getSymbolColumn(favorite, isFavoriteList),\n getLastColumn(),\n get24hPercentageColumn(),\n ] as Column[];\n },\n [],\n );\n\n const { getFavoritesProps } = useFavoritesProps();\n\n const renderTab = (type: MarketsTabName) => {\n return (\n <>\n <SearchInput\n classNames={{\n root: cn(\n \"oui-mx-3 oui-mb-4 oui-mt-5\",\n activeTab !== MarketsTabName.Favorites && \"oui-mb-2\",\n ),\n }}\n />\n <MarketsListWidget\n type={type}\n initialSort={tabSort[type]}\n onSort={onTabSort(type)}\n getColumns={getColumns}\n rowClassName=\"!oui-h-[34px]\"\n {...getFavoritesProps(type)}\n />\n </>\n );\n };\n\n return (\n <Box id=\"oui-markets-list\" intensity={900} py={3} mt={2} r=\"2xl\">\n <Tabs\n variant=\"contained\"\n size=\"lg\"\n value={activeTab}\n onValueChange={onTabChange}\n classNames={{\n scrollIndicator: \"oui-mx-3\",\n }}\n showScrollIndicator\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value=\"favorites\"\n >\n {renderTab(MarketsTabName.Favorites)}\n </TabPanel>\n <TabPanel\n title={t(\"markets.allMarkets\")}\n icon={<AllMarketsIcon />}\n value=\"all\"\n >\n {renderTab(MarketsTabName.All)}\n </TabPanel>\n <TabPanel\n title={t(\"markets.newListings\")}\n icon={<NewListingsIcon />}\n value=\"new\"\n >\n {renderTab(MarketsTabName.NewListing)}\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useSideMarketsColumns } from \"../sideMarkets/column\";\nimport { type MarketsListScriiptReturn } from \"./marketsList.script\";\nimport { type MarketsListWidgetProps } from \"./marketsList.widget\";\n\nexport type MarketsListProps = MarketsListScriiptReturn &\n Pick<\n MarketsListWidgetProps,\n | \"getColumns\"\n | \"panelSize\"\n | \"tableClassNames\"\n | \"rowClassName\"\n | \"initialSort\"\n | \"renderHeader\"\n | \"emptyView\"\n >;\n\nexport const MarketsList: FC<MarketsListProps> = (props) => {\n const {\n loading,\n dataSource,\n favorite,\n onSort,\n initialSort,\n getColumns,\n panelSize,\n isFavoritesList,\n renderHeader,\n emptyView,\n } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const sideColumns = useSideMarketsColumns(favorite, isFavoritesList);\n\n const columns =\n typeof getColumns === \"function\"\n ? getColumns(favorite, isFavoritesList)\n : sideColumns;\n\n if (panelSize === \"small\") {\n return null;\n }\n\n if (panelSize === \"middle\") {\n return <CollapseMarkets dataSource={dataSource} />;\n }\n\n return (\n <>\n {renderHeader?.(favorite)}\n <DataTable\n classNames={{\n root: props.tableClassNames?.root,\n body: props.tableClassNames?.body,\n header: cn(\"oui-h-9\", props.tableClassNames?.header),\n scroll: props.tableClassNames?.scroll,\n empty: \"oui-items-start oui-mt-6\",\n }}\n columns={columns}\n loading={loading}\n dataSource={dataSource}\n onRow={(record) => {\n return {\n className: cn(\"oui-h-[53px]\", props.rowClassName),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n initialSort={\n initialSort\n ? { sortKey: initialSort.sortKey, sort: initialSort.sortOrder }\n : undefined\n }\n manualSorting\n emptyView={emptyView}\n />\n </>\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { TokenIcon, Flex, Text, cn, Tooltip, Badge } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\nexport type CollapseMarketsProps = {\n dataSource: any[];\n};\n\nexport const CollapseMarkets: React.FC<CollapseMarketsProps> = (props) => {\n const { symbol, onSymbolChange } = useMarketsContext();\n const { t } = useTranslation();\n return (\n <div className=\"oui-custom-scrollbar oui-h-full oui-overflow-y-auto\">\n <Flex direction=\"column\" px={2} gapY={1}>\n {props.dataSource?.map((item) => {\n const content = (\n <Flex intensity={800} p={2} className=\"oui-gap-x-7\" r=\"base\">\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Flex gapX={1}>\n <TokenIcon symbol={item.symbol} className=\"oui-size-[18px]\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"2xs\"\n weight=\"semibold\"\n >\n {item.symbol}\n </Text.formatted>\n </Flex>\n <Text size=\"2xs\" intensity={36}>\n {t(\"markets.column.last\")}\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {t(\"markets.column.24hPercentage\")}\n </Text>\n </Flex>\n\n <Flex direction=\"column\" itemAlign=\"end\" gapY={1}>\n <Badge size=\"xs\" color=\"primary\">\n {item.leverage}x\n </Badge>\n <Text.numeral\n dp={item.quote_dp || 2}\n currency=\"$\"\n size=\"2xs\"\n intensity={80}\n >\n {item[\"24h_close\"]}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {item.change}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n\n return (\n <Tooltip\n side=\"right\"\n sideOffset={6}\n content={content}\n delayDuration={0}\n key={item.symbol}\n >\n <Flex\n direction=\"column\"\n justify=\"center\"\n itemAlign=\"center\"\n gapY={1}\n width={54}\n height={54}\n r=\"lg\"\n className={cn(\n \"oui-cursor-pointer\",\n \"hover:oui-bg-base-7\",\n symbol === item.symbol && \"oui-bg-base-6 hover:oui-bg-base-6\",\n )}\n onClick={() => {\n onSymbolChange?.(item);\n }}\n >\n <TokenIcon symbol={item.symbol} className=\"oui-size-[18px]\" />\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {item.change}\n </Text.numeral>\n </Flex>\n </Tooltip>\n );\n })}\n </Flex>\n </div>\n );\n};\n","import { MouseEventHandler, ReactNode } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, TokenIcon, Text, Badge, cn, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n DeleteIcon,\n FavoritesIcon2,\n TopIcon,\n UnFavoritesIcon2,\n} from \"../../icons\";\nimport type { FavoriteInstance } from \"../../type\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\n\nexport const useSideMarketsColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false,\n) => {\n const { t } = useTranslation();\n\n return [\n {\n title: `${t(\"markets.column.market\")} / ${t(\"common.volume\")}`,\n dataIndex: \"24h_amount\",\n multiSort: {\n fields: [\n {\n sortKey: \"symbol\",\n label: t(\"markets.column.market\"),\n },\n {\n sortKey: \"24h_amount\",\n label: t(\"common.volume\"),\n },\n ],\n },\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n let favoritesIcon: ReactNode;\n if (!isFavoriteList) {\n favoritesIcon = (\n <FavoritesDropdownMenuWidget row={record} favorite={favorite}>\n <Flex\n width={12}\n height={12}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-mr-1 oui-cursor-pointer\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-size-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-size-3 oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n </FavoritesDropdownMenuWidget>\n );\n }\n\n return (\n <Flex>\n {favoritesIcon}\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Flex gapX={1}>\n <TokenIcon symbol={record.symbol} className=\"oui-size-[18px]\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"2xs\"\n weight=\"semibold\"\n >\n {record.symbol}\n </Text.formatted>\n <Badge size=\"xs\" color=\"primary\">\n {record.leverage}x\n </Badge>\n </Flex>\n\n <Text.numeral\n intensity={54}\n size=\"2xs\"\n rule=\"human\"\n dp={2}\n rm={Decimal.ROUND_DOWN}\n >\n {value}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n },\n },\n {\n title: t(\"markets.column.price&Change\"),\n dataIndex: \"change\",\n align: \"right\",\n onSort: true,\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(\n record,\n favorite.selectedFavoriteTab,\n true,\n );\n e.stopPropagation();\n };\n\n const iconCls =\n \"oui-w-4 oui-h-4 oui-text-base-contrast-54 hover:oui-text-base-contrast\";\n\n const actions = (\n <div\n className={cn(\n \"oui-absolute oui-right-0 oui-top-[6.5px]\",\n \"oui-hidden group-hover:oui-block\",\n )}\n >\n <Flex\n className={cn(\n \"oui-inline-flex\",\n \"oui-bg-primary-darken oui-py-[6px]\",\n )}\n r=\"base\"\n width={52}\n justify=\"center\"\n itemAlign=\"end\"\n gapX={2}\n >\n <TopIcon\n className={iconCls}\n onClick={(e) => {\n e.stopPropagation();\n favorite.pinToTop(record);\n }}\n />\n <DeleteIcon className={iconCls} onClick={onDelSymbol} />\n </Flex>\n </div>\n );\n\n return (\n <div className=\"oui-relative\">\n {isFavoriteList && actions}\n\n <Flex\n direction=\"column\"\n justify=\"end\"\n itemAlign=\"end\"\n gapY={1}\n className={cn(isFavoriteList && \"group-hover:oui-invisible\")}\n >\n <Text.numeral dp={record.quote_dp || 2} size=\"2xs\">\n {record[\"24h_close\"]}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {value}\n </Text.numeral>\n </Flex>\n </div>\n );\n },\n },\n ] as Column[];\n};\n","import { PropsWithChildren } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n CheckedSquareFillIcon,\n CheckSquareEmptyIcon,\n PlusIcon,\n CloseIcon,\n Divider,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n Input,\n Text,\n cn,\n CloseCircleFillIcon,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { UseFavoritesDropdownMenuScriptReturn } from \"./favoritesDropdownMenu.script\";\n\nexport type FavoritesDropdownMenuProps =\n PropsWithChildren<UseFavoritesDropdownMenuScriptReturn>;\n\nexport const FavoritesDropdownMenu: React.FC<FavoritesDropdownMenuProps> = (\n props,\n) => {\n const {\n symbol,\n favoriteTabs,\n open,\n onOpenChange,\n inputVisible,\n selectedTabs,\n value,\n onValueChange,\n hide,\n hideInput,\n showInput,\n onCheck,\n addTab,\n confirm,\n } = props;\n\n const { t } = useTranslation();\n\n const overLen = value?.length > 15;\n\n const renderInput = () => {\n if (inputVisible) {\n return (\n <Box>\n <Flex gapX={2}>\n <Input\n autoFocus\n value={value}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-ml-px oui-h-7 oui-w-full oui-rounded-sm oui-bg-base-6\",\n overLen &&\n \"focus-within:oui-outline-danger focus-visible:oui-outline-danger\",\n ),\n }}\n autoComplete=\"off\"\n suffix={\n value && (\n <Box mr={2}>\n <CloseCircleFillIcon\n opacity={1}\n size={14}\n className=\"oui-cursor-pointer oui-text-base-contrast-20\"\n onClick={() => {\n onValueChange(\"\");\n }}\n />\n </Box>\n )\n }\n />\n\n <Button\n className=\"oui-rounded-sm\"\n size=\"sm\"\n onClick={addTab}\n disabled={!value || overLen}\n >\n {t(\"common.add\")}\n </Button>\n </Flex>\n\n {overLen && (\n <Flex itemAlign=\"center\" gapX={1} mt={1}>\n <div className=\"oui-size-1 oui-rounded-full oui-bg-danger\"></div>\n <Text color=\"danger\">{t(\"markets.favorites.tabs.maxName\")}</Text>\n </Flex>\n )}\n </Box>\n );\n }\n\n const overTabs = favoriteTabs.length >= 10;\n\n return (\n <Tooltip\n open={overTabs ? undefined : false}\n // @ts-ignore\n content={\n <Text size=\"2xs\" intensity={80}>\n {t(\"markets.favorites.tabs.maxList\")}\n </Text>\n }\n className=\"oui-bg-base-6\"\n delayDuration={0}\n arrow={{ className: \"oui-fill-base-6\" }}\n >\n <div>\n <Flex\n className={cn(\n overTabs ? \"oui-cursor-not-allowed\" : \"oui-cursor-pointer\",\n )}\n itemAlign=\"center\"\n gapX={2}\n p={2}\n intensity={overTabs ? 500 : 600}\n onClick={overTabs ? undefined : showInput}\n height={28}\n r=\"base\"\n >\n <PlusIcon\n size={14}\n className=\"oui-text-base-contrast-36\"\n opacity={1}\n />\n <Text className=\"\" intensity={20}>\n {t(\"markets.favorites.dropdown.addPlaceholder\")}\n </Text>\n </Flex>\n </div>\n </Tooltip>\n );\n };\n\n const header = (\n <Flex justify=\"between\" className=\"oui-mb-[10px] oui-mt-3\">\n <Flex gapX={1}>\n {t(\"markets.favorites.dropdown.title\")}\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {symbol}\n </Text.formatted>\n </Flex>\n <CloseIcon\n size={16}\n className=\"oui-cursor-pointer oui-text-base-contrast\"\n onClick={hide}\n />\n </Flex>\n );\n\n const content = (\n // <ScrollArea className=\"custom-scrollbar\">\n <Box>\n <Box\n my={2}\n className=\"oui-custom-scrollbar oui-max-h-[288px] oui-overflow-y-auto\"\n >\n {favoriteTabs?.slice(0, 10)?.map((item) => {\n const checked = !!selectedTabs.find((tab) => tab.id === item.id);\n return (\n <Box key={item.id} className=\"oui-cursor-pointer\">\n <Flex\n className=\"oui-gap-x-[6px] hover:oui-bg-base-6\"\n p={2}\n r=\"md\"\n onClick={() => {\n onCheck(item, checked);\n }}\n >\n {checked ? (\n <CheckedSquareFillIcon\n size={18}\n className=\"oui-text-base-contrast-80\"\n />\n ) : (\n <CheckSquareEmptyIcon\n size={18}\n className=\"oui-text-base-contrast-80\"\n />\n )}\n\n <Text intensity={54}>{item.name}</Text>\n </Flex>\n </Box>\n );\n })}\n </Box>\n <Box mt={3} pb={5}>\n {renderInput()}\n </Box>\n </Box>\n // </ScrollArea>\n );\n\n const footer = (\n <Flex gapX={3} mt={3}>\n <Button\n key=\"secondary\"\n color=\"gray\"\n onClick={hide}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n\n <Button\n key=\"primary\"\n onClick={confirm}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </Button>\n </Flex>\n );\n\n return (\n <DropdownMenuRoot open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger asChild>{props.children}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n align=\"start\"\n alignOffset={-12}\n sideOffset={24}\n className=\"oui-markets-favorite-dropdown-menu-content oui-bg-base-8\"\n >\n <Box px={5} pb={5} width={360}>\n <Text as=\"div\" size=\"sm\" weight=\"semibold\">\n {header}\n <Divider />\n {content}\n {footer}\n </Text>\n </Box>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { FavoriteTab } from \"@orderly.network/hooks\";\nimport { FavoriteInstance } from \"../../type\";\n\nexport type UseFavoritesDropdownMenuScriptOptions = {\n row: any;\n favorite: FavoriteInstance;\n};\n\nexport type UseFavoritesDropdownMenuScriptReturn = ReturnType<\n typeof useFavoritesDropdownMenuScript\n>;\n\nexport function useFavoritesDropdownMenuScript(\n options: UseFavoritesDropdownMenuScriptOptions\n) {\n const { symbol } = options.row || {};\n const {\n favorites,\n favoriteTabs,\n updateFavoriteTabs,\n updateSymbolFavoriteState,\n } = options.favorite;\n const [open, setOpen] = useState(false);\n const [inputVisible, setInputVisible] = useState(false);\n const [value, setValue] = useState(\"\");\n const [selectedTabs, setSelectedTabs] = useState([] as FavoriteTab[]);\n\n const hide = () => {\n setOpen(false);\n };\n\n const showInput = () => {\n setInputVisible(true);\n };\n\n const hideInput = () => {\n setInputVisible(false);\n };\n\n const clearState = () => {\n setValue(\"\");\n hideInput();\n setSelectedTabs([]);\n };\n\n const addTab = () => {\n const newTab = {\n name: value || `WatchList_${favoriteTabs.length}`,\n id: Date.now(),\n };\n updateFavoriteTabs(newTab, { add: true });\n clearState();\n };\n\n const onCheck = (item: FavoriteTab, checked: boolean) => {\n if (checked) {\n setSelectedTabs(selectedTabs?.filter((tab) => tab.id !== item.id));\n } else {\n setSelectedTabs([...selectedTabs, item]);\n }\n hideInput();\n };\n\n const confirm = () => {\n updateSymbolFavoriteState(options.row, selectedTabs, false);\n setOpen(false);\n };\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n const find = favorites?.find((item) => item.name === symbol);\n if (find?.tabs?.length) {\n setSelectedTabs(find?.tabs);\n }\n }, [open, favorites, favoriteTabs, symbol]);\n\n useEffect(() => {\n if (!open) {\n clearState();\n }\n }, [open]);\n\n return {\n symbol,\n favoriteTabs,\n open,\n onOpenChange: setOpen,\n inputVisible,\n selectedTabs,\n value,\n onValueChange: setValue,\n hide,\n hideInput,\n showInput,\n onCheck,\n addTab,\n confirm,\n };\n}\n","import { PropsWithChildren } from \"react\";\nimport {\n useFavoritesDropdownMenuScript,\n UseFavoritesDropdownMenuScriptOptions,\n} from \"./favoritesDropdownMenu.script\";\nimport { FavoritesDropdownMenu } from \"./favoritesDropdownMenu.ui\";\n\nexport type FavoritesDropdownMenuWidgetProps =\n PropsWithChildren<UseFavoritesDropdownMenuScriptOptions>;\n\nexport const FavoritesDropdownMenuWidget: React.FC<\n FavoritesDropdownMenuWidgetProps\n> = (props) => {\n const state = useFavoritesDropdownMenuScript(props);\n return (\n <FavoritesDropdownMenu {...state}>{props.children}</FavoritesDropdownMenu>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { MarketsTabName } from \"../../type\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { type MarketsListWidgetProps } from \"./marketsList.widget\";\n\nexport type MarketsListScriptOptions = MarketsListWidgetProps;\n\nexport type MarketsListScriiptReturn = ReturnType<typeof useMarketsListScript>;\n\nconst MarketsTypeMap = {\n [MarketsTabName.All]: MarketsType.ALL,\n [MarketsTabName.Favorites]: MarketsType.FAVORITES,\n [MarketsTabName.Recent]: MarketsType.RECENT,\n [MarketsTabName.NewListing]: MarketsType.NEW_LISTING,\n};\n\nexport const useMarketsListScript = (options: MarketsListScriptOptions) => {\n const [loading, setLoading] = useState(true);\n\n const [data, favorite] = useMarkets(\n MarketsTypeMap[options.type] || MarketsType.ALL,\n );\n\n const { favorites, selectedFavoriteTab } = favorite;\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort(\n options.initialSort,\n options.onSort,\n );\n\n const dataSource = useMemo(() => {\n const filterList =\n typeof options.dataFilter === \"function\"\n ? options.dataFilter(data, { favorites, selectedFavoriteTab })\n : data;\n const searchResults = searchBySymbol(filterList, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [\n data,\n getSortedList,\n searchValue,\n options.dataFilter,\n favorites,\n selectedFavoriteTab,\n ]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n const isFavoritesList = options.type === MarketsTabName.Favorites;\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n isFavoritesList,\n };\n};\n","import { useMarkets } from \"@orderly.network/hooks\";\nimport { SortOrder, Column } from \"@orderly.network/ui\";\n\nexport type FavoriteInstance = ReturnType<typeof useMarkets>[1];\n\nexport type SortType = {\n sortKey: string;\n sortOrder: SortOrder;\n};\n\nexport type GetColumns = (\n favorite: FavoriteInstance,\n isFavoriteList: boolean,\n) => Column[];\n\nexport enum MarketsPageTab {\n Markets = \"markets\",\n Funding = \"funding\",\n}\n\nexport enum MarketsTabName {\n Favorites = \"favorites\",\n Recent = \"recent\",\n All = \"all\",\n NewListing = \"newListing\",\n}\n\nexport enum FundingTabName {\n Overview = \"overview\",\n Comparison = \"comparison\",\n}\n","import { ReactNode } from \"react\";\nimport { Favorite, FavoriteTab } from \"@orderly.network/hooks\";\nimport { DataTableClassNames } from \"@orderly.network/ui\";\nimport {\n FavoriteInstance,\n GetColumns,\n SortType,\n MarketsTabName,\n} from \"../../type\";\nimport { useMarketsListScript } from \"./marketsList.script\";\nimport { MarketsList } from \"./marketsList.ui\";\n\nexport type MarketsListWidgetProps = {\n type: MarketsTabName;\n getColumns?: GetColumns;\n panelSize?: \"small\" | \"middle\" | \"large\";\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n initialSort?: SortType;\n onSort?: (sort?: SortType) => void;\n renderHeader?: (favorite: FavoriteInstance) => ReactNode;\n dataFilter?: (\n data: any[],\n options: { favorites: Favorite[]; selectedFavoriteTab: FavoriteTab },\n ) => any[];\n emptyView?: ReactNode;\n};\n\nexport const MarketsListWidget: React.FC<MarketsListWidgetProps> = (props) => {\n const state = useMarketsListScript(props);\n return (\n <MarketsList\n {...state}\n initialSort={props.initialSort}\n getColumns={props.getColumns}\n panelSize={props.panelSize}\n tableClassNames={props.tableClassNames}\n rowClassName={props.rowClassName}\n renderHeader={props.renderHeader}\n emptyView={props.emptyView}\n />\n );\n};\n","import { useRef, useCallback, useEffect } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n CloseCircleFillIcon,\n cn,\n Input,\n InputProps,\n} from \"@orderly.network/ui\";\nimport { SearchIcon } from \"../../icons\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\ntype SearchInputProps = Pick<InputProps, \"classNames\" | \"suffix\">;\n\nexport const SearchInput = (props: SearchInputProps) => {\n const { classNames, suffix } = props;\n const isComposingRef = useRef(false);\n\n const { t } = useTranslation();\n\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const handleCompositionStart = useCallback(() => {\n isComposingRef.current = true;\n }, []);\n\n const handleCompositionEnd = useCallback(\n (event: React.CompositionEvent<HTMLInputElement>) => {\n isComposingRef.current = false;\n onSearchValueChange?.(event.currentTarget.value);\n },\n [onSearchValueChange],\n );\n\n return (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n placeholder={t(\"markets.search.placeholder\")}\n classNames={{\n ...classNames,\n // use mt-px to fix the top border issue\n root: cn(\"oui-mt-px oui-border oui-border-line\", classNames?.root),\n }}\n size=\"sm\"\n prefix={\n <Box pl={3} pr={1}>\n <SearchIcon className=\"oui-text-base-contrast-36\" />\n </Box>\n }\n suffix={\n suffix ||\n (searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-cursor-pointer oui-text-base-contrast-36\"\n onClick={clearSearchValue}\n />\n </Box>\n ))\n }\n autoComplete=\"off\"\n />\n );\n};\n","import { ReactNode } from \"react\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { Text, Column, Flex, TokenIcon, Badge } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FavoritesIcon2, UnFavoritesIcon2 } from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\n\nexport function getSymbolColumn(\n favorite: FavoriteInstance,\n isFavoriteList = false,\n) {\n return {\n title: i18n.t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 150,\n onSort: true,\n render: (value, record) => {\n let favoritesIcon: ReactNode;\n if (!isFavoriteList) {\n favoritesIcon = (\n <FavoritesDropdownMenuWidget row={record} favorite={favorite}>\n <Flex\n width={12}\n height={12}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-mr-1 oui-cursor-pointer\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-size-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-size-3 oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n </FavoritesDropdownMenuWidget>\n );\n }\n\n return (\n <Flex gapX={1}>\n {favoritesIcon}\n <TokenIcon symbol={value} className=\"oui-size-[18px]\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"2xs\"\n weight=\"semibold\"\n >\n {value}\n </Text.formatted>\n <Badge size=\"xs\" color=\"primary\">\n {record.leverage}x\n </Badge>\n </Flex>\n );\n },\n } as Column<any>;\n}\n\nexport function getLastColumn() {\n return {\n title: i18n.t(\"markets.column.last\"),\n dataIndex: \"24h_close\",\n align: \"right\",\n onSort: true,\n width: 100,\n render: (value, record) => {\n return (\n <Text.numeral dp={record.quote_dp || 2} size=\"2xs\">\n {value}\n </Text.numeral>\n );\n },\n } as Column<any>;\n}\n\nexport function get24hPercentageColumn() {\n return {\n title: i18n.t(\"markets.column.24hPercentage\"),\n dataIndex: \"change\",\n align: \"right\",\n onSort: true,\n width: 80,\n render: (value) => {\n return (\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {value}\n </Text.numeral>\n );\n },\n } as Column<any>;\n}\n","import { useCallback } from \"react\";\nimport { Favorite, FavoriteTab } from \"@orderly.network/hooks\";\nimport { Box } from \"@orderly.network/ui\";\nimport { FavoriteInstance, MarketsTabName } from \"../../../type\";\nimport { FavoritesEmpty } from \"../../favoritesEmpty\";\nimport { FavoritesTabWidget } from \"../../favoritesTabs\";\nimport { useMarketsContext } from \"../../marketsProvider\";\n\nexport function useFavoritesProps() {\n const { searchValue } = useMarketsContext();\n const renderHeader = useCallback((favorite: FavoriteInstance) => {\n return (\n <Box px={3} className=\"oui-my-[6px]\">\n <FavoritesTabWidget favorite={favorite} size=\"sm\" />\n </Box>\n );\n }, []);\n\n const dataFilter = useCallback(\n (\n data: any[],\n options: { favorites: Favorite[]; selectedFavoriteTab: FavoriteTab },\n ) => {\n const { favorites, selectedFavoriteTab } = options;\n\n return favorites\n ?.filter(\n (item) =>\n item.tabs?.findIndex((tab) => tab.id === selectedFavoriteTab.id) !==\n -1,\n )\n ?.map((fav) => {\n const index = data?.findIndex((item) => item.symbol === fav.name);\n if (index !== -1) {\n return data[index];\n }\n return null;\n })\n ?.filter((item) => item);\n },\n [],\n );\n\n const getFavoritesProps = useCallback(\n (type: MarketsTabName) => {\n if (type === MarketsTabName.Favorites) {\n return { renderHeader, dataFilter };\n }\n return {};\n },\n [renderHeader, dataFilter],\n );\n\n const renderEmptyView = useCallback(\n (options: {\n type: MarketsTabName;\n onClick: () => void;\n className?: string;\n }) => {\n if (options.type === MarketsTabName.Favorites && !searchValue) {\n return (\n <FavoritesEmpty\n onClick={options.onClick}\n className={options.className}\n />\n );\n }\n\n return undefined;\n },\n [searchValue],\n );\n\n return {\n renderHeader,\n dataFilter,\n getFavoritesProps,\n renderEmptyView,\n };\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Button,\n cn,\n EmptyStateIcon,\n Flex,\n PlusIcon,\n Text,\n} from \"@orderly.network/ui\";\n\ntype FavoritesEmptyProps = {\n className?: string;\n onClick: () => void;\n};\n\nexport const FavoritesEmpty: FC<FavoritesEmptyProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"center\"\n gapY={4}\n className={cn(\"oui-text-center\", props.className)}\n >\n <EmptyStateIcon />\n <Button\n color=\"gray\"\n size=\"xs\"\n className=\"oui-bg-base-4\"\n onClick={props.onClick}\n >\n <PlusIcon\n className=\"oui-mr-1 oui-text-base-contrast\"\n opacity={1}\n size={12}\n />\n <Text intensity={98}>{t(\"markets.favorites.addFavorites\")}</Text>\n </Button>\n </Flex>\n );\n};\n","import { KeyboardEventHandler } from \"react\";\nimport { FavoriteTab } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n cn,\n Flex,\n Text,\n Tooltip,\n Input,\n modal,\n} from \"@orderly.network/ui\";\nimport { AddIcon, ActiveAddIcon, EditIcon, TrashIcon } from \"../../icons\";\nimport {\n UseFavoritesTabScriptOptions,\n UseFavoritesTabScriptReturn,\n} from \"./favoritesTabs.script\";\n\nexport type FavoritesTabProps = UseFavoritesTabScriptReturn &\n Pick<UseFavoritesTabScriptOptions, \"size\"> & {\n className?: string;\n };\n\nexport const FavoritesTab: React.FC<FavoritesTabProps> = (props) => {\n const {\n open,\n setOpen,\n container,\n inputRef,\n inputWidth,\n spanRef,\n editing,\n value,\n onValueChange,\n updateCurTab,\n onEdit,\n addTab,\n delTab,\n size = \"default\",\n scrollable,\n } = props;\n\n const { t } = useTranslation();\n\n const { selectedFavoriteTab, favoriteTabs, updateSelectedFavoriteTab } =\n props.favorite;\n\n const addIconWidth = size === \"sm\" ? 28 : 36;\n const tabHeight = size === \"sm\" ? 18 : 24;\n const overLen = value?.length > 15;\n\n const gradientColor =\n \"oui-bg-gradient-to-r oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)] oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)]\";\n\n const onDel = (item: any) => {\n modal.confirm({\n title: t(\"markets.favorites.tabs.delete.dialog.title\"),\n content: (\n <Text size=\"sm\">\n {t(\"markets.favorites.tabs.delete.dialog.description\", {\n name: item.name,\n })}\n </Text>\n ),\n onOk() {\n delTab(item);\n return Promise.resolve();\n },\n });\n };\n\n const onKeyUp: KeyboardEventHandler = (e) => {\n if (e.key === \"Enter\") {\n updateCurTab(overLen);\n }\n };\n\n const renderActions = (item: any) => {\n return (\n <Flex gapX={2} itemAlign=\"center\" px={2} py={1}>\n <EditIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n onClick={() => {\n onEdit(item);\n }}\n />\n <TrashIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n onClick={() => {\n onDel(item);\n }}\n />\n </Flex>\n );\n };\n\n const renderAdd = () => {\n const overTabs = favoriteTabs.length >= 10;\n\n const icon = (\n <Flex\n className={cn(\n \"oui-inline-flex\",\n overTabs ? \"oui-cursor-not-allowed\" : \"oui-cursor-pointer\",\n overTabs ? \"oui-bg-base-3\" : gradientColor,\n )}\n width={addIconWidth}\n height={tabHeight}\n r=\"base\"\n justify=\"center\"\n itemAlign=\"center\"\n onClick={overTabs ? undefined : addTab}\n >\n {overTabs ? (\n <AddIcon className=\"oui-z-[1] oui-size-3 oui-text-base-contrast-54\" />\n ) : (\n <ActiveAddIcon className=\"oui-size-3\" />\n )}\n </Flex>\n );\n\n if (overTabs) {\n return (\n <Tooltip\n // @ts-ignore\n content={\n <Text size=\"2xs\" intensity={80}>\n Maximum 10 groups in the favorite list\n </Text>\n }\n className=\"oui-bg-base-6\"\n delayDuration={0}\n arrow={{ className: \"oui-fill-base-6\" }}\n >\n {icon}\n </Tooltip>\n );\n }\n\n return icon;\n };\n\n const renderInput = (isActive: boolean) => {\n return (\n <Tooltip\n open={overLen}\n // @ts-ignore\n content={\n <Text size=\"2xs\" intensity={80}>\n List name cannot exceed 15 characters\n </Text>\n }\n className=\"oui-bg-base-6\"\n delayDuration={0}\n sideOffset={0}\n >\n <Input\n ref={inputRef}\n style={\n overLen\n ? { width: inputWidth }\n : {\n // @ts-ignore\n \"--oui-gradient-angle\": \"270deg\",\n backgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n WebkitBackgroundClip: \"text\",\n width: inputWidth,\n }\n }\n classNames={{\n root: cn(\n \"oui-my-px oui-rounded oui-p-0 oui-px-2\",\n \"focus-within:oui-outline-transparent focus-visible:oui-outline-none\",\n size === \"sm\" ? \"oui-h-[18px]\" : \"oui-h-[24px]\",\n isActive && cn(overLen ? \"oui-bg-danger/15\" : gradientColor),\n ),\n input: cn(\n \"oui-font-semibold oui-caret-[rgba(217,217,217,1)]\",\n overLen\n ? \"oui-text-danger\"\n : \"oui-text-transparent oui-gradient-brand \",\n size === \"sm\" ? \"oui-text-2xs\" : \"oui-text-sm\",\n ),\n }}\n value={value}\n onValueChange={onValueChange}\n onBlur={() => {\n updateCurTab(overLen);\n }}\n onKeyUp={onKeyUp}\n autoComplete=\"off\"\n />\n </Tooltip>\n );\n };\n\n const renderContent = (item: FavoriteTab, isActive: boolean) => {\n if (editing && isActive) {\n return renderInput(isActive);\n }\n\n const textProps = {\n weight: \"semibold\",\n size: size === \"sm\" ? \"2xs\" : \"sm\",\n className: size === \"sm\" ? \"oui-leading-[18px]\" : \"oui-leading-[24px]\",\n as: \"div\",\n } as any;\n\n const content = isActive ? (\n <Text.gradient color=\"brand\" angle={270} {...textProps}>\n {item.name}\n </Text.gradient>\n ) : (\n <Text {...textProps}>{item.name}</Text>\n );\n\n return (\n <Box\n r=\"base\"\n px={2}\n height={tabHeight}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive\n ? \"oui-markets-favorites-active-tab-item\"\n : \"oui-markets-favorites-tab-item\",\n isActive\n ? gradientColor\n : \"oui-bg-line-6 oui-text-base-contrast-36 hover:oui-text-base-contrast\",\n )}\n onClick={() => {\n updateSelectedFavoriteTab(item);\n if (isActive) {\n setOpen(true);\n }\n }}\n >\n {content}\n </Box>\n );\n };\n\n return (\n <Flex width=\"100%\" gapX={3} className={props.className}>\n <Flex\n ref={container}\n id=\"oui-markets-favorites-tabs-container\"\n className={cn(\n \"oui-hide-scrollbar oui-relative oui-cursor-pointer\",\n \"oui-overflow-hidden oui-overflow-x-auto\",\n )}\n // my={3}\n gapX={size === \"sm\" ? 2 : 3}\n width=\"100%\"\n >\n {favoriteTabs?.slice(0, 10)?.map((item: any) => {\n const isActive = selectedFavoriteTab.id === item.id;\n return (\n <Tooltip\n key={item.id}\n open={isActive && !editing ? open : false}\n onOpenChange={(open) => {\n if (isActive) {\n setOpen(open);\n }\n }}\n // @ts-ignore\n content={renderActions(item)}\n delayDuration={0}\n className={cn(\"oui-bg-base-5\")}\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n >\n {renderContent(item, isActive)}\n </Tooltip>\n );\n })}\n\n {!scrollable && renderAdd()}\n\n <Text size=\"xs\" ref={spanRef} className=\"oui-invisible\">\n {value}\n </Text>\n </Flex>\n {scrollable && renderAdd()}\n </Flex>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { FavoriteInstance } from \"../../type\";\n\nexport type UseFavoritesTabScriptOptions = {\n favorite: FavoriteInstance;\n size?: \"sm\" | \"default\";\n};\n\nexport type UseFavoritesTabScriptReturn = ReturnType<\n typeof useFavoritesTabScript\n>;\n\nexport function useFavoritesTabScript(options: UseFavoritesTabScriptOptions) {\n const { favorite, size = \"default\" } = options;\n const {\n favorites,\n favoriteTabs,\n selectedFavoriteTab,\n updateFavoriteTabs,\n updateSelectedFavoriteTab,\n updateFavorites,\n } = favorite;\n\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState(false);\n const [value, setValue] = useState(\"\");\n const [scrollable, setScrollable] = useState(false);\n\n const scrollView = useRef<HTMLInputElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const spanRef = useRef<HTMLSpanElement>(null);\n\n const [inputWidth, setInputWidth] = useState(50);\n\n const updateScrollLayout = () => {\n const addIconWidth = size === \"sm\" ? 28 : 36;\n setTimeout(() => {\n const { scrollWidth, clientWidth } = scrollView.current || {};\n\n if (scrollWidth! > clientWidth!) {\n setScrollable(true);\n }\n }, 0);\n };\n\n const scrollToRight = () => {\n setTimeout(() => {\n if (scrollView.current) {\n scrollView.current.scrollLeft =\n scrollView.current.scrollWidth - scrollView.current.clientWidth;\n }\n }, 0);\n };\n\n const onEdit = (item: any) => {\n setEditing(true);\n setValue(item.name);\n setTimeout(() => {\n inputRef.current?.focus();\n inputRef.current?.setSelectionRange(-1, -1);\n }, 0);\n };\n\n const updateCurTab = (overLen: boolean) => {\n updateFavoriteTabs(\n {\n ...selectedFavoriteTab,\n name: overLen ? selectedFavoriteTab.name : value,\n },\n { update: true },\n );\n setEditing(false);\n setOpen(false);\n updateScrollLayout();\n };\n\n const addTab = () => {\n const newTab = {\n name: `WatchList_${favoriteTabs.length}`,\n id: Date.now(),\n };\n updateFavoriteTabs(newTab, { add: true });\n updateSelectedFavoriteTab(newTab);\n updateScrollLayout();\n scrollToRight();\n };\n\n const delTab = (selectedTab: any) => {\n updateFavoriteTabs(selectedTab, { delete: true });\n\n setTimeout(() => {\n // remove all symbol favorite in this tab\n const _favorites = favorites.map((item) => ({\n ...item,\n tabs: item.tabs?.filter((tab) => tab.id !== selectedTab.id),\n }));\n\n updateFavorites(_favorites);\n\n // auto selected last tab\n const tabs = favoriteTabs.filter((item) => item.id !== selectedTab.id);\n const tab = tabs?.[tabs?.length - 1] || tabs?.[0];\n updateSelectedFavoriteTab(tab);\n }, 0);\n };\n\n useEffect(() => {\n if (value) {\n const rect = spanRef.current?.getBoundingClientRect();\n const offset = size === \"sm\" ? 0 : 14;\n setInputWidth(Math.max((rect?.width || 0) + offset, 50));\n }\n }, [value]);\n\n useEffect(() => {\n updateScrollLayout();\n }, []);\n\n return {\n favorite,\n open,\n setOpen,\n container: scrollView,\n inputRef,\n inputWidth,\n spanRef,\n editing,\n value,\n onValueChange: setValue,\n onEdit,\n updateCurTab,\n addTab,\n delTab,\n scrollable,\n };\n}\n","import {\n useFavoritesTabScript,\n UseFavoritesTabScriptOptions,\n} from \"./favoritesTabs.script\";\nimport { FavoritesTab } from \"./favoritesTabs.ui\";\n\nexport type FavoritesTabWidgetProps = UseFavoritesTabScriptOptions & {\n className?: string;\n};\n\nexport const FavoritesTabWidget: React.FC<FavoritesTabWidgetProps> = (\n props,\n) => {\n const { className, ...rest } = props;\n const state = useFavoritesTabScript(rest);\n return <FavoritesTab {...state} size={props.size} className={className} />;\n};\n","import { useEffect, useState } from \"react\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { useTabSort } from \"../../../components/shared/hooks/useTabSort\";\nimport { MarketsTabName } from \"../../../type\";\n\nexport type UseMarketsDataListScript = ReturnType<\n typeof useMarketsDataListScript\n>;\n\nconst MOBILE_MARKETS_TAB_SORT_STORAGE_KEY = \"orderly_mobile_markets_tab_sort\";\n\nexport function useMarketsDataListScript() {\n const [activeTab, setActiveTab] = useState<MarketsTabName>(\n MarketsTabName.All,\n );\n const { clearSearchValue, searchValue } = useMarketsContext();\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: MOBILE_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n useEffect(() => {\n clearSearchValue?.();\n }, [activeTab]);\n\n return {\n activeTab,\n onTabChange: (value: string) => setActiveTab(value as MarketsTabName),\n tabSort,\n onTabSort,\n searchValue,\n };\n}\n","import { useCallback } from \"react\";\nimport { useSessionStorage } from \"@orderly.network/hooks\";\nimport { SortType, MarketsTabName } from \"../../../type\";\n\nexport function useTabSort(options: { storageKey: string }) {\n const [tabSort, setTabSort] = useSessionStorage(options.storageKey, {\n [MarketsTabName.All]: {\n sortKey: \"24h_amount\",\n sortOrder: \"desc\",\n },\n } as Record<MarketsTabName, SortType>);\n\n const onTabSort = useCallback(\n (type: MarketsTabName) => (sort?: SortType) => {\n setTabSort({ ...tabSort, [type]: sort });\n },\n [tabSort],\n );\n\n return {\n tabSort,\n onTabSort,\n };\n}\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { FavoritesEmpty } from \"../../../components/favoritesEmpty\";\nimport { FavoritesListFullWidget } from \"../../../components/favoritesListFull\";\nimport { MarketsListFullWidget } from \"../../../components/marketsListFull\";\nimport { SearchInput } from \"../../../components/searchInput\";\nimport { AllMarketsIcon, FavoritesIcon, NewListingsIcon } from \"../../../icons\";\nimport { MarketsTabName } from \"../../../type\";\nimport { UseMarketsDataListScript } from \"./marketsDataList.script\";\n\nexport type MarketsDataListProps = UseMarketsDataListScript;\n\nexport const MarketsDataList: React.FC<MarketsDataListProps> = (props) => {\n const { activeTab, onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Box id=\"oui-markets-list\" intensity={900} p={6} r=\"2xl\">\n <Tabs\n variant=\"contained\"\n size=\"xl\"\n value={activeTab}\n onValueChange={onTabChange}\n trailing={\n <SearchInput classNames={{ root: \"oui-my-1 oui-w-[240px]\" }} />\n }\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value=\"favorites\"\n testid=\"oui-testid-markets-favorites-tab\"\n >\n <FavoritesListFullWidget\n emptyView={\n !props.searchValue && (\n <FavoritesEmpty\n onClick={() => {\n onTabChange(MarketsTabName.All);\n }}\n />\n )\n }\n />\n </TabPanel>\n <TabPanel\n title={t(\"markets.allMarkets\")}\n icon={<AllMarketsIcon />}\n value=\"all\"\n testid=\"oui-testid-markets-all-tab\"\n >\n <MarketsListFullWidget\n type=\"all\"\n initialSort={{\n sortKey: \"24h_amount\",\n sortOrder: \"desc\",\n }}\n />\n </TabPanel>\n <TabPanel\n title={t(\"markets.newListings\")}\n icon={<NewListingsIcon />}\n value=\"new\"\n testid=\"oui-testid-markets-newListings-tab\"\n >\n <MarketsListFullWidget\n type=\"new\"\n initialSort={{\n sortKey: \"created_time\",\n sortOrder: \"desc\",\n }}\n />\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { FC, ReactNode } from \"react\";\nimport { Trans } from \"@orderly.network/i18n\";\nimport { cn, Flex, DataTable } from \"@orderly.network/ui\";\nimport { FavoritesTabWidget } from \"../../components/favoritesTabs\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { UnFavoritesIcon } from \"../../icons\";\nimport { useMarketsListFullColumns } from \"../marketsListFull/column\";\nimport { UseFavoritesListFullReturn } from \"./favoritesListFull.script\";\n\nexport type FavoritesListFullProps = UseFavoritesListFullReturn & {\n emptyView?: ReactNode;\n};\n\nexport const FavoritesListFull: FC<FavoritesListFullProps> = (props) => {\n const { dataSource, favorite, onSort, loading, pagination } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const columns = useMarketsListFullColumns(favorite, true);\n\n const emptyView = props.emptyView || (\n <Flex className=\"oui-text-xs oui-text-base-contrast-36\">\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"markets.dataList.favorites.empty\"\n components={[\n <UnFavoritesIcon key=\"0\" className=\"oui-text-base-contrast-36\" />,\n ]}\n />\n </Flex>\n );\n\n console.log(\"🏗️ onSort\", onSort);\n\n return (\n <div>\n <FavoritesTabWidget favorite={favorite} className=\"oui-my-3\" />\n\n <DataTable\n bordered\n // minHeight={187.5}\n columns={columns}\n dataSource={dataSource}\n emptyView={emptyView}\n classNames={{\n empty: \"oui-items-start oui-mt-6\",\n }}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[55px] oui-cursor-pointer\"),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n pagination={pagination}\n manualSorting\n />\n </div>\n );\n};\n","import { MouseEventHandler, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Text, Box, Tooltip, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n FavoritesIcon,\n MoveToTopIcon,\n OrderlyIcon,\n UnFavoritesIcon,\n} from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\n\nexport const useMarketsListFullColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false,\n) => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: <UnFavoritesIcon className=\"oui-mt-1\" />,\n dataIndex: \"isFavorite\",\n align: \"center\",\n width: 30,\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(\n record,\n favorite.selectedFavoriteTab,\n true,\n );\n e.stopPropagation();\n };\n\n const button = (\n <Flex\n width=\"100%\"\n height=\"100%\"\n mr={3}\n justify=\"center\"\n itemAlign=\"center\"\n onClick={isFavoriteList ? onDelSymbol : undefined}\n data-testid=\"oui-testid-markets-table-row-favorite-icon\"\n >\n {value ? (\n <FavoritesIcon className=\"oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon className=\"oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n );\n\n if (isFavoriteList) {\n return button;\n }\n\n return (\n <FavoritesDropdownMenuWidget row={record} favorite={favorite}>\n {button}\n </FavoritesDropdownMenuWidget>\n );\n },\n },\n {\n title: t(\"markets.column.market\"),\n dataIndex: \"symbol\",\n width: 90,\n onSort: true,\n render: (value) => {\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"xs\"\n weight=\"semibold\"\n showIcon\n >\n {value}\n </Text.formatted>\n );\n },\n },\n {\n title: t(\"common.price\"),\n dataIndex: \"24h_close\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value, record) => {\n return (\n <Text.numeral dp={record.quote_dp || 2} currency=\"$\">\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"markets.column.24hChange\"),\n dataIndex: \"change\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value) => {\n return (\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.column.24hVolume\")}\n </Flex>\n ),\n dataIndex: \"24h_amount\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value) => {\n return (\n <Text.numeral currency=\"$\" dp={0} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.openInterest\")}\n </Flex>\n ),\n dataIndex: \"openInterest\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value) => {\n return (\n <Text.numeral currency=\"$\" dp={0} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"markets.dataList.column.8hFunding\"),\n dataIndex: \"8h_funding\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value) => {\n if (value === null) {\n return \"--\";\n }\n return (\n <Text.numeral\n rule=\"percentages\"\n coloring\n dp={4}\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n );\n },\n },\n {\n dataIndex: \"action\",\n type: \"action\",\n width: 40,\n render: (value, record) => {\n if (isFavoriteList) {\n return (\n <Flex justify=\"end\" mr={4}>\n <Tooltip\n content={t(\"markets.dataList.column.moveTop\")}\n align=\"center\"\n delayDuration={0}\n >\n <Box\n className=\"oui-hidden oui-cursor-pointer group-hover:oui-block\"\n onClick={(e) => {\n e.stopPropagation();\n favorite.pinToTop(record);\n }}\n data-testid=\"oui-markets-favorites-pinned-icon\"\n >\n <MoveToTopIcon className=\"oui-text-base-contrast-20 hover:oui-text-base-contrast\" />\n </Box>\n </Tooltip>\n </Flex>\n );\n }\n return null;\n },\n },\n ] as Column[];\n }, [favorite, isFavoriteList, t]);\n\n return columns;\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\n\nexport type UseFavoritesListFullReturn = ReturnType<\n typeof useFavoritesListFullScript\n>;\n\nexport const useFavoritesListFullScript = () => {\n const { pageSize, setPage, pagination } = usePagination({\n pageSize: 10,\n });\n const [data, favorite] = useMarkets(MarketsType.FAVORITES);\n const [loading, setLoading] = useState(true);\n\n const { favorites, selectedFavoriteTab } = favorite;\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort();\n\n const filterData = useMemo(() => {\n const filterList = favorites\n ?.filter(\n (item) =>\n item.tabs?.findIndex((tab) => tab.id === selectedFavoriteTab.id) !==\n -1,\n )\n ?.map((fav) => {\n const index = data?.findIndex((item) => item.symbol === fav.name);\n if (index !== -1) {\n return data[index];\n }\n return null;\n })\n ?.filter((item) => !!item);\n\n return searchBySymbol(filterList, searchValue, \"base-type\");\n }, [data, selectedFavoriteTab, favorites, searchValue]);\n\n const dataSource = useMemo(\n () => getSortedList(filterData),\n [filterData, getSortedList],\n );\n\n useEffect(() => {\n setLoading(false);\n }, [favorites]);\n\n useEffect(() => {\n setPage(1);\n }, [searchValue]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n pagination,\n };\n};\n","import { ReactNode } from \"react\";\nimport { useFavoritesListFullScript } from \"./favoritesListFull.script\";\nimport { FavoritesListFull } from \"./favoritesListFull.ui\";\n\nexport type FavoritesListFullWidgetProps = {\n emptyView?: ReactNode;\n};\n\nexport const FavoritesListFullWidget: React.FC<FavoritesListFullWidgetProps> = (\n props,\n) => {\n const state = useFavoritesListFullScript();\n return <FavoritesListFull {...state} emptyView={props.emptyView} />;\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useMarketsListFullColumns } from \"./column\";\nimport { type UseMarketsListFullReturn } from \"./marketsListFull.script\";\n\nexport type MarketsListFullProps = UseMarketsListFullReturn & {\n type?: \"all\" | \"new\";\n};\n\nexport const MarketsListFull: FC<MarketsListFullProps> = (props) => {\n const {\n loading,\n dataSource,\n favorite,\n onSort,\n initialSort,\n type,\n pagination,\n } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const columns = useMarketsListFullColumns(favorite, false);\n\n return (\n <DataTable\n bordered\n columns={columns}\n loading={loading}\n dataSource={dataSource}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[55px] oui-cursor-pointer\"),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n \"data-testid\": `oui-testid-markets-${\n type === \"new\" ? \"newListing\" : \"all\"\n }-tr-${record.symbol}`,\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n initialSort={initialSort}\n pagination={pagination}\n classNames={{\n header: \"oui-h-12\",\n }}\n manualSorting\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { TableSort, usePagination } from \"@orderly.network/ui\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { MarketsListFullWidgetProps } from \"./marketsListFull.widget\";\n\nexport type UseMarketsListFullScriptOptions = MarketsListFullWidgetProps;\n\nexport type UseMarketsListFullReturn = ReturnType<\n typeof useMarketsListFullScript\n>;\n\nexport const useMarketsListFullScript = (\n options: UseMarketsListFullScriptOptions,\n) => {\n const [loading, setLoading] = useState(true);\n const { setPage, pagination } = usePagination({\n pageSize: 10,\n });\n\n const [data, favorite] = useMarkets(MarketsType.ALL);\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList, sort } = useSort(options.initialSort);\n\n const dataSource = useMemo(() => {\n const searchList = searchBySymbol(data, searchValue, \"base-type\");\n return getSortedList(searchList);\n }, [data, getSortedList, searchValue]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n useEffect(() => {\n setPage(1);\n }, [searchValue]);\n\n useEffect(() => {\n // Only all markets store sort\n if (options.type === \"all\") {\n favorite.updateTabsSortState(\"all\", sort?.sortKey!, sort?.sortOrder!);\n }\n }, [sort, options.type]);\n\n const initialSort = useMemo(() => {\n const sortStore =\n options.type === \"all\" ? favorite.tabSort?.all : undefined;\n\n return {\n sortKey: sortStore?.sortKey || options?.initialSort?.sortKey,\n sort: sortStore?.sortOrder || options?.initialSort?.sortOrder,\n } as TableSort;\n }, [favorite.tabSort, options.initialSort, options.type]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n pagination,\n initialSort,\n };\n};\n","import { SortType } from \"../../type\";\nimport { useMarketsListFullScript } from \"./marketsListFull.script\";\nimport { MarketsListFull } from \"./marketsListFull.ui\";\n\nexport type MarketsListFullWidgetProps = {\n type?: \"all\" | \"new\";\n initialSort?: SortType;\n};\n\nexport const MarketsListFullWidget: React.FC<MarketsListFullWidgetProps> = (\n props,\n) => {\n const state = useMarketsListFullScript(props);\n\n return <MarketsListFull {...state} type={props.type} />;\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { FavoritesIcon } from \"../../icons\";\nimport { MarketsTabName } from \"../../type\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { SearchInput } from \"../searchInput\";\nimport { useFavoritesProps } from \"../shared/hooks/useFavoritesExtraProps\";\nimport { ExpandMarketsScriptReturn } from \"./expandMarkets.script\";\n\nexport type ExpandMarketsProps = ExpandMarketsScriptReturn;\n\nexport const ExpandMarkets: React.FC<ExpandMarketsProps> = (props) => {\n const { activeTab, onTabChange, tabSort, onTabSort } = props;\n\n const { t } = useTranslation();\n\n const cls = \"oui-h-[calc(100%_-_36px)]\";\n\n const { getFavoritesProps, renderEmptyView } = useFavoritesProps();\n\n const renderTab = (type: MarketsTabName) => {\n return (\n <div className={cls}>\n <MarketsListWidget\n type={type}\n initialSort={tabSort[type]}\n onSort={onTabSort(type)}\n tableClassNames={{\n scroll: cn(\n \"oui-px-1\",\n type === MarketsTabName.Favorites ? \"oui-pb-9\" : \"oui-pb-2\",\n ),\n }}\n {...getFavoritesProps(type)}\n emptyView={renderEmptyView({\n type,\n onClick: () => {\n onTabChange(MarketsTabName.All);\n },\n })}\n />\n </div>\n );\n };\n\n return (\n <Box className={cn(\"oui-overflow-hidden oui-font-semibold\")} height=\"100%\">\n <Box px={3} pb={2}>\n <SearchInput />\n </Box>\n <Tabs\n variant=\"contained\"\n size=\"md\"\n value={activeTab}\n onValueChange={onTabChange}\n classNames={{\n tabsList: cn(\"oui-my-[6px]\"),\n tabsContent: \"oui-h-full\",\n scrollIndicator: \"oui-mx-3\",\n }}\n className={cls}\n showScrollIndicator\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value={MarketsTabName.Favorites}\n >\n {renderTab(MarketsTabName.Favorites)}\n </TabPanel>\n <TabPanel title={t(\"markets.recent\")} value={MarketsTabName.Recent}>\n {renderTab(MarketsTabName.Recent)}\n </TabPanel>\n <TabPanel title={t(\"common.all\")} value={MarketsTabName.All}>\n {renderTab(MarketsTabName.All)}\n </TabPanel>\n <TabPanel\n title={t(\"markets.newListings\")}\n value={MarketsTabName.NewListing}\n >\n {renderTab(MarketsTabName.NewListing)}\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { SIDE_MARKETS_TAB_SORT_STORAGE_KEY } from \"../../constant\";\nimport { MarketsTabName } from \"../../type\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type ExpandMarketsScriptOptions = {\n activeTab?: MarketsTabName;\n onTabChange?: (tab: MarketsTabName) => void;\n};\n\nexport type ExpandMarketsScriptReturn = ReturnType<\n typeof useExpandMarketsScript\n>;\n\nexport function useExpandMarketsScript(options: ExpandMarketsScriptOptions) {\n const [activeTab, setActiveTab] = useState<MarketsTabName>(\n options.activeTab!,\n );\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: SIDE_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n const { clearSearchValue } = useMarketsContext();\n\n const onTabChange = useCallback(\n (value: string) => {\n if (typeof options?.onTabChange === \"function\") {\n options.onTabChange(value as MarketsTabName);\n } else {\n setActiveTab(value as MarketsTabName);\n }\n },\n [options?.onTabChange],\n );\n useEffect(() => {\n setActiveTab(options?.activeTab || MarketsTabName.Favorites);\n }, [options?.activeTab]);\n\n useEffect(() => {\n clearSearchValue?.();\n }, [activeTab]);\n\n return {\n activeTab,\n onTabChange,\n tabSort,\n onTabSort,\n };\n}\n","export const SIDE_MARKETS_TAB_SORT_STORAGE_KEY =\n \"orderly_side_markets_tab_sort\";\n","import { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport {\n useExpandMarketsScript,\n ExpandMarketsScriptOptions,\n} from \"./expandMarkets.script\";\nimport { ExpandMarkets } from \"./expandMarkets.ui\";\n\nexport type ExpandMarketsWidgetProps = MarketsProviderProps &\n ExpandMarketsScriptOptions;\n\nexport const ExpandMarketsWidget: React.FC<ExpandMarketsWidgetProps> = (\n props,\n) => {\n const state = useExpandMarketsScript({\n activeTab: props.activeTab,\n onTabChange: props.onTabChange,\n });\n\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <ExpandMarkets {...state} />\n </MarketsProvider>\n );\n};\n","import { FC, useState } from \"react\";\nimport { DataTable, cn } from \"@orderly.network/ui\";\nimport { useFundingOverviewColumns } from \"./columns\";\nimport { FundingOverviewReturn } from \"./fundingOverview.script\";\n\nexport type FundingOverviewProps = FundingOverviewReturn;\n\nexport const FundingOverview: FC<FundingOverviewProps> = (props) => {\n const { dataSource, isLoading, pagination, onSort } = props;\n const [selectedPeriod, setSelectedPeriod] = useState(\"1dPositive\");\n\n const columns = useFundingOverviewColumns(selectedPeriod, setSelectedPeriod);\n\n return (\n <DataTable\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n bordered\n onRow={() => {\n return {\n className: cn(\"oui-h-[48px] oui-cursor-pointer\"),\n };\n }}\n classNames={{\n header: \"oui-h-12\",\n }}\n pagination={pagination}\n onSort={onSort}\n manualSorting\n generatedRowKey={(record) => record.symbol}\n />\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Column,\n Flex,\n Picker,\n Select,\n Text,\n TokenIcon,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ProcessedFundingData } from \"./fundingOverview.script\";\n\nconst createFundingRenderer =\n (dp: number = 5) =>\n (value: number) => {\n if (value === 0) {\n return <Text> - </Text>;\n }\n\n return (\n <Text.numeral\n rule=\"percentages\"\n dp={dp}\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n );\n };\n\nexport const useFundingOverviewColumns = (\n selectedPeriod: string,\n setSelectedPeriod: (value: string) => void,\n) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n return useMemo<Column<ProcessedFundingData>[]>(() => {\n return [\n {\n title: t(\"markets.column.market\"),\n dataIndex: \"symbol\",\n onSort: true,\n width: 135,\n className: isMobile ? \"oui-pl-0\" : undefined,\n render: (value) => (\n <Flex gapX={1}>\n <TokenIcon\n symbol={value}\n className={isMobile ? \"oui-size-[18px]\" : \"oui-size-5\"}\n />\n\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n weight=\"semibold\"\n >\n {value}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: t(\"markets.funding.column.estFunding\"),\n dataIndex: \"estFunding\",\n width: 120,\n onSort: true,\n render: (value, record) => (\n <div>\n <Text.numeral\n rule=\"percentages\"\n dp={5}\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n <span className=\"oui-text-base-contrast-54\">\n {`/ ${record.fundingInterval}h`}\n </span>\n </div>\n ),\n },\n {\n title: t(\"markets.funding.column.lastFunding\"),\n dataIndex: \"lastFunding\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.1dAvg\"),\n dataIndex: \"funding1d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.3dAvg\"),\n dataIndex: \"funding3d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.7dAvg\"),\n dataIndex: \"funding7d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.14dAvg\"),\n dataIndex: \"funding14d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.30dAvg\"),\n dataIndex: \"funding30d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.90dAvg\"),\n dataIndex: \"funding90d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: (\n <div className=\"oui-flex oui-gap-1\">\n <FundingPeriodSelect\n value={selectedPeriod}\n onValueChange={setSelectedPeriod}\n />\n <span>{t(\"markets.funding.column.positiveRate\")}</span>\n </div>\n ),\n dataIndex: selectedPeriod,\n width: 130,\n align: \"right\",\n onSort: true,\n render: createFundingRenderer(2),\n },\n ];\n }, [t, isMobile, selectedPeriod, setSelectedPeriod]);\n};\n\ntype FundingPeriodSelectProps = {\n value: string;\n onValueChange: (value: string) => void;\n};\n\nconst FundingPeriodSelect = (props: FundingPeriodSelectProps) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"common.select.1d\"),\n value: \"1dPositive\",\n },\n {\n label: t(\"common.select.3d\"),\n value: \"3dPositive\",\n },\n {\n label: t(\"common.select.7d\"),\n value: \"7dPositive\",\n },\n {\n label: t(\"common.select.14d\"),\n value: \"14dPositive\",\n },\n {\n label: t(\"common.select.30d\"),\n value: \"30dPositive\",\n },\n {\n label: t(\"common.select.90d\"),\n value: \"90dPositive\",\n },\n ];\n }, [t]);\n\n if (isMobile) {\n return (\n <Picker\n size=\"sm\"\n value={props.value}\n onValueChange={props.onValueChange}\n options={options}\n />\n );\n }\n\n return (\n <Select.options\n size=\"xs\"\n value={props.value}\n onValueChange={props.onValueChange}\n options={options}\n />\n );\n};\n","import { useMemo } from \"react\";\nimport {\n MarketsType,\n useFundingRateHistory,\n useFundingRates,\n useMarkets,\n} from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSort, searchBySymbol } from \"../../utils\";\n\nexport type ProcessedFundingData = {\n symbol: string;\n estFunding: number;\n lastFunding: number;\n fundingInterval: number;\n funding1d: number | string;\n funding3d: number | string;\n funding7d: number | string;\n funding14d: number | string;\n funding30d: number | string;\n funding90d: number | string;\n \"1dPositive\": number | string;\n \"3dPositive\": number | string;\n \"7dPositive\": number | string;\n \"14dPositive\": number | string;\n \"30dPositive\": number | string;\n \"90dPositive\": number | string;\n};\n\nexport type FundingOverviewReturn = ReturnType<typeof useFundingOverviewScript>;\n\nexport const useFundingOverviewScript = () => {\n const { pagination } = usePagination({ pageSize: 10 });\n const [marketData] = useMarkets(MarketsType.ALL);\n\n const {\n data: fundingHistory,\n isLoading: isHistoryLoading,\n getPositiveRates,\n } = useFundingRateHistory();\n const fundingRates = useFundingRates();\n\n const { onSort, getSortedList } = useSort();\n const { searchValue } = useMarketsContext();\n\n const processedData = useMemo((): ProcessedFundingData[] => {\n if (!marketData?.length) {\n return [];\n }\n\n const periods = [\"1d\", \"3d\", \"7d\", \"14d\", \"30d\", \"90d\"] as const;\n const posRates = periods.reduce(\n (acc, period) => {\n acc[period] = getPositiveRates(fundingHistory, period);\n return acc;\n },\n {} as Record<string, Record<string, number>>,\n );\n\n // because fundingHistory list is unstable sort, so use marketData instead\n // TODO: feedback to backend to fix this if possible\n return marketData.map((item) => {\n const symbol = item.symbol;\n const history = fundingHistory?.find((h) => h.symbol === symbol);\n\n const fundingRate = fundingRates[symbol];\n\n const fundingInterval = getFundingInterval(\n fundingRate(\"next_funding_time\"),\n fundingRate(\"last_funding_rate_timestamp\"),\n );\n\n return {\n symbol,\n estFunding: fundingRate(\"est_funding_rate\"),\n lastFunding: fundingRate(\"last_funding_rate\"),\n fundingInterval,\n funding1d: history?.funding?.[\"1d\"]?.rate ?? 0,\n funding3d: history?.funding?.[\"3d\"]?.rate ?? 0,\n funding7d: history?.funding?.[\"7d\"]?.rate ?? 0,\n funding14d: history?.funding?.[\"14d\"]?.rate ?? 0,\n funding30d: history?.funding?.[\"30d\"]?.rate ?? 0,\n funding90d: history?.funding?.[\"90d\"]?.rate ?? 0,\n \"1dPositive\": posRates[\"1d\"][symbol] ?? \"-\",\n \"3dPositive\": posRates[\"3d\"][symbol] ?? \"-\",\n \"7dPositive\": posRates[\"7d\"][symbol] ?? \"-\",\n \"14dPositive\": posRates[\"14d\"][symbol] ?? \"-\",\n \"30dPositive\": posRates[\"30d\"][symbol] ?? \"-\",\n \"90dPositive\": posRates[\"90d\"][symbol] ?? \"-\",\n };\n });\n }, [marketData, fundingHistory, fundingRates, getPositiveRates]);\n\n const filteredData = useMemo(() => {\n return searchBySymbol(processedData, searchValue, \"base-type\");\n }, [processedData, searchValue, pagination]);\n\n const dataSource = useMemo(\n () => getSortedList(filteredData),\n [filteredData, getSortedList],\n );\n\n return { dataSource, isLoading: isHistoryLoading, pagination, onSort };\n};\n\nfunction getFundingInterval(\n next_funding_time: number,\n last_funding_rate_timestamp: number,\n) {\n // default interval is 8 hours\n if (!next_funding_time || !last_funding_rate_timestamp) return 8;\n const diff = next_funding_time - last_funding_rate_timestamp;\n\n return Math.round(diff / 3600000);\n}\n","import { FC } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { MobileFundingOverview } from \"./fundingOverview.mobile.ui\";\nimport { useFundingOverviewScript } from \"./fundingOverview.script\";\nimport { FundingOverview } from \"./fundingOverview.ui\";\n\nexport const FundingOverviewWidget: FC = () => {\n const props = useFundingOverviewScript();\n const { isMobile } = useScreen();\n return isMobile ? (\n <MobileFundingOverview {...props} />\n ) : (\n <FundingOverview {...props} />\n );\n};\n","import { FC, useState } from \"react\";\nimport { DataTable, cn } from \"@orderly.network/ui\";\nimport { useFundingOverviewColumns } from \"./columns\";\nimport { FundingOverviewReturn } from \"./fundingOverview.script\";\n\nexport type MobileFundingOverviewProps = FundingOverviewReturn;\n\nexport const MobileFundingOverview: FC<MobileFundingOverviewProps> = (\n props,\n) => {\n const { dataSource, isLoading, onSort } = props;\n const [selectedPeriod, setSelectedPeriod] = useState(\"1dPositive\");\n\n const columns = useFundingOverviewColumns(selectedPeriod, setSelectedPeriod);\n\n return (\n <DataTable\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n onRow={() => {\n return {\n className: cn(\"oui-h-[34px] oui-cursor-pointer\"),\n };\n }}\n classNames={{\n header: \"oui-h-9\",\n body: \"oui-text-2xs\",\n }}\n onSort={onSort}\n manualSorting\n generatedRowKey={(record) => record.symbol}\n />\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"@orderly.network/ui\";\nimport { DataTable } from \"@orderly.network/ui\";\nimport { useFundingColumns } from \"./columns\";\nimport { FundingComparisonReturn } from \"./fundingComparison.script\";\n\nexport const FundingComparison: FC<FundingComparisonReturn> = (props) => {\n const columns = useFundingColumns();\n\n return (\n <DataTable\n columns={columns}\n dataSource={props.dataSource}\n loading={props.isLoading}\n onRow={() => {\n return {\n className: cn(\"oui-h-[48px] oui-cursor-pointer\"),\n };\n }}\n classNames={{\n header: \"oui-h-12\",\n }}\n bordered\n pagination={props.pagination}\n />\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, TokenIcon, useScreen } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\nimport { Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderlyIcon } from \"../../icons\";\nimport { useEXchanges } from \"./useEXchanges\";\n\nconst CDN_PREFIX = \"https://oss.orderly.network/static/exchange_logo\";\n\nexport const useFundingColumns = () => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { exchanges, brokerName, brokerIconSrc } = useEXchanges();\n const getImgSrc = useCallback(\n (val: string) => {\n if (val === brokerName) {\n return brokerIconSrc;\n }\n return `${CDN_PREFIX}/${val.toLowerCase().replace(\" \", \"_\")}.png`;\n },\n [brokerName, brokerIconSrc],\n );\n return useMemo<Column[]>(() => {\n return [\n {\n title: t(\"markets.column.market\"),\n dataIndex: \"symbol\",\n width: 150,\n onSort: true,\n className: isMobile ? \"oui-pl-0\" : undefined,\n render: (value) => (\n <Flex gapX={1}>\n <TokenIcon\n symbol={value}\n className={isMobile ? \"oui-size-[18px]\" : \"oui-size-5\"}\n />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"xs\"\n weight=\"semibold\"\n >\n {value}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.openInterest\")}\n </Flex>\n ),\n dataIndex: \"openInterest\",\n width: 120,\n // align: \"right\",\n onSort: true,\n render: (value) => {\n if (value === \"-\") {\n return \"-\";\n }\n return (\n <Text.numeral currency=\"$\" dp={0} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n ...exchanges.map<Column>((item) => {\n const imgSrc = getImgSrc(item);\n return {\n title: (\n <Flex justify=\"start\" itemAlign=\"center\" gap={1}>\n {!item.includes(\" - \") && imgSrc && (\n <img\n src={imgSrc}\n className={cn(\n \"oui-size-6 oui-rounded-full oui-object-cover\",\n isMobile ? \"oui-size-[18px]\" : \"oui-size-6\",\n )}\n />\n )}\n {item}\n </Flex>\n ),\n dataIndex: item,\n onSort: true,\n width: item.includes(\" - \") ? 160 : 130,\n render(value: number | null) {\n if (value === null) {\n return \"-\";\n }\n return (\n <Text.numeral\n rule=\"percentages\"\n dp={5}\n coloring={item.includes(\" - \") || item === brokerName}\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n );\n },\n };\n }),\n ];\n }, [t, isMobile, exchanges, brokerName, getImgSrc]);\n};\n","import { useMemo } from \"react\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\nexport const useEXchanges = () => {\n const { comparisonProps } = useMarketsContext();\n const brokerName = comparisonProps?.exchangesName || \"Orderly\";\n const brokerIconSrc =\n comparisonProps?.exchangesIconSrc ||\n \"https://oss.orderly.network/static/exchange_logo/orderly.png\";\n const exchanges = useMemo<string[]>(() => {\n return [\n brokerName,\n \"Binance\",\n `${brokerName} - Binance`,\n \"OKX\",\n `${brokerName} - OKX`,\n \"Bybit\",\n `${brokerName} - Bybit`,\n \"dYdX\",\n `${brokerName} - dYdX`,\n \"Bitget\",\n `${brokerName} - Bitget`,\n \"KuCoin\",\n `${brokerName} - KuCoin`,\n ];\n }, [comparisonProps?.exchangesName]);\n return {\n exchanges,\n brokerName,\n brokerIconSrc: brokerIconSrc,\n };\n};\n","import { useMemo } from \"react\";\nimport {\n useFundingRates,\n useMarketsStream,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSort, searchBySymbol } from \"../../utils\";\nimport { useEXchanges } from \"./useEXchanges\";\n\nfunction getOpenInterest(open_interest?: number, index_price?: number) {\n return new Decimal(open_interest || 0).mul(index_price || 0).toNumber();\n}\n\nexport type FundingComparisonReturn = ReturnType<\n typeof useFundingComparisonScript\n>;\n\nexport const useFundingComparisonScript = () => {\n const { pagination } = usePagination({ pageSize: 10 });\n const { onSort, getSortedList } = useSort();\n const { searchValue } = useMarketsContext();\n const { exchanges, brokerName } = useEXchanges();\n const fundingRates = useFundingRates();\n\n const { data, isLoading } = useQuery<\n Array<{ symbol: string; exchanges: Array<{ name: string; last: number }> }>\n >(\"/v1/public/market_info/funding_comparison\");\n const { data: futures } = useMarketsStream();\n\n const processedData = useMemo(() => {\n if (!Array.isArray(data) || !data.length) {\n return [];\n }\n return data.map((row) => {\n const target = futures?.find((item) => item.symbol === row.symbol);\n const result: Record<PropertyKey, any> = {\n symbol: row.symbol,\n openInterest: target\n ? getOpenInterest(\n target?.open_interest as number,\n target?.index_price as number,\n )\n : \"-\",\n };\n for (const item of exchanges) {\n const isCompare = item.includes(` - `);\n if (!isCompare) {\n if (item === brokerName) {\n const rate = fundingRates[row.symbol];\n result[item] = rate(\"last_funding_rate\") ?? null;\n } else {\n const exchange = row.exchanges?.find(\n (e) => e.name.toLowerCase() === item.toLowerCase(),\n );\n result[item] = exchange?.last ?? null;\n }\n } else {\n const [, exchangeName] = item.replace(/ /g, \"\").split(\"-\");\n const rate = fundingRates[row.symbol];\n const wooFiRate = rate(\"last_funding_rate\") ?? null;\n const exchange = row.exchanges?.find(\n (e) => e.name.toLowerCase() === exchangeName.toLowerCase(),\n );\n const otherRate = exchange?.last ?? null;\n if (wooFiRate !== null && otherRate !== null) {\n result[item] = new Decimal(wooFiRate).sub(otherRate).toString();\n } else {\n result[item] = null;\n }\n }\n }\n return result;\n });\n }, [data, futures, fundingRates, exchanges, brokerName]);\n\n const filteredData = useMemo(() => {\n return searchBySymbol(processedData, searchValue, \"base-type\");\n }, [processedData, searchValue, pagination]);\n\n const dataSource = useMemo(\n () => getSortedList(filteredData),\n [getSortedList, filteredData],\n );\n\n return {\n dataSource,\n isLoading,\n pagination,\n onSort,\n };\n};\n","import type { FC } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { MobileFundingComparison } from \"./fundingComparison.mobile.ui\";\nimport { useFundingComparisonScript } from \"./fundingComparison.script\";\nimport { FundingComparison } from \"./fundingComparison.ui\";\n\nexport const FundingComparisonWidget: FC = () => {\n const state = useFundingComparisonScript();\n const { isMobile } = useScreen();\n return isMobile ? (\n <MobileFundingComparison {...state} />\n ) : (\n <FundingComparison {...state} />\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"@orderly.network/ui\";\nimport { DataTable } from \"@orderly.network/ui\";\nimport { useFundingColumns } from \"./columns\";\nimport { FundingComparisonReturn } from \"./fundingComparison.script\";\n\nexport const MobileFundingComparison: FC<FundingComparisonReturn> = (props) => {\n const columns = useFundingColumns();\n\n return (\n <DataTable\n columns={columns}\n dataSource={props.dataSource}\n loading={props.isLoading}\n onRow={() => {\n return {\n className: cn(\"oui-h-[34px] oui-cursor-pointer\"),\n };\n }}\n onSort={props.onSort}\n classNames={{\n header: \"oui-h-9\",\n body: \"oui-text-2xs\",\n }}\n manualSorting\n />\n );\n};\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n cn,\n EyeCloseIcon,\n Flex,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { CollapseIcon, ExpandIcon } from \"../../icons\";\nimport { ExpandMarketsWidget } from \"../expandMarkets\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useFavoritesProps } from \"../shared/hooks/useFavoritesExtraProps\";\nimport type { SideMarketsScriptReturn } from \"./sideMarkets.script\";\n\nexport const IndicatorIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGAttributes<SVGSVGElement>\n>((props, ref) => {\n return (\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 ref={ref}\n focusable={false}\n {...props}\n >\n <rect x={2} y={2} width={8} height={2} rx={1} />\n <rect x={2} y={7} width={8} height={2} rx={1} />\n <rect x={2} y={12} width={8} height={2} rx={1} />\n </svg>\n );\n});\n\nexport const SideMarketsHeader: React.FC<\n Pick<\n SideMarketsScriptReturn,\n \"resizeable\" | \"panelSize\" | \"onPanelSizeChange\"\n >\n> = (props) => {\n const { resizeable, panelSize, onPanelSizeChange } = props;\n\n const { t } = useTranslation();\n\n const cls = cn(\n \"oui-text-base-contrast-36\",\n resizeable\n ? \"oui-cursor-pointer hover:oui-text-base-contrast-80\"\n : \"oui-cursor-not-allowed\",\n );\n\n return (\n <Flex\n className={\n panelSize === \"small\"\n ? \"oui-absolute oui-end-[-20px] oui-z-50\"\n : \"oui-relative\"\n }\n justify={panelSize === \"large\" ? \"between\" : \"end\"}\n width=\"100%\"\n px={3}\n >\n {panelSize === \"large\" && (\n <Text size=\"base\" intensity={80}>\n {t(\"common.markets\")}\n </Text>\n )}\n <Tooltip\n side={panelSize === \"small\" ? \"right\" : \"left\"}\n align=\"start\"\n sideOffset={-4}\n alignOffset={-4}\n content={\n <Flex direction=\"column\" gap={2}>\n {panelSize === \"large\" && (\n <>\n <div onClick={() => onPanelSizeChange?.(\"middle\")}>\n <CollapseIcon className={cls} />\n </div>\n <div onClick={() => onPanelSizeChange?.(\"small\")}>\n <EyeCloseIcon size={16} className={cls} opacity={1} />\n </div>\n </>\n )}\n {panelSize === \"middle\" && (\n <>\n <div onClick={() => onPanelSizeChange?.(\"large\")}>\n <ExpandIcon className={cls} />\n </div>\n <div onClick={() => onPanelSizeChange?.(\"small\")}>\n <EyeCloseIcon size={16} className={cls} opacity={1} />\n </div>\n </>\n )}\n {panelSize === \"small\" && (\n <>\n <div onClick={() => onPanelSizeChange?.(\"large\")}>\n <ExpandIcon className={cls} />\n </div>\n <div onClick={() => onPanelSizeChange?.(\"middle\")}>\n <CollapseIcon className={cls} />\n </div>\n </>\n )}\n </Flex>\n }\n delayDuration={0}\n className={\n \"oui-rounded oui-border oui-border-line-12 oui-bg-base-9 oui-p-1\"\n }\n arrow={{ className: \"oui-fill-transparent\" }}\n >\n <div className=\"oui-cursor-pointer\">\n <IndicatorIcon\n className={cn(\n \"oui-text-base-contrast-36 oui-transition-all hover:oui-text-base-contrast-80\",\n )}\n />\n </div>\n </Tooltip>\n </Flex>\n );\n};\n\nexport type SideMarketsProps = SideMarketsScriptReturn & { className?: string };\n\nexport const SideMarkets: React.FC<SideMarketsProps> = (props) => {\n const { panelSize, activeTab, onTabChange, className, tabSort } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const { getFavoritesProps } = useFavoritesProps();\n\n const renderContent = () => {\n if (panelSize === \"small\") {\n return null;\n }\n if (panelSize === \"middle\") {\n return (\n <MarketsListWidget\n type={activeTab}\n initialSort={tabSort[activeTab]}\n panelSize={panelSize}\n {...getFavoritesProps(activeTab)}\n />\n );\n }\n if (panelSize === \"large\") {\n return (\n <ExpandMarketsWidget\n activeTab={activeTab}\n onTabChange={onTabChange}\n symbol={symbol}\n onSymbolChange={onSymbolChange}\n />\n );\n }\n };\n\n return (\n <Flex\n id=\"oui-side-markets\"\n className={cn(\"oui-relative oui-font-semibold\", className)}\n direction=\"column\"\n gapY={5}\n height=\"100%\"\n width=\"100%\"\n >\n <SideMarketsHeader\n {...pick([\"resizeable\", \"panelSize\", \"onPanelSizeChange\"], props)}\n />\n <Box\n width=\"100%\"\n className={cn(\n panelSize === \"large\" && \"oui-h-[calc(100%_-_56px)]\",\n panelSize === \"middle\" && \"oui-h-[calc(100%_-_52px)]\",\n )}\n >\n {renderContent()}\n </Box>\n </Flex>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { SIDE_MARKETS_TAB_SORT_STORAGE_KEY } from \"../../constant\";\nimport { MarketsTabName } from \"../../type\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type SideMarketsScriptOptions = {\n resizeable?: boolean;\n panelSize?: \"small\" | \"middle\" | \"large\";\n onPanelSizeChange?: React.Dispatch<\n React.SetStateAction<\"small\" | \"middle\" | \"large\">\n >;\n};\n\nexport type SideMarketsScriptReturn = ReturnType<typeof useSideMarketsScript>;\n\nconst SIDE_MARKETS_SEL_TAB_KEY = \"orderly_side_markets_sel_tab_key\";\n\nexport const useSideMarketsScript = (options?: SideMarketsScriptOptions) => {\n const [panelSize, setPanelSize] = useState(options?.panelSize);\n const [activeTab, setActiveTab] = useLocalStorage(\n SIDE_MARKETS_SEL_TAB_KEY,\n MarketsTabName.All,\n );\n\n const { tabSort } = useTabSort({\n storageKey: SIDE_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n const onPanelSizeChange = useCallback(\n (size: \"small\" | \"middle\" | \"large\") => {\n if (typeof options?.onPanelSizeChange === \"function\") {\n options.onPanelSizeChange(size);\n } else {\n setPanelSize(size);\n }\n },\n [options?.onPanelSizeChange],\n );\n\n useEffect(() => {\n setPanelSize(options?.panelSize);\n }, [options?.panelSize]);\n\n return {\n resizeable: options?.resizeable ?? true,\n panelSize: panelSize,\n onPanelSizeChange: onPanelSizeChange as React.Dispatch<\n React.SetStateAction<\"small\" | \"middle\" | \"large\">\n >,\n activeTab: activeTab as MarketsTabName,\n onTabChange: setActiveTab,\n tabSort: tabSort,\n } as const;\n};\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport { useSideMarketsScript } from \"./sideMarkets.script\";\nimport { SideMarkets, SideMarketsProps } from \"./sideMarkets.ui\";\n\nexport type SideMarketsWidgetProps = MarketsProviderProps &\n Partial<\n Pick<\n SideMarketsProps,\n \"resizeable\" | \"panelSize\" | \"onPanelSizeChange\" | \"className\"\n >\n >;\n\nexport const SideMarketsWidget: React.FC<SideMarketsWidgetProps> = (props) => {\n const state = useSideMarketsScript(\n pick([\"resizeable\", \"panelSize\", \"onPanelSizeChange\"], props),\n );\n return (\n <MarketsProvider {...pick([\"symbol\", \"onSymbolChange\"], props)}>\n <SideMarkets {...state} className={props.className} />\n </MarketsProvider>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n CloseIcon,\n cn,\n Flex,\n TabPanel,\n Tabs,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n} from \"@orderly.network/ui\";\nimport { FavoritesIcon } from \"../../icons\";\nimport { MarketsTabName } from \"../../type\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { SearchInput } from \"../searchInput\";\nimport { useFavoritesProps } from \"../shared/hooks/useFavoritesExtraProps\";\nimport { useDropDownMarketsColumns } from \"./column\";\nimport { DropDownMarketsScriptReturn } from \"./dropDownMarkets.script\";\n\nexport type DropDownMarketsProps = DropDownMarketsScriptReturn & {\n contentClassName?: string;\n};\n\nexport const DropDownMarkets: React.FC<\n PropsWithChildren<DropDownMarketsProps>\n> = (props) => {\n return (\n <DropdownMenuRoot open={props.open} onOpenChange={props.onOpenChange}>\n <DropdownMenuTrigger asChild>{props.children}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n align=\"start\"\n alignOffset={-32}\n sideOffset={20}\n className={cn(\n \"oui-markets-dropdown-menu-content oui-bg-base-8 oui-p-0\",\n props.contentClassName,\n )}\n >\n <DropDownMarketsConetnt {...props} hide={props.hide} />\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n\nexport const DropDownMarketsConetnt: React.FC<DropDownMarketsProps> = (\n props,\n) => {\n const { activeTab, onTabChange, tabSort, onTabSort } = props;\n\n const { t } = useTranslation();\n\n const getColumns = useDropDownMarketsColumns();\n\n const search = (\n <Flex mx={3} gapX={3} pt={3} pb={2}>\n <SearchInput\n classNames={{\n root: \"oui-w-full\",\n }}\n />\n <CloseIcon\n size={12}\n className=\"oui-cursor-pointer oui-text-base-contrast-80\"\n onClick={props.hide}\n opacity={1}\n />\n </Flex>\n );\n\n const cls = \"oui-h-[calc(100%_-_36px)]\";\n\n const { getFavoritesProps, renderEmptyView } = useFavoritesProps();\n\n const renderTab = (type: MarketsTabName) => {\n return (\n <div className={cls}>\n <MarketsListWidget\n type={type}\n initialSort={tabSort[type]}\n onSort={onTabSort(type)}\n getColumns={getColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: \"oui-pb-5 oui-px-1\",\n }}\n rowClassName=\"!oui-h-[34px]\"\n {...getFavoritesProps(type)}\n emptyView={renderEmptyView({\n type,\n onClick: () => {\n onTabChange(MarketsTabName.All);\n },\n })}\n />\n </div>\n );\n };\n\n return (\n <Box\n className={cn(\"oui-overflow-hidden oui-font-semibold\")}\n height=\"100%\"\n intensity={800}\n >\n {search}\n\n <Tabs\n variant=\"contained\"\n size=\"md\"\n value={activeTab}\n onValueChange={onTabChange}\n classNames={{\n tabsList: \"oui-my-[6px] oui-px-3\",\n tabsContent: \"oui-h-full\",\n }}\n className={cls}\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value={MarketsTabName.Favorites}\n >\n {renderTab(MarketsTabName.Favorites)}\n </TabPanel>\n <TabPanel title={t(\"markets.recent\")} value={MarketsTabName.Recent}>\n {renderTab(MarketsTabName.Recent)}\n </TabPanel>\n <TabPanel title={t(\"common.all\")} value={MarketsTabName.All}>\n {renderTab(MarketsTabName.All)}\n </TabPanel>\n <TabPanel\n title={t(\"markets.newListings\")}\n value={MarketsTabName.NewListing}\n >\n {renderTab(MarketsTabName.NewListing)}\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { MouseEventHandler, useCallback } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Text, cn, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { DeleteIcon, TopIcon } from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport {\n get24hPercentageColumn,\n getLastColumn,\n getSymbolColumn,\n} from \"../shared/column\";\n\nexport const useDropDownMarketsColumns = () => {\n const { t } = useTranslation();\n\n return useCallback(\n (favorite: FavoriteInstance, isFavoriteList = false) => {\n return [\n getSymbolColumn(favorite, isFavoriteList),\n getLastColumn(),\n get24hPercentageColumn(),\n {\n title: t(\"common.volume\"),\n dataIndex: \"24h_amount\",\n align: \"right\",\n onSort: true,\n className: \"oui-relative\",\n width: 80,\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(\n record,\n favorite.selectedFavoriteTab,\n true,\n );\n e.stopPropagation();\n };\n\n const iconCls =\n \"oui-w-4 oui-h-4 oui-text-base-contrast-54 hover:oui-text-base-contrast\";\n\n const actions = (\n <div className={cn(\"oui-absolute oui-right-1 oui-top-[3px]\")}>\n <Flex\n className={cn(\n \"oui-bg-primary-darken oui-py-[6px]\",\n \"oui-hidden group-hover:oui-inline-flex\",\n )}\n r=\"base\"\n width={52}\n justify=\"center\"\n itemAlign=\"end\"\n gapX={2}\n >\n <TopIcon\n className={iconCls}\n onClick={(e) => {\n e.stopPropagation();\n favorite.pinToTop(record);\n }}\n />\n <DeleteIcon className={iconCls} onClick={onDelSymbol} />\n </Flex>\n </div>\n );\n return (\n <>\n {isFavoriteList && actions}\n <Text.numeral\n rule=\"human\"\n dp={2}\n rm={Decimal.ROUND_DOWN}\n className={cn(isFavoriteList && \"group-hover:oui-invisible\")}\n >\n {value}\n </Text.numeral>\n </>\n );\n },\n },\n ] as Column[];\n },\n [t],\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { MarketsTabName } from \"../../type\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type DropDownMarketsScriptReturn = ReturnType<\n typeof useDropDownMarketsScript\n>;\n\nconst DROPDOWN_MARKETS_SEL_TAB_KEY = \"orderly_dropdown_markets_sel_tab_key\";\n\nconst DROPDOWN_MARKETS_TAB_SORT_STORAGE_KEY =\n \"orderly_dropdown_markets_tab_sort\";\n\nexport function useDropDownMarketsScript() {\n const [open, setOpen] = useState(false);\n\n const [activeTab, setActiveTab] = useLocalStorage(\n DROPDOWN_MARKETS_SEL_TAB_KEY,\n MarketsTabName.All,\n );\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: DROPDOWN_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n const { clearSearchValue } = useMarketsContext();\n\n const hide = () => {\n setOpen(false);\n };\n\n useEffect(() => {\n clearSearchValue?.();\n }, [activeTab]);\n\n return {\n activeTab: activeTab as MarketsTabName,\n onTabChange: (value: string) => setActiveTab(value as MarketsTabName),\n open,\n onOpenChange: setOpen,\n hide,\n tabSort,\n onTabSort,\n };\n}\n","import React, { PropsWithChildren } from \"react\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport { useDropDownMarketsScript } from \"./dropDownMarkets.script\";\nimport { DropDownMarkets, DropDownMarketsProps } from \"./dropDownMarkets.ui\";\n\nexport type DropDownMarketsWidgetProps = MarketsProviderProps &\n Pick<DropDownMarketsProps, \"contentClassName\">;\n\nexport const DropDownMarketsWidget: React.FC<\n PropsWithChildren<DropDownMarketsWidgetProps>\n> = (props) => {\n const state = useDropDownMarketsScript();\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <DropDownMarkets {...state} contentClassName={props.contentClassName}>\n {props.children}\n </DropDownMarkets>\n </MarketsProvider>\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, TabPanel, Tabs, Text } from \"@orderly.network/ui\";\nimport { FavoritesIcon } from \"../../icons\";\nimport { MarketsTabName } from \"../../type\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { SearchInput } from \"../searchInput\";\nimport { useFavoritesProps } from \"../shared/hooks/useFavoritesExtraProps\";\nimport { getMarketsSheetColumns } from \"./column\";\nimport { MarketsSheetScriptReturn } from \"./marketsSheet.script\";\n\nexport type MarketsSheetProps = MarketsSheetScriptReturn & {\n className?: string;\n};\n\nexport const MarketsSheet: React.FC<MarketsSheetProps> = (props) => {\n const { className, tabSort, onTabSort } = props;\n\n const { t } = useTranslation();\n\n const { getFavoritesProps, renderEmptyView } = useFavoritesProps();\n\n const renderTab = (type: MarketsTabName) => {\n const isFavorites = type === MarketsTabName.Favorites;\n return (\n <MarketsListWidget\n type={type}\n initialSort={tabSort[type]}\n onSort={onTabSort(type)}\n getColumns={getMarketsSheetColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: cn(\n \"oui-pb-[env(safe-area-inset-bottom,_20px)]\",\n isFavorites\n ? \"oui-h-[calc(100%_-_70px)]\"\n : \"oui-h-[calc(100%_-_40px)]\",\n ),\n }}\n emptyView={renderEmptyView({\n type,\n onClick: () => {\n props.onTabChange(MarketsTabName.All);\n },\n })}\n {...getFavoritesProps(type)}\n />\n );\n };\n\n return (\n <Box height=\"100%\" className={cn(\"oui-font-semibold\", className)}>\n <Box px={3} mt={3} mb={2}>\n <Text size=\"base\" intensity={80}>\n {t(\"common.markets\")}\n </Text>\n <SearchInput classNames={{ root: \"oui-mt-4\" }} />\n </Box>\n\n <Tabs\n variant=\"contained\"\n size=\"md\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (tab: string) => void}\n classNames={{\n tabsList: cn(\"oui-my-[6px]\"),\n tabsContent: \"oui-h-full\",\n scrollIndicator: \"oui-mx-3\",\n }}\n className=\"oui-h-[calc(100%_-_92px)]\"\n showScrollIndicator\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value={MarketsTabName.Favorites}\n >\n {renderTab(MarketsTabName.Favorites)}\n </TabPanel>\n\n <TabPanel title={t(\"common.all\")} value={MarketsTabName.All}>\n {renderTab(MarketsTabName.All)}\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { MouseEventHandler, ReactNode } from \"react\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { Flex, TokenIcon, Text, Badge, cn, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n DeleteIcon,\n FavoritesIcon2,\n TopIcon,\n UnFavoritesIcon2,\n} from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\n\nexport const getMarketsSheetColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false,\n) => {\n return [\n {\n title: `${i18n.t(\"markets.column.market\")} / ${i18n.t(\"common.volume\")}`,\n dataIndex: \"24h_amount\",\n multiSort: {\n fields: [\n {\n sortKey: \"symbol\",\n label: i18n.t(\"markets.column.market\"),\n },\n {\n sortKey: \"24h_amount\",\n label: i18n.t(\"common.volume\"),\n },\n ],\n },\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n let favoritesIcon: ReactNode;\n if (!isFavoriteList) {\n favoritesIcon = (\n <FavoritesDropdownMenuWidget row={record} favorite={favorite}>\n <Flex\n width={12}\n height={12}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-mr-1 oui-cursor-pointer\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-size-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-size-3 oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n </FavoritesDropdownMenuWidget>\n );\n }\n return (\n <Flex>\n {favoritesIcon}\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Flex gapX={1}>\n <TokenIcon symbol={record.symbol} className=\"oui-size-[18px]\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"2xs\"\n weight=\"semibold\"\n >\n {record.symbol}\n </Text.formatted>\n <Badge size=\"xs\" color=\"primary\">\n {record.leverage}x\n </Badge>\n </Flex>\n\n <Text.numeral\n intensity={54}\n rule=\"human\"\n dp={2}\n rm={Decimal.ROUND_DOWN}\n >\n {value}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n },\n },\n {\n title: i18n.t(\"markets.column.price&Change\"),\n dataIndex: \"change\",\n align: \"right\",\n onSort: true,\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(\n record,\n favorite.selectedFavoriteTab,\n true,\n );\n e.stopPropagation();\n };\n\n const iconCls =\n \"oui-w-4 oui-h-4 oui-text-base-contrast-54 hover:oui-text-base-contrast\";\n\n const actions = (\n <div\n className={cn(\n \"oui-absolute oui-right-0 oui-top-[6.5px]\",\n \"oui-hidden group-hover:oui-block\",\n )}\n >\n <Flex\n className={cn(\n \"oui-inline-flex\",\n \"oui-bg-primary-darken oui-py-[6px]\",\n )}\n r=\"base\"\n width={52}\n justify=\"center\"\n itemAlign=\"end\"\n gapX={2}\n >\n <TopIcon\n className={iconCls}\n onClick={(e) => {\n e.stopPropagation();\n favorite.pinToTop(record);\n }}\n />\n <DeleteIcon className={iconCls} onClick={onDelSymbol} />\n </Flex>\n </div>\n );\n\n return (\n <div className=\"oui-relative\">\n {isFavoriteList && actions}\n\n <Flex\n direction=\"column\"\n justify=\"end\"\n itemAlign=\"end\"\n gapY={1}\n className={cn(isFavoriteList && \"group-hover:oui-invisible\")}\n >\n <Text.numeral dp={record.quote_dp || 2} size=\"2xs\">\n {record[\"24h_close\"]}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {value}\n </Text.numeral>\n </Flex>\n </div>\n );\n },\n },\n ] as Column[];\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { SIDE_MARKETS_TAB_SORT_STORAGE_KEY } from \"../../constant\";\nimport { MarketsTabName } from \"../../type\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type MarketsSheetScriptReturn = ReturnType<typeof useMarketsSheetScript>;\n\nconst MARKETS_SHEET_SEL_TAB_KEY = \"orderly_markets_sheet_sel_tab_key\";\n\nexport function useMarketsSheetScript() {\n const { tabSort, onTabSort } = useTabSort({\n storageKey: SIDE_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n const [activeTab, setActiveTab] = useLocalStorage(\n MARKETS_SHEET_SEL_TAB_KEY,\n MarketsTabName.Favorites,\n );\n\n return {\n tabSort,\n onTabSort,\n activeTab,\n onTabChange: setActiveTab,\n };\n}\n","import React from \"react\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport { useMarketsSheetScript } from \"./marketsSheet.script\";\nimport { MarketsSheet, MarketsSheetProps } from \"./marketsSheet.ui\";\n\nexport type MarketsSheetWidgetProps = MarketsProviderProps &\n Partial<Pick<MarketsSheetProps, \"className\">>;\n\nexport const MarketsSheetWidget: React.FC<MarketsSheetWidgetProps> = (\n props,\n) => {\n const state = useMarketsSheetScript();\n\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <MarketsSheet {...state} className={props.className} />\n </MarketsProvider>\n );\n};\n","import { FC, ReactNode } from \"react\";\nimport { Flex, Text, cn, Divider, Badge } from \"@orderly.network/ui\";\nimport { UseSymbolInfoBarScriptReturn } from \"./symbolInfoBar.script\";\nimport { TriangleDownIcon } from \"../../icons\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { MarketsProviderProps } from \"../marketsProvider\";\n\nexport type Layout = \"left\" | \"right\";\n\nexport type SymbolInfoBarProps = Pick<MarketsProviderProps, \"onSymbolChange\"> &\n UseSymbolInfoBarScriptReturn & {\n className?: string;\n trailing?: ReactNode;\n onSymbol?: () => void;\n };\n\nexport const SymbolInfoBar: FC<SymbolInfoBarProps> = (props) => {\n const { symbol, data, leverage, onSymbol } = props;\n\n const symbolView = (\n <Flex className=\"oui-cursor-pointer oui-gap-x-[6px]\" onClick={onSymbol}>\n <Text.formatted\n className=\"oui-break-normal oui-whitespace-nowrap\"\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n weight=\"semibold\"\n showIcon\n >\n {symbol}\n </Text.formatted>\n <TriangleDownIcon className=\"oui-text-base-contrast-54 oui-w-[14px] oui-h-[14px]\" />\n </Flex>\n );\n\n return (\n <Flex\n className={cn(\n \"oui-symbol-info-bar-mobile\",\n \"oui-font-semibold oui-h-full\",\n props.className\n )}\n >\n <Flex gapX={3} className=\"oui-flex-1 oui-overflow-hidden oui-h-full\">\n <Flex gapX={3}>\n {symbolView}\n <Badge size=\"xs\" color=\"primary\">\n {leverage}x\n </Badge>\n </Flex>\n\n <Divider className=\"oui-h-6\" direction=\"vertical\" intensity={8} />\n <Text.numeral\n size=\"2xs\"\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {data?.[\"change\"]!}\n </Text.numeral>\n </Flex>\n {props.trailing}\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useSymbolsInfo, useTickerStream } from \"@orderly.network/hooks\";\n\nexport type UseSymbolInfoBarScriptOptions = {\n symbol: string;\n};\n\nexport type UseSymbolInfoBarScriptReturn = ReturnType<\n typeof useSymbolInfoBarScript\n>;\n\nexport function useSymbolInfoBarScript(options: UseSymbolInfoBarScriptOptions) {\n const { symbol } = options;\n\n const data = useTickerStream(symbol);\n\n const symbolsInfo = useSymbolsInfo();\n\n const leverage = useMemo(() => {\n const info = symbolsInfo[symbol];\n const baseImr = info(\"base_imr\");\n return getLeverage(baseImr);\n }, [symbol, symbolsInfo]);\n\n return {\n symbol,\n data,\n leverage,\n };\n}\n\nfunction getLeverage(base_imr: number) {\n return base_imr ? 1 / base_imr : undefined;\n}\n","import {\n useSymbolInfoBarScript,\n UseSymbolInfoBarScriptOptions,\n} from \"./symbolInfoBar.script\";\nimport { SymbolInfoBar, SymbolInfoBarProps } from \"./symbolInfoBar.ui\";\n\nexport type SymbolInfoBarWidgetPros = UseSymbolInfoBarScriptOptions &\n Pick<SymbolInfoBarProps, \"className\" | \"trailing\" | \"onSymbol\">;\n\nexport const SymbolInfoBarWidget: React.FC<SymbolInfoBarWidgetPros> = (\n props,\n) => {\n const { symbol, ...rest } = props;\n\n const state = useSymbolInfoBarScript({ symbol });\n return <SymbolInfoBar {...state} {...rest} />;\n};\n","import { ReactNode } from \"react\";\nimport { useFundingRate } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n TokenIcon,\n Flex,\n Text,\n cn,\n Divider,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n ArrowLeftIcon,\n FavoritesIcon2,\n TriangleDownIcon,\n UnFavoritesIcon2,\n} from \"../../icons\";\nimport { DropDownMarketsWidget } from \"../dropDownMarkets\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\nimport { MarketsProviderProps } from \"../marketsProvider\";\nimport { UseSymbolInfoBarFullScriptReturn } from \"./symbolInfoBarFull.script\";\n\nexport type Layout = \"left\" | \"right\";\n\nexport type SymbolInfoBarFullProps = Pick<\n MarketsProviderProps,\n \"onSymbolChange\"\n> &\n UseSymbolInfoBarFullScriptReturn & {\n className?: string;\n trailing?: ReactNode;\n };\n\nexport const SymbolInfoBarFull: React.FC<SymbolInfoBarFullProps> = (props) => {\n const {\n symbol,\n isFavorite,\n favorite,\n data,\n quotoDp,\n openInterest,\n containerRef,\n leadingElementRef,\n tailingElementRef,\n leadingVisible,\n tailingVisible,\n onScoll,\n fundingPeriod,\n capFunding,\n floorFunding,\n } = props;\n\n const { t } = useTranslation();\n\n const favoriteIcon = (\n <FavoritesDropdownMenuWidget row={{ symbol }} favorite={favorite}>\n <Flex\n width={12}\n height={12}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-mr-1 oui-cursor-pointer\"\n >\n {isFavorite ? (\n <FavoritesIcon2 className=\"oui-size-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-size-3 oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n </FavoritesDropdownMenuWidget>\n );\n\n const symbolView = (\n <DropDownMarketsWidget\n contentClassName=\"oui-w-[429px] oui-h-[496px]\"\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <Flex gapX={1} className=\"oui-cursor-pointer\">\n <TokenIcon symbol={symbol} className=\"oui-size-4\" />\n <Text.formatted\n className=\"oui-whitespace-nowrap oui-break-normal\"\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"xs\"\n weight=\"semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n <TriangleDownIcon className=\"oui-text-base-contrast-54\" />\n </Flex>\n </DropDownMarketsWidget>\n );\n\n const price = (\n <Text.numeral\n dp={quotoDp || 2}\n currency=\"$\"\n size=\"sm\"\n intensity={98}\n className=\"oui-data-value\"\n >\n {data?.[\"24h_close\"]}\n </Text.numeral>\n );\n\n const change = (\n <>\n <Text.numeral coloring rm={Decimal.ROUND_DOWN} showIdentifier>\n {data?.[\"24h_change\"]!}\n </Text.numeral>\n <Text intensity={36}>/</Text>\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {data?.[\"change\"]!}\n </Text.numeral>\n </>\n );\n\n return (\n <Flex\n className={cn(\n \"oui-symbol-info-bar-desktop\",\n \"oui-h-[54px] oui-font-semibold\",\n props.className,\n )}\n // fix Safari text opacity transition bug\n style={{\n transform: \"translateZ(0)\",\n willChange: \"transform\",\n }}\n >\n <Flex gapX={6} className=\"oui-h-full oui-flex-1 oui-overflow-hidden\">\n <Flex gapX={1}>\n {favoriteIcon}\n {symbolView}\n </Flex>\n <Divider className=\"oui-h-[26px]\" direction=\"vertical\" intensity={8} />\n {price}\n <div className=\"oui-relative oui-h-full oui-overflow-hidden\">\n <div\n ref={containerRef}\n className=\"oui-hide-scrollbar oui-h-full oui-overflow-x-auto\"\n >\n <Flex gapX={8} height=\"100%\">\n <div ref={leadingElementRef}>\n <DataItem\n label={t(\"markets.column.24hChange\")}\n value={change}\n />\n </div>\n <DataItem\n label={t(\"markets.symbolInfoBar.Mark\")}\n value={\n <Text.numeral\n dp={quotoDp}\n data-testid=\"oui-testid-tokenInfo-markPrice-value\"\n >\n {data?.[\"mark_price\"]}\n </Text.numeral>\n }\n hint={t(\"markets.symbolInfoBar.Mark.tooltip\")}\n />\n <DataItem\n label={t(\"markets.symbolInfoBar.Index\")}\n value={\n <Text.numeral dp={quotoDp}>\n {data?.[\"index_price\"]}\n </Text.numeral>\n }\n hint={t(\"markets.symbolInfoBar.Index.tooltip\")}\n />\n <DataItem\n label={t(\"markets.symbolInfoBar.24hVolume\")}\n value={\n <Text.numeral rule=\"human\" dp={2}>\n {data?.[\"24h_amount\"]}\n </Text.numeral>\n }\n hint={t(\"markets.symbolInfoBar.24hVolume.tooltip\")}\n />\n <DataItem\n label={t(\"markets.symbolInfoBar.predFundingRate\")}\n value={<FundingRate symbol={symbol} />}\n hint={\n <Flex\n width={\"100%\"}\n itemAlign={\"center\"}\n direction=\"column\"\n gap={1}\n >\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 className=\"oui-w-full\" intensity={8} />\n {t(\"markets.symbolInfoBar.predFundingRate.tooltip\")}\n </Flex>\n }\n />\n <div ref={tailingElementRef}>\n <DataItem\n label={t(\"markets.openInterest\")}\n value={\n <>\n <Text.numeral rule=\"human\" dp={2}>\n {openInterest}\n </Text.numeral>\n <Text intensity={36}>{` USDC`}</Text>\n </>\n }\n hint={t(\"markets.openInterest.tooltip\")}\n />\n </div>\n </Flex>\n </div>\n <ScrollIndicator leading onClick={onScoll} visible={leadingVisible} />\n <ScrollIndicator tailing onClick={onScoll} visible={tailingVisible} />\n </div>\n </Flex>\n {props.trailing}\n </Flex>\n );\n};\n\ntype DataItemProps = {\n label: string;\n value: ReactNode;\n hint?: ReactNode;\n};\n\nconst DataItem: React.FC<DataItemProps> = (props) => {\n const { label, value, hint } = props;\n return (\n <Flex direction=\"column\" itemAlign=\"start\">\n <Tooltip\n open={hint ? undefined : false}\n content={hint}\n className=\"oui-max-w-[240px] oui-bg-base-6 \"\n arrow={{ className: \"oui-fill-base-6\" }}\n delayDuration={300}\n >\n <Text\n size=\"2xs\"\n intensity={36}\n className={cn(\n \"oui-data-label\",\n \"oui-whitespace-nowrap oui-break-normal\",\n hint &&\n \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\",\n )}\n >\n {label}\n </Text>\n </Tooltip>\n <Text\n size=\"2xs\"\n intensity={98}\n className={cn(\n \"oui-data-value\",\n \"oui-whitespace-nowrap oui-break-normal oui-leading-[20px]\",\n )}\n >\n {value}\n </Text>\n </Flex>\n );\n};\n\ntype ScrollIndicatorProps = {\n tailing?: boolean;\n leading?: boolean;\n visible?: boolean;\n onClick?: (direction: string) => void;\n};\n\nconst ScrollIndicator: React.FC<ScrollIndicatorProps> = (props) => {\n const { visible, leading, tailing, onClick } = props;\n if (!visible) {\n return null;\n }\n\n return (\n <button\n onClick={() => {\n onClick?.(leading ? \"left\" : \"right\");\n }}\n style={{\n background:\n \"linear-gradient(90deg, #07080A 0%, rgba(7, 8, 10, 0.60) 65%, rgba(7, 8, 10, 0.00) 100%)\",\n }}\n className={cn(\n \"oui-flex oui-w-[80px] oui-items-center\",\n \"oui-absolute oui-inset-y-0 oui-rounded-l\",\n leading && \"oui-left-0 oui-pl-1\",\n tailing && \"oui-right-0 oui-rotate-180 oui-pr-1\",\n )}\n >\n <ArrowLeftIcon className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast-80\" />\n </button>\n );\n};\n\nconst FundingRate: React.FC<{ symbol: string }> = ({ symbol }) => {\n const data = useFundingRate(symbol);\n\n if (data?.est_funding_rate === null) {\n return \"--\";\n }\n\n return (\n <div>\n <Text.numeral unit=\"%\" dp={4} className=\"oui-text-[#FF9A2E]\">\n {data.est_funding_rate!}\n </Text.numeral>\n <Text intensity={36} className=\"oui-tabular-nums\">\n {/* not need to translate */}\n {` in ${data.countDown}`}\n </Text>\n </div>\n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useFundingDetails,\n useFundingRate,\n useMarketsStore,\n useSymbolsInfo,\n useTickerStream,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport type UseSymbolInfoBarFullScriptOptions = {\n symbol: string;\n};\n\nexport type UseSymbolInfoBarFullScriptReturn = ReturnType<\n typeof useSymbolInfoBarFullScript\n>;\n\nexport function useSymbolInfoBarFullScript(\n options: UseSymbolInfoBarFullScriptOptions,\n) {\n const { symbol } = options;\n\n const data = useTickerStream(symbol);\n const fundingRate = useFundingRate(symbol);\n\n const favorite = useMarketsStore();\n\n const { data: fundingDetails, isLoading: isFundingLoading } =\n useFundingDetails(symbol);\n\n const fundingPeriod = useMemo(() => {\n if (!fundingDetails || isFundingLoading) {\n return \"-\";\n }\n return `${fundingDetails.funding_period}h`;\n }, [fundingDetails, isFundingLoading]);\n\n const capFunding = useMemo(() => {\n if (!fundingDetails || isFundingLoading) {\n return \"-\";\n }\n return `${new Decimal(fundingDetails.cap_funding).mul(100).toNumber()}%`;\n }, [fundingDetails, isFundingLoading]);\n\n const floorFunding = useMemo(() => {\n if (!fundingDetails || isFundingLoading) {\n return \"-\";\n }\n return `${new Decimal(fundingDetails.floor_funding).mul(100).toNumber()}%`;\n }, [fundingDetails, isFundingLoading]);\n\n const info = useSymbolsInfo();\n const quotoDp = info[symbol](\"quote_dp\");\n const [leadingVisible, setLeadingVisible] = useState(false);\n const [tailingVisible, setTailingVisible] = useState(false);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const leadingElementRef = useRef<HTMLDivElement>(null);\n const tailingElementRef = useRef<HTMLDivElement>(null);\n\n const isFavorite = useMemo(\n () => !!favorite.favorites.find((item) => item.name === symbol),\n [favorite.favorites, symbol],\n );\n\n const openInterest = useMemo(\n () =>\n new Decimal(data?.open_interest ?? 0)\n .mul(data?.index_price ?? 0)\n .toDecimalPlaces(2)\n .valueOf(),\n [data],\n );\n\n useEffect(() => {\n const intersectionObserver = new IntersectionObserver((entries) => {\n for (let index = 0; index < entries.length; index++) {\n const item = entries[index];\n if (item) {\n if (item.target === leadingElementRef.current) {\n setLeadingVisible(!item.isIntersecting);\n }\n\n if (item.target === tailingElementRef.current) {\n setTailingVisible(!item.isIntersecting);\n }\n }\n }\n });\n if (leadingElementRef.current) {\n intersectionObserver.observe(leadingElementRef.current);\n }\n\n if (tailingElementRef.current) {\n intersectionObserver.observe(tailingElementRef.current);\n }\n\n return () => {\n intersectionObserver.disconnect();\n };\n }, []);\n\n const onScoll = (direction: string) => {\n containerRef.current?.scrollBy({\n left: direction === \"left\" ? -100 : 100,\n behavior: \"smooth\",\n });\n };\n\n return {\n symbol,\n isFavorite,\n favorite,\n data,\n quotoDp,\n openInterest,\n fundingRate,\n containerRef,\n leadingElementRef,\n tailingElementRef,\n leadingVisible,\n tailingVisible,\n onScoll,\n fundingPeriod,\n capFunding,\n floorFunding,\n };\n}\n","import { FC } from \"react\";\nimport { MarketsProviderProps } from \"../marketsProvider\";\nimport {\n useSymbolInfoBarFullScript,\n UseSymbolInfoBarFullScriptOptions,\n} from \"./symbolInfoBarFull.script\";\nimport {\n SymbolInfoBarFull,\n SymbolInfoBarFullProps,\n} from \"./symbolInfoBarFull.ui\";\n\nexport type SymbolInfoBarFullWidgetPros = UseSymbolInfoBarFullScriptOptions &\n Pick<SymbolInfoBarFullProps, \"className\" | \"trailing\"> &\n Pick<MarketsProviderProps, \"onSymbolChange\">;\n\nexport const SymbolInfoBarFullWidget: FC<SymbolInfoBarFullWidgetPros> = (\n props,\n) => {\n const { symbol, ...rest } = props;\n\n const state = useSymbolInfoBarFullScript({ symbol });\n return <SymbolInfoBarFull {...state} {...rest} />;\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { CollapseMarkets } from \"../../components/collapseMarkets\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSideMarketsColumns } from \"../../components/sideMarkets/column\";\nimport { UseNewListingListReturn } from \"./newListingList.script\";\nimport { NewListingListWidgetProps } from \"./widget\";\n\nexport type NewListingListProps = UseNewListingListReturn &\n NewListingListWidgetProps;\n\nexport const NewListingList: FC<NewListingListProps> = (props) => {\n const { dataSource, favorite, onSort, loading, getColumns, collapsed } =\n props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const sideColumns = useSideMarketsColumns(favorite, false);\n\n const columns =\n typeof getColumns === \"function\"\n ? getColumns(favorite, false)\n : sideColumns;\n\n if (collapsed) {\n return <CollapseMarkets dataSource={dataSource} />;\n }\n\n return (\n <DataTable\n classNames={{\n root: props.tableClassNames?.root,\n body: props.tableClassNames?.body,\n header: cn(\"oui-h-9\", props.tableClassNames?.header),\n scroll: props.tableClassNames?.scroll,\n }}\n columns={columns}\n dataSource={dataSource}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[53px]\", props.rowClassName),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n manualSorting\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\n\nexport type UseNewListingListReturn = ReturnType<\n typeof useNewListingListScript\n>;\n\nexport const useNewListingListScript = () => {\n const [data, favorite] = useMarkets(MarketsType.NEW_LISTING);\n const [loading, setLoading] = useState(true);\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort();\n\n const dataSource = useMemo(() => {\n const searchResults = searchBySymbol(data, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [data, searchValue, getSortedList]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n };\n};\n","import { DataTableClassNames } from \"@orderly.network/ui\";\nimport { GetColumns } from \"../../type\";\nimport { useNewListingListScript } from \"./newListingList.script\";\nimport { NewListingList } from \"./newListingList.ui\";\n\nexport type NewListingListWidgetProps = {\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n};\n\nexport const NewListingListWidget: React.FC<NewListingListWidgetProps> = (\n props,\n) => {\n const state = useNewListingListScript();\n return <NewListingList {...state} {...props} />;\n};\n","import { FC } from \"react\";\nimport { Box, cn, DataTable } from \"@orderly.network/ui\";\nimport { CollapseMarkets } from \"../../components/collapseMarkets\";\nimport { FavoritesTabWidget } from \"../../components/favoritesTabs\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSideMarketsColumns } from \"../../components/sideMarkets/column\";\nimport { UseFavoritesListReturn } from \"./favoritesList.script\";\nimport type { FavoritesListWidgetProps } from \"./widget\";\n\nexport type FavoritesListProps = UseFavoritesListReturn &\n FavoritesListWidgetProps;\n\nexport const FavoritesList: FC<FavoritesListProps> = (props) => {\n const { dataSource, favorite, onSort, loading, getColumns, collapsed } =\n props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const sideColumns = useSideMarketsColumns(favorite, true);\n\n const columns =\n typeof getColumns === \"function\" ? getColumns(favorite, true) : sideColumns;\n\n if (collapsed) {\n return <CollapseMarkets dataSource={dataSource} />;\n }\n\n return (\n <>\n <Box px={3} className=\"oui-my-[6px]\">\n <FavoritesTabWidget favorite={favorite} size=\"sm\" />\n </Box>\n\n <DataTable\n classNames={{\n root: props.tableClassNames?.root,\n body: props.tableClassNames?.body,\n header: cn(\"oui-h-9\", props.tableClassNames?.header),\n scroll: props.tableClassNames?.scroll,\n }}\n columns={columns}\n dataSource={dataSource}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[53px]\", props.rowClassName),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n manualSorting\n />\n </>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\n\nexport type UseFavoritesListReturn = ReturnType<typeof useFavoritesListScript>;\n\nexport const useFavoritesListScript = () => {\n const [data, favorite] = useMarkets(MarketsType.FAVORITES);\n const [loading, setLoading] = useState(true);\n\n const { favorites, selectedFavoriteTab } = favorite;\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort();\n\n const dataSource = useMemo(() => {\n const filterList = favorites\n ?.filter(\n (item) =>\n item.tabs?.findIndex((tab) => tab.id === selectedFavoriteTab.id) !==\n -1,\n )\n ?.map((fav) => {\n const index = data?.findIndex((item) => item.symbol === fav.name);\n if (index !== -1) {\n return data[index];\n }\n return null;\n })\n ?.filter((item) => !!item);\n\n const searchResults = searchBySymbol(filterList, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [data, selectedFavoriteTab, favorites, searchValue, getSortedList]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n };\n};\n","import { DataTableClassNames } from \"@orderly.network/ui\";\nimport { GetColumns } from \"../../type\";\nimport { useFavoritesListScript } from \"./favoritesList.script\";\nimport { FavoritesList } from \"./favoritesList.ui\";\n\nexport type FavoritesListWidgetProps = {\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n};\n\nexport const FavoritesListWidget: React.FC<FavoritesListWidgetProps> = (\n props,\n) => {\n const state = useFavoritesListScript();\n return <FavoritesList {...state} {...props} />;\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { CollapseMarkets } from \"../../components/collapseMarkets\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSideMarketsColumns } from \"../../components/sideMarkets/column\";\nimport { UseRecentListReturn } from \"./recentList.script\";\nimport { RecentListWidgetProps } from \"./widget\";\n\nexport type RecentListProps = UseRecentListReturn & RecentListWidgetProps;\n\nexport const RecentList: FC<RecentListProps> = (props) => {\n const { dataSource, favorite, onSort, loading, getColumns, collapsed } =\n props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const sideColumns = useSideMarketsColumns(favorite, false);\n\n const columns =\n typeof getColumns === \"function\"\n ? getColumns(favorite, false)\n : sideColumns;\n\n if (collapsed) {\n return <CollapseMarkets dataSource={dataSource} />;\n }\n\n return (\n <DataTable\n classNames={{\n root: props.tableClassNames?.root,\n body: props.tableClassNames?.body,\n header: cn(\"oui-h-9\", props.tableClassNames?.header),\n scroll: props.tableClassNames?.scroll,\n }}\n columns={columns}\n dataSource={dataSource}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[53px]\", props.rowClassName),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n manualSorting\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\n\nexport type UseRecentListReturn = ReturnType<typeof useRecentListScript>;\n\nexport const useRecentListScript = () => {\n const [data, favorite] = useMarkets(MarketsType.RECENT);\n const [loading, setLoading] = useState(true);\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort();\n\n const dataSource = useMemo(() => {\n const searchResults = searchBySymbol(data, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [data, searchValue, getSortedList]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n };\n};\n","import { DataTableClassNames } from \"@orderly.network/ui\";\nimport { GetColumns } from \"../../type\";\nimport { useRecentListScript } from \"./recentList.script\";\nimport { RecentList } from \"./recentList.ui\";\n\nexport type RecentListWidgetProps = {\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n};\n\nexport const RecentListWidget: React.FC<RecentListWidgetProps> = (props) => {\n const state = useRecentListScript();\n return <RecentList {...state} {...props} />;\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, TabPanel, Tabs, useScreen } from \"@orderly.network/ui\";\nimport {\n LeftNavProps,\n RouterAdapter,\n LeftNavUI,\n} from \"@orderly.network/ui-scaffold\";\nimport {\n MarketsProvider,\n MarketsProviderProps,\n} from \"../../components/marketsProvider\";\nimport { MarketsPageTab } from \"../../type\";\nimport { FundingWidget } from \"./funding/funding.widget\";\nimport { MarketsDataListWidget } from \"./marketsDataList\";\nimport { MarketsHeaderWidget } from \"./marketsHeader/marketsHeader.widget\";\n\nexport type MarketsHomePageProps = MarketsProviderProps & {\n className?: string;\n};\n\nexport const MarketsHomePage: FC<MarketsHomePageProps> = (props) => {\n const { isMobile } = useScreen();\n\n const [activeTab, setActiveTab] = useState<MarketsPageTab>(\n MarketsPageTab.Markets,\n );\n\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n navProps={props.navProps}\n comparisonProps={props.comparisonProps}\n >\n <div\n id=\"oui-markets-home-page\"\n className={cn(\"oui-font-semibold\", props.className)}\n >\n {isMobile ? (\n <MarketsMobileContent\n activeTab={activeTab}\n onTabChange={setActiveTab}\n navProps={props.navProps}\n />\n ) : (\n <MarketsDesktopContent\n activeTab={activeTab}\n onTabChange={setActiveTab}\n />\n )}\n </div>\n </MarketsProvider>\n );\n};\n\ntype MarketsContentProps = {\n activeTab: MarketsPageTab;\n onTabChange: (value: MarketsPageTab) => void;\n // only for mobile\n navProps?: {\n logo?: {\n src: string;\n alt: string;\n };\n routerAdapter?: RouterAdapter;\n leftNav?: LeftNavProps;\n };\n};\n\nconst MarketsDesktopContent = (props: MarketsContentProps) => {\n const { t } = useTranslation();\n\n return (\n <Box p={6}>\n <Tabs\n size=\"xl\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (value: string) => void}\n >\n <TabPanel\n title={t(\"common.markets\")}\n value={MarketsPageTab.Markets}\n testid=\"oui-testid-markets-tab\"\n >\n <MarketsHeaderWidget className=\"oui-mt-4\" />\n <MarketsDataListWidget />\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n value={MarketsPageTab.Funding}\n testid=\"oui-testid-funding-tab\"\n >\n <FundingWidget />\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n\nconst MarketsMobileContent = (props: MarketsContentProps) => {\n const { t } = useTranslation();\n\n return (\n <Tabs\n variant=\"text\"\n size=\"xl\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (value: string) => void}\n classNames={{\n tabsListContainer: \"oui-border-0\",\n tabsList: \"oui-mx-6 oui-my-2\",\n trigger: cn(\n \"oui-text-2xl oui-font-bold\",\n \"data-[state=active]:after:oui-bg-transparent!\",\n ),\n tabsContent: \"oui-px-3\",\n }}\n leading={\n props.navProps?.leftNav && (\n <LeftNavUI\n className=\"oui-ml-3 -oui-mr-4\"\n {...props?.navProps?.leftNav}\n logo={props?.navProps?.logo}\n routerAdapter={props?.navProps?.routerAdapter}\n />\n )\n }\n >\n <TabPanel\n title={t(\"common.markets\")}\n value=\"markets\"\n testid=\"oui-testid-markets-tab\"\n >\n <MarketsHeaderWidget className=\"oui-mt-2\" />\n <MarketsDataListWidget />\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n value=\"funding\"\n testid=\"oui-testid-funding-tab\"\n >\n <FundingWidget />\n </TabPanel>\n </Tabs>\n );\n};\n","import { useScreen } from \"@orderly.network/ui\";\nimport { MobileFunding } from \"./funding.mobile.ui\";\nimport { useFundingScript } from \"./funding.script\";\nimport { Funding } from \"./funding.ui\";\n\nexport const FundingWidget = () => {\n const state = useFundingScript();\n const { isMobile } = useScreen();\n return isMobile ? <MobileFunding {...state} /> : <Funding {...state} />;\n};\n","import type { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { FundingComparisonWidget } from \"../../../components/fundingComparison\";\nimport { FundingOverviewWidget } from \"../../../components/fundingOverview\";\nimport { SearchInput } from \"../../../components/searchInput\";\nimport { FundingScriptReturn } from \"./funding.script\";\n\nexport const MobileFunding: FC<FundingScriptReturn> = (props) => {\n const { t } = useTranslation();\n\n const search = (\n <SearchInput\n classNames={{\n root: cn(\"oui-mb-2 oui-mt-5\"),\n }}\n />\n );\n\n return (\n <Box\n intensity={900}\n p={3}\n mt={2}\n mb={5}\n r=\"xl\"\n height=\"100%\"\n className=\"oui-markets-funding-list\"\n >\n <Tabs\n variant=\"contained\"\n size=\"lg\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (value: string) => void}\n >\n <TabPanel\n title={t(\"common.overview\")}\n value=\"overview\"\n testid=\"oui-testid-funding-overview-tab\"\n >\n <>\n {search}\n <FundingOverviewWidget />\n </>\n </TabPanel>\n <TabPanel\n title={t(\"markets.funding.comparison\")}\n value=\"comparison\"\n testid=\"oui-testid-funding-comparison-tab\"\n >\n <>\n {search}\n <FundingComparisonWidget />\n </>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { useState } from \"react\";\nimport { FundingTabName } from \"../../../type\";\n\nexport type FundingScriptReturn = ReturnType<typeof useFundingScript>;\n\nexport function useFundingScript() {\n const [activeTab, setActiveTab] = useState<FundingTabName>(\n FundingTabName.Overview,\n );\n\n return {\n activeTab,\n onTabChange: setActiveTab,\n };\n}\n","import type { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { FundingComparisonWidget } from \"../../../components/fundingComparison\";\nimport { FundingOverviewWidget } from \"../../../components/fundingOverview\";\nimport { SearchInput } from \"../../../components/searchInput\";\nimport { FundingScriptReturn } from \"./funding.script\";\n\nexport const Funding: FC<FundingScriptReturn> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Box\n intensity={900}\n p={6}\n mt={4}\n r=\"2xl\"\n className=\"oui-markets-funding-list\"\n >\n <Tabs\n variant=\"contained\"\n size=\"lg\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (value: string) => void}\n trailing={\n <SearchInput classNames={{ root: \"oui-my-1 oui-w-[240px]\" }} />\n }\n >\n <TabPanel\n title={t(\"common.overview\")}\n value=\"overview\"\n testid=\"oui-testid-funding-overview-tab\"\n >\n <FundingOverviewWidget />\n </TabPanel>\n <TabPanel\n title={t(\"markets.funding.comparison\")}\n value=\"comparison\"\n testid=\"oui-testid-funding-comparison-tab\"\n >\n <FundingComparisonWidget />\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/marketsProvider/index.tsx","../src/icons.tsx","../src/pages/home/marketsHeader/marketsHeader.ui.tsx","../src/utils.ts","../src/pages/home/marketsHeader/marketsHeader.script.tsx","../src/pages/home/marketsHeader/marketsHeader.mobile.ui.tsx","../src/pages/home/marketsHeader/marketsHeader.widget.tsx","../src/components/collapseMarkets/index.tsx","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.ui.tsx","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.script.ts","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.widget.tsx","../src/components/favoritesDropdownMenu/index.ts","../src/components/sideMarkets/column.tsx","../src/components/marketsList/marketsList.ui.tsx","../src/type.ts","../src/components/marketsList/marketsList.script.ts","../src/components/marketsList/marketsList.widget.tsx","../src/components/marketsList/index.tsx","../src/components/searchInput/index.tsx","../src/components/shared/column.tsx","../src/components/favoritesEmpty/index.tsx","../src/components/favoritesTabs/favoritesTabs.ui.tsx","../src/components/favoritesTabs/favoritesTabs.script.ts","../src/components/favoritesTabs/favoritesTabs.widget.tsx","../src/components/favoritesTabs/index.ts","../src/components/shared/hooks/useFavoritesExtraProps.tsx","../src/pages/home/marketsDataList/marketsDataList.mobile.ui.tsx","../src/components/shared/hooks/useTabSort.ts","../src/pages/home/marketsDataList/marketsDataList.script.ts","../src/components/marketsListFull/column.tsx","../src/components/favoritesListFull/favoritesListFull.ui.tsx","../src/components/favoritesListFull/favoritesListFull.script.ts","../src/components/favoritesListFull/favoritesListFull.widget.tsx","../src/components/favoritesListFull/index.tsx","../src/components/marketsListFull/marketsListFull.ui.tsx","../src/components/marketsListFull/marketsListFull.script.ts","../src/components/marketsListFull/marketsListFull.widget.tsx","../src/components/marketsListFull/index.tsx","../src/pages/home/marketsDataList/marketsDataList.ui.tsx","../src/pages/home/marketsDataList/marketsDataList.widget.tsx","../src/pages/home/marketsDataList/index.ts","../src/components/expandMarkets/expandMarkets.ui.tsx","../src/constant.ts","../src/components/expandMarkets/expandMarkets.script.ts","../src/components/expandMarkets/expandMarkets.widget.tsx","../src/components/expandMarkets/index.ts","../src/components/fundingOverview/columns.tsx","../src/components/fundingOverview/fundingOverview.ui.tsx","../src/components/fundingOverview/fundingOverview.script.tsx","../src/components/fundingOverview/fundingOverview.mobile.ui.tsx","../src/components/fundingOverview/fundingOverview.widget.tsx","../src/components/fundingOverview/index.tsx","../src/components/fundingComparison/useEXchanges.ts","../src/components/fundingComparison/columns.tsx","../src/components/fundingComparison/fundingComparison.ui.tsx","../src/components/fundingComparison/fundingComparison.script.tsx","../src/components/fundingComparison/fundingComparison.mobile.ui.tsx","../src/components/fundingComparison/fundingComparison.widget.tsx","../src/components/fundingComparison/index.tsx","../src/components/sideMarkets/sideMarkets.ui.tsx","../src/components/dropDownMarkets/column.tsx","../src/components/dropDownMarkets/dropDownMarkets.ui.tsx","../src/components/dropDownMarkets/dropDownMarkets.script.ts","../src/components/dropDownMarkets/dropDownMarkets.widget.tsx","../src/components/dropDownMarkets/index.ts","../src/components/symbolInfoBarFull/dataItem.ui.tsx","../src/pages/home/funding/funding.mobile.ui.tsx","../src/pages/home/funding/funding.script.tsx","../src/pages/home/funding/funding.ui.tsx","../src/pages/home/funding/funding.widget.tsx","../src/pages/home/marketsHeader/index.ts","../src/index.ts","../src/components/sideMarkets/index.ts","../src/components/sideMarkets/sideMarkets.script.ts","../src/components/sideMarkets/sideMarkets.widget.tsx","../src/components/marketsSheet/marketsSheet.ui.tsx","../src/components/marketsSheet/column.tsx","../src/components/marketsSheet/marketsSheet.script.ts","../src/components/marketsSheet/marketsSheet.widget.tsx","../src/components/symbolInfoBar/symbolInfoBar.ui.tsx","../src/components/symbolInfoBar/symbolInfoBar.script.ts","../src/components/symbolInfoBar/symbolInfoBar.widget.tsx","../src/components/symbolInfoBarFull/symbolInfoBarFull.ui.tsx","../src/components/symbolInfoBarFull/symbolInfoBarFull.script.ts","../src/components/symbolInfoBarFull/symbolInfoBarFull.widget.tsx","../src/deprecated/newListingList/newListingList.ui.tsx","../src/deprecated/newListingList/newListingList.script.ts","../src/deprecated/newListingList/widget.tsx","../src/deprecated/favoritesList/favoritesList.ui.tsx","../src/deprecated/favoritesList/favoritesList.script.ts","../src/deprecated/favoritesList/widget.tsx","../src/deprecated/recentList/recentList.ui.tsx","../src/deprecated/recentList/recentList.script.ts","../src/deprecated/recentList/widget.tsx","../src/pages/home/page.tsx"],"names":["createContext","useState","useContext","useCallback","useMemo","jsx","MarketsContext","MarketsProvider","useMarketsContext","init_marketsProvider","__esmMin","props","symbol","comparisonProps","children","onSymbolChange","searchValue","setSearchValue","clearSearchValue","memoizedValue","jsxs","EditIcon","TrashIcon","AllMarketsIcon","NewListingsIcon","FavoritesIcon","UnFavoritesIcon","SearchIcon","MoveToTopIcon","OrderlyIcon","FavoritesIcon2","UnFavoritesIcon2","TopIcon","DeleteIcon","AddIcon","ActiveAddIcon","ExpandIcon","CollapseIcon","TriangleDownIcon","ArrowLeftIcon","init_icons","useTranslation","Box","cn","Flex","Text","Decimal","MarketsHeader","BlockList","BlockItem","CardItem","ListItem","ScrollIndicator","init_marketsHeader_ui","emblaRef","emblaApi","scrollIndex","enableScroll","news","gainers","losers","total24Amount","totalOpenInterest","tvl","favorite","t","cls","onSymbol","item","list","index","scrollPrev","scrollNext","useEffect","formatSymbol","sortList","sort","sortKey","sortOrder","sortedList","a","b","comparison","compareValues","useSort","initialSort","onSortChange","setSort","onSort","options","nextSort","getSortedList","escapeRegExp","string","searchBySymbol","formatString","escapedSearchValue","reg","searchValueLower","exactMatches","startsWithMatches","otherMatches","formattedSymbol","symbolLower","compareSymbols","symbolA","symbolB","useSize","width","setWidth","height","setHeight","handleResize","init_utils","aValue","bValue","aStr","bStr","aNum","bNum","aIsNumber","bIsNumber","aIsDate","bIsDate","aDate","bDate","useEmblaCarousel","useMarkets","useQuery","MarketsType","useDataSource","markets","balance","prevValue","curValue","total_holding","useMarketsHeaderScript","init_marketsHeader_script","setScrollIndex","data","TabPanel","Tabs","MobileMarketsHeader","init_marketsHeader_mobile_ui","activeTab","setActiveTab","marketsHeader_widget_exports","__export","MarketsHeaderWidget","useScreen","init_marketsHeader_widget","state","isMobile","TokenIcon","Tooltip","Badge","CollapseMarkets","init_collapseMarkets","content","Button","CheckedSquareFillIcon","CheckSquareEmptyIcon","PlusIcon","CloseIcon","Divider","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","Input","CloseCircleFillIcon","FavoritesDropdownMenu","init_favoritesDropdownMenu_ui","favoriteTabs","open","onOpenChange","inputVisible","selectedTabs","value","onValueChange","hide","hideInput","showInput","onCheck","addTab","confirm","overLen","renderInput","overTabs","header","checked","tab","footer","e","useFavoritesDropdownMenuScript","favorites","updateFavoriteTabs","updateSymbolFavoriteState","setOpen","setInputVisible","setValue","setSelectedTabs","clearState","newTab","find","init_favoritesDropdownMenu_script","FavoritesDropdownMenuWidget","init_favoritesDropdownMenu_widget","favoritesDropdownMenu_exports","init_favoritesDropdownMenu","useSideMarketsColumns","init_column","isFavoriteList","record","favoritesIcon","onDelSymbol","iconCls","actions","DataTable","Fragment","MarketsList","init_marketsList_ui","loading","dataSource","getColumns","panelSize","isFavoritesList","renderHeader","emptyView","sideColumns","columns","MarketsPageTab","MarketsTabName","FundingTabName","init_type","MarketsTypeMap","useMarketsListScript","init_marketsList_script","setLoading","selectedFavoriteTab","filterList","searchResults","MarketsListWidget","init_marketsList_widget","marketsList_exports","init_marketsList","searchInput_exports","SearchInput","useRef","init_searchInput","classNames","suffix","isComposingRef","onSearchValueChange","handleCompositionStart","handleCompositionEnd","event","i18n","getSymbolColumn","getLastColumn","get24hPercentageColumn","EmptyStateIcon","FavoritesEmpty","init_favoritesEmpty","modal","FavoritesTab","init_favoritesTabs_ui","container","inputRef","inputWidth","spanRef","editing","updateCurTab","onEdit","delTab","size","scrollable","updateSelectedFavoriteTab","addIconWidth","tabHeight","gradientColor","onDel","onKeyUp","renderActions","renderAdd","icon","isActive","renderContent","textProps","useFavoritesTabScript","updateFavorites","setEditing","setScrollable","scrollView","setInputWidth","updateScrollLayout","scrollWidth","clientWidth","scrollToRight","selectedTab","_favorites","tabs","rect","offset","init_favoritesTabs_script","FavoritesTabWidget","init_favoritesTabs_widget","className","rest","init_favoritesTabs","useFavoritesProps","dataFilter","fav","getFavoritesProps","type","renderEmptyView","init_useFavoritesExtraProps","MobileMarketsDataList","init_marketsDataList_mobile_ui","onTabChange","tabSort","onTabSort","renderTab","useSessionStorage","useTabSort","setTabSort","init_useTabSort","useMarketsDataListScript","MOBILE_MARKETS_TAB_SORT_STORAGE_KEY","init_marketsDataList_script","useMarketsListFullColumns","button","Trans","FavoritesListFull","init_favoritesListFull_ui","pagination","usePagination","useFavoritesListFullScript","init_favoritesListFull_script","pageSize","setPage","filterData","FavoritesListFullWidget","init_favoritesListFull_widget","favoritesListFull_exports","init_favoritesListFull","MarketsListFull","init_marketsListFull_ui","useMarketsListFullScript","init_marketsListFull_script","searchList","sortStore","MarketsListFullWidget","init_marketsListFull_widget","marketsListFull_exports","init_marketsListFull","React","LazySearchInput","LazyFavoritesListFullWidget","LazyMarketsListFullWidget","MarketsDataList","init_marketsDataList_ui","mod","MarketsDataListWidget","init_marketsDataList_widget","marketsDataList_exports","init_marketsDataList","LazyMarketsListWidget","ExpandMarkets","init_expandMarkets_ui","SIDE_MARKETS_TAB_SORT_STORAGE_KEY","init_constant","useExpandMarketsScript","init_expandMarkets_script","ExpandMarketsWidget","init_expandMarkets_widget","init_expandMarkets","Picker","Select","createFundingRenderer","useFundingOverviewColumns","FundingPeriodSelect","init_columns","dp","selectedPeriod","setSelectedPeriod","FundingOverview","init_fundingOverview_ui","isLoading","useFundingRateHistory","useFundingRates","getFundingInterval","next_funding_time","last_funding_rate_timestamp","diff","useFundingOverviewScript","init_fundingOverview_script","marketData","fundingHistory","isHistoryLoading","getPositiveRates","fundingRates","processedData","posRates","acc","period","history","h","fundingRate","fundingInterval","filteredData","MobileFundingOverview","init_fundingOverview_mobile_ui","FundingOverviewWidget","init_fundingOverview_widget","fundingOverview_exports","init_fundingOverview","useEXchanges","init_useEXchanges","brokerName","brokerIconSrc","CDN_PREFIX","useFundingColumns","exchanges","getImgSrc","val","imgSrc","FundingComparison","init_fundingComparison_ui","useMarketsStream","getOpenInterest","open_interest","index_price","useFundingComparisonScript","init_fundingComparison_script","futures","row","target","result","exchangeName","rate","wooFiRate","otherRate","exchange","MobileFundingComparison","init_fundingComparison_mobile_ui","FundingComparisonWidget","init_fundingComparison_widget","fundingComparison_exports","init_fundingComparison","sideMarkets_ui_exports","IndicatorIcon","SideMarkets","SideMarketsHeader","pick","EyeCloseIcon","init_sideMarkets_ui","ref","resizeable","onPanelSizeChange","useDropDownMarketsColumns","DropDownMarkets","DropDownMarketsConetnt","init_dropDownMarkets_ui","search","useLocalStorage","useDropDownMarketsScript","DROPDOWN_MARKETS_SEL_TAB_KEY","DROPDOWN_MARKETS_TAB_SORT_STORAGE_KEY","init_dropDownMarkets_script","DropDownMarketsWidget","init_dropDownMarkets_widget","dropDownMarkets_exports","init_dropDownMarkets","dataItem_ui_exports","DataItem","init_dataItem_ui","label","hint","MobileFunding","init_funding_mobile_ui","useFundingScript","init_funding_script","LazyFundingOverviewWidget","LazyFundingComparisonWidget","Funding","init_funding_ui","funding_widget_exports","FundingWidget","init_funding_widget","SIDE_MARKETS_SEL_TAB_KEY","useSideMarketsScript","setPanelSize","LazySideMarkets","SideMarketsWidget","getMarketsSheetColumns","MarketsSheet","isFavorites","MARKETS_SHEET_SEL_TAB_KEY","useMarketsSheetScript","MarketsSheetWidget","SymbolInfoBar","leverage","symbolView","useSymbolsInfo","useTickerStream","useSymbolInfoBarScript","symbolsInfo","info","baseImr","getLeverage","base_imr","SymbolInfoBarWidget","useFundingRate","LazyDropDownMarketsWidget","LazyFavoritesDropdownMenuWidget","LazyDataItem","SymbolInfoBarFull","isFavorite","quotoDp","openInterest","containerRef","leadingElementRef","tailingElementRef","leadingVisible","tailingVisible","onScoll","fundingPeriod","capFunding","floorFunding","favoriteIcon","price","change","FundingRate","visible","leading","tailing","onClick","useFundingDetails","useMarketsStore","useSymbolInfoBarFullScript","fundingDetails","isFundingLoading","setLeadingVisible","setTailingVisible","intersectionObserver","entries","direction","SymbolInfoBarFullWidget","NewListingList","collapsed","useNewListingListScript","NewListingListWidget","FavoritesList","useFavoritesListScript","FavoritesListWidget","RecentList","useRecentListScript","RecentListWidget","LeftNavUI","LazyMarketsHeaderWidget","LazyMarketsDataListWidget","LazyFundingWidget","MarketsHomePage","MarketsMobileContent","MarketsDesktopContent"],"mappings":"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","sourcesContent":["import {\n FC,\n createContext,\n PropsWithChildren,\n useState,\n useContext,\n useCallback,\n useMemo,\n} from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { LeftNavProps, RouterAdapter } from \"@orderly.network/ui-scaffold\";\n\ntype MarketsContextState = {\n symbol?: string;\n searchValue?: string;\n onSearchValueChange?: (searchValue: string) => void;\n clearSearchValue?: () => void;\n} & MarketsProviderProps;\n\nexport const MarketsContext = createContext<MarketsContextState>({});\n\nexport type MarketsProviderProps = {\n symbol?: string;\n onSymbolChange?: (symbol: API.Symbol) => void;\n // only for mobile\n navProps?: {\n logo?: {\n src: string;\n alt: string;\n };\n routerAdapter?: RouterAdapter;\n leftNav?: LeftNavProps;\n };\n comparisonProps?: {\n /**\n * Set Name of Exchanges in the comparison list.\n * @default 'Orderly'\n */\n exchangesName?: string;\n /**\n * Set Icon URL of Exchanges in the comparison list.\n * @default \"\"\n */\n exchangesIconSrc?: string;\n };\n};\n\nexport const MarketsProvider: FC<PropsWithChildren<MarketsProviderProps>> = (\n props,\n) => {\n const { symbol, comparisonProps, children, onSymbolChange } = props;\n const [searchValue, setSearchValue] = useState(\"\");\n\n const clearSearchValue = useCallback(() => {\n setSearchValue(\"\");\n }, []);\n\n const memoizedValue = useMemo<MarketsContextState>(() => {\n return {\n searchValue,\n onSearchValueChange: setSearchValue,\n clearSearchValue,\n symbol: symbol,\n onSymbolChange: onSymbolChange,\n comparisonProps: comparisonProps,\n };\n }, [searchValue, symbol, onSymbolChange, setSearchValue, comparisonProps]);\n\n return (\n <MarketsContext.Provider value={memoizedValue}>\n {children}\n </MarketsContext.Provider>\n );\n};\n\nexport const useMarketsContext = () => {\n return useContext<MarketsContextState>(MarketsContext);\n};\n","import React, { FC, PropsWithChildren, SVGProps } from \"react\";\n\nexport const EditIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"16\"\n height=\"16\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 0h16v16H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M3.333 12.667h.95L10.8 6.15l-.95-.95-6.517 6.517zM2.667 14a.65.65 0 0 1-.475-.192.65.65 0 0 1-.192-.475v-1.616a1.32 1.32 0 0 1 .383-.934l8.417-8.4q.2-.183.442-.283.24-.1.508-.1.267 0 .517.1.249.1.433.3l.917.933q.2.184.291.434a1.44 1.44 0 0 1 0 1.008 1.25 1.25 0 0 1-.291.442l-8.4 8.4a1.32 1.32 0 0 1-.933.383zm7.65-8.317L9.85 5.2l.95.95z\" />\n </g>\n </svg>\n);\n\nexport const TrashIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M7.205 1.334c-.345 0-.674.136-.918.38L6.001 2H2.667a.667.667 0 1 0 0 1.334h10.667a.667.667 0 1 0 0-1.334h-3.333l-.287-.286a1.3 1.3 0 0 0-.918-.38zM2.911 4.667l1.018 8.842c.088.66.656 1.158 1.322 1.158h5.498c.666 0 1.235-.497 1.323-1.163l1.019-8.837z\" />\n </svg>\n);\n\nexport const AllMarketsIcon: 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 <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"12\"\n height=\"12\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 0h12v12H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M8.5 10a.48.48 0 0 1-.356-.144A.48.48 0 0 1 8 9.5V7q0-.213.144-.356A.48.48 0 0 1 8.5 6.5h1q.212 0 .356.144A.48.48 0 0 1 10 7v2.5q0 .212-.144.356A.48.48 0 0 1 9.5 10zm-3 0a.48.48 0 0 1-.356-.144A.48.48 0 0 1 5 9.5v-7q0-.212.144-.356A.48.48 0 0 1 5.5 2h1q.213 0 .356.144A.48.48 0 0 1 7 2.5v7q0 .212-.144.356A.48.48 0 0 1 6.5 10zm-3 0a.48.48 0 0 1-.356-.144A.48.48 0 0 1 2 9.5V5q0-.213.144-.356A.48.48 0 0 1 2.5 4.5h1q.212 0 .356.144A.48.48 0 0 1 4 5v4.5q0 .212-.144.356A.48.48 0 0 1 3.5 10z\" />\n </g>\n </svg>\n);\n\nexport const NewListingsIcon: 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 <path d=\"M5.993.958a.416.416 0 0 0-.41.422v.416a.416.416 0 1 0 .832 0V1.38a.416.416 0 0 0-.422-.422M2.749 2.29a.416.416 0 0 0-.29.714l.291.292a.416.416 0 1 0 .589-.588l-.292-.292a.42.42 0 0 0-.298-.126m6.489 0a.42.42 0 0 0-.286.126l-.292.292a.416.416 0 1 0 .588.588l.292-.292a.416.416 0 0 0-.302-.714m-3.239.753a2.895 2.895 0 0 0-2.913 2.914A2.86 2.86 0 0 0 4.751 8.58v1.123c0 .458.374.833.832.833h.832a.835.835 0 0 0 .833-.833V8.58a2.86 2.86 0 0 0 1.665-2.622 2.895 2.895 0 0 0-2.914-2.914M1.421 5.541a.416.416 0 1 0 0 .833h.417a.416.416 0 1 0 0-.833zm8.74 0a.416.416 0 1 0 0 .833h.416a.417.417 0 1 0 0-.833zM3.037 8.492a.42.42 0 0 0-.287.126l-.291.292a.416.416 0 1 0 .588.588l.292-.292a.416.416 0 0 0-.302-.714m5.913 0a.416.416 0 0 0-.29.714l.292.292a.416.416 0 1 0 .588-.588l-.292-.292a.42.42 0 0 0-.298-.126\" />\n </svg>\n);\n\nexport const FavoritesIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"21\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 .5h20v20H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"m10 14.074-3.2 1.913a.6.6 0 0 1-.332.068.6.6 0 0 1-.277-.101.5.5 0 0 1-.186-.256.5.5 0 0 1-.005-.336l.84-3.556-2.82-2.394a.5.5 0 0 1-.174-.281.6.6 0 0 1 .013-.315.5.5 0 0 1 .173-.252.55.55 0 0 1 .305-.112l3.693-.33 1.467-3.393a.57.57 0 0 1 .211-.255A.54.54 0 0 1 10 4.39q.16 0 .292.083.131.082.211.255l1.467 3.414 3.693.309q.178.014.305.123.126.11.173.262t.002.304a.56.56 0 0 1-.183.27l-2.8 2.395.84 3.556a.5.5 0 0 1-.005.336.5.5 0 0 1-.186.256.6.6 0 0 1-.277.101.6.6 0 0 1-.332-.068z\" />\n </g>\n </svg>\n);\n\nexport const UnFavoritesIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"21\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 .5h20v20H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M7.333 14.396 10 12.813l2.688 1.583-.709-3 2.313-1.98-3.063-.27L10 6.292 8.77 9.146l-3.062.27 2.334 1.98zM10 14.074l-3.2 1.913a.6.6 0 0 1-.332.068.6.6 0 0 1-.277-.101.5.5 0 0 1-.186-.256.5.5 0 0 1-.005-.336l.84-3.556-2.82-2.394a.5.5 0 0 1-.174-.281.6.6 0 0 1 .013-.315.5.5 0 0 1 .173-.252.55.55 0 0 1 .305-.112l3.693-.33 1.467-3.393a.57.57 0 0 1 .211-.255A.54.54 0 0 1 10 4.39q.16 0 .292.083.131.082.211.255l1.467 3.414 3.693.309q.178.014.305.123.126.11.173.262t.002.304a.56.56 0 0 1-.183.27l-2.8 2.395.84 3.556a.5.5 0 0 1-.005.336.5.5 0 0 1-.186.256.6.6 0 0 1-.277.101.6.6 0 0 1-.332-.068z\" />\n </g>\n </svg>\n);\n\nexport const CirclePlusIcon: 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 <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"18\"\n height=\"18\"\n >\n <path fill=\"#D9D9D9\" d=\"M0 0h18v18H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M8.325 12.6h1.35V9.675H12.6v-1.35H9.675V5.4h-1.35v2.925H5.4v1.35h2.925zm.68 3.6a7 7 0 0 1-2.799-.562A7.3 7.3 0 0 1 3.91 14.09a7.3 7.3 0 0 1-1.546-2.296A7 7 0 0 1 1.8 8.99q0-1.49.563-2.794a7.26 7.26 0 0 1 3.843-3.834A7 7 0 0 1 9.009 1.8q1.49 0 2.794.562 1.303.563 2.288 1.547a7.3 7.3 0 0 1 1.547 2.292q.561 1.308.562 2.794a7 7 0 0 1-.562 2.799 7.3 7.3 0 0 1-1.547 2.297 7.3 7.3 0 0 1-2.292 1.547 7 7 0 0 1-2.794.562M9 14.85q2.437 0 4.144-1.706Q14.85 11.437 14.85 9t-1.706-4.144Q11.437 3.15 9 3.15T4.856 4.856 3.15 9t1.706 4.144Q6.563 14.85 9 14.85\" />\n </g>\n </svg>\n);\n\nexport const SearchIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M5.841 1.14a4.667 4.667 0 0 0 0 9.333 4.74 4.74 0 0 0 2.875-.975l2.54 2.56a.6.6 0 0 0 .838 0 .6.6 0 0 0 0-.838L9.537 8.677a4.72 4.72 0 0 0 .971-2.871 4.667 4.667 0 0 0-4.667-4.667m0 1.166a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7\" />\n </svg>\n);\n\nexport const MoveToTopIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10 5.5a.76.76 0 0 0-.583.25l-4.334 4c0 .083-.083.25-.083.333 0 .25.167.417.417.417h2.916v6.667c0 .416.334.833.834.833h1.666c.5 0 .834-.417.834-.833V10.5h2.916c.25 0 .417-.167.417-.417 0-.083-.083-.25-.083-.333l-4.25-4.084c-.25-.083-.417-.166-.667-.166M2.177 3.06A.8.8 0 0 1 2.5 3h15a.834.834 0 1 1 0 1.667h-15a.833.833 0 0 1-.323-1.607\" />\n </svg>\n);\n\nexport const OrderlyIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"13\"\n viewBox=\"0 0 12 13\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.015.34h-.029a5.98 5.98 0 0 0-3.93 1.477c-.074.065-.027.184.072.184h7.745c.099 0 .146-.119.072-.184A5.98 5.98 0 0 0 6.015.341M3.48 7.866a.23.23 0 0 1 .187.1A2.85 2.85 0 0 0 6 9.178a2.85 2.85 0 0 0 2.334-1.213.23.23 0 0 1 .186-.1h3.104c.09 0 .155.086.13.172A6 6 0 0 1 6 12.327a6 6 0 0 1-5.755-4.29.134.134 0 0 1 .13-.172zM8.26 4.6a.29.29 0 0 0 .229.116h3.11c.09 0 .156-.086.13-.173a6 6 0 0 0-1.106-2.03.22.22 0 0 0-.165-.077H1.543a.22.22 0 0 0-.165.077 6 6 0 0 0-1.105 2.03.134.134 0 0 0 .13.173h3.11A.29.29 0 0 0 3.74 4.6 2.85 2.85 0 0 1 6 3.488c.92 0 1.738.436 2.26 1.112m.414 2.717c-.02.055.02.115.079.115h3.033a.135.135 0 0 0 .133-.112 6 6 0 0 0-.015-2.058.135.135 0 0 0-.133-.11H8.72c-.06 0-.1.061-.078.117a2.83 2.83 0 0 1 .032 2.048m-5.427.115c.06 0 .1-.06.079-.115a2.84 2.84 0 0 1 .032-2.048.085.085 0 0 0-.078-.118H.23a.135.135 0 0 0-.134.11A6 6 0 0 0 .08 7.32c.01.065.067.112.133.112z\"\n />\n </svg>\n);\n\nexport const FavoritesIcon2: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"13\"\n viewBox=\"0 0 12 13\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 1.72c-.286 0-.577.178-.75.532L4.2 4.438l-2.42.344c-.78.108-1.03.872-.47 1.42l1.75 1.703-.407 2.39c-.133.773.508 1.24 1.203.874.268-.142 1.648-.857 2.155-1.124l2.155 1.124c.695.367 1.339-.1 1.202-.874l-.421-2.39 1.749-1.702c.565-.547.326-1.31-.453-1.421l-2.436-.344L6.76 2.252c-.172-.354-.464-.531-.75-.531\" />\n </svg>\n);\n\nexport const UnFavoritesIcon2: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"13\"\n viewBox=\"0 0 12 13\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 1.72c-.286 0-.577.178-.75.532L4.2 4.438l-2.42.344c-.78.108-1.03.872-.47 1.42l1.75 1.703-.407 2.39c-.133.773.508 1.24 1.203.874.268-.142 1.648-.857 2.155-1.124l2.155 1.124c.695.367 1.339-.1 1.202-.874l-.421-2.39 1.749-1.702c.565-.547.326-1.31-.453-1.421l-2.436-.344L6.76 2.252c-.172-.354-.464-.531-.75-.531m0 1.297 1.03 2.108c.073.15.211.242.375.266l2.343.343-1.702 1.64a.48.48 0 0 0-.14.437l.405 2.312L6.246 9.03a.5.5 0 0 0-.468 0L3.7 10.123l.39-2.296a.52.52 0 0 0-.14-.453l-1.687-1.64 2.327-.328a.52.52 0 0 0 .39-.28z\" />\n </svg>\n);\n\nexport const TopIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"17\"\n viewBox=\"0 0 16 17\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M2.01 2.915a.667.667 0 1 0 0 1.334h12a.667.667 0 0 0 0-1.334zM7.343 13.59a.667.667 0 0 0 1.333 0V7.88l2 1.98.937-.938L8.49 5.777a.686.686 0 0 0-.959 0L4.405 8.923l.938.937 2-1.979z\" />\n </svg>\n);\n\nexport const DeleteIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"17\"\n viewBox=\"0 0 16 17\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M4.67 2.203A2.667 2.667 0 0 0 2.005 4.87v6.667a2.667 2.667 0 0 0 2.667 2.666h6.666a2.667 2.667 0 0 0 2.667-2.666V4.87a2.667 2.667 0 0 0-2.667-2.667zm1.334 3.334c.17 0 .349.057.48.187l1.52 1.52 1.52-1.52a.68.68 0 0 1 .48-.187c.17 0 .349.057.48.187.26.26.26.698 0 .959l-1.521 1.52 1.52 1.52c.26.262.26.699 0 .96a.687.687 0 0 1-.958 0L8.004 9.162l-1.52 1.52a.687.687 0 0 1-.96 0 .687.687 0 0 1 0-.958l1.521-1.52-1.52-1.521a.687.687 0 0 1 0-.96.68.68 0 0 1 .479-.186\" />\n </svg>\n);\n\nexport const AddIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <mask\n id=\"a\"\n style={{ maskType: \"alpha\" }}\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M0 0h16v16H0z\" />\n </mask>\n <g mask=\"url(#a)\">\n <path d=\"M7.333 8.667h-4V7.333h4v-4h1.333v4h4v1.334h-4v4H7.333z\" />\n </g>\n </svg>\n);\n\nexport const ActiveAddIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M5.99536 1.46487C5.71936 1.46487 5.49536 1.68887 5.49536 1.96487V5.46487H1.99536C1.71936 5.46487 1.49536 5.68887 1.49536 5.96487C1.49536 6.24087 1.71936 6.46487 1.99536 6.46487H5.49536V9.96487C5.49536 10.2409 5.71936 10.4649 5.99536 10.4649C6.27136 10.4649 6.49536 10.2409 6.49536 9.96487V6.46487H9.99536C10.2714 6.46487 10.4954 6.24087 10.4954 5.96487C10.4954 5.68887 10.2714 5.46487 9.99536 5.46487H6.49536V1.96487C6.49536 1.68887 6.27136 1.46487 5.99536 1.46487Z\"\n fill=\"url(#paint0_linear_1951_55156)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_1951_55156\"\n x1=\"10.4954\"\n y1=\"5.96487\"\n x2=\"1.49536\"\n y2=\"5.96487\"\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\nexport const ExpandIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M6.326 8.826a.84.84 0 0 0-.6.234L2.16 12.627v-2.135H.492v4.167c0 .46.373.833.834.833h4.166v-1.667H3.357l3.567-3.567a.857.857 0 0 0 0-1.198.84.84 0 0 0-.598-.234M10.502.492V2.16h2.135L9.07 5.726a.857.857 0 0 0 0 1.199.86.86 0 0 0 1.197 0l3.568-3.568v2.135h1.667V1.326a.834.834 0 0 0-.834-.834z\" />\n </svg>\n);\n\nexport const CollapseIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M14.668.492a.85.85 0 0 0-.599.234l-3.567 3.568V2.159H8.835v4.167c0 .46.373.833.833.833h4.167V5.492H11.7l3.569-3.567a.86.86 0 0 0 0-1.199.85.85 0 0 0-.6-.234m-12.5 8.334v1.666h2.135L.736 14.06a.86.86 0 0 0 0 1.198.86.86 0 0 0 1.198 0l3.568-3.567v2.134h1.666V9.66a.834.834 0 0 0-.833-.833z\" />\n </svg>\n);\n\nexport const TriangleDownIcon: 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 <path d=\"M3.003 3.998a.494.494 0 0 0-.39.797l3 4c.2.266.597.266.797 0l3-4a.5.5 0 0 0-.407-.797z\" />\n </svg>\n);\n\nexport const ArrowLeftIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M9.186 3.348a.67.67 0 0 0-.436.27l-2.657 4a.69.69 0 0 0 0 .75l2.657 4a.68.68 0 0 0 .934.188.685.685 0 0 0 .187-.937L7.463 7.993 9.87 4.37a.685.685 0 0 0-.187-.938.65.65 0 0 0-.498-.083\" />\n </svg>\n);\n\nexport const ArrowRightIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\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 {...props}\n >\n <path d=\"M6.777 3.348a.65.65 0 0 0-.498.083.685.685 0 0 0-.187.938L8.5 7.993l-2.408 3.625a.685.685 0 0 0 .187.938.68.68 0 0 0 .934-.187l2.657-4a.69.69 0 0 0 0-.75l-2.657-4a.67.67 0 0 0-.436-.271\" />\n </svg>\n);\n\nconst BaseSortIcon = (props: PropsWithChildren) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n >\n {props.children}\n </svg>\n );\n};\n\nexport const SortingIcon = () => {\n return (\n <BaseSortIcon>\n <path\n d=\"M5 1.042a.47.47 0 0 0-.338.135L2.166 3.844c-.206.22-.005.531.338.531h4.992c.342 0 .543-.311.337-.531L5.338 1.177A.47.47 0 0 0 5 1.042m0 7.916a.47.47 0 0 1-.338-.135L2.166 6.156c-.206-.22-.005-.531.338-.531h4.992c.342 0 .543.311.337.531L5.338 8.823A.47.47 0 0 1 5 8.958\"\n fill=\"#fff\"\n fillOpacity=\".2\"\n />\n </BaseSortIcon>\n );\n};\n\nexport const AscendingIcon = () => {\n return (\n <BaseSortIcon>\n <path\n d=\"M5 1.042a.47.47 0 0 0-.338.135L2.166 3.844c-.206.22-.005.531.338.531h4.992c.342 0 .543-.311.337-.531L5.338 1.177A.47.47 0 0 0 5 1.042\"\n fill=\"#fff\"\n fillOpacity=\".8\"\n />\n <path\n d=\"M5 8.958a.47.47 0 0 1-.338-.135L2.166 6.156c-.206-.22-.005-.531.338-.531h4.992c.342 0 .543.311.337.531L5.338 8.823A.47.47 0 0 1 5 8.958\"\n fill=\"#fff\"\n fillOpacity=\".2\"\n />\n </BaseSortIcon>\n );\n};\n\nexport const DescendingIcon = () => {\n return (\n <BaseSortIcon>\n <path\n d=\"M5 1.042a.47.47 0 0 0-.338.135L2.166 3.844c-.206.22-.005.531.338.531h4.992c.342 0 .543-.311.337-.531L5.338 1.177A.47.47 0 0 0 5 1.042\"\n fill=\"#fff\"\n fillOpacity=\".2\"\n />\n <path\n d=\"M5 8.958a.47.47 0 0 1-.338-.135L2.166 6.156c-.206-.22-.005-.531.338-.531h4.992c.342 0 .543.311.337.531L5.338 8.823A.47.47 0 0 1 5 8.958\"\n fill=\"#fff\"\n fillOpacity=\".8\"\n />\n </BaseSortIcon>\n );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { OrderlyIcon } from \"../../../icons\";\nimport { MarketsHeaderReturns } from \"./marketsHeader.script\";\n\n/** -----------MarketsHeader start ------------ */\ntype MarketsHeaderProps = MarketsHeaderReturns & {\n className?: string;\n};\nexport const MarketsHeader: FC<MarketsHeaderProps> = (props) => {\n const {\n emblaRef,\n emblaApi,\n scrollIndex,\n enableScroll,\n news,\n gainers,\n losers,\n total24Amount,\n totalOpenInterest,\n tvl,\n favorite,\n } = props;\n const { onSymbolChange } = useMarketsContext();\n const { t } = useTranslation();\n\n const cls = cn(\n \"oui-min-w-0 oui-flex-[0_0_calc((100%_-_32px)_/_3)] 3xl:oui-flex-[0_0_calc((100%_-_48px)_/_4)]\",\n enableScroll && \"oui-cursor-pointer oui-select-none\",\n );\n\n const onSymbol = (item: any) => {\n onSymbolChange?.(item);\n favorite.addToHistory(item);\n };\n\n return (\n <div\n id=\"oui-markets-header\"\n className={cn(\"oui-overflow-hidden\", props.className)}\n ref={enableScroll ? emblaRef : undefined}\n >\n <Flex width=\"100%\" gapX={4}>\n <BlockList\n total24Amount={total24Amount}\n totalOpenInterest={totalOpenInterest}\n tvl={tvl}\n className={cls}\n />\n <CardItem\n data={news}\n title={\n <Text.gradient color=\"brand\">\n {t(\"markets.newListings\")}\n </Text.gradient>\n }\n className={cls}\n onSymbol={onSymbol}\n />\n <CardItem\n data={gainers}\n title={\n <Text className=\"oui-text-success-light\">\n {t(\"markets.topGainers\")}\n </Text>\n }\n className={cls}\n onSymbol={onSymbol}\n />\n <CardItem\n data={losers}\n title={\n <Text className=\"oui-text-danger-light\">\n {t(\"markets.topLosers\")}\n </Text>\n }\n className={cls}\n onSymbol={onSymbol}\n />\n </Flex>\n <div className=\"oui-mb-3 oui-mt-1 3xl:oui-mb-0 3xl:oui-mt-4\">\n <ScrollIndicator\n scrollIndex={scrollIndex}\n scrollPrev={emblaApi?.scrollPrev}\n scrollNext={emblaApi?.scrollNext}\n />\n </div>\n </div>\n );\n};\n/** -----------MarketsHeader end ------------ */\n\ntype BlockListProps = {\n className?: string;\n total24Amount?: number;\n totalOpenInterest?: number;\n tvl?: number;\n};\n\n/** -----------MarketsHeader start ------------ */\nconst BlockList: React.FC<BlockListProps> = (props) => {\n const { total24Amount, totalOpenInterest, tvl } = props;\n const { t } = useTranslation();\n\n const list = useMemo(() => {\n return [\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.column.24hVolume\")}\n </Flex>\n ),\n value: total24Amount,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.openInterest\")}\n </Flex>\n ),\n value: totalOpenInterest,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {`${t(\"common.assets\")} (TVL)`}\n </Flex>\n ),\n value: tvl,\n },\n ];\n }, [total24Amount, totalOpenInterest, tvl]);\n\n return (\n <Flex\n direction=\"column\"\n justify=\"between\"\n width=\"100%\"\n height={236}\n className={props.className}\n >\n {list?.map((item, index) => (\n <BlockItem key={`item-${index}`} {...item} />\n ))}\n </Flex>\n );\n};\n/** -----------MarketsHeader start ------------ */\n\ntype BlockItemProps = {\n label: ReactNode;\n value?: number;\n rule?: string;\n dp?: number;\n};\n\nconst BlockItem: React.FC<BlockItemProps> = (props) => {\n return (\n <Box intensity={900} r=\"lg\" px={4} py={3} width=\"100%\">\n <Text as=\"div\" intensity={36} size=\"xs\" weight=\"semibold\">\n {props.label}\n </Text>\n\n <Text.numeral\n size=\"base\"\n currency=\"$\"\n dp={props.dp || 0}\n rm={Decimal.ROUND_DOWN}\n rule={props.rule as any}\n >\n {props.value!}\n </Text.numeral>\n </Box>\n );\n};\n\ntype CardItemProps = {\n data?: TListItem[];\n title: ReactNode;\n className?: string;\n onSymbol: (item: any) => void;\n};\n\nconst CardItem: React.FC<CardItemProps> = (props) => {\n return (\n <Box\n intensity={900}\n r=\"lg\"\n py={4}\n pb={2}\n height={236}\n className={props.className}\n >\n <Box px={4}>\n <Text.gradient color=\"brand\" size=\"sm\" weight=\"semibold\">\n {props.title}\n </Text.gradient>\n </Box>\n\n <Flex direction=\"column\" itemAlign=\"start\" mt={2}>\n {props.data?.map((item, index) => (\n <ListItem key={item.symbol} item={item} onSymbol={props.onSymbol} />\n ))}\n </Flex>\n </Box>\n );\n};\n\ntype TListItem = {\n symbol: string;\n price: string;\n change: number;\n precision: number;\n [x: string]: any;\n};\n\ntype ListItemProps = {\n item: TListItem;\n className?: string;\n onSymbol: (item: any) => void;\n};\n\nconst ListItem: React.FC<ListItemProps> = (props) => {\n const { item } = props;\n\n return (\n <Flex\n width=\"100%\"\n gapX={3}\n py={2}\n px={4}\n className={cn(\"oui-cursor-pointer hover:oui-bg-base-8\", props.className)}\n onClick={() => {\n props.onSymbol(item);\n }}\n >\n <Flex width=\"100%\" gapX={1}>\n {/* <TokenIcon symbol={item.symbol} size=\"xs\" /> */}\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"xs\"\n weight=\"semibold\"\n showIcon\n >\n {item.symbol}\n </Text.formatted>\n </Flex>\n\n <Flex width=\"100%\" justify=\"end\">\n <Text.numeral\n currency=\"$\"\n size=\"xs\"\n weight=\"semibold\"\n dp={item.quote_dp}\n >\n {item[\"24h_close\"]}\n </Text.numeral>\n </Flex>\n\n <Flex width=\"100%\" justify=\"end\">\n <Text.numeral\n rule=\"percentages\"\n coloring\n size=\"xs\"\n weight=\"semibold\"\n showIdentifier\n >\n {item.change}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n\ninterface ScrollIndicatorProps {\n scrollIndex: number;\n scrollPrev?: () => void;\n scrollNext?: () => void;\n}\n\nconst ScrollIndicator: React.FC<ScrollIndicatorProps> = (props) => {\n const { scrollIndex, scrollPrev, scrollNext } = props;\n\n return (\n <Flex gapX={1} justify=\"center\" className=\"3xl:oui-hidden\">\n {[0, 1].map((item) => {\n return (\n <Box\n key={item}\n py={1}\n pl={item === 0 ? 1 : 0}\n pr={item === 1 ? 1 : 0}\n onClick={() => {\n if (scrollIndex === 0 && item === 1) {\n scrollNext?.();\n } else if (scrollIndex === 1 && item === 0) {\n scrollPrev?.();\n }\n }}\n className=\"oui-cursor-pointer\"\n >\n <Box\n key={item}\n width={8}\n height={4}\n r=\"full\"\n className={cn(\n \"oui-transition-all oui-duration-300\",\n scrollIndex === item\n ? \"oui-w-4 oui-bg-base-contrast-36\"\n : \"oui-bg-base-contrast-20\",\n )}\n />\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport default ScrollIndicator;\n","import { useCallback, useEffect, useState } from \"react\";\nimport { TableSort } from \"@orderly.network/ui\";\nimport { formatSymbol } from \"@orderly.network/utils\";\nimport { SortType } from \"./type\";\n\n/**\n * Compare two values intelligently\n */\nconst compareValues = (aValue: any, bValue: any): number => {\n // Handle null/undefined values (always sort to bottom)\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n\n // Convert to string first for type checking\n const aStr = String(aValue).trim();\n const bStr = String(bValue).trim();\n\n // More robust number detection - check if values can be converted to valid numbers\n const aNum = Number(aStr);\n const bNum = Number(bStr);\n const aIsNumber =\n !isNaN(aNum) && isFinite(aNum) && /^-?\\d*\\.?\\d+([eE][+-]?\\d+)?$/.test(aStr);\n const bIsNumber =\n !isNaN(bNum) && isFinite(bNum) && /^-?\\d*\\.?\\d+([eE][+-]?\\d+)?$/.test(bStr);\n\n if (aIsNumber && bIsNumber) {\n return aNum - bNum;\n }\n\n // Check if both are valid dates (ISO format or timestamp)\n const aIsDate = /^\\d{4}-\\d{2}-\\d{2}/.test(aStr) || /^\\d{13}$/.test(aStr);\n const bIsDate = /^\\d{4}-\\d{2}-\\d{2}/.test(bStr) || /^\\d{13}$/.test(bStr);\n\n if (aIsDate && bIsDate) {\n const aDate = new Date(aValue);\n const bDate = new Date(bValue);\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\n return aDate.getTime() - bDate.getTime();\n }\n }\n\n // String comparison - use localeCompare for proper string sorting\n return aStr.localeCompare(bStr, undefined, {\n sensitivity: \"base\",\n numeric: false, // Disable numeric sorting for pure string comparison\n caseFirst: \"upper\",\n });\n};\n\n/** get page data */\nexport function getPagedData(list: any[], pageSize: number, pageIndex: number) {\n const pageData: any[][] = [];\n let rows: any[] = [];\n for (let i = 0; i < list.length; i++) {\n rows.push(list[i]);\n if ((i + 1) % pageSize === 0 || i === list.length - 1) {\n pageData.push(rows);\n rows = [];\n }\n }\n return pageData[pageIndex - 1] || [];\n}\n\nexport function sortList(list: any[], sort?: SortType) {\n const { sortKey, sortOrder } = sort || {};\n const sortedList = [...(list || [])];\n\n if (sortKey && sortOrder) {\n // sort list\n sortedList.sort((a: any, b: any) => {\n const comparison = compareValues(a[sortKey], b[sortKey]);\n // Handle sort order: desc means reverse the comparison result\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n }\n return sortedList;\n}\n\nexport function useSort(\n initialSort?: SortType,\n onSortChange?: (sort?: SortType) => void,\n) {\n const [sort, setSort] = useState<SortType | undefined>(initialSort);\n\n const onSort = useCallback((options?: TableSort) => {\n const nextSort = options\n ? {\n sortKey: options.sortKey,\n sortOrder: options.sort,\n }\n : undefined;\n\n setSort(nextSort);\n onSortChange?.(nextSort);\n // initialSort, onSortChange is not needed to be in the dependency array, otherwise it will cause infinite loop\n }, []);\n\n const getSortedList = useCallback(\n (list: any[]) => sortList(list, sort),\n [sort],\n );\n\n return { sort, onSort, getSortedList };\n}\n\n/**\n * Escape special characters for use in regular expressions\n */\nfunction escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport function searchBySymbol<T extends Record<PropertyKey, any>>(\n list: T[],\n searchValue = \"\",\n formatString?: string,\n) {\n if (!searchValue) {\n return list;\n }\n\n // Escape special characters to prevent RegExp errors\n const escapedSearchValue = escapeRegExp(searchValue);\n const reg = new RegExp(escapedSearchValue, \"i\");\n\n const searchValueLower = searchValue.toLowerCase();\n\n // Split results into three groups: exact matches, starts with search and other matches\n const exactMatches: T[] = [];\n const startsWithMatches: T[] = [];\n const otherMatches: T[] = [];\n\n list?.forEach((item) => {\n const formattedSymbol = formatSymbol(item.symbol, formatString);\n const symbolLower = formattedSymbol.toLowerCase();\n if (reg.test(formattedSymbol)) {\n if (symbolLower === searchValueLower) {\n exactMatches.push(item);\n } else if (symbolLower.startsWith(searchValueLower)) {\n startsWithMatches.push(item);\n } else {\n otherMatches.push(item);\n }\n }\n });\n\n const compareSymbols = (a: T, b: T) => {\n const symbolA = formatSymbol(a.symbol, formatString);\n const symbolB = formatSymbol(b.symbol, formatString);\n if (symbolA < symbolB) return -1;\n if (symbolA > symbolB) return 1;\n return 0;\n };\n\n // Sort each group alphabetically\n startsWithMatches.sort(compareSymbols);\n otherMatches.sort(compareSymbols);\n\n // Combine results with prioritized matches first\n return [...exactMatches, ...startsWithMatches, ...otherMatches];\n}\n\nexport function useSize() {\n const [width, setWidth] = useState<number>(0);\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n setWidth(window.innerWidth);\n setHeight(window.innerHeight);\n\n const handleResize = () => {\n setHeight(window.innerHeight);\n setWidth(window.innerWidth);\n };\n\n window?.addEventListener(\"resize\", handleResize);\n\n return () => {\n window?.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n return {\n width,\n height,\n };\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { useMarkets, useQuery, MarketsType } from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { sortList, useSize } from \"../../../utils\";\n\n// export type EmblaCarouselType = Exclude<UseEmblaCarouselType[1], undefined>;\n// export type TEmblaApi = Pick<EmblaCarouselType, \"scrollPrev\" | \"scrollNext\">;\n// use UseEmblaCarouselType will bring type error\nexport type TEmblaApi = {\n scrollPrev: (jump?: boolean) => void;\n scrollNext: (jump?: boolean) => void;\n};\n\nexport type MarketsHeaderReturns = ReturnType<typeof useMarketsHeaderScript>;\n\nexport const useMarketsHeaderScript = () => {\n const [scrollIndex, setScrollIndex] = useState(0);\n const data = useDataSource();\n\n const { width } = useSize();\n\n const [emblaRef, emblaApi] = useEmblaCarousel({\n loop: true,\n // duration: 25,\n slidesToScroll: \"auto\",\n });\n\n useEffect(() => {\n emblaApi?.on(\"select\", () => {\n setScrollIndex(emblaApi?.selectedScrollSnap());\n });\n }, [emblaApi]);\n\n return {\n scrollIndex,\n setScrollIndex,\n emblaRef,\n emblaApi: emblaApi as TEmblaApi,\n enableScroll: width < 1440,\n ...data,\n };\n};\n\nexport function useDataSource() {\n const [markets, favorite] = useMarkets(MarketsType.ALL);\n const { data: balance } = useQuery(\"/v1/public/balance/stats\");\n\n const news = useMemo(\n () =>\n sortList(markets, { sortKey: \"created_time\", sortOrder: \"desc\" }).slice(\n 0,\n 5,\n ),\n [markets],\n );\n\n const gainers = useMemo(\n () =>\n sortList(markets, { sortKey: \"change\", sortOrder: \"desc\" }).slice(0, 5),\n [markets],\n );\n\n const losers = useMemo(\n () =>\n sortList(markets, { sortKey: \"change\", sortOrder: \"asc\" }).slice(0, 5),\n [markets],\n );\n\n const total24Amount = useMemo(\n () =>\n markets?.reduce((prevValue: Decimal, curValue: any) => {\n return prevValue.add(curValue[\"24h_amount\"] || 0);\n }, new Decimal(0)) || new Decimal(0),\n [markets],\n );\n\n const totalOpenInterest = useMemo(\n () =>\n markets?.reduce((prevValue: Decimal, curValue: any) => {\n return prevValue.add(curValue[\"openInterest\"] || 0);\n }, new Decimal(0)) || new Decimal(0),\n [markets],\n );\n\n const tvl = useMemo(() => {\n if (!balance) return 0;\n\n const { total_holding = 0 } = balance as any;\n return new Decimal(total_holding).toNumber();\n }, [balance]);\n\n return {\n markets,\n news,\n gainers,\n losers,\n total24Amount: total24Amount.toNumber(),\n totalOpenInterest: totalOpenInterest.toNumber(),\n tvl,\n favorite,\n };\n}\n","import { FC, ReactNode, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, Flex, TabPanel, Tabs, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { OrderlyIcon } from \"../../../icons\";\nimport { MarketsHeaderReturns } from \"./marketsHeader.script\";\n\ntype MobileMarketsHeaderProps = MarketsHeaderReturns & {\n className?: string;\n};\n\nexport const MobileMarketsHeader: FC<MobileMarketsHeaderProps> = (props) => {\n const {\n news,\n gainers,\n losers,\n total24Amount,\n totalOpenInterest,\n tvl,\n favorite,\n } = props;\n const [activeTab, setActiveTab] = useState(\"newListings\");\n const { onSymbolChange } = useMarketsContext();\n const { t } = useTranslation();\n\n const onSymbol = (item: any) => {\n onSymbolChange?.(item);\n favorite.addToHistory(item);\n };\n\n return (\n <div\n id=\"oui-markets-header\"\n className={cn(\"oui-overflow-hidden\", props.className)}\n >\n <BlockList\n total24Amount={total24Amount}\n totalOpenInterest={totalOpenInterest}\n tvl={tvl}\n />\n\n <Box intensity={900} r=\"xl\" p={3} mt={3}>\n <Tabs size=\"md\" value={activeTab} onValueChange={setActiveTab}>\n <TabPanel\n title={t(\"markets.newListings\")}\n value=\"newListings\"\n testid=\"oui-testid-markets-tab\"\n >\n <CardItem data={news} onSymbol={onSymbol} />\n </TabPanel>\n <TabPanel\n title={t(\"markets.topGainers\")}\n value=\"topGainers\"\n testid=\"oui-testid-funding-tab\"\n >\n <CardItem data={gainers} onSymbol={onSymbol} />\n </TabPanel>\n <TabPanel\n title={t(\"markets.topLosers\")}\n value=\"topLosers\"\n testid=\"oui-testid-funding-tab\"\n >\n <CardItem data={losers} onSymbol={onSymbol} />\n </TabPanel>\n </Tabs>\n </Box>\n </div>\n );\n};\n\ntype BlockListProps = {\n className?: string;\n total24Amount?: number;\n totalOpenInterest?: number;\n tvl?: number;\n};\n\nconst BlockList: React.FC<BlockListProps> = (props) => {\n const { total24Amount, totalOpenInterest, tvl } = props;\n const { t } = useTranslation();\n\n const list = useMemo(() => {\n return [\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.column.24hVolume\")}\n </Flex>\n ),\n value: total24Amount,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.openInterest\")}\n </Flex>\n ),\n value: totalOpenInterest,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> {`${t(\"common.assets\")} (TVL)`}\n </Flex>\n ),\n value: tvl,\n },\n ];\n }, [total24Amount, totalOpenInterest, tvl]);\n\n return (\n <Flex\n intensity={900}\n r=\"xl\"\n width=\"100%\"\n py={3}\n className={props.className}\n >\n {list?.map((item, index) => (\n <BlockItem\n key={`item-${index}`}\n {...item}\n className={cn(\n index !== list.length - 1 && \"oui-border-r oui-border-line-6\",\n )}\n />\n ))}\n </Flex>\n );\n};\n\ntype BlockItemProps = {\n label: ReactNode;\n value?: number;\n rule?: string;\n dp?: number;\n className?: string;\n};\n\nconst BlockItem: React.FC<BlockItemProps> = (props) => {\n return (\n <Box px={3} width=\"100%\" className={props.className}>\n <Text as=\"div\" intensity={36} size=\"2xs\" weight=\"semibold\">\n {props.label}\n </Text>\n\n <Text.numeral\n size=\"base\"\n currency=\"$\"\n dp={props.dp || 2}\n rm={Decimal.ROUND_DOWN}\n rule={(props.rule as any) || \"human\"}\n >\n {props.value!}\n </Text.numeral>\n </Box>\n );\n};\n\ntype CardItemProps = {\n data?: TListItem[];\n className?: string;\n onSymbol: (item: any) => void;\n};\n\nconst CardItem: React.FC<CardItemProps> = (props) => {\n return (\n <Flex direction=\"column\" itemAlign=\"start\" mt={3}>\n {props.data?.map((item) => (\n <ListItem\n key={item.symbol}\n item={item}\n onSymbol={props.onSymbol}\n className=\"oui-px-0\"\n />\n ))}\n </Flex>\n );\n};\n\ntype TListItem = {\n symbol: string;\n price: string;\n change: number;\n precision: number;\n [x: string]: any;\n};\n\ntype ListItemProps = {\n item: TListItem;\n className?: string;\n onSymbol: (item: any) => void;\n};\n\nconst ListItem: React.FC<ListItemProps> = (props) => {\n const { item } = props;\n\n return (\n <Flex\n width=\"100%\"\n gapX={3}\n py={2}\n px={4}\n className={cn(\"oui-cursor-pointer hover:oui-bg-base-8\", props.className)}\n onClick={() => {\n props.onSymbol(item);\n }}\n >\n <Flex width=\"100%\" gapX={1}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"xs\"\n weight=\"semibold\"\n showIcon\n >\n {item.symbol}\n </Text.formatted>\n </Flex>\n\n <Flex width=\"100%\" justify=\"end\">\n <Text.numeral\n currency=\"$\"\n size=\"xs\"\n weight=\"semibold\"\n dp={item.quote_dp}\n >\n {item[\"24h_close\"]}\n </Text.numeral>\n </Flex>\n\n <Flex width=\"100%\" justify=\"end\">\n <Text.numeral\n rule=\"percentages\"\n coloring\n size=\"xs\"\n weight=\"semibold\"\n showIdentifier\n >\n {item.change}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { MobileMarketsHeader } from \"./marketsHeader.mobile.ui\";\nimport { useMarketsHeaderScript } from \"./marketsHeader.script\";\nimport { MarketsHeader } from \"./marketsHeader.ui\";\n\ntype MarketsHeaderWidgetProps = {\n className?: string;\n};\n\nexport const MarketsHeaderWidget: FC<MarketsHeaderWidgetProps> = (props) => {\n const state = useMarketsHeaderScript();\n const { isMobile } = useScreen();\n return isMobile ? (\n <MobileMarketsHeader className={props.className} {...state} />\n ) : (\n <MarketsHeader className={props.className} {...state} />\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { TokenIcon, Flex, Text, cn, Tooltip, Badge } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\nexport type CollapseMarketsProps = {\n dataSource: any[];\n};\n\nexport const CollapseMarkets: React.FC<CollapseMarketsProps> = (props) => {\n const { symbol, onSymbolChange } = useMarketsContext();\n const { t } = useTranslation();\n if (props.dataSource?.length === 0) {\n return null;\n }\n return (\n <div className=\"oui-custom-scrollbar oui-h-full oui-overflow-y-auto\">\n <Flex direction=\"column\" px={2} gapY={1}>\n {props.dataSource?.map((item) => {\n const content = (\n <Flex intensity={800} p={2} className=\"oui-gap-x-7\" r=\"base\">\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Flex gapX={1}>\n <TokenIcon symbol={item.symbol} className=\"oui-size-[18px]\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"2xs\"\n weight=\"semibold\"\n >\n {item.symbol}\n </Text.formatted>\n </Flex>\n <Text size=\"2xs\" intensity={36}>\n {t(\"markets.column.last\")}\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {t(\"markets.column.24hPercentage\")}\n </Text>\n </Flex>\n\n <Flex direction=\"column\" itemAlign=\"end\" gapY={1}>\n <Badge size=\"xs\" color=\"primary\">\n {item.leverage}x\n </Badge>\n <Text.numeral\n dp={item.quote_dp || 2}\n currency=\"$\"\n size=\"2xs\"\n intensity={80}\n >\n {item[\"24h_close\"]}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {item.change}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n\n return (\n <Tooltip\n side=\"right\"\n sideOffset={6}\n content={content}\n delayDuration={0}\n key={item.symbol}\n >\n <Flex\n direction=\"column\"\n justify=\"center\"\n itemAlign=\"center\"\n gapY={1}\n width={54}\n height={54}\n r=\"lg\"\n className={cn(\n \"oui-cursor-pointer\",\n \"hover:oui-bg-base-7\",\n symbol === item.symbol && \"oui-bg-base-6 hover:oui-bg-base-6\",\n )}\n onClick={() => {\n onSymbolChange?.(item);\n }}\n >\n <TokenIcon symbol={item.symbol} className=\"oui-size-[18px]\" />\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {item.change}\n </Text.numeral>\n </Flex>\n </Tooltip>\n );\n })}\n </Flex>\n </div>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n CheckedSquareFillIcon,\n CheckSquareEmptyIcon,\n PlusIcon,\n CloseIcon,\n Divider,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n Input,\n Text,\n cn,\n CloseCircleFillIcon,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport type { UseFavoritesDropdownMenuScriptReturn } from \"./favoritesDropdownMenu.script\";\n\nexport type FavoritesDropdownMenuProps =\n PropsWithChildren<UseFavoritesDropdownMenuScriptReturn>;\n\nexport const FavoritesDropdownMenu: React.FC<FavoritesDropdownMenuProps> = (\n props,\n) => {\n const {\n symbol,\n favoriteTabs,\n open,\n onOpenChange,\n inputVisible,\n selectedTabs,\n value,\n onValueChange,\n hide,\n hideInput,\n showInput,\n onCheck,\n addTab,\n confirm,\n } = props;\n\n const { t } = useTranslation();\n\n const overLen = value?.length > 15;\n\n const renderInput = () => {\n if (inputVisible) {\n return (\n <Box>\n <Flex gapX={2}>\n <Input\n autoFocus\n value={value}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-ml-px oui-h-7 oui-w-full oui-rounded-sm oui-bg-base-6\",\n overLen &&\n \"focus-within:oui-outline-danger focus-visible:oui-outline-danger\",\n ),\n }}\n autoComplete=\"off\"\n suffix={\n value && (\n <Box mr={2}>\n <CloseCircleFillIcon\n opacity={1}\n size={14}\n className=\"oui-cursor-pointer oui-text-base-contrast-20\"\n onClick={() => {\n onValueChange(\"\");\n }}\n />\n </Box>\n )\n }\n />\n\n <Button\n className=\"oui-rounded-sm\"\n size=\"sm\"\n onClick={addTab}\n disabled={!value || overLen}\n >\n {t(\"common.add\")}\n </Button>\n </Flex>\n\n {overLen && (\n <Flex itemAlign=\"center\" gapX={1} mt={1}>\n <div className=\"oui-size-1 oui-rounded-full oui-bg-danger\"></div>\n <Text color=\"danger\">{t(\"markets.favorites.tabs.maxName\")}</Text>\n </Flex>\n )}\n </Box>\n );\n }\n\n const overTabs = favoriteTabs.length >= 10;\n\n return (\n <Tooltip\n open={overTabs ? undefined : false}\n content={\n <Text size=\"2xs\" intensity={80}>\n {t(\"markets.favorites.tabs.maxList\")}\n </Text>\n }\n className=\"oui-bg-base-6\"\n delayDuration={0}\n arrow={{ className: \"oui-fill-base-6\" }}\n >\n <div>\n <Flex\n className={cn(\n overTabs ? \"oui-cursor-not-allowed\" : \"oui-cursor-pointer\",\n )}\n itemAlign=\"center\"\n gapX={2}\n p={2}\n intensity={overTabs ? 500 : 600}\n onClick={overTabs ? undefined : showInput}\n height={28}\n r=\"base\"\n >\n <PlusIcon\n size={14}\n className=\"oui-text-base-contrast-36\"\n opacity={1}\n />\n <Text className=\"\" intensity={20}>\n {t(\"markets.favorites.dropdown.addPlaceholder\")}\n </Text>\n </Flex>\n </div>\n </Tooltip>\n );\n };\n\n const header = (\n <Flex justify=\"between\" className=\"oui-mb-[10px] oui-mt-3\">\n <Flex gapX={1}>\n {t(\"markets.favorites.dropdown.title\")}\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {symbol}\n </Text.formatted>\n </Flex>\n <CloseIcon\n size={16}\n className=\"oui-cursor-pointer oui-text-base-contrast\"\n onClick={hide}\n />\n </Flex>\n );\n\n const content = (\n // <ScrollArea className=\"custom-scrollbar\">\n <Box>\n <Box\n my={2}\n className=\"oui-custom-scrollbar oui-max-h-[288px] oui-overflow-y-auto\"\n >\n {favoriteTabs?.slice(0, 10)?.map((item) => {\n const checked = !!selectedTabs.find((tab) => tab.id === item.id);\n return (\n <Box key={item.id} className=\"oui-cursor-pointer\">\n <Flex\n className=\"oui-gap-x-[6px] hover:oui-bg-base-6\"\n p={2}\n r=\"md\"\n onClick={() => {\n onCheck(item, checked);\n }}\n >\n {checked ? (\n <CheckedSquareFillIcon\n size={18}\n className=\"oui-text-base-contrast-80\"\n />\n ) : (\n <CheckSquareEmptyIcon\n size={18}\n className=\"oui-text-base-contrast-80\"\n />\n )}\n\n <Text intensity={54}>{item.name}</Text>\n </Flex>\n </Box>\n );\n })}\n </Box>\n <Box mt={3} pb={5}>\n {renderInput()}\n </Box>\n </Box>\n // </ScrollArea>\n );\n\n const footer = (\n <Flex gapX={3} mt={3}>\n <Button\n key=\"secondary\"\n color=\"gray\"\n onClick={hide}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n\n <Button\n key=\"primary\"\n onClick={confirm}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </Button>\n </Flex>\n );\n\n return (\n <DropdownMenuRoot open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger asChild>{props.children}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n align=\"start\"\n alignOffset={-12}\n sideOffset={24}\n className=\"oui-markets-favorite-dropdown-menu-content oui-bg-base-8\"\n >\n <Box px={5} pb={5} width={360}>\n <Text as=\"div\" size=\"sm\" weight=\"semibold\">\n {header}\n <Divider />\n {content}\n {footer}\n </Text>\n </Box>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { FavoriteTab } from \"@orderly.network/hooks\";\nimport { FavoriteInstance } from \"../../type\";\n\nexport type UseFavoritesDropdownMenuScriptOptions = {\n row: any;\n favorite: FavoriteInstance;\n};\n\nexport type UseFavoritesDropdownMenuScriptReturn = ReturnType<\n typeof useFavoritesDropdownMenuScript\n>;\n\nexport function useFavoritesDropdownMenuScript(\n options: UseFavoritesDropdownMenuScriptOptions\n) {\n const { symbol } = options.row || {};\n const {\n favorites,\n favoriteTabs,\n updateFavoriteTabs,\n updateSymbolFavoriteState,\n } = options.favorite;\n const [open, setOpen] = useState(false);\n const [inputVisible, setInputVisible] = useState(false);\n const [value, setValue] = useState(\"\");\n const [selectedTabs, setSelectedTabs] = useState([] as FavoriteTab[]);\n\n const hide = () => {\n setOpen(false);\n };\n\n const showInput = () => {\n setInputVisible(true);\n };\n\n const hideInput = () => {\n setInputVisible(false);\n };\n\n const clearState = () => {\n setValue(\"\");\n hideInput();\n setSelectedTabs([]);\n };\n\n const addTab = () => {\n const newTab = {\n name: value || `WatchList_${favoriteTabs.length}`,\n id: Date.now(),\n };\n updateFavoriteTabs(newTab, { add: true });\n clearState();\n };\n\n const onCheck = (item: FavoriteTab, checked: boolean) => {\n if (checked) {\n setSelectedTabs(selectedTabs?.filter((tab) => tab.id !== item.id));\n } else {\n setSelectedTabs([...selectedTabs, item]);\n }\n hideInput();\n };\n\n const confirm = () => {\n updateSymbolFavoriteState(options.row, selectedTabs, false);\n setOpen(false);\n };\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n const find = favorites?.find((item) => item.name === symbol);\n if (find?.tabs?.length) {\n setSelectedTabs(find?.tabs);\n }\n }, [open, favorites, favoriteTabs, symbol]);\n\n useEffect(() => {\n if (!open) {\n clearState();\n }\n }, [open]);\n\n return {\n symbol,\n favoriteTabs,\n open,\n onOpenChange: setOpen,\n inputVisible,\n selectedTabs,\n value,\n onValueChange: setValue,\n hide,\n hideInput,\n showInput,\n onCheck,\n addTab,\n confirm,\n };\n}\n","import { PropsWithChildren } from \"react\";\nimport {\n useFavoritesDropdownMenuScript,\n UseFavoritesDropdownMenuScriptOptions,\n} from \"./favoritesDropdownMenu.script\";\nimport { FavoritesDropdownMenu } from \"./favoritesDropdownMenu.ui\";\n\nexport type FavoritesDropdownMenuWidgetProps =\n PropsWithChildren<UseFavoritesDropdownMenuScriptOptions>;\n\nexport const FavoritesDropdownMenuWidget: React.FC<\n FavoritesDropdownMenuWidgetProps\n> = (props) => {\n const state = useFavoritesDropdownMenuScript(props);\n return (\n <FavoritesDropdownMenu {...state}>{props.children}</FavoritesDropdownMenu>\n );\n};\n","export { FavoritesDropdownMenu } from \"./favoritesDropdownMenu.ui\";\nexport { useFavoritesDropdownMenuScript } from \"./favoritesDropdownMenu.script\";\nexport { FavoritesDropdownMenuWidget } from \"./favoritesDropdownMenu.widget\";\n","import { MouseEventHandler, ReactNode } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, TokenIcon, Text, Badge, cn, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n DeleteIcon,\n FavoritesIcon2,\n TopIcon,\n UnFavoritesIcon2,\n} from \"../../icons\";\nimport type { FavoriteInstance } from \"../../type\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\n\nexport const useSideMarketsColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false,\n) => {\n const { t } = useTranslation();\n\n return [\n {\n title: `${t(\"markets.column.market\")} / ${t(\"common.volume\")}`,\n dataIndex: \"24h_amount\",\n multiSort: {\n fields: [\n {\n sortKey: \"symbol\",\n label: t(\"markets.column.market\"),\n },\n {\n sortKey: \"24h_amount\",\n label: t(\"common.volume\"),\n },\n ],\n },\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n let favoritesIcon: ReactNode;\n if (!isFavoriteList) {\n favoritesIcon = (\n <FavoritesDropdownMenuWidget row={record} favorite={favorite}>\n <Flex\n width={12}\n height={12}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-mr-1 oui-cursor-pointer\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-size-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-size-3 oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n </FavoritesDropdownMenuWidget>\n );\n }\n\n return (\n <Flex>\n {favoritesIcon}\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Flex gapX={1}>\n <TokenIcon symbol={record.symbol} className=\"oui-size-[18px]\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"2xs\"\n weight=\"semibold\"\n >\n {record.symbol}\n </Text.formatted>\n <Badge size=\"xs\" color=\"primary\">\n {record.leverage}x\n </Badge>\n </Flex>\n\n <Text.numeral\n intensity={54}\n size=\"2xs\"\n rule=\"human\"\n dp={2}\n rm={Decimal.ROUND_DOWN}\n >\n {value}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n },\n },\n {\n title: t(\"markets.column.price&Change\"),\n dataIndex: \"change\",\n align: \"right\",\n onSort: true,\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(\n record,\n favorite.selectedFavoriteTab,\n true,\n );\n e.stopPropagation();\n };\n\n const iconCls =\n \"oui-w-4 oui-h-4 oui-text-base-contrast-54 hover:oui-text-base-contrast\";\n\n const actions = (\n <div\n className={cn(\n \"oui-absolute oui-right-0 oui-top-[6.5px]\",\n \"oui-hidden group-hover:oui-block\",\n )}\n >\n <Flex\n className={cn(\n \"oui-inline-flex\",\n \"oui-bg-primary-darken oui-py-[6px]\",\n )}\n r=\"base\"\n width={52}\n justify=\"center\"\n itemAlign=\"end\"\n gapX={2}\n >\n <TopIcon\n className={iconCls}\n onClick={(e) => {\n e.stopPropagation();\n favorite.pinToTop(record);\n }}\n />\n <DeleteIcon className={iconCls} onClick={onDelSymbol} />\n </Flex>\n </div>\n );\n\n return (\n <div className=\"oui-relative\">\n {isFavoriteList && actions}\n\n <Flex\n direction=\"column\"\n justify=\"end\"\n itemAlign=\"end\"\n gapY={1}\n className={cn(isFavoriteList && \"group-hover:oui-invisible\")}\n >\n <Text.numeral dp={record.quote_dp || 2} size=\"2xs\">\n {record[\"24h_close\"]}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {value}\n </Text.numeral>\n </Flex>\n </div>\n );\n },\n },\n ] as Column[];\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useSideMarketsColumns } from \"../sideMarkets/column\";\nimport { type MarketsListScriiptReturn } from \"./marketsList.script\";\nimport { type MarketsListWidgetProps } from \"./marketsList.widget\";\n\nexport type MarketsListProps = MarketsListScriiptReturn &\n Pick<\n MarketsListWidgetProps,\n | \"getColumns\"\n | \"panelSize\"\n | \"tableClassNames\"\n | \"rowClassName\"\n | \"initialSort\"\n | \"renderHeader\"\n | \"emptyView\"\n >;\n\nexport const MarketsList: FC<MarketsListProps> = (props) => {\n const {\n loading,\n dataSource,\n favorite,\n onSort,\n initialSort,\n getColumns,\n panelSize,\n isFavoritesList,\n renderHeader,\n emptyView,\n } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const sideColumns = useSideMarketsColumns(favorite, isFavoritesList);\n\n const columns =\n typeof getColumns === \"function\"\n ? getColumns(favorite, isFavoritesList)\n : sideColumns;\n\n if (panelSize === \"small\") {\n return null;\n }\n\n if (panelSize === \"middle\") {\n return <CollapseMarkets dataSource={dataSource} />;\n }\n\n return (\n <>\n {renderHeader?.(favorite)}\n <DataTable\n classNames={{\n root: props.tableClassNames?.root,\n body: props.tableClassNames?.body,\n header: cn(\"oui-h-9\", props.tableClassNames?.header),\n scroll: props.tableClassNames?.scroll,\n empty: \"oui-items-start oui-mt-6\",\n }}\n columns={columns}\n loading={loading}\n dataSource={dataSource}\n onRow={(record) => {\n return {\n className: cn(\"oui-h-[53px]\", props.rowClassName),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n initialSort={\n initialSort\n ? { sortKey: initialSort.sortKey, sort: initialSort.sortOrder }\n : undefined\n }\n manualSorting\n emptyView={emptyView}\n />\n </>\n );\n};\n","import { useMarkets } from \"@orderly.network/hooks\";\nimport { SortOrder, Column } from \"@orderly.network/ui\";\n\nexport type FavoriteInstance = ReturnType<typeof useMarkets>[1];\n\nexport type SortType = {\n sortKey: string;\n sortOrder: SortOrder;\n};\n\nexport type GetColumns = (\n favorite: FavoriteInstance,\n isFavoriteList: boolean,\n) => Column[];\n\nexport enum MarketsPageTab {\n Markets = \"markets\",\n Funding = \"funding\",\n}\n\nexport enum MarketsTabName {\n Favorites = \"favorites\",\n Recent = \"recent\",\n All = \"all\",\n NewListing = \"newListing\",\n}\n\nexport enum FundingTabName {\n Overview = \"overview\",\n Comparison = \"comparison\",\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { MarketsTabName } from \"../../type\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { type MarketsListWidgetProps } from \"./marketsList.widget\";\n\nexport type MarketsListScriptOptions = MarketsListWidgetProps;\n\nexport type MarketsListScriiptReturn = ReturnType<typeof useMarketsListScript>;\n\nconst MarketsTypeMap = {\n [MarketsTabName.All]: MarketsType.ALL,\n [MarketsTabName.Favorites]: MarketsType.FAVORITES,\n [MarketsTabName.Recent]: MarketsType.RECENT,\n [MarketsTabName.NewListing]: MarketsType.NEW_LISTING,\n};\n\nexport const useMarketsListScript = (options: MarketsListScriptOptions) => {\n const [loading, setLoading] = useState(true);\n\n const [data, favorite] = useMarkets(\n MarketsTypeMap[options.type] || MarketsType.ALL,\n );\n\n const { favorites, selectedFavoriteTab } = favorite;\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort(\n options.initialSort,\n options.onSort,\n );\n\n const dataSource = useMemo(() => {\n const filterList =\n typeof options.dataFilter === \"function\"\n ? options.dataFilter(data, { favorites, selectedFavoriteTab })\n : data;\n const searchResults = searchBySymbol(filterList, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [\n data,\n getSortedList,\n searchValue,\n options.dataFilter,\n favorites,\n selectedFavoriteTab,\n ]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n const isFavoritesList = options.type === MarketsTabName.Favorites;\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n isFavoritesList,\n };\n};\n","import { ReactNode } from \"react\";\nimport { Favorite, FavoriteTab } from \"@orderly.network/hooks\";\nimport { DataTableClassNames } from \"@orderly.network/ui\";\nimport {\n FavoriteInstance,\n GetColumns,\n SortType,\n MarketsTabName,\n} from \"../../type\";\nimport { useMarketsListScript } from \"./marketsList.script\";\nimport { MarketsList } from \"./marketsList.ui\";\n\nexport type MarketsListWidgetProps = {\n type: MarketsTabName;\n getColumns?: GetColumns;\n panelSize?: \"small\" | \"middle\" | \"large\";\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n initialSort?: SortType;\n onSort?: (sort?: SortType) => void;\n renderHeader?: (favorite: FavoriteInstance) => ReactNode;\n dataFilter?: (\n data: any[],\n options: { favorites: Favorite[]; selectedFavoriteTab: FavoriteTab },\n ) => any[];\n emptyView?: ReactNode;\n};\n\nexport const MarketsListWidget: React.FC<MarketsListWidgetProps> = (props) => {\n const state = useMarketsListScript(props);\n return (\n <MarketsList\n {...state}\n initialSort={props.initialSort}\n getColumns={props.getColumns}\n panelSize={props.panelSize}\n tableClassNames={props.tableClassNames}\n rowClassName={props.rowClassName}\n renderHeader={props.renderHeader}\n emptyView={props.emptyView}\n />\n );\n};\n","export { MarketsList } from \"./marketsList.ui\";\nexport { useMarketsListScript } from \"./marketsList.script\";\nexport { MarketsListWidget } from \"./marketsList.widget\";\n","import React, { useRef, useCallback } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n CloseCircleFillIcon,\n cn,\n Input,\n InputProps,\n} from \"@orderly.network/ui\";\nimport { SearchIcon } from \"../../icons\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\ntype SearchInputProps = Pick<InputProps, \"classNames\" | \"suffix\">;\n\nexport const SearchInput: React.FC<SearchInputProps> = (props) => {\n const { classNames, suffix } = props;\n const isComposingRef = useRef<boolean>(false);\n\n const { t } = useTranslation();\n\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const handleCompositionStart = useCallback(() => {\n isComposingRef.current = true;\n }, []);\n\n const handleCompositionEnd = useCallback(\n (event: React.CompositionEvent<HTMLInputElement>) => {\n isComposingRef.current = false;\n onSearchValueChange?.(event.currentTarget.value);\n },\n [onSearchValueChange],\n );\n\n return (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n placeholder={t(\"markets.search.placeholder\")}\n classNames={{\n ...classNames,\n // use mt-px to fix the top border issue\n root: cn(\"oui-mt-px oui-border oui-border-line\", classNames?.root),\n }}\n size=\"sm\"\n prefix={\n <Box pl={3} pr={1}>\n <SearchIcon className=\"oui-text-base-contrast-36\" />\n </Box>\n }\n suffix={\n suffix ||\n (searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-cursor-pointer oui-text-base-contrast-36\"\n onClick={clearSearchValue}\n />\n </Box>\n ))\n }\n autoComplete=\"off\"\n />\n );\n};\n","import { ReactNode } from \"react\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { Text, Column, Flex, TokenIcon, Badge } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FavoritesIcon2, UnFavoritesIcon2 } from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\n\nexport function getSymbolColumn(\n favorite: FavoriteInstance,\n isFavoriteList = false,\n) {\n return {\n title: i18n.t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 150,\n onSort: true,\n render: (value, record) => {\n let favoritesIcon: ReactNode;\n if (!isFavoriteList) {\n favoritesIcon = (\n <FavoritesDropdownMenuWidget row={record} favorite={favorite}>\n <Flex\n width={12}\n height={12}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-mr-1 oui-cursor-pointer\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-size-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-size-3 oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n </FavoritesDropdownMenuWidget>\n );\n }\n\n return (\n <Flex gapX={1}>\n {favoritesIcon}\n <TokenIcon symbol={value} className=\"oui-size-[18px]\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"2xs\"\n weight=\"semibold\"\n >\n {value}\n </Text.formatted>\n <Badge size=\"xs\" color=\"primary\">\n {record.leverage}x\n </Badge>\n </Flex>\n );\n },\n } as Column<any>;\n}\n\nexport function getLastColumn() {\n return {\n title: i18n.t(\"markets.column.last\"),\n dataIndex: \"24h_close\",\n align: \"right\",\n onSort: true,\n width: 100,\n render: (value, record) => {\n return (\n <Text.numeral dp={record.quote_dp || 2} size=\"2xs\">\n {value}\n </Text.numeral>\n );\n },\n } as Column<any>;\n}\n\nexport function get24hPercentageColumn() {\n return {\n title: i18n.t(\"markets.column.24hPercentage\"),\n dataIndex: \"change\",\n align: \"right\",\n onSort: true,\n width: 80,\n render: (value) => {\n return (\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {value}\n </Text.numeral>\n );\n },\n } as Column<any>;\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Button,\n cn,\n EmptyStateIcon,\n Flex,\n PlusIcon,\n Text,\n} from \"@orderly.network/ui\";\n\ntype FavoritesEmptyProps = {\n className?: string;\n onClick: () => void;\n};\n\nexport const FavoritesEmpty: FC<FavoritesEmptyProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"center\"\n gapY={4}\n className={cn(\"oui-text-center\", props.className)}\n >\n <EmptyStateIcon />\n <Button\n color=\"gray\"\n size=\"xs\"\n className=\"oui-bg-base-4\"\n onClick={props.onClick}\n >\n <PlusIcon\n className=\"oui-mr-1 oui-text-base-contrast\"\n opacity={1}\n size={12}\n />\n <Text intensity={98}>{t(\"markets.favorites.addFavorites\")}</Text>\n </Button>\n </Flex>\n );\n};\n","import { KeyboardEventHandler } from \"react\";\nimport { FavoriteTab } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n cn,\n Flex,\n Text,\n Tooltip,\n Input,\n modal,\n} from \"@orderly.network/ui\";\nimport { AddIcon, ActiveAddIcon, EditIcon, TrashIcon } from \"../../icons\";\nimport {\n UseFavoritesTabScriptOptions,\n UseFavoritesTabScriptReturn,\n} from \"./favoritesTabs.script\";\n\nexport type FavoritesTabProps = UseFavoritesTabScriptReturn &\n Pick<UseFavoritesTabScriptOptions, \"size\"> & {\n className?: string;\n };\n\nexport const FavoritesTab: React.FC<FavoritesTabProps> = (props) => {\n const {\n open,\n setOpen,\n container,\n inputRef,\n inputWidth,\n spanRef,\n editing,\n value,\n onValueChange,\n updateCurTab,\n onEdit,\n addTab,\n delTab,\n size = \"default\",\n scrollable,\n } = props;\n\n const { t } = useTranslation();\n\n const { selectedFavoriteTab, favoriteTabs, updateSelectedFavoriteTab } =\n props.favorite;\n\n const addIconWidth = size === \"sm\" ? 28 : 36;\n const tabHeight = size === \"sm\" ? 18 : 24;\n const overLen = value?.length > 15;\n\n const gradientColor =\n \"oui-bg-gradient-to-r oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)] oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)]\";\n\n const onDel = (item: any) => {\n modal.confirm({\n title: t(\"markets.favorites.tabs.delete.dialog.title\"),\n content: (\n <Text size=\"sm\">\n {t(\"markets.favorites.tabs.delete.dialog.description\", {\n name: item.name,\n })}\n </Text>\n ),\n onOk() {\n delTab(item);\n return Promise.resolve();\n },\n });\n };\n\n const onKeyUp: KeyboardEventHandler = (e) => {\n if (e.key === \"Enter\") {\n updateCurTab(overLen);\n }\n };\n\n const renderActions = (item: any) => {\n return (\n <Flex gapX={2} itemAlign=\"center\" px={2} py={1}>\n <EditIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n onClick={() => {\n onEdit(item);\n }}\n />\n <TrashIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n onClick={() => {\n onDel(item);\n }}\n />\n </Flex>\n );\n };\n\n const renderAdd = () => {\n const overTabs = favoriteTabs.length >= 10;\n\n const icon = (\n <Flex\n className={cn(\n \"oui-inline-flex\",\n overTabs ? \"oui-cursor-not-allowed\" : \"oui-cursor-pointer\",\n overTabs ? \"oui-bg-base-3\" : gradientColor,\n )}\n width={addIconWidth}\n height={tabHeight}\n r=\"base\"\n justify=\"center\"\n itemAlign=\"center\"\n onClick={overTabs ? undefined : addTab}\n >\n {overTabs ? (\n <AddIcon className=\"oui-z-[1] oui-size-3 oui-text-base-contrast-54\" />\n ) : (\n <ActiveAddIcon className=\"oui-size-3\" />\n )}\n </Flex>\n );\n\n if (overTabs) {\n return (\n <Tooltip\n // @ts-ignore\n content={\n <Text size=\"2xs\" intensity={80}>\n Maximum 10 groups in the favorite list\n </Text>\n }\n className=\"oui-bg-base-6\"\n delayDuration={0}\n arrow={{ className: \"oui-fill-base-6\" }}\n >\n {icon}\n </Tooltip>\n );\n }\n\n return icon;\n };\n\n const renderInput = (isActive: boolean) => {\n return (\n <Tooltip\n open={overLen}\n // @ts-ignore\n content={\n <Text size=\"2xs\" intensity={80}>\n List name cannot exceed 15 characters\n </Text>\n }\n className=\"oui-bg-base-6\"\n delayDuration={0}\n sideOffset={0}\n >\n <Input\n ref={inputRef}\n style={\n overLen\n ? { width: inputWidth }\n : {\n // @ts-ignore\n \"--oui-gradient-angle\": \"270deg\",\n backgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n WebkitBackgroundClip: \"text\",\n width: inputWidth,\n }\n }\n classNames={{\n root: cn(\n \"oui-my-px oui-rounded oui-p-0 oui-px-2\",\n \"focus-within:oui-outline-transparent focus-visible:oui-outline-none\",\n size === \"sm\" ? \"oui-h-[18px]\" : \"oui-h-[24px]\",\n isActive && cn(overLen ? \"oui-bg-danger/15\" : gradientColor),\n ),\n input: cn(\n \"oui-font-semibold oui-caret-[rgba(217,217,217,1)]\",\n overLen\n ? \"oui-text-danger\"\n : \"oui-text-transparent oui-gradient-brand \",\n size === \"sm\" ? \"oui-text-2xs\" : \"oui-text-sm\",\n ),\n }}\n value={value}\n onValueChange={onValueChange}\n onBlur={() => {\n updateCurTab(overLen);\n }}\n onKeyUp={onKeyUp}\n autoComplete=\"off\"\n />\n </Tooltip>\n );\n };\n\n const renderContent = (item: FavoriteTab, isActive: boolean) => {\n if (editing && isActive) {\n return renderInput(isActive);\n }\n\n const textProps = {\n weight: \"semibold\",\n size: size === \"sm\" ? \"2xs\" : \"sm\",\n className: size === \"sm\" ? \"oui-leading-[18px]\" : \"oui-leading-[24px]\",\n as: \"div\",\n } as any;\n\n const content = isActive ? (\n <Text.gradient color=\"brand\" angle={270} {...textProps}>\n {item.name}\n </Text.gradient>\n ) : (\n <Text {...textProps}>{item.name}</Text>\n );\n\n return (\n <Box\n r=\"base\"\n px={2}\n height={tabHeight}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive\n ? \"oui-markets-favorites-active-tab-item\"\n : \"oui-markets-favorites-tab-item\",\n isActive\n ? gradientColor\n : \"oui-bg-line-6 oui-text-base-contrast-36 hover:oui-text-base-contrast\",\n )}\n onClick={() => {\n updateSelectedFavoriteTab(item);\n if (isActive) {\n setOpen(true);\n }\n }}\n >\n {content}\n </Box>\n );\n };\n\n return (\n <Flex width=\"100%\" gapX={3} className={props.className}>\n <Flex\n ref={container}\n id=\"oui-markets-favorites-tabs-container\"\n className={cn(\n \"oui-hide-scrollbar oui-relative oui-cursor-pointer\",\n \"oui-overflow-hidden oui-overflow-x-auto\",\n )}\n // my={3}\n gapX={size === \"sm\" ? 2 : 3}\n width=\"100%\"\n >\n {favoriteTabs?.slice(0, 10)?.map((item: any) => {\n const isActive = selectedFavoriteTab.id === item.id;\n return (\n <Tooltip\n key={item.id}\n open={isActive && !editing ? open : false}\n onOpenChange={(open) => {\n if (isActive) {\n setOpen(open);\n }\n }}\n // @ts-ignore\n content={renderActions(item)}\n delayDuration={0}\n className={cn(\"oui-bg-base-5\")}\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n >\n {renderContent(item, isActive)}\n </Tooltip>\n );\n })}\n\n {!scrollable && renderAdd()}\n\n <Text size=\"xs\" ref={spanRef} className=\"oui-invisible\">\n {value}\n </Text>\n </Flex>\n {scrollable && renderAdd()}\n </Flex>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { FavoriteInstance } from \"../../type\";\n\nexport type UseFavoritesTabScriptOptions = {\n favorite: FavoriteInstance;\n size?: \"sm\" | \"default\";\n};\n\nexport type UseFavoritesTabScriptReturn = ReturnType<\n typeof useFavoritesTabScript\n>;\n\nexport function useFavoritesTabScript(options: UseFavoritesTabScriptOptions) {\n const { favorite, size = \"default\" } = options;\n const {\n favorites,\n favoriteTabs,\n selectedFavoriteTab,\n updateFavoriteTabs,\n updateSelectedFavoriteTab,\n updateFavorites,\n } = favorite;\n\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState(false);\n const [value, setValue] = useState(\"\");\n const [scrollable, setScrollable] = useState(false);\n\n const scrollView = useRef<HTMLInputElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const spanRef = useRef<HTMLSpanElement>(null);\n\n const [inputWidth, setInputWidth] = useState(50);\n\n const updateScrollLayout = () => {\n const addIconWidth = size === \"sm\" ? 28 : 36;\n setTimeout(() => {\n const { scrollWidth, clientWidth } = scrollView.current || {};\n\n if (scrollWidth! > clientWidth!) {\n setScrollable(true);\n }\n }, 0);\n };\n\n const scrollToRight = () => {\n setTimeout(() => {\n if (scrollView.current) {\n scrollView.current.scrollLeft =\n scrollView.current.scrollWidth - scrollView.current.clientWidth;\n }\n }, 0);\n };\n\n const onEdit = (item: any) => {\n setEditing(true);\n setValue(item.name);\n setTimeout(() => {\n inputRef.current?.focus();\n inputRef.current?.setSelectionRange(-1, -1);\n }, 0);\n };\n\n const updateCurTab = (overLen: boolean) => {\n updateFavoriteTabs(\n {\n ...selectedFavoriteTab,\n name: overLen ? selectedFavoriteTab.name : value,\n },\n { update: true },\n );\n setEditing(false);\n setOpen(false);\n updateScrollLayout();\n };\n\n const addTab = () => {\n const newTab = {\n name: `WatchList_${favoriteTabs.length}`,\n id: Date.now(),\n };\n updateFavoriteTabs(newTab, { add: true });\n updateSelectedFavoriteTab(newTab);\n updateScrollLayout();\n scrollToRight();\n };\n\n const delTab = (selectedTab: any) => {\n updateFavoriteTabs(selectedTab, { delete: true });\n\n setTimeout(() => {\n // remove all symbol favorite in this tab\n const _favorites = favorites.map((item) => ({\n ...item,\n tabs: item.tabs?.filter((tab) => tab.id !== selectedTab.id),\n }));\n\n updateFavorites(_favorites);\n\n // auto selected last tab\n const tabs = favoriteTabs.filter((item) => item.id !== selectedTab.id);\n const tab = tabs?.[tabs?.length - 1] || tabs?.[0];\n updateSelectedFavoriteTab(tab);\n }, 0);\n };\n\n useEffect(() => {\n if (value) {\n const rect = spanRef.current?.getBoundingClientRect();\n const offset = size === \"sm\" ? 0 : 14;\n setInputWidth(Math.max((rect?.width || 0) + offset, 50));\n }\n }, [value]);\n\n useEffect(() => {\n updateScrollLayout();\n }, []);\n\n return {\n favorite,\n open,\n setOpen,\n container: scrollView,\n inputRef,\n inputWidth,\n spanRef,\n editing,\n value,\n onValueChange: setValue,\n onEdit,\n updateCurTab,\n addTab,\n delTab,\n scrollable,\n };\n}\n","import {\n useFavoritesTabScript,\n UseFavoritesTabScriptOptions,\n} from \"./favoritesTabs.script\";\nimport { FavoritesTab } from \"./favoritesTabs.ui\";\n\nexport type FavoritesTabWidgetProps = UseFavoritesTabScriptOptions & {\n className?: string;\n};\n\nexport const FavoritesTabWidget: React.FC<FavoritesTabWidgetProps> = (\n props,\n) => {\n const { className, ...rest } = props;\n const state = useFavoritesTabScript(rest);\n return <FavoritesTab {...state} size={props.size} className={className} />;\n};\n","export { FavoritesTab } from \"./favoritesTabs.ui\";\nexport { useFavoritesTabScript } from \"./favoritesTabs.script\";\nexport { FavoritesTabWidget } from \"./favoritesTabs.widget\";\n","import { useCallback } from \"react\";\nimport { Favorite, FavoriteTab } from \"@orderly.network/hooks\";\nimport { Box } from \"@orderly.network/ui\";\nimport { FavoriteInstance, MarketsTabName } from \"../../../type\";\nimport { FavoritesEmpty } from \"../../favoritesEmpty\";\nimport { FavoritesTabWidget } from \"../../favoritesTabs\";\nimport { useMarketsContext } from \"../../marketsProvider\";\n\nexport function useFavoritesProps() {\n const { searchValue } = useMarketsContext();\n const renderHeader = useCallback((favorite: FavoriteInstance) => {\n return (\n <Box px={3} className=\"oui-my-[6px]\">\n <FavoritesTabWidget favorite={favorite} size=\"sm\" />\n </Box>\n );\n }, []);\n\n const dataFilter = useCallback(\n (\n data: any[],\n options: { favorites: Favorite[]; selectedFavoriteTab: FavoriteTab },\n ) => {\n const { favorites, selectedFavoriteTab } = options;\n\n return favorites\n ?.filter(\n (item) =>\n item.tabs?.findIndex((tab) => tab.id === selectedFavoriteTab.id) !==\n -1,\n )\n ?.map((fav) => {\n const index = data?.findIndex((item) => item.symbol === fav.name);\n if (index !== -1) {\n return data[index];\n }\n return null;\n })\n ?.filter((item) => item);\n },\n [],\n );\n\n const getFavoritesProps = useCallback(\n (type: MarketsTabName) => {\n if (type === MarketsTabName.Favorites) {\n return { renderHeader, dataFilter };\n }\n return {};\n },\n [renderHeader, dataFilter],\n );\n\n const renderEmptyView = useCallback(\n (options: {\n type: MarketsTabName;\n onClick: () => void;\n className?: string;\n }) => {\n if (options.type === MarketsTabName.Favorites && !searchValue) {\n return (\n <FavoritesEmpty\n onClick={options.onClick}\n className={options.className}\n />\n );\n }\n\n return undefined;\n },\n [searchValue],\n );\n\n return {\n renderHeader,\n dataFilter,\n getFavoritesProps,\n renderEmptyView,\n };\n}\n","import { useCallback } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, Column, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { MarketsListWidget } from \"../../../components/marketsList\";\nimport { SearchInput } from \"../../../components/searchInput\";\nimport {\n get24hPercentageColumn,\n getLastColumn,\n getSymbolColumn,\n} from \"../../../components/shared/column\";\nimport { useFavoritesProps } from \"../../../components/shared/hooks/useFavoritesExtraProps\";\nimport { AllMarketsIcon, FavoritesIcon, NewListingsIcon } from \"../../../icons\";\nimport { FavoriteInstance, MarketsTabName } from \"../../../type\";\nimport { UseMarketsDataListScript } from \"./marketsDataList.script\";\n\nexport type MobileMarketsDataListProps = UseMarketsDataListScript;\n\nexport const MobileMarketsDataList: React.FC<MobileMarketsDataListProps> = (\n props,\n) => {\n const { activeTab, onTabChange, tabSort, onTabSort } = props;\n const { t } = useTranslation();\n\n const getColumns = useCallback(\n (favorite: FavoriteInstance, isFavoriteList = false) => {\n return [\n getSymbolColumn(favorite, isFavoriteList),\n getLastColumn(),\n get24hPercentageColumn(),\n ] as Column[];\n },\n [],\n );\n\n const { getFavoritesProps } = useFavoritesProps();\n\n const renderTab = (type: MarketsTabName) => {\n return (\n <>\n <SearchInput\n classNames={{\n root: cn(\n \"oui-mx-3 oui-mb-4 oui-mt-5\",\n activeTab !== MarketsTabName.Favorites && \"oui-mb-2\",\n ),\n }}\n />\n <MarketsListWidget\n type={type}\n initialSort={tabSort[type]}\n onSort={onTabSort(type)}\n getColumns={getColumns}\n rowClassName=\"!oui-h-[34px]\"\n {...getFavoritesProps(type)}\n />\n </>\n );\n };\n\n return (\n <Box id=\"oui-markets-list\" intensity={900} py={3} mt={2} r=\"2xl\">\n <Tabs\n variant=\"contained\"\n size=\"lg\"\n value={activeTab}\n onValueChange={onTabChange}\n classNames={{\n scrollIndicator: \"oui-mx-3\",\n }}\n showScrollIndicator\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value=\"favorites\"\n >\n {renderTab(MarketsTabName.Favorites)}\n </TabPanel>\n <TabPanel\n title={t(\"markets.allMarkets\")}\n icon={<AllMarketsIcon />}\n value=\"all\"\n >\n {renderTab(MarketsTabName.All)}\n </TabPanel>\n <TabPanel\n title={t(\"markets.newListings\")}\n icon={<NewListingsIcon />}\n value=\"new\"\n >\n {renderTab(MarketsTabName.NewListing)}\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { useCallback } from \"react\";\nimport { useSessionStorage } from \"@orderly.network/hooks\";\nimport { SortType, MarketsTabName } from \"../../../type\";\n\nexport function useTabSort(options: { storageKey: string }) {\n const [tabSort, setTabSort] = useSessionStorage(options.storageKey, {\n [MarketsTabName.All]: {\n sortKey: \"24h_amount\",\n sortOrder: \"desc\",\n },\n } as Record<MarketsTabName, SortType>);\n\n const onTabSort = useCallback(\n (type: MarketsTabName) => (sort?: SortType) => {\n setTabSort({ ...tabSort, [type]: sort });\n },\n [tabSort],\n );\n\n return {\n tabSort,\n onTabSort,\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { useTabSort } from \"../../../components/shared/hooks/useTabSort\";\nimport { MarketsTabName } from \"../../../type\";\n\nexport type UseMarketsDataListScript = ReturnType<\n typeof useMarketsDataListScript\n>;\n\nconst MOBILE_MARKETS_TAB_SORT_STORAGE_KEY = \"orderly_mobile_markets_tab_sort\";\n\nexport function useMarketsDataListScript() {\n const [activeTab, setActiveTab] = useState<MarketsTabName>(\n MarketsTabName.All,\n );\n const { clearSearchValue, searchValue } = useMarketsContext();\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: MOBILE_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n useEffect(() => {\n clearSearchValue?.();\n }, [activeTab]);\n\n return {\n activeTab,\n onTabChange: (value: string) => setActiveTab(value as MarketsTabName),\n tabSort,\n onTabSort,\n searchValue,\n };\n}\n","import { MouseEventHandler, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Text, Box, Tooltip, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n FavoritesIcon,\n MoveToTopIcon,\n OrderlyIcon,\n UnFavoritesIcon,\n} from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\n\nexport const useMarketsListFullColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false,\n) => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: <UnFavoritesIcon className=\"oui-mt-1\" />,\n dataIndex: \"isFavorite\",\n align: \"center\",\n width: 30,\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(\n record,\n favorite.selectedFavoriteTab,\n true,\n );\n e.stopPropagation();\n };\n\n const button = (\n <Flex\n width=\"100%\"\n height=\"100%\"\n mr={3}\n justify=\"center\"\n itemAlign=\"center\"\n onClick={isFavoriteList ? onDelSymbol : undefined}\n data-testid=\"oui-testid-markets-table-row-favorite-icon\"\n >\n {value ? (\n <FavoritesIcon className=\"oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon className=\"oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n );\n\n if (isFavoriteList) {\n return button;\n }\n\n return (\n <FavoritesDropdownMenuWidget row={record} favorite={favorite}>\n {button}\n </FavoritesDropdownMenuWidget>\n );\n },\n },\n {\n title: t(\"markets.column.market\"),\n dataIndex: \"symbol\",\n width: 90,\n onSort: true,\n render: (value) => {\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"xs\"\n weight=\"semibold\"\n showIcon\n >\n {value}\n </Text.formatted>\n );\n },\n },\n {\n title: t(\"common.price\"),\n dataIndex: \"24h_close\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value, record) => {\n return (\n <Text.numeral dp={record.quote_dp || 2} currency=\"$\">\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"markets.column.24hChange\"),\n dataIndex: \"change\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value) => {\n return (\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.column.24hVolume\")}\n </Flex>\n ),\n dataIndex: \"24h_amount\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value) => {\n return (\n <Text.numeral currency=\"$\" dp={0} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.openInterest\")}\n </Flex>\n ),\n dataIndex: \"openInterest\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value) => {\n return (\n <Text.numeral currency=\"$\" dp={0} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"markets.dataList.column.8hFunding\"),\n dataIndex: \"8h_funding\",\n width: 100,\n align: \"right\",\n onSort: true,\n render: (value) => {\n if (value === null) {\n return \"--\";\n }\n return (\n <Text.numeral\n rule=\"percentages\"\n coloring\n dp={4}\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n );\n },\n },\n {\n dataIndex: \"action\",\n type: \"action\",\n width: 40,\n render: (value, record) => {\n if (isFavoriteList) {\n return (\n <Flex justify=\"end\" mr={4}>\n <Tooltip\n content={t(\"markets.dataList.column.moveTop\")}\n align=\"center\"\n delayDuration={0}\n >\n <Box\n className=\"oui-hidden oui-cursor-pointer group-hover:oui-block\"\n onClick={(e) => {\n e.stopPropagation();\n favorite.pinToTop(record);\n }}\n data-testid=\"oui-markets-favorites-pinned-icon\"\n >\n <MoveToTopIcon className=\"oui-text-base-contrast-20 hover:oui-text-base-contrast\" />\n </Box>\n </Tooltip>\n </Flex>\n );\n }\n return null;\n },\n },\n ] as Column[];\n }, [favorite, isFavoriteList, t]);\n\n return columns;\n};\n","import { FC, ReactNode } from \"react\";\nimport { Trans } from \"@orderly.network/i18n\";\nimport { cn, Flex, DataTable } from \"@orderly.network/ui\";\nimport { FavoritesTabWidget } from \"../../components/favoritesTabs\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { UnFavoritesIcon } from \"../../icons\";\nimport { useMarketsListFullColumns } from \"../marketsListFull/column\";\nimport { UseFavoritesListFullReturn } from \"./favoritesListFull.script\";\n\nexport type FavoritesListFullProps = UseFavoritesListFullReturn & {\n emptyView?: ReactNode;\n};\n\nexport const FavoritesListFull: FC<FavoritesListFullProps> = (props) => {\n const { dataSource, favorite, onSort, loading, pagination } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const columns = useMarketsListFullColumns(favorite, true);\n\n const emptyView = props.emptyView || (\n <Flex className=\"oui-text-xs oui-text-base-contrast-36\">\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"markets.dataList.favorites.empty\"\n components={[\n <UnFavoritesIcon key=\"0\" className=\"oui-text-base-contrast-36\" />,\n ]}\n />\n </Flex>\n );\n\n return (\n <div>\n <FavoritesTabWidget favorite={favorite} className=\"oui-my-3\" />\n\n <DataTable\n bordered\n // minHeight={187.5}\n columns={columns}\n dataSource={dataSource}\n emptyView={emptyView}\n classNames={{\n empty: \"oui-items-start oui-mt-6\",\n }}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[55px] oui-cursor-pointer\"),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n pagination={pagination}\n manualSorting\n />\n </div>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\n\nexport type UseFavoritesListFullReturn = ReturnType<\n typeof useFavoritesListFullScript\n>;\n\nexport const useFavoritesListFullScript = () => {\n const { pageSize, setPage, pagination } = usePagination({\n pageSize: 10,\n });\n const [data, favorite] = useMarkets(MarketsType.FAVORITES);\n const [loading, setLoading] = useState(true);\n\n const { favorites, selectedFavoriteTab } = favorite;\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort();\n\n const filterData = useMemo(() => {\n const filterList = favorites\n ?.filter(\n (item) =>\n item.tabs?.findIndex((tab) => tab.id === selectedFavoriteTab.id) !==\n -1,\n )\n ?.map((fav) => {\n const index = data?.findIndex((item) => item.symbol === fav.name);\n if (index !== -1) {\n return data[index];\n }\n return null;\n })\n ?.filter((item) => !!item);\n\n return searchBySymbol(filterList, searchValue, \"base-type\");\n }, [data, selectedFavoriteTab, favorites, searchValue]);\n\n const dataSource = useMemo(\n () => getSortedList(filterData),\n [filterData, getSortedList],\n );\n\n useEffect(() => {\n setLoading(false);\n }, [favorites]);\n\n useEffect(() => {\n setPage(1);\n }, [searchValue]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n pagination,\n };\n};\n","import { ReactNode } from \"react\";\nimport { useFavoritesListFullScript } from \"./favoritesListFull.script\";\nimport { FavoritesListFull } from \"./favoritesListFull.ui\";\n\nexport type FavoritesListFullWidgetProps = {\n emptyView?: ReactNode;\n};\n\nexport const FavoritesListFullWidget: React.FC<FavoritesListFullWidgetProps> = (\n props,\n) => {\n const state = useFavoritesListFullScript();\n return <FavoritesListFull {...state} emptyView={props.emptyView} />;\n};\n","export { FavoritesListFull } from \"./favoritesListFull.ui\";\nexport { useFavoritesListFullScript } from \"./favoritesListFull.script\";\nexport { FavoritesListFullWidget } from \"./favoritesListFull.widget\";\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useMarketsListFullColumns } from \"./column\";\nimport { type UseMarketsListFullReturn } from \"./marketsListFull.script\";\n\nexport type MarketsListFullProps = UseMarketsListFullReturn & {\n type?: \"all\" | \"new\";\n};\n\nexport const MarketsListFull: FC<MarketsListFullProps> = (props) => {\n const {\n loading,\n dataSource,\n favorite,\n onSort,\n initialSort,\n type,\n pagination,\n } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const columns = useMarketsListFullColumns(favorite, false);\n\n return (\n <DataTable\n bordered\n columns={columns}\n loading={loading}\n dataSource={dataSource}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[55px] oui-cursor-pointer\"),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n \"data-testid\": `oui-testid-markets-${\n type === \"new\" ? \"newListing\" : \"all\"\n }-tr-${record.symbol}`,\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n initialSort={initialSort}\n pagination={pagination}\n classNames={{\n header: \"oui-h-12\",\n }}\n manualSorting\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { TableSort, usePagination } from \"@orderly.network/ui\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { MarketsListFullWidgetProps } from \"./marketsListFull.widget\";\n\nexport type UseMarketsListFullScriptOptions = MarketsListFullWidgetProps;\n\nexport type UseMarketsListFullReturn = ReturnType<\n typeof useMarketsListFullScript\n>;\n\nexport const useMarketsListFullScript = (\n options: UseMarketsListFullScriptOptions,\n) => {\n const [loading, setLoading] = useState(true);\n const { setPage, pagination } = usePagination({\n pageSize: 10,\n });\n\n const [data, favorite] = useMarkets(MarketsType.ALL);\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList, sort } = useSort(options.initialSort);\n\n const dataSource = useMemo(() => {\n const searchList = searchBySymbol(data, searchValue, \"base-type\");\n return getSortedList(searchList);\n }, [data, getSortedList, searchValue]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n useEffect(() => {\n setPage(1);\n }, [searchValue]);\n\n useEffect(() => {\n // Only all markets store sort\n if (options.type === \"all\") {\n favorite.updateTabsSortState(\"all\", sort?.sortKey!, sort?.sortOrder!);\n }\n }, [sort, options.type]);\n\n const initialSort = useMemo(() => {\n const sortStore =\n options.type === \"all\" ? favorite.tabSort?.all : undefined;\n\n return {\n sortKey: sortStore?.sortKey || options?.initialSort?.sortKey,\n sort: sortStore?.sortOrder || options?.initialSort?.sortOrder,\n } as TableSort;\n }, [favorite.tabSort, options.initialSort, options.type]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n pagination,\n initialSort,\n };\n};\n","import { SortType } from \"../../type\";\nimport { useMarketsListFullScript } from \"./marketsListFull.script\";\nimport { MarketsListFull } from \"./marketsListFull.ui\";\n\nexport type MarketsListFullWidgetProps = {\n type?: \"all\" | \"new\";\n initialSort?: SortType;\n};\n\nexport const MarketsListFullWidget: React.FC<MarketsListFullWidgetProps> = (\n props,\n) => {\n const state = useMarketsListFullScript(props);\n\n return <MarketsListFull {...state} type={props.type} />;\n};\n","export { MarketsListFull } from \"./marketsListFull.ui\";\nexport { useMarketsListFullScript } from \"./marketsListFull.script\";\nexport { MarketsListFullWidget } from \"./marketsListFull.widget\";\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { FavoritesEmpty } from \"../../../components/favoritesEmpty\";\nimport { AllMarketsIcon, FavoritesIcon, NewListingsIcon } from \"../../../icons\";\nimport { MarketsTabName } from \"../../../type\";\nimport { UseMarketsDataListScript } from \"./marketsDataList.script\";\n\nconst LazySearchInput = React.lazy(() =>\n import(\"../../../components/searchInput\").then((mod) => {\n return { default: mod.SearchInput };\n }),\n);\n\nconst LazyFavoritesListFullWidget = React.lazy(() =>\n import(\"../../../components/favoritesListFull\").then((mod) => {\n return { default: mod.FavoritesListFullWidget };\n }),\n);\n\nconst LazyMarketsListFullWidget = React.lazy(() =>\n import(\"../../../components/marketsListFull\").then((mod) => {\n return { default: mod.MarketsListFullWidget };\n }),\n);\n\nexport type MarketsDataListProps = UseMarketsDataListScript;\n\nexport const MarketsDataList: React.FC<MarketsDataListProps> = (props) => {\n const { searchValue, activeTab, onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Box id=\"oui-markets-list\" intensity={900} p={6} r=\"2xl\">\n <Tabs\n variant=\"contained\"\n size=\"xl\"\n value={activeTab}\n onValueChange={onTabChange}\n trailing={\n <React.Suspense fallback={null}>\n <LazySearchInput classNames={{ root: \"oui-my-1 oui-w-[240px]\" }} />\n </React.Suspense>\n }\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value=\"favorites\"\n testid=\"oui-testid-markets-favorites-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyFavoritesListFullWidget\n emptyView={\n !searchValue && (\n <FavoritesEmpty\n onClick={() => onTabChange(MarketsTabName.All)}\n />\n )\n }\n />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"markets.allMarkets\")}\n icon={<AllMarketsIcon />}\n value=\"all\"\n testid=\"oui-testid-markets-all-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyMarketsListFullWidget\n type=\"all\"\n initialSort={{ sortKey: \"24h_amount\", sortOrder: \"desc\" }}\n />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"markets.newListings\")}\n icon={<NewListingsIcon />}\n value=\"new\"\n testid=\"oui-testid-markets-newListings-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyMarketsListFullWidget\n type=\"new\"\n initialSort={{ sortKey: \"created_time\", sortOrder: \"desc\" }}\n />\n </React.Suspense>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import React from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { MobileMarketsDataList } from \"./marketsDataList.mobile.ui\";\nimport { useMarketsDataListScript } from \"./marketsDataList.script\";\nimport { MarketsDataList } from \"./marketsDataList.ui\";\n\nexport const MarketsDataListWidget: React.FC = () => {\n const { isMobile } = useScreen();\n const state = useMarketsDataListScript();\n return isMobile ? (\n <MobileMarketsDataList {...state} />\n ) : (\n <MarketsDataList {...state} />\n );\n};\n","export { MarketsDataListWidget } from \"./marketsDataList.widget\";\nexport { useMarketsDataListScript } from \"./marketsDataList.script\";\nexport { MarketsDataList } from \"./marketsDataList.ui\";\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { FavoritesIcon } from \"../../icons\";\nimport { MarketsTabName } from \"../../type\";\nimport { useFavoritesProps } from \"../shared/hooks/useFavoritesExtraProps\";\nimport type { ExpandMarketsScriptReturn } from \"./expandMarkets.script\";\n\nconst LazySearchInput = React.lazy(() =>\n import(\"../searchInput\").then((mod) => {\n return { default: mod.SearchInput };\n }),\n);\n\nconst LazyMarketsListWidget = React.lazy(() =>\n import(\"../marketsList\").then((mod) => {\n return { default: mod.MarketsListWidget };\n }),\n);\n\nexport type ExpandMarketsProps = ExpandMarketsScriptReturn;\n\nconst cls = \"oui-h-[calc(100%_-_36px)]\";\n\nexport const ExpandMarkets: React.FC<ExpandMarketsProps> = (props) => {\n const { activeTab, onTabChange, tabSort, onTabSort } = props;\n\n const { t } = useTranslation();\n\n const { getFavoritesProps, renderEmptyView } = useFavoritesProps();\n\n const renderTab = (type: MarketsTabName) => {\n return (\n <div className={cls}>\n <React.Suspense fallback={null}>\n <LazyMarketsListWidget\n type={type}\n initialSort={tabSort[type]}\n onSort={onTabSort(type)}\n tableClassNames={{\n scroll: cn(\n \"oui-px-1\",\n type === MarketsTabName.Favorites ? \"oui-pb-9\" : \"oui-pb-2\",\n ),\n }}\n {...getFavoritesProps(type)}\n emptyView={renderEmptyView({\n type,\n onClick: () => {\n onTabChange(MarketsTabName.All);\n },\n })}\n />\n </React.Suspense>\n </div>\n );\n };\n\n return (\n <Box className={cn(\"oui-overflow-hidden oui-font-semibold\")} height=\"100%\">\n <Box px={3} pb={2}>\n <React.Suspense fallback={null}>\n <LazySearchInput />\n </React.Suspense>\n </Box>\n <Tabs\n variant=\"contained\"\n size=\"md\"\n value={activeTab}\n onValueChange={onTabChange}\n classNames={{\n tabsList: cn(\"oui-my-[6px]\"),\n tabsContent: \"oui-h-full\",\n scrollIndicator: \"oui-mx-3\",\n }}\n className={cls}\n showScrollIndicator\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value={MarketsTabName.Favorites}\n >\n {renderTab(MarketsTabName.Favorites)}\n </TabPanel>\n <TabPanel title={t(\"markets.recent\")} value={MarketsTabName.Recent}>\n {renderTab(MarketsTabName.Recent)}\n </TabPanel>\n <TabPanel title={t(\"common.all\")} value={MarketsTabName.All}>\n {renderTab(MarketsTabName.All)}\n </TabPanel>\n <TabPanel\n title={t(\"markets.newListings\")}\n value={MarketsTabName.NewListing}\n >\n {renderTab(MarketsTabName.NewListing)}\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","export const SIDE_MARKETS_TAB_SORT_STORAGE_KEY =\n \"orderly_side_markets_tab_sort\";\n","import { useCallback, useEffect, useState } from \"react\";\nimport { SIDE_MARKETS_TAB_SORT_STORAGE_KEY } from \"../../constant\";\nimport { MarketsTabName } from \"../../type\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type ExpandMarketsScriptOptions = {\n activeTab?: MarketsTabName;\n onTabChange?: (tab: MarketsTabName) => void;\n};\n\nexport type ExpandMarketsScriptReturn = ReturnType<\n typeof useExpandMarketsScript\n>;\n\nexport function useExpandMarketsScript(options: ExpandMarketsScriptOptions) {\n const [activeTab, setActiveTab] = useState<MarketsTabName>(\n options.activeTab!,\n );\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: SIDE_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n const { clearSearchValue } = useMarketsContext();\n\n const onTabChange = useCallback(\n (value: string) => {\n if (typeof options?.onTabChange === \"function\") {\n options.onTabChange(value as MarketsTabName);\n } else {\n setActiveTab(value as MarketsTabName);\n }\n },\n [options?.onTabChange],\n );\n useEffect(() => {\n setActiveTab(options?.activeTab || MarketsTabName.Favorites);\n }, [options?.activeTab]);\n\n useEffect(() => {\n clearSearchValue?.();\n }, [activeTab]);\n\n return {\n activeTab,\n onTabChange,\n tabSort,\n onTabSort,\n };\n}\n","import { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport {\n useExpandMarketsScript,\n ExpandMarketsScriptOptions,\n} from \"./expandMarkets.script\";\nimport { ExpandMarkets } from \"./expandMarkets.ui\";\n\nexport type ExpandMarketsWidgetProps = MarketsProviderProps &\n ExpandMarketsScriptOptions;\n\nexport const ExpandMarketsWidget: React.FC<ExpandMarketsWidgetProps> = (\n props,\n) => {\n const state = useExpandMarketsScript({\n activeTab: props.activeTab,\n onTabChange: props.onTabChange,\n });\n\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <ExpandMarkets {...state} />\n </MarketsProvider>\n );\n};\n","export { ExpandMarkets } from \"./expandMarkets.ui\";\nexport { useExpandMarketsScript } from \"./expandMarkets.script\";\nexport { ExpandMarketsWidget } from \"./expandMarkets.widget\";\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Column,\n Flex,\n Picker,\n Select,\n Text,\n TokenIcon,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ProcessedFundingData } from \"./fundingOverview.script\";\n\nconst createFundingRenderer =\n (dp: number = 5) =>\n (value: number) => {\n if (value === 0) {\n return <Text> - </Text>;\n }\n\n return (\n <Text.numeral\n rule=\"percentages\"\n dp={dp}\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n );\n };\n\nexport const useFundingOverviewColumns = (\n selectedPeriod: string,\n setSelectedPeriod: (value: string) => void,\n) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n return useMemo<Column<ProcessedFundingData>[]>(() => {\n return [\n {\n title: t(\"markets.column.market\"),\n dataIndex: \"symbol\",\n onSort: true,\n width: 135,\n className: isMobile ? \"oui-pl-0\" : undefined,\n render: (value) => (\n <Flex gapX={1}>\n <TokenIcon\n symbol={value}\n className={isMobile ? \"oui-size-[18px]\" : \"oui-size-5\"}\n />\n\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n weight=\"semibold\"\n >\n {value}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: t(\"markets.funding.column.estFunding\"),\n dataIndex: \"estFunding\",\n width: 120,\n onSort: true,\n render: (value, record) => (\n <div>\n <Text.numeral\n rule=\"percentages\"\n dp={5}\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n <span className=\"oui-text-base-contrast-54\">\n {`/ ${record.fundingInterval}h`}\n </span>\n </div>\n ),\n },\n {\n title: t(\"markets.funding.column.lastFunding\"),\n dataIndex: \"lastFunding\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.1dAvg\"),\n dataIndex: \"funding1d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.3dAvg\"),\n dataIndex: \"funding3d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.7dAvg\"),\n dataIndex: \"funding7d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.14dAvg\"),\n dataIndex: \"funding14d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.30dAvg\"),\n dataIndex: \"funding30d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: t(\"markets.funding.column.90dAvg\"),\n dataIndex: \"funding90d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: (\n <div className=\"oui-flex oui-gap-1\">\n <FundingPeriodSelect\n value={selectedPeriod}\n onValueChange={setSelectedPeriod}\n />\n <span>{t(\"markets.funding.column.positiveRate\")}</span>\n </div>\n ),\n dataIndex: selectedPeriod,\n width: 130,\n align: \"right\",\n onSort: true,\n render: createFundingRenderer(2),\n },\n ];\n }, [t, isMobile, selectedPeriod, setSelectedPeriod]);\n};\n\ntype FundingPeriodSelectProps = {\n value: string;\n onValueChange: (value: string) => void;\n};\n\nconst FundingPeriodSelect = (props: FundingPeriodSelectProps) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"common.select.1d\"),\n value: \"1dPositive\",\n },\n {\n label: t(\"common.select.3d\"),\n value: \"3dPositive\",\n },\n {\n label: t(\"common.select.7d\"),\n value: \"7dPositive\",\n },\n {\n label: t(\"common.select.14d\"),\n value: \"14dPositive\",\n },\n {\n label: t(\"common.select.30d\"),\n value: \"30dPositive\",\n },\n {\n label: t(\"common.select.90d\"),\n value: \"90dPositive\",\n },\n ];\n }, [t]);\n\n if (isMobile) {\n return (\n <Picker\n size=\"sm\"\n value={props.value}\n onValueChange={props.onValueChange}\n options={options}\n />\n );\n }\n\n return (\n <Select.options\n size=\"xs\"\n value={props.value}\n onValueChange={props.onValueChange}\n options={options}\n />\n );\n};\n","import { FC, useState } from \"react\";\nimport { DataTable, cn } from \"@orderly.network/ui\";\nimport { useFundingOverviewColumns } from \"./columns\";\nimport { FundingOverviewReturn } from \"./fundingOverview.script\";\n\nexport type FundingOverviewProps = FundingOverviewReturn;\n\nexport const FundingOverview: FC<FundingOverviewProps> = (props) => {\n const { dataSource, isLoading, pagination, onSort } = props;\n const [selectedPeriod, setSelectedPeriod] = useState(\"1dPositive\");\n\n const columns = useFundingOverviewColumns(selectedPeriod, setSelectedPeriod);\n\n return (\n <DataTable\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n bordered\n onRow={() => {\n return {\n className: cn(\"oui-h-[48px] oui-cursor-pointer\"),\n };\n }}\n classNames={{\n header: \"oui-h-12\",\n }}\n pagination={pagination}\n onSort={onSort}\n manualSorting\n generatedRowKey={(record) => record.symbol}\n />\n );\n};\n","import { useMemo } from \"react\";\nimport {\n MarketsType,\n useFundingRateHistory,\n useFundingRates,\n useMarkets,\n} from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSort, searchBySymbol } from \"../../utils\";\n\nexport type ProcessedFundingData = {\n symbol: string;\n estFunding: number;\n lastFunding: number;\n fundingInterval: number;\n funding1d: number | string;\n funding3d: number | string;\n funding7d: number | string;\n funding14d: number | string;\n funding30d: number | string;\n funding90d: number | string;\n \"1dPositive\": number | string;\n \"3dPositive\": number | string;\n \"7dPositive\": number | string;\n \"14dPositive\": number | string;\n \"30dPositive\": number | string;\n \"90dPositive\": number | string;\n};\n\nexport type FundingOverviewReturn = ReturnType<typeof useFundingOverviewScript>;\n\nexport const useFundingOverviewScript = () => {\n const { pagination } = usePagination({ pageSize: 10 });\n const [marketData] = useMarkets(MarketsType.ALL);\n\n const {\n data: fundingHistory,\n isLoading: isHistoryLoading,\n getPositiveRates,\n } = useFundingRateHistory();\n const fundingRates = useFundingRates();\n\n const { onSort, getSortedList } = useSort();\n const { searchValue } = useMarketsContext();\n\n const processedData = useMemo((): ProcessedFundingData[] => {\n if (!marketData?.length) {\n return [];\n }\n\n const periods = [\"1d\", \"3d\", \"7d\", \"14d\", \"30d\", \"90d\"] as const;\n const posRates = periods.reduce(\n (acc, period) => {\n acc[period] = getPositiveRates(fundingHistory, period);\n return acc;\n },\n {} as Record<string, Record<string, number>>,\n );\n\n // because fundingHistory list is unstable sort, so use marketData instead\n // TODO: feedback to backend to fix this if possible\n return marketData.map((item) => {\n const symbol = item.symbol;\n const history = fundingHistory?.find((h) => h.symbol === symbol);\n\n const fundingRate = fundingRates[symbol];\n\n const fundingInterval = getFundingInterval(\n fundingRate(\"next_funding_time\"),\n fundingRate(\"last_funding_rate_timestamp\"),\n );\n\n return {\n symbol,\n estFunding: fundingRate(\"est_funding_rate\"),\n lastFunding: fundingRate(\"last_funding_rate\"),\n fundingInterval,\n funding1d: history?.funding?.[\"1d\"]?.rate ?? 0,\n funding3d: history?.funding?.[\"3d\"]?.rate ?? 0,\n funding7d: history?.funding?.[\"7d\"]?.rate ?? 0,\n funding14d: history?.funding?.[\"14d\"]?.rate ?? 0,\n funding30d: history?.funding?.[\"30d\"]?.rate ?? 0,\n funding90d: history?.funding?.[\"90d\"]?.rate ?? 0,\n \"1dPositive\": posRates[\"1d\"][symbol] ?? \"-\",\n \"3dPositive\": posRates[\"3d\"][symbol] ?? \"-\",\n \"7dPositive\": posRates[\"7d\"][symbol] ?? \"-\",\n \"14dPositive\": posRates[\"14d\"][symbol] ?? \"-\",\n \"30dPositive\": posRates[\"30d\"][symbol] ?? \"-\",\n \"90dPositive\": posRates[\"90d\"][symbol] ?? \"-\",\n };\n });\n }, [marketData, fundingHistory, fundingRates, getPositiveRates]);\n\n const filteredData = useMemo(() => {\n return searchBySymbol(processedData, searchValue, \"base-type\");\n }, [processedData, searchValue, pagination]);\n\n const dataSource = useMemo(\n () => getSortedList(filteredData),\n [filteredData, getSortedList],\n );\n\n return { dataSource, isLoading: isHistoryLoading, pagination, onSort };\n};\n\nfunction getFundingInterval(\n next_funding_time: number,\n last_funding_rate_timestamp: number,\n) {\n // default interval is 8 hours\n if (!next_funding_time || !last_funding_rate_timestamp) return 8;\n const diff = next_funding_time - last_funding_rate_timestamp;\n\n return Math.round(diff / 3600000);\n}\n","import { FC, useState } from \"react\";\nimport { DataTable, cn } from \"@orderly.network/ui\";\nimport { useFundingOverviewColumns } from \"./columns\";\nimport { FundingOverviewReturn } from \"./fundingOverview.script\";\n\nexport type MobileFundingOverviewProps = FundingOverviewReturn;\n\nexport const MobileFundingOverview: FC<MobileFundingOverviewProps> = (\n props,\n) => {\n const { dataSource, isLoading, onSort } = props;\n const [selectedPeriod, setSelectedPeriod] = useState(\"1dPositive\");\n\n const columns = useFundingOverviewColumns(selectedPeriod, setSelectedPeriod);\n\n return (\n <DataTable\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n onRow={() => {\n return {\n className: cn(\"oui-h-[34px] oui-cursor-pointer\"),\n };\n }}\n classNames={{\n header: \"oui-h-9\",\n body: \"oui-text-2xs\",\n }}\n onSort={onSort}\n manualSorting\n generatedRowKey={(record) => record.symbol}\n />\n );\n};\n","import { FC } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { MobileFundingOverview } from \"./fundingOverview.mobile.ui\";\nimport { useFundingOverviewScript } from \"./fundingOverview.script\";\nimport { FundingOverview } from \"./fundingOverview.ui\";\n\nexport const FundingOverviewWidget: FC = () => {\n const props = useFundingOverviewScript();\n const { isMobile } = useScreen();\n return isMobile ? (\n <MobileFundingOverview {...props} />\n ) : (\n <FundingOverview {...props} />\n );\n};\n","export { FundingOverview } from \"./fundingOverview.ui\";\nexport { useFundingOverviewScript } from \"./fundingOverview.script\";\nexport { FundingOverviewWidget } from \"./fundingOverview.widget\";\n","import { useMemo } from \"react\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\nexport const useEXchanges = () => {\n const { comparisonProps } = useMarketsContext();\n const brokerName = comparisonProps?.exchangesName || \"Orderly\";\n const brokerIconSrc =\n comparisonProps?.exchangesIconSrc ||\n \"https://oss.orderly.network/static/exchange_logo/orderly.png\";\n const exchanges = useMemo<string[]>(() => {\n return [\n brokerName,\n \"Binance\",\n `${brokerName} - Binance`,\n \"OKX\",\n `${brokerName} - OKX`,\n \"Bybit\",\n `${brokerName} - Bybit`,\n \"dYdX\",\n `${brokerName} - dYdX`,\n \"Bitget\",\n `${brokerName} - Bitget`,\n \"KuCoin\",\n `${brokerName} - KuCoin`,\n ];\n }, [comparisonProps?.exchangesName]);\n return {\n exchanges,\n brokerName,\n brokerIconSrc: brokerIconSrc,\n };\n};\n","import { useCallback, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, TokenIcon, useScreen } from \"@orderly.network/ui\";\nimport type { Column } from \"@orderly.network/ui\";\nimport { Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderlyIcon } from \"../../icons\";\nimport { useEXchanges } from \"./useEXchanges\";\n\nconst CDN_PREFIX = \"https://oss.orderly.network/static/exchange_logo\";\n\nexport const useFundingColumns = () => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { exchanges, brokerName, brokerIconSrc } = useEXchanges();\n const getImgSrc = useCallback(\n (val: string) => {\n if (val === brokerName) {\n return brokerIconSrc;\n }\n return `${CDN_PREFIX}/${val.toLowerCase().replace(\" \", \"_\")}.png`;\n },\n [brokerName, brokerIconSrc],\n );\n return useMemo<Column[]>(() => {\n return [\n {\n title: t(\"markets.column.market\"),\n dataIndex: \"symbol\",\n width: 150,\n onSort: true,\n className: isMobile ? \"oui-pl-0\" : undefined,\n render: (value) => (\n <Flex gapX={1}>\n <TokenIcon\n symbol={value}\n className={isMobile ? \"oui-size-[18px]\" : \"oui-size-5\"}\n />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"xs\"\n weight=\"semibold\"\n >\n {value}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: (\n <Flex gapX={1}>\n <OrderlyIcon /> {t(\"markets.openInterest\")}\n </Flex>\n ),\n dataIndex: \"openInterest\",\n width: 120,\n // align: \"right\",\n onSort: true,\n render: (value) => {\n if (value === \"-\") {\n return \"-\";\n }\n return (\n <Text.numeral currency=\"$\" dp={0} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n ...exchanges.map<Column>((item) => {\n const imgSrc = getImgSrc(item);\n return {\n title: (\n <Flex justify=\"start\" itemAlign=\"center\" gap={1}>\n {!item.includes(\" - \") && imgSrc && (\n <img\n src={imgSrc}\n className={cn(\n \"oui-size-6 oui-rounded-full oui-object-cover\",\n isMobile ? \"oui-size-[18px]\" : \"oui-size-6\",\n )}\n />\n )}\n {item}\n </Flex>\n ),\n dataIndex: item,\n onSort: true,\n width: item.includes(\" - \") ? 160 : 130,\n render(value: number | null) {\n if (value === null) {\n return \"-\";\n }\n return (\n <Text.numeral\n rule=\"percentages\"\n dp={5}\n coloring={item.includes(\" - \") || item === brokerName}\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {value}\n </Text.numeral>\n );\n },\n };\n }),\n ];\n }, [t, isMobile, exchanges, brokerName, getImgSrc]);\n};\n","import type { FC } from \"react\";\nimport { cn } from \"@orderly.network/ui\";\nimport { DataTable } from \"@orderly.network/ui\";\nimport { useFundingColumns } from \"./columns\";\nimport { FundingComparisonReturn } from \"./fundingComparison.script\";\n\nexport const FundingComparison: FC<FundingComparisonReturn> = (props) => {\n const columns = useFundingColumns();\n\n return (\n <DataTable\n columns={columns}\n dataSource={props.dataSource}\n loading={props.isLoading}\n onRow={() => {\n return {\n className: cn(\"oui-h-[48px] oui-cursor-pointer\"),\n };\n }}\n classNames={{\n header: \"oui-h-12\",\n }}\n bordered\n pagination={props.pagination}\n />\n );\n};\n","import { useMemo } from \"react\";\nimport {\n useFundingRates,\n useMarketsStream,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSort, searchBySymbol } from \"../../utils\";\nimport { useEXchanges } from \"./useEXchanges\";\n\nfunction getOpenInterest(open_interest?: number, index_price?: number) {\n return new Decimal(open_interest || 0).mul(index_price || 0).toNumber();\n}\n\nexport type FundingComparisonReturn = ReturnType<\n typeof useFundingComparisonScript\n>;\n\nexport const useFundingComparisonScript = () => {\n const { pagination } = usePagination({ pageSize: 10 });\n const { onSort, getSortedList } = useSort();\n const { searchValue } = useMarketsContext();\n const { exchanges, brokerName } = useEXchanges();\n const fundingRates = useFundingRates();\n\n const { data, isLoading } = useQuery<\n Array<{ symbol: string; exchanges: Array<{ name: string; last: number }> }>\n >(\"/v1/public/market_info/funding_comparison\");\n const { data: futures } = useMarketsStream();\n\n const processedData = useMemo(() => {\n if (!Array.isArray(data) || !data.length) {\n return [];\n }\n return data.map((row) => {\n const target = futures?.find((item) => item.symbol === row.symbol);\n const result: Record<PropertyKey, any> = {\n symbol: row.symbol,\n openInterest: target\n ? getOpenInterest(\n target?.open_interest as number,\n target?.index_price as number,\n )\n : \"-\",\n };\n for (const item of exchanges) {\n const isCompare = item.includes(` - `);\n if (!isCompare) {\n if (item === brokerName) {\n const rate = fundingRates[row.symbol];\n result[item] = rate(\"last_funding_rate\") ?? null;\n } else {\n const exchange = row.exchanges?.find(\n (e) => e.name.toLowerCase() === item.toLowerCase(),\n );\n result[item] = exchange?.last ?? null;\n }\n } else {\n const [, exchangeName] = item.replace(/ /g, \"\").split(\"-\");\n const rate = fundingRates[row.symbol];\n const wooFiRate = rate(\"last_funding_rate\") ?? null;\n const exchange = row.exchanges?.find(\n (e) => e.name.toLowerCase() === exchangeName.toLowerCase(),\n );\n const otherRate = exchange?.last ?? null;\n if (wooFiRate !== null && otherRate !== null) {\n result[item] = new Decimal(wooFiRate).sub(otherRate).toString();\n } else {\n result[item] = null;\n }\n }\n }\n return result;\n });\n }, [data, futures, fundingRates, exchanges, brokerName]);\n\n const filteredData = useMemo(() => {\n return searchBySymbol(processedData, searchValue, \"base-type\");\n }, [processedData, searchValue, pagination]);\n\n const dataSource = useMemo(\n () => getSortedList(filteredData),\n [getSortedList, filteredData],\n );\n\n return {\n dataSource,\n isLoading,\n pagination,\n onSort,\n };\n};\n","import type { FC } from \"react\";\nimport { cn } from \"@orderly.network/ui\";\nimport { DataTable } from \"@orderly.network/ui\";\nimport { useFundingColumns } from \"./columns\";\nimport { FundingComparisonReturn } from \"./fundingComparison.script\";\n\nexport const MobileFundingComparison: FC<FundingComparisonReturn> = (props) => {\n const columns = useFundingColumns();\n\n return (\n <DataTable\n columns={columns}\n dataSource={props.dataSource}\n loading={props.isLoading}\n onRow={() => {\n return {\n className: cn(\"oui-h-[34px] oui-cursor-pointer\"),\n };\n }}\n onSort={props.onSort}\n classNames={{\n header: \"oui-h-9\",\n body: \"oui-text-2xs\",\n }}\n manualSorting\n />\n );\n};\n","import type { FC } from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { MobileFundingComparison } from \"./fundingComparison.mobile.ui\";\nimport { useFundingComparisonScript } from \"./fundingComparison.script\";\nimport { FundingComparison } from \"./fundingComparison.ui\";\n\nexport const FundingComparisonWidget: FC = () => {\n const state = useFundingComparisonScript();\n const { isMobile } = useScreen();\n return isMobile ? (\n <MobileFundingComparison {...state} />\n ) : (\n <FundingComparison {...state} />\n );\n};\n","export { FundingComparison } from \"./fundingComparison.ui\";\nexport { useFundingComparisonScript } from \"./fundingComparison.script\";\nexport { FundingComparisonWidget } from \"./fundingComparison.widget\";\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n cn,\n EyeCloseIcon,\n Flex,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { CollapseIcon, ExpandIcon } from \"../../icons\";\nimport { ExpandMarketsWidget } from \"../expandMarkets\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useFavoritesProps } from \"../shared/hooks/useFavoritesExtraProps\";\nimport type { SideMarketsScriptReturn } from \"./sideMarkets.script\";\n\nexport const IndicatorIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGAttributes<SVGSVGElement>\n>((props, ref) => {\n return (\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 ref={ref}\n focusable={false}\n {...props}\n >\n <rect x={2} y={2} width={8} height={2} rx={1} />\n <rect x={2} y={7} width={8} height={2} rx={1} />\n <rect x={2} y={12} width={8} height={2} rx={1} />\n </svg>\n );\n});\n\nexport const SideMarketsHeader: React.FC<\n Pick<\n SideMarketsScriptReturn,\n \"resizeable\" | \"panelSize\" | \"onPanelSizeChange\"\n >\n> = (props) => {\n const { resizeable, panelSize, onPanelSizeChange } = props;\n\n const { t } = useTranslation();\n\n const cls = cn(\n \"oui-text-base-contrast-36\",\n resizeable\n ? \"oui-cursor-pointer hover:oui-text-base-contrast-80\"\n : \"oui-cursor-not-allowed\",\n );\n\n return (\n <Flex\n className={\n panelSize === \"small\"\n ? \"oui-absolute oui-end-[-20px] oui-z-50\"\n : \"oui-relative\"\n }\n justify={panelSize === \"large\" ? \"between\" : \"end\"}\n width=\"100%\"\n px={3}\n >\n {panelSize === \"large\" && (\n <Text size=\"base\" intensity={80}>\n {t(\"common.markets\")}\n </Text>\n )}\n <Tooltip\n side={panelSize === \"small\" ? \"right\" : \"left\"}\n align=\"start\"\n sideOffset={-4}\n alignOffset={-4}\n content={\n <Flex direction=\"column\" gap={2}>\n {panelSize === \"large\" && (\n <>\n <div onClick={() => onPanelSizeChange?.(\"middle\")}>\n <CollapseIcon className={cls} />\n </div>\n <div onClick={() => onPanelSizeChange?.(\"small\")}>\n <EyeCloseIcon size={16} className={cls} opacity={1} />\n </div>\n </>\n )}\n {panelSize === \"middle\" && (\n <>\n <div onClick={() => onPanelSizeChange?.(\"large\")}>\n <ExpandIcon className={cls} />\n </div>\n <div onClick={() => onPanelSizeChange?.(\"small\")}>\n <EyeCloseIcon size={16} className={cls} opacity={1} />\n </div>\n </>\n )}\n {panelSize === \"small\" && (\n <>\n <div onClick={() => onPanelSizeChange?.(\"large\")}>\n <ExpandIcon className={cls} />\n </div>\n <div onClick={() => onPanelSizeChange?.(\"middle\")}>\n <CollapseIcon className={cls} />\n </div>\n </>\n )}\n </Flex>\n }\n delayDuration={0}\n className={\n \"oui-rounded oui-border oui-border-line-12 oui-bg-base-9 oui-p-1\"\n }\n arrow={{ className: \"oui-fill-transparent\" }}\n >\n <div className=\"oui-cursor-pointer\">\n <IndicatorIcon\n className={cn(\n \"oui-text-base-contrast-36 oui-transition-all hover:oui-text-base-contrast-80\",\n )}\n />\n </div>\n </Tooltip>\n </Flex>\n );\n};\n\nexport type SideMarketsProps = SideMarketsScriptReturn & { className?: string };\n\nexport const SideMarkets: React.FC<SideMarketsProps> = (props) => {\n const { panelSize, activeTab, onTabChange, className, tabSort } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const { getFavoritesProps } = useFavoritesProps();\n\n const renderContent = () => {\n if (panelSize === \"small\") {\n return null;\n }\n if (panelSize === \"middle\") {\n return (\n <MarketsListWidget\n type={activeTab}\n initialSort={tabSort[activeTab]}\n panelSize={panelSize}\n {...getFavoritesProps(activeTab)}\n />\n );\n }\n if (panelSize === \"large\") {\n return (\n <ExpandMarketsWidget\n activeTab={activeTab}\n onTabChange={onTabChange}\n symbol={symbol}\n onSymbolChange={onSymbolChange}\n />\n );\n }\n };\n\n return (\n <Flex\n id=\"oui-side-markets\"\n className={cn(\"oui-relative oui-font-semibold\", className)}\n direction=\"column\"\n gapY={5}\n height=\"100%\"\n width=\"100%\"\n >\n <SideMarketsHeader\n {...pick([\"resizeable\", \"panelSize\", \"onPanelSizeChange\"], props)}\n />\n <Box\n width=\"100%\"\n className={cn(\n panelSize === \"large\" && \"oui-h-[calc(100%_-_56px)]\",\n panelSize === \"middle\" && \"oui-h-[calc(100%_-_52px)]\",\n )}\n >\n {renderContent()}\n </Box>\n </Flex>\n );\n};\n","import { MouseEventHandler, useCallback } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Text, cn, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { DeleteIcon, TopIcon } from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport {\n get24hPercentageColumn,\n getLastColumn,\n getSymbolColumn,\n} from \"../shared/column\";\n\nexport const useDropDownMarketsColumns = () => {\n const { t } = useTranslation();\n\n return useCallback(\n (favorite: FavoriteInstance, isFavoriteList = false) => {\n return [\n getSymbolColumn(favorite, isFavoriteList),\n getLastColumn(),\n get24hPercentageColumn(),\n {\n title: t(\"common.volume\"),\n dataIndex: \"24h_amount\",\n align: \"right\",\n onSort: true,\n className: \"oui-relative\",\n width: 80,\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(\n record,\n favorite.selectedFavoriteTab,\n true,\n );\n e.stopPropagation();\n };\n\n const iconCls =\n \"oui-w-4 oui-h-4 oui-text-base-contrast-54 hover:oui-text-base-contrast\";\n\n const actions = (\n <div className={cn(\"oui-absolute oui-right-1 oui-top-[3px]\")}>\n <Flex\n className={cn(\n \"oui-bg-primary-darken oui-py-[6px]\",\n \"oui-hidden group-hover:oui-inline-flex\",\n )}\n r=\"base\"\n width={52}\n justify=\"center\"\n itemAlign=\"end\"\n gapX={2}\n >\n <TopIcon\n className={iconCls}\n onClick={(e) => {\n e.stopPropagation();\n favorite.pinToTop(record);\n }}\n />\n <DeleteIcon className={iconCls} onClick={onDelSymbol} />\n </Flex>\n </div>\n );\n return (\n <>\n {isFavoriteList && actions}\n <Text.numeral\n rule=\"human\"\n dp={2}\n rm={Decimal.ROUND_DOWN}\n className={cn(isFavoriteList && \"group-hover:oui-invisible\")}\n >\n {value}\n </Text.numeral>\n </>\n );\n },\n },\n ] as Column[];\n },\n [t],\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n CloseIcon,\n cn,\n Flex,\n TabPanel,\n Tabs,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n} from \"@orderly.network/ui\";\nimport { FavoritesIcon } from \"../../icons\";\nimport { MarketsTabName } from \"../../type\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { SearchInput } from \"../searchInput\";\nimport { useFavoritesProps } from \"../shared/hooks/useFavoritesExtraProps\";\nimport { useDropDownMarketsColumns } from \"./column\";\nimport { DropDownMarketsScriptReturn } from \"./dropDownMarkets.script\";\n\nexport type DropDownMarketsProps = DropDownMarketsScriptReturn & {\n contentClassName?: string;\n};\n\nexport const DropDownMarkets: React.FC<\n PropsWithChildren<DropDownMarketsProps>\n> = (props) => {\n return (\n <DropdownMenuRoot open={props.open} onOpenChange={props.onOpenChange}>\n <DropdownMenuTrigger asChild>{props.children}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n align=\"start\"\n alignOffset={-32}\n sideOffset={20}\n className={cn(\n \"oui-markets-dropdown-menu-content oui-bg-base-8 oui-p-0\",\n props.contentClassName,\n )}\n >\n <DropDownMarketsConetnt {...props} hide={props.hide} />\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n\nexport const DropDownMarketsConetnt: React.FC<DropDownMarketsProps> = (\n props,\n) => {\n const { activeTab, onTabChange, tabSort, onTabSort } = props;\n\n const { t } = useTranslation();\n\n const getColumns = useDropDownMarketsColumns();\n\n const search = (\n <Flex mx={3} gapX={3} pt={3} pb={2}>\n <SearchInput\n classNames={{\n root: \"oui-w-full\",\n }}\n />\n <CloseIcon\n size={12}\n className=\"oui-cursor-pointer oui-text-base-contrast-80\"\n onClick={props.hide}\n opacity={1}\n />\n </Flex>\n );\n\n const cls = \"oui-h-[calc(100%_-_36px)]\";\n\n const { getFavoritesProps, renderEmptyView } = useFavoritesProps();\n\n const renderTab = (type: MarketsTabName) => {\n return (\n <div className={cls}>\n <MarketsListWidget\n type={type}\n initialSort={tabSort[type]}\n onSort={onTabSort(type)}\n getColumns={getColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: \"oui-pb-5 oui-px-1\",\n }}\n rowClassName=\"!oui-h-[34px]\"\n {...getFavoritesProps(type)}\n emptyView={renderEmptyView({\n type,\n onClick: () => {\n onTabChange(MarketsTabName.All);\n },\n })}\n />\n </div>\n );\n };\n\n return (\n <Box\n className={cn(\"oui-overflow-hidden oui-font-semibold\")}\n height=\"100%\"\n intensity={800}\n >\n {search}\n\n <Tabs\n variant=\"contained\"\n size=\"md\"\n value={activeTab}\n onValueChange={onTabChange}\n classNames={{\n tabsList: \"oui-my-[6px] oui-px-3\",\n tabsContent: \"oui-h-full\",\n }}\n className={cls}\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value={MarketsTabName.Favorites}\n >\n {renderTab(MarketsTabName.Favorites)}\n </TabPanel>\n <TabPanel title={t(\"markets.recent\")} value={MarketsTabName.Recent}>\n {renderTab(MarketsTabName.Recent)}\n </TabPanel>\n <TabPanel title={t(\"common.all\")} value={MarketsTabName.All}>\n {renderTab(MarketsTabName.All)}\n </TabPanel>\n <TabPanel\n title={t(\"markets.newListings\")}\n value={MarketsTabName.NewListing}\n >\n {renderTab(MarketsTabName.NewListing)}\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { MarketsTabName } from \"../../type\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type DropDownMarketsScriptReturn = ReturnType<\n typeof useDropDownMarketsScript\n>;\n\nconst DROPDOWN_MARKETS_SEL_TAB_KEY = \"orderly_dropdown_markets_sel_tab_key\";\n\nconst DROPDOWN_MARKETS_TAB_SORT_STORAGE_KEY =\n \"orderly_dropdown_markets_tab_sort\";\n\nexport function useDropDownMarketsScript() {\n const [open, setOpen] = useState(false);\n\n const [activeTab, setActiveTab] = useLocalStorage(\n DROPDOWN_MARKETS_SEL_TAB_KEY,\n MarketsTabName.All,\n );\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: DROPDOWN_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n const { clearSearchValue } = useMarketsContext();\n\n const hide = () => {\n setOpen(false);\n };\n\n useEffect(() => {\n clearSearchValue?.();\n }, [activeTab]);\n\n return {\n activeTab: activeTab as MarketsTabName,\n onTabChange: (value: string) => setActiveTab(value as MarketsTabName),\n open,\n onOpenChange: setOpen,\n hide,\n tabSort,\n onTabSort,\n };\n}\n","import React, { PropsWithChildren } from \"react\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport { useDropDownMarketsScript } from \"./dropDownMarkets.script\";\nimport { DropDownMarkets, DropDownMarketsProps } from \"./dropDownMarkets.ui\";\n\nexport type DropDownMarketsWidgetProps = MarketsProviderProps &\n Pick<DropDownMarketsProps, \"contentClassName\">;\n\nexport const DropDownMarketsWidget: React.FC<\n PropsWithChildren<DropDownMarketsWidgetProps>\n> = (props) => {\n const state = useDropDownMarketsScript();\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <DropDownMarkets {...state} contentClassName={props.contentClassName}>\n {props.children}\n </DropDownMarkets>\n </MarketsProvider>\n );\n};\n","export { DropDownMarkets, DropDownMarketsConetnt } from \"./dropDownMarkets.ui\";\nexport { useDropDownMarketsScript } from \"./dropDownMarkets.script\";\nexport { useDropDownMarketsColumns } from \"./column\";\nexport { DropDownMarketsWidget } from \"./dropDownMarkets.widget\";\n","import React from \"react\";\nimport { cn, Flex, Tooltip, Text } from \"@orderly.network/ui\";\n\ninterface DataItemProps {\n label: string;\n value: React.ReactNode;\n hint?: React.ReactNode;\n}\n\nexport const DataItem: React.FC<DataItemProps> = (props) => {\n const { label, value, hint } = props;\n return (\n <Flex direction=\"column\" itemAlign=\"start\">\n <Tooltip\n open={hint ? undefined : false}\n content={hint}\n className=\"oui-max-w-[240px] oui-bg-base-6 \"\n arrow={{ className: \"oui-fill-base-6\" }}\n delayDuration={300}\n >\n <Text\n size=\"2xs\"\n intensity={36}\n className={cn(\n \"oui-data-label\",\n \"oui-whitespace-nowrap oui-break-normal\",\n hint &&\n \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\",\n )}\n >\n {label}\n </Text>\n </Tooltip>\n <Text\n size=\"2xs\"\n intensity={98}\n className={cn(\n \"oui-data-value\",\n \"oui-whitespace-nowrap oui-break-normal oui-leading-[20px]\",\n )}\n >\n {value}\n </Text>\n </Flex>\n );\n};\n","import type { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport { FundingComparisonWidget } from \"../../../components/fundingComparison\";\nimport { FundingOverviewWidget } from \"../../../components/fundingOverview\";\nimport { SearchInput } from \"../../../components/searchInput\";\nimport { FundingScriptReturn } from \"./funding.script\";\n\nexport const MobileFunding: FC<FundingScriptReturn> = (props) => {\n const { t } = useTranslation();\n\n const search = (\n <SearchInput\n classNames={{\n root: cn(\"oui-mb-2 oui-mt-5\"),\n }}\n />\n );\n\n return (\n <Box\n intensity={900}\n p={3}\n mt={2}\n mb={5}\n r=\"xl\"\n height=\"100%\"\n className=\"oui-markets-funding-list\"\n >\n <Tabs\n variant=\"contained\"\n size=\"lg\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (value: string) => void}\n >\n <TabPanel\n title={t(\"common.overview\")}\n value=\"overview\"\n testid=\"oui-testid-funding-overview-tab\"\n >\n <>\n {search}\n <FundingOverviewWidget />\n </>\n </TabPanel>\n <TabPanel\n title={t(\"markets.funding.comparison\")}\n value=\"comparison\"\n testid=\"oui-testid-funding-comparison-tab\"\n >\n <>\n {search}\n <FundingComparisonWidget />\n </>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { useState } from \"react\";\nimport { FundingTabName } from \"../../../type\";\n\nexport type FundingScriptReturn = ReturnType<typeof useFundingScript>;\n\nexport function useFundingScript() {\n const [activeTab, setActiveTab] = useState<FundingTabName>(\n FundingTabName.Overview,\n );\n\n return {\n activeTab,\n onTabChange: setActiveTab,\n };\n}\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, TabPanel, Tabs } from \"@orderly.network/ui\";\nimport type { FundingScriptReturn } from \"./funding.script\";\n\nconst LazySearchInput = React.lazy(() =>\n import(\"../../../components/searchInput\").then((mod) => {\n return { default: mod.SearchInput };\n }),\n);\n\nconst LazyFundingOverviewWidget = React.lazy(() =>\n import(\"../../../components/fundingOverview\").then((mod) => {\n return { default: mod.FundingOverviewWidget };\n }),\n);\n\nconst LazyFundingComparisonWidget = React.lazy(() =>\n import(\"../../../components/fundingComparison\").then((mod) => {\n return { default: mod.FundingComparisonWidget };\n }),\n);\n\nexport const Funding: React.FC<FundingScriptReturn> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Box\n intensity={900}\n p={6}\n mt={4}\n r=\"2xl\"\n className=\"oui-markets-funding-list\"\n >\n <Tabs\n variant=\"contained\"\n size=\"lg\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (value: string) => void}\n trailing={\n <React.Suspense fallback={null}>\n <LazySearchInput classNames={{ root: \"oui-my-1 oui-w-[240px]\" }} />\n </React.Suspense>\n }\n >\n <TabPanel\n title={t(\"common.overview\")}\n value=\"overview\"\n testid=\"oui-testid-funding-overview-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyFundingOverviewWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"markets.funding.comparison\")}\n value=\"comparison\"\n testid=\"oui-testid-funding-comparison-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyFundingComparisonWidget />\n </React.Suspense>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import React from \"react\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { MobileFunding } from \"./funding.mobile.ui\";\nimport { useFundingScript } from \"./funding.script\";\nimport { Funding } from \"./funding.ui\";\n\nexport const FundingWidget: React.FC = () => {\n const state = useFundingScript();\n const { isMobile } = useScreen();\n return isMobile ? <MobileFunding {...state} /> : <Funding {...state} />;\n};\n","export { MarketsHeader } from \"./marketsHeader.ui\";\nexport { useMarketsHeaderScript } from \"./marketsHeader.script\";\nexport { MarketsHeaderWidget } from \"./marketsHeader.widget\";\n","export * from \"./pages/home/marketsHeader\";\nexport * from \"./pages/home/marketsDataList\";\n\nexport * from \"./components/marketsListFull\";\nexport * from \"./components/favoritesListFull\";\n\nexport * from \"./components/favoritesDropdownMenu\";\nexport * from \"./components/favoritesTabs\";\nexport * from \"./components/expandMarkets\";\n\nexport * from \"./components/marketsList\";\nexport * from \"./components/fundingOverview\";\nexport * from \"./components/fundingComparison\";\n\nexport * from \"./components/collapseMarkets\";\nexport * from \"./components/sideMarkets\";\nexport * from \"./components/dropDownMarkets\";\nexport * from \"./components/marketsSheet\";\nexport * from \"./components/symbolInfoBar\";\nexport * from \"./components/symbolInfoBarFull\";\n\nexport * from \"./deprecated/newListingList\";\nexport * from \"./deprecated/favoritesList\";\nexport * from \"./deprecated/recentList\";\nexport * from \"./type\";\n\nexport { MarketsHomePage } from \"./pages/home/page\";\nexport { MarketsProvider } from \"./components/marketsProvider\";\n","export { SideMarkets } from \"./sideMarkets.ui\";\nexport { useSideMarketsScript } from \"./sideMarkets.script\";\nexport { SideMarketsWidget } from \"./sideMarkets.widget\";\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { SIDE_MARKETS_TAB_SORT_STORAGE_KEY } from \"../../constant\";\nimport { MarketsTabName } from \"../../type\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type SideMarketsScriptOptions = {\n resizeable?: boolean;\n panelSize?: \"small\" | \"middle\" | \"large\";\n onPanelSizeChange?: React.Dispatch<\n React.SetStateAction<\"small\" | \"middle\" | \"large\">\n >;\n};\n\nexport type SideMarketsScriptReturn = ReturnType<typeof useSideMarketsScript>;\n\nconst SIDE_MARKETS_SEL_TAB_KEY = \"orderly_side_markets_sel_tab_key\";\n\nexport const useSideMarketsScript = (options?: SideMarketsScriptOptions) => {\n const [panelSize, setPanelSize] = useState(options?.panelSize);\n const [activeTab, setActiveTab] = useLocalStorage(\n SIDE_MARKETS_SEL_TAB_KEY,\n MarketsTabName.All,\n );\n\n const { tabSort } = useTabSort({\n storageKey: SIDE_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n const onPanelSizeChange = useCallback(\n (size: \"small\" | \"middle\" | \"large\") => {\n if (typeof options?.onPanelSizeChange === \"function\") {\n options.onPanelSizeChange(size);\n } else {\n setPanelSize(size);\n }\n },\n [options?.onPanelSizeChange],\n );\n\n useEffect(() => {\n setPanelSize(options?.panelSize);\n }, [options?.panelSize]);\n\n return {\n resizeable: options?.resizeable ?? true,\n panelSize: panelSize,\n onPanelSizeChange: onPanelSizeChange as React.Dispatch<\n React.SetStateAction<\"small\" | \"middle\" | \"large\">\n >,\n activeTab: activeTab as MarketsTabName,\n onTabChange: setActiveTab,\n tabSort: tabSort,\n } as const;\n};\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport { useSideMarketsScript } from \"./sideMarkets.script\";\nimport type { SideMarketsProps } from \"./sideMarkets.ui\";\n\nconst LazySideMarkets = React.lazy(() =>\n import(\"./sideMarkets.ui\").then((mod) => {\n return { default: mod.SideMarkets };\n }),\n);\n\nexport type SideMarketsWidgetProps = MarketsProviderProps &\n Partial<\n Pick<\n SideMarketsProps,\n \"resizeable\" | \"panelSize\" | \"onPanelSizeChange\" | \"className\"\n >\n >;\n\nexport const SideMarketsWidget: React.FC<SideMarketsWidgetProps> = (props) => {\n const state = useSideMarketsScript(\n pick([\"resizeable\", \"panelSize\", \"onPanelSizeChange\"], props),\n );\n return (\n <MarketsProvider {...pick([\"symbol\", \"onSymbolChange\"], props)}>\n <React.Suspense fallback={null}>\n <LazySideMarkets {...state} className={props.className} />\n </React.Suspense>\n </MarketsProvider>\n );\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, TabPanel, Tabs, Text } from \"@orderly.network/ui\";\nimport { FavoritesIcon } from \"../../icons\";\nimport { MarketsTabName } from \"../../type\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { SearchInput } from \"../searchInput\";\nimport { useFavoritesProps } from \"../shared/hooks/useFavoritesExtraProps\";\nimport { getMarketsSheetColumns } from \"./column\";\nimport { MarketsSheetScriptReturn } from \"./marketsSheet.script\";\n\nexport type MarketsSheetProps = MarketsSheetScriptReturn & {\n className?: string;\n};\n\nexport const MarketsSheet: React.FC<MarketsSheetProps> = (props) => {\n const { className, tabSort, onTabSort } = props;\n\n const { t } = useTranslation();\n\n const { getFavoritesProps, renderEmptyView } = useFavoritesProps();\n\n const renderTab = (type: MarketsTabName) => {\n const isFavorites = type === MarketsTabName.Favorites;\n return (\n <MarketsListWidget\n type={type}\n initialSort={tabSort[type]}\n onSort={onTabSort(type)}\n getColumns={getMarketsSheetColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: cn(\n \"oui-pb-[env(safe-area-inset-bottom,_20px)]\",\n isFavorites\n ? \"oui-h-[calc(100%_-_70px)]\"\n : \"oui-h-[calc(100%_-_40px)]\",\n ),\n }}\n emptyView={renderEmptyView({\n type,\n onClick: () => {\n props.onTabChange(MarketsTabName.All);\n },\n })}\n {...getFavoritesProps(type)}\n />\n );\n };\n\n return (\n <Box height=\"100%\" className={cn(\"oui-font-semibold\", className)}>\n <Box px={3} mt={3} mb={2}>\n <Text size=\"base\" intensity={80}>\n {t(\"common.markets\")}\n </Text>\n <SearchInput classNames={{ root: \"oui-mt-4\" }} />\n </Box>\n\n <Tabs\n variant=\"contained\"\n size=\"md\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (tab: string) => void}\n classNames={{\n tabsList: cn(\"oui-my-[6px]\"),\n tabsContent: \"oui-h-full\",\n scrollIndicator: \"oui-mx-3\",\n }}\n className=\"oui-h-[calc(100%_-_92px)]\"\n showScrollIndicator\n >\n <TabPanel\n title={t(\"markets.favorites\")}\n icon={<FavoritesIcon />}\n value={MarketsTabName.Favorites}\n >\n {renderTab(MarketsTabName.Favorites)}\n </TabPanel>\n\n <TabPanel title={t(\"common.all\")} value={MarketsTabName.All}>\n {renderTab(MarketsTabName.All)}\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { MouseEventHandler, ReactNode } from \"react\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { Flex, TokenIcon, Text, Badge, cn, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n DeleteIcon,\n FavoritesIcon2,\n TopIcon,\n UnFavoritesIcon2,\n} from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\n\nexport const getMarketsSheetColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false,\n) => {\n return [\n {\n title: `${i18n.t(\"markets.column.market\")} / ${i18n.t(\"common.volume\")}`,\n dataIndex: \"24h_amount\",\n multiSort: {\n fields: [\n {\n sortKey: \"symbol\",\n label: i18n.t(\"markets.column.market\"),\n },\n {\n sortKey: \"24h_amount\",\n label: i18n.t(\"common.volume\"),\n },\n ],\n },\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n let favoritesIcon: ReactNode;\n if (!isFavoriteList) {\n favoritesIcon = (\n <FavoritesDropdownMenuWidget row={record} favorite={favorite}>\n <Flex\n width={12}\n height={12}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-mr-1 oui-cursor-pointer\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-size-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-size-3 oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n </FavoritesDropdownMenuWidget>\n );\n }\n return (\n <Flex>\n {favoritesIcon}\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Flex gapX={1}>\n <TokenIcon symbol={record.symbol} className=\"oui-size-[18px]\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base\"\n size=\"2xs\"\n weight=\"semibold\"\n >\n {record.symbol}\n </Text.formatted>\n <Badge size=\"xs\" color=\"primary\">\n {record.leverage}x\n </Badge>\n </Flex>\n\n <Text.numeral\n intensity={54}\n rule=\"human\"\n dp={2}\n rm={Decimal.ROUND_DOWN}\n >\n {value}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n },\n },\n {\n title: i18n.t(\"markets.column.price&Change\"),\n dataIndex: \"change\",\n align: \"right\",\n onSort: true,\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(\n record,\n favorite.selectedFavoriteTab,\n true,\n );\n e.stopPropagation();\n };\n\n const iconCls =\n \"oui-w-4 oui-h-4 oui-text-base-contrast-54 hover:oui-text-base-contrast\";\n\n const actions = (\n <div\n className={cn(\n \"oui-absolute oui-right-0 oui-top-[6.5px]\",\n \"oui-hidden group-hover:oui-block\",\n )}\n >\n <Flex\n className={cn(\n \"oui-inline-flex\",\n \"oui-bg-primary-darken oui-py-[6px]\",\n )}\n r=\"base\"\n width={52}\n justify=\"center\"\n itemAlign=\"end\"\n gapX={2}\n >\n <TopIcon\n className={iconCls}\n onClick={(e) => {\n e.stopPropagation();\n favorite.pinToTop(record);\n }}\n />\n <DeleteIcon className={iconCls} onClick={onDelSymbol} />\n </Flex>\n </div>\n );\n\n return (\n <div className=\"oui-relative\">\n {isFavoriteList && actions}\n\n <Flex\n direction=\"column\"\n justify=\"end\"\n itemAlign=\"end\"\n gapY={1}\n className={cn(isFavoriteList && \"group-hover:oui-invisible\")}\n >\n <Text.numeral dp={record.quote_dp || 2} size=\"2xs\">\n {record[\"24h_close\"]}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n size=\"2xs\"\n >\n {value}\n </Text.numeral>\n </Flex>\n </div>\n );\n },\n },\n ] as Column[];\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { SIDE_MARKETS_TAB_SORT_STORAGE_KEY } from \"../../constant\";\nimport { MarketsTabName } from \"../../type\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type MarketsSheetScriptReturn = ReturnType<typeof useMarketsSheetScript>;\n\nconst MARKETS_SHEET_SEL_TAB_KEY = \"orderly_markets_sheet_sel_tab_key\";\n\nexport function useMarketsSheetScript() {\n const { tabSort, onTabSort } = useTabSort({\n storageKey: SIDE_MARKETS_TAB_SORT_STORAGE_KEY,\n });\n\n const [activeTab, setActiveTab] = useLocalStorage(\n MARKETS_SHEET_SEL_TAB_KEY,\n MarketsTabName.Favorites,\n );\n\n return {\n tabSort,\n onTabSort,\n activeTab,\n onTabChange: setActiveTab,\n };\n}\n","import React from \"react\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport { useMarketsSheetScript } from \"./marketsSheet.script\";\nimport { MarketsSheet, MarketsSheetProps } from \"./marketsSheet.ui\";\n\nexport type MarketsSheetWidgetProps = MarketsProviderProps &\n Partial<Pick<MarketsSheetProps, \"className\">>;\n\nexport const MarketsSheetWidget: React.FC<MarketsSheetWidgetProps> = (\n props,\n) => {\n const state = useMarketsSheetScript();\n\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <MarketsSheet {...state} className={props.className} />\n </MarketsProvider>\n );\n};\n","import { FC, ReactNode } from \"react\";\nimport { Flex, Text, cn, Divider, Badge } from \"@orderly.network/ui\";\nimport { UseSymbolInfoBarScriptReturn } from \"./symbolInfoBar.script\";\nimport { TriangleDownIcon } from \"../../icons\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { MarketsProviderProps } from \"../marketsProvider\";\n\nexport type Layout = \"left\" | \"right\";\n\nexport type SymbolInfoBarProps = Pick<MarketsProviderProps, \"onSymbolChange\"> &\n UseSymbolInfoBarScriptReturn & {\n className?: string;\n trailing?: ReactNode;\n onSymbol?: () => void;\n };\n\nexport const SymbolInfoBar: FC<SymbolInfoBarProps> = (props) => {\n const { symbol, data, leverage, onSymbol } = props;\n\n const symbolView = (\n <Flex className=\"oui-cursor-pointer oui-gap-x-[6px]\" onClick={onSymbol}>\n <Text.formatted\n className=\"oui-break-normal oui-whitespace-nowrap\"\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n weight=\"semibold\"\n showIcon\n >\n {symbol}\n </Text.formatted>\n <TriangleDownIcon className=\"oui-text-base-contrast-54 oui-w-[14px] oui-h-[14px]\" />\n </Flex>\n );\n\n return (\n <Flex\n className={cn(\n \"oui-symbol-info-bar-mobile\",\n \"oui-font-semibold oui-h-full\",\n props.className\n )}\n >\n <Flex gapX={3} className=\"oui-flex-1 oui-overflow-hidden oui-h-full\">\n <Flex gapX={3}>\n {symbolView}\n <Badge size=\"xs\" color=\"primary\">\n {leverage}x\n </Badge>\n </Flex>\n\n <Divider className=\"oui-h-6\" direction=\"vertical\" intensity={8} />\n <Text.numeral\n size=\"2xs\"\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {data?.[\"change\"]!}\n </Text.numeral>\n </Flex>\n {props.trailing}\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useSymbolsInfo, useTickerStream } from \"@orderly.network/hooks\";\n\nexport type UseSymbolInfoBarScriptOptions = {\n symbol: string;\n};\n\nexport type UseSymbolInfoBarScriptReturn = ReturnType<\n typeof useSymbolInfoBarScript\n>;\n\nexport function useSymbolInfoBarScript(options: UseSymbolInfoBarScriptOptions) {\n const { symbol } = options;\n\n const data = useTickerStream(symbol);\n\n const symbolsInfo = useSymbolsInfo();\n\n const leverage = useMemo(() => {\n const info = symbolsInfo[symbol];\n const baseImr = info(\"base_imr\");\n return getLeverage(baseImr);\n }, [symbol, symbolsInfo]);\n\n return {\n symbol,\n data,\n leverage,\n };\n}\n\nfunction getLeverage(base_imr: number) {\n return base_imr ? 1 / base_imr : undefined;\n}\n","import {\n useSymbolInfoBarScript,\n UseSymbolInfoBarScriptOptions,\n} from \"./symbolInfoBar.script\";\nimport { SymbolInfoBar, SymbolInfoBarProps } from \"./symbolInfoBar.ui\";\n\nexport type SymbolInfoBarWidgetPros = UseSymbolInfoBarScriptOptions &\n Pick<SymbolInfoBarProps, \"className\" | \"trailing\" | \"onSymbol\">;\n\nexport const SymbolInfoBarWidget: React.FC<SymbolInfoBarWidgetPros> = (\n props,\n) => {\n const { symbol, ...rest } = props;\n\n const state = useSymbolInfoBarScript({ symbol });\n return <SymbolInfoBar {...state} {...rest} />;\n};\n","import React, { ReactNode } from \"react\";\nimport { useFundingRate } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { TokenIcon, Flex, Text, cn, Divider } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n ArrowLeftIcon,\n FavoritesIcon2,\n TriangleDownIcon,\n UnFavoritesIcon2,\n} from \"../../icons\";\nimport type { MarketsProviderProps } from \"../marketsProvider\";\nimport type { UseSymbolInfoBarFullScriptReturn } from \"./symbolInfoBarFull.script\";\n\nconst LazyDropDownMarketsWidget = React.lazy(() =>\n import(\"../dropDownMarkets\").then((mod) => {\n return {\n default: mod.DropDownMarketsWidget,\n };\n }),\n);\n\nconst LazyFavoritesDropdownMenuWidget = React.lazy(() =>\n import(\"../favoritesDropdownMenu\").then((mod) => {\n return {\n default: mod.FavoritesDropdownMenuWidget,\n };\n }),\n);\n\nconst LazyDataItem = React.lazy(() =>\n import(\"./dataItem.ui\").then((mod) => {\n return {\n default: mod.DataItem,\n };\n }),\n);\n\nexport type Layout = \"left\" | \"right\";\n\nexport type SymbolInfoBarFullProps = Pick<\n MarketsProviderProps,\n \"onSymbolChange\"\n> &\n UseSymbolInfoBarFullScriptReturn & {\n className?: string;\n trailing?: ReactNode;\n };\n\nexport const SymbolInfoBarFull: React.FC<SymbolInfoBarFullProps> = (props) => {\n const {\n symbol,\n isFavorite,\n favorite,\n data,\n quotoDp,\n openInterest,\n containerRef,\n leadingElementRef,\n tailingElementRef,\n leadingVisible,\n tailingVisible,\n onScoll,\n fundingPeriod,\n capFunding,\n floorFunding,\n } = props;\n\n const { t } = useTranslation();\n\n const favoriteIcon = (\n <React.Suspense fallback={null}>\n <LazyFavoritesDropdownMenuWidget row={{ symbol }} favorite={favorite}>\n <Flex\n width={12}\n height={12}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-mr-1 oui-cursor-pointer\"\n >\n {isFavorite ? (\n <FavoritesIcon2 className=\"oui-size-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-size-3 oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]\" />\n )}\n </Flex>\n </LazyFavoritesDropdownMenuWidget>\n </React.Suspense>\n );\n\n const symbolView = (\n <React.Suspense fallback={null}>\n <LazyDropDownMarketsWidget\n contentClassName=\"oui-w-[429px] oui-h-[496px]\"\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <Flex gapX={1} className=\"oui-cursor-pointer\">\n <TokenIcon symbol={symbol} className=\"oui-size-4\" />\n <Text.formatted\n className=\"oui-whitespace-nowrap oui-break-normal\"\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"xs\"\n weight=\"semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n <TriangleDownIcon className=\"oui-text-base-contrast-54\" />\n </Flex>\n </LazyDropDownMarketsWidget>\n </React.Suspense>\n );\n\n const price = (\n <Text.numeral\n dp={quotoDp || 2}\n currency=\"$\"\n size=\"sm\"\n intensity={98}\n className=\"oui-data-value\"\n >\n {data?.[\"24h_close\"]}\n </Text.numeral>\n );\n\n const change = (\n <>\n <Text.numeral coloring rm={Decimal.ROUND_DOWN} showIdentifier>\n {data?.[\"24h_change\"]!}\n </Text.numeral>\n <Text intensity={36}>/</Text>\n <Text.numeral\n rule=\"percentages\"\n coloring\n rm={Decimal.ROUND_DOWN}\n showIdentifier\n >\n {data?.[\"change\"]!}\n </Text.numeral>\n </>\n );\n\n return (\n <Flex\n className={cn(\n \"oui-symbol-info-bar-desktop\",\n \"oui-h-[54px] oui-font-semibold\",\n props.className,\n )}\n // fix Safari text opacity transition bug\n style={{\n transform: \"translateZ(0)\",\n willChange: \"transform\",\n }}\n >\n <Flex gapX={6} className=\"oui-h-full oui-flex-1 oui-overflow-hidden\">\n <Flex gapX={1}>\n {favoriteIcon}\n {symbolView}\n </Flex>\n <Divider className=\"oui-h-[26px]\" direction=\"vertical\" intensity={8} />\n {price}\n <div className=\"oui-relative oui-h-full oui-overflow-hidden\">\n <div\n ref={containerRef}\n className=\"oui-hide-scrollbar oui-h-full oui-overflow-x-auto\"\n >\n <Flex gapX={8} height=\"100%\">\n <div ref={leadingElementRef}>\n <React.Suspense fallback={null}>\n <LazyDataItem\n label={t(\"markets.column.24hChange\")}\n value={change}\n />\n </React.Suspense>\n </div>\n <React.Suspense fallback={null}>\n <LazyDataItem\n label={t(\"markets.symbolInfoBar.Mark\")}\n value={\n <Text.numeral\n dp={quotoDp}\n data-testid=\"oui-testid-tokenInfo-markPrice-value\"\n >\n {data?.[\"mark_price\"]}\n </Text.numeral>\n }\n hint={t(\"markets.symbolInfoBar.Mark.tooltip\")}\n />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyDataItem\n label={t(\"markets.symbolInfoBar.Index\")}\n value={\n <Text.numeral dp={quotoDp}>\n {data?.[\"index_price\"]}\n </Text.numeral>\n }\n hint={t(\"markets.symbolInfoBar.Index.tooltip\")}\n />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyDataItem\n label={t(\"markets.symbolInfoBar.24hVolume\")}\n value={\n <Text.numeral rule=\"human\" dp={2}>\n {data?.[\"24h_amount\"]}\n </Text.numeral>\n }\n hint={t(\"markets.symbolInfoBar.24hVolume.tooltip\")}\n />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyDataItem\n label={t(\"markets.symbolInfoBar.predFundingRate\")}\n value={<FundingRate symbol={symbol} />}\n hint={\n <Flex\n width={\"100%\"}\n itemAlign={\"center\"}\n direction=\"column\"\n gap={1}\n >\n <Flex\n justify=\"between\"\n itemAlign={\"center\"}\n width={\"100%\"}\n >\n <Text intensity={54}>\n {t(\"trading.fundingRate.predFundingRate.interval\")}\n </Text>\n <Text intensity={80}>{fundingPeriod}</Text>\n </Flex>\n <Flex\n justify=\"between\"\n itemAlign={\"center\"}\n width={\"100%\"}\n >\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 className=\"oui-w-full\" intensity={8} />\n {t(\"markets.symbolInfoBar.predFundingRate.tooltip\")}\n </Flex>\n }\n />\n </React.Suspense>\n\n <div ref={tailingElementRef}>\n <React.Suspense fallback={null}>\n <LazyDataItem\n label={t(\"markets.openInterest\")}\n value={\n <>\n <Text.numeral rule=\"human\" dp={2}>\n {openInterest}\n </Text.numeral>\n <Text intensity={36}>{` USDC`}</Text>\n </>\n }\n hint={t(\"markets.openInterest.tooltip\")}\n />\n </React.Suspense>\n </div>\n </Flex>\n </div>\n <ScrollIndicator leading onClick={onScoll} visible={leadingVisible} />\n <ScrollIndicator tailing onClick={onScoll} visible={tailingVisible} />\n </div>\n </Flex>\n {props.trailing}\n </Flex>\n );\n};\n\ntype ScrollIndicatorProps = {\n tailing?: boolean;\n leading?: boolean;\n visible?: boolean;\n onClick?: (direction: string) => void;\n};\n\nconst ScrollIndicator: React.FC<ScrollIndicatorProps> = (props) => {\n const { visible, leading, tailing, onClick } = props;\n if (!visible) {\n return null;\n }\n\n return (\n <button\n onClick={() => {\n onClick?.(leading ? \"left\" : \"right\");\n }}\n style={{\n background:\n \"linear-gradient(90deg, #07080A 0%, rgba(7, 8, 10, 0.60) 65%, rgba(7, 8, 10, 0.00) 100%)\",\n }}\n className={cn(\n \"oui-flex oui-w-[80px] oui-items-center\",\n \"oui-absolute oui-inset-y-0 oui-rounded-l\",\n leading && \"oui-left-0 oui-pl-1\",\n tailing && \"oui-right-0 oui-rotate-180 oui-pr-1\",\n )}\n >\n <ArrowLeftIcon className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast-80\" />\n </button>\n );\n};\n\nconst FundingRate: React.FC<{ symbol: string }> = ({ symbol }) => {\n const data = useFundingRate(symbol);\n\n if (data?.est_funding_rate === null) {\n return \"--\";\n }\n\n return (\n <div>\n <Text.numeral unit=\"%\" dp={4} className=\"oui-text-[#FF9A2E]\">\n {data.est_funding_rate!}\n </Text.numeral>\n <Text intensity={36} className=\"oui-tabular-nums\">\n {/* not need to translate */}\n {` in ${data.countDown}`}\n </Text>\n </div>\n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useFundingDetails,\n useFundingRate,\n useMarketsStore,\n useSymbolsInfo,\n useTickerStream,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport type UseSymbolInfoBarFullScriptOptions = {\n symbol: string;\n};\n\nexport type UseSymbolInfoBarFullScriptReturn = ReturnType<\n typeof useSymbolInfoBarFullScript\n>;\n\nexport function useSymbolInfoBarFullScript(\n options: UseSymbolInfoBarFullScriptOptions,\n) {\n const { symbol } = options;\n\n const data = useTickerStream(symbol);\n const fundingRate = useFundingRate(symbol);\n\n const favorite = useMarketsStore();\n\n const { data: fundingDetails, isLoading: isFundingLoading } =\n useFundingDetails(symbol);\n\n const fundingPeriod = useMemo(() => {\n if (!fundingDetails || isFundingLoading) {\n return \"-\";\n }\n return `${fundingDetails.funding_period}h`;\n }, [fundingDetails, isFundingLoading]);\n\n const capFunding = useMemo(() => {\n if (!fundingDetails || isFundingLoading) {\n return \"-\";\n }\n return `${new Decimal(fundingDetails.cap_funding).mul(100).toNumber()}%`;\n }, [fundingDetails, isFundingLoading]);\n\n const floorFunding = useMemo(() => {\n if (!fundingDetails || isFundingLoading) {\n return \"-\";\n }\n return `${new Decimal(fundingDetails.floor_funding).mul(100).toNumber()}%`;\n }, [fundingDetails, isFundingLoading]);\n\n const info = useSymbolsInfo();\n const quotoDp = info[symbol](\"quote_dp\");\n const [leadingVisible, setLeadingVisible] = useState(false);\n const [tailingVisible, setTailingVisible] = useState(false);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const leadingElementRef = useRef<HTMLDivElement>(null);\n const tailingElementRef = useRef<HTMLDivElement>(null);\n\n const isFavorite = useMemo(\n () => !!favorite.favorites.find((item) => item.name === symbol),\n [favorite.favorites, symbol],\n );\n\n const openInterest = useMemo(\n () =>\n new Decimal(data?.open_interest ?? 0)\n .mul(data?.index_price ?? 0)\n .toDecimalPlaces(2)\n .valueOf(),\n [data],\n );\n\n useEffect(() => {\n const intersectionObserver = new IntersectionObserver((entries) => {\n for (let index = 0; index < entries.length; index++) {\n const item = entries[index];\n if (item) {\n if (item.target === leadingElementRef.current) {\n setLeadingVisible(!item.isIntersecting);\n }\n\n if (item.target === tailingElementRef.current) {\n setTailingVisible(!item.isIntersecting);\n }\n }\n }\n });\n if (leadingElementRef.current) {\n intersectionObserver.observe(leadingElementRef.current);\n }\n\n if (tailingElementRef.current) {\n intersectionObserver.observe(tailingElementRef.current);\n }\n\n return () => {\n intersectionObserver.disconnect();\n };\n }, []);\n\n const onScoll = (direction: string) => {\n containerRef.current?.scrollBy({\n left: direction === \"left\" ? -100 : 100,\n behavior: \"smooth\",\n });\n };\n\n return {\n symbol,\n isFavorite,\n favorite,\n data,\n quotoDp,\n openInterest,\n fundingRate,\n containerRef,\n leadingElementRef,\n tailingElementRef,\n leadingVisible,\n tailingVisible,\n onScoll,\n fundingPeriod,\n capFunding,\n floorFunding,\n };\n}\n","import { FC } from \"react\";\nimport { MarketsProviderProps } from \"../marketsProvider\";\nimport {\n useSymbolInfoBarFullScript,\n UseSymbolInfoBarFullScriptOptions,\n} from \"./symbolInfoBarFull.script\";\nimport {\n SymbolInfoBarFull,\n SymbolInfoBarFullProps,\n} from \"./symbolInfoBarFull.ui\";\n\nexport type SymbolInfoBarFullWidgetPros = UseSymbolInfoBarFullScriptOptions &\n Pick<SymbolInfoBarFullProps, \"className\" | \"trailing\"> &\n Pick<MarketsProviderProps, \"onSymbolChange\">;\n\nexport const SymbolInfoBarFullWidget: FC<SymbolInfoBarFullWidgetPros> = (\n props,\n) => {\n const { symbol, ...rest } = props;\n\n const state = useSymbolInfoBarFullScript({ symbol });\n return <SymbolInfoBarFull {...state} {...rest} />;\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { CollapseMarkets } from \"../../components/collapseMarkets\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSideMarketsColumns } from \"../../components/sideMarkets/column\";\nimport { UseNewListingListReturn } from \"./newListingList.script\";\nimport { NewListingListWidgetProps } from \"./widget\";\n\nexport type NewListingListProps = UseNewListingListReturn &\n NewListingListWidgetProps;\n\nexport const NewListingList: FC<NewListingListProps> = (props) => {\n const { dataSource, favorite, onSort, loading, getColumns, collapsed } =\n props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const sideColumns = useSideMarketsColumns(favorite, false);\n\n const columns =\n typeof getColumns === \"function\"\n ? getColumns(favorite, false)\n : sideColumns;\n\n if (collapsed) {\n return <CollapseMarkets dataSource={dataSource} />;\n }\n\n return (\n <DataTable\n classNames={{\n root: props.tableClassNames?.root,\n body: props.tableClassNames?.body,\n header: cn(\"oui-h-9\", props.tableClassNames?.header),\n scroll: props.tableClassNames?.scroll,\n }}\n columns={columns}\n dataSource={dataSource}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[53px]\", props.rowClassName),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n manualSorting\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\n\nexport type UseNewListingListReturn = ReturnType<\n typeof useNewListingListScript\n>;\n\nexport const useNewListingListScript = () => {\n const [data, favorite] = useMarkets(MarketsType.NEW_LISTING);\n const [loading, setLoading] = useState(true);\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort();\n\n const dataSource = useMemo(() => {\n const searchResults = searchBySymbol(data, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [data, searchValue, getSortedList]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n };\n};\n","import { DataTableClassNames } from \"@orderly.network/ui\";\nimport { GetColumns } from \"../../type\";\nimport { useNewListingListScript } from \"./newListingList.script\";\nimport { NewListingList } from \"./newListingList.ui\";\n\nexport type NewListingListWidgetProps = {\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n};\n\nexport const NewListingListWidget: React.FC<NewListingListWidgetProps> = (\n props,\n) => {\n const state = useNewListingListScript();\n return <NewListingList {...state} {...props} />;\n};\n","import { FC } from \"react\";\nimport { Box, cn, DataTable } from \"@orderly.network/ui\";\nimport { CollapseMarkets } from \"../../components/collapseMarkets\";\nimport { FavoritesTabWidget } from \"../../components/favoritesTabs\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSideMarketsColumns } from \"../../components/sideMarkets/column\";\nimport { UseFavoritesListReturn } from \"./favoritesList.script\";\nimport type { FavoritesListWidgetProps } from \"./widget\";\n\nexport type FavoritesListProps = UseFavoritesListReturn &\n FavoritesListWidgetProps;\n\nexport const FavoritesList: FC<FavoritesListProps> = (props) => {\n const { dataSource, favorite, onSort, loading, getColumns, collapsed } =\n props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const sideColumns = useSideMarketsColumns(favorite, true);\n\n const columns =\n typeof getColumns === \"function\" ? getColumns(favorite, true) : sideColumns;\n\n if (collapsed) {\n return <CollapseMarkets dataSource={dataSource} />;\n }\n\n return (\n <>\n <Box px={3} className=\"oui-my-[6px]\">\n <FavoritesTabWidget favorite={favorite} size=\"sm\" />\n </Box>\n\n <DataTable\n classNames={{\n root: props.tableClassNames?.root,\n body: props.tableClassNames?.body,\n header: cn(\"oui-h-9\", props.tableClassNames?.header),\n scroll: props.tableClassNames?.scroll,\n }}\n columns={columns}\n dataSource={dataSource}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[53px]\", props.rowClassName),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n manualSorting\n />\n </>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\n\nexport type UseFavoritesListReturn = ReturnType<typeof useFavoritesListScript>;\n\nexport const useFavoritesListScript = () => {\n const [data, favorite] = useMarkets(MarketsType.FAVORITES);\n const [loading, setLoading] = useState(true);\n\n const { favorites, selectedFavoriteTab } = favorite;\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort();\n\n const dataSource = useMemo(() => {\n const filterList = favorites\n ?.filter(\n (item) =>\n item.tabs?.findIndex((tab) => tab.id === selectedFavoriteTab.id) !==\n -1,\n )\n ?.map((fav) => {\n const index = data?.findIndex((item) => item.symbol === fav.name);\n if (index !== -1) {\n return data[index];\n }\n return null;\n })\n ?.filter((item) => !!item);\n\n const searchResults = searchBySymbol(filterList, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [data, selectedFavoriteTab, favorites, searchValue, getSortedList]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n };\n};\n","import { DataTableClassNames } from \"@orderly.network/ui\";\nimport { GetColumns } from \"../../type\";\nimport { useFavoritesListScript } from \"./favoritesList.script\";\nimport { FavoritesList } from \"./favoritesList.ui\";\n\nexport type FavoritesListWidgetProps = {\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n};\n\nexport const FavoritesListWidget: React.FC<FavoritesListWidgetProps> = (\n props,\n) => {\n const state = useFavoritesListScript();\n return <FavoritesList {...state} {...props} />;\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { CollapseMarkets } from \"../../components/collapseMarkets\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useSideMarketsColumns } from \"../../components/sideMarkets/column\";\nimport { UseRecentListReturn } from \"./recentList.script\";\nimport { RecentListWidgetProps } from \"./widget\";\n\nexport type RecentListProps = UseRecentListReturn & RecentListWidgetProps;\n\nexport const RecentList: FC<RecentListProps> = (props) => {\n const { dataSource, favorite, onSort, loading, getColumns, collapsed } =\n props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const sideColumns = useSideMarketsColumns(favorite, false);\n\n const columns =\n typeof getColumns === \"function\"\n ? getColumns(favorite, false)\n : sideColumns;\n\n if (collapsed) {\n return <CollapseMarkets dataSource={dataSource} />;\n }\n\n return (\n <DataTable\n classNames={{\n root: props.tableClassNames?.root,\n body: props.tableClassNames?.body,\n header: cn(\"oui-h-9\", props.tableClassNames?.header),\n scroll: props.tableClassNames?.scroll,\n }}\n columns={columns}\n dataSource={dataSource}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[53px]\", props.rowClassName),\n onClick: () => {\n onSymbolChange?.(record);\n favorite.addToHistory(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n rowSelection={{ [symbol!]: true }}\n onSort={onSort}\n manualSorting\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { searchBySymbol, useSort } from \"../../utils\";\n\nexport type UseRecentListReturn = ReturnType<typeof useRecentListScript>;\n\nexport const useRecentListScript = () => {\n const [data, favorite] = useMarkets(MarketsType.RECENT);\n const [loading, setLoading] = useState(true);\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort();\n\n const dataSource = useMemo(() => {\n const searchResults = searchBySymbol(data, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [data, searchValue, getSortedList]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n };\n};\n","import { DataTableClassNames } from \"@orderly.network/ui\";\nimport { GetColumns } from \"../../type\";\nimport { useRecentListScript } from \"./recentList.script\";\nimport { RecentList } from \"./recentList.ui\";\n\nexport type RecentListWidgetProps = {\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n};\n\nexport const RecentListWidget: React.FC<RecentListWidgetProps> = (props) => {\n const state = useRecentListScript();\n return <RecentList {...state} {...props} />;\n};\n","import React, { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, TabPanel, Tabs, useScreen } from \"@orderly.network/ui\";\nimport {\n LeftNavProps,\n RouterAdapter,\n LeftNavUI,\n} from \"@orderly.network/ui-scaffold\";\nimport {\n MarketsProvider,\n type MarketsProviderProps,\n} from \"../../components/marketsProvider\";\nimport { MarketsPageTab } from \"../../type\";\n\nconst LazyMarketsHeaderWidget = React.lazy(() =>\n import(\"./marketsHeader/marketsHeader.widget\").then((mod) => {\n return { default: mod.MarketsHeaderWidget };\n }),\n);\n\nconst LazyMarketsDataListWidget = React.lazy(() =>\n import(\"./marketsDataList\").then((mod) => {\n return { default: mod.MarketsDataListWidget };\n }),\n);\n\nconst LazyFundingWidget = React.lazy(() =>\n import(\"./funding/funding.widget\").then((mod) => {\n return { default: mod.FundingWidget };\n }),\n);\n\nexport type MarketsHomePageProps = MarketsProviderProps & {\n className?: string;\n};\n\nexport const MarketsHomePage: FC<MarketsHomePageProps> = (props) => {\n const { isMobile } = useScreen();\n\n const [activeTab, setActiveTab] = useState<MarketsPageTab>(\n MarketsPageTab.Markets,\n );\n\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n navProps={props.navProps}\n comparisonProps={props.comparisonProps}\n >\n <div\n id=\"oui-markets-home-page\"\n className={cn(\"oui-font-semibold\", props.className)}\n >\n {isMobile ? (\n <MarketsMobileContent\n activeTab={activeTab}\n onTabChange={setActiveTab}\n navProps={props.navProps}\n />\n ) : (\n <MarketsDesktopContent\n activeTab={activeTab}\n onTabChange={setActiveTab}\n />\n )}\n </div>\n </MarketsProvider>\n );\n};\n\ntype MarketsContentProps = {\n activeTab: MarketsPageTab;\n onTabChange: (value: MarketsPageTab) => void;\n // only for mobile\n navProps?: {\n logo?: {\n src: string;\n alt: string;\n };\n routerAdapter?: RouterAdapter;\n leftNav?: LeftNavProps;\n };\n};\n\nconst MarketsDesktopContent: React.FC<MarketsContentProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Box p={6}>\n <Tabs\n size=\"xl\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (value: string) => void}\n >\n <TabPanel\n title={t(\"common.markets\")}\n value={MarketsPageTab.Markets}\n testid=\"oui-testid-markets-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyMarketsHeaderWidget className=\"oui-mt-4\" />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyMarketsDataListWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n value={MarketsPageTab.Funding}\n testid=\"oui-testid-funding-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyFundingWidget />\n </React.Suspense>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n\nconst MarketsMobileContent: React.FC<MarketsContentProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Tabs\n variant=\"text\"\n size=\"xl\"\n value={props.activeTab}\n onValueChange={props.onTabChange as (value: string) => void}\n classNames={{\n tabsListContainer: \"oui-border-0\",\n tabsList: \"oui-mx-6 oui-my-2\",\n trigger: cn(\n \"oui-text-2xl oui-font-bold\",\n \"data-[state=active]:after:oui-bg-transparent!\",\n ),\n tabsContent: \"oui-px-3\",\n }}\n leading={\n props.navProps?.leftNav && (\n <LeftNavUI\n className=\"-oui-mr-4 oui-ml-3\"\n {...props?.navProps?.leftNav}\n logo={props?.navProps?.logo}\n routerAdapter={props?.navProps?.routerAdapter}\n />\n )\n }\n >\n <TabPanel\n title={t(\"common.markets\")}\n value=\"markets\"\n testid=\"oui-testid-markets-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyMarketsHeaderWidget className=\"oui-mt-2\" />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyMarketsDataListWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n value=\"funding\"\n testid=\"oui-testid-funding-tab\"\n >\n <React.Suspense fallback={null}>\n <LazyFundingWidget />\n </React.Suspense>\n </TabPanel>\n </Tabs>\n );\n};\n"]}