@orderly.network/portfolio 2.0.6 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layout/layout.ui.tsx","../src/layout/layout.script.tsx","../src/layout/layout.widget.tsx","../src/pages/overview/index.tsx","../src/pages/overview/assets/useBuilder.script.ts","../src/pages/overview/assets/assets.ui.tsx","../src/pages/overview/assets/assetsHeader.tsx","../src/pages/overview/assets/assets.widget.tsx","../src/pages/overview/assetChart/assetsChart.script.ts","../src/pages/overview/providers/overviewCtx.tsx","../src/pages/overview/shared/useAssetHistory.ts","../src/pages/overview/assetChart/assetsChart.ui.tsx","../src/pages/overview/shared/periodHeader.tsx","../src/pages/overview/assetChart/assetsChart.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.ui.tsx","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/assetHistory/useDataSource.script.ts","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/dataTable.ui.tsx","../src/pages/overview/assetHistory/widget.tsx","../src/pages/overview/funding/fundingHistory.ui.tsx","../src/pages/overview/funding/column.tsx","../src/pages/overview/funding/useDataSource.script.ts","../src/pages/overview/funding/fundingHistory.widget.tsx","../src/pages/overview/distribution/distribution.ui.tsx","../src/pages/overview/distribution/column.tsx","../src/pages/overview/distribution/useDataSource.script.ts","../src/pages/overview/distribution/distribution.widget.tsx","../src/pages/overview/historyDataGroup/useState.script.ts","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/performance/performance.ui.tsx","../src/pages/overview/performance/performance.script.ts","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/main.tsx","../src/pages/feeTier/index.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/dataSource.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/positions/page.tsx","../src/pages/orders/page.tsx","../src/pages/api/index.ts","../src/pages/api/apiManager.ui.tsx","../src/pages/api/apiManager.script.tsx","../src/pages/api/dialog/createApiKey.tsx","../src/pages/api/dialog/createdApiKey.tsx","../src/pages/api/dialog/deleteApiKey.tsx","../src/pages/api/dialog/editApiKey.tsx","../src/pages/api/apiManager.widget.tsx","../src/pages/api/apiManager.page.tsx","../src/pages/setting/index.ts","../src/pages/setting/setting.ui.tsx","../src/pages/setting/setting.script.tsx","../src/pages/setting/setting.widget.tsx","../src/pages/setting/setting.page.tsx"],"names":["Box","Scaffold","SideBar","useScaffoldContext","jsx","PortfolioLayout","props","children","leftSideProps","LeftSidebar","expanded","setExpand","open","e","useEffect","useMemo","useState","useMediaQuery","PortfolioLeftSidebarPath","usePortfolioLayoutScript","routerAdapter","current","setCurrent","items","hideSideBar","item","PortfolioLayoutWidget","state","overview_exports","__export","AssetHistory","AssetHistoryWidget","AssetWidget","AssetsChartWidget","AssetsUI","DistributionHistoryUI","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewContextProvider","OverviewPage","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryHook","useAssetsLineChartScript","useFundingHistoryColumns","useFundingHistoryHook","usePerformanceScript","useAccount","useCollateral","useLeverage","useLocalStorage","usePositionStream","useWalletConnector","AccountStatusEnum","modal","LeverageWidgetId","DepositAndWithdrawWithDialogId","useAppContext","useAssetScript","connect","totalValue","freeCollateral","wrongNetwork","data","currentLeverage","visible","setVisible","connected","onLeverageEdit","onDeposit","onWithdraw","Card","Divider","Flex","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","Button","CardTitle","jsxs","AssetsHeader","AuthGuard","Fragment","NoValue","AssetStatistic","connectWallet","portfolioValue","rest","useDataTap","createContext","useContext","useAssetsHistory","useStatisticsDaily","subDays","format","getYear","getMonth","getDate","addDays","Decimal","zero","PeriodType","useAssetsHistoryData","localKey","options","today","d","isRealtime","periodTypes","period","setPeriod","getStartDate","value","periodValue","startDate","setStartDate","endDate","assetHistory","onPeriodChange","calculateLastPnl","inputs","list","i","calculate","lastItem","todayFormattedStr","mergeData","calculateData","realtime","_data","calculatedData","aggregateValue","vol","pnl","roi","tail","dataTailIndex","lastAccountValue","start","end","_","OverviewContext","useOverviewContext","filteredData","Select","PeriodTitle","AssetLineChart","AssetsChartUI","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","ArrowLeftRightIcon","capitalizeFirstLetter","TokenIcon","toast","useQuery","chains","record","href","SIDES","usePagination","subtractDaysFromCurrentDate","differenceInDays","setHours","parseDateRangeForFilter","dateRange","from","to","set","setDateRange","side","setSide","page","pageSize","setPage","parsePagination","meta","isLoading","onFilter","filter","pagination","DataFilter","AuthGuardDataTable","dataSource","queryParameter","columns","index","useSymbolsInfo","FundingHistoryUI","symbols","symbol","useFundingFeeHistory","setSymbol","isValidating","useColumns","TYPES","type","useDistributionHistory","useDistributionHistoryHook","setType","HistoryDataGroupUI","active","onTabChange","useStateScript","setActive","PnLBarChart","PnlLineChart","invisible","volumeUpdateDate","PerformancePnL","CumulativePnlChart","ctx","feeTier_exports","FeeTierPage","useAccountInfo","usePrivateQuery","numberToHumanStyle","useFeeTierColumns","row","volume_min","volume_max","volume_node","useFeeTierScript","dataAdapter","tier","setTier","cols","volumeStatistics","getFuturesCurrentTier","feeList","futures_taker_fee_rate","futures_maker_fee_rate","takerRate","makerRate","useCallback","DataTable","FeeTier","takerFeeRate","makerFeeRate","FeeTierHeader","FeeTierTable","FeeTierHeaderItem","top","setTop","parentRect","elementRect","offsetTop","onRow","config","FeeTierWidget","page_exports","PositionsPage","LiquidationWidget","PositionHistoryWidget","PositionsWidget","tab","setTab","OrdersPage","useRef","Tooltip","OrdersWidget","sharePnLConfig","ordersRef","TooltipIcon","api_exports","APIManagerPage","APIManagerWidget","CopyIcon","PlusIcon","OrderlyContext","useApiKeyManager","useApiManagerScript","filterTags","keyStatus","showCreateDialog","setShowCreateDialog","showCreatedDialog","setShowCreatedDialog","generateKey","setGenerateKey","configStore","brokerId","account","canCreateApiKey","keys","generateOrderlyKey","setIPRestriction","removeOrderlyKey","resetOrderlyKeyIPRestriction","refresh","error","curPubKey","setCurPubKey","pubKey","onCreateApiKey","onReadApiGuide","hideCreateDialog","doCreate","ipRestriction","scope","createdSuccess","res","ip","key","secretKey","capitalizeFirstChar","generateKeyRes","err","hideCreatedDialog","onCopyApiKeyInfo","doConfirm","doDelete","resolve","curKey","reject","doEdit","future","onCopyAccountId","onCopyApiKey","onCopyApiSecretKey","onCopyIP","keyList","filterTag","filterCurKey","verifyIP","accountStatus","address","uid","str","cn","SimpleDialog","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","hint","setHint","scopes","Checkbox","CreatedAPIKeyDialog","DeleteAPIKeyDialog","setOpen","onDelete","formatKey","EditAPIKeyDialog","onUpdate","AuthGuardEmpty","AuthGuardTooltip","APIManager","AccountInfo","Subtitle","KeyList","EditButton","DeleteButton","setting_exports","SettingPage","SettingWidget","Switch","Setting","useDebouncedCallback","useMutation","useSettingScript","update","isMutating","checked","setChecked","updateCheckState","setMaintainConfig","maintenance_cancel_order_flag"],"mappings":"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","sourcesContent":["import { FC, PropsWithChildren } from \"react\";\nimport { Box } from \"@orderly.network/ui\";\nimport {\n LayoutProps,\n RouterAdapter,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@orderly.network/ui-scaffold\";\n\nexport type PortfolioLayoutProps = LayoutProps & {\n hideSideBar?: boolean;\n /** @deprecated use leftSideProps.items instead */\n items?: SideBarProps[\"items\"];\n};\n\nexport const PortfolioLayout: FC<PropsWithChildren<PortfolioLayoutProps>> = (\n props\n) => {\n const { children, leftSideProps } = props;\n\n return (\n <Scaffold\n leftSidebar={\n props.hideSideBar ? null : (\n <LeftSidebar\n items={props.items}\n current={props.routerAdapter?.currentPath}\n {...leftSideProps}\n routerAdapter={props.routerAdapter}\n />\n )\n }\n routerAdapter={props.routerAdapter}\n classNames={{\n content: \"lg:oui-mb-0\",\n topNavbar: \"oui-bg-base-9\",\n leftSidebar:\n \"oui-m-3 oui-p-4 oui-broder oui-border-[1px] oui-border-line oui-rounded-xl oui-bg-base-9\",\n }}\n {...props}\n >\n <Box mx={3} my={6}>\n {children}\n </Box>\n </Scaffold>\n );\n};\n\ntype LeftSidebarProps = SideBarProps & {\n routerAdapter?: RouterAdapter;\n};\n\nconst LeftSidebar: FC<LeftSidebarProps> = (props) => {\n const { expanded, setExpand } = useScaffoldContext();\n\n return (\n <SideBar\n title=\"Portfolio\"\n {...props}\n open={expanded}\n onOpenChange={(open) => setExpand(open)}\n onItemSelect={(e) => {\n props.onItemSelect?.(e);\n props.routerAdapter?.onRouteChange?.({\n href: e.href || \"\",\n name: e.name,\n });\n }}\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { SideMenuItem, useScaffoldContext } from \"@orderly.network/ui-scaffold\";\nimport { useMediaQuery } from \"@orderly.network/hooks\";\n\nexport enum PortfolioLeftSidebarPath {\n Overview = \"/portfolio\",\n Positions = \"/portfolio/positions\",\n Orders = \"/portfolio/orders\",\n FeeTier = \"/portfolio/feeTier\",\n ApiKey = \"/portfolio/apiKey\",\n Setting = \"/portfolio/setting\",\n}\n\nexport type UseLayoutBuilderOptions = {\n current?: string;\n};\n\nexport const usePortfolioLayoutScript = (props: UseLayoutBuilderOptions) => {\n const { routerAdapter } = useScaffoldContext();\n const [current, setCurrent] = useState(\n props.current ?? routerAdapter?.currentPath ?? \"/portfolio\"\n );\n\n useEffect(() => {\n if (current || routerAdapter?.currentPath) {\n setCurrent(current || routerAdapter?.currentPath || \"/portfolio\");\n }\n }, [current, routerAdapter?.currentPath]);\n\n const items = useMemo(() => {\n return [\n {\n name: \"Overview\",\n href: PortfolioLeftSidebarPath.Overview,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.24316 2.19727C3.58641 2.19727 2.24316 3.54044 2.24316 5.19727V12.6973C2.24316 14.3541 3.58641 15.6973 5.24316 15.6973H12.7432C14.3999 15.6973 15.7432 14.3541 15.7432 12.6973V5.19727C15.7432 3.54044 14.3999 2.19727 12.7432 2.19727H5.24316ZM5.24316 3.69727H12.7432C13.5719 3.69727 14.2432 4.36882 14.2432 5.19727V12.6973C14.2432 13.2484 13.9319 13.734 13.4894 13.9947C13.3454 12.2235 11.4427 11.1973 8.99316 11.1973C6.54366 11.1973 4.60341 12.251 4.48566 13.9997C4.04241 13.739 3.74316 13.2484 3.74316 12.6973V5.19727C3.74316 4.36882 4.41441 3.69727 5.24316 3.69727ZM8.99316 5.19727C7.54341 5.19727 6.36816 6.37252 6.36816 7.82227C6.36816 9.27202 7.54341 10.4473 8.99316 10.4473C10.4429 10.4473 11.6182 9.27202 11.6182 7.82227C11.6182 6.37252 10.4429 5.19727 8.99316 5.19727Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"Positions\",\n href: PortfolioLeftSidebarPath.Positions,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.51 3.021a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h9a3 3 0 0 0 3-3v-6a3 3 0 0 0-3-3zm2.25 3a.76.76 0 0 1 .54.211.77.77 0 0 1 0 1.078l-.75.75a.77.77 0 0 1-.54.211h-.75a.75.75 0 0 1 0-1.5h.422l.54-.539a.76.76 0 0 1 .539-.21m3 .75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5m-3 2.25a.76.76 0 0 1 .54.211.77.77 0 0 1 0 1.079l-.75.75a.77.77 0 0 1-.54.21h-.75a.75.75 0 0 1 0-1.5h.422l.54-.539a.76.76 0 0 1 .539-.21m3 .75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"Orders\",\n href: PortfolioLeftSidebarPath.Orders,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.693 1.5C4.229 1.5 3.02 2.61 3.02 4.006v9.984c0 1.398 1.208 2.508 2.672 2.508h6.657c1.463 0 2.671-1.11 2.671-2.508V6.726c0-2.672-2.579-5.227-5.25-5.227zm4.828 1.593c1.33.352 2.562 1.58 2.906 2.906h-1.734c-.667 0-1.172-.472-1.172-1.008zm-3.75 2.906h.75a.75.75 0 0 1 0 1.5h-.75a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"Fee tier\",\n href: PortfolioLeftSidebarPath.FeeTier,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.99829 1.51062C4.34154 1.51062 2.99829 2.85387 2.99829 4.51062V13.5106C2.99829 15.1674 4.34154 16.5106 5.99829 16.5106H11.9983C13.655 16.5106 14.9983 15.1674 14.9983 13.5106V4.51062C14.9983 2.85387 13.655 1.51062 11.9983 1.51062H5.99829ZM5.99829 3.76062H11.9983C12.4123 3.76062 12.7483 4.09662 12.7483 4.51062V6.01062C12.7483 6.42462 12.4123 6.76062 11.9983 6.76062H5.99829C5.58429 6.76062 5.24829 6.42462 5.24829 6.01062V4.51062C5.24829 4.09662 5.58429 3.76062 5.99829 3.76062ZM5.99829 8.26062C6.41229 8.26062 6.74829 8.59662 6.74829 9.01062C6.74829 9.42462 6.41229 9.76062 5.99829 9.76062C5.58429 9.76062 5.24829 9.42462 5.24829 9.01062C5.24829 8.59662 5.58429 8.26062 5.99829 8.26062ZM8.99829 8.26062C9.41229 8.26062 9.74829 8.59662 9.74829 9.01062C9.74829 9.42462 9.41229 9.76062 8.99829 9.76062C8.58429 9.76062 8.24829 9.42462 8.24829 9.01062C8.24829 8.59662 8.58429 8.26062 8.99829 8.26062ZM11.9983 8.26062C12.4123 8.26062 12.7483 8.59662 12.7483 9.01062C12.7483 9.42462 12.4123 9.76062 11.9983 9.76062C11.5843 9.76062 11.2483 9.42462 11.2483 9.01062C11.2483 8.59662 11.5843 8.26062 11.9983 8.26062ZM5.99829 10.5106C6.41229 10.5106 6.74829 10.8466 6.74829 11.2606C6.74829 11.6746 6.41229 12.0106 5.99829 12.0106C5.58429 12.0106 5.24829 11.6746 5.24829 11.2606C5.24829 10.8466 5.58429 10.5106 5.99829 10.5106ZM8.99829 10.5106C9.41229 10.5106 9.74829 10.8466 9.74829 11.2606C9.74829 11.6746 9.41229 12.0106 8.99829 12.0106C8.58429 12.0106 8.24829 11.6746 8.24829 11.2606C8.24829 10.8466 8.58429 10.5106 8.99829 10.5106ZM11.9983 10.5106C12.4123 10.5106 12.7483 10.8466 12.7483 11.2606V13.5106C12.7483 13.9246 12.4123 14.2606 11.9983 14.2606C11.5843 14.2606 11.2483 13.9246 11.2483 13.5106V11.2606C11.2483 10.8466 11.5843 10.5106 11.9983 10.5106ZM5.99829 12.7606C6.41229 12.7606 6.74829 13.0966 6.74829 13.5106C6.74829 13.9246 6.41229 14.2606 5.99829 14.2606C5.58429 14.2606 5.24829 13.9246 5.24829 13.5106C5.24829 13.0966 5.58429 12.7606 5.99829 12.7606ZM8.99829 12.7606C9.41229 12.7606 9.74829 13.0966 9.74829 13.5106C9.74829 13.9246 9.41229 14.2606 8.99829 14.2606C8.58429 14.2606 8.24829 13.9246 8.24829 13.5106C8.24829 13.0966 8.58429 12.7606 8.99829 12.7606Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"API key\",\n href: PortfolioLeftSidebarPath.ApiKey,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.02124 1.49915C7.77849 1.49915 6.77124 2.5064 6.77124 3.74915C6.77124 4.70015 7.40049 5.55517 8.26974 5.86942L8.27124 8.24915H5.27124C4.85724 8.24915 4.52124 8.58515 4.52124 8.99915L4.52048 12.1304C3.65723 12.4274 3.02124 13.2981 3.02124 14.2491C3.02124 15.4919 4.02849 16.4991 5.27124 16.4991C6.51399 16.4991 7.52124 15.4919 7.52124 14.2491C7.52124 13.2981 6.92499 12.4596 6.02949 12.1206L6.02124 9.74915H9.02124H12.0212L12.0265 12.1319C11.1257 12.4446 10.5212 13.2981 10.5212 14.2491C10.5212 15.4919 11.5285 16.4991 12.7712 16.4991C14.014 16.4991 15.0212 15.4919 15.0212 14.2491C15.0212 13.2981 14.407 12.4611 13.5272 12.1281L13.5212 8.99915C13.5212 8.58515 13.1852 8.24915 12.7712 8.24915H9.77124L9.76899 5.86639C10.642 5.55814 11.2712 4.70015 11.2712 3.74915C11.2712 2.5064 10.264 1.49915 9.02124 1.49915Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"Settings\",\n href: PortfolioLeftSidebarPath.Setting,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.72601 1.84159C5.66251 2.17834 4.74527 2.7296 3.93677 3.48185C3.68702 3.7151 3.61052 4.09534 3.77252 4.39609C4.37327 5.50684 3.74476 6.69484 2.39026 6.76309C2.05801 6.78034 1.76477 7.02559 1.68677 7.34884C1.55252 7.90759 1.49927 8.37559 1.49927 8.98984C1.49927 9.50509 1.55476 10.0878 1.66351 10.6068C1.73101 10.9308 2.01302 11.1641 2.34302 11.1933C3.70652 11.3111 4.38152 12.3506 3.77252 13.6773C3.63752 13.9721 3.69902 14.3246 3.93677 14.5443C4.73327 15.2816 5.64826 15.8006 6.72601 16.1381C7.03351 16.2348 7.38076 16.1186 7.56976 15.8568C8.40376 14.7033 9.61352 14.6988 10.4055 15.8568C10.5923 16.1298 10.9343 16.2611 11.2493 16.1613C12.2895 15.8343 13.2585 15.2771 14.0618 14.5443C14.3093 14.3193 14.3745 13.9541 14.226 13.6541C13.602 12.3948 14.3198 11.2383 15.6083 11.2166C15.9503 11.2106 16.2548 10.9856 16.335 10.6541C16.4648 10.1163 16.4993 9.64759 16.4993 8.98984C16.4993 8.42434 16.4325 7.86709 16.3118 7.32559C16.2353 6.98359 15.936 6.74059 15.585 6.73984C14.3168 6.73759 13.6058 5.49109 14.226 4.39609C14.3985 4.09084 14.3445 3.71735 14.085 3.48185C13.2675 2.73935 12.2708 2.15959 11.226 1.84159C10.905 1.74409 10.5638 1.86409 10.3823 2.14609C9.65776 3.27109 8.30477 3.29135 7.59302 2.16935C7.41077 1.8821 7.05001 1.73809 6.72601 1.84159ZM8.99927 5.98984C10.656 5.98984 11.9993 7.33309 11.9993 8.98984C11.9993 10.6466 10.656 11.9898 8.99927 11.9898C7.34252 11.9898 5.99927 10.6466 5.99927 8.98984C5.99927 7.33309 7.34252 5.98984 8.99927 5.98984Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n ];\n }, []);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item: SideMenuItem) => {\n // console.log(\"item\", item);\n if (typeof item.href === \"undefined\") {\n console.warn(\"Item href is not defined\");\n return;\n }\n setCurrent(item.href!);\n routerAdapter?.onRouteChange({\n href: item.href,\n name: item.name,\n });\n },\n };\n};\n\nexport const useCustomSidebarHook = () => {\n const { expanded, setExpand } = useScaffoldContext();\n\n return {\n open: expanded,\n onOpenChange: (open: boolean) => {\n setExpand(open);\n },\n };\n};\n","import { FC, PropsWithChildren } from \"react\";\nimport { PortfolioLayout, PortfolioLayoutProps } from \"./layout.ui\";\nimport { usePortfolioLayoutScript } from \"./layout.script\";\n\nexport type PortfolioLayoutWidgetProps = PortfolioLayoutProps;\n\nexport const PortfolioLayoutWidget: FC<\n PropsWithChildren<PortfolioLayoutWidgetProps>\n> = (props) => {\n const state = usePortfolioLayoutScript({\n current: props.leftSideProps?.current,\n });\n return (\n <PortfolioLayout {...state} {...props}>\n {props.children}\n </PortfolioLayout>\n );\n};\n","export { AssetWidget, AssetsUI } from \"./assets\";\nexport { AssetsChartWidget } from \"./assetChart/assetsChart.widget\";\nexport { useAssetsLineChartScript } from \"./assetChart/assetsChart.script\";\nexport { HistoryDataGroupWidget } from \"./historyDataGroup\";\n\nexport {\n AssetHistory,\n AssetHistoryWidget,\n useAssetHistoryHook,\n useAssetHistoryColumns,\n} from \"./assetHistory\";\n\nexport {\n PerformanceUI,\n PerformanceWidget,\n usePerformanceScript,\n} from \"./performance\";\nexport {\n FundingHistoryWidget,\n useFundingHistoryColumns,\n useFundingHistoryHook,\n} from \"./funding\";\n\nexport {\n DistributionHistoryWidget,\n DistributionHistoryUI,\n} from \"./distribution\";\n\nexport { OverviewPage } from \"./main\";\n\nexport { OverviewContextProvider } from \"./providers/overviewCtx\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLeverage,\n useLocalStorage,\n usePositionStream,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { LeverageWidgetId } from \"@orderly.network/ui-leverage\";\nimport { DepositAndWithdrawWithDialogId } from \"@orderly.network/ui-transfer\";\nimport { useAppContext } from \"@orderly.network/react-app\";\n\nexport const useAssetScript = () => {\n const { connect } = useWalletConnector();\n const { state } = useAccount();\n const { totalValue, freeCollateral } = useCollateral();\n const { wrongNetwork } = useAppContext();\n const [data] = usePositionStream();\n const [currentLeverage] = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const connected = useMemo(() => {\n return (\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n );\n }, [state]);\n\n const onLeverageEdit = () => {\n modal.show(LeverageWidgetId);\n };\n\n const onDeposit = () => {\n modal.show(DepositAndWithdrawWithDialogId, { activeTab: \"deposit\" });\n };\n\n const onWithdraw = () => {\n modal.show(DepositAndWithdrawWithDialogId, { activeTab: \"withdraw\" });\n };\n\n return {\n connected,\n connect,\n portfolioValue: totalValue,\n freeCollateral,\n unrealPnL: data.aggregated.total_unreal_pnl,\n unrealROI: data.totalUnrealizedROI,\n currentLeverage,\n onLeverageEdit,\n visible,\n wrongNetwork,\n toggleVisible: () => setVisible(!visible),\n onDeposit,\n onWithdraw,\n } as const;\n};\n\nexport type UseAssetScriptReturn = ReturnType<typeof useAssetScript>;\n","import { FC } from \"react\";\nimport {\n Box,\n Button,\n Card,\n Divider,\n Flex,\n Grid,\n Either,\n Statistic,\n Text,\n EyeIcon,\n gradientTextVariants,\n EditIcon,\n EyeCloseIcon,\n} from \"@orderly.network/ui\";\nimport { AssetsHeader } from \"./assetsHeader\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\n\ntype Props = {\n connected?: boolean;\n onConnectWallet?: () => void;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onLeverageEdit?: () => void;\n portfolioValue: number | null;\n visible: boolean;\n toggleVisible: () => void;\n wrongNetwork: boolean;\n} & StatisticProps;\n\ntype StatisticProps = {\n currentLeverage: number;\n unrealPnL: number;\n unrealROI: number;\n freeCollateral: number;\n};\n\nexport const AssetsUI = (props: Props) => {\n return (\n <Card\n classNames={{\n footer: \"oui-h-[48px]\",\n root: \"oui-h-[240px]\",\n }}\n // @ts-ignore\n title={\n <AssetsHeader\n disabled={!props.connected || props.wrongNetwork}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\n />\n }\n >\n <>\n <Statistic\n label={\n <Flex gap={1}>\n <Text intensity={54}>Total value</Text>\n <button\n onClick={() => {\n props.toggleVisible();\n }}\n data-testid=\"oui-testid-portfolio-assets-eye-btn\"\n >\n {props.visible ? (\n <EyeIcon size={16} color={\"white\"} />\n ) : (\n <EyeCloseIcon size={16} color={\"white\"} />\n )}\n </button>\n </Flex>\n }\n >\n <Either\n value={(props.connected ?? false) && !props.wrongNetwork}\n left={<NoValue />}\n >\n <Text.numeral\n visible={props.visible}\n unit=\"USDC\"\n // @ts-ignore\n style={{ \"--oui-gradient-angle\": \"45deg\" }}\n unitClassName=\"oui-text-base oui-text-base-contrast-80 oui-h-9 oui-ml-1\"\n className={gradientTextVariants({\n className: \"oui-font-bold oui-text-3xl\",\n color: \"brand\",\n })}\n >\n {props.portfolioValue ?? '--'}\n </Text.numeral>\n </Either>\n </Statistic>\n <Divider className=\"oui-my-4\" intensity={8} />\n <AuthGuard buttonProps={{ size: \"lg\", fullWidth: true }}>\n <AssetStatistic\n unrealROI={props.unrealROI}\n unrealPnL={props.unrealPnL}\n freeCollateral={props.freeCollateral}\n currentLeverage={props.currentLeverage}\n onLeverageEdit={props.onLeverageEdit}\n visible={props.visible}\n />\n </AuthGuard>\n </>\n </Card>\n );\n};\n\nconst NoValue: FC = () => {\n return (\n <Flex gap={1} className={\"oui-h-9\"}>\n <Text.gradient color=\"brand\" weight=\"bold\">\n --\n </Text.gradient>\n <Text>USDC</Text>\n </Flex>\n );\n};\n\nexport const AssetStatistic = (\n props: StatisticProps & { onLeverageEdit?: () => void; visible: boolean }\n) => {\n return (\n <Grid cols={3} className=\"oui-h-12\">\n <Statistic label=\"Unrealized PnL\">\n <Flex>\n <Text.numeral\n coloring\n size=\"lg\"\n weight=\"semibold\"\n visible={props.visible}\n >\n {props.unrealPnL}\n </Text.numeral>\n <Text.numeral\n coloring\n rule=\"percentages\"\n size=\"sm\"\n weight=\"semibold\"\n prefix={\"(\"}\n suffix=\")\"\n visible={props.visible}\n >\n {props.unrealROI}\n </Text.numeral>\n </Flex>\n </Statistic>\n <Statistic label=\"Max account leverage\">\n <Flex itemAlign={\"center\"}>\n <span data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-value\" className=\"oui-text-lg\">{props.currentLeverage}</span>\n <span>x</span>\n <button className=\"oui-ml-1\" onClick={() => props.onLeverageEdit?.()} data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-edit-btn\">\n <EditIcon color={\"white\"} size={18} />\n </button>\n </Flex>\n </Statistic>\n <Statistic\n label=\"Available to withdraw\"\n // @ts-ignore\n align=\"right\"\n // @ts-ignore\n valueProps={{ size: \"lg\", visible: props.visible }}\n >\n {props.freeCollateral}\n </Statistic>\n </Grid>\n );\n};\n","import {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport { FC } from \"react\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n return (\n <Flex justify={\"between\"}>\n <CardTitle>Overview</CardTitle>\n <Flex gap={3}>\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onWithdraw?.()}\n icon={<ArrowUpSquareFillIcon />}\n data-testid=\"oui-testid-portfolio-assets-withdraw-btn\"\n >\n Withdraw\n </Button>\n <Button\n disabled={props.disabled}\n size=\"md\"\n onClick={() => props.onDeposit?.()}\n icon={<ArrowDownSquareFillIcon />}\n data-testid=\"oui-testid-portfolio-assets-deposit-btn\"\n >\n Deposit\n </Button>\n </Flex>\n </Flex>\n );\n};\n","import { AssetsUI } from \"./assets.ui\";\nimport { useAssetScript } from \"./useBuilder.script\";\n\nexport const AssetWidget = () => {\n const {\n connected,\n connect: connectWallet,\n portfolioValue,\n onLeverageEdit,\n ...rest\n } = useAssetScript();\n return (\n <AssetsUI\n onConnectWallet={connectWallet}\n connected={connected}\n portfolioValue={portfolioValue}\n onLeverageEdit={onLeverageEdit}\n {...rest}\n />\n );\n};\n","import { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { useOverviewContext } from \"../providers/overviewCtx\";\nimport { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const useAssetsLineChartScript = () => {\n // const assetHistory = useAssetsHistoryData(\"portfolio_asset_history_period\", {\n // isRealtime: true,\n // });\n\n const assetHistory = useOverviewContext();\n\n const { wrongNetwork } = useAppContext();\n const { state } = useAccount();\n\n const filteredData = useDataTap(assetHistory.data, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: assetHistory.createFakeData(\n {\n account_value: 0,\n // pnl: 0,\n },\n { account_value: 500 }\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length ?? 0 > 0) return filteredData;\n return assetHistory.createFakeData(\n {\n account_value: 0,\n // pnl: 0,\n },\n { account_value: 500 }\n );\n }, [filteredData]);\n\n return {\n ...assetHistory,\n wrongNetwork,\n data: _data,\n invisible: wrongNetwork || !assetHistory.data.length,\n } as const;\n};\n\nexport type useAssetsLineChartScriptReturn = ReturnType<\n typeof useAssetsLineChartScript\n>;\n","import { createContext, useContext } from \"react\";\nimport {\n useAssetsHistoryData,\n useAssetsHistoryDataReturn,\n} from \"../shared/useAssetHistory\";\n\nexport type OverviewContextState = {\n // period: PeriodType;\n} & useAssetsHistoryDataReturn;\n\nexport const OverviewContext = createContext<OverviewContextState>(\n {} as OverviewContextState\n);\n\nconst localKey = \"portfolio_performance_period\";\n\nexport const useOverviewContext = () => {\n return useContext(OverviewContext);\n};\n\nexport const OverviewContextProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n\n return (\n <OverviewContext.Provider\n value={{\n ...state,\n }}\n >\n {children}\n </OverviewContext.Provider>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport {\n useAssetsHistory,\n useCollateral,\n useLocalStorage,\n useStatisticsDaily,\n} from \"@orderly.network/hooks\";\nimport { subDays, format, getYear, getMonth, getDate, addDays } from \"date-fns\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nexport enum PeriodType {\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport const useAssetsHistoryData = (\n localKey: string,\n options?: {\n isRealtime?: boolean;\n }\n) => {\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const { isRealtime = false } = options || {};\n const periodTypes = Object.values(PeriodType);\n const [period, setPeriod] = useLocalStorage<PeriodType>(\n localKey,\n PeriodType.WEEK\n );\n\n const { totalValue } = useCollateral();\n\n const getStartDate = (value: PeriodType) => {\n switch (value) {\n case PeriodType.MONTH:\n return subDays(today, 35);\n\n case PeriodType.QUARTER:\n return subDays(today, 95);\n default:\n return subDays(today, 10);\n }\n };\n\n const periodValue = useMemo(() => {\n switch (period) {\n case PeriodType.WEEK:\n return 7;\n case PeriodType.MONTH:\n return 30;\n case PeriodType.QUARTER:\n return 90;\n default:\n return 7;\n }\n }, [period]);\n\n const [startDate, setStartDate] = useState(getStartDate(period));\n // const nowStamp = useRef(new Date().getTime().toString());\n // const now = useRef(new Date());\n\n const endDate = useMemo(() => addDays(today, 1), [today]);\n\n const [data] = useStatisticsDaily(\n {\n startDate: startDate.toISOString().split(\"T\")[0],\n endDate: endDate.toISOString().split(\"T\")[0],\n },\n {\n ignoreAggregation: true,\n }\n );\n\n const [assetHistory] = useAssetsHistory({\n startTime: subDays(today, 2).getTime().toString(),\n endTime: endDate.getTime().toString(),\n pageSize: 50,\n });\n\n const onPeriodChange = (value: PeriodType) => {\n setStartDate(getStartDate(value));\n setPeriod(value);\n };\n\n // const lastItem = data[data.length - 1];\n\n const calculateLastPnl = (inputs: {\n lastItem: API.DailyRow;\n assetHistory: API.AssetHistoryRow[];\n totalValue: number | null;\n }) => {\n if (totalValue == null) return null;\n // today daily pnl = totalValue - lastItem.account_value - deposit + withdraw\n let value = new Decimal(totalValue).sub(inputs.lastItem.account_value);\n\n // subtraction of deposit and withdraw\n if (\n Array.isArray(inputs.assetHistory) &&\n inputs.assetHistory.length > 0 &&\n typeof inputs.lastItem.snapshot_time !== \"undefined\"\n ) {\n // find a list with the timestamp greater than the last item timestamp and trans_status = success;\n const list = [];\n\n for (let i = 0; i < inputs.assetHistory.length; i++) {\n const item = inputs.assetHistory[i];\n if (item.created_time > inputs.lastItem.snapshot_time) {\n list.push(item);\n }\n }\n\n // console.log(\"--->>>>> list\", list);\n\n // calculate the sum of deposit and withdraw\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (item.side === \"DEPOSIT\") {\n // value -= item.amount;\n if (item.trans_status === \"COMPLETED\") {\n value = value.sub(item.amount);\n }\n } else if (item.side === \"WITHDRAW\") {\n if (item.trans_status !== \"FAILED\") {\n value = value.add(item.amount);\n }\n }\n }\n }\n\n return value.toNumber();\n };\n\n const calculate = (data: API.DailyRow[], totalValue: number | null) => {\n const lastItem = data[data.length - 1];\n const todayFormattedStr = format(today, \"yyyy-MM-dd\");\n\n return {\n ...lastItem,\n date: todayFormattedStr,\n perp_volume: 0,\n account_value:\n totalValue !== null ? totalValue : lastItem?.account_value ?? 0,\n pnl: calculateLastPnl({ lastItem, assetHistory, totalValue }) ?? 0,\n };\n };\n\n const mergeData = (data: API.DailyRow[], totalValue: number | null) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n if (data[data.length - 1].date === format(today, \"yyyy-MM-dd\")) {\n data;\n }\n\n return data.concat([calculate(data, totalValue)]);\n };\n\n const calculateData = (data: API.DailyRow[], realtime: boolean) => {\n const _data = !realtime ? data : mergeData(data, totalValue);\n\n return _data.slice(Math.max(0, _data.length - periodValue));\n };\n\n const calculatedData = useMemo(() => {\n /**\n * need the totalValue and data are all ready, else return null;\n */\n if (totalValue == null) return [];\n return calculateData(data, isRealtime);\n }, [data, totalValue, assetHistory, isRealtime]);\n\n const aggregateValue = useMemo(() => {\n let vol = zero;\n let pnl = zero;\n let roi = zero;\n\n if (Array.isArray(calculatedData) && calculatedData.length) {\n calculatedData.forEach((d) => {\n // vol = vol.add(d.perp_volume);\n pnl = pnl.add(d.pnl);\n });\n\n const tail = calculatedData[0];\n\n const dataTailIndex = data.findIndex((d) => d.date === tail.date);\n\n const lastAccountValue = data[dataTailIndex - 1]?.account_value;\n\n // console.log(data, calculatedData, tail, dataTailIndex);\n\n if (typeof lastAccountValue === \"undefined\" || lastAccountValue === 0) {\n roi = zero;\n } else {\n roi = pnl.div(lastAccountValue);\n }\n }\n\n if (data.length > 0) {\n for (let i = 0; i < periodValue; i++) {\n const item = data[data.length - 1 - i];\n\n if (item) {\n vol = vol.add(item.perp_volume ?? 0);\n }\n }\n }\n\n // console.log(\"---------------------------\");\n\n return { vol: vol.toNumber(), pnl: pnl.toNumber(), roi: roi.toNumber() };\n }, [calculatedData, data, periodValue]);\n\n const createFakeData = (\n start: Partial<API.DailyRow>,\n end: Partial<API.DailyRow>\n ) => {\n return Array.from({ length: 2 }, (_, i) => {\n const date = format(i === 0 ? startDate : new Date(), \"yyyy-MM-dd\");\n\n return {\n date,\n ...(i === 0 ? start : end),\n };\n });\n };\n\n return {\n periodTypes,\n period,\n onPeriodChange,\n data: calculatedData,\n aggregateValue,\n createFakeData,\n volumeUpdateDate: data?.[data.length - 1]?.date ?? \"\",\n } as const;\n};\n\nexport type useAssetsHistoryDataReturn = ReturnType<\n typeof useAssetsHistoryData\n>;\n","import { Card } from \"@orderly.network/ui\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useAssetsLineChartScriptReturn } from \"./assetsChart.script\";\nimport { AssetLineChart } from \"@orderly.network/chart\";\n\nexport type AssetsLineChartProps = {} & useAssetsLineChartScriptReturn;\n\nexport const AssetsChartUI = (props: AssetsLineChartProps) => {\n const { onPeriodChange, periodTypes, period, data } = props;\n\n return (\n <Card\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title=\"Assets\"\n />\n }\n id=\"portfolio-overview-assets-chart\"\n classNames={{\n content: \"oui-h-[168px] oui-pb-0\",\n }}\n >\n <AssetLineChart data={props.data} invisible={props.invisible} />\n {/* <PnlLineChart data={data} /> */}\n {/* <LineChart data={data} /> */}\n </Card>\n );\n};\n","import { CardTitle, Flex, Select, Text } from \"@orderly.network/ui\";\nimport { PeriodType } from \"./useAssetHistory\";\n\nexport const PeriodTitle = (props: {\n onPeriodChange: (period: PeriodType) => void;\n periodTypes: string[];\n period: PeriodType;\n title: string;\n}) => {\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{props.title}</CardTitle>\n\n <div className={\"oui-min-w-14\"}>\n <Select.options\n size={\"xs\"}\n value={props.period}\n onValueChange={props.onPeriodChange}\n options={props.periodTypes.map((item) => ({\n value: item,\n label: item,\n }))}\n />\n </div>\n </Flex>\n );\n};\n","import { useAssetsLineChartScript } from \"./assetsChart.script\";\nimport { AssetsChartUI } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget = () => {\n const state = useAssetsLineChartScript();\n return <AssetsChartUI {...state} />;\n};\n","import {\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { ArrowLeftRightIcon } from \"@orderly.network/ui\";\nimport { AssetHistory, AssetHistoryWidget } from \"../assetHistory\";\nimport { TabName } from \"./useState.script\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { DistributionHistoryWidget } from \"../distribution\";\n\nexport const HistoryDataGroupUI = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\n return (\n <Card>\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"xl\"\n // classNames={{\n // tabsList: \"oui-px-3\",\n // }}\n >\n <TabPanel\n title={\"Deposits & Withdrawals\"}\n icon={<ArrowLeftRightIcon />}\n value={\"deposit\"}\n >\n <AssetHistoryWidget />\n </TabPanel>\n <TabPanel title={\"Funding\"} icon={<FeeTierIcon />} value={\"funding\"}>\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={\"Distribution\"}\n icon={<ServerFillIcon />}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n capitalizeFirstLetter,\n Text,\n Flex,\n TokenIcon,\n toast,\n type Column,\n} from \"@orderly.network/ui\";\nimport { useQuery } from \"@orderly.network/hooks\";\n\nexport const useAssetHistoryColumns = () => {\n const { data: chains } = useQuery(\"/v1/public/chain_info\");\n\n const columns = useMemo(() => {\n return [\n {\n title: \"Token\",\n dataIndex: \"token\",\n width: 80,\n render: (value) => {\n return (\n <Flex gapX={1}>\n <TokenIcon name={value} size=\"xs\" />\n <span>{value}</span>\n </Flex>\n );\n },\n },\n {\n title: \"Time\",\n dataIndex: \"created_time\",\n width: 80,\n rule: \"date\",\n },\n {\n title: \"TxID\",\n dataIndex: \"tx_id\",\n width: 120,\n\n render: (value, record) => {\n if (!value) {\n return <div className=\"oui-text-base-contrast-54\">-</div>;\n }\n const chainInfo = (chains as any[])?.find(\n (item) => parseInt(record.chain_id) === parseInt(item.chain_id)\n );\n const explorer_base_url = chainInfo?.explorer_base_url;\n const href = `${explorer_base_url}/tx/${value}`;\n return (\n <a href={href} target=\"_blank\">\n {/* <Tooltip content={value} delayDuration={0}> */}\n\n <Text.formatted\n copyable={!!value}\n rule=\"txId\"\n className=\"oui-underline-offset-4 oui-underline oui-decoration-dashed oui-decoration-line-16\"\n onCopy={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(\"Copy success\");\n }}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n },\n {\n title: \"Status\",\n dataIndex: \"trans_status\",\n width: 100,\n formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n },\n {\n title: \"Type\",\n dataIndex: \"side\",\n width: 80,\n formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n render: (value) => {\n return <Text color={value.toLowerCase()}>{value}</Text>;\n },\n },\n {\n title: \"Amount\",\n dataIndex: \"amount\",\n width: 100,\n rule: \"price\",\n formatter: (value, record) =>\n record.side === \"WITHDRAW\"\n ? -(value - (record.fee ?? 0))\n : value - (record.fee ?? 0),\n numeralProps: {\n coloring: true,\n showIdentifier: true,\n },\n // formatter: \"date\",\n },\n ] as Column[];\n }, [chains]);\n\n return columns;\n};\n\nexport const SIDES = [\n { label: \"All\", value: \"All\" },\n { label: \"Deposit\", value: \"DEPOSIT\" },\n { label: \"Withdrawal\", value: \"WITHDRAW\" },\n];\n","import { useMemo, useState } from \"react\";\nimport { useAssetsHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nconst useAssetHistoryHook = () => {\n // const [fileter, setFilter] = useState<FilterParams>({});\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const [side, setSide] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { meta, isLoading }] = useAssetsHistory({\n startTime: dateRange[0].getTime().toString(),\n endTime: set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n .getTime()\n .toString(),\n page,\n pageSize,\n side,\n });\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // console.log(\"filter.value\", filter.value);\n\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n total: meta?.total,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n // onSearch,\n onFilter,\n pagination,\n };\n};\n\nexport { useAssetHistoryHook };\n\nexport type UseAssetHistoryReturn = ReturnType<typeof useAssetHistoryHook>;\n","import { differenceInDays, setHours } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n","import { FC } from \"react\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { SIDES, useAssetHistoryColumns } from \"./column\";\nimport { type UseAssetHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\ntype AssetHistoryProps = {\n // dataSource?: any[];\n // page?: number;\n // pageSize?: number;\n // dataCount?: number;\n} & UseAssetHistoryReturn;\n\nexport const AssetHistory: FC<AssetHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const { side, dateRange } = queryParameter;\n const columns = useAssetHistoryColumns();\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"side\",\n options: SIDES,\n value: side,\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n\n <AuthGuardDataTable\n bordered\n loading={isLoading}\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n columns={columns}\n dataSource={dataSource}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { AssetHistory } from \"./dataTable.ui\";\nimport { useAssetHistoryHook } from \"./useDataSource.script\";\n\nexport const AssetHistoryWidget = () => {\n const state = useAssetHistoryHook();\n return <AssetHistory {...state} />;\n};\n","import { DataFilter } from \"@orderly.network/ui\";\nimport { useFundingHistoryColumns } from \"./column\";\nimport { FC } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryUI: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const columns = useFundingHistoryColumns();\n const symbols = useSymbolsInfo();\n\n const { symbol, dateRange } = queryParameter;\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options: [\n {\n label: \"All\",\n value: \"All\",\n },\n ...Object.keys(symbols).map((symbol) => {\n const s = symbol.split(\"_\")[1];\n return {\n label: s,\n value: symbol,\n };\n }),\n ],\n value: symbol,\n valueFormatter: (value) => {\n if (value === \"All\") {\n return \"All\";\n }\n return value.split(\"_\")[1];\n },\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n generatedRowKey={(record) => `${record.updated_time}`}\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\nimport { Flex, Text, type Column } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useFundingHistoryColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Symbol\",\n dataIndex: \"symbol\",\n width: 80,\n rule: \"symbol\",\n textProps: {\n showIcon: true,\n },\n },\n {\n title: \"Time\",\n dataIndex: \"created_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: \"Funding rate / Annual rate\",\n dataIndex: \"funding_rate\",\n width: 80,\n render: (value: any, record) => {\n return (\n <Flex gap={1}>\n {/* <span>{`${record.funding_rate * 100}%`}</span> */}\n <Text.numeral rule={\"percentages\"} dp={6}>\n {record.funding_rate}\n </Text.numeral>\n <span>/</span>\n {/* <span>{`${record.annual_rate * 10}%`}</span> */}\n <Text.numeral rule={\"percentages\"} dp={6}>\n {record.annual_rate}\n </Text.numeral>\n </Flex>\n );\n },\n },\n {\n title: \"Payment type\",\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n return \"Paid\";\n case \"Receive\":\n return \"Received\";\n default:\n return value;\n }\n },\n },\n {\n title: \"Funding fee (USDC)\",\n dataIndex: \"funding_fee\",\n width: 80,\n rule: \"price\",\n formatter(value, record, index) {\n return Number(value) * -1;\n },\n numeralProps: {\n coloring: true,\n showIdentifier: true,\n ignoreDP: true,\n },\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, []);\n\n return columns;\n};\n","import { useFundingFeeHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nexport const useFundingHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const [symbol, setSymbol] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta, isValidating }] = useFundingFeeHistory(\n {\n // dataRange: dateRange.map((date) => date.getTime()),\n dataRange: [\n dateRange[0].getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n // addDays(dateRange[1], 1)\n .getTime(),\n ],\n symbol,\n page,\n pageSize,\n },\n {\n keepPreviousData: true,\n }\n );\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"symbol\") {\n setSymbol(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n symbol,\n dateRange,\n },\n onFilter,\n pagination,\n } as const;\n};\n\nexport type UseFundingHistoryReturn = ReturnType<typeof useFundingHistoryHook>;\n","import { FundingHistoryUI } from \"./fundingHistory.ui\";\nimport { useFundingHistoryHook } from \"./useDataSource.script\";\n\nexport const FundingHistoryWidget = () => {\n const state = useFundingHistoryHook();\n return <FundingHistoryUI {...state} />;\n};\n","import { DataFilter } from \"@orderly.network/ui\";\nimport { TYPES, useColumns } from \"./column\";\nimport { FC } from \"react\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryUI: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, isValidating } =\n props;\n const columns = useColumns();\n const { type, dateRange } = queryParameter;\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"type\",\n options: TYPES,\n value: type,\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n }}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { Flex, type Column, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Token\",\n dataIndex: \"token\",\n width: 80,\n // rule: \"symbol\",\n render: (value, record) => {\n return (\n <Flex gapX={2}>\n <TokenIcon name={value} size=\"xs\" />\n <span>{value}</span>\n </Flex>\n );\n },\n },\n {\n title: \"Time\",\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: \"Status\",\n dataIndex: \"status\",\n width: 120,\n formatter(value, record, index) {\n switch (value) {\n case \"CREATED\":\n case \"SPLIT\":\n return \"Processing\";\n case \"COMPLETED\":\n default:\n return \"Completed\";\n }\n },\n },\n\n {\n title: \"Type\",\n dataIndex: \"type\",\n width: 80,\n formatter: (value: any) => {\n switch (value) {\n case \"REFERRER_REBATE\":\n return \"Referral commission\";\n case \"REFEREE_REBATE\":\n return \"Referee rebate\";\n case \"BROKER_FEE\":\n return \"Broker fee\";\n default:\n return \"-\";\n }\n },\n },\n {\n title: \"Amount\",\n dataIndex: \"amount\",\n width: 80,\n // rule: \"price\",\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, []);\n\n return columns;\n};\n\nexport const TYPES = [\n { label: \"All\", value: \"All\" },\n { label: \"Referral commission\", value: \"REFERRER_REBATE\" },\n { label: \"Referee rebate\", value: \"REFEREE_REBATE\" },\n { label: \"Broker fee\", value: \"BROKER_FEE\" },\n];\n","import { useDistributionHistory } from \"@orderly.network/hooks\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nexport const useDistributionHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const [type, setType] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta, isValidating }] = useDistributionHistory({\n // dataRange: dateRange.map((date) => date.getTime()),\n dataRange: [\n dateRange[0].getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n }).getTime(),\n ],\n type,\n pageSize,\n page,\n });\n\n // console.log(\"----\", isLoading, isValidating);\n\n // const res = useQuery(\"v1/public/info/funding_period\");\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"type\") {\n setType(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n type,\n dateRange,\n },\n onFilter,\n pagination,\n } as const;\n};\n\nexport type useDistributionHistoryHookReturn = ReturnType<\n typeof useDistributionHistoryHook\n>;\n","import { DistributionHistoryUI } from \"./distribution.ui\";\nimport { useDistributionHistoryHook } from \"./useDataSource.script\";\n\nexport const DistributionHistoryWidget = () => {\n const state = useDistributionHistoryHook();\n return <DistributionHistoryUI {...state} />;\n};\n","import { useState } from \"react\";\n\nexport type TabName = \"deposit\" | \"funding\" | \"distribution\";\n\nexport const useStateScript = () => {\n const [active, setActive] = useState<TabName>(\"deposit\");\n\n return {\n active,\n onTabChange: (value: string) => setActive(value as TabName),\n };\n};\n\nexport type UseStateScript = ReturnType<typeof useStateScript>;\n","import { HistoryDataGroupUI } from \"./historyDataGroup.ui\";\nimport { useStateScript } from \"./useState.script\";\n\nexport const HistoryDataGroupWidget = () => {\n const state = useStateScript();\n return <HistoryDataGroupUI {...state} />;\n};\n","import { Card, Grid, Box, Statistic, Text, Flex } from \"@orderly.network/ui\";\n\nimport { UsePerformanceScriptReturn } from \"./performance.script\";\nimport { PnLBarChart, PnlLineChart } from \"@orderly.network/chart\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useMemo } from \"react\";\n\nexport type PerformanceUIProps = {\n // periodTypes: string[];\n // period: string;\n // onPeriodChange: (period: string) => void;\n} & UsePerformanceScriptReturn;\n\nexport const PerformanceUI = (props: PerformanceUIProps) => {\n const {\n periodTypes,\n period,\n onPeriodChange,\n aggregateValue,\n invisible,\n visible,\n volumeUpdateDate,\n } = props;\n\n return (\n <Card\n // @ts-ignore\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title=\"Performance\"\n />\n }\n id=\"portfolio-overview-performance\"\n >\n <Grid cols={3} gap={4}>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n label={`${period} ROI`}\n // @ts-ignore\n valueProps={{\n rule: \"percentages\",\n coloring: true,\n visible,\n }}\n >\n {invisible ? \"--\" : aggregateValue.roi}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n label={`${period} PnL`}\n // @ts-ignore\n valueProps={{\n coloring: true,\n showIdentifier: true,\n visible,\n }}\n >\n {invisible ? \"--\" : aggregateValue.pnl}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n classNames={{\n label: \"oui-w-full\",\n }}\n label={\n <Flex justify={\"between\"}>\n <span>{`${period} Volume (USDC)`}</span>\n <span>{volumeUpdateDate}</span>\n </Flex>\n }\n >\n {invisible ? \"--\" : aggregateValue.vol}\n </Statistic>\n </Box>\n </Grid>\n <Grid cols={2} gap={4}>\n <PerformancePnL data={props.data ?? []} invisible={props.invisible} />\n <CumulativePnlChart\n data={props.data ?? []}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Grid>\n </Card>\n );\n};\n\nexport const PerformancePnL = (props: { data: any[]; invisible: boolean }) => {\n // console.log(props.data);\n // const tickValues = useMemo(() => {\n // if (!Array.isArray(props.data) || !props.data.length) return;\n // return [props.data[0].date, props.data[props.data?.length - 1].date];\n // }, [props.data]);\n\n return (\n <Box mt={4} height={\"188px\"}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n Daily PnL\n </Text>\n <Box r=\"md\" className=\"oui-border oui-border-line-4 oui-h-[188px]\">\n <PnLBarChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </Box>\n );\n};\n\nexport const CumulativePnlChart = (props: {\n data: any[];\n invisible: boolean;\n}) => {\n return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n Cumulative PnL\n </Text>\n <Box r=\"md\" className=\"oui-border oui-border-line-4 oui-h-[188px]\">\n <PnlLineChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n {/* <Chart data={props.data} x={\"date\"} y={\"pnl\"}>\n <Axis orientation=\"left\" />\n </Chart> */}\n </Box>\n </Box>\n );\n};\n","import { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../providers/overviewCtx\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useMemo } from \"react\";\n\nexport const usePerformanceScript = () => {\n const ctx = useOverviewContext();\n const [visible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const { wrongNetwork } = useAppContext();\n const { state } = useAccount();\n const filteredData = useDataTap(ctx.data, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: ctx.createFakeData(\n {\n account_value: 0,\n pnl: 0,\n },\n { account_value: 500, pnl: 500 }\n ),\n // fallbackData:\n // ctx.data && ctx.data.length >= 2\n // ? [ctx.data[0], ctx.data[ctx.data.length - 1]]\n // : ctx.createFakeData(\n // {\n // account_value: 0,\n // pnl: 0,\n // },\n // { account_value: 1000, pnl: 1000 }\n // ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length ?? 0 > 0) return filteredData;\n return ctx.createFakeData(\n {\n account_value: 0,\n pnl: 0,\n },\n { account_value: 500, pnl: 500 }\n );\n }, [filteredData]);\n\n return {\n ...ctx,\n data: _data,\n invisible:\n wrongNetwork ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected),\n visible,\n };\n};\n\nexport type UsePerformanceScriptReturn = ReturnType<\n typeof usePerformanceScript\n>;\n","import { PerformanceUI } from \"./performance.ui\";\nimport { usePerformanceScript } from \"./performance.script\";\n\nexport const PerformanceWidget = () => {\n const state = usePerformanceScript();\n\n return <PerformanceUI {...state} />;\n};\n","import { Grid } from \"@orderly.network/ui\";\nimport { PerformanceWidget } from \"./performance\";\nimport { AssetsChartWidget } from \"./assetChart/assetsChart.widget\";\nimport { AssetWidget } from \"./assets\";\nimport { HistoryDataGroupWidget } from \"./historyDataGroup\";\nimport { OverviewContextProvider } from \"./providers/overviewCtx\";\n\nexport const OverviewPage = () => {\n return (\n <OverviewContextProvider>\n <Grid cols={2} gap={4}>\n <AssetWidget />\n <AssetsChartWidget />\n <Grid.span colSpan={2}>\n <PerformanceWidget />\n </Grid.span>\n <Grid.span colSpan={2}>\n <HistoryDataGroupWidget />\n </Grid.span>\n </Grid>\n </OverviewContextProvider>\n );\n};\n","export { FeeTierPage } from \"./page\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { dataSource as defaultDataSource } from \"./dataSource\";\nimport { AccountStatusEnum, API } from \"@orderly.network/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { Column } from \"@orderly.network/ui\";\nimport { useFeeTierColumns } from \"./column\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: Column[],\n dataSource: any[]\n ) => { columns: Column[]; dataSource: any[] };\n onRow?: (\n record: any,\n index: number\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport function useFeeTierScript(options?: UseFeeTierScriptOptions) {\n const { dataAdapter } = options || {};\n const [tier, setTier] = useState<number>();\n const { data } = useAccountInfo();\n const { state } = useAccount();\n\n const cols = useFeeTierColumns();\n\n const { data: volumeStatistics } = usePrivateQuery<\n | {\n perp_volume_last_30_days: number;\n }\n | undefined\n >(\"/v1/volume/user/stats\");\n\n const { columns, dataSource } = useMemo(() => {\n return typeof dataAdapter === \"function\"\n ? dataAdapter(cols, defaultDataSource)\n : {\n columns: cols,\n dataSource: defaultDataSource,\n };\n }, [dataAdapter, cols]);\n\n const getFuturesCurrentTier = (\n feeList: typeof defaultDataSource,\n data: API.AccountInfo\n ) => {\n const { futures_taker_fee_rate = 0, futures_maker_fee_rate = 0 } = data;\n const takerRate = `${new Decimal(futures_taker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n const makerRate = `${new Decimal(futures_maker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n\n for (const item of feeList) {\n if (takerRate === item.taker_fee && makerRate === item.maker_fee) {\n return item.tier;\n }\n }\n };\n\n useEffect(() => {\n if (!data) {\n return;\n }\n\n const tier = getFuturesCurrentTier(dataSource, data);\n setTier(tier!);\n }, [data, dataSource]);\n\n const futures_taker_fee_rate = useMemo(() => {\n const value = data?.futures_taker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const futures_maker_fee_rate = useMemo(() => {\n const value = data?.futures_maker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const authData = useDataTap(\n {\n tier,\n vol: volumeStatistics?.perp_volume_last_30_days,\n takerFeeRate: futures_taker_fee_rate,\n makerFeeRate: futures_maker_fee_rate,\n },\n {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n }\n );\n\n return {\n ...authData,\n columns,\n dataSource,\n onRow: options?.onRow,\n };\n}\n","export const dataSource = [\n {\n tier: 1,\n maker_fee: \"0.03%\",\n taker_fee: \"0.06%\",\n volume_min: 0,\n volume_max: 500000,\n },\n {\n tier: 2,\n maker_fee: \"0.02%\",\n taker_fee: \"0.05%\",\n volume_min: 500000,\n volume_max: 2500000,\n },\n {\n tier: 3,\n maker_fee: \"0.015%\",\n taker_fee: \"0.045%\",\n volume_min: 2500000,\n volume_max: 10000000,\n },\n {\n tier: 4,\n maker_fee: \"0.01%\",\n taker_fee: \"0.04%\",\n volume_min: 10000000,\n volume_max: 50000000,\n },\n {\n tier: 5,\n maker_fee: \"0.005%\",\n taker_fee: \"0.035%\",\n volume_min: 50000000,\n volume_max: 125000000,\n or: \"/\",\n staking_min: 300000,\n staking_max: null,\n },\n {\n tier: 6,\n maker_fee: \"0%\",\n taker_fee: \"0.03%\",\n volume_min: 125000000,\n volume_max: null,\n or: \"/\",\n staking: null,\n staking_min: null,\n staking_max: null,\n },\n];\n","import { useMemo } from \"react\";\nimport { type Column, Text } from \"@orderly.network/ui\";\nimport { numberToHumanStyle } from \"@orderly.network/utils\";\n\nexport const useFeeTierColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Tier\",\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: \"30 day volume (USDC)\",\n dataIndex: \"volume\",\n align: \"center\",\n width: 170,\n render: (value, row) => {\n const { volume_min, volume_max, volume_node } = row;\n\n if (volume_node) return volume_node;\n if (!volume_min && !volume_max) {\n return <div style={{ fontVariantLigatures: \"none\" }}>--</div>;\n }\n\n if (volume_min && !volume_max) {\n return (\n <div>\n {\"Above \"}\n {numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\n </div>\n );\n }\n return (\n <div>\n {volume_min &&\n numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\n {` - `}\n {volume_max &&\n numberToHumanStyle(volume_max, volume_max === 2500000 ? 1 : 0)}\n </div>\n );\n },\n },\n {\n title: \"Maker\",\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n {\n title: \"Taker\",\n dataIndex: \"taker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n ] as Column[];\n }, []);\n\n return columns;\n};\n","import { FC, ReactNode, useCallback, useEffect, useState } from \"react\";\nimport {\n Box,\n Flex,\n Text,\n Card,\n Divider,\n DataTable,\n Column,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useFeeTierScriptReturn } from \"./feeTier.script\";\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, takerFeeRate, makerFeeRate } = props;\n return (\n <Card\n // @ts-ignore\n title={\n <Flex justify={\"between\"}>\n <Text size=\"lg\">Fee tier</Text>\n <Flex gap={1}>\n <Text size=\"xs\" intensity={54}>\n Updated daily by\n </Text>\n <Text size=\"xs\" intensity={80}>\n 2:00 UTC\n </Text>\n </Flex>\n </Flex>\n }\n className=\"w-full\"\n id=\"oui-portfolio-fee-tier\"\n >\n <Divider />\n <FeeTierHeader\n tier={tier!}\n vol={vol!}\n takerFeeRate={takerFeeRate!}\n makerFeeRate={makerFeeRate!}\n />\n <FeeTierTable\n dataSource={dataSource}\n columns={columns}\n tier={tier}\n onRow={props.onRow}\n />\n </Card>\n );\n};\n\nexport type FeeTierHeaderProps = {\n tier?: number;\n vol?: number;\n takerFeeRate?: string;\n makerFeeRate?: string;\n};\n\nexport const FeeTierHeader: React.FC<FeeTierHeaderProps> = (props) => {\n return (\n <Flex direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n <FeeTierHeaderItem\n label=\"Your tier\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.tier || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label=\"30D trading volume (USDC)\"\n value={\n <Text.numeral rule=\"price\" dp={2} rm={Decimal.ROUND_DOWN}>\n {typeof props.vol !== undefined ? `${props.vol}` : \"-\"}\n </Text.numeral>\n }\n />\n <FeeTierHeaderItem\n label=\"Taker fee rate\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.takerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label=\"Maker fee rate\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.makerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n </Flex>\n );\n};\n\nexport type FeeTierHeaderItemProps = {\n label: string;\n value: ReactNode;\n};\n\nexport const FeeTierHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n return (\n <Box\n gradient=\"neutral\"\n r=\"lg\"\n px={4}\n py={2}\n angle={184}\n width=\"100%\"\n border\n borderColor={6}\n >\n <Text\n as=\"div\"\n intensity={36}\n size=\"2xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {props.label}\n </Text>\n\n <Text\n size=\"base\"\n intensity={80}\n className=\"oui-leading-[24px] oui-mt-[2px]\"\n >\n {props.value}\n </Text>\n </Box>\n );\n};\n\ntype FeeTierTableProps = {\n columns: Column[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\n onRow?: (\n record: any,\n index: number\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport const FeeTierTable: FC<FeeTierTableProps> = (props) => {\n const [top, setTop] = useState<undefined | number>(undefined);\n useEffect(() => {\n const parentRect = document\n .getElementById(\"oui-fee-tier-content\")\n ?.getBoundingClientRect();\n const elementRect = document\n .getElementById(\"oui-fee-tier-current\")\n ?.getBoundingClientRect();\n\n if (elementRect && parentRect && !!props.tier) {\n const offsetTop = elementRect.top - parentRect.top;\n setTop(offsetTop);\n } else {\n setTop(undefined);\n }\n }, [props.tier]);\n\n const onRow = useCallback(\n (record: any, index: number) => {\n const config = props?.onRow?.(record, index) ?? {\n normal: undefined,\n active: undefined,\n };\n if (index + 1 == props.tier) {\n const innerConfig = {\n id: \"oui-fee-tier-current\",\n \"data-state\": \"active\",\n className:\n \"group oui-h-12 oui-text-[rgba(0,0,0,0.88)] oui-pointer-events-none\",\n };\n return {\n ...innerConfig,\n ...config.active,\n };\n }\n\n return {\n \"data-state\": \"none\",\n ...{ className: \"oui-h-12\" },\n ...config.normal,\n };\n },\n [props.tier, props.onRow]\n );\n\n return (\n <Box\n id=\"oui-fee-tier-content\"\n className=\"oui-border-b oui-border-line-4 oui-relative\"\n >\n {top && (\n <Box\n angle={90}\n gradient=\"brand\"\n className=\"oui-rounded-md oui-absolute oui-w-full\"\n style={{\n top: `${top}px`,\n height: \"48px\",\n }}\n />\n )}\n <DataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-bg-transparent\",\n }}\n onRow={onRow}\n columns={props.columns}\n dataSource={props.dataSource}\n />\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { useFeeTierScript, UseFeeTierScriptOptions } from \"./feeTier.script\";\nimport { FeeTier } from \"./feeTier.ui\";\n\nexport type FeeTierWidgetProps = UseFeeTierScriptOptions;\n\nexport const FeeTierWidget: FC<FeeTierWidgetProps> = (props) => {\n const state = useFeeTierScript(props);\n return <FeeTier {...state} />;\n};\n","import { FC } from \"react\";\nimport { FeeTierWidget, FeeTierWidgetProps } from \"./feeTier.widget\";\n\nexport type FeeTierPageProps = FeeTierWidgetProps;\n\nexport const FeeTierPage: FC<FeeTierPageProps> = (props) => {\n return <FeeTierWidget {...props} />;\n};\n","import { LiquidationWidget, PositionHistoryWidget, PositionsProps, PositionsWidget } from \"@orderly.network/ui-positions\";\nimport { Flex, Text, Divider, Box, Tabs, TabPanel } from \"@orderly.network/ui\";\nimport { useState } from \"react\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage = (props: PositionsProps) => {\n const [tab, setTab] = useState(TabsType.positions);\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex>\n <Text size=\"lg\">Positions</Text>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <Tabs value={tab} onValueChange={(e) => setTab(e as any)} classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }} className=\"oui-h-full\">\n <TabPanel value={TabsType.positions} title={TabsType.positions}>\n <PositionsWidget {...props} />\n </TabPanel>\n <TabPanel value={TabsType.positionHistory} title={TabsType.positionHistory}>\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel value={TabsType.liquidation} title={TabsType.liquidation}>\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { Box, Button, Divider, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { OrderListInstance, OrdersWidget } from \"@orderly.network/ui-orders\";\n\nexport const OrdersPage = (props: { sharePnLConfig?: SharePnLConfig }) => {\n const { sharePnLConfig } = props;\n\n const ordersRef = useRef<OrderListInstance>(null);\n\n const onDownload = () => {\n ordersRef.current?.download?.();\n };\n\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex width=\"100%\" justify=\"between\">\n <Text size=\"lg\">Orders</Text>\n <Tooltip content=\"The downloaded data will reflect only the applied filters (e.g., status, time, side, and pagination) and may not include all records.\">\n <Button\n color=\"gray\"\n size=\"sm\"\n className=\"oui-bg-base-4\"\n onClick={onDownload}\n >\n Download\n <TooltipIcon className=\"oui-text-base-contrast-36 oui-ml-[5px]\" />\n </Button>\n </Tooltip>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <OrdersWidget ref={ordersRef} sharePnLConfig={sharePnLConfig} />\n </Box>\n </Flex>\n );\n};\n\nconst TooltipIcon: 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.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n);\n","export { APIManagerWidget } from \"./apiManager.widget\";\nexport { APIManagerPage } from \"./apiManager.page\";\n","import {\n Box,\n Button,\n Card,\n CopyIcon,\n Flex,\n PlusIcon,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport {\n ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\nimport { FC, useState } from \"react\";\nimport { CreateAPIKeyDialog } from \"./dialog/createApiKey\";\nimport { CreatedAPIKeyDialog } from \"./dialog/createdApiKey\";\nimport { DeleteAPIKeyDialog } from \"./dialog/deleteApiKey\";\nimport { EditAPIKeyDialog } from \"./dialog/editApiKey\";\nimport {\n AuthGuardEmpty,\n AuthGuardDataTable,\n AuthGuardTooltip,\n} from \"@orderly.network/ui-connector\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\n\nexport const APIManager: FC<ApiManagerScriptReturns> = (props) => {\n return (\n <Card\n title={\"API keys\"}\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction={\"column\"}\n gap={4}\n width={\"100%\"}\n className=\"oui-font-semibold\"\n >\n <AccountInfo {...props} />\n <Subtitle {...props} />\n </Flex>\n <div>\n <KeyList {...props} />\n <CreateAPIKeyDialog {...props} />\n <CreatedAPIKeyDialog {...props} />\n </div>\n </Card>\n );\n};\n\nconst AccountInfo: FC<ApiManagerScriptReturns> = (props) => {\n return (\n <Flex\n width={\"100%\"}\n gap={4}\n className=\"oui-border-t-2 oui-border-line-6 oui-pt-4\"\n >\n <Flex\n py={2}\n px={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n r=\"xl\"\n gradient=\"neutral\"\n angle={27}\n border\n className=\"oui-w-1/2\"\n >\n <Text size=\"xs\" intensity={36}>\n Account ID\n </Text>\n <Text.formatted\n size=\"base\"\n inlist={80}\n rule={\"address\"}\n copyable={props.address !== \"--\"}\n copyIconSize={16}\n onCopy={props.onCopyAccountId}\n copyIconTestid=\"oui-testid-apiKey-accountInfo-accountId-copy-btn\"\n >\n {props.address}\n </Text.formatted>\n </Flex>\n <Flex\n py={2}\n px={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n r=\"xl\"\n gradient=\"neutral\"\n angle={27}\n border\n className=\"oui-w-1/2\"\n >\n <Text size=\"xs\" intensity={36}>\n UID\n </Text>\n <Text size=\"base\" inlist={80}>\n {props.uid}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst Subtitle: FC<ApiManagerScriptReturns> = (props) => {\n return (\n <Flex\n width={\"100%\"}\n direction={\"row\"}\n className=\"oui-text-sm oui-border-b-2 oui-border-line-6 oui-pb-4\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} width={\"100%\"} gap={1}>\n <Text intensity={54}>\n Create API keys to suit your trading needs. For your security, don't\n share your API keys with anyone.{\" \"}\n </Text>\n <Flex\n itemAlign={\"center\"}\n className=\"oui-text-primary-light oui-fill-primary-light hover:oui-text-primary-darken oui-cursor-pointer oui-text-2xs md:oui-text-xs xl:oui-text-sm\"\n onClick={props.onReadApiGuide}\n >\n <Text>Read API guide</Text>\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 >\n <path d=\"M4.008 7.995c0-.368.298-.666.666-.666H9.71L7.733 5.331l.937-.936 3.143 3.122c.13.13.195.304.195.479a.67.67 0 0 1-.195.478L8.67 11.596l-.937-.937 1.978-1.998H4.674a.666.666 0 0 1-.666-.666\" />\n </svg>\n </Flex>\n </Flex>\n <AuthGuardTooltip\n side=\"top\"\n tooltip={{\n connectWallet: \"Please connect wallet before create API key\",\n signIn: \"Please sign in before create API key\",\n enableTrading: \"Please enable trading before create API key\",\n wrongNetwork:\n \"Please switch to a supported network to create API key\",\n }}\n >\n <Button\n size=\"md\"\n icon={<PlusIcon />}\n variant=\"contained\"\n color=\"primary\"\n onClick={props.onCreateApiKey}\n disabled={!props.canCreateApiKey || props.wrongNetwork}\n // className=\"disabled:oui-cursor-default\"\n data-testid=\"oui-testid-apiKey-createApiKey-btn\"\n >\n Create API key\n </Button>\n </AuthGuardTooltip>\n </Flex>\n );\n};\n\nconst KeyList: FC<ApiManagerScriptReturns> = (props) => {\n const columns: Column<APIKeyItem>[] = [\n {\n title: \"API key\",\n dataIndex: \"orderly_key\",\n render: (value) => {\n return (\n <Text.formatted\n rule={\"\"}\n copyable\n copyIconSize={16}\n onCopy={() => {\n props.onCopyApiKey?.(value);\n }}\n >\n {formatKey(value)}\n </Text.formatted>\n );\n },\n },\n {\n title: \"Permission type\",\n dataIndex: \"scope\",\n render: (value) =>\n value\n ?.split(\",\")\n .map((e: any) => capitalizeFirstChar(`${e}`))\n .join(\", \"),\n },\n {\n title: \"Restricted IP\",\n dataIndex: \"ip_restriction_list\",\n render: (value) => {\n let ip = value.join(\",\");\n if (ip.length === 0) {\n ip = \"--\";\n }\n return (\n <Tooltip content={ip} className=\"oui-max-w-[200px] oui-break-all\">\n <Flex gap={1}>\n <div className=\" oui-overflow-ellipsis oui-overflow-hidden\">\n {ip}\n </div>\n {ip !== \"--\" && (\n <Box width={16} height={16} className=\"oui-cursor-pointer\">\n <CopyIcon\n color=\"white\"\n opacity={0.54}\n size={16}\n onClick={(e) => {\n navigator.clipboard.writeText(ip);\n props?.onCopyIP();\n }}\n />\n </Box>\n )}\n </Flex>\n </Tooltip>\n );\n },\n },\n {\n title: \"Expiration date\",\n dataIndex: \"expiration\",\n render: (value) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd\">\n {value}\n </Text.formatted>\n ),\n },\n {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: 120,\n render: (_, item) => {\n return (\n <Flex direction={\"row\"} gap={2}>\n <EditButton\n item={item}\n onUpdate={props.doEdit}\n verifyIP={props.verifyIP}\n />\n <DeleteButton item={item} onDelete={props.doDelete} />\n </Flex>\n );\n },\n },\n ];\n return (\n <AuthGuardDataTable\n bordered\n columns={columns}\n loading={props.isLoading}\n dataSource={props.keys}\n emptyView={<AuthGuardEmpty />}\n classNames={{}}\n pagination={props.pagination}\n manualPagination={false}\n />\n );\n};\n\nconst EditButton: FC<{\n item: APIKeyItem;\n onUpdate: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, onUpdate, verifyIP } = props;\n const [open, setOpen] = useState(false);\n return (\n <>\n <Button\n size=\"xs\"\n color=\"primary\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n }}\n data-testid=\"oui-testid-apiKey-keyList-edit-btn\"\n >\n Edit\n </Button>\n\n {open && (\n <EditAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onUpdate={onUpdate}\n verifyIP={verifyIP}\n />\n )}\n </>\n );\n};\n\nconst DeleteButton: FC<{\n item: APIKeyItem;\n onDelete: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, onDelete } = props;\n const [open, setOpen] = useState(false);\n return (\n <>\n <Button\n size=\"xs\"\n color=\"gray\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n }}\n data-testid=\"oui-testid-apiKey-keyList-delete-btn\"\n >\n Delete\n </Button>\n\n {open && (\n <DeleteAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onDelete={onDelete}\n />\n )}\n </>\n );\n};\n\nexport function formatKey(value: string): string {\n if (typeof value === \"undefined\") return \"-\";\n const key = `${value}`.replace(\"ed25519:\", \"\").slice(0, 6);\n return `${key}*****`;\n}\n","import {\n APIKeyItem,\n OrderlyContext,\n ScopeType,\n useAccount,\n useApiKeyManager,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast, usePagination } from \"@orderly.network/ui\";\nimport { useContext, useEffect, useMemo, useState } from \"react\";\n\nexport type GenerateKeyInfo = {\n key: string;\n screctKey: string;\n ip?: string;\n permissions?: string;\n};\n\nexport const useApiManagerScript = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus } = props ?? {};\n const [showCreateDialog, setShowCreateDialog] = useState(false);\n const [showCreatedDialog, setShowCreatedDialog] = useState(false);\n const [generateKey, setGenerateKey] = useState<GenerateKeyInfo | undefined>();\n const { configStore } = useContext(OrderlyContext);\n const brokerId = configStore.get(\"brokerId\");\n const { wrongNetwork } = useAppContext();\n\n const { state, account } = useAccount();\n const canCreateApiKey =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n const { data } = useQuery<\n | undefined\n | {\n user_id: number;\n account_id: string;\n }\n >(\n `/v1/get_account?address=${account.address}&broker_id=${brokerId}&chain_type=${account.walletAdapter?.chainNamespace}`\n );\n\n const [\n keys,\n {\n generateOrderlyKey,\n setIPRestriction,\n removeOrderlyKey,\n resetOrderlyKeyIPRestriction,\n refresh,\n isLoading,\n error,\n },\n ] = useApiKeyManager({\n keyInfo: { key_status: keyStatus },\n });\n\n const [curPubKey, setCurPubKey] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n account.keyStore\n .getOrderlyKey()\n ?.getPublicKey()\n .then((pubKey) => {\n setCurPubKey(pubKey);\n });\n }, [account, state]);\n\n const onCreateApiKey = () => {\n setShowCreateDialog(true);\n };\n const onReadApiGuide = () => {\n window.open(\n \"https://orderly.network/docs/build-on-evm/evm-api/api-authentication\",\n \"_blank\"\n );\n };\n\n const hideCreateDialog = () => {\n setShowCreateDialog(false);\n };\n\n const doCreate = async (\n ipRestriction?: string,\n scope?: ScopeType\n ): Promise<number> => {\n try {\n const createdSuccess = (\n res: {\n key: string;\n secretKey: string;\n },\n ip?: string\n ) => {\n const { key, secretKey } = res;\n hideCreateDialog();\n setGenerateKey({\n key: key,\n screctKey: secretKey,\n ip: ip,\n permissions: scope\n ?.split(\",\")\n ?.map((e) => capitalizeFirstChar(e))\n .join(\", \"),\n });\n setShowCreatedDialog(true);\n };\n\n const generateKeyRes = await generateOrderlyKey(scope);\n\n toast.success(\"API key created\");\n console.log(\"xxx generateKeyRes\", generateKeyRes);\n\n if ((ipRestriction?.length || 0) > 0) {\n const key = generateKeyRes.key.startsWith(\"ed25519:\")\n ? generateKeyRes.key\n : `ed25519:${generateKeyRes.key}`;\n const res = await setIPRestriction(key, ipRestriction!);\n console.log(\"set ip res\", res);\n if (res.success) {\n createdSuccess(\n generateKeyRes,\n res.data.ip_restriction_list?.join(\",\")\n );\n }\n } else {\n createdSuccess(generateKeyRes, undefined);\n }\n } catch (err: any) {\n if (err?.message) toast.error(err?.message);\n }\n\n return Promise.resolve(0);\n };\n\n const hideCreatedDialog = () => {\n setShowCreatedDialog(false);\n refresh();\n };\n\n const onCopyApiKeyInfo = () => {\n navigator.clipboard.writeText(JSON.stringify(generateKey));\n toast.success(\"API info copied\");\n };\n const doConfirm = () => {\n hideCreatedDialog();\n };\n\n const doDelete = (item: APIKeyItem): Promise<any> => {\n return new Promise(async (resolve) => {\n await removeOrderlyKey(item.orderly_key)\n .then(\n async (data) => {\n if (data?.success) {\n toast.success(\"API key deleted\");\n refresh();\n // delete current api key, wiil disconnect\n const curKey = await account.keyStore\n .getOrderlyKey()\n ?.getPublicKey();\n if (item.orderly_key === curKey) {\n account.destroyOrderlyKey();\n }\n }\n resolve(1);\n },\n (reject) => {}\n )\n .catch((err) => {});\n });\n };\n\n const doEdit = async (item: APIKeyItem, ip?: string): Promise<void> => {\n let future;\n if ((ip?.length || 0) === 0) {\n future = resetOrderlyKeyIPRestriction(item.orderly_key, \"ALLOW_ALL_IPS\");\n } else {\n future = setIPRestriction(item.orderly_key, ip!);\n }\n\n const data = await future;\n\n if (data.success) {\n toast.success(\"API key updated\");\n refresh();\n return Promise.resolve();\n } else {\n toast.error(data.message);\n }\n return Promise.reject();\n };\n\n const onCopyAccountId = () => toast.success(\"Account id copied\");\n const onCopyApiKey = (key?: string) => {\n if (typeof key !== \"undefined\") {\n navigator.clipboard.writeText(key.replace(\"ed25519:\", \"\"));\n }\n toast.success(\"API key copied\");\n };\n const onCopyApiSecretKey = () => toast.success(\"Secret key copied\");\n const onCopyIP = () => toast.success(\"Restricted IP copied\");\n\n const keyList = useMemo(() => {\n return keys?.filter((e) => {\n const filterTag = filterTags ? filterTags?.includes(e.tag) : true;\n const filterCurKey = curPubKey\n ? !e.orderly_key.includes(curPubKey)\n : true;\n return filterTag && filterCurKey;\n });\n }, [keys, filterTags, curPubKey]);\n\n const verifyIP = (ip: string) => {\n const ipRegex =\n /^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(,((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9]))*$/;\n return ipRegex.test(ip)\n ? \"\"\n : \"The IP restriction format is incorrect. Please use the correct format: [xx.xx.xxx.x],[xx.xxx.xxx.xxx]\";\n };\n\n const accountStatus =\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading;\n\n const address = useDataTap(data?.account_id, {\n accountStatus,\n });\n const uid = useDataTap(data?.user_id, {\n accountStatus,\n });\n\n const { pagination } = usePagination();\n\n return {\n address: address ?? \"--\",\n uid: `${uid ?? \"--\"}`,\n onCreateApiKey,\n onReadApiGuide,\n showCreateDialog,\n hideCreateDialog,\n doCreate,\n showCreatedDialog,\n hideCreatedDialog,\n onCopyApiKeyInfo,\n doConfirm,\n doDelete,\n doEdit,\n canCreateApiKey,\n status: state.status,\n keys: keyList,\n generateKey,\n onCopyAccountId,\n wrongNetwork,\n onCopyApiKey,\n onCopyApiSecretKey,\n onCopyIP,\n verifyIP,\n isLoading,\n pagination,\n };\n};\n\nexport function capitalizeFirstChar(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport type ApiManagerScriptReturns = ReturnType<typeof useApiManagerScript>;\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Box,\n cn,\n CopyIcon,\n // Checkbox,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { ScopeType } from \"@orderly.network/hooks\";\n\nexport const CreateAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const [ipText, setIpText] = useState(\"\");\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [hint, setHint] = useState(\"\");\n useEffect(() => {\n if (!props.showCreateDialog) {\n setIpText(\"\");\n setRead(true);\n setTrade(true);\n setHint(\"\");\n }\n }, [props.showCreateDialog]);\n\n useEffect(() => {\n if (ipText.length === 0) setHint(\"\");\n }, [ipText]);\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreateDialog}\n onOpenChange={(open) => {\n props.hideCreateDialog?.();\n }}\n title=\"Create API key\"\n actions={{\n primary: {\n label: \"Confirm\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n \"data-testid\": \"oui-testid-apiKey-createApiKey-dialog-comfirm-btn\",\n onClick: async () => {\n if (ipText.length > 0) {\n const hint = props.verifyIP(ipText);\n setHint(hint);\n if (hint.length > 0) {\n return;\n }\n }\n\n const scopes: string[] = [];\n if (read) {\n scopes.push(\"read\");\n }\n if (trade) {\n scopes.push(\"trading\");\n }\n await props.doCreate(ipText, scopes.join(\",\") as ScopeType);\n },\n disabled: !trade && !read,\n size: \"md\",\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n {/* <TextField label={\"IP restriction (optional)\"} rows={5} className=\"oui-w-full oui-h-auto\" classNames={{\n input: \"oui-h-[100px]\",\n root: \"oui-h-[100px]\"\n }}/> */}\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n IP restriction (optional)\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder=\"Add IP addresses, separated by commas.\"\n className={cn(\n \"oui-text-sm oui-text-base-contrast-80 oui-p-3 oui-h-[100px] oui-rounded-xl oui-bg-base-6 oui-w-full\",\n \"oui-border-0 focus:oui-border-2 focus:oui-border-primary-darken oui-outline-none\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\"\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-h-1 oui-w-1 oui-rounded-full oui-bg-danger\"\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n Permissions\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label=\"Read\"\n testid=\"oui-testid-apiKey-createApiKey-dialog-read-checkbox\"\n />\n <Checkbox\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label=\"Trading\"\n testid=\"oui-testid-apiKey-createApiKey-dialog-trading-checkbox\"\n />\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n\nexport const Checkbox: FC<{\n size?: number;\n checked: boolean;\n onCheckedChange: (checked?: boolean) => void;\n disabled?: boolean;\n label: string;\n testid?: string;\n}> = (props) => {\n return (\n <button\n disabled={props.disabled}\n onClick={(e) => {\n props.onCheckedChange(!props.checked);\n }}\n className={\n \"disabled:oui-cursor-not-allowed disabled:oui-opacity-50 oui-flex oui-items-center oui-gap-2\"\n }\n data-testid={props.testid}\n >\n {props.checked ? (\n <svg\n width={\"props.size\"}\n height={props.size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.99072 2.92981C4.78172 2.92981 2.99072 4.72071 2.99072 6.92981V16.9298C2.99072 19.1389 4.78172 20.9298 6.99072 20.9298H16.9907C19.1997 20.9298 20.9907 19.1389 20.9907 16.9298V6.92981C20.9907 4.72071 19.1997 2.92981 16.9907 2.92981H6.99072ZM16.9853 7.31211C17.2125 7.09537 17.5236 7 17.8218 7C18.1201 7 18.4312 7.09537 18.6584 7.31211C19.1139 7.74546 19.1139 8.47384 18.6584 8.9072L10.5077 16.675C10.0534 17.1083 9.28909 17.1083 8.83472 16.675L5.34077 13.3459C4.88641 12.9126 4.88641 12.1841 5.34077 11.7508C5.79631 11.3175 6.56057 11.3175 7.01493 11.7508L9.67122 14.2822L16.9853 7.31211Z\"\n fill=\"white\"\n fillOpacity=\"0.54\"\n />\n </svg>\n ) : (\n <svg\n width={props.size}\n height={props.size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.99072 2.92981C4.78172 2.92981 2.99072 4.72071 2.99072 6.92981V16.9298C2.99072 19.1389 4.78172 20.9298 6.99072 20.9298H16.9907C19.1997 20.9298 20.9907 19.1389 20.9907 16.9298V6.92981C20.9907 4.72071 19.1997 2.92981 16.9907 2.92981H6.99072ZM6.99072 4.92981H16.9907C18.0957 4.92981 18.9907 5.82521 18.9907 6.92981V16.9298C18.9907 18.0344 18.0957 18.9298 16.9907 18.9298H6.99072C5.88572 18.9298 4.99072 18.0344 4.99072 16.9298V6.92981C4.99072 5.82521 5.88572 4.92981 6.99072 4.92981Z\"\n fill=\"white\"\n fillOpacity=\"0.54\"\n />\n </svg>\n )}\n <Text intensity={54} size=\"sm\">\n {props.label}\n </Text>\n </button>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Box,\n Checkbox,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreatedAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const ip = props.generateKey?.ip ?? \"--\";\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreatedDialog}\n onOpenChange={(open) => {\n props.hideCreatedDialog?.();\n }}\n title=\"API key created\"\n actions={{\n primary: {\n label: \"OK\",\n \"data-testid\": \"oui-testid-apiKey-createdApiKey-dialog-ok-btn\",\n className:\n \"oui-w-[120px] lg:oui-w-[154px] oui-bg-base-2 hover:oui-bg-base-3\",\n size: \"md\",\n onClick: async () => {\n return props.doConfirm();\n },\n },\n secondary: {\n label: \"Copy API info\",\n \"data-testid\": \"oui-testid-apiKey-createdApiKey-dialog-copy-btn\",\n className:\n \"oui-w-[120px] lg:oui-w-[154px] oui-bg-primary-darken hover:oui-opacity-80\",\n size: \"md\",\n onClick: async () => {\n return props.onCopyApiKeyInfo();\n },\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n body: \"oui-py-0 oui-pt-5\",\n }}\n >\n <Flex direction={\"column\"} gap={4} itemAlign={\"start\"}>\n <Statistic label=\"Account ID\">\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={props.onCopyAccountId}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-key-span\"\n >\n {props.address}\n </Text.formatted>\n </Statistic>\n <Statistic label=\"API key\">\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={() => props.onCopyApiKey(props.generateKey?.key)}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-key-span\"\n >\n {props.generateKey?.key}\n </Text.formatted>\n </Statistic>\n <Statistic label=\"Secret key\">\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={props.onCopyApiSecretKey}\n >\n {props.generateKey?.screctKey}\n </Text.formatted>{\" \"}\n </Statistic>\n <Statistic label=\"IP\">\n <Flex\n width={320}\n gap={1}\n itemAlign={\"center\"}\n className=\"oui-text-base-contrast-80 oui-text-sm\"\n >\n <Box className=\"oui-max-h-[100px] oui-flex-1 oui-overflow-hidden oui-text-ellipsis oui-line-clamp-5 oui-break-all\">\n {ip}\n </Box>\n {ip !== \"--\" && (\n <Box\n width={16}\n height={16}\n className=\"oui-cursor-pointer oui-flex-shrink-0\"\n >\n <CopyIcon\n color=\"white\"\n opacity={0.54}\n size={16}\n onClick={(e) => {\n if (props.generateKey?.ip)\n navigator.clipboard.writeText(props.generateKey?.ip);\n props?.onCopyIP();\n }}\n />\n </Box>\n )}\n </Flex>\n </Statistic>\n <Statistic label=\"Permissions\">\n <Text\n size=\"sm\"\n intensity={80}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-permissions-span\"\n >\n {props.generateKey?.permissions}\n </Text>\n </Statistic>\n <div></div>\n <Text color=\"warning\" size=\"xs\" className=\"oui-text-center\">\n Please copy the API secret. Once you close this pop-up, the API secret\n will be encrypted.\n </Text>\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Checkbox,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { formatKey } from \"../apiManager.ui\";\n\nexport const DeleteAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onDelete?: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, open, setOpen, onDelete } = props;\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title=\"Delete API key\"\n actions={{\n primary: {\n label: \"Confirm\",\n \"data-testid\": \"oui-testid-apiKey-deleteApiKey-dialog-confirm-btn\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n size: \"md\",\n onClick: async () => {\n await props.onDelete?.(item);\n setOpen(false);\n },\n },\n secondary: {\n label: \"Cancel\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n size: \"md\",\n onClick: async () => {\n setOpen(false);\n },\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex className=\"oui-text-xs\">\n Delete your API key &nbsp;\n <Text color=\"primary\">{formatKey(item?.orderly_key)}</Text>&nbsp;?\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n cn,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { Checkbox } from \"./createApiKey\";\n\nexport const EditAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onUpdate?: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, open, setOpen, onUpdate } = props;\n const [ipText, setIpText] = useState(item.ip_restriction_list?.join(\",\"));\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [hint, setHint] = useState(\"\");\n\n useEffect(() => {\n setIpText(item.ip_restriction_list.join(\",\"));\n setRead(item.scope?.toLocaleLowerCase().includes(\"read\") || false);\n setTrade(item.scope?.toLocaleLowerCase().includes(\"trading\") || false);\n }, [item]);\n\n useEffect(() => {\n if (ipText.length === 0) setHint(\"\");\n }, [ipText]);\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title=\"Edit API key\"\n actions={{\n primary: {\n label: \"Confirm\",\n \"data-testid\": \"oui-testid-apiKey-editApiKey-dialog-confirm-btn\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n onClick: async () => {\n if (ipText.length > 0) {\n const hint = props.verifyIP(ipText);\n setHint(hint);\n if (hint.length > 0) {\n return;\n }\n }\n await props.onUpdate?.(item, ipText);\n setOpen(false);\n },\n disabled: item.ip_restriction_list.join(\",\") === ipText,\n size: \"md\",\n fullWidth: true,\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n {/* <TextField label={\"IP restriction (optional)\"} rows={5} className=\"oui-w-full oui-h-auto\" classNames={{\n input: \"oui-h-[100px]\",\n root: \"oui-h-[100px]\"\n }}/> */}\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n IP restriction (optional)\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-editApiKey-dialog-textarea\"\n placeholder=\"Add IP addresses, separated by commas.\"\n className={cn(\n \"oui-text-sm oui-text-base-contrast-80 oui-p-3 oui-h-[100px] oui-rounded-xl oui-bg-base-6 oui-w-full\",\n \"oui-border-0 focus:oui-border-2 focus:oui-border-primary-darken oui-outline-none\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\"\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-h-1 oui-w-1 oui-rounded-full oui-bg-danger\"\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n Permissions\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n disabled\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label=\"Read\"\n />\n <Checkbox\n disabled\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label=\"Trading\"\n />\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n","import { APIManager } from \"./apiManager.ui\";\nimport { useApiManagerScript } from \"./apiManager.script\";\n\n\nexport const APIManagerWidget = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const state = useApiManagerScript(props);\n return <APIManager {...state} />;\n};\n","import { APIManagerWidget } from \"./apiManager.widget\";\n\n/**\n * API key manager page\n * @param filterTags filterTags\n * @param keyStatus filterTags default is \"ACTIVE\"\n * @returns\n */\nexport const APIManagerPage = (props: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus = \"ACTIVE\" } = props;\n return <APIManagerWidget filterTags={filterTags} keyStatus={keyStatus}/>;\n};\n","export { SettingWidget } from \"./setting.widget\";\nexport { SettingPage } from \"./setting.page\";\n","import { FC } from \"react\";\nimport { Card, Flex, Switch, Text } from \"@orderly.network/ui\";\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { AuthGuardTooltip } from \"@orderly.network/ui-connector\";\n\nexport const Setting: FC<SettingScriptReturns> = (props) => {\n return (\n <Card\n title={\"System upgrade\"}\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={4}\n className=\"oui-font-semibold oui-border-t-2 oui-border-line-6\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-flex-1\">\n <Text intensity={80} size=\"base\">\n Cancel open orders during system upgrade\n </Text>\n <Text intensity={54} size=\"sm\">\n During the upgrade period, all open orders will be cancelled to\n manage your risk in case of high market volatility.\n </Text>\n </Flex>\n\n <AuthGuardTooltip align=\"end\">\n <Switch\n checked={props.maintenance_cancel_orders}\n onCheckedChange={(e) => {\n props.setMaintainConfig(e);\n }}\n disabled={props.isSetting || !props.canTouch}\n data-testid=\"oui-testid-setting-switch-btn\"\n />{\" \"}\n </AuthGuardTooltip>\n </Flex>\n </Card>\n );\n};\n","import {\n APIKeyItem,\n OrderlyContext,\n ScopeType,\n useAccount,\n useAccountInfo,\n useApiKeyManager,\n useDebouncedCallback,\n useMutation,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useContext, useEffect, useState } from \"react\";\n\nexport type SettingScriptReturns = {\n maintenance_cancel_orders?: boolean;\n setMaintainConfig: (maintenance_cancel_order_flag: boolean) => void;\n isSetting: boolean;\n canTouch: boolean;\n};\n\nexport const useSettingScript = (): SettingScriptReturns => {\n const { data, mutate: refresh } = useAccountInfo();\n const { wrongNetwork } = useAppContext();\n const [update, { isMutating }] = useMutation(\"/v1/client/maintenance_config\");\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n setChecked(data?.maintenance_cancel_orders || false);\n }, [data]);\n\n const updateCheckState = useDebouncedCallback((value: boolean) => {\n // if (value === data?.maintenance_cancel_orders) return;\n update({\n maintenance_cancel_order_flag: value,\n }).then((data) => {\n if (data.success) {\n // toast.success(value ? \"Opened\" : \"Closed\");\n } else {\n setChecked(!value);\n }\n });\n }, 300);\n\n const setMaintainConfig = (maintenance_cancel_order_flag: boolean) => {\n setChecked(maintenance_cancel_order_flag);\n updateCheckState(maintenance_cancel_order_flag);\n };\n const { state } = useAccount();\n\n return {\n maintenance_cancel_orders: checked, //data?.maintenance_cancel_orders,\n setMaintainConfig,\n isSetting: false,\n canTouch:\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected) &&\n !wrongNetwork,\n };\n};\n","import { Setting } from \"./setting.ui\";\nimport { useSettingScript } from \"./setting.script\";\n\n\nexport const SettingWidget = () => {\n const state = useSettingScript();\n return <Setting {...state} />;\n};\n","import { SettingWidget } from \"./setting.widget\";\n\nexport const SettingPage = () => {\n return <SettingWidget />\n};"]}
1
+ {"version":3,"sources":["../src/layout/layout.ui.tsx","../src/layout/layout.script.tsx","../src/layout/layout.widget.tsx","../src/pages/overview/index.tsx","../src/pages/overview/assets/useBuilder.script.ts","../src/pages/overview/assets/assets.ui.tsx","../src/pages/overview/assets/assetsHeader.tsx","../src/pages/overview/assets/assets.widget.tsx","../src/pages/overview/assetChart/assetsChart.script.ts","../src/pages/overview/providers/overviewCtx.tsx","../src/pages/overview/shared/useAssetHistory.ts","../src/pages/overview/assetChart/assetsChart.ui.tsx","../src/pages/overview/shared/periodHeader.tsx","../src/pages/overview/assetChart/assetsChart.widget.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.ui.tsx","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/assetHistory/useDataSource.script.ts","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/dataTable.ui.tsx","../src/pages/overview/assetHistory/widget.tsx","../src/pages/overview/funding/fundingHistory.ui.tsx","../src/pages/overview/funding/column.tsx","../src/pages/overview/funding/useDataSource.script.ts","../src/pages/overview/funding/fundingHistory.widget.tsx","../src/pages/overview/distribution/distribution.ui.tsx","../src/pages/overview/distribution/column.tsx","../src/pages/overview/distribution/useDataSource.script.ts","../src/pages/overview/distribution/distribution.widget.tsx","../src/pages/overview/historyDataGroup/useState.script.ts","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/performance/performance.ui.tsx","../src/pages/overview/performance/performance.script.ts","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/main.tsx","../src/pages/feeTier/index.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/dataSource.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/positions/page.tsx","../src/pages/orders/page.tsx","../src/pages/api/index.ts","../src/pages/api/apiManager.ui.tsx","../src/pages/api/apiManager.script.tsx","../src/pages/api/dialog/createApiKey.tsx","../src/pages/api/dialog/createdApiKey.tsx","../src/pages/api/dialog/deleteApiKey.tsx","../src/pages/api/dialog/editApiKey.tsx","../src/pages/api/apiManager.widget.tsx","../src/pages/api/apiManager.page.tsx","../src/pages/setting/index.ts","../src/pages/setting/setting.ui.tsx","../src/pages/setting/setting.script.tsx","../src/pages/setting/setting.widget.tsx","../src/pages/setting/setting.page.tsx"],"names":["Box","Scaffold","SideBar","useScaffoldContext","jsx","PortfolioLayout","props","children","leftSideProps","LeftSidebar","expanded","setExpand","open","e","useEffect","useMemo","useState","useMediaQuery","PortfolioLeftSidebarPath","usePortfolioLayoutScript","routerAdapter","current","setCurrent","items","hideSideBar","item","PortfolioLayoutWidget","state","overview_exports","__export","AssetHistory","AssetHistoryWidget","AssetWidget","AssetsChartWidget","AssetsUI","DistributionHistoryUI","DistributionHistoryWidget","FundingHistoryWidget","HistoryDataGroupWidget","OverviewContextProvider","OverviewPage","PerformanceUI","PerformanceWidget","useAssetHistoryColumns","useAssetHistoryHook","useAssetsLineChartScript","useFundingHistoryColumns","useFundingHistoryHook","usePerformanceScript","useAccount","useCollateral","useLeverage","useLocalStorage","usePositionStream","useWalletConnector","AccountStatusEnum","modal","LeverageWidgetId","DepositAndWithdrawWithDialogId","useAppContext","useAssetScript","connect","totalValue","freeCollateral","wrongNetwork","disabledConnect","data","currentLeverage","visible","setVisible","canTrade","onLeverageEdit","onDeposit","onWithdraw","Card","Divider","Flex","Grid","Either","Statistic","Text","EyeIcon","gradientTextVariants","EditIcon","EyeCloseIcon","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","Button","CardTitle","jsxs","AssetsHeader","AuthGuard","Fragment","NoValue","AssetStatistic","connectWallet","portfolioValue","rest","useDataTap","createContext","useContext","useAssetsHistory","useStatisticsDaily","subDays","format","getYear","getMonth","getDate","addDays","Decimal","zero","PeriodType","useAssetsHistoryData","localKey","options","today","d","isRealtime","periodTypes","period","setPeriod","getStartDate","value","periodValue","startDate","setStartDate","endDate","assetHistory","onPeriodChange","calculateLastPnl","inputs","list","i","calculate","lastItem","todayFormattedStr","mergeData","calculateData","realtime","_data","calculatedData","aggregateValue","vol","pnl","roi","tail","dataTailIndex","lastAccountValue","start","end","_","OverviewContext","useOverviewContext","filteredData","invisible","Select","PeriodTitle","AssetLineChart","AssetsChartUI","FeeTierIcon","ServerFillIcon","TabPanel","Tabs","ArrowLeftRightIcon","capitalizeFirstLetter","TokenIcon","toast","useQuery","chains","record","href","SIDES","usePagination","subtractDaysFromCurrentDate","differenceInDays","setHours","parseDateRangeForFilter","dateRange","from","to","set","setDateRange","side","setSide","page","pageSize","setPage","parsePagination","meta","isLoading","onFilter","filter","pagination","DataFilter","AuthGuardDataTable","dataSource","queryParameter","columns","index","useSymbolsInfo","FundingHistoryUI","symbols","symbol","useFundingFeeHistory","setSymbol","isValidating","useColumns","TYPES","type","useDistributionHistory","useDistributionHistoryHook","setType","HistoryDataGroupUI","active","onTabChange","useStateScript","setActive","PnLBarChart","PnlLineChart","volumeUpdateDate","PerformancePnL","CumulativePnlChart","ctx","feeTier_exports","FeeTierPage","useAccountInfo","usePrivateQuery","numberToHumanStyle","useFeeTierColumns","row","volume_min","volume_max","volume_node","useFeeTierScript","dataAdapter","tier","setTier","cols","volumeStatistics","getFuturesCurrentTier","feeList","futures_taker_fee_rate","futures_maker_fee_rate","takerRate","makerRate","useCallback","DataTable","FeeTier","takerFeeRate","makerFeeRate","FeeTierHeader","FeeTierTable","FeeTierHeaderItem","top","setTop","parentRect","elementRect","offsetTop","onRow","config","FeeTierWidget","page_exports","PositionsPage","LiquidationWidget","PositionHistoryWidget","PositionsWidget","tab","setTab","OrdersPage","useRef","Tooltip","OrdersWidget","sharePnLConfig","ordersRef","TooltipIcon","api_exports","APIManagerPage","APIManagerWidget","CopyIcon","PlusIcon","OrderlyContext","useApiKeyManager","useApiManagerScript","filterTags","keyStatus","showCreateDialog","setShowCreateDialog","showCreatedDialog","setShowCreatedDialog","generateKey","setGenerateKey","configStore","brokerId","account","canCreateApiKey","keys","generateOrderlyKey","setIPRestriction","removeOrderlyKey","resetOrderlyKeyIPRestriction","refresh","error","curPubKey","setCurPubKey","pubKey","onCreateApiKey","onReadApiGuide","hideCreateDialog","doCreate","ipRestriction","scope","createdSuccess","res","ip","key","secretKey","capitalizeFirstChar","generateKeyRes","err","hideCreatedDialog","onCopyApiKeyInfo","doConfirm","doDelete","resolve","curKey","reject","doEdit","future","onCopyAccountId","onCopyApiKey","onCopyApiSecretKey","onCopyIP","keyList","filterTag","filterCurKey","verifyIP","accountStatus","address","uid","str","cn","SimpleDialog","CreateAPIKeyDialog","ipText","setIpText","read","setRead","trade","setTrade","hint","setHint","scopes","Checkbox","CreatedAPIKeyDialog","DeleteAPIKeyDialog","setOpen","onDelete","formatKey","EditAPIKeyDialog","onUpdate","AuthGuardEmpty","AuthGuardTooltip","APIManager","AccountInfo","Subtitle","KeyList","EditButton","DeleteButton","setting_exports","SettingPage","SettingWidget","Switch","Setting","useDebouncedCallback","useMutation","useSettingScript","update","isMutating","checked","setChecked","updateCheckState","setMaintainConfig","maintenance_cancel_order_flag","canTouch"],"mappings":"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","sourcesContent":["import { FC, PropsWithChildren } from \"react\";\nimport { Box } from \"@orderly.network/ui\";\nimport {\n LayoutProps,\n RouterAdapter,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@orderly.network/ui-scaffold\";\n\nexport type PortfolioLayoutProps = LayoutProps & {\n hideSideBar?: boolean;\n /** @deprecated use leftSideProps.items instead */\n items?: SideBarProps[\"items\"];\n};\n\nexport const PortfolioLayout: FC<PropsWithChildren<PortfolioLayoutProps>> = (\n props\n) => {\n const { children, leftSideProps } = props;\n\n return (\n <Scaffold\n leftSidebar={\n props.hideSideBar ? null : (\n <LeftSidebar\n items={props.items}\n current={props.routerAdapter?.currentPath}\n {...leftSideProps}\n routerAdapter={props.routerAdapter}\n />\n )\n }\n routerAdapter={props.routerAdapter}\n classNames={{\n content: \"lg:oui-mb-0\",\n topNavbar: \"oui-bg-base-9\",\n leftSidebar:\n \"oui-m-3 oui-p-4 oui-broder oui-border-[1px] oui-border-line oui-rounded-xl oui-bg-base-9\",\n }}\n {...props}\n >\n <Box mx={3} my={6}>\n {children}\n </Box>\n </Scaffold>\n );\n};\n\ntype LeftSidebarProps = SideBarProps & {\n routerAdapter?: RouterAdapter;\n};\n\nconst LeftSidebar: FC<LeftSidebarProps> = (props) => {\n const { expanded, setExpand } = useScaffoldContext();\n\n return (\n <SideBar\n title=\"Portfolio\"\n {...props}\n open={expanded}\n onOpenChange={(open) => setExpand(open)}\n onItemSelect={(e) => {\n props.onItemSelect?.(e);\n props.routerAdapter?.onRouteChange?.({\n href: e.href || \"\",\n name: e.name,\n });\n }}\n />\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { SideMenuItem, useScaffoldContext } from \"@orderly.network/ui-scaffold\";\nimport { useMediaQuery } from \"@orderly.network/hooks\";\n\nexport enum PortfolioLeftSidebarPath {\n Overview = \"/portfolio\",\n Positions = \"/portfolio/positions\",\n Orders = \"/portfolio/orders\",\n FeeTier = \"/portfolio/feeTier\",\n ApiKey = \"/portfolio/apiKey\",\n Setting = \"/portfolio/setting\",\n}\n\nexport type UseLayoutBuilderOptions = {\n current?: string;\n};\n\nexport const usePortfolioLayoutScript = (props: UseLayoutBuilderOptions) => {\n const { routerAdapter } = useScaffoldContext();\n const [current, setCurrent] = useState(\n props.current ?? routerAdapter?.currentPath ?? \"/portfolio\"\n );\n\n useEffect(() => {\n if (current || routerAdapter?.currentPath) {\n setCurrent(current || routerAdapter?.currentPath || \"/portfolio\");\n }\n }, [current, routerAdapter?.currentPath]);\n\n const items = useMemo(() => {\n return [\n {\n name: \"Overview\",\n href: PortfolioLeftSidebarPath.Overview,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.24316 2.19727C3.58641 2.19727 2.24316 3.54044 2.24316 5.19727V12.6973C2.24316 14.3541 3.58641 15.6973 5.24316 15.6973H12.7432C14.3999 15.6973 15.7432 14.3541 15.7432 12.6973V5.19727C15.7432 3.54044 14.3999 2.19727 12.7432 2.19727H5.24316ZM5.24316 3.69727H12.7432C13.5719 3.69727 14.2432 4.36882 14.2432 5.19727V12.6973C14.2432 13.2484 13.9319 13.734 13.4894 13.9947C13.3454 12.2235 11.4427 11.1973 8.99316 11.1973C6.54366 11.1973 4.60341 12.251 4.48566 13.9997C4.04241 13.739 3.74316 13.2484 3.74316 12.6973V5.19727C3.74316 4.36882 4.41441 3.69727 5.24316 3.69727ZM8.99316 5.19727C7.54341 5.19727 6.36816 6.37252 6.36816 7.82227C6.36816 9.27202 7.54341 10.4473 8.99316 10.4473C10.4429 10.4473 11.6182 9.27202 11.6182 7.82227C11.6182 6.37252 10.4429 5.19727 8.99316 5.19727Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"Positions\",\n href: PortfolioLeftSidebarPath.Positions,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.51 3.021a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h9a3 3 0 0 0 3-3v-6a3 3 0 0 0-3-3zm2.25 3a.76.76 0 0 1 .54.211.77.77 0 0 1 0 1.078l-.75.75a.77.77 0 0 1-.54.211h-.75a.75.75 0 0 1 0-1.5h.422l.54-.539a.76.76 0 0 1 .539-.21m3 .75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5m-3 2.25a.76.76 0 0 1 .54.211.77.77 0 0 1 0 1.079l-.75.75a.77.77 0 0 1-.54.21h-.75a.75.75 0 0 1 0-1.5h.422l.54-.539a.76.76 0 0 1 .539-.21m3 .75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"Orders\",\n href: PortfolioLeftSidebarPath.Orders,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.693 1.5C4.229 1.5 3.02 2.61 3.02 4.006v9.984c0 1.398 1.208 2.508 2.672 2.508h6.657c1.463 0 2.671-1.11 2.671-2.508V6.726c0-2.672-2.579-5.227-5.25-5.227zm4.828 1.593c1.33.352 2.562 1.58 2.906 2.906h-1.734c-.667 0-1.172-.472-1.172-1.008zm-3.75 2.906h.75a.75.75 0 0 1 0 1.5h-.75a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"Fee tier\",\n href: PortfolioLeftSidebarPath.FeeTier,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.99829 1.51062C4.34154 1.51062 2.99829 2.85387 2.99829 4.51062V13.5106C2.99829 15.1674 4.34154 16.5106 5.99829 16.5106H11.9983C13.655 16.5106 14.9983 15.1674 14.9983 13.5106V4.51062C14.9983 2.85387 13.655 1.51062 11.9983 1.51062H5.99829ZM5.99829 3.76062H11.9983C12.4123 3.76062 12.7483 4.09662 12.7483 4.51062V6.01062C12.7483 6.42462 12.4123 6.76062 11.9983 6.76062H5.99829C5.58429 6.76062 5.24829 6.42462 5.24829 6.01062V4.51062C5.24829 4.09662 5.58429 3.76062 5.99829 3.76062ZM5.99829 8.26062C6.41229 8.26062 6.74829 8.59662 6.74829 9.01062C6.74829 9.42462 6.41229 9.76062 5.99829 9.76062C5.58429 9.76062 5.24829 9.42462 5.24829 9.01062C5.24829 8.59662 5.58429 8.26062 5.99829 8.26062ZM8.99829 8.26062C9.41229 8.26062 9.74829 8.59662 9.74829 9.01062C9.74829 9.42462 9.41229 9.76062 8.99829 9.76062C8.58429 9.76062 8.24829 9.42462 8.24829 9.01062C8.24829 8.59662 8.58429 8.26062 8.99829 8.26062ZM11.9983 8.26062C12.4123 8.26062 12.7483 8.59662 12.7483 9.01062C12.7483 9.42462 12.4123 9.76062 11.9983 9.76062C11.5843 9.76062 11.2483 9.42462 11.2483 9.01062C11.2483 8.59662 11.5843 8.26062 11.9983 8.26062ZM5.99829 10.5106C6.41229 10.5106 6.74829 10.8466 6.74829 11.2606C6.74829 11.6746 6.41229 12.0106 5.99829 12.0106C5.58429 12.0106 5.24829 11.6746 5.24829 11.2606C5.24829 10.8466 5.58429 10.5106 5.99829 10.5106ZM8.99829 10.5106C9.41229 10.5106 9.74829 10.8466 9.74829 11.2606C9.74829 11.6746 9.41229 12.0106 8.99829 12.0106C8.58429 12.0106 8.24829 11.6746 8.24829 11.2606C8.24829 10.8466 8.58429 10.5106 8.99829 10.5106ZM11.9983 10.5106C12.4123 10.5106 12.7483 10.8466 12.7483 11.2606V13.5106C12.7483 13.9246 12.4123 14.2606 11.9983 14.2606C11.5843 14.2606 11.2483 13.9246 11.2483 13.5106V11.2606C11.2483 10.8466 11.5843 10.5106 11.9983 10.5106ZM5.99829 12.7606C6.41229 12.7606 6.74829 13.0966 6.74829 13.5106C6.74829 13.9246 6.41229 14.2606 5.99829 14.2606C5.58429 14.2606 5.24829 13.9246 5.24829 13.5106C5.24829 13.0966 5.58429 12.7606 5.99829 12.7606ZM8.99829 12.7606C9.41229 12.7606 9.74829 13.0966 9.74829 13.5106C9.74829 13.9246 9.41229 14.2606 8.99829 14.2606C8.58429 14.2606 8.24829 13.9246 8.24829 13.5106C8.24829 13.0966 8.58429 12.7606 8.99829 12.7606Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"API key\",\n href: PortfolioLeftSidebarPath.ApiKey,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.02124 1.49915C7.77849 1.49915 6.77124 2.5064 6.77124 3.74915C6.77124 4.70015 7.40049 5.55517 8.26974 5.86942L8.27124 8.24915H5.27124C4.85724 8.24915 4.52124 8.58515 4.52124 8.99915L4.52048 12.1304C3.65723 12.4274 3.02124 13.2981 3.02124 14.2491C3.02124 15.4919 4.02849 16.4991 5.27124 16.4991C6.51399 16.4991 7.52124 15.4919 7.52124 14.2491C7.52124 13.2981 6.92499 12.4596 6.02949 12.1206L6.02124 9.74915H9.02124H12.0212L12.0265 12.1319C11.1257 12.4446 10.5212 13.2981 10.5212 14.2491C10.5212 15.4919 11.5285 16.4991 12.7712 16.4991C14.014 16.4991 15.0212 15.4919 15.0212 14.2491C15.0212 13.2981 14.407 12.4611 13.5272 12.1281L13.5212 8.99915C13.5212 8.58515 13.1852 8.24915 12.7712 8.24915H9.77124L9.76899 5.86639C10.642 5.55814 11.2712 4.70015 11.2712 3.74915C11.2712 2.5064 10.264 1.49915 9.02124 1.49915Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: \"Settings\",\n href: PortfolioLeftSidebarPath.Setting,\n icon: (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.72601 1.84159C5.66251 2.17834 4.74527 2.7296 3.93677 3.48185C3.68702 3.7151 3.61052 4.09534 3.77252 4.39609C4.37327 5.50684 3.74476 6.69484 2.39026 6.76309C2.05801 6.78034 1.76477 7.02559 1.68677 7.34884C1.55252 7.90759 1.49927 8.37559 1.49927 8.98984C1.49927 9.50509 1.55476 10.0878 1.66351 10.6068C1.73101 10.9308 2.01302 11.1641 2.34302 11.1933C3.70652 11.3111 4.38152 12.3506 3.77252 13.6773C3.63752 13.9721 3.69902 14.3246 3.93677 14.5443C4.73327 15.2816 5.64826 15.8006 6.72601 16.1381C7.03351 16.2348 7.38076 16.1186 7.56976 15.8568C8.40376 14.7033 9.61352 14.6988 10.4055 15.8568C10.5923 16.1298 10.9343 16.2611 11.2493 16.1613C12.2895 15.8343 13.2585 15.2771 14.0618 14.5443C14.3093 14.3193 14.3745 13.9541 14.226 13.6541C13.602 12.3948 14.3198 11.2383 15.6083 11.2166C15.9503 11.2106 16.2548 10.9856 16.335 10.6541C16.4648 10.1163 16.4993 9.64759 16.4993 8.98984C16.4993 8.42434 16.4325 7.86709 16.3118 7.32559C16.2353 6.98359 15.936 6.74059 15.585 6.73984C14.3168 6.73759 13.6058 5.49109 14.226 4.39609C14.3985 4.09084 14.3445 3.71735 14.085 3.48185C13.2675 2.73935 12.2708 2.15959 11.226 1.84159C10.905 1.74409 10.5638 1.86409 10.3823 2.14609C9.65776 3.27109 8.30477 3.29135 7.59302 2.16935C7.41077 1.8821 7.05001 1.73809 6.72601 1.84159ZM8.99927 5.98984C10.656 5.98984 11.9993 7.33309 11.9993 8.98984C11.9993 10.6466 10.656 11.9898 8.99927 11.9898C7.34252 11.9898 5.99927 10.6466 5.99927 8.98984C5.99927 7.33309 7.34252 5.98984 8.99927 5.98984Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n ];\n }, []);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item: SideMenuItem) => {\n // console.log(\"item\", item);\n if (typeof item.href === \"undefined\") {\n console.warn(\"Item href is not defined\");\n return;\n }\n setCurrent(item.href!);\n routerAdapter?.onRouteChange({\n href: item.href,\n name: item.name,\n });\n },\n };\n};\n\nexport const useCustomSidebarHook = () => {\n const { expanded, setExpand } = useScaffoldContext();\n\n return {\n open: expanded,\n onOpenChange: (open: boolean) => {\n setExpand(open);\n },\n };\n};\n","import { FC, PropsWithChildren } from \"react\";\nimport { PortfolioLayout, PortfolioLayoutProps } from \"./layout.ui\";\nimport { usePortfolioLayoutScript } from \"./layout.script\";\n\nexport type PortfolioLayoutWidgetProps = PortfolioLayoutProps;\n\nexport const PortfolioLayoutWidget: FC<\n PropsWithChildren<PortfolioLayoutWidgetProps>\n> = (props) => {\n const state = usePortfolioLayoutScript({\n current: props.leftSideProps?.current,\n });\n return (\n <PortfolioLayout {...state} {...props}>\n {props.children}\n </PortfolioLayout>\n );\n};\n","export { AssetWidget, AssetsUI } from \"./assets\";\nexport { AssetsChartWidget } from \"./assetChart/assetsChart.widget\";\nexport { useAssetsLineChartScript } from \"./assetChart/assetsChart.script\";\nexport { HistoryDataGroupWidget } from \"./historyDataGroup\";\n\nexport {\n AssetHistory,\n AssetHistoryWidget,\n useAssetHistoryHook,\n useAssetHistoryColumns,\n} from \"./assetHistory\";\n\nexport {\n PerformanceUI,\n PerformanceWidget,\n usePerformanceScript,\n} from \"./performance\";\nexport {\n FundingHistoryWidget,\n useFundingHistoryColumns,\n useFundingHistoryHook,\n} from \"./funding\";\n\nexport {\n DistributionHistoryWidget,\n DistributionHistoryUI,\n} from \"./distribution\";\n\nexport { OverviewPage } from \"./main\";\n\nexport { OverviewContextProvider } from \"./providers/overviewCtx\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLeverage,\n useLocalStorage,\n usePositionStream,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { LeverageWidgetId } from \"@orderly.network/ui-leverage\";\nimport { DepositAndWithdrawWithDialogId } from \"@orderly.network/ui-transfer\";\nimport { useAppContext } from \"@orderly.network/react-app\";\n\nexport const useAssetScript = () => {\n const { connect } = useWalletConnector();\n const { state } = useAccount();\n const { totalValue, freeCollateral } = useCollateral();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [data] = usePositionStream();\n const [currentLeverage] = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n const onLeverageEdit = () => {\n modal.show(LeverageWidgetId);\n };\n\n const onDeposit = () => {\n modal.show(DepositAndWithdrawWithDialogId, { activeTab: \"deposit\" });\n };\n\n const onWithdraw = () => {\n modal.show(DepositAndWithdrawWithDialogId, { activeTab: \"withdraw\" });\n };\n\n return {\n canTrade,\n connect,\n portfolioValue: totalValue,\n freeCollateral,\n unrealPnL: data.aggregated.total_unreal_pnl,\n unrealROI: data.totalUnrealizedROI,\n currentLeverage,\n onLeverageEdit,\n visible,\n wrongNetwork,\n toggleVisible: () => setVisible(!visible),\n onDeposit,\n onWithdraw,\n } as const;\n};\n\nexport type UseAssetScriptReturn = ReturnType<typeof useAssetScript>;\n","import { FC } from \"react\";\nimport {\n Box,\n Button,\n Card,\n Divider,\n Flex,\n Grid,\n Either,\n Statistic,\n Text,\n EyeIcon,\n gradientTextVariants,\n EditIcon,\n EyeCloseIcon,\n} from \"@orderly.network/ui\";\nimport { AssetsHeader } from \"./assetsHeader\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\n\ntype Props = {\n canTrade?: boolean;\n onConnectWallet?: () => void;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onLeverageEdit?: () => void;\n portfolioValue: number | null;\n visible: boolean;\n toggleVisible: () => void;\n wrongNetwork: boolean;\n} & StatisticProps;\n\ntype StatisticProps = {\n currentLeverage: number;\n unrealPnL: number;\n unrealROI: number;\n freeCollateral: number;\n};\n\nexport const AssetsUI = (props: Props) => {\n return (\n <Card\n classNames={{\n footer: \"oui-h-[48px]\",\n root: \"oui-h-[240px]\",\n }}\n // @ts-ignore\n title={\n <AssetsHeader\n disabled={!props.canTrade}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\n />\n }\n >\n <>\n <Statistic\n label={\n <Flex gap={1}>\n <Text intensity={54}>Total value</Text>\n <button\n onClick={() => {\n props.toggleVisible();\n }}\n data-testid=\"oui-testid-portfolio-assets-eye-btn\"\n >\n {props.visible ? (\n <EyeIcon size={16} color={\"white\"} />\n ) : (\n <EyeCloseIcon size={16} color={\"white\"} />\n )}\n </button>\n </Flex>\n }\n >\n <Either value={props.canTrade!} left={<NoValue />}>\n <Text.numeral\n visible={props.visible}\n unit=\"USDC\"\n // @ts-ignore\n style={{ \"--oui-gradient-angle\": \"45deg\" }}\n unitClassName=\"oui-text-base oui-text-base-contrast-80 oui-h-9 oui-ml-1\"\n className={gradientTextVariants({\n className: \"oui-font-bold oui-text-3xl\",\n color: \"brand\",\n })}\n >\n {props.portfolioValue ?? \"--\"}\n </Text.numeral>\n </Either>\n </Statistic>\n <Divider className=\"oui-my-4\" intensity={8} />\n <AuthGuard buttonProps={{ size: \"lg\", fullWidth: true }}>\n <AssetStatistic\n unrealROI={props.unrealROI}\n unrealPnL={props.unrealPnL}\n freeCollateral={props.freeCollateral}\n currentLeverage={props.currentLeverage}\n onLeverageEdit={props.onLeverageEdit}\n visible={props.visible}\n />\n </AuthGuard>\n </>\n </Card>\n );\n};\n\nconst NoValue: FC = () => {\n return (\n <Flex gap={1} className={\"oui-h-9\"}>\n <Text.gradient color=\"brand\" weight=\"bold\">\n --\n </Text.gradient>\n <Text>USDC</Text>\n </Flex>\n );\n};\n\nexport const AssetStatistic = (\n props: StatisticProps & { onLeverageEdit?: () => void; visible: boolean }\n) => {\n return (\n <Grid cols={3} className=\"oui-h-12\">\n <Statistic label=\"Unrealized PnL\">\n <Flex>\n <Text.numeral\n coloring\n size=\"lg\"\n weight=\"semibold\"\n visible={props.visible}\n >\n {props.unrealPnL}\n </Text.numeral>\n <Text.numeral\n coloring\n rule=\"percentages\"\n size=\"sm\"\n weight=\"semibold\"\n prefix={\"(\"}\n suffix=\")\"\n visible={props.visible}\n >\n {props.unrealROI}\n </Text.numeral>\n </Flex>\n </Statistic>\n <Statistic label=\"Max account leverage\">\n <Flex itemAlign={\"center\"}>\n <span\n data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-value\"\n className=\"oui-text-lg\"\n >\n {props.currentLeverage}\n </span>\n <span>x</span>\n <button\n className=\"oui-ml-1\"\n onClick={() => props.onLeverageEdit?.()}\n data-testid=\"oui-testid-portfolio-assets-maxAccountLeverage-edit-btn\"\n >\n <EditIcon color={\"white\"} size={18} />\n </button>\n </Flex>\n </Statistic>\n <Statistic\n label=\"Available to withdraw\"\n // @ts-ignore\n align=\"right\"\n // @ts-ignore\n valueProps={{ size: \"lg\", visible: props.visible }}\n >\n {props.freeCollateral}\n </Statistic>\n </Grid>\n );\n};\n","import {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport { FC } from \"react\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n return (\n <Flex justify={\"between\"}>\n <CardTitle>Overview</CardTitle>\n <Flex gap={3}>\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onWithdraw?.()}\n icon={<ArrowUpSquareFillIcon />}\n data-testid=\"oui-testid-portfolio-assets-withdraw-btn\"\n >\n Withdraw\n </Button>\n <Button\n disabled={props.disabled}\n size=\"md\"\n onClick={() => props.onDeposit?.()}\n icon={<ArrowDownSquareFillIcon />}\n data-testid=\"oui-testid-portfolio-assets-deposit-btn\"\n >\n Deposit\n </Button>\n </Flex>\n </Flex>\n );\n};\n","import { AssetsUI } from \"./assets.ui\";\nimport { useAssetScript } from \"./useBuilder.script\";\n\nexport const AssetWidget = () => {\n const {\n canTrade,\n connect: connectWallet,\n portfolioValue,\n onLeverageEdit,\n ...rest\n } = useAssetScript();\n return (\n <AssetsUI\n onConnectWallet={connectWallet}\n canTrade={canTrade}\n portfolioValue={portfolioValue}\n onLeverageEdit={onLeverageEdit}\n {...rest}\n />\n );\n};\n","import { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { useOverviewContext } from \"../providers/overviewCtx\";\nimport { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const useAssetsLineChartScript = () => {\n // const assetHistory = useAssetsHistoryData(\"portfolio_asset_history_period\", {\n // isRealtime: true,\n // });\n\n const assetHistory = useOverviewContext();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n\n const filteredData = useDataTap(assetHistory.data, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: assetHistory.createFakeData(\n {\n account_value: 0,\n // pnl: 0,\n },\n { account_value: 500 }\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length ?? 0 > 0) return filteredData;\n return assetHistory.createFakeData(\n {\n account_value: 0,\n // pnl: 0,\n },\n { account_value: 500 }\n );\n }, [filteredData]);\n\n const invisible =\n wrongNetwork || disabledConnect || !assetHistory.data.length;\n\n return {\n ...assetHistory,\n data: _data,\n invisible,\n } as const;\n};\n\nexport type useAssetsLineChartScriptReturn = ReturnType<\n typeof useAssetsLineChartScript\n>;\n","import { createContext, useContext } from \"react\";\nimport {\n useAssetsHistoryData,\n useAssetsHistoryDataReturn,\n} from \"../shared/useAssetHistory\";\n\nexport type OverviewContextState = {\n // period: PeriodType;\n} & useAssetsHistoryDataReturn;\n\nexport const OverviewContext = createContext<OverviewContextState>(\n {} as OverviewContextState\n);\n\nconst localKey = \"portfolio_performance_period\";\n\nexport const useOverviewContext = () => {\n return useContext(OverviewContext);\n};\n\nexport const OverviewContextProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n\n return (\n <OverviewContext.Provider\n value={{\n ...state,\n }}\n >\n {children}\n </OverviewContext.Provider>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport {\n useAssetsHistory,\n useCollateral,\n useLocalStorage,\n useStatisticsDaily,\n} from \"@orderly.network/hooks\";\nimport { subDays, format, getYear, getMonth, getDate, addDays } from \"date-fns\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nexport enum PeriodType {\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport const useAssetsHistoryData = (\n localKey: string,\n options?: {\n isRealtime?: boolean;\n }\n) => {\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const { isRealtime = false } = options || {};\n const periodTypes = Object.values(PeriodType);\n const [period, setPeriod] = useLocalStorage<PeriodType>(\n localKey,\n PeriodType.WEEK\n );\n\n const { totalValue } = useCollateral();\n\n const getStartDate = (value: PeriodType) => {\n switch (value) {\n case PeriodType.MONTH:\n return subDays(today, 35);\n\n case PeriodType.QUARTER:\n return subDays(today, 95);\n default:\n return subDays(today, 10);\n }\n };\n\n const periodValue = useMemo(() => {\n switch (period) {\n case PeriodType.WEEK:\n return 7;\n case PeriodType.MONTH:\n return 30;\n case PeriodType.QUARTER:\n return 90;\n default:\n return 7;\n }\n }, [period]);\n\n const [startDate, setStartDate] = useState(getStartDate(period));\n // const nowStamp = useRef(new Date().getTime().toString());\n // const now = useRef(new Date());\n\n const endDate = useMemo(() => addDays(today, 1), [today]);\n\n const [data] = useStatisticsDaily(\n {\n startDate: startDate.toISOString().split(\"T\")[0],\n endDate: endDate.toISOString().split(\"T\")[0],\n },\n {\n ignoreAggregation: true,\n }\n );\n\n const [assetHistory] = useAssetsHistory({\n startTime: subDays(today, 2).getTime().toString(),\n endTime: endDate.getTime().toString(),\n pageSize: 50,\n });\n\n const onPeriodChange = (value: PeriodType) => {\n setStartDate(getStartDate(value));\n setPeriod(value);\n };\n\n // const lastItem = data[data.length - 1];\n\n const calculateLastPnl = (inputs: {\n lastItem: API.DailyRow;\n assetHistory: API.AssetHistoryRow[];\n totalValue: number | null;\n }) => {\n if (totalValue == null) return null;\n // today daily pnl = totalValue - lastItem.account_value - deposit + withdraw\n let value = new Decimal(totalValue).sub(inputs.lastItem.account_value);\n\n // subtraction of deposit and withdraw\n if (\n Array.isArray(inputs.assetHistory) &&\n inputs.assetHistory.length > 0 &&\n typeof inputs.lastItem.snapshot_time !== \"undefined\"\n ) {\n // find a list with the timestamp greater than the last item timestamp and trans_status = success;\n const list = [];\n\n for (let i = 0; i < inputs.assetHistory.length; i++) {\n const item = inputs.assetHistory[i];\n if (item.created_time > inputs.lastItem.snapshot_time) {\n list.push(item);\n }\n }\n\n // console.log(\"--->>>>> list\", list);\n\n // calculate the sum of deposit and withdraw\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (item.side === \"DEPOSIT\") {\n // value -= item.amount;\n if (item.trans_status === \"COMPLETED\") {\n value = value.sub(item.amount);\n }\n } else if (item.side === \"WITHDRAW\") {\n if (item.trans_status !== \"FAILED\") {\n value = value.add(item.amount);\n }\n }\n }\n }\n\n return value.toNumber();\n };\n\n const calculate = (data: API.DailyRow[], totalValue: number | null) => {\n const lastItem = data[data.length - 1];\n const todayFormattedStr = format(today, \"yyyy-MM-dd\");\n\n return {\n ...lastItem,\n date: todayFormattedStr,\n perp_volume: 0,\n account_value:\n totalValue !== null ? totalValue : lastItem?.account_value ?? 0,\n pnl: calculateLastPnl({ lastItem, assetHistory, totalValue }) ?? 0,\n };\n };\n\n const mergeData = (data: API.DailyRow[], totalValue: number | null) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n if (data[data.length - 1].date === format(today, \"yyyy-MM-dd\")) {\n data;\n }\n\n return data.concat([calculate(data, totalValue)]);\n };\n\n const calculateData = (data: API.DailyRow[], realtime: boolean) => {\n const _data = !realtime ? data : mergeData(data, totalValue);\n\n return _data.slice(Math.max(0, _data.length - periodValue));\n };\n\n const calculatedData = useMemo(() => {\n /**\n * need the totalValue and data are all ready, else return null;\n */\n if (totalValue == null) return [];\n return calculateData(data, isRealtime);\n }, [data, totalValue, assetHistory, isRealtime]);\n\n const aggregateValue = useMemo(() => {\n let vol = zero;\n let pnl = zero;\n let roi = zero;\n\n if (Array.isArray(calculatedData) && calculatedData.length) {\n calculatedData.forEach((d) => {\n // vol = vol.add(d.perp_volume);\n pnl = pnl.add(d.pnl);\n });\n\n const tail = calculatedData[0];\n\n const dataTailIndex = data.findIndex((d) => d.date === tail.date);\n\n const lastAccountValue = data[dataTailIndex - 1]?.account_value;\n\n // console.log(data, calculatedData, tail, dataTailIndex);\n\n if (typeof lastAccountValue === \"undefined\" || lastAccountValue === 0) {\n roi = zero;\n } else {\n roi = pnl.div(lastAccountValue);\n }\n }\n\n if (data.length > 0) {\n for (let i = 0; i < periodValue; i++) {\n const item = data[data.length - 1 - i];\n\n if (item) {\n vol = vol.add(item.perp_volume ?? 0);\n }\n }\n }\n\n // console.log(\"---------------------------\");\n\n return { vol: vol.toNumber(), pnl: pnl.toNumber(), roi: roi.toNumber() };\n }, [calculatedData, data, periodValue]);\n\n const createFakeData = (\n start: Partial<API.DailyRow>,\n end: Partial<API.DailyRow>\n ) => {\n return Array.from({ length: 2 }, (_, i) => {\n const date = format(i === 0 ? startDate : new Date(), \"yyyy-MM-dd\");\n\n return {\n date,\n ...(i === 0 ? start : end),\n };\n });\n };\n\n return {\n periodTypes,\n period,\n onPeriodChange,\n data: calculatedData,\n aggregateValue,\n createFakeData,\n volumeUpdateDate: data?.[data.length - 1]?.date ?? \"\",\n } as const;\n};\n\nexport type useAssetsHistoryDataReturn = ReturnType<\n typeof useAssetsHistoryData\n>;\n","import { Card } from \"@orderly.network/ui\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useAssetsLineChartScriptReturn } from \"./assetsChart.script\";\nimport { AssetLineChart } from \"@orderly.network/chart\";\n\nexport type AssetsLineChartProps = {} & useAssetsLineChartScriptReturn;\n\nexport const AssetsChartUI = (props: AssetsLineChartProps) => {\n const { onPeriodChange, periodTypes, period, data } = props;\n\n return (\n <Card\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title=\"Assets\"\n />\n }\n id=\"portfolio-overview-assets-chart\"\n classNames={{\n content: \"oui-h-[168px] oui-pb-0\",\n }}\n >\n <AssetLineChart data={props.data} invisible={props.invisible} />\n {/* <PnlLineChart data={data} /> */}\n {/* <LineChart data={data} /> */}\n </Card>\n );\n};\n","import { CardTitle, Flex, Select, Text } from \"@orderly.network/ui\";\nimport { PeriodType } from \"./useAssetHistory\";\n\nexport const PeriodTitle = (props: {\n onPeriodChange: (period: PeriodType) => void;\n periodTypes: string[];\n period: PeriodType;\n title: string;\n}) => {\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{props.title}</CardTitle>\n\n <div className={\"oui-min-w-14\"}>\n <Select.options\n size={\"xs\"}\n value={props.period}\n onValueChange={props.onPeriodChange}\n options={props.periodTypes.map((item) => ({\n value: item,\n label: item,\n }))}\n />\n </div>\n </Flex>\n );\n};\n","import { useAssetsLineChartScript } from \"./assetsChart.script\";\nimport { AssetsChartUI } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget = () => {\n const state = useAssetsLineChartScript();\n return <AssetsChartUI {...state} />;\n};\n","import {\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { ArrowLeftRightIcon } from \"@orderly.network/ui\";\nimport { AssetHistory, AssetHistoryWidget } from \"../assetHistory\";\nimport { TabName } from \"./useState.script\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { DistributionHistoryWidget } from \"../distribution\";\n\nexport const HistoryDataGroupUI = (props: {\n active?: TabName;\n onTabChange: (tab: string) => void;\n}) => {\n const { active = \"deposit\", onTabChange } = props;\n return (\n <Card>\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"xl\"\n // classNames={{\n // tabsList: \"oui-px-3\",\n // }}\n >\n <TabPanel\n title={\"Deposits & Withdrawals\"}\n icon={<ArrowLeftRightIcon />}\n value={\"deposit\"}\n >\n <AssetHistoryWidget />\n </TabPanel>\n <TabPanel title={\"Funding\"} icon={<FeeTierIcon />} value={\"funding\"}>\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={\"Distribution\"}\n icon={<ServerFillIcon />}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n capitalizeFirstLetter,\n Text,\n Flex,\n TokenIcon,\n toast,\n type Column,\n} from \"@orderly.network/ui\";\nimport { useQuery } from \"@orderly.network/hooks\";\n\nexport const useAssetHistoryColumns = () => {\n const { data: chains } = useQuery(\"/v1/public/chain_info\");\n\n const columns = useMemo(() => {\n return [\n {\n title: \"Token\",\n dataIndex: \"token\",\n width: 80,\n render: (value) => {\n return (\n <Flex gapX={1}>\n <TokenIcon name={value} size=\"xs\" />\n <span>{value}</span>\n </Flex>\n );\n },\n },\n {\n title: \"Time\",\n dataIndex: \"created_time\",\n width: 80,\n rule: \"date\",\n },\n {\n title: \"TxID\",\n dataIndex: \"tx_id\",\n width: 120,\n\n render: (value, record) => {\n if (!value) {\n return <div className=\"oui-text-base-contrast-54\">-</div>;\n }\n const chainInfo = (chains as any[])?.find(\n (item) => parseInt(record.chain_id) === parseInt(item.chain_id)\n );\n const explorer_base_url = chainInfo?.explorer_base_url;\n const href = `${explorer_base_url}/tx/${value}`;\n return (\n <a href={href} target=\"_blank\">\n {/* <Tooltip content={value} delayDuration={0}> */}\n\n <Text.formatted\n copyable={!!value}\n rule=\"txId\"\n className=\"oui-underline-offset-4 oui-underline oui-decoration-dashed oui-decoration-line-16\"\n onCopy={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(\"Copy success\");\n }}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n },\n {\n title: \"Status\",\n dataIndex: \"trans_status\",\n width: 100,\n formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n },\n {\n title: \"Type\",\n dataIndex: \"side\",\n width: 80,\n formatter: (value) => capitalizeFirstLetter(value.toLowerCase()),\n render: (value) => {\n return <Text color={value.toLowerCase()}>{value}</Text>;\n },\n },\n {\n title: \"Amount\",\n dataIndex: \"amount\",\n width: 100,\n rule: \"price\",\n formatter: (value, record) =>\n record.side === \"WITHDRAW\"\n ? -(value - (record.fee ?? 0))\n : value - (record.fee ?? 0),\n numeralProps: {\n coloring: true,\n showIdentifier: true,\n },\n // formatter: \"date\",\n },\n ] as Column[];\n }, [chains]);\n\n return columns;\n};\n\nexport const SIDES = [\n { label: \"All\", value: \"All\" },\n { label: \"Deposit\", value: \"DEPOSIT\" },\n { label: \"Withdrawal\", value: \"WITHDRAW\" },\n];\n","import { useMemo, useState } from \"react\";\nimport { useAssetsHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nconst useAssetHistoryHook = () => {\n // const [fileter, setFilter] = useState<FilterParams>({});\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const [side, setSide] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { meta, isLoading }] = useAssetsHistory({\n startTime: dateRange[0].getTime().toString(),\n endTime: set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n .getTime()\n .toString(),\n page,\n pageSize,\n side,\n });\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // console.log(\"filter.value\", filter.value);\n\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n total: meta?.total,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n // onSearch,\n onFilter,\n pagination,\n };\n};\n\nexport { useAssetHistoryHook };\n\nexport type UseAssetHistoryReturn = ReturnType<typeof useAssetHistoryHook>;\n","import { differenceInDays, setHours } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n","import { FC } from \"react\";\nimport { DataFilter } from \"@orderly.network/ui\";\nimport { SIDES, useAssetHistoryColumns } from \"./column\";\nimport { type UseAssetHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\ntype AssetHistoryProps = {\n // dataSource?: any[];\n // page?: number;\n // pageSize?: number;\n // dataCount?: number;\n} & UseAssetHistoryReturn;\n\nexport const AssetHistory: FC<AssetHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const { side, dateRange } = queryParameter;\n const columns = useAssetHistoryColumns();\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"side\",\n options: SIDES,\n value: side,\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n\n <AuthGuardDataTable\n bordered\n loading={isLoading}\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n columns={columns}\n dataSource={dataSource}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { AssetHistory } from \"./dataTable.ui\";\nimport { useAssetHistoryHook } from \"./useDataSource.script\";\n\nexport const AssetHistoryWidget = () => {\n const state = useAssetHistoryHook();\n return <AssetHistory {...state} />;\n};\n","import { DataFilter } from \"@orderly.network/ui\";\nimport { useFundingHistoryColumns } from \"./column\";\nimport { FC } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryUI: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const columns = useFundingHistoryColumns();\n const symbols = useSymbolsInfo();\n\n const { symbol, dateRange } = queryParameter;\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options: [\n {\n label: \"All\",\n value: \"All\",\n },\n ...Object.keys(symbols).map((symbol) => {\n const s = symbol.split(\"_\")[1];\n return {\n label: s,\n value: symbol,\n };\n }),\n ],\n value: symbol,\n valueFormatter: (value) => {\n if (value === \"All\") {\n return \"All\";\n }\n return value.split(\"_\")[1];\n },\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n generatedRowKey={(record) => `${record.updated_time}`}\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\nimport { Flex, Text, type Column } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useFundingHistoryColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Symbol\",\n dataIndex: \"symbol\",\n width: 80,\n rule: \"symbol\",\n textProps: {\n showIcon: true,\n },\n },\n {\n title: \"Time\",\n dataIndex: \"created_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: \"Funding rate / Annual rate\",\n dataIndex: \"funding_rate\",\n width: 80,\n render: (value: any, record) => {\n return (\n <Flex gap={1}>\n {/* <span>{`${record.funding_rate * 100}%`}</span> */}\n <Text.numeral rule={\"percentages\"} dp={6}>\n {record.funding_rate}\n </Text.numeral>\n <span>/</span>\n {/* <span>{`${record.annual_rate * 10}%`}</span> */}\n <Text.numeral rule={\"percentages\"} dp={6}>\n {record.annual_rate}\n </Text.numeral>\n </Flex>\n );\n },\n },\n {\n title: \"Payment type\",\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n return \"Paid\";\n case \"Receive\":\n return \"Received\";\n default:\n return value;\n }\n },\n },\n {\n title: \"Funding fee (USDC)\",\n dataIndex: \"funding_fee\",\n width: 80,\n rule: \"price\",\n formatter(value, record, index) {\n return Number(value) * -1;\n },\n numeralProps: {\n coloring: true,\n showIdentifier: true,\n ignoreDP: true,\n },\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, []);\n\n return columns;\n};\n","import { useFundingFeeHistory } from \"@orderly.network/hooks\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nexport const useFundingHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const [symbol, setSymbol] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta, isValidating }] = useFundingFeeHistory(\n {\n // dataRange: dateRange.map((date) => date.getTime()),\n dataRange: [\n dateRange[0].getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n // addDays(dateRange[1], 1)\n .getTime(),\n ],\n symbol,\n page,\n pageSize,\n },\n {\n keepPreviousData: true,\n }\n );\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"symbol\") {\n setSymbol(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n symbol,\n dateRange,\n },\n onFilter,\n pagination,\n } as const;\n};\n\nexport type UseFundingHistoryReturn = ReturnType<typeof useFundingHistoryHook>;\n","import { FundingHistoryUI } from \"./fundingHistory.ui\";\nimport { useFundingHistoryHook } from \"./useDataSource.script\";\n\nexport const FundingHistoryWidget = () => {\n const state = useFundingHistoryHook();\n return <FundingHistoryUI {...state} />;\n};\n","import { DataFilter } from \"@orderly.network/ui\";\nimport { TYPES, useColumns } from \"./column\";\nimport { FC } from \"react\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryUI: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, isValidating } =\n props;\n const columns = useColumns();\n const { type, dateRange } = queryParameter;\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"type\",\n options: TYPES,\n value: type,\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n onFilter={(value) => {\n onFilter(value);\n }}\n />\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n }}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { Flex, type Column, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Token\",\n dataIndex: \"token\",\n width: 80,\n // rule: \"symbol\",\n render: (value, record) => {\n return (\n <Flex gapX={2}>\n <TokenIcon name={value} size=\"xs\" />\n <span>{value}</span>\n </Flex>\n );\n },\n },\n {\n title: \"Time\",\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: \"Status\",\n dataIndex: \"status\",\n width: 120,\n formatter(value, record, index) {\n switch (value) {\n case \"CREATED\":\n case \"SPLIT\":\n return \"Processing\";\n case \"COMPLETED\":\n default:\n return \"Completed\";\n }\n },\n },\n\n {\n title: \"Type\",\n dataIndex: \"type\",\n width: 80,\n formatter: (value: any) => {\n switch (value) {\n case \"REFERRER_REBATE\":\n return \"Referral commission\";\n case \"REFEREE_REBATE\":\n return \"Referee rebate\";\n case \"BROKER_FEE\":\n return \"Broker fee\";\n default:\n return \"-\";\n }\n },\n },\n {\n title: \"Amount\",\n dataIndex: \"amount\",\n width: 80,\n // rule: \"price\",\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, []);\n\n return columns;\n};\n\nexport const TYPES = [\n { label: \"All\", value: \"All\" },\n { label: \"Referral commission\", value: \"REFERRER_REBATE\" },\n { label: \"Referee rebate\", value: \"REFEREE_REBATE\" },\n { label: \"Broker fee\", value: \"BROKER_FEE\" },\n];\n","import { useDistributionHistory } from \"@orderly.network/hooks\";\nimport { subtractDaysFromCurrentDate } from \"@orderly.network/utils\";\nimport { useMemo, useState } from \"react\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\n\nexport const useDistributionHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const [today] = useState(() => {\n const d = new Date();\n\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const [type, setType] = useState<string>(\"All\");\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta, isValidating }] = useDistributionHistory({\n // dataRange: dateRange.map((date) => date.getTime()),\n dataRange: [\n dateRange[0].getTime(),\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n }).getTime(),\n ],\n type,\n pageSize,\n page,\n });\n\n // console.log(\"----\", isLoading, isValidating);\n\n // const res = useQuery(\"v1/public/info/funding_period\");\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"type\") {\n setType(filter.value);\n setPage(1);\n }\n\n if (filter.name === \"dateRange\") {\n // setDateRange([filter.value.from, filter.value.to]);\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n }\n };\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta]\n );\n\n return {\n dataSource: data,\n isLoading,\n isValidating,\n // onDateRangeChange,\n queryParameter: {\n type,\n dateRange,\n },\n onFilter,\n pagination,\n } as const;\n};\n\nexport type useDistributionHistoryHookReturn = ReturnType<\n typeof useDistributionHistoryHook\n>;\n","import { DistributionHistoryUI } from \"./distribution.ui\";\nimport { useDistributionHistoryHook } from \"./useDataSource.script\";\n\nexport const DistributionHistoryWidget = () => {\n const state = useDistributionHistoryHook();\n return <DistributionHistoryUI {...state} />;\n};\n","import { useState } from \"react\";\n\nexport type TabName = \"deposit\" | \"funding\" | \"distribution\";\n\nexport const useStateScript = () => {\n const [active, setActive] = useState<TabName>(\"deposit\");\n\n return {\n active,\n onTabChange: (value: string) => setActive(value as TabName),\n };\n};\n\nexport type UseStateScript = ReturnType<typeof useStateScript>;\n","import { HistoryDataGroupUI } from \"./historyDataGroup.ui\";\nimport { useStateScript } from \"./useState.script\";\n\nexport const HistoryDataGroupWidget = () => {\n const state = useStateScript();\n return <HistoryDataGroupUI {...state} />;\n};\n","import { Card, Grid, Box, Statistic, Text, Flex } from \"@orderly.network/ui\";\n\nimport { UsePerformanceScriptReturn } from \"./performance.script\";\nimport { PnLBarChart, PnlLineChart } from \"@orderly.network/chart\";\nimport { PeriodTitle } from \"../shared/periodHeader\";\nimport { useMemo } from \"react\";\n\nexport type PerformanceUIProps = {\n // periodTypes: string[];\n // period: string;\n // onPeriodChange: (period: string) => void;\n} & UsePerformanceScriptReturn;\n\nexport const PerformanceUI = (props: PerformanceUIProps) => {\n const {\n periodTypes,\n period,\n onPeriodChange,\n aggregateValue,\n invisible,\n visible,\n volumeUpdateDate,\n } = props;\n\n return (\n <Card\n // @ts-ignore\n title={\n <PeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title=\"Performance\"\n />\n }\n id=\"portfolio-overview-performance\"\n >\n <Grid cols={3} gap={4}>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n label={`${period} ROI`}\n // @ts-ignore\n valueProps={{\n rule: \"percentages\",\n coloring: true,\n visible,\n }}\n >\n {invisible ? \"--\" : aggregateValue.roi}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n label={`${period} PnL`}\n // @ts-ignore\n valueProps={{\n coloring: true,\n showIdentifier: true,\n visible,\n }}\n >\n {invisible ? \"--\" : aggregateValue.pnl}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={4}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n <Statistic\n classNames={{\n label: \"oui-w-full\",\n }}\n label={\n <Flex justify={\"between\"}>\n <span>{`${period} Volume (USDC)`}</span>\n <span>{volumeUpdateDate}</span>\n </Flex>\n }\n >\n {invisible ? \"--\" : aggregateValue.vol}\n </Statistic>\n </Box>\n </Grid>\n <Grid cols={2} gap={4}>\n <PerformancePnL data={props.data ?? []} invisible={props.invisible} />\n <CumulativePnlChart\n data={props.data ?? []}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Grid>\n </Card>\n );\n};\n\nexport const PerformancePnL = (props: { data: any[]; invisible: boolean }) => {\n // console.log(props.data);\n // const tickValues = useMemo(() => {\n // if (!Array.isArray(props.data) || !props.data.length) return;\n // return [props.data[0].date, props.data[props.data?.length - 1].date];\n // }, [props.data]);\n\n return (\n <Box mt={4} height={\"188px\"}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n Daily PnL\n </Text>\n <Box r=\"md\" className=\"oui-border oui-border-line-4 oui-h-[188px]\">\n <PnLBarChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </Box>\n );\n};\n\nexport const CumulativePnlChart = (props: {\n data: any[];\n invisible: boolean;\n}) => {\n return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n Cumulative PnL\n </Text>\n <Box r=\"md\" className=\"oui-border oui-border-line-4 oui-h-[188px]\">\n <PnlLineChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n {/* <Chart data={props.data} x={\"date\"} y={\"pnl\"}>\n <Axis orientation=\"left\" />\n </Chart> */}\n </Box>\n </Box>\n );\n};\n","import { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useOverviewContext } from \"../providers/overviewCtx\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useMemo } from \"react\";\n\nexport const usePerformanceScript = () => {\n const ctx = useOverviewContext();\n const [visible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n const filteredData = useDataTap(ctx.data, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: ctx.createFakeData(\n {\n account_value: 0,\n pnl: 0,\n },\n { account_value: 500, pnl: 500 }\n ),\n // fallbackData:\n // ctx.data && ctx.data.length >= 2\n // ? [ctx.data[0], ctx.data[ctx.data.length - 1]]\n // : ctx.createFakeData(\n // {\n // account_value: 0,\n // pnl: 0,\n // },\n // { account_value: 1000, pnl: 1000 }\n // ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length ?? 0 > 0) return filteredData;\n return ctx.createFakeData(\n {\n account_value: 0,\n pnl: 0,\n },\n { account_value: 500, pnl: 500 }\n );\n }, [filteredData]);\n\n const invisible =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n return {\n ...ctx,\n data: _data,\n invisible,\n visible,\n };\n};\n\nexport type UsePerformanceScriptReturn = ReturnType<\n typeof usePerformanceScript\n>;\n","import { PerformanceUI } from \"./performance.ui\";\nimport { usePerformanceScript } from \"./performance.script\";\n\nexport const PerformanceWidget = () => {\n const state = usePerformanceScript();\n\n return <PerformanceUI {...state} />;\n};\n","import { Grid } from \"@orderly.network/ui\";\nimport { PerformanceWidget } from \"./performance\";\nimport { AssetsChartWidget } from \"./assetChart/assetsChart.widget\";\nimport { AssetWidget } from \"./assets\";\nimport { HistoryDataGroupWidget } from \"./historyDataGroup\";\nimport { OverviewContextProvider } from \"./providers/overviewCtx\";\n\nexport const OverviewPage = () => {\n return (\n <OverviewContextProvider>\n <Grid cols={2} gap={4}>\n <AssetWidget />\n <AssetsChartWidget />\n <Grid.span colSpan={2}>\n <PerformanceWidget />\n </Grid.span>\n <Grid.span colSpan={2}>\n <HistoryDataGroupWidget />\n </Grid.span>\n </Grid>\n </OverviewContextProvider>\n );\n};\n","export { FeeTierPage } from \"./page\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { dataSource as defaultDataSource } from \"./dataSource\";\nimport { AccountStatusEnum, API } from \"@orderly.network/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { Column } from \"@orderly.network/ui\";\nimport { useFeeTierColumns } from \"./column\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: Column[],\n dataSource: any[]\n ) => { columns: Column[]; dataSource: any[] };\n onRow?: (\n record: any,\n index: number\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport function useFeeTierScript(options?: UseFeeTierScriptOptions) {\n const { dataAdapter } = options || {};\n const [tier, setTier] = useState<number>();\n const { data } = useAccountInfo();\n const { state } = useAccount();\n\n const cols = useFeeTierColumns();\n\n const { data: volumeStatistics } = usePrivateQuery<\n | {\n perp_volume_last_30_days: number;\n }\n | undefined\n >(\"/v1/volume/user/stats\");\n\n const { columns, dataSource } = useMemo(() => {\n return typeof dataAdapter === \"function\"\n ? dataAdapter(cols, defaultDataSource)\n : {\n columns: cols,\n dataSource: defaultDataSource,\n };\n }, [dataAdapter, cols]);\n\n const getFuturesCurrentTier = (\n feeList: typeof defaultDataSource,\n data: API.AccountInfo\n ) => {\n const { futures_taker_fee_rate = 0, futures_maker_fee_rate = 0 } = data;\n const takerRate = `${new Decimal(futures_taker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n const makerRate = `${new Decimal(futures_maker_fee_rate)\n .mul(0.01)\n .toString()}%`;\n\n for (const item of feeList) {\n if (takerRate === item.taker_fee && makerRate === item.maker_fee) {\n return item.tier;\n }\n }\n };\n\n useEffect(() => {\n if (!data) {\n return;\n }\n\n const tier = getFuturesCurrentTier(dataSource, data);\n setTier(tier!);\n }, [data, dataSource]);\n\n const futures_taker_fee_rate = useMemo(() => {\n const value = data?.futures_taker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const futures_maker_fee_rate = useMemo(() => {\n const value = data?.futures_maker_fee_rate;\n if (typeof value === \"undefined\") return undefined;\n return `${new Decimal(value).mul(0.01).toString()}%`;\n }, [data]);\n\n const authData = useDataTap(\n {\n tier,\n vol: volumeStatistics?.perp_volume_last_30_days,\n takerFeeRate: futures_taker_fee_rate,\n makerFeeRate: futures_maker_fee_rate,\n },\n {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n }\n );\n\n return {\n ...authData,\n columns,\n dataSource,\n onRow: options?.onRow,\n };\n}\n","export const dataSource = [\n {\n tier: 1,\n maker_fee: \"0.03%\",\n taker_fee: \"0.06%\",\n volume_min: 0,\n volume_max: 500000,\n },\n {\n tier: 2,\n maker_fee: \"0.02%\",\n taker_fee: \"0.05%\",\n volume_min: 500000,\n volume_max: 2500000,\n },\n {\n tier: 3,\n maker_fee: \"0.015%\",\n taker_fee: \"0.045%\",\n volume_min: 2500000,\n volume_max: 10000000,\n },\n {\n tier: 4,\n maker_fee: \"0.01%\",\n taker_fee: \"0.04%\",\n volume_min: 10000000,\n volume_max: 50000000,\n },\n {\n tier: 5,\n maker_fee: \"0.005%\",\n taker_fee: \"0.035%\",\n volume_min: 50000000,\n volume_max: 125000000,\n or: \"/\",\n staking_min: 300000,\n staking_max: null,\n },\n {\n tier: 6,\n maker_fee: \"0%\",\n taker_fee: \"0.03%\",\n volume_min: 125000000,\n volume_max: null,\n or: \"/\",\n staking: null,\n staking_min: null,\n staking_max: null,\n },\n];\n","import { useMemo } from \"react\";\nimport { type Column, Text } from \"@orderly.network/ui\";\nimport { numberToHumanStyle } from \"@orderly.network/utils\";\n\nexport const useFeeTierColumns = () => {\n const columns = useMemo(() => {\n return [\n {\n title: \"Tier\",\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: \"30 day volume (USDC)\",\n dataIndex: \"volume\",\n align: \"center\",\n width: 170,\n render: (value, row) => {\n const { volume_min, volume_max, volume_node } = row;\n\n if (volume_node) return volume_node;\n if (!volume_min && !volume_max) {\n return <div style={{ fontVariantLigatures: \"none\" }}>--</div>;\n }\n\n if (volume_min && !volume_max) {\n return (\n <div>\n {\"Above \"}\n {numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\n </div>\n );\n }\n return (\n <div>\n {volume_min &&\n numberToHumanStyle(volume_min, volume_min === 2500000 ? 1 : 0)}\n {` - `}\n {volume_max &&\n numberToHumanStyle(volume_max, volume_max === 2500000 ? 1 : 0)}\n </div>\n );\n },\n },\n {\n title: \"Maker\",\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n {\n title: \"Taker\",\n dataIndex: \"taker_fee\",\n align: \"right\",\n width: 100,\n render: (value) => {\n return <Text>{value}</Text>;\n },\n },\n ] as Column[];\n }, []);\n\n return columns;\n};\n","import { FC, ReactNode, useCallback, useEffect, useState } from \"react\";\nimport {\n Box,\n Flex,\n Text,\n Card,\n Divider,\n DataTable,\n Column,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useFeeTierScriptReturn } from \"./feeTier.script\";\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, takerFeeRate, makerFeeRate } = props;\n return (\n <Card\n // @ts-ignore\n title={\n <Flex justify={\"between\"}>\n <Text size=\"lg\">Fee tier</Text>\n <Flex gap={1}>\n <Text size=\"xs\" intensity={54}>\n Updated daily by\n </Text>\n <Text size=\"xs\" intensity={80}>\n 2:00 UTC\n </Text>\n </Flex>\n </Flex>\n }\n className=\"w-full\"\n id=\"oui-portfolio-fee-tier\"\n >\n <Divider />\n <FeeTierHeader\n tier={tier!}\n vol={vol!}\n takerFeeRate={takerFeeRate!}\n makerFeeRate={makerFeeRate!}\n />\n <FeeTierTable\n dataSource={dataSource}\n columns={columns}\n tier={tier}\n onRow={props.onRow}\n />\n </Card>\n );\n};\n\nexport type FeeTierHeaderProps = {\n tier?: number;\n vol?: number;\n takerFeeRate?: string;\n makerFeeRate?: string;\n};\n\nexport const FeeTierHeader: React.FC<FeeTierHeaderProps> = (props) => {\n return (\n <Flex direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n <FeeTierHeaderItem\n label=\"Your tier\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.tier || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label=\"30D trading volume (USDC)\"\n value={\n <Text.numeral rule=\"price\" dp={2} rm={Decimal.ROUND_DOWN}>\n {typeof props.vol !== undefined ? `${props.vol}` : \"-\"}\n </Text.numeral>\n }\n />\n <FeeTierHeaderItem\n label=\"Taker fee rate\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.takerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n <FeeTierHeaderItem\n label=\"Maker fee rate\"\n value={\n <Text.gradient color={\"brand\"} angle={270} size=\"base\">\n {props.makerFeeRate || \"--\"}\n </Text.gradient>\n }\n />\n </Flex>\n );\n};\n\nexport type FeeTierHeaderItemProps = {\n label: string;\n value: ReactNode;\n};\n\nexport const FeeTierHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n return (\n <Box\n gradient=\"neutral\"\n r=\"lg\"\n px={4}\n py={2}\n angle={184}\n width=\"100%\"\n border\n borderColor={6}\n >\n <Text\n as=\"div\"\n intensity={36}\n size=\"2xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {props.label}\n </Text>\n\n <Text\n size=\"base\"\n intensity={80}\n className=\"oui-leading-[24px] oui-mt-[2px]\"\n >\n {props.value}\n </Text>\n </Box>\n );\n};\n\ntype FeeTierTableProps = {\n columns: Column[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\n onRow?: (\n record: any,\n index: number\n ) => {\n normal: any;\n active: any;\n };\n};\n\nexport const FeeTierTable: FC<FeeTierTableProps> = (props) => {\n const [top, setTop] = useState<undefined | number>(undefined);\n useEffect(() => {\n const parentRect = document\n .getElementById(\"oui-fee-tier-content\")\n ?.getBoundingClientRect();\n const elementRect = document\n .getElementById(\"oui-fee-tier-current\")\n ?.getBoundingClientRect();\n\n if (elementRect && parentRect && !!props.tier) {\n const offsetTop = elementRect.top - parentRect.top;\n setTop(offsetTop);\n } else {\n setTop(undefined);\n }\n }, [props.tier]);\n\n const onRow = useCallback(\n (record: any, index: number) => {\n const config = props?.onRow?.(record, index) ?? {\n normal: undefined,\n active: undefined,\n };\n if (index + 1 == props.tier) {\n const innerConfig = {\n id: \"oui-fee-tier-current\",\n \"data-state\": \"active\",\n className:\n \"group oui-h-12 oui-text-[rgba(0,0,0,0.88)] oui-pointer-events-none\",\n };\n return {\n ...innerConfig,\n ...config.active,\n };\n }\n\n return {\n \"data-state\": \"none\",\n ...{ className: \"oui-h-12\" },\n ...config.normal,\n };\n },\n [props.tier, props.onRow]\n );\n\n return (\n <Box\n id=\"oui-fee-tier-content\"\n className=\"oui-border-b oui-border-line-4 oui-relative\"\n >\n {top && (\n <Box\n angle={90}\n gradient=\"brand\"\n className=\"oui-rounded-md oui-absolute oui-w-full\"\n style={{\n top: `${top}px`,\n height: \"48px\",\n }}\n />\n )}\n <DataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n root: \"oui-bg-transparent\",\n }}\n onRow={onRow}\n columns={props.columns}\n dataSource={props.dataSource}\n />\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { useFeeTierScript, UseFeeTierScriptOptions } from \"./feeTier.script\";\nimport { FeeTier } from \"./feeTier.ui\";\n\nexport type FeeTierWidgetProps = UseFeeTierScriptOptions;\n\nexport const FeeTierWidget: FC<FeeTierWidgetProps> = (props) => {\n const state = useFeeTierScript(props);\n return <FeeTier {...state} />;\n};\n","import { FC } from \"react\";\nimport { FeeTierWidget, FeeTierWidgetProps } from \"./feeTier.widget\";\n\nexport type FeeTierPageProps = FeeTierWidgetProps;\n\nexport const FeeTierPage: FC<FeeTierPageProps> = (props) => {\n return <FeeTierWidget {...props} />;\n};\n","import { LiquidationWidget, PositionHistoryWidget, PositionsProps, PositionsWidget } from \"@orderly.network/ui-positions\";\nimport { Flex, Text, Divider, Box, Tabs, TabPanel } from \"@orderly.network/ui\";\nimport { useState } from \"react\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage = (props: PositionsProps) => {\n const [tab, setTab] = useState(TabsType.positions);\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex>\n <Text size=\"lg\">Positions</Text>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <Tabs value={tab} onValueChange={(e) => setTab(e as any)} classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n }} className=\"oui-h-full\">\n <TabPanel value={TabsType.positions} title={TabsType.positions}>\n <PositionsWidget {...props} />\n </TabPanel>\n <TabPanel value={TabsType.positionHistory} title={TabsType.positionHistory}>\n <PositionHistoryWidget {...props} />\n </TabPanel>\n <TabPanel value={TabsType.liquidation} title={TabsType.liquidation}>\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { Box, Button, Divider, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { OrderListInstance, OrdersWidget } from \"@orderly.network/ui-orders\";\n\nexport const OrdersPage = (props: { sharePnLConfig?: SharePnLConfig }) => {\n const { sharePnLConfig } = props;\n\n const ordersRef = useRef<OrderListInstance>(null);\n\n const onDownload = () => {\n ordersRef.current?.download?.();\n };\n\n return (\n <Flex\n // p={6}\n direction={\"column\"}\n itemAlign={\"start\"}\n gap={4}\n width=\"100%\"\n height=\"100%\"\n >\n <Flex width=\"100%\" justify=\"between\">\n <Text size=\"lg\">Orders</Text>\n <Tooltip content=\"The downloaded data will reflect only the applied filters (e.g., status, time, side, and pagination) and may not include all records.\">\n <Button\n color=\"gray\"\n size=\"sm\"\n className=\"oui-bg-base-4\"\n onClick={onDownload}\n >\n Download\n <TooltipIcon className=\"oui-text-base-contrast-36 oui-ml-[5px]\" />\n </Button>\n </Tooltip>\n </Flex>\n <Divider className=\"oui-w-full\" />\n {/* 26(title height) + 1(divider) + 32 (padding) */}\n <Box width=\"100%\" className=\"oui-h-[calc(100%_-_59px)]\">\n <OrdersWidget ref={ordersRef} sharePnLConfig={sharePnLConfig} />\n </Box>\n </Flex>\n );\n};\n\nconst TooltipIcon: 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.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n);\n","export { APIManagerWidget } from \"./apiManager.widget\";\nexport { APIManagerPage } from \"./apiManager.page\";\n","import {\n Box,\n Button,\n Card,\n CopyIcon,\n Flex,\n PlusIcon,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport {\n ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\nimport { FC, useState } from \"react\";\nimport { CreateAPIKeyDialog } from \"./dialog/createApiKey\";\nimport { CreatedAPIKeyDialog } from \"./dialog/createdApiKey\";\nimport { DeleteAPIKeyDialog } from \"./dialog/deleteApiKey\";\nimport { EditAPIKeyDialog } from \"./dialog/editApiKey\";\nimport {\n AuthGuardEmpty,\n AuthGuardDataTable,\n AuthGuardTooltip,\n} from \"@orderly.network/ui-connector\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\n\nexport const APIManager: FC<ApiManagerScriptReturns> = (props) => {\n return (\n <Card\n title={\"API keys\"}\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction={\"column\"}\n gap={4}\n width={\"100%\"}\n className=\"oui-font-semibold\"\n >\n <AccountInfo {...props} />\n <Subtitle {...props} />\n </Flex>\n <div>\n <KeyList {...props} />\n <CreateAPIKeyDialog {...props} />\n <CreatedAPIKeyDialog {...props} />\n </div>\n </Card>\n );\n};\n\nconst AccountInfo: FC<ApiManagerScriptReturns> = (props) => {\n return (\n <Flex\n width={\"100%\"}\n gap={4}\n className=\"oui-border-t-2 oui-border-line-6 oui-pt-4\"\n >\n <Flex\n py={2}\n px={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n r=\"xl\"\n gradient=\"neutral\"\n angle={27}\n border\n className=\"oui-w-1/2\"\n >\n <Text size=\"xs\" intensity={36}>\n Account ID\n </Text>\n <Text.formatted\n size=\"base\"\n inlist={80}\n rule={\"address\"}\n copyable={props.address !== \"--\"}\n copyIconSize={16}\n onCopy={props.onCopyAccountId}\n copyIconTestid=\"oui-testid-apiKey-accountInfo-accountId-copy-btn\"\n >\n {props.address}\n </Text.formatted>\n </Flex>\n <Flex\n py={2}\n px={4}\n direction={\"column\"}\n itemAlign={\"start\"}\n r=\"xl\"\n gradient=\"neutral\"\n angle={27}\n border\n className=\"oui-w-1/2\"\n >\n <Text size=\"xs\" intensity={36}>\n UID\n </Text>\n <Text size=\"base\" inlist={80}>\n {props.uid}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst Subtitle: FC<ApiManagerScriptReturns> = (props) => {\n return (\n <Flex\n width={\"100%\"}\n direction={\"row\"}\n className=\"oui-text-sm oui-border-b-2 oui-border-line-6 oui-pb-4\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} width={\"100%\"} gap={1}>\n <Text intensity={54}>\n Create API keys to suit your trading needs. For your security, don't\n share your API keys with anyone.{\" \"}\n </Text>\n <Flex\n itemAlign={\"center\"}\n className=\"oui-text-primary-light oui-fill-primary-light hover:oui-text-primary-darken oui-cursor-pointer oui-text-2xs md:oui-text-xs xl:oui-text-sm\"\n onClick={props.onReadApiGuide}\n >\n <Text>Read API guide</Text>\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 >\n <path d=\"M4.008 7.995c0-.368.298-.666.666-.666H9.71L7.733 5.331l.937-.936 3.143 3.122c.13.13.195.304.195.479a.67.67 0 0 1-.195.478L8.67 11.596l-.937-.937 1.978-1.998H4.674a.666.666 0 0 1-.666-.666\" />\n </svg>\n </Flex>\n </Flex>\n <AuthGuardTooltip\n side=\"top\"\n tooltip={{\n connectWallet: \"Please connect wallet before create API key\",\n signIn: \"Please sign in before create API key\",\n enableTrading: \"Please enable trading before create API key\",\n wrongNetwork:\n \"Please switch to a supported network to create API key\",\n }}\n >\n <Button\n size=\"md\"\n icon={<PlusIcon />}\n variant=\"contained\"\n color=\"primary\"\n onClick={props.onCreateApiKey}\n disabled={!props.canCreateApiKey}\n // className=\"disabled:oui-cursor-default\"\n data-testid=\"oui-testid-apiKey-createApiKey-btn\"\n >\n Create API key\n </Button>\n </AuthGuardTooltip>\n </Flex>\n );\n};\n\nconst KeyList: FC<ApiManagerScriptReturns> = (props) => {\n const columns: Column<APIKeyItem>[] = [\n {\n title: \"API key\",\n dataIndex: \"orderly_key\",\n render: (value) => {\n return (\n <Text.formatted\n rule={\"\"}\n copyable\n copyIconSize={16}\n onCopy={() => {\n props.onCopyApiKey?.(value);\n }}\n >\n {formatKey(value)}\n </Text.formatted>\n );\n },\n },\n {\n title: \"Permission type\",\n dataIndex: \"scope\",\n render: (value) =>\n value\n ?.split(\",\")\n .map((e: any) => capitalizeFirstChar(`${e}`))\n .join(\", \"),\n },\n {\n title: \"Restricted IP\",\n dataIndex: \"ip_restriction_list\",\n render: (value) => {\n let ip = value.join(\",\");\n if (ip.length === 0) {\n ip = \"--\";\n }\n return (\n <Tooltip content={ip} className=\"oui-max-w-[200px] oui-break-all\">\n <Flex gap={1}>\n <div className=\" oui-overflow-ellipsis oui-overflow-hidden\">\n {ip}\n </div>\n {ip !== \"--\" && (\n <Box width={16} height={16} className=\"oui-cursor-pointer\">\n <CopyIcon\n color=\"white\"\n opacity={0.54}\n size={16}\n onClick={(e) => {\n navigator.clipboard.writeText(ip);\n props?.onCopyIP();\n }}\n />\n </Box>\n )}\n </Flex>\n </Tooltip>\n );\n },\n },\n {\n title: \"Expiration date\",\n dataIndex: \"expiration\",\n render: (value) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd\">\n {value}\n </Text.formatted>\n ),\n },\n {\n title: \"\",\n type: \"action\",\n dataIndex: \"action\",\n width: 120,\n render: (_, item) => {\n return (\n <Flex direction={\"row\"} gap={2}>\n <EditButton\n item={item}\n onUpdate={props.doEdit}\n verifyIP={props.verifyIP}\n />\n <DeleteButton item={item} onDelete={props.doDelete} />\n </Flex>\n );\n },\n },\n ];\n return (\n <AuthGuardDataTable\n bordered\n columns={columns}\n loading={props.isLoading}\n dataSource={props.keys}\n emptyView={<AuthGuardEmpty />}\n classNames={{}}\n pagination={props.pagination}\n manualPagination={false}\n />\n );\n};\n\nconst EditButton: FC<{\n item: APIKeyItem;\n onUpdate: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, onUpdate, verifyIP } = props;\n const [open, setOpen] = useState(false);\n return (\n <>\n <Button\n size=\"xs\"\n color=\"primary\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n }}\n data-testid=\"oui-testid-apiKey-keyList-edit-btn\"\n >\n Edit\n </Button>\n\n {open && (\n <EditAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onUpdate={onUpdate}\n verifyIP={verifyIP}\n />\n )}\n </>\n );\n};\n\nconst DeleteButton: FC<{\n item: APIKeyItem;\n onDelete: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, onDelete } = props;\n const [open, setOpen] = useState(false);\n return (\n <>\n <Button\n size=\"xs\"\n color=\"gray\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n }}\n data-testid=\"oui-testid-apiKey-keyList-delete-btn\"\n >\n Delete\n </Button>\n\n {open && (\n <DeleteAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onDelete={onDelete}\n />\n )}\n </>\n );\n};\n\nexport function formatKey(value: string): string {\n if (typeof value === \"undefined\") return \"-\";\n const key = `${value}`.replace(\"ed25519:\", \"\").slice(0, 6);\n return `${key}*****`;\n}\n","import {\n APIKeyItem,\n OrderlyContext,\n ScopeType,\n useAccount,\n useApiKeyManager,\n useQuery,\n} from \"@orderly.network/hooks\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast, usePagination } from \"@orderly.network/ui\";\nimport { useContext, useEffect, useMemo, useState } from \"react\";\n\nexport type GenerateKeyInfo = {\n key: string;\n screctKey: string;\n ip?: string;\n permissions?: string;\n};\n\nexport const useApiManagerScript = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus } = props ?? {};\n const [showCreateDialog, setShowCreateDialog] = useState(false);\n const [showCreatedDialog, setShowCreatedDialog] = useState(false);\n const [generateKey, setGenerateKey] = useState<GenerateKeyInfo | undefined>();\n const { configStore } = useContext(OrderlyContext);\n const brokerId = configStore.get(\"brokerId\");\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const { state, account } = useAccount();\n\n const canCreateApiKey =\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n \n const { data } = useQuery<\n | undefined\n | {\n user_id: number;\n account_id: string;\n }\n >(\n `/v1/get_account?address=${account.address}&broker_id=${brokerId}&chain_type=${account.walletAdapter?.chainNamespace}`\n );\n\n const [\n keys,\n {\n generateOrderlyKey,\n setIPRestriction,\n removeOrderlyKey,\n resetOrderlyKeyIPRestriction,\n refresh,\n isLoading,\n error,\n },\n ] = useApiKeyManager({\n keyInfo: { key_status: keyStatus },\n });\n\n const [curPubKey, setCurPubKey] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n account.keyStore\n .getOrderlyKey()\n ?.getPublicKey()\n .then((pubKey) => {\n setCurPubKey(pubKey);\n });\n }, [account, state]);\n\n const onCreateApiKey = () => {\n setShowCreateDialog(true);\n };\n const onReadApiGuide = () => {\n window.open(\n \"https://orderly.network/docs/build-on-evm/evm-api/api-authentication\",\n \"_blank\"\n );\n };\n\n const hideCreateDialog = () => {\n setShowCreateDialog(false);\n };\n\n const doCreate = async (\n ipRestriction?: string,\n scope?: ScopeType\n ): Promise<number> => {\n try {\n const createdSuccess = (\n res: {\n key: string;\n secretKey: string;\n },\n ip?: string\n ) => {\n const { key, secretKey } = res;\n hideCreateDialog();\n setGenerateKey({\n key: key,\n screctKey: secretKey,\n ip: ip,\n permissions: scope\n ?.split(\",\")\n ?.map((e) => capitalizeFirstChar(e))\n .join(\", \"),\n });\n setShowCreatedDialog(true);\n };\n\n const generateKeyRes = await generateOrderlyKey(scope);\n\n toast.success(\"API key created\");\n console.log(\"xxx generateKeyRes\", generateKeyRes);\n\n if ((ipRestriction?.length || 0) > 0) {\n const key = generateKeyRes.key.startsWith(\"ed25519:\")\n ? generateKeyRes.key\n : `ed25519:${generateKeyRes.key}`;\n const res = await setIPRestriction(key, ipRestriction!);\n console.log(\"set ip res\", res);\n if (res.success) {\n createdSuccess(\n generateKeyRes,\n res.data.ip_restriction_list?.join(\",\")\n );\n }\n } else {\n createdSuccess(generateKeyRes, undefined);\n }\n } catch (err: any) {\n if (err?.message) toast.error(err?.message);\n }\n\n return Promise.resolve(0);\n };\n\n const hideCreatedDialog = () => {\n setShowCreatedDialog(false);\n refresh();\n };\n\n const onCopyApiKeyInfo = () => {\n navigator.clipboard.writeText(JSON.stringify(generateKey));\n toast.success(\"API info copied\");\n };\n const doConfirm = () => {\n hideCreatedDialog();\n };\n\n const doDelete = (item: APIKeyItem): Promise<any> => {\n return new Promise(async (resolve) => {\n await removeOrderlyKey(item.orderly_key)\n .then(\n async (data) => {\n if (data?.success) {\n toast.success(\"API key deleted\");\n refresh();\n // delete current api key, wiil disconnect\n const curKey = await account.keyStore\n .getOrderlyKey()\n ?.getPublicKey();\n if (item.orderly_key === curKey) {\n account.destroyOrderlyKey();\n }\n }\n resolve(1);\n },\n (reject) => {}\n )\n .catch((err) => {});\n });\n };\n\n const doEdit = async (item: APIKeyItem, ip?: string): Promise<void> => {\n let future;\n if ((ip?.length || 0) === 0) {\n future = resetOrderlyKeyIPRestriction(item.orderly_key, \"ALLOW_ALL_IPS\");\n } else {\n future = setIPRestriction(item.orderly_key, ip!);\n }\n\n const data = await future;\n\n if (data.success) {\n toast.success(\"API key updated\");\n refresh();\n return Promise.resolve();\n } else {\n toast.error(data.message);\n }\n return Promise.reject();\n };\n\n const onCopyAccountId = () => toast.success(\"Account id copied\");\n const onCopyApiKey = (key?: string) => {\n if (typeof key !== \"undefined\") {\n navigator.clipboard.writeText(key.replace(\"ed25519:\", \"\"));\n }\n toast.success(\"API key copied\");\n };\n const onCopyApiSecretKey = () => toast.success(\"Secret key copied\");\n const onCopyIP = () => toast.success(\"Restricted IP copied\");\n\n const keyList = useMemo(() => {\n return keys?.filter((e) => {\n const filterTag = filterTags ? filterTags?.includes(e.tag) : true;\n const filterCurKey = curPubKey\n ? !e.orderly_key.includes(curPubKey)\n : true;\n return filterTag && filterCurKey;\n });\n }, [keys, filterTags, curPubKey]);\n\n const verifyIP = (ip: string) => {\n const ipRegex =\n /^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(,((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9]))*$/;\n return ipRegex.test(ip)\n ? \"\"\n : \"The IP restriction format is incorrect. Please use the correct format: [xx.xx.xxx.x],[xx.xxx.xxx.xxx]\";\n };\n\n const accountStatus =\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading;\n\n const address = useDataTap(data?.account_id, {\n accountStatus,\n });\n const uid = useDataTap(data?.user_id, {\n accountStatus,\n });\n\n const { pagination } = usePagination();\n\n return {\n address: address ?? \"--\",\n uid: `${uid ?? \"--\"}`,\n onCreateApiKey,\n onReadApiGuide,\n showCreateDialog,\n hideCreateDialog,\n doCreate,\n showCreatedDialog,\n hideCreatedDialog,\n onCopyApiKeyInfo,\n doConfirm,\n doDelete,\n doEdit,\n canCreateApiKey,\n status: state.status,\n keys: keyList,\n generateKey,\n onCopyAccountId,\n wrongNetwork,\n onCopyApiKey,\n onCopyApiSecretKey,\n onCopyIP,\n verifyIP,\n isLoading,\n pagination,\n };\n};\n\nexport function capitalizeFirstChar(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport type ApiManagerScriptReturns = ReturnType<typeof useApiManagerScript>;\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Box,\n cn,\n CopyIcon,\n // Checkbox,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { ScopeType } from \"@orderly.network/hooks\";\n\nexport const CreateAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const [ipText, setIpText] = useState(\"\");\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [hint, setHint] = useState(\"\");\n useEffect(() => {\n if (!props.showCreateDialog) {\n setIpText(\"\");\n setRead(true);\n setTrade(true);\n setHint(\"\");\n }\n }, [props.showCreateDialog]);\n\n useEffect(() => {\n if (ipText.length === 0) setHint(\"\");\n }, [ipText]);\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreateDialog}\n onOpenChange={(open) => {\n props.hideCreateDialog?.();\n }}\n title=\"Create API key\"\n actions={{\n primary: {\n label: \"Confirm\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n \"data-testid\": \"oui-testid-apiKey-createApiKey-dialog-comfirm-btn\",\n onClick: async () => {\n if (ipText.length > 0) {\n const hint = props.verifyIP(ipText);\n setHint(hint);\n if (hint.length > 0) {\n return;\n }\n }\n\n const scopes: string[] = [];\n if (read) {\n scopes.push(\"read\");\n }\n if (trade) {\n scopes.push(\"trading\");\n }\n await props.doCreate(ipText, scopes.join(\",\") as ScopeType);\n },\n disabled: !trade && !read,\n size: \"md\",\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n {/* <TextField label={\"IP restriction (optional)\"} rows={5} className=\"oui-w-full oui-h-auto\" classNames={{\n input: \"oui-h-[100px]\",\n root: \"oui-h-[100px]\"\n }}/> */}\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n IP restriction (optional)\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder=\"Add IP addresses, separated by commas.\"\n className={cn(\n \"oui-text-sm oui-text-base-contrast-80 oui-p-3 oui-h-[100px] oui-rounded-xl oui-bg-base-6 oui-w-full\",\n \"oui-border-0 focus:oui-border-2 focus:oui-border-primary-darken oui-outline-none\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\"\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-h-1 oui-w-1 oui-rounded-full oui-bg-danger\"\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n Permissions\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label=\"Read\"\n testid=\"oui-testid-apiKey-createApiKey-dialog-read-checkbox\"\n />\n <Checkbox\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label=\"Trading\"\n testid=\"oui-testid-apiKey-createApiKey-dialog-trading-checkbox\"\n />\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n\nexport const Checkbox: FC<{\n size?: number;\n checked: boolean;\n onCheckedChange: (checked?: boolean) => void;\n disabled?: boolean;\n label: string;\n testid?: string;\n}> = (props) => {\n return (\n <button\n disabled={props.disabled}\n onClick={(e) => {\n props.onCheckedChange(!props.checked);\n }}\n className={\n \"disabled:oui-cursor-not-allowed disabled:oui-opacity-50 oui-flex oui-items-center oui-gap-2\"\n }\n data-testid={props.testid}\n >\n {props.checked ? (\n <svg\n width={\"props.size\"}\n height={props.size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.99072 2.92981C4.78172 2.92981 2.99072 4.72071 2.99072 6.92981V16.9298C2.99072 19.1389 4.78172 20.9298 6.99072 20.9298H16.9907C19.1997 20.9298 20.9907 19.1389 20.9907 16.9298V6.92981C20.9907 4.72071 19.1997 2.92981 16.9907 2.92981H6.99072ZM16.9853 7.31211C17.2125 7.09537 17.5236 7 17.8218 7C18.1201 7 18.4312 7.09537 18.6584 7.31211C19.1139 7.74546 19.1139 8.47384 18.6584 8.9072L10.5077 16.675C10.0534 17.1083 9.28909 17.1083 8.83472 16.675L5.34077 13.3459C4.88641 12.9126 4.88641 12.1841 5.34077 11.7508C5.79631 11.3175 6.56057 11.3175 7.01493 11.7508L9.67122 14.2822L16.9853 7.31211Z\"\n fill=\"white\"\n fillOpacity=\"0.54\"\n />\n </svg>\n ) : (\n <svg\n width={props.size}\n height={props.size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.99072 2.92981C4.78172 2.92981 2.99072 4.72071 2.99072 6.92981V16.9298C2.99072 19.1389 4.78172 20.9298 6.99072 20.9298H16.9907C19.1997 20.9298 20.9907 19.1389 20.9907 16.9298V6.92981C20.9907 4.72071 19.1997 2.92981 16.9907 2.92981H6.99072ZM6.99072 4.92981H16.9907C18.0957 4.92981 18.9907 5.82521 18.9907 6.92981V16.9298C18.9907 18.0344 18.0957 18.9298 16.9907 18.9298H6.99072C5.88572 18.9298 4.99072 18.0344 4.99072 16.9298V6.92981C4.99072 5.82521 5.88572 4.92981 6.99072 4.92981Z\"\n fill=\"white\"\n fillOpacity=\"0.54\"\n />\n </svg>\n )}\n <Text intensity={54} size=\"sm\">\n {props.label}\n </Text>\n </button>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Box,\n Checkbox,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreatedAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const ip = props.generateKey?.ip ?? \"--\";\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreatedDialog}\n onOpenChange={(open) => {\n props.hideCreatedDialog?.();\n }}\n title=\"API key created\"\n actions={{\n primary: {\n label: \"OK\",\n \"data-testid\": \"oui-testid-apiKey-createdApiKey-dialog-ok-btn\",\n className:\n \"oui-w-[120px] lg:oui-w-[154px] oui-bg-base-2 hover:oui-bg-base-3\",\n size: \"md\",\n onClick: async () => {\n return props.doConfirm();\n },\n },\n secondary: {\n label: \"Copy API info\",\n \"data-testid\": \"oui-testid-apiKey-createdApiKey-dialog-copy-btn\",\n className:\n \"oui-w-[120px] lg:oui-w-[154px] oui-bg-primary-darken hover:oui-opacity-80\",\n size: \"md\",\n onClick: async () => {\n return props.onCopyApiKeyInfo();\n },\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n body: \"oui-py-0 oui-pt-5\",\n }}\n >\n <Flex direction={\"column\"} gap={4} itemAlign={\"start\"}>\n <Statistic label=\"Account ID\">\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={props.onCopyAccountId}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-key-span\"\n >\n {props.address}\n </Text.formatted>\n </Statistic>\n <Statistic label=\"API key\">\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={() => props.onCopyApiKey(props.generateKey?.key)}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-key-span\"\n >\n {props.generateKey?.key}\n </Text.formatted>\n </Statistic>\n <Statistic label=\"Secret key\">\n <Text.formatted\n size=\"sm\"\n intensity={80}\n copyable\n copyIconSize={16}\n className=\"oui-break-all\"\n onCopy={props.onCopyApiSecretKey}\n >\n {props.generateKey?.screctKey}\n </Text.formatted>{\" \"}\n </Statistic>\n <Statistic label=\"IP\">\n <Flex\n width={320}\n gap={1}\n itemAlign={\"center\"}\n className=\"oui-text-base-contrast-80 oui-text-sm\"\n >\n <Box className=\"oui-max-h-[100px] oui-flex-1 oui-overflow-hidden oui-text-ellipsis oui-line-clamp-5 oui-break-all\">\n {ip}\n </Box>\n {ip !== \"--\" && (\n <Box\n width={16}\n height={16}\n className=\"oui-cursor-pointer oui-flex-shrink-0\"\n >\n <CopyIcon\n color=\"white\"\n opacity={0.54}\n size={16}\n onClick={(e) => {\n if (props.generateKey?.ip)\n navigator.clipboard.writeText(props.generateKey?.ip);\n props?.onCopyIP();\n }}\n />\n </Box>\n )}\n </Flex>\n </Statistic>\n <Statistic label=\"Permissions\">\n <Text\n size=\"sm\"\n intensity={80}\n data-testid=\"oui-testid-apiKey-createdApiKey-dialog-permissions-span\"\n >\n {props.generateKey?.permissions}\n </Text>\n </Statistic>\n <div></div>\n <Text color=\"warning\" size=\"xs\" className=\"oui-text-center\">\n Please copy the API secret. Once you close this pop-up, the API secret\n will be encrypted.\n </Text>\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n Checkbox,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { formatKey } from \"../apiManager.ui\";\n\nexport const DeleteAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onDelete?: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, open, setOpen, onDelete } = props;\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title=\"Delete API key\"\n actions={{\n primary: {\n label: \"Confirm\",\n \"data-testid\": \"oui-testid-apiKey-deleteApiKey-dialog-confirm-btn\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n size: \"md\",\n onClick: async () => {\n await props.onDelete?.(item);\n setOpen(false);\n },\n },\n secondary: {\n label: \"Cancel\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n size: \"md\",\n onClick: async () => {\n setOpen(false);\n },\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex className=\"oui-text-xs\">\n Delete your API key &nbsp;\n <Text color=\"primary\">{formatKey(item?.orderly_key)}</Text>&nbsp;?\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { FC, useEffect, useState } from \"react\";\nimport {\n cn,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n TextField,\n} from \"@orderly.network/ui\";\nimport { APIKeyItem } from \"@orderly.network/hooks\";\nimport { Checkbox } from \"./createApiKey\";\n\nexport const EditAPIKeyDialog: FC<{\n item: APIKeyItem;\n open: boolean;\n setOpen?: any;\n onUpdate?: (item: APIKeyItem, ip?: string) => Promise<void>;\n verifyIP: (ip: string) => string;\n}> = (props) => {\n const { item, open, setOpen, onUpdate } = props;\n const [ipText, setIpText] = useState(item.ip_restriction_list?.join(\",\"));\n const [read, setRead] = useState(true);\n const [trade, setTrade] = useState(true);\n const [hint, setHint] = useState(\"\");\n\n useEffect(() => {\n setIpText(item.ip_restriction_list.join(\",\"));\n setRead(item.scope?.toLocaleLowerCase().includes(\"read\") || false);\n setTrade(item.scope?.toLocaleLowerCase().includes(\"trading\") || false);\n }, [item]);\n\n useEffect(() => {\n if (ipText.length === 0) setHint(\"\");\n }, [ipText]);\n\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title=\"Edit API key\"\n actions={{\n primary: {\n label: \"Confirm\",\n \"data-testid\": \"oui-testid-apiKey-editApiKey-dialog-confirm-btn\",\n className: \"oui-w-[120px] lg:oui-w-[154px]\",\n onClick: async () => {\n if (ipText.length > 0) {\n const hint = props.verifyIP(ipText);\n setHint(hint);\n if (hint.length > 0) {\n return;\n }\n }\n await props.onUpdate?.(item, ipText);\n setOpen(false);\n },\n disabled: item.ip_restriction_list.join(\",\") === ipText,\n size: \"md\",\n fullWidth: true,\n },\n }}\n classNames={{\n footer: \"oui-justify-center\",\n content:\n \"oui-bg-base-8 oui-w-[300px] lg:oui-w-[360px] oui-font-semibold\",\n }}\n >\n <Flex direction={\"column\"} gap={6}>\n {/* <TextField label={\"IP restriction (optional)\"} rows={5} className=\"oui-w-full oui-h-auto\" classNames={{\n input: \"oui-h-[100px]\",\n root: \"oui-h-[100px]\"\n }}/> */}\n <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n IP restriction (optional)\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-editApiKey-dialog-textarea\"\n placeholder=\"Add IP addresses, separated by commas.\"\n className={cn(\n \"oui-text-sm oui-text-base-contrast-80 oui-p-3 oui-h-[100px] oui-rounded-xl oui-bg-base-6 oui-w-full\",\n \"oui-border-0 focus:oui-border-2 focus:oui-border-primary-darken oui-outline-none\",\n \"oui-placeholder-base-contrast-20\",\n hint.length > 0 &&\n \"oui-outline-1 oui-outline-danger focus:oui-outline-none\"\n )}\n value={ipText}\n onChange={(e) => {\n setIpText(e.target.value);\n }}\n style={{\n resize: \"none\",\n }}\n />\n {hint.length > 0 && (\n <Flex gap={1} className=\"oui-relative\">\n <div\n className={cn(\n \"oui-absolute oui-top-[10px]\",\n \"oui-h-1 oui-w-1 oui-rounded-full oui-bg-danger\"\n )}\n />\n <Text color=\"danger\" size=\"xs\" className=\"oui-ml-2\">\n {hint}\n </Text>\n </Flex>\n )}\n </Flex>\n <Statistic\n label={\n <Text size=\"xs\" intensity={54}>\n Permissions\n </Text>\n }\n className=\"oui-w-full\"\n >\n <Flex\n direction={\"row\"}\n gap={6}\n itemAlign={\"start\"}\n className=\"oui-mt-2\"\n >\n <Checkbox\n disabled\n size={18}\n checked={read}\n onCheckedChange={(e) => setRead(e as boolean)}\n label=\"Read\"\n />\n <Checkbox\n disabled\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label=\"Trading\"\n />\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n","import { APIManager } from \"./apiManager.ui\";\nimport { useApiManagerScript } from \"./apiManager.script\";\n\n\nexport const APIManagerWidget = (props?: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const state = useApiManagerScript(props);\n return <APIManager {...state} />;\n};\n","import { APIManagerWidget } from \"./apiManager.widget\";\n\n/**\n * API key manager page\n * @param filterTags filterTags\n * @param keyStatus filterTags default is \"ACTIVE\"\n * @returns\n */\nexport const APIManagerPage = (props: {\n filterTags?: [string];\n keyStatus?: string;\n}) => {\n const { filterTags, keyStatus = \"ACTIVE\" } = props;\n return <APIManagerWidget filterTags={filterTags} keyStatus={keyStatus}/>;\n};\n","export { SettingWidget } from \"./setting.widget\";\nexport { SettingPage } from \"./setting.page\";\n","import { FC } from \"react\";\nimport { Card, Flex, Switch, Text } from \"@orderly.network/ui\";\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { AuthGuardTooltip } from \"@orderly.network/ui-connector\";\n\nexport const Setting: FC<SettingScriptReturns> = (props) => {\n return (\n <Card\n title={\"System upgrade\"}\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold\"\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={4}\n className=\"oui-font-semibold oui-border-t-2 oui-border-line-6\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-flex-1\">\n <Text intensity={80} size=\"base\">\n Cancel open orders during system upgrade\n </Text>\n <Text intensity={54} size=\"sm\">\n During the upgrade period, all open orders will be cancelled to\n manage your risk in case of high market volatility.\n </Text>\n </Flex>\n\n <AuthGuardTooltip align=\"end\">\n <Switch\n checked={props.maintenance_cancel_orders}\n onCheckedChange={(e) => {\n props.setMaintainConfig(e);\n }}\n disabled={props.isSetting || !props.canTouch}\n data-testid=\"oui-testid-setting-switch-btn\"\n />{\" \"}\n </AuthGuardTooltip>\n </Flex>\n </Card>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n useDebouncedCallback,\n useMutation,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport type SettingScriptReturns = {\n maintenance_cancel_orders?: boolean;\n setMaintainConfig: (maintenance_cancel_order_flag: boolean) => void;\n isSetting: boolean;\n canTouch: boolean;\n};\n\nexport const useSettingScript = (): SettingScriptReturns => {\n const { data, mutate: refresh } = useAccountInfo();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [update, { isMutating }] = useMutation(\"/v1/client/maintenance_config\");\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n setChecked(data?.maintenance_cancel_orders || false);\n }, [data]);\n\n const updateCheckState = useDebouncedCallback((value: boolean) => {\n // if (value === data?.maintenance_cancel_orders) return;\n update({\n maintenance_cancel_order_flag: value,\n }).then((data) => {\n if (data.success) {\n // toast.success(value ? \"Opened\" : \"Closed\");\n } else {\n setChecked(!value);\n }\n });\n }, 300);\n\n const setMaintainConfig = (maintenance_cancel_order_flag: boolean) => {\n setChecked(maintenance_cancel_order_flag);\n updateCheckState(maintenance_cancel_order_flag);\n };\n const { state } = useAccount();\n\n const canTouch =\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n return {\n maintenance_cancel_orders: checked, //data?.maintenance_cancel_orders,\n setMaintainConfig,\n isSetting: false,\n canTouch,\n };\n};\n","import { Setting } from \"./setting.ui\";\nimport { useSettingScript } from \"./setting.script\";\n\n\nexport const SettingWidget = () => {\n const state = useSettingScript();\n return <Setting {...state} />;\n};\n","import { SettingWidget } from \"./setting.widget\";\n\nexport const SettingPage = () => {\n return <SettingWidget />\n};"]}