@orderly.network/markets 2.0.7 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pages/home/header/header.ui.tsx","../src/components/marketsProvider/index.tsx","../src/icons.tsx","../src/pages/home/header/header.script.tsx","../src/utils.ts","../src/pages/home/header/widget.tsx","../src/pages/home/dataList/dataList.ui.tsx","../src/components/marketsListFull/marketsListFull.ui.tsx","../src/components/marketsListFull/column.tsx","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.ui.tsx","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.script.ts","../src/components/favoritesDropdownMenu/widget.tsx","../src/components/marketsListFull/marketsListFull.script.ts","../src/components/marketsListFull/widget.tsx","../src/components/favoritesListFull/favoritesListFull.ui.tsx","../src/components/favoritesTabs/favoritesTabs.ui.tsx","../src/components/favoritesTabs/favoritesTabs.script.ts","../src/components/favoritesTabs/widget.tsx","../src/components/favoritesListFull/column.tsx","../src/components/favoritesListFull/favoritesListFull.script.ts","../src/components/favoritesListFull/widget.tsx","../src/pages/home/dataList/dataList.script.ts","../src/pages/home/dataList/widget.tsx","../src/components/expandMarkets/expandMarkets.ui.tsx","../src/components/favoritesList/favoritesList.ui.tsx","../src/components/sideMarkets/column.tsx","../src/components/collapseMarkets/index.tsx","../src/components/favoritesList/favoritesList.script.ts","../src/components/favoritesList/widget.tsx","../src/components/marketsList/marketsList.ui.tsx","../src/components/marketsList/marketsList.script.ts","../src/components/marketsList/widget.tsx","../src/components/recentList/recentList.ui.tsx","../src/components/recentList/recentList.script.ts","../src/components/recentList/widget.tsx","../src/components/newListingList/newListingList.ui.tsx","../src/components/newListingList/newListingList.script.ts","../src/components/newListingList/widget.tsx","../src/components/expandMarkets/expandMarkets.script.ts","../src/components/shared/hooks/useTabSort.ts","../src/components/expandMarkets/widget.tsx","../src/components/fundingOverview/fundingOverview.ui.tsx","../src/components/fundingOverview/columns.tsx","../src/components/fundingOverview/fundingOverview.script.tsx","../src/components/fundingOverview/widget.tsx","../src/components/fundingComparison/fundingComparison.ui.tsx","../src/components/fundingComparison/columns.tsx","../src/components/fundingComparison/fundingComparison.script.tsx","../src/components/fundingComparison/widget.tsx","../src/components/sideMarkets/sideMarkets.ui.tsx","../src/components/sideMarkets/sideMarkets.script.ts","../src/components/sideMarkets/widget.tsx","../src/components/dropDownMarkets/dropDownMarkets.ui.tsx","../src/components/dropDownMarkets/column.tsx","../src/components/dropDownMarkets/dropDownMarkets.script.ts","../src/components/dropDownMarkets/widget.tsx","../src/components/marketsSheet/marketsSheet.ui.tsx","../src/components/marketsSheet/column.tsx","../src/components/marketsSheet/marketsSheet.script.ts","../src/components/marketsSheet/widget.tsx","../src/components/symbolInfoBar/symbolInfoBar.ui.tsx","../src/components/symbolInfoBar/symbolInfoBar.script.ts","../src/components/symbolInfoBar/widget.tsx","../src/components/symbolInfoBarFull/symbolInfoBarFull.ui.tsx","../src/components/symbolInfoBarFull/symbolInfoBarFull.script.ts","../src/components/symbolInfoBarFull/widget.tsx","../src/pages/home/page.tsx","../src/pages/home/funding/funding.ui.tsx","../src/pages/home/funding/funding.script.tsx","../src/pages/home/funding/widget.tsx"],"names":["useMemo","Box","cn","Flex","Text","Decimal","createContext","useState","useContext","useCallback","jsx","MarketsContext","MarketsProvider","props","searchValue","setSearchValue","clearSearchValue","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","onSymbolChange","cls","onSymbol","item","BlockList","CardItem","ScrollIndicator","list","index","BlockItem","ListItem","scrollPrev","scrollNext","useEffect","useEmblaCarousel","useMarkets","useQuery","MarketsType","sortList","sortKey","sortOrder","sortedList","isEmpty","value","b","val1","val2","useSort","defaultSortKey","defaultSortOrder","onSortChange","key","setKey","order","setOrder","onSort","options","getSortedList","searchBySymbol","formatString","reg","formatSymbol","symbol","arr","type","base","quote","useSize","width","setWidth","height","setHeight","handleResize","useMarketsHeaderScript","setScrollIndex","data","useDataSource","markets","balance","prevValue","curValue","total_holding","MarketsHeaderWidget","state","CloseCircleFillIcon","Input","TabPanel","Tabs","DataTable","Tooltip","Button","CheckedSquareFillIcon","CheckSquareEmptyIcon","PlusIcon","CloseIcon","Divider","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","FavoritesDropdownMenu","favoriteTabs","open","onOpenChange","inputVisible","selectedTabs","onValueChange","hide","hideInput","showInput","onCheck","addTab","confirm","overLen","renderInput","overTabs","header","content","checked","tab","footer","e","useFavoritesDropdownMenuScript","favorites","updateFavoriteTabs","updateSymbolFavoriteState","setOpen","setInputVisible","setValue","setSelectedTabs","clearState","newTab","find","FavoritesDropdownMenuWidget","useMarketsListFullColumns","isFavoriteList","record","button","MarketsListFull","loading","dataSource","initialSort","pagination","columns","usePagination","useMarketsListFullScript","setLoading","pageSize","setPage","MarketsListFullWidget","sortStore","modal","FavoritesTab","container","inputRef","inputWidth","spanRef","editing","updateCurTab","onEdit","delTab","size","scrollable","selectedFavoriteTab","updateSelectedFavoriteTab","addIconWidth","tabHeight","gradientColor","onDel","onKeyUp","renderActions","renderAdd","icon","isActive","renderContent","textProps","useRef","useFavoritesTabScript","updateFavorites","setEditing","setScrollable","scrollView","setInputWidth","updateScrollLayout","scrollWidth","clientWidth","scrollToRight","selectedTab","_favorites","tabs","rect","offset","FavoritesTabWidget","className","rest","useFavoritesListFullColumns","FavoritesListFull","useFavoritesListFullScript","filterData","filterList","fav","FavoritesListFullWidget","MarketsDataList","activeTab","onTabChange","onSearchValueChange","useMarketsDataListScript","setActiveTab","MarketsDataListWidget","TokenIcon","Badge","getSideMarketsColumns","favoritesIcon","onDelSymbol","iconCls","actions","CollapseMarkets","Fragment","FavoritesList","getColumns","collapsed","useFavoritesListScript","searchResults","FavoritesListWidget","MarketsList","useMarketsListScript","MarketsListWidget","RecentList","useRecentListScript","RecentListWidget","NewListingList","useNewListingListScript","NewListingListWidget","ExpandMarkets","tabSort","onTabSort","search","useSessionStorage","useTabSort","storageKey","setTabSort","useExpandMarketsScript","ExpandMarketsWidget","createFundingRenderer","dp","getFundingOverviewColumns","selectedPeriod","setSelectedPeriod","option","FundingOverview","isLoading","useFundingRateHistory","useFundingOverviewScript","marketData","historyData","isHistoryLoading","getPositiveRates","processedData","posRates","acc","period","market","history","h","filteredData","FundingOverviewWidget","useFundingRates","exchanges","useFundingComparisonScript","fundingRates","row","exchangeData","name","normalizedName","rate","exchange","getFundingColumns","FundingComparison","FundingComparisonWidget","SideMarkets","collapsable","onCollapse","SideMarketsHeader","useLocalStorage","useSideMarketsScript","setCollapsed","SideMarketsWidget","getDropDownMarketsColumns","DropDownMarkets","DropDownMarketsConetnt","useDropDownMarketsScript","DropDownMarketsWidget","Grid","getMarketsSheetColumns","MarketsSheet","useMarketsSheetScript","MarketsSheetWidget","SymbolInfoBar","leverage","symbolView","useSymbolsInfo","useTickerStream","useSymbolInfoBarScript","symbolsInfo","info","baseImr","getLeverage","base_imr","SymbolInfoBarWidget","useFundingRate","SymbolInfoBarFull","isFavorite","quotoDp","openInterest","fundingRate","containerRef","leadingElementRef","tailingElementRef","leadingVisible","tailingVisible","onScoll","favoriteIcon","price","change","DataItem","FundingRate","visible","leading","tailing","onClick","useMarketsStore","useSymbolInfoBarFullScript","setLeadingVisible","setTailingVisible","intersectionObserver","entries","direction","SymbolInfoBarFullWidget","FundingUI","activeFundingTab","onFundingTabChange","useFundingScript","setActiveFundingTab","FundingWidget","MarketsHomePage"],"mappings":"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","sourcesContent":["import { FC, ReactNode, useMemo } from \"react\";\nimport { HeaderReturns } from \"./header.script\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { OrderlyIcon } from \"../../../icons\";\n\n/** -----------MarketsHeader start ------------ */\nexport const MarketsHeader: FC<HeaderReturns> = (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\n const cls = cn(\n \"oui-flex-[0_0_calc((100%_-_32px)_/_3)] 3xl:oui-flex-[0_0_calc((100%_-_48px)_/_4)] oui-min-w-0\",\n enableScroll && \"oui-select-none oui-cursor-pointer\"\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=\"oui-overflow-hidden\"\n ref={enableScroll ? emblaRef : undefined}\n >\n <Flex width=\"100%\" gapX={4} mt={4}>\n <BlockList\n total24Amount={total24Amount}\n totalOpenInterest={totalOpenInterest}\n tvl={tvl}\n className={cls}\n />\n <CardItem\n data={news}\n title={<Text.gradient color=\"brand\">New listings</Text.gradient>}\n className={cls}\n onSymbol={onSymbol}\n />\n <CardItem\n data={gainers}\n title={<Text className=\"oui-text-success-light\">Top gainers</Text>}\n className={cls}\n onSymbol={onSymbol}\n />\n <CardItem\n data={losers}\n title={<Text className=\"oui-text-danger-light\">Top losers</Text>}\n className={cls}\n onSymbol={onSymbol}\n />\n </Flex>\n <div className=\"oui-mt-1 oui-mb-3 3xl:oui-mt-4 3xl:oui-mb-0\">\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\n const list = useMemo(() => {\n return [\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> 24h volume\n </Flex>\n ),\n value: total24Amount,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> Open interest\n </Flex>\n ),\n value: totalOpenInterest,\n },\n {\n label: (\n <Flex gapX={1}>\n <OrderlyIcon /> Assets (TVL)\n </Flex>\n ),\n value: tvl,\n },\n ];\n }, [total24Amount, totalOpenInterest, tvl]);\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={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(\"hover:oui-bg-base-8 oui-cursor-pointer\", 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-bg-base-contrast-36 oui-w-4\"\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} from \"react\";\nimport { API } from \"@orderly.network/types\";\n\ntype MarketsContextState = {\n symbol?: string;\n searchValue?: string;\n onSearchValueChange?: (searchValue: string) => void;\n clearSearchValue?: () => void;\n} & MarketsProviderProps;\n\nexport const MarketsContext = createContext({} as MarketsContextState);\n\nexport type MarketsProviderProps = {\n symbol?: string;\n onSymbolChange?: (symbol: API.Symbol) => void;\n};\n\nexport const MarketsProvider: FC<PropsWithChildren<MarketsProviderProps>> = (\n props\n) => {\n const [searchValue, setSearchValue] = useState(\"\");\n\n const clearSearchValue = useCallback(() => {\n setSearchValue(\"\");\n }, []);\n\n return (\n <MarketsContext.Provider\n value={{\n searchValue,\n onSearchValueChange: setSearchValue,\n clearSearchValue,\n symbol: props.symbol,\n onSymbolChange: props.onSymbolChange,\n }}\n >\n {props.children}\n </MarketsContext.Provider>\n );\n};\n\nexport function useMarketsContext() {\n return useContext(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 { Decimal } from \"@orderly.network/utils\";\nimport { useMarkets, useQuery, MarketsType } from \"@orderly.network/hooks\";\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 HeaderReturns = 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 () => sortList(markets, \"created_time\", \"desc\").slice(0, 5),\n [markets]\n );\n\n const gainers = useMemo(\n () => sortList(markets, \"change\", \"desc\").slice(0, 5),\n [markets]\n );\n\n const losers = useMemo(\n () => sortList(markets, \"change\", \"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 { SortOrder } from \"@orderly.network/ui\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { TInitialSort } from \"./type\";\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[], sortKey?: string, sortOrder?: SortOrder) {\n const sortedList = [...(list || [])];\n\n const isEmpty = (value: any) => value === undefined || value === null;\n\n if (sortKey && sortOrder) {\n // sort list\n sortedList.sort((a: any, b: any) => {\n const val1 = a[sortKey];\n const val2 = b[sortKey];\n\n if (isEmpty(val1)) return 1;\n if (isEmpty(val2)) return -1;\n\n if (sortOrder === \"desc\") {\n return val2 - val1;\n }\n\n return val1 - val2;\n });\n }\n return sortedList;\n}\n\nexport function useSort(\n defaultSortKey?: string,\n defaultSortOrder?: SortOrder,\n onSortChange?: (sortKey?: string, sortOrder?: SortOrder) => void\n) {\n const [key, setKey] = useState<string>();\n const [order, setOrder] = useState<SortOrder>();\n\n const onSort = useCallback(\n (options?: TInitialSort) => {\n setKey(options?.sortKey);\n setOrder(options?.sort);\n onSortChange?.(options?.sortKey, options?.sort);\n },\n [onSortChange]\n );\n\n const sortKey = key || defaultSortKey;\n const sortOrder = order || defaultSortOrder;\n\n const getSortedList = useCallback(\n (list: any[]) => sortList(list, sortKey, sortOrder),\n [sortKey, sortOrder]\n );\n\n return { onSort, getSortedList, sortKey, sortOrder };\n}\n\nexport function searchBySymbol(\n list: any[],\n searchValue = \"\",\n formatString?: string\n) {\n const reg = new RegExp(searchValue, \"i\");\n return list?.filter((item) =>\n reg.test(formatSymbol(item.symbol, formatString))\n );\n}\n\nfunction formatSymbol(symbol: string, formatString: string = \"base\") {\n const arr = symbol.split(\"_\");\n const type = arr[0];\n const base = arr[1];\n const quote = arr[2];\n\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\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 { useMarketsHeaderScript } from \"./header.script\";\nimport { MarketsHeader } from \"./header.ui\";\n\nexport const MarketsHeaderWidget = () => {\n const state = useMarketsHeaderScript();\n return <MarketsHeader {...state} />;\n};\n","import {\n Box,\n CloseCircleFillIcon,\n Input,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { UseMarketsDataListScript } from \"./dataList.script\";\nimport {\n AllMarketsIcon,\n FavoritesIcon,\n NewListingsIcon,\n SearchIcon,\n} from \"../../../icons\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { MarketsListFullWidget } from \"../../../components/marketsListFull\";\nimport { FavoritesListFullWidget } from \"../../../components/favoritesListFull\";\n\nexport type MarketsDataListProps = UseMarketsDataListScript;\n\nexport const MarketsDataList: React.FC<MarketsDataListProps> = (props) => {\n const { activeTab, onTabChange } = props;\n\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const search = (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder=\"Search market\"\n className=\"oui-w-[240px] oui-my-1\"\n size=\"sm\"\n data-testid=\"oui-testid-markets-searchMarket-input\"\n prefix={\n <Box pl={3} pr={1}>\n <SearchIcon className=\"oui-text-base-contrast-36\" />\n </Box>\n }\n suffix={\n searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-text-base-contrast-36 oui-cursor-pointer\"\n onClick={clearSearchValue}\n />\n </Box>\n )\n }\n autoComplete=\"off\"\n />\n );\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={search}\n >\n <TabPanel\n title=\"Favorites\"\n icon={<FavoritesIcon />}\n value=\"favorites\"\n testid=\"oui-testid-markets-favorites-tab\"\n >\n <FavoritesListFullWidget />\n </TabPanel>\n <TabPanel\n title=\"All markets\"\n icon={<AllMarketsIcon />}\n value=\"all\"\n testid=\"oui-testid-markets-all-tab\"\n >\n <MarketsListFullWidget\n type=\"all\"\n sortKey=\"24h_amount\"\n sortOrder=\"desc\"\n />\n </TabPanel>\n <TabPanel\n title=\"New listings\"\n icon={<NewListingsIcon />}\n value=\"new\"\n testid=\"oui-testid-markets-newListings-tab\"\n >\n <MarketsListFullWidget\n type=\"new\"\n sortKey=\"created_time\"\n sortOrder=\"desc\"\n />\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { type UseMarketsListFullReturn } from \"./marketsListFull.script\";\nimport { TInitialSort } from \"../../type\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useMarketsListFullColumns } from \"./column\";\n\nexport type MarketsListFullProps = UseMarketsListFullReturn & {\n initialSort: TInitialSort;\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 { MouseEventHandler, useMemo } from \"react\";\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 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: \"Market\",\n dataIndex: \"symbol\",\n width: 90,\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: \"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: \"24h change\",\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 /> 24h volume\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 /> Open interest\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: \"8h funding\",\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 content=\"Move to top\" align=\"center\" delayDuration={0}>\n <Box\n className=\"oui-hidden group-hover:oui-block oui-cursor-pointer\"\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]);\n\n return columns;\n};\n","import { PropsWithChildren } from \"react\";\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 ScrollArea,\n Text,\n cn,\n CloseCircleFillIcon,\n Badge,\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 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-bg-base-6 oui-h-7 oui-w-full oui-ml-[1px] oui-rounded-sm\",\n overLen &&\n \"focus-visible:oui-outline-danger focus-within: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-text-base-contrast-20 oui-cursor-pointer\"\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 Add\n </Button>\n </Flex>\n\n {overLen && (\n <Flex itemAlign=\"center\" gapX={1} mt={1}>\n <div className=\"oui-h-1 oui-w-1 oui-bg-danger oui-rounded-full\"></div>\n <Text color=\"danger\">List name cannot exceed 15 characters</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 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 <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 Add a new watchlist\n </Text>\n </Flex>\n </div>\n </Tooltip>\n );\n };\n\n const header = (\n <Flex justify=\"between\" className=\"oui-mt-3 oui-mb-[10px]\">\n <Flex gapX={1}>\n Select lists for\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-text-base-contrast oui-cursor-pointer\"\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-max-h-[288px] oui-overflow-y-auto oui-custom-scrollbar\"\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 Cancel\n </Button>\n\n <Button\n key=\"primary\"\n onClick={confirm}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n 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 { FavoritesDropdownMenu } from \"./favoritesDropdownMenu.ui\";\nimport {\n useFavoritesDropdownMenuScript,\n UseFavoritesDropdownMenuScriptOptions,\n} from \"./favoritesDropdownMenu.script\";\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 { usePagination } from \"@orderly.network/ui\";\nimport { MarketsListFullWidgetProps } from \"./widget\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\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 { pageSize, 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, sortKey, sortOrder } = useSort(\n options?.sortKey,\n options?.sortOrder\n );\n\n const dataSource = useMemo(() => {\n const list = getSortedList(data);\n return searchBySymbol(list, searchValue, \"base-type\");\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\", sortKey!, sortOrder!);\n }\n }, [sortKey, sortOrder, options.type]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n pagination,\n };\n};\n","import { MarketsListFull } from \"./marketsListFull.ui\";\nimport { useMarketsListFullScript } from \"./marketsListFull.script\";\nimport { SortOrder } from \"@orderly.network/ui\";\n\nexport type MarketsListFullWidgetProps = {\n type?: \"all\" | \"new\";\n sortKey: string;\n sortOrder: SortOrder;\n};\n\nexport const MarketsListFullWidget: React.FC<MarketsListFullWidgetProps> = (\n props\n) => {\n const state = useMarketsListFullScript(props);\n\n // Only all markets store sort\n const sortStore =\n props.type === \"all\" ? state.favorite.tabSort?.all : undefined;\n\n return (\n <MarketsListFull\n {...state}\n type={props.type}\n initialSort={{\n sortKey: sortStore?.sortKey || props.sortKey,\n sort: (sortStore?.sortOrder as SortOrder) || props.sortOrder,\n }}\n />\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Text, DataTable } from \"@orderly.network/ui\";\nimport { UnFavoritesIcon } from \"../../icons\";\nimport { UseFavoritesListFullReturn } from \"./favoritesListFull.script\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { FavoritesTabWidget } from \"../../components/favoritesTabs\";\nimport { useFavoritesListFullColumns } from \"./column\";\n\nexport type FavoritesListFullProps = UseFavoritesListFullReturn;\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 = useFavoritesListFullColumns(favorite, true);\n\n const emptyView = (\n <Flex>\n <Text size=\"xs\" intensity={36}>\n Click on the\n </Text>\n <UnFavoritesIcon className=\"oui-text-base-contrast-36\" />\n <Text size=\"xs\" intensity={36}>\n icon next to a market to add it to your list.\n </Text>\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 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 { KeyboardEventHandler } from \"react\";\nimport {\n Box,\n cn,\n Flex,\n Text,\n Tooltip,\n Input,\n modal,\n} from \"@orderly.network/ui\";\nimport { FavoriteTab } from \"@orderly.network/hooks\";\nimport {\n UseFavoritesTabScriptOptions,\n UseFavoritesTabScriptReturn,\n} from \"./favoritesTabs.script\";\nimport { AddIcon, ActiveAddIcon, EditIcon, TrashIcon } from \"../../icons\";\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 { 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: \"Delete list\",\n content: (\n <Text size=\"sm\">{`Are you sure you want to delete ${item.name}?`}</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-text-base-contrast-36 hover:oui-text-base-contrast oui-cursor-pointer\"\n onClick={() => {\n onEdit(item);\n }}\n />\n <TrashIcon\n className=\"oui-text-base-contrast-36 hover:oui-text-base-contrast oui-cursor-pointer\"\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-text-base-contrast-54 oui-w-3 oui-h-3 oui-z-[1]\" />\n ) : (\n <ActiveAddIcon className=\"oui-w-3 oui-h-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-p-0 oui-rounded oui-px-2 oui-my-[1px]\",\n \"focus-visible:oui-outline-none focus-within:oui-outline-transparent\",\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 isActive && setOpen(true);\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-relative oui-cursor-pointer oui-hide-scrollbar\",\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 isActive && setOpen(open);\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 { FavoritesTab } from \"./favoritesTabs.ui\";\nimport {\n useFavoritesTabScript,\n UseFavoritesTabScriptOptions,\n} from \"./favoritesTabs.script\";\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 { useMarketsListFullColumns } from \"../marketsListFull/column\";\n\nexport const useFavoritesListFullColumns = useMarketsListFullColumns;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\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 { FavoritesListFull } from \"./favoritesListFull.ui\";\nimport { useFavoritesListFullScript } from \"./favoritesListFull.script\";\n\nexport const FavoritesListFullWidget: React.FC = () => {\n const state = useFavoritesListFullScript();\n return <FavoritesListFull {...state} />;\n};\n","import { useEffect, useState } from \"react\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\n\nexport type TabName = \"favorites\" | \"all\" | \"new\";\n\nexport type UseMarketsDataListScript = ReturnType<\n typeof useMarketsDataListScript\n>;\n\nexport function useMarketsDataListScript() {\n const [activeTab, setActiveTab] = useState<TabName>(\"all\");\n const { clearSearchValue } = useMarketsContext();\n\n useEffect(() => {\n clearSearchValue?.();\n }, [activeTab]);\n\n return {\n activeTab,\n onTabChange: (value: string) => setActiveTab(value as TabName),\n };\n}\n","import { MarketsDataList } from \"./dataList.ui\";\nimport { useMarketsDataListScript } from \"./dataList.script\";\n\nexport const MarketsDataListWidget = () => {\n const state = useMarketsDataListScript();\n return <MarketsDataList {...state} />;\n};\n","import {\n Box,\n CloseCircleFillIcon,\n cn,\n Input,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { FavoritesIcon, SearchIcon } from \"../../icons\";\nimport { UseExpandMarketsScriptReturn } from \"./expandMarkets.script\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { FavoritesListWidget } from \"../favoritesList\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { RecentListWidget } from \"../recentList\";\nimport { NewListingListWidget } from \"../newListingList\";\n\nexport type ExpandMarketsProps = UseExpandMarketsScriptReturn;\n\nexport const ExpandMarkets: React.FC<ExpandMarketsProps> = (props) => {\n const { activeTab, onTabChange, tabSort, onTabSort } = props;\n\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const search = (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder=\"Search\"\n classNames={{ root: \"oui-border oui-mt-[1px] oui-border-line\" }}\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 searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-text-base-contrast-36 oui-cursor-pointer\"\n onClick={clearSearchValue}\n />\n </Box>\n )\n }\n autoComplete=\"off\"\n />\n );\n\n const cls = \"oui-h-[calc(100%_-_36px)]\";\n\n return (\n <Box className={cn(\"oui-font-semibold oui-overflow-hidden\")} height=\"100%\">\n <Box px={3} pb={2}>\n {search}\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 title=\"Favorites\" icon={<FavoritesIcon />} value=\"favorites\">\n <div className={cls}>\n <FavoritesListWidget\n tableClassNames={{\n scroll: \"oui-px-1\",\n }}\n />\n </div>\n </TabPanel>\n <TabPanel title=\"Recent\" value=\"recent\">\n <div className={cls}>\n <RecentListWidget\n tableClassNames={{\n scroll: \"oui-px-1\",\n }}\n />\n </div>\n </TabPanel>\n <TabPanel title=\"All\" value=\"all\">\n <div className={cls}>\n <MarketsListWidget\n type=\"all\"\n sortKey={tabSort?.sortKey}\n sortOrder={tabSort?.sortOrder}\n onSort={onTabSort}\n tableClassNames={{\n scroll: \"oui-px-1\",\n }}\n />\n </div>\n </TabPanel>\n <TabPanel title=\"New listings\" value=\"newListing\">\n <div className={cls}>\n <NewListingListWidget\n tableClassNames={{\n scroll: \"oui-px-1\",\n }}\n />\n </div>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Box, cn, DataTable } from \"@orderly.network/ui\";\nimport { UseFavoritesListReturn } from \"./favoritesList.script\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { FavoritesTabWidget } from \"../favoritesTabs\";\nimport { getSideMarketsColumns } from \"../sideMarkets/column\";\nimport type { FavoritesListWidgetProps } from \"./widget\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\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 columns = useMemo(() => {\n return typeof getColumns === \"function\"\n ? getColumns(favorite, true)\n : getSideMarketsColumns(favorite, true);\n }, [favorite]);\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 { MouseEventHandler, ReactNode } from \"react\";\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 getSideMarketsColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false\n) => {\n return [\n {\n title: \"Market / Volume\",\n dataIndex: \"24h_amount\",\n onSort: true,\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-cursor-pointer oui-mr-1\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-w-3 oui-h-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-w-3 oui-h-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\n symbol={record.symbol}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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: \"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 { 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\n return (\n <div className=\"oui-overflow-y-auto oui-custom-scrollbar oui-h-full\">\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\n symbol={item.symbol}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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 Price\n </Text>\n <Text size=\"2xs\" intensity={36}>\n 24h change\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 // @ts-ignore\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\n symbol={item.symbol}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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 { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\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 { FavoritesList } from \"./favoritesList.ui\";\nimport { useFavoritesListScript } from \"./favoritesList.script\";\nimport { GetColumns } from \"../../type\";\nimport { DataTableClassNames } from \"@orderly.network/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, useMemo } from \"react\";\nimport { cn, DataTable, DataTableClassNames } from \"@orderly.network/ui\";\nimport { type UseMarketsListReturn } from \"./marketsList.script\";\nimport { GetColumns, TInitialSort } from \"../../type\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { getSideMarketsColumns } from \"../sideMarkets/column\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\n\nexport type MarketsListProps = UseMarketsListReturn & {\n initialSort: TInitialSort;\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n};\n\nexport const MarketsList: FC<MarketsListProps> = (props) => {\n const {\n loading,\n dataSource,\n favorite,\n onSort,\n initialSort,\n getColumns,\n collapsed,\n } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const columns = useMemo(() => {\n return typeof getColumns === \"function\"\n ? getColumns(favorite, false)\n : getSideMarketsColumns(favorite, false);\n }, [favorite]);\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 loading={loading}\n dataSource={dataSource}\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 initialSort={initialSort}\n manualSorting\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { MarketsListWidgetProps } from \"./widget\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\nexport type UseMarketsListScriptOptions = MarketsListWidgetProps;\n\nexport type UseMarketsListReturn = ReturnType<typeof useMarketsListScript>;\n\nexport const useMarketsListScript = (options: UseMarketsListScriptOptions) => {\n const [loading, setLoading] = useState(true);\n\n const [data, favorite] = useMarkets(MarketsType.ALL);\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort(\n options?.sortKey,\n options?.sortOrder,\n options.onSort\n );\n\n const dataSource = useMemo(() => {\n const searchResults = searchBySymbol(data, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [data, getSortedList, searchValue]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n };\n};\n","import { MarketsList } from \"./marketsList.ui\";\nimport { useMarketsListScript } from \"./marketsList.script\";\nimport { SortOrder, DataTableClassNames } from \"@orderly.network/ui\";\nimport { GetColumns } from \"../../type\";\n\nexport type MarketsListWidgetProps = {\n type?: \"all\" | \"new\";\n sortKey: string;\n sortOrder: SortOrder;\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n onSort?: (sortKey?: string, sortOrder?: SortOrder) => void;\n};\n\nexport const MarketsListWidget: React.FC<MarketsListWidgetProps> = (props) => {\n const state = useMarketsListScript(props);\n\n return (\n <MarketsList\n {...state}\n initialSort={{\n sortKey: props.sortKey,\n sort: props.sortOrder,\n }}\n getColumns={props.getColumns}\n collapsed={props.collapsed}\n tableClassNames={props.tableClassNames}\n rowClassName={props.rowClassName}\n />\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { UseRecentListReturn } from \"./recentList.script\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { getSideMarketsColumns } from \"../sideMarkets/column\";\nimport { RecentListWidgetProps } from \"./widget\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\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 columns = useMemo(() => {\n return typeof getColumns === \"function\"\n ? getColumns(favorite, false)\n : getSideMarketsColumns(favorite, false);\n }, [favorite]);\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 { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\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 { RecentList } from \"./recentList.ui\";\nimport { useRecentListScript } from \"./recentList.script\";\nimport { GetColumns } from \"../../type\";\nimport { DataTableClassNames } from \"@orderly.network/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, useMemo } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { UseNewListingListReturn } from \"./newListingList.script\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { getSideMarketsColumns } from \"../sideMarkets/column\";\nimport { NewListingListWidgetProps } from \"./widget\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\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 columns = useMemo(() => {\n return typeof getColumns === \"function\"\n ? getColumns(favorite, false)\n : getSideMarketsColumns(favorite, false);\n }, [favorite]);\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 { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\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 { NewListingList } from \"./newListingList.ui\";\nimport { useNewListingListScript } from \"./newListingList.script\";\nimport { GetColumns } from \"../../type\";\nimport { DataTableClassNames } from \"@orderly.network/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 { useCallback, useEffect, useState } from \"react\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { SortOrder } from \"@orderly.network/ui\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type TabName = \"favorites\" | \"recent\" | \"all\";\n\nexport type UseExpandMarketsScriptOptions = {\n activeTab?: TabName;\n onTabChange?: (tab: TabName) => void;\n};\n\nexport type UseExpandMarketsScriptReturn = ReturnType<\n typeof useExpandMarketsScript\n>;\n\nexport function useExpandMarketsScript(\n options?: UseExpandMarketsScriptOptions\n) {\n const [activeTab, setActiveTab] = useState<TabName>(options?.activeTab!);\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: \"orderly_side_markets_tab_sort\",\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 TabName);\n } else {\n setActiveTab(value as TabName);\n }\n },\n [options?.onTabChange]\n );\n useEffect(() => {\n setActiveTab(options?.activeTab || \"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 { useCallback } from \"react\";\nimport { useSessionStorage } from \"@orderly.network/hooks\";\nimport { SortOrder } from \"@orderly.network/ui\";\n\ntype Sort = {\n sortKey: string;\n sortOrder: SortOrder;\n};\n\nexport type TabSort = Record<string, Sort>;\n\nconst defaultSortKey = \"24h_amount\";\nconst defaultSortOrder = \"desc\";\n\nexport function useTabSort(options: {\n storageKey: string;\n type?: string;\n initialSort?: Sort;\n}) {\n const { storageKey, type = \"all\", initialSort } = options;\n\n const [tabSort, setTabSort] = useSessionStorage(storageKey, {\n [type]: {\n sortKey: initialSort?.sortKey || defaultSortKey,\n sortOrder: initialSort?.sortOrder || defaultSortOrder,\n },\n } as TabSort);\n\n // default all tab can storage sort\n const onTabSort = useCallback(\n (sortKey = defaultSortKey, sortOrder = defaultSortOrder) => {\n setTabSort({\n ...tabSort,\n all: {\n sortKey,\n sortOrder,\n },\n });\n },\n []\n );\n\n return {\n tabSort: tabSort[type],\n onTabSort,\n };\n}\n","import { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport {\n useExpandMarketsScript,\n UseExpandMarketsScriptOptions,\n} from \"./expandMarkets.script\";\nimport { ExpandMarkets } from \"./expandMarkets.ui\";\n\nexport type ExpandMarketsWidgetProps = MarketsProviderProps &\n UseExpandMarketsScriptOptions;\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, Text, Flex, cn } from \"@orderly.network/ui\";\nimport {\n ProcessedFundingData,\n UseFundingOverviewReturn,\n} from \"./fundingOverview.script\";\nimport { getFundingOverviewColumns } from \"./columns\";\n\nexport type FundingOverviewProps = UseFundingOverviewReturn;\n\nexport const FundingOverview: FC<FundingOverviewProps> = (props) => {\n const { dataSource, isLoading, pagination, onSort } = props;\n const [selectedPeriod, setSelectedPeriod] = useState(\"1dPositive\");\n\n const columns = getFundingOverviewColumns(selectedPeriod, setSelectedPeriod);\n\n return (\n <div className=\"w-full\">\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 </div>\n );\n};\n","import { Column, Text } 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 getFundingOverviewColumns = (\n selectedPeriod: string,\n setSelectedPeriod: (value: string) => void\n): Column<ProcessedFundingData>[] => [\n {\n title: \"Market\",\n dataIndex: \"symbol\",\n width: 120,\n render: (value) => (\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 title: \"Est. funding\",\n dataIndex: \"estFunding\",\n width: 120,\n onSort: true,\n render: (value) => (\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\"> / 4h </span>\n </div>\n ),\n },\n {\n title: \"Last funding\",\n dataIndex: \"lastFunding\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: \"1d avg.\",\n dataIndex: \"funding1d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: \"3d avg.\",\n dataIndex: \"funding3d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: \"7d avg.\",\n dataIndex: \"funding7d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: \"14d avg.\",\n dataIndex: \"funding14d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: \"30d avg.\",\n dataIndex: \"funding30d\",\n width: 90,\n onSort: true,\n render: createFundingRenderer(),\n },\n {\n title: \"90d avg.\",\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 <select\n value={selectedPeriod}\n onChange={(e) => setSelectedPeriod(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n className=\"oui-w-12 oui-rounded-md oui-border oui-border-line oui-bg-[var(--oui-table-background-color)]\"\n >\n {[\n { label: \"1d\", value: \"1dPositive\" },\n { label: \"3d\", value: \"3dPositive\" },\n { label: \"7d\", value: \"7dPositive\" },\n { label: \"14d\", value: \"14dPositive\" },\n { label: \"30d\", value: \"30dPositive\" },\n { label: \"90d\", value: \"90dPositive\" },\n ].map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <span>Positive rate</span>\n </div>\n ),\n dataIndex: selectedPeriod,\n width: 130,\n align: \"right\",\n onSort: true,\n render: createFundingRenderer(2),\n },\n];\n","import { useMemo } from \"react\";\nimport {\n useFundingRateHistory,\n useMarkets,\n MarketsType,\n} from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useSort, searchBySymbol } from \"../../utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\n\nexport type PeriodKey = \"1d\" | \"3d\" | \"7d\" | \"14d\" | \"30d\" | \"90d\";\n\nexport type ProcessedFundingData = {\n symbol: string;\n estFunding: number;\n lastFunding: 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 UseFundingOverviewReturn = {\n dataSource: ProcessedFundingData[];\n isLoading: boolean;\n pagination: {\n pageSize: number;\n page: number;\n };\n onSort: any;\n};\n\nexport const useFundingOverviewScript = () => {\n const { pageSize, pagination } = usePagination({ pageSize: 10 });\n const [marketData] = useMarkets(MarketsType.ALL);\n const {\n data: historyData,\n isLoading: isHistoryLoading,\n getPositiveRates,\n } = useFundingRateHistory();\n const { onSort, getSortedList } = useSort();\n const { searchValue } = useMarketsContext();\n\n const processedData = useMemo((): ProcessedFundingData[] => {\n if (!marketData?.length) return [];\n\n const periods: PeriodKey[] = [\"1d\", \"3d\", \"7d\", \"14d\", \"30d\", \"90d\"];\n const posRates = periods.reduce((acc, period) => {\n acc[period] = getPositiveRates(historyData, period);\n return acc;\n }, {} as Record<string, Record<string, number>>);\n\n return marketData.map((market) => {\n const history = historyData?.find((h) => h.symbol === market.symbol);\n\n return {\n symbol: market.symbol,\n estFunding: market.est_funding_rate,\n lastFunding: market.last_funding_rate,\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\"][market.symbol] ?? \"-\",\n \"3dPositive\": posRates[\"3d\"][market.symbol] ?? \"-\",\n \"7dPositive\": posRates[\"7d\"][market.symbol] ?? \"-\",\n \"14dPositive\": posRates[\"14d\"][market.symbol] ?? \"-\",\n \"30dPositive\": posRates[\"30d\"][market.symbol] ?? \"-\",\n \"90dPositive\": posRates[\"90d\"][market.symbol] ?? \"-\",\n };\n });\n }, [marketData, historyData, 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","import { FC } from \"react\";\nimport { FundingOverview } from \"./fundingOverview.ui\";\nimport { useFundingOverviewScript } from \"./fundingOverview.script\";\n\nexport const FundingOverviewWidget: FC = () => {\n const props = useFundingOverviewScript();\n return <FundingOverview {...props} />;\n};\n","import { FC } from \"react\";\nimport { cn } from \"@orderly.network/ui\";\nimport { DataTable } from \"@orderly.network/ui\";\nimport { getFundingColumns } from \"./columns\";\n\ninterface FundingComparisonProps {\n data: Array<{\n symbol: string;\n funding: (number | null)[];\n }>;\n isLoading: boolean;\n pagination: any;\n}\n\nexport const FundingComparison: FC<FundingComparisonProps> = ({\n data,\n isLoading,\n pagination,\n}) => {\n const columns = getFundingColumns();\n\n return (\n <DataTable\n columns={columns}\n dataSource={data}\n loading={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={pagination}\n />\n );\n};\n","import { Column } from \"@orderly.network/ui\";\nimport { Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { exchanges } from \"./fundingComparison.script\";\n\nexport const getFundingColumns = (): Column[] => [\n {\n title: \"Market\",\n dataIndex: \"symbol\",\n width: 150,\n onSort: true,\n render: (value) => (\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 ...exchanges.map((exchange, index) => ({\n title: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\n <img\n src={`https://oss.orderly.network/static/exchange_logo/${exchange\n .toLowerCase()\n .replace(\" \", \"_\")}.png`}\n style={{\n width: \"24px\",\n height: \"24px\",\n objectFit: \"cover\",\n borderRadius: \"50%\",\n }}\n />\n <span>{exchange}</span>\n </div>\n ),\n dataIndex: `exchange_${index}`,\n width: 100,\n render: (value: number | null) =>\n value === null ? (\n \"-\"\n ) : (\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 ),\n })),\n];\n","import { useFundingRates, useQuery } from \"@orderly.network/hooks\";\nimport { useMemo } from \"react\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useSort, searchBySymbol } from \"../../utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\n\nexport const exchanges = [\n \"WOOFi Pro\",\n \"Binance\",\n \"OKX\",\n \"Bybit\",\n \"dYdX\",\n \"Bitget\",\n \"Kucoin\",\n];\n\nexport const useFundingComparisonScript = () => {\n const { pageSize, setPage, pagination } = usePagination({\n pageSize: 10,\n });\n const { onSort, getSortedList } = useSort();\n const { searchValue } = useMarketsContext();\n\n const fundingRates = useFundingRates();\n\n const { data, isLoading } = useQuery<\n Array<{\n symbol: string;\n exchanges: Array<{\n name: string;\n last: number;\n }>;\n }>\n >(\"/v1/public/market_info/funding_comparison\");\n\n const processedData = useMemo(() => {\n if (!data?.length) return [];\n return data.map((row: any) => {\n const exchangeData: any = {\n symbol: row.symbol,\n };\n\n exchanges.forEach((name, index) => {\n const normalizedName = name.toLowerCase();\n\n if (normalizedName === \"woofi pro\") {\n const rate = fundingRates[row.symbol];\n exchangeData[`exchange_${index}`] = rate(\"last_funding_rate\") ?? null;\n return;\n }\n\n const exchange = row.exchanges.find(\n (e: any) => e.name.toLowerCase() === normalizedName\n );\n exchangeData[`exchange_${index}`] = exchange?.last ?? null;\n });\n\n return exchangeData;\n });\n }, [data, exchanges, fundingRates]);\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 {\n data: dataSource,\n isLoading,\n pagination,\n onSort,\n };\n};\n","import { FC } from \"react\";\nimport { FundingComparison } from \"./fundingComparison.ui\";\nimport { useFundingComparisonScript } from \"./fundingComparison.script\";\n\nexport const FundingComparisonWidget: FC = () => {\n const state = useFundingComparisonScript();\n return <FundingComparison {...state} />;\n};\n","import { FC } from \"react\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/ui\";\nimport {\n UseSideMarketsScriptOptions,\n UseSideMarketsScriptReturn,\n} from \"./sideMarkets.script\";\nimport { CollapseIcon, ExpandIcon } from \"../../icons\";\nimport { ExpandMarketsWidget } from \"../expandMarkets\";\nimport { FavoritesListWidget } from \"../favoritesList\";\nimport { RecentListWidget } from \"../recentList\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { NewListingListWidget } from \"../newListingList\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\nexport type SideMarketsProps = UseSideMarketsScriptReturn & {\n className?: string;\n};\n\nexport const SideMarkets: React.FC<SideMarketsProps> = (props) => {\n const {\n collapsable,\n collapsed,\n onCollapse,\n activeTab,\n onTabChange,\n className,\n } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const renderContent = () => {\n if (!collapsed) {\n return (\n <ExpandMarketsWidget\n activeTab={activeTab}\n onTabChange={onTabChange}\n symbol={symbol}\n onSymbolChange={onSymbolChange}\n />\n );\n }\n\n if (activeTab === \"favorites\") {\n return <FavoritesListWidget collapsed={collapsed} />;\n }\n\n if (activeTab === \"recent\") {\n return <RecentListWidget collapsed={collapsed} />;\n }\n\n if (activeTab === \"newListing\") {\n return <NewListingListWidget collapsed={collapsed} />;\n }\n\n return (\n <MarketsListWidget\n type=\"all\"\n sortKey=\"24h_amount\"\n sortOrder=\"desc\"\n collapsed={collapsed}\n />\n );\n };\n\n return (\n <Flex\n id=\"oui-side-markets\"\n className={cn(\"oui-font-semibold\", className)}\n direction=\"column\"\n gapY={5}\n height=\"100%\"\n width=\"100%\"\n >\n <SideMarketsHeader\n collapsable={collapsable}\n collapsed={collapsed}\n onCollapse={onCollapse}\n />\n <Box\n width=\"100%\"\n className={cn(\n collapsed ? \"oui-h-[calc(100%_-_52px)]\" : \"oui-h-[calc(100%_-_56px)]\"\n )}\n >\n {renderContent()}\n </Box>\n </Flex>\n );\n};\n\ntype SideMarketsHeaderProps = UseSideMarketsScriptOptions;\n\nexport const SideMarketsHeader: FC<SideMarketsHeaderProps> = (props) => {\n const { collapsable, collapsed, onCollapse } = props;\n\n const cls = cn(\n \"oui-text-base-contrast-36\",\n collapsable\n ? \"oui-cursor-pointer hover:oui-text-base-contrast-80\"\n : \"oui-cursor-not-allowed\"\n );\n\n if (collapsed) {\n return (\n <ExpandIcon\n className={cls}\n onClick={() => {\n collapsable && onCollapse?.(false);\n }}\n />\n );\n }\n\n return (\n <Flex justify=\"between\" px={3} width=\"100%\">\n <Text size=\"base\" intensity={80}>\n Markets\n </Text>\n <CollapseIcon\n className={cls}\n onClick={() => {\n collapsable && onCollapse?.(true);\n }}\n />\n </Flex>\n );\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\n\nexport type UseSideMarketsScriptOptions = {\n collapsable?: boolean;\n collapsed?: boolean;\n onCollapse?: (collapsed: boolean) => void;\n};\n\nexport type UseSideMarketsScriptReturn = ReturnType<\n typeof useSideMarketsScript\n>;\n\nexport function useSideMarketsScript(options?: UseSideMarketsScriptOptions) {\n const [collapsed, setCollapsed] = useState(options?.collapsed);\n // const [activeTab, setActiveTab] = useState<TabName>(\"all\");\n const [activeTab, setActiveTab] = useLocalStorage(\n \"orderly_side_markets_sel_tab_key\",\n \"all\"\n );\n\n const collapsable = useMemo(\n () => options?.collapsable ?? true,\n [options?.collapsable]\n );\n\n const onCollapse = useCallback(\n (collapsed: boolean) => {\n if (typeof options?.onCollapse === \"function\") {\n options.onCollapse(collapsed);\n } else {\n setCollapsed(collapsed);\n }\n },\n [options?.onCollapse]\n );\n\n useEffect(() => {\n setCollapsed(options?.collapsed);\n }, [options?.collapsed]);\n\n return {\n collapsable,\n collapsed,\n onCollapse,\n activeTab,\n onTabChange: setActiveTab,\n };\n}\n","import React from \"react\";\nimport { useSideMarketsScript } from \"./sideMarkets.script\";\nimport { SideMarkets, SideMarketsProps } from \"./sideMarkets.ui\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\n\nexport type SideMarketsWidgetProps = MarketsProviderProps &\n Partial<\n Pick<\n SideMarketsProps,\n \"collapsable\" | \"collapsed\" | \"onCollapse\" | \"className\"\n >\n >;\n\nexport const SideMarketsWidget: React.FC<SideMarketsWidgetProps> = (props) => {\n const state = useSideMarketsScript({\n collapsable: props.collapsable,\n collapsed: props.collapsed,\n onCollapse: props.onCollapse,\n });\n\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <SideMarkets {...state} className={props.className} />\n </MarketsProvider>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport {\n Box,\n CloseIcon,\n cn,\n Flex,\n Input,\n TabPanel,\n Tabs,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n} from \"@orderly.network/ui\";\nimport { FavoritesIcon, SearchIcon } from \"../../icons\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { FavoritesListWidget } from \"../favoritesList\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { RecentListWidget } from \"../recentList\";\nimport { NewListingListWidget } from \"../newListingList\";\nimport { UseDropDownMarketsScriptReturn } from \"./dropDownMarkets.script\";\nimport { getDropDownMarketsColumns } from \"./column\";\n\nexport type DropDownMarketsProps = UseDropDownMarketsScriptReturn & {\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 { searchValue, onSearchValueChange } = useMarketsContext();\n\n const search = (\n <Flex mx={3} gapX={3} pt={3} pb={2}>\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder=\"Search\"\n classNames={{\n root: \"oui-border oui-mt-[1px] oui-border-line oui-flex-1\",\n }}\n size=\"sm\"\n prefix={\n <Box pl={3} pr={1}>\n <SearchIcon className=\"oui-text-base-contrast-36\" />\n </Box>\n }\n autoComplete=\"off\"\n />\n <CloseIcon\n size={12}\n className=\"oui-text-base-contrast-80 oui-cursor-pointer\"\n onClick={props.hide}\n opacity={1}\n />\n </Flex>\n );\n\n const cls = \"oui-h-[calc(100%_-_36px)]\";\n\n return (\n <Box\n className={cn(\"oui-font-semibold oui-overflow-hidden\")}\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 title=\"Favorites\" icon={<FavoritesIcon />} value=\"favorites\">\n <div className={cls}>\n <FavoritesListWidget\n getColumns={getDropDownMarketsColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: \"oui-pb-5 oui-px-1\",\n }}\n rowClassName=\"!oui-h-[34px]\"\n />\n </div>\n </TabPanel>\n <TabPanel title=\"Recent\" value=\"recent\">\n <div className={cls}>\n <RecentListWidget\n getColumns={getDropDownMarketsColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: \"oui-pb-5 oui-px-1\",\n }}\n rowClassName=\"!oui-h-[34px]\"\n />\n </div>\n </TabPanel>\n <TabPanel title=\"All\" value=\"all\">\n <div className={cls}>\n <MarketsListWidget\n type=\"all\"\n sortKey={tabSort?.sortKey}\n sortOrder={tabSort?.sortOrder}\n onSort={onTabSort}\n getColumns={getDropDownMarketsColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: \"oui-pb-5 oui-px-1\",\n }}\n rowClassName=\"!oui-h-[34px]\"\n />\n </div>\n </TabPanel>\n <TabPanel title=\"New listings\" value=\"newListing\">\n <div className={cls}>\n <NewListingListWidget\n getColumns={getDropDownMarketsColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: \"oui-pb-5 oui-px-1\",\n }}\n rowClassName=\"!oui-h-[34px]\"\n />\n </div>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { MouseEventHandler, ReactNode } from \"react\";\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 getDropDownMarketsColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false\n) => {\n return [\n {\n title: \"Symbol\",\n dataIndex: \"symbol\",\n width: 150,\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-cursor-pointer oui-mr-1\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-w-3 oui-h-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-w-3 oui-h-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-w-[18px] oui-h-[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 },\n {\n title: \"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 },\n {\n title: \"24h%\",\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 },\n {\n title: \"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","import { useCallback, useEffect, useState } from \"react\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type UseDropDownMarketsScriptOptions = {};\n\nexport type TabName = \"favorites\" | \"recent\" | \"all\";\n\nexport type UseDropDownMarketsScriptReturn = ReturnType<\n typeof useDropDownMarketsScript\n>;\n\nexport function useDropDownMarketsScript(\n options?: UseDropDownMarketsScriptOptions\n) {\n const [open, setOpen] = useState(false);\n // const [activeTab, setActiveTab] = useState<TabName>(\"favorites\");\n const [activeTab, setActiveTab] = useLocalStorage(\n \"orderly_dropdown_markets_sel_tab_key\",\n \"all\"\n );\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: \"orderly_dropdown_markets_tab_sort\",\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,\n onTabChange: (value: string) => setActiveTab(value as TabName),\n open,\n onOpenChange: setOpen,\n hide,\n tabSort,\n onTabSort,\n };\n}\n","import React, { PropsWithChildren } from \"react\";\nimport { useDropDownMarketsScript } from \"./dropDownMarkets.script\";\nimport { DropDownMarkets, DropDownMarketsProps } from \"./dropDownMarkets.ui\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\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 {\n Box,\n CloseCircleFillIcon,\n cn,\n Grid,\n Input,\n Text,\n} from \"@orderly.network/ui\";\nimport { UseMarketsSheetScriptReturn } from \"./marketsSheet.script\";\nimport { SearchIcon } from \"../../icons\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { getMarketsSheetColumns } from \"./column\";\n\nexport type MarketsSheetProps = UseMarketsSheetScriptReturn & {\n className?: string;\n};\n\nexport const MarketsSheet: React.FC<MarketsSheetProps> = (props) => {\n const { className, tabSort, onTabSort } = props;\n\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const search = (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder=\"Search\"\n classNames={{ root: \"oui-border oui-border-line oui-mt-4\" }}\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 searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-text-base-contrast-36 oui-cursor-pointer\"\n onClick={clearSearchValue}\n />\n </Box>\n )\n }\n autoComplete=\"off\"\n />\n );\n\n return (\n <Grid\n cols={1}\n className={cn(\"oui-font-semibold oui-grid-rows-[auto,1fr]\", className)}\n height=\"100%\"\n width=\"100%\"\n >\n <Box px={3} mt={3}>\n <Text size=\"base\" intensity={80}>\n Markets\n </Text>\n {search}\n </Box>\n\n <div className=\"oui-relative\">\n <Box\n width=\"100%\"\n mt={2}\n className=\"oui-absolute oui-left-0 oui-right-9 oui-top-0 oui-bottom-0\"\n >\n <MarketsListWidget\n type=\"all\"\n sortKey={tabSort?.sortKey}\n sortOrder={tabSort?.sortOrder}\n onSort={onTabSort}\n getColumns={getMarketsSheetColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: \"oui-pb-[calc(env(safe-area-inset-bottom))]\",\n }}\n />\n </Box>\n </div>\n </Grid>\n );\n};\n","import { MouseEventHandler } from \"react\";\nimport { Flex, TokenIcon, Text, Badge, cn, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { DeleteIcon, TopIcon } from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\n\nexport const getMarketsSheetColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false\n) => {\n return [\n {\n title: \"Market / Volume\",\n dataIndex: \"24h_amount\",\n onSort: true,\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n return (\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Flex gapX={1}>\n <TokenIcon\n symbol={record.symbol}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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 );\n },\n },\n {\n title: \"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 { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type UseMarketsSheetScriptOptions = {};\n\nexport type UseMarketsSheetScriptReturn = ReturnType<\n typeof useMarketsSheetScript\n>;\n\nexport function useMarketsSheetScript(options?: UseMarketsSheetScriptOptions) {\n const { tabSort, onTabSort } = useTabSort({\n storageKey: \"orderly_side_markets_tab_sort\",\n });\n return { tabSort, onTabSort };\n}\n","import React from \"react\";\nimport { useMarketsSheetScript } from \"./marketsSheet.script\";\nimport { MarketsSheet, MarketsSheetProps } from \"./marketsSheet.ui\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\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 {\n TokenIcon,\n Flex,\n Text,\n cn,\n Divider,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { UseSymbolInfoBarFullScriptReturn } from \"./symbolInfoBarFull.script\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\nimport {\n ArrowLeftIcon,\n FavoritesIcon2,\n TriangleDownIcon,\n UnFavoritesIcon2,\n} from \"../../icons\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ReactNode } from \"react\";\nimport { DropDownMarketsWidget } from \"../dropDownMarkets\";\nimport { MarketsProviderProps } from \"../marketsProvider\";\nimport { useFundingRate } from \"@orderly.network/hooks\";\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 fundingRate,\n containerRef,\n leadingElementRef,\n tailingElementRef,\n leadingVisible,\n tailingVisible,\n onScoll,\n } = props;\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-cursor-pointer oui-mr-1\"\n >\n {isFavorite ? (\n <FavoritesIcon2 className=\"oui-w-3 oui-h-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-w-3 oui-h-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-w-4 oui-h-4\" />\n <Text.formatted\n className=\"oui-break-normal oui-whitespace-nowrap\"\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-font-semibold oui-h-[54px]\",\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-flex-1 oui-overflow-hidden oui-h-full\">\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-overflow-hidden oui-h-full\">\n <div\n ref={containerRef}\n className=\"oui-overflow-x-auto oui-hide-scrollbar oui-h-full\"\n >\n <Flex gapX={8} height=\"100%\">\n <div ref={leadingElementRef}>\n <DataItem label=\"24h Change\" value={change} />\n </div>\n <DataItem\n label=\"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=\"Price for the computation of unrealized PnL and liquidation.\"\n />\n <DataItem\n label=\"Index\"\n value={\n <Text.numeral dp={quotoDp}>\n {data?.[\"index_price\"]}\n </Text.numeral>\n }\n hint=\"Average of the last prices across other exchanges.\"\n />\n <DataItem\n label=\"24h volume\"\n value={\n <Text.numeral rule=\"human\" dp={2}>\n {data?.[\"24h_amount\"]}\n </Text.numeral>\n }\n hint=\"24 hour total trading volume on the Orderly Network.\"\n />\n <DataItem\n label=\"Pred. funding rate\"\n value={<FundingRate symbol={symbol} />}\n hint=\"Funding rates are payments between traders who are long and short. When positive, long positions pay short positions funding. When negative, short positions pay long positions.\"\n />\n <div ref={tailingElementRef}>\n <DataItem\n label=\"Open interest\"\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=\"Total size of positions per side.\"\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?: string;\n};\n\nconst DataItem: React.FC<DataItemProps> = (props) => {\n return (\n <Flex direction=\"column\" itemAlign=\"start\">\n <Tooltip\n open={props.hint ? undefined : false}\n content={props.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-break-normal oui-whitespace-nowrap\",\n props.hint &&\n \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n )}\n >\n {props.label}\n </Text>\n </Tooltip>\n <Text\n size=\"2xs\"\n intensity={98}\n className={cn(\n \"oui-data-value\",\n \"oui-leading-[20px] oui-break-normal oui-whitespace-nowrap\"\n )}\n >\n {props.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) return null;\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-items-center oui-w-[80px]\",\n \"oui-absolute oui-top-0 oui-bottom-0 oui-rounded-l\",\n leading && \"oui-left-0 oui-pl-1\",\n tailing && \"oui-right-0 oui-pr-1 oui-rotate-180\"\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 className=\"\">\n <Text.numeral unit=\"%\" dp={4} className=\"oui-text-[#FF9A2E]\">\n {data.est_funding_rate!}\n </Text.numeral>\n <Text\n intensity={36}\n className=\"oui-tabular-nums\"\n >{` in ${data.countDown}`}</Text>\n </div>\n );\n};\n","import {\n useFundingRate,\n useMarketsStore,\n useSymbolsInfo,\n useTickerStream,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\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 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 if (direction === \"left\")\n containerRef.current?.scrollBy({ left: -100, behavior: \"smooth\" });\n else containerRef.current?.scrollBy({ left: 100, behavior: \"smooth\" });\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 };\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, useState } from \"react\";\nimport { Box, cn, TabPanel, Tabs, Text } from \"@orderly.network/ui\";\nimport { MarketsDataListWidget } from \"./dataList\";\nimport { MarketsHeaderWidget } from \"./header/widget\";\nimport { FundingWidget } from \"./funding/widget\";\nimport {\n MarketsProvider,\n MarketsProviderProps,\n} from \"../../components/marketsProvider\";\n\nexport type MarketsHomePageProps = MarketsProviderProps & {\n className?: string;\n};\n\nexport const MarketsHomePage: FC<MarketsHomePageProps> = (props) => {\n const [activeTab, setActiveTab] = useState(\"markets\");\n\n return (\n <MarketsProvider onSymbolChange={props.onSymbolChange}>\n <Box\n id=\"oui-markets-home-page\"\n className={cn(\"oui-font-semibold\", props.className)}\n p={6}\n >\n <Tabs\n variant=\"text\"\n size=\"xl\"\n value={activeTab}\n onValueChange={setActiveTab}\n >\n <TabPanel\n title=\"Markets\"\n value=\"markets\"\n testid=\"oui-testid-markets-tab\"\n >\n <MarketsHeaderWidget />\n <MarketsDataListWidget />\n </TabPanel>\n <TabPanel\n title=\"Funding\"\n value=\"funding\"\n testid=\"oui-testid-funding-tab\"\n >\n <FundingWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </MarketsProvider>\n );\n};\n","import type { FC } from \"react\";\nimport {\n Box,\n CloseCircleFillIcon,\n Input,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { FundingOverviewWidget } from \"../../../components/fundingOverview\";\nimport { FundingComparisonWidget } from \"../../../components/fundingComparison\";\nimport { UseFundingScript } from \"./funding.script\";\nimport { SearchIcon } from \"../../../icons\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\n\nexport type FundingUIProps = UseFundingScript;\n\nexport const FundingUI: FC<FundingUIProps> = ({\n activeFundingTab,\n onFundingTabChange,\n}) => {\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const search = (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder=\"Search symbol\"\n className=\"oui-w-[240px] oui-my-1\"\n size=\"sm\"\n data-testid=\"oui-testid-markets-searchMarket-input\"\n prefix={\n <Box pl={3} pr={1}>\n <SearchIcon className=\"oui-text-base-contrast-36\" />\n </Box>\n }\n suffix={\n searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-text-base-contrast-36 oui-cursor-pointer\"\n onClick={clearSearchValue}\n />\n </Box>\n )\n }\n autoComplete=\"off\"\n />\n );\n\n return (\n <Box id=\"oui-funding-list\" intensity={900} p={6} mt={4} r=\"2xl\">\n <Tabs\n variant=\"contained\"\n size=\"lg\"\n value={activeFundingTab}\n onValueChange={onFundingTabChange}\n trailing={search}\n >\n <TabPanel\n title=\"Overview\"\n value=\"overview\"\n testid=\"oui-testid-funding-overview-tab\"\n >\n <FundingOverviewWidget />\n </TabPanel>\n <TabPanel\n title=\"Comparison\"\n value=\"comparison\"\n testid=\"oui-testid-funding-comparison-tab\"\n >\n <FundingComparisonWidget />\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { useState } from \"react\";\n\nexport type FundingTabName = \"overview\" | \"comparison\";\n\nexport type UseFundingScript = ReturnType<typeof useFundingScript>;\n\nexport function useFundingScript() {\n const [activeFundingTab, setActiveFundingTab] =\n useState<FundingTabName>(\"overview\");\n\n return {\n activeFundingTab,\n onFundingTabChange: (value: string) =>\n setActiveFundingTab(value as FundingTabName),\n };\n}\n","import { FundingUI } from \"./funding.ui\";\nimport { useFundingScript } from \"./funding.script\";\n\nexport const FundingWidget = () => {\n const state = useFundingScript();\n return <FundingUI {...state} />;\n};\n"]}
1
+ {"version":3,"sources":["../src/pages/home/header/header.ui.tsx","../src/components/marketsProvider/index.tsx","../src/icons.tsx","../src/pages/home/header/header.script.tsx","../src/utils.ts","../src/pages/home/header/widget.tsx","../src/pages/home/dataList/dataList.ui.tsx","../src/components/marketsListFull/marketsListFull.ui.tsx","../src/components/marketsListFull/column.tsx","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.ui.tsx","../src/components/favoritesDropdownMenu/favoritesDropdownMenu.script.ts","../src/components/favoritesDropdownMenu/widget.tsx","../src/components/marketsListFull/marketsListFull.script.ts","../src/components/marketsListFull/widget.tsx","../src/components/favoritesListFull/favoritesListFull.ui.tsx","../src/components/favoritesTabs/favoritesTabs.ui.tsx","../src/components/favoritesTabs/favoritesTabs.script.ts","../src/components/favoritesTabs/widget.tsx","../src/components/favoritesListFull/column.tsx","../src/components/favoritesListFull/favoritesListFull.script.ts","../src/components/favoritesListFull/widget.tsx","../src/pages/home/dataList/dataList.script.ts","../src/pages/home/dataList/widget.tsx","../src/components/expandMarkets/expandMarkets.ui.tsx","../src/components/favoritesList/favoritesList.ui.tsx","../src/components/sideMarkets/column.tsx","../src/components/collapseMarkets/index.tsx","../src/components/favoritesList/favoritesList.script.ts","../src/components/favoritesList/widget.tsx","../src/components/marketsList/marketsList.ui.tsx","../src/components/marketsList/marketsList.script.ts","../src/components/marketsList/widget.tsx","../src/components/recentList/recentList.ui.tsx","../src/components/recentList/recentList.script.ts","../src/components/recentList/widget.tsx","../src/components/newListingList/newListingList.ui.tsx","../src/components/newListingList/newListingList.script.ts","../src/components/newListingList/widget.tsx","../src/components/expandMarkets/expandMarkets.script.ts","../src/components/shared/hooks/useTabSort.ts","../src/components/expandMarkets/widget.tsx","../src/components/fundingOverview/fundingOverview.ui.tsx","../src/components/fundingOverview/columns.tsx","../src/components/fundingOverview/fundingOverview.script.tsx","../src/components/fundingOverview/widget.tsx","../src/components/fundingComparison/fundingComparison.ui.tsx","../src/components/fundingComparison/columns.tsx","../src/components/fundingComparison/fundingComparison.script.tsx","../src/components/fundingComparison/widget.tsx","../src/components/sideMarkets/sideMarkets.ui.tsx","../src/components/sideMarkets/sideMarkets.script.ts","../src/components/sideMarkets/widget.tsx","../src/components/dropDownMarkets/dropDownMarkets.ui.tsx","../src/components/dropDownMarkets/column.tsx","../src/components/dropDownMarkets/dropDownMarkets.script.ts","../src/components/dropDownMarkets/widget.tsx","../src/components/marketsSheet/marketsSheet.ui.tsx","../src/components/marketsSheet/column.tsx","../src/components/marketsSheet/marketsSheet.script.ts","../src/components/marketsSheet/widget.tsx","../src/components/symbolInfoBar/symbolInfoBar.ui.tsx","../src/components/symbolInfoBar/symbolInfoBar.script.ts","../src/components/symbolInfoBar/widget.tsx","../src/components/symbolInfoBarFull/symbolInfoBarFull.ui.tsx","../src/components/symbolInfoBarFull/symbolInfoBarFull.script.ts","../src/components/symbolInfoBarFull/widget.tsx","../src/pages/home/page.tsx","../src/pages/home/funding/funding.ui.tsx","../src/pages/home/funding/funding.script.tsx","../src/pages/home/funding/widget.tsx"],"names":["useMemo","Box","cn","Flex","Text","Decimal","createContext","useState","useContext","useCallback","jsx","MarketsContext","MarketsProvider","props","searchValue","setSearchValue","clearSearchValue","useMarketsContext","jsxs","EditIcon","TrashIcon","AllMarketsIcon","NewListingsIcon","FavoritesIcon","UnFavoritesIcon","SearchIcon","MoveToTopIcon","OrderlyIcon","FavoritesIcon2","UnFavoritesIcon2","TopIcon","DeleteIcon","AddIcon","ActiveAddIcon","ExpandIcon","CollapseIcon","TriangleDownIcon","ArrowLeftIcon","useTranslation","MarketsHeader","emblaRef","emblaApi","scrollIndex","enableScroll","news","gainers","losers","total24Amount","totalOpenInterest","tvl","favorite","onSymbolChange","t","cls","onSymbol","item","BlockList","CardItem","ScrollIndicator","list","index","BlockItem","ListItem","scrollPrev","scrollNext","useEffect","useEmblaCarousel","useMarkets","useQuery","MarketsType","sortList","sortKey","sortOrder","sortedList","isEmpty","value","b","val1","val2","useSort","defaultSortKey","defaultSortOrder","onSortChange","key","setKey","order","setOrder","onSort","options","getSortedList","searchBySymbol","formatString","reg","formatSymbol","symbol","arr","type","base","quote","useSize","width","setWidth","height","setHeight","handleResize","useMarketsHeaderScript","setScrollIndex","data","useDataSource","markets","balance","prevValue","curValue","total_holding","MarketsHeaderWidget","state","CloseCircleFillIcon","Input","TabPanel","Tabs","DataTable","Tooltip","Button","CheckedSquareFillIcon","CheckSquareEmptyIcon","PlusIcon","CloseIcon","Divider","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","FavoritesDropdownMenu","favoriteTabs","open","onOpenChange","inputVisible","selectedTabs","onValueChange","hide","hideInput","showInput","onCheck","addTab","confirm","overLen","renderInput","overTabs","header","content","checked","tab","footer","e","useFavoritesDropdownMenuScript","favorites","updateFavoriteTabs","updateSymbolFavoriteState","setOpen","setInputVisible","setValue","setSelectedTabs","clearState","newTab","find","FavoritesDropdownMenuWidget","useMarketsListFullColumns","isFavoriteList","record","button","MarketsListFull","loading","dataSource","initialSort","pagination","columns","usePagination","useMarketsListFullScript","setLoading","pageSize","setPage","MarketsListFullWidget","sortStore","modal","FavoritesTab","container","inputRef","inputWidth","spanRef","editing","updateCurTab","onEdit","delTab","size","scrollable","selectedFavoriteTab","updateSelectedFavoriteTab","addIconWidth","tabHeight","gradientColor","onDel","onKeyUp","renderActions","renderAdd","icon","isActive","renderContent","textProps","useRef","useFavoritesTabScript","updateFavorites","setEditing","setScrollable","scrollView","setInputWidth","updateScrollLayout","scrollWidth","clientWidth","scrollToRight","selectedTab","_favorites","tabs","rect","offset","FavoritesTabWidget","className","rest","useFavoritesListFullColumns","Trans","FavoritesListFull","useFavoritesListFullScript","filterData","filterList","fav","FavoritesListFullWidget","MarketsDataList","activeTab","onTabChange","onSearchValueChange","search","useMarketsDataListScript","setActiveTab","MarketsDataListWidget","TokenIcon","Badge","useSideMarketsColumns","favoritesIcon","onDelSymbol","iconCls","actions","CollapseMarkets","Fragment","FavoritesList","getColumns","collapsed","sideColumns","useFavoritesListScript","searchResults","FavoritesListWidget","MarketsList","useMarketsListScript","MarketsListWidget","RecentList","useRecentListScript","RecentListWidget","NewListingList","useNewListingListScript","NewListingListWidget","ExpandMarkets","tabSort","onTabSort","useSessionStorage","useTabSort","storageKey","setTabSort","useExpandMarketsScript","ExpandMarketsWidget","createFundingRenderer","dp","useFundingOverviewColumns","selectedPeriod","setSelectedPeriod","option","FundingOverview","isLoading","useFundingRateHistory","useFundingOverviewScript","marketData","historyData","isHistoryLoading","getPositiveRates","processedData","posRates","acc","period","market","history","h","filteredData","FundingOverviewWidget","useFundingRates","exchanges","useFundingComparisonScript","fundingRates","row","exchangeData","name","normalizedName","rate","exchange","useFundingColumns","FundingComparison","FundingComparisonWidget","SideMarkets","collapsable","onCollapse","SideMarketsHeader","useLocalStorage","useSideMarketsScript","setCollapsed","SideMarketsWidget","useDropDownMarketsColumns","DropDownMarkets","DropDownMarketsConetnt","useDropDownMarketsScript","DropDownMarketsWidget","Grid","i18n","getMarketsSheetColumns","MarketsSheet","useMarketsSheetScript","MarketsSheetWidget","SymbolInfoBar","leverage","symbolView","useSymbolsInfo","useTickerStream","useSymbolInfoBarScript","symbolsInfo","info","baseImr","getLeverage","base_imr","SymbolInfoBarWidget","useFundingRate","SymbolInfoBarFull","isFavorite","quotoDp","openInterest","fundingRate","containerRef","leadingElementRef","tailingElementRef","leadingVisible","tailingVisible","onScoll","favoriteIcon","price","change","DataItem","FundingRate","visible","leading","tailing","onClick","useMarketsStore","useSymbolInfoBarFullScript","setLeadingVisible","setTailingVisible","intersectionObserver","entries","direction","SymbolInfoBarFullWidget","FundingUI","activeFundingTab","onFundingTabChange","useFundingScript","setActiveFundingTab","FundingWidget","MarketsHomePage"],"mappings":"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","sourcesContent":["import { FC, ReactNode, useMemo } from \"react\";\nimport { HeaderReturns } from \"./header.script\";\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 { useTranslation } from \"@orderly.network/i18n\";\n/** -----------MarketsHeader start ------------ */\nexport const MarketsHeader: FC<HeaderReturns> = (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-flex-[0_0_calc((100%_-_32px)_/_3)] 3xl:oui-flex-[0_0_calc((100%_-_48px)_/_4)] oui-min-w-0\",\n enableScroll && \"oui-select-none oui-cursor-pointer\"\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=\"oui-overflow-hidden\"\n ref={enableScroll ? emblaRef : undefined}\n >\n <Flex width=\"100%\" gapX={4} mt={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-mt-1 oui-mb-3 3xl:oui-mt-4 3xl:oui-mb-0\">\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 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={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(\"hover:oui-bg-base-8 oui-cursor-pointer\", 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-bg-base-contrast-36 oui-w-4\"\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} from \"react\";\nimport { API } from \"@orderly.network/types\";\n\ntype MarketsContextState = {\n symbol?: string;\n searchValue?: string;\n onSearchValueChange?: (searchValue: string) => void;\n clearSearchValue?: () => void;\n} & MarketsProviderProps;\n\nexport const MarketsContext = createContext({} as MarketsContextState);\n\nexport type MarketsProviderProps = {\n symbol?: string;\n onSymbolChange?: (symbol: API.Symbol) => void;\n};\n\nexport const MarketsProvider: FC<PropsWithChildren<MarketsProviderProps>> = (\n props\n) => {\n const [searchValue, setSearchValue] = useState(\"\");\n\n const clearSearchValue = useCallback(() => {\n setSearchValue(\"\");\n }, []);\n\n return (\n <MarketsContext.Provider\n value={{\n searchValue,\n onSearchValueChange: setSearchValue,\n clearSearchValue,\n symbol: props.symbol,\n onSymbolChange: props.onSymbolChange,\n }}\n >\n {props.children}\n </MarketsContext.Provider>\n );\n};\n\nexport function useMarketsContext() {\n return useContext(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 { Decimal } from \"@orderly.network/utils\";\nimport { useMarkets, useQuery, MarketsType } from \"@orderly.network/hooks\";\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 HeaderReturns = 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 () => sortList(markets, \"created_time\", \"desc\").slice(0, 5),\n [markets]\n );\n\n const gainers = useMemo(\n () => sortList(markets, \"change\", \"desc\").slice(0, 5),\n [markets]\n );\n\n const losers = useMemo(\n () => sortList(markets, \"change\", \"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 { SortOrder } from \"@orderly.network/ui\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { TInitialSort } from \"./type\";\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[], sortKey?: string, sortOrder?: SortOrder) {\n const sortedList = [...(list || [])];\n\n const isEmpty = (value: any) => value === undefined || value === null;\n\n if (sortKey && sortOrder) {\n // sort list\n sortedList.sort((a: any, b: any) => {\n const val1 = a[sortKey];\n const val2 = b[sortKey];\n\n if (isEmpty(val1)) return 1;\n if (isEmpty(val2)) return -1;\n\n if (sortOrder === \"desc\") {\n return val2 - val1;\n }\n\n return val1 - val2;\n });\n }\n return sortedList;\n}\n\nexport function useSort(\n defaultSortKey?: string,\n defaultSortOrder?: SortOrder,\n onSortChange?: (sortKey?: string, sortOrder?: SortOrder) => void\n) {\n const [key, setKey] = useState<string>();\n const [order, setOrder] = useState<SortOrder>();\n\n const onSort = useCallback(\n (options?: TInitialSort) => {\n setKey(options?.sortKey);\n setOrder(options?.sort);\n onSortChange?.(options?.sortKey, options?.sort);\n },\n [onSortChange]\n );\n\n const sortKey = key || defaultSortKey;\n const sortOrder = order || defaultSortOrder;\n\n const getSortedList = useCallback(\n (list: any[]) => sortList(list, sortKey, sortOrder),\n [sortKey, sortOrder]\n );\n\n return { onSort, getSortedList, sortKey, sortOrder };\n}\n\nexport function searchBySymbol(\n list: any[],\n searchValue = \"\",\n formatString?: string\n) {\n const reg = new RegExp(searchValue, \"i\");\n return list?.filter((item) =>\n reg.test(formatSymbol(item.symbol, formatString))\n );\n}\n\nfunction formatSymbol(symbol: string, formatString: string = \"base\") {\n const arr = symbol.split(\"_\");\n const type = arr[0];\n const base = arr[1];\n const quote = arr[2];\n\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\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 { useMarketsHeaderScript } from \"./header.script\";\nimport { MarketsHeader } from \"./header.ui\";\n\nexport const MarketsHeaderWidget = () => {\n const state = useMarketsHeaderScript();\n return <MarketsHeader {...state} />;\n};\n","import {\n Box,\n CloseCircleFillIcon,\n Input,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { UseMarketsDataListScript } from \"./dataList.script\";\nimport {\n AllMarketsIcon,\n FavoritesIcon,\n NewListingsIcon,\n SearchIcon,\n} from \"../../../icons\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { MarketsListFullWidget } from \"../../../components/marketsListFull\";\nimport { FavoritesListFullWidget } from \"../../../components/favoritesListFull\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport type MarketsDataListProps = UseMarketsDataListScript;\n\nexport const MarketsDataList: React.FC<MarketsDataListProps> = (props) => {\n const { activeTab, onTabChange } = props;\n const { t } = useTranslation();\n\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const search = (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder={t(\"markets.search.placeholder\")}\n className=\"oui-w-[240px] oui-my-1\"\n size=\"sm\"\n data-testid=\"oui-testid-markets-searchMarket-input\"\n prefix={\n <Box pl={3} pr={1}>\n <SearchIcon className=\"oui-text-base-contrast-36\" />\n </Box>\n }\n suffix={\n searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-text-base-contrast-36 oui-cursor-pointer\"\n onClick={clearSearchValue}\n />\n </Box>\n )\n }\n autoComplete=\"off\"\n />\n );\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={search}\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 </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 sortKey=\"24h_amount\"\n sortOrder=\"desc\"\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 sortKey=\"created_time\"\n sortOrder=\"desc\"\n />\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { type UseMarketsListFullReturn } from \"./marketsListFull.script\";\nimport { TInitialSort } from \"../../type\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { useMarketsListFullColumns } from \"./column\";\n\nexport type MarketsListFullProps = UseMarketsListFullReturn & {\n initialSort: TInitialSort;\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 { MouseEventHandler, useMemo } from \"react\";\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 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 group-hover:oui-block oui-cursor-pointer\"\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 { PropsWithChildren } from \"react\";\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 ScrollArea,\n Text,\n cn,\n CloseCircleFillIcon,\n Badge,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { UseFavoritesDropdownMenuScriptReturn } from \"./favoritesDropdownMenu.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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-bg-base-6 oui-h-7 oui-w-full oui-ml-[1px] oui-rounded-sm\",\n overLen &&\n \"focus-visible:oui-outline-danger focus-within: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-text-base-contrast-20 oui-cursor-pointer\"\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-h-1 oui-w-1 oui-bg-danger oui-rounded-full\"></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-mt-3 oui-mb-[10px]\">\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-text-base-contrast oui-cursor-pointer\"\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-max-h-[288px] oui-overflow-y-auto oui-custom-scrollbar\"\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 { FavoritesDropdownMenu } from \"./favoritesDropdownMenu.ui\";\nimport {\n useFavoritesDropdownMenuScript,\n UseFavoritesDropdownMenuScriptOptions,\n} from \"./favoritesDropdownMenu.script\";\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 { usePagination } from \"@orderly.network/ui\";\nimport { MarketsListFullWidgetProps } from \"./widget\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\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 { pageSize, 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, sortKey, sortOrder } = useSort(\n options?.sortKey,\n options?.sortOrder\n );\n\n const dataSource = useMemo(() => {\n const list = getSortedList(data);\n return searchBySymbol(list, searchValue, \"base-type\");\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\", sortKey!, sortOrder!);\n }\n }, [sortKey, sortOrder, options.type]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n pagination,\n };\n};\n","import { MarketsListFull } from \"./marketsListFull.ui\";\nimport { useMarketsListFullScript } from \"./marketsListFull.script\";\nimport { SortOrder } from \"@orderly.network/ui\";\n\nexport type MarketsListFullWidgetProps = {\n type?: \"all\" | \"new\";\n sortKey: string;\n sortOrder: SortOrder;\n};\n\nexport const MarketsListFullWidget: React.FC<MarketsListFullWidgetProps> = (\n props\n) => {\n const state = useMarketsListFullScript(props);\n\n // Only all markets store sort\n const sortStore =\n props.type === \"all\" ? state.favorite.tabSort?.all : undefined;\n\n return (\n <MarketsListFull\n {...state}\n type={props.type}\n initialSort={{\n sortKey: sortStore?.sortKey || props.sortKey,\n sort: (sortStore?.sortOrder as SortOrder) || props.sortOrder,\n }}\n />\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex, DataTable } from \"@orderly.network/ui\";\nimport { UnFavoritesIcon } from \"../../icons\";\nimport { UseFavoritesListFullReturn } from \"./favoritesListFull.script\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\nimport { FavoritesTabWidget } from \"../../components/favoritesTabs\";\nimport { useFavoritesListFullColumns } from \"./column\";\nimport { Trans } from \"@orderly.network/i18n\";\n\nexport type FavoritesListFullProps = UseFavoritesListFullReturn;\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 = useFavoritesListFullColumns(favorite, true);\n\n const 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={[<UnFavoritesIcon className=\"oui-text-base-contrast-36\" />]}\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 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 { KeyboardEventHandler } from \"react\";\nimport {\n Box,\n cn,\n Flex,\n Text,\n Tooltip,\n Input,\n modal,\n} from \"@orderly.network/ui\";\nimport { FavoriteTab } from \"@orderly.network/hooks\";\nimport {\n UseFavoritesTabScriptOptions,\n UseFavoritesTabScriptReturn,\n} from \"./favoritesTabs.script\";\nimport { AddIcon, ActiveAddIcon, EditIcon, TrashIcon } from \"../../icons\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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-text-base-contrast-36 hover:oui-text-base-contrast oui-cursor-pointer\"\n onClick={() => {\n onEdit(item);\n }}\n />\n <TrashIcon\n className=\"oui-text-base-contrast-36 hover:oui-text-base-contrast oui-cursor-pointer\"\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-text-base-contrast-54 oui-w-3 oui-h-3 oui-z-[1]\" />\n ) : (\n <ActiveAddIcon className=\"oui-w-3 oui-h-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-p-0 oui-rounded oui-px-2 oui-my-[1px]\",\n \"focus-visible:oui-outline-none focus-within:oui-outline-transparent\",\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 isActive && setOpen(true);\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-relative oui-cursor-pointer oui-hide-scrollbar\",\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 isActive && setOpen(open);\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 { FavoritesTab } from \"./favoritesTabs.ui\";\nimport {\n useFavoritesTabScript,\n UseFavoritesTabScriptOptions,\n} from \"./favoritesTabs.script\";\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 { useMarketsListFullColumns } from \"../marketsListFull/column\";\n\nexport const useFavoritesListFullColumns = useMarketsListFullColumns;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\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 { FavoritesListFull } from \"./favoritesListFull.ui\";\nimport { useFavoritesListFullScript } from \"./favoritesListFull.script\";\n\nexport const FavoritesListFullWidget: React.FC = () => {\n const state = useFavoritesListFullScript();\n return <FavoritesListFull {...state} />;\n};\n","import { useEffect, useState } from \"react\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\n\nexport type TabName = \"favorites\" | \"all\" | \"new\";\n\nexport type UseMarketsDataListScript = ReturnType<\n typeof useMarketsDataListScript\n>;\n\nexport function useMarketsDataListScript() {\n const [activeTab, setActiveTab] = useState<TabName>(\"all\");\n const { clearSearchValue } = useMarketsContext();\n\n useEffect(() => {\n clearSearchValue?.();\n }, [activeTab]);\n\n return {\n activeTab,\n onTabChange: (value: string) => setActiveTab(value as TabName),\n };\n}\n","import { MarketsDataList } from \"./dataList.ui\";\nimport { useMarketsDataListScript } from \"./dataList.script\";\n\nexport const MarketsDataListWidget = () => {\n const state = useMarketsDataListScript();\n return <MarketsDataList {...state} />;\n};\n","import {\n Box,\n CloseCircleFillIcon,\n cn,\n Input,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { FavoritesIcon, SearchIcon } from \"../../icons\";\nimport { UseExpandMarketsScriptReturn } from \"./expandMarkets.script\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { FavoritesListWidget } from \"../favoritesList\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { RecentListWidget } from \"../recentList\";\nimport { NewListingListWidget } from \"../newListingList\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type ExpandMarketsProps = UseExpandMarketsScriptReturn;\n\nexport const ExpandMarkets: React.FC<ExpandMarketsProps> = (props) => {\n const { activeTab, onTabChange, tabSort, onTabSort } = props;\n\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const { t } = useTranslation();\n\n const search = (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder={t(\"markets.search.placeholder\")}\n classNames={{ root: \"oui-border oui-mt-[1px] oui-border-line\" }}\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 searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-text-base-contrast-36 oui-cursor-pointer\"\n onClick={clearSearchValue}\n />\n </Box>\n )\n }\n autoComplete=\"off\"\n />\n );\n\n const cls = \"oui-h-[calc(100%_-_36px)]\";\n\n return (\n <Box className={cn(\"oui-font-semibold oui-overflow-hidden\")} height=\"100%\">\n <Box px={3} pb={2}>\n {search}\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=\"favorites\"\n >\n <div className={cls}>\n <FavoritesListWidget\n tableClassNames={{\n scroll: \"oui-px-1\",\n }}\n />\n </div>\n </TabPanel>\n <TabPanel title={t(\"markets.recent\")} value=\"recent\">\n <div className={cls}>\n <RecentListWidget\n tableClassNames={{\n scroll: \"oui-px-1\",\n }}\n />\n </div>\n </TabPanel>\n <TabPanel title={t(\"common.all\")} value=\"all\">\n <div className={cls}>\n <MarketsListWidget\n type=\"all\"\n sortKey={tabSort?.sortKey}\n sortOrder={tabSort?.sortOrder}\n onSort={onTabSort}\n tableClassNames={{\n scroll: \"oui-px-1\",\n }}\n />\n </div>\n </TabPanel>\n <TabPanel title={t(\"markets.newListings\")} value=\"newListing\">\n <div className={cls}>\n <NewListingListWidget\n tableClassNames={{\n scroll: \"oui-px-1\",\n }}\n />\n </div>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { Box, cn, DataTable } from \"@orderly.network/ui\";\nimport { UseFavoritesListReturn } from \"./favoritesList.script\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { FavoritesTabWidget } from \"../favoritesTabs\";\nimport { useSideMarketsColumns } from \"../sideMarkets/column\";\nimport type { FavoritesListWidgetProps } from \"./widget\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\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 { MouseEventHandler, ReactNode } from \"react\";\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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&Volume\"),\n dataIndex: \"24h_amount\",\n onSort: true,\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-cursor-pointer oui-mr-1\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-w-3 oui-h-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-w-3 oui-h-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\n symbol={record.symbol}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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 { TokenIcon, Flex, Text, cn, Tooltip, Badge } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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-overflow-y-auto oui-custom-scrollbar oui-h-full\">\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\n symbol={item.symbol}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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 // @ts-ignore\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\n symbol={item.symbol}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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 { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\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 { FavoritesList } from \"./favoritesList.ui\";\nimport { useFavoritesListScript } from \"./favoritesList.script\";\nimport { GetColumns } from \"../../type\";\nimport { DataTableClassNames } from \"@orderly.network/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, DataTableClassNames } from \"@orderly.network/ui\";\nimport { type UseMarketsListReturn } from \"./marketsList.script\";\nimport { GetColumns, TInitialSort } from \"../../type\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useSideMarketsColumns } from \"../sideMarkets/column\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\n\nexport type MarketsListProps = UseMarketsListReturn & {\n initialSort: TInitialSort;\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n};\n\nexport const MarketsList: FC<MarketsListProps> = (props) => {\n const {\n loading,\n dataSource,\n favorite,\n onSort,\n initialSort,\n getColumns,\n 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 loading={loading}\n dataSource={dataSource}\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 initialSort={initialSort}\n manualSorting\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { MarketsListWidgetProps } from \"./widget\";\nimport { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\n\nexport type UseMarketsListScriptOptions = MarketsListWidgetProps;\n\nexport type UseMarketsListReturn = ReturnType<typeof useMarketsListScript>;\n\nexport const useMarketsListScript = (options: UseMarketsListScriptOptions) => {\n const [loading, setLoading] = useState(true);\n\n const [data, favorite] = useMarkets(MarketsType.ALL);\n\n const { searchValue } = useMarketsContext();\n\n const { onSort, getSortedList } = useSort(\n options?.sortKey,\n options?.sortOrder,\n options.onSort\n );\n\n const dataSource = useMemo(() => {\n const searchResults = searchBySymbol(data, searchValue, \"base\");\n return getSortedList(searchResults);\n }, [data, getSortedList, searchValue]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n return {\n loading,\n dataSource,\n favorite,\n onSort,\n };\n};\n","import { MarketsList } from \"./marketsList.ui\";\nimport { useMarketsListScript } from \"./marketsList.script\";\nimport { SortOrder, DataTableClassNames } from \"@orderly.network/ui\";\nimport { GetColumns } from \"../../type\";\n\nexport type MarketsListWidgetProps = {\n type?: \"all\" | \"new\";\n sortKey: string;\n sortOrder: SortOrder;\n getColumns?: GetColumns;\n collapsed?: boolean;\n tableClassNames?: DataTableClassNames;\n rowClassName?: string;\n onSort?: (sortKey?: string, sortOrder?: SortOrder) => void;\n};\n\nexport const MarketsListWidget: React.FC<MarketsListWidgetProps> = (props) => {\n const state = useMarketsListScript(props);\n\n return (\n <MarketsList\n {...state}\n initialSort={{\n sortKey: props.sortKey,\n sort: props.sortOrder,\n }}\n getColumns={props.getColumns}\n collapsed={props.collapsed}\n tableClassNames={props.tableClassNames}\n rowClassName={props.rowClassName}\n />\n );\n};\n","import { FC } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { UseRecentListReturn } from \"./recentList.script\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useSideMarketsColumns } from \"../sideMarkets/column\";\nimport { RecentListWidgetProps } from \"./widget\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\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 { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\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 { RecentList } from \"./recentList.ui\";\nimport { useRecentListScript } from \"./recentList.script\";\nimport { GetColumns } from \"../../type\";\nimport { DataTableClassNames } from \"@orderly.network/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 } from \"react\";\nimport { cn, DataTable } from \"@orderly.network/ui\";\nimport { UseNewListingListReturn } from \"./newListingList.script\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useSideMarketsColumns } from \"../sideMarkets/column\";\nimport { NewListingListWidgetProps } from \"./widget\";\nimport { CollapseMarkets } from \"../collapseMarkets\";\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 { searchBySymbol, useSort } from \"../../utils\";\nimport { useMarketsContext } from \"../marketsProvider\";\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 { NewListingList } from \"./newListingList.ui\";\nimport { useNewListingListScript } from \"./newListingList.script\";\nimport { GetColumns } from \"../../type\";\nimport { DataTableClassNames } from \"@orderly.network/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 { useCallback, useEffect, useState } from \"react\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { SortOrder } from \"@orderly.network/ui\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type TabName = \"favorites\" | \"recent\" | \"all\";\n\nexport type UseExpandMarketsScriptOptions = {\n activeTab?: TabName;\n onTabChange?: (tab: TabName) => void;\n};\n\nexport type UseExpandMarketsScriptReturn = ReturnType<\n typeof useExpandMarketsScript\n>;\n\nexport function useExpandMarketsScript(\n options?: UseExpandMarketsScriptOptions\n) {\n const [activeTab, setActiveTab] = useState<TabName>(options?.activeTab!);\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: \"orderly_side_markets_tab_sort\",\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 TabName);\n } else {\n setActiveTab(value as TabName);\n }\n },\n [options?.onTabChange]\n );\n useEffect(() => {\n setActiveTab(options?.activeTab || \"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 { useCallback } from \"react\";\nimport { useSessionStorage } from \"@orderly.network/hooks\";\nimport { SortOrder } from \"@orderly.network/ui\";\n\ntype Sort = {\n sortKey: string;\n sortOrder: SortOrder;\n};\n\nexport type TabSort = Record<string, Sort>;\n\nconst defaultSortKey = \"24h_amount\";\nconst defaultSortOrder = \"desc\";\n\nexport function useTabSort(options: {\n storageKey: string;\n type?: string;\n initialSort?: Sort;\n}) {\n const { storageKey, type = \"all\", initialSort } = options;\n\n const [tabSort, setTabSort] = useSessionStorage(storageKey, {\n [type]: {\n sortKey: initialSort?.sortKey || defaultSortKey,\n sortOrder: initialSort?.sortOrder || defaultSortOrder,\n },\n } as TabSort);\n\n // default all tab can storage sort\n const onTabSort = useCallback(\n (sortKey = defaultSortKey, sortOrder = defaultSortOrder) => {\n setTabSort({\n ...tabSort,\n all: {\n sortKey,\n sortOrder,\n },\n });\n },\n []\n );\n\n return {\n tabSort: tabSort[type],\n onTabSort,\n };\n}\n","import { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\nimport {\n useExpandMarketsScript,\n UseExpandMarketsScriptOptions,\n} from \"./expandMarkets.script\";\nimport { ExpandMarkets } from \"./expandMarkets.ui\";\n\nexport type ExpandMarketsWidgetProps = MarketsProviderProps &\n UseExpandMarketsScriptOptions;\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, Text, Flex, cn } from \"@orderly.network/ui\";\nimport {\n ProcessedFundingData,\n UseFundingOverviewReturn,\n} from \"./fundingOverview.script\";\nimport { useFundingOverviewColumns } from \"./columns\";\n\nexport type FundingOverviewProps = UseFundingOverviewReturn;\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 <div className=\"w-full\">\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 </div>\n );\n};\n","import { Column, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ProcessedFundingData } from \"./fundingOverview.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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): Column<ProcessedFundingData>[] => {\n const { t } = useTranslation();\n return [\n {\n title: t(\"markets.column.market\"),\n dataIndex: \"symbol\",\n width: 120,\n render: (value) => (\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 title: t(\"markets.funding.column.estFunding\"),\n dataIndex: \"estFunding\",\n width: 120,\n onSort: true,\n render: (value) => (\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\"> / 4h </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 <select\n value={selectedPeriod}\n onChange={(e) => setSelectedPeriod(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n className=\"oui-w-12 oui-rounded-md oui-border oui-border-line oui-bg-[var(--oui-table-background-color)]\"\n >\n {[\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 ].map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\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};\n","import { useMemo } from \"react\";\nimport {\n useFundingRateHistory,\n useMarkets,\n MarketsType,\n} from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useSort, searchBySymbol } from \"../../utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\n\nexport type PeriodKey = \"1d\" | \"3d\" | \"7d\" | \"14d\" | \"30d\" | \"90d\";\n\nexport type ProcessedFundingData = {\n symbol: string;\n estFunding: number;\n lastFunding: 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 UseFundingOverviewReturn = {\n dataSource: ProcessedFundingData[];\n isLoading: boolean;\n pagination: {\n pageSize: number;\n page: number;\n };\n onSort: any;\n};\n\nexport const useFundingOverviewScript = () => {\n const { pageSize, pagination } = usePagination({ pageSize: 10 });\n const [marketData] = useMarkets(MarketsType.ALL);\n const {\n data: historyData,\n isLoading: isHistoryLoading,\n getPositiveRates,\n } = useFundingRateHistory();\n const { onSort, getSortedList } = useSort();\n const { searchValue } = useMarketsContext();\n\n const processedData = useMemo((): ProcessedFundingData[] => {\n if (!marketData?.length) return [];\n\n const periods: PeriodKey[] = [\"1d\", \"3d\", \"7d\", \"14d\", \"30d\", \"90d\"];\n const posRates = periods.reduce((acc, period) => {\n acc[period] = getPositiveRates(historyData, period);\n return acc;\n }, {} as Record<string, Record<string, number>>);\n\n return marketData.map((market) => {\n const history = historyData?.find((h) => h.symbol === market.symbol);\n\n return {\n symbol: market.symbol,\n estFunding: market.est_funding_rate,\n lastFunding: market.last_funding_rate,\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\"][market.symbol] ?? \"-\",\n \"3dPositive\": posRates[\"3d\"][market.symbol] ?? \"-\",\n \"7dPositive\": posRates[\"7d\"][market.symbol] ?? \"-\",\n \"14dPositive\": posRates[\"14d\"][market.symbol] ?? \"-\",\n \"30dPositive\": posRates[\"30d\"][market.symbol] ?? \"-\",\n \"90dPositive\": posRates[\"90d\"][market.symbol] ?? \"-\",\n };\n });\n }, [marketData, historyData, 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","import { FC } from \"react\";\nimport { FundingOverview } from \"./fundingOverview.ui\";\nimport { useFundingOverviewScript } from \"./fundingOverview.script\";\n\nexport const FundingOverviewWidget: FC = () => {\n const props = useFundingOverviewScript();\n return <FundingOverview {...props} />;\n};\n","import { FC } from \"react\";\nimport { cn } from \"@orderly.network/ui\";\nimport { DataTable } from \"@orderly.network/ui\";\nimport { useFundingColumns } from \"./columns\";\n\ninterface FundingComparisonProps {\n data: Array<{\n symbol: string;\n funding: (number | null)[];\n }>;\n isLoading: boolean;\n pagination: any;\n}\n\nexport const FundingComparison: FC<FundingComparisonProps> = ({\n data,\n isLoading,\n pagination,\n}) => {\n const columns = useFundingColumns();\n\n return (\n <DataTable\n columns={columns}\n dataSource={data}\n loading={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={pagination}\n />\n );\n};\n","import { Column } from \"@orderly.network/ui\";\nimport { Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { exchanges } from \"./fundingComparison.script\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useFundingColumns = (): Column[] => {\n const { t } = useTranslation();\n return [\n {\n title: t(\"markets.column.market\"),\n dataIndex: \"symbol\",\n width: 150,\n onSort: true,\n render: (value) => (\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 ...exchanges.map((exchange, index) => ({\n title: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\n <img\n src={`https://oss.orderly.network/static/exchange_logo/${exchange\n .toLowerCase()\n .replace(\" \", \"_\")}.png`}\n style={{\n width: \"24px\",\n height: \"24px\",\n objectFit: \"cover\",\n borderRadius: \"50%\",\n }}\n />\n <span>{exchange}</span>\n </div>\n ),\n dataIndex: `exchange_${index}`,\n width: 100,\n render: (value: number | null) =>\n value === null ? (\n \"-\"\n ) : (\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 ),\n })),\n ];\n};\n","import { useFundingRates, useQuery } from \"@orderly.network/hooks\";\nimport { useMemo } from \"react\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useSort, searchBySymbol } from \"../../utils\";\nimport { useMarketsContext } from \"../../components/marketsProvider\";\n\nexport const exchanges = [\n \"WOOFi Pro\",\n \"Binance\",\n \"OKX\",\n \"Bybit\",\n \"dYdX\",\n \"Bitget\",\n \"Kucoin\",\n];\n\nexport const useFundingComparisonScript = () => {\n const { pageSize, setPage, pagination } = usePagination({\n pageSize: 10,\n });\n const { onSort, getSortedList } = useSort();\n const { searchValue } = useMarketsContext();\n\n const fundingRates = useFundingRates();\n\n const { data, isLoading } = useQuery<\n Array<{\n symbol: string;\n exchanges: Array<{\n name: string;\n last: number;\n }>;\n }>\n >(\"/v1/public/market_info/funding_comparison\");\n\n const processedData = useMemo(() => {\n if (!data?.length) return [];\n return data.map((row: any) => {\n const exchangeData: any = {\n symbol: row.symbol,\n };\n\n exchanges.forEach((name, index) => {\n const normalizedName = name.toLowerCase();\n\n if (normalizedName === \"woofi pro\") {\n const rate = fundingRates[row.symbol];\n exchangeData[`exchange_${index}`] = rate(\"last_funding_rate\") ?? null;\n return;\n }\n\n const exchange = row.exchanges.find(\n (e: any) => e.name.toLowerCase() === normalizedName\n );\n exchangeData[`exchange_${index}`] = exchange?.last ?? null;\n });\n\n return exchangeData;\n });\n }, [data, exchanges, fundingRates]);\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 {\n data: dataSource,\n isLoading,\n pagination,\n onSort,\n };\n};\n","import { FC } from \"react\";\nimport { FundingComparison } from \"./fundingComparison.ui\";\nimport { useFundingComparisonScript } from \"./fundingComparison.script\";\n\nexport const FundingComparisonWidget: FC = () => {\n const state = useFundingComparisonScript();\n return <FundingComparison {...state} />;\n};\n","import { FC } from \"react\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/ui\";\nimport {\n UseSideMarketsScriptOptions,\n UseSideMarketsScriptReturn,\n} from \"./sideMarkets.script\";\nimport { CollapseIcon, ExpandIcon } from \"../../icons\";\nimport { ExpandMarketsWidget } from \"../expandMarkets\";\nimport { FavoritesListWidget } from \"../favoritesList\";\nimport { RecentListWidget } from \"../recentList\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { NewListingListWidget } from \"../newListingList\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type SideMarketsProps = UseSideMarketsScriptReturn & {\n className?: string;\n};\n\nexport const SideMarkets: React.FC<SideMarketsProps> = (props) => {\n const {\n collapsable,\n collapsed,\n onCollapse,\n activeTab,\n onTabChange,\n className,\n } = props;\n\n const { symbol, onSymbolChange } = useMarketsContext();\n\n const renderContent = () => {\n if (!collapsed) {\n return (\n <ExpandMarketsWidget\n activeTab={activeTab}\n onTabChange={onTabChange}\n symbol={symbol}\n onSymbolChange={onSymbolChange}\n />\n );\n }\n\n if (activeTab === \"favorites\") {\n return <FavoritesListWidget collapsed={collapsed} />;\n }\n\n if (activeTab === \"recent\") {\n return <RecentListWidget collapsed={collapsed} />;\n }\n\n if (activeTab === \"newListing\") {\n return <NewListingListWidget collapsed={collapsed} />;\n }\n\n return (\n <MarketsListWidget\n type=\"all\"\n sortKey=\"24h_amount\"\n sortOrder=\"desc\"\n collapsed={collapsed}\n />\n );\n };\n\n return (\n <Flex\n id=\"oui-side-markets\"\n className={cn(\"oui-font-semibold\", className)}\n direction=\"column\"\n gapY={5}\n height=\"100%\"\n width=\"100%\"\n >\n <SideMarketsHeader\n collapsable={collapsable}\n collapsed={collapsed}\n onCollapse={onCollapse}\n />\n <Box\n width=\"100%\"\n className={cn(\n collapsed ? \"oui-h-[calc(100%_-_52px)]\" : \"oui-h-[calc(100%_-_56px)]\"\n )}\n >\n {renderContent()}\n </Box>\n </Flex>\n );\n};\n\ntype SideMarketsHeaderProps = UseSideMarketsScriptOptions;\n\nexport const SideMarketsHeader: FC<SideMarketsHeaderProps> = (props) => {\n const { collapsable, collapsed, onCollapse } = props;\n\n const { t } = useTranslation();\n\n const cls = cn(\n \"oui-text-base-contrast-36\",\n collapsable\n ? \"oui-cursor-pointer hover:oui-text-base-contrast-80\"\n : \"oui-cursor-not-allowed\"\n );\n\n if (collapsed) {\n return (\n <ExpandIcon\n className={cls}\n onClick={() => {\n collapsable && onCollapse?.(false);\n }}\n />\n );\n }\n\n return (\n <Flex justify=\"between\" px={3} width=\"100%\">\n <Text size=\"base\" intensity={80}>\n {t(\"common.markets\")}\n </Text>\n <CollapseIcon\n className={cls}\n onClick={() => {\n collapsable && onCollapse?.(true);\n }}\n />\n </Flex>\n );\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\n\nexport type UseSideMarketsScriptOptions = {\n collapsable?: boolean;\n collapsed?: boolean;\n onCollapse?: (collapsed: boolean) => void;\n};\n\nexport type UseSideMarketsScriptReturn = ReturnType<\n typeof useSideMarketsScript\n>;\n\nexport function useSideMarketsScript(options?: UseSideMarketsScriptOptions) {\n const [collapsed, setCollapsed] = useState(options?.collapsed);\n // const [activeTab, setActiveTab] = useState<TabName>(\"all\");\n const [activeTab, setActiveTab] = useLocalStorage(\n \"orderly_side_markets_sel_tab_key\",\n \"all\"\n );\n\n const collapsable = useMemo(\n () => options?.collapsable ?? true,\n [options?.collapsable]\n );\n\n const onCollapse = useCallback(\n (collapsed: boolean) => {\n if (typeof options?.onCollapse === \"function\") {\n options.onCollapse(collapsed);\n } else {\n setCollapsed(collapsed);\n }\n },\n [options?.onCollapse]\n );\n\n useEffect(() => {\n setCollapsed(options?.collapsed);\n }, [options?.collapsed]);\n\n return {\n collapsable,\n collapsed,\n onCollapse,\n activeTab,\n onTabChange: setActiveTab,\n };\n}\n","import React from \"react\";\nimport { useSideMarketsScript } from \"./sideMarkets.script\";\nimport { SideMarkets, SideMarketsProps } from \"./sideMarkets.ui\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\n\nexport type SideMarketsWidgetProps = MarketsProviderProps &\n Partial<\n Pick<\n SideMarketsProps,\n \"collapsable\" | \"collapsed\" | \"onCollapse\" | \"className\"\n >\n >;\n\nexport const SideMarketsWidget: React.FC<SideMarketsWidgetProps> = (props) => {\n const state = useSideMarketsScript({\n collapsable: props.collapsable,\n collapsed: props.collapsed,\n onCollapse: props.onCollapse,\n });\n\n return (\n <MarketsProvider\n symbol={props.symbol}\n onSymbolChange={props.onSymbolChange}\n >\n <SideMarkets {...state} className={props.className} />\n </MarketsProvider>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport {\n Box,\n CloseIcon,\n cn,\n Flex,\n Input,\n TabPanel,\n Tabs,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n} from \"@orderly.network/ui\";\nimport { FavoritesIcon, SearchIcon } from \"../../icons\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { FavoritesListWidget } from \"../favoritesList\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { RecentListWidget } from \"../recentList\";\nimport { NewListingListWidget } from \"../newListingList\";\nimport { UseDropDownMarketsScriptReturn } from \"./dropDownMarkets.script\";\nimport { useDropDownMarketsColumns } from \"./column\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport type DropDownMarketsProps = UseDropDownMarketsScriptReturn & {\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 { searchValue, onSearchValueChange } = useMarketsContext();\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 <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder={t(\"markets.search.placeholder\")}\n classNames={{\n root: \"oui-border oui-mt-[1px] oui-border-line oui-flex-1\",\n }}\n size=\"sm\"\n prefix={\n <Box pl={3} pr={1}>\n <SearchIcon className=\"oui-text-base-contrast-36\" />\n </Box>\n }\n autoComplete=\"off\"\n />\n <CloseIcon\n size={12}\n className=\"oui-text-base-contrast-80 oui-cursor-pointer\"\n onClick={props.hide}\n opacity={1}\n />\n </Flex>\n );\n\n const cls = \"oui-h-[calc(100%_-_36px)]\";\n\n return (\n <Box\n className={cn(\"oui-font-semibold oui-overflow-hidden\")}\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=\"favorites\"\n >\n <div className={cls}>\n <FavoritesListWidget\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 />\n </div>\n </TabPanel>\n <TabPanel title={t(\"markets.recent\")} value=\"recent\">\n <div className={cls}>\n <RecentListWidget\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 />\n </div>\n </TabPanel>\n <TabPanel title={t(\"common.all\")} value=\"all\">\n <div className={cls}>\n <MarketsListWidget\n type=\"all\"\n sortKey={tabSort?.sortKey}\n sortOrder={tabSort?.sortOrder}\n onSort={onTabSort}\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 />\n </div>\n </TabPanel>\n <TabPanel title={t(\"markets.newListings\")} value=\"newListing\">\n <div className={cls}>\n <NewListingListWidget\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 />\n </div>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n","import { MouseEventHandler, ReactNode, useCallback } from \"react\";\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const useDropDownMarketsColumns = () => {\n const { t } = useTranslation();\n\n return useCallback(\n (favorite: FavoriteInstance, isFavoriteList = false) => {\n return [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 150,\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-cursor-pointer oui-mr-1\"\n >\n {record.isFavorite ? (\n <FavoritesIcon2 className=\"oui-w-3 oui-h-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-w-3 oui-h-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\n symbol={value}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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 },\n {\n title: 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 },\n {\n title: 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 },\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 { useCallback, useEffect, useState } from \"react\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type UseDropDownMarketsScriptOptions = {};\n\nexport type TabName = \"favorites\" | \"recent\" | \"all\";\n\nexport type UseDropDownMarketsScriptReturn = ReturnType<\n typeof useDropDownMarketsScript\n>;\n\nexport function useDropDownMarketsScript(\n options?: UseDropDownMarketsScriptOptions\n) {\n const [open, setOpen] = useState(false);\n // const [activeTab, setActiveTab] = useState<TabName>(\"favorites\");\n const [activeTab, setActiveTab] = useLocalStorage(\n \"orderly_dropdown_markets_sel_tab_key\",\n \"all\"\n );\n\n const { tabSort, onTabSort } = useTabSort({\n storageKey: \"orderly_dropdown_markets_tab_sort\",\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,\n onTabChange: (value: string) => setActiveTab(value as TabName),\n open,\n onOpenChange: setOpen,\n hide,\n tabSort,\n onTabSort,\n };\n}\n","import React, { PropsWithChildren } from \"react\";\nimport { useDropDownMarketsScript } from \"./dropDownMarkets.script\";\nimport { DropDownMarkets, DropDownMarketsProps } from \"./dropDownMarkets.ui\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\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 {\n Box,\n CloseCircleFillIcon,\n cn,\n Grid,\n Input,\n Text,\n} from \"@orderly.network/ui\";\nimport { UseMarketsSheetScriptReturn } from \"./marketsSheet.script\";\nimport { SearchIcon } from \"../../icons\";\nimport { MarketsListWidget } from \"../marketsList\";\nimport { useMarketsContext } from \"../marketsProvider\";\nimport { getMarketsSheetColumns } from \"./column\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type MarketsSheetProps = UseMarketsSheetScriptReturn & {\n className?: string;\n};\n\nexport const MarketsSheet: React.FC<MarketsSheetProps> = (props) => {\n const { className, tabSort, onTabSort } = props;\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n\n const { t } = useTranslation();\n\n const search = (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder={t(\"markets.search.placeholder\")}\n classNames={{ root: \"oui-border oui-border-line oui-mt-4\" }}\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 searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-text-base-contrast-36 oui-cursor-pointer\"\n onClick={clearSearchValue}\n />\n </Box>\n )\n }\n autoComplete=\"off\"\n />\n );\n\n return (\n <Grid\n cols={1}\n className={cn(\"oui-font-semibold oui-grid-rows-[auto,1fr]\", className)}\n height=\"100%\"\n width=\"100%\"\n >\n <Box px={3} mt={3}>\n <Text size=\"base\" intensity={80}>\n {t(\"common.markets\")}\n </Text>\n {search}\n </Box>\n\n <div className=\"oui-relative\">\n <Box\n width=\"100%\"\n mt={2}\n className=\"oui-absolute oui-left-0 oui-right-9 oui-top-0 oui-bottom-0\"\n >\n <MarketsListWidget\n type=\"all\"\n sortKey={tabSort?.sortKey}\n sortOrder={tabSort?.sortOrder}\n onSort={onTabSort}\n getColumns={getMarketsSheetColumns}\n tableClassNames={{\n root: \"!oui-bg-base-8\",\n scroll: \"oui-pb-[calc(env(safe-area-inset-bottom))]\",\n }}\n />\n </Box>\n </div>\n </Grid>\n );\n};\n","import { MouseEventHandler } from \"react\";\nimport { Flex, TokenIcon, Text, Badge, cn, Column } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { DeleteIcon, TopIcon } from \"../../icons\";\nimport { FavoriteInstance } from \"../../type\";\nimport { i18n } from \"@orderly.network/i18n\";\n\nexport const getMarketsSheetColumns = (\n favorite: FavoriteInstance,\n isFavoriteList = false\n) => {\n return [\n {\n title: i18n.t(\"markets.column.market&Volume\"),\n dataIndex: \"24h_amount\",\n onSort: true,\n className: \"oui-h-[36px]\",\n render: (value, record) => {\n return (\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Flex gapX={1}>\n <TokenIcon\n symbol={record.symbol}\n className=\"oui-w-[18px] oui-h-[18px]\"\n />\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 );\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 { useTabSort } from \"../shared/hooks/useTabSort\";\n\nexport type UseMarketsSheetScriptOptions = {};\n\nexport type UseMarketsSheetScriptReturn = ReturnType<\n typeof useMarketsSheetScript\n>;\n\nexport function useMarketsSheetScript(options?: UseMarketsSheetScriptOptions) {\n const { tabSort, onTabSort } = useTabSort({\n storageKey: \"orderly_side_markets_tab_sort\",\n });\n return { tabSort, onTabSort };\n}\n","import React from \"react\";\nimport { useMarketsSheetScript } from \"./marketsSheet.script\";\nimport { MarketsSheet, MarketsSheetProps } from \"./marketsSheet.ui\";\nimport { MarketsProvider, MarketsProviderProps } from \"../marketsProvider\";\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 {\n TokenIcon,\n Flex,\n Text,\n cn,\n Divider,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { UseSymbolInfoBarFullScriptReturn } from \"./symbolInfoBarFull.script\";\nimport { FavoritesDropdownMenuWidget } from \"../favoritesDropdownMenu\";\nimport {\n ArrowLeftIcon,\n FavoritesIcon2,\n TriangleDownIcon,\n UnFavoritesIcon2,\n} from \"../../icons\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ReactNode } from \"react\";\nimport { DropDownMarketsWidget } from \"../dropDownMarkets\";\nimport { MarketsProviderProps } from \"../marketsProvider\";\nimport { useFundingRate } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 fundingRate,\n containerRef,\n leadingElementRef,\n tailingElementRef,\n leadingVisible,\n tailingVisible,\n onScoll,\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-cursor-pointer oui-mr-1\"\n >\n {isFavorite ? (\n <FavoritesIcon2 className=\"oui-w-3 oui-h-3 oui-text-[rgba(255,154,46,1)]\" />\n ) : (\n <UnFavoritesIcon2 className=\"oui-w-3 oui-h-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-w-4 oui-h-4\" />\n <Text.formatted\n className=\"oui-break-normal oui-whitespace-nowrap\"\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-font-semibold oui-h-[54px]\",\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-flex-1 oui-overflow-hidden oui-h-full\">\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-overflow-hidden oui-h-full\">\n <div\n ref={containerRef}\n className=\"oui-overflow-x-auto oui-hide-scrollbar oui-h-full\"\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={t(\"markets.symbolInfoBar.predFundingRate.tooltip\")}\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?: string;\n};\n\nconst DataItem: React.FC<DataItemProps> = (props) => {\n return (\n <Flex direction=\"column\" itemAlign=\"start\">\n <Tooltip\n open={props.hint ? undefined : false}\n content={props.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-break-normal oui-whitespace-nowrap\",\n props.hint &&\n \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n )}\n >\n {props.label}\n </Text>\n </Tooltip>\n <Text\n size=\"2xs\"\n intensity={98}\n className={cn(\n \"oui-data-value\",\n \"oui-leading-[20px] oui-break-normal oui-whitespace-nowrap\"\n )}\n >\n {props.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) return null;\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-items-center oui-w-[80px]\",\n \"oui-absolute oui-top-0 oui-bottom-0 oui-rounded-l\",\n leading && \"oui-left-0 oui-pl-1\",\n tailing && \"oui-right-0 oui-pr-1 oui-rotate-180\"\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 {\n useFundingRate,\n useMarketsStore,\n useSymbolsInfo,\n useTickerStream,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\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 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 if (direction === \"left\")\n containerRef.current?.scrollBy({ left: -100, behavior: \"smooth\" });\n else containerRef.current?.scrollBy({ left: 100, behavior: \"smooth\" });\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 };\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, useState } from \"react\";\nimport { Box, cn, TabPanel, Tabs, Text } from \"@orderly.network/ui\";\nimport { MarketsDataListWidget } from \"./dataList\";\nimport { MarketsHeaderWidget } from \"./header/widget\";\nimport { FundingWidget } from \"./funding/widget\";\nimport {\n MarketsProvider,\n MarketsProviderProps,\n} from \"../../components/marketsProvider\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type MarketsHomePageProps = MarketsProviderProps & {\n className?: string;\n};\n\nexport const MarketsHomePage: FC<MarketsHomePageProps> = (props) => {\n const [activeTab, setActiveTab] = useState(\"markets\");\n const { t } = useTranslation();\n return (\n <MarketsProvider onSymbolChange={props.onSymbolChange}>\n <Box\n id=\"oui-markets-home-page\"\n className={cn(\"oui-font-semibold\", props.className)}\n p={6}\n >\n <Tabs\n variant=\"text\"\n size=\"xl\"\n value={activeTab}\n onValueChange={setActiveTab}\n >\n <TabPanel\n title={t(\"common.markets\")}\n value=\"markets\"\n testid=\"oui-testid-markets-tab\"\n >\n <MarketsHeaderWidget />\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 </Box>\n </MarketsProvider>\n );\n};\n","import type { FC } from \"react\";\nimport {\n Box,\n CloseCircleFillIcon,\n Input,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { FundingOverviewWidget } from \"../../../components/fundingOverview\";\nimport { FundingComparisonWidget } from \"../../../components/fundingComparison\";\nimport { UseFundingScript } from \"./funding.script\";\nimport { SearchIcon } from \"../../../icons\";\nimport { useMarketsContext } from \"../../../components/marketsProvider\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nexport type FundingUIProps = UseFundingScript;\n\nexport const FundingUI: FC<FundingUIProps> = ({\n activeFundingTab,\n onFundingTabChange,\n}) => {\n const { searchValue, onSearchValueChange, clearSearchValue } =\n useMarketsContext();\n const { t } = useTranslation();\n\n const search = (\n <Input\n value={searchValue}\n onValueChange={onSearchValueChange}\n placeholder={t(\"markets.search.placeholder\")}\n className=\"oui-w-[240px] oui-my-1\"\n size=\"sm\"\n data-testid=\"oui-testid-markets-searchMarket-input\"\n prefix={\n <Box pl={3} pr={1}>\n <SearchIcon className=\"oui-text-base-contrast-36\" />\n </Box>\n }\n suffix={\n searchValue && (\n <Box mr={2}>\n <CloseCircleFillIcon\n size={14}\n className=\"oui-text-base-contrast-36 oui-cursor-pointer\"\n onClick={clearSearchValue}\n />\n </Box>\n )\n }\n autoComplete=\"off\"\n />\n );\n\n return (\n <Box id=\"oui-funding-list\" intensity={900} p={6} mt={4} r=\"2xl\">\n <Tabs\n variant=\"contained\"\n size=\"lg\"\n value={activeFundingTab}\n onValueChange={onFundingTabChange}\n trailing={search}\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","import { useState } from \"react\";\n\nexport type FundingTabName = \"overview\" | \"comparison\";\n\nexport type UseFundingScript = ReturnType<typeof useFundingScript>;\n\nexport function useFundingScript() {\n const [activeFundingTab, setActiveFundingTab] =\n useState<FundingTabName>(\"overview\");\n\n return {\n activeFundingTab,\n onFundingTabChange: (value: string) =>\n setActiveFundingTab(value as FundingTabName),\n };\n}\n","import { FundingUI } from \"./funding.ui\";\nimport { useFundingScript } from \"./funding.script\";\n\nexport const FundingWidget = () => {\n const state = useFundingScript();\n return <FundingUI {...state} />;\n};\n"]}