@orderly.network/markets 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css ADDED
@@ -0,0 +1,2 @@
1
+ #oui-markets-favorites-tabs-container::-webkit-scrollbar{display:none}
2
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/style/index.css"],"sourcesContent":["\n#oui-markets-favorites-tabs-container::-webkit-scrollbar {\n display: none;\n}\n"],"mappings":"AACA,CAAC,oCAAoC,oBACnC,QAAS,IACX","names":[]}
@@ -0,0 +1,116 @@
1
+ import * as react from 'react';
2
+ import { FC, PropsWithChildren } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+ import { FavoriteTab, useMarkets } from '@orderly.network/hooks';
5
+ import { SortOrder } from '@orderly.network/ui';
6
+ import { API } from '@orderly.network/types';
7
+
8
+ type TEmblaApi = {
9
+ scrollPrev: (jump?: boolean) => void;
10
+ scrollNext: (jump?: boolean) => void;
11
+ };
12
+ type HeaderReturns = ReturnType<typeof useMarketsHeaderScript>;
13
+ declare const useMarketsHeaderScript: () => {
14
+ markets: any[];
15
+ news: any[];
16
+ gainers: any[];
17
+ losers: any[];
18
+ total24Amount: number;
19
+ totalOpenInterest: number;
20
+ tvl: number | undefined;
21
+ scrollIndex: number;
22
+ setScrollIndex: react.Dispatch<react.SetStateAction<number>>;
23
+ emblaRef: <ViewportElement extends HTMLElement>(instance: ViewportElement | null) => void;
24
+ emblaApi: TEmblaApi;
25
+ enableScroll: boolean;
26
+ };
27
+
28
+ /** -----------MarketsHeader start ------------ */
29
+ declare const MarketsHeader: FC<HeaderReturns>;
30
+
31
+ declare const MarketsHeaderWidget: () => react_jsx_runtime.JSX.Element;
32
+
33
+ type MarketsFavorite = ReturnType<typeof useMarkets>[1];
34
+ type TFavorite = MarketsFavorite & {
35
+ curTab: FavoriteTab;
36
+ setCurTab: (tab: FavoriteTab) => void;
37
+ };
38
+ type TInitialSort = {
39
+ sortKey: string;
40
+ sort: SortOrder;
41
+ };
42
+
43
+ type MarketListWidgetProps = {
44
+ type?: "all" | "new";
45
+ sortKey: string;
46
+ sortOrder: SortOrder;
47
+ };
48
+ declare const MarketListWidget: React.FC<MarketListWidgetProps>;
49
+
50
+ type UseMarketListScriptOptions = MarketListWidgetProps;
51
+ type UseMarketListReturn = ReturnType<typeof useMarketListScript>;
52
+ declare const useMarketListScript: (options: UseMarketListScriptOptions) => {
53
+ loading: boolean;
54
+ dataSource: any[];
55
+ meta: {
56
+ count: number;
57
+ page: number;
58
+ pageSize: number;
59
+ pageTotal: number;
60
+ };
61
+ setPage: react.Dispatch<react.SetStateAction<number>>;
62
+ setPageSize: (pageSize: number) => void;
63
+ favorite: TFavorite;
64
+ onSort: (options?: TInitialSort | undefined) => void;
65
+ };
66
+
67
+ type MarketListProps = UseMarketListReturn & {
68
+ initialSort: TInitialSort;
69
+ type?: "all" | "new";
70
+ };
71
+ declare const MarketList: FC<MarketListProps>;
72
+
73
+ type UseFavoritesReturn = ReturnType<typeof useFavoritesScript>;
74
+ declare const useFavoritesScript: () => {
75
+ loading: boolean;
76
+ dataSource: any[];
77
+ meta: {
78
+ count: number;
79
+ page: number;
80
+ pageSize: number;
81
+ pageTotal: number;
82
+ };
83
+ setPage: react.Dispatch<react.SetStateAction<number>>;
84
+ setPageSize: (pageSize: number) => void;
85
+ favorite: TFavorite;
86
+ onSort: (options?: TInitialSort | undefined) => void;
87
+ };
88
+
89
+ type FavoritesProps = {} & UseFavoritesReturn;
90
+ declare const Favorites: FC<FavoritesProps>;
91
+
92
+ declare const FavoritesWidget: React.FC;
93
+
94
+ declare const MarketsDataListWidget: () => react_jsx_runtime.JSX.Element;
95
+
96
+ type MarketsDataListProps = UseMarketsDataListScript;
97
+ declare const MarketsDataList: React.FC<MarketsDataListProps>;
98
+
99
+ type TabName = "favorites" | "all" | "new";
100
+ type UseMarketsDataListScript = ReturnType<typeof useMarketsDataListScript>;
101
+ declare function useMarketsDataListScript(): {
102
+ activeTab: TabName;
103
+ onTabChange: (value: string) => void;
104
+ };
105
+
106
+ type MarketsProviderProps = {
107
+ onSymbolChange?: (symbol: API.Symbol) => void;
108
+ };
109
+ declare const MarketsProvider: FC<PropsWithChildren<MarketsProviderProps>>;
110
+
111
+ type MarketsHomePageProps = MarketsProviderProps & {
112
+ className?: string;
113
+ };
114
+ declare const MarketsHomePage: FC<MarketsHomePageProps>;
115
+
116
+ export { Favorites, FavoritesWidget, MarketList, MarketListWidget, MarketsDataList, MarketsDataListWidget, MarketsHeader, MarketsHeaderWidget, MarketsHomePage, MarketsProvider, useFavoritesScript, useMarketListScript, useMarketsDataListScript, useMarketsHeaderScript };
@@ -0,0 +1,116 @@
1
+ import * as react from 'react';
2
+ import { FC, PropsWithChildren } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+ import { FavoriteTab, useMarkets } from '@orderly.network/hooks';
5
+ import { SortOrder } from '@orderly.network/ui';
6
+ import { API } from '@orderly.network/types';
7
+
8
+ type TEmblaApi = {
9
+ scrollPrev: (jump?: boolean) => void;
10
+ scrollNext: (jump?: boolean) => void;
11
+ };
12
+ type HeaderReturns = ReturnType<typeof useMarketsHeaderScript>;
13
+ declare const useMarketsHeaderScript: () => {
14
+ markets: any[];
15
+ news: any[];
16
+ gainers: any[];
17
+ losers: any[];
18
+ total24Amount: number;
19
+ totalOpenInterest: number;
20
+ tvl: number | undefined;
21
+ scrollIndex: number;
22
+ setScrollIndex: react.Dispatch<react.SetStateAction<number>>;
23
+ emblaRef: <ViewportElement extends HTMLElement>(instance: ViewportElement | null) => void;
24
+ emblaApi: TEmblaApi;
25
+ enableScroll: boolean;
26
+ };
27
+
28
+ /** -----------MarketsHeader start ------------ */
29
+ declare const MarketsHeader: FC<HeaderReturns>;
30
+
31
+ declare const MarketsHeaderWidget: () => react_jsx_runtime.JSX.Element;
32
+
33
+ type MarketsFavorite = ReturnType<typeof useMarkets>[1];
34
+ type TFavorite = MarketsFavorite & {
35
+ curTab: FavoriteTab;
36
+ setCurTab: (tab: FavoriteTab) => void;
37
+ };
38
+ type TInitialSort = {
39
+ sortKey: string;
40
+ sort: SortOrder;
41
+ };
42
+
43
+ type MarketListWidgetProps = {
44
+ type?: "all" | "new";
45
+ sortKey: string;
46
+ sortOrder: SortOrder;
47
+ };
48
+ declare const MarketListWidget: React.FC<MarketListWidgetProps>;
49
+
50
+ type UseMarketListScriptOptions = MarketListWidgetProps;
51
+ type UseMarketListReturn = ReturnType<typeof useMarketListScript>;
52
+ declare const useMarketListScript: (options: UseMarketListScriptOptions) => {
53
+ loading: boolean;
54
+ dataSource: any[];
55
+ meta: {
56
+ count: number;
57
+ page: number;
58
+ pageSize: number;
59
+ pageTotal: number;
60
+ };
61
+ setPage: react.Dispatch<react.SetStateAction<number>>;
62
+ setPageSize: (pageSize: number) => void;
63
+ favorite: TFavorite;
64
+ onSort: (options?: TInitialSort | undefined) => void;
65
+ };
66
+
67
+ type MarketListProps = UseMarketListReturn & {
68
+ initialSort: TInitialSort;
69
+ type?: "all" | "new";
70
+ };
71
+ declare const MarketList: FC<MarketListProps>;
72
+
73
+ type UseFavoritesReturn = ReturnType<typeof useFavoritesScript>;
74
+ declare const useFavoritesScript: () => {
75
+ loading: boolean;
76
+ dataSource: any[];
77
+ meta: {
78
+ count: number;
79
+ page: number;
80
+ pageSize: number;
81
+ pageTotal: number;
82
+ };
83
+ setPage: react.Dispatch<react.SetStateAction<number>>;
84
+ setPageSize: (pageSize: number) => void;
85
+ favorite: TFavorite;
86
+ onSort: (options?: TInitialSort | undefined) => void;
87
+ };
88
+
89
+ type FavoritesProps = {} & UseFavoritesReturn;
90
+ declare const Favorites: FC<FavoritesProps>;
91
+
92
+ declare const FavoritesWidget: React.FC;
93
+
94
+ declare const MarketsDataListWidget: () => react_jsx_runtime.JSX.Element;
95
+
96
+ type MarketsDataListProps = UseMarketsDataListScript;
97
+ declare const MarketsDataList: React.FC<MarketsDataListProps>;
98
+
99
+ type TabName = "favorites" | "all" | "new";
100
+ type UseMarketsDataListScript = ReturnType<typeof useMarketsDataListScript>;
101
+ declare function useMarketsDataListScript(): {
102
+ activeTab: TabName;
103
+ onTabChange: (value: string) => void;
104
+ };
105
+
106
+ type MarketsProviderProps = {
107
+ onSymbolChange?: (symbol: API.Symbol) => void;
108
+ };
109
+ declare const MarketsProvider: FC<PropsWithChildren<MarketsProviderProps>>;
110
+
111
+ type MarketsHomePageProps = MarketsProviderProps & {
112
+ className?: string;
113
+ };
114
+ declare const MarketsHomePage: FC<MarketsHomePageProps>;
115
+
116
+ export { Favorites, FavoritesWidget, MarketList, MarketListWidget, MarketsDataList, MarketsDataListWidget, MarketsHeader, MarketsHeaderWidget, MarketsHomePage, MarketsProvider, useFavoritesScript, useMarketListScript, useMarketsDataListScript, useMarketsHeaderScript };
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var ui = require('@orderly.network/ui');
5
+ var utils = require('@orderly.network/utils');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var dt = require('embla-carousel-react');
8
+ var hooks = require('@orderly.network/hooks');
9
+
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var dt__default = /*#__PURE__*/_interopDefault(dt);
13
+
14
+ var Ie=react.createContext({}),ue=e=>{let[o,a]=react.useState(""),t=react.useCallback(()=>{a("");},[]);return jsxRuntime.jsx(Ie.Provider,{value:{searchValue:o,onSearchValueChange:a,clearSearchValue:t,onSymbolChange:e.onSymbolChange},children:e.children})};function T(){return react.useContext(Ie)}var Ne=e=>jsxRuntime.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsxRuntime.jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"16",height:"16",children:jsxRuntime.jsx("path",{fill:"#D9D9D9",d:"M0 0h16v16H0z"})}),jsxRuntime.jsx("g",{mask:"url(#a)",children:jsxRuntime.jsx("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"})})]}),Ve=e=>jsxRuntime.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsxRuntime.jsx("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"})}),Le=e=>jsxRuntime.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsxRuntime.jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"16",height:"16",children:jsxRuntime.jsx("path",{fill:"#D9D9D9",d:"M0 0h16v16H0z"})}),jsxRuntime.jsx("g",{mask:"url(#a)",children:jsxRuntime.jsx("path",{d:"M7.333 8.667h-4V7.333h4v-4h1.333v4h4v1.334h-4v4H7.333z"})})]}),ze=e=>jsxRuntime.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsxRuntime.jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"12",height:"12",children:jsxRuntime.jsx("path",{fill:"#D9D9D9",d:"M0 0h12v12H0z"})}),jsxRuntime.jsx("g",{mask:"url(#a)",children:jsxRuntime.jsx("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"})})]}),Ae=e=>jsxRuntime.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsxRuntime.jsx("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"})}),J=e=>jsxRuntime.jsxs("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsxRuntime.jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"20",height:"21",children:jsxRuntime.jsx("path",{fill:"#D9D9D9",d:"M0 .5h20v20H0z"})}),jsxRuntime.jsx("g",{mask:"url(#a)",children:jsxRuntime.jsx("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"})})]}),W=e=>jsxRuntime.jsxs("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsxRuntime.jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"20",height:"21",children:jsxRuntime.jsx("path",{fill:"#D9D9D9",d:"M0 .5h20v20H0z"})}),jsxRuntime.jsx("g",{mask:"url(#a)",children:jsxRuntime.jsx("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"})})]}),Oe=e=>jsxRuntime.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsxRuntime.jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"18",height:"18",children:jsxRuntime.jsx("path",{fill:"#D9D9D9",d:"M0 0h18v18H0z"})}),jsxRuntime.jsx("g",{mask:"url(#a)",children:jsxRuntime.jsx("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"})})]}),Re=e=>jsxRuntime.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsxRuntime.jsx("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"})}),_e=e=>jsxRuntime.jsx("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsxRuntime.jsx("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"})}),Y=e=>jsxRuntime.jsx("svg",{width:"12",height:"13",viewBox:"0 0 12 13",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsxRuntime.jsx("path",{"fill-rule":"evenodd","clip-rule":"evenodd",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"})});var pe=e=>{let{emblaRef:o,emblaApi:a,scrollIndex:t,enableScroll:r,news:s,gainers:i,losers:u,total24Amount:d,totalOpenInterest:g,tvl:p}=e,n=ui.cn("oui-flex-[0_0_calc((100%_-_32px)_/_3)] 3xl:oui-flex-[0_0_calc((100%_-_48px)_/_4)] oui-min-w-0",r&&"oui-select-none oui-cursor-pointer");return jsxRuntime.jsxs("div",{id:"oui-markets-header",className:"oui-overflow-hidden",ref:r?o:void 0,children:[jsxRuntime.jsxs(ui.Flex,{width:"100%",gapX:4,mt:4,children:[jsxRuntime.jsx(st,{total24Amount:d,totalOpenInterest:g,tvl:p,className:n}),jsxRuntime.jsx(me,{data:s,title:jsxRuntime.jsx(ui.Text.gradient,{color:"brand",children:"New listings"}),className:n}),jsxRuntime.jsx(me,{data:i,title:jsxRuntime.jsx(ui.Text,{className:"oui-text-success-light",children:"Top gainers"}),className:n}),jsxRuntime.jsx(me,{data:u,title:jsxRuntime.jsx(ui.Text,{className:"oui-text-danger-light",children:"Top losers"}),className:n})]}),jsxRuntime.jsx("div",{className:"oui-mt-1 oui-mb-3 3xl:oui-mt-4 3xl:oui-mb-0",children:jsxRuntime.jsx(lt,{scrollIndex:t,scrollPrev:a?.scrollPrev,scrollNext:a?.scrollNext})})]})},st=e=>{let{total24Amount:o,totalOpenInterest:a,tvl:t}=e,r=react.useMemo(()=>[{label:jsxRuntime.jsxs(ui.Flex,{gapX:1,children:[jsxRuntime.jsx(Y,{})," 24h volume"]}),value:o},{label:"Open interest",value:a},{label:"Assets (TVL)",value:t}],[o,a,t]);return jsxRuntime.jsx(ui.Flex,{direction:"column",justify:"between",width:"100%",height:236,className:e.className,children:r?.map((s,i)=>jsxRuntime.jsx(nt,{...s},i))})},nt=e=>jsxRuntime.jsxs(ui.Box,{intensity:900,r:"lg",px:4,py:3,width:"100%",children:[jsxRuntime.jsx(ui.Text,{as:"div",intensity:36,size:"xs",weight:"semibold",children:e.label}),jsxRuntime.jsx(ui.Text.numeral,{size:"base",currency:"$",dp:0,rm:utils.Decimal.ROUND_DOWN,children:e.value})]}),me=e=>jsxRuntime.jsxs(ui.Box,{intensity:900,r:"lg",py:4,pb:2,height:236,className:e.className,children:[jsxRuntime.jsx(ui.Box,{px:4,children:jsxRuntime.jsx(ui.Text.gradient,{color:"brand",size:"sm",weight:"semibold",children:e.title})}),jsxRuntime.jsx(ui.Flex,{direction:"column",itemAlign:"start",mt:2,children:e.data?.map((o,a)=>jsxRuntime.jsx(it,{item:o},o.symbol))})]}),it=e=>{let{item:o}=e,{onSymbolChange:a}=T();return jsxRuntime.jsxs(ui.Flex,{width:"100%",gapX:3,py:2,px:4,className:ui.cn("hover:oui-bg-base-8 oui-cursor-pointer",e.className),onClick:()=>{a?.(o);},children:[jsxRuntime.jsx(ui.Flex,{width:"100%",gapX:1,children:jsxRuntime.jsx(ui.Text.formatted,{rule:"symbol",formatString:"base",size:"xs",weight:"semibold",showIcon:!0,children:o.symbol})}),jsxRuntime.jsx(ui.Flex,{width:"100%",justify:"end",children:jsxRuntime.jsx(ui.Text.numeral,{currency:"$",size:"xs",weight:"semibold",dp:o.quote_dp,children:o["24h_close"]})}),jsxRuntime.jsx(ui.Flex,{width:"100%",justify:"end",children:jsxRuntime.jsx(ui.Text.numeral,{rule:"percentages",coloring:!0,size:"xs",weight:"semibold",showIdentifier:!0,children:o.change})})]})},lt=e=>{let{scrollIndex:o,scrollPrev:a,scrollNext:t}=e;return jsxRuntime.jsx(ui.Flex,{gapX:1,justify:"center",className:"3xl:oui-hidden",children:[0,1].map(r=>jsxRuntime.jsx(ui.Box,{py:1,pl:r===0?1:0,pr:r===1?1:0,onClick:()=>{o===0&&r===1?t?.():o===1&&r===0&&a?.();},className:"oui-cursor-pointer",children:jsxRuntime.jsx(ui.Box,{width:8,height:4,r:"full",className:ui.cn("oui-transition-all oui-duration-300",o===r?"oui-bg-base-contrast-36 oui-w-4":"oui-bg-base-contrast-20")},r)},r))})};function j(e,o,a){let t=[],r=[];for(let s=0;s<e.length;s++)r.push(e[s]),((s+1)%o===0||s===e.length-1)&&(t.push(r),r=[]);return t[a-1]||[]}function U(e,o,a){let t=[...e||[]],r=s=>s==null;return o&&a&&t.sort((s,i)=>{let u=s[o],d=i[o];return r(u)?1:r(d)?-1:a==="desc"?d-u:u-d}),t}function ee(e,o){let[a,t]=react.useState(),[r,s]=react.useState(),i=react.useCallback(p=>{t(p?.sortKey),s(p?.sort);},[]),u=a||e,d=r||o,g=react.useCallback(p=>U(p,u,d),[u,d]);return {onSort:i,getSortedList:g,sortKey:u,sortOrder:d}}function te(e,o=""){let a=new RegExp(o,"i");return e?.filter(t=>a.test(t.symbol))}function He(){let[e,o]=react.useState(0),[a,t]=react.useState(0);return react.useEffect(()=>{o(window.innerWidth),t(window.innerHeight);let r=()=>{t(window.innerHeight),o(window.innerWidth);};return window?.addEventListener("resize",r),()=>{window?.removeEventListener("resize",r);}},[]),{width:e,height:a}}var ge=()=>{let[e,o]=react.useState(0),a=ft(),{width:t}=He(),[r,s]=dt__default.default({loop:!0,slidesToScroll:"auto"});return react.useEffect(()=>{s?.on("select",()=>{o(s?.selectedScrollSnap());});},[s]),{scrollIndex:e,setScrollIndex:o,emblaRef:r,emblaApi:s,enableScroll:t<1440,...a}};function ft(){let e=hooks.useSymbolsInfo(),{data:o}=hooks.useMarketsStream(),{data:a}=hooks.useQuery("/v1/public/balance/stats"),t=react.useMemo(()=>o?.map(n=>{let{open_interest:h=0,index_price:b=0}=n,k=e[n.symbol];return {...n,quote_dp:k("quote_dp"),created_time:k("created_time"),openInterest:new utils.Decimal(h||0).mul(b||0).toNumber()}})||[],[e,o]),r=react.useMemo(()=>U(t,"created_time","desc").slice(0,5),[t]),s=react.useMemo(()=>U(t,"change","desc").slice(0,5),[t]),i=react.useMemo(()=>U(t,"change","asc").slice(0,5),[t]),u=react.useMemo(()=>t?.reduce((p,n)=>p.add(n["24h_amount"]||0),new utils.Decimal(0))||new utils.Decimal(0),[t]),d=react.useMemo(()=>t?.reduce((p,n)=>p.add(n.openInterest||0),new utils.Decimal(0))||new utils.Decimal(0),[t]),g=react.useMemo(()=>{if(a){let{total_holding:p=0,total_unsettled_balance:n=0}=a;return new utils.Decimal(p).plus(n).toNumber()}},[a]);return {markets:t,news:r,gainers:s,losers:i,total24Amount:u.toNumber(),totalOpenInterest:d.toNumber(),tvl:g}}var he=()=>{let e=ge();return jsxRuntime.jsx(pe,{...e})};var xe=e=>{let[o,a]=react.useState(!0),{page:t,pageSize:r,setPage:s,setPageSize:i,parseMeta:u}=ui.usePagination(),[d,g]=hooks.useMarkets(hooks.MarketsType.ALL),{searchValue:p}=T(),{onSort:n,getSortedList:h,sortKey:b,sortOrder:k}=ee(e?.sortKey,e?.sortOrder),{totalData:C,pagedData:M}=react.useMemo(()=>{let P=h(d),m=te(P,p);return {totalData:m,pagedData:j(m,r,t)}},[d,r,t,h,p]),F=react.useMemo(()=>u({total:C?.length,current_page:t,records_per_page:r}),[d,t,r,C]);return react.useEffect(()=>{a(!1);},[d]),react.useEffect(()=>{s(1);},[r,p]),react.useEffect(()=>{e.type==="all"&&g.updateTabsSortState("all",b,k);},[b,k,g,e.type]),{loading:o,dataSource:M,meta:F,setPage:s,setPageSize:i,favorite:g,onSort:n}};function ve(){let[e,o]=react.useState("all"),{clearSearchValue:a}=T();return react.useEffect(()=>{a?.();},[e]),{activeTab:e,onTabChange:t=>o(t)}}function We(e){let{symbol:o}=e.row||{},{favorites:a,favoriteTabs:t,updateFavoriteTabs:r,updateSymbolFavoriteState:s}=e.favorite,[i,u]=react.useState(!1),[d,g]=react.useState(!1),[p,n]=react.useState(""),[h,b]=react.useState([]),k=()=>{u(!1);},C=()=>{g(!0);},M=()=>{g(!1);},F=()=>{n(""),M(),b([]);},P=()=>{let x={name:p||`WatchList_${t.length}`,id:Date.now()};r(x,{add:!0}),F();},m=(x,D)=>{b(D?h?.filter(v=>v.id!==x.id):[...h,x]);},y=()=>{s(e.row,h,!1),u(!1);};return react.useEffect(()=>{if(!i)return;let x=a?.find(D=>D.name===o);x?.tabs?.length&&b(x?.tabs);},[i,a,t,o]),react.useEffect(()=>{i||F();},[i]),{open:i,onOpenChange:u,inputVisible:d,selectedTabs:h,value:p,onValueChange:n,hide:k,hideInput:M,showInput:C,onCheck:m,addTab:P,confirm:y}}var ke=()=>{let{page:e,pageSize:o,setPage:a,setPageSize:t,parseMeta:r}=ui.usePagination(),[s,i]=hooks.useMarkets(hooks.MarketsType.FAVORITES),[u,d]=react.useState(!0),{favorites:g,favoriteTabs:p,getLastSelFavTab:n}=i,{searchValue:h}=T(),[b,k]=react.useState(n()||p[0]),{onSort:C,getSortedList:M}=ee(),F=react.useMemo(()=>{let x=g?.filter(D=>D.tabs?.findIndex(v=>v.id===b.id)!==-1)?.map(D=>{let v=s?.findIndex(le=>le.symbol===D.name);return v!==-1?s[v]:null})?.filter(D=>D);return te(x,h)},[s,b,g,h]),{totalData:P,pagedData:m}=react.useMemo(()=>{let x=M(F);return {totalData:x,pagedData:j(x,o,e)}},[F,o,e,M]),y=react.useMemo(()=>r({total:P?.length,current_page:e,records_per_page:o}),[s,e,o,P]);return react.useEffect(()=>{d(!1);},[g]),react.useEffect(()=>{a(1);},[o,h]),{loading:u,dataSource:m,meta:y,setPage:a,setPageSize:t,favorite:{...i,curTab:b,setCurTab:k},onSort:C}};function Ue(e){let{favorites:o,favoriteTabs:a,updateFavoriteTabs:t,updateSelectedFavoriteTab:r,updateFavorites:s,curTab:i,setCurTab:u}=e,[d,g]=react.useState(!1),[p,n]=react.useState(!1),[h,b]=react.useState(""),k=react.useRef(null),C=react.useRef(null),[M,F]=react.useState(50),P=v=>{n(!0),b(v.name),setTimeout(()=>{k.current?.focus(),k.current?.setSelectionRange(-1,-1);},0);},m=v=>{u(v),r(v);},y=()=>{t({...i,name:h},{update:!0}),n(!1),g(!1);},x=()=>{let v={name:`WatchList_${a.length}`,id:Date.now()};t(v,{add:!0}),u(v),r(v);},D=v=>{t(v,{delete:!0}),setTimeout(()=>{let le=o.map(Q=>({...Q,tabs:Q.tabs?.filter(Ye=>Ye.id!==v.id)}));s(le);let ce=a.filter(Q=>Q.id!==v.id),De=ce?.[ce?.length-1]||ce?.[0];u(De),r(De);},0);};return react.useEffect(()=>{if(h){let v=C.current?.getBoundingClientRect();F(Math.max((v?.width||0)+14,50));}},[h]),{open:d,setOpen:g,inputRef:k,inputWidth:M,spanRef:C,editing:p,value:h,onValueChange:b,onEdit:P,updateSelectedTab:m,updateCurTab:y,addTab:x,delTab:D}}var Se=e=>{let{dataSource:o,meta:a,setPage:t,setPageSize:r,favorite:s,onSort:i,loading:u}=e,{onSymbolChange:d}=T(),g=ae(s,!0);return jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx(Nt,{favorite:s}),jsxRuntime.jsx(ui.DataTable,{bordered:!0,classNames:{header:"oui-text-base-contrast-36",body:"oui-text-base-contrast-80 !oui-min-h-[187.5px]"},columns:g,dataSource:o,emptyView:jsxRuntime.jsxs(ui.Flex,{children:[jsxRuntime.jsx(ui.Text,{size:"xs",intensity:36,children:"Click on the"}),jsxRuntime.jsx(W,{className:"oui-text-base-contrast-36"}),jsxRuntime.jsx(ui.Text,{size:"xs",intensity:36,children:"icon next to a market to add it to your list."})]}),loading:u,onRow:(n,h)=>({className:ui.cn("group","oui-h-[55px] oui-border-line-4 oui-cursor-pointer"),"data-testid":`oui-testid-markets-favorites-tr-${n.symbol}`,onClick:()=>{d?.(n);}}),generatedRowKey:n=>n.symbol,onSort:i,children:jsxRuntime.jsx(ui.Pagination,{...a,onPageChange:t,onPageSizeChange:r})})]})},Nt=e=>{let{curTab:o,favoriteTabs:a}=e.favorite,{open:t,setOpen:r,inputRef:s,inputWidth:i,spanRef:u,editing:d,value:g,onValueChange:p,updateSelectedTab:n,updateCurTab:h,onEdit:b,addTab:k,delTab:C}=Ue(e.favorite),M=m=>{ui.modal.confirm({title:"Delete list",content:jsxRuntime.jsx(ui.Text,{size:"sm",children:`Are you sure you want to delete ${m.name}?`}),onOk(){return C(m),Promise.resolve()}});},F=m=>{m.key==="Enter"&&h();},P=(m,y)=>{let x;return d&&y?jsxRuntime.jsx(ui.Input,{ref:s,value:g,style:{"--oui-gradient-angle":"270deg",backgroundClip:"text",WebkitTextFillColor:"transparent",WebkitBackgroundClip:"text",width:i},onValueChange:p,onBlur:h,classNames:{root:ui.cn("oui-p-0 oui-h-[24px] oui-rounded oui-px-2","focus-visible:oui-outline-none focus-within:oui-outline-transparent",y&&"oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.12)_0%,rgba(38,254,254,0.12)_100%)]"),input:ui.cn("oui-text-sm oui-font-semibold oui-text-transparent","oui-gradient-brand oui-caret-[rgba(217,217,217,1)]")},onKeyUp:F}):(y?x=jsxRuntime.jsx(ui.Text.gradient,{color:"brand",angle:270,weight:"semibold",size:"sm",className:"oui-leading-[24px]",as:"div","data-testid":"oui-markets-favorite-tab-subTab",children:m.name}):x=jsxRuntime.jsx(ui.Text,{weight:"semibold",size:"sm",className:"oui-leading-[24px]",as:"div","data-testid":"oui-markets-favorite-tab-subTab",children:m.name}),jsxRuntime.jsx(ui.Box,{r:"base",px:2,height:24,className:ui.cn("oui-cursor-pointer oui-select-none",y?"oui-markets-favorites-active-tab-item":"oui-markets-favorites-tab-item",y?"oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.12)_0%,rgba(38,254,254,0.12)_100%)]":"oui-bg-line-6 oui-text-base-contrast-36 hover:oui-text-base-contrast"),onClick:()=>{n(m),y&&r(!0);},children:x}))};return jsxRuntime.jsxs(ui.Flex,{my:3,gapX:3,id:"oui-markets-favorites-tabs-container",className:"oui-overflow-hidden oui-overflow-x-auto oui-cursor-pointer ",children:[a?.map(m=>{let y=o.id===m.id;return jsxRuntime.jsx(ui.Tooltip,{open:y&&!d?t:!1,onOpenChange:x=>{y&&r(x);},content:jsxRuntime.jsxs(ui.Flex,{gapX:2,itemAlign:"center",px:2,py:1,children:[jsxRuntime.jsx(Ne,{className:"oui-text-base-contrast-36 hover:oui-text-base-contrast oui-cursor-pointer",onClick:()=>{b(m);}}),jsxRuntime.jsx(Ve,{className:"oui-text-base-contrast-36 hover:oui-text-base-contrast oui-cursor-pointer",onClick:()=>{M(m);}})]}),delayDuration:0,className:ui.cn("oui-bg-base-5"),arrow:{className:"oui-fill-base-5"},children:P(m,y)},m.id)}),jsxRuntime.jsx(ui.Flex,{className:"oui-bg-line-6 oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast",width:32,height:18,r:"base",justify:"center",itemAlign:"center",onClick:k,children:jsxRuntime.jsx(Le,{className:"oui-w-4 oui-h-4"})}),jsxRuntime.jsx(ui.Text,{size:"xs",ref:u,className:"oui-invisible",children:g})]})};var Te=()=>{let e=ke();return jsxRuntime.jsx(Se,{...e})};var Me=e=>{let{activeTab:o,onTabChange:a}=e,{searchValue:t,onSearchValueChange:r,clearSearchValue:s}=T();return jsxRuntime.jsx(ui.Box,{id:"oui-markets-list",intensity:900,p:6,r:"2xl",children:jsxRuntime.jsxs(ui.Tabs,{variant:"contained",size:"xl",value:o,onValueChange:a,trailing:jsxRuntime.jsx(ui.Input,{value:t,onValueChange:r,placeholder:"Search market",className:"oui-w-[240px] oui-my-1",size:"sm","data-testid":"oui-testid-markets-searchMarket-input",prefix:jsxRuntime.jsx(ui.Box,{pl:3,pr:1,children:jsxRuntime.jsx(Re,{className:"oui-text-base-contrast-36"})}),suffix:t&&jsxRuntime.jsx(ui.Box,{mr:2,children:jsxRuntime.jsx(ui.CloseCircleFillIcon,{size:14,className:"oui-text-base-contrast-36 oui-cursor-pointer",onClick:s})})}),children:[jsxRuntime.jsx(ui.TabPanel,{title:"Favorites",icon:jsxRuntime.jsx(J,{}),value:"favorites",testid:"oui-testid-markets-favorites-tab",children:jsxRuntime.jsx(Te,{})}),jsxRuntime.jsx(ui.TabPanel,{title:"All markets",icon:jsxRuntime.jsx(ze,{}),value:"all",testid:"oui-testid-markets-all-tab",children:jsxRuntime.jsx(se,{type:"all",sortKey:"24h_amount",sortOrder:"desc"})}),jsxRuntime.jsx(ui.TabPanel,{title:"New listings",icon:jsxRuntime.jsx(Ae,{}),value:"new",testid:"oui-testid-markets-newListings-tab",children:jsxRuntime.jsx(se,{type:"new",sortKey:"created_time",sortOrder:"desc"})})]})})},$e=e=>{let{symbol:o}=e.row||{},{favoriteTabs:a}=e.favorite,{open:t,onOpenChange:r,inputVisible:s,selectedTabs:i,value:u,onValueChange:d,hide:g,hideInput:p,showInput:n,onCheck:h,addTab:b,confirm:k}=We(e),C=()=>s?jsxRuntime.jsx(ui.Input,{autoFocus:!0,value:u,onValueChange:d,classNames:{root:"focus-visible:oui-outline-none focus-within:oui-outline-transparent"},suffix:jsxRuntime.jsxs(ui.Flex,{itemAlign:"center",gapX:2,mr:2,children:[jsxRuntime.jsx(ui.Text,{className:"oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer",onClick:b,children:"Add"}),jsxRuntime.jsx(ui.CloseCircleFillIcon,{size:20,className:"oui-text-base-contrast-20 hover:oui-text-base-contrast oui-cursor-pointer",onClick:p})]})}):jsxRuntime.jsxs(ui.Flex,{gapX:2,className:"oui-text-base-contrast-36 hover:oui-text-base-contrast",p:2,onClick:n,children:[jsxRuntime.jsx(Oe,{}),jsxRuntime.jsx(ui.Text,{size:"sm",children:"Add a new watchlist"})]}),M=jsxRuntime.jsxs(ui.Flex,{justify:"between",className:"oui-mt-3 oui-mb-[10px]",children:[jsxRuntime.jsxs(ui.Flex,{gapX:1,children:["Select lists for",jsxRuntime.jsx(ui.Text.formatted,{rule:"symbol",formatString:"base-type",size:"base",showIcon:!0,children:o})]}),jsxRuntime.jsx(ui.CloseIcon,{size:16,className:"oui-text-base-contrast oui-cursor-pointer",onClick:g})]}),F=jsxRuntime.jsx(ui.ScrollArea,{children:jsxRuntime.jsxs(ui.Box,{my:2,className:"oui-max-h-[200px]",children:[a?.map(m=>{let y=!!i.find(x=>x.id===m.id);return jsxRuntime.jsx(ui.Box,{className:"oui-cursor-pointer",children:jsxRuntime.jsxs(ui.Flex,{className:"oui-gap-x-[6px] hover:oui-bg-base-6",p:2,r:"md",onClick:()=>{h(m,y);},children:[y?jsxRuntime.jsx(ui.CheckedSquareFillIcon,{size:18,className:"oui-text-base-contrast-80"}):jsxRuntime.jsx(ui.CheckSquareEmptyIcon,{size:18,className:"oui-text-base-contrast-80"}),jsxRuntime.jsx(ui.Text,{intensity:54,"data-testid":`oui-markets-collection-menu-tabName-${m.name}`,children:m.name})]})},m.id)}),C()]})}),P=jsxRuntime.jsxs(ui.Flex,{gapX:3,mt:3,children:[jsxRuntime.jsx(ui.Button,{color:"gray",onClick:g,fullWidth:!0,className:"oui-text-sm",size:"md",children:"Cancel"},"secondary"),jsxRuntime.jsx(ui.Button,{onClick:k,fullWidth:!0,className:"oui-text-sm",size:"md","data-testid":"oui-testid-markets-colleciton-ment-confirm-btn",children:"Confirm"},"primary")]});return jsxRuntime.jsxs(ui.DropdownMenuRoot,{open:t,onOpenChange:r,children:[jsxRuntime.jsx(ui.DropdownMenuTrigger,{asChild:!0,children:e.children}),jsxRuntime.jsx(ui.DropdownMenuPortal,{children:jsxRuntime.jsx(ui.DropdownMenuContent,{onCloseAutoFocus:m=>m.preventDefault(),onClick:m=>m.stopPropagation(),align:"start",sideOffset:20,className:"oui-markets-favorite-dropdown-menu-content oui-bg-base-8",children:jsxRuntime.jsx(ui.Box,{px:5,pb:5,width:360,children:jsxRuntime.jsxs(ui.Text,{as:"div",size:"sm",weight:"semibold",children:[M,jsxRuntime.jsx(ui.Divider,{}),F,P]})})})})]})};var ae=(e,o=!1)=>react.useMemo(()=>[{title:jsxRuntime.jsx(ui.Flex,{width:"100%",height:"100%",justify:"center",itemAlign:"center",mr:3,children:jsxRuntime.jsx(W,{})}),dataIndex:"isFavorite",width:30,render:(t,r)=>{let i=jsxRuntime.jsx(ui.Flex,{width:"100%",height:"100%",mr:3,justify:"center",itemAlign:"center",onClick:o?u=>{e.updateSymbolFavoriteState(r,e.curTab,!0),u.stopPropagation();}:void 0,"data-testid":"oui-testid-markets-table-row-favorite-icon",children:t?jsxRuntime.jsx(J,{className:"oui-text-[rgba(255,154,46,1)]"}):jsxRuntime.jsx(W,{className:"oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]"})});return o?i:jsxRuntime.jsx($e,{row:r,favorite:e,children:i})}},{title:"Market",dataIndex:"symbol",width:90,render:t=>jsxRuntime.jsxs(ui.Flex,{gapX:1,children:[jsxRuntime.jsx(ui.TokenIcon,{symbol:t,size:"xs"}),jsxRuntime.jsx(ui.Text.formatted,{rule:"symbol",formatString:"base-type",size:"xs",weight:"semibold",children:t})]})},{title:"Price",dataIndex:"24h_close",width:100,align:"right",onSort:!0,render:(t,r)=>jsxRuntime.jsx(ui.Text.numeral,{dp:r.quote_dp||2,currency:"$",children:t})},{title:"24h change",dataIndex:"change",width:100,align:"right",onSort:!0,render:t=>jsxRuntime.jsx(ui.Text.numeral,{rule:"percentages",coloring:!0,rm:utils.Decimal.ROUND_DOWN,showIdentifier:!0,children:t})},{title:jsxRuntime.jsxs(ui.Flex,{gapX:1,children:[jsxRuntime.jsx(Y,{})," 24h volume"]}),dataIndex:"24h_amount",width:100,align:"right",onSort:!0,render:t=>jsxRuntime.jsx(ui.Text.numeral,{currency:"$",dp:0,rm:utils.Decimal.ROUND_DOWN,children:t})},{title:"Open interest",dataIndex:"openInterest",width:100,align:"right",onSort:!0,render:t=>jsxRuntime.jsx(ui.Text.numeral,{currency:"$",dp:0,rm:utils.Decimal.ROUND_DOWN,children:t})},{title:"8h funding",dataIndex:"8h_funding",width:100,align:"right",onSort:!0,render:t=>t===null?"--":jsxRuntime.jsx(ui.Text.numeral,{rule:"percentages",coloring:!0,dp:4,rm:utils.Decimal.ROUND_DOWN,showIdentifier:!0,children:t})},{title:"",dataIndex:"",width:40,render:(t,r)=>o?jsxRuntime.jsx(ui.Flex,{justify:"end",mr:4,children:jsxRuntime.jsx(ui.Tooltip,{content:"Move to top",align:"center",delayDuration:0,children:jsxRuntime.jsx(ui.Box,{className:"oui-hidden group-hover:oui-block oui-cursor-pointer",onClick:s=>{s.stopPropagation(),e.pinToTop(r);},"data-testid":"oui-markets-favorites-pinned-icon",children:jsxRuntime.jsx(_e,{className:"oui-text-base-contrast-20 hover:oui-text-base-contrast"})})})}):null}],[e,o]);var Fe=e=>{let{loading:o,dataSource:a,meta:t,setPage:r,setPageSize:s,favorite:i,onSort:u,initialSort:d,type:g}=e,{onSymbolChange:p}=T(),n=ae(i,!1);return jsxRuntime.jsx(ui.DataTable,{bordered:!0,classNames:{header:"oui-text-base-contrast-36",body:"oui-text-base-contrast-80"},columns:n,loading:o,dataSource:a,onRow:(h,b)=>({className:ui.cn("oui-h-[55px] oui-border-line-4 oui-cursor-pointer"),onClick:()=>{p?.(h);},"data-testid":`oui-testid-markets-${g==="new"?"newListing":"all"}-tr-${h.symbol}`}),generatedRowKey:h=>h.symbol,onSort:u,initialSort:d,children:jsxRuntime.jsx(ui.Pagination,{...t,onPageChange:r,onPageSizeChange:s})})};var se=e=>{let o=xe(e),a=e.type==="all"?o.favorite.tabSort?.all:void 0;return jsxRuntime.jsx(Fe,{...o,type:e.type,initialSort:{sortKey:a?.sortKey||e.sortKey,sort:a?.sortOrder||e.sortOrder}})};var Pe=()=>{let e=ve();return jsxRuntime.jsx(Me,{...e})};var to=e=>jsxRuntime.jsx(ue,{onSymbolChange:e.onSymbolChange,children:jsxRuntime.jsxs(ui.Box,{id:"oui-markets-home-page",className:ui.cn("oui-font-semibold",e.className),p:6,children:[jsxRuntime.jsx(ui.Text,{size:"2xl",weight:"semibold",children:"Markets"}),jsxRuntime.jsx(he,{}),jsxRuntime.jsx(Pe,{})]})});
15
+
16
+ exports.Favorites = Se;
17
+ exports.FavoritesWidget = Te;
18
+ exports.MarketList = Fe;
19
+ exports.MarketListWidget = se;
20
+ exports.MarketsDataList = Me;
21
+ exports.MarketsDataListWidget = Pe;
22
+ exports.MarketsHeader = pe;
23
+ exports.MarketsHeaderWidget = he;
24
+ exports.MarketsHomePage = to;
25
+ exports.MarketsProvider = ue;
26
+ exports.useFavoritesScript = ke;
27
+ exports.useMarketListScript = xe;
28
+ exports.useMarketsDataListScript = ve;
29
+ exports.useMarketsHeaderScript = ge;
30
+ //# sourceMappingURL=out.js.map
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pages/home/header/header.ui.tsx","../src/pages/home/provider.tsx","../src/icons.tsx","../src/pages/home/header/header.script.tsx","../src/utils.ts","../src/pages/home/header/widget.tsx","../src/pages/home/dataList/marketList/marketList.script.ts","../src/pages/home/dataList/marketList/marketList.ui.tsx","../src/pages/home/dataList/column.tsx","../src/pages/home/dataList/dataList.ui.tsx","../src/pages/home/dataList/dataList.script.ts","../src/pages/home/dataList/favorites/favorites.script.ts","../src/pages/home/dataList/favorites/favorites.ui.tsx","../src/pages/home/dataList/favorites/widget.tsx","../src/pages/home/dataList/marketList/widget.tsx","../src/pages/home/dataList/widget.tsx","../src/pages/home/page.tsx"],"names":["useMemo","Box","cn","Flex","Text","Decimal","createContext","useState","useContext","useCallback","jsx","MarketsContext","MarketsProvider","props","searchValue","setSearchValue","clearSearchValue","useMarketsContext","jsxs","EditIcon","TrashIcon","AddIcon","AllMarketsIcon","NewListingsIcon","FavoritesIcon","UnFavoritesIcon","CirclePlusIcon","SearchIcon","MoveToTopIcon","OrderlyIcon","MarketsHeader","emblaRef","emblaApi","scrollIndex","enableScroll","news","gainers","losers","total24Amount","totalOpenInterest","tvl","cls","BlockList","CardItem","ScrollIndicator","list","item","index","BlockItem","ListItem","onSymbolChange","scrollPrev","scrollNext","useEffect","useEmblaCarousel","useMarketsStream","useSymbolsInfo","useQuery","getPagedData","pageSize","pageIndex","pageData","rows","i","sortList","sortKey","sortOrder","sortedList","isEmpty","value","a","b","val1","val2","useSort","defaultSortKey","defaultSortOrder","key","setKey","order","setOrder","onSort","options","getSortedList","searchBySymbol","reg","useSize","width","setWidth","height","setHeight","handleResize","useMarketsHeaderScript","setScrollIndex","data","useDataSource","symbolsInfo","futures","balance","markets","open_interest","index_price","info","prevValue","curValue","total_holding","total_unsettled_balance","MarketsHeaderWidget","state","MarketsType","useMarkets","usePagination","useMarketListScript","loading","setLoading","page","setPage","setPageSize","parseMeta","favorite","totalData","pagedData","meta","DataTable","Pagination","TokenIcon","Tooltip","Button","CheckedSquareFillIcon","CheckSquareEmptyIcon","CloseCircleFillIcon","CloseIcon","Divider","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","Input","ScrollArea","TabPanel","Tabs","useMarketsDataListScript","activeTab","setActiveTab","useFavoritesDropdownMenuScript","symbol","favorites","favoriteTabs","updateFavoriteTabs","updateSymbolFavoriteState","open","setOpen","inputVisible","setInputVisible","setValue","selectedTabs","setSelectedTabs","hide","showInput","hideInput","clearState","addTab","newTab","onCheck","checked","tab","confirm","find","useRef","useFavoritesScript","getLastSelFavTab","curTab","setCurTab","filterData","filterList","fav","useFavoritesTabScript","updateSelectedFavoriteTab","updateFavorites","editing","setEditing","inputRef","spanRef","inputWidth","setInputWidth","onEdit","updateSelectedTab","updateCurTab","delTab","selectedTab","_favorites","tabs","rect","modal","Favorites","dataSource","columns","useDataListColumns","FavoritesTab","record","onValueChange","onDel","onKeyUp","e","renderContent","isActive","content","FavoritesWidget","MarketsDataList","onTabChange","onSearchValueChange","MarketListWidget","FavoritesDropdownMenu","onOpenChange","renderInput","header","footer","isFavoriteList","button","MarketList","initialSort","type","sortStore","MarketsDataListWidget","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 \"../provider\";\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 } = props;\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 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 />\n <CardItem\n data={gainers}\n title={<Text className=\"oui-text-success-light\">Top gainers</Text>}\n className={cls}\n />\n <CardItem\n data={losers}\n title={<Text className=\"oui-text-danger-light\">Top losers</Text>}\n className={cls}\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: \"Open interest\",\n value: totalOpenInterest,\n },\n {\n label: \"Assets (TVL)\",\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};\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 size=\"base\" currency=\"$\" dp={0} rm={Decimal.ROUND_DOWN}>\n {props.value!}\n </Text.numeral>\n </Box>\n );\n};\n\ntype CardItemProps = {\n data?: TListItem[];\n title: ReactNode;\n className?: string;\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} />\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};\n\nconst ListItem: React.FC<ListItemProps> = (props) => {\n const { item } = props;\n\n const { onSymbolChange } = useMarketsContext();\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 onSymbolChange?.(item as any);\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 searchValue?: string;\n onSearchValueChange?: (searchValue: string) => void;\n clearSearchValue?: () => void;\n} & MarketsProviderProps;\n\nexport const MarketsContext = createContext({} as MarketsContextState);\n\nexport type MarketsProviderProps = {\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 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, 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 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 fill=\"#D9D9D9\" 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 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 fill-rule=\"evenodd\"\n clip-rule=\"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","import { useEffect, useMemo, useState } from \"react\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n useMarketsStream,\n useSymbolsInfo,\n useQuery,\n} 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 symbolsInfo = useSymbolsInfo();\n const { data: futures } = useMarketsStream();\n const { data: balance } = useQuery(\"/v1/public/balance/stats\");\n\n const markets = useMemo(() => {\n const list = futures?.map((item: any) => {\n const { open_interest = 0, index_price = 0 } = item;\n const info = symbolsInfo[item.symbol];\n\n return {\n ...item,\n quote_dp: info(\"quote_dp\"),\n created_time: info(\"created_time\"),\n openInterest: new Decimal(open_interest || 0)\n .mul(index_price || 0)\n .toNumber(),\n };\n });\n return list || [];\n }, [symbolsInfo, futures]);\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) {\n const { total_holding = 0, total_unsettled_balance = 0 } = balance as any;\n return new Decimal(total_holding)\n .plus(total_unsettled_balance)\n .toNumber();\n }\n }, [balance]);\n\n return {\n markets,\n news,\n gainers,\n losers,\n total24Amount: total24Amount.toNumber(),\n totalOpenInterest: totalOpenInterest.toNumber(),\n tvl,\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(defaultSortKey?: string, defaultSortOrder?: SortOrder) {\n const [key, setKey] = useState<string>();\n const [order, setOrder] = useState<SortOrder>();\n\n const onSort = useCallback((options?: TInitialSort) => {\n setKey(options?.sortKey);\n setOrder(options?.sort);\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(list: any[], searchValue = \"\") {\n const reg = new RegExp(searchValue, \"i\");\n return list?.filter((item) => reg.test(item.symbol));\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 { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { MarketListWidgetProps } from \"./widget\";\nimport { getPagedData, searchBySymbol, useSort } from \"../../../../utils\";\nimport { TFavorite } from \"../../../../type\";\nimport { useMarketsContext } from \"../../provider\";\n\nexport type UseMarketListScriptOptions = MarketListWidgetProps;\nexport type UseMarketListReturn = ReturnType<typeof useMarketListScript>;\n\nexport const useMarketListScript = (options: UseMarketListScriptOptions) => {\n const [loading, setLoading] = useState(true);\n const { page, pageSize, setPage, setPageSize, parseMeta } = usePagination();\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 { totalData, pagedData } = useMemo(() => {\n const list = getSortedList(data);\n const totalData = searchBySymbol(list, searchValue);\n return {\n totalData,\n pagedData: getPagedData(totalData, pageSize, page),\n };\n }, [data, pageSize, page, getSortedList, searchValue]);\n\n const meta = useMemo(() => {\n return parseMeta({\n total: totalData?.length,\n current_page: page,\n records_per_page: pageSize,\n });\n }, [data, page, pageSize, totalData]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n useEffect(() => {\n // reset page when size change and search data\n setPage(1);\n }, [pageSize, 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, favorite, options.type]);\n\n return {\n loading,\n dataSource: pagedData,\n meta,\n setPage,\n setPageSize,\n favorite: favorite as TFavorite,\n onSort,\n };\n};\n","import { FC } from \"react\";\nimport { cn, DataTable, Pagination } from \"@orderly.network/ui\";\nimport { type UseMarketListReturn } from \"./marketList.script\";\nimport { useDataListColumns } from \"../column\";\nimport { TInitialSort } from \"../../../../type\";\nimport { useMarketsContext } from \"../../provider\";\n\ntype MarketListProps = UseMarketListReturn & {\n initialSort: TInitialSort;\n type?: \"all\" | \"new\";\n};\n\nexport const MarketList: FC<MarketListProps> = (props) => {\n const {\n loading,\n dataSource,\n meta,\n setPage,\n setPageSize,\n favorite,\n onSort,\n initialSort,\n type,\n } = props;\n\n const { onSymbolChange } = useMarketsContext();\n\n const columns = useDataListColumns(favorite, false);\n\n return (\n <DataTable\n bordered\n classNames={{\n header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80\",\n }}\n columns={columns}\n loading={loading}\n dataSource={dataSource}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[55px] oui-border-line-4 oui-cursor-pointer\"),\n onClick: () => {\n onSymbolChange?.(record);\n },\n \"data-testid\": `oui-testid-markets-${type === 'new' ? 'newListing' : 'all'}-tr-${record.symbol}`\n };\n }}\n generatedRowKey={(record) => record.symbol}\n onSort={onSort}\n initialSort={initialSort}\n >\n <Pagination\n {...meta}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n </DataTable>\n );\n};\n","import { MouseEventHandler, useMemo } from \"react\";\nimport {\n type Column,\n Flex,\n TokenIcon,\n Text,\n Box,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n FavoritesIcon,\n MoveToTopIcon,\n OrderlyIcon,\n UnFavoritesIcon,\n} from \"../../../icons\";\nimport { FavoritesDropdownMenu } from \"./dataList.ui\";\nimport { TFavorite } from \"../../../type\";\n\nexport const useDataListColumns = (\n favorite: TFavorite,\n isFavoriteList = false\n) => {\n const columns = useMemo<Column[]>(() => {\n return [\n {\n title: (\n <Flex\n width=\"100%\"\n height=\"100%\"\n justify=\"center\"\n itemAlign=\"center\"\n mr={3}\n >\n <UnFavoritesIcon />\n </Flex>\n ),\n dataIndex: \"isFavorite\",\n width: 30,\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(record, favorite.curTab, true);\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 <FavoritesDropdownMenu row={record} favorite={favorite}>\n {button}\n </FavoritesDropdownMenu>\n );\n },\n },\n {\n title: \"Market\",\n dataIndex: \"symbol\",\n width: 90,\n render: (value) => {\n return (\n <Flex gapX={1}>\n <TokenIcon symbol={value} size=\"xs\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"xs\"\n weight=\"semibold\"\n >\n {value}\n </Text.formatted>\n </Flex>\n );\n },\n },\n {\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: \"Open interest\",\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 title: \"\",\n dataIndex: \"\",\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 ];\n }, [favorite, isFavoriteList]);\n\n return columns;\n};\n","import { PropsWithChildren } from \"react\";\nimport {\n Box,\n Button,\n Card,\n CheckedSquareFillIcon,\n CheckSquareEmptyIcon,\n CloseCircleFillIcon,\n CloseIcon,\n Divider,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n Input,\n ScrollArea,\n TabPanel,\n Tabs,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n useFavoritesDropdownMenuScript,\n UseMarketsDataListScript,\n} from \"./dataList.script\";\nimport { FavoritesWidget } from \"./favorites\";\nimport { MarketListWidget } from \"./marketList\";\nimport {\n AllMarketsIcon,\n CirclePlusIcon,\n FavoritesIcon,\n NewListingsIcon,\n SearchIcon,\n} from \"../../../icons\";\nimport { TFavorite } from \"../../../type\";\nimport { useMarketsContext } from \"../provider\";\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 />\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 title=\"Favorites\" icon={<FavoritesIcon />} value=\"favorites\" testid=\"oui-testid-markets-favorites-tab\">\n <FavoritesWidget />\n </TabPanel>\n <TabPanel title=\"All markets\" icon={<AllMarketsIcon />} value=\"all\" testid=\"oui-testid-markets-all-tab\">\n <MarketListWidget type=\"all\" sortKey=\"24h_amount\" sortOrder=\"desc\" />\n </TabPanel>\n <TabPanel title=\"New listings\" icon={<NewListingsIcon />} value=\"new\" testid=\"oui-testid-markets-newListings-tab\">\n <MarketListWidget\n type=\"new\"\n sortKey=\"created_time\"\n sortOrder=\"desc\"\n />\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n\nexport type FavoritesDropdownMenuProps = PropsWithChildren<{\n row: any;\n favorite: TFavorite;\n}>;\n\nexport const FavoritesDropdownMenu: React.FC<FavoritesDropdownMenuProps> = (\n props\n) => {\n const { symbol } = props.row || {};\n const { favoriteTabs } = props.favorite;\n\n const {\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 } = useFavoritesDropdownMenuScript(props);\n\n const renderInput = () => {\n if (inputVisible) {\n return (\n <Input\n autoFocus\n value={value}\n onValueChange={onValueChange}\n classNames={{\n root: \"focus-visible:oui-outline-none focus-within:oui-outline-transparent\",\n }}\n suffix={\n <Flex itemAlign=\"center\" gapX={2} mr={2}>\n <Text\n className={\n \"oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer\"\n }\n onClick={addTab}\n >\n Add\n </Text>\n <CloseCircleFillIcon\n size={20}\n className=\"oui-text-base-contrast-20 hover:oui-text-base-contrast oui-cursor-pointer\"\n onClick={hideInput}\n />\n </Flex>\n }\n />\n );\n }\n\n return (\n <Flex\n gapX={2}\n className=\"oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n p={2}\n onClick={showInput}\n >\n <CirclePlusIcon />\n <Text size=\"sm\">Add a new watchlist</Text>\n </Flex>\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>\n <Box my={2} className=\"oui-max-h-[200px]\">\n {favoriteTabs?.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} data-testid={`oui-markets-collection-menu-tabName-${item.name}`}>{item.name}</Text>\n </Flex>\n </Box>\n );\n })}\n {renderInput()}\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 data-testid=\"oui-testid-markets-colleciton-ment-confirm-btn\"\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 sideOffset={20}\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 { type FavoritesDropdownMenuProps } from \"./dataList.ui\";\nimport { useMarketsContext } from \"../provider\";\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\nexport function useFavoritesDropdownMenuScript(\n props: FavoritesDropdownMenuProps\n) {\n const { symbol } = props.row || {};\n const {\n favorites,\n favoriteTabs,\n updateFavoriteTabs,\n updateSymbolFavoriteState,\n } = props.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 };\n\n const confirm = () => {\n // if tab is arrary, the del params is not work\n // if tab is empty array, will be delete, otherwise will be override\n updateSymbolFavoriteState(props.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 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 { useEffect, useMemo, useRef, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { getPagedData, searchBySymbol, useSort } from \"../../../../utils\";\nimport { TFavorite } from \"../../../../type\";\nimport { useMarketsContext } from \"../../provider\";\n\nexport type UseFavoritesReturn = ReturnType<typeof useFavoritesScript>;\n\nexport const useFavoritesScript = () => {\n const { page, pageSize, setPage, setPageSize, parseMeta } = usePagination();\n const [data, favorite] = useMarkets(MarketsType.FAVORITES);\n const [loading, setLoading] = useState(true);\n\n const { favorites, favoriteTabs, getLastSelFavTab } = favorite;\n\n const { searchValue } = useMarketsContext();\n\n const [curTab, setCurTab] = useState(getLastSelFavTab() || favoriteTabs[0]);\n\n const { onSort, getSortedList } = useSort();\n\n const filterData = useMemo(() => {\n const filterList = favorites\n ?.filter(\n (item) => item.tabs?.findIndex((tab) => tab.id === curTab.id) !== -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);\n }, [data, curTab, favorites, searchValue]);\n\n const { totalData, pagedData } = useMemo(() => {\n const totalData = getSortedList(filterData);\n return {\n totalData,\n pagedData: getPagedData(totalData, pageSize, page),\n };\n }, [filterData, pageSize, page, getSortedList]);\n\n const meta = useMemo(() => {\n return parseMeta({\n total: totalData?.length,\n current_page: page,\n records_per_page: pageSize,\n });\n }, [data, page, pageSize, totalData]);\n\n useEffect(() => {\n setLoading(false);\n }, [favorites]);\n\n useEffect(() => {\n // reset page when size change and search data\n setPage(1);\n }, [pageSize, searchValue]);\n\n return {\n loading,\n dataSource: pagedData,\n meta,\n setPage,\n setPageSize,\n favorite: {\n ...favorite,\n curTab,\n setCurTab,\n } as TFavorite,\n onSort,\n };\n};\n\nexport function useFavoritesTabScript(favorite: TFavorite) {\n const {\n favorites,\n favoriteTabs,\n updateFavoriteTabs,\n updateSelectedFavoriteTab,\n updateFavorites,\n curTab,\n setCurTab,\n } = favorite;\n\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState(false);\n const [value, setValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n const spanRef = useRef<HTMLSpanElement>(null);\n const [inputWidth, setInputWidth] = useState(50);\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 updateSelectedTab = (item: any) => {\n setCurTab(item);\n updateSelectedFavoriteTab(item);\n };\n\n const updateCurTab = () => {\n updateFavoriteTabs(\n {\n ...curTab,\n name: value,\n },\n { update: true }\n );\n setEditing(false);\n setOpen(false);\n };\n\n const addTab = () => {\n const newTab = {\n name: `WatchList_${favoriteTabs.length}`,\n id: Date.now(),\n };\n updateFavoriteTabs(newTab, { add: true });\n setCurTab(newTab);\n updateSelectedFavoriteTab(newTab);\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 setCurTab(tab);\n updateSelectedFavoriteTab(tab);\n }, 0);\n };\n\n useEffect(() => {\n if (value) {\n const rect = spanRef.current?.getBoundingClientRect();\n setInputWidth(Math.max((rect?.width || 0) + 14, 50));\n }\n }, [value]);\n\n return {\n open,\n setOpen,\n inputRef,\n inputWidth,\n spanRef,\n editing,\n value,\n onValueChange: setValue,\n onEdit,\n updateSelectedTab,\n updateCurTab,\n addTab,\n delTab,\n };\n}\n","import { FC, KeyboardEventHandler } from \"react\";\nimport {\n Box,\n cn,\n DataTable,\n Flex,\n Pagination,\n Text,\n Tooltip,\n Input,\n modal,\n} from \"@orderly.network/ui\";\nimport { FavoriteTab } from \"@orderly.network/hooks\";\nimport { useDataListColumns } from \"../column\";\nimport {\n EditIcon,\n TrashIcon,\n AddIcon,\n UnFavoritesIcon,\n} from \"../../../../icons\";\nimport { TFavorite } from \"../../../../type\";\nimport { UseFavoritesReturn, useFavoritesTabScript } from \"./favorites.script\";\nimport { useMarketsContext } from \"../../provider\";\nimport \"../../../../style/index.css\";\n\ntype FavoritesProps = {} & UseFavoritesReturn;\n\nexport const Favorites: FC<FavoritesProps> = (props) => {\n const { dataSource, meta, setPage, setPageSize, favorite, onSort, loading } =\n props;\n\n const { onSymbolChange } = useMarketsContext();\n\n const columns = useDataListColumns(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 <FavoritesTab favorite={favorite} />\n\n <DataTable\n bordered\n classNames={{\n header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80 !oui-min-h-[187.5px]\",\n }}\n columns={columns}\n dataSource={dataSource}\n emptyView={emptyView}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\n \"group\",\n \"oui-h-[55px] oui-border-line-4 oui-cursor-pointer\"\n ),\n \"data-testid\": `oui-testid-markets-favorites-tr-${record.symbol}`,\n onClick: () => {\n onSymbolChange?.(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n onSort={onSort}\n >\n <Pagination\n {...meta}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n </DataTable>\n </div>\n );\n};\n\ntype FavoritesTabProps = {\n favorite: TFavorite;\n};\n\nconst FavoritesTab: React.FC<FavoritesTabProps> = (props) => {\n const { curTab, favoriteTabs } = props.favorite;\n\n const {\n open,\n setOpen,\n inputRef,\n inputWidth,\n spanRef,\n editing,\n value,\n onValueChange,\n updateSelectedTab,\n updateCurTab,\n onEdit,\n addTab,\n delTab,\n } = useFavoritesTabScript(props.favorite);\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();\n }\n };\n\n const renderContent = (item: FavoriteTab, isActive: boolean) => {\n let content;\n if (editing && isActive) {\n return (\n <Input\n ref={inputRef}\n value={value}\n style={{\n // @ts-ignore\n \"--oui-gradient-angle\": \"270deg\",\n backgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n WebkitBackgroundClip: \"text\",\n width: inputWidth,\n }}\n onValueChange={onValueChange}\n onBlur={updateCurTab}\n classNames={{\n root: cn(\n \"oui-p-0 oui-h-[24px] oui-rounded oui-px-2\",\n \"focus-visible:oui-outline-none focus-within:oui-outline-transparent\",\n isActive &&\n \"oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.12)_0%,rgba(38,254,254,0.12)_100%)]\"\n ),\n input: cn(\n \"oui-text-sm oui-font-semibold oui-text-transparent\",\n \"oui-gradient-brand oui-caret-[rgba(217,217,217,1)]\"\n ),\n }}\n onKeyUp={onKeyUp}\n />\n );\n } else if (isActive) {\n content = (\n <Text.gradient\n color=\"brand\"\n angle={270}\n weight=\"semibold\"\n size=\"sm\"\n className=\"oui-leading-[24px]\"\n as=\"div\"\n data-testid=\"oui-markets-favorite-tab-subTab\"\n >\n {item.name}\n </Text.gradient>\n );\n } else {\n content = (\n <Text\n weight=\"semibold\"\n size=\"sm\"\n className=\"oui-leading-[24px]\"\n as=\"div\"\n data-testid=\"oui-markets-favorite-tab-subTab\"\n >\n {item.name}\n </Text>\n );\n }\n\n return (\n <Box\n r=\"base\"\n px={2}\n height={24}\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 ? \"oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.12)_0%,rgba(38,254,254,0.12)_100%)]\"\n : \"oui-bg-line-6 oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n )}\n onClick={() => {\n updateSelectedTab(item);\n if (isActive) {\n setOpen(true);\n }\n }}\n >\n {content}\n </Box>\n );\n };\n\n return (\n <Flex\n my={3}\n gapX={3}\n id=\"oui-markets-favorites-tabs-container\"\n className=\"oui-overflow-hidden oui-overflow-x-auto oui-cursor-pointer \"\n >\n {favoriteTabs?.map((item: any) => {\n const isActive = curTab.id === item.id;\n return (\n <Tooltip\n key={item.id}\n open={isActive && !editing ? open : false}\n onOpenChange={(open) => {\n if (isActive) {\n setOpen(open);\n }\n }}\n // @ts-ignore\n content={\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 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 <Flex\n className=\"oui-bg-line-6 oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n width={32}\n height={18}\n r=\"base\"\n justify=\"center\"\n itemAlign=\"center\"\n onClick={addTab}\n >\n <AddIcon className=\"oui-w-4 oui-h-4\" />\n </Flex>\n <Text size=\"xs\" ref={spanRef} className=\"oui-invisible\">\n {value}\n </Text>\n </Flex>\n );\n};\n","import { Favorites } from \"./favorites.ui\";\nimport { useFavoritesScript } from \"./favorites.script\";\n\nexport const FavoritesWidget: React.FC = () => {\n const state = useFavoritesScript();\n return <Favorites {...state} />;\n};\n","import { MarketList } from \"./marketList.ui\";\nimport { useMarketListScript } from \"./marketList.script\";\nimport { SortOrder } from \"@orderly.network/ui\";\n\nexport type MarketListWidgetProps = {\n type?: \"all\" | \"new\";\n sortKey: string;\n sortOrder: SortOrder;\n};\n\nexport const MarketListWidget: React.FC<MarketListWidgetProps> = (props) => {\n const state = useMarketListScript(props);\n\n // Only all markets store sort\n const sortStore =\n props.type === \"all\" ? state.favorite.tabSort?.all : undefined;\n\n return (\n <MarketList\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 { MarketsDataList } from \"./dataList.ui\";\nimport { useMarketsDataListScript } from \"./dataList.script\";\n\nexport const MarketsDataListWidget = () => {\n const state = useMarketsDataListScript();\n return <MarketsDataList {...state} />;\n};\n","import { FC } from \"react\";\nimport { Box, cn, Text } from \"@orderly.network/ui\";\nimport { MarketsDataListWidget } from \"./dataList\";\nimport { MarketsHeaderWidget } from \"./header/widget\";\nimport { MarketsProvider, MarketsProviderProps } from \"./provider\";\n\nexport type MarketsHomePageProps = MarketsProviderProps & {\n className?: string;\n};\n\nexport const MarketsHomePage: FC<MarketsHomePageProps> = (props) => {\n return (\n <MarketsProvider onSymbolChange={props.onSymbolChange}>\n <Box id=\"oui-markets-home-page\" className={cn('oui-font-semibold', props.className)} p={6}>\n <Text size=\"2xl\" weight=\"semibold\">\n Markets\n </Text>\n\n <MarketsHeaderWidget />\n\n <MarketsDataListWidget />\n </Box>\n </MarketsProvider>\n );\n};\n"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,12 @@
1
+ import { createContext, useState, useCallback, useMemo, useEffect, useContext, useRef } from 'react';
2
+ import { cn, Flex, Text, Box, usePagination, DataTable, Pagination, Tooltip, Tabs, Input, CloseCircleFillIcon, TabPanel, TokenIcon, modal, CloseIcon, ScrollArea, CheckedSquareFillIcon, CheckSquareEmptyIcon, Button, DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent, Divider } from '@orderly.network/ui';
3
+ import { Decimal } from '@orderly.network/utils';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+ import dt from 'embla-carousel-react';
6
+ import { useSymbolsInfo, useMarketsStream, useQuery, useMarkets, MarketsType } from '@orderly.network/hooks';
7
+
8
+ var Ie=createContext({}),ue=e=>{let[o,a]=useState(""),t=useCallback(()=>{a("");},[]);return jsx(Ie.Provider,{value:{searchValue:o,onSearchValueChange:a,clearSearchValue:t,onSymbolChange:e.onSymbolChange},children:e.children})};function T(){return useContext(Ie)}var Ne=e=>jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"16",height:"16",children:jsx("path",{fill:"#D9D9D9",d:"M0 0h16v16H0z"})}),jsx("g",{mask:"url(#a)",children:jsx("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"})})]}),Ve=e=>jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("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"})}),Le=e=>jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"16",height:"16",children:jsx("path",{fill:"#D9D9D9",d:"M0 0h16v16H0z"})}),jsx("g",{mask:"url(#a)",children:jsx("path",{d:"M7.333 8.667h-4V7.333h4v-4h1.333v4h4v1.334h-4v4H7.333z"})})]}),ze=e=>jsxs("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"12",height:"12",children:jsx("path",{fill:"#D9D9D9",d:"M0 0h12v12H0z"})}),jsx("g",{mask:"url(#a)",children:jsx("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"})})]}),Ae=e=>jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("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"})}),J=e=>jsxs("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"20",height:"21",children:jsx("path",{fill:"#D9D9D9",d:"M0 .5h20v20H0z"})}),jsx("g",{mask:"url(#a)",children:jsx("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"})})]}),W=e=>jsxs("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"20",height:"21",children:jsx("path",{fill:"#D9D9D9",d:"M0 .5h20v20H0z"})}),jsx("g",{mask:"url(#a)",children:jsx("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"})})]}),Oe=e=>jsxs("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:[jsx("mask",{id:"a",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"18",height:"18",children:jsx("path",{fill:"#D9D9D9",d:"M0 0h18v18H0z"})}),jsx("g",{mask:"url(#a)",children:jsx("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"})})]}),Re=e=>jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("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"})}),_e=e=>jsx("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("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"})}),Y=e=>jsx("svg",{width:"12",height:"13",viewBox:"0 0 12 13",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("path",{"fill-rule":"evenodd","clip-rule":"evenodd",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"})});var pe=e=>{let{emblaRef:o,emblaApi:a,scrollIndex:t,enableScroll:r,news:s,gainers:i,losers:u,total24Amount:d,totalOpenInterest:g,tvl:p}=e,n=cn("oui-flex-[0_0_calc((100%_-_32px)_/_3)] 3xl:oui-flex-[0_0_calc((100%_-_48px)_/_4)] oui-min-w-0",r&&"oui-select-none oui-cursor-pointer");return jsxs("div",{id:"oui-markets-header",className:"oui-overflow-hidden",ref:r?o:void 0,children:[jsxs(Flex,{width:"100%",gapX:4,mt:4,children:[jsx(st,{total24Amount:d,totalOpenInterest:g,tvl:p,className:n}),jsx(me,{data:s,title:jsx(Text.gradient,{color:"brand",children:"New listings"}),className:n}),jsx(me,{data:i,title:jsx(Text,{className:"oui-text-success-light",children:"Top gainers"}),className:n}),jsx(me,{data:u,title:jsx(Text,{className:"oui-text-danger-light",children:"Top losers"}),className:n})]}),jsx("div",{className:"oui-mt-1 oui-mb-3 3xl:oui-mt-4 3xl:oui-mb-0",children:jsx(lt,{scrollIndex:t,scrollPrev:a?.scrollPrev,scrollNext:a?.scrollNext})})]})},st=e=>{let{total24Amount:o,totalOpenInterest:a,tvl:t}=e,r=useMemo(()=>[{label:jsxs(Flex,{gapX:1,children:[jsx(Y,{})," 24h volume"]}),value:o},{label:"Open interest",value:a},{label:"Assets (TVL)",value:t}],[o,a,t]);return jsx(Flex,{direction:"column",justify:"between",width:"100%",height:236,className:e.className,children:r?.map((s,i)=>jsx(nt,{...s},i))})},nt=e=>jsxs(Box,{intensity:900,r:"lg",px:4,py:3,width:"100%",children:[jsx(Text,{as:"div",intensity:36,size:"xs",weight:"semibold",children:e.label}),jsx(Text.numeral,{size:"base",currency:"$",dp:0,rm:Decimal.ROUND_DOWN,children:e.value})]}),me=e=>jsxs(Box,{intensity:900,r:"lg",py:4,pb:2,height:236,className:e.className,children:[jsx(Box,{px:4,children:jsx(Text.gradient,{color:"brand",size:"sm",weight:"semibold",children:e.title})}),jsx(Flex,{direction:"column",itemAlign:"start",mt:2,children:e.data?.map((o,a)=>jsx(it,{item:o},o.symbol))})]}),it=e=>{let{item:o}=e,{onSymbolChange:a}=T();return jsxs(Flex,{width:"100%",gapX:3,py:2,px:4,className:cn("hover:oui-bg-base-8 oui-cursor-pointer",e.className),onClick:()=>{a?.(o);},children:[jsx(Flex,{width:"100%",gapX:1,children:jsx(Text.formatted,{rule:"symbol",formatString:"base",size:"xs",weight:"semibold",showIcon:!0,children:o.symbol})}),jsx(Flex,{width:"100%",justify:"end",children:jsx(Text.numeral,{currency:"$",size:"xs",weight:"semibold",dp:o.quote_dp,children:o["24h_close"]})}),jsx(Flex,{width:"100%",justify:"end",children:jsx(Text.numeral,{rule:"percentages",coloring:!0,size:"xs",weight:"semibold",showIdentifier:!0,children:o.change})})]})},lt=e=>{let{scrollIndex:o,scrollPrev:a,scrollNext:t}=e;return jsx(Flex,{gapX:1,justify:"center",className:"3xl:oui-hidden",children:[0,1].map(r=>jsx(Box,{py:1,pl:r===0?1:0,pr:r===1?1:0,onClick:()=>{o===0&&r===1?t?.():o===1&&r===0&&a?.();},className:"oui-cursor-pointer",children:jsx(Box,{width:8,height:4,r:"full",className:cn("oui-transition-all oui-duration-300",o===r?"oui-bg-base-contrast-36 oui-w-4":"oui-bg-base-contrast-20")},r)},r))})};function j(e,o,a){let t=[],r=[];for(let s=0;s<e.length;s++)r.push(e[s]),((s+1)%o===0||s===e.length-1)&&(t.push(r),r=[]);return t[a-1]||[]}function U(e,o,a){let t=[...e||[]],r=s=>s==null;return o&&a&&t.sort((s,i)=>{let u=s[o],d=i[o];return r(u)?1:r(d)?-1:a==="desc"?d-u:u-d}),t}function ee(e,o){let[a,t]=useState(),[r,s]=useState(),i=useCallback(p=>{t(p?.sortKey),s(p?.sort);},[]),u=a||e,d=r||o,g=useCallback(p=>U(p,u,d),[u,d]);return {onSort:i,getSortedList:g,sortKey:u,sortOrder:d}}function te(e,o=""){let a=new RegExp(o,"i");return e?.filter(t=>a.test(t.symbol))}function He(){let[e,o]=useState(0),[a,t]=useState(0);return useEffect(()=>{o(window.innerWidth),t(window.innerHeight);let r=()=>{t(window.innerHeight),o(window.innerWidth);};return window?.addEventListener("resize",r),()=>{window?.removeEventListener("resize",r);}},[]),{width:e,height:a}}var ge=()=>{let[e,o]=useState(0),a=ft(),{width:t}=He(),[r,s]=dt({loop:!0,slidesToScroll:"auto"});return useEffect(()=>{s?.on("select",()=>{o(s?.selectedScrollSnap());});},[s]),{scrollIndex:e,setScrollIndex:o,emblaRef:r,emblaApi:s,enableScroll:t<1440,...a}};function ft(){let e=useSymbolsInfo(),{data:o}=useMarketsStream(),{data:a}=useQuery("/v1/public/balance/stats"),t=useMemo(()=>o?.map(n=>{let{open_interest:h=0,index_price:b=0}=n,k=e[n.symbol];return {...n,quote_dp:k("quote_dp"),created_time:k("created_time"),openInterest:new Decimal(h||0).mul(b||0).toNumber()}})||[],[e,o]),r=useMemo(()=>U(t,"created_time","desc").slice(0,5),[t]),s=useMemo(()=>U(t,"change","desc").slice(0,5),[t]),i=useMemo(()=>U(t,"change","asc").slice(0,5),[t]),u=useMemo(()=>t?.reduce((p,n)=>p.add(n["24h_amount"]||0),new Decimal(0))||new Decimal(0),[t]),d=useMemo(()=>t?.reduce((p,n)=>p.add(n.openInterest||0),new Decimal(0))||new Decimal(0),[t]),g=useMemo(()=>{if(a){let{total_holding:p=0,total_unsettled_balance:n=0}=a;return new Decimal(p).plus(n).toNumber()}},[a]);return {markets:t,news:r,gainers:s,losers:i,total24Amount:u.toNumber(),totalOpenInterest:d.toNumber(),tvl:g}}var he=()=>{let e=ge();return jsx(pe,{...e})};var xe=e=>{let[o,a]=useState(!0),{page:t,pageSize:r,setPage:s,setPageSize:i,parseMeta:u}=usePagination(),[d,g]=useMarkets(MarketsType.ALL),{searchValue:p}=T(),{onSort:n,getSortedList:h,sortKey:b,sortOrder:k}=ee(e?.sortKey,e?.sortOrder),{totalData:C,pagedData:M}=useMemo(()=>{let P=h(d),m=te(P,p);return {totalData:m,pagedData:j(m,r,t)}},[d,r,t,h,p]),F=useMemo(()=>u({total:C?.length,current_page:t,records_per_page:r}),[d,t,r,C]);return useEffect(()=>{a(!1);},[d]),useEffect(()=>{s(1);},[r,p]),useEffect(()=>{e.type==="all"&&g.updateTabsSortState("all",b,k);},[b,k,g,e.type]),{loading:o,dataSource:M,meta:F,setPage:s,setPageSize:i,favorite:g,onSort:n}};function ve(){let[e,o]=useState("all"),{clearSearchValue:a}=T();return useEffect(()=>{a?.();},[e]),{activeTab:e,onTabChange:t=>o(t)}}function We(e){let{symbol:o}=e.row||{},{favorites:a,favoriteTabs:t,updateFavoriteTabs:r,updateSymbolFavoriteState:s}=e.favorite,[i,u]=useState(!1),[d,g]=useState(!1),[p,n]=useState(""),[h,b]=useState([]),k=()=>{u(!1);},C=()=>{g(!0);},M=()=>{g(!1);},F=()=>{n(""),M(),b([]);},P=()=>{let x={name:p||`WatchList_${t.length}`,id:Date.now()};r(x,{add:!0}),F();},m=(x,D)=>{b(D?h?.filter(v=>v.id!==x.id):[...h,x]);},y=()=>{s(e.row,h,!1),u(!1);};return useEffect(()=>{if(!i)return;let x=a?.find(D=>D.name===o);x?.tabs?.length&&b(x?.tabs);},[i,a,t,o]),useEffect(()=>{i||F();},[i]),{open:i,onOpenChange:u,inputVisible:d,selectedTabs:h,value:p,onValueChange:n,hide:k,hideInput:M,showInput:C,onCheck:m,addTab:P,confirm:y}}var ke=()=>{let{page:e,pageSize:o,setPage:a,setPageSize:t,parseMeta:r}=usePagination(),[s,i]=useMarkets(MarketsType.FAVORITES),[u,d]=useState(!0),{favorites:g,favoriteTabs:p,getLastSelFavTab:n}=i,{searchValue:h}=T(),[b,k]=useState(n()||p[0]),{onSort:C,getSortedList:M}=ee(),F=useMemo(()=>{let x=g?.filter(D=>D.tabs?.findIndex(v=>v.id===b.id)!==-1)?.map(D=>{let v=s?.findIndex(le=>le.symbol===D.name);return v!==-1?s[v]:null})?.filter(D=>D);return te(x,h)},[s,b,g,h]),{totalData:P,pagedData:m}=useMemo(()=>{let x=M(F);return {totalData:x,pagedData:j(x,o,e)}},[F,o,e,M]),y=useMemo(()=>r({total:P?.length,current_page:e,records_per_page:o}),[s,e,o,P]);return useEffect(()=>{d(!1);},[g]),useEffect(()=>{a(1);},[o,h]),{loading:u,dataSource:m,meta:y,setPage:a,setPageSize:t,favorite:{...i,curTab:b,setCurTab:k},onSort:C}};function Ue(e){let{favorites:o,favoriteTabs:a,updateFavoriteTabs:t,updateSelectedFavoriteTab:r,updateFavorites:s,curTab:i,setCurTab:u}=e,[d,g]=useState(!1),[p,n]=useState(!1),[h,b]=useState(""),k=useRef(null),C=useRef(null),[M,F]=useState(50),P=v=>{n(!0),b(v.name),setTimeout(()=>{k.current?.focus(),k.current?.setSelectionRange(-1,-1);},0);},m=v=>{u(v),r(v);},y=()=>{t({...i,name:h},{update:!0}),n(!1),g(!1);},x=()=>{let v={name:`WatchList_${a.length}`,id:Date.now()};t(v,{add:!0}),u(v),r(v);},D=v=>{t(v,{delete:!0}),setTimeout(()=>{let le=o.map(Q=>({...Q,tabs:Q.tabs?.filter(Ye=>Ye.id!==v.id)}));s(le);let ce=a.filter(Q=>Q.id!==v.id),De=ce?.[ce?.length-1]||ce?.[0];u(De),r(De);},0);};return useEffect(()=>{if(h){let v=C.current?.getBoundingClientRect();F(Math.max((v?.width||0)+14,50));}},[h]),{open:d,setOpen:g,inputRef:k,inputWidth:M,spanRef:C,editing:p,value:h,onValueChange:b,onEdit:P,updateSelectedTab:m,updateCurTab:y,addTab:x,delTab:D}}var Se=e=>{let{dataSource:o,meta:a,setPage:t,setPageSize:r,favorite:s,onSort:i,loading:u}=e,{onSymbolChange:d}=T(),g=ae(s,!0);return jsxs("div",{children:[jsx(Nt,{favorite:s}),jsx(DataTable,{bordered:!0,classNames:{header:"oui-text-base-contrast-36",body:"oui-text-base-contrast-80 !oui-min-h-[187.5px]"},columns:g,dataSource:o,emptyView:jsxs(Flex,{children:[jsx(Text,{size:"xs",intensity:36,children:"Click on the"}),jsx(W,{className:"oui-text-base-contrast-36"}),jsx(Text,{size:"xs",intensity:36,children:"icon next to a market to add it to your list."})]}),loading:u,onRow:(n,h)=>({className:cn("group","oui-h-[55px] oui-border-line-4 oui-cursor-pointer"),"data-testid":`oui-testid-markets-favorites-tr-${n.symbol}`,onClick:()=>{d?.(n);}}),generatedRowKey:n=>n.symbol,onSort:i,children:jsx(Pagination,{...a,onPageChange:t,onPageSizeChange:r})})]})},Nt=e=>{let{curTab:o,favoriteTabs:a}=e.favorite,{open:t,setOpen:r,inputRef:s,inputWidth:i,spanRef:u,editing:d,value:g,onValueChange:p,updateSelectedTab:n,updateCurTab:h,onEdit:b,addTab:k,delTab:C}=Ue(e.favorite),M=m=>{modal.confirm({title:"Delete list",content:jsx(Text,{size:"sm",children:`Are you sure you want to delete ${m.name}?`}),onOk(){return C(m),Promise.resolve()}});},F=m=>{m.key==="Enter"&&h();},P=(m,y)=>{let x;return d&&y?jsx(Input,{ref:s,value:g,style:{"--oui-gradient-angle":"270deg",backgroundClip:"text",WebkitTextFillColor:"transparent",WebkitBackgroundClip:"text",width:i},onValueChange:p,onBlur:h,classNames:{root:cn("oui-p-0 oui-h-[24px] oui-rounded oui-px-2","focus-visible:oui-outline-none focus-within:oui-outline-transparent",y&&"oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.12)_0%,rgba(38,254,254,0.12)_100%)]"),input:cn("oui-text-sm oui-font-semibold oui-text-transparent","oui-gradient-brand oui-caret-[rgba(217,217,217,1)]")},onKeyUp:F}):(y?x=jsx(Text.gradient,{color:"brand",angle:270,weight:"semibold",size:"sm",className:"oui-leading-[24px]",as:"div","data-testid":"oui-markets-favorite-tab-subTab",children:m.name}):x=jsx(Text,{weight:"semibold",size:"sm",className:"oui-leading-[24px]",as:"div","data-testid":"oui-markets-favorite-tab-subTab",children:m.name}),jsx(Box,{r:"base",px:2,height:24,className:cn("oui-cursor-pointer oui-select-none",y?"oui-markets-favorites-active-tab-item":"oui-markets-favorites-tab-item",y?"oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.12)_0%,rgba(38,254,254,0.12)_100%)]":"oui-bg-line-6 oui-text-base-contrast-36 hover:oui-text-base-contrast"),onClick:()=>{n(m),y&&r(!0);},children:x}))};return jsxs(Flex,{my:3,gapX:3,id:"oui-markets-favorites-tabs-container",className:"oui-overflow-hidden oui-overflow-x-auto oui-cursor-pointer ",children:[a?.map(m=>{let y=o.id===m.id;return jsx(Tooltip,{open:y&&!d?t:!1,onOpenChange:x=>{y&&r(x);},content:jsxs(Flex,{gapX:2,itemAlign:"center",px:2,py:1,children:[jsx(Ne,{className:"oui-text-base-contrast-36 hover:oui-text-base-contrast oui-cursor-pointer",onClick:()=>{b(m);}}),jsx(Ve,{className:"oui-text-base-contrast-36 hover:oui-text-base-contrast oui-cursor-pointer",onClick:()=>{M(m);}})]}),delayDuration:0,className:cn("oui-bg-base-5"),arrow:{className:"oui-fill-base-5"},children:P(m,y)},m.id)}),jsx(Flex,{className:"oui-bg-line-6 oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast",width:32,height:18,r:"base",justify:"center",itemAlign:"center",onClick:k,children:jsx(Le,{className:"oui-w-4 oui-h-4"})}),jsx(Text,{size:"xs",ref:u,className:"oui-invisible",children:g})]})};var Te=()=>{let e=ke();return jsx(Se,{...e})};var Me=e=>{let{activeTab:o,onTabChange:a}=e,{searchValue:t,onSearchValueChange:r,clearSearchValue:s}=T();return jsx(Box,{id:"oui-markets-list",intensity:900,p:6,r:"2xl",children:jsxs(Tabs,{variant:"contained",size:"xl",value:o,onValueChange:a,trailing:jsx(Input,{value:t,onValueChange:r,placeholder:"Search market",className:"oui-w-[240px] oui-my-1",size:"sm","data-testid":"oui-testid-markets-searchMarket-input",prefix:jsx(Box,{pl:3,pr:1,children:jsx(Re,{className:"oui-text-base-contrast-36"})}),suffix:t&&jsx(Box,{mr:2,children:jsx(CloseCircleFillIcon,{size:14,className:"oui-text-base-contrast-36 oui-cursor-pointer",onClick:s})})}),children:[jsx(TabPanel,{title:"Favorites",icon:jsx(J,{}),value:"favorites",testid:"oui-testid-markets-favorites-tab",children:jsx(Te,{})}),jsx(TabPanel,{title:"All markets",icon:jsx(ze,{}),value:"all",testid:"oui-testid-markets-all-tab",children:jsx(se,{type:"all",sortKey:"24h_amount",sortOrder:"desc"})}),jsx(TabPanel,{title:"New listings",icon:jsx(Ae,{}),value:"new",testid:"oui-testid-markets-newListings-tab",children:jsx(se,{type:"new",sortKey:"created_time",sortOrder:"desc"})})]})})},$e=e=>{let{symbol:o}=e.row||{},{favoriteTabs:a}=e.favorite,{open:t,onOpenChange:r,inputVisible:s,selectedTabs:i,value:u,onValueChange:d,hide:g,hideInput:p,showInput:n,onCheck:h,addTab:b,confirm:k}=We(e),C=()=>s?jsx(Input,{autoFocus:!0,value:u,onValueChange:d,classNames:{root:"focus-visible:oui-outline-none focus-within:oui-outline-transparent"},suffix:jsxs(Flex,{itemAlign:"center",gapX:2,mr:2,children:[jsx(Text,{className:"oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer",onClick:b,children:"Add"}),jsx(CloseCircleFillIcon,{size:20,className:"oui-text-base-contrast-20 hover:oui-text-base-contrast oui-cursor-pointer",onClick:p})]})}):jsxs(Flex,{gapX:2,className:"oui-text-base-contrast-36 hover:oui-text-base-contrast",p:2,onClick:n,children:[jsx(Oe,{}),jsx(Text,{size:"sm",children:"Add a new watchlist"})]}),M=jsxs(Flex,{justify:"between",className:"oui-mt-3 oui-mb-[10px]",children:[jsxs(Flex,{gapX:1,children:["Select lists for",jsx(Text.formatted,{rule:"symbol",formatString:"base-type",size:"base",showIcon:!0,children:o})]}),jsx(CloseIcon,{size:16,className:"oui-text-base-contrast oui-cursor-pointer",onClick:g})]}),F=jsx(ScrollArea,{children:jsxs(Box,{my:2,className:"oui-max-h-[200px]",children:[a?.map(m=>{let y=!!i.find(x=>x.id===m.id);return jsx(Box,{className:"oui-cursor-pointer",children:jsxs(Flex,{className:"oui-gap-x-[6px] hover:oui-bg-base-6",p:2,r:"md",onClick:()=>{h(m,y);},children:[y?jsx(CheckedSquareFillIcon,{size:18,className:"oui-text-base-contrast-80"}):jsx(CheckSquareEmptyIcon,{size:18,className:"oui-text-base-contrast-80"}),jsx(Text,{intensity:54,"data-testid":`oui-markets-collection-menu-tabName-${m.name}`,children:m.name})]})},m.id)}),C()]})}),P=jsxs(Flex,{gapX:3,mt:3,children:[jsx(Button,{color:"gray",onClick:g,fullWidth:!0,className:"oui-text-sm",size:"md",children:"Cancel"},"secondary"),jsx(Button,{onClick:k,fullWidth:!0,className:"oui-text-sm",size:"md","data-testid":"oui-testid-markets-colleciton-ment-confirm-btn",children:"Confirm"},"primary")]});return jsxs(DropdownMenuRoot,{open:t,onOpenChange:r,children:[jsx(DropdownMenuTrigger,{asChild:!0,children:e.children}),jsx(DropdownMenuPortal,{children:jsx(DropdownMenuContent,{onCloseAutoFocus:m=>m.preventDefault(),onClick:m=>m.stopPropagation(),align:"start",sideOffset:20,className:"oui-markets-favorite-dropdown-menu-content oui-bg-base-8",children:jsx(Box,{px:5,pb:5,width:360,children:jsxs(Text,{as:"div",size:"sm",weight:"semibold",children:[M,jsx(Divider,{}),F,P]})})})})]})};var ae=(e,o=!1)=>useMemo(()=>[{title:jsx(Flex,{width:"100%",height:"100%",justify:"center",itemAlign:"center",mr:3,children:jsx(W,{})}),dataIndex:"isFavorite",width:30,render:(t,r)=>{let i=jsx(Flex,{width:"100%",height:"100%",mr:3,justify:"center",itemAlign:"center",onClick:o?u=>{e.updateSymbolFavoriteState(r,e.curTab,!0),u.stopPropagation();}:void 0,"data-testid":"oui-testid-markets-table-row-favorite-icon",children:t?jsx(J,{className:"oui-text-[rgba(255,154,46,1)]"}):jsx(W,{className:"oui-text-base-contrast-36 hover:oui-text-[rgba(255,154,46,1)]"})});return o?i:jsx($e,{row:r,favorite:e,children:i})}},{title:"Market",dataIndex:"symbol",width:90,render:t=>jsxs(Flex,{gapX:1,children:[jsx(TokenIcon,{symbol:t,size:"xs"}),jsx(Text.formatted,{rule:"symbol",formatString:"base-type",size:"xs",weight:"semibold",children:t})]})},{title:"Price",dataIndex:"24h_close",width:100,align:"right",onSort:!0,render:(t,r)=>jsx(Text.numeral,{dp:r.quote_dp||2,currency:"$",children:t})},{title:"24h change",dataIndex:"change",width:100,align:"right",onSort:!0,render:t=>jsx(Text.numeral,{rule:"percentages",coloring:!0,rm:Decimal.ROUND_DOWN,showIdentifier:!0,children:t})},{title:jsxs(Flex,{gapX:1,children:[jsx(Y,{})," 24h volume"]}),dataIndex:"24h_amount",width:100,align:"right",onSort:!0,render:t=>jsx(Text.numeral,{currency:"$",dp:0,rm:Decimal.ROUND_DOWN,children:t})},{title:"Open interest",dataIndex:"openInterest",width:100,align:"right",onSort:!0,render:t=>jsx(Text.numeral,{currency:"$",dp:0,rm:Decimal.ROUND_DOWN,children:t})},{title:"8h funding",dataIndex:"8h_funding",width:100,align:"right",onSort:!0,render:t=>t===null?"--":jsx(Text.numeral,{rule:"percentages",coloring:!0,dp:4,rm:Decimal.ROUND_DOWN,showIdentifier:!0,children:t})},{title:"",dataIndex:"",width:40,render:(t,r)=>o?jsx(Flex,{justify:"end",mr:4,children:jsx(Tooltip,{content:"Move to top",align:"center",delayDuration:0,children:jsx(Box,{className:"oui-hidden group-hover:oui-block oui-cursor-pointer",onClick:s=>{s.stopPropagation(),e.pinToTop(r);},"data-testid":"oui-markets-favorites-pinned-icon",children:jsx(_e,{className:"oui-text-base-contrast-20 hover:oui-text-base-contrast"})})})}):null}],[e,o]);var Fe=e=>{let{loading:o,dataSource:a,meta:t,setPage:r,setPageSize:s,favorite:i,onSort:u,initialSort:d,type:g}=e,{onSymbolChange:p}=T(),n=ae(i,!1);return jsx(DataTable,{bordered:!0,classNames:{header:"oui-text-base-contrast-36",body:"oui-text-base-contrast-80"},columns:n,loading:o,dataSource:a,onRow:(h,b)=>({className:cn("oui-h-[55px] oui-border-line-4 oui-cursor-pointer"),onClick:()=>{p?.(h);},"data-testid":`oui-testid-markets-${g==="new"?"newListing":"all"}-tr-${h.symbol}`}),generatedRowKey:h=>h.symbol,onSort:u,initialSort:d,children:jsx(Pagination,{...t,onPageChange:r,onPageSizeChange:s})})};var se=e=>{let o=xe(e),a=e.type==="all"?o.favorite.tabSort?.all:void 0;return jsx(Fe,{...o,type:e.type,initialSort:{sortKey:a?.sortKey||e.sortKey,sort:a?.sortOrder||e.sortOrder}})};var Pe=()=>{let e=ve();return jsx(Me,{...e})};var to=e=>jsx(ue,{onSymbolChange:e.onSymbolChange,children:jsxs(Box,{id:"oui-markets-home-page",className:cn("oui-font-semibold",e.className),p:6,children:[jsx(Text,{size:"2xl",weight:"semibold",children:"Markets"}),jsx(he,{}),jsx(Pe,{})]})});
9
+
10
+ export { Se as Favorites, Te as FavoritesWidget, Fe as MarketList, se as MarketListWidget, Me as MarketsDataList, Pe as MarketsDataListWidget, pe as MarketsHeader, he as MarketsHeaderWidget, to as MarketsHomePage, ue as MarketsProvider, ke as useFavoritesScript, xe as useMarketListScript, ve as useMarketsDataListScript, ge as useMarketsHeaderScript };
11
+ //# sourceMappingURL=out.js.map
12
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pages/home/header/header.ui.tsx","../src/pages/home/provider.tsx","../src/icons.tsx","../src/pages/home/header/header.script.tsx","../src/utils.ts","../src/pages/home/header/widget.tsx","../src/pages/home/dataList/marketList/marketList.script.ts","../src/pages/home/dataList/marketList/marketList.ui.tsx","../src/pages/home/dataList/column.tsx","../src/pages/home/dataList/dataList.ui.tsx","../src/pages/home/dataList/dataList.script.ts","../src/pages/home/dataList/favorites/favorites.script.ts","../src/pages/home/dataList/favorites/favorites.ui.tsx","../src/pages/home/dataList/favorites/widget.tsx","../src/pages/home/dataList/marketList/widget.tsx","../src/pages/home/dataList/widget.tsx","../src/pages/home/page.tsx"],"names":["useMemo","Box","cn","Flex","Text","Decimal","createContext","useState","useContext","useCallback","jsx","MarketsContext","MarketsProvider","props","searchValue","setSearchValue","clearSearchValue","useMarketsContext","jsxs","EditIcon","TrashIcon","AddIcon","AllMarketsIcon","NewListingsIcon","FavoritesIcon","UnFavoritesIcon","CirclePlusIcon","SearchIcon","MoveToTopIcon","OrderlyIcon","MarketsHeader","emblaRef","emblaApi","scrollIndex","enableScroll","news","gainers","losers","total24Amount","totalOpenInterest","tvl","cls","BlockList","CardItem","ScrollIndicator","list","item","index","BlockItem","ListItem","onSymbolChange","scrollPrev","scrollNext","useEffect","useEmblaCarousel","useMarketsStream","useSymbolsInfo","useQuery","getPagedData","pageSize","pageIndex","pageData","rows","i","sortList","sortKey","sortOrder","sortedList","isEmpty","value","a","b","val1","val2","useSort","defaultSortKey","defaultSortOrder","key","setKey","order","setOrder","onSort","options","getSortedList","searchBySymbol","reg","useSize","width","setWidth","height","setHeight","handleResize","useMarketsHeaderScript","setScrollIndex","data","useDataSource","symbolsInfo","futures","balance","markets","open_interest","index_price","info","prevValue","curValue","total_holding","total_unsettled_balance","MarketsHeaderWidget","state","MarketsType","useMarkets","usePagination","useMarketListScript","loading","setLoading","page","setPage","setPageSize","parseMeta","favorite","totalData","pagedData","meta","DataTable","Pagination","TokenIcon","Tooltip","Button","CheckedSquareFillIcon","CheckSquareEmptyIcon","CloseCircleFillIcon","CloseIcon","Divider","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","Input","ScrollArea","TabPanel","Tabs","useMarketsDataListScript","activeTab","setActiveTab","useFavoritesDropdownMenuScript","symbol","favorites","favoriteTabs","updateFavoriteTabs","updateSymbolFavoriteState","open","setOpen","inputVisible","setInputVisible","setValue","selectedTabs","setSelectedTabs","hide","showInput","hideInput","clearState","addTab","newTab","onCheck","checked","tab","confirm","find","useRef","useFavoritesScript","getLastSelFavTab","curTab","setCurTab","filterData","filterList","fav","useFavoritesTabScript","updateSelectedFavoriteTab","updateFavorites","editing","setEditing","inputRef","spanRef","inputWidth","setInputWidth","onEdit","updateSelectedTab","updateCurTab","delTab","selectedTab","_favorites","tabs","rect","modal","Favorites","dataSource","columns","useDataListColumns","FavoritesTab","record","onValueChange","onDel","onKeyUp","e","renderContent","isActive","content","FavoritesWidget","MarketsDataList","onTabChange","onSearchValueChange","MarketListWidget","FavoritesDropdownMenu","onOpenChange","renderInput","header","footer","isFavoriteList","button","MarketList","initialSort","type","sortStore","MarketsDataListWidget","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 \"../provider\";\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 } = props;\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 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 />\n <CardItem\n data={gainers}\n title={<Text className=\"oui-text-success-light\">Top gainers</Text>}\n className={cls}\n />\n <CardItem\n data={losers}\n title={<Text className=\"oui-text-danger-light\">Top losers</Text>}\n className={cls}\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: \"Open interest\",\n value: totalOpenInterest,\n },\n {\n label: \"Assets (TVL)\",\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};\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 size=\"base\" currency=\"$\" dp={0} rm={Decimal.ROUND_DOWN}>\n {props.value!}\n </Text.numeral>\n </Box>\n );\n};\n\ntype CardItemProps = {\n data?: TListItem[];\n title: ReactNode;\n className?: string;\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} />\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};\n\nconst ListItem: React.FC<ListItemProps> = (props) => {\n const { item } = props;\n\n const { onSymbolChange } = useMarketsContext();\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 onSymbolChange?.(item as any);\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 searchValue?: string;\n onSearchValueChange?: (searchValue: string) => void;\n clearSearchValue?: () => void;\n} & MarketsProviderProps;\n\nexport const MarketsContext = createContext({} as MarketsContextState);\n\nexport type MarketsProviderProps = {\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 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, 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 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 fill=\"#D9D9D9\" 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 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 fill-rule=\"evenodd\"\n clip-rule=\"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","import { useEffect, useMemo, useState } from \"react\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n useMarketsStream,\n useSymbolsInfo,\n useQuery,\n} 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 symbolsInfo = useSymbolsInfo();\n const { data: futures } = useMarketsStream();\n const { data: balance } = useQuery(\"/v1/public/balance/stats\");\n\n const markets = useMemo(() => {\n const list = futures?.map((item: any) => {\n const { open_interest = 0, index_price = 0 } = item;\n const info = symbolsInfo[item.symbol];\n\n return {\n ...item,\n quote_dp: info(\"quote_dp\"),\n created_time: info(\"created_time\"),\n openInterest: new Decimal(open_interest || 0)\n .mul(index_price || 0)\n .toNumber(),\n };\n });\n return list || [];\n }, [symbolsInfo, futures]);\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) {\n const { total_holding = 0, total_unsettled_balance = 0 } = balance as any;\n return new Decimal(total_holding)\n .plus(total_unsettled_balance)\n .toNumber();\n }\n }, [balance]);\n\n return {\n markets,\n news,\n gainers,\n losers,\n total24Amount: total24Amount.toNumber(),\n totalOpenInterest: totalOpenInterest.toNumber(),\n tvl,\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(defaultSortKey?: string, defaultSortOrder?: SortOrder) {\n const [key, setKey] = useState<string>();\n const [order, setOrder] = useState<SortOrder>();\n\n const onSort = useCallback((options?: TInitialSort) => {\n setKey(options?.sortKey);\n setOrder(options?.sort);\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(list: any[], searchValue = \"\") {\n const reg = new RegExp(searchValue, \"i\");\n return list?.filter((item) => reg.test(item.symbol));\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 { useEffect, useMemo, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { MarketListWidgetProps } from \"./widget\";\nimport { getPagedData, searchBySymbol, useSort } from \"../../../../utils\";\nimport { TFavorite } from \"../../../../type\";\nimport { useMarketsContext } from \"../../provider\";\n\nexport type UseMarketListScriptOptions = MarketListWidgetProps;\nexport type UseMarketListReturn = ReturnType<typeof useMarketListScript>;\n\nexport const useMarketListScript = (options: UseMarketListScriptOptions) => {\n const [loading, setLoading] = useState(true);\n const { page, pageSize, setPage, setPageSize, parseMeta } = usePagination();\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 { totalData, pagedData } = useMemo(() => {\n const list = getSortedList(data);\n const totalData = searchBySymbol(list, searchValue);\n return {\n totalData,\n pagedData: getPagedData(totalData, pageSize, page),\n };\n }, [data, pageSize, page, getSortedList, searchValue]);\n\n const meta = useMemo(() => {\n return parseMeta({\n total: totalData?.length,\n current_page: page,\n records_per_page: pageSize,\n });\n }, [data, page, pageSize, totalData]);\n\n useEffect(() => {\n setLoading(false);\n }, [data]);\n\n useEffect(() => {\n // reset page when size change and search data\n setPage(1);\n }, [pageSize, 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, favorite, options.type]);\n\n return {\n loading,\n dataSource: pagedData,\n meta,\n setPage,\n setPageSize,\n favorite: favorite as TFavorite,\n onSort,\n };\n};\n","import { FC } from \"react\";\nimport { cn, DataTable, Pagination } from \"@orderly.network/ui\";\nimport { type UseMarketListReturn } from \"./marketList.script\";\nimport { useDataListColumns } from \"../column\";\nimport { TInitialSort } from \"../../../../type\";\nimport { useMarketsContext } from \"../../provider\";\n\ntype MarketListProps = UseMarketListReturn & {\n initialSort: TInitialSort;\n type?: \"all\" | \"new\";\n};\n\nexport const MarketList: FC<MarketListProps> = (props) => {\n const {\n loading,\n dataSource,\n meta,\n setPage,\n setPageSize,\n favorite,\n onSort,\n initialSort,\n type,\n } = props;\n\n const { onSymbolChange } = useMarketsContext();\n\n const columns = useDataListColumns(favorite, false);\n\n return (\n <DataTable\n bordered\n classNames={{\n header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80\",\n }}\n columns={columns}\n loading={loading}\n dataSource={dataSource}\n onRow={(record, index) => {\n return {\n className: cn(\"oui-h-[55px] oui-border-line-4 oui-cursor-pointer\"),\n onClick: () => {\n onSymbolChange?.(record);\n },\n \"data-testid\": `oui-testid-markets-${type === 'new' ? 'newListing' : 'all'}-tr-${record.symbol}`\n };\n }}\n generatedRowKey={(record) => record.symbol}\n onSort={onSort}\n initialSort={initialSort}\n >\n <Pagination\n {...meta}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n </DataTable>\n );\n};\n","import { MouseEventHandler, useMemo } from \"react\";\nimport {\n type Column,\n Flex,\n TokenIcon,\n Text,\n Box,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n FavoritesIcon,\n MoveToTopIcon,\n OrderlyIcon,\n UnFavoritesIcon,\n} from \"../../../icons\";\nimport { FavoritesDropdownMenu } from \"./dataList.ui\";\nimport { TFavorite } from \"../../../type\";\n\nexport const useDataListColumns = (\n favorite: TFavorite,\n isFavoriteList = false\n) => {\n const columns = useMemo<Column[]>(() => {\n return [\n {\n title: (\n <Flex\n width=\"100%\"\n height=\"100%\"\n justify=\"center\"\n itemAlign=\"center\"\n mr={3}\n >\n <UnFavoritesIcon />\n </Flex>\n ),\n dataIndex: \"isFavorite\",\n width: 30,\n render: (value, record) => {\n const onDelSymbol: MouseEventHandler = (e) => {\n favorite.updateSymbolFavoriteState(record, favorite.curTab, true);\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 <FavoritesDropdownMenu row={record} favorite={favorite}>\n {button}\n </FavoritesDropdownMenu>\n );\n },\n },\n {\n title: \"Market\",\n dataIndex: \"symbol\",\n width: 90,\n render: (value) => {\n return (\n <Flex gapX={1}>\n <TokenIcon symbol={value} size=\"xs\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"xs\"\n weight=\"semibold\"\n >\n {value}\n </Text.formatted>\n </Flex>\n );\n },\n },\n {\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: \"Open interest\",\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 title: \"\",\n dataIndex: \"\",\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 ];\n }, [favorite, isFavoriteList]);\n\n return columns;\n};\n","import { PropsWithChildren } from \"react\";\nimport {\n Box,\n Button,\n Card,\n CheckedSquareFillIcon,\n CheckSquareEmptyIcon,\n CloseCircleFillIcon,\n CloseIcon,\n Divider,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n Input,\n ScrollArea,\n TabPanel,\n Tabs,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n useFavoritesDropdownMenuScript,\n UseMarketsDataListScript,\n} from \"./dataList.script\";\nimport { FavoritesWidget } from \"./favorites\";\nimport { MarketListWidget } from \"./marketList\";\nimport {\n AllMarketsIcon,\n CirclePlusIcon,\n FavoritesIcon,\n NewListingsIcon,\n SearchIcon,\n} from \"../../../icons\";\nimport { TFavorite } from \"../../../type\";\nimport { useMarketsContext } from \"../provider\";\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 />\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 title=\"Favorites\" icon={<FavoritesIcon />} value=\"favorites\" testid=\"oui-testid-markets-favorites-tab\">\n <FavoritesWidget />\n </TabPanel>\n <TabPanel title=\"All markets\" icon={<AllMarketsIcon />} value=\"all\" testid=\"oui-testid-markets-all-tab\">\n <MarketListWidget type=\"all\" sortKey=\"24h_amount\" sortOrder=\"desc\" />\n </TabPanel>\n <TabPanel title=\"New listings\" icon={<NewListingsIcon />} value=\"new\" testid=\"oui-testid-markets-newListings-tab\">\n <MarketListWidget\n type=\"new\"\n sortKey=\"created_time\"\n sortOrder=\"desc\"\n />\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n\nexport type FavoritesDropdownMenuProps = PropsWithChildren<{\n row: any;\n favorite: TFavorite;\n}>;\n\nexport const FavoritesDropdownMenu: React.FC<FavoritesDropdownMenuProps> = (\n props\n) => {\n const { symbol } = props.row || {};\n const { favoriteTabs } = props.favorite;\n\n const {\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 } = useFavoritesDropdownMenuScript(props);\n\n const renderInput = () => {\n if (inputVisible) {\n return (\n <Input\n autoFocus\n value={value}\n onValueChange={onValueChange}\n classNames={{\n root: \"focus-visible:oui-outline-none focus-within:oui-outline-transparent\",\n }}\n suffix={\n <Flex itemAlign=\"center\" gapX={2} mr={2}>\n <Text\n className={\n \"oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer\"\n }\n onClick={addTab}\n >\n Add\n </Text>\n <CloseCircleFillIcon\n size={20}\n className=\"oui-text-base-contrast-20 hover:oui-text-base-contrast oui-cursor-pointer\"\n onClick={hideInput}\n />\n </Flex>\n }\n />\n );\n }\n\n return (\n <Flex\n gapX={2}\n className=\"oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n p={2}\n onClick={showInput}\n >\n <CirclePlusIcon />\n <Text size=\"sm\">Add a new watchlist</Text>\n </Flex>\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>\n <Box my={2} className=\"oui-max-h-[200px]\">\n {favoriteTabs?.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} data-testid={`oui-markets-collection-menu-tabName-${item.name}`}>{item.name}</Text>\n </Flex>\n </Box>\n );\n })}\n {renderInput()}\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 data-testid=\"oui-testid-markets-colleciton-ment-confirm-btn\"\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 sideOffset={20}\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 { type FavoritesDropdownMenuProps } from \"./dataList.ui\";\nimport { useMarketsContext } from \"../provider\";\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\nexport function useFavoritesDropdownMenuScript(\n props: FavoritesDropdownMenuProps\n) {\n const { symbol } = props.row || {};\n const {\n favorites,\n favoriteTabs,\n updateFavoriteTabs,\n updateSymbolFavoriteState,\n } = props.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 };\n\n const confirm = () => {\n // if tab is arrary, the del params is not work\n // if tab is empty array, will be delete, otherwise will be override\n updateSymbolFavoriteState(props.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 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 { useEffect, useMemo, useRef, useState } from \"react\";\nimport { MarketsType, useMarkets } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { getPagedData, searchBySymbol, useSort } from \"../../../../utils\";\nimport { TFavorite } from \"../../../../type\";\nimport { useMarketsContext } from \"../../provider\";\n\nexport type UseFavoritesReturn = ReturnType<typeof useFavoritesScript>;\n\nexport const useFavoritesScript = () => {\n const { page, pageSize, setPage, setPageSize, parseMeta } = usePagination();\n const [data, favorite] = useMarkets(MarketsType.FAVORITES);\n const [loading, setLoading] = useState(true);\n\n const { favorites, favoriteTabs, getLastSelFavTab } = favorite;\n\n const { searchValue } = useMarketsContext();\n\n const [curTab, setCurTab] = useState(getLastSelFavTab() || favoriteTabs[0]);\n\n const { onSort, getSortedList } = useSort();\n\n const filterData = useMemo(() => {\n const filterList = favorites\n ?.filter(\n (item) => item.tabs?.findIndex((tab) => tab.id === curTab.id) !== -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);\n }, [data, curTab, favorites, searchValue]);\n\n const { totalData, pagedData } = useMemo(() => {\n const totalData = getSortedList(filterData);\n return {\n totalData,\n pagedData: getPagedData(totalData, pageSize, page),\n };\n }, [filterData, pageSize, page, getSortedList]);\n\n const meta = useMemo(() => {\n return parseMeta({\n total: totalData?.length,\n current_page: page,\n records_per_page: pageSize,\n });\n }, [data, page, pageSize, totalData]);\n\n useEffect(() => {\n setLoading(false);\n }, [favorites]);\n\n useEffect(() => {\n // reset page when size change and search data\n setPage(1);\n }, [pageSize, searchValue]);\n\n return {\n loading,\n dataSource: pagedData,\n meta,\n setPage,\n setPageSize,\n favorite: {\n ...favorite,\n curTab,\n setCurTab,\n } as TFavorite,\n onSort,\n };\n};\n\nexport function useFavoritesTabScript(favorite: TFavorite) {\n const {\n favorites,\n favoriteTabs,\n updateFavoriteTabs,\n updateSelectedFavoriteTab,\n updateFavorites,\n curTab,\n setCurTab,\n } = favorite;\n\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState(false);\n const [value, setValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n const spanRef = useRef<HTMLSpanElement>(null);\n const [inputWidth, setInputWidth] = useState(50);\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 updateSelectedTab = (item: any) => {\n setCurTab(item);\n updateSelectedFavoriteTab(item);\n };\n\n const updateCurTab = () => {\n updateFavoriteTabs(\n {\n ...curTab,\n name: value,\n },\n { update: true }\n );\n setEditing(false);\n setOpen(false);\n };\n\n const addTab = () => {\n const newTab = {\n name: `WatchList_${favoriteTabs.length}`,\n id: Date.now(),\n };\n updateFavoriteTabs(newTab, { add: true });\n setCurTab(newTab);\n updateSelectedFavoriteTab(newTab);\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 setCurTab(tab);\n updateSelectedFavoriteTab(tab);\n }, 0);\n };\n\n useEffect(() => {\n if (value) {\n const rect = spanRef.current?.getBoundingClientRect();\n setInputWidth(Math.max((rect?.width || 0) + 14, 50));\n }\n }, [value]);\n\n return {\n open,\n setOpen,\n inputRef,\n inputWidth,\n spanRef,\n editing,\n value,\n onValueChange: setValue,\n onEdit,\n updateSelectedTab,\n updateCurTab,\n addTab,\n delTab,\n };\n}\n","import { FC, KeyboardEventHandler } from \"react\";\nimport {\n Box,\n cn,\n DataTable,\n Flex,\n Pagination,\n Text,\n Tooltip,\n Input,\n modal,\n} from \"@orderly.network/ui\";\nimport { FavoriteTab } from \"@orderly.network/hooks\";\nimport { useDataListColumns } from \"../column\";\nimport {\n EditIcon,\n TrashIcon,\n AddIcon,\n UnFavoritesIcon,\n} from \"../../../../icons\";\nimport { TFavorite } from \"../../../../type\";\nimport { UseFavoritesReturn, useFavoritesTabScript } from \"./favorites.script\";\nimport { useMarketsContext } from \"../../provider\";\nimport \"../../../../style/index.css\";\n\ntype FavoritesProps = {} & UseFavoritesReturn;\n\nexport const Favorites: FC<FavoritesProps> = (props) => {\n const { dataSource, meta, setPage, setPageSize, favorite, onSort, loading } =\n props;\n\n const { onSymbolChange } = useMarketsContext();\n\n const columns = useDataListColumns(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 <FavoritesTab favorite={favorite} />\n\n <DataTable\n bordered\n classNames={{\n header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80 !oui-min-h-[187.5px]\",\n }}\n columns={columns}\n dataSource={dataSource}\n emptyView={emptyView}\n loading={loading}\n onRow={(record, index) => {\n return {\n className: cn(\n \"group\",\n \"oui-h-[55px] oui-border-line-4 oui-cursor-pointer\"\n ),\n \"data-testid\": `oui-testid-markets-favorites-tr-${record.symbol}`,\n onClick: () => {\n onSymbolChange?.(record);\n },\n };\n }}\n generatedRowKey={(record) => record.symbol}\n onSort={onSort}\n >\n <Pagination\n {...meta}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n </DataTable>\n </div>\n );\n};\n\ntype FavoritesTabProps = {\n favorite: TFavorite;\n};\n\nconst FavoritesTab: React.FC<FavoritesTabProps> = (props) => {\n const { curTab, favoriteTabs } = props.favorite;\n\n const {\n open,\n setOpen,\n inputRef,\n inputWidth,\n spanRef,\n editing,\n value,\n onValueChange,\n updateSelectedTab,\n updateCurTab,\n onEdit,\n addTab,\n delTab,\n } = useFavoritesTabScript(props.favorite);\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();\n }\n };\n\n const renderContent = (item: FavoriteTab, isActive: boolean) => {\n let content;\n if (editing && isActive) {\n return (\n <Input\n ref={inputRef}\n value={value}\n style={{\n // @ts-ignore\n \"--oui-gradient-angle\": \"270deg\",\n backgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n WebkitBackgroundClip: \"text\",\n width: inputWidth,\n }}\n onValueChange={onValueChange}\n onBlur={updateCurTab}\n classNames={{\n root: cn(\n \"oui-p-0 oui-h-[24px] oui-rounded oui-px-2\",\n \"focus-visible:oui-outline-none focus-within:oui-outline-transparent\",\n isActive &&\n \"oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.12)_0%,rgba(38,254,254,0.12)_100%)]\"\n ),\n input: cn(\n \"oui-text-sm oui-font-semibold oui-text-transparent\",\n \"oui-gradient-brand oui-caret-[rgba(217,217,217,1)]\"\n ),\n }}\n onKeyUp={onKeyUp}\n />\n );\n } else if (isActive) {\n content = (\n <Text.gradient\n color=\"brand\"\n angle={270}\n weight=\"semibold\"\n size=\"sm\"\n className=\"oui-leading-[24px]\"\n as=\"div\"\n data-testid=\"oui-markets-favorite-tab-subTab\"\n >\n {item.name}\n </Text.gradient>\n );\n } else {\n content = (\n <Text\n weight=\"semibold\"\n size=\"sm\"\n className=\"oui-leading-[24px]\"\n as=\"div\"\n data-testid=\"oui-markets-favorite-tab-subTab\"\n >\n {item.name}\n </Text>\n );\n }\n\n return (\n <Box\n r=\"base\"\n px={2}\n height={24}\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 ? \"oui-bg-[linear-gradient(270deg,rgba(89,176,254,0.12)_0%,rgba(38,254,254,0.12)_100%)]\"\n : \"oui-bg-line-6 oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n )}\n onClick={() => {\n updateSelectedTab(item);\n if (isActive) {\n setOpen(true);\n }\n }}\n >\n {content}\n </Box>\n );\n };\n\n return (\n <Flex\n my={3}\n gapX={3}\n id=\"oui-markets-favorites-tabs-container\"\n className=\"oui-overflow-hidden oui-overflow-x-auto oui-cursor-pointer \"\n >\n {favoriteTabs?.map((item: any) => {\n const isActive = curTab.id === item.id;\n return (\n <Tooltip\n key={item.id}\n open={isActive && !editing ? open : false}\n onOpenChange={(open) => {\n if (isActive) {\n setOpen(open);\n }\n }}\n // @ts-ignore\n content={\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 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 <Flex\n className=\"oui-bg-line-6 oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n width={32}\n height={18}\n r=\"base\"\n justify=\"center\"\n itemAlign=\"center\"\n onClick={addTab}\n >\n <AddIcon className=\"oui-w-4 oui-h-4\" />\n </Flex>\n <Text size=\"xs\" ref={spanRef} className=\"oui-invisible\">\n {value}\n </Text>\n </Flex>\n );\n};\n","import { Favorites } from \"./favorites.ui\";\nimport { useFavoritesScript } from \"./favorites.script\";\n\nexport const FavoritesWidget: React.FC = () => {\n const state = useFavoritesScript();\n return <Favorites {...state} />;\n};\n","import { MarketList } from \"./marketList.ui\";\nimport { useMarketListScript } from \"./marketList.script\";\nimport { SortOrder } from \"@orderly.network/ui\";\n\nexport type MarketListWidgetProps = {\n type?: \"all\" | \"new\";\n sortKey: string;\n sortOrder: SortOrder;\n};\n\nexport const MarketListWidget: React.FC<MarketListWidgetProps> = (props) => {\n const state = useMarketListScript(props);\n\n // Only all markets store sort\n const sortStore =\n props.type === \"all\" ? state.favorite.tabSort?.all : undefined;\n\n return (\n <MarketList\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 { MarketsDataList } from \"./dataList.ui\";\nimport { useMarketsDataListScript } from \"./dataList.script\";\n\nexport const MarketsDataListWidget = () => {\n const state = useMarketsDataListScript();\n return <MarketsDataList {...state} />;\n};\n","import { FC } from \"react\";\nimport { Box, cn, Text } from \"@orderly.network/ui\";\nimport { MarketsDataListWidget } from \"./dataList\";\nimport { MarketsHeaderWidget } from \"./header/widget\";\nimport { MarketsProvider, MarketsProviderProps } from \"./provider\";\n\nexport type MarketsHomePageProps = MarketsProviderProps & {\n className?: string;\n};\n\nexport const MarketsHomePage: FC<MarketsHomePageProps> = (props) => {\n return (\n <MarketsProvider onSymbolChange={props.onSymbolChange}>\n <Box id=\"oui-markets-home-page\" className={cn('oui-font-semibold', props.className)} p={6}>\n <Text size=\"2xl\" weight=\"semibold\">\n Markets\n </Text>\n\n <MarketsHeaderWidget />\n\n <MarketsDataListWidget />\n </Box>\n </MarketsProvider>\n );\n};\n"]}
@@ -0,0 +1 @@
1
+ .oui-invisible{visibility:hidden}.oui-my-1{margin-bottom:.25rem;margin-top:.25rem}.oui-mb-3{margin-bottom:.75rem}.oui-mb-\[10px\]{margin-bottom:10px}.oui-mt-1{margin-top:.25rem}.oui-mt-3{margin-top:.75rem}.oui-hidden{display:none}.oui-h-4{height:1rem}.oui-h-\[24px\]{height:24px}.oui-h-\[55px\]{height:55px}.oui-max-h-\[200px\]{max-height:200px}.\!oui-min-h-\[187\.5px\]{min-height:187.5px!important}.oui-w-4{width:1rem}.oui-w-\[240px\]{width:240px}.oui-min-w-0{min-width:0}.oui-flex-\[0_0_calc\(\(100\%_-_32px\)_\/_3\)\]{flex:0 0 calc(33.33333% - 10.66667px)}.oui-cursor-pointer{cursor:pointer}.oui-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.oui-gap-x-\[6px\]{-moz-column-gap:6px;column-gap:6px}.oui-overflow-hidden{overflow:hidden}.oui-overflow-x-auto{overflow-x:auto}.oui-rounded{border-radius:.25rem}.oui-border-line-4{border-color:rgb(var(--oui-color-line,255 255 255)/.04)}.oui-bg-base-5{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-base-5)/var(--tw-bg-opacity))}.oui-bg-base-8{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-base-8)/var(--tw-bg-opacity))}.oui-bg-base-contrast-20{background-color:rgb(var(--oui-color-base-foreground)/.2)}.oui-bg-base-contrast-36{background-color:rgb(var(--oui-color-base-foreground)/.36)}.oui-bg-line-6{background-color:rgb(var(--oui-color-line,255 255 255)/.06)}.oui-bg-\[linear-gradient\(270deg\,rgba\(89\,176\,254\,0\.12\)_0\%\,rgba\(38\,254\,254\,0\.12\)_100\%\)\]{background-image:linear-gradient(270deg,rgba(89,176,254,.12),rgba(38,254,254,.12))}.oui-fill-base-5{fill:rgb(var(--oui-color-base-5)/1)}.oui-p-0{padding:0}.oui-px-2{padding-left:.5rem;padding-right:.5rem}.oui-text-sm{font-size:var(--oui-font-size-sm,.875rem);line-height:1.25rem}.oui-font-semibold{font-weight:600}.oui-leading-\[24px\]{line-height:24px}.oui-text-\[rgba\(255\,154\,46\,1\)\]{color:#ff9a2e}.oui-text-base-contrast{color:rgb(var(--oui-color-base-foreground)/.98)}.oui-text-base-contrast-20{color:rgb(var(--oui-color-base-foreground)/.2)}.oui-text-base-contrast-36{color:rgb(var(--oui-color-base-foreground)/.36)}.oui-text-base-contrast-54{color:rgb(var(--oui-color-base-foreground)/.54)}.oui-text-base-contrast-80{color:rgb(var(--oui-color-base-foreground)/.8)}.oui-text-danger-light{--tw-text-opacity:1;color:rgb(var(--oui-color-danger-light)/var(--tw-text-opacity))}.oui-text-success-light{--tw-text-opacity:1;color:rgb(var(--oui-color-success-light)/var(--tw-text-opacity))}.oui-text-transparent{color:transparent}.oui-caret-\[rgba\(217\,217\,217\,1\)\]{caret-color:#d9d9d9}.oui-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.oui-duration-300{transition-duration:.3s}.oui-gradient-brand{background-image:linear-gradient(var(--oui-gradient-angle,270deg),rgb(var(--oui-gradient-brand-start)) var(--oui-gradient-primary-stop-start,0),rgb(var(--oui-gradient-brand-end)) var(--oui-gradient-primary-stop-end,100%))}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.oui-duration-300{animation-duration:.3s}.focus-within\:oui-outline-transparent:focus-within{outline-color:transparent}.hover\:oui-bg-base-6:hover{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-base-6)/var(--tw-bg-opacity))}.hover\:oui-bg-base-8:hover{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-base-8)/var(--tw-bg-opacity))}.hover\:oui-text-\[rgba\(255\2c 154\2c 46\2c 1\)\]:hover{color:#ff9a2e}.hover\:oui-text-base-contrast:hover{color:rgb(var(--oui-color-base-foreground)/.98)}.focus-visible\:oui-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.oui-group:hover .group-hover\:oui-block{display:block}@media (min-width:1440px){.\33xl\:oui-mb-0{margin-bottom:0}.\33xl\:oui-mt-4{margin-top:1rem}.\33xl\:oui-hidden{display:none}.\33xl\:oui-flex-\[0_0_calc\(\(100\%_-_48px\)_\/_4\)\]{flex:0 0 calc(25% - 12px)}}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@orderly.network/markets",
3
+ "version": "2.0.0-alpha.1",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "keywords": [],
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "dependencies": {
16
+ "embla-carousel-react": "8.1.5",
17
+ "@orderly.network/types": "2.0.0-alpha.1",
18
+ "@orderly.network/ui": "2.0.0-alpha.1",
19
+ "@orderly.network/utils": "2.0.0-alpha.1",
20
+ "@orderly.network/hooks": "2.0.0-alpha.1"
21
+ },
22
+ "devDependencies": {
23
+ "@babel/core": "^7.22.9",
24
+ "@babel/preset-env": "^7.22.9",
25
+ "@babel/preset-typescript": "^7.22.5",
26
+ "@types/react": "^18.3.2",
27
+ "@types/react-dom": "^18.3.0",
28
+ "react": "^18.3.1",
29
+ "react-dom": "^18.2.0",
30
+ "tailwindcss": "^3.4.4",
31
+ "tsup": "^7.1.0",
32
+ "typescript": "^5.1.6",
33
+ "tsconfig": "0.3.12"
34
+ },
35
+ "peerDependencies": {
36
+ "react": "^18.3.1",
37
+ "react-dom": "^18.2.0"
38
+ },
39
+ "scripts": {
40
+ "build": "tsup && pnpm run build:css",
41
+ "build:css": "tailwindcss build -i src/tailwind.css -o dist/styles.css --minify"
42
+ }
43
+ }