@kodiak-finance/orderly-portfolio 2.8.22-beta.1 → 2.8.22-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layout/context.tsx","../src/pages/overview/assets/assets.script.ts","../src/pages/overview/assets/assetsHeader.tsx","../src/pages/overview/assets/assets.ui.tsx","../src/pages/overview/assets/assets.widget.tsx","../src/pages/overview/assets/index.ts","../src/pages/overview/historyDataGroup/historyDataGroup.script.ts","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/assetHistory.script.ts","../src/pages/overview/assetHistory/assetHistory.ui.tsx","../src/pages/overview/assetHistory/assetHistory.ui.mobile.tsx","../src/pages/overview/assetHistory/assetHistory.widget.tsx","../src/pages/overview/assetHistory/index.tsx","../src/pages/overview/funding/column.tsx","../src/pages/overview/funding/fundingHistory.ui.tsx","../src/pages/overview/funding/fundingHistory.ui.mobile.tsx","../src/pages/overview/funding/useDataSource.script.ts","../src/pages/overview/funding/fundingHistory.widget.tsx","../src/pages/overview/funding/index.tsx","../src/pages/overview/distribution/column.tsx","../src/pages/overview/distribution/distribution.ui.tsx","../src/pages/overview/distribution/distribution.ui.mobile.tsx","../src/pages/overview/distribution/useDataSource.script.ts","../src/pages/overview/distribution/distribution.widget.tsx","../src/pages/overview/distribution/index.tsx","../src/pages/overview/TransferHistory/transfer.mobile.ui.tsx","../src/pages/overview/TransferHistory/column.tsx","../src/pages/overview/TransferHistory/transfer.ui.tsx","../src/pages/overview/TransferHistory/useDataSource.script.ts","../src/pages/overview/TransferHistory/transfer.widget.tsx","../src/pages/overview/TransferHistory/index.tsx","../src/hooks/useAccountsData.ts","../src/hooks/useAssetTotalValue.ts","../src/pages/assets/assetsPage/assets.ui.desktop.tsx","../src/hooks/useAccountFilter.ts","../src/hooks/useAssetsAccountFilter.ts","../src/hooks/index.ts","../src/pages/assets/convertPage/convert.script.ts","../src/pages/assets/convertPage/convert.column.tsx","../src/pages/assets/convertPage/convert.ui.desktop.tsx","../src/pages/assets/convertPage/convert.ui.mobile.tsx","../src/pages/assets/convertPage/convert.widget.tsx","../src/pages/overview/VaultsHistory/column.tsx","../src/pages/overview/VaultsHistory/transfer.ui.tsx","../src/pages/overview/VaultsHistory/useDataSource.script.ts","../src/pages/overview/VaultsHistory/vaults.ui.mobile.tsx","../src/pages/overview/VaultsHistory/transfer.widget.tsx","../src/pages/overview/VaultsHistory/index.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.ui.desktop.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.ui.mobile.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/historyDataGroup/index.ts","../src/pages/overview/provider/overviewContext.tsx","../src/pages/overview/assetChart/assetsChart.script.ts","../src/pages/overview/shared/useAssetHistory.ts","../src/pages/overview/shared/periodHeader.tsx","../src/pages/overview/assetChart/assetsChart.ui.tsx","../src/pages/overview/assetChart/assetsChart.widget.tsx","../src/pages/overview/assetChart/index.ts","../src/pages/overview/performance/performance.ui.tsx","../src/pages/assets/type.ts","../src/pages/overview/performance/performance.script.ts","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/performance/index.ts","../src/pages/feeTier/icons/effectiveFee.tsx","../src/pages/feeTier/icons/index.ts","../src/pages/feeTier/feeTierHeader.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.ui.tsx","../src/layout/layout.widget.tsx","../src/layout/layout.script.tsx","../src/layout/layout.ui.tsx","../src/layout/layout.ui.mobile.tsx","../src/pages/overview/index.tsx","../src/pages/overview/performanceMobileDialog/performance.ui.tsx","../src/pages/overview/performanceMobileDialog/performance.widget.tsx","../src/pages/overview/provider/overviewProvider.tsx","../src/pages/overview/mobile/useRewardsData.script.ts","../src/pages/overview/main.tsx","../src/pages/overview/mobile/mobile.widget.tsx","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.widget.tsx","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.script.ts","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.ui.tsx","../src/pages/overview/mobile/accountStatus.ui.mobile.tsx","../src/pages/overview/mobile/affiliateCard.ui.mobile.tsx","../src/pages/overview/mobile/portfolioHandle.ui.mobile.tsx","../src/pages/overview/mobile/portfolioVaule.ui.mobile.tsx","../src/pages/overview/mobile/settingRouter.ui.mobile.tsx","../src/pages/overview/mobile/traderCard.ui.mobile.tsx","../src/pages/feeTier/index.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/dataSource.ts","../src/pages/positions/page.tsx","../src/pages/orders/page.tsx","../src/pages/api/index.ts","../src/pages/api/apiManager.widget.tsx","../src/pages/api/apiManager.page.tsx","../src/pages/setting/index.ts","../src/pages/setting/setting.script.tsx","../src/pages/setting/setting.ui.tsx","../src/pages/setting/setting.ui.desktop.tsx","../src/pages/setting/setting.ui.mobile.tsx","../src/pages/setting/setting.widget.tsx","../src/pages/setting/setting.page.tsx","../src/pages/assets/index.tsx","../src/pages/assets/assetsPage/assets.widget.tsx","../src/pages/assets/assetsPage/assets.script.ts","../src/pages/assets/assetsPage/assets.column.tsx","../src/pages/assets/assetsPage/assets.ui.mobile.tsx","../src/pages/assets/page.tsx","../src/pages/history/index.tsx","../src/pages/history/history.page.tsx","../src/pages/symbolPerformance/index.tsx","../src/pages/symbolPerformance/page.tsx","../src/pages/symbolPerformance/symbolPerformance.widget.tsx","../src/pages/symbolPerformance/symbolPerformance.script.ts","../src/pages/symbolPerformance/useSymbolPerformanceData.ts","../src/pages/symbolPerformance/useTrades.ts","../src/pages/symbolPerformance/symbolPerformance.ui.tsx","../src/pages/symbolPerformance/dateUtils.ts","../src/pages/symbolPerformance/pnlRankingChart.tsx","../src/pages/symbolPerformance/symbolSelector.tsx","../src/pages/symbolPerformance/useKlineData.ts","../src/pages/symbolPerformance/symbolPerformance.ui.mobile.tsx","../src/pages/symbolPerformance/pnlRankingChartMobile.tsx"],"names":["useState","useMemo","jsx","useScreen","useTranslation","Flex","jsxs","Fragment","Text","useCallback","modal","DepositAndWithdrawWithSheetId","startTime","endTime","dataSource","AssetHistoryStatusEnum","DataFilter","capitalizeFirstLetter","toast","init_column","AuthGuardDataTable","symbol","useSymbolsInfo","ListView","Badge","usePagination","subtractDaysFromCurrentDate","getDate","getMonth","getYear","set","TokenIcon","type","init_useDataSource_script","React","useAccount","capitalizeString","useColumns","produce","formatAddress","useTransferHistory","useCollateral","Decimal","useAppContext","Card","gradientTextVariants","EyeIcon","EyeCloseIcon","cn","Button","Divider","account","useIndexPricesStream","useAppStore","useChainInfo","state","data","useModal","item","init_transfer_ui","init_transfer_widget","useEffect","AssetHistorySideEnum","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","TabPanel","Tabs","LazyConvertHistoryWidget","LazyTransferHistoryWidget","createContext","useContext","AccountStatusEnum","differenceInDays","useAssetsHistory","useLocalStorage","PeriodType","localKey","formatDateRange","totalValue","totalTransferIn","totalTransferOut","lastItem","CardTitle","Box","EMPTY_LIST","Grid","Statistic","Tooltip","LazyPeriodTitle","useDataTap","useId","useScaffoldContext","res","SimpleDialog","hint","CopyIcon","PortfolioLeftSidebarPath","PnlAreaChart","PnLBarChart","VolBarChart","pick","i18n","useRef","usePrivateQuery","usePositionStream","useWalletConnector","ChevronRightIcon","isNumber","ArrowLeftRightIcon","parseJSON","ChainNamespace","ArrowRightShortIcon","getLinkDeviceStorage","commifyOptional","DataTable","page_exports","useAccountInfo","AuthGuardTooltip","Switch","assets_exports","DepositAndWithdrawWithDialogId","TransferDialogId","zero","visible","holding","EmptyDataState","subDays","format","AggregationWindow","window","CombinedPnLChart","CombinedVolumeChart","CombinedFeesChart","CombinedPriceChart","Select","formatCurrency","MakerTakerShare"],"mappings":"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","sourcesContent":["import React, { createContext, useContext, useState, useMemo } from \"react\";\nimport type { RouterAdapter } from \"@kodiak-finance/orderly-types\";\n\ntype LayoutContextValue = {\n sideOpen: boolean;\n onSideOpenChange: (open: boolean) => void;\n routerAdapter?: RouterAdapter;\n};\n\nconst LayoutContext = createContext<LayoutContextValue>({\n sideOpen: true,\n} as LayoutContextValue);\n\nexport const useLayoutContext = () => {\n return useContext(LayoutContext);\n};\n\nexport const LayoutProvider: React.FC<\n React.PropsWithChildren<{ routerAdapter?: RouterAdapter }>\n> = (props) => {\n const { routerAdapter, children } = props;\n const [sideOpen, setSideOpen] = useState(true);\n const memoizedValue = useMemo<LayoutContextValue>(\n () => ({\n sideOpen: sideOpen,\n onSideOpenChange: setSideOpen,\n routerAdapter: routerAdapter,\n }),\n [sideOpen, setSideOpen, routerAdapter],\n );\n return (\n <LayoutContext.Provider value={memoizedValue}>\n {children}\n </LayoutContext.Provider>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLeverage,\n useLocalStorage,\n usePositionStream,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { modal, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { LeverageWidgetWithDialogId } from \"@kodiak-finance/orderly-ui-leverage\";\nimport {\n DepositAndWithdrawWithDialogId,\n DepositAndWithdrawWithSheetId,\n TransferDialogId,\n TransferSheetId,\n} from \"@kodiak-finance/orderly-ui-transfer\";\n\nexport const useAssetScript = () => {\n const { connect, namespace } = useWalletConnector();\n const { state, isMainAccount } = useAccount();\n const { totalValue, freeCollateral } = useCollateral();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [data] = usePositionStream();\n const { curLeverage } = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n const { isMobile } = useScreen();\n const handleDomId = isMobile\n ? DepositAndWithdrawWithSheetId\n : DepositAndWithdrawWithDialogId;\n const subAccounts = state.subAccounts ?? [];\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(LeverageWidgetWithDialogId);\n };\n\n const onDeposit = useCallback(() => {\n modal.show(handleDomId, { activeTab: \"deposit\" });\n }, [handleDomId]);\n\n const onWithdraw = useCallback(() => {\n modal.show(handleDomId, { activeTab: \"withdraw\" });\n }, []);\n\n const onTransfer = useCallback(() => {\n if (isMobile) {\n modal.show(TransferSheetId);\n } else {\n modal.show(TransferDialogId);\n }\n }, [isMobile]);\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: curLeverage,\n onLeverageEdit,\n visible,\n wrongNetwork,\n toggleVisible: () => setVisible(!visible),\n onDeposit,\n onWithdraw,\n onTransfer,\n namespace,\n isMainAccount,\n hasSubAccount: subAccounts?.length > 0,\n } as const;\n};\n\nexport type AssetScriptReturn = ReturnType<typeof useAssetScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n} from \"@kodiak-finance/orderly-ui\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onTransfer?: () => void;\n isMainAccount?: boolean;\n hasSubAccount?: boolean;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{t(\"common.overview\")}</CardTitle>\n <Flex gap={3}>\n {props.isMainAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n onClick={() => props.onDeposit?.()}\n icon={\n <ArrowDownSquareFillIcon className=\"oui-text-primary-contrast\" />\n }\n data-testid=\"oui-testid-portfolio-assets-deposit-btn\"\n >\n {t(\"common.deposit\")}\n </Button>\n )}\n {props.hasSubAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onTransfer?.()}\n icon={<ArrowLeftRightIcon className=\"oui-text-base-contrast\" />}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\n {props.isMainAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onWithdraw?.()}\n icon={<ArrowUpSquareFillIcon className=\"oui-text-base-contrast\" />}\n data-testid=\"oui-testid-portfolio-assets-withdraw-btn\"\n >\n {t(\"common.withdraw\")}\n </Button>\n )}\n </Flex>\n </Flex>\n );\n};\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Card,\n Divider,\n Flex,\n Grid,\n Either,\n Statistic,\n Text,\n EyeIcon,\n gradientTextVariants,\n EditIcon,\n EyeCloseIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { AssetScriptReturn } from \"./assets.script\";\nimport { AssetsHeader } from \"./assetsHeader\";\n\nexport const AssetsUI: React.FC<\n AssetScriptReturn & { onConnectWallet?: () => void }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Card\n classNames={{ footer: \"oui-h-[48px]\", root: \"oui-h-[240px]\" }}\n title={\n <AssetsHeader\n disabled={!props.canTrade}\n isMainAccount={props.isMainAccount}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\n onTransfer={props.onTransfer}\n hasSubAccount={props.hasSubAccount}\n />\n }\n >\n <>\n <Statistic\n label={\n <Flex gap={1}>\n <Text intensity={54}>{t(\"common.totalValue\")}</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\ntype AssetStatisticProps = Pick<\n AssetScriptReturn,\n | \"currentLeverage\"\n | \"unrealPnL\"\n | \"unrealROI\"\n | \"freeCollateral\"\n | \"onLeverageEdit\"\n | \"visible\"\n>;\n\nexport const AssetStatistic = (props: AssetStatisticProps) => {\n const { t } = useTranslation();\n\n return (\n <Grid cols={2} className=\"oui-h-12\">\n <Statistic label={t(\"common.unrealizedPnl\")}>\n <Flex>\n <Text.pnl\n coloring\n size=\"lg\"\n weight=\"semibold\"\n visible={props.visible}\n >\n {props.unrealPnL}\n </Text.pnl>\n <Text.roi\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.roi>\n </Flex>\n </Statistic>\n <Statistic\n label={t(\"portfolio.overview.availableWithdraw\")}\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 React from \"react\";\nimport { useAssetScript } from \"./assets.script\";\nimport { AssetsUI } from \"./assets.ui\";\n\nexport const AssetWidget: React.FC = () => {\n const { connect: connectWallet, ...rest } = useAssetScript();\n return (\n <AssetsUI\n // TODO: remove duplicate props\n onConnectWallet={connectWallet}\n connect={connectWallet}\n {...rest}\n />\n );\n};\n","export { useAssetScript } from \"./assets.script\";\nexport { AssetsUI } from \"./assets.ui\";\nexport { AssetWidget } from \"./assets.widget\";\n","import { useState } from \"react\";\n\nexport type TabName =\n | \"deposit\"\n | \"withdraw\"\n | \"funding\"\n | \"distribution\"\n | \"transfer\"\n | \"vaults\";\n\nexport const useHistoryDataGroupScript = () => {\n const [active, setActive] = useState<TabName>(\"deposit\");\n return {\n active,\n onTabChange: setActive as React.Dispatch<React.SetStateAction<string>>,\n } as const;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistoryStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n capitalizeFirstLetter,\n Text,\n Flex,\n TokenIcon,\n toast,\n type Column,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\ntype Options = {\n chainsInfo: any[];\n isDeposit: boolean;\n isWeb3Wallet: boolean;\n};\n\nexport const useAssetHistoryColumns = (options: Options) => {\n const { chainsInfo, isDeposit, isWeb3Wallet } = options;\n const { t } = useTranslation();\n\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const columns = useMemo<Column[]>(() => {\n const txIdColumn: Column = {\n title: t(\"common.txId\"),\n dataIndex: \"tx_id\",\n width: 120,\n render: (value, record) => {\n if (!value) {\n return <div className=\"oui-text-base-contrast-54\">-</div>;\n }\n const chainInfo = chainsInfo?.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\" rel=\"noreferrer\">\n {/* <Tooltip content={value} delayDuration={0}> */}\n <Text.formatted\n copyable={!!value}\n rule=\"txId\"\n className=\"oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n onCopy={onCopy}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n };\n\n const accountIdColumn: Column = {\n title: t(\"common.accountId\"),\n dataIndex: \"account_id\",\n width: 120,\n render: (value, record) => {\n const accountId = isDeposit\n ? record.from_account_id\n : record.to_account_id;\n\n return (\n <Text.formatted rule=\"address\" copyable={!!accountId} onCopy={onCopy}>\n {accountId}\n </Text.formatted>\n );\n },\n };\n\n return [\n {\n title: t(\"common.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: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 80,\n rule: \"date\",\n },\n isWeb3Wallet ? txIdColumn : accountIdColumn,\n {\n title: t(\"common.status\"),\n dataIndex: \"trans_status\",\n width: 100,\n render: (value, recoed) => {\n value = isWeb3Wallet ? value : recoed.status;\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.PENDING]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.CONFIRM]: t(\"assetHistory.status.confirm\"),\n [AssetHistoryStatusEnum.PROCESSING]: t(\n \"assetHistory.status.processing\",\n ),\n [AssetHistoryStatusEnum.COMPLETED]: t(\n \"assetHistory.status.completed\",\n ),\n [AssetHistoryStatusEnum.FAILED]: t(\"assetHistory.status.failed\"),\n };\n return (\n statusMap[value as keyof typeof statusMap] ||\n capitalizeFirstLetter(value?.toLowerCase())\n );\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 100,\n rule: \"price\",\n render: (value, record) => {\n const netAmount = new Decimal(value).minus(record.fee ?? 0);\n return (\n <Text.numeral\n dp={record.decimals}\n rule=\"price\"\n coloring\n showIdentifier\n padding={false}\n >\n {isDeposit ? netAmount.toNumber() : netAmount.neg().toNumber()}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t, chainsInfo, isDeposit, isWeb3Wallet]);\n\n return columns;\n};\n","import { differenceInDays, setHours } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n const { from, to = new Date() } = dateRange;\n\n const diff = differenceInDays(from, to);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport {\n useAssetsHistory,\n useChainInfo,\n useAppStore,\n useTransferHistory,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { AssetHistorySideEnum } from \"@kodiak-finance/orderly-types\";\nimport { modal, usePagination } from \"@kodiak-finance/orderly-ui\";\nimport { DepositAndWithdrawWithSheetId } from \"@kodiak-finance/orderly-ui-transfer\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\n\nexport enum AssetTarget {\n Web3Wallet = \"Web3Wallet\",\n AccountId = \"AccountId\",\n}\n\nexport type AssetHistoryScriptOptions = {\n side: AssetHistorySideEnum;\n};\n\nexport type AssetHistoryScriptReturn = ReturnType<typeof useAssetHistoryScript>;\n\nexport const useAssetHistoryScript = (options: AssetHistoryScriptOptions) => {\n const { side } = options;\n const isDeposit = side === AssetHistorySideEnum.DEPOSIT;\n\n const [today] = useState(() => {\n const d = new Date();\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n const [target, setTarget] = useState<AssetTarget>(AssetTarget.Web3Wallet);\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const { startTime, endTime } = useMemo(() => {\n const startTime = dateRange[0].getTime();\n const endTime = set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n }).getTime();\n\n return { startTime, endTime };\n }, [dateRange]);\n\n const [assetData, { meta: assetMeta, isLoading: assetLoading }] =\n useAssetsHistory(\n {\n startTime,\n endTime,\n page,\n pageSize,\n side,\n },\n {\n shouldUpdateOnWalletChanged: (data) => data.side === side,\n },\n );\n\n const [transferData, { isLoading: transferLoading, meta: transferMeta }] =\n useTransferHistory({\n dataRange: [startTime, endTime],\n side: isDeposit ? \"IN\" : \"OUT\",\n size: pageSize,\n page: page,\n main_sub_only: false,\n });\n\n const { data: chainsInfo } = useChainInfo();\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n } else if (filter.name === \"target\") {\n setTarget(filter.value);\n setPage(1);\n }\n };\n\n const isLoading = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return assetLoading;\n }\n return transferLoading;\n }, [target, assetLoading, transferLoading]);\n\n const meta = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return assetMeta;\n }\n return transferMeta;\n }, [target, assetMeta, transferMeta]);\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n const dataSource = useMemo(() => {\n return (target === AssetTarget.Web3Wallet ? assetData : transferData).map(\n (item) => {\n const findToken = tokensInfo?.find(({ token }) => token === item.token);\n return {\n ...item,\n decimals: findToken?.decimals ?? 2,\n };\n },\n );\n }, [target, assetData, transferData, tokensInfo]);\n\n const onDeposit = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, { activeTab: \"deposit\" });\n }, []);\n\n const isWeb3Wallet = target === AssetTarget.Web3Wallet;\n\n return {\n dataSource,\n total: meta?.total,\n isLoading,\n queryParameter: {\n target,\n dateRange,\n },\n onFilter,\n pagination,\n onDeposit,\n chainsInfo: chainsInfo as any[],\n isDeposit,\n isWeb3Wallet,\n };\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport {\n AssetTarget,\n type AssetHistoryScriptReturn,\n} from \"./assetHistory.script\";\nimport { useAssetHistoryColumns } from \"./column\";\n\ntype AssetHistoryProps = AssetHistoryScriptReturn;\n\nexport const AssetHistory: FC<AssetHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const { dateRange, target } = queryParameter;\n const columns = useAssetHistoryColumns({\n chainsInfo: props.chainsInfo,\n isDeposit: props.isDeposit,\n isWeb3Wallet: props.isWeb3Wallet,\n });\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"common.web3Wallet\"), value: AssetTarget.Web3Wallet },\n { label: t(\"common.accountId\"), value: AssetTarget.AccountId },\n ];\n }, [t]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"target\",\n options: options,\n value: target,\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={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n scroll: \"oui-min-h-[400px]\",\n }}\n columns={columns}\n dataSource={dataSource}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistoryStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n DataFilter,\n Flex,\n ListView,\n Text,\n capitalizeFirstLetter,\n toast,\n ArrowRightShortIcon,\n EmptyDataState,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n AssetTarget,\n type AssetHistoryScriptReturn,\n} from \"./assetHistory.script\";\n\ntype AssetHistoryMobileProps = AssetHistoryScriptReturn;\n\nexport const AssetHistoryMobile: FC<AssetHistoryMobileProps> = (props) => {\n const {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n pagination,\n onDeposit,\n chainsInfo,\n isDeposit,\n isWeb3Wallet,\n } = props;\n const { dateRange, target } = queryParameter;\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"common.web3Wallet\"), value: AssetTarget.Web3Wallet },\n { label: t(\"common.accountId\"), value: AssetTarget.AccountId },\n ];\n }, [t]);\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const getStatusText = (item: any) => {\n const status = props.isWeb3Wallet ? item.trans_status : item.status;\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.PENDING]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.CONFIRM]: t(\"assetHistory.status.confirm\"),\n [AssetHistoryStatusEnum.PROCESSING]: t(\"assetHistory.status.processing\"),\n [AssetHistoryStatusEnum.COMPLETED]: t(\"assetHistory.status.completed\"),\n [AssetHistoryStatusEnum.FAILED]: t(\"assetHistory.status.failed\"),\n };\n return (\n statusMap[status as keyof typeof statusMap] ||\n capitalizeFirstLetter(status?.toLowerCase())\n );\n };\n\n const renderHistoryItem = (item: any) => {\n // Amount formatting\n const formattedAmount = isDeposit\n ? `+${item.amount - (item.fee ?? 0)}`\n : -(item.amount - (item.fee ?? 0));\n\n // Get tx link\n const getTxLink = () => {\n if (!item.tx_id) {\n return undefined;\n }\n\n const chainInfo =\n chainsInfo && Array.isArray(chainsInfo)\n ? chainsInfo.find(\n (chain: any) =>\n parseInt(item.chain_id) === parseInt(chain.chain_id),\n )\n : undefined;\n\n if (chainInfo?.explorer_base_url) {\n return `${chainInfo.explorer_base_url}/tx/${item.tx_id}`;\n }\n\n return undefined;\n };\n\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const itemColor = isDeposit ? \"buy\" : \"sell\";\n\n const amountView = (\n <Flex className=\"oui-text-xs\">\n <Text color={itemColor}>{formattedAmount}</Text>\n <Text className=\"oui-ml-1\" intensity={80}>\n {item.token}\n </Text>\n {isWeb3Wallet && (\n <Badge color={itemColor} className=\"oui-ml-2\">\n {isDeposit ? t(\"common.deposit\") : t(\"common.withdraw\")}\n </Badge>\n )}\n </Flex>\n );\n\n const statusView = (\n <Text intensity={isWeb3Wallet ? 80 : 36} size=\"xs\">\n {getStatusText(item)}\n </Text>\n );\n\n const timeView = (\n <Text.formatted rule=\"date\" intensity={36} size=\"2xs\">\n {item.created_time}\n </Text.formatted>\n );\n\n const txIdView = item.tx_id ? (\n <a href={getTxLink()} target=\"_blank\" rel=\"noreferrer\">\n <Text.formatted\n copyable={!!item.tx_id}\n className=\"oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n rule=\"txId\"\n onCopy={onCopy}\n intensity={36}\n size=\"xs\"\n >\n {item.tx_id}\n </Text.formatted>\n </a>\n ) : (\n <Text intensity={54}>-</Text>\n );\n\n const accountId = isDeposit ? item.from_account_id : item.to_account_id;\n\n const accountIdView = (\n <Flex gapX={1}>\n <Text intensity={36} size=\"xs\">\n {isDeposit\n ? t(\"transfer.internalTransfer.from\")\n : t(\"transfer.internalTransfer.to\")}\n </Text>\n <Text.formatted\n rule=\"address\"\n copyable={!!accountId}\n onCopy={onCopy}\n intensity={80}\n size=\"xs\"\n >\n {accountId}\n </Text.formatted>\n </Flex>\n );\n\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={1}\n intensity={900}\n r=\"xl\"\n className=\"oui-font-semibold\"\n >\n <Flex justify=\"between\" width=\"100%\" height=\"18px\">\n {isWeb3Wallet ? (\n <>\n {amountView}\n {statusView}\n </>\n ) : (\n <>\n {accountIdView}\n {amountView}\n </>\n )}\n </Flex>\n\n <Flex justify=\"between\" width=\"100%\" height=\"18px\">\n {timeView}\n {isWeb3Wallet ? txIdView : statusView}\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"target\",\n options: options,\n value: target,\n size: \"md\",\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 className=\"oui-sticky oui-top-[44px] oui-z-10 oui-border-none oui-bg-base-10 oui-px-3 oui-py-2\"\n />\n\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n emptyView={\n <Flex\n direction={\"column\"}\n height={\"100%\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n mt={3}\n >\n <EmptyDataState />\n {dataSource?.length == 0 && (\n <Flex\n direction=\"row\"\n itemAlign=\"center\"\n justify=\"center\"\n onClick={onDeposit}\n className=\"oui-mt-2 oui-h-4 oui-w-full oui-text-secondary\"\n >\n <Text color=\"primary\" size=\"2xs\">\n {t(\"common.deposit\")}\n </Text>\n <ArrowRightShortIcon\n className=\"oui-ml-0.5 oui-size-4 oui-text-primary oui-opacity-100\"\n color=\"primary\"\n size={16}\n opacity={100}\n />\n </Flex>\n )}\n </Flex>\n }\n />\n </>\n );\n};\n","import React from \"react\";\nimport { AssetHistorySideEnum } from \"@kodiak-finance/orderly-types\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useAssetHistoryScript } from \"./assetHistory.script\";\nimport { AssetHistory } from \"./assetHistory.ui\";\nimport { AssetHistoryMobile } from \"./assetHistory.ui.mobile\";\n\ntype AssetHistoryWidgetProps = {\n side: AssetHistorySideEnum;\n};\n\nexport const AssetHistoryWidget: React.FC<AssetHistoryWidgetProps> = (\n props,\n) => {\n const state = useAssetHistoryScript({ side: props.side });\n const { isMobile } = useScreen();\n if (isMobile) {\n return <AssetHistoryMobile {...state} />;\n }\n return <AssetHistory {...state} />;\n};\n","export { useAssetHistoryColumns } from \"./column\";\nexport { useAssetHistoryScript } from \"./assetHistory.script\";\nexport { AssetHistory } from \"./assetHistory.ui\";\nexport { AssetHistoryWidget } from \"./assetHistory.widget\";\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, type Column } from \"@kodiak-finance/orderly-ui\";\n\nexport const useFundingHistoryColumns = () => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 80,\n rule: \"symbol\",\n textProps: {\n showIcon: true,\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: `${t(\"funding.fundingRate\")} / ${t(\"funding.annualRate\")}`,\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: t(\"funding.paymentType\"),\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n case \"Paid\":\n return t(\"funding.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"funding.paymentType.received\");\n default:\n return value;\n }\n },\n },\n {\n title: `${t(\"funding.fundingFee\")} (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 }, [t]);\n\n return columns;\n};\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useFundingHistoryColumns } from \"./column\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryDesktop: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const columns = useFundingHistoryColumns();\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"common.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 }, [t, symbols]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options,\n value: symbol,\n valueFormatter: (value) => {\n const option = options.find((item) => item.value === value);\n return option?.label || value;\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 { FC, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n DataFilter,\n Flex,\n ListView,\n Text,\n Badge,\n} from \"@kodiak-finance/orderly-ui\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryMobile: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, pagination } = props;\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const switchPaymentType = (paymentType: string) => {\n switch (paymentType) {\n case \"Pay\":\n case \"Paid\":\n return t(\"funding.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"funding.paymentType.received\");\n default:\n return paymentType;\n }\n };\n\n const loadMore = () => {\n if (dataSource && dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const renderHistoryItem = (item: any) => {\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"20px\">\n <Text.formatted\n rule=\"symbol\"\n className=\"oui-text-base-contrast oui-mr-1 oui-text-sm\"\n >\n {item.symbol}\n </Text.formatted>\n <Badge color=\"neutral\" size=\"xs\">\n {switchPaymentType(item.payment_type)}\n </Badge>\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36 oui-text-2xs oui-ml-auto\"\n >\n {item.created_time}\n </Text.formatted>\n </Flex>\n <div className=\"oui-w-full oui-h-[1px] oui-bg-base-6\" />\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.fundingRate\")}\n </Text>\n <Text.numeral\n rule={\"percentages\"}\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.funding_rate}\n </Text.numeral>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.annualRate\")}\n </Text>\n <Text.numeral\n rule={\"percentages\"}\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.annual_rate}\n </Text.numeral>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.fundingFee\")}{\" \"}\n <Text className=\"oui-text-base-contrast-20\">(USDC)</Text>\n </Text>\n <Text.numeral\n dp={6}\n ignoreDP={true}\n coloring={true}\n showIdentifier={true}\n className=\"oui-text-xs oui-self-end\"\n >\n {Number(item.funding_fee) * -1}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"common.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 }, [t, symbols]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options,\n value: symbol,\n valueFormatter: (value) => {\n const option = options.find((item) => item.value === value);\n return option?.label || value;\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 className=\"oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import { useFundingFeeHistory } from \"@kodiak-finance/orderly-hooks\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-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 React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { FundingHistoryDesktop } from \"./fundingHistory.ui\";\nimport { FundingHistoryMobile } from \"./fundingHistory.ui.mobile\";\nimport { useFundingHistoryHook } from \"./useDataSource.script\";\n\nexport const FundingHistoryWidget: React.FC = () => {\n const state = useFundingHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <FundingHistoryMobile {...state} />;\n }\n return <FundingHistoryDesktop {...state} />;\n};\n","export { FundingHistoryWidget } from \"./fundingHistory.widget\";\nexport { FundingHistoryDesktop } from \"./fundingHistory.ui\";\nexport { FundingHistoryMobile } from \"./fundingHistory.ui.mobile\";\nexport { useFundingHistoryColumns } from \"./column\";\nexport { useFundingHistoryHook } from \"./useDataSource.script\";\n","import { useMemo } from \"react\";\nimport { useTranslation, i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, type Column, TokenIcon } from \"@kodiak-finance/orderly-ui\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.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: t(\"common.time\"),\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n width: 120,\n formatter(value, record, index) {\n switch (value) {\n case \"CREATED\":\n case \"SPLIT\":\n return t(\"assetHistory.status.processing\");\n case \"COMPLETED\":\n default:\n return t(\"assetHistory.status.completed\");\n }\n },\n },\n\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n width: 80,\n formatter: (value: any) => {\n switch (value) {\n case \"REFERRER_REBATE\":\n return t(\n \"portfolio.overview.distribution.type.referralCommission\",\n );\n case \"REFEREE_REBATE\":\n return t(\"portfolio.overview.distribution.type.refereeRebate\");\n case \"BROKER_FEE\":\n return t(\"portfolio.overview.distribution.type.brokerFee\");\n default:\n return \"-\";\n }\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 80,\n // rule: \"price\",\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, [t]);\n\n return columns;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useColumns } from \"./column\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryDesktop: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, isValidating } =\n props;\n const columns = useColumns();\n const { type, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const TYPES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n {\n label: t(\"portfolio.overview.distribution.type.referralCommission\"),\n value: \"REFERRER_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.refereeRebate\"),\n value: \"REFEREE_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.brokerFee\"),\n value: \"BROKER_FEE\",\n },\n ];\n }, [t]);\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 { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DataFilter, Flex, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport { ListView } from \"@kodiak-finance/orderly-ui\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryMobile: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, pagination } = props;\n const { type, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const TYPES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n {\n label: t(\"portfolio.overview.distribution.type.referralCommission\"),\n value: \"REFERRER_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.refereeRebate\"),\n value: \"REFEREE_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.brokerFee\"),\n value: \"BROKER_FEE\",\n },\n ];\n }, [t]);\n\n const getStatusText = (status: string) => {\n switch (status) {\n case \"CREATED\":\n case \"SPLIT\":\n return t(\"assetHistory.status.processing\") as string;\n case \"COMPLETED\":\n default:\n return t(\"assetHistory.status.completed\") as string;\n }\n };\n\n const getTypeText = (type: string) => {\n switch (type) {\n case \"REFERRER_REBATE\":\n return t(\"portfolio.overview.distribution.type.referralCommission\");\n case \"REFEREE_REBATE\":\n return t(\"portfolio.overview.distribution.type.refereeRebate\");\n case \"BROKER_FEE\":\n return t(\"portfolio.overview.distribution.type.brokerFee\");\n default:\n return \"-\";\n }\n };\n\n const renderItem = (item: any) => {\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"20px\">\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n >\n {item.created_time}\n </Text.formatted>\n <Text className=\"oui-text-sm oui-text-base-contrast-80\">\n {getStatusText(item.status)}\n </Text>\n </Flex>\n <div className=\"oui-h-px oui-w-full oui-bg-base-6\" />\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.token\")}\n </Text>\n <Flex gapX={2}>\n <TokenIcon name={item.token} size=\"xs\" />\n <span className=\"oui-text-xs oui-text-base-contrast-80\">\n {item.token}\n </span>\n </Flex>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.type\")}\n </Text>\n <Text className=\"oui-text-xs oui-text-base-contrast-80\">\n {getTypeText(item.type)}\n </Text>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.amount\")}\n </Text>\n <Text className=\"oui-text-xs oui-text-base-contrast-80\">\n {item.amount}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange &&\n pagination.onPageSizeChange(pagination?.pageSize + 50);\n }\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"type\",\n options: TYPES,\n value: type,\n size: \"md\",\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 className=\"oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderItem}\n contentClassName=\"oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import { useDistributionHistory } from \"@kodiak-finance/orderly-hooks\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { useMemo, useState } from \"react\";\nimport { usePagination } from \"@kodiak-finance/orderly-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 React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { DistributionHistoryDesktop } from \"./distribution.ui\";\nimport { DistributionHistoryMobile } from \"./distribution.ui.mobile\";\nimport { useDistributionHistoryHook } from \"./useDataSource.script\";\n\nexport const DistributionHistoryWidget: React.FC = () => {\n const state = useDistributionHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <DistributionHistoryMobile {...state} />;\n }\n return <DistributionHistoryDesktop {...state} />;\n};\n","export { DistributionHistoryWidget } from \"./distribution.widget\";\nexport { DistributionHistoryMobile } from \"./distribution.ui.mobile\";\nexport { DistributionHistoryDesktop } from \"./distribution.ui\";\n","import React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport {\n DataFilter,\n formatAddress,\n ListView,\n Flex,\n Text,\n Badge,\n TokenIcon,\n toast,\n Statistic,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\nimport type { useTransferHistoryHookReturn } from \"./useDataSource.script\";\n\ntype TransferHistoryMobileProps = useTransferHistoryHookReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const TransferHistoryMobileUI: React.FC<\n Readonly<TransferHistoryMobileProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n dataSource,\n queryParameter,\n state,\n isMainAccount,\n isLoading,\n selectedAccount,\n onFilter,\n pagination,\n } = props;\n const { side, dateRange } = queryParameter;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const subAccounts = state.subAccounts ?? [];\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n const loadMore = () => {\n if (dataSource && dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const onCopy = () => {\n toast.success(t(\"common.copy.copied\"));\n };\n\n const renderHistoryItem = (item: API.TransferHistoryRow) => {\n const isFromMainAccount = item.from_account_id === state.mainAccountId;\n const isToMainAccount = item.to_account_id === state.mainAccountId;\n const fromSubAccount = subAccounts.find(\n (acc) => acc.id === item.from_account_id,\n );\n const toSubAccount = subAccounts.find(\n (acc) => acc.id === item.to_account_id,\n );\n\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n {/* Header: Date and Status */}\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36 oui-text-2xs\"\n >\n {item.updated_time}\n </Text.formatted>\n <Text size=\"sm\" className=\"oui-text-base-contrast-80\">\n {capitalizeString(item.status)}\n </Text>\n </Flex>\n\n {/* Divider */}\n <div className=\"oui-w-full oui-h-[1px] oui-bg-base-6\" />\n\n {/* Token and Amount */}\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\" itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"common.token\")}\n </Text>\n <Flex direction=\"row\" itemAlign=\"center\" gap={1}>\n <TokenIcon name={item.token} size=\"2xs\" />\n <Text size=\"xs\" className=\"oui-text-base-contrast-80\">\n {item.token}\n </Text>\n </Flex>\n </Flex>\n <Flex direction=\"column\" itemAlign=\"end\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"common.amount\")}\n </Text>\n <Text.numeral\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.amount}\n </Text.numeral>\n </Flex>\n </Flex>\n\n {/* From and To Account IDs */}\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\" gap={1}>\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"transfer.internalTransfer.from\")} ({t(\"common.accountId\")})\n </Text>\n <Flex direction=\"column\" gap={1} itemAlign={\"start\"}>\n <Flex direction=\"row\" itemAlign=\"center\" gap={1}>\n <Text.formatted\n rule=\"address\"\n copyable\n onCopy={onCopy}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.from_account_id}\n </Text.formatted>\n </Flex>\n <Badge color=\"neutral\" size=\"xs\">\n {isFromMainAccount\n ? t(\"common.mainAccount\")\n : fromSubAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n </Flex>\n <Flex direction=\"column\" itemAlign=\"end\" gap={1}>\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"transfer.internalTransfer.to\")} ({t(\"common.accountId\")})\n </Text>\n <Flex direction=\"column\" itemAlign=\"end\" gap={1}>\n <Flex direction=\"row\" itemAlign=\"center\" gap={1}>\n <Text.formatted\n rule=\"address\"\n copyable\n onCopy={onCopy}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.to_account_id}\n </Text.formatted>\n </Flex>\n <Badge color=\"neutral\" size=\"xs\">\n {isToMainAccount\n ? t(\"common.mainAccount\")\n : toSubAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <div className=\"oui-px-3\">\n <DataFilter\n onFilter={onFilter}\n items={produce(\n [\n {\n type: \"select\",\n name: \"side\",\n value: side,\n options: [\n { value: \"OUT\", label: t(\"common.outflow\") },\n { value: \"IN\", label: t(\"common.inflow\") },\n ],\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ],\n (draft) => {\n if (isMainAccount) {\n draft.unshift({\n type: \"select\",\n name: \"account\",\n value: selectedAccount as any,\n options: memoizedOptions,\n });\n }\n },\n )}\n />\n </div>\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n TokenIcon,\n Text,\n toast,\n Badge,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n const onCopy = () => {\n toast.success(t(\"common.copy.copied\"));\n };\n const { state } = useAccount();\n const sub = state.subAccounts ?? [];\n const columns = React.useMemo<Column<API.TransferHistoryRow>[]>(() => {\n return [\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n width: 80,\n render(val: string) {\n return (\n <Flex gapX={2}>\n <TokenIcon name={val} size=\"xs\" />\n <span>{val}</span>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: `${t(\"transfer.internalTransfer.from\")} (${t(\"common.accountId\")})`,\n dataIndex: \"from_account_id\",\n render(val: string) {\n const isMainAccount = val === state.mainAccountId;\n const subAccount = sub.find((item) => item.id === val);\n return (\n <Flex itemAlign=\"start\" py={2} gap={1} direction=\"column\">\n <Text.formatted onCopy={onCopy} copyable rule=\"address\">\n {val}\n </Text.formatted>\n <Badge className=\"oui-select-none\" color=\"neutral\" size=\"xs\">\n {isMainAccount\n ? t(\"common.mainAccount\")\n : subAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n );\n },\n },\n {\n title: `${t(\"transfer.internalTransfer.to\")} (${t(\"common.accountId\")})`,\n dataIndex: \"to_account_id\",\n render(val: string) {\n const isMainAccount = val === state.mainAccountId;\n const subAccount = sub.find((item) => item.id === val);\n return (\n <Flex itemAlign=\"start\" py={2} gap={1} direction=\"column\">\n <Text.formatted onCopy={onCopy} copyable rule=\"address\">\n {val}\n </Text.formatted>\n <Badge className=\"oui-select-none\" color=\"neutral\" size=\"xs\">\n {isMainAccount\n ? t(\"common.mainAccount\")\n : subAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n width: 120,\n render(val: string) {\n return capitalizeString(val);\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 80,\n },\n ];\n }, [t, state.mainAccountId, sub]);\n return columns;\n};\n","import React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { DataFilter, formatAddress } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport type { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport { useColumns } from \"./column\";\nimport type { useTransferHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useTransferHistoryHookReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const TransferHistoryUI: React.FC<\n Readonly<HistoryProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n dataSource,\n queryParameter,\n state,\n isMainAccount,\n isLoading,\n selectedAccount,\n onFilter,\n } = props;\n const { side, dateRange } = queryParameter;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const subAccounts = state.subAccounts ?? [];\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={produce(\n [\n {\n type: \"select\",\n name: \"side\",\n value: side,\n options: [\n { value: \"OUT\", label: t(\"common.outflow\") },\n { value: \"IN\", label: t(\"common.inflow\") },\n ],\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ],\n (draft) => {\n if (isMainAccount) {\n draft.unshift({\n type: \"select\",\n name: \"account\",\n value: selectedAccount as any,\n options: memoizedOptions,\n });\n }\n },\n )}\n />\n <AuthGuardDataTable<API.TransferHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport { useAccount, useTransferHistory } from \"@kodiak-finance/orderly-hooks\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport type { PaginationMeta } from \"@kodiak-finance/orderly-ui\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { AccountType } from \"./transfer.ui\";\n\nexport const useTransferHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const today = React.useMemo<Date>(() => {\n const date = new Date();\n return new Date(getYear(date), getMonth(date), getDate(date), 0, 0, 0);\n }, []);\n\n const [dateRange, setDateRange] = React.useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const { state } = useAccount();\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const [side, setSide] = React.useState<\"IN\" | \"OUT\">(\"OUT\");\n\n const [data, { isLoading, meta }] = useTransferHistory({\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 side: side,\n size: pageSize,\n page: page,\n main_sub_only: true,\n });\n\n const filteredData = React.useMemo(() => {\n return data.filter((item) => {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return (\n item.from_account_id === state.mainAccountId ||\n item.to_account_id === state.mainAccountId\n );\n } else {\n return (\n item.from_account_id === selectedAccount ||\n item.to_account_id === selectedAccount\n );\n }\n });\n }, [data, selectedAccount]);\n\n const onAccountFilter = React.useCallback(\n (filter: { value: string; name: string }) => {\n if (filter.name === \"account\") {\n setAccount(filter.value);\n }\n if (filter.name === \"side\") {\n setSide(filter.value as \"IN\" | \"OUT\");\n }\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value as any));\n }\n setPage(1);\n },\n [setPage],\n );\n\n const pagination = React.useMemo<PaginationMeta>(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n return {\n dataSource: filteredData,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n selectedAccount,\n onFilter: onAccountFilter,\n pagination,\n } as const;\n};\n\nexport type useTransferHistoryHookReturn = ReturnType<\n typeof useTransferHistoryHook\n>;\n","import React from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { TransferHistoryMobileUI } from \"./transfer.mobile.ui\";\nimport { TransferHistoryUI } from \"./transfer.ui\";\nimport { useTransferHistoryHook } from \"./useDataSource.script\";\n\nexport const TransferHistoryWidget: React.FC = () => {\n const state = useTransferHistoryHook();\n const accountState = useAccount();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <TransferHistoryMobileUI {...state} {...accountState} />;\n }\n return <TransferHistoryUI {...state} {...accountState} />;\n};\n","export { TransferHistoryWidget } from \"./transfer.widget\";\nexport { TransferHistoryUI } from \"./transfer.ui\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount, useCollateral } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\n\nconst EMPTY_HOLDING: Partial<API.Holding> = {\n token: \"USDC\",\n holding: 0,\n frozen: 0,\n};\n\n// Account data structure used in assets display\nexport interface AccountWithChildren {\n account_id: string;\n id?: string;\n description?: string;\n children: Array<API.Holding & { account_id: string }>;\n}\n\n// Hook to transform raw account data into display format\nexport const useAccountsData = (): AccountWithChildren[] => {\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const subAccounts = state.subAccounts ?? [];\n\n return useMemo(() => {\n return produce<any[]>(subAccounts, (draft) => {\n // Process sub accounts\n for (const sub of draft) {\n sub.account_id = sub.id;\n if (Array.isArray(sub.holding) && sub.holding.length) {\n sub.children = sub.holding.map((item: API.Holding) => ({\n ...item,\n account_id: sub.id,\n }));\n } else {\n sub.children = [{ ...EMPTY_HOLDING, account_id: sub.id }];\n }\n // Remove original holding to avoid confusion\n Reflect.deleteProperty(sub, \"holding\");\n }\n\n // Add main account at the beginning if user is main account\n if (isMainAccount) {\n draft.unshift({\n account_id: state.mainAccountId!,\n description: t(\"common.mainAccount\"),\n children:\n Array.isArray(holding) && holding.length\n ? holding.map((item: API.Holding) => ({\n ...item,\n account_id: state.mainAccountId!,\n }))\n : [\n {\n ...EMPTY_HOLDING,\n account_id: state.mainAccountId!,\n },\n ],\n });\n }\n });\n }, [holding, subAccounts, isMainAccount, state.mainAccountId, t]);\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useIndexPricesStream,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { SubAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useAccountsData } from \"./useAccountsData\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\nexport const calculateTotalHolding = (\n data: SubAccount[] | SubAccount[\"holding\"],\n getIndexPrice: (token: string) => number,\n) => {\n let total = new Decimal(0);\n for (const item of data) {\n if (Array.isArray(item.holding)) {\n for (const hol of item.holding) {\n if (isNumber(hol.holding)) {\n const indexPrice = getIndexPrice(hol.token);\n total = total.plus(new Decimal(hol.holding).mul(indexPrice));\n }\n }\n } else if (isNumber(item.holding) && \"token\" in item) {\n const indexPrice = getIndexPrice(item.token);\n total = total.plus(new Decimal(item.holding).mul(indexPrice));\n }\n }\n return total;\n};\n\nexport const useAssetTotalValue = () => {\n const { state, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const { getIndexPrice } = useIndexPricesStream();\n const allAccounts = useAccountsData();\n\n const subAccounts = state.subAccounts ?? [];\n\n // Calculate main account total value\n const mainTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(holding, getIndexPrice),\n [holding, getIndexPrice],\n );\n\n // Calculate sub accounts total value\n const subTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(subAccounts, getIndexPrice),\n [subAccounts, getIndexPrice],\n );\n\n // Calculate final total value\n const totalValue = useMemo<number>(() => {\n if (isMainAccount) {\n return mainTotalValue.plus(subTotalValue).toNumber();\n } else {\n const find = allAccounts.find((item) => item.id === state.accountId);\n if (Array.isArray(find?.children)) {\n return calculateTotalHolding(find.children, getIndexPrice).toNumber();\n }\n return 0;\n }\n }, [\n isMainAccount,\n mainTotalValue,\n subTotalValue,\n allAccounts,\n state.accountId,\n getIndexPrice,\n ]);\n\n return totalValue;\n};\n","import React, { useMemo } from \"react\";\nimport pick from \"ramda/es/pick\";\nimport { SubAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n Text,\n Card,\n Flex,\n gradientTextVariants,\n EyeIcon,\n EyeCloseIcon,\n cn,\n DataFilter,\n formatAddress,\n Tabs,\n TabPanel,\n ArrowDownShortIcon,\n Button,\n Divider,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n AuthGuard,\n AuthGuardDataTable,\n} from \"@kodiak-finance/orderly-ui-connector\";\nimport type { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport type { useAssetsScriptReturn } from \"./assets.script\";\nimport type {\n AssetsDataTableWidgetProps,\n AssetsWidgetProps,\n} from \"./assets.widget\";\n\nconst LazyConvertHistoryWidget = React.lazy(() =>\n import(\"../convertPage/convert.widget\").then((mod) => {\n return { default: mod.ConvertHistoryWidget };\n }),\n);\n\nexport type AssetsProps = useAssetsScriptReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nconst TotalValueInfo: React.FC<\n Readonly<\n Pick<AssetsWidgetProps, \"totalValue\" | \"visible\" | \"onToggleVisibility\">\n >\n> = (props) => {\n const { totalValue, visible, onToggleVisibility } = props;\n const { t } = useTranslation();\n const Icon = visible ? EyeIcon : EyeCloseIcon;\n return (\n <Flex direction=\"column\" gap={1} className=\"oui-text-2xs\" itemAlign=\"start\">\n <Flex gap={1} justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" color=\"neutral\" weight=\"semibold\">\n {t(\"common.totalValue\")}\n </Text>\n <button onClick={onToggleVisibility}>\n <Icon size={18} className={cn(\"oui-text-base-contrast-54\")} />\n </button>\n </Flex>\n <Flex justify={\"start\"} itemAlign=\"end\" gap={1}>\n <Text.numeral\n visible={visible}\n weight=\"bold\"\n size=\"2xl\"\n className={gradientTextVariants({ color: \"brand\" })}\n as=\"div\"\n padding={false}\n dp={2}\n >\n {totalValue ?? \"--\"}\n </Text.numeral>\n <Text as=\"div\" weight=\"bold\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst DepositAndWithdrawButton: React.FC<\n Readonly<\n Pick<AssetsWidgetProps, \"isMainAccount\" | \"onWithdraw\" | \"onDeposit\">\n >\n> = (props) => {\n const { t } = useTranslation();\n const { isMainAccount, onWithdraw, onDeposit } = props;\n const { wrongNetwork, disabledConnect } = useAppContext();\n if (!isMainAccount) {\n return null;\n }\n const mergedDisabled = wrongNetwork || disabledConnect;\n return (\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n itemAlign=\"center\"\n gap={3}\n >\n <Button\n disabled={mergedDisabled}\n data-testid=\"oui-testid-assetView-deposit-button\"\n fullWidth\n size=\"md\"\n onClick={onDeposit}\n >\n <ArrowDownShortIcon\n color=\"white\"\n opacity={mergedDisabled ? 0.4 : 1}\n className=\"oui-rotate-0 oui-text-primary-contrast\"\n />\n <Text>{t(\"common.deposit\")}</Text>\n </Button>\n <Button\n fullWidth\n disabled={mergedDisabled}\n color=\"secondary\"\n size=\"md\"\n onClick={onWithdraw}\n data-testid=\"oui-testid-assetView-withdraw-button\"\n >\n <ArrowDownShortIcon\n color=\"white\"\n opacity={mergedDisabled ? 0.4 : 1}\n className=\"oui-rotate-180 oui-text-base-contrast\"\n />\n <Text>{t(\"common.withdraw\")}</Text>\n </Button>\n </Flex>\n );\n};\n\nconst DataFilterSection: React.FC<\n Pick<\n AssetsWidgetProps,\n | \"isMainAccount\"\n | \"onFilter\"\n | \"selectedAccount\"\n | \"selectedAsset\"\n | \"assetsOptions\"\n | \"state\"\n >\n> = (props) => {\n const { t } = useTranslation();\n const {\n isMainAccount,\n onFilter,\n selectedAccount,\n selectedAsset,\n assetsOptions,\n state,\n } = props;\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const ALL_ASSETS: SelectOption = {\n label: t(\"common.allAssets\", \"All assets\"),\n value: \"all\",\n };\n\n const subAccounts = useMemo<SubAccount[]>(() => {\n return state.subAccounts ?? [];\n }, [state.subAccounts]);\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value?.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [ALL_ACCOUNTS, MAIN_ACCOUNT, subAccounts]);\n\n const memoizedAssetOptions = useMemo(() => {\n return [ALL_ASSETS, ...assetsOptions];\n }, [ALL_ASSETS, assetsOptions]);\n\n if (!isMainAccount) {\n return null;\n }\n\n return (\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n onFilter={onFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n {\n type: \"select\",\n name: \"asset\",\n value: selectedAsset,\n options: memoizedAssetOptions,\n },\n ]}\n />\n );\n};\n\nexport const AssetsDataTable: React.FC<\n Pick<\n AssetsWidgetProps,\n | \"columns\"\n | \"dataSource\"\n | \"isMainAccount\"\n | \"onFilter\"\n | \"selectedAccount\"\n | \"selectedAsset\"\n | \"assetsOptions\"\n | \"state\"\n | \"canTrade\"\n > &\n AssetsDataTableWidgetProps\n> = (props) => {\n const { columns, dataSource, dataTableClassNames, classNames } = props;\n const { root, scrollRoot, desc } = classNames ?? {};\n\n if (!props.canTrade) {\n // show auth button when not can trade\n return (\n <AuthGuardDataTable\n classNames={{\n root: \"oui-rounded-xl oui-font-semibold\",\n scroll: \"oui-h-[252px]\",\n }}\n loading={props.canTrade}\n columns={[]}\n dataSource={[]}\n />\n );\n }\n\n return (\n <Flex width=\"100%\" height=\"100%\" direction={\"column\"} className={root}>\n <DataFilterSection\n {...pick(\n [\n \"isMainAccount\",\n \"onFilter\",\n \"selectedAccount\",\n \"selectedAsset\",\n \"assetsOptions\",\n \"state\",\n ],\n props,\n )}\n />\n {dataSource?.map((item, index) => {\n return (\n <Flex\n key={`item-${index}`}\n className={cn(\"oui-rounded-xl oui-bg-base-9 oui-p-6\", scrollRoot)}\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n my={4}\n >\n <Text\n className={cn(\"oui-mb-4\", desc)}\n intensity={98}\n weight=\"semibold\"\n size=\"lg\"\n >\n {item?.description || formatAddress(item?.id ?? \"\")}\n </Text>\n <AuthGuardDataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n // root: \"oui-bg-transparent\",\n // scroll: \"oui-min-h-0\",\n ...dataTableClassNames,\n }}\n columns={columns}\n dataSource={item.children}\n />\n </Flex>\n );\n })}\n </Flex>\n );\n};\n\nexport const AssetsTable: React.FC<AssetsWidgetProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Card\n className={\"oui-bg-transparent oui-p-0\"}\n classNames={{ content: \"!oui-pt-0\" }}\n >\n <Tabs\n defaultValue=\"assets\"\n variant=\"contained\"\n classNames={{ tabsList: \"\" }}\n size=\"lg\"\n >\n <TabPanel value=\"assets\" className=\"\" title={t(\"common.assets\")}>\n <Flex\n className=\"oui-rounded-xl oui-bg-base-9 oui-p-6\"\n direction={\"row\"}\n itemAlign={\"center\"}\n justify={\"between\"}\n my={4}\n >\n <TotalValueInfo\n {...pick([\"totalValue\", \"visible\", \"onToggleVisibility\"], props)}\n />\n <DepositAndWithdrawButton\n {...pick([\"isMainAccount\", \"onDeposit\", \"onWithdraw\"], props)}\n />\n </Flex>\n <AssetsDataTable\n {...pick(\n [\n \"columns\",\n \"dataSource\",\n \"isMainAccount\",\n \"onFilter\",\n \"selectedAccount\",\n \"selectedAsset\",\n \"assetsOptions\",\n \"state\",\n \"canTrade\",\n ],\n props,\n )}\n classNames={{\n scrollRoot:\n \"oui-max-h-[700px] oui-overflow-y-auto oui-custom-scrollbar oui-w-full\",\n }}\n />\n </TabPanel>\n <TabPanel\n value=\"convertHistory\"\n className=\"oui-rounded-xl oui-bg-base-9 oui-px-6\"\n title={t(\"portfolio.overview.tab.convert.history\")}\n >\n <React.Suspense fallback={null}>\n <Flex\n direction=\"column\"\n mt={4}\n itemAlign=\"center\"\n className=\"oui-w-full\"\n >\n <Divider className=\"oui-w-full oui-border-b oui-border-line-4 oui-pt-6\" />\n <LazyConvertHistoryWidget />\n </Flex>\n </React.Suspense>\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountType } from \"../pages/assets/assetsPage/assets.ui.desktop\";\n\n// Account filter function type\nexport type AccountFilterFunction<T = any> = (\n data: T[],\n selectedAccount: string,\n accountState: ReturnType<typeof useAccount>,\n) => T[];\n\n// Generic account filter utility\nexport const createAccountFilter = <T extends { account_id?: string }>(\n getAccountId?: (item: T) => string | undefined,\n): AccountFilterFunction<T> => {\n return (data, selectedAccount, accountState) => {\n const { state, isMainAccount } = accountState;\n\n return data.filter((item) => {\n const accountId = getAccountId ? getAccountId(item) : item.account_id;\n\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return accountId === state.mainAccountId;\n } else {\n return accountId === selectedAccount;\n }\n } else {\n return accountId === state.accountId;\n }\n });\n };\n};\n\n// Hook for standard account-based data filtering\nexport const useAccountFilter = <T extends { account_id?: string }>(\n data: T[],\n selectedAccount: string,\n getAccountId?: (item: T) => string | undefined,\n): T[] => {\n const accountState = useAccount();\n\n return useMemo(() => {\n const { state, isMainAccount } = accountState;\n\n return data.filter((item) => {\n const accountId = getAccountId ? getAccountId(item) : item.account_id;\n\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return accountId === state.mainAccountId;\n } else {\n return accountId === selectedAccount;\n }\n } else {\n return accountId === state.accountId;\n }\n });\n }, [data, selectedAccount, accountState, getAccountId]);\n};\n\n// Hook specifically for transfer history filtering\nexport const useTransferHistoryAccountFilter = <\n T extends { from_account_id?: string; to_account_id?: string },\n>(\n data: T[],\n selectedAccount: string,\n): T[] => {\n const accountState = useAccount();\n\n return useMemo(() => {\n const { state, isMainAccount } = accountState;\n\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return (\n item.from_account_id === state.mainAccountId ||\n item.to_account_id === state.mainAccountId\n );\n } else {\n return (\n item.from_account_id === selectedAccount ||\n item.to_account_id === selectedAccount\n );\n }\n } else {\n return (\n item.from_account_id === state.accountId ||\n item.to_account_id === state.accountId\n );\n }\n });\n }, [data, selectedAccount, accountState]);\n};\n\n// Pre-defined account filters for common use cases\nexport const AccountFilters = {\n // Standard account filter factory\n standard: <T extends { account_id?: string }>() => createAccountFilter<T>(),\n\n // Transfer history filter factory\n transferHistory:\n <T extends { from_account_id?: string; to_account_id?: string }>() =>\n (\n data: T[],\n selectedAccount: string,\n accountState: ReturnType<typeof useAccount>,\n ): T[] => {\n const { state, isMainAccount } = accountState;\n\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return (\n item.from_account_id === state.mainAccountId ||\n item.to_account_id === state.mainAccountId\n );\n } else {\n return (\n item.from_account_id === selectedAccount ||\n item.to_account_id === selectedAccount\n );\n }\n } else {\n return (\n item.from_account_id === state.accountId ||\n item.to_account_id === state.accountId\n );\n }\n });\n },\n\n // Custom account ID filter factory\n customAccountId: <T extends Record<string, any>>(accountIdKey: keyof T) =>\n createAccountFilter<T>((item) => item[accountIdKey] as string),\n};\n","import React, { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountType } from \"../pages/assets/assetsPage/assets.ui.desktop\";\n\n// Account filter hook for assets-like data structures\nexport const useAssetsAccountFilter = <T extends { account_id?: string }>(\n data: T[],\n) => {\n const { state, isMainAccount } = useAccount();\n const [selectedAccount, setSelectedAccount] = React.useState<string>(\n AccountType.ALL,\n );\n\n // Filter data based on selected account\n const filteredData = useMemo(() => {\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId;\n } else {\n return item.account_id === selectedAccount;\n }\n } else {\n return item.account_id === state.accountId;\n }\n });\n }, [data, selectedAccount, isMainAccount, state]);\n\n // Handle filter changes\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setSelectedAccount(value);\n }\n },\n [],\n );\n\n return {\n selectedAccount,\n filteredData,\n onAccountFilter,\n setSelectedAccount,\n };\n};\n\n// Enhanced account and asset combined filter hook\nexport const useAssetsMultiFilter = <\n T extends {\n account_id?: string;\n children?: Array<{ token: string; [key: string]: any }>;\n },\n>(\n data: T[],\n) => {\n const { state, isMainAccount } = useAccount();\n const [selectedAccount, setSelectedAccount] = React.useState<string>(\n AccountType.ALL,\n );\n const [selectedAsset, setSelectedAsset] = React.useState<string>(\"all\");\n\n // Filter data based on both account and asset\n const filteredData = useMemo(() => {\n let accountFiltered = data;\n\n // First apply account filter\n if (isMainAccount) {\n if (selectedAccount && selectedAccount !== AccountType.ALL) {\n if (selectedAccount === AccountType.MAIN) {\n accountFiltered = data.filter(\n (item) => item.account_id === state.mainAccountId,\n );\n } else {\n accountFiltered = data.filter(\n (item) => item.account_id === selectedAccount,\n );\n }\n }\n } else {\n accountFiltered = data.filter(\n (item) => item.account_id === state.accountId,\n );\n }\n\n // Then apply asset filter\n if (selectedAsset && selectedAsset !== \"all\") {\n accountFiltered = accountFiltered\n .map((account) => {\n if (account.children) {\n const filteredChildren = account.children.filter(\n (child) => child.token === selectedAsset,\n );\n // Only include accounts that have the selected asset\n return filteredChildren.length > 0\n ? { ...account, children: filteredChildren }\n : null;\n }\n return account;\n })\n .filter(Boolean) as T[];\n }\n\n return accountFiltered;\n }, [data, selectedAccount, selectedAsset, isMainAccount, state]);\n\n // Handle combined filter changes\n const onFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setSelectedAccount(value);\n } else if (name === \"asset\") {\n setSelectedAsset(value);\n }\n },\n [],\n );\n\n return {\n selectedAccount,\n selectedAsset,\n filteredData,\n onFilter,\n setSelectedAccount,\n setSelectedAsset,\n };\n};\n\n// Generic account filter function that can be used standalone\nexport const filterByAccount = <T extends { account_id?: string }>(\n data: T[],\n selectedAccount: string,\n accountState: {\n isMainAccount: boolean;\n state: {\n mainAccountId?: string;\n accountId?: string;\n };\n },\n): T[] => {\n const { isMainAccount, state } = accountState;\n\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId;\n } else {\n return item.account_id === selectedAccount;\n }\n } else {\n return item.account_id === state.accountId;\n }\n });\n};\n","export * from \"./useAssetTotalValue\";\nexport * from \"./useAccountFilter\";\nexport * from \"./useAssetsAccountFilter\";\nexport * from \"./useAccountsData\";\n","import React, { useMemo, useState } from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport {\n useAccount,\n useCollateral,\n useIndexPricesStream,\n useSubAccountQuery,\n useAppStore,\n useChainInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { useAccountsData, useAssetsAccountFilter } from \"../../../hooks\";\nimport { parseDateRangeForFilter } from \"../../overview/helper/date\";\nimport type { ConvertRecord } from \"../type\";\n\nexport const useConvertScript = () => {\n const { t } = useTranslation();\n const { isMainAccount, state } = useAccount();\n const { holding = [] } = useCollateral();\n const { data: indexPrices } = useIndexPricesStream();\n\n const { data: chainsInfo } = useChainInfo();\n\n // Pagination\n const { page, pageSize, setPage, parsePagination } = usePagination({\n page: 1,\n pageSize: 20,\n });\n\n // Use the same account data structure as assets\n const allAccounts = useAccountsData();\n\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n // Use the same account filter logic as assets\n const { selectedAccount, onAccountFilter } =\n useAssetsAccountFilter(allAccounts);\n\n // Simple date range handling like other scripts\n const [today] = useState(() => {\n const d = new Date();\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 // Filter states (matching API fields)\n const [statusFilter, setStatusFilter] = useState<string>(\"all\");\n const [convertedAssetFilter, setConvertedAssetFilter] =\n useState<string>(\"all\");\n\n // Create asset options from holding data - similar to assets script\n const convertedAssetOptions = useMemo(() => {\n // Create options array\n const assetOptions =\n tokensInfo?.map((item) => ({\n value: item.token,\n label: item.token,\n })) || [];\n\n return [{ label: t(\"common.allAssets\"), value: \"all\" }, ...assetOptions];\n }, [tokensInfo, t]);\n\n // Handle all filters (including account filter and date range)\n const onFilter = React.useCallback(\n (filter: { name: string; value: string | { from: Date; to: Date } }) => {\n const { name, value } = filter;\n\n // Delegate account filter to the hook\n if (name === \"account\") {\n onAccountFilter(filter as { name: string; value: string });\n } else if (name === \"status\") {\n setStatusFilter(value as string);\n setPage(1); // Reset to first page when filter changes\n } else if (name === \"converted_asset\") {\n setConvertedAssetFilter(value as string);\n setPage(1);\n } else if (name === \"time\" || name === \"dateRange\") {\n setDateRange(\n parseDateRangeForFilter(value as { from: Date; to: Date }),\n );\n setPage(1);\n }\n },\n [onAccountFilter, setPage],\n );\n\n // Build query URL with parameters\n const queryUrl = React.useMemo(() => {\n const params = new URLSearchParams();\n\n // Add pagination parameters\n params.set(\"page\", page.toString());\n params.set(\"size\", pageSize.toString());\n\n // Add date range parameters\n if (dateRange[0]) {\n params.set(\"start_t\", dateRange[0].getTime().toString());\n }\n if (dateRange[1]) {\n params.set(\n \"end_t\",\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n .getTime()\n .toString(),\n );\n }\n\n // Add filter parameters (only if not \"all\")\n if (statusFilter !== \"all\") {\n params.set(\"status\", statusFilter);\n }\n\n if (convertedAssetFilter !== \"all\") {\n params.set(\"converted_asset\", convertedAssetFilter);\n }\n\n return `/v1/asset/convert_history?${params.toString()}`;\n }, [page, pageSize, dateRange, statusFilter, convertedAssetFilter]);\n\n // Query convert history with all parameters\n const { data, isLoading } = useSubAccountQuery<{\n rows: ConvertRecord[];\n meta: {\n total: number;\n current_page: number;\n records_per_page: number;\n };\n }>(queryUrl, {\n accountId: isMainAccount ? state.mainAccountId : state.accountId,\n formatter: (data) => {\n return data;\n },\n });\n\n // Parse pagination from API response meta\n const pagination = useMemo(() => {\n if (data?.meta) {\n return parsePagination(data.meta);\n }\n return {\n page,\n pageSize,\n onPageChange: setPage,\n onPageSizeChange: () => {\n // Handle page size change if needed\n },\n };\n }, [data?.meta, parsePagination, page, pageSize, setPage]);\n\n // Calculate summary\n const summary = useMemo(() => {\n const dataRows = data?.rows || [];\n\n const totalConversions = dataRows.length;\n const totalUSDCReceived = dataRows.reduce(\n (sum, record) => sum + record.received_qty,\n 0,\n );\n const totalFees = dataRows.reduce(\n (sum, record) =>\n sum +\n record.details.reduce(\n (detailSum, detail) => detailSum + detail.haircut,\n 0,\n ),\n 0,\n );\n\n return {\n totalConversions,\n totalUSDCReceived,\n totalFees,\n };\n }, [data]);\n\n return {\n // Data\n dataSource: data?.rows || EMPTY_LIST,\n summary,\n pagination,\n\n // Filter state and handlers (compatible with assets)\n selectedAccount,\n onFilter,\n\n // Query parameters (consistent with other scripts)\n dateRange,\n\n // Filter states\n statusFilter,\n convertedAssetFilter,\n convertedAssetOptions,\n\n // State\n isMainAccount,\n isLoading,\n holding,\n\n // Index prices\n indexPrices,\n chainsInfo,\n };\n};\n\nexport type UseConvertScriptReturn = ReturnType<typeof useConvertScript>;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Button,\n Flex,\n Text,\n TokenIcon,\n Tooltip,\n toast,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\nimport type { ConvertRecord, ConvertTransaction } from \"../type\";\n\nexport interface ConvertColumnsOptions {\n onDetailsClick?: (convertId: number) => void;\n}\n\nexport interface ConvertDetailColumnsOptions {\n onTxClick?: (txId: string) => void;\n indexPrices: Record<string, number>;\n chainsInfo: any[];\n}\n\nexport const ConvertedAssetColumn = ({\n convertedAssets,\n}: {\n convertedAssets: Record<string, number>;\n}) => {\n const { t } = useTranslation();\n const assets = useMemo(() => {\n return Object.keys(convertedAssets);\n }, [convertedAssets]);\n\n const tooltipContent = useMemo(() => {\n return (\n <Flex\n direction=\"column\"\n gap={2}\n className=\"oui-w-[275px] oui-font-semibold oui-text-base-contrast-80\"\n >\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n className=\"oui-w-full oui-text-2xs oui-text-base-contrast-36\"\n >\n <div>{t(\"common.assets\")}</div>\n <div>{t(\"common.qty\")}</div>\n </Flex>\n {assets.map((asset) => (\n <Flex\n key={asset}\n itemAlign=\"center\"\n justify=\"between\"\n className=\"oui-w-full\"\n >\n <Flex itemAlign=\"center\" gap={1}>\n <TokenIcon size=\"xs\" name={asset} />\n <Text.formatted>{asset}</Text.formatted>\n </Flex>\n <div>\n <Text.formatted>{convertedAssets[asset]}</Text.formatted>\n </div>\n </Flex>\n ))}\n </Flex>\n );\n }, [assets]);\n\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <div className=\"oui-relative oui-flex\">\n {assets.slice(0, 3).map((asset, index) => (\n <div\n key={asset}\n className=\"oui-relative\"\n style={{\n marginLeft: index > 0 ? \"-8px\" : \"0\",\n zIndex: assets.length + index,\n }}\n >\n <TokenIcon size=\"xs\" name={asset} />\n </div>\n ))}\n </div>\n <Tooltip content={tooltipContent}>\n <Text.formatted className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\">\n {assets.slice(0, 3).join(\", \")}{\" \"}\n {assets.length > 3 && `+${assets.length - 3}`}\n </Text.formatted>\n </Tooltip>\n </Flex>\n );\n};\n\nexport const useConvertColumns = (options: ConvertColumnsOptions) => {\n const { onDetailsClick } = options;\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.convert.convertedAsset\"),\n dataIndex: \"converted_asset\",\n align: \"left\",\n width: 200,\n maxWidth: 200,\n render(convertedAssets: Record<string, number>) {\n return <ConvertedAssetColumn convertedAssets={convertedAssets} />;\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.usdcAmount\"),\n dataIndex: \"received_qty\",\n align: \"left\",\n width: 150,\n render(qty: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.fee\"),\n dataIndex: \"details\",\n align: \"left\",\n width: 120,\n render(details: ConvertRecord[\"details\"]) {\n const totalHaircut = details.reduce(\n (sum, detail) => sum + detail.haircut,\n 0,\n );\n return (\n <Text.numeral dp={6} padding={false}>\n {totalHaircut}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n align: \"left\",\n width: 150,\n render(type: string) {\n return <Text>{type.charAt(0).toUpperCase() + type.slice(1)}</Text>;\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.convertId\"),\n dataIndex: \"convert_id\",\n align: \"left\",\n width: 150,\n render(convertId: number) {\n return (\n <Text.formatted onCopy={onCopy} copyable>\n {convertId}\n </Text.formatted>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n align: \"left\",\n width: 160,\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n align: \"left\",\n width: 150,\n render(status: string) {\n return (\n <Text>{status.charAt(0).toUpperCase() + status.slice(1)}</Text>\n );\n },\n },\n {\n title: \"\",\n dataIndex: \"updated_time\",\n align: \"center\",\n width: 80,\n render(convertId: number, record: ConvertRecord) {\n return (\n <Button\n size=\"sm\"\n variant=\"text\"\n className=\"oui-text-primary\"\n onClick={() => onDetailsClick?.(record.convert_id)}\n >\n {t(\"portfolio.overview.column.convert.details\")}\n </Button>\n );\n },\n },\n ];\n }, [onDetailsClick]);\n\n return columns;\n};\n\n// Converted asset, Qty., USDC amount, Fee, TxID, Network, Status\nexport const useConvertDetailColumns = (\n options: ConvertDetailColumnsOptions,\n) => {\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.convert.convertedAsset\"),\n dataIndex: \"converted_asset\",\n align: \"left\",\n width: 150,\n render(asset: string) {\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <TokenIcon name={asset} />\n {asset}\n </Flex>\n );\n },\n },\n {\n title: t(\"common.qty\"),\n dataIndex: \"converted_qty\",\n align: \"left\",\n width: 100,\n render(qty: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.usdcAmount\"),\n dataIndex: \"received_qty\",\n align: \"left\",\n width: 100,\n render(qty: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.fee\"),\n dataIndex: \"haircut\",\n align: \"left\",\n width: 100,\n render(haircut: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {haircut}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.txId\"),\n dataIndex: \"tx_id\",\n align: \"left\",\n width: 150,\n render(txId: string, record: ConvertTransaction) {\n if (!txId) return <Text intensity={54}>-</Text>;\n const chainInfo = (options.chainsInfo as any[])?.find(\n (item) => record.chain_id === parseInt(item.chain_id),\n );\n const explorer_base_url = chainInfo?.explorer_base_url;\n const href = `${explorer_base_url}/tx/${txId}`;\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\">\n <Text.formatted\n onCopy={onCopy}\n rule=\"txId\"\n copyable={!!txId}\n className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n >\n {txId}\n </Text.formatted>\n </a>\n );\n },\n },\n {\n title: t(\"transfer.network\"),\n dataIndex: \"chain_id\",\n align: \"left\",\n width: 150,\n render(venue: string, record: ConvertTransaction) {\n return (\n <Text>\n {options.chainsInfo.find(\n (item) => item.chain_id == record.chain_id,\n )?.name || \"-\"}\n </Text>\n );\n },\n },\n {\n title: t(\"common.result\"),\n dataIndex: \"result\",\n align: \"left\",\n width: 100,\n render(result: string) {\n return (\n <Text>{result?.charAt(0).toUpperCase() + result?.slice(1)}</Text>\n );\n },\n },\n ];\n }, []);\n\n return columns;\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n DataFilter,\n Flex,\n DataTable,\n modal,\n SimpleDialog,\n Divider,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useModal } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport type { ConvertRecord } from \"../type\";\nimport { useConvertColumns, useConvertDetailColumns } from \"./convert.column\";\nimport { useConvertScript } from \"./convert.script\";\n\ntype ConvertDesktopUIProps = {\n convertState: ReturnType<typeof useConvertScript>;\n};\n\n// Convert Details Modal Component\nconst ConvertDetailsModal = modal.create<{\n record: ConvertRecord;\n indexPrices: Record<string, number>;\n chainsInfo: any[];\n}>((props) => {\n const { t } = useTranslation();\n const { visible, onOpenChange } = useModal();\n // console.log(props);\n\n const detailColumns = useConvertDetailColumns({\n indexPrices: props.indexPrices,\n chainsInfo: props.chainsInfo,\n });\n\n return (\n <SimpleDialog\n open={visible}\n onOpenChange={onOpenChange}\n title={t(\"portfolio.overview.convert.dialog.title.details\")}\n size=\"lg\"\n closable\n classNames={{\n content: \"oui-max-w-4xl\",\n }}\n >\n <DataTable\n columns={detailColumns}\n dataSource={props.record.details}\n bordered\n className=\"oui-w-full\"\n classNames={{\n header: \"oui-h-10\",\n root: \"oui-bg-base-8 oui-max-h-[60vh] oui-overflow-y-scroll oui-custom-scrollbar\",\n }}\n onRow={() => ({\n className: \"oui-h-[40px]\",\n })}\n generatedRowKey={(record) =>\n record.transaction_id || Math.random().toString()\n }\n />\n </SimpleDialog>\n );\n});\n\nexport const ConvertDesktopUI: React.FC<ConvertDesktopUIProps> = ({\n convertState,\n}) => {\n const { t } = useTranslation();\n\n const handleDetailsClick = (convertId: number) => {\n // Find the convert record by ID\n const record = convertState.dataSource.find(\n (item) => item.convert_id === convertId,\n );\n if (record) {\n modal.show(ConvertDetailsModal, {\n record,\n indexPrices: convertState.indexPrices,\n chainsInfo: convertState.chainsInfo as any,\n });\n }\n };\n\n const columns = useConvertColumns({\n onDetailsClick: handleDetailsClick,\n });\n\n const {\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n } = convertState;\n\n const statusOptions = useMemo(\n () => [\n { label: t(\"common.status.all\"), value: \"all\" },\n { label: t(\"orders.status.completed\"), value: \"completed\" },\n { label: t(\"orders.status.pending\"), value: \"pending\" },\n ],\n [t],\n );\n\n const dataFilter = useMemo(() => {\n return (\n <DataFilter\n className=\"\"\n onFilter={onFilter}\n items={[\n // {\n // type: \"select\",\n // name: \"account\",\n // value: selectedAccount,\n // options: memoizedOptions,\n // },\n {\n type: \"select\",\n name: \"converted_asset\",\n value: convertedAssetFilter,\n options: convertedAssetOptions,\n },\n {\n type: \"select\",\n name: \"status\",\n value: statusFilter,\n options: statusOptions,\n },\n {\n type: \"range\",\n name: \"time\",\n value: {\n from: dateRange?.[0],\n to: dateRange?.[1],\n },\n },\n ]}\n />\n );\n }, [\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n statusOptions,\n ]);\n\n return (\n <>\n {dataFilter}\n\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={convertState.dataSource}\n loading={convertState.isLoading}\n pagination={convertState.pagination}\n manualPagination\n className=\"oui-mt-4 oui-w-full\"\n classNames={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n }}\n onRow={() => ({\n className: \"oui-h-[48px] oui-cursor-pointer\",\n })}\n generatedRowKey={(record) => {\n return record.convert_id.toString();\n }}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n useModal,\n modal,\n Text,\n Divider,\n TokenIcon,\n Flex,\n DataFilter,\n SimpleSheet,\n toast,\n ScrollIndicator,\n} from \"@kodiak-finance/orderly-ui\";\nimport { ConvertRecord, ConvertTransaction } from \"../type\";\nimport { ConvertedAssetColumn } from \"./convert.column\";\nimport { useConvertScript } from \"./convert.script\";\n\ntype ConvertMobileUIProps = {\n convertState: ReturnType<typeof useConvertScript>;\n};\n\ntype ConvertMobileItemProps = {\n item?: any;\n chainsInfo: any[];\n};\n\ntype ConvertMobileFieldProps = {\n label: string;\n value?: string | number;\n className?: string;\n copyable?: boolean;\n rule?: \"address\" | \"txId\";\n onClick?: () => void;\n};\n\nexport const ConvertMobileUI: React.FC<ConvertMobileUIProps> = ({\n convertState,\n}) => {\n const { t } = useTranslation();\n\n const {\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n } = convertState;\n\n const statusOptions = useMemo(\n () => [\n { label: t(\"common.status.all\"), value: \"all\" },\n { label: t(\"orders.status.completed\"), value: \"completed\" },\n { label: t(\"orders.status.pending\"), value: \"pending\" },\n ],\n [t],\n );\n\n const dataFilter = useMemo(() => {\n return (\n <DataFilter\n onFilter={onFilter}\n items={[\n // {\n // size: \"sm\",\n // type: \"picker\",\n // name: \"account\",\n // value: selectedAccount,\n // options: memoizedOptions,\n // },\n {\n size: \"md\",\n type: \"picker\",\n name: \"converted_asset\",\n value: convertedAssetFilter,\n options: convertedAssetOptions,\n className: \"oui-whitespace-nowrap\",\n },\n {\n size: \"md\",\n type: \"picker\",\n name: \"status\",\n value: statusFilter,\n options: statusOptions,\n className: \"oui-whitespace-nowrap\",\n },\n {\n type: \"range\",\n name: \"time\",\n value: {\n from: dateRange?.[0],\n to: dateRange?.[1],\n },\n },\n ]}\n />\n );\n }, [\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n statusOptions,\n ]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-px-3\">\n <ScrollIndicator className=\"oui-pr-5\">\n <Flex direction=\"row\">{dataFilter}</Flex>\n </ScrollIndicator>\n {convertState.dataSource.map((item) => (\n <ConvertMobileItem\n key={item.convert_id}\n item={item}\n chainsInfo={convertState.chainsInfo as any}\n />\n ))}\n </div>\n );\n};\n\nconst ConvertMobileField: React.FC<ConvertMobileFieldProps> = ({\n label,\n value,\n rule,\n copyable = false,\n className = \"\",\n onClick,\n}) => {\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n return (\n <div\n className={`oui-text-2xs oui-font-semibold oui-text-base-contrast-80 [&_p]:oui-text-base-contrast-36 ${className}`}\n onClick={onClick}\n >\n <p>{label}</p>\n <Text.formatted rule={rule} copyable={copyable} onCopy={onCopy}>\n {value || \"-\"}\n </Text.formatted>\n </div>\n );\n};\n\nconst ConvertMobileItem: React.FC<ConvertMobileItemProps> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n if (!item) {\n return null;\n }\n\n const totalHaircut = item.details.reduce(\n (sum: number, detail: ConvertTransaction) => sum + detail.haircut,\n 0,\n );\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <div className=\"oui-flex oui-justify-between\">\n <div className=\"oui-flex oui-items-center oui-text-xs oui-font-semibold oui-text-base-contrast-80\">\n <ConvertedAssetColumn convertedAssets={item.converted_asset} />\n <div\n className=\"oui-ml-2 oui-text-primary\"\n onClick={() => {\n modal.show(ConverHistoryItemDetailsDialog, {\n item,\n chainsInfo: props.chainsInfo,\n });\n }}\n >\n {t(\"portfolio.overview.column.convert.details\")}\n </div>\n </div>\n <Text.formatted\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n rule=\"date\"\n >\n {item.created_time}\n </Text.formatted>\n </div>\n\n {/* 5 fields in grid container: 3 per row, wrap to next line */}\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-2\">\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.usdcAmount\")}\n value={item.received_qty}\n />\n <ConvertMobileField label={t(\"common.fee\")} value={totalHaircut} />\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.convertId\")}\n value={item.convert_id}\n copyable={true}\n />\n <ConvertMobileField\n label={t(\"common.type\")}\n value={item.type?.charAt(0).toUpperCase() + item.type?.slice(1)}\n />\n <ConvertMobileField\n label={t(\"common.status\")}\n value={item.status?.charAt(0).toUpperCase() + item.status?.slice(1)}\n />\n </div>\n </div>\n );\n};\n\ntype ConvertHistoryItemDetailsDialogProps = {\n item: ConvertRecord;\n chainsInfo: any[];\n};\n\nconst ConverHistoryItemDetailsDialog =\n modal.create<ConvertHistoryItemDetailsDialogProps>((props) => {\n const { item, chainsInfo } = props;\n const { t } = useTranslation();\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n return (\n <SimpleSheet\n title={t(\"portfolio.overview.convert.dialog.title.details\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <div className=\"oui-flex oui-h-[300px] oui-flex-col oui-gap-3 oui-overflow-y-auto oui-rounded-lg oui-bg-base-7 oui-p-2\">\n {item.details.map((detail, index) => (\n <>\n <div className=\"oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <TokenIcon name={detail.converted_asset} size=\"xs\" />\n <div className=\"oui-text-xs oui-text-base-contrast-80\">\n {detail.converted_asset}\n </div>\n </div>\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-2\">\n <ConvertMobileField\n label={t(\"common.qty\")}\n value={detail.converted_qty}\n />\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.usdcAmount\")}\n value={detail.received_qty}\n />\n <ConvertMobileField label=\"Fee\" value={detail.haircut} />\n <ConvertMobileField\n label={t(\"common.txId\")}\n copyable={!!detail.tx_id}\n rule=\"txId\"\n value={detail.tx_id}\n onClick={() => {\n if (detail.tx_id) {\n const chainInfo = chainsInfo.find(\n (item) => item.chain_id == detail.chain_id,\n );\n if (chainInfo?.explorer_base_url) {\n window.open(\n `${chainInfo.explorer_base_url}/tx/${detail.tx_id}`,\n \"_blank\",\n );\n }\n }\n }}\n />\n <ConvertMobileField\n label={t(\"transfer.network\")}\n value={\n chainsInfo.find(\n (item) => item.chain_id == detail.chain_id,\n )?.name || \"-\"\n }\n />\n <ConvertMobileField\n label={t(\"common.result\")}\n value={\n detail.result\n ? detail.result.charAt(0).toUpperCase() +\n detail.result.slice(1)\n : \"-\"\n }\n />\n </div>\n </div>\n {index < item.details.length - 1 && <Divider />}\n </>\n ))}\n </div>\n </SimpleSheet>\n );\n });\n","import React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useConvertScript } from \"./convert.script\";\nimport { ConvertDesktopUI } from \"./convert.ui.desktop\";\nimport { ConvertMobileUI } from \"./convert.ui.mobile\";\n\nexport const ConvertHistoryWidget: React.FC = () => {\n const convertState = useConvertScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <ConvertMobileUI convertState={convertState} />;\n }\n return <ConvertDesktopUI convertState={convertState} />;\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, TokenIcon, Text, cn } from \"@kodiak-finance/orderly-ui\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n const columns = React.useMemo<Column<API.StrategyVaultHistoryRow>[]>(() => {\n return [\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n className: (record) => {\n if (record?.type === \"deposit\") {\n return \"oui-text-success\";\n }\n if (record?.type === \"withdrawal\") {\n return \"oui-text-danger\";\n }\n return \"\";\n },\n render(val: string) {\n if (val === \"deposit\") {\n return t(\"common.deposit\");\n }\n if (val === \"withdrawal\") {\n return t(\"common.withdraw\");\n }\n return null;\n },\n },\n {\n title: t(\"portfolio.overview.vaultName\"),\n dataIndex: \"vaultName\",\n },\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n render(val: string) {\n return (\n <Flex justify=\"start\" itemAlign=\"center\" gap={2}>\n <TokenIcon name={val} />\n {val}\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n render(val: string) {\n return capitalizeString(val);\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount_change\",\n render(val: number) {\n return (\n <Text.numeral\n showIdentifier\n className={cn(\n \"oui-select-none\",\n val >= 0 ? \"oui-text-success\" : \"oui-text-danger\",\n )}\n >\n {val}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t]);\n return columns;\n};\n","import React from \"react\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useColumns } from \"./column\";\nimport type { useVaultsHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useVaultsHistoryHookReturn;\n\nexport const VaultsHistoryUI: React.FC<Readonly<HistoryProps>> = (props) => {\n const { dataSource, dateRange, isLoading, onFilter } = props;\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={[\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n />\n <AuthGuardDataTable<API.StrategyVaultHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport { useVaultsHistory } from \"@kodiak-finance/orderly-hooks\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport type { PaginationMeta } from \"@kodiak-finance/orderly-ui\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\n\nexport const useVaultsHistoryHook = () => {\n const today = React.useMemo<Date>(() => {\n const date = new Date();\n return new Date(getYear(date), getMonth(date), getDate(date), 0, 0, 0);\n }, []);\n\n const [dateRange, setDateRange] = React.useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta }] = useVaultsHistory({\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 size: pageSize,\n page: page,\n });\n\n const dataSource = React.useMemo(() => {\n if (!Array.isArray(data) || !data.length) {\n return [];\n }\n return data.map<API.StrategyVaultHistoryRow>((item) => ({\n ...item,\n token: \"USDC\", // need to hard code for now\n vaultName: \"Orderly OmniVault\",\n amount_change:\n item.type === \"withdrawal\" ? -item.amount_change : item.amount_change,\n }));\n }, [data]);\n\n const onDateRangeFilter = React.useCallback(\n (filter: { value: string; name: string }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value as any));\n }\n setPage(1);\n },\n [setPage],\n );\n\n const pagination = React.useMemo<PaginationMeta>(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n return {\n dataSource: dataSource,\n isLoading,\n dateRange,\n onFilter: onDateRangeFilter,\n pagination,\n } as const;\n};\n\nexport type useVaultsHistoryHookReturn = ReturnType<\n typeof useVaultsHistoryHook\n>;\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Divider } from \"@kodiak-finance/orderly-ui\";\nimport { DataFilter, TokenIcon, ListView, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useVaultsHistoryHookReturn } from \"./useDataSource.script\";\n\nexport const VaultsHistoryMobile = (props: useVaultsHistoryHookReturn) => {\n const { dateRange, onFilter, dataSource, isLoading, pagination } = props;\n const { t } = useTranslation();\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const renderHistoryItem = (item: any) => {\n const typeColor = item.type === \"deposit\" ? \"buy\" : \"sell\";\n const typeText =\n item.type === \"deposit\" ? t(\"common.deposit\") : t(\"common.withdraw\");\n const amountText = item.amount_change ? Math.abs(item.amount_change) : \"-\";\n return (\n <div className=\"oui-flex oui-flex-col oui-rounded-xl oui-bg-base-9 oui-p-2 oui-font-semibold\">\n <div className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-text-base-contrast-80\">\n <div>{item.vaultName}</div>\n <div>\n {item.status?.slice(0, 1).toUpperCase() + item.status?.slice(1)}\n </div>\n </div>\n <Text.formatted rule=\"date\" intensity={36} size=\"2xs\">\n {item.created_time}\n </Text.formatted>\n <Divider className=\"oui-my-2\" />\n <div className=\"oui-flex oui-items-center [&>div]:oui-flex-1 [&>div]:oui-text-2xs [&>div]:oui-text-base-contrast-36\">\n <div>\n <div>{t(\"common.token\")}</div>\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-xs oui-text-base-contrast-80\">\n <TokenIcon name={\"USDC\"} size=\"2xs\" />\n <Text>USDC</Text>\n </div>\n </div>\n <div>\n <div>{t(\"common.type\")}</div>\n <Text color={typeColor} className=\"oui-text-xs\">\n {typeText}\n </Text>\n </div>\n <div className=\"oui-text-right\">\n <div>{t(\"common.amount\")}</div>\n <div className=\"oui-text-xs oui-text-base-contrast-80\">\n {amountText}\n </div>\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\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 className=\"oui-sticky oui-top-[44px] oui-z-10 oui-border-none oui-bg-base-10 oui-px-3 oui-py-2\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VaultsHistoryUI } from \"./transfer.ui\";\nimport { useVaultsHistoryHook } from \"./useDataSource.script\";\nimport { VaultsHistoryMobile } from \"./vaults.ui.mobile\";\n\nexport const VaultsHistoryWidget: React.FC = () => {\n const state = useVaultsHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <VaultsHistoryMobile {...state} />;\n }\n return <VaultsHistoryUI {...state} />;\n};\n","export { VaultsHistoryWidget } from \"./transfer.widget\";\nexport { VaultsHistoryUI } from \"./transfer.ui\";\n","import React, { useEffect } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistorySideEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightSquareFill,\n ArrowUpSquareFillIcon,\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n VaultsIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { TabName } from \"./historyDataGroup.script\";\n\nconst LazyAssetHistoryWidget = React.lazy(() =>\n import(\"../assetHistory\").then((mod) => {\n return { default: mod.AssetHistoryWidget };\n }),\n);\n\nconst LazyFundingHistoryWidget = React.lazy(() =>\n import(\"../funding\").then((mod) => {\n return { default: mod.FundingHistoryWidget };\n }),\n);\n\nconst LazyDistributionHistoryWidget = React.lazy(() =>\n import(\"../distribution\").then((mod) => {\n return { default: mod.DistributionHistoryWidget };\n }),\n);\n\nconst LazyTransferHistoryWidget = React.lazy(() =>\n import(\"../TransferHistory\").then((mod) => {\n return { default: mod.TransferHistoryWidget };\n }),\n);\n\nconst LazyConvertHistoryWidget = React.lazy(() =>\n import(\"../../assets/convertPage/convert.widget\").then((mod) => {\n return { default: mod.ConvertHistoryWidget };\n }),\n);\n\nconst LazyVaultsHistoryWidget = React.lazy(() =>\n import(\"../VaultsHistory\").then((mod) => {\n return { default: mod.VaultsHistoryWidget };\n }),\n);\n\nexport const HistoryDataGroupDesktop: React.FC<{\n active?: TabName;\n onTabChange: (tab: string) => void;\n}> = (props) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n const { isMainAccount } = useAccount();\n useEffect(() => {\n if (active === \"vaults\" && !isMainAccount) {\n onTabChange(\"deposit\");\n }\n }, [active, isMainAccount]);\n return (\n <Card>\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"xl\"\n >\n <TabPanel\n title={t(\"common.deposits\")}\n icon={<ArrowDownSquareFillIcon />}\n value={\"deposit\"}\n >\n <React.Suspense fallback={null}>\n <LazyAssetHistoryWidget side={AssetHistorySideEnum.DEPOSIT} />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"common.withdrawals\")}\n icon={<ArrowUpSquareFillIcon />}\n value={\"withdraw\"}\n >\n <React.Suspense fallback={null}>\n <LazyAssetHistoryWidget side={AssetHistorySideEnum.WITHDRAW} />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n icon={<FeeTierIcon />}\n value={\"funding\"}\n >\n <React.Suspense fallback={null}>\n <LazyFundingHistoryWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n icon={<ServerFillIcon />}\n value={\"distribution\"}\n >\n <React.Suspense fallback={null}>\n <LazyDistributionHistoryWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.transferHistory\")}\n icon={<ArrowLeftRightSquareFill />}\n value={\"transfer\"}\n >\n <React.Suspense fallback={null}>\n <LazyTransferHistoryWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.tab.convert.history\")}\n value={\"convert\"}\n >\n <React.Suspense fallback={null}>\n <LazyConvertHistoryWidget />\n </React.Suspense>\n </TabPanel>\n {isMainAccount && (\n <TabPanel\n value={\"vaults\"}\n icon={<VaultsIcon />}\n title={t(\"portfolio.overview.vaults\")}\n >\n <React.Suspense fallback={null}>\n <LazyVaultsHistoryWidget />\n </React.Suspense>\n </TabPanel>\n )}\n </Tabs>\n </Card>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistorySideEnum } from \"@kodiak-finance/orderly-types\";\nimport { TabPanel, Tabs } from \"@kodiak-finance/orderly-ui\";\nimport { ConvertHistoryWidget } from \"../../assets/convertPage/convert.widget\";\nimport { VaultsHistoryWidget } from \"../VaultsHistory/transfer.widget\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./historyDataGroup.script\";\n\nconst LazyTransferHistoryWidget = React.lazy(() =>\n import(\"../TransferHistory\").then((mod) => {\n return { default: mod.TransferHistoryWidget };\n }),\n);\n\nexport const HistoryDataGroupMobile: React.FC<{\n active?: TabName;\n onTabChange: (tab: string) => void;\n}> = (props) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-3 oui-py-2\",\n scrollIndicator: \"oui-pr-3\",\n }}\n showScrollIndicator\n >\n <TabPanel title={t(\"common.deposits\")} value={\"deposit\"}>\n <AssetHistoryWidget side={AssetHistorySideEnum.DEPOSIT} />\n </TabPanel>\n <TabPanel title={t(\"common.withdrawals\")} value={\"withdraw\"}>\n <AssetHistoryWidget side={AssetHistorySideEnum.WITHDRAW} />\n </TabPanel>\n <TabPanel title={t(\"common.funding\")} value={\"funding\"}>\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.transferHistory\")}\n value={\"transfer\"}\n >\n <React.Suspense fallback={null}>\n <LazyTransferHistoryWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.tab.convert.history\")}\n value={\"convert\"}\n >\n <ConvertHistoryWidget />\n </TabPanel>\n <TabPanel title={t(\"common.vaults\")} value={\"vaults\"}>\n <VaultsHistoryWidget />\n </TabPanel>\n </Tabs>\n );\n};\n","import { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useHistoryDataGroupScript } from \"./historyDataGroup.script\";\nimport { HistoryDataGroupDesktop } from \"./historyDataGroup.ui.desktop\";\nimport { HistoryDataGroupMobile } from \"./historyDataGroup.ui.mobile\";\n\nexport const HistoryDataGroupWidget: React.FC = () => {\n const state = useHistoryDataGroupScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <HistoryDataGroupMobile {...state} />;\n }\n return <HistoryDataGroupDesktop {...state} />;\n};\n","export { HistoryDataGroupWidget } from \"./historyDataGroup.widget\";\n","import { createContext, useContext } from \"react\";\nimport { TWType } from \"@kodiak-finance/orderly-hooks\";\nimport { UseRewardsDataReturn } from \"../mobile/useRewardsData.script\";\nimport { useAssetsHistoryDataReturn } from \"../shared/useAssetHistory\";\n\nexport type OverviewContextState = {\n // period: PeriodType;\n type?: TWType;\n} & useAssetsHistoryDataReturn &\n UseRewardsDataReturn;\n\nexport const OverviewContext = createContext<OverviewContextState>(\n {} as OverviewContextState,\n);\n\nexport const useOverviewContext = () => {\n return useContext(OverviewContext);\n};\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const useAssetsChartScript = () => {\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 { account_value: 0 },\n { account_value: 500 },\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length) {\n return filteredData;\n }\n return assetHistory.createFakeData(\n { account_value: 0 },\n { account_value: 500 },\n );\n }, [filteredData, assetHistory]);\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 useAssetsChartScriptReturn = ReturnType<\n typeof useAssetsChartScript\n>;\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { subDays, format, differenceInDays } from \"date-fns\";\nimport {\n useAccount,\n useAssetsHistory,\n useBalanceTopic,\n useCollateral,\n useIndexPricesStream,\n useLocalStorage,\n usePrivateQuery,\n useStatisticsDaily,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\n\nexport enum PeriodType {\n DAY = \"1D\",\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport const useAssetsHistoryData = (\n localKey: string,\n options?: { isRealtime?: boolean },\n) => {\n const [today] = useState(() => new Date());\n\n const { getIndexPrice } = useIndexPricesStream();\n // const { account } = useAccount();\n\n const { t } = useTranslation();\n\n const { isRealtime = false } = options || {};\n const periodTypes = Object.values(PeriodType);\n\n const [period, setPeriod] = useLocalStorage<PeriodType | null>(\n localKey,\n PeriodType.MONTH,\n );\n\n const convertToUSDCAndOperate = useCallback(\n (inputs: {\n token: string;\n amount: string | number;\n value: Decimal;\n op?: \"add\" | \"sub\";\n }): Decimal => {\n const { token, amount, value, op = \"sub\" } = inputs;\n if (token.toUpperCase() === \"USDC\") {\n return op === \"add\" ? value.add(amount) : value.sub(amount);\n } else {\n const indexPrice = getIndexPrice(token);\n if (indexPrice) {\n const delta = new Decimal(amount).mul(indexPrice);\n return op === \"add\" ? value.add(delta) : value.sub(delta);\n }\n return value;\n }\n },\n [getIndexPrice],\n );\n\n const periodLabel = useMemo<Record<PeriodType, string>>(() => {\n return {\n [PeriodType.DAY]: t(\"common.select.1d\"),\n [PeriodType.WEEK]: t(\"common.select.7d\"),\n [PeriodType.MONTH]: t(\"common.select.30d\"),\n [PeriodType.QUARTER]: t(\"common.select.90d\"),\n };\n }, [t]);\n\n const formatDateRange = (date: Date): string => {\n return format(date, \"yyyy-MM-dd\");\n };\n\n const getExpectedDateRange = (offsetDay: number) => {\n return {\n from: subDays(new Date(), offsetDay - 1),\n to: new Date(),\n };\n };\n\n const getMatchingPeriodType = (from: Date, to: Date): PeriodType | null => {\n // Calculate days difference (inclusive - add 1 to include both start and end dates)\n const offsetDay = Math.abs(differenceInDays(from, to)) + 1;\n\n // Check against predefined periods\n const filterDays = [1, 7, 30, 90] as const;\n if (!filterDays.includes(offsetDay as any)) {\n return null;\n }\n\n // Validate that the date range matches the expected range for this period\n const expectedRange = getExpectedDateRange(offsetDay);\n if (\n formatDateRange(expectedRange.from) === formatDateRange(from) &&\n formatDateRange(expectedRange.to) === formatDateRange(to)\n ) {\n switch (offsetDay) {\n case 1:\n return PeriodType.DAY;\n case 7:\n return PeriodType.WEEK;\n case 30:\n return PeriodType.MONTH;\n case 90:\n return PeriodType.QUARTER;\n }\n }\n\n return null;\n };\n\n const getCustomDateRangeLabel = (from: Date, to: Date): string => {\n // Calculate days difference (inclusive - add 1 to include both start and end dates)\n const offsetDay = Math.abs(differenceInDays(from, to)) + 1;\n return `${offsetDay}D`;\n };\n\n const { totalValue } = useCollateral();\n\n const getStartDate = (value: PeriodType) => {\n switch (value) {\n case PeriodType.DAY:\n return subDays(today, 1);\n case PeriodType.WEEK:\n return subDays(today, 6);\n case PeriodType.MONTH:\n return subDays(today, 29);\n case PeriodType.QUARTER:\n return subDays(today, 89);\n default:\n return subDays(today, 6);\n }\n };\n\n const [startDate, setStartDate] = useState(getStartDate(period));\n const [endDate, setEndDate] = useState(today);\n\n const periodValue = useMemo(() => {\n if (period) {\n switch (period) {\n case PeriodType.DAY:\n return 1;\n case PeriodType.WEEK:\n return 7;\n case PeriodType.MONTH:\n return 30;\n case PeriodType.QUARTER:\n return 90;\n }\n }\n // For custom date ranges, calculate actual days\n return Math.abs(differenceInDays(startDate, endDate)) + 1;\n }, [period, startDate, endDate]);\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 totalDeposit = useRef<Decimal>(zero);\n\n // get transfer history\n const { data: transferOutHistory, mutate: mutateTransferOut } =\n usePrivateQuery<API.TransferHistory>(\n `/v1/internal_transfer_history?page=1&size=200&side=OUT&start_t=${startDate.getTime()}&end_t=${endDate.getTime()}`,\n {\n revalidateOnFocus: false,\n },\n );\n const { data: transferInHistory, mutate: mutateTransferIn } =\n usePrivateQuery<API.TransferHistory>(\n `/v1/internal_transfer_history?page=1&size=200&side=IN&start_t=${startDate.getTime()}&end_t=${endDate.getTime()}`,\n {\n revalidateOnFocus: false,\n },\n );\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 // Refresh the transfer history once after the balance change event.\n const lastBalanceEventRef = useRef<number>(0);\n const refreshTransferHistory = useCallback(() => {\n const now = Date.now();\n if (now - lastBalanceEventRef.current < 15000) {\n return;\n }\n lastBalanceEventRef.current = now;\n mutateTransferOut?.(undefined, true);\n mutateTransferIn?.(undefined, true);\n }, [mutateTransferOut, mutateTransferIn]);\n\n useBalanceTopic({\n onMessage: () => {\n refreshTransferHistory();\n },\n });\n\n // get deposit & withdraw records to calculate the current PNL\n const [assetHistory] = useAssetsHistory({\n startTime: subDays(today, 2).getTime(),\n endTime: endDate.getTime(),\n pageSize: 50,\n });\n\n // get all deposit records to calculate the ROI\n const [allDepositHistory] = useAssetsHistory({\n side: \"DEPOSIT\",\n startTime: subDays(today, periodValue).getTime(),\n endTime: endDate.getTime(),\n pageSize: 200,\n });\n\n const totalDepositForROI = useMemo(() => {\n return allDepositHistory\n ?.filter((item) => item.trans_status === \"COMPLETED\")\n .reduce((acc, item) => {\n return acc.add(\n // item.amount\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [allDepositHistory, convertToUSDCAndOperate]);\n\n const totalTransferInForROI = useMemo(() => {\n if (!Array.isArray(transferInHistory)) {\n return zero;\n }\n return transferInHistory\n ?.filter((item) => item.status === \"COMPLETED\")\n .reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferInHistory, convertToUSDCAndOperate]);\n\n const dateRange = useMemo(\n () => ({\n from: startDate,\n to: endDate,\n }),\n [startDate, endDate],\n );\n\n const onPeriodChange = (value: PeriodType) => {\n const newStartDate = getStartDate(value);\n setStartDate(newStartDate);\n setEndDate(today);\n setPeriod(value);\n };\n\n const setDateRange = (newRange: {\n from: Date | string;\n to: Date | string;\n }) => {\n const fromDate =\n newRange.from instanceof Date ? newRange.from : new Date(newRange.from);\n const toDate =\n newRange.to instanceof Date ? newRange.to : new Date(newRange.to);\n setStartDate(fromDate);\n setEndDate(toDate);\n\n // Check if the selected range matches a predefined period\n const matchingPeriod = getMatchingPeriodType(fromDate, toDate);\n if (matchingPeriod) {\n setPeriod(matchingPeriod);\n } else {\n // Reset period to null to indicate custom date range selection\n setPeriod(null);\n }\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(filter.value);\n }\n };\n\n const filterItems = useMemo(() => {\n const dateRangeFilter = {\n type: \"range\" as const,\n name: \"dateRange\",\n value: dateRange,\n max: 90,\n };\n return [dateRangeFilter] as any;\n }, [dateRange]);\n\n // const lastItem = data[data.length - 1];\n\n const lastItem = useMemo(() => {\n return data.length > 0 ? data[data.length - 1] : null;\n }, [data]);\n\n const totalTransferIn = useMemo(() => {\n if (!Array.isArray(transferInHistory)) {\n return null;\n }\n if (\n lastItem == null ||\n transferInHistory?.length === 0 ||\n typeof lastItem.snapshot_time === \"undefined\"\n ) {\n return zero;\n }\n const list = transferInHistory?.filter((item) => {\n return (\n item.status === \"COMPLETED\" &&\n item.created_time > lastItem?.snapshot_time\n );\n });\n return list?.reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferInHistory, lastItem, convertToUSDCAndOperate]);\n\n const totalTransferOut = useMemo(() => {\n if (!Array.isArray(transferOutHistory)) {\n return null;\n }\n if (\n lastItem == null ||\n transferOutHistory?.length === 0 ||\n typeof lastItem.snapshot_time === \"undefined\"\n ) {\n return zero;\n }\n const list = transferOutHistory?.filter((item) => {\n return (\n item.status === \"COMPLETED\" &&\n item.created_time > lastItem?.snapshot_time\n );\n });\n return list?.reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferOutHistory, lastItem, convertToUSDCAndOperate]);\n\n const calculateLastPnl = (inputs: {\n lastItem: API.DailyRow;\n assetHistory: ReadonlyArray<API.AssetHistoryRow> | API.AssetHistoryRow[];\n transferHistory: {\n OUT: Decimal;\n IN: Decimal;\n };\n totalValue: number | null;\n }) => {\n if (totalValue == null) {\n return null;\n }\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 // 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 if (item.trans_status === \"COMPLETED\") {\n value = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value,\n op: \"sub\",\n });\n\n totalDeposit.current = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: totalDeposit.current,\n op: \"add\",\n });\n }\n } else if (item.side === \"WITHDRAW\") {\n if (item.trans_status !== \"FAILED\") {\n value = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value,\n op: \"add\",\n });\n }\n }\n }\n }\n\n value = value\n .sub(inputs.transferHistory.IN)\n .add(inputs.transferHistory.OUT);\n\n return value.toNumber();\n };\n\n const calculate = (\n data: API.DailyRow[],\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n const lastItem = data[data.length - 1];\n\n return {\n ...lastItem,\n date: getUTCStr(today),\n perp_volume: 0,\n account_value:\n totalValue !== null ? totalValue : (lastItem?.account_value ?? 0),\n pnl:\n calculateLastPnl({\n lastItem,\n assetHistory,\n totalValue,\n transferHistory: {\n OUT: totalTransferOut,\n IN: totalTransferIn,\n },\n }) ?? 0,\n __isCalculated: true,\n };\n };\n\n const mergeData = (\n data: ReadonlyArray<API.DailyRow> | API.DailyRow[],\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n if (data[data.length - 1].date === getUTCStr(today)) {\n return data;\n }\n\n return data.concat([\n calculate(data, totalValue, totalTransferIn, totalTransferOut),\n ]);\n };\n\n const calculateData = (\n data: ReadonlyArray<API.DailyRow> | API.DailyRow[],\n realtime: boolean,\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n const _data = !realtime\n ? data\n : mergeData(data, totalValue, totalTransferIn, totalTransferOut);\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) {\n return [];\n }\n // if the transferOutHistory or transferInHistory is not ready, return null;\n\n if (totalTransferOut === null || totalTransferIn === null) {\n return [];\n }\n return calculateData(\n data,\n isRealtime,\n totalValue,\n totalTransferIn,\n totalTransferOut,\n );\n }, [\n data,\n totalValue,\n assetHistory,\n isRealtime,\n getIndexPrice,\n // transferOutHistory,\n // transferInHistory,\n totalTransferIn,\n totalTransferOut,\n ]);\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(\n totalTransferInForROI.add(lastAccountValue).add(totalDepositForROI),\n );\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 }, [\n calculatedData,\n data,\n periodValue,\n totalTransferInForROI,\n totalDepositForROI,\n ]);\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 return { date, ...(i === 0 ? start : end) };\n });\n };\n\n return {\n periodTypes,\n period: period as PeriodType | null,\n onPeriodChange: onPeriodChange,\n periodLabel: periodLabel,\n curPeriod: period\n ? periodLabel[period as PeriodType]\n : getCustomDateRangeLabel(startDate, endDate),\n // data: calculatedDataUpdateByIndexPrice, // calculatedData,\n data: calculatedData, // calculatedData,\n aggregateValue,\n createFakeData,\n filterItems,\n onFilter,\n dateRange,\n setDateRange,\n } as const;\n};\n\nexport type useAssetsHistoryDataReturn = ReturnType<\n typeof useAssetsHistoryData\n>;\n\nfunction getUTCStr(date: Date) {\n const year = date.getUTCFullYear();\n const month = `0${date.getUTCMonth() + 1}`.slice(-2);\n const day = `0${date.getUTCDate()}`.slice(-2);\n\n return `${year}-${month}-${day}`;\n}\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { CardTitle, Flex, DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { PeriodType } from \"./useAssetHistory\";\n\nexport const PeriodTitle: React.FC<{\n onPeriodChange: (period: PeriodType) => void;\n periodTypes: string[];\n period: PeriodType | null;\n title: string;\n filterItems?: any[];\n onFilter?: (filter: { name: string; value: any }) => void;\n}> = (props) => {\n const { t } = useTranslation();\n\n const periodLabel = useMemo(() => {\n return {\n [PeriodType.DAY]: t(\"common.select.1d\"),\n [PeriodType.WEEK]: t(\"common.select.7d\"),\n [PeriodType.MONTH]: t(\"common.select.30d\"),\n [PeriodType.QUARTER]: t(\"common.select.90d\"),\n };\n }, [t]);\n\n const periodOrder = [\n PeriodType.DAY,\n PeriodType.WEEK,\n PeriodType.MONTH,\n PeriodType.QUARTER,\n ];\n\n return (\n <Flex itemAlign={\"center\"} justify={\"between\"}>\n <CardTitle>{props.title}</CardTitle>\n <Flex gap={2} itemAlign=\"center\">\n {props.filterItems && props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={props.onFilter || (() => {})}\n className=\"oui-border-none oui-py-0\"\n />\n )}\n {periodOrder.map((periodType) => (\n <button\n key={periodType}\n className={`oui-px-3 oui-rounded oui-text-xs oui-font-medium oui-transition-colors ${\n props.period === periodType\n ? \"oui-bg-primary oui-text-white\"\n : \"oui-bg-base-6 oui-text-base-contrast-60 hover:oui-bg-base-4 hover:oui-text-base-contrast\"\n }`}\n onClick={() => props.onPeriodChange(periodType)}\n >\n {periodLabel[periodType]}\n </button>\n ))}\n </Flex>\n </Flex>\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from \"react\";\nimport { AssetAreaChart } from \"@kodiak-finance/orderly-chart\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Card, Box } from \"@kodiak-finance/orderly-ui\";\nimport { useAssetsChartScriptReturn } from \"./assetsChart.script\";\n\nconst LazyPeriodTitle = React.lazy(() =>\n import(\"../shared/periodHeader\").then((mod) => {\n return { default: mod.PeriodTitle };\n }),\n);\n\nexport type AssetsLineChartProps = {} & useAssetsChartScriptReturn;\n\nexport const AssetsChart: React.FC<AssetsLineChartProps> = (props) => {\n const { onPeriodChange, data, periodTypes, period, filterItems, onFilter } =\n props;\n const { t } = useTranslation();\n return (\n <Card\n title={\n <Box>\n <React.Suspense fallback={null}>\n <LazyPeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"common.assets\")}\n filterItems={filterItems}\n onFilter={onFilter}\n />\n </React.Suspense>\n </Box>\n }\n id=\"portfolio-overview-assets-chart\"\n classNames={{ content: \"oui-h-[168px] oui-pb-0\" }}\n >\n <React.Suspense fallback={null}>\n <AssetAreaChart data={data as any} invisible={props.invisible} />\n </React.Suspense>\n </Card>\n );\n};\n","import React from \"react\";\nimport { useAssetsChartScript } from \"./assetsChart.script\";\nimport { AssetsChart } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget: React.FC = () => {\n const state = useAssetsChartScript();\n return <AssetsChart {...state} />;\n};\n","export { AssetsChartWidget } from \"./assetsChart.widget\";\nexport { useAssetsChartScript } from \"./assetsChart.script\";\nexport { AssetsChart } from \"./assetsChart.ui\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useState } from \"react\";\nimport {\n PnlAreaChart,\n PnLBarChart,\n VolBarChart,\n} from \"@kodiak-finance/orderly-chart\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport {\n Card,\n Grid,\n Box,\n Statistic,\n Text,\n Flex,\n Tooltip,\n cn,\n Tabs,\n TabPanel,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { UsePerformanceScriptReturn } from \"./performance.script\";\n\nconst LazyPeriodTitle = React.lazy(() =>\n import(\"../shared/periodHeader\").then((mod) => {\n return { default: mod.PeriodTitle };\n }),\n);\n\nexport type PerformanceUIProps = {\n // periodTypes: string[];\n // period: string;\n // onPeriodChange: (period: string) => void;\n} & UsePerformanceScriptReturn;\n\ntype LabelWithHintProps = {\n label: string;\n hint?: React.ReactNode;\n};\n\nconst LabelWithHint: React.FC<LabelWithHintProps> = (props) => {\n const { label, hint } = props;\n return (\n <Tooltip\n open={hint ? undefined : false}\n content={hint}\n className=\"oui-max-w-[240px] oui-bg-base-6 \"\n arrow={{ className: \"oui-fill-base-6\" }}\n delayDuration={300}\n >\n <Text\n size=\"xs\"\n intensity={36}\n className={cn(\n hint &&\n \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\",\n )}\n >\n {label}\n </Text>\n </Tooltip>\n );\n};\n\nexport const PerformancePnL: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n return (\n <Box mt={4} height={\"188px\"}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.dailyPnl\")}\n </Text>\n <Box r=\"md\" className=\"oui-h-[188px] oui-border oui-border-line-4\">\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: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.cumulativePnl\")}\n </Text>\n <Box r=\"md\" className=\"oui-h-[188px] oui-border oui-border-line-4\">\n <PnlAreaChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </Box>\n );\n};\n\nexport const PerformancePnLTabs: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n const [activeTab, setActiveTab] = useState(\"daily\");\n\n return (\n <Box mt={4}>\n <Tabs value={activeTab} onValueChange={setActiveTab} variant=\"contained\">\n <TabPanel\n value=\"daily\"\n title={t(\"portfolio.overview.performance.dailyPnl\")}\n >\n <Box\n r=\"md\"\n className=\"oui-mt-4 oui-h-[188px] oui-border oui-border-line-4\"\n >\n <PnLBarChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </TabPanel>\n <TabPanel\n value=\"cumulative\"\n title={t(\"portfolio.overview.performance.cumulativePnl\")}\n >\n <Box\n r=\"md\"\n className=\"oui-mt-4 oui-h-[188px] oui-border oui-border-line-4\"\n >\n <PnlAreaChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n\nexport const VolumeChart: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n curPeriod?: string;\n}> = (props) => {\n const { t } = useTranslation();\n\n const volumeData = (props.data ?? []).map((item: any) => ({\n date: item.date,\n volume: item.perp_volume ?? 0,\n opacity: (item.perp_volume ?? 0) > 0 ? 1 : 0,\n }));\n\n const shouldHide = props.invisible || (props.data?.length ?? 0) <= 2;\n\n return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.volume\", {\n period: props.curPeriod ?? \"\",\n })}\n </Text>\n <Box\n r=\"md\"\n className={cn(\n \"oui-mt-6 oui-h-[188px] oui-border oui-border-line-4\",\n shouldHide && \"chart-invisible\",\n )}\n >\n <VolBarChart data={volumeData} className=\"oui-size-full\" />\n </Box>\n </Box>\n );\n};\n\nexport const PerformanceUI: React.FC<PerformanceUIProps> = (props) => {\n const {\n periodTypes,\n period,\n onPeriodChange,\n aggregateValue,\n invisible,\n visible,\n curPeriod,\n filterItems,\n onFilter,\n } = props;\n const { t } = useTranslation();\n\n return (\n <Card\n title={\n <Box pt={6}>\n <React.Suspense fallback={null}>\n <LazyPeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"portfolio.overview.performance\")}\n filterItems={filterItems}\n onFilter={onFilter}\n />\n </React.Suspense>\n </Box>\n }\n id=\"portfolio-overview-performance\"\n >\n <Box pb={4}>\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={\n <LabelWithHint\n label={t(\"portfolio.overview.performance.roi\", {\n period: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.roi.tooltip\")}\n />\n }\n valueProps={{ rule: \"percentages\", coloring: true, visible }}\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={\n <LabelWithHint\n label={t(\"portfolio.overview.performance.pnl\", {\n period: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.pnl.tooltip\")}\n />\n }\n valueProps={{ coloring: true, showIdentifier: true, visible }}\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 <LabelWithHint\n label={t(\"portfolio.overview.performance.volume\", {\n period: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.volume.tooltip\")}\n />\n }\n valueProps={{ visible }}\n >\n {invisible ? \"--\" : aggregateValue.vol}\n </Statistic>\n </Box>\n </Grid>\n <Grid cols={2} gap={4} mb={4}>\n <PerformancePnLTabs\n data={props.data ?? EMPTY_LIST}\n invisible={props.invisible}\n />\n <VolumeChart\n data={props.data ?? EMPTY_LIST}\n invisible={props.invisible}\n curPeriod={props.curPeriod}\n />\n </Grid>\n </Box>\n </Card>\n );\n};\n","// Asset conversion types\nexport interface ConvertedAssets {\n [asset: string]: number;\n}\n\nexport interface ConvertTransaction {\n transaction_id: number;\n venue: \"on_chain\" | \"internal_fund\";\n converted_asset: string;\n received_asset: string;\n converted_qty: number;\n received_qty: number;\n haircut: number;\n chain_id?: number; // Optional, only for on_chain venue\n tx_id?: string; // Optional, only for on_chain venue\n result?: string;\n}\n\nexport interface ConvertRecord {\n convert_id: number;\n converted_asset: ConvertedAssets;\n received_asset: string;\n received_qty: number;\n type: \"auto\" | \"manual\";\n status: \"completed\" | \"pending\" | \"failed\" | \"cancelled\";\n created_time: number;\n updated_time: number;\n details: ConvertTransaction[];\n}\n\n// Additional utility types\nexport type ConvertType = \"auto\" | \"manual\";\n\nexport type ConvertStatus = \"completed\" | \"pending\" | \"failed\" | \"cancelled\";\n\nexport type VenueType = \"on_chain\" | \"internal_fund\";\n\nexport const ORDERLY_ASSETS_VISIBLE_KEY = \"orderly_assets_visible\";\n","import { useMemo } from \"react\";\nimport { useAccount, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { ORDERLY_ASSETS_VISIBLE_KEY } from \"../../assets/type\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const usePerformanceScript = () => {\n const ctx = useOverviewContext();\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\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 { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length) {\n return filteredData;\n }\n return ctx?.createFakeData?.(\n { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n );\n }, [ctx, 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 as ReadonlyArray<any>,\n invisible,\n visible: visible as boolean,\n setVisible: setVisible,\n };\n};\n\nexport type UsePerformanceScriptReturn = ReturnType<\n typeof usePerformanceScript\n>;\n","import React from \"react\";\nimport { usePerformanceScript } from \"./performance.script\";\nimport { PerformanceUI } from \"./performance.ui\";\n\nexport const PerformanceWidget: React.FC = () => {\n const state = usePerformanceScript();\n return <PerformanceUI {...state} />;\n};\n","export { PerformanceUI } from \"./performance.ui\";\nexport { PerformanceWidget } from \"./performance.widget\";\nexport { usePerformanceScript } from \"./performance.script\";\n","import React, { useId } from \"react\";\n\nexport const EffectiveFee = React.forwardRef<\n SVGSVGElement,\n React.SVGAttributes<SVGSVGElement>\n>((props, ref) => {\n const linearId = useId();\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={14}\n height={14}\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n ref={ref}\n focusable={false}\n {...props}\n >\n <path\n d=\"M6.16411 1.53106C6.61974 1.07566 7.35888 1.07551 7.81442 1.53106L8.48833 2.20496C8.6797 2.39624 8.93064 2.51452 9.19755 2.54106L9.3132 2.54676H10.2662C10.9104 2.54691 11.4328 3.06926 11.4329 3.71343V4.66647C11.4329 4.97589 11.5559 5.27312 11.7747 5.49191L12.4492 6.16582C12.9047 6.62142 12.9047 7.36054 12.4492 7.81613L11.7753 8.49004L11.6972 8.57549C11.5272 8.78302 11.433 9.04426 11.4329 9.31491V10.2685L11.4272 10.3876C11.3715 10.9366 10.9348 11.373 10.3859 11.4289L10.2662 11.4352H9.3132L9.19755 11.4409C8.93066 11.4674 8.67969 11.5857 8.48833 11.777L7.81442 12.4509L7.72555 12.5306C7.29789 12.8795 6.68066 12.8794 6.25297 12.5306L6.16411 12.4509L5.4902 11.777C5.29887 11.5857 5.04786 11.4675 4.78097 11.4409L4.66533 11.4352H3.71171L3.59265 11.4289C3.04358 11.3731 2.60705 10.9367 2.55131 10.3876L2.54505 10.2685V9.31491C2.54499 9.04416 2.45089 8.78306 2.28072 8.57549L2.20325 8.49004L1.52934 7.81613C1.10213 7.38905 1.07534 6.71297 1.44902 6.25469L1.52934 6.16582L2.20382 5.49191C2.42248 5.27314 2.54505 4.97579 2.54505 4.66647V3.71343C2.54513 3.10945 3.00442 2.61221 3.59265 2.55246L3.71171 2.54676H4.66533L4.78097 2.54106C5.00968 2.51826 5.22694 2.4281 5.40475 2.28244L5.4902 2.20496L6.16411 1.53106ZM6.31507 3.02983C5.87756 3.46727 5.28401 3.71336 4.66533 3.71343H3.71171V4.66647C3.71171 5.28521 3.46614 5.87922 3.02869 6.31678L2.35421 6.99069L3.02812 7.6646C3.46577 8.10214 3.71164 8.69607 3.71171 9.31491V10.2685H4.66533C5.28396 10.2686 5.87757 10.5142 6.31507 10.9515L6.98898 11.6255L7.66289 10.9515C8.10045 10.5141 8.69446 10.2685 9.3132 10.2685H10.2662V9.31491C10.2663 8.69604 10.5127 8.10214 10.9504 7.6646L11.6243 6.99069L10.9498 6.31678C10.5122 5.8792 10.2662 5.28531 10.2662 4.66647V3.71343H9.3132C8.69438 3.71343 8.10047 3.46739 7.66289 3.02983L6.98898 2.35592L6.31507 3.02983ZM8.52934 4.64255C8.7571 4.41479 9.12639 4.41489 9.35421 4.64255C9.58202 4.87035 9.58202 5.23961 9.35421 5.46742L5.4657 9.35593C5.2379 9.58372 4.86863 9.58373 4.64083 9.35593C4.41318 9.12811 4.41308 8.75881 4.64083 8.53106L8.52934 4.64255ZM8.66435 7.83265C9.1245 7.83272 9.49777 8.2059 9.49777 8.66607C9.49769 9.12616 9.12445 9.49941 8.66435 9.49948C8.20419 9.49948 7.83101 9.12621 7.83094 8.66607C7.83094 8.20586 8.20415 7.83265 8.66435 7.83265ZM5.33126 4.49956C5.79141 4.49963 6.16468 4.87282 6.16468 5.33298C6.1646 5.79307 5.79136 6.16575 5.33126 6.16582C4.87111 6.16582 4.49793 5.79311 4.49785 5.33298C4.49785 4.87277 4.87106 4.49956 5.33126 4.49956Z\"\n fill={`url(#${linearId})`}\n />\n <defs>\n <linearGradient\n id={linearId}\n x1=\"12.7908\"\n y1=\"6.99084\"\n x2=\"1.1875\"\n y2=\"6.99084\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop stopColor=\"rgb(var(--oui-gradient-brand-start))\" offset={1} />\n </linearGradient>\n </defs>\n </svg>\n );\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n EffectiveFee.displayName = \"EffectiveFee\";\n}\n","export * from \"./effectiveFee\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo } from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Flex,\n modal,\n Text,\n Tooltip,\n useModal,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n RouterAdapter,\n useScaffoldContext,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useLayoutContext } from \"../../layout/context\";\nimport { EffectiveFee } from \"./icons\";\n\nexport type FeeTierHeaderItemProps = {\n label: string;\n value: React.ReactNode;\n interactive?: boolean;\n};\n\nexport type FeeTierHeaderProps = {\n tier?: number | null;\n vol?: number | null;\n headerDataAdapter?: (original: any[]) => any[];\n};\n\nconst isEffective = (val?: unknown) =>\n typeof val !== \"undefined\" && val !== null;\n\nconst EffectiveFeeDialog: React.FC<{\n routerAdapter: RouterAdapter | undefined;\n}> = (props) => {\n const { routerAdapter } = props;\n const { t } = useTranslation();\n const { hide } = useModal();\n return (\n <Text size=\"2xs\" className=\"oui-whitespace-normal oui-break-words\">\n {t(\"portfolio.feeTier.effectiveFee.tooltip\")}{\" \"}\n <a\n href=\"/rewards/affiliate\"\n onClick={(e) => {\n e.preventDefault();\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate\",\n name: t(\"portfolio.feeTier.effectiveFee.tooltipLink\"),\n });\n hide();\n }}\n className=\"oui-cursor-pointer oui-border-none oui-bg-transparent oui-p-0 oui-text-2xs oui-underline hover:oui-text-base-contrast-80\"\n >\n {t(\"portfolio.feeTier.effectiveFee.tooltipLink\")}\n </a>\n </Text>\n );\n};\n\nexport const MobileHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n const { label, value, interactive } = props;\n const { t } = useTranslation();\n const { routerAdapter } = useLayoutContext();\n return (\n <Flex justify=\"between\" itemAlign=\"center\" width=\"100%\">\n <Text\n as=\"div\"\n intensity={36}\n size=\"xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {label}\n </Text>\n <Flex className=\"oui-gap-1.5\" itemAlign=\"center\" justify=\"between\">\n <Text size=\"xs\" intensity={80} className=\"oui-leading-[24px]\">\n {value}\n </Text>\n {interactive && (\n <Flex\n gap={1}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-cursor-pointer oui-rounded oui-bg-gradient-to-r oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)] oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)] oui-px-1\"\n onClick={() => {\n modal.dialog({\n size: \"sm\",\n title: t(\"common.tips\"),\n content: <EffectiveFeeDialog routerAdapter={routerAdapter} />,\n });\n }}\n >\n <EffectiveFee />\n <Text.gradient\n className=\"oui-select-none\"\n color={\"brand\"}\n size=\"3xs\"\n weight=\"regular\"\n >\n {t(\"common.effectiveFee\")}\n </Text.gradient>\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n};\n\nexport const DesktopHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n const { label, value, interactive } = props;\n const { t } = useTranslation();\n const { routerAdapter } = useScaffoldContext();\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 <Flex itemAlign=\"center\" justify=\"between\">\n <Text\n as=\"div\"\n intensity={36}\n size=\"2xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {label}\n </Text>\n {interactive && (\n <Tooltip\n content={\n <Text\n size=\"2xs\"\n className=\"oui-whitespace-normal oui-break-words\"\n >\n {t(\"portfolio.feeTier.effectiveFee.tooltip\")}{\" \"}\n <a\n href=\"/rewards/affiliate\"\n onClick={(e) => {\n e.preventDefault();\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate\",\n name: t(\"portfolio.feeTier.effectiveFee.tooltipLink\"),\n });\n }}\n className=\"oui-cursor-pointer oui-border-none oui-bg-transparent oui-p-0 oui-text-2xs oui-underline hover:oui-text-base-contrast-80\"\n >\n {t(\"portfolio.feeTier.effectiveFee.tooltipLink\")}\n </a>\n </Text>\n }\n className=\"oui-p-1.5 oui-text-base-contrast-54\"\n >\n <Flex\n gap={1}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-cursor-pointer oui-rounded oui-bg-gradient-to-r oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)] oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)] oui-px-1\"\n >\n <EffectiveFee />\n <Text.gradient\n className=\"oui-select-none\"\n color={\"brand\"}\n size=\"xs\"\n weight=\"regular\"\n >\n {t(\"common.effectiveFee\")}\n </Text.gradient>\n </Flex>\n </Tooltip>\n )}\n </Flex>\n <Flex className=\"oui-mt-1 oui-w-full\">\n <Text size=\"base\" intensity={80} className=\"oui-leading-[24px]\">\n {value}\n </Text>\n </Flex>\n </Box>\n );\n};\n\nexport const FeeTierHeader: React.FC<FeeTierHeaderProps> = (props) => {\n const { t } = useTranslation();\n const { tier, vol, headerDataAdapter } = props;\n const { isMobile } = useScreen();\n const { refereeRebate, ...others } = useFeeState();\n const isEffectiveFee = isEffective(refereeRebate);\n const items: FeeTierHeaderItemProps[] = [\n {\n label: t(\"portfolio.feeTier.header.yourTier\"),\n interactive: false,\n value: (\n <Text.gradient\n color={\"brand\"}\n angle={270}\n size={isMobile ? \"xs\" : \"base\"}\n >\n {tier || \"--\"}\n </Text.gradient>\n ),\n },\n {\n label: `${t(\"portfolio.feeTier.header.30dVolume\")} (USDC)`,\n interactive: false,\n value: (\n <Text.numeral\n rule=\"price\"\n dp={2}\n rm={Decimal.ROUND_DOWN}\n size={isMobile ? \"xs\" : \"base\"}\n >\n {vol !== undefined && vol !== null ? `${vol}` : \"-\"}\n </Text.numeral>\n ),\n },\n {\n label: t(\"portfolio.feeTier.header.takerFeeRate\"),\n interactive: isEffectiveFee,\n value: (\n <Text.gradient\n color={\"brand\"}\n angle={270}\n size={isMobile ? \"xs\" : \"base\"}\n >\n {isEffectiveFee\n ? others.effectiveTakerFee || \"--\"\n : others.takerFee || \"--\"}{\" \"}\n (RWA:{\" \"}\n {(isEffectiveFee\n ? others.rwaEffectiveTakerFee\n : others.rwaTakerFee) || \"--\"}\n )\n </Text.gradient>\n ),\n },\n {\n label: t(\"portfolio.feeTier.header.makerFeeRate\"),\n interactive: isEffectiveFee,\n value: (\n <Text.gradient\n color={\"brand\"}\n angle={270}\n size={isMobile ? \"xs\" : \"base\"}\n >\n {isEffectiveFee\n ? others.effectiveMakerFee || \"--\"\n : others.makerFee || \"--\"}{\" \"}\n (RWA:{\" \"}\n {(isEffectiveFee\n ? others.rwaEffectiveMakerFee\n : others.rwaMakerFee) || \"--\"}\n )\n </Text.gradient>\n ),\n },\n ];\n\n const mergedData = useMemo<FeeTierHeaderItemProps[]>(() => {\n if (typeof headerDataAdapter === \"function\") {\n return headerDataAdapter(items);\n }\n return items;\n }, [headerDataAdapter, items]);\n\n if (!Array.isArray(mergedData)) {\n return null;\n }\n\n if (isMobile) {\n return (\n <Flex\n className=\"oui-rounded-xl oui-bg-base-9 oui-p-3\"\n direction=\"column\"\n gap={2}\n itemAlign={\"stretch\"}\n >\n {mergedData.map((item, index) => (\n <MobileHeaderItem {...item} key={`mobile-item-${index}`} />\n ))}\n </Flex>\n );\n }\n\n return (\n <Flex className=\"\" direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n {mergedData.map((item, index) => (\n <DesktopHeaderItem {...item} key={`desktop-item-${index}`} />\n ))}\n </Flex>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n APIKeyItem,\n ScopeType,\n useAccount,\n useApiKeyManager,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { toast, usePagination } from \"@kodiak-finance/orderly-ui\";\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 { wrongNetwork, disabledConnect } = useAppContext();\n const { state, account } = useAccount();\n const { t } = useTranslation();\n\n const canCreateApiKey =\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\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-omnichain/evm-api/api-authentication#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 res = await generateOrderlyKey(scope);\n /// add ed25519: prefix to the key\n const generateKeyRes = {\n ...res,\n key: `ed25519:${res.key}`,\n };\n toast.success(t(\"portfolio.apiKey.created\"));\n\n if ((ipRestriction?.length || 0) > 0) {\n const key = generateKeyRes.key;\n const res = await setIPRestriction(key, ipRestriction!);\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(t(\"portfolio.apiKey.apiInfo.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(t(\"portfolio.apiKey.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(t(\"portfolio.apiKey.updated\"));\n refresh();\n return Promise.resolve();\n } else {\n toast.error(data.message);\n }\n return Promise.reject();\n };\n\n const onCopyAccountId = () =>\n toast.success(t(\"portfolio.apiKey.accountId.copied\"));\n const onCopyApiKey = (key?: string) => {\n toast.success(t(\"portfolio.apiKey.column.apiKey.copy\"));\n };\n const onCopyApiSecretKey = () =>\n toast.success(t(\"portfolio.apiKey.secretKey.copied\"));\n const onCopyIP = () =>\n toast.success(t(\"portfolio.apiKey.column.restrictedIP.copy\"));\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 accountId = useDataTap(state.accountId, {\n accountStatus,\n });\n\n const userId = useDataTap(state.userId, {\n accountStatus,\n });\n\n const { pagination } = usePagination();\n\n return {\n accountId: accountId ?? \"--\",\n userId: userId ?? \"--\",\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 { FC, useEffect, useState } from \"react\";\nimport { ScopeType } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, SimpleDialog, Statistic, Text } from \"@kodiak-finance/orderly-ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\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 const { t } = useTranslation();\n\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={t(\"portfolio.apiKey.create.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.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 <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\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-size-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 {t(\"portfolio.apiKey.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={t(\"portfolio.apiKey.permissions.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={t(\"portfolio.apiKey.permissions.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 \"oui-flex oui-items-center oui-gap-2 disabled:oui-cursor-not-allowed disabled:oui-opacity-50\"\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\n <Text\n intensity={54}\n size=\"sm\"\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {props.label}\n </Text>\n </button>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreatedAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const ip = props.generateKey?.ip ?? \"--\";\n const { t } = useTranslation();\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreatedDialog}\n onOpenChange={(open) => {\n props.hideCreatedDialog?.();\n }}\n title={t(\"portfolio.apiKey.created\")}\n actions={{\n primary: {\n label: t(\"common.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: t(\"portfolio.apiKey.created.button.copyApiInfo\"),\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={t(\"common.accountId\")}>\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.accountId}\n </Text.formatted>\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.column.apiKey\")}>\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={t(\"portfolio.apiKey.secretKey\")}>\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={t(\"portfolio.apiKey.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={t(\"portfolio.apiKey.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 {t(\"portfolio.apiKey.created.warning\")}\n </Text>\n </Flex>\n </SimpleDialog>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, SimpleDialog, Text } from \"@kodiak-finance/orderly-ui\";\nimport { APIKeyItem } from \"@kodiak-finance/orderly-hooks\";\nimport { formatKey } from \"../apiManager.ui\";\nimport { useTranslation, Trans } from \"@kodiak-finance/orderly-i18n\";\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 const { t } = useTranslation();\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title={t(\"portfolio.apiKey.delete.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.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: t(\"common.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 {/* @ts-ignore */}\n <Trans\n i18nKey=\"portfolio.apiKey.delete.dialog.description\"\n values={{ apiKey: formatKey(item?.orderly_key) }}\n components={[<Text color=\"primary\" className=\"oui-px-1\" />]}\n />\n </Flex>\n </SimpleDialog>\n );\n};\n","import { FC, useEffect, useState } from \"react\";\nimport { APIKeyItem } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, SimpleDialog, Statistic, Text } from \"@kodiak-finance/orderly-ui\";\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 const { t } = useTranslation();\n\n useEffect(() => {\n setIpText(item.ip_restriction_list.join(\",\"));\n const scope = item.scope?.toLocaleLowerCase() || \"\";\n\n setRead(scope.includes(\"read\"));\n setTrade(scope.includes(\"trading\"));\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={t(\"portfolio.apiKey.edit.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.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 {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-editApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\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-size-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 {t(\"portfolio.apiKey.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={t(\"portfolio.apiKey.permissions.read\")}\n />\n <Checkbox\n disabled\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.trading\")}\n />\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { useState } from \"react\";\nimport { APIKeyItem } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Button,\n Card,\n CopyIcon,\n Flex,\n PlusIcon,\n Column,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n AuthGuardEmpty,\n AuthGuardDataTable,\n AuthGuardTooltip,\n} from \"@kodiak-finance/orderly-ui-connector\";\nimport {\n type ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\n\nconst LazyCreateAPIKeyDialog = React.lazy(() =>\n import(\"./dialog/createApiKey\").then((mod) => {\n return { default: mod.CreateAPIKeyDialog };\n }),\n);\n\nconst LazyCreatedAPIKeyDialog = React.lazy(() =>\n import(\"./dialog/createdApiKey\").then((mod) => {\n return { default: mod.CreatedAPIKeyDialog };\n }),\n);\n\nconst LazyDeleteAPIKeyDialog = React.lazy(() =>\n import(\"./dialog/deleteApiKey\").then((mod) => {\n return { default: mod.DeleteAPIKeyDialog };\n }),\n);\n\nconst LazyEditAPIKeyDialog = React.lazy(() =>\n import(\"./dialog/editApiKey\").then((mod) => {\n return { default: mod.EditAPIKeyDialog };\n }),\n);\n\nexport const APIManager: React.FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n return (\n <Card\n title={t(\"portfolio.apiKeys\")}\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 <React.Suspense fallback={null}>\n <LazyCreateAPIKeyDialog {...props} />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyCreatedAPIKeyDialog {...props} />\n </React.Suspense>\n </div>\n </Card>\n );\n};\n\nconst AccountInfo: React.FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\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 {t(\"common.accountId\")}\n </Text>\n <Text.formatted\n size=\"base\"\n inlist={80}\n rule={\"address\"}\n copyable={props.accountId !== \"--\"}\n copyIconSize={16}\n onCopy={props.onCopyAccountId}\n copyIconTestid=\"oui-testid-apiKey-accountInfo-accountId-copy-btn\"\n >\n {props.accountId}\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 {t(\"portfolio.apiKey.uid\")}\n </Text>\n <Text size=\"base\" inlist={80}>\n {props.userId}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst Subtitle: React.FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\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}>{t(\"portfolio.apiKey.description\")}</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>{t(\"portfolio.apiKey.readApiGuide\")}</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: t(\"portfolio.apiKey.create.connectWallet.tooltip\"),\n signIn: t(\"portfolio.apiKey.create.createAccount.tooltip\"),\n enableTrading: t(\"portfolio.apiKey.create.enableTrading.tooltip\"),\n wrongNetwork: t(\"portfolio.apiKey.create.wrongNetwork.tooltip\"),\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 {t(\"portfolio.apiKey.create.dialog.title\")}\n </Button>\n </AuthGuardTooltip>\n </Flex>\n );\n};\n\nconst KeyList: React.FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n const columns: Column<APIKeyItem>[] = [\n {\n title: t(\"portfolio.apiKey.column.apiKey\"),\n dataIndex: \"orderly_key\",\n width: 150,\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: t(\"portfolio.apiKey.column.permissionType\"),\n dataIndex: \"scope\",\n render: (value) =>\n value\n ?.split(\",\")\n .map((e: any) => capitalizeFirstChar(`${e}`))\n .join(\", \"),\n },\n {\n title: t(\"portfolio.apiKey.column.restrictedIP\"),\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: t(\"portfolio.apiKey.column.expirationDate\"),\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\n return (\n <AuthGuardDataTable\n bordered\n columns={columns}\n loading={props.isLoading}\n dataSource={props.keys}\n emptyView={<AuthGuardEmpty />}\n pagination={props.pagination}\n manualPagination={false}\n />\n );\n};\n\nconst EditButton: React.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 const { t } = useTranslation();\n\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 {t(\"common.edit\")}\n </Button>\n {open && (\n <React.Suspense fallback={null}>\n <LazyEditAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onUpdate={onUpdate}\n verifyIP={verifyIP}\n />\n </React.Suspense>\n )}\n </>\n );\n};\n\nconst DeleteButton: React.FC<{\n item: APIKeyItem;\n onDelete: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, onDelete } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\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 {t(\"common.delete\")}\n </Button>\n {open && (\n <React.Suspense fallback={null}>\n <LazyDeleteAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onDelete={onDelete}\n />\n </React.Suspense>\n )}\n </>\n );\n};\n\nexport function formatKey(value: string): string {\n if (typeof value === \"undefined\") {\n return \"-\";\n }\n const key = `${value}`.slice(0, Math.min(value.length, 12));\n return `${key}***`;\n}\n","import { FC, PropsWithChildren } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { usePortfolioLayoutScript } from \"./layout.script\";\nimport { PortfolioLayout, PortfolioLayoutProps } from \"./layout.ui\";\nimport { PortfolioLayoutMobile } from \"./layout.ui.mobile\";\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 const { isMobile } = useScreen();\n\n return (\n <>\n {isMobile ? (\n // @ts-ignore\n <PortfolioLayoutMobile {...state} {...props} />\n ) : (\n <PortfolioLayout {...state} {...props} />\n )}\n </>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useMediaQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n SideMenuItem,\n useScaffoldContext,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\n\nexport enum PortfolioLeftSidebarPath {\n Overview = \"/portfolio\",\n Positions = \"/portfolio/positions\",\n Orders = \"/portfolio/orders\",\n Assets = \"/portfolio/assets\",\n FeeTier = \"/portfolio/feeTier\",\n ApiKey = \"/portfolio/apiKey\",\n Setting = \"/portfolio/setting\",\n History = \"/portfolio/history\",\n SymbolPerformance = \"/portfolio/symbol-performance\",\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 const { t } = useTranslation();\n\n useEffect(() => {\n if (props.current || routerAdapter?.currentPath) {\n setCurrent(props.current || routerAdapter?.currentPath || \"/portfolio\");\n }\n }, [props.current, routerAdapter?.currentPath]);\n\n const items = useMemo(() => {\n return [\n {\n name: t(\"common.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: t(\"common.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: t(\"common.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: t(\"common.assets\"),\n href: PortfolioLeftSidebarPath.Assets,\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n >\n <path\n d=\"M9 1.5C4.85 1.5 1.5 4.85 1.5 9C1.5 13.15 4.85 16.5 9 16.5C13.15 16.5 16.5 13.15 16.5 9C16.5 4.85 13.15 1.5 9 1.5ZM8.17529 3.75H9.67529V4.94971L10.125 5.17529C10.35 5.32529 10.5756 5.47471 10.7256 5.69971C10.8756 5.92471 11.0256 6.14971 11.1006 6.44971C11.1756 6.74971 11.25 7.05029 11.25 7.42529H9.82471C9.82471 6.97529 9.75059 6.67471 9.60059 6.44971C9.45059 6.22471 9.3 6.14941 9 6.14941C8.85 6.14941 8.7 6.15059 8.625 6.22559L8.39941 6.44971C8.32441 6.52471 8.325 6.675 8.25 6.75C8.175 6.825 8.17529 6.975 8.17529 7.125C8.17529 7.275 8.25 7.35 8.25 7.5C8.25 7.65 8.32441 7.72529 8.39941 7.80029C8.47441 7.95029 8.54971 8.02559 8.69971 8.10059C8.77471 8.17559 8.92441 8.24971 9.14941 8.32471C9.44941 8.47471 9.75059 8.62441 9.97559 8.77441C10.2756 8.92441 10.4994 9.07529 10.6494 9.30029C10.8744 9.52529 11.0256 9.75059 11.1006 9.97559C11.1756 10.2006 11.25 10.5 11.25 10.875C11.25 11.25 11.1756 11.5494 11.1006 11.7744C11.0256 12.0744 10.8756 12.2247 10.7256 12.4497C10.5756 12.5997 10.35 12.7494 10.125 12.8994C9.975 12.9744 9.9 13.0503 9.75 13.0503V14.25H8.25V12.9756C8.1 12.9006 7.95029 12.8997 7.80029 12.8247C7.50029 12.7497 7.35 12.6 7.125 12.375C6.975 12.225 6.82529 11.925 6.67529 11.625C6.60029 11.25 6.52441 10.8753 6.52441 10.4253H8.02441C8.02441 10.6503 8.02559 10.8756 8.10059 11.1006C8.17559 11.3256 8.24971 11.4753 8.32471 11.5503C8.39971 11.6253 8.475 11.6994 8.625 11.7744C8.775 11.8494 8.85 11.8506 9 11.8506C9.15 11.8506 9.225 11.8494 9.375 11.7744C9.525 11.6994 9.60029 11.6253 9.67529 11.5503C9.75029 11.4753 9.74971 11.4 9.82471 11.25C9.89971 11.175 9.89941 11.025 9.89941 10.875C9.89941 10.725 9.82471 10.575 9.82471 10.5C9.82471 10.425 9.75029 10.2747 9.67529 10.1997C9.60029 10.0497 9.525 9.97441 9.375 9.89941L8.92529 9.67529C8.62529 9.52529 8.32559 9.37559 8.10059 9.22559C7.80059 9.07559 7.57529 8.92471 7.42529 8.69971C7.20029 8.54971 7.05059 8.32441 6.97559 8.02441C6.90059 7.79941 6.82471 7.5 6.82471 7.125C6.82471 6.825 6.82441 6.52529 6.89941 6.30029C7.04941 6.07529 7.12559 5.85 7.35059 5.625C7.50059 5.4 7.65029 5.25029 7.80029 5.17529C7.95029 5.10029 8.02529 5.02441 8.17529 5.02441V3.75Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.feeTier\"),\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: t(\"portfolio.apiKeys\"),\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: t(\"portfolio.symbolPerformance\"),\n href: PortfolioLeftSidebarPath.SymbolPerformance,\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=\"M13.5 3.75C12.8096 3.75 12.375 4.18467 12.375 4.875V12.375C12.375 13.0654 12.8096 13.5 13.5 13.5H14.625C15.3154 13.5 15.75 13.0654 15.75 12.375V4.875C15.75 4.18467 15.3154 3.75 14.625 3.75H13.5ZM13.5 5.25H14.625V12.375H13.5V5.25ZM8.25 6.75C7.55964 6.75 7.125 7.18467 7.125 7.875V12.375C7.125 13.0654 7.55964 13.5 8.25 13.5H9.375C10.0654 13.5 10.5 13.0654 10.5 12.375V7.875C10.5 7.18467 10.0654 6.75 9.375 6.75H8.25ZM8.25 8.25H9.375V12.375H8.25V8.25ZM3 9.75C2.30964 9.75 1.875 10.1847 1.875 10.875V12.375C1.875 13.0654 2.30964 13.5 3 13.5H4.125C4.81536 13.5 5.25 13.0654 5.25 12.375V10.875C5.25 10.1847 4.81536 9.75 4.125 9.75H3ZM3 11.25H4.125V12.375H3V11.25Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.setting\"),\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 name: t(\"trading.history\"),\n href: PortfolioLeftSidebarPath.History,\n hide: true,\n },\n ];\n }, [t]);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item: SideMenuItem) => {\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\nexport type usePortfolioLayoutScriptType = ReturnType<\n typeof usePortfolioLayoutScript\n>;\n","import { FC, PropsWithChildren } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\nimport {\n ScaffoldProps,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\n\nexport type PortfolioLayoutProps = ScaffoldProps & {\n hideSideBar?: boolean;\n items?: SideBarProps[\"items\"];\n};\n\nexport const PortfolioLayout: FC<PropsWithChildren<PortfolioLayoutProps>> = (\n props,\n) => {\n const { children, leftSideProps, classNames, ...rest } = props;\n\n return (\n <Scaffold\n leftSidebar={\n props.hideSideBar ? null : (\n <LeftSidebar\n current={props.routerAdapter?.currentPath}\n routerAdapter={props.routerAdapter}\n items={props.items}\n {...leftSideProps}\n />\n )\n }\n routerAdapter={props.routerAdapter}\n classNames={{\n ...classNames,\n content: cn(\"oui-my-6 oui-px-3\", classNames?.content),\n topNavbar: cn(\"oui-bg-base-9\", classNames?.topNavbar),\n leftSidebar: cn(\n \"oui-rounded-xl oui-bg-base-9\",\n \"oui-m-3 oui-p-4\",\n \"oui-border oui-border-line\",\n classNames?.leftSidebar,\n ),\n }}\n {...rest}\n >\n {children}\n </Scaffold>\n );\n};\n\ntype LeftSidebarProps = SideBarProps & {\n routerAdapter?: RouterAdapter;\n};\n\nconst LeftSidebar: FC<LeftSidebarProps> = (props) => {\n const { expanded, setExpand } = useScaffoldContext();\n const { t } = useTranslation();\n return (\n <SideBar\n title={t(\"common.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 { FC, PropsWithChildren } from \"react\";\nimport { Flex, Box } from \"@kodiak-finance/orderly-ui\";\nimport {\n MainNavMobile,\n BottomNav,\n type ScaffoldProps,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\nimport { LayoutProvider } from \"./context\";\nimport { usePortfolioLayoutScriptType } from \"./layout.script\";\n\nexport const PortfolioLayoutMobile: FC<\n PropsWithChildren<\n ScaffoldProps & usePortfolioLayoutScriptType & { current?: string }\n >\n> = (props) => {\n return (\n <LayoutProvider {...props}>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-h-full-screen oui-bg-base-10\"\n >\n <header className=\"oui-scaffold-topNavbar oui-sticky oui-top-0 oui-z-10 oui-w-full oui-bg-base-10\">\n <MainNavMobile\n {...props.mainNavProps}\n current={props?.current}\n subItems={props?.items}\n routerAdapter={props.routerAdapter}\n />\n </header>\n <Box className=\"oui-scaffold-container oui-min-h-[calc(100vh-44px-64px-env(safe-area-inset-bottom))] oui-w-full\">\n {props.children}\n </Box>\n <footer className=\"oui-scaffold-bottomNav oui-fixed oui-bottom-0 oui-z-10 oui-w-full oui-bg-base-9 oui-pb-[calc(env(safe-area-inset-bottom))]\">\n <BottomNav\n mainMenus={props.bottomNavProps?.mainMenus}\n current={props?.current}\n onRouteChange={props.routerAdapter?.onRouteChange}\n />\n </footer>\n </Flex>\n </LayoutProvider>\n );\n};\n","export { AssetWidget, AssetsUI } from \"./assets\";\nexport { HistoryDataGroupWidget } from \"./historyDataGroup\";\n\nexport * from \"./assetChart\";\nexport * from \"./assetHistory\";\n\nexport {\n PerformanceUI,\n PerformanceWidget,\n usePerformanceScript,\n} from \"./performance\";\n\nexport * from \"./performanceMobileDialog\";\n\nexport {\n FundingHistoryWidget,\n useFundingHistoryColumns,\n useFundingHistoryHook,\n} from \"./funding\";\n\nexport {\n DistributionHistoryWidget,\n DistributionHistoryMobile,\n DistributionHistoryDesktop,\n} from \"./distribution\";\n\nexport { OverviewPage } from \"./main\";\n\nexport { OverviewProvider } from \"./provider/overviewProvider\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from \"react\";\nimport {\n AssetLineChart,\n PnlAreaChart,\n PnLBarChart,\n VolBarChart,\n PnlLineChartProps,\n} from \"@kodiak-finance/orderly-chart\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Tabs,\n TabPanel,\n Flex,\n Text,\n DataFilter,\n Box,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { UsePerformanceScriptReturn } from \"../performance/performance.script\";\nimport {\n PeriodType,\n useAssetsHistoryDataReturn,\n} from \"../shared/useAssetHistory\";\n\nconst responsiveProps: PnlLineChartProps[\"responsiveContainerProps\"] = {\n width: \"100%\",\n minHeight: 144,\n aspect: 2.5,\n};\n\nexport const PerformanceMobileUI: React.FC<\n Pick<\n useAssetsHistoryDataReturn & UsePerformanceScriptReturn,\n | \"data\"\n | \"curPeriod\"\n | \"aggregateValue\"\n | \"onPeriodChange\"\n | \"invisible\"\n | \"visible\"\n | \"createFakeData\"\n | \"period\"\n | \"filterItems\"\n | \"onFilter\"\n >\n> = (props) => {\n const { t } = useTranslation();\n const {\n data,\n aggregateValue,\n visible,\n invisible,\n curPeriod,\n period,\n onPeriodChange,\n createFakeData,\n filterItems,\n onFilter,\n } = props;\n\n const mergedData = data.length\n ? data\n : (createFakeData?.(\n { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n ) as any[]);\n\n return (\n <div>\n {filterItems && filterItems.length > 0 && (\n <Box mb={4}>\n <DataFilter\n items={filterItems}\n onFilter={onFilter || (() => {})}\n className=\"oui-border-none oui-py-0\"\n />\n </Box>\n )}\n <Tabs\n value={period || \"\"}\n defaultValue={PeriodType.MONTH}\n classNames={{ tabsList: \"oui-justify-between\", trigger: \"oui-w-1/4\" }}\n onValueChange={(value) => onPeriodChange(value as PeriodType)}\n >\n <TabPanel\n title={t(\"common.select.1d\")}\n value={PeriodType.DAY}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (data?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n title={t(\"common.select.7d\")}\n value={PeriodType.WEEK}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (data?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n title={t(\"common.select.30d\")}\n value={PeriodType.MONTH}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (data?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n title={t(\"common.select.90d\")}\n value={PeriodType.QUARTER}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n </Tabs>\n <Flex justify=\"between\" itemAlign=\"center\" gap={2} my={4}>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.roi\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} rule=\"percentages\" coloring>\n {invisible ? \"--\" : aggregateValue.roi}\n </Text.numeral>\n </Flex>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.pnl\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} coloring showIdentifier>\n {invisible ? \"--\" : aggregateValue.pnl}\n </Text.numeral>\n </Flex>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.volume\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} coloring={false}>\n {invisible ? \"--\" : aggregateValue.vol}\n </Text.numeral>\n </Flex>\n </Flex>\n <Tabs defaultValue={\"dailyPnl\"}>\n <TabPanel\n value={\"dailyPnl\"}\n title={t(\"portfolio.overview.performance.dailyPnl\")}\n className=\"oui-min-h-40\"\n >\n <PnLBarChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n value={\"cumulativePnl\"}\n title={t(\"portfolio.overview.performance.cumulativePnl\")}\n className=\"oui-min-h-40\"\n >\n <PnlAreaChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n value={\"volume\"}\n title={t(\"portfolio.overview.performance.volume\", { period: \"\" })}\n className=\"oui-min-h-40\"\n >\n <div\n className={cn(\n \"oui-h-[144px] oui-w-full\",\n (invisible || (mergedData?.length ?? 0) <= 2) &&\n \"chart-invisible\",\n )}\n >\n <VolBarChart\n data={(mergedData ?? []).map((item: any) => ({\n date: item.date,\n volume: item.perp_volume ?? 0,\n opacity: (item.perp_volume ?? 0) > 0 ? 1 : 0,\n }))}\n className=\"oui-size-full\"\n />\n </div>\n </TabPanel>\n </Tabs>\n </div>\n );\n};\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport {\n registerSimpleDialog,\n registerSimpleSheet,\n} from \"@kodiak-finance/orderly-ui\";\nimport { usePerformanceScript } from \"..\";\nimport { localKey } from \"../provider/overviewProvider\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { PerformanceMobileUI } from \"./performance.ui\";\n\nexport const PerformanceMobileWidget: React.FC = () => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const { visible, invisible } = usePerformanceScript();\n return (\n <PerformanceMobileUI\n {...pick(\n [\n \"data\",\n \"curPeriod\",\n \"aggregateValue\",\n \"onPeriodChange\",\n \"createFakeData\",\n \"period\",\n \"filterItems\",\n \"onFilter\",\n ],\n state,\n )}\n visible={visible}\n invisible={invisible}\n />\n );\n};\n\nexport const PerformanceMobileSheetId = \"PerformanceMobileSheetId\";\n\nexport const PerformanceMobileDialogId = \"PerformanceMobileDialogId\";\n\nregisterSimpleSheet(PerformanceMobileSheetId, PerformanceMobileWidget, {\n title: () => i18n.t(\"portfolio.overview.performance\"),\n});\n\nregisterSimpleDialog(PerformanceMobileDialogId, PerformanceMobileWidget, {\n title: () => i18n.t(\"portfolio.overview.performance\"),\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { TWType } from \"@kodiak-finance/orderly-hooks\";\nimport { useRewardsData } from \"../mobile/useRewardsData.script\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { OverviewContext, OverviewContextState } from \"./overviewContext\";\n\nexport const localKey = \"portfolio_performance_period\";\n\nexport const OverviewProvider: FC<PropsWithChildren<{ type?: TWType }>> = (\n props,\n) => {\n const { type, children } = props;\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const rewardsData = useRewardsData({ type: type });\n\n const memoizedValue = useMemo<OverviewContextState>(() => {\n return {\n ...state,\n type: type,\n ...rewardsData,\n };\n }, [state, type, rewardsData]);\n\n return (\n <OverviewContext.Provider value={memoizedValue}>\n {children}\n </OverviewContext.Provider>\n );\n};\n","import { useMemo, useRef, useEffect } from \"react\";\nimport {\n useAllBrokers,\n useConfig,\n useCurEpochEstimate,\n useEpochInfo,\n useGetClaimed,\n useAccount,\n RefferalAPI,\n usePrivateQuery,\n noCacheConfig,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { DistributionId, TWType } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const useRewardsData = ({ type = TWType.normal }: { type?: TWType }) => {\n const totalOrderClaimedReward = useGetClaimed(\n type === TWType.mm ? DistributionId.mmOrder : DistributionId.order,\n );\n const [curEpochEstimate] = useCurEpochEstimate(type);\n const [brokers] = useAllBrokers();\n const { state } = useAccount();\n const { data, mutate } = usePrivateQuery<RefferalAPI.ReferralInfo>(\n \"/v1/referral/info\",\n { revalidateOnFocus: true, errorRetryCount: 3, ...noCacheConfig },\n );\n\n const epochList = useEpochInfo(type as TWType);\n const brokerId = useConfig(\"brokerId\");\n\n const brokerName = useMemo(() => {\n return brokers?.[brokerId];\n }, [brokerId, brokers]);\n\n const lastStete = useRef<AccountStatusEnum>(AccountStatusEnum.NotConnected);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (lastStete.current !== state.status) {\n lastStete.current = state.status;\n timerRef.current = setTimeout(() => {\n mutate();\n }, 1000);\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, [state.status]);\n\n return {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n referralInfo: data,\n };\n};\n\nexport const useRewardsDataScript = () => {\n const {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n referralInfo,\n } = useOverviewContext();\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n const isSignIn =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n return {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n isSignIn,\n referralInfo,\n wrongNetwork,\n };\n};\n\nexport type UseRewardsDataReturn = ReturnType<typeof useRewardsData>;\n","import React, { FC } from \"react\";\nimport { Grid, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { MobileOverview } from \"./mobile\";\nimport { MobileOverviewProps } from \"./mobile/mobile.widget\";\nimport { OverviewProvider } from \"./provider/overviewProvider\";\n\nconst LazyAssetWidget = React.lazy(() =>\n import(\"./assets\").then((mod) => {\n return { default: mod.AssetWidget };\n }),\n);\n\nconst LazyAssetsChartWidget = React.lazy(() =>\n import(\"./assetChart\").then((mod) => {\n return { default: mod.AssetsChartWidget };\n }),\n);\n\nconst LazyPerformanceWidget = React.lazy(() =>\n import(\"./performance\").then((mod) => {\n return { default: mod.PerformanceWidget };\n }),\n);\n\nconst LazyHistoryDataGroupWidget = React.lazy(() =>\n import(\"./historyDataGroup\").then((mod) => {\n return { default: mod.HistoryDataGroupWidget };\n }),\n);\n\nexport type OverviewPageProps = MobileOverviewProps;\n\nexport const OverviewPage: FC<OverviewPageProps> = (props) => {\n const { isMobile } = useScreen();\n return (\n <OverviewProvider>\n {isMobile ? (\n <MobileOverview\n hideAffiliateCard={props.hideAffiliateCard}\n hideTraderCard={props.hideTraderCard}\n />\n ) : (\n <Grid cols={2} gap={4}>\n <React.Suspense fallback={null}>\n <LazyAssetWidget />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyAssetsChartWidget />\n </React.Suspense>\n <Grid.span colSpan={2}>\n <React.Suspense fallback={null}>\n <LazyPerformanceWidget />\n </React.Suspense>\n </Grid.span>\n <Grid.span colSpan={2}>\n <React.Suspense fallback={null}>\n <LazyHistoryDataGroupWidget />\n </React.Suspense>\n </Grid.span>\n </Grid>\n )}\n </OverviewProvider>\n );\n};\n","import { FC } from \"react\";\nimport { ENVType, useGetEnv } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { DepositStatusWidget } from \"@kodiak-finance/orderly-ui-transfer\";\nimport { useLayoutContext } from \"../../../layout/context\";\nimport { useAssetScript } from \"../assets\";\nimport { PortfolioChartsMobileWidget } from \"../portfolioChartsMobile\";\nimport { AccountStatusMobile } from \"./accountStatus.ui.mobile\";\nimport { AffiliateCardMobile } from \"./affiliateCard.ui.mobile\";\nimport { PortfolioHandleMobile } from \"./portfolioHandle.ui.mobile\";\nimport { PortfolioValueMobile } from \"./portfolioVaule.ui.mobile\";\nimport { SettingRouterMobile } from \"./settingRouter.ui.mobile\";\nimport { TraderCardMobile } from \"./traderCard.ui.mobile\";\n// import { TradingRewardsCardMobile } from \"./tradingRewardsCard.ui.mobile\";\nimport { useRewardsDataScript } from \"./useRewardsData.script\";\n\nexport type MobileOverviewProps = {\n /** show affiliate card, mobile only */\n hideAffiliateCard?: boolean;\n /** show trader card, mobile only */\n hideTraderCard?: boolean;\n};\n\nexport const MobileOverview: FC<MobileOverviewProps> = (props) => {\n const { hideAffiliateCard, hideTraderCard } = props;\n const {\n canTrade,\n onWithdraw,\n onDeposit,\n portfolioValue,\n unrealPnL,\n unrealROI,\n visible,\n namespace,\n toggleVisible,\n onTransfer,\n isMainAccount,\n hasSubAccount,\n } = useAssetScript();\n const { t } = useTranslation();\n const rewardsData = useRewardsDataScript();\n const layoutContext = useLayoutContext();\n const { onRouteChange } = useAppContext();\n const env = useGetEnv();\n\n const goToClaim = () => {\n const url = `https://${\n env !== ENVType.prod ? `${env}-` : \"\"\n }app.orderly.network/tradingRewards`;\n window.open(url, \"_blank\");\n };\n\n const navigateToPortfolioHistory =\n typeof onRouteChange === \"function\"\n ? () => {\n onRouteChange({\n href: \"/portfolio/history\",\n name: t(\"trading.history\"),\n });\n }\n : undefined;\n\n // console.log('rewards data', rewardsData, layoutContext, props);\n\n return (\n <>\n <div className=\"oui-my-1 oui-px-3\">\n <AccountStatusMobile />\n </div>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-gap-5 oui-px-3\"\n >\n <Flex direction=\"column\" width=\"100%\" gapY={2}>\n <PortfolioValueMobile\n toggleVisible={toggleVisible}\n portfolioValue={portfolioValue}\n unrealPnL={unrealPnL}\n unrealROI={unrealROI}\n visible={visible}\n canTrade={canTrade}\n namespace={namespace}\n routerAdapter={layoutContext?.routerAdapter}\n />\n <DepositStatusWidget onClick={navigateToPortfolioHistory} />\n <PortfolioChartsMobileWidget />\n </Flex>\n <PortfolioHandleMobile\n disabled={!canTrade}\n onWithdraw={onWithdraw}\n onDeposit={onDeposit}\n onTransfer={onTransfer}\n isMainAccount={isMainAccount}\n routerAdapter={layoutContext?.routerAdapter}\n hasSubAccount={hasSubAccount}\n />\n {(!hideAffiliateCard || !hideTraderCard) && (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-gap-3\"\n >\n <Flex direction=\"row\" className=\"oui-flex-1 oui-gap-3\">\n {!hideAffiliateCard && (\n <AffiliateCardMobile\n referralInfo={rewardsData.referralInfo}\n routerAdapter={layoutContext?.routerAdapter}\n />\n )}\n {!hideTraderCard && (\n <TraderCardMobile\n referralInfo={rewardsData.referralInfo}\n routerAdapter={layoutContext?.routerAdapter}\n />\n )}\n </Flex>\n {/* Disable trading rewards card for now. Set to row */}\n {/* <Flex direction=\"column\" className=\"oui-flex-1\">\n <TradingRewardsCardMobile {...rewardsData} goToClaim={goToClaim} />\n </Flex> */}\n </Flex>\n )}\n <SettingRouterMobile routerAdapter={layoutContext?.routerAdapter} />\n </Flex>\n </>\n );\n};\n","import React from \"react\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { useAssetsChartScript } from \"../assetChart\";\nimport { usePortfolioChartsState } from \"./portfolioChartsMobile.script\";\nimport { PortfolioChartsMobileUI } from \"./portfolioChartsMobile.ui\";\n\nexport const PortfolioChartsMobileWidget: React.FC = () => {\n const { data, invisible } = useAssetsChartScript();\n const state = usePortfolioChartsState();\n return (\n <PortfolioChartsMobileUI\n data={data || EMPTY_LIST}\n invisible={invisible}\n {...state}\n />\n );\n};\n","import { useCallback } from \"react\";\nimport { useLocalStorage, usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { ORDERLY_ASSETS_VISIBLE_KEY } from \"../../assets/type\";\nimport { PerformanceMobileSheetId } from \"../performanceMobileDialog\";\n\nexport const usePortfolioChartsState = () => {\n const [data] = usePositionStream();\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n const onPerformanceClick = useCallback(() => {\n return modal.show(PerformanceMobileSheetId);\n }, []);\n return {\n unrealPnL: data?.aggregated.total_unreal_pnl,\n unrealROI: data?.totalUnrealizedROI,\n visible: visible as boolean,\n setVisible: setVisible,\n onPerformanceClick: onPerformanceClick,\n } as const;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useId } from \"react\";\nimport { Area, AreaChart } from \"@kodiak-finance/orderly-chart\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { ChevronRightIcon, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { usePortfolioChartsState } from \".\";\n\nexport const PortfolioChartsMobileUI: React.FC<\n ReturnType<typeof usePortfolioChartsState> & {\n data: any[];\n invisible?: boolean;\n }\n> = (props) => {\n const { data, invisible, unrealPnL, unrealROI, visible, onPerformanceClick } =\n props;\n const { t } = useTranslation();\n const colorId = useId();\n return (\n <Flex\n p={4}\n width={\"100%\"}\n itemAlign=\"center\"\n justify=\"between\"\n className={cn(\n \"oui-relative oui-overflow-hidden oui-rounded-2xl oui-border oui-border-solid oui-border-line-12 oui-bg-base-9\",\n )}\n >\n <Flex\n width={\"100%\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n direction={\"column\"}\n gap={2}\n >\n <Text size=\"xs\" intensity={54}>\n {t(\"common.unrealizedPnl\")}\n </Text>\n <Flex justify={\"start\"} itemAlign={\"center\"}>\n <Text.pnl coloring size=\"base\" weight=\"semibold\" visible={visible}>\n {unrealPnL}\n </Text.pnl>\n <Text.roi\n coloring\n rule=\"percentages\"\n size=\"sm\"\n weight=\"semibold\"\n prefix={\"(\"}\n suffix={\")\"}\n visible={visible}\n >\n {unrealROI}\n </Text.roi>\n </Flex>\n <Text\n size=\"xs\"\n intensity={54}\n className=\"oui-flex oui-items-center oui-justify-start oui-gap-1\"\n onClick={onPerformanceClick}\n >\n {t(\"portfolio.overview.performance\")}\n <ChevronRightIcon className=\"oui-text-base-contrast-54\" />\n </Text>\n </Flex>\n <Flex\n width={\"100%\"}\n justify={\"center\"}\n itemAlign={\"center\"}\n direction={\"column\"}\n >\n <AreaChart data={data || EMPTY_LIST} width={160} height={52}>\n {!invisible && (\n <>\n <defs>\n <linearGradient id={colorId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop stopColor=\"#00B49E\" offset=\"0%\" stopOpacity={0.5} />\n <stop stopColor=\"#00B49E\" offset=\"100%\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <Area\n type=\"natural\"\n dataKey=\"account_value\"\n stroke={\"rgb(41, 233, 169)\"}\n strokeWidth={1.5}\n dot={false}\n isAnimationActive={false}\n fill={`url(#${colorId})`}\n />\n </>\n )}\n </AreaChart>\n </Flex>\n </Flex>\n );\n};\n","import { FC, SVGProps, useCallback, useMemo } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useChains,\n useLocalStorage,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum, ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n modal,\n toast,\n formatAddress,\n Flex,\n CopyIcon,\n ChainIcon,\n} from \"@kodiak-finance/orderly-ui\";\n\ninterface StatusInfo {\n title: string;\n description: string;\n titleColor?: any;\n titleClsName?: string;\n}\n\nconst useCurrentStatus = () => {\n const { state, account } = useAccount();\n const { wrongNetwork, disabledConnect, connectWallet } = useAppContext();\n const { t } = useTranslation();\n\n const statusText = {\n wrongNetwork: {\n description: t(\"connector.wrongNetwork.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#D25F00_0%,transparent_30%)]\",\n },\n connectWallet: {\n description: t(\"connector.trade.connectWallet.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#27FDFE_0%,transparent_30%)]\",\n },\n notSignedIn: {\n description: t(\"connector.trade.createAccount.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#335FFC_0%,transparent_30%)]\",\n },\n disabledTrading: {\n description: t(\"connector.trade.enableTrading.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#335FFC_0%,transparent_30%)]\",\n },\n default: {\n description: \"\",\n rootClass: \"\",\n arrowIconClass: \"\",\n textClass: \"\",\n },\n };\n\n return useMemo(() => {\n if (disabledConnect) {\n return statusText.connectWallet;\n }\n\n if (wrongNetwork) {\n return statusText.wrongNetwork;\n }\n\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return statusText.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return statusText.notSignedIn;\n case AccountStatusEnum.DisabledTrading:\n return statusText.disabledTrading;\n default:\n return statusText.default;\n }\n }, [state.status, wrongNetwork]);\n};\n\nexport function EVMChainPopover({ children }: { children: React.ReactNode }) {\n // const [chains] = useState(getChainsByNetwork(\"mainnet\"));\n const [chains] = useChains(\"mainnet\", {\n pick: \"network_infos\",\n });\n const { t } = useTranslation();\n\n const showDialog = () => {\n modal.dialog({\n title: t(\"connector.privy.supportedEvmChain\"),\n size: \"xs\",\n content: (\n <div>\n <div className=\"oui-p-1 oui-grid oui-grid-cols-2 oui-gap-x-2 oui-gap-y-3 oui-text-2xs oui-text-base-contrast-54\">\n {chains.map((item, key) => (\n <div\n key={key}\n className=\"oui-flex oui-items-center oui-justify-start oui-gap-1\"\n >\n <ChainIcon chainId={item.chain_id} size=\"2xs\" />\n <div>{item.name}</div>\n </div>\n ))}\n </div>\n </div>\n ),\n });\n };\n\n return <button onClick={showDialog}>{children}</button>;\n}\n\nexport const MoreIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.00521 6.66797C8.74161 6.66797 9.33854 7.26464 9.33854 8.0013C9.33854 8.73797 8.74161 9.33464 8.00521 9.33464C7.26881 9.33464 6.67188 8.73797 6.67188 8.0013C6.67188 7.26464 7.26881 6.66797 8.00521 6.66797Z\" />\n <path d=\"M3.33333 6.66797C4.06973 6.66797 4.66667 7.26464 4.66667 8.0013C4.66667 8.73797 4.06973 9.33464 3.33333 9.33464C2.59693 9.33464 2 8.73797 2 8.0013C2 7.26464 2.59693 6.66797 3.33333 6.66797Z\" />\n <path d=\"M12.6666 6.66797C13.403 6.66797 14 7.26464 14 8.0013C14 8.73797 13.403 9.33464 12.6666 9.33464C11.9302 9.33464 11.3333 8.73797 11.3333 8.0013C11.3333 7.26464 11.9302 6.66797 12.6666 6.66797Z\" />\n </svg>\n);\n\nconst EVMChains = () => {\n return (\n <div className=\"oui-relative oui-flex oui-items-center oui-justify-center\">\n <div className=\"oui-flex oui-h-[18px] oui-items-center oui-justify-center \">\n <img\n src=\"https://oss.orderly.network/static/sdk/portfolio/chains.png\"\n className=\"oui-relative oui-z-0 oui-h-[18px] oui-w-[49px]\"\n />\n </div>\n <div className=\"oui-relative oui-left-[-9px] oui-flex oui-items-center oui-justify-center oui-gap-1\">\n <div className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-[#282e3a]\">\n <EVMChainPopover>\n <MoreIcon\n className=\"oui-relative oui-z-10 oui-size-3 oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n style={{ zIndex: 1 }}\n />\n </EVMChainPopover>\n </div>\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast\">\n Evm\n </div>\n </div>\n </div>\n );\n};\n\nconst ShowAccount: FC = () => {\n const { state, account } = useAccount();\n const { namespace } = useWalletConnector();\n const { t } = useTranslation();\n const onCopyAddress = () => {\n navigator.clipboard.writeText(state.address ?? \"\");\n toast.success(t(\"common.copy.copied\"));\n };\n\n const currentNamespace = useMemo(() => {\n if (namespace) {\n return namespace;\n }\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return getLinkDeviceStorage()?.chainNamespace;\n }\n return null;\n }, [namespace, state.status]);\n\n const leftNode = useMemo(() => {\n if (!state.address) {\n return;\n }\n return (\n <Flex className=\"oui-text-base oui-text-base-contrast\" gapX={2}>\n {formatAddress(state.address ?? \"\")}\n <button\n className=\"oui-cursor-pointer\"\n onClick={() => {\n onCopyAddress();\n }}\n >\n <CopyIcon\n size={18}\n className=\"oui-text-base-contrast-80\"\n opacity={1}\n />\n </button>\n </Flex>\n );\n }, [state.address]);\n const rightNode = useMemo(() => {\n if (currentNamespace === ChainNamespace.evm) {\n return <EVMChains />;\n }\n\n return (\n <Flex gapX={1} itemAlign={\"center\"} className=\"oui-text-2xs\">\n <img\n src=\"https://oss.orderly.network/static/sdk/solana-logo.png\"\n className=\"oui-w-[15px]\"\n />\n Solana\n </Flex>\n );\n }, [currentNamespace]);\n\n const bgClass = useMemo(() => {\n let bg = \"\";\n if (currentNamespace == ChainNamespace.evm) {\n bg =\n \"oui-bg-[linear-gradient(15deg,#283BEE_-11%,transparent_30%,transparent_77%,#A53411_100%)]\";\n } else if (currentNamespace == ChainNamespace.solana) {\n bg =\n \"oui-bg-[linear-gradient(15deg,#7400D0_-11%,transparent_30%,transparent_77%,#009A7E_100%)]\";\n }\n return bg;\n }, [currentNamespace]);\n return (\n <div\n className={cn([\n \"oui-flex oui-h-[44px] oui-w-full oui-items-center oui-justify-between oui-rounded-[10px] oui-px-3 oui-py-[10px]\",\n bgClass,\n ])}\n >\n {leftNode}\n {rightNode}\n </div>\n );\n};\n\nexport const AccountStatusMobile: FC = () => {\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n const { description, rootClass } = useCurrentStatus();\n\n const alreadyShowAccount = useMemo(() => {\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return true;\n }\n if (wrongNetwork) {\n return false;\n }\n return state.status >= AccountStatusEnum.EnableTrading;\n }, [state.status, wrongNetwork]);\n\n if (alreadyShowAccount) {\n return <ShowAccount />;\n }\n\n return (\n <div\n className={cn([\n \"oui-flex oui-h-[44px] oui-w-full oui-items-center oui-justify-center oui-rounded-[10px] oui-px-3 oui-py-[10px]\",\n rootClass,\n // \"oui-bg-linear-65\",\n // \"oui-from-[-20%]\",\n // \"oui-to-[40%]\",\n // \" oui-from-[#FF7B00]\",\n // \" oui-to-[#FFEA00]\",\n ])}\n >\n <div\n className={cn(\n \"oui-flex oui-items-center oui-justify-end oui-rounded-[10px] oui-text-xs oui-font-semibold\",\n \"oui-text-base-contrast-54\",\n )}\n >\n {description}\n </div>\n </div>\n );\n};\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n","import { FC } from \"react\";\nimport { RefferalAPI as API } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n AffiliateIcon,\n ChevronRightIcon,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\ntype AffiliateCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const AffiliateCardMobile: FC<AffiliateCardMobileProps> = (props) => {\n const { t } = useTranslation();\n const { referralInfo, routerAdapter } = props;\n const rebate = referralInfo?.referrer_info?.[\"30d_referrer_rebate\"];\n return (\n <Flex\n className=\"\n oui-portfolio-affiliate-card\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[112px] \n oui-w-full \n oui-flex-col \n oui-items-start \n oui-rounded-xl \n oui-border \n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-primary-start)/0.36)] \n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-primary-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-primary-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold\">\n {t(\"affiliate.asAffiliate.affilates\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"affiliate.commission\")}\n </Text>\n </Flex>\n <AffiliateIcon />\n </Flex>\n <Flex className=\"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\">\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/USDC.png\"\n alt=\"USDC\"\n className=\"oui-size-5\"\n />\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(rebate) && rebate !== 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(rebate, { fix: 2, fallback: \"--\" })}\n </Text>\n <Text className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n (30D)\n </Text>\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={() => {\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate?tab=affiliate\",\n name: t(\"tradingRewards.rewards\"),\n });\n }}\n />\n </Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n CalendarMinusIcon,\n ArrowLeftRightIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onTransfer?: () => void;\n isMainAccount?: boolean;\n routerAdapter?: RouterAdapter;\n hasSubAccount?: boolean;\n};\n\nexport const PortfolioHandleMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n const onGotoHistory = () => {\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.History,\n name: t(\"trading.history\"),\n });\n };\n\n const onGotoSymbolPerformance = () => {\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.SymbolPerformance,\n name: t(\"portfolio.symbolPerformance\"),\n });\n };\n\n return (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n height={\"71px\"}\n className=\"oui-gap-3 oui-bg-transparent\"\n >\n {props.isMainAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onDeposit}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowDownSquareFillIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.deposit\")}\n </Text>\n </Flex>\n )}\n {props.hasSubAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onTransfer}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowLeftRightIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.transfer\")}\n </Text>\n </Flex>\n )}\n {props.isMainAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onWithdraw}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowUpSquareFillIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.withdraw\")}\n </Text>\n </Flex>\n )}\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n >\n <div\n className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\"\n onClick={onGotoHistory}\n >\n <CalendarMinusIcon\n size={28}\n color=\"white\"\n opacity={1}\n viewBox=\"0 0 28 28\"\n className=\"oui-w-[28px] oui-h-[28px]\"\n />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"trading.history\")}\n </Text>\n </Flex>\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={onGotoSymbolPerformance}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-text-white\"\n >\n <path\n d=\"M13.5 3.75C12.8096 3.75 12.375 4.18467 12.375 4.875V12.375C12.375 13.0654 12.8096 13.5 13.5 13.5H14.625C15.3154 13.5 15.75 13.0654 15.75 12.375V4.875C15.75 4.18467 15.3154 3.75 14.625 3.75H13.5ZM13.5 5.25H14.625V12.375H13.5V5.25ZM8.25 6.75C7.55964 6.75 7.125 7.18467 7.125 7.875V12.375C7.125 13.0654 7.55964 13.5 8.25 13.5H9.375C10.0654 13.5 10.5 13.0654 10.5 12.375V7.875C10.5 7.18467 10.0654 6.75 9.375 6.75H8.25ZM8.25 8.25H9.375V12.375H8.25V8.25ZM3 9.75C2.30964 9.75 1.875 10.1847 1.875 10.875V12.375C1.875 13.0654 2.30964 13.5 3 13.5H4.125C4.81536 13.5 5.25 13.0654 5.25 12.375V10.875C5.25 10.1847 4.81536 9.75 4.125 9.75H3ZM3 11.25H4.125V12.375H3V11.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"portfolio.symbolPerformance\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { parseJSON, useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AccountStatusEnum,\n ChainNamespace,\n} from \"@kodiak-finance/orderly-types\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n cn,\n ArrowRightShortIcon,\n EyeIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n portfolioValue: number | null;\n unrealPnL: number;\n unrealROI: number;\n visible: boolean;\n namespace: string | null;\n toggleVisible: () => void;\n canTrade: boolean;\n routerAdapter?: RouterAdapter;\n};\n\nexport const PortfolioValueMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n const { state } = useAccount();\n\n const currentNamespace = useMemo(() => {\n if (props.namespace) {\n return props.namespace;\n }\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return getLinkDeviceStorage()?.chainNamespace;\n }\n return null;\n }, [props.namespace, state.status]);\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className={cn([\n \"oui-relative oui-items-start oui-overflow-hidden oui-rounded-2xl oui-bg-base-9\",\n currentNamespace === ChainNamespace.evm && \"oui-bg-[#283BEE]\",\n currentNamespace === ChainNamespace.solana && \"oui-bg-[#630EAD]\",\n ])}\n p={4}\n >\n <Flex direction=\"row\" gapX={1} itemAlign={\"center\"}>\n <Text className=\"oui-text-sm oui-text-base-contrast-54\">\n {t(\"portfolio.overview.handle.title\")}\n </Text>\n <EyeIcon\n size={16}\n className={cn(\n props.canTrade ? \"oui-text-base-contrast-54\" : \"oui-hidden\",\n )}\n onClick={props.toggleVisible}\n />\n </Flex>\n <Flex\n direction=\"row\"\n gapX={1}\n itemAlign={\"baseline\"}\n className=\"oui-mt-1\"\n >\n <Text.numeral\n visible={props.visible}\n className=\"oui-text-3xl oui-font-bold oui-text-base-contrast\"\n >\n {props.portfolioValue ?? \"--\"}\n </Text.numeral>\n <Text className=\"oui-text-base oui-font-bold oui-text-base-contrast-80\">\n USDC\n </Text>\n </Flex>\n <Flex\n direction=\"row\"\n gapX={1}\n itemAlign={\"center\"}\n className=\"oui-text-sm oui-text-base-contrast\"\n >\n <Text.pnl visible={props.visible}>{props.unrealPnL ?? \"--\"}</Text.pnl>\n <Text.roi\n visible={props.visible}\n rule=\"percentages\"\n prefix={\"(\"}\n suffix={\")\"}\n >\n {props.unrealROI ?? \"--\"}\n </Text.roi>\n </Flex>\n <div\n className=\"oui-absolute oui-right-0 oui-top-0 oui-flex oui-h-full oui-items-center oui-justify-center oui-px-4\"\n onClick={() =>\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.Assets,\n name: \"Assets\",\n })\n }\n >\n <ArrowRightShortIcon size={18} color=\"white\" opacity={0.54} />\n </div>\n </Flex>\n );\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n SettingFillIcon,\n ChevronRightIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n routerAdapter?: RouterAdapter;\n};\n\nexport const SettingRouterMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n className=\"oui-cursor-pointer oui-items-center oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-4 oui-mb-3\"\n onClick={() =>\n props?.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.Setting,\n name: t(\"portfolio.setting\"),\n })\n }\n >\n <SettingFillIcon size={18} opacity={0.98} color=\"white\" />\n <Text className=\"oui-text-base oui-font-semibold oui-text-base-contrast-80\">\n {t(\"portfolio.setting\")}\n </Text>\n <ChevronRightIcon\n className=\"oui-ml-auto\"\n size={18}\n opacity={0.36}\n color=\"white\"\n />\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { RefferalAPI as API } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n TraderMobileIcon,\n ChevronRightIcon,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\ntype TraderCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const TraderCardMobile: FC<TraderCardMobileProps> = (props) => {\n const { t } = useTranslation();\n const { referralInfo, routerAdapter } = props;\n const rebate = referralInfo?.referee_info?.[\"30d_referee_rebate\"];\n return (\n <Flex\n className=\"\n oui-portfolio-trader-card\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[112px] \n oui-w-full \n oui-flex-col \n oui-items-start \n oui-rounded-xl \n oui-border\n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-success-start)/0.36)]\n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-success-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-success-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold\">\n {t(\"affiliate.trader.rebates\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"affiliate.trader.tradingRebates\")}\n </Text>\n </Flex>\n <TraderMobileIcon />\n </Flex>\n\n <Flex\n className={cn(\n \"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\",\n )}\n >\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/USDC.png\"\n alt=\"USDC\"\n className=\"oui-size-5\"\n />\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(rebate) && rebate !== 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(rebate, { fix: 2, fallback: \"--\" })}\n </Text>\n <Text className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n (30D)\n </Text>\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={() => {\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate?tab=trader\",\n name: t(\"tradingRewards.rewards\"),\n });\n }}\n />\n </Flex>\n </Flex>\n );\n};\n","export { FeeTierPage } from \"./page\";\nexport { useFeeTierScript } from \"./feeTier.script\";\nexport type { FeeDataType, UseFeeTierScriptOptions } from \"./feeTier.script\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Flex,\n Text,\n Card,\n Divider,\n DataTable,\n Column,\n useScreen,\n cn,\n TanstackColumn,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { FeeDataType, useFeeTierScriptReturn } from \"./feeTier.script\";\n\nconst LazyFeeTierHeader = React.lazy(() =>\n import(\"./feeTierHeader\").then((mod) => {\n return { default: mod.FeeTierHeader };\n }),\n);\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport type FeeTierHeaderProps = {\n tier?: number;\n vol?: number;\n};\n\ntype FeeTierTableProps = {\n columns: Column<any>[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\n vol?: number | null;\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal?: any;\n active?: any;\n };\n onCell?: (\n column: TanstackColumn<any>,\n record: any,\n index: number,\n ) => {\n normal?: any;\n active?: any;\n };\n};\n\nexport const FeeTierTable: React.FC<FeeTierTableProps> = (props) => {\n const { isMobile } = useScreen();\n\n const { tier, columns, dataSource, onRow, onCell } = props;\n\n const internalOnRow = useCallback(\n (record: FeeDataType, index: number) => {\n const config =\n typeof onRow === \"function\"\n ? onRow(record, index)\n : { normal: undefined, active: undefined };\n const active = tier !== undefined && tier !== null && tier === index + 1;\n if (active) {\n return {\n \"data-state\": \"active\",\n className: cn(\n \"oui-pointer-events-none oui-h-[54px] oui-text-[rgba(0,0,0,0.88)] oui-gradient-brand\",\n ),\n ...config.active,\n };\n } else {\n return {\n \"data-state\": \"none\",\n className: cn(\"oui-h-[54px]\"),\n ...config.normal,\n };\n }\n },\n [tier, onRow],\n );\n\n const internalOnCell = useCallback(\n (\n column: TanstackColumn<FeeDataType>,\n record: FeeDataType,\n index: number,\n ) => {\n const config =\n typeof onCell === \"function\"\n ? onCell(column, record, index)\n : { normal: undefined, active: undefined };\n const active = tier !== undefined && tier !== null && tier === index + 1;\n const isFirstColumn = column.getIsFirstColumn();\n const isLastColumn = column.getIsLastColumn();\n if (active) {\n return {\n className: cn(\n isFirstColumn && \"oui-rounded-l-lg\",\n isLastColumn && \"oui-rounded-r-lg\",\n ),\n ...config.active,\n };\n } else {\n return {\n className: \"\",\n ...config.normal,\n };\n }\n },\n [tier, onCell],\n );\n\n return (\n <Box\n className={cn(\n \"oui-relative oui-border-b oui-border-line-4\",\n isMobile ? \"oui-mt-2 oui-rounded-xl oui-bg-base-9\" : undefined,\n )}\n >\n <DataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-bg-transparent\" }}\n onRow={internalOnRow}\n onCell={internalOnCell}\n columns={columns}\n dataSource={dataSource}\n />\n </Box>\n );\n};\n\nconst CardTitle: React.FC = () => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <Flex itemAlign={\"center\"} justify={\"center\"} gap={2}>\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.feeTier.updatedDailyBy\")}\n </Text>\n <Text size=\"xs\" intensity={80}>\n ~2:15 UTC\n </Text>\n </Flex>\n );\n }\n return (\n <Flex itemAlign={\"center\"} justify={\"between\"}>\n <Text size={\"lg\"}>{t(\"portfolio.feeTier\")}</Text>\n <Flex itemAlign={\"center\"} justify={\"center\"} gap={1}>\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.feeTier.updatedDailyBy\")}\n </Text>\n <Text size=\"xs\" intensity={80}>\n ~2:15 UTC\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, headerDataAdapter, onRow, onCell } =\n props;\n const { isMobile } = useScreen();\n return (\n <Card\n title={<CardTitle />}\n id=\"oui-portfolio-fee-tier\"\n className=\"w-full\"\n classNames={{\n root: isMobile ? \"oui-bg-transparent oui-p-2\" : \"oui-bg-base-9\",\n }}\n >\n {!isMobile && <Divider />}\n <React.Suspense fallback={null}>\n <LazyFeeTierHeader\n vol={vol}\n tier={tier}\n headerDataAdapter={headerDataAdapter}\n />\n </React.Suspense>\n <FeeTierTable\n dataSource={dataSource}\n columns={columns}\n vol={vol}\n tier={tier}\n onRow={onRow}\n onCell={onCell}\n />\n </Card>\n );\n};\n","import React from \"react\";\nimport { useFeeTierScript, type UseFeeTierScriptOptions } from \".\";\nimport { FeeTier } from \"./feeTier.ui\";\n\nexport type FeeTierWidgetProps = UseFeeTierScriptOptions;\n\nexport const FeeTierWidget: React.FC<FeeTierWidgetProps> = (props) => {\n const state = useFeeTierScript(props);\n return <FeeTier {...state} />;\n};\n","import React from \"react\";\nimport { FeeTierWidget, FeeTierWidgetProps } from \"./feeTier.widget\";\n\nexport type FeeTierPageProps = FeeTierWidgetProps;\n\nexport const FeeTierPage: React.FC<FeeTierPageProps> = (props) => {\n return <FeeTierWidget {...props} />;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { on } from \"events\";\nimport {\n useAccount,\n useAccountInfo,\n usePrivateQuery,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum, API } from \"@kodiak-finance/orderly-types\";\nimport type { Column, TanstackColumn } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useFeeTierColumns } from \"./column\";\nimport { dataSource as defaultDataSource } from \"./dataSource\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: Column<any>[],\n dataSource: any[],\n context?: {\n tier?: number;\n },\n ) => {\n columns: Column<any>[];\n dataSource: any[];\n };\n headerDataAdapter?: (original: any[]) => any[];\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal?: any;\n active?: any;\n };\n onCell?: (\n column: TanstackColumn<any>,\n record: any,\n index: number,\n ) => {\n normal?: any;\n active?: any;\n };\n};\n\nexport interface FeeDataType {\n tier: number | null;\n volume_min?: number | null;\n volume_max?: number | null;\n volume_node?: React.ReactNode;\n or?: string | null;\n maker_fee: string;\n taker_fee: string;\n}\n\nconst findCurrentTier = (feeList: FeeDataType[], data: API.AccountInfo) => {\n const { futures_taker_fee_rate = 0, futures_maker_fee_rate = 0 } = data;\n const takerRate = new Decimal(futures_taker_fee_rate).mul(0.01);\n const makerRate = new Decimal(futures_maker_fee_rate).mul(0.01);\n const findItem = feeList.find((item) => {\n const itemTakerRate = item.taker_fee.split(\"/\")?.[0].trim();\n const itemMakerRate = item.maker_fee.split(\"/\")?.[0].trim();\n return (\n itemTakerRate === `${takerRate.toNumber()}%` &&\n itemMakerRate === `${makerRate.toNumber()}%`\n );\n });\n return findItem?.tier;\n};\n\nexport const useFeeTierScript = (options?: UseFeeTierScriptOptions) => {\n const { dataAdapter, headerDataAdapter, onRow, onCell } = options || {};\n const [tier, setTier] = useState<number | null>();\n const { data, isLoading } = useAccountInfo();\n const { state } = useAccount();\n\n const cols = useFeeTierColumns();\n\n const { data: volumeStatistics } = usePrivateQuery<{\n perp_volume_last_30_days: number;\n }>(\"/v1/volume/user/stats\");\n\n const { columns, dataSource } = useMemo(() => {\n return typeof dataAdapter === \"function\"\n ? dataAdapter(cols, defaultDataSource, { tier: tier! })\n : { columns: cols, dataSource: defaultDataSource };\n }, [dataAdapter, cols, tier]);\n\n useEffect(() => {\n if (!data || isLoading) {\n return;\n }\n setTier(findCurrentTier(dataSource, data));\n }, [data, isLoading, dataSource]);\n\n const authData = useDataTap(\n {\n tier: tier,\n vol: volumeStatistics?.perp_volume_last_30_days,\n },\n {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n },\n );\n\n return {\n ...authData,\n columns: columns,\n dataSource: dataSource,\n onRow: onRow,\n onCell: onCell,\n headerDataAdapter: headerDataAdapter,\n };\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\nimport { numberToHumanStyle } from \"@kodiak-finance/orderly-utils\";\nimport type { FeeDataType } from \"./feeTier.script\";\n\nconst textStyle: React.CSSProperties = {\n fontVariantLigatures: \"none\",\n};\n\nexport const useFeeTierColumns = () => {\n const { t } = useTranslation();\n return useMemo<Column<FeeDataType>[]>(() => {\n return [\n {\n title: t(\"portfolio.feeTier.column.tier\"),\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: `${t(\"portfolio.feeTier.column.30dVolume\")} (USDC)`,\n dataIndex: \"volume\",\n align: \"center\",\n width: 180,\n render: (val, record) => {\n const { volume_min, volume_max, volume_node } = record;\n if (volume_node) {\n return volume_node;\n }\n if (!volume_min && !volume_max) {\n return <div style={textStyle}>--</div>;\n }\n if (volume_min && !volume_max) {\n return t(\"portfolio.feeTier.column.30dVolume.above\", {\n volume: numberToHumanStyle(\n volume_min,\n volume_min === 2500000 ? 1 : 0,\n ),\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: t(\"portfolio.feeTier.column.maker\"),\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 150,\n },\n {\n title: t(\"portfolio.feeTier.column.taker\"),\n dataIndex: \"taker_fee\",\n align: \"right\",\n width: 150,\n },\n ];\n }, [t]);\n};\n","import type { FeeDataType } from \"./feeTier.script\";\n\nexport const dataSource: FeeDataType[] = [\n {\n tier: 1,\n volume_min: 0,\n volume_max: 500000,\n maker_fee: \"0.025% / 0%\",\n taker_fee: \"0.04% / 0.05%\",\n },\n {\n tier: 2,\n volume_min: 500000,\n volume_max: 1000000,\n maker_fee: \"0.02% / 0%\",\n taker_fee: \"0.035% / 0.05%\",\n },\n {\n tier: 3,\n volume_min: 1000000,\n volume_max: 5000000,\n maker_fee: \"0.018% / 0%\",\n taker_fee: \"0.03% / 0.05%\",\n },\n {\n tier: 4,\n volume_min: 5000000,\n volume_max: 20000000,\n maker_fee: \"0.012% / 0%\",\n taker_fee: \"0.025% / 0.05%\",\n },\n {\n tier: 5,\n volume_min: 20000000,\n volume_max: 50000000,\n or: \"/\",\n maker_fee: \"0.009% / 0%\",\n taker_fee: \"0.022% / 0.05%\",\n },\n {\n tier: 6,\n volume_min: 50000000,\n volume_max: 100000000,\n or: \"/\",\n maker_fee: \"0.005% / 0%\",\n taker_fee: \"0.018% / 0.05%\",\n },\n {\n tier: 7,\n volume_min: 100000000,\n volume_max: undefined,\n or: \"/\",\n maker_fee: \"0% / 0%\",\n taker_fee: \"0.015% / 0.05%\",\n },\n];\n","import { useMemo, useState, useRef } from \"react\";\nimport React from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Flex,\n Text,\n Divider,\n Box,\n Tabs,\n TabPanel,\n DataFilter,\n formatAddress,\n Tooltip,\n InfoCircleIcon,\n Button,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionHistoryInstance,\n PositionsProps,\n CombinePositionsWidget,\n PositionsWidget,\n PositionsInstance,\n} from \"@kodiak-finance/orderly-ui-positions\";\nimport type { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport { AccountType } from \"../assets/assetsPage/assets.ui.desktop\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage: React.FC<PositionsProps> = (props) => {\n const [tab, setTab] = useState(TabsType.positions);\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n\n const subAccounts = state.subAccounts ?? [];\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const positionsRef = useRef<PositionsInstance>(null);\n const positionHistoryRef = useRef<PositionHistoryInstance>(null);\n\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setAccount(value);\n }\n },\n [],\n );\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\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\">{t(\"common.positions\")}</Text>\n <Button color=\"gray\" size=\"sm\" className=\"oui-bg-base-4\" disabled>\n Export to CSV\n </Button>\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\n value={tab}\n onValueChange={(e) => setTab(e as any)}\n classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n trigger: \"oui-group\",\n }}\n className=\"oui-h-full\"\n >\n <TabPanel value={TabsType.positions} title={t(\"common.positions\")}>\n <Flex direction=\"column\" gap={3} width=\"100%\" height=\"100%\">\n {isMainAccount ? (\n <>\n <DataFilter\n onFilter={onAccountFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n ]}\n />\n <CombinePositionsWidget\n ref={positionsRef}\n selectedAccount={selectedAccount}\n {...props}\n />\n </>\n ) : (\n <PositionsWidget\n ref={positionsRef}\n {...props}\n enableSortingStorage={false}\n />\n )}\n </Flex>\n </TabPanel>\n <TabPanel\n value={TabsType.positionHistory}\n title={t(\"positions.positionHistory\")}\n >\n <Flex direction=\"column\" gap={3} width=\"100%\" height=\"100%\">\n <PositionHistoryWidget\n ref={positionHistoryRef}\n {...props}\n enableSortingStorage={false}\n />\n </Flex>\n </TabPanel>\n <TabPanel value={TabsType.liquidation} title={<LiquidationTab />}>\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n\nconst LiquidationTab: React.FC = () => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-space-x-1\">\n <span>{t(\"positions.liquidation\")}</span>\n <Tooltip\n className=\"oui-max-w-[275px] oui-bg-base-6\"\n content={\n <div>\n <div className=\"oui-text-pretty\">\n {t(\"positions.Liquidation.tooltip.liquidation\")}\n </div>\n <div>\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/perpetual-futures/liquidations\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"oui-text-primary\"\n >\n {t(\"positions.Liquidation.tooltip.viewMore\")}\n </a>\n </div>\n </div>\n }\n arrow={{\n className: \"oui-fill-base-6\",\n }}\n >\n <button className=\"oui-hidden group-data-[state=active]:oui-block\">\n <InfoCircleIcon />\n </button>\n </Tooltip>\n </div>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Button,\n Divider,\n Flex,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n OrderListInstance,\n OrdersWidget,\n} from \"@kodiak-finance/orderly-ui-orders\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\n\nexport const OrdersPage: React.FC<{ sharePnLConfig?: SharePnLConfig }> = (\n props,\n) => {\n const { sharePnLConfig } = props;\n const { t } = useTranslation();\n\n const ordersRef = useRef<OrderListInstance>(null);\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\">{t(\"common.orders\")}</Text>\n <Tooltip content={t(\"orders.download.tooltip\")}>\n <Button color=\"gray\" size=\"sm\" className=\"oui-bg-base-4\" disabled>\n {t(\"common.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 = React.forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n (props, ref) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\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 },\n);\n","export { APIManagerWidget } from \"./apiManager.widget\";\nexport { APIManagerPage } from \"./apiManager.page\";\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 { useEffect, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n useDebouncedCallback,\n useMutation,\n useLocalStorage,\n useOrderlyContext,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\n\nconst ORDERLY_ORDER_SOUND_ALERT_KEY = \"orderly_order_sound_alert\";\n\nexport type SettingScriptReturns = {\n maintenance_cancel_orders?: boolean;\n setMaintainConfig: (maintenance_cancel_order_flag: boolean) => void;\n isSetting: boolean;\n canTouch: boolean;\n soundAlert: boolean;\n setSoundAlert: (value: boolean) => void;\n hasOrderFilledMedia: 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 const { notification } = useOrderlyContext();\n\n const [soundAlert, setSoundAlert] = useLocalStorage<boolean>(\n ORDERLY_ORDER_SOUND_ALERT_KEY,\n notification?.orderFilled?.defaultOpen ?? false,\n );\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 soundAlert,\n setSoundAlert,\n hasOrderFilledMedia: Boolean(notification?.orderFilled?.media),\n };\n};\n","import { FC } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { SettingDesktop } from \"./setting.ui.desktop\";\nimport { SettingMobile } from \"./setting.ui.mobile\";\n\nexport const Setting: FC<SettingScriptReturns> = (props) => {\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <div className=\"oui-px-3\">\n <SettingMobile {...props} />\n </div>\n );\n }\n return <SettingDesktop {...props} />;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Card, Flex, Switch, Text } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardTooltip } from \"@kodiak-finance/orderly-ui-connector\";\nimport type { SettingScriptReturns } from \"./setting.script\";\n\nexport const SettingDesktop: FC<SettingScriptReturns> = (props) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Card\n title={t(\"portfolio.setting.systemUpgrade\")}\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-border-t-2 oui-border-line-6 oui-font-semibold\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-flex-1\">\n <Text intensity={80} size=\"base\">\n {t(\"portfolio.setting.cancelOpenOrders\")}\n </Text>\n <Text intensity={54} size=\"sm\">\n {t(\"portfolio.setting.cancelOpenOrders.description\")}\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 {props.hasOrderFilledMedia && (\n <Card\n title={t(\"portfolio.setting.soundAlerts\")}\n id=\"portfolio-sound-alert-setting\"\n className=\"oui-bg-base-9 oui-font-semibold oui-mt-3\"\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={4}\n className=\"oui-border-t-2 oui-border-line-6 oui-font-semibold\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n >\n <Text intensity={54} size=\"sm\">\n {t(\"portfolio.setting.soundAlerts.description\")}\n </Text>\n </Flex>\n\n <AuthGuardTooltip align=\"end\">\n <Switch\n checked={props.soundAlert}\n onCheckedChange={(checked) => props.setSoundAlert(checked)}\n disabled={!props.canTouch}\n data-testid=\"oui-testid-setting-sound-switch-btn\"\n />\n </AuthGuardTooltip>\n </Flex>\n </Card>\n )}\n </>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Card,\n Flex,\n Switch,\n Text,\n ChevronRightIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardTooltip } from \"@kodiak-finance/orderly-ui-connector\";\nimport { LanguageSwitcherWidget } from \"@kodiak-finance/orderly-ui-scaffold\";\nimport type { SettingScriptReturns } from \"./setting.script\";\n\nexport const SettingMobile: FC<SettingScriptReturns> = (props) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState<boolean>(false);\n const onLanguageChange = () => {\n setOpen(true);\n };\n\n return (\n <>\n <Flex mt={1} p={4} intensity={900} r=\"xl\" itemAlign=\"center\">\n <LanguageSwitcherWidget open={open} onOpenChange={setOpen} />\n <Flex\n className=\"oui-cursor-pointer\"\n itemAlign=\"center\"\n width=\"100%\"\n onClick={onLanguageChange}\n >\n <Text\n size=\"base\"\n weight=\"semibold\"\n intensity={80}\n className=\"oui-ml-2\"\n >\n {t(\"languageSwitcher.language\")}\n </Text>\n <ChevronRightIcon\n size={18}\n className=\"oui-ml-auto oui-text-base-contrast-36\"\n />\n </Flex>\n </Flex>\n\n <Card\n // @ts-ignore\n title={\n <div className=\"oui-text-sm\">\n {t(\"portfolio.setting.systemUpgrade\")}\n </div>\n }\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold oui-mt-2\"\n classNames={{ root: \"oui-p-4\", content: \"!oui-pt-3\" }}\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={3}\n className=\"oui-font-semibold oui-border-t-2 oui-border-line-6\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1 oui-gap-2\"\n >\n <Text intensity={80} size=\"xs\">\n {t(\"portfolio.setting.cancelOpenOrders\")}\n </Text>\n <Text intensity={36} size=\"2xs\" className=\"oui-font-normal\">\n {t(\"portfolio.setting.cancelOpenOrders.description\")}\n </Text>\n <AuthGuardTooltip>\n <Switch\n className=\"oui-mt-1\"\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 </Flex>\n </Card>\n\n {props.hasOrderFilledMedia && (\n <Card\n // @ts-ignore\n title={\n <div className=\"oui-text-sm\">\n {t(\"portfolio.setting.soundAlerts\")}\n </div>\n }\n id=\"portfolio-sound-alert-setting\"\n className=\"oui-bg-base-9 oui-font-semibold oui-mt-2\"\n classNames={{ root: \"oui-p-4\", content: \"!oui-pt-3\" }}\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={3}\n className=\"oui-font-semibold oui-border-t-2 oui-border-line-6\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1 oui-gap-2\"\n >\n <Text intensity={36} size=\"2xs\" className=\"oui-font-normal\">\n {t(\"portfolio.setting.soundAlerts.description\")}\n </Text>\n <AuthGuardTooltip>\n <Switch\n className=\"oui-mt-1\"\n checked={props.soundAlert}\n onCheckedChange={(e) => {\n props.setSoundAlert(e);\n }}\n disabled={!props.canTouch}\n data-testid=\"oui-testid-setting-sound-switch-btn\"\n />\n </AuthGuardTooltip>\n </Flex>\n </Flex>\n </Card>\n )}\n </>\n );\n};\n","import React from \"react\";\nimport { useSettingScript } from \"./setting.script\";\nimport { Setting } from \"./setting.ui\";\n\nexport const SettingWidget: React.FC = () => {\n const state = useSettingScript();\n return <Setting {...state} />;\n};\n","import React from \"react\";\nimport { SettingWidget } from \"./setting.widget\";\n\nexport const SettingPage: React.FC = () => {\n return <SettingWidget />;\n};\n","export { AssetsPage } from \"./page\";\nexport {\n AssetsWidget,\n AssetsDataTableWidget,\n} from \"./assetsPage/assets.widget\";\nexport type { AssetsWidgetProps } from \"./assetsPage/assets.widget\";\nexport { AssetsTable, AssetsDataTable } from \"./assetsPage/assets.ui.desktop\";\nexport { AssetsTableMobile } from \"./assetsPage/assets.ui.mobile\";\n","import React from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { DataTableClassNames, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useAssetsScript } from \"./assets.script\";\nimport type { useAssetsScriptReturn } from \"./assets.script\";\nimport { AssetsDataTable, AssetsTable } from \"./assets.ui.desktop\";\nimport { AssetsTableMobile } from \"./assets.ui.mobile\";\n\nexport type AssetsWidgetProps = useAssetsScriptReturn;\n\nexport type AssetsDataTableWidgetProps = {\n classNames?: {\n root?: string;\n desc?: string;\n scrollRoot?: string;\n };\n tbClassName?: string;\n dataTableClassNames?: DataTableClassNames;\n};\n\nexport const AssetsDataTableWidget: React.FC<AssetsDataTableWidgetProps> = (\n props,\n) => {\n const assetsState = useAssetsScript();\n const accountState = useAccount();\n return <AssetsDataTable {...assetsState} {...accountState} {...props} />;\n};\n\nexport const AssetsWidget: React.FC = () => {\n const assetsState = useAssetsScript();\n const accountState = useAccount();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <AssetsTableMobile {...assetsState} {...accountState} />;\n }\n return <AssetsTable {...assetsState} {...accountState} />;\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLocalStorage,\n useIndexPricesStream,\n useAppStore,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { account } from \"@kodiak-finance/orderly-perp\";\nimport { useCanTrade, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum, EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport {\n DepositAndWithdrawWithDialogId,\n TransferDialogId,\n} from \"@kodiak-finance/orderly-ui-transfer\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\nimport { useAccountsData, useAssetsMultiFilter } from \"../../../hooks\";\nimport { useAssetTotalValue } from \"../../../hooks/useAssetTotalValue\";\nimport { ORDERLY_ASSETS_VISIBLE_KEY } from \"../type\";\nimport { useAssetsColumns } from \"./assets.column\";\n\nexport const useAssetsScript = () => {\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n\n const { state, subAccount, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const { getIndexPrice } = useIndexPricesStream();\n\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n const subAccounts = state.subAccounts ?? [];\n\n useEffect(() => {\n if (holding.length > 0) {\n subAccount.refresh();\n }\n }, [holding]);\n\n // Use the extracted total value hook\n const totalValue = useAssetTotalValue();\n\n const toggleVisible = () => {\n // @ts-ignore\n setVisible((visible: boolean) => !visible);\n };\n\n const assetsOptions = useMemo(() => {\n return tokensInfo?.map((item) => ({\n label: item.token,\n value: item.token,\n }));\n }, [tokensInfo]);\n\n // Use the extracted accounts data hook\n const allAccounts = useAccountsData();\n\n // Use the extracted account and asset filter hook\n const {\n selectedAccount,\n selectedAsset,\n filteredData: filtered,\n onFilter,\n } = useAssetsMultiFilter(allAccounts);\n\n // Enhanced filtered data with additional calculations for children\n const enhancedFiltered = useMemo(() => {\n return filtered.map((accountData) => {\n // Enhance each child (holding) with calculated fields\n const enhancedChildren =\n accountData.children?.map((holding) => {\n const tokenInfo = tokensInfo?.find(\n (item) => item.token === holding.token,\n );\n\n // Use extracted function for index price calculation\n const indexPrice = getIndexPrice(holding.token);\n\n // Use extracted function for asset value calculation\n const assetValue = new Decimal(holding.holding)\n .mul(indexPrice)\n .toNumber();\n\n // Calculate collateral ratio for this token\n const collateralRatio = tokenInfo\n ? account.collateralRatio({\n baseWeight: tokenInfo.base_weight ?? 0,\n discountFactor: tokenInfo.discount_factor ?? 0,\n collateralQty: holding.holding,\n collateralCap: tokenInfo?.user_max_qty ?? holding.holding,\n indexPrice: indexPrice,\n })\n : zero;\n\n // Calculate collateral contribution for this token\n const collateralContribution = account.collateralContribution({\n collateralQty: holding.holding,\n collateralCap: tokenInfo?.user_max_qty ?? holding.holding,\n collateralRatio: collateralRatio.toNumber(),\n indexPrice: indexPrice,\n });\n\n return {\n ...holding,\n indexPrice,\n assetValue,\n collateralRatio,\n collateralContribution,\n };\n }) || [];\n\n return {\n ...accountData,\n children: enhancedChildren,\n };\n });\n }, [filtered, getIndexPrice, tokensInfo]);\n\n const handleTransfer = useCallback((accountId: string, token: string) => {\n if (!accountId) {\n return;\n }\n modal.show(TransferDialogId, {\n toAccountId: accountId,\n token,\n });\n }, []);\n\n const handleConvert = (accountId: string, token: string) => {\n modal.show(\"ConvertDialogId\", {\n accountId,\n token,\n });\n };\n\n const showTransfer = isMainAccount ? subAccounts.length > 0 : true;\n\n const assetsColumns = useAssetsColumns({\n onTransfer: showTransfer ? handleTransfer : undefined,\n onConvert: handleConvert,\n });\n\n const openDepositAndWithdraw = useCallback(\n (viewName: \"deposit\" | \"withdraw\") => {\n modal.show(DepositAndWithdrawWithDialogId, {\n activeTab: viewName,\n });\n },\n [],\n );\n\n const onDeposit = useCallback(() => {\n openDepositAndWithdraw(\"deposit\");\n }, []);\n\n const onWithdraw = useCallback(() => {\n openDepositAndWithdraw(\"withdraw\");\n }, []);\n\n // Use enhanced filtered data with calculated children\n const dataSource = useDataTap(enhancedFiltered, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n });\n\n const canTrade = useCanTrade();\n\n return {\n columns: assetsColumns,\n dataSource,\n visible: visible as boolean,\n onToggleVisibility: toggleVisible,\n selectedAccount,\n selectedAsset,\n onFilter,\n totalValue,\n hasSubAccount: subAccounts.length > 0,\n onDeposit,\n onWithdraw,\n holding,\n assetsOptions: assetsOptions ?? EMPTY_LIST,\n canTrade,\n };\n};\n\nexport type useAssetsScriptReturn = ReturnType<typeof useAssetsScript> &\n ReturnType<typeof useAccount>;\n","import React from \"react\";\nimport { useAppStore } from \"@kodiak-finance/orderly-hooks\";\nimport { useWalletConnector } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { Button, Flex, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\n\nexport interface ColumnsOptions {\n onTransfer?: (accountId: string, token: string) => void;\n onConvert?: (accountId: string, token: string) => void;\n}\n\n// Define the enhanced holding interface with calculated fields\ninterface EnhancedHolding {\n token: string;\n holding: number;\n indexPrice: number;\n assetValue: number;\n collateralRatio: number;\n collateralContribution: number;\n account_id: string;\n}\n\nexport const useAssetsColumns = (options: ColumnsOptions) => {\n const { t } = useTranslation();\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n const { namespace } = useWalletConnector();\n const { onTransfer, onConvert } = options;\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.token\"),\n dataIndex: \"token\",\n align: \"left\",\n width: 150,\n render(val: string) {\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <TokenIcon name={val} />\n {val}\n </Flex>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.qty\"),\n dataIndex: \"holding\",\n align: \"left\",\n width: 140,\n render(val: number, record) {\n const findToken = tokensInfo?.find(\n ({ token }) => token === record.token,\n );\n return (\n <Text.numeral dp={findToken?.decimals ?? 6} padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.indexPrice\"),\n dataIndex: \"indexPrice\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.assetValue\"),\n dataIndex: \"assetValue\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.assetValue rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.assetValue>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.collateralRatio\"),\n dataIndex: \"collateralRatio\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral dp={2} suffix=\"%\">\n {val * 100}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"transfer.deposit.collateralContribution\"),\n dataIndex: \"collateralContribution\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.collateral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.collateral>\n );\n },\n },\n {\n title: null,\n dataIndex: \"account_id\",\n align: \"center\",\n width: 180,\n render(id: string, record: EnhancedHolding) {\n const { token } = record;\n return (\n <Flex itemAlign=\"center\" justify=\"end\" gap={3}>\n {token !== \"USDC\" &&\n namespace !== ChainNamespace.solana &&\n typeof onConvert === \"function\" && (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onConvert?.(id, token)}\n >\n {t(\"transfer.convert\")}\n </Button>\n )}\n {typeof onTransfer === \"function\" && (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onTransfer?.(id, token)}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\n </Flex>\n );\n },\n },\n ];\n }, [t, tokensInfo, onTransfer, onConvert, namespace]);\n return columns;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { useWalletConnector } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n TokenIcon,\n Text,\n formatAddress,\n DataFilter,\n modal,\n Flex,\n EmptyDataState,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport type { useAssetsScriptReturn } from \"./assets.script\";\nimport { AccountType } from \"./assets.ui.desktop\";\n\nconst AccountTag: React.FC<{ name: string }> = ({ name }) => {\n return (\n <div className=\"oui-mt-2 oui-flex oui-h-[18px] oui-w-fit oui-items-center oui-rounded oui-bg-white/[0.06] oui-px-2 oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {name}\n </div>\n );\n};\n\ntype AssetMobileItemProps = {\n item: any;\n};\n\nconst AssetMobileItem: React.FC<AssetMobileItemProps> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const { namespace } = useWalletConnector();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <Flex\n width={\"100%\"}\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"oui-gap-x-0.5\"\n >\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.token\")}\n </div>\n <Flex\n gap={1}\n justify={\"start\"}\n itemAlign={\"center\"}\n className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-80\"\n >\n <TokenIcon name={item.token} size=\"2xs\" />\n {item.token}\n </Flex>\n </Flex>\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.qty\")}\n </div>\n <Text.numeral\n className=\"oui-truncate\"\n size=\"xs\"\n dp={6}\n padding={false}\n >\n {item.holding}\n </Text.numeral>\n </Flex>\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-w-full oui-text-end oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.indexPrice\")}\n </div>\n <Flex\n gap={1}\n width={\"100%\"}\n justify={\"end\"}\n itemAlign={\"center\"}\n className=\"oui-text-end oui-font-semibold oui-text-base-contrast-80\"\n >\n <Text.numeral\n size=\"xs\"\n rule=\"price\"\n dp={6}\n currency=\"$\"\n padding={false}\n >\n {item.indexPrice}\n </Text.numeral>\n <div className=\"oui-text-end oui-text-2xs oui-text-base-contrast-36\">\n USDC\n </div>\n </Flex>\n </Flex>\n </Flex>\n <Flex\n width={\"100%\"}\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"oui-gap-x-0.5\"\n >\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"portfolio.overview.column.assetValue\")}\n </div>\n <Text.assetValue\n size=\"xs\"\n intensity={80}\n className=\"oui-truncate oui-font-semibold\"\n rule=\"price\"\n dp={6}\n currency=\"$\"\n padding={false}\n >\n {item.assetValue}\n </Text.assetValue>\n </Flex>\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"portfolio.overview.column.collateralRatio\")}\n </div>\n <Text.numeral size=\"xs\" dp={2} suffix=\"%\">\n {item.collateralRatio * 100}\n </Text.numeral>\n </Flex>\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-w-full oui-text-end oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"transfer.deposit.collateralContribution\")}\n </div>\n <Flex\n gap={1}\n width={\"100%\"}\n justify={\"end\"}\n itemAlign={\"center\"}\n className=\"oui-text-end oui-font-semibold oui-text-base-contrast-80\"\n >\n <Text.collateral\n size=\"xs\"\n rule=\"price\"\n dp={6}\n currency=\"$\"\n padding={false}\n >\n {item.collateralContribution}\n </Text.collateral>\n <div className=\"oui-text-end oui-text-2xs oui-text-base-contrast-36\">\n USDC\n </div>\n </Flex>\n </Flex>\n </Flex>\n <Flex justify={\"between\"} itemAlign={\"center\"} gap={2}>\n {item.token !== \"USDC\" && namespace !== ChainNamespace.solana && (\n <Button\n fullWidth\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n onClick={() => {\n modal.show(\"ConvertSheetId\", {\n accountId: item.account_id,\n token: item.token,\n });\n }}\n className={cn(\n \"oui-flex-1 oui-border-white/[0.36] oui-text-base-contrast-54\",\n )}\n >\n {t(\"transfer.convert\")}\n </Button>\n )}\n <Button\n fullWidth\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n onClick={() => {\n modal.show(\"TransferSheetId\", {\n accountId: item.account_id,\n token: item.token,\n });\n }}\n className={cn(\n \"oui-flex-1 oui-border-white/[0.36] oui-text-base-contrast-54\",\n )}\n >\n {t(\"common.transfer\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nexport const AssetsTableMobile: React.FC<useAssetsScriptReturn> = (props) => {\n const { t } = useTranslation();\n\n const {\n assetsOptions,\n state,\n isMainAccount,\n dataSource,\n selectedAccount,\n selectedAsset,\n onFilter,\n } = props;\n\n const subAccounts = state.subAccounts ?? [];\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const ALL_ASSETS: SelectOption = {\n label: t(\"common.allAssets\"),\n value: \"all\",\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n // Create asset options from holding data - optimized and consistent with desktop\n const memoizedAssets = useMemo(() => {\n return [ALL_ASSETS, ...assetsOptions];\n }, [assetsOptions]);\n\n if (!props.canTrade) {\n return (\n <Flex\n direction={\"column\"}\n height={\"100%\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n mt={10}\n >\n <EmptyDataState />\n </Flex>\n );\n }\n\n return (\n <div className={cn(\"oui-flex oui-flex-col oui-gap-1 oui-px-1 oui-pb-4\")}>\n {isMainAccount && (\n <DataFilter\n onFilter={onFilter}\n className=\"oui-border-none oui-py-2\"\n items={[\n {\n size: \"sm\",\n type: \"picker\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n {\n size: \"sm\",\n type: \"picker\",\n name: \"asset\",\n value: selectedAsset,\n options: memoizedAssets,\n },\n ]}\n />\n )}\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n {dataSource?.map((assets, index) => {\n return (\n <React.Fragment key={`item-${index}`}>\n <AccountTag name={assets.description ?? \"sub account\"} />\n {Array.isArray(assets.children) &&\n assets.children.map((child) => (\n <AssetMobileItem\n item={child}\n key={`${child.token}-${child.account_id}`}\n />\n ))}\n </React.Fragment>\n );\n })}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { AssetsWidget } from \"./assetsPage/assets.widget\";\nimport type { AssetsWidgetProps } from \"./assetsPage/assets.widget\";\n\nexport type AssetsPageProps = AssetsWidgetProps;\n\nexport const AssetsPage: React.FC = () => {\n return <AssetsWidget />;\n};\n","export { HistoryPage } from \"./history.page\";\nexport { HistoryWidget } from \"./history.page\";\n","import React from \"react\";\nimport { HistoryDataGroupWidget } from \"../overview/historyDataGroup\";\n\nexport const HistoryWidget: React.FC = () => {\n return <HistoryDataGroupWidget />;\n};\n\nexport const HistoryPage: React.FC = () => {\n return <HistoryDataGroupWidget />;\n};\n","export { SymbolPerformancePage } from \"./page\";\nexport { SymbolPerformanceWidget } from \"./symbolPerformance.widget\";\nexport { SymbolPerformanceUI } from \"./symbolPerformance.ui\";\nexport { useSymbolPerformanceScript } from \"./symbolPerformance.script\";\nexport type {\n UseSymbolPerformanceScriptReturn,\n Timeframe,\n} from \"./symbolPerformance.script\";\n","import React from \"react\";\nimport { Box } from \"@kodiak-finance/orderly-ui\";\nimport { SymbolPerformanceWidget } from \"./symbolPerformance.widget\";\n\nexport const SymbolPerformancePage: React.FC = () => {\n return (\n <Box\n p={6}\n pb={0}\n intensity={900}\n r=\"xl\"\n width=\"100%\"\n style={{\n minHeight: 379,\n maxHeight: 2560,\n overflow: \"auto\",\n }}\n >\n <SymbolPerformanceWidget />\n </Box>\n );\n};\n","import React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useSymbolPerformanceScript } from \"./symbolPerformance.script\";\nimport { SymbolPerformanceUI } from \"./symbolPerformance.ui\";\nimport { SymbolPerformanceUIMobile } from \"./symbolPerformance.ui.mobile\";\n\nexport const SymbolPerformanceWidget: React.FC<{ symbol?: string }> = ({\n symbol,\n}) => {\n const { isMobile } = useScreen();\n const state = useSymbolPerformanceScript(symbol);\n\n if (isMobile) {\n return <SymbolPerformanceUIMobile {...state} />;\n }\n\n return <SymbolPerformanceUI {...state} />;\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, subDays, format } from \"date-fns\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useSymbolPerformanceData } from \"./useSymbolPerformanceData\";\nimport { useTrades } from \"./useTrades\";\n\nexport enum PeriodType {\n DAY = \"1D\",\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport enum AggregationWindow {\n FIFTEEN_MIN = \"15m\",\n HOURLY = \"1h\",\n DAILY = \"1d\",\n}\n\nexport type Timeframe = \"1D\" | \"7D\" | \"30D\" | \"90D\" | \"ALL\";\n\n/**\n * Number of days in each preset period.\n * DAY = 2 means \"today and yesterday\" (inclusive range)\n */\nconst PRESET_DAYS = {\n [PeriodType.DAY]: 2,\n [PeriodType.WEEK]: 7,\n [PeriodType.MONTH]: 30,\n [PeriodType.QUARTER]: 90,\n} as const;\n\nconst getDateRange = (period: PeriodType | number, today: Date) => {\n const offsetDay = typeof period === \"number\" ? period : PRESET_DAYS[period];\n return {\n from: subDays(today, offsetDay - 1),\n to: today,\n };\n};\n\nconst formatDateRange = (date?: Date) => {\n if (typeof date === \"undefined\") return undefined;\n return format(date, \"yyyy-MM-dd\");\n};\n\nconst getUtcStartOfDay = (date: Date): Date => {\n return new Date(\n Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()),\n );\n};\n\nconst getUtcEndOfDay = (date: Date): Date => {\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n 23,\n 59,\n 59,\n 999,\n ),\n );\n};\n\nexport const useSymbolPerformanceScript = (symbol?: string) => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n const [selectedSymbol, setSelectedSymbol] = useState<string>(\n symbol || \"ALL_SYMBOLS\",\n );\n const [aggregationWindow, setAggregationWindow] = useState<AggregationWindow>(\n AggregationWindow.DAILY,\n );\n const [isNetPnL, setIsNetPnL] = useState(false); // Toggle: Net P&L (fees deducted) vs Gross P&L (default)\n const [today] = useState(() => new Date());\n const [period, setPeriod] = useState<PeriodType | null>(PeriodType.WEEK);\n\n const [dateRange, setDateRange] = useState<{ from: Date; to: Date }>(() => {\n const range = getDateRange(PeriodType.WEEK, today);\n return {\n from: range.from,\n to: range.to,\n };\n });\n\n const onPeriodChange = (value: PeriodType) => {\n const newRange = getDateRange(value, today);\n setPeriod(value);\n setDateRange({\n from: newRange.from,\n to: newRange.to,\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = filter.value;\n\n setDateRange(newDateRange);\n\n if (newDateRange.from && newDateRange.to) {\n const offsetDay =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) +\n 1;\n\n const range = getDateRange(offsetDay, today);\n\n if (\n formatDateRange(range.from) ===\n formatDateRange(newDateRange.from) &&\n formatDateRange(range.to) === formatDateRange(newDateRange.to)\n ) {\n setPeriod(\n (Object.keys(PRESET_DAYS) as PeriodType[]).find(\n (key) => PRESET_DAYS[key] === offsetDay,\n ) || null,\n );\n } else {\n setPeriod(null);\n }\n }\n }\n };\n\n const startDate = dateRange.from;\n const endDate = dateRange.to;\n\n const startDateForAPI = useMemo(() => {\n if (!startDate) return startDate;\n return getUtcStartOfDay(startDate);\n }, [startDate]);\n\n // Query full UTC day for the selected local end date.\n const endDateForAPI = useMemo(() => {\n if (!endDate) return endDate;\n return getUtcEndOfDay(endDate);\n }, [endDate]);\n\n const filterItems = useMemo(() => {\n return [\n {\n type: \"range\" as const,\n name: \"dateRange\",\n value: dateRange,\n max: 90,\n },\n ];\n }, [dateRange]);\n\n const { trades, isLoading, error } = useTrades({\n symbol: selectedSymbol === \"ALL_SYMBOLS\" ? undefined : selectedSymbol,\n start_t: startDateForAPI ? startDateForAPI.getTime() : undefined,\n end_t: endDateForAPI ? endDateForAPI.getTime() : undefined,\n });\n\n // Always calculate actual performance with fees (for stats)\n // The includeFees toggle only affects chart visualization, not stats\n // Use endDateForAPI to ensure all fetched trades are included in aggregation\n const performanceData = useSymbolPerformanceData(\n trades,\n startDateForAPI,\n endDateForAPI,\n true,\n );\n\n const invisible =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n const periodTypes = Object.values(PeriodType);\n const aggregationWindowTypes = Object.values(AggregationWindow);\n\n const getAggregatedData = () => {\n if (!performanceData) return null;\n\n let result;\n switch (aggregationWindow) {\n case AggregationWindow.FIFTEEN_MIN:\n result = {\n periodData: performanceData.fifteenMinuteData,\n cumulativePnL: performanceData.cumulativeFifteenMinutePnL,\n cumulativeFees: performanceData.cumulativeFifteenMinuteFees,\n cumulativeVolume: performanceData.cumulativeFifteenMinuteVolume,\n };\n break;\n case AggregationWindow.HOURLY:\n result = {\n periodData: performanceData.hourlyData,\n cumulativePnL: performanceData.cumulativeHourlyPnL,\n cumulativeFees: performanceData.cumulativeHourlyFees,\n cumulativeVolume: performanceData.cumulativeHourlyVolume,\n };\n break;\n case AggregationWindow.DAILY:\n default:\n result = {\n periodData: performanceData.dailyData,\n cumulativePnL: performanceData.cumulativeDailyPnL,\n cumulativeFees: performanceData.cumulativeDailyFees,\n cumulativeVolume: performanceData.cumulativeDailyVolume,\n };\n }\n\n return result;\n };\n\n return {\n selectedSymbol,\n setSelectedSymbol,\n period,\n onPeriodChange,\n periodTypes,\n aggregationWindow,\n setAggregationWindow,\n aggregationWindowTypes,\n isNetPnL,\n setIsNetPnL,\n dateRange,\n filterItems,\n onFilter,\n trades,\n isLoading,\n error,\n performanceData,\n aggregatedData: getAggregatedData(),\n invisible,\n };\n};\n\nexport type UseSymbolPerformanceScriptReturn = ReturnType<\n typeof useSymbolPerformanceScript\n>;\n","import { useMemo } from \"react\";\nimport { addDays } from \"date-fns\";\nimport type { TradeData } from \"./useTrades\";\n\nexport interface SymbolPerformanceMetrics {\n totalPnL: number;\n grossPnL: number;\n totalVolume: number;\n totalFees: number;\n totalTrades: number;\n makerShare: number;\n // daily data\n dailyData: Array<{ date: string; pnl: number; volume: number; fees: number }>;\n cumulativeDailyPnL: Array<{ date: string; cumulativePnl: number }>;\n cumulativeDailyFees: Array<{ date: string; cumulativeFees: number }>;\n cumulativeDailyVolume: Array<{ date: string; cumulativeVolume: number }>;\n // hourly data\n hourlyData: Array<{\n date: string;\n pnl: number;\n fees: number;\n volume: number;\n }>;\n cumulativeHourlyPnL: Array<{ date: string; cumulativePnl: number }>;\n cumulativeHourlyFees: Array<{ date: string; cumulativeFees: number }>;\n cumulativeHourlyVolume: Array<{ date: string; cumulativeVolume: number }>;\n // 15-minute data\n fifteenMinuteData: Array<{\n date: string;\n pnl: number;\n fees: number;\n volume: number;\n }>;\n cumulativeFifteenMinutePnL: Array<{ date: string; cumulativePnl: number }>;\n cumulativeFifteenMinuteFees: Array<{ date: string; cumulativeFees: number }>;\n cumulativeFifteenMinuteVolume: Array<{\n date: string;\n cumulativeVolume: number;\n }>;\n}\n\n/**\n * Generic function to fill gaps in aggregated time-series data.\n * Ensures complete coverage of the date range with zero values for missing periods.\n *\n * @param dataMap - Map of aggregated data keyed by ISO datetime string\n * @param startDate - Start of the period\n * @param endDate - End of the period\n * @param incrementFn - Function to increment the current date\n * @param getKeyFn - Function to extract the key from current date\n * @returns Array of filled data points\n */\nconst fillTimeSeriesGaps = (\n dataMap: Map<string, { pnl: number; volume: number; fees: number }>,\n startDate: Date,\n endDate: Date,\n incrementFn: (date: Date) => void,\n getKeyFn: (date: Date) => string,\n) => {\n const filledData: Array<{\n date: string;\n pnl: number;\n volume: number;\n fees: number;\n }> = [];\n\n const current = new Date(startDate);\n current.setUTCHours(0, 0, 0, 0);\n\n while (current <= endDate) {\n const key = getKeyFn(current);\n const data = dataMap.get(key) || {\n pnl: 0,\n volume: 0,\n fees: 0,\n };\n filledData.push({ date: key, ...data });\n incrementFn(current);\n }\n\n return filledData;\n};\n\n// Helper function to fill daily gaps\nconst fillDailyGaps = (\n dailyMap: Map<string, { pnl: number; volume: number; fees: number }>,\n startDate: Date,\n endDate: Date,\n) => {\n return fillTimeSeriesGaps(\n dailyMap,\n startDate,\n endDate,\n (date) => date.setUTCDate(date.getUTCDate() + 1),\n (date) => date.toISOString().split(\"T\")[0],\n );\n};\n\n// Helper function to fill hourly gaps\nconst fillHourlyGaps = (\n hourlyMap: Map<string, { pnl: number; volume: number; fees: number }>,\n startDate: Date,\n endDate: Date,\n) => {\n return fillTimeSeriesGaps(\n hourlyMap,\n startDate,\n endDate,\n (date) => date.setUTCHours(date.getUTCHours() + 1),\n (date) => date.toISOString(),\n );\n};\n\n// Helper function to fill 15-minute gaps\nconst fillFifteenMinuteGaps = (\n fifteenMinMap: Map<string, { pnl: number; volume: number; fees: number }>,\n startDate: Date,\n endDate: Date,\n) => {\n return fillTimeSeriesGaps(\n fifteenMinMap,\n startDate,\n endDate,\n (date) => date.setUTCMinutes(date.getUTCMinutes() + 15),\n (date) => date.toISOString(),\n );\n};\n\nexport const useSymbolPerformanceData = (\n tradesData: TradeData[] | null,\n periodStartDate?: Date,\n periodEndDate?: Date,\n includeFees: boolean = true,\n): SymbolPerformanceMetrics | null => {\n return useMemo(() => {\n if (!tradesData || tradesData.length === 0) {\n return null;\n }\n\n // Process trades - each trade already has realized_pnl (which is net, after fees)\n const tradesWithPnL = tradesData.map((trade) => {\n const volume = Math.abs(trade.executed_quantity * trade.executed_price);\n const fees = trade.fee || 0;\n // If includeFees is true: show net PnL (realized_pnl, which already has fees deducted)\n // If includeFees is false: show gross PnL (add fees back to realized_pnl)\n const pnl = includeFees\n ? trade.realized_pnl || 0\n : (trade.realized_pnl || 0) + fees;\n\n return {\n ...trade,\n pnl,\n volume,\n fees,\n date: new Date(trade.executed_timestamp),\n };\n });\n\n // Calculate metrics\n const totalPnL = tradesWithPnL.reduce((sum, trade) => sum + trade.pnl, 0);\n const totalVolume = tradesWithPnL.reduce(\n (sum, trade) => sum + trade.volume,\n 0,\n );\n const totalFees = tradesWithPnL.reduce((sum, trade) => sum + trade.fees, 0);\n const totalTrades = tradesWithPnL.length;\n const grossPnL = totalPnL + totalFees;\n\n // Use provided period dates or fall back to trade dates\n const sortedByDate = [...tradesWithPnL].sort(\n (a, b) => a.date.getTime() - b.date.getTime(),\n );\n const startDate = periodStartDate || sortedByDate[0].date;\n const endDate = periodEndDate || sortedByDate[sortedByDate.length - 1].date;\n\n // Calculate maker volume share\n const makerVolume = tradesData\n .filter((trade) => trade.is_maker === 1)\n .reduce(\n (sum, trade) =>\n sum + Math.abs(trade.executed_quantity * trade.executed_price),\n 0,\n );\n const makerShare = totalVolume > 0 ? (makerVolume / totalVolume) * 100 : 0;\n\n // Group by day for daily PnL, Volume, and Fees\n const dailyPnLMap = new Map<\n string,\n { pnl: number; volume: number; fees: number }\n >();\n tradesWithPnL.forEach((trade) => {\n const dateKey = trade.date.toISOString().split(\"T\")[0];\n const existing = dailyPnLMap.get(dateKey) || {\n pnl: 0,\n volume: 0,\n fees: 0,\n };\n dailyPnLMap.set(dateKey, {\n pnl: existing.pnl + trade.pnl,\n volume: existing.volume + trade.volume,\n fees: existing.fees + trade.fees,\n });\n });\n\n // Fill gaps in daily data\n const dailyData = fillDailyGaps(dailyPnLMap, startDate, endDate);\n\n // Group by hour for hourly PnL and Fees\n const hourlyDataMap = new Map<\n string,\n { pnl: number; fees: number; volume: number }\n >();\n tradesWithPnL.forEach((trade) => {\n // Format: YYYY-MM-DDTHH:00:00.000Z\n // setMinutes(0, 0, 0) normalizes minutes, seconds, and milliseconds to 0\n // This ensures all trades within the same hour share the same key regardless of seconds/milliseconds\n const date = new Date(trade.date);\n date.setUTCMinutes(0, 0, 0);\n const hourKey = date.toISOString();\n const existing = hourlyDataMap.get(hourKey) || {\n pnl: 0,\n fees: 0,\n volume: 0,\n };\n hourlyDataMap.set(hourKey, {\n pnl: existing.pnl + trade.pnl,\n fees: existing.fees + trade.fees,\n volume: existing.volume + trade.volume,\n });\n });\n\n // Check if this is a single-day selection\n const isSingleDay = startDate.getTime() === endDate.getTime();\n\n // Calculate the next calendar day start time (00:00 UTC of the next day)\n const nextDayDate = addDays(startDate, 1);\n const nextDayStartTime = new Date(\n nextDayDate.getUTCFullYear(),\n nextDayDate.getUTCMonth(),\n nextDayDate.getUTCDate(),\n 0,\n 0,\n 0,\n 0,\n ).getTime();\n\n // For single-day: create buckets that span the full calendar day\n // For multi-day: use the provided date range as-is\n const bucketEndDate = isSingleDay ? addDays(startDate, 1) : endDate;\n\n // Fill gaps in hourly data\n let hourlyData = fillHourlyGaps(hourlyDataMap, startDate, bucketEndDate);\n // For single-day selections only, remove any entries from the next day\n if (isSingleDay) {\n hourlyData = hourlyData.filter(\n (item) => new Date(item.date).getTime() < nextDayStartTime,\n );\n }\n\n // Group by 15 minutes for 15-minute PnL, Fees, and Volume\n const fifteenMinuteDataMap = new Map<\n string,\n { pnl: number; fees: number; volume: number }\n >();\n tradesWithPnL.forEach((trade) => {\n const date = new Date(trade.date);\n // Round down to the nearest 15-minute interval (0, 15, 30, 45)\n const minutes = date.getUTCMinutes();\n const roundedMinutes = Math.floor(minutes / 15) * 15;\n // setMinutes(roundedMinutes, 0, 0) normalizes seconds and milliseconds to 0\n // This ensures all trades within the same 15-minute window share the same key regardless of seconds/milliseconds\n date.setUTCMinutes(roundedMinutes, 0, 0);\n const fifteenMinKey = date.toISOString();\n const existing = fifteenMinuteDataMap.get(fifteenMinKey) || {\n pnl: 0,\n fees: 0,\n volume: 0,\n };\n fifteenMinuteDataMap.set(fifteenMinKey, {\n pnl: existing.pnl + trade.pnl,\n fees: existing.fees + trade.fees,\n volume: existing.volume + trade.volume,\n });\n });\n\n // Fill gaps in 15-minute data\n let fifteenMinuteData = fillFifteenMinuteGaps(\n fifteenMinuteDataMap,\n startDate,\n bucketEndDate,\n );\n // For single-day selections only, remove any entries from the next day\n if (isSingleDay) {\n fifteenMinuteData = fifteenMinuteData.filter(\n (item) => new Date(item.date).getTime() < nextDayStartTime,\n );\n }\n\n // Calculate cumulative PnL\n let _pnl = 0;\n const cumulativeDailyPnL = dailyData.map((day) => {\n _pnl += day.pnl;\n return {\n date: day.date,\n cumulativePnl: _pnl,\n };\n });\n\n let _fees = 0;\n const cumulativeDailyFees = dailyData.map((day) => {\n _fees += day.fees;\n return {\n date: day.date,\n cumulativeFees: _fees,\n };\n });\n let _volume = 0;\n const cumulativeDailyVolume = dailyData.map((day) => {\n _volume += day.volume;\n return {\n date: day.date,\n cumulativeVolume: _volume,\n };\n });\n _pnl = 0;\n const cumulativeHourlyPnL = hourlyData.map((hour) => {\n _pnl += hour.pnl;\n return {\n date: hour.date,\n cumulativePnl: _pnl,\n };\n });\n _fees = 0;\n const cumulativeHourlyFees = hourlyData.map((hour) => {\n _fees += hour.fees;\n return {\n date: hour.date,\n cumulativeFees: _fees,\n };\n });\n _volume = 0;\n const cumulativeHourlyVolume = hourlyData.map((hour) => {\n _volume += hour.volume;\n return {\n date: hour.date,\n cumulativeVolume: _volume,\n };\n });\n\n // Calculate cumulative 15-minute data\n _pnl = 0;\n const cumulativeFifteenMinutePnL = fifteenMinuteData.map((fifteenMin) => {\n _pnl += fifteenMin.pnl;\n return {\n date: fifteenMin.date,\n cumulativePnl: _pnl,\n };\n });\n\n _fees = 0;\n const cumulativeFifteenMinuteFees = fifteenMinuteData.map((fifteenMin) => {\n _fees += fifteenMin.fees;\n return {\n date: fifteenMin.date,\n cumulativeFees: _fees,\n };\n });\n\n _volume = 0;\n const cumulativeFifteenMinuteVolume = fifteenMinuteData.map(\n (fifteenMin) => {\n _volume += fifteenMin.volume;\n return {\n date: fifteenMin.date,\n cumulativeVolume: _volume,\n };\n },\n );\n\n return {\n totalPnL,\n grossPnL,\n totalVolume,\n totalFees,\n totalTrades,\n makerShare,\n\n // daily data\n dailyData,\n cumulativeDailyPnL,\n cumulativeDailyFees,\n cumulativeDailyVolume,\n\n // hourly data\n hourlyData,\n cumulativeHourlyPnL,\n cumulativeHourlyFees,\n cumulativeHourlyVolume,\n\n // 15-minute data\n fifteenMinuteData,\n cumulativeFifteenMinutePnL,\n cumulativeFifteenMinuteFees,\n cumulativeFifteenMinuteVolume,\n };\n }, [tradesData, periodStartDate, periodEndDate, includeFees]);\n};\n","import { useMemo, useEffect, useRef } from \"react\";\nimport { usePrivateInfiniteQuery } from \"@kodiak-finance/orderly-hooks\";\n\nexport interface TradeData {\n id: number;\n symbol: string;\n fee: number;\n fee_asset: string;\n side: \"BUY\" | \"SELL\";\n order_id: number;\n executed_price: number;\n executed_quantity: number;\n executed_timestamp: number;\n is_maker: number;\n realized_pnl: number;\n match_id: string;\n}\n\nexport interface TradesResponse {\n rows: TradeData[];\n meta: {\n total: number;\n records_per_page: number;\n current_page: number;\n };\n}\n\nexport const useTrades = (params: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n size?: number;\n}) => {\n const { symbol, start_t, end_t, size = 500 } = params;\n\n const getKey = useMemo(() => {\n return (pageIndex: number, previousPageData: any): string | null => {\n if (previousPageData) {\n // Use meta.total from API to determine if there's more data to fetch\n const total = previousPageData.meta?.total ?? 0;\n const alreadyFetched = pageIndex * size;\n\n // Stop if we've already fetched all available trades according to the API\n if (alreadyFetched >= total) {\n return null;\n }\n\n // Fallback: stop if current page has fewer items than requested\n if (previousPageData.rows.length < size) {\n return null;\n }\n }\n\n const search = new URLSearchParams();\n search.set(\"size\", size.toString());\n search.set(\"page\", `${pageIndex + 1}`);\n if (symbol) {\n search.set(\"symbol\", symbol);\n }\n if (start_t) {\n search.set(\"start_t\", start_t.toString());\n }\n if (end_t) {\n search.set(\"end_t\", end_t.toString());\n }\n const url = `/v1/trades?${search.toString()}`;\n return url;\n };\n }, [symbol, start_t, end_t, size]);\n\n const result = usePrivateInfiniteQuery<TradesResponse>(getKey, {\n formatter: (data) => data,\n revalidateOnFocus: true,\n keepPreviousData: true,\n });\n\n const timeoutRef = useRef<NodeJS.Timeout>();\n\n // Auto-fetch all pages with rate limiting (10 requests per 1 second = 100ms minimum between requests)\n useEffect(() => {\n if (!result.data) return;\n\n const lastPage = result.data[result.data.length - 1];\n\n // Check if there's more data to fetch (when last page has full size)\n if (lastPage && lastPage.rows.length === size) {\n // Capture next page size before scheduling to avoid stale closure\n const nextPageSize = result.data.length + 1;\n\n // Schedule next fetch with 100ms delay to respect rate limit\n timeoutRef.current = setTimeout(() => {\n result.setSize(nextPageSize);\n }, 100);\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [result.data, size]);\n\n // Clear pending pagination fetch when filters change to prevent mixed data states\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [symbol, start_t, end_t]);\n\n // Flatten all trades from paginated response\n const trades = useMemo(() => {\n if (!result.data) return [];\n return result.data\n .map((page) => page.rows)\n .flat()\n .filter((trade): trade is TradeData => trade !== undefined);\n }, [result.data]);\n\n return {\n trades,\n isLoading: result.isLoading,\n error: result.error,\n mutate: result.mutate,\n };\n};\n","import React, { useMemo, useState } from \"react\";\nimport { endOfDay } from \"date-fns\";\nimport {\n CombinedPnLChart,\n CombinedVolumeChart,\n CombinedFeesChart,\n CombinedPriceChart,\n AssetAreaChart,\n} from \"@kodiak-finance/orderly-chart\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Card,\n Grid,\n Box,\n Statistic,\n Text,\n Divider,\n Flex,\n Select,\n Switch,\n cn,\n DataTable,\n type Column,\n} from \"@kodiak-finance/orderly-ui\";\nimport { formatDateForChart, getAggregationLabel } from \"./dateUtils\";\nimport { PnLRankingChart } from \"./pnlRankingChart\";\nimport type { UseSymbolPerformanceScriptReturn } from \"./symbolPerformance.script\";\nimport { AggregationWindow } from \"./symbolPerformance.script\";\nimport { SymbolSelector } from \"./symbolSelector\";\nimport { useKlineData } from \"./useKlineData\";\nimport type { TradeData } from \"./useTrades\";\n\nconst LazyPeriodTitle = React.lazy(() =>\n import(\"../overview/shared/periodHeader\").then((mod) => {\n return { default: mod.PeriodTitle };\n }),\n);\n\nexport type SymbolPerformanceUIProps = UseSymbolPerformanceScriptReturn;\n\nconst MakerTakerShare: React.FC<{ makerShare: number }> = ({ makerShare }) => {\n const takerShare = 100 - makerShare;\n return (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-gap-4\">\n <Text weight=\"semibold\">{makerShare.toFixed(1)}%</Text>\n <span className=\"oui-text-base-contrast-54\">/</span>\n <Text weight=\"semibold\">{takerShare.toFixed(1)}%</Text>\n </div>\n );\n};\n\nenum ViewType {\n chart = \"chart\",\n table = \"table\",\n}\n\ntype PerformanceTableRow = {\n date: string;\n pnl: number;\n volume: number;\n fees: number;\n};\n\nexport const SymbolPerformanceUI: React.FC<SymbolPerformanceUIProps> = (\n props,\n) => {\n const {\n selectedSymbol,\n setSelectedSymbol,\n period,\n onPeriodChange,\n periodTypes,\n performanceData,\n filterItems,\n onFilter,\n aggregationWindow,\n setAggregationWindow,\n aggregationWindowTypes,\n aggregatedData,\n trades,\n dateRange,\n isNetPnL,\n setIsNetPnL,\n } = props;\n const { t } = useTranslation();\n const symbolsInfo = useSymbolsInfo();\n const [viewType, setViewType] = useState<ViewType>(ViewType.chart);\n const [showCumulativePnL, setShowCumulativePnL] = useState(true);\n const [showCumulativeVolume, setShowCumulativeVolume] = useState(false);\n const [showCumulativeFees, setShowCumulativeFees] = useState(false);\n\n // Trim all data based on first and last non-zero volume to keep all charts aligned\n // This removes leading empty buckets and trailing empty buckets\n const getTrimmedDataRange = (data: any[]) => {\n if (!data || data.length === 0) return { start: 0, end: 0 };\n\n // Find first non-zero volume\n const startIndex = data.findIndex(\n (item) => item.volume && item.volume !== 0,\n );\n\n // Find last non-zero volume\n const endIndex = data.reduce(\n (lastIdx, item, idx) =>\n item.volume && item.volume !== 0 ? idx : lastIdx,\n -1,\n );\n\n return {\n start: startIndex === -1 ? 0 : startIndex,\n end: endIndex === -1 ? data.length : endIndex + 1,\n };\n };\n\n // Get available symbols\n const availableSymbols = useMemo(() => {\n const symbols = Object.keys(symbolsInfo);\n return [\n { value: \"ALL_SYMBOLS\", label: \"All Symbols\" },\n ...symbols.map((symbol) => ({\n value: symbol,\n label: symbol.replace(\"PERP_\", \"\").replace(\"_USDC\", \"\"),\n })),\n ];\n }, [symbolsInfo]);\n\n // Transform period PnL data for CombinedPnLChart (combines bars + cumulative line)\n // aggregatedData.periodData contains NET PnL (after fees)\n // Toggle allows viewing GROSS PnL (before fees) by adding fees back\n const combinedPnLData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(start, end);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n // Net PnL = actual result (with fees deducted)\n // Gross PnL = add fees back to show hypothetical without fees\n pnl: isNetPnL ? item.pnl : item.pnl + item.fees,\n }));\n }, [aggregatedData, aggregationWindow, isNetPnL]);\n\n // Transform period volume data for CombinedVolumeChart (combines bars + cumulative line)\n const combinedVolumeData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(start, end);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n volume: item.volume ?? 0,\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Transform period fees data for CombinedFeesChart (combines bars + cumulative line)\n // Fees are shown as negative since they're a cost\n const combinedFeesData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(start, end);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n fees: -(item.fees ?? 0),\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Map aggregation window to K-line resolution\n const klineResolution = useMemo(() => {\n switch (aggregationWindow) {\n case \"15m\":\n return \"15m\" as const;\n case \"1h\":\n return \"1h\" as const;\n case \"1d\":\n return \"1d\" as const;\n default:\n return \"1d\" as const;\n }\n }, [aggregationWindow]);\n\n // Fetch K-line data (only if a specific symbol is selected, not \"ALL_SYMBOLS\")\n const isAllSymbols = selectedSymbol === \"ALL_SYMBOLS\";\n const klineEndDate = useMemo(() => {\n if (!dateRange?.to) return undefined;\n // Use endOfDay to capture klines through the full day, not just to midnight\n return endOfDay(dateRange.to);\n }, [dateRange?.to]);\n\n const { klines } = useKlineData({\n symbol: !isAllSymbols && selectedSymbol ? selectedSymbol : undefined,\n resolution: klineResolution,\n from: dateRange ? Math.floor(dateRange.from.getTime() / 1000) : undefined,\n to: klineEndDate ? Math.floor(klineEndDate.getTime() / 1000) : undefined,\n });\n\n // Combine price data - align with trading data range, fill gaps with null\n // This ensures price chart covers the full date range of PnL/Volume/Fees charts\n // Missing price data (due to 1k kline API limit) shows as null, maintaining tooltip sync\n const combinedPriceData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) {\n return [];\n }\n\n // Apply same trim range as volume/fees/pnl to align x-axis\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedTradingData = aggregatedData.periodData.slice(start, end);\n\n if (trimmedTradingData.length === 0 || klines.length === 0) {\n return [];\n }\n\n // Create a map of kline data by formatted date for O(1) lookup\n const klineMap = new Map<string, (typeof klines)[0]>();\n klines.forEach((k) => {\n const date = new Date(k.timestamp * 1000);\n const formattedDate = formatDateForChart(\n date.toISOString(),\n aggregationWindow,\n );\n klineMap.set(formattedDate, k);\n });\n\n // Create price data for all trading data buckets, using null where kline data is missing\n const result = trimmedTradingData.map((tradingItem) => {\n const formattedDate = formatDateForChart(\n tradingItem.date,\n aggregationWindow,\n );\n const kline = klineMap.get(formattedDate);\n\n return {\n date: formattedDate,\n open: kline?.open ?? null,\n high: kline?.high ?? null,\n low: kline?.low ?? null,\n close: kline?.close ?? null,\n };\n });\n\n return result;\n }, [klines, aggregatedData, aggregationWindow]);\n\n // Transform data for table view\n const tableData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(start, end);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n pnl: item.pnl,\n volume: item.volume ?? 0,\n fees: item.fees ?? 0,\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Define table columns\n const tableColumns: Column<PerformanceTableRow>[] = useMemo(\n () => [\n {\n title: t(\"common.date\"),\n dataIndex: \"date\",\n width: 120,\n align: \"left\",\n },\n {\n title: t(\"portfolio.symbolPerformance.realizedPnL\"),\n dataIndex: \"pnl\",\n align: \"right\",\n width: 150,\n render: (value: number) => {\n const isPositive = value >= 0;\n return (\n <Text\n as=\"span\"\n weight=\"semibold\"\n className={\n isPositive ? \"oui-text-profit-500\" : \"oui-text-loss-500\"\n }\n >\n {value.toFixed(2)} USDC\n </Text>\n );\n },\n },\n {\n title: t(\"portfolio.symbolPerformance.volume\"),\n dataIndex: \"volume\",\n align: \"right\",\n width: 150,\n render: (value: number) => {\n return <Text as=\"span\">{formatVolumeValue(value)}</Text>;\n },\n },\n {\n title: t(\"portfolio.symbolPerformance.fees\"),\n dataIndex: \"fees\",\n align: \"right\",\n width: 150,\n render: (value: number) => {\n return <Text as=\"span\">{formatVolumeValue(value)}</Text>;\n },\n },\n ],\n [t],\n );\n\n // Helper function to format volume/fees with K/M/B\n const formatVolumeValue = (value: number): string => {\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\"];\n let index = 0;\n let num = value;\n while (num >= 1000 && index < abbreviations.length - 1) {\n num /= 1000;\n index++;\n }\n const decimalPlaces = num <= 10 ? 2 : num <= 100 ? 1 : 0;\n const rounded = parseFloat(num.toFixed(decimalPlaces));\n return `${rounded}${abbreviations[index]}`;\n };\n\n // Aggregate trades by symbol\n const symbolSummaryData = useMemo(() => {\n if (!trades || trades.length === 0) return [];\n\n const symbolMap = new Map<\n string,\n { pnl: number; volume: number; fees: number; trades: number }\n >();\n\n trades.forEach((trade: TradeData) => {\n const symbol = trade.symbol;\n if (!symbolMap.has(symbol)) {\n symbolMap.set(symbol, { pnl: 0, volume: 0, fees: 0, trades: 0 });\n }\n\n const current = symbolMap.get(symbol)!;\n const tradeVolume = trade.executed_quantity * trade.executed_price;\n\n current.pnl += trade.realized_pnl || 0;\n current.volume += tradeVolume;\n current.fees += trade.fee || 0;\n current.trades += 1;\n });\n\n // Convert map to array and sort by PnL (highest first)\n return Array.from(symbolMap.entries())\n .map(([symbol, data]) => ({\n symbol,\n ...data,\n }))\n .sort((a, b) => b.pnl - a.pnl)\n .slice(0, 10); // Top 10 symbols\n }, [trades]);\n\n return (\n <Card\n title={\n <Box>\n <React.Suspense fallback={null}>\n <LazyPeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"portfolio.symbolPerformance\")}\n filterItems={filterItems}\n onFilter={onFilter}\n />\n </React.Suspense>\n </Box>\n }\n >\n <Grid cols={1} gap={4}>\n <Flex gap={4} itemAlign=\"end\">\n {/* Symbol Selector - With Logo and Search */}\n <Box className=\"oui-max-w-xs oui-flex-1\">\n <Text size=\"xs\" intensity={54} className=\"oui-mb-2\">\n {t(\"common.symbol\")}\n </Text>\n <SymbolSelector\n value={selectedSymbol || \"\"}\n onValueChange={(value: string) => setSelectedSymbol(value)}\n options={availableSymbols}\n placeholder={t(\"common.symbol\")}\n />\n </Box>\n\n {/* Aggregation Window Selector */}\n <Box className=\"oui-max-w-xs\">\n <Text size=\"xs\" intensity={54} className=\"oui-mb-2\">\n {t(\"portfolio.symbolPerformance.aggregation\")}\n </Text>\n <Select.options\n value={aggregationWindow}\n onValueChange={(value) =>\n setAggregationWindow(value as AggregationWindow)\n }\n options={aggregationWindowTypes.map((type) => ({\n label:\n type === \"15m\"\n ? \"15 min\"\n : type === \"1h\"\n ? \"Hourly\"\n : \"Daily\",\n value: type,\n }))}\n classNames={{ trigger: cn(\"oui-h-[2.4rem]\") }}\n />\n </Box>\n </Flex>\n\n <Divider className=\"oui-my-6 oui-border-t-2\" intensity={8} />\n\n <Box pb={4}>\n {/* Key Metrics */}\n <Grid cols={5} gap={4} mb={4}>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Total PnL (Gross) */}\n <Statistic\n label=\"Total PnL (Gross)\"\n valueProps={{ coloring: true, showIdentifier: true }}\n >\n {performanceData ? performanceData.grossPnL.toFixed(2) : \"--\"}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Total Fees */}\n <Statistic\n label={t(\"portfolio.symbolPerformance.totalFees\")}\n valueProps={{ showIdentifier: false }}\n >\n {performanceData ? performanceData.totalFees.toFixed(2) : \"--\"}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Total PnL (Net) */}\n <Statistic\n label=\"Total PnL (Net)\"\n valueProps={{ coloring: true, showIdentifier: true }}\n >\n {performanceData ? performanceData.totalPnL.toFixed(2) : \"--\"}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Total Volume */}\n <Statistic label={t(\"portfolio.symbolPerformance.totalVolume\")}>\n {performanceData\n ? performanceData.totalVolume.toFixed(2)\n : \"--\"}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Maker / Taker */}\n <Statistic label=\"Maker / Taker\">\n {performanceData ? (\n <MakerTakerShare makerShare={performanceData.makerShare} />\n ) : (\n <div className=\"oui-text-center\">--</div>\n )}\n </Statistic>\n </Box>\n </Grid>\n\n {/* Chart/Table View Toggle */}\n <Flex gap={2} mb={4}>\n <button\n onClick={() => setViewType(ViewType.chart)}\n className={cn(\n \"oui-px-4 oui-py-2 oui-rounded oui-text-sm oui-font-semibold oui-transition-all\",\n viewType === ViewType.chart\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54 hover:oui-bg-base-4\",\n )}\n >\n Chart\n </button>\n <button\n onClick={() => setViewType(ViewType.table)}\n className={cn(\n \"oui-px-4 oui-py-2 oui-rounded oui-text-sm oui-font-semibold oui-transition-all\",\n viewType === ViewType.table\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54 hover:oui-bg-base-4\",\n )}\n >\n Table\n </button>\n </Flex>\n\n {/* Charts - Conditional Rendering */}\n {viewType === ViewType.chart && (\n <Grid cols={1} gap={6}>\n {/* Combined PnL Chart (bars + cumulative line) */}\n <Box>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.realizedPnL\")}\n </Text>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-3\">\n <Flex gap={2}>\n <button\n onClick={() => setIsNetPnL(false)}\n className={cn(\n \"oui-px-3 oui-py-1 oui-rounded oui-text-xs oui-font-semibold oui-transition-all\",\n !isNetPnL\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54 hover:oui-bg-base-4\",\n )}\n >\n Gross P&L\n </button>\n <button\n onClick={() => setIsNetPnL(true)}\n className={cn(\n \"oui-px-3 oui-py-1 oui-rounded oui-text-xs oui-font-semibold oui-transition-all\",\n isNetPnL\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54 hover:oui-bg-base-4\",\n )}\n >\n Net P&L\n </button>\n </Flex>\n <Flex itemAlign=\"center\" gap={2}>\n <label className=\"oui-text-xs oui-text-base-contrast-54\">\n Cumulative\n </label>\n <Switch\n checked={showCumulativePnL}\n onCheckedChange={setShowCumulativePnL}\n />\n </Flex>\n </Flex>\n <Box\n r=\"md\"\n className=\"oui-h-[300px] oui-border oui-border-line-4\"\n >\n <CombinedPnLChart\n key={`combined-pnl-${aggregationWindow}`}\n data={combinedPnLData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n invisible={\n !aggregatedData ||\n !aggregatedData.periodData ||\n aggregatedData.periodData.length === 0\n }\n showCumulative={showCumulativePnL}\n />\n </Box>\n </Box>\n\n {/* Combined Volume Chart (bars + cumulative line) */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-3\">\n <Text as=\"div\" size=\"sm\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.volume\")}\n </Text>\n <Flex itemAlign=\"center\" gap={2}>\n <label className=\"oui-text-xs oui-text-base-contrast-54\">\n Cumulative\n </label>\n <Switch\n checked={showCumulativeVolume}\n onCheckedChange={setShowCumulativeVolume}\n />\n </Flex>\n </Flex>\n <Box\n r=\"md\"\n className=\"oui-h-[300px] oui-border oui-border-line-4\"\n >\n <CombinedVolumeChart\n key={`combined-vol-${aggregationWindow}`}\n data={combinedVolumeData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n invisible={\n !aggregatedData ||\n !aggregatedData.periodData ||\n aggregatedData.periodData.length === 0\n }\n showCumulative={showCumulativeVolume}\n />\n </Box>\n </Box>\n\n {/* Combined Price Chart - Only show when specific symbol is selected */}\n {!isAllSymbols && (\n <Box>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {getAggregationLabel(aggregationWindow)} Price\n </Text>\n <Box\n r=\"md\"\n className=\"oui-h-[300px] oui-border oui-border-line-4\"\n >\n <CombinedPriceChart\n key={`combined-price-${aggregationWindow}-${selectedSymbol}`}\n data={combinedPriceData}\n aggregationWindow={\n aggregationWindow as \"15m\" | \"1h\" | \"1d\"\n }\n invisible={combinedPriceData.length === 0}\n />\n </Box>\n </Box>\n )}\n\n {/* Combined Fees Chart (bars + cumulative line) */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-3\">\n <Text as=\"div\" size=\"sm\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.fees\")}\n </Text>\n <Flex itemAlign=\"center\" gap={2}>\n <label className=\"oui-text-xs oui-text-base-contrast-54\">\n Cumulative\n </label>\n <Switch\n checked={showCumulativeFees}\n onCheckedChange={setShowCumulativeFees}\n />\n </Flex>\n </Flex>\n <Box\n r=\"md\"\n className=\"oui-h-[300px] oui-border oui-border-line-4\"\n >\n <CombinedFeesChart\n key={`combined-fees-${aggregationWindow}`}\n data={combinedFeesData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n invisible={\n !aggregatedData ||\n !aggregatedData.periodData ||\n aggregatedData.periodData.length === 0\n }\n showCumulative={showCumulativeFees}\n />\n </Box>\n </Box>\n </Grid>\n )}\n\n {/* Table View - Conditional Rendering */}\n {viewType === ViewType.table && (\n <Box className=\"oui-h-[600px]\">\n <DataTable<PerformanceTableRow>\n bordered\n columns={tableColumns}\n dataSource={tableData}\n emptyView={\n <Box className=\"oui-text-center oui-py-8\">\n <Text>{t(\"portfolio.symbolPerformance.noData\")}</Text>\n </Box>\n }\n />\n </Box>\n )}\n\n {/* Symbol Summary - Top Symbols by PnL */}\n {symbolSummaryData.length > 0 && (\n <Box mt={8}>\n <Divider className=\"oui-my-6 oui-border-t-2\" intensity={8} />\n <Text as=\"div\" size=\"lg\" weight=\"semibold\" className=\"oui-mb-4\">\n {t(\"portfolio.symbolPerformance.pnlRanking\")}\n </Text>\n <Box className=\"oui-border oui-border-line-4 oui-rounded-md oui-p-4\">\n <PnLRankingChart\n data={symbolSummaryData}\n onSymbolSelect={setSelectedSymbol}\n />\n </Box>\n </Box>\n )}\n </Box>\n </Grid>\n </Card>\n );\n};\n","import { format, parseISO } from \"date-fns\";\nimport { AggregationWindow } from \"./symbolPerformance.script\";\n\n/**\n * Get human-readable label for aggregation window type.\n *\n * @param window - Aggregation window (daily, hourly, 15-min)\n * @returns Display label (e.g., \"Daily\", \"Hourly\", \"15 min\")\n */\nexport const getAggregationLabel = (window: AggregationWindow): string => {\n switch (window) {\n case AggregationWindow.FIFTEEN_MIN:\n return \"15 min\";\n case AggregationWindow.HOURLY:\n return \"Hourly\";\n case AggregationWindow.DAILY:\n return \"Daily\";\n default:\n return \"Daily\";\n }\n};\n\n/**\n * Format a date string for display on charts based on aggregation window.\n * Handles different precision levels for different time intervals.\n *\n * @param dateString - ISO datetime string\n * @param window - Aggregation window (daily, hourly, 15-min)\n * @returns Human-readable formatted date string\n */\nexport const formatDateForChart = (\n dateString: string,\n window: AggregationWindow,\n): string => {\n try {\n const date = parseISO(dateString);\n\n switch (window) {\n case AggregationWindow.FIFTEEN_MIN:\n case AggregationWindow.HOURLY:\n // Show time for hourly/15-min: \"Nov 21, 3:00 AM\"\n return format(date, \"MMM d, h:mm a\");\n case AggregationWindow.DAILY:\n default:\n // Show date only for daily: \"Nov 21\"\n return format(date, \"MMM d\");\n }\n } catch {\n // Fallback if parsing fails\n return dateString;\n }\n};\n\n/**\n * Format a date string to \"yyyy-MM-dd\" format.\n * Used for API calls and date range display.\n *\n * @param dateString - ISO datetime string\n * @returns Date in \"yyyy-MM-dd\" format\n */\nexport const formatDateOnly = (dateString: string): string => {\n try {\n const date = parseISO(dateString);\n return format(date, \"yyyy-MM-dd\");\n } catch {\n return dateString;\n }\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Text, cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type PnLRankingDataItem = {\n symbol: string;\n pnl: number;\n volume: number;\n fees: number;\n};\n\ntype PnLRankingChartProps = {\n data: PnLRankingDataItem[];\n onSymbolSelect?: (symbol: string) => void;\n};\n\nconst formatCurrency = (value: number): string => {\n if (value >= 1e9) return `$${(value / 1e9).toFixed(2)}B`;\n if (value >= 1e6) return `$${(value / 1e6).toFixed(2)}M`;\n if (value >= 1e3) return `$${(value / 1e3).toFixed(2)}K`;\n return `$${value.toFixed(2)}`;\n};\n\nexport const PnLRankingChart: React.FC<PnLRankingChartProps> = ({\n data,\n onSymbolSelect,\n}) => {\n const { t } = useTranslation();\n\n const maxAbsValue = useMemo(\n () => Math.max(...data.map((item) => Math.abs(item.pnl)), 1),\n [data],\n );\n\n return (\n <div className=\"oui-w-full\">\n {/* Header Row */}\n <div className=\"oui-grid oui-gap-4 oui-border-b oui-border-line-4 oui-mb-2 oui-px-4 oui-py-3\">\n <div className=\"oui-grid oui-grid-cols-12 oui-gap-4 oui-items-center\">\n <div className=\"oui-col-span-2\">\n <Text size=\"sm\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.symbols\")}\n </Text>\n </div>\n <div className=\"oui-col-span-6\">\n <Text size=\"sm\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.pnl\")}\n </Text>\n </div>\n <div className=\"oui-col-span-2 oui-text-right\">\n <Text size=\"sm\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.volume\")}\n </Text>\n </div>\n <div className=\"oui-col-span-2 oui-text-right\">\n <Text size=\"sm\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.fees\")}\n </Text>\n </div>\n </div>\n </div>\n\n {/* Data Rows */}\n <div className=\"oui-space-y-3\">\n {data.map((item) => {\n const isPositive = item.pnl >= 0;\n const barWidth = (Math.abs(item.pnl) / maxAbsValue) * 100;\n\n return (\n <div\n key={item.symbol}\n onClick={() => onSymbolSelect?.(item.symbol)}\n className=\"oui-border oui-border-line-4 hover:oui-border-line-5 oui-rounded-md oui-transition-colors oui-px-4 oui-py-3 oui-cursor-pointer\"\n >\n <div className=\"oui-grid oui-grid-cols-12 oui-gap-4 oui-items-center\">\n {/* Symbol Column */}\n <div className=\"oui-col-span-2\">\n <Text size=\"sm\" weight=\"semibold\" className=\"oui-truncate\">\n {item.symbol}\n </Text>\n </div>\n\n {/* P&L Column with Inline Bar Chart */}\n <div className=\"oui-col-span-6\">\n <div className=\"oui-relative oui-w-full oui-h-8 oui-rounded oui-bg-base-8 oui-overflow-hidden oui-flex oui-items-center\">\n <div\n className=\"oui-absolute oui-h-full oui-rounded oui-transition-all\"\n style={{\n width: `${barWidth}%`,\n backgroundColor: isPositive ? \"#00B49E\" : \"#FF5959\",\n }}\n />\n <Text\n size=\"sm\"\n weight=\"semibold\"\n className={cn(\n \"oui-relative oui-z-10 oui-ml-2\",\n isPositive\n ? \"oui-text-profit-500\"\n : \"oui-text-loss-500\",\n )}\n >\n {isPositive ? \"+\" : \"\"}\n {item.pnl.toFixed(2)}\n </Text>\n </div>\n </div>\n\n {/* Volume Column */}\n <div className=\"oui-col-span-2 oui-text-right\">\n <Text size=\"sm\" weight=\"semibold\">\n {formatCurrency(item.volume)}\n </Text>\n </div>\n\n {/* Fees Column */}\n <div className=\"oui-col-span-2 oui-text-right\">\n <Text size=\"sm\" weight=\"semibold\" intensity={80}>\n {formatCurrency(item.fees)}\n </Text>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Empty State */}\n {data.length === 0 && (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-py-8\">\n <Text intensity={54}>{t(\"portfolio.symbolPerformance.noData\")}</Text>\n </div>\n )}\n </div>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport {\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuPortal,\n Flex,\n Text,\n TokenIcon,\n Input,\n cn,\n CaretDownIcon,\n CaretUpIcon,\n} from \"@kodiak-finance/orderly-ui\";\n\nexport interface SymbolOption {\n value: string;\n label: string;\n}\n\nexport interface SymbolSelectorProps {\n value: string;\n onValueChange: (value: string) => void;\n options: SymbolOption[];\n placeholder?: string;\n}\n\nexport const SymbolSelector: React.FC<SymbolSelectorProps> = ({\n value,\n onValueChange,\n options,\n placeholder = \"Select symbol\",\n}) => {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n\n const filteredOptions = useMemo(() => {\n if (!search) return options;\n return options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(search.toLowerCase()) ||\n opt.value.toLowerCase().includes(search.toLowerCase()),\n );\n }, [search, options]);\n\n const selectedOption = options.find((opt) => opt.value === value);\n const displayLabel =\n value === \"ALL_SYMBOLS\"\n ? \"All Symbols\"\n : selectedOption?.label || placeholder;\n const isAllSymbols = value === \"ALL_SYMBOLS\";\n\n return (\n <DropdownMenuRoot open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <button className=\"oui-w-full oui-px-3 oui-py-2 oui-rounded oui-border oui-border-line-6 oui-bg-line-4 oui-text-left oui-flex oui-items-center oui-justify-between hover:oui-bg-line-5\">\n <Flex gap={1} itemAlign=\"center\">\n {!isAllSymbols && displayLabel !== placeholder && (\n <TokenIcon name={displayLabel} size=\"2xs\" />\n )}\n <Text size=\"xs\" className=\"oui-text-base-contrast-80\">\n {displayLabel}\n </Text>\n </Flex>\n\n <CaretDownIcon\n size={12}\n className={cn(\n \"oui-text-base-contrast-54 oui-transition-transform\",\n open && \"oui-rotate-180\",\n )}\n />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={4}\n className=\"oui-w-[var(--radix-dropdown-menu-trigger-width)] oui-bg-base-8 oui-border oui-border-line-6 oui-rounded oui-p-2 oui-z-50\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n {/* Search Input */}\n <div className=\"oui-px-2 oui-py-2 oui-border-b oui-border-base-4 oui-mb-2\">\n <Input\n autoFocus\n placeholder=\"Search symbols...\"\n value={search}\n onValueChange={setSearch}\n size=\"sm\"\n />\n </div>\n\n {/* Options List */}\n <div className=\"oui-max-h-[300px] oui-overflow-y-auto\">\n {filteredOptions.length === 0 ? (\n <div className=\"oui-px-3 oui-py-2 oui-text-center oui-text-base-contrast-54 oui-text-xs\">\n No symbols found\n </div>\n ) : (\n filteredOptions.map((option) => {\n const isSelected = value === option.value;\n const cleanLabel =\n option.value === \"ALL_SYMBOLS\" ? \"All Symbols\" : option.label;\n\n return (\n <button\n key={option.value}\n onClick={() => {\n onValueChange(option.value);\n setOpen(false);\n setSearch(\"\");\n }}\n className={cn(\n \"oui-w-full oui-px-3 oui-py-2 oui-rounded oui-flex oui-items-center oui-gap-2 oui-text-left oui-transition-colors\",\n isSelected ? \"oui-bg-base-7\" : \"hover:oui-bg-base-7\",\n )}\n >\n {option.value !== \"ALL_SYMBOLS\" && (\n <TokenIcon name={cleanLabel} size=\"2xs\" />\n )}\n <Text size=\"xs\" className=\"oui-text-base-contrast-80\">\n {cleanLabel}\n </Text>\n </button>\n );\n })\n )}\n </div>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useMemo } from \"react\";\nimport { useSWR } from \"@kodiak-finance/orderly-hooks\";\n\nexport interface KlineData {\n symbol: string;\n resolution: string;\n timestamp: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n}\n\ninterface KlineResponse {\n s: string; // status: \"ok\"\n o: number[]; // open\n h: number[]; // high\n l: number[]; // low\n c: number[]; // close\n v: number[]; // volume\n a: number[]; // notional\n t: number[]; // timestamps\n}\n\nconst fetcher = (url: string) =>\n fetch(`https://api.orderly.org${url}`).then((res) => res.json());\n\nexport const useKlineData = (params: {\n symbol?: string;\n resolution?: \"15m\" | \"1h\" | \"1d\";\n from?: number;\n to?: number;\n limit?: number;\n}) => {\n const { symbol, resolution, from, to, limit = 1000 } = params;\n\n const getKey = useMemo(() => {\n if (!symbol || !resolution) return null;\n\n // Calculate default from/to timestamps\n const now = Math.floor(Date.now() / 1000);\n\n // Use provided from/to timestamps, or calculate defaults\n let fromTimestamp = from;\n const toTimestamp = to || now;\n\n if (!fromTimestamp) {\n // If no from is provided, calculate based on resolution and limit\n const secondsPerCandle = {\n \"15m\": 900,\n \"1h\": 3600,\n \"1d\": 86400,\n }[resolution];\n\n fromTimestamp = now - limit * secondsPerCandle;\n }\n\n const search = new URLSearchParams();\n search.set(\"symbol\", symbol);\n search.set(\"resolution\", resolution);\n search.set(\"from\", fromTimestamp.toString());\n search.set(\"to\", toTimestamp.toString());\n\n return `/v1/tv/kline_history?${search.toString()}`;\n }, [symbol, resolution, from, to, limit]);\n\n const { data, isLoading, error } = useSWR<KlineResponse>(getKey, fetcher, {\n revalidateOnFocus: false,\n dedupingInterval: 60000, // Cache for 1 minute\n });\n\n // Transform API response to usable format\n const klines = useMemo(() => {\n if (!data?.t || !Array.isArray(data.t)) return [];\n\n const { o, h, l, c, v, t } = data as KlineResponse;\n\n return t.map((timestamp, index) => ({\n symbol: symbol || \"\",\n resolution: resolution || \"\",\n timestamp,\n open: o[index],\n high: h[index],\n low: l[index],\n close: c[index],\n volume: v[index],\n }));\n }, [data, symbol, resolution]);\n\n return {\n klines,\n isLoading,\n error,\n };\n};\n","import React, { useMemo, useState } from \"react\";\nimport {\n CombinedPnLChart,\n CombinedVolumeChart,\n CombinedFeesChart,\n CombinedPriceChart,\n} from \"@kodiak-finance/orderly-chart\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Card,\n Text,\n Flex,\n Tabs,\n TabPanel,\n DataFilter,\n Select,\n Grid,\n Divider,\n Switch,\n Statistic,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { formatDateForChart, getAggregationLabel } from \"./dateUtils\";\nimport { PnLRankingChartMobile } from \"./pnlRankingChartMobile\";\nimport type { UseSymbolPerformanceScriptReturn } from \"./symbolPerformance.script\";\nimport { PeriodType, AggregationWindow } from \"./symbolPerformance.script\";\nimport { SymbolSelector } from \"./symbolSelector\";\nimport { useKlineData } from \"./useKlineData\";\nimport type { TradeData } from \"./useTrades\";\n\nexport type SymbolPerformanceUIMobileProps = UseSymbolPerformanceScriptReturn;\n\nconst MakerTakerShare: React.FC<{ makerShare: number }> = ({ makerShare }) => {\n const takerShare = 100 - makerShare;\n return (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-gap-4\">\n <Text weight=\"semibold\">{makerShare.toFixed(1)}%</Text>\n <span className=\"oui-text-base-contrast-54\">/</span>\n <Text weight=\"semibold\">{takerShare.toFixed(1)}%</Text>\n </div>\n );\n};\n\nexport const SymbolPerformanceUIMobile: React.FC<\n SymbolPerformanceUIMobileProps\n> = (props) => {\n const {\n selectedSymbol,\n setSelectedSymbol,\n period,\n onPeriodChange,\n performanceData,\n filterItems,\n onFilter,\n aggregationWindow,\n setAggregationWindow,\n aggregationWindowTypes,\n aggregatedData,\n trades,\n dateRange,\n isNetPnL,\n setIsNetPnL,\n } = props;\n const { t } = useTranslation();\n const symbolsInfo = useSymbolsInfo();\n const [showCumulativePnL, setShowCumulativePnL] = useState(true);\n const [showCumulativeVolume, setShowCumulativeVolume] = useState(false);\n const [showCumulativeFees, setShowCumulativeFees] = useState(false);\n\n // Trim all data based on first non-zero volume to keep all charts aligned\n const getFirstNonZeroVolumeIndex = (data: any[]) => {\n if (!data || data.length === 0) return 0;\n const index = data.findIndex((item) => item.volume && item.volume !== 0);\n return index === -1 ? 0 : index;\n };\n\n // Get available symbols\n const availableSymbols = useMemo(() => {\n const symbols = Object.keys(symbolsInfo);\n return [\n { value: \"ALL_SYMBOLS\", label: \"All Symbols\" },\n ...symbols.map((symbol) => ({\n value: symbol,\n label: symbol.replace(\"PERP_\", \"\").replace(\"_USDC\", \"\"),\n })),\n ];\n }, [symbolsInfo]);\n\n // Combined PnL chart data with trim\n // aggregatedData.periodData contains NET PnL (after fees)\n // Toggle allows viewing GROSS PnL (before fees) by adding fees back\n const combinedPnLData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const trimIndex = getFirstNonZeroVolumeIndex(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(trimIndex);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n // Net PnL = actual result (with fees deducted)\n // Gross PnL = add fees back to show hypothetical without fees\n pnl: isNetPnL ? item.pnl : item.pnl + item.fees,\n }));\n }, [aggregatedData, aggregationWindow, isNetPnL]);\n\n // Combined Volume chart data with trim\n const combinedVolumeData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const trimIndex = getFirstNonZeroVolumeIndex(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(trimIndex);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n volume: item.volume ?? 0,\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Combined Fees chart data with trim\n // Fees are shown as negative since they're a cost\n const combinedFeesData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const trimIndex = getFirstNonZeroVolumeIndex(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(trimIndex);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n fees: -(item.fees ?? 0),\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Map aggregation window to K-line resolution\n const klineResolution = useMemo(() => {\n switch (aggregationWindow) {\n case \"15m\":\n return \"15m\" as const;\n case \"1h\":\n return \"1h\" as const;\n case \"1d\":\n return \"1d\" as const;\n default:\n return \"1d\" as const;\n }\n }, [aggregationWindow]);\n\n // Fetch K-line data (only if a specific symbol is selected, not \"ALL_SYMBOLS\")\n const isAllSymbols = selectedSymbol === \"ALL_SYMBOLS\";\n const { klines } = useKlineData({\n symbol: !isAllSymbols && selectedSymbol ? selectedSymbol : undefined,\n resolution: klineResolution,\n from: dateRange ? Math.floor(dateRange.from.getTime() / 1000) : undefined,\n to: dateRange ? Math.floor(dateRange.to.getTime() / 1000) : undefined,\n });\n\n // Combine price data - trim to match the trading data range for cross-chart alignment\n // This ensures price chart X-axis aligns with PnL/Volume/Fees charts for easy tracing\n const combinedPriceData = useMemo(() => {\n if (klines.length === 0 || !aggregatedData || !aggregatedData.periodData) {\n return [];\n }\n\n // Get the same trim index as trading data\n const trimIndex = getFirstNonZeroVolumeIndex(aggregatedData.periodData);\n const firstTrimmedEntry = aggregatedData.periodData[trimIndex];\n\n if (!firstTrimmedEntry) {\n return [];\n }\n\n // Filter klines to only include those on or after the first trimmed trading date\n const firstTrimmedDate = new Date(firstTrimmedEntry.date);\n\n return klines\n .filter((k) => {\n const klineDate = new Date(k.timestamp * 1000);\n return klineDate >= firstTrimmedDate;\n })\n .map((k) => {\n const date = new Date(k.timestamp * 1000);\n const formattedDate = formatDateForChart(\n date.toISOString(),\n aggregationWindow,\n );\n\n return {\n date: formattedDate,\n open: k.open,\n high: k.high,\n low: k.low,\n close: k.close,\n };\n });\n }, [klines, aggregatedData, aggregationWindow]);\n\n const isEmptyData =\n !aggregatedData ||\n !aggregatedData.periodData ||\n aggregatedData.periodData.length === 0;\n\n // Build DataFilter items with only date range (symbol selector is separate)\n const dataFilterItems = useMemo(() => {\n const items: Array<{ type: \"range\"; name: string; value: any }> = [];\n\n // Add date range filter if available\n if (filterItems && filterItems.length > 0) {\n const dateRangeFilter = filterItems.find(\n (item) => item.name === \"dateRange\",\n );\n if (dateRangeFilter) {\n items.push({\n type: \"range\" as const,\n name: \"dateRange\",\n value: dateRangeFilter.value,\n });\n }\n }\n\n return items;\n }, [filterItems]);\n\n const handleFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\" && onFilter) {\n onFilter(filter);\n }\n };\n\n // Aggregate trades by symbol\n const symbolSummaryData = useMemo(() => {\n if (!trades || trades.length === 0) return [];\n\n const symbolMap = new Map<\n string,\n { pnl: number; volume: number; fees: number; trades: number }\n >();\n\n trades.forEach((trade: TradeData) => {\n const symbol = trade.symbol;\n if (!symbolMap.has(symbol)) {\n symbolMap.set(symbol, { pnl: 0, volume: 0, fees: 0, trades: 0 });\n }\n\n const current = symbolMap.get(symbol)!;\n const tradeVolume = trade.executed_quantity * trade.executed_price;\n\n current.pnl += trade.realized_pnl || 0;\n current.volume += tradeVolume;\n current.fees += trade.fee || 0;\n current.trades += 1;\n });\n\n // Convert map to array and sort by PnL (highest first)\n return Array.from(symbolMap.entries())\n .map(([symbol, data]) => ({\n symbol,\n ...data,\n }))\n .sort((a, b) => b.pnl - a.pnl)\n .slice(0, 10); // Top 10 symbols\n }, [trades]);\n\n return (\n <div>\n {/* Symbol Selector & Aggregation Window */}\n <Flex gap={2} itemAlign=\"end\" mb={2}>\n <Box className=\"oui-flex-1\">\n <Text size=\"xs\" intensity={54} className=\"oui-mb-2\">\n {t(\"common.symbol\")}\n </Text>\n <SymbolSelector\n value={selectedSymbol || \"\"}\n onValueChange={(value: string) => setSelectedSymbol(value)}\n options={availableSymbols}\n placeholder={t(\"common.symbol\")}\n />\n </Box>\n\n <Box className=\"oui-flex-1\">\n <Text size=\"xs\" intensity={54} className=\"oui-mb-2\">\n {t(\"portfolio.symbolPerformance.aggregation\")}\n </Text>\n <Select.combine\n value={aggregationWindow}\n onValueChange={(value) =>\n setAggregationWindow(value as AggregationWindow)\n }\n options={aggregationWindowTypes.map((type) => ({\n label:\n type === \"15m\" ? \"15 min\" : type === \"1h\" ? \"Hourly\" : \"Daily\",\n value: type,\n }))}\n />\n </Box>\n </Flex>\n\n {/* Date Range Filter */}\n {dataFilterItems && dataFilterItems.length > 0 && (\n <Box mb={4}>\n <DataFilter\n items={dataFilterItems}\n onFilter={handleFilter}\n className=\"oui-border-none oui-py-0\"\n />\n </Box>\n )}\n\n {/* Period Buttons - Below Filters */}\n <Box mb={4}>\n <Tabs\n value={period || \"\"}\n defaultValue={PeriodType.WEEK}\n classNames={{ tabsList: \"oui-justify-between\", trigger: \"oui-w-1/4\" }}\n onValueChange={(value) => onPeriodChange(value as PeriodType)}\n >\n <TabPanel\n title={t(\"common.select.1d\")}\n value={PeriodType.DAY}\n className=\"oui-min-h-0 oui-p-0\"\n />\n <TabPanel\n title={t(\"common.select.7d\")}\n value={PeriodType.WEEK}\n className=\"oui-min-h-0 oui-p-0\"\n />\n <TabPanel\n title={t(\"common.select.30d\")}\n value={PeriodType.MONTH}\n className=\"oui-min-h-0 oui-p-0\"\n />\n <TabPanel\n title={t(\"common.select.90d\")}\n value={PeriodType.QUARTER}\n className=\"oui-min-h-0 oui-p-0\"\n />\n </Tabs>\n </Box>\n\n {/* Key Metrics - Above Charts (match desktop set) */}\n <Grid cols={2} gap={2} mb={2}>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5\">\n <Statistic\n label={`${t(\"portfolio.symbolPerformance.totalPnL\")} (Gross)`}\n valueProps={{ coloring: true, showIdentifier: true, dp: 2 }}\n classNames={{ value: \"oui-text-sm oui-font-semibold\" }}\n >\n {performanceData?.grossPnL ?? \"-\"}\n </Statistic>\n </Card>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5\">\n <Statistic\n label={t(\"portfolio.symbolPerformance.totalFees\")}\n valueProps={{ dp: 2 }}\n classNames={{ value: \"oui-text-sm\" }}\n >\n {performanceData?.totalFees ?? \"-\"}\n </Statistic>\n </Card>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5\">\n <Statistic\n label={`${t(\"portfolio.symbolPerformance.totalPnL\")} (Net)`}\n valueProps={{ coloring: true, showIdentifier: true, dp: 2 }}\n classNames={{ value: \"oui-text-sm oui-font-semibold\" }}\n >\n {performanceData?.totalPnL ?? \"-\"}\n </Statistic>\n </Card>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5\">\n <Statistic\n label={t(\"portfolio.symbolPerformance.totalVolume\")}\n valueProps={{ dp: 2 }}\n classNames={{ value: \"oui-text-sm\" }}\n >\n {performanceData?.totalVolume ?? \"-\"}\n </Statistic>\n </Card>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5 oui-col-span-2\">\n <Statistic\n label=\"Maker / Taker\"\n classNames={{ value: \"oui-text-sm oui-font-semibold\" }}\n >\n {performanceData ? (\n <MakerTakerShare makerShare={performanceData.makerShare} />\n ) : (\n \"--\"\n )}\n </Statistic>\n </Card>\n </Grid>\n\n {/* Charts - Combined visualization (bars + cumulative line) */}\n <Grid cols={1} gap={4} mb={4}>\n {/* PnL - Combined Bars + Cumulative Line */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-2\">\n <Text as=\"div\" size=\"xs\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.realizedPnL\")}\n </Text>\n <Flex gap={1}>\n <button\n onClick={() => setIsNetPnL(false)}\n className={cn(\n \"oui-px-2 oui-py-0.5 oui-rounded oui-text-2xs oui-font-semibold oui-transition-all\",\n !isNetPnL\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54\",\n )}\n >\n Gross\n </button>\n <button\n onClick={() => setIsNetPnL(true)}\n className={cn(\n \"oui-px-2 oui-py-0.5 oui-rounded oui-text-2xs oui-font-semibold oui-transition-all\",\n isNetPnL\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54\",\n )}\n >\n Net\n </button>\n <Divider direction=\"vertical\" />\n <Flex itemAlign=\"center\" gap={1}>\n <label className=\"oui-text-2xs oui-text-base-contrast-54\">\n Cum.\n </label>\n <Switch\n checked={showCumulativePnL}\n onCheckedChange={setShowCumulativePnL}\n />\n </Flex>\n </Flex>\n </Flex>\n <Box r=\"md\" className=\"oui-h-[144px] oui-border oui-border-line-4\">\n <CombinedPnLChart\n key={`mobile-pnl-${aggregationWindow}`}\n data={combinedPnLData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n isMobile={true}\n invisible={isEmptyData}\n showCumulative={showCumulativePnL}\n />\n </Box>\n </Box>\n\n {/* Volume - Combined Bars + Cumulative Line */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-2\">\n <Text as=\"div\" size=\"xs\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.volume\")}\n </Text>\n <Flex itemAlign=\"center\" gap={1}>\n <label className=\"oui-text-2xs oui-text-base-contrast-54\">\n Cum.\n </label>\n <Switch\n checked={showCumulativeVolume}\n onCheckedChange={setShowCumulativeVolume}\n />\n </Flex>\n </Flex>\n <Box r=\"md\" className=\"oui-h-[144px] oui-border oui-border-line-4\">\n <CombinedVolumeChart\n key={`mobile-volume-${aggregationWindow}`}\n data={combinedVolumeData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n isMobile={true}\n invisible={isEmptyData}\n showCumulative={showCumulativeVolume}\n />\n </Box>\n </Box>\n\n {/* Price Chart - Only show when specific symbol is selected */}\n {!isAllSymbols && (\n <Box>\n <Text as=\"div\" size=\"xs\" className=\"oui-mb-2\">\n {getAggregationLabel(aggregationWindow)} Price\n </Text>\n <Box r=\"md\" className=\"oui-h-[144px] oui-border oui-border-line-4\">\n <CombinedPriceChart\n key={`mobile-price-${aggregationWindow}-${selectedSymbol}`}\n data={combinedPriceData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n isMobile={true}\n invisible={combinedPriceData.length === 0}\n />\n </Box>\n </Box>\n )}\n\n {/* Fees - Combined Bars + Cumulative Line */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-2\">\n <Text as=\"div\" size=\"xs\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.fees\")}\n </Text>\n <Flex itemAlign=\"center\" gap={1}>\n <label className=\"oui-text-2xs oui-text-base-contrast-54\">\n Cum.\n </label>\n <Switch\n checked={showCumulativeFees}\n onCheckedChange={setShowCumulativeFees}\n />\n </Flex>\n </Flex>\n <Box r=\"md\" className=\"oui-h-[144px] oui-border oui-border-line-4\">\n <CombinedFeesChart\n key={`mobile-fees-${aggregationWindow}`}\n data={combinedFeesData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n isMobile={true}\n invisible={isEmptyData}\n showCumulative={showCumulativeFees}\n />\n </Box>\n </Box>\n </Grid>\n\n {/* Symbol Summary - Top Symbols by PnL */}\n {symbolSummaryData.length > 0 && (\n <Box mt={6} mb={4}>\n <Divider className=\"oui-my-6 oui-border-t-2\" intensity={8} />\n <Text as=\"div\" size=\"sm\" weight=\"semibold\" className=\"oui-mb-4\">\n {t(\"portfolio.symbolPerformance.pnlRanking\")}\n </Text>\n <Box className=\"oui-border oui-border-line-4 oui-rounded-md oui-p-3\">\n <PnLRankingChartMobile\n data={symbolSummaryData}\n onSymbolSelect={setSelectedSymbol}\n />\n </Box>\n </Box>\n )}\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Text, cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type PnLRankingDataItem = {\n symbol: string;\n pnl: number;\n volume: number;\n fees: number;\n};\n\ntype PnLRankingChartMobileProps = {\n data: PnLRankingDataItem[];\n onSymbolSelect?: (symbol: string) => void;\n};\n\nconst formatCurrency = (value: number): string => {\n if (value >= 1e9) return `$${(value / 1e9).toFixed(2)}B`;\n if (value >= 1e6) return `$${(value / 1e6).toFixed(2)}M`;\n if (value >= 1e3) return `$${(value / 1e3).toFixed(2)}K`;\n return `$${value.toFixed(2)}`;\n};\n\nexport const PnLRankingChartMobile: React.FC<PnLRankingChartMobileProps> = ({\n data,\n onSymbolSelect,\n}) => {\n const { t } = useTranslation();\n\n const maxAbsValue = useMemo(\n () => Math.max(...data.map((item) => Math.abs(item.pnl)), 1),\n [data],\n );\n\n return (\n <div className=\"oui-w-full oui-space-y-3\">\n {/* Header Row */}\n <div className=\"oui-border-b oui-border-line-4 oui-mb-2 oui-px-3 oui-py-2\">\n <div className=\"oui-flex oui-items-center oui-justify-between\">\n <Text size=\"xs\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.symbols\")}\n </Text>\n <Text\n size=\"xs\"\n intensity={54}\n weight=\"semibold\"\n className=\"oui-text-right\"\n >\n {t(\"portfolio.symbolPerformance.pnlRanking.pnl\")}\n </Text>\n </div>\n </div>\n\n {/* Data Rows */}\n {data.map((item) => {\n const isPositive = item.pnl >= 0;\n const barWidth = (Math.abs(item.pnl) / maxAbsValue) * 100;\n\n return (\n <div\n key={item.symbol}\n onClick={() => onSymbolSelect?.(item.symbol)}\n className=\"oui-border oui-border-line-4 hover:oui-border-line-5 oui-rounded oui-transition-colors oui-px-3 oui-py-3 oui-cursor-pointer\"\n >\n {/* Symbol - Full Width, No Truncation */}\n <Text size=\"xs\" weight=\"semibold\" className=\"oui-mb-2\">\n {item.symbol}\n </Text>\n\n {/* Bar with P&L Value - Full Width */}\n <div className=\"oui-relative oui-w-full oui-h-7 oui-rounded oui-bg-base-8 oui-overflow-hidden oui-flex oui-items-center oui-mb-3\">\n <div\n className=\"oui-absolute oui-h-full oui-rounded oui-transition-all\"\n style={{\n width: `${barWidth}%`,\n backgroundColor: isPositive ? \"#00B49E\" : \"#FF5959\",\n }}\n />\n <Text\n size=\"xs\"\n weight=\"semibold\"\n className={cn(\n \"oui-relative oui-z-10 oui-ml-2\",\n isPositive ? \"oui-text-profit-500\" : \"oui-text-loss-500\",\n )}\n >\n {isPositive ? \"+\" : \"\"}\n {item.pnl.toFixed(2)}\n </Text>\n </div>\n\n {/* Volume and Fees - Compact Secondary Info */}\n <div className=\"oui-flex oui-justify-between oui-gap-4 oui-border-t oui-border-line-4 oui-pt-3\">\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text size=\"2xs\" intensity={54}>\n {t(\"portfolio.symbolPerformance.pnlRanking.volume\")}\n </Text>\n <Text size=\"xs\" weight=\"semibold\">\n {formatCurrency(item.volume)}\n </Text>\n </div>\n <div className=\"oui-text-right oui-flex oui-flex-col oui-gap-1\">\n <Text size=\"2xs\" intensity={54}>\n {t(\"portfolio.symbolPerformance.pnlRanking.fees\")}\n </Text>\n <Text size=\"xs\" weight=\"semibold\" intensity={80}>\n {formatCurrency(item.fees)}\n </Text>\n </div>\n </div>\n </div>\n );\n })}\n\n {/* Empty State */}\n {data.length === 0 && (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-py-8\">\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.symbolPerformance.noData\")}\n </Text>\n </div>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/layout/context.tsx","../src/pages/overview/assets/assets.script.ts","../src/pages/overview/assets/assetsHeader.tsx","../src/pages/overview/assets/assets.ui.tsx","../src/pages/overview/assets/assets.widget.tsx","../src/pages/overview/assets/index.ts","../src/pages/overview/historyDataGroup/historyDataGroup.script.ts","../src/pages/overview/assetHistory/column.tsx","../src/pages/overview/helper/date.ts","../src/pages/overview/assetHistory/assetHistory.script.ts","../src/pages/overview/assetHistory/assetHistory.ui.tsx","../src/pages/overview/assetHistory/assetHistory.ui.mobile.tsx","../src/pages/overview/assetHistory/assetHistory.widget.tsx","../src/pages/overview/assetHistory/index.tsx","../src/pages/overview/funding/column.tsx","../src/pages/overview/funding/fundingHistory.ui.tsx","../src/pages/overview/funding/fundingHistory.ui.mobile.tsx","../src/pages/overview/funding/useDataSource.script.ts","../src/pages/overview/funding/fundingHistory.widget.tsx","../src/pages/overview/funding/index.tsx","../src/pages/overview/distribution/column.tsx","../src/pages/overview/distribution/distribution.ui.tsx","../src/pages/overview/distribution/distribution.ui.mobile.tsx","../src/pages/overview/distribution/useDataSource.script.ts","../src/pages/overview/distribution/distribution.widget.tsx","../src/pages/overview/distribution/index.tsx","../src/pages/overview/TransferHistory/transfer.mobile.ui.tsx","../src/pages/overview/TransferHistory/column.tsx","../src/pages/overview/TransferHistory/transfer.ui.tsx","../src/pages/overview/TransferHistory/useDataSource.script.ts","../src/pages/overview/TransferHistory/transfer.widget.tsx","../src/pages/overview/TransferHistory/index.tsx","../src/hooks/useAccountsData.ts","../src/hooks/useAssetTotalValue.ts","../src/pages/assets/assetsPage/assets.ui.desktop.tsx","../src/hooks/useAccountFilter.ts","../src/hooks/useAssetsAccountFilter.ts","../src/hooks/index.ts","../src/pages/assets/convertPage/convert.script.ts","../src/pages/assets/convertPage/convert.column.tsx","../src/pages/assets/convertPage/convert.ui.desktop.tsx","../src/pages/assets/convertPage/convert.ui.mobile.tsx","../src/pages/assets/convertPage/convert.widget.tsx","../src/pages/overview/VaultsHistory/column.tsx","../src/pages/overview/VaultsHistory/transfer.ui.tsx","../src/pages/overview/VaultsHistory/useDataSource.script.ts","../src/pages/overview/VaultsHistory/vaults.ui.mobile.tsx","../src/pages/overview/VaultsHistory/transfer.widget.tsx","../src/pages/overview/VaultsHistory/index.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.ui.desktop.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.ui.mobile.tsx","../src/pages/overview/historyDataGroup/historyDataGroup.widget.tsx","../src/pages/overview/historyDataGroup/index.ts","../src/pages/overview/provider/overviewContext.tsx","../src/pages/overview/assetChart/assetsChart.script.ts","../src/pages/overview/shared/useAssetHistory.ts","../src/pages/overview/shared/periodHeader.tsx","../src/pages/overview/assetChart/assetsChart.ui.tsx","../src/pages/overview/assetChart/assetsChart.widget.tsx","../src/pages/overview/assetChart/index.ts","../src/pages/overview/performance/performance.ui.tsx","../src/pages/assets/type.ts","../src/pages/overview/performance/performance.script.ts","../src/pages/overview/performance/performance.widget.tsx","../src/pages/overview/performance/index.ts","../src/pages/feeTier/icons/effectiveFee.tsx","../src/pages/feeTier/icons/index.ts","../src/pages/feeTier/feeTierHeader.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.ui.tsx","../src/layout/layout.widget.tsx","../src/layout/layout.script.tsx","../src/layout/layout.ui.tsx","../src/layout/layout.ui.mobile.tsx","../src/pages/overview/index.tsx","../src/pages/overview/performanceMobileDialog/performance.ui.tsx","../src/pages/overview/performanceMobileDialog/performance.widget.tsx","../src/pages/overview/provider/overviewProvider.tsx","../src/pages/overview/mobile/useRewardsData.script.ts","../src/pages/overview/main.tsx","../src/pages/overview/mobile/mobile.widget.tsx","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.widget.tsx","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.script.ts","../src/pages/overview/portfolioChartsMobile/portfolioChartsMobile.ui.tsx","../src/pages/overview/mobile/accountStatus.ui.mobile.tsx","../src/pages/overview/mobile/affiliateCard.ui.mobile.tsx","../src/pages/overview/mobile/portfolioHandle.ui.mobile.tsx","../src/pages/overview/mobile/portfolioVaule.ui.mobile.tsx","../src/pages/overview/mobile/settingRouter.ui.mobile.tsx","../src/pages/overview/mobile/traderCard.ui.mobile.tsx","../src/pages/feeTier/index.tsx","../src/pages/feeTier/feeTier.ui.tsx","../src/pages/feeTier/feeTier.widget.tsx","../src/pages/feeTier/page.tsx","../src/pages/feeTier/feeTier.script.ts","../src/pages/feeTier/column.tsx","../src/pages/feeTier/dataSource.ts","../src/pages/positions/page.tsx","../src/pages/orders/page.tsx","../src/pages/api/index.ts","../src/pages/api/apiManager.widget.tsx","../src/pages/api/apiManager.page.tsx","../src/pages/setting/index.ts","../src/pages/setting/setting.script.tsx","../src/pages/setting/setting.ui.tsx","../src/pages/setting/setting.ui.desktop.tsx","../src/pages/setting/setting.ui.mobile.tsx","../src/pages/setting/setting.widget.tsx","../src/pages/setting/setting.page.tsx","../src/pages/assets/index.tsx","../src/pages/assets/assetsPage/assets.widget.tsx","../src/pages/assets/assetsPage/assets.script.ts","../src/pages/assets/assetsPage/assets.column.tsx","../src/pages/assets/assetsPage/assets.ui.mobile.tsx","../src/pages/assets/page.tsx","../src/pages/history/index.tsx","../src/pages/history/history.page.tsx","../src/pages/symbolPerformance/index.tsx","../src/pages/symbolPerformance/page.tsx","../src/pages/symbolPerformance/symbolPerformance.widget.tsx","../src/pages/symbolPerformance/symbolPerformance.script.ts","../src/pages/symbolPerformance/useSymbolPerformanceData.ts","../src/pages/symbolPerformance/useTrades.ts","../src/pages/symbolPerformance/symbolPerformance.ui.tsx","../src/pages/symbolPerformance/dateUtils.ts","../src/pages/symbolPerformance/pnlRankingChart.tsx","../src/pages/symbolPerformance/symbolSelector.tsx","../src/pages/symbolPerformance/useKlineData.ts","../src/pages/symbolPerformance/symbolPerformance.ui.mobile.tsx","../src/pages/symbolPerformance/pnlRankingChartMobile.tsx"],"names":["useState","useMemo","jsx","useScreen","useTranslation","Flex","jsxs","Fragment","Text","useCallback","modal","DepositAndWithdrawWithSheetId","startTime","endTime","dataSource","AssetHistoryStatusEnum","DataFilter","capitalizeFirstLetter","toast","init_column","AuthGuardDataTable","symbol","useSymbolsInfo","ListView","Badge","usePagination","subtractDaysFromCurrentDate","getDate","getMonth","getYear","set","TokenIcon","type","init_useDataSource_script","React","useAccount","capitalizeString","useColumns","produce","formatAddress","useTransferHistory","useCollateral","Decimal","useAppContext","Card","gradientTextVariants","EyeIcon","EyeCloseIcon","cn","Button","Divider","account","useIndexPricesStream","useAppStore","useChainInfo","state","data","useModal","item","init_transfer_ui","init_transfer_widget","useEffect","AssetHistorySideEnum","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","TabPanel","Tabs","LazyConvertHistoryWidget","LazyTransferHistoryWidget","createContext","useContext","AccountStatusEnum","differenceInDays","useAssetsHistory","useLocalStorage","PeriodType","localKey","formatDateRange","totalValue","totalTransferIn","totalTransferOut","lastItem","CardTitle","Box","EMPTY_LIST","Grid","Statistic","Tooltip","LazyPeriodTitle","useDataTap","useId","useScaffoldContext","res","SimpleDialog","hint","CopyIcon","PortfolioLeftSidebarPath","PnlAreaChart","PnLBarChart","VolBarChart","pick","i18n","useRef","usePrivateQuery","usePositionStream","useWalletConnector","ChevronRightIcon","isNumber","ArrowLeftRightIcon","parseJSON","ChainNamespace","ArrowRightShortIcon","getLinkDeviceStorage","commifyOptional","DataTable","page_exports","useAccountInfo","AuthGuardTooltip","Switch","assets_exports","DepositAndWithdrawWithDialogId","TransferDialogId","zero","visible","holding","EmptyDataState","subDays","format","AggregationWindow","window","CombinedPnLChart","CombinedVolumeChart","CombinedFeesChart","CombinedPriceChart","Select","formatCurrency","MakerTakerShare"],"mappings":"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","sourcesContent":["import React, { createContext, useContext, useState, useMemo } from \"react\";\nimport type { RouterAdapter } from \"@kodiak-finance/orderly-types\";\n\ntype LayoutContextValue = {\n sideOpen: boolean;\n onSideOpenChange: (open: boolean) => void;\n routerAdapter?: RouterAdapter;\n};\n\nconst LayoutContext = createContext<LayoutContextValue>({\n sideOpen: true,\n} as LayoutContextValue);\n\nexport const useLayoutContext = () => {\n return useContext(LayoutContext);\n};\n\nexport const LayoutProvider: React.FC<\n React.PropsWithChildren<{ routerAdapter?: RouterAdapter }>\n> = (props) => {\n const { routerAdapter, children } = props;\n const [sideOpen, setSideOpen] = useState(true);\n const memoizedValue = useMemo<LayoutContextValue>(\n () => ({\n sideOpen: sideOpen,\n onSideOpenChange: setSideOpen,\n routerAdapter: routerAdapter,\n }),\n [sideOpen, setSideOpen, routerAdapter],\n );\n return (\n <LayoutContext.Provider value={memoizedValue}>\n {children}\n </LayoutContext.Provider>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLeverage,\n useLocalStorage,\n usePositionStream,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { modal, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { LeverageWidgetWithDialogId } from \"@kodiak-finance/orderly-ui-leverage\";\nimport {\n DepositAndWithdrawWithDialogId,\n DepositAndWithdrawWithSheetId,\n TransferDialogId,\n TransferSheetId,\n} from \"@kodiak-finance/orderly-ui-transfer\";\n\nexport const useAssetScript = () => {\n const { connect, namespace } = useWalletConnector();\n const { state, isMainAccount } = useAccount();\n const { totalValue, freeCollateral } = useCollateral();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [data] = usePositionStream();\n const { curLeverage } = useLeverage();\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n const { isMobile } = useScreen();\n const handleDomId = isMobile\n ? DepositAndWithdrawWithSheetId\n : DepositAndWithdrawWithDialogId;\n const subAccounts = state.subAccounts ?? [];\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(LeverageWidgetWithDialogId);\n };\n\n const onDeposit = useCallback(() => {\n modal.show(handleDomId, { activeTab: \"deposit\" });\n }, [handleDomId]);\n\n const onWithdraw = useCallback(() => {\n modal.show(handleDomId, { activeTab: \"withdraw\" });\n }, []);\n\n const onTransfer = useCallback(() => {\n if (isMobile) {\n modal.show(TransferSheetId);\n } else {\n modal.show(TransferDialogId);\n }\n }, [isMobile]);\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: curLeverage,\n onLeverageEdit,\n visible,\n wrongNetwork,\n toggleVisible: () => setVisible(!visible),\n onDeposit,\n onWithdraw,\n onTransfer,\n namespace,\n isMainAccount,\n hasSubAccount: subAccounts?.length > 0,\n } as const;\n};\n\nexport type AssetScriptReturn = ReturnType<typeof useAssetScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightIcon,\n ArrowUpSquareFillIcon,\n Button,\n CardTitle,\n Flex,\n} from \"@kodiak-finance/orderly-ui\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onTransfer?: () => void;\n isMainAccount?: boolean;\n hasSubAccount?: boolean;\n};\n\nexport const AssetsHeader: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex justify={\"between\"}>\n <CardTitle>{t(\"common.overview\")}</CardTitle>\n <Flex gap={3}>\n {props.isMainAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n onClick={() => props.onDeposit?.()}\n icon={\n <ArrowDownSquareFillIcon className=\"oui-text-primary-contrast\" />\n }\n data-testid=\"oui-testid-portfolio-assets-deposit-btn\"\n >\n {t(\"common.deposit\")}\n </Button>\n )}\n {props.hasSubAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onTransfer?.()}\n icon={<ArrowLeftRightIcon className=\"oui-text-base-contrast\" />}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\n {props.isMainAccount && (\n <Button\n disabled={props.disabled}\n size=\"md\"\n color=\"secondary\"\n onClick={() => props.onWithdraw?.()}\n icon={<ArrowUpSquareFillIcon className=\"oui-text-base-contrast\" />}\n data-testid=\"oui-testid-portfolio-assets-withdraw-btn\"\n >\n {t(\"common.withdraw\")}\n </Button>\n )}\n </Flex>\n </Flex>\n );\n};\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Card,\n Divider,\n Flex,\n Grid,\n Either,\n Statistic,\n Text,\n EyeIcon,\n gradientTextVariants,\n EditIcon,\n EyeCloseIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { AssetScriptReturn } from \"./assets.script\";\nimport { AssetsHeader } from \"./assetsHeader\";\n\nexport const AssetsUI: React.FC<\n AssetScriptReturn & { onConnectWallet?: () => void }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Card\n classNames={{ footer: \"oui-h-[48px]\", root: \"oui-h-[240px]\" }}\n title={\n <AssetsHeader\n disabled={!props.canTrade}\n isMainAccount={props.isMainAccount}\n onDeposit={props.onDeposit}\n onWithdraw={props.onWithdraw}\n onTransfer={props.onTransfer}\n hasSubAccount={props.hasSubAccount}\n />\n }\n >\n <>\n <Statistic\n label={\n <Flex gap={1}>\n <Text intensity={54}>{t(\"common.totalValue\")}</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\ntype AssetStatisticProps = Pick<\n AssetScriptReturn,\n | \"currentLeverage\"\n | \"unrealPnL\"\n | \"unrealROI\"\n | \"freeCollateral\"\n | \"onLeverageEdit\"\n | \"visible\"\n>;\n\nexport const AssetStatistic = (props: AssetStatisticProps) => {\n const { t } = useTranslation();\n\n return (\n <Grid cols={2} className=\"oui-h-12\">\n <Statistic label={t(\"common.unrealizedPnl\")}>\n <Flex>\n <Text.pnl\n coloring\n size=\"lg\"\n weight=\"semibold\"\n visible={props.visible}\n >\n {props.unrealPnL}\n </Text.pnl>\n <Text.roi\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.roi>\n </Flex>\n </Statistic>\n <Statistic\n label={t(\"portfolio.overview.availableWithdraw\")}\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 React from \"react\";\nimport { useAssetScript } from \"./assets.script\";\nimport { AssetsUI } from \"./assets.ui\";\n\nexport const AssetWidget: React.FC = () => {\n const { connect: connectWallet, ...rest } = useAssetScript();\n return (\n <AssetsUI\n // TODO: remove duplicate props\n onConnectWallet={connectWallet}\n connect={connectWallet}\n {...rest}\n />\n );\n};\n","export { useAssetScript } from \"./assets.script\";\nexport { AssetsUI } from \"./assets.ui\";\nexport { AssetWidget } from \"./assets.widget\";\n","import { useState } from \"react\";\n\nexport type TabName =\n | \"deposit\"\n | \"withdraw\"\n | \"funding\"\n | \"distribution\"\n | \"transfer\"\n | \"vaults\";\n\nexport const useHistoryDataGroupScript = () => {\n const [active, setActive] = useState<TabName>(\"deposit\");\n return {\n active,\n onTabChange: setActive as React.Dispatch<React.SetStateAction<string>>,\n } as const;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistoryStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n capitalizeFirstLetter,\n Text,\n Flex,\n TokenIcon,\n toast,\n type Column,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\ntype Options = {\n chainsInfo: any[];\n isDeposit: boolean;\n isWeb3Wallet: boolean;\n};\n\nexport const useAssetHistoryColumns = (options: Options) => {\n const { chainsInfo, isDeposit, isWeb3Wallet } = options;\n const { t } = useTranslation();\n\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const columns = useMemo<Column[]>(() => {\n const txIdColumn: Column = {\n title: t(\"common.txId\"),\n dataIndex: \"tx_id\",\n width: 120,\n render: (value, record) => {\n if (!value) {\n return <div className=\"oui-text-base-contrast-54\">-</div>;\n }\n const chainInfo = chainsInfo?.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\" rel=\"noreferrer\">\n {/* <Tooltip content={value} delayDuration={0}> */}\n <Text.formatted\n copyable={!!value}\n rule=\"txId\"\n className=\"oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n onCopy={onCopy}\n >\n {value}\n </Text.formatted>\n {/* </Tooltip> */}\n </a>\n );\n },\n };\n\n const accountIdColumn: Column = {\n title: t(\"common.accountId\"),\n dataIndex: \"account_id\",\n width: 120,\n render: (value, record) => {\n const accountId = isDeposit\n ? record.from_account_id\n : record.to_account_id;\n\n return (\n <Text.formatted rule=\"address\" copyable={!!accountId} onCopy={onCopy}>\n {accountId}\n </Text.formatted>\n );\n },\n };\n\n return [\n {\n title: t(\"common.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: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 80,\n rule: \"date\",\n },\n isWeb3Wallet ? txIdColumn : accountIdColumn,\n {\n title: t(\"common.status\"),\n dataIndex: \"trans_status\",\n width: 100,\n render: (value, recoed) => {\n value = isWeb3Wallet ? value : recoed.status;\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.PENDING]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.CONFIRM]: t(\"assetHistory.status.confirm\"),\n [AssetHistoryStatusEnum.PROCESSING]: t(\n \"assetHistory.status.processing\",\n ),\n [AssetHistoryStatusEnum.COMPLETED]: t(\n \"assetHistory.status.completed\",\n ),\n [AssetHistoryStatusEnum.FAILED]: t(\"assetHistory.status.failed\"),\n };\n return (\n statusMap[value as keyof typeof statusMap] ||\n capitalizeFirstLetter(value?.toLowerCase())\n );\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 100,\n rule: \"price\",\n render: (value, record) => {\n const netAmount = new Decimal(value).minus(record.fee ?? 0);\n return (\n <Text.numeral\n dp={record.decimals}\n rule=\"price\"\n coloring\n showIdentifier\n padding={false}\n >\n {isDeposit ? netAmount.toNumber() : netAmount.neg().toNumber()}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t, chainsInfo, isDeposit, isWeb3Wallet]);\n\n return columns;\n};\n","import { differenceInDays, setHours } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n const { from, to = new Date() } = dateRange;\n\n const diff = differenceInDays(from, to);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport {\n useAssetsHistory,\n useChainInfo,\n useAppStore,\n useTransferHistory,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { AssetHistorySideEnum } from \"@kodiak-finance/orderly-types\";\nimport { modal, usePagination } from \"@kodiak-finance/orderly-ui\";\nimport { DepositAndWithdrawWithSheetId } from \"@kodiak-finance/orderly-ui-transfer\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\n\nexport enum AssetTarget {\n Web3Wallet = \"Web3Wallet\",\n AccountId = \"AccountId\",\n}\n\nexport type AssetHistoryScriptOptions = {\n side: AssetHistorySideEnum;\n};\n\nexport type AssetHistoryScriptReturn = ReturnType<typeof useAssetHistoryScript>;\n\nexport const useAssetHistoryScript = (options: AssetHistoryScriptOptions) => {\n const { side } = options;\n const isDeposit = side === AssetHistorySideEnum.DEPOSIT;\n\n const [today] = useState(() => {\n const d = new Date();\n return new Date(getYear(d), getMonth(d), getDate(d), 0, 0, 0);\n });\n\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n const [target, setTarget] = useState<AssetTarget>(AssetTarget.Web3Wallet);\n\n const [dateRange, setDateRange] = useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const { startTime, endTime } = useMemo(() => {\n const startTime = dateRange[0].getTime();\n const endTime = set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n }).getTime();\n\n return { startTime, endTime };\n }, [dateRange]);\n\n const [assetData, { meta: assetMeta, isLoading: assetLoading }] =\n useAssetsHistory(\n {\n startTime,\n endTime,\n page,\n pageSize,\n side,\n },\n {\n shouldUpdateOnWalletChanged: (data) => data.side === side,\n },\n );\n\n const [transferData, { isLoading: transferLoading, meta: transferMeta }] =\n useTransferHistory({\n dataRange: [startTime, endTime],\n side: isDeposit ? \"IN\" : \"OUT\",\n size: pageSize,\n page: page,\n main_sub_only: false,\n });\n\n const { data: chainsInfo } = useChainInfo();\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value));\n setPage(1);\n } else if (filter.name === \"target\") {\n setTarget(filter.value);\n setPage(1);\n }\n };\n\n const isLoading = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return assetLoading;\n }\n return transferLoading;\n }, [target, assetLoading, transferLoading]);\n\n const meta = useMemo(() => {\n if (target === AssetTarget.Web3Wallet) {\n return assetMeta;\n }\n return transferMeta;\n }, [target, assetMeta, transferMeta]);\n\n const pagination = useMemo(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n const dataSource = useMemo(() => {\n return (target === AssetTarget.Web3Wallet ? assetData : transferData).map(\n (item) => {\n const findToken = tokensInfo?.find(({ token }) => token === item.token);\n return {\n ...item,\n decimals: findToken?.decimals ?? 2,\n };\n },\n );\n }, [target, assetData, transferData, tokensInfo]);\n\n const onDeposit = useCallback(() => {\n modal.show(DepositAndWithdrawWithSheetId, { activeTab: \"deposit\" });\n }, []);\n\n const isWeb3Wallet = target === AssetTarget.Web3Wallet;\n\n return {\n dataSource,\n total: meta?.total,\n isLoading,\n queryParameter: {\n target,\n dateRange,\n },\n onFilter,\n pagination,\n onDeposit,\n chainsInfo: chainsInfo as any[],\n isDeposit,\n isWeb3Wallet,\n };\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport {\n AssetTarget,\n type AssetHistoryScriptReturn,\n} from \"./assetHistory.script\";\nimport { useAssetHistoryColumns } from \"./column\";\n\ntype AssetHistoryProps = AssetHistoryScriptReturn;\n\nexport const AssetHistory: FC<AssetHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const { dateRange, target } = queryParameter;\n const columns = useAssetHistoryColumns({\n chainsInfo: props.chainsInfo,\n isDeposit: props.isDeposit,\n isWeb3Wallet: props.isWeb3Wallet,\n });\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"common.web3Wallet\"), value: AssetTarget.Web3Wallet },\n { label: t(\"common.accountId\"), value: AssetTarget.AccountId },\n ];\n }, [t]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"target\",\n options: options,\n value: target,\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={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n scroll: \"oui-min-h-[400px]\",\n }}\n columns={columns}\n dataSource={dataSource}\n pagination={props.pagination}\n />\n </>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistoryStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n DataFilter,\n Flex,\n ListView,\n Text,\n capitalizeFirstLetter,\n toast,\n ArrowRightShortIcon,\n EmptyDataState,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n AssetTarget,\n type AssetHistoryScriptReturn,\n} from \"./assetHistory.script\";\n\ntype AssetHistoryMobileProps = AssetHistoryScriptReturn;\n\nexport const AssetHistoryMobile: FC<AssetHistoryMobileProps> = (props) => {\n const {\n dataSource,\n queryParameter,\n onFilter,\n isLoading,\n pagination,\n onDeposit,\n chainsInfo,\n isDeposit,\n isWeb3Wallet,\n } = props;\n const { dateRange, target } = queryParameter;\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"common.web3Wallet\"), value: AssetTarget.Web3Wallet },\n { label: t(\"common.accountId\"), value: AssetTarget.AccountId },\n ];\n }, [t]);\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const getStatusText = (item: any) => {\n const status = props.isWeb3Wallet ? item.trans_status : item.status;\n const statusMap = {\n [AssetHistoryStatusEnum.NEW]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.PENDING]: t(\"assetHistory.status.pending\"),\n [AssetHistoryStatusEnum.CONFIRM]: t(\"assetHistory.status.confirm\"),\n [AssetHistoryStatusEnum.PROCESSING]: t(\"assetHistory.status.processing\"),\n [AssetHistoryStatusEnum.COMPLETED]: t(\"assetHistory.status.completed\"),\n [AssetHistoryStatusEnum.FAILED]: t(\"assetHistory.status.failed\"),\n };\n return (\n statusMap[status as keyof typeof statusMap] ||\n capitalizeFirstLetter(status?.toLowerCase())\n );\n };\n\n const renderHistoryItem = (item: any) => {\n // Amount formatting\n const formattedAmount = isDeposit\n ? `+${item.amount - (item.fee ?? 0)}`\n : -(item.amount - (item.fee ?? 0));\n\n // Get tx link\n const getTxLink = () => {\n if (!item.tx_id) {\n return undefined;\n }\n\n const chainInfo =\n chainsInfo && Array.isArray(chainsInfo)\n ? chainsInfo.find(\n (chain: any) =>\n parseInt(item.chain_id) === parseInt(chain.chain_id),\n )\n : undefined;\n\n if (chainInfo?.explorer_base_url) {\n return `${chainInfo.explorer_base_url}/tx/${item.tx_id}`;\n }\n\n return undefined;\n };\n\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const itemColor = isDeposit ? \"buy\" : \"sell\";\n\n const amountView = (\n <Flex className=\"oui-text-xs\">\n <Text color={itemColor}>{formattedAmount}</Text>\n <Text className=\"oui-ml-1\" intensity={80}>\n {item.token}\n </Text>\n {isWeb3Wallet && (\n <Badge color={itemColor} className=\"oui-ml-2\">\n {isDeposit ? t(\"common.deposit\") : t(\"common.withdraw\")}\n </Badge>\n )}\n </Flex>\n );\n\n const statusView = (\n <Text intensity={isWeb3Wallet ? 80 : 36} size=\"xs\">\n {getStatusText(item)}\n </Text>\n );\n\n const timeView = (\n <Text.formatted rule=\"date\" intensity={36} size=\"2xs\">\n {item.created_time}\n </Text.formatted>\n );\n\n const txIdView = item.tx_id ? (\n <a href={getTxLink()} target=\"_blank\" rel=\"noreferrer\">\n <Text.formatted\n copyable={!!item.tx_id}\n className=\"oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n rule=\"txId\"\n onCopy={onCopy}\n intensity={36}\n size=\"xs\"\n >\n {item.tx_id}\n </Text.formatted>\n </a>\n ) : (\n <Text intensity={54}>-</Text>\n );\n\n const accountId = isDeposit ? item.from_account_id : item.to_account_id;\n\n const accountIdView = (\n <Flex gapX={1}>\n <Text intensity={36} size=\"xs\">\n {isDeposit\n ? t(\"transfer.internalTransfer.from\")\n : t(\"transfer.internalTransfer.to\")}\n </Text>\n <Text.formatted\n rule=\"address\"\n copyable={!!accountId}\n onCopy={onCopy}\n intensity={80}\n size=\"xs\"\n >\n {accountId}\n </Text.formatted>\n </Flex>\n );\n\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={1}\n intensity={900}\n r=\"xl\"\n className=\"oui-font-semibold\"\n >\n <Flex justify=\"between\" width=\"100%\" height=\"18px\">\n {isWeb3Wallet ? (\n <>\n {amountView}\n {statusView}\n </>\n ) : (\n <>\n {accountIdView}\n {amountView}\n </>\n )}\n </Flex>\n\n <Flex justify=\"between\" width=\"100%\" height=\"18px\">\n {timeView}\n {isWeb3Wallet ? txIdView : statusView}\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"target\",\n options: options,\n value: target,\n size: \"md\",\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 className=\"oui-sticky oui-top-[44px] oui-z-10 oui-border-none oui-bg-base-10 oui-px-3 oui-py-2\"\n />\n\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n emptyView={\n <Flex\n direction={\"column\"}\n height={\"100%\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n mt={3}\n >\n <EmptyDataState />\n {dataSource?.length == 0 && (\n <Flex\n direction=\"row\"\n itemAlign=\"center\"\n justify=\"center\"\n onClick={onDeposit}\n className=\"oui-mt-2 oui-h-4 oui-w-full oui-text-secondary\"\n >\n <Text color=\"primary\" size=\"2xs\">\n {t(\"common.deposit\")}\n </Text>\n <ArrowRightShortIcon\n className=\"oui-ml-0.5 oui-size-4 oui-text-primary oui-opacity-100\"\n color=\"primary\"\n size={16}\n opacity={100}\n />\n </Flex>\n )}\n </Flex>\n }\n />\n </>\n );\n};\n","import React from \"react\";\nimport { AssetHistorySideEnum } from \"@kodiak-finance/orderly-types\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useAssetHistoryScript } from \"./assetHistory.script\";\nimport { AssetHistory } from \"./assetHistory.ui\";\nimport { AssetHistoryMobile } from \"./assetHistory.ui.mobile\";\n\ntype AssetHistoryWidgetProps = {\n side: AssetHistorySideEnum;\n};\n\nexport const AssetHistoryWidget: React.FC<AssetHistoryWidgetProps> = (\n props,\n) => {\n const state = useAssetHistoryScript({ side: props.side });\n const { isMobile } = useScreen();\n if (isMobile) {\n return <AssetHistoryMobile {...state} />;\n }\n return <AssetHistory {...state} />;\n};\n","export { useAssetHistoryColumns } from \"./column\";\nexport { useAssetHistoryScript } from \"./assetHistory.script\";\nexport { AssetHistory } from \"./assetHistory.ui\";\nexport { AssetHistoryWidget } from \"./assetHistory.widget\";\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, type Column } from \"@kodiak-finance/orderly-ui\";\n\nexport const useFundingHistoryColumns = () => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 80,\n rule: \"symbol\",\n textProps: {\n showIcon: true,\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: `${t(\"funding.fundingRate\")} / ${t(\"funding.annualRate\")}`,\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: t(\"funding.paymentType\"),\n dataIndex: \"payment_type\",\n width: 80,\n render: (value: any) => {\n switch (value) {\n case \"Pay\":\n case \"Paid\":\n return t(\"funding.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"funding.paymentType.received\");\n default:\n return value;\n }\n },\n },\n {\n title: `${t(\"funding.fundingFee\")} (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 }, [t]);\n\n return columns;\n};\n","import { FC, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useFundingHistoryColumns } from \"./column\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryDesktop: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading } = props;\n const columns = useFundingHistoryColumns();\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"common.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 }, [t, symbols]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options,\n value: symbol,\n valueFormatter: (value) => {\n const option = options.find((item) => item.value === value);\n return option?.label || value;\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 { FC, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n DataFilter,\n Flex,\n ListView,\n Text,\n Badge,\n} from \"@kodiak-finance/orderly-ui\";\nimport { type UseFundingHistoryReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & UseFundingHistoryReturn;\n\nexport const FundingHistoryMobile: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, pagination } = props;\n const symbols = useSymbolsInfo();\n const { symbol, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const switchPaymentType = (paymentType: string) => {\n switch (paymentType) {\n case \"Pay\":\n case \"Paid\":\n return t(\"funding.paymentType.paid\");\n case \"Receive\":\n case \"Received\":\n return t(\"funding.paymentType.received\");\n default:\n return paymentType;\n }\n };\n\n const loadMore = () => {\n if (dataSource && dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const renderHistoryItem = (item: any) => {\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"20px\">\n <Text.formatted\n rule=\"symbol\"\n className=\"oui-text-base-contrast oui-mr-1 oui-text-sm\"\n >\n {item.symbol}\n </Text.formatted>\n <Badge color=\"neutral\" size=\"xs\">\n {switchPaymentType(item.payment_type)}\n </Badge>\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36 oui-text-2xs oui-ml-auto\"\n >\n {item.created_time}\n </Text.formatted>\n </Flex>\n <div className=\"oui-w-full oui-h-[1px] oui-bg-base-6\" />\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.fundingRate\")}\n </Text>\n <Text.numeral\n rule={\"percentages\"}\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.funding_rate}\n </Text.numeral>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.annualRate\")}\n </Text>\n <Text.numeral\n rule={\"percentages\"}\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.annual_rate}\n </Text.numeral>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"funding.fundingFee\")}{\" \"}\n <Text className=\"oui-text-base-contrast-20\">(USDC)</Text>\n </Text>\n <Text.numeral\n dp={6}\n ignoreDP={true}\n coloring={true}\n showIdentifier={true}\n className=\"oui-text-xs oui-self-end\"\n >\n {Number(item.funding_fee) * -1}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"common.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 }, [t, symbols]);\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"select\",\n name: \"symbol\",\n isCombine: true,\n options,\n value: symbol,\n valueFormatter: (value) => {\n const option = options.find((item) => item.value === value);\n return option?.label || value;\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 className=\"oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import { useFundingFeeHistory } from \"@kodiak-finance/orderly-hooks\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-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 React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { FundingHistoryDesktop } from \"./fundingHistory.ui\";\nimport { FundingHistoryMobile } from \"./fundingHistory.ui.mobile\";\nimport { useFundingHistoryHook } from \"./useDataSource.script\";\n\nexport const FundingHistoryWidget: React.FC = () => {\n const state = useFundingHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <FundingHistoryMobile {...state} />;\n }\n return <FundingHistoryDesktop {...state} />;\n};\n","export { FundingHistoryWidget } from \"./fundingHistory.widget\";\nexport { FundingHistoryDesktop } from \"./fundingHistory.ui\";\nexport { FundingHistoryMobile } from \"./fundingHistory.ui.mobile\";\nexport { useFundingHistoryColumns } from \"./column\";\nexport { useFundingHistoryHook } from \"./useDataSource.script\";\n","import { useMemo } from \"react\";\nimport { useTranslation, i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, type Column, TokenIcon } from \"@kodiak-finance/orderly-ui\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.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: t(\"common.time\"),\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n width: 120,\n formatter(value, record, index) {\n switch (value) {\n case \"CREATED\":\n case \"SPLIT\":\n return t(\"assetHistory.status.processing\");\n case \"COMPLETED\":\n default:\n return t(\"assetHistory.status.completed\");\n }\n },\n },\n\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n width: 80,\n formatter: (value: any) => {\n switch (value) {\n case \"REFERRER_REBATE\":\n return t(\n \"portfolio.overview.distribution.type.referralCommission\",\n );\n case \"REFEREE_REBATE\":\n return t(\"portfolio.overview.distribution.type.refereeRebate\");\n case \"BROKER_FEE\":\n return t(\"portfolio.overview.distribution.type.brokerFee\");\n default:\n return \"-\";\n }\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 80,\n // rule: \"price\",\n },\n ] as Column<API.FundingFeeRow & { annual_rate: number }>[];\n }, [t]);\n\n return columns;\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useColumns } from \"./column\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryDesktop: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, isValidating } =\n props;\n const columns = useColumns();\n const { type, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const TYPES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n {\n label: t(\"portfolio.overview.distribution.type.referralCommission\"),\n value: \"REFERRER_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.refereeRebate\"),\n value: \"REFEREE_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.brokerFee\"),\n value: \"BROKER_FEE\",\n },\n ];\n }, [t]);\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 { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DataFilter, Flex, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport { ListView } from \"@kodiak-finance/orderly-ui\";\nimport { type useDistributionHistoryHookReturn } from \"./useDataSource.script\";\n\ntype FundingHistoryProps = {} & useDistributionHistoryHookReturn;\n\nexport const DistributionHistoryMobile: FC<FundingHistoryProps> = (props) => {\n const { dataSource, queryParameter, onFilter, isLoading, pagination } = props;\n const { type, dateRange } = queryParameter;\n const { t } = useTranslation();\n\n const TYPES = useMemo(() => {\n return [\n { label: t(\"common.all\"), value: \"All\" },\n {\n label: t(\"portfolio.overview.distribution.type.referralCommission\"),\n value: \"REFERRER_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.refereeRebate\"),\n value: \"REFEREE_REBATE\",\n },\n {\n label: t(\"portfolio.overview.distribution.type.brokerFee\"),\n value: \"BROKER_FEE\",\n },\n ];\n }, [t]);\n\n const getStatusText = (status: string) => {\n switch (status) {\n case \"CREATED\":\n case \"SPLIT\":\n return t(\"assetHistory.status.processing\") as string;\n case \"COMPLETED\":\n default:\n return t(\"assetHistory.status.completed\") as string;\n }\n };\n\n const getTypeText = (type: string) => {\n switch (type) {\n case \"REFERRER_REBATE\":\n return t(\"portfolio.overview.distribution.type.referralCommission\");\n case \"REFEREE_REBATE\":\n return t(\"portfolio.overview.distribution.type.refereeRebate\");\n case \"BROKER_FEE\":\n return t(\"portfolio.overview.distribution.type.brokerFee\");\n default:\n return \"-\";\n }\n };\n\n const renderItem = (item: any) => {\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n <Flex direction=\"row\" justify=\"between\" width=\"100%\" height=\"20px\">\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n >\n {item.created_time}\n </Text.formatted>\n <Text className=\"oui-text-sm oui-text-base-contrast-80\">\n {getStatusText(item.status)}\n </Text>\n </Flex>\n <div className=\"oui-h-px oui-w-full oui-bg-base-6\" />\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.token\")}\n </Text>\n <Flex gapX={2}>\n <TokenIcon name={item.token} size=\"xs\" />\n <span className=\"oui-text-xs oui-text-base-contrast-80\">\n {item.token}\n </span>\n </Flex>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.type\")}\n </Text>\n <Text className=\"oui-text-xs oui-text-base-contrast-80\">\n {getTypeText(item.type)}\n </Text>\n </Flex>\n <Flex direction=\"column\">\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.amount\")}\n </Text>\n <Text className=\"oui-text-xs oui-text-base-contrast-80\">\n {item.amount}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange &&\n pagination.onPageSizeChange(pagination?.pageSize + 50);\n }\n };\n\n return (\n <>\n <DataFilter\n items={[\n {\n type: \"picker\",\n name: \"type\",\n options: TYPES,\n value: type,\n size: \"md\",\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 className=\"oui-px-3 oui-py-2 oui-sticky oui-top-[44px] oui-z-10 oui-bg-base-10\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderItem}\n contentClassName=\"oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import { useDistributionHistory } from \"@kodiak-finance/orderly-hooks\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { useMemo, useState } from \"react\";\nimport { usePagination } from \"@kodiak-finance/orderly-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 React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { DistributionHistoryDesktop } from \"./distribution.ui\";\nimport { DistributionHistoryMobile } from \"./distribution.ui.mobile\";\nimport { useDistributionHistoryHook } from \"./useDataSource.script\";\n\nexport const DistributionHistoryWidget: React.FC = () => {\n const state = useDistributionHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <DistributionHistoryMobile {...state} />;\n }\n return <DistributionHistoryDesktop {...state} />;\n};\n","export { DistributionHistoryWidget } from \"./distribution.widget\";\nexport { DistributionHistoryMobile } from \"./distribution.ui.mobile\";\nexport { DistributionHistoryDesktop } from \"./distribution.ui\";\n","import React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport {\n DataFilter,\n formatAddress,\n ListView,\n Flex,\n Text,\n Badge,\n TokenIcon,\n toast,\n Statistic,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\nimport type { useTransferHistoryHookReturn } from \"./useDataSource.script\";\n\ntype TransferHistoryMobileProps = useTransferHistoryHookReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const TransferHistoryMobileUI: React.FC<\n Readonly<TransferHistoryMobileProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n dataSource,\n queryParameter,\n state,\n isMainAccount,\n isLoading,\n selectedAccount,\n onFilter,\n pagination,\n } = props;\n const { side, dateRange } = queryParameter;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const subAccounts = state.subAccounts ?? [];\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n const loadMore = () => {\n if (dataSource && dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const onCopy = () => {\n toast.success(t(\"common.copy.copied\"));\n };\n\n const renderHistoryItem = (item: API.TransferHistoryRow) => {\n const isFromMainAccount = item.from_account_id === state.mainAccountId;\n const isToMainAccount = item.to_account_id === state.mainAccountId;\n const fromSubAccount = subAccounts.find(\n (acc) => acc.id === item.from_account_id,\n );\n const toSubAccount = subAccounts.find(\n (acc) => acc.id === item.to_account_id,\n );\n\n return (\n <Flex\n p={2}\n direction=\"column\"\n gapY={2}\n className=\"oui-rounded-xl oui-bg-base-9 oui-font-semibold\"\n >\n {/* Header: Date and Status */}\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36 oui-text-2xs\"\n >\n {item.updated_time}\n </Text.formatted>\n <Text size=\"sm\" className=\"oui-text-base-contrast-80\">\n {capitalizeString(item.status)}\n </Text>\n </Flex>\n\n {/* Divider */}\n <div className=\"oui-w-full oui-h-[1px] oui-bg-base-6\" />\n\n {/* Token and Amount */}\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\" itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"common.token\")}\n </Text>\n <Flex direction=\"row\" itemAlign=\"center\" gap={1}>\n <TokenIcon name={item.token} size=\"2xs\" />\n <Text size=\"xs\" className=\"oui-text-base-contrast-80\">\n {item.token}\n </Text>\n </Flex>\n </Flex>\n <Flex direction=\"column\" itemAlign=\"end\">\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"common.amount\")}\n </Text>\n <Text.numeral\n dp={6}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.amount}\n </Text.numeral>\n </Flex>\n </Flex>\n\n {/* From and To Account IDs */}\n <Flex direction=\"row\" justify=\"between\" width=\"100%\">\n <Flex direction=\"column\" gap={1}>\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"transfer.internalTransfer.from\")} ({t(\"common.accountId\")})\n </Text>\n <Flex direction=\"column\" gap={1} itemAlign={\"start\"}>\n <Flex direction=\"row\" itemAlign=\"center\" gap={1}>\n <Text.formatted\n rule=\"address\"\n copyable\n onCopy={onCopy}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.from_account_id}\n </Text.formatted>\n </Flex>\n <Badge color=\"neutral\" size=\"xs\">\n {isFromMainAccount\n ? t(\"common.mainAccount\")\n : fromSubAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n </Flex>\n <Flex direction=\"column\" itemAlign=\"end\" gap={1}>\n <Text className=\"oui-text-base-contrast-36 oui-text-2xs\">\n {t(\"transfer.internalTransfer.to\")} ({t(\"common.accountId\")})\n </Text>\n <Flex direction=\"column\" itemAlign=\"end\" gap={1}>\n <Flex direction=\"row\" itemAlign=\"center\" gap={1}>\n <Text.formatted\n rule=\"address\"\n copyable\n onCopy={onCopy}\n className=\"oui-text-base-contrast-80 oui-text-xs\"\n >\n {item.to_account_id}\n </Text.formatted>\n </Flex>\n <Badge color=\"neutral\" size=\"xs\">\n {isToMainAccount\n ? t(\"common.mainAccount\")\n : toSubAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n );\n };\n\n return (\n <>\n <div className=\"oui-px-3\">\n <DataFilter\n onFilter={onFilter}\n items={produce(\n [\n {\n type: \"select\",\n name: \"side\",\n value: side,\n options: [\n { value: \"OUT\", label: t(\"common.outflow\") },\n { value: \"IN\", label: t(\"common.inflow\") },\n ],\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ],\n (draft) => {\n if (isMainAccount) {\n draft.unshift({\n type: \"select\",\n name: \"account\",\n value: selectedAccount as any,\n options: memoizedOptions,\n });\n }\n },\n )}\n />\n </div>\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n TokenIcon,\n Text,\n toast,\n Badge,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n const onCopy = () => {\n toast.success(t(\"common.copy.copied\"));\n };\n const { state } = useAccount();\n const sub = state.subAccounts ?? [];\n const columns = React.useMemo<Column<API.TransferHistoryRow>[]>(() => {\n return [\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n width: 80,\n render(val: string) {\n return (\n <Flex gapX={2}>\n <TokenIcon name={val} size=\"xs\" />\n <span>{val}</span>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"updated_time\",\n width: 120,\n rule: \"date\",\n },\n {\n title: `${t(\"transfer.internalTransfer.from\")} (${t(\"common.accountId\")})`,\n dataIndex: \"from_account_id\",\n render(val: string) {\n const isMainAccount = val === state.mainAccountId;\n const subAccount = sub.find((item) => item.id === val);\n return (\n <Flex itemAlign=\"start\" py={2} gap={1} direction=\"column\">\n <Text.formatted onCopy={onCopy} copyable rule=\"address\">\n {val}\n </Text.formatted>\n <Badge className=\"oui-select-none\" color=\"neutral\" size=\"xs\">\n {isMainAccount\n ? t(\"common.mainAccount\")\n : subAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n );\n },\n },\n {\n title: `${t(\"transfer.internalTransfer.to\")} (${t(\"common.accountId\")})`,\n dataIndex: \"to_account_id\",\n render(val: string) {\n const isMainAccount = val === state.mainAccountId;\n const subAccount = sub.find((item) => item.id === val);\n return (\n <Flex itemAlign=\"start\" py={2} gap={1} direction=\"column\">\n <Text.formatted onCopy={onCopy} copyable rule=\"address\">\n {val}\n </Text.formatted>\n <Badge className=\"oui-select-none\" color=\"neutral\" size=\"xs\">\n {isMainAccount\n ? t(\"common.mainAccount\")\n : subAccount?.description || t(\"common.subAccount\")}\n </Badge>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n width: 120,\n render(val: string) {\n return capitalizeString(val);\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount\",\n width: 80,\n },\n ];\n }, [t, state.mainAccountId, sub]);\n return columns;\n};\n","import React, { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { DataFilter, formatAddress } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport type { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport { useColumns } from \"./column\";\nimport type { useTransferHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useTransferHistoryHookReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const TransferHistoryUI: React.FC<\n Readonly<HistoryProps & ReturnType<typeof useAccount>>\n> = (props) => {\n const {\n dataSource,\n queryParameter,\n state,\n isMainAccount,\n isLoading,\n selectedAccount,\n onFilter,\n } = props;\n const { side, dateRange } = queryParameter;\n\n const { t } = useTranslation();\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const subAccounts = state.subAccounts ?? [];\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={produce(\n [\n {\n type: \"select\",\n name: \"side\",\n value: side,\n options: [\n { value: \"OUT\", label: t(\"common.outflow\") },\n { value: \"IN\", label: t(\"common.inflow\") },\n ],\n },\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ],\n (draft) => {\n if (isMainAccount) {\n draft.unshift({\n type: \"select\",\n name: \"account\",\n value: selectedAccount as any,\n options: memoizedOptions,\n });\n }\n },\n )}\n />\n <AuthGuardDataTable<API.TransferHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n // isValidating={isValidating}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport { useAccount, useTransferHistory } from \"@kodiak-finance/orderly-hooks\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport type { PaginationMeta } from \"@kodiak-finance/orderly-ui\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\nimport { AccountType } from \"./transfer.ui\";\n\nexport const useTransferHistoryHook = () => {\n // const today = useRef(setMinutes(setHours(new Date(), 23), 59));\n\n const today = React.useMemo<Date>(() => {\n const date = new Date();\n return new Date(getYear(date), getMonth(date), getDate(date), 0, 0, 0);\n }, []);\n\n const [dateRange, setDateRange] = React.useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const { state } = useAccount();\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const [side, setSide] = React.useState<\"IN\" | \"OUT\">(\"OUT\");\n\n const [data, { isLoading, meta }] = useTransferHistory({\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 side: side,\n size: pageSize,\n page: page,\n main_sub_only: true,\n });\n\n const filteredData = React.useMemo(() => {\n return data.filter((item) => {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return (\n item.from_account_id === state.mainAccountId ||\n item.to_account_id === state.mainAccountId\n );\n } else {\n return (\n item.from_account_id === selectedAccount ||\n item.to_account_id === selectedAccount\n );\n }\n });\n }, [data, selectedAccount]);\n\n const onAccountFilter = React.useCallback(\n (filter: { value: string; name: string }) => {\n if (filter.name === \"account\") {\n setAccount(filter.value);\n }\n if (filter.name === \"side\") {\n setSide(filter.value as \"IN\" | \"OUT\");\n }\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value as any));\n }\n setPage(1);\n },\n [setPage],\n );\n\n const pagination = React.useMemo<PaginationMeta>(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n return {\n dataSource: filteredData,\n isLoading,\n // onDateRangeChange,\n queryParameter: {\n side,\n dateRange,\n },\n selectedAccount,\n onFilter: onAccountFilter,\n pagination,\n } as const;\n};\n\nexport type useTransferHistoryHookReturn = ReturnType<\n typeof useTransferHistoryHook\n>;\n","import React from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { TransferHistoryMobileUI } from \"./transfer.mobile.ui\";\nimport { TransferHistoryUI } from \"./transfer.ui\";\nimport { useTransferHistoryHook } from \"./useDataSource.script\";\n\nexport const TransferHistoryWidget: React.FC = () => {\n const state = useTransferHistoryHook();\n const accountState = useAccount();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <TransferHistoryMobileUI {...state} {...accountState} />;\n }\n return <TransferHistoryUI {...state} {...accountState} />;\n};\n","export { TransferHistoryWidget } from \"./transfer.widget\";\nexport { TransferHistoryUI } from \"./transfer.ui\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport { useAccount, useCollateral } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\n\nconst EMPTY_HOLDING: Partial<API.Holding> = {\n token: \"USDC\",\n holding: 0,\n frozen: 0,\n};\n\n// Account data structure used in assets display\nexport interface AccountWithChildren {\n account_id: string;\n id?: string;\n description?: string;\n children: Array<API.Holding & { account_id: string }>;\n}\n\n// Hook to transform raw account data into display format\nexport const useAccountsData = (): AccountWithChildren[] => {\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const subAccounts = state.subAccounts ?? [];\n\n return useMemo(() => {\n return produce<any[]>(subAccounts, (draft) => {\n // Process sub accounts\n for (const sub of draft) {\n sub.account_id = sub.id;\n if (Array.isArray(sub.holding) && sub.holding.length) {\n sub.children = sub.holding.map((item: API.Holding) => ({\n ...item,\n account_id: sub.id,\n }));\n } else {\n sub.children = [{ ...EMPTY_HOLDING, account_id: sub.id }];\n }\n // Remove original holding to avoid confusion\n Reflect.deleteProperty(sub, \"holding\");\n }\n\n // Add main account at the beginning if user is main account\n if (isMainAccount) {\n draft.unshift({\n account_id: state.mainAccountId!,\n description: t(\"common.mainAccount\"),\n children:\n Array.isArray(holding) && holding.length\n ? holding.map((item: API.Holding) => ({\n ...item,\n account_id: state.mainAccountId!,\n }))\n : [\n {\n ...EMPTY_HOLDING,\n account_id: state.mainAccountId!,\n },\n ],\n });\n }\n });\n }, [holding, subAccounts, isMainAccount, state.mainAccountId, t]);\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useIndexPricesStream,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { SubAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useAccountsData } from \"./useAccountsData\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\nexport const calculateTotalHolding = (\n data: SubAccount[] | SubAccount[\"holding\"],\n getIndexPrice: (token: string) => number,\n) => {\n let total = new Decimal(0);\n for (const item of data) {\n if (Array.isArray(item.holding)) {\n for (const hol of item.holding) {\n if (isNumber(hol.holding)) {\n const indexPrice = getIndexPrice(hol.token);\n total = total.plus(new Decimal(hol.holding).mul(indexPrice));\n }\n }\n } else if (isNumber(item.holding) && \"token\" in item) {\n const indexPrice = getIndexPrice(item.token);\n total = total.plus(new Decimal(item.holding).mul(indexPrice));\n }\n }\n return total;\n};\n\nexport const useAssetTotalValue = () => {\n const { state, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const { getIndexPrice } = useIndexPricesStream();\n const allAccounts = useAccountsData();\n\n const subAccounts = state.subAccounts ?? [];\n\n // Calculate main account total value\n const mainTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(holding, getIndexPrice),\n [holding, getIndexPrice],\n );\n\n // Calculate sub accounts total value\n const subTotalValue = useMemo<Decimal>(\n () => calculateTotalHolding(subAccounts, getIndexPrice),\n [subAccounts, getIndexPrice],\n );\n\n // Calculate final total value\n const totalValue = useMemo<number>(() => {\n if (isMainAccount) {\n return mainTotalValue.plus(subTotalValue).toNumber();\n } else {\n const find = allAccounts.find((item) => item.id === state.accountId);\n if (Array.isArray(find?.children)) {\n return calculateTotalHolding(find.children, getIndexPrice).toNumber();\n }\n return 0;\n }\n }, [\n isMainAccount,\n mainTotalValue,\n subTotalValue,\n allAccounts,\n state.accountId,\n getIndexPrice,\n ]);\n\n return totalValue;\n};\n","import React, { useMemo } from \"react\";\nimport pick from \"ramda/es/pick\";\nimport { SubAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n Text,\n Card,\n Flex,\n gradientTextVariants,\n EyeIcon,\n EyeCloseIcon,\n cn,\n DataFilter,\n formatAddress,\n Tabs,\n TabPanel,\n ArrowDownShortIcon,\n Button,\n Divider,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n AuthGuard,\n AuthGuardDataTable,\n} from \"@kodiak-finance/orderly-ui-connector\";\nimport type { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport type { useAssetsScriptReturn } from \"./assets.script\";\nimport type {\n AssetsDataTableWidgetProps,\n AssetsWidgetProps,\n} from \"./assets.widget\";\n\nconst LazyConvertHistoryWidget = React.lazy(() =>\n import(\"../convertPage/convert.widget\").then((mod) => {\n return { default: mod.ConvertHistoryWidget };\n }),\n);\n\nexport type AssetsProps = useAssetsScriptReturn;\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nconst TotalValueInfo: React.FC<\n Readonly<\n Pick<AssetsWidgetProps, \"totalValue\" | \"visible\" | \"onToggleVisibility\">\n >\n> = (props) => {\n const { totalValue, visible, onToggleVisibility } = props;\n const { t } = useTranslation();\n const Icon = visible ? EyeIcon : EyeCloseIcon;\n return (\n <Flex direction=\"column\" gap={1} className=\"oui-text-2xs\" itemAlign=\"start\">\n <Flex gap={1} justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" color=\"neutral\" weight=\"semibold\">\n {t(\"common.totalValue\")}\n </Text>\n <button onClick={onToggleVisibility}>\n <Icon size={18} className={cn(\"oui-text-base-contrast-54\")} />\n </button>\n </Flex>\n <Flex justify={\"start\"} itemAlign=\"end\" gap={1}>\n <Text.numeral\n visible={visible}\n weight=\"bold\"\n size=\"2xl\"\n className={gradientTextVariants({ color: \"brand\" })}\n as=\"div\"\n padding={false}\n dp={2}\n >\n {totalValue ?? \"--\"}\n </Text.numeral>\n <Text as=\"div\" weight=\"bold\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst DepositAndWithdrawButton: React.FC<\n Readonly<\n Pick<AssetsWidgetProps, \"isMainAccount\" | \"onWithdraw\" | \"onDeposit\">\n >\n> = (props) => {\n const { t } = useTranslation();\n const { isMainAccount, onWithdraw, onDeposit } = props;\n const { wrongNetwork, disabledConnect } = useAppContext();\n if (!isMainAccount) {\n return null;\n }\n const mergedDisabled = wrongNetwork || disabledConnect;\n return (\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n itemAlign=\"center\"\n gap={3}\n >\n <Button\n disabled={mergedDisabled}\n data-testid=\"oui-testid-assetView-deposit-button\"\n fullWidth\n size=\"md\"\n onClick={onDeposit}\n >\n <ArrowDownShortIcon\n color=\"white\"\n opacity={mergedDisabled ? 0.4 : 1}\n className=\"oui-rotate-0 oui-text-primary-contrast\"\n />\n <Text>{t(\"common.deposit\")}</Text>\n </Button>\n <Button\n fullWidth\n disabled={mergedDisabled}\n color=\"secondary\"\n size=\"md\"\n onClick={onWithdraw}\n data-testid=\"oui-testid-assetView-withdraw-button\"\n >\n <ArrowDownShortIcon\n color=\"white\"\n opacity={mergedDisabled ? 0.4 : 1}\n className=\"oui-rotate-180 oui-text-base-contrast\"\n />\n <Text>{t(\"common.withdraw\")}</Text>\n </Button>\n </Flex>\n );\n};\n\nconst DataFilterSection: React.FC<\n Pick<\n AssetsWidgetProps,\n | \"isMainAccount\"\n | \"onFilter\"\n | \"selectedAccount\"\n | \"selectedAsset\"\n | \"assetsOptions\"\n | \"state\"\n >\n> = (props) => {\n const { t } = useTranslation();\n const {\n isMainAccount,\n onFilter,\n selectedAccount,\n selectedAsset,\n assetsOptions,\n state,\n } = props;\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const ALL_ASSETS: SelectOption = {\n label: t(\"common.allAssets\", \"All assets\"),\n value: \"all\",\n };\n\n const subAccounts = useMemo<SubAccount[]>(() => {\n return state.subAccounts ?? [];\n }, [state.subAccounts]);\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value?.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [ALL_ACCOUNTS, MAIN_ACCOUNT, subAccounts]);\n\n const memoizedAssetOptions = useMemo(() => {\n return [ALL_ASSETS, ...assetsOptions];\n }, [ALL_ASSETS, assetsOptions]);\n\n if (!isMainAccount) {\n return null;\n }\n\n return (\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n onFilter={onFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n {\n type: \"select\",\n name: \"asset\",\n value: selectedAsset,\n options: memoizedAssetOptions,\n },\n ]}\n />\n );\n};\n\nexport const AssetsDataTable: React.FC<\n Pick<\n AssetsWidgetProps,\n | \"columns\"\n | \"dataSource\"\n | \"isMainAccount\"\n | \"onFilter\"\n | \"selectedAccount\"\n | \"selectedAsset\"\n | \"assetsOptions\"\n | \"state\"\n | \"canTrade\"\n > &\n AssetsDataTableWidgetProps\n> = (props) => {\n const { columns, dataSource, dataTableClassNames, classNames } = props;\n const { root, scrollRoot, desc } = classNames ?? {};\n\n if (!props.canTrade) {\n // show auth button when not can trade\n return (\n <AuthGuardDataTable\n classNames={{\n root: \"oui-rounded-xl oui-font-semibold\",\n scroll: \"oui-h-[252px]\",\n }}\n loading={props.canTrade}\n columns={[]}\n dataSource={[]}\n />\n );\n }\n\n return (\n <Flex width=\"100%\" height=\"100%\" direction={\"column\"} className={root}>\n <DataFilterSection\n {...pick(\n [\n \"isMainAccount\",\n \"onFilter\",\n \"selectedAccount\",\n \"selectedAsset\",\n \"assetsOptions\",\n \"state\",\n ],\n props,\n )}\n />\n {dataSource?.map((item, index) => {\n return (\n <Flex\n key={`item-${index}`}\n className={cn(\"oui-rounded-xl oui-bg-base-9 oui-p-6\", scrollRoot)}\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n my={4}\n >\n <Text\n className={cn(\"oui-mb-4\", desc)}\n intensity={98}\n weight=\"semibold\"\n size=\"lg\"\n >\n {item?.description || formatAddress(item?.id ?? \"\")}\n </Text>\n <AuthGuardDataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{\n // root: \"oui-bg-transparent\",\n // scroll: \"oui-min-h-0\",\n ...dataTableClassNames,\n }}\n columns={columns}\n dataSource={item.children}\n />\n </Flex>\n );\n })}\n </Flex>\n );\n};\n\nexport const AssetsTable: React.FC<AssetsWidgetProps> = (props) => {\n const { t } = useTranslation();\n return (\n <Card\n className={\"oui-bg-transparent oui-p-0\"}\n classNames={{ content: \"!oui-pt-0\" }}\n >\n <Tabs\n defaultValue=\"assets\"\n variant=\"contained\"\n classNames={{ tabsList: \"\" }}\n size=\"lg\"\n >\n <TabPanel value=\"assets\" className=\"\" title={t(\"common.assets\")}>\n <Flex\n className=\"oui-rounded-xl oui-bg-base-9 oui-p-6\"\n direction={\"row\"}\n itemAlign={\"center\"}\n justify={\"between\"}\n my={4}\n >\n <TotalValueInfo\n {...pick([\"totalValue\", \"visible\", \"onToggleVisibility\"], props)}\n />\n <DepositAndWithdrawButton\n {...pick([\"isMainAccount\", \"onDeposit\", \"onWithdraw\"], props)}\n />\n </Flex>\n <AssetsDataTable\n {...pick(\n [\n \"columns\",\n \"dataSource\",\n \"isMainAccount\",\n \"onFilter\",\n \"selectedAccount\",\n \"selectedAsset\",\n \"assetsOptions\",\n \"state\",\n \"canTrade\",\n ],\n props,\n )}\n classNames={{\n scrollRoot:\n \"oui-max-h-[700px] oui-overflow-y-auto oui-custom-scrollbar oui-w-full\",\n }}\n />\n </TabPanel>\n <TabPanel\n value=\"convertHistory\"\n className=\"oui-rounded-xl oui-bg-base-9 oui-px-6\"\n title={t(\"portfolio.overview.tab.convert.history\")}\n >\n <React.Suspense fallback={null}>\n <Flex\n direction=\"column\"\n mt={4}\n itemAlign=\"center\"\n className=\"oui-w-full\"\n >\n <Divider className=\"oui-w-full oui-border-b oui-border-line-4 oui-pt-6\" />\n <LazyConvertHistoryWidget />\n </Flex>\n </React.Suspense>\n </TabPanel>\n </Tabs>\n </Card>\n );\n};\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountType } from \"../pages/assets/assetsPage/assets.ui.desktop\";\n\n// Account filter function type\nexport type AccountFilterFunction<T = any> = (\n data: T[],\n selectedAccount: string,\n accountState: ReturnType<typeof useAccount>,\n) => T[];\n\n// Generic account filter utility\nexport const createAccountFilter = <T extends { account_id?: string }>(\n getAccountId?: (item: T) => string | undefined,\n): AccountFilterFunction<T> => {\n return (data, selectedAccount, accountState) => {\n const { state, isMainAccount } = accountState;\n\n return data.filter((item) => {\n const accountId = getAccountId ? getAccountId(item) : item.account_id;\n\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return accountId === state.mainAccountId;\n } else {\n return accountId === selectedAccount;\n }\n } else {\n return accountId === state.accountId;\n }\n });\n };\n};\n\n// Hook for standard account-based data filtering\nexport const useAccountFilter = <T extends { account_id?: string }>(\n data: T[],\n selectedAccount: string,\n getAccountId?: (item: T) => string | undefined,\n): T[] => {\n const accountState = useAccount();\n\n return useMemo(() => {\n const { state, isMainAccount } = accountState;\n\n return data.filter((item) => {\n const accountId = getAccountId ? getAccountId(item) : item.account_id;\n\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return accountId === state.mainAccountId;\n } else {\n return accountId === selectedAccount;\n }\n } else {\n return accountId === state.accountId;\n }\n });\n }, [data, selectedAccount, accountState, getAccountId]);\n};\n\n// Hook specifically for transfer history filtering\nexport const useTransferHistoryAccountFilter = <\n T extends { from_account_id?: string; to_account_id?: string },\n>(\n data: T[],\n selectedAccount: string,\n): T[] => {\n const accountState = useAccount();\n\n return useMemo(() => {\n const { state, isMainAccount } = accountState;\n\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return (\n item.from_account_id === state.mainAccountId ||\n item.to_account_id === state.mainAccountId\n );\n } else {\n return (\n item.from_account_id === selectedAccount ||\n item.to_account_id === selectedAccount\n );\n }\n } else {\n return (\n item.from_account_id === state.accountId ||\n item.to_account_id === state.accountId\n );\n }\n });\n }, [data, selectedAccount, accountState]);\n};\n\n// Pre-defined account filters for common use cases\nexport const AccountFilters = {\n // Standard account filter factory\n standard: <T extends { account_id?: string }>() => createAccountFilter<T>(),\n\n // Transfer history filter factory\n transferHistory:\n <T extends { from_account_id?: string; to_account_id?: string }>() =>\n (\n data: T[],\n selectedAccount: string,\n accountState: ReturnType<typeof useAccount>,\n ): T[] => {\n const { state, isMainAccount } = accountState;\n\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return (\n item.from_account_id === state.mainAccountId ||\n item.to_account_id === state.mainAccountId\n );\n } else {\n return (\n item.from_account_id === selectedAccount ||\n item.to_account_id === selectedAccount\n );\n }\n } else {\n return (\n item.from_account_id === state.accountId ||\n item.to_account_id === state.accountId\n );\n }\n });\n },\n\n // Custom account ID filter factory\n customAccountId: <T extends Record<string, any>>(accountIdKey: keyof T) =>\n createAccountFilter<T>((item) => item[accountIdKey] as string),\n};\n","import React, { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountType } from \"../pages/assets/assetsPage/assets.ui.desktop\";\n\n// Account filter hook for assets-like data structures\nexport const useAssetsAccountFilter = <T extends { account_id?: string }>(\n data: T[],\n) => {\n const { state, isMainAccount } = useAccount();\n const [selectedAccount, setSelectedAccount] = React.useState<string>(\n AccountType.ALL,\n );\n\n // Filter data based on selected account\n const filteredData = useMemo(() => {\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId;\n } else {\n return item.account_id === selectedAccount;\n }\n } else {\n return item.account_id === state.accountId;\n }\n });\n }, [data, selectedAccount, isMainAccount, state]);\n\n // Handle filter changes\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setSelectedAccount(value);\n }\n },\n [],\n );\n\n return {\n selectedAccount,\n filteredData,\n onAccountFilter,\n setSelectedAccount,\n };\n};\n\n// Enhanced account and asset combined filter hook\nexport const useAssetsMultiFilter = <\n T extends {\n account_id?: string;\n children?: Array<{ token: string; [key: string]: any }>;\n },\n>(\n data: T[],\n) => {\n const { state, isMainAccount } = useAccount();\n const [selectedAccount, setSelectedAccount] = React.useState<string>(\n AccountType.ALL,\n );\n const [selectedAsset, setSelectedAsset] = React.useState<string>(\"all\");\n\n // Filter data based on both account and asset\n const filteredData = useMemo(() => {\n let accountFiltered = data;\n\n // First apply account filter\n if (isMainAccount) {\n if (selectedAccount && selectedAccount !== AccountType.ALL) {\n if (selectedAccount === AccountType.MAIN) {\n accountFiltered = data.filter(\n (item) => item.account_id === state.mainAccountId,\n );\n } else {\n accountFiltered = data.filter(\n (item) => item.account_id === selectedAccount,\n );\n }\n }\n } else {\n accountFiltered = data.filter(\n (item) => item.account_id === state.accountId,\n );\n }\n\n // Then apply asset filter\n if (selectedAsset && selectedAsset !== \"all\") {\n accountFiltered = accountFiltered\n .map((account) => {\n if (account.children) {\n const filteredChildren = account.children.filter(\n (child) => child.token === selectedAsset,\n );\n // Only include accounts that have the selected asset\n return filteredChildren.length > 0\n ? { ...account, children: filteredChildren }\n : null;\n }\n return account;\n })\n .filter(Boolean) as T[];\n }\n\n return accountFiltered;\n }, [data, selectedAccount, selectedAsset, isMainAccount, state]);\n\n // Handle combined filter changes\n const onFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setSelectedAccount(value);\n } else if (name === \"asset\") {\n setSelectedAsset(value);\n }\n },\n [],\n );\n\n return {\n selectedAccount,\n selectedAsset,\n filteredData,\n onFilter,\n setSelectedAccount,\n setSelectedAsset,\n };\n};\n\n// Generic account filter function that can be used standalone\nexport const filterByAccount = <T extends { account_id?: string }>(\n data: T[],\n selectedAccount: string,\n accountState: {\n isMainAccount: boolean;\n state: {\n mainAccountId?: string;\n accountId?: string;\n };\n },\n): T[] => {\n const { isMainAccount, state } = accountState;\n\n return data.filter((item) => {\n if (isMainAccount) {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return true;\n }\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId;\n } else {\n return item.account_id === selectedAccount;\n }\n } else {\n return item.account_id === state.accountId;\n }\n });\n};\n","export * from \"./useAssetTotalValue\";\nexport * from \"./useAccountFilter\";\nexport * from \"./useAssetsAccountFilter\";\nexport * from \"./useAccountsData\";\n","import React, { useMemo, useState } from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport {\n useAccount,\n useCollateral,\n useIndexPricesStream,\n useSubAccountQuery,\n useAppStore,\n useChainInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { useAccountsData, useAssetsAccountFilter } from \"../../../hooks\";\nimport { parseDateRangeForFilter } from \"../../overview/helper/date\";\nimport type { ConvertRecord } from \"../type\";\n\nexport const useConvertScript = () => {\n const { t } = useTranslation();\n const { isMainAccount, state } = useAccount();\n const { holding = [] } = useCollateral();\n const { data: indexPrices } = useIndexPricesStream();\n\n const { data: chainsInfo } = useChainInfo();\n\n // Pagination\n const { page, pageSize, setPage, parsePagination } = usePagination({\n page: 1,\n pageSize: 20,\n });\n\n // Use the same account data structure as assets\n const allAccounts = useAccountsData();\n\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n // Use the same account filter logic as assets\n const { selectedAccount, onAccountFilter } =\n useAssetsAccountFilter(allAccounts);\n\n // Simple date range handling like other scripts\n const [today] = useState(() => {\n const d = new Date();\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 // Filter states (matching API fields)\n const [statusFilter, setStatusFilter] = useState<string>(\"all\");\n const [convertedAssetFilter, setConvertedAssetFilter] =\n useState<string>(\"all\");\n\n // Create asset options from holding data - similar to assets script\n const convertedAssetOptions = useMemo(() => {\n // Create options array\n const assetOptions =\n tokensInfo?.map((item) => ({\n value: item.token,\n label: item.token,\n })) || [];\n\n return [{ label: t(\"common.allAssets\"), value: \"all\" }, ...assetOptions];\n }, [tokensInfo, t]);\n\n // Handle all filters (including account filter and date range)\n const onFilter = React.useCallback(\n (filter: { name: string; value: string | { from: Date; to: Date } }) => {\n const { name, value } = filter;\n\n // Delegate account filter to the hook\n if (name === \"account\") {\n onAccountFilter(filter as { name: string; value: string });\n } else if (name === \"status\") {\n setStatusFilter(value as string);\n setPage(1); // Reset to first page when filter changes\n } else if (name === \"converted_asset\") {\n setConvertedAssetFilter(value as string);\n setPage(1);\n } else if (name === \"time\" || name === \"dateRange\") {\n setDateRange(\n parseDateRangeForFilter(value as { from: Date; to: Date }),\n );\n setPage(1);\n }\n },\n [onAccountFilter, setPage],\n );\n\n // Build query URL with parameters\n const queryUrl = React.useMemo(() => {\n const params = new URLSearchParams();\n\n // Add pagination parameters\n params.set(\"page\", page.toString());\n params.set(\"size\", pageSize.toString());\n\n // Add date range parameters\n if (dateRange[0]) {\n params.set(\"start_t\", dateRange[0].getTime().toString());\n }\n if (dateRange[1]) {\n params.set(\n \"end_t\",\n set(dateRange[1], {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 0,\n })\n .getTime()\n .toString(),\n );\n }\n\n // Add filter parameters (only if not \"all\")\n if (statusFilter !== \"all\") {\n params.set(\"status\", statusFilter);\n }\n\n if (convertedAssetFilter !== \"all\") {\n params.set(\"converted_asset\", convertedAssetFilter);\n }\n\n return `/v1/asset/convert_history?${params.toString()}`;\n }, [page, pageSize, dateRange, statusFilter, convertedAssetFilter]);\n\n // Query convert history with all parameters\n const { data, isLoading } = useSubAccountQuery<{\n rows: ConvertRecord[];\n meta: {\n total: number;\n current_page: number;\n records_per_page: number;\n };\n }>(queryUrl, {\n accountId: isMainAccount ? state.mainAccountId : state.accountId,\n formatter: (data) => {\n return data;\n },\n });\n\n // Parse pagination from API response meta\n const pagination = useMemo(() => {\n if (data?.meta) {\n return parsePagination(data.meta);\n }\n return {\n page,\n pageSize,\n onPageChange: setPage,\n onPageSizeChange: () => {\n // Handle page size change if needed\n },\n };\n }, [data?.meta, parsePagination, page, pageSize, setPage]);\n\n // Calculate summary\n const summary = useMemo(() => {\n const dataRows = data?.rows || [];\n\n const totalConversions = dataRows.length;\n const totalUSDCReceived = dataRows.reduce(\n (sum, record) => sum + record.received_qty,\n 0,\n );\n const totalFees = dataRows.reduce(\n (sum, record) =>\n sum +\n record.details.reduce(\n (detailSum, detail) => detailSum + detail.haircut,\n 0,\n ),\n 0,\n );\n\n return {\n totalConversions,\n totalUSDCReceived,\n totalFees,\n };\n }, [data]);\n\n return {\n // Data\n dataSource: data?.rows || EMPTY_LIST,\n summary,\n pagination,\n\n // Filter state and handlers (compatible with assets)\n selectedAccount,\n onFilter,\n\n // Query parameters (consistent with other scripts)\n dateRange,\n\n // Filter states\n statusFilter,\n convertedAssetFilter,\n convertedAssetOptions,\n\n // State\n isMainAccount,\n isLoading,\n holding,\n\n // Index prices\n indexPrices,\n chainsInfo,\n };\n};\n\nexport type UseConvertScriptReturn = ReturnType<typeof useConvertScript>;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Button,\n Flex,\n Text,\n TokenIcon,\n Tooltip,\n toast,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\nimport type { ConvertRecord, ConvertTransaction } from \"../type\";\n\nexport interface ConvertColumnsOptions {\n onDetailsClick?: (convertId: number) => void;\n}\n\nexport interface ConvertDetailColumnsOptions {\n onTxClick?: (txId: string) => void;\n indexPrices: Record<string, number>;\n chainsInfo: any[];\n}\n\nexport const ConvertedAssetColumn = ({\n convertedAssets,\n}: {\n convertedAssets: Record<string, number>;\n}) => {\n const { t } = useTranslation();\n const assets = useMemo(() => {\n return Object.keys(convertedAssets);\n }, [convertedAssets]);\n\n const tooltipContent = useMemo(() => {\n return (\n <Flex\n direction=\"column\"\n gap={2}\n className=\"oui-w-[275px] oui-font-semibold oui-text-base-contrast-80\"\n >\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n className=\"oui-w-full oui-text-2xs oui-text-base-contrast-36\"\n >\n <div>{t(\"common.assets\")}</div>\n <div>{t(\"common.qty\")}</div>\n </Flex>\n {assets.map((asset) => (\n <Flex\n key={asset}\n itemAlign=\"center\"\n justify=\"between\"\n className=\"oui-w-full\"\n >\n <Flex itemAlign=\"center\" gap={1}>\n <TokenIcon size=\"xs\" name={asset} />\n <Text.formatted>{asset}</Text.formatted>\n </Flex>\n <div>\n <Text.formatted>{convertedAssets[asset]}</Text.formatted>\n </div>\n </Flex>\n ))}\n </Flex>\n );\n }, [assets]);\n\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <div className=\"oui-relative oui-flex\">\n {assets.slice(0, 3).map((asset, index) => (\n <div\n key={asset}\n className=\"oui-relative\"\n style={{\n marginLeft: index > 0 ? \"-8px\" : \"0\",\n zIndex: assets.length + index,\n }}\n >\n <TokenIcon size=\"xs\" name={asset} />\n </div>\n ))}\n </div>\n <Tooltip content={tooltipContent}>\n <Text.formatted className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\">\n {assets.slice(0, 3).join(\", \")}{\" \"}\n {assets.length > 3 && `+${assets.length - 3}`}\n </Text.formatted>\n </Tooltip>\n </Flex>\n );\n};\n\nexport const useConvertColumns = (options: ConvertColumnsOptions) => {\n const { onDetailsClick } = options;\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.convert.convertedAsset\"),\n dataIndex: \"converted_asset\",\n align: \"left\",\n width: 200,\n maxWidth: 200,\n render(convertedAssets: Record<string, number>) {\n return <ConvertedAssetColumn convertedAssets={convertedAssets} />;\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.usdcAmount\"),\n dataIndex: \"received_qty\",\n align: \"left\",\n width: 150,\n render(qty: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.fee\"),\n dataIndex: \"details\",\n align: \"left\",\n width: 120,\n render(details: ConvertRecord[\"details\"]) {\n const totalHaircut = details.reduce(\n (sum, detail) => sum + detail.haircut,\n 0,\n );\n return (\n <Text.numeral dp={6} padding={false}>\n {totalHaircut}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n align: \"left\",\n width: 150,\n render(type: string) {\n return <Text>{type.charAt(0).toUpperCase() + type.slice(1)}</Text>;\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.convertId\"),\n dataIndex: \"convert_id\",\n align: \"left\",\n width: 150,\n render(convertId: number) {\n return (\n <Text.formatted onCopy={onCopy} copyable>\n {convertId}\n </Text.formatted>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n align: \"left\",\n width: 160,\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n align: \"left\",\n width: 150,\n render(status: string) {\n return (\n <Text>{status.charAt(0).toUpperCase() + status.slice(1)}</Text>\n );\n },\n },\n {\n title: \"\",\n dataIndex: \"updated_time\",\n align: \"center\",\n width: 80,\n render(convertId: number, record: ConvertRecord) {\n return (\n <Button\n size=\"sm\"\n variant=\"text\"\n className=\"oui-text-primary\"\n onClick={() => onDetailsClick?.(record.convert_id)}\n >\n {t(\"portfolio.overview.column.convert.details\")}\n </Button>\n );\n },\n },\n ];\n }, [onDetailsClick]);\n\n return columns;\n};\n\n// Converted asset, Qty., USDC amount, Fee, TxID, Network, Status\nexport const useConvertDetailColumns = (\n options: ConvertDetailColumnsOptions,\n) => {\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.convert.convertedAsset\"),\n dataIndex: \"converted_asset\",\n align: \"left\",\n width: 150,\n render(asset: string) {\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <TokenIcon name={asset} />\n {asset}\n </Flex>\n );\n },\n },\n {\n title: t(\"common.qty\"),\n dataIndex: \"converted_qty\",\n align: \"left\",\n width: 100,\n render(qty: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.convert.usdcAmount\"),\n dataIndex: \"received_qty\",\n align: \"left\",\n width: 100,\n render(qty: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {qty}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.fee\"),\n dataIndex: \"haircut\",\n align: \"left\",\n width: 100,\n render(haircut: number) {\n return (\n <Text.numeral dp={6} padding={false}>\n {haircut}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.txId\"),\n dataIndex: \"tx_id\",\n align: \"left\",\n width: 150,\n render(txId: string, record: ConvertTransaction) {\n if (!txId) return <Text intensity={54}>-</Text>;\n const chainInfo = (options.chainsInfo as any[])?.find(\n (item) => record.chain_id === parseInt(item.chain_id),\n );\n const explorer_base_url = chainInfo?.explorer_base_url;\n const href = `${explorer_base_url}/tx/${txId}`;\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\">\n <Text.formatted\n onCopy={onCopy}\n rule=\"txId\"\n copyable={!!txId}\n className=\"oui-cursor-pointer oui-underline oui-decoration-line-16 oui-decoration-dashed oui-underline-offset-4\"\n >\n {txId}\n </Text.formatted>\n </a>\n );\n },\n },\n {\n title: t(\"transfer.network\"),\n dataIndex: \"chain_id\",\n align: \"left\",\n width: 150,\n render(venue: string, record: ConvertTransaction) {\n return (\n <Text>\n {options.chainsInfo.find(\n (item) => item.chain_id == record.chain_id,\n )?.name || \"-\"}\n </Text>\n );\n },\n },\n {\n title: t(\"common.result\"),\n dataIndex: \"result\",\n align: \"left\",\n width: 100,\n render(result: string) {\n return (\n <Text>{result?.charAt(0).toUpperCase() + result?.slice(1)}</Text>\n );\n },\n },\n ];\n }, []);\n\n return columns;\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n DataFilter,\n Flex,\n DataTable,\n modal,\n SimpleDialog,\n Divider,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useModal } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport type { ConvertRecord } from \"../type\";\nimport { useConvertColumns, useConvertDetailColumns } from \"./convert.column\";\nimport { useConvertScript } from \"./convert.script\";\n\ntype ConvertDesktopUIProps = {\n convertState: ReturnType<typeof useConvertScript>;\n};\n\n// Convert Details Modal Component\nconst ConvertDetailsModal = modal.create<{\n record: ConvertRecord;\n indexPrices: Record<string, number>;\n chainsInfo: any[];\n}>((props) => {\n const { t } = useTranslation();\n const { visible, onOpenChange } = useModal();\n // console.log(props);\n\n const detailColumns = useConvertDetailColumns({\n indexPrices: props.indexPrices,\n chainsInfo: props.chainsInfo,\n });\n\n return (\n <SimpleDialog\n open={visible}\n onOpenChange={onOpenChange}\n title={t(\"portfolio.overview.convert.dialog.title.details\")}\n size=\"lg\"\n closable\n classNames={{\n content: \"oui-max-w-4xl\",\n }}\n >\n <DataTable\n columns={detailColumns}\n dataSource={props.record.details}\n bordered\n className=\"oui-w-full\"\n classNames={{\n header: \"oui-h-10\",\n root: \"oui-bg-base-8 oui-max-h-[60vh] oui-overflow-y-scroll oui-custom-scrollbar\",\n }}\n onRow={() => ({\n className: \"oui-h-[40px]\",\n })}\n generatedRowKey={(record) =>\n record.transaction_id || Math.random().toString()\n }\n />\n </SimpleDialog>\n );\n});\n\nexport const ConvertDesktopUI: React.FC<ConvertDesktopUIProps> = ({\n convertState,\n}) => {\n const { t } = useTranslation();\n\n const handleDetailsClick = (convertId: number) => {\n // Find the convert record by ID\n const record = convertState.dataSource.find(\n (item) => item.convert_id === convertId,\n );\n if (record) {\n modal.show(ConvertDetailsModal, {\n record,\n indexPrices: convertState.indexPrices,\n chainsInfo: convertState.chainsInfo as any,\n });\n }\n };\n\n const columns = useConvertColumns({\n onDetailsClick: handleDetailsClick,\n });\n\n const {\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n } = convertState;\n\n const statusOptions = useMemo(\n () => [\n { label: t(\"common.status.all\"), value: \"all\" },\n { label: t(\"orders.status.completed\"), value: \"completed\" },\n { label: t(\"orders.status.pending\"), value: \"pending\" },\n ],\n [t],\n );\n\n const dataFilter = useMemo(() => {\n return (\n <DataFilter\n className=\"\"\n onFilter={onFilter}\n items={[\n // {\n // type: \"select\",\n // name: \"account\",\n // value: selectedAccount,\n // options: memoizedOptions,\n // },\n {\n type: \"select\",\n name: \"converted_asset\",\n value: convertedAssetFilter,\n options: convertedAssetOptions,\n },\n {\n type: \"select\",\n name: \"status\",\n value: statusFilter,\n options: statusOptions,\n },\n {\n type: \"range\",\n name: \"time\",\n value: {\n from: dateRange?.[0],\n to: dateRange?.[1],\n },\n },\n ]}\n />\n );\n }, [\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n statusOptions,\n ]);\n\n return (\n <>\n {dataFilter}\n\n <AuthGuardDataTable\n bordered\n columns={columns}\n dataSource={convertState.dataSource}\n loading={convertState.isLoading}\n pagination={convertState.pagination}\n manualPagination\n className=\"oui-mt-4 oui-w-full\"\n classNames={{\n root: \"oui-h-[calc(100%_-_49px)]\",\n }}\n onRow={() => ({\n className: \"oui-h-[48px] oui-cursor-pointer\",\n })}\n generatedRowKey={(record) => {\n return record.convert_id.toString();\n }}\n />\n </>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n useModal,\n modal,\n Text,\n Divider,\n TokenIcon,\n Flex,\n DataFilter,\n SimpleSheet,\n toast,\n ScrollIndicator,\n} from \"@kodiak-finance/orderly-ui\";\nimport { ConvertRecord, ConvertTransaction } from \"../type\";\nimport { ConvertedAssetColumn } from \"./convert.column\";\nimport { useConvertScript } from \"./convert.script\";\n\ntype ConvertMobileUIProps = {\n convertState: ReturnType<typeof useConvertScript>;\n};\n\ntype ConvertMobileItemProps = {\n item?: any;\n chainsInfo: any[];\n};\n\ntype ConvertMobileFieldProps = {\n label: string;\n value?: string | number;\n className?: string;\n copyable?: boolean;\n rule?: \"address\" | \"txId\";\n onClick?: () => void;\n};\n\nexport const ConvertMobileUI: React.FC<ConvertMobileUIProps> = ({\n convertState,\n}) => {\n const { t } = useTranslation();\n\n const {\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n } = convertState;\n\n const statusOptions = useMemo(\n () => [\n { label: t(\"common.status.all\"), value: \"all\" },\n { label: t(\"orders.status.completed\"), value: \"completed\" },\n { label: t(\"orders.status.pending\"), value: \"pending\" },\n ],\n [t],\n );\n\n const dataFilter = useMemo(() => {\n return (\n <DataFilter\n onFilter={onFilter}\n items={[\n // {\n // size: \"sm\",\n // type: \"picker\",\n // name: \"account\",\n // value: selectedAccount,\n // options: memoizedOptions,\n // },\n {\n size: \"md\",\n type: \"picker\",\n name: \"converted_asset\",\n value: convertedAssetFilter,\n options: convertedAssetOptions,\n className: \"oui-whitespace-nowrap\",\n },\n {\n size: \"md\",\n type: \"picker\",\n name: \"status\",\n value: statusFilter,\n options: statusOptions,\n className: \"oui-whitespace-nowrap\",\n },\n {\n type: \"range\",\n name: \"time\",\n value: {\n from: dateRange?.[0],\n to: dateRange?.[1],\n },\n },\n ]}\n />\n );\n }, [\n convertedAssetFilter,\n statusFilter,\n dateRange,\n onFilter,\n convertedAssetOptions,\n statusOptions,\n ]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-px-3\">\n <ScrollIndicator className=\"oui-pr-5\">\n <Flex direction=\"row\">{dataFilter}</Flex>\n </ScrollIndicator>\n {convertState.dataSource.map((item) => (\n <ConvertMobileItem\n key={item.convert_id}\n item={item}\n chainsInfo={convertState.chainsInfo as any}\n />\n ))}\n </div>\n );\n};\n\nconst ConvertMobileField: React.FC<ConvertMobileFieldProps> = ({\n label,\n value,\n rule,\n copyable = false,\n className = \"\",\n onClick,\n}) => {\n const { t } = useTranslation();\n const onCopy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n toast.success(t(\"common.copy.copied\"));\n };\n return (\n <div\n className={`oui-text-2xs oui-font-semibold oui-text-base-contrast-80 [&_p]:oui-text-base-contrast-36 ${className}`}\n onClick={onClick}\n >\n <p>{label}</p>\n <Text.formatted rule={rule} copyable={copyable} onCopy={onCopy}>\n {value || \"-\"}\n </Text.formatted>\n </div>\n );\n};\n\nconst ConvertMobileItem: React.FC<ConvertMobileItemProps> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n if (!item) {\n return null;\n }\n\n const totalHaircut = item.details.reduce(\n (sum: number, detail: ConvertTransaction) => sum + detail.haircut,\n 0,\n );\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <div className=\"oui-flex oui-justify-between\">\n <div className=\"oui-flex oui-items-center oui-text-xs oui-font-semibold oui-text-base-contrast-80\">\n <ConvertedAssetColumn convertedAssets={item.converted_asset} />\n <div\n className=\"oui-ml-2 oui-text-primary\"\n onClick={() => {\n modal.show(ConverHistoryItemDetailsDialog, {\n item,\n chainsInfo: props.chainsInfo,\n });\n }}\n >\n {t(\"portfolio.overview.column.convert.details\")}\n </div>\n </div>\n <Text.formatted\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n rule=\"date\"\n >\n {item.created_time}\n </Text.formatted>\n </div>\n\n {/* 5 fields in grid container: 3 per row, wrap to next line */}\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-2\">\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.usdcAmount\")}\n value={item.received_qty}\n />\n <ConvertMobileField label={t(\"common.fee\")} value={totalHaircut} />\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.convertId\")}\n value={item.convert_id}\n copyable={true}\n />\n <ConvertMobileField\n label={t(\"common.type\")}\n value={item.type?.charAt(0).toUpperCase() + item.type?.slice(1)}\n />\n <ConvertMobileField\n label={t(\"common.status\")}\n value={item.status?.charAt(0).toUpperCase() + item.status?.slice(1)}\n />\n </div>\n </div>\n );\n};\n\ntype ConvertHistoryItemDetailsDialogProps = {\n item: ConvertRecord;\n chainsInfo: any[];\n};\n\nconst ConverHistoryItemDetailsDialog =\n modal.create<ConvertHistoryItemDetailsDialogProps>((props) => {\n const { item, chainsInfo } = props;\n const { t } = useTranslation();\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n return (\n <SimpleSheet\n title={t(\"portfolio.overview.convert.dialog.title.details\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <div className=\"oui-flex oui-h-[300px] oui-flex-col oui-gap-3 oui-overflow-y-auto oui-rounded-lg oui-bg-base-7 oui-p-2\">\n {item.details.map((detail, index) => (\n <>\n <div className=\"oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <TokenIcon name={detail.converted_asset} size=\"xs\" />\n <div className=\"oui-text-xs oui-text-base-contrast-80\">\n {detail.converted_asset}\n </div>\n </div>\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-2\">\n <ConvertMobileField\n label={t(\"common.qty\")}\n value={detail.converted_qty}\n />\n <ConvertMobileField\n label={t(\"portfolio.overview.column.convert.usdcAmount\")}\n value={detail.received_qty}\n />\n <ConvertMobileField label=\"Fee\" value={detail.haircut} />\n <ConvertMobileField\n label={t(\"common.txId\")}\n copyable={!!detail.tx_id}\n rule=\"txId\"\n value={detail.tx_id}\n onClick={() => {\n if (detail.tx_id) {\n const chainInfo = chainsInfo.find(\n (item) => item.chain_id == detail.chain_id,\n );\n if (chainInfo?.explorer_base_url) {\n window.open(\n `${chainInfo.explorer_base_url}/tx/${detail.tx_id}`,\n \"_blank\",\n );\n }\n }\n }}\n />\n <ConvertMobileField\n label={t(\"transfer.network\")}\n value={\n chainsInfo.find(\n (item) => item.chain_id == detail.chain_id,\n )?.name || \"-\"\n }\n />\n <ConvertMobileField\n label={t(\"common.result\")}\n value={\n detail.result\n ? detail.result.charAt(0).toUpperCase() +\n detail.result.slice(1)\n : \"-\"\n }\n />\n </div>\n </div>\n {index < item.details.length - 1 && <Divider />}\n </>\n ))}\n </div>\n </SimpleSheet>\n );\n });\n","import React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useConvertScript } from \"./convert.script\";\nimport { ConvertDesktopUI } from \"./convert.ui.desktop\";\nimport { ConvertMobileUI } from \"./convert.ui.mobile\";\n\nexport const ConvertHistoryWidget: React.FC = () => {\n const convertState = useConvertScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <ConvertMobileUI convertState={convertState} />;\n }\n return <ConvertDesktopUI convertState={convertState} />;\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, TokenIcon, Text, cn } from \"@kodiak-finance/orderly-ui\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\n\nexport const useColumns = () => {\n const { t } = useTranslation();\n const columns = React.useMemo<Column<API.StrategyVaultHistoryRow>[]>(() => {\n return [\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n className: (record) => {\n if (record?.type === \"deposit\") {\n return \"oui-text-success\";\n }\n if (record?.type === \"withdrawal\") {\n return \"oui-text-danger\";\n }\n return \"\";\n },\n render(val: string) {\n if (val === \"deposit\") {\n return t(\"common.deposit\");\n }\n if (val === \"withdrawal\") {\n return t(\"common.withdraw\");\n }\n return null;\n },\n },\n {\n title: t(\"portfolio.overview.vaultName\"),\n dataIndex: \"vaultName\",\n },\n {\n title: t(\"common.token\"),\n dataIndex: \"token\",\n render(val: string) {\n return (\n <Flex justify=\"start\" itemAlign=\"center\" gap={2}>\n <TokenIcon name={val} />\n {val}\n </Flex>\n );\n },\n },\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n rule: \"date\",\n },\n {\n title: t(\"common.status\"),\n dataIndex: \"status\",\n render(val: string) {\n return capitalizeString(val);\n },\n },\n {\n title: t(\"common.amount\"),\n dataIndex: \"amount_change\",\n render(val: number) {\n return (\n <Text.numeral\n showIdentifier\n className={cn(\n \"oui-select-none\",\n val >= 0 ? \"oui-text-success\" : \"oui-text-danger\",\n )}\n >\n {val}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t]);\n return columns;\n};\n","import React from \"react\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useColumns } from \"./column\";\nimport type { useVaultsHistoryHookReturn } from \"./useDataSource.script\";\n\ntype HistoryProps = useVaultsHistoryHookReturn;\n\nexport const VaultsHistoryUI: React.FC<Readonly<HistoryProps>> = (props) => {\n const { dataSource, dateRange, isLoading, onFilter } = props;\n\n const columns = useColumns();\n\n return (\n <>\n <DataFilter\n onFilter={onFilter}\n items={[\n {\n type: \"range\",\n name: \"dateRange\",\n value: {\n from: dateRange[0],\n to: dateRange[1],\n },\n },\n ]}\n />\n <AuthGuardDataTable<API.StrategyVaultHistoryRow>\n bordered\n columns={columns}\n dataSource={dataSource}\n loading={isLoading}\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-h-[calc(100%_-_49px)]\" }}\n pagination={props.pagination}\n generatedRowKey={(row) => row.id}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { getDate, getMonth, getYear, set } from \"date-fns\";\nimport { useVaultsHistory } from \"@kodiak-finance/orderly-hooks\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport type { PaginationMeta } from \"@kodiak-finance/orderly-ui\";\nimport { subtractDaysFromCurrentDate } from \"@kodiak-finance/orderly-utils\";\nimport { parseDateRangeForFilter } from \"../helper/date\";\n\nexport const useVaultsHistoryHook = () => {\n const today = React.useMemo<Date>(() => {\n const date = new Date();\n return new Date(getYear(date), getMonth(date), getDate(date), 0, 0, 0);\n }, []);\n\n const [dateRange, setDateRange] = React.useState<Date[]>([\n subtractDaysFromCurrentDate(90, today),\n today,\n ]);\n\n const { page, pageSize, setPage, parsePagination } = usePagination();\n\n const [data, { isLoading, meta }] = useVaultsHistory({\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 size: pageSize,\n page: page,\n });\n\n const dataSource = React.useMemo(() => {\n if (!Array.isArray(data) || !data.length) {\n return [];\n }\n return data.map<API.StrategyVaultHistoryRow>((item) => ({\n ...item,\n token: \"USDC\", // need to hard code for now\n vaultName: \"Orderly OmniVault\",\n amount_change:\n item.type === \"withdrawal\" ? -item.amount_change : item.amount_change,\n }));\n }, [data]);\n\n const onDateRangeFilter = React.useCallback(\n (filter: { value: string; name: string }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(parseDateRangeForFilter(filter.value as any));\n }\n setPage(1);\n },\n [setPage],\n );\n\n const pagination = React.useMemo<PaginationMeta>(\n () => parsePagination(meta),\n [parsePagination, meta],\n );\n\n return {\n dataSource: dataSource,\n isLoading,\n dateRange,\n onFilter: onDateRangeFilter,\n pagination,\n } as const;\n};\n\nexport type useVaultsHistoryHookReturn = ReturnType<\n typeof useVaultsHistoryHook\n>;\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Divider } from \"@kodiak-finance/orderly-ui\";\nimport { DataFilter, TokenIcon, ListView, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useVaultsHistoryHookReturn } from \"./useDataSource.script\";\n\nexport const VaultsHistoryMobile = (props: useVaultsHistoryHookReturn) => {\n const { dateRange, onFilter, dataSource, isLoading, pagination } = props;\n const { t } = useTranslation();\n\n const loadMore = () => {\n if (dataSource.length < (pagination?.count || 0)) {\n pagination?.onPageSizeChange?.(pagination?.pageSize + 50);\n }\n };\n\n const renderHistoryItem = (item: any) => {\n const typeColor = item.type === \"deposit\" ? \"buy\" : \"sell\";\n const typeText =\n item.type === \"deposit\" ? t(\"common.deposit\") : t(\"common.withdraw\");\n const amountText = item.amount_change ? Math.abs(item.amount_change) : \"-\";\n return (\n <div className=\"oui-flex oui-flex-col oui-rounded-xl oui-bg-base-9 oui-p-2 oui-font-semibold\">\n <div className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-text-base-contrast-80\">\n <div>{item.vaultName}</div>\n <div>\n {item.status?.slice(0, 1).toUpperCase() + item.status?.slice(1)}\n </div>\n </div>\n <Text.formatted rule=\"date\" intensity={36} size=\"2xs\">\n {item.created_time}\n </Text.formatted>\n <Divider className=\"oui-my-2\" />\n <div className=\"oui-flex oui-items-center [&>div]:oui-flex-1 [&>div]:oui-text-2xs [&>div]:oui-text-base-contrast-36\">\n <div>\n <div>{t(\"common.token\")}</div>\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-xs oui-text-base-contrast-80\">\n <TokenIcon name={\"USDC\"} size=\"2xs\" />\n <Text>USDC</Text>\n </div>\n </div>\n <div>\n <div>{t(\"common.type\")}</div>\n <Text color={typeColor} className=\"oui-text-xs\">\n {typeText}\n </Text>\n </div>\n <div className=\"oui-text-right\">\n <div>{t(\"common.amount\")}</div>\n <div className=\"oui-text-xs oui-text-base-contrast-80\">\n {amountText}\n </div>\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <>\n <DataFilter\n items={[\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 className=\"oui-sticky oui-top-[44px] oui-z-10 oui-border-none oui-bg-base-10 oui-px-3 oui-py-2\"\n />\n <ListView\n dataSource={dataSource}\n renderItem={renderHistoryItem}\n contentClassName=\"!oui-space-y-1\"\n loadMore={loadMore}\n isLoading={isLoading}\n className=\"oui-px-1\"\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VaultsHistoryUI } from \"./transfer.ui\";\nimport { useVaultsHistoryHook } from \"./useDataSource.script\";\nimport { VaultsHistoryMobile } from \"./vaults.ui.mobile\";\n\nexport const VaultsHistoryWidget: React.FC = () => {\n const state = useVaultsHistoryHook();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <VaultsHistoryMobile {...state} />;\n }\n return <VaultsHistoryUI {...state} />;\n};\n","export { VaultsHistoryWidget } from \"./transfer.widget\";\nexport { VaultsHistoryUI } from \"./transfer.ui\";\n","import React, { useEffect } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistorySideEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowLeftRightSquareFill,\n ArrowUpSquareFillIcon,\n Card,\n FeeTierIcon,\n ServerFillIcon,\n TabPanel,\n Tabs,\n VaultsIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { TabName } from \"./historyDataGroup.script\";\n\nconst LazyAssetHistoryWidget = React.lazy(() =>\n import(\"../assetHistory\").then((mod) => {\n return { default: mod.AssetHistoryWidget };\n }),\n);\n\nconst LazyFundingHistoryWidget = React.lazy(() =>\n import(\"../funding\").then((mod) => {\n return { default: mod.FundingHistoryWidget };\n }),\n);\n\nconst LazyDistributionHistoryWidget = React.lazy(() =>\n import(\"../distribution\").then((mod) => {\n return { default: mod.DistributionHistoryWidget };\n }),\n);\n\nconst LazyTransferHistoryWidget = React.lazy(() =>\n import(\"../TransferHistory\").then((mod) => {\n return { default: mod.TransferHistoryWidget };\n }),\n);\n\nconst LazyConvertHistoryWidget = React.lazy(() =>\n import(\"../../assets/convertPage/convert.widget\").then((mod) => {\n return { default: mod.ConvertHistoryWidget };\n }),\n);\n\nconst LazyVaultsHistoryWidget = React.lazy(() =>\n import(\"../VaultsHistory\").then((mod) => {\n return { default: mod.VaultsHistoryWidget };\n }),\n);\n\nexport const HistoryDataGroupDesktop: React.FC<{\n active?: TabName;\n onTabChange: (tab: string) => void;\n}> = (props) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n const { isMainAccount } = useAccount();\n useEffect(() => {\n if (active === \"vaults\" && !isMainAccount) {\n onTabChange(\"deposit\");\n }\n }, [active, isMainAccount]);\n return (\n <Card>\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"xl\"\n >\n <TabPanel\n title={t(\"common.deposits\")}\n icon={<ArrowDownSquareFillIcon />}\n value={\"deposit\"}\n >\n <React.Suspense fallback={null}>\n <LazyAssetHistoryWidget side={AssetHistorySideEnum.DEPOSIT} />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"common.withdrawals\")}\n icon={<ArrowUpSquareFillIcon />}\n value={\"withdraw\"}\n >\n <React.Suspense fallback={null}>\n <LazyAssetHistoryWidget side={AssetHistorySideEnum.WITHDRAW} />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"common.funding\")}\n icon={<FeeTierIcon />}\n value={\"funding\"}\n >\n <React.Suspense fallback={null}>\n <LazyFundingHistoryWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n icon={<ServerFillIcon />}\n value={\"distribution\"}\n >\n <React.Suspense fallback={null}>\n <LazyDistributionHistoryWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.transferHistory\")}\n icon={<ArrowLeftRightSquareFill />}\n value={\"transfer\"}\n >\n <React.Suspense fallback={null}>\n <LazyTransferHistoryWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.tab.convert.history\")}\n value={\"convert\"}\n >\n <React.Suspense fallback={null}>\n <LazyConvertHistoryWidget />\n </React.Suspense>\n </TabPanel>\n {isMainAccount && (\n <TabPanel\n value={\"vaults\"}\n icon={<VaultsIcon />}\n title={t(\"portfolio.overview.vaults\")}\n >\n <React.Suspense fallback={null}>\n <LazyVaultsHistoryWidget />\n </React.Suspense>\n </TabPanel>\n )}\n </Tabs>\n </Card>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistorySideEnum } from \"@kodiak-finance/orderly-types\";\nimport { TabPanel, Tabs } from \"@kodiak-finance/orderly-ui\";\nimport { ConvertHistoryWidget } from \"../../assets/convertPage/convert.widget\";\nimport { VaultsHistoryWidget } from \"../VaultsHistory/transfer.widget\";\nimport { AssetHistoryWidget } from \"../assetHistory\";\nimport { DistributionHistoryWidget } from \"../distribution\";\nimport { FundingHistoryWidget } from \"../funding\";\nimport { TabName } from \"./historyDataGroup.script\";\n\nconst LazyTransferHistoryWidget = React.lazy(() =>\n import(\"../TransferHistory\").then((mod) => {\n return { default: mod.TransferHistoryWidget };\n }),\n);\n\nexport const HistoryDataGroupMobile: React.FC<{\n active?: TabName;\n onTabChange: (tab: string) => void;\n}> = (props) => {\n const { active = \"deposit\", onTabChange } = props;\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={active}\n onValueChange={onTabChange}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-3 oui-py-2\",\n scrollIndicator: \"oui-pr-3\",\n }}\n showScrollIndicator\n >\n <TabPanel title={t(\"common.deposits\")} value={\"deposit\"}>\n <AssetHistoryWidget side={AssetHistorySideEnum.DEPOSIT} />\n </TabPanel>\n <TabPanel title={t(\"common.withdrawals\")} value={\"withdraw\"}>\n <AssetHistoryWidget side={AssetHistorySideEnum.WITHDRAW} />\n </TabPanel>\n <TabPanel title={t(\"common.funding\")} value={\"funding\"}>\n <FundingHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.distribution\")}\n value={\"distribution\"}\n >\n <DistributionHistoryWidget />\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.transferHistory\")}\n value={\"transfer\"}\n >\n <React.Suspense fallback={null}>\n <LazyTransferHistoryWidget />\n </React.Suspense>\n </TabPanel>\n <TabPanel\n title={t(\"portfolio.overview.tab.convert.history\")}\n value={\"convert\"}\n >\n <ConvertHistoryWidget />\n </TabPanel>\n <TabPanel title={t(\"common.vaults\")} value={\"vaults\"}>\n <VaultsHistoryWidget />\n </TabPanel>\n </Tabs>\n );\n};\n","import { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useHistoryDataGroupScript } from \"./historyDataGroup.script\";\nimport { HistoryDataGroupDesktop } from \"./historyDataGroup.ui.desktop\";\nimport { HistoryDataGroupMobile } from \"./historyDataGroup.ui.mobile\";\n\nexport const HistoryDataGroupWidget: React.FC = () => {\n const state = useHistoryDataGroupScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <HistoryDataGroupMobile {...state} />;\n }\n return <HistoryDataGroupDesktop {...state} />;\n};\n","export { HistoryDataGroupWidget } from \"./historyDataGroup.widget\";\n","import { createContext, useContext } from \"react\";\nimport { TWType } from \"@kodiak-finance/orderly-hooks\";\nimport { UseRewardsDataReturn } from \"../mobile/useRewardsData.script\";\nimport { useAssetsHistoryDataReturn } from \"../shared/useAssetHistory\";\n\nexport type OverviewContextState = {\n // period: PeriodType;\n type?: TWType;\n} & useAssetsHistoryDataReturn &\n UseRewardsDataReturn;\n\nexport const OverviewContext = createContext<OverviewContextState>(\n {} as OverviewContextState,\n);\n\nexport const useOverviewContext = () => {\n return useContext(OverviewContext);\n};\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const useAssetsChartScript = () => {\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 { account_value: 0 },\n { account_value: 500 },\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length) {\n return filteredData;\n }\n return assetHistory.createFakeData(\n { account_value: 0 },\n { account_value: 500 },\n );\n }, [filteredData, assetHistory]);\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 useAssetsChartScriptReturn = ReturnType<\n typeof useAssetsChartScript\n>;\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { subDays, format, differenceInDays } from \"date-fns\";\nimport {\n useAccount,\n useAssetsHistory,\n useBalanceTopic,\n useCollateral,\n useIndexPricesStream,\n useLocalStorage,\n usePrivateQuery,\n useStatisticsDaily,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\n\nexport enum PeriodType {\n DAY = \"1D\",\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport const useAssetsHistoryData = (\n localKey: string,\n options?: { isRealtime?: boolean },\n) => {\n const [today] = useState(() => new Date());\n\n const { getIndexPrice } = useIndexPricesStream();\n // const { account } = useAccount();\n\n const { t } = useTranslation();\n\n const { isRealtime = false } = options || {};\n const periodTypes = Object.values(PeriodType);\n\n const [period, setPeriod] = useLocalStorage<PeriodType | null>(\n localKey,\n PeriodType.MONTH,\n );\n\n const convertToUSDCAndOperate = useCallback(\n (inputs: {\n token: string;\n amount: string | number;\n value: Decimal;\n op?: \"add\" | \"sub\";\n }): Decimal => {\n const { token, amount, value, op = \"sub\" } = inputs;\n if (token.toUpperCase() === \"USDC\") {\n return op === \"add\" ? value.add(amount) : value.sub(amount);\n } else {\n const indexPrice = getIndexPrice(token);\n if (indexPrice) {\n const delta = new Decimal(amount).mul(indexPrice);\n return op === \"add\" ? value.add(delta) : value.sub(delta);\n }\n return value;\n }\n },\n [getIndexPrice],\n );\n\n const periodLabel = useMemo<Record<PeriodType, string>>(() => {\n return {\n [PeriodType.DAY]: t(\"common.select.1d\"),\n [PeriodType.WEEK]: t(\"common.select.7d\"),\n [PeriodType.MONTH]: t(\"common.select.30d\"),\n [PeriodType.QUARTER]: t(\"common.select.90d\"),\n };\n }, [t]);\n\n const formatDateRange = (date: Date): string => {\n return format(date, \"yyyy-MM-dd\");\n };\n\n const getExpectedDateRange = (offsetDay: number) => {\n return {\n from: subDays(new Date(), offsetDay - 1),\n to: new Date(),\n };\n };\n\n const getMatchingPeriodType = (from: Date, to: Date): PeriodType | null => {\n // Calculate days difference (inclusive - add 1 to include both start and end dates)\n const offsetDay = Math.abs(differenceInDays(from, to)) + 1;\n\n // Check against predefined periods\n const filterDays = [1, 7, 30, 90] as const;\n if (!filterDays.includes(offsetDay as any)) {\n return null;\n }\n\n // Validate that the date range matches the expected range for this period\n const expectedRange = getExpectedDateRange(offsetDay);\n if (\n formatDateRange(expectedRange.from) === formatDateRange(from) &&\n formatDateRange(expectedRange.to) === formatDateRange(to)\n ) {\n switch (offsetDay) {\n case 1:\n return PeriodType.DAY;\n case 7:\n return PeriodType.WEEK;\n case 30:\n return PeriodType.MONTH;\n case 90:\n return PeriodType.QUARTER;\n }\n }\n\n return null;\n };\n\n const getCustomDateRangeLabel = (from: Date, to: Date): string => {\n // Calculate days difference (inclusive - add 1 to include both start and end dates)\n const offsetDay = Math.abs(differenceInDays(from, to)) + 1;\n return `${offsetDay}D`;\n };\n\n const { totalValue } = useCollateral();\n\n const getStartDate = (value: PeriodType) => {\n switch (value) {\n case PeriodType.DAY:\n return subDays(today, 1);\n case PeriodType.WEEK:\n return subDays(today, 6);\n case PeriodType.MONTH:\n return subDays(today, 29);\n case PeriodType.QUARTER:\n return subDays(today, 89);\n default:\n return subDays(today, 6);\n }\n };\n\n const [startDate, setStartDate] = useState(getStartDate(period));\n const [endDate, setEndDate] = useState(today);\n\n const periodValue = useMemo(() => {\n if (period) {\n switch (period) {\n case PeriodType.DAY:\n return 1;\n case PeriodType.WEEK:\n return 7;\n case PeriodType.MONTH:\n return 30;\n case PeriodType.QUARTER:\n return 90;\n }\n }\n // For custom date ranges, calculate actual days\n return Math.abs(differenceInDays(startDate, endDate)) + 1;\n }, [period, startDate, endDate]);\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 totalDeposit = useRef<Decimal>(zero);\n\n // get transfer history\n const { data: transferOutHistory, mutate: mutateTransferOut } =\n usePrivateQuery<API.TransferHistory>(\n `/v1/internal_transfer_history?page=1&size=200&side=OUT&start_t=${startDate.getTime()}&end_t=${endDate.getTime()}`,\n {\n revalidateOnFocus: false,\n },\n );\n const { data: transferInHistory, mutate: mutateTransferIn } =\n usePrivateQuery<API.TransferHistory>(\n `/v1/internal_transfer_history?page=1&size=200&side=IN&start_t=${startDate.getTime()}&end_t=${endDate.getTime()}`,\n {\n revalidateOnFocus: false,\n },\n );\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 // Refresh the transfer history once after the balance change event.\n const lastBalanceEventRef = useRef<number>(0);\n const refreshTransferHistory = useCallback(() => {\n const now = Date.now();\n if (now - lastBalanceEventRef.current < 15000) {\n return;\n }\n lastBalanceEventRef.current = now;\n mutateTransferOut?.(undefined, true);\n mutateTransferIn?.(undefined, true);\n }, [mutateTransferOut, mutateTransferIn]);\n\n useBalanceTopic({\n onMessage: () => {\n refreshTransferHistory();\n },\n });\n\n // get deposit & withdraw records to calculate the current PNL\n const [assetHistory] = useAssetsHistory({\n startTime: subDays(today, 2).getTime(),\n endTime: endDate.getTime(),\n pageSize: 50,\n });\n\n // get all deposit records to calculate the ROI\n const [allDepositHistory] = useAssetsHistory({\n side: \"DEPOSIT\",\n startTime: subDays(today, periodValue).getTime(),\n endTime: endDate.getTime(),\n pageSize: 200,\n });\n\n const totalDepositForROI = useMemo(() => {\n return allDepositHistory\n ?.filter((item) => item.trans_status === \"COMPLETED\")\n .reduce((acc, item) => {\n return acc.add(\n // item.amount\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [allDepositHistory, convertToUSDCAndOperate]);\n\n const totalTransferInForROI = useMemo(() => {\n if (!Array.isArray(transferInHistory)) {\n return zero;\n }\n return transferInHistory\n ?.filter((item) => item.status === \"COMPLETED\")\n .reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferInHistory, convertToUSDCAndOperate]);\n\n const dateRange = useMemo(\n () => ({\n from: startDate,\n to: endDate,\n }),\n [startDate, endDate],\n );\n\n const onPeriodChange = (value: PeriodType) => {\n const newStartDate = getStartDate(value);\n setStartDate(newStartDate);\n setEndDate(today);\n setPeriod(value);\n };\n\n const setDateRange = (newRange: {\n from: Date | string;\n to: Date | string;\n }) => {\n const fromDate =\n newRange.from instanceof Date ? newRange.from : new Date(newRange.from);\n const toDate =\n newRange.to instanceof Date ? newRange.to : new Date(newRange.to);\n setStartDate(fromDate);\n setEndDate(toDate);\n\n // Check if the selected range matches a predefined period\n const matchingPeriod = getMatchingPeriodType(fromDate, toDate);\n if (matchingPeriod) {\n setPeriod(matchingPeriod);\n } else {\n // Reset period to null to indicate custom date range selection\n setPeriod(null);\n }\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n setDateRange(filter.value);\n }\n };\n\n const filterItems = useMemo(() => {\n const dateRangeFilter = {\n type: \"range\" as const,\n name: \"dateRange\",\n value: dateRange,\n max: 90,\n };\n return [dateRangeFilter] as any;\n }, [dateRange]);\n\n // const lastItem = data[data.length - 1];\n\n const lastItem = useMemo(() => {\n return data.length > 0 ? data[data.length - 1] : null;\n }, [data]);\n\n const totalTransferIn = useMemo(() => {\n if (!Array.isArray(transferInHistory)) {\n return null;\n }\n if (\n lastItem == null ||\n transferInHistory?.length === 0 ||\n typeof lastItem.snapshot_time === \"undefined\"\n ) {\n return zero;\n }\n const list = transferInHistory?.filter((item) => {\n return (\n item.status === \"COMPLETED\" &&\n item.created_time > lastItem?.snapshot_time\n );\n });\n return list?.reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferInHistory, lastItem, convertToUSDCAndOperate]);\n\n const totalTransferOut = useMemo(() => {\n if (!Array.isArray(transferOutHistory)) {\n return null;\n }\n if (\n lastItem == null ||\n transferOutHistory?.length === 0 ||\n typeof lastItem.snapshot_time === \"undefined\"\n ) {\n return zero;\n }\n const list = transferOutHistory?.filter((item) => {\n return (\n item.status === \"COMPLETED\" &&\n item.created_time > lastItem?.snapshot_time\n );\n });\n return list?.reduce((acc, item) => {\n return acc.add(\n convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: zero,\n op: \"add\",\n }),\n );\n }, zero);\n }, [transferOutHistory, lastItem, convertToUSDCAndOperate]);\n\n const calculateLastPnl = (inputs: {\n lastItem: API.DailyRow;\n assetHistory: ReadonlyArray<API.AssetHistoryRow> | API.AssetHistoryRow[];\n transferHistory: {\n OUT: Decimal;\n IN: Decimal;\n };\n totalValue: number | null;\n }) => {\n if (totalValue == null) {\n return null;\n }\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 // 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 if (item.trans_status === \"COMPLETED\") {\n value = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value,\n op: \"sub\",\n });\n\n totalDeposit.current = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value: totalDeposit.current,\n op: \"add\",\n });\n }\n } else if (item.side === \"WITHDRAW\") {\n if (item.trans_status !== \"FAILED\") {\n value = convertToUSDCAndOperate({\n token: item.token,\n amount: item.amount,\n value,\n op: \"add\",\n });\n }\n }\n }\n }\n\n value = value\n .sub(inputs.transferHistory.IN)\n .add(inputs.transferHistory.OUT);\n\n return value.toNumber();\n };\n\n const calculate = (\n data: API.DailyRow[],\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n const lastItem = data[data.length - 1];\n\n return {\n ...lastItem,\n date: getUTCStr(today),\n perp_volume: 0,\n account_value:\n totalValue !== null ? totalValue : (lastItem?.account_value ?? 0),\n pnl:\n calculateLastPnl({\n lastItem,\n assetHistory,\n totalValue,\n transferHistory: {\n OUT: totalTransferOut,\n IN: totalTransferIn,\n },\n }) ?? 0,\n __isCalculated: true,\n };\n };\n\n const mergeData = (\n data: ReadonlyArray<API.DailyRow> | API.DailyRow[],\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n if (data[data.length - 1].date === getUTCStr(today)) {\n return data;\n }\n\n return data.concat([\n calculate(data, totalValue, totalTransferIn, totalTransferOut),\n ]);\n };\n\n const calculateData = (\n data: ReadonlyArray<API.DailyRow> | API.DailyRow[],\n realtime: boolean,\n totalValue: number | null,\n totalTransferIn: Decimal,\n totalTransferOut: Decimal,\n ) => {\n const _data = !realtime\n ? data\n : mergeData(data, totalValue, totalTransferIn, totalTransferOut);\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) {\n return [];\n }\n // if the transferOutHistory or transferInHistory is not ready, return null;\n\n if (totalTransferOut === null || totalTransferIn === null) {\n return [];\n }\n return calculateData(\n data,\n isRealtime,\n totalValue,\n totalTransferIn,\n totalTransferOut,\n );\n }, [\n data,\n totalValue,\n assetHistory,\n isRealtime,\n getIndexPrice,\n // transferOutHistory,\n // transferInHistory,\n totalTransferIn,\n totalTransferOut,\n ]);\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(\n totalTransferInForROI.add(lastAccountValue).add(totalDepositForROI),\n );\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 }, [\n calculatedData,\n data,\n periodValue,\n totalTransferInForROI,\n totalDepositForROI,\n ]);\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 return { date, ...(i === 0 ? start : end) };\n });\n };\n\n return {\n periodTypes,\n period: period as PeriodType | null,\n onPeriodChange: onPeriodChange,\n periodLabel: periodLabel,\n curPeriod: period\n ? periodLabel[period as PeriodType]\n : getCustomDateRangeLabel(startDate, endDate),\n // data: calculatedDataUpdateByIndexPrice, // calculatedData,\n data: calculatedData, // calculatedData,\n aggregateValue,\n createFakeData,\n filterItems,\n onFilter,\n dateRange,\n setDateRange,\n } as const;\n};\n\nexport type useAssetsHistoryDataReturn = ReturnType<\n typeof useAssetsHistoryData\n>;\n\nfunction getUTCStr(date: Date) {\n const year = date.getUTCFullYear();\n const month = `0${date.getUTCMonth() + 1}`.slice(-2);\n const day = `0${date.getUTCDate()}`.slice(-2);\n\n return `${year}-${month}-${day}`;\n}\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { CardTitle, Flex, DataFilter } from \"@kodiak-finance/orderly-ui\";\nimport { PeriodType } from \"./useAssetHistory\";\n\nexport const PeriodTitle: React.FC<{\n onPeriodChange: (period: PeriodType) => void;\n periodTypes: string[];\n period: PeriodType | null;\n title: string;\n filterItems?: any[];\n onFilter?: (filter: { name: string; value: any }) => void;\n}> = (props) => {\n const { t } = useTranslation();\n\n const periodLabel = useMemo(() => {\n return {\n [PeriodType.DAY]: t(\"common.select.1d\"),\n [PeriodType.WEEK]: t(\"common.select.7d\"),\n [PeriodType.MONTH]: t(\"common.select.30d\"),\n [PeriodType.QUARTER]: t(\"common.select.90d\"),\n };\n }, [t]);\n\n const periodOrder = [\n PeriodType.DAY,\n PeriodType.WEEK,\n PeriodType.MONTH,\n PeriodType.QUARTER,\n ];\n\n return (\n <Flex itemAlign={\"center\"} justify={\"between\"}>\n <CardTitle>{props.title}</CardTitle>\n <Flex gap={2} itemAlign=\"center\">\n {props.filterItems && props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={props.onFilter || (() => {})}\n className=\"oui-border-none oui-py-0\"\n />\n )}\n {periodOrder.map((periodType) => (\n <button\n key={periodType}\n className={`oui-px-3 oui-rounded oui-text-xs oui-font-medium oui-transition-colors ${\n props.period === periodType\n ? \"oui-bg-primary oui-text-white\"\n : \"oui-bg-base-6 oui-text-base-contrast-60 hover:oui-bg-base-4 hover:oui-text-base-contrast\"\n }`}\n onClick={() => props.onPeriodChange(periodType)}\n >\n {periodLabel[periodType]}\n </button>\n ))}\n </Flex>\n </Flex>\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from \"react\";\nimport { AssetAreaChart } from \"@kodiak-finance/orderly-chart\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Card, Box } from \"@kodiak-finance/orderly-ui\";\nimport { useAssetsChartScriptReturn } from \"./assetsChart.script\";\n\nconst LazyPeriodTitle = React.lazy(() =>\n import(\"../shared/periodHeader\").then((mod) => {\n return { default: mod.PeriodTitle };\n }),\n);\n\nexport type AssetsLineChartProps = {} & useAssetsChartScriptReturn;\n\nexport const AssetsChart: React.FC<AssetsLineChartProps> = (props) => {\n const { onPeriodChange, data, periodTypes, period, filterItems, onFilter } =\n props;\n const { t } = useTranslation();\n return (\n <Card\n title={\n <Box>\n <React.Suspense fallback={null}>\n <LazyPeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"common.assets\")}\n filterItems={filterItems}\n onFilter={onFilter}\n />\n </React.Suspense>\n </Box>\n }\n id=\"portfolio-overview-assets-chart\"\n classNames={{ content: \"oui-h-[168px] oui-pb-0\" }}\n >\n <React.Suspense fallback={null}>\n <AssetAreaChart data={data as any} invisible={props.invisible} />\n </React.Suspense>\n </Card>\n );\n};\n","import React from \"react\";\nimport { useAssetsChartScript } from \"./assetsChart.script\";\nimport { AssetsChart } from \"./assetsChart.ui\";\n\nexport const AssetsChartWidget: React.FC = () => {\n const state = useAssetsChartScript();\n return <AssetsChart {...state} />;\n};\n","export { AssetsChartWidget } from \"./assetsChart.widget\";\nexport { useAssetsChartScript } from \"./assetsChart.script\";\nexport { AssetsChart } from \"./assetsChart.ui\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useState } from \"react\";\nimport {\n PnlAreaChart,\n PnLBarChart,\n VolBarChart,\n} from \"@kodiak-finance/orderly-chart\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport {\n Card,\n Grid,\n Box,\n Statistic,\n Text,\n Flex,\n Tooltip,\n cn,\n Tabs,\n TabPanel,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { UsePerformanceScriptReturn } from \"./performance.script\";\n\nconst LazyPeriodTitle = React.lazy(() =>\n import(\"../shared/periodHeader\").then((mod) => {\n return { default: mod.PeriodTitle };\n }),\n);\n\nexport type PerformanceUIProps = {\n // periodTypes: string[];\n // period: string;\n // onPeriodChange: (period: string) => void;\n} & UsePerformanceScriptReturn;\n\ntype LabelWithHintProps = {\n label: string;\n hint?: React.ReactNode;\n};\n\nconst LabelWithHint: React.FC<LabelWithHintProps> = (props) => {\n const { label, hint } = props;\n return (\n <Tooltip\n open={hint ? undefined : false}\n content={hint}\n className=\"oui-max-w-[240px] oui-bg-base-6 \"\n arrow={{ className: \"oui-fill-base-6\" }}\n delayDuration={300}\n >\n <Text\n size=\"xs\"\n intensity={36}\n className={cn(\n hint &&\n \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\",\n )}\n >\n {label}\n </Text>\n </Tooltip>\n );\n};\n\nexport const PerformancePnL: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n return (\n <Box mt={4} height={\"188px\"}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.dailyPnl\")}\n </Text>\n <Box r=\"md\" className=\"oui-h-[188px] oui-border oui-border-line-4\">\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: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.cumulativePnl\")}\n </Text>\n <Box r=\"md\" className=\"oui-h-[188px] oui-border oui-border-line-4\">\n <PnlAreaChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </Box>\n );\n};\n\nexport const PerformancePnLTabs: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n const [activeTab, setActiveTab] = useState(\"daily\");\n\n return (\n <Box mt={4}>\n <Tabs value={activeTab} onValueChange={setActiveTab} variant=\"contained\">\n <TabPanel\n value=\"daily\"\n title={t(\"portfolio.overview.performance.dailyPnl\")}\n >\n <Box\n r=\"md\"\n className=\"oui-mt-4 oui-h-[188px] oui-border oui-border-line-4\"\n >\n <PnLBarChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </TabPanel>\n <TabPanel\n value=\"cumulative\"\n title={t(\"portfolio.overview.performance.cumulativePnl\")}\n >\n <Box\n r=\"md\"\n className=\"oui-mt-4 oui-h-[188px] oui-border oui-border-line-4\"\n >\n <PnlAreaChart\n data={props.data}\n invisible={props.invisible || (props.data?.length ?? 0) <= 2}\n />\n </Box>\n </TabPanel>\n </Tabs>\n </Box>\n );\n};\n\nexport const VolumeChart: React.FC<{\n data: ReadonlyArray<any> | any[];\n invisible: boolean;\n curPeriod?: string;\n}> = (props) => {\n const { t } = useTranslation();\n\n const volumeData = (props.data ?? []).map((item: any) => ({\n date: item.date,\n volume: item.perp_volume ?? 0,\n opacity: (item.perp_volume ?? 0) > 0 ? 1 : 0,\n }));\n\n const shouldHide = props.invisible || (props.data?.length ?? 0) <= 2;\n\n return (\n <Box mt={4}>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {t(\"portfolio.overview.performance.volume\", {\n period: props.curPeriod ?? \"\",\n })}\n </Text>\n <Box\n r=\"md\"\n className={cn(\n \"oui-mt-6 oui-h-[188px] oui-border oui-border-line-4\",\n shouldHide && \"chart-invisible\",\n )}\n >\n <VolBarChart data={volumeData} className=\"oui-size-full\" />\n </Box>\n </Box>\n );\n};\n\nexport const PerformanceUI: React.FC<PerformanceUIProps> = (props) => {\n const {\n periodTypes,\n period,\n onPeriodChange,\n aggregateValue,\n invisible,\n visible,\n curPeriod,\n filterItems,\n onFilter,\n } = props;\n const { t } = useTranslation();\n\n return (\n <Card\n title={\n <Box pt={6}>\n <React.Suspense fallback={null}>\n <LazyPeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"portfolio.overview.performance\")}\n filterItems={filterItems}\n onFilter={onFilter}\n />\n </React.Suspense>\n </Box>\n }\n id=\"portfolio-overview-performance\"\n >\n <Box pb={4}>\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={\n <LabelWithHint\n label={t(\"portfolio.overview.performance.roi\", {\n period: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.roi.tooltip\")}\n />\n }\n valueProps={{ rule: \"percentages\", coloring: true, visible }}\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={\n <LabelWithHint\n label={t(\"portfolio.overview.performance.pnl\", {\n period: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.pnl.tooltip\")}\n />\n }\n valueProps={{ coloring: true, showIdentifier: true, visible }}\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 <LabelWithHint\n label={t(\"portfolio.overview.performance.volume\", {\n period: curPeriod,\n })}\n hint={t(\"portfolio.overview.performance.volume.tooltip\")}\n />\n }\n valueProps={{ visible }}\n >\n {invisible ? \"--\" : aggregateValue.vol}\n </Statistic>\n </Box>\n </Grid>\n <Grid cols={2} gap={4} mb={4}>\n <PerformancePnLTabs\n data={props.data ?? EMPTY_LIST}\n invisible={props.invisible}\n />\n <VolumeChart\n data={props.data ?? EMPTY_LIST}\n invisible={props.invisible}\n curPeriod={props.curPeriod}\n />\n </Grid>\n </Box>\n </Card>\n );\n};\n","// Asset conversion types\nexport interface ConvertedAssets {\n [asset: string]: number;\n}\n\nexport interface ConvertTransaction {\n transaction_id: number;\n venue: \"on_chain\" | \"internal_fund\";\n converted_asset: string;\n received_asset: string;\n converted_qty: number;\n received_qty: number;\n haircut: number;\n chain_id?: number; // Optional, only for on_chain venue\n tx_id?: string; // Optional, only for on_chain venue\n result?: string;\n}\n\nexport interface ConvertRecord {\n convert_id: number;\n converted_asset: ConvertedAssets;\n received_asset: string;\n received_qty: number;\n type: \"auto\" | \"manual\";\n status: \"completed\" | \"pending\" | \"failed\" | \"cancelled\";\n created_time: number;\n updated_time: number;\n details: ConvertTransaction[];\n}\n\n// Additional utility types\nexport type ConvertType = \"auto\" | \"manual\";\n\nexport type ConvertStatus = \"completed\" | \"pending\" | \"failed\" | \"cancelled\";\n\nexport type VenueType = \"on_chain\" | \"internal_fund\";\n\nexport const ORDERLY_ASSETS_VISIBLE_KEY = \"orderly_assets_visible\";\n","import { useMemo } from \"react\";\nimport { useAccount, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { ORDERLY_ASSETS_VISIBLE_KEY } from \"../../assets/type\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const usePerformanceScript = () => {\n const ctx = useOverviewContext();\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\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 { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n ),\n });\n\n const _data = useMemo(() => {\n if (filteredData?.length) {\n return filteredData;\n }\n return ctx?.createFakeData?.(\n { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n );\n }, [ctx, 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 as ReadonlyArray<any>,\n invisible,\n visible: visible as boolean,\n setVisible: setVisible,\n };\n};\n\nexport type UsePerformanceScriptReturn = ReturnType<\n typeof usePerformanceScript\n>;\n","import React from \"react\";\nimport { usePerformanceScript } from \"./performance.script\";\nimport { PerformanceUI } from \"./performance.ui\";\n\nexport const PerformanceWidget: React.FC = () => {\n const state = usePerformanceScript();\n return <PerformanceUI {...state} />;\n};\n","export { PerformanceUI } from \"./performance.ui\";\nexport { PerformanceWidget } from \"./performance.widget\";\nexport { usePerformanceScript } from \"./performance.script\";\n","import React, { useId } from \"react\";\n\nexport const EffectiveFee = React.forwardRef<\n SVGSVGElement,\n React.SVGAttributes<SVGSVGElement>\n>((props, ref) => {\n const linearId = useId();\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={14}\n height={14}\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n ref={ref}\n focusable={false}\n {...props}\n >\n <path\n d=\"M6.16411 1.53106C6.61974 1.07566 7.35888 1.07551 7.81442 1.53106L8.48833 2.20496C8.6797 2.39624 8.93064 2.51452 9.19755 2.54106L9.3132 2.54676H10.2662C10.9104 2.54691 11.4328 3.06926 11.4329 3.71343V4.66647C11.4329 4.97589 11.5559 5.27312 11.7747 5.49191L12.4492 6.16582C12.9047 6.62142 12.9047 7.36054 12.4492 7.81613L11.7753 8.49004L11.6972 8.57549C11.5272 8.78302 11.433 9.04426 11.4329 9.31491V10.2685L11.4272 10.3876C11.3715 10.9366 10.9348 11.373 10.3859 11.4289L10.2662 11.4352H9.3132L9.19755 11.4409C8.93066 11.4674 8.67969 11.5857 8.48833 11.777L7.81442 12.4509L7.72555 12.5306C7.29789 12.8795 6.68066 12.8794 6.25297 12.5306L6.16411 12.4509L5.4902 11.777C5.29887 11.5857 5.04786 11.4675 4.78097 11.4409L4.66533 11.4352H3.71171L3.59265 11.4289C3.04358 11.3731 2.60705 10.9367 2.55131 10.3876L2.54505 10.2685V9.31491C2.54499 9.04416 2.45089 8.78306 2.28072 8.57549L2.20325 8.49004L1.52934 7.81613C1.10213 7.38905 1.07534 6.71297 1.44902 6.25469L1.52934 6.16582L2.20382 5.49191C2.42248 5.27314 2.54505 4.97579 2.54505 4.66647V3.71343C2.54513 3.10945 3.00442 2.61221 3.59265 2.55246L3.71171 2.54676H4.66533L4.78097 2.54106C5.00968 2.51826 5.22694 2.4281 5.40475 2.28244L5.4902 2.20496L6.16411 1.53106ZM6.31507 3.02983C5.87756 3.46727 5.28401 3.71336 4.66533 3.71343H3.71171V4.66647C3.71171 5.28521 3.46614 5.87922 3.02869 6.31678L2.35421 6.99069L3.02812 7.6646C3.46577 8.10214 3.71164 8.69607 3.71171 9.31491V10.2685H4.66533C5.28396 10.2686 5.87757 10.5142 6.31507 10.9515L6.98898 11.6255L7.66289 10.9515C8.10045 10.5141 8.69446 10.2685 9.3132 10.2685H10.2662V9.31491C10.2663 8.69604 10.5127 8.10214 10.9504 7.6646L11.6243 6.99069L10.9498 6.31678C10.5122 5.8792 10.2662 5.28531 10.2662 4.66647V3.71343H9.3132C8.69438 3.71343 8.10047 3.46739 7.66289 3.02983L6.98898 2.35592L6.31507 3.02983ZM8.52934 4.64255C8.7571 4.41479 9.12639 4.41489 9.35421 4.64255C9.58202 4.87035 9.58202 5.23961 9.35421 5.46742L5.4657 9.35593C5.2379 9.58372 4.86863 9.58373 4.64083 9.35593C4.41318 9.12811 4.41308 8.75881 4.64083 8.53106L8.52934 4.64255ZM8.66435 7.83265C9.1245 7.83272 9.49777 8.2059 9.49777 8.66607C9.49769 9.12616 9.12445 9.49941 8.66435 9.49948C8.20419 9.49948 7.83101 9.12621 7.83094 8.66607C7.83094 8.20586 8.20415 7.83265 8.66435 7.83265ZM5.33126 4.49956C5.79141 4.49963 6.16468 4.87282 6.16468 5.33298C6.1646 5.79307 5.79136 6.16575 5.33126 6.16582C4.87111 6.16582 4.49793 5.79311 4.49785 5.33298C4.49785 4.87277 4.87106 4.49956 5.33126 4.49956Z\"\n fill={`url(#${linearId})`}\n />\n <defs>\n <linearGradient\n id={linearId}\n x1=\"12.7908\"\n y1=\"6.99084\"\n x2=\"1.1875\"\n y2=\"6.99084\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop stopColor=\"rgb(var(--oui-gradient-brand-start))\" offset={1} />\n </linearGradient>\n </defs>\n </svg>\n );\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n EffectiveFee.displayName = \"EffectiveFee\";\n}\n","export * from \"./effectiveFee\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo } from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Flex,\n modal,\n Text,\n Tooltip,\n useModal,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n RouterAdapter,\n useScaffoldContext,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useLayoutContext } from \"../../layout/context\";\nimport { EffectiveFee } from \"./icons\";\n\nexport type FeeTierHeaderItemProps = {\n label: string;\n value: React.ReactNode;\n interactive?: boolean;\n};\n\nexport type FeeTierHeaderProps = {\n tier?: number | null;\n vol?: number | null;\n headerDataAdapter?: (original: any[]) => any[];\n};\n\nconst isEffective = (val?: unknown) =>\n typeof val !== \"undefined\" && val !== null;\n\nconst EffectiveFeeDialog: React.FC<{\n routerAdapter: RouterAdapter | undefined;\n}> = (props) => {\n const { routerAdapter } = props;\n const { t } = useTranslation();\n const { hide } = useModal();\n return (\n <Text size=\"2xs\" className=\"oui-whitespace-normal oui-break-words\">\n {t(\"portfolio.feeTier.effectiveFee.tooltip\")}{\" \"}\n <a\n href=\"/rewards/affiliate\"\n onClick={(e) => {\n e.preventDefault();\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate\",\n name: t(\"portfolio.feeTier.effectiveFee.tooltipLink\"),\n });\n hide();\n }}\n className=\"oui-cursor-pointer oui-border-none oui-bg-transparent oui-p-0 oui-text-2xs oui-underline hover:oui-text-base-contrast-80\"\n >\n {t(\"portfolio.feeTier.effectiveFee.tooltipLink\")}\n </a>\n </Text>\n );\n};\n\nexport const MobileHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n const { label, value, interactive } = props;\n const { t } = useTranslation();\n const { routerAdapter } = useLayoutContext();\n return (\n <Flex justify=\"between\" itemAlign=\"center\" width=\"100%\">\n <Text\n as=\"div\"\n intensity={36}\n size=\"xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {label}\n </Text>\n <Flex className=\"oui-gap-1.5\" itemAlign=\"center\" justify=\"between\">\n <Text size=\"xs\" intensity={80} className=\"oui-leading-[24px]\">\n {value}\n </Text>\n {interactive && (\n <Flex\n gap={1}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-cursor-pointer oui-rounded oui-bg-gradient-to-r oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)] oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)] oui-px-1\"\n onClick={() => {\n modal.dialog({\n size: \"sm\",\n title: t(\"common.tips\"),\n content: <EffectiveFeeDialog routerAdapter={routerAdapter} />,\n });\n }}\n >\n <EffectiveFee />\n <Text.gradient\n className=\"oui-select-none\"\n color={\"brand\"}\n size=\"3xs\"\n weight=\"regular\"\n >\n {t(\"common.effectiveFee\")}\n </Text.gradient>\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n};\n\nexport const DesktopHeaderItem: React.FC<FeeTierHeaderItemProps> = (props) => {\n const { label, value, interactive } = props;\n const { t } = useTranslation();\n const { routerAdapter } = useScaffoldContext();\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 <Flex itemAlign=\"center\" justify=\"between\">\n <Text\n as=\"div\"\n intensity={36}\n size=\"2xs\"\n weight=\"semibold\"\n className=\"oui-leading-[18px]\"\n >\n {label}\n </Text>\n {interactive && (\n <Tooltip\n content={\n <Text\n size=\"2xs\"\n className=\"oui-whitespace-normal oui-break-words\"\n >\n {t(\"portfolio.feeTier.effectiveFee.tooltip\")}{\" \"}\n <a\n href=\"/rewards/affiliate\"\n onClick={(e) => {\n e.preventDefault();\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate\",\n name: t(\"portfolio.feeTier.effectiveFee.tooltipLink\"),\n });\n }}\n className=\"oui-cursor-pointer oui-border-none oui-bg-transparent oui-p-0 oui-text-2xs oui-underline hover:oui-text-base-contrast-80\"\n >\n {t(\"portfolio.feeTier.effectiveFee.tooltipLink\")}\n </a>\n </Text>\n }\n className=\"oui-p-1.5 oui-text-base-contrast-54\"\n >\n <Flex\n gap={1}\n justify=\"center\"\n itemAlign=\"center\"\n className=\"oui-cursor-pointer oui-rounded oui-bg-gradient-to-r oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)] oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)] oui-px-1\"\n >\n <EffectiveFee />\n <Text.gradient\n className=\"oui-select-none\"\n color={\"brand\"}\n size=\"xs\"\n weight=\"regular\"\n >\n {t(\"common.effectiveFee\")}\n </Text.gradient>\n </Flex>\n </Tooltip>\n )}\n </Flex>\n <Flex className=\"oui-mt-1 oui-w-full\">\n <Text size=\"base\" intensity={80} className=\"oui-leading-[24px]\">\n {value}\n </Text>\n </Flex>\n </Box>\n );\n};\n\nexport const FeeTierHeader: React.FC<FeeTierHeaderProps> = (props) => {\n const { t } = useTranslation();\n const { tier, vol, headerDataAdapter } = props;\n const { isMobile } = useScreen();\n const { refereeRebate, ...others } = useFeeState();\n const isEffectiveFee = isEffective(refereeRebate);\n const items: FeeTierHeaderItemProps[] = [\n {\n label: t(\"portfolio.feeTier.header.yourTier\"),\n interactive: false,\n value: (\n <Text.gradient\n color={\"brand\"}\n angle={270}\n size={isMobile ? \"xs\" : \"base\"}\n >\n {tier || \"--\"}\n </Text.gradient>\n ),\n },\n {\n label: `${t(\"portfolio.feeTier.header.30dVolume\")} (USDC)`,\n interactive: false,\n value: (\n <Text.numeral\n rule=\"price\"\n dp={2}\n rm={Decimal.ROUND_DOWN}\n size={isMobile ? \"xs\" : \"base\"}\n >\n {vol !== undefined && vol !== null ? `${vol}` : \"-\"}\n </Text.numeral>\n ),\n },\n {\n label: t(\"portfolio.feeTier.header.takerFeeRate\"),\n interactive: isEffectiveFee,\n value: (\n <Text.gradient\n color={\"brand\"}\n angle={270}\n size={isMobile ? \"xs\" : \"base\"}\n >\n {isEffectiveFee\n ? others.effectiveTakerFee || \"--\"\n : others.takerFee || \"--\"}{\" \"}\n (RWA:{\" \"}\n {(isEffectiveFee\n ? others.rwaEffectiveTakerFee\n : others.rwaTakerFee) || \"--\"}\n )\n </Text.gradient>\n ),\n },\n {\n label: t(\"portfolio.feeTier.header.makerFeeRate\"),\n interactive: isEffectiveFee,\n value: (\n <Text.gradient\n color={\"brand\"}\n angle={270}\n size={isMobile ? \"xs\" : \"base\"}\n >\n {isEffectiveFee\n ? others.effectiveMakerFee || \"--\"\n : others.makerFee || \"--\"}{\" \"}\n (RWA:{\" \"}\n {(isEffectiveFee\n ? others.rwaEffectiveMakerFee\n : others.rwaMakerFee) || \"--\"}\n )\n </Text.gradient>\n ),\n },\n ];\n\n const mergedData = useMemo<FeeTierHeaderItemProps[]>(() => {\n if (typeof headerDataAdapter === \"function\") {\n return headerDataAdapter(items);\n }\n return items;\n }, [headerDataAdapter, items]);\n\n if (!Array.isArray(mergedData)) {\n return null;\n }\n\n if (isMobile) {\n return (\n <Flex\n className=\"oui-rounded-xl oui-bg-base-9 oui-p-3\"\n direction=\"column\"\n gap={2}\n itemAlign={\"stretch\"}\n >\n {mergedData.map((item, index) => (\n <MobileHeaderItem {...item} key={`mobile-item-${index}`} />\n ))}\n </Flex>\n );\n }\n\n return (\n <Flex className=\"\" direction=\"row\" gapX={4} my={4} itemAlign={\"stretch\"}>\n {mergedData.map((item, index) => (\n <DesktopHeaderItem {...item} key={`desktop-item-${index}`} />\n ))}\n </Flex>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n APIKeyItem,\n ScopeType,\n useAccount,\n useApiKeyManager,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { toast, usePagination } from \"@kodiak-finance/orderly-ui\";\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 { wrongNetwork, disabledConnect } = useAppContext();\n const { state, account } = useAccount();\n const { t } = useTranslation();\n\n const canCreateApiKey =\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\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-omnichain/evm-api/api-authentication#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 res = await generateOrderlyKey(scope);\n /// add ed25519: prefix to the key\n const generateKeyRes = {\n ...res,\n key: `ed25519:${res.key}`,\n };\n toast.success(t(\"portfolio.apiKey.created\"));\n\n if ((ipRestriction?.length || 0) > 0) {\n const key = generateKeyRes.key;\n const res = await setIPRestriction(key, ipRestriction!);\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(t(\"portfolio.apiKey.apiInfo.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(t(\"portfolio.apiKey.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(t(\"portfolio.apiKey.updated\"));\n refresh();\n return Promise.resolve();\n } else {\n toast.error(data.message);\n }\n return Promise.reject();\n };\n\n const onCopyAccountId = () =>\n toast.success(t(\"portfolio.apiKey.accountId.copied\"));\n const onCopyApiKey = (key?: string) => {\n toast.success(t(\"portfolio.apiKey.column.apiKey.copy\"));\n };\n const onCopyApiSecretKey = () =>\n toast.success(t(\"portfolio.apiKey.secretKey.copied\"));\n const onCopyIP = () =>\n toast.success(t(\"portfolio.apiKey.column.restrictedIP.copy\"));\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 accountId = useDataTap(state.accountId, {\n accountStatus,\n });\n\n const userId = useDataTap(state.userId, {\n accountStatus,\n });\n\n const { pagination } = usePagination();\n\n return {\n accountId: accountId ?? \"--\",\n userId: userId ?? \"--\",\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 { FC, useEffect, useState } from \"react\";\nimport { ScopeType } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, SimpleDialog, Statistic, Text } from \"@kodiak-finance/orderly-ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\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 const { t } = useTranslation();\n\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={t(\"portfolio.apiKey.create.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.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 <Flex direction={\"column\"} gap={1} width={\"100%\"} itemAlign={\"start\"}>\n <Text intensity={54} size=\"2xs\">\n {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-createApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\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-size-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 {t(\"portfolio.apiKey.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={t(\"portfolio.apiKey.permissions.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={t(\"portfolio.apiKey.permissions.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 \"oui-flex oui-items-center oui-gap-2 disabled:oui-cursor-not-allowed disabled:oui-opacity-50\"\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\n <Text\n intensity={54}\n size=\"sm\"\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {props.label}\n </Text>\n </button>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n CopyIcon,\n Flex,\n SimpleDialog,\n Statistic,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { ApiManagerScriptReturns } from \"../apiManager.script\";\n\nexport const CreatedAPIKeyDialog: FC<ApiManagerScriptReturns> = (props) => {\n const ip = props.generateKey?.ip ?? \"--\";\n const { t } = useTranslation();\n return (\n <SimpleDialog\n size=\"sm\"\n open={props.showCreatedDialog}\n onOpenChange={(open) => {\n props.hideCreatedDialog?.();\n }}\n title={t(\"portfolio.apiKey.created\")}\n actions={{\n primary: {\n label: t(\"common.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: t(\"portfolio.apiKey.created.button.copyApiInfo\"),\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={t(\"common.accountId\")}>\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.accountId}\n </Text.formatted>\n </Statistic>\n <Statistic label={t(\"portfolio.apiKey.column.apiKey\")}>\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={t(\"portfolio.apiKey.secretKey\")}>\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={t(\"portfolio.apiKey.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={t(\"portfolio.apiKey.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 {t(\"portfolio.apiKey.created.warning\")}\n </Text>\n </Flex>\n </SimpleDialog>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, SimpleDialog, Text } from \"@kodiak-finance/orderly-ui\";\nimport { APIKeyItem } from \"@kodiak-finance/orderly-hooks\";\nimport { formatKey } from \"../apiManager.ui\";\nimport { useTranslation, Trans } from \"@kodiak-finance/orderly-i18n\";\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 const { t } = useTranslation();\n return (\n <SimpleDialog\n size=\"sm\"\n open={open}\n onOpenChange={setOpen}\n title={t(\"portfolio.apiKey.delete.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.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: t(\"common.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 {/* @ts-ignore */}\n <Trans\n i18nKey=\"portfolio.apiKey.delete.dialog.description\"\n values={{ apiKey: formatKey(item?.orderly_key) }}\n components={[<Text color=\"primary\" className=\"oui-px-1\" />]}\n />\n </Flex>\n </SimpleDialog>\n );\n};\n","import { FC, useEffect, useState } from \"react\";\nimport { APIKeyItem } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, SimpleDialog, Statistic, Text } from \"@kodiak-finance/orderly-ui\";\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 const { t } = useTranslation();\n\n useEffect(() => {\n setIpText(item.ip_restriction_list.join(\",\"));\n const scope = item.scope?.toLocaleLowerCase() || \"\";\n\n setRead(scope.includes(\"read\"));\n setTrade(scope.includes(\"trading\"));\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={t(\"portfolio.apiKey.edit.dialog.title\")}\n actions={{\n primary: {\n label: t(\"common.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 {t(\"portfolio.apiKey.create.ipRestriction\")}\n </Text>\n <textarea\n data-testid=\"oui-testid-apiKey-editApiKey-dialog-textarea\"\n placeholder={t(\"portfolio.apiKey.create.ipRestriction.placeholder\")}\n className={cn(\n \"oui-h-[100px] oui-w-full oui-rounded-xl oui-bg-base-6 oui-p-3 oui-text-sm oui-text-base-contrast-80\",\n \"oui-border-0 oui-outline-none focus:oui-border-2 focus:oui-border-primary-darken\",\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-size-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 {t(\"portfolio.apiKey.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={t(\"portfolio.apiKey.permissions.read\")}\n />\n <Checkbox\n disabled\n size={18}\n checked={trade}\n onCheckedChange={(e) => setTrade(e as boolean)}\n label={t(\"portfolio.apiKey.permissions.trading\")}\n />\n </Flex>\n </Statistic>\n </Flex>\n </SimpleDialog>\n );\n};\n","import React, { useState } from \"react\";\nimport { APIKeyItem } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Button,\n Card,\n CopyIcon,\n Flex,\n PlusIcon,\n Column,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n AuthGuardEmpty,\n AuthGuardDataTable,\n AuthGuardTooltip,\n} from \"@kodiak-finance/orderly-ui-connector\";\nimport {\n type ApiManagerScriptReturns,\n capitalizeFirstChar,\n} from \"./apiManager.script\";\n\nconst LazyCreateAPIKeyDialog = React.lazy(() =>\n import(\"./dialog/createApiKey\").then((mod) => {\n return { default: mod.CreateAPIKeyDialog };\n }),\n);\n\nconst LazyCreatedAPIKeyDialog = React.lazy(() =>\n import(\"./dialog/createdApiKey\").then((mod) => {\n return { default: mod.CreatedAPIKeyDialog };\n }),\n);\n\nconst LazyDeleteAPIKeyDialog = React.lazy(() =>\n import(\"./dialog/deleteApiKey\").then((mod) => {\n return { default: mod.DeleteAPIKeyDialog };\n }),\n);\n\nconst LazyEditAPIKeyDialog = React.lazy(() =>\n import(\"./dialog/editApiKey\").then((mod) => {\n return { default: mod.EditAPIKeyDialog };\n }),\n);\n\nexport const APIManager: React.FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n return (\n <Card\n title={t(\"portfolio.apiKeys\")}\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 <React.Suspense fallback={null}>\n <LazyCreateAPIKeyDialog {...props} />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyCreatedAPIKeyDialog {...props} />\n </React.Suspense>\n </div>\n </Card>\n );\n};\n\nconst AccountInfo: React.FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\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 {t(\"common.accountId\")}\n </Text>\n <Text.formatted\n size=\"base\"\n inlist={80}\n rule={\"address\"}\n copyable={props.accountId !== \"--\"}\n copyIconSize={16}\n onCopy={props.onCopyAccountId}\n copyIconTestid=\"oui-testid-apiKey-accountInfo-accountId-copy-btn\"\n >\n {props.accountId}\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 {t(\"portfolio.apiKey.uid\")}\n </Text>\n <Text size=\"base\" inlist={80}>\n {props.userId}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst Subtitle: React.FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\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}>{t(\"portfolio.apiKey.description\")}</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>{t(\"portfolio.apiKey.readApiGuide\")}</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: t(\"portfolio.apiKey.create.connectWallet.tooltip\"),\n signIn: t(\"portfolio.apiKey.create.createAccount.tooltip\"),\n enableTrading: t(\"portfolio.apiKey.create.enableTrading.tooltip\"),\n wrongNetwork: t(\"portfolio.apiKey.create.wrongNetwork.tooltip\"),\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 {t(\"portfolio.apiKey.create.dialog.title\")}\n </Button>\n </AuthGuardTooltip>\n </Flex>\n );\n};\n\nconst KeyList: React.FC<ApiManagerScriptReturns> = (props) => {\n const { t } = useTranslation();\n const columns: Column<APIKeyItem>[] = [\n {\n title: t(\"portfolio.apiKey.column.apiKey\"),\n dataIndex: \"orderly_key\",\n width: 150,\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: t(\"portfolio.apiKey.column.permissionType\"),\n dataIndex: \"scope\",\n render: (value) =>\n value\n ?.split(\",\")\n .map((e: any) => capitalizeFirstChar(`${e}`))\n .join(\", \"),\n },\n {\n title: t(\"portfolio.apiKey.column.restrictedIP\"),\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: t(\"portfolio.apiKey.column.expirationDate\"),\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\n return (\n <AuthGuardDataTable\n bordered\n columns={columns}\n loading={props.isLoading}\n dataSource={props.keys}\n emptyView={<AuthGuardEmpty />}\n pagination={props.pagination}\n manualPagination={false}\n />\n );\n};\n\nconst EditButton: React.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 const { t } = useTranslation();\n\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 {t(\"common.edit\")}\n </Button>\n {open && (\n <React.Suspense fallback={null}>\n <LazyEditAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onUpdate={onUpdate}\n verifyIP={verifyIP}\n />\n </React.Suspense>\n )}\n </>\n );\n};\n\nconst DeleteButton: React.FC<{\n item: APIKeyItem;\n onDelete: (item: APIKeyItem) => Promise<void>;\n}> = (props) => {\n const { item, onDelete } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\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 {t(\"common.delete\")}\n </Button>\n {open && (\n <React.Suspense fallback={null}>\n <LazyDeleteAPIKeyDialog\n item={item}\n open={open}\n setOpen={setOpen}\n onDelete={onDelete}\n />\n </React.Suspense>\n )}\n </>\n );\n};\n\nexport function formatKey(value: string): string {\n if (typeof value === \"undefined\") {\n return \"-\";\n }\n const key = `${value}`.slice(0, Math.min(value.length, 12));\n return `${key}***`;\n}\n","import { FC, PropsWithChildren } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { usePortfolioLayoutScript } from \"./layout.script\";\nimport { PortfolioLayout, PortfolioLayoutProps } from \"./layout.ui\";\nimport { PortfolioLayoutMobile } from \"./layout.ui.mobile\";\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 const { isMobile } = useScreen();\n\n return (\n <>\n {isMobile ? (\n // @ts-ignore\n <PortfolioLayoutMobile {...state} {...props} />\n ) : (\n <PortfolioLayout {...state} {...props} />\n )}\n </>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useMediaQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n SideMenuItem,\n useScaffoldContext,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\n\nexport enum PortfolioLeftSidebarPath {\n Overview = \"/portfolio\",\n Positions = \"/portfolio/positions\",\n Orders = \"/portfolio/orders\",\n Assets = \"/portfolio/assets\",\n FeeTier = \"/portfolio/feeTier\",\n ApiKey = \"/portfolio/apiKey\",\n Setting = \"/portfolio/setting\",\n History = \"/portfolio/history\",\n SymbolPerformance = \"/portfolio/symbol-performance\",\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 const { t } = useTranslation();\n\n useEffect(() => {\n if (props.current || routerAdapter?.currentPath) {\n setCurrent(props.current || routerAdapter?.currentPath || \"/portfolio\");\n }\n }, [props.current, routerAdapter?.currentPath]);\n\n const items = useMemo(() => {\n return [\n {\n name: t(\"common.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: t(\"common.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: t(\"common.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: t(\"common.assets\"),\n href: PortfolioLeftSidebarPath.Assets,\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n >\n <path\n d=\"M9 1.5C4.85 1.5 1.5 4.85 1.5 9C1.5 13.15 4.85 16.5 9 16.5C13.15 16.5 16.5 13.15 16.5 9C16.5 4.85 13.15 1.5 9 1.5ZM8.17529 3.75H9.67529V4.94971L10.125 5.17529C10.35 5.32529 10.5756 5.47471 10.7256 5.69971C10.8756 5.92471 11.0256 6.14971 11.1006 6.44971C11.1756 6.74971 11.25 7.05029 11.25 7.42529H9.82471C9.82471 6.97529 9.75059 6.67471 9.60059 6.44971C9.45059 6.22471 9.3 6.14941 9 6.14941C8.85 6.14941 8.7 6.15059 8.625 6.22559L8.39941 6.44971C8.32441 6.52471 8.325 6.675 8.25 6.75C8.175 6.825 8.17529 6.975 8.17529 7.125C8.17529 7.275 8.25 7.35 8.25 7.5C8.25 7.65 8.32441 7.72529 8.39941 7.80029C8.47441 7.95029 8.54971 8.02559 8.69971 8.10059C8.77471 8.17559 8.92441 8.24971 9.14941 8.32471C9.44941 8.47471 9.75059 8.62441 9.97559 8.77441C10.2756 8.92441 10.4994 9.07529 10.6494 9.30029C10.8744 9.52529 11.0256 9.75059 11.1006 9.97559C11.1756 10.2006 11.25 10.5 11.25 10.875C11.25 11.25 11.1756 11.5494 11.1006 11.7744C11.0256 12.0744 10.8756 12.2247 10.7256 12.4497C10.5756 12.5997 10.35 12.7494 10.125 12.8994C9.975 12.9744 9.9 13.0503 9.75 13.0503V14.25H8.25V12.9756C8.1 12.9006 7.95029 12.8997 7.80029 12.8247C7.50029 12.7497 7.35 12.6 7.125 12.375C6.975 12.225 6.82529 11.925 6.67529 11.625C6.60029 11.25 6.52441 10.8753 6.52441 10.4253H8.02441C8.02441 10.6503 8.02559 10.8756 8.10059 11.1006C8.17559 11.3256 8.24971 11.4753 8.32471 11.5503C8.39971 11.6253 8.475 11.6994 8.625 11.7744C8.775 11.8494 8.85 11.8506 9 11.8506C9.15 11.8506 9.225 11.8494 9.375 11.7744C9.525 11.6994 9.60029 11.6253 9.67529 11.5503C9.75029 11.4753 9.74971 11.4 9.82471 11.25C9.89971 11.175 9.89941 11.025 9.89941 10.875C9.89941 10.725 9.82471 10.575 9.82471 10.5C9.82471 10.425 9.75029 10.2747 9.67529 10.1997C9.60029 10.0497 9.525 9.97441 9.375 9.89941L8.92529 9.67529C8.62529 9.52529 8.32559 9.37559 8.10059 9.22559C7.80059 9.07559 7.57529 8.92471 7.42529 8.69971C7.20029 8.54971 7.05059 8.32441 6.97559 8.02441C6.90059 7.79941 6.82471 7.5 6.82471 7.125C6.82471 6.825 6.82441 6.52529 6.89941 6.30029C7.04941 6.07529 7.12559 5.85 7.35059 5.625C7.50059 5.4 7.65029 5.25029 7.80029 5.17529C7.95029 5.10029 8.02529 5.02441 8.17529 5.02441V3.75Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.feeTier\"),\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: t(\"portfolio.apiKeys\"),\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: t(\"portfolio.symbolPerformance\"),\n href: PortfolioLeftSidebarPath.SymbolPerformance,\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=\"M13.5 3.75C12.8096 3.75 12.375 4.18467 12.375 4.875V12.375C12.375 13.0654 12.8096 13.5 13.5 13.5H14.625C15.3154 13.5 15.75 13.0654 15.75 12.375V4.875C15.75 4.18467 15.3154 3.75 14.625 3.75H13.5ZM13.5 5.25H14.625V12.375H13.5V5.25ZM8.25 6.75C7.55964 6.75 7.125 7.18467 7.125 7.875V12.375C7.125 13.0654 7.55964 13.5 8.25 13.5H9.375C10.0654 13.5 10.5 13.0654 10.5 12.375V7.875C10.5 7.18467 10.0654 6.75 9.375 6.75H8.25ZM8.25 8.25H9.375V12.375H8.25V8.25ZM3 9.75C2.30964 9.75 1.875 10.1847 1.875 10.875V12.375C1.875 13.0654 2.30964 13.5 3 13.5H4.125C4.81536 13.5 5.25 13.0654 5.25 12.375V10.875C5.25 10.1847 4.81536 9.75 4.125 9.75H3ZM3 11.25H4.125V12.375H3V11.25Z\"\n className=\"oui-fill-current group-data-[actived=true]:oui-fill-[url(#side-menu-gradient)]\"\n />\n </svg>\n ),\n },\n {\n name: t(\"portfolio.setting\"),\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 name: t(\"trading.history\"),\n href: PortfolioLeftSidebarPath.History,\n hide: true,\n },\n ];\n }, [t]);\n\n const hideSideBar = useMediaQuery(\"(max-width: 768px)\");\n\n return {\n items,\n current,\n hideSideBar,\n onItemSelect: (item: SideMenuItem) => {\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\nexport type usePortfolioLayoutScriptType = ReturnType<\n typeof usePortfolioLayoutScript\n>;\n","import { FC, PropsWithChildren } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\nimport {\n ScaffoldProps,\n Scaffold,\n SideBar,\n SideBarProps,\n useScaffoldContext,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\n\nexport type PortfolioLayoutProps = ScaffoldProps & {\n hideSideBar?: boolean;\n items?: SideBarProps[\"items\"];\n};\n\nexport const PortfolioLayout: FC<PropsWithChildren<PortfolioLayoutProps>> = (\n props,\n) => {\n const { children, leftSideProps, classNames, ...rest } = props;\n\n return (\n <Scaffold\n leftSidebar={\n props.hideSideBar ? null : (\n <LeftSidebar\n current={props.routerAdapter?.currentPath}\n routerAdapter={props.routerAdapter}\n items={props.items}\n {...leftSideProps}\n />\n )\n }\n routerAdapter={props.routerAdapter}\n classNames={{\n ...classNames,\n content: cn(\"oui-my-6 oui-px-3\", classNames?.content),\n topNavbar: cn(\"oui-bg-base-9\", classNames?.topNavbar),\n leftSidebar: cn(\n \"oui-rounded-xl oui-bg-base-9\",\n \"oui-m-3 oui-p-4\",\n \"oui-border oui-border-line\",\n classNames?.leftSidebar,\n ),\n }}\n {...rest}\n >\n {children}\n </Scaffold>\n );\n};\n\ntype LeftSidebarProps = SideBarProps & {\n routerAdapter?: RouterAdapter;\n};\n\nconst LeftSidebar: FC<LeftSidebarProps> = (props) => {\n const { expanded, setExpand } = useScaffoldContext();\n const { t } = useTranslation();\n return (\n <SideBar\n title={t(\"common.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 { FC, PropsWithChildren } from \"react\";\nimport { Flex, Box } from \"@kodiak-finance/orderly-ui\";\nimport {\n MainNavMobile,\n BottomNav,\n type ScaffoldProps,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\nimport { LayoutProvider } from \"./context\";\nimport { usePortfolioLayoutScriptType } from \"./layout.script\";\n\nexport const PortfolioLayoutMobile: FC<\n PropsWithChildren<\n ScaffoldProps & usePortfolioLayoutScriptType & { current?: string }\n >\n> = (props) => {\n return (\n <LayoutProvider {...props}>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-h-full-screen oui-bg-base-10\"\n >\n <header className=\"oui-scaffold-topNavbar oui-sticky oui-top-0 oui-z-10 oui-w-full oui-bg-base-10\">\n <MainNavMobile\n {...props.mainNavProps}\n current={props?.current}\n subItems={props?.items}\n leftNav={{\n ...props.mainNavProps?.leftNav,\n menus: [\n ...(props.mainNavProps?.leftNav?.menus || []),\n ...(props?.items || []),\n ],\n }}\n routerAdapter={props.routerAdapter}\n />\n </header>\n <Box className=\"oui-scaffold-container oui-min-h-[calc(100vh-44px-64px-env(safe-area-inset-bottom))] oui-w-full\">\n {props.children}\n </Box>\n <footer className=\"oui-scaffold-bottomNav oui-fixed oui-bottom-0 oui-z-10 oui-w-full oui-bg-base-9 oui-pb-[calc(env(safe-area-inset-bottom))]\">\n <BottomNav\n mainMenus={props.bottomNavProps?.mainMenus}\n current={props?.current}\n onRouteChange={props.routerAdapter?.onRouteChange}\n />\n </footer>\n </Flex>\n </LayoutProvider>\n );\n};\n","export { AssetWidget, AssetsUI } from \"./assets\";\nexport { HistoryDataGroupWidget } from \"./historyDataGroup\";\n\nexport * from \"./assetChart\";\nexport * from \"./assetHistory\";\n\nexport {\n PerformanceUI,\n PerformanceWidget,\n usePerformanceScript,\n} from \"./performance\";\n\nexport * from \"./performanceMobileDialog\";\n\nexport {\n FundingHistoryWidget,\n useFundingHistoryColumns,\n useFundingHistoryHook,\n} from \"./funding\";\n\nexport {\n DistributionHistoryWidget,\n DistributionHistoryMobile,\n DistributionHistoryDesktop,\n} from \"./distribution\";\n\nexport { OverviewPage } from \"./main\";\n\nexport { OverviewProvider } from \"./provider/overviewProvider\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from \"react\";\nimport {\n AssetLineChart,\n PnlAreaChart,\n PnLBarChart,\n VolBarChart,\n PnlLineChartProps,\n} from \"@kodiak-finance/orderly-chart\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Tabs,\n TabPanel,\n Flex,\n Text,\n DataFilter,\n Box,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { UsePerformanceScriptReturn } from \"../performance/performance.script\";\nimport {\n PeriodType,\n useAssetsHistoryDataReturn,\n} from \"../shared/useAssetHistory\";\n\nconst responsiveProps: PnlLineChartProps[\"responsiveContainerProps\"] = {\n width: \"100%\",\n minHeight: 144,\n aspect: 2.5,\n};\n\nexport const PerformanceMobileUI: React.FC<\n Pick<\n useAssetsHistoryDataReturn & UsePerformanceScriptReturn,\n | \"data\"\n | \"curPeriod\"\n | \"aggregateValue\"\n | \"onPeriodChange\"\n | \"invisible\"\n | \"visible\"\n | \"createFakeData\"\n | \"period\"\n | \"filterItems\"\n | \"onFilter\"\n >\n> = (props) => {\n const { t } = useTranslation();\n const {\n data,\n aggregateValue,\n visible,\n invisible,\n curPeriod,\n period,\n onPeriodChange,\n createFakeData,\n filterItems,\n onFilter,\n } = props;\n\n const mergedData = data.length\n ? data\n : (createFakeData?.(\n { account_value: 0, pnl: 0 },\n { account_value: 500, pnl: 500 },\n ) as any[]);\n\n return (\n <div>\n {filterItems && filterItems.length > 0 && (\n <Box mb={4}>\n <DataFilter\n items={filterItems}\n onFilter={onFilter || (() => {})}\n className=\"oui-border-none oui-py-0\"\n />\n </Box>\n )}\n <Tabs\n value={period || \"\"}\n defaultValue={PeriodType.MONTH}\n classNames={{ tabsList: \"oui-justify-between\", trigger: \"oui-w-1/4\" }}\n onValueChange={(value) => onPeriodChange(value as PeriodType)}\n >\n <TabPanel\n title={t(\"common.select.1d\")}\n value={PeriodType.DAY}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (data?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n title={t(\"common.select.7d\")}\n value={PeriodType.WEEK}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (data?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n title={t(\"common.select.30d\")}\n value={PeriodType.MONTH}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (data?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n title={t(\"common.select.90d\")}\n value={PeriodType.QUARTER}\n className=\"oui-min-h-40\"\n >\n <AssetLineChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n </Tabs>\n <Flex justify=\"between\" itemAlign=\"center\" gap={2} my={4}>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.roi\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} rule=\"percentages\" coloring>\n {invisible ? \"--\" : aggregateValue.roi}\n </Text.numeral>\n </Flex>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.pnl\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} coloring showIdentifier>\n {invisible ? \"--\" : aggregateValue.pnl}\n </Text.numeral>\n </Flex>\n <Flex\n gap={1}\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-1/3 oui-rounded-lg oui-bg-base-7 oui-px-2 oui-py-1.5\"\n >\n <Text className=\"oui-truncate\" intensity={36} size=\"2xs\">\n {t(\"portfolio.overview.performance.volume\", { period: curPeriod })}\n </Text>\n <Text.numeral size=\"sm\" visible={visible} coloring={false}>\n {invisible ? \"--\" : aggregateValue.vol}\n </Text.numeral>\n </Flex>\n </Flex>\n <Tabs defaultValue={\"dailyPnl\"}>\n <TabPanel\n value={\"dailyPnl\"}\n title={t(\"portfolio.overview.performance.dailyPnl\")}\n className=\"oui-min-h-40\"\n >\n <PnLBarChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n value={\"cumulativePnl\"}\n title={t(\"portfolio.overview.performance.cumulativePnl\")}\n className=\"oui-min-h-40\"\n >\n <PnlAreaChart\n data={mergedData}\n invisible={invisible || (mergedData?.length ?? 0) <= 2}\n responsiveContainerProps={responsiveProps}\n />\n </TabPanel>\n <TabPanel\n value={\"volume\"}\n title={t(\"portfolio.overview.performance.volume\", { period: \"\" })}\n className=\"oui-min-h-40\"\n >\n <div\n className={cn(\n \"oui-h-[144px] oui-w-full\",\n (invisible || (mergedData?.length ?? 0) <= 2) &&\n \"chart-invisible\",\n )}\n >\n <VolBarChart\n data={(mergedData ?? []).map((item: any) => ({\n date: item.date,\n volume: item.perp_volume ?? 0,\n opacity: (item.perp_volume ?? 0) > 0 ? 1 : 0,\n }))}\n className=\"oui-size-full\"\n />\n </div>\n </TabPanel>\n </Tabs>\n </div>\n );\n};\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport {\n registerSimpleDialog,\n registerSimpleSheet,\n} from \"@kodiak-finance/orderly-ui\";\nimport { usePerformanceScript } from \"..\";\nimport { localKey } from \"../provider/overviewProvider\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { PerformanceMobileUI } from \"./performance.ui\";\n\nexport const PerformanceMobileWidget: React.FC = () => {\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const { visible, invisible } = usePerformanceScript();\n return (\n <PerformanceMobileUI\n {...pick(\n [\n \"data\",\n \"curPeriod\",\n \"aggregateValue\",\n \"onPeriodChange\",\n \"createFakeData\",\n \"period\",\n \"filterItems\",\n \"onFilter\",\n ],\n state,\n )}\n visible={visible}\n invisible={invisible}\n />\n );\n};\n\nexport const PerformanceMobileSheetId = \"PerformanceMobileSheetId\";\n\nexport const PerformanceMobileDialogId = \"PerformanceMobileDialogId\";\n\nregisterSimpleSheet(PerformanceMobileSheetId, PerformanceMobileWidget, {\n title: () => i18n.t(\"portfolio.overview.performance\"),\n});\n\nregisterSimpleDialog(PerformanceMobileDialogId, PerformanceMobileWidget, {\n title: () => i18n.t(\"portfolio.overview.performance\"),\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { TWType } from \"@kodiak-finance/orderly-hooks\";\nimport { useRewardsData } from \"../mobile/useRewardsData.script\";\nimport { useAssetsHistoryData } from \"../shared/useAssetHistory\";\nimport { OverviewContext, OverviewContextState } from \"./overviewContext\";\n\nexport const localKey = \"portfolio_performance_period\";\n\nexport const OverviewProvider: FC<PropsWithChildren<{ type?: TWType }>> = (\n props,\n) => {\n const { type, children } = props;\n const state = useAssetsHistoryData(localKey, { isRealtime: true });\n const rewardsData = useRewardsData({ type: type });\n\n const memoizedValue = useMemo<OverviewContextState>(() => {\n return {\n ...state,\n type: type,\n ...rewardsData,\n };\n }, [state, type, rewardsData]);\n\n return (\n <OverviewContext.Provider value={memoizedValue}>\n {children}\n </OverviewContext.Provider>\n );\n};\n","import { useMemo, useRef, useEffect } from \"react\";\nimport {\n useAllBrokers,\n useConfig,\n useCurEpochEstimate,\n useEpochInfo,\n useGetClaimed,\n useAccount,\n RefferalAPI,\n usePrivateQuery,\n noCacheConfig,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { DistributionId, TWType } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useOverviewContext } from \"../provider/overviewContext\";\n\nexport const useRewardsData = ({ type = TWType.normal }: { type?: TWType }) => {\n const totalOrderClaimedReward = useGetClaimed(\n type === TWType.mm ? DistributionId.mmOrder : DistributionId.order,\n );\n const [curEpochEstimate] = useCurEpochEstimate(type);\n const [brokers] = useAllBrokers();\n const { state } = useAccount();\n const { data, mutate } = usePrivateQuery<RefferalAPI.ReferralInfo>(\n \"/v1/referral/info\",\n { revalidateOnFocus: true, errorRetryCount: 3, ...noCacheConfig },\n );\n\n const epochList = useEpochInfo(type as TWType);\n const brokerId = useConfig(\"brokerId\");\n\n const brokerName = useMemo(() => {\n return brokers?.[brokerId];\n }, [brokerId, brokers]);\n\n const lastStete = useRef<AccountStatusEnum>(AccountStatusEnum.NotConnected);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (lastStete.current !== state.status) {\n lastStete.current = state.status;\n timerRef.current = setTimeout(() => {\n mutate();\n }, 1000);\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, [state.status]);\n\n return {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n referralInfo: data,\n };\n};\n\nexport const useRewardsDataScript = () => {\n const {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n referralInfo,\n } = useOverviewContext();\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n const isSignIn =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n return {\n totalOrderClaimedReward,\n curEpochEstimate,\n epochList,\n brokerName,\n isSignIn,\n referralInfo,\n wrongNetwork,\n };\n};\n\nexport type UseRewardsDataReturn = ReturnType<typeof useRewardsData>;\n","import React, { FC } from \"react\";\nimport { Grid, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { MobileOverview } from \"./mobile\";\nimport { MobileOverviewProps } from \"./mobile/mobile.widget\";\nimport { OverviewProvider } from \"./provider/overviewProvider\";\n\nconst LazyAssetWidget = React.lazy(() =>\n import(\"./assets\").then((mod) => {\n return { default: mod.AssetWidget };\n }),\n);\n\nconst LazyAssetsChartWidget = React.lazy(() =>\n import(\"./assetChart\").then((mod) => {\n return { default: mod.AssetsChartWidget };\n }),\n);\n\nconst LazyPerformanceWidget = React.lazy(() =>\n import(\"./performance\").then((mod) => {\n return { default: mod.PerformanceWidget };\n }),\n);\n\nconst LazyHistoryDataGroupWidget = React.lazy(() =>\n import(\"./historyDataGroup\").then((mod) => {\n return { default: mod.HistoryDataGroupWidget };\n }),\n);\n\nexport type OverviewPageProps = MobileOverviewProps;\n\nexport const OverviewPage: FC<OverviewPageProps> = (props) => {\n const { isMobile } = useScreen();\n return (\n <OverviewProvider>\n {isMobile ? (\n <MobileOverview\n hideAffiliateCard={props.hideAffiliateCard}\n hideTraderCard={props.hideTraderCard}\n />\n ) : (\n <Grid cols={2} gap={4}>\n <React.Suspense fallback={null}>\n <LazyAssetWidget />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyAssetsChartWidget />\n </React.Suspense>\n <Grid.span colSpan={2}>\n <React.Suspense fallback={null}>\n <LazyPerformanceWidget />\n </React.Suspense>\n </Grid.span>\n <Grid.span colSpan={2}>\n <React.Suspense fallback={null}>\n <LazyHistoryDataGroupWidget />\n </React.Suspense>\n </Grid.span>\n </Grid>\n )}\n </OverviewProvider>\n );\n};\n","import { FC } from \"react\";\nimport { ENVType, useGetEnv } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { DepositStatusWidget } from \"@kodiak-finance/orderly-ui-transfer\";\nimport { useLayoutContext } from \"../../../layout/context\";\nimport { useAssetScript } from \"../assets\";\nimport { PortfolioChartsMobileWidget } from \"../portfolioChartsMobile\";\nimport { AccountStatusMobile } from \"./accountStatus.ui.mobile\";\nimport { AffiliateCardMobile } from \"./affiliateCard.ui.mobile\";\nimport { PortfolioHandleMobile } from \"./portfolioHandle.ui.mobile\";\nimport { PortfolioValueMobile } from \"./portfolioVaule.ui.mobile\";\nimport { SettingRouterMobile } from \"./settingRouter.ui.mobile\";\nimport { TraderCardMobile } from \"./traderCard.ui.mobile\";\n// import { TradingRewardsCardMobile } from \"./tradingRewardsCard.ui.mobile\";\nimport { useRewardsDataScript } from \"./useRewardsData.script\";\n\nexport type MobileOverviewProps = {\n /** show affiliate card, mobile only */\n hideAffiliateCard?: boolean;\n /** show trader card, mobile only */\n hideTraderCard?: boolean;\n};\n\nexport const MobileOverview: FC<MobileOverviewProps> = (props) => {\n const { hideAffiliateCard, hideTraderCard } = props;\n const {\n canTrade,\n onWithdraw,\n onDeposit,\n portfolioValue,\n unrealPnL,\n unrealROI,\n visible,\n namespace,\n toggleVisible,\n onTransfer,\n isMainAccount,\n hasSubAccount,\n } = useAssetScript();\n const { t } = useTranslation();\n const rewardsData = useRewardsDataScript();\n const layoutContext = useLayoutContext();\n const { onRouteChange } = useAppContext();\n const env = useGetEnv();\n\n const goToClaim = () => {\n const url = `https://${\n env !== ENVType.prod ? `${env}-` : \"\"\n }app.orderly.network/tradingRewards`;\n window.open(url, \"_blank\");\n };\n\n const navigateToPortfolioHistory =\n typeof onRouteChange === \"function\"\n ? () => {\n onRouteChange({\n href: \"/portfolio/history\",\n name: t(\"trading.history\"),\n });\n }\n : undefined;\n\n // console.log('rewards data', rewardsData, layoutContext, props);\n\n return (\n <>\n <div className=\"oui-my-1 oui-px-3\">\n <AccountStatusMobile />\n </div>\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-gap-5 oui-px-3\"\n >\n <Flex direction=\"column\" width=\"100%\" gapY={2}>\n <PortfolioValueMobile\n toggleVisible={toggleVisible}\n portfolioValue={portfolioValue}\n unrealPnL={unrealPnL}\n unrealROI={unrealROI}\n visible={visible}\n canTrade={canTrade}\n namespace={namespace}\n routerAdapter={layoutContext?.routerAdapter}\n />\n <DepositStatusWidget onClick={navigateToPortfolioHistory} />\n <PortfolioChartsMobileWidget />\n </Flex>\n <PortfolioHandleMobile\n disabled={!canTrade}\n onWithdraw={onWithdraw}\n onDeposit={onDeposit}\n onTransfer={onTransfer}\n isMainAccount={isMainAccount}\n routerAdapter={layoutContext?.routerAdapter}\n hasSubAccount={hasSubAccount}\n />\n {(!hideAffiliateCard || !hideTraderCard) && (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n height={\"100%\"}\n className=\"oui-gap-3\"\n >\n <Flex direction=\"row\" className=\"oui-flex-1 oui-gap-3\">\n {!hideAffiliateCard && (\n <AffiliateCardMobile\n referralInfo={rewardsData.referralInfo}\n routerAdapter={layoutContext?.routerAdapter}\n />\n )}\n {!hideTraderCard && (\n <TraderCardMobile\n referralInfo={rewardsData.referralInfo}\n routerAdapter={layoutContext?.routerAdapter}\n />\n )}\n </Flex>\n {/* Disable trading rewards card for now. Set to row */}\n {/* <Flex direction=\"column\" className=\"oui-flex-1\">\n <TradingRewardsCardMobile {...rewardsData} goToClaim={goToClaim} />\n </Flex> */}\n </Flex>\n )}\n <SettingRouterMobile routerAdapter={layoutContext?.routerAdapter} />\n </Flex>\n </>\n );\n};\n","import React from \"react\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { useAssetsChartScript } from \"../assetChart\";\nimport { usePortfolioChartsState } from \"./portfolioChartsMobile.script\";\nimport { PortfolioChartsMobileUI } from \"./portfolioChartsMobile.ui\";\n\nexport const PortfolioChartsMobileWidget: React.FC = () => {\n const { data, invisible } = useAssetsChartScript();\n const state = usePortfolioChartsState();\n return (\n <PortfolioChartsMobileUI\n data={data || EMPTY_LIST}\n invisible={invisible}\n {...state}\n />\n );\n};\n","import { useCallback } from \"react\";\nimport { useLocalStorage, usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { ORDERLY_ASSETS_VISIBLE_KEY } from \"../../assets/type\";\nimport { PerformanceMobileSheetId } from \"../performanceMobileDialog\";\n\nexport const usePortfolioChartsState = () => {\n const [data] = usePositionStream();\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n const onPerformanceClick = useCallback(() => {\n return modal.show(PerformanceMobileSheetId);\n }, []);\n return {\n unrealPnL: data?.aggregated.total_unreal_pnl,\n unrealROI: data?.totalUnrealizedROI,\n visible: visible as boolean,\n setVisible: setVisible,\n onPerformanceClick: onPerformanceClick,\n } as const;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useId } from \"react\";\nimport { Area, AreaChart } from \"@kodiak-finance/orderly-chart\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { ChevronRightIcon, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { usePortfolioChartsState } from \".\";\n\nexport const PortfolioChartsMobileUI: React.FC<\n ReturnType<typeof usePortfolioChartsState> & {\n data: any[];\n invisible?: boolean;\n }\n> = (props) => {\n const { data, invisible, unrealPnL, unrealROI, visible, onPerformanceClick } =\n props;\n const { t } = useTranslation();\n const colorId = useId();\n return (\n <Flex\n p={4}\n width={\"100%\"}\n itemAlign=\"center\"\n justify=\"between\"\n className={cn(\n \"oui-relative oui-overflow-hidden oui-rounded-2xl oui-border oui-border-solid oui-border-line-12 oui-bg-base-9\",\n )}\n >\n <Flex\n width={\"100%\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n direction={\"column\"}\n gap={2}\n >\n <Text size=\"xs\" intensity={54}>\n {t(\"common.unrealizedPnl\")}\n </Text>\n <Flex justify={\"start\"} itemAlign={\"center\"}>\n <Text.pnl coloring size=\"base\" weight=\"semibold\" visible={visible}>\n {unrealPnL}\n </Text.pnl>\n <Text.roi\n coloring\n rule=\"percentages\"\n size=\"sm\"\n weight=\"semibold\"\n prefix={\"(\"}\n suffix={\")\"}\n visible={visible}\n >\n {unrealROI}\n </Text.roi>\n </Flex>\n <Text\n size=\"xs\"\n intensity={54}\n className=\"oui-flex oui-items-center oui-justify-start oui-gap-1\"\n onClick={onPerformanceClick}\n >\n {t(\"portfolio.overview.performance\")}\n <ChevronRightIcon className=\"oui-text-base-contrast-54\" />\n </Text>\n </Flex>\n <Flex\n width={\"100%\"}\n justify={\"center\"}\n itemAlign={\"center\"}\n direction={\"column\"}\n >\n <AreaChart data={data || EMPTY_LIST} width={160} height={52}>\n {!invisible && (\n <>\n <defs>\n <linearGradient id={colorId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop stopColor=\"#00B49E\" offset=\"0%\" stopOpacity={0.5} />\n <stop stopColor=\"#00B49E\" offset=\"100%\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <Area\n type=\"natural\"\n dataKey=\"account_value\"\n stroke={\"rgb(41, 233, 169)\"}\n strokeWidth={1.5}\n dot={false}\n isAnimationActive={false}\n fill={`url(#${colorId})`}\n />\n </>\n )}\n </AreaChart>\n </Flex>\n </Flex>\n );\n};\n","import { FC, SVGProps, useCallback, useMemo } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useChains,\n useLocalStorage,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum, ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n modal,\n toast,\n formatAddress,\n Flex,\n CopyIcon,\n ChainIcon,\n} from \"@kodiak-finance/orderly-ui\";\n\ninterface StatusInfo {\n title: string;\n description: string;\n titleColor?: any;\n titleClsName?: string;\n}\n\nconst useCurrentStatus = () => {\n const { state, account } = useAccount();\n const { wrongNetwork, disabledConnect, connectWallet } = useAppContext();\n const { t } = useTranslation();\n\n const statusText = {\n wrongNetwork: {\n description: t(\"connector.wrongNetwork.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#D25F00_0%,transparent_30%)]\",\n },\n connectWallet: {\n description: t(\"connector.trade.connectWallet.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#27FDFE_0%,transparent_30%)]\",\n },\n notSignedIn: {\n description: t(\"connector.trade.createAccount.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#335FFC_0%,transparent_30%)]\",\n },\n disabledTrading: {\n description: t(\"connector.trade.enableTrading.tooltip\"),\n rootClass: \"oui-bg-[linear-gradient(15deg,#335FFC_0%,transparent_30%)]\",\n },\n default: {\n description: \"\",\n rootClass: \"\",\n arrowIconClass: \"\",\n textClass: \"\",\n },\n };\n\n return useMemo(() => {\n if (disabledConnect) {\n return statusText.connectWallet;\n }\n\n if (wrongNetwork) {\n return statusText.wrongNetwork;\n }\n\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return statusText.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return statusText.notSignedIn;\n case AccountStatusEnum.DisabledTrading:\n return statusText.disabledTrading;\n default:\n return statusText.default;\n }\n }, [state.status, wrongNetwork]);\n};\n\nexport function EVMChainPopover({ children }: { children: React.ReactNode }) {\n // const [chains] = useState(getChainsByNetwork(\"mainnet\"));\n const [chains] = useChains(\"mainnet\", {\n pick: \"network_infos\",\n });\n const { t } = useTranslation();\n\n const showDialog = () => {\n modal.dialog({\n title: t(\"connector.privy.supportedEvmChain\"),\n size: \"xs\",\n content: (\n <div>\n <div className=\"oui-p-1 oui-grid oui-grid-cols-2 oui-gap-x-2 oui-gap-y-3 oui-text-2xs oui-text-base-contrast-54\">\n {chains.map((item, key) => (\n <div\n key={key}\n className=\"oui-flex oui-items-center oui-justify-start oui-gap-1\"\n >\n <ChainIcon chainId={item.chain_id} size=\"2xs\" />\n <div>{item.name}</div>\n </div>\n ))}\n </div>\n </div>\n ),\n });\n };\n\n return <button onClick={showDialog}>{children}</button>;\n}\n\nexport const MoreIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.00521 6.66797C8.74161 6.66797 9.33854 7.26464 9.33854 8.0013C9.33854 8.73797 8.74161 9.33464 8.00521 9.33464C7.26881 9.33464 6.67188 8.73797 6.67188 8.0013C6.67188 7.26464 7.26881 6.66797 8.00521 6.66797Z\" />\n <path d=\"M3.33333 6.66797C4.06973 6.66797 4.66667 7.26464 4.66667 8.0013C4.66667 8.73797 4.06973 9.33464 3.33333 9.33464C2.59693 9.33464 2 8.73797 2 8.0013C2 7.26464 2.59693 6.66797 3.33333 6.66797Z\" />\n <path d=\"M12.6666 6.66797C13.403 6.66797 14 7.26464 14 8.0013C14 8.73797 13.403 9.33464 12.6666 9.33464C11.9302 9.33464 11.3333 8.73797 11.3333 8.0013C11.3333 7.26464 11.9302 6.66797 12.6666 6.66797Z\" />\n </svg>\n);\n\nconst EVMChains = () => {\n return (\n <div className=\"oui-relative oui-flex oui-items-center oui-justify-center\">\n <div className=\"oui-flex oui-h-[18px] oui-items-center oui-justify-center \">\n <img\n src=\"https://oss.orderly.network/static/sdk/portfolio/chains.png\"\n className=\"oui-relative oui-z-0 oui-h-[18px] oui-w-[49px]\"\n />\n </div>\n <div className=\"oui-relative oui-left-[-9px] oui-flex oui-items-center oui-justify-center oui-gap-1\">\n <div className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-[#282e3a]\">\n <EVMChainPopover>\n <MoreIcon\n className=\"oui-relative oui-z-10 oui-size-3 oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n style={{ zIndex: 1 }}\n />\n </EVMChainPopover>\n </div>\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast\">\n Evm\n </div>\n </div>\n </div>\n );\n};\n\nconst ShowAccount: FC = () => {\n const { state, account } = useAccount();\n const { namespace } = useWalletConnector();\n const { t } = useTranslation();\n const onCopyAddress = () => {\n navigator.clipboard.writeText(state.address ?? \"\");\n toast.success(t(\"common.copy.copied\"));\n };\n\n const currentNamespace = useMemo(() => {\n if (namespace) {\n return namespace;\n }\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return getLinkDeviceStorage()?.chainNamespace;\n }\n return null;\n }, [namespace, state.status]);\n\n const leftNode = useMemo(() => {\n if (!state.address) {\n return;\n }\n return (\n <Flex className=\"oui-text-base oui-text-base-contrast\" gapX={2}>\n {formatAddress(state.address ?? \"\")}\n <button\n className=\"oui-cursor-pointer\"\n onClick={() => {\n onCopyAddress();\n }}\n >\n <CopyIcon\n size={18}\n className=\"oui-text-base-contrast-80\"\n opacity={1}\n />\n </button>\n </Flex>\n );\n }, [state.address]);\n const rightNode = useMemo(() => {\n if (currentNamespace === ChainNamespace.evm) {\n return <EVMChains />;\n }\n\n return (\n <Flex gapX={1} itemAlign={\"center\"} className=\"oui-text-2xs\">\n <img\n src=\"https://oss.orderly.network/static/sdk/solana-logo.png\"\n className=\"oui-w-[15px]\"\n />\n Solana\n </Flex>\n );\n }, [currentNamespace]);\n\n const bgClass = useMemo(() => {\n let bg = \"\";\n if (currentNamespace == ChainNamespace.evm) {\n bg =\n \"oui-bg-[linear-gradient(15deg,#283BEE_-11%,transparent_30%,transparent_77%,#A53411_100%)]\";\n } else if (currentNamespace == ChainNamespace.solana) {\n bg =\n \"oui-bg-[linear-gradient(15deg,#7400D0_-11%,transparent_30%,transparent_77%,#009A7E_100%)]\";\n }\n return bg;\n }, [currentNamespace]);\n return (\n <div\n className={cn([\n \"oui-flex oui-h-[44px] oui-w-full oui-items-center oui-justify-between oui-rounded-[10px] oui-px-3 oui-py-[10px]\",\n bgClass,\n ])}\n >\n {leftNode}\n {rightNode}\n </div>\n );\n};\n\nexport const AccountStatusMobile: FC = () => {\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n const { description, rootClass } = useCurrentStatus();\n\n const alreadyShowAccount = useMemo(() => {\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return true;\n }\n if (wrongNetwork) {\n return false;\n }\n return state.status >= AccountStatusEnum.EnableTrading;\n }, [state.status, wrongNetwork]);\n\n if (alreadyShowAccount) {\n return <ShowAccount />;\n }\n\n return (\n <div\n className={cn([\n \"oui-flex oui-h-[44px] oui-w-full oui-items-center oui-justify-center oui-rounded-[10px] oui-px-3 oui-py-[10px]\",\n rootClass,\n // \"oui-bg-linear-65\",\n // \"oui-from-[-20%]\",\n // \"oui-to-[40%]\",\n // \" oui-from-[#FF7B00]\",\n // \" oui-to-[#FFEA00]\",\n ])}\n >\n <div\n className={cn(\n \"oui-flex oui-items-center oui-justify-end oui-rounded-[10px] oui-text-xs oui-font-semibold\",\n \"oui-text-base-contrast-54\",\n )}\n >\n {description}\n </div>\n </div>\n );\n};\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n","import { FC } from \"react\";\nimport { RefferalAPI as API } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n AffiliateIcon,\n ChevronRightIcon,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\ntype AffiliateCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const AffiliateCardMobile: FC<AffiliateCardMobileProps> = (props) => {\n const { t } = useTranslation();\n const { referralInfo, routerAdapter } = props;\n const rebate = referralInfo?.referrer_info?.[\"30d_referrer_rebate\"];\n return (\n <Flex\n className=\"\n oui-portfolio-affiliate-card\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[112px] \n oui-w-full \n oui-flex-col \n oui-items-start \n oui-rounded-xl \n oui-border \n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-primary-start)/0.36)] \n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-primary-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-primary-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold\">\n {t(\"affiliate.asAffiliate.affilates\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"affiliate.commission\")}\n </Text>\n </Flex>\n <AffiliateIcon />\n </Flex>\n <Flex className=\"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\">\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/USDC.png\"\n alt=\"USDC\"\n className=\"oui-size-5\"\n />\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(rebate) && rebate !== 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(rebate, { fix: 2, fallback: \"--\" })}\n </Text>\n <Text className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n (30D)\n </Text>\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={() => {\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate?tab=affiliate\",\n name: t(\"tradingRewards.rewards\"),\n });\n }}\n />\n </Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n CalendarMinusIcon,\n ArrowLeftRightIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n disabled: boolean;\n onWithdraw?: () => void;\n onDeposit?: () => void;\n onTransfer?: () => void;\n isMainAccount?: boolean;\n routerAdapter?: RouterAdapter;\n hasSubAccount?: boolean;\n};\n\nexport const PortfolioHandleMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n\n const onGotoHistory = () => {\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.History,\n name: t(\"trading.history\"),\n });\n };\n\n const onGotoSymbolPerformance = () => {\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.SymbolPerformance,\n name: t(\"portfolio.symbolPerformance\"),\n });\n };\n\n return (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n height={\"71px\"}\n className=\"oui-gap-3 oui-bg-transparent\"\n >\n {props.isMainAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onDeposit}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowDownSquareFillIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.deposit\")}\n </Text>\n </Flex>\n )}\n {props.hasSubAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onTransfer}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowLeftRightIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.transfer\")}\n </Text>\n </Flex>\n )}\n {props.isMainAccount && (\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={props?.onWithdraw}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <ArrowUpSquareFillIcon size={28} color=\"white\" opacity={1} />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"common.withdraw\")}\n </Text>\n </Flex>\n )}\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n >\n <div\n className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\"\n onClick={onGotoHistory}\n >\n <CalendarMinusIcon\n size={28}\n color=\"white\"\n opacity={1}\n viewBox=\"0 0 28 28\"\n className=\"oui-w-[28px] oui-h-[28px]\"\n />\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"trading.history\")}\n </Text>\n </Flex>\n <Flex\n direction=\"column\"\n gapY={2}\n itemAlign={\"center\"}\n className=\"oui-flex-1 oui-cursor-pointer\"\n onClick={onGotoSymbolPerformance}\n >\n <div className=\"oui-flex oui-size-[48px] oui-items-center oui-justify-center oui-rounded-xl oui-bg-base-9\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-text-white\"\n >\n <path\n d=\"M13.5 3.75C12.8096 3.75 12.375 4.18467 12.375 4.875V12.375C12.375 13.0654 12.8096 13.5 13.5 13.5H14.625C15.3154 13.5 15.75 13.0654 15.75 12.375V4.875C15.75 4.18467 15.3154 3.75 14.625 3.75H13.5ZM13.5 5.25H14.625V12.375H13.5V5.25ZM8.25 6.75C7.55964 6.75 7.125 7.18467 7.125 7.875V12.375C7.125 13.0654 7.55964 13.5 8.25 13.5H9.375C10.0654 13.5 10.5 13.0654 10.5 12.375V7.875C10.5 7.18467 10.0654 6.75 9.375 6.75H8.25ZM8.25 8.25H9.375V12.375H8.25V8.25ZM3 9.75C2.30964 9.75 1.875 10.1847 1.875 10.875V12.375C1.875 13.0654 2.30964 13.5 3 13.5H4.125C4.81536 13.5 5.25 13.0654 5.25 12.375V10.875C5.25 10.1847 4.81536 9.75 4.125 9.75H3ZM3 11.25H4.125V12.375H3V11.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n <Text className=\"oui-text-base-80 oui-text-2xs\">\n {t(\"portfolio.symbolPerformance\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { parseJSON, useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AccountStatusEnum,\n ChainNamespace,\n} from \"@kodiak-finance/orderly-types\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n cn,\n ArrowRightShortIcon,\n EyeIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n portfolioValue: number | null;\n unrealPnL: number;\n unrealROI: number;\n visible: boolean;\n namespace: string | null;\n toggleVisible: () => void;\n canTrade: boolean;\n routerAdapter?: RouterAdapter;\n};\n\nexport const PortfolioValueMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n const { state } = useAccount();\n\n const currentNamespace = useMemo(() => {\n if (props.namespace) {\n return props.namespace;\n }\n if (state.status === AccountStatusEnum.EnableTradingWithoutConnected) {\n return getLinkDeviceStorage()?.chainNamespace;\n }\n return null;\n }, [props.namespace, state.status]);\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n height={\"100%\"}\n className={cn([\n \"oui-relative oui-items-start oui-overflow-hidden oui-rounded-2xl oui-bg-base-9\",\n currentNamespace === ChainNamespace.evm && \"oui-bg-[#283BEE]\",\n currentNamespace === ChainNamespace.solana && \"oui-bg-[#630EAD]\",\n ])}\n p={4}\n >\n <Flex direction=\"row\" gapX={1} itemAlign={\"center\"}>\n <Text className=\"oui-text-sm oui-text-base-contrast-54\">\n {t(\"portfolio.overview.handle.title\")}\n </Text>\n <EyeIcon\n size={16}\n className={cn(\n props.canTrade ? \"oui-text-base-contrast-54\" : \"oui-hidden\",\n )}\n onClick={props.toggleVisible}\n />\n </Flex>\n <Flex\n direction=\"row\"\n gapX={1}\n itemAlign={\"baseline\"}\n className=\"oui-mt-1\"\n >\n <Text.numeral\n visible={props.visible}\n className=\"oui-text-3xl oui-font-bold oui-text-base-contrast\"\n >\n {props.portfolioValue ?? \"--\"}\n </Text.numeral>\n <Text className=\"oui-text-base oui-font-bold oui-text-base-contrast-80\">\n USDC\n </Text>\n </Flex>\n <Flex\n direction=\"row\"\n gapX={1}\n itemAlign={\"center\"}\n className=\"oui-text-sm oui-text-base-contrast\"\n >\n <Text.pnl visible={props.visible}>{props.unrealPnL ?? \"--\"}</Text.pnl>\n <Text.roi\n visible={props.visible}\n rule=\"percentages\"\n prefix={\"(\"}\n suffix={\")\"}\n >\n {props.unrealROI ?? \"--\"}\n </Text.roi>\n </Flex>\n <div\n className=\"oui-absolute oui-right-0 oui-top-0 oui-flex oui-h-full oui-items-center oui-justify-center oui-px-4\"\n onClick={() =>\n props.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.Assets,\n name: \"Assets\",\n })\n }\n >\n <ArrowRightShortIcon size={18} color=\"white\" opacity={0.54} />\n </div>\n </Flex>\n );\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n SettingFillIcon,\n ChevronRightIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { PortfolioLeftSidebarPath } from \"../../../layout\";\n\ntype Props = {\n routerAdapter?: RouterAdapter;\n};\n\nexport const SettingRouterMobile: FC<Props> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"row\"}\n width={\"100%\"}\n className=\"oui-cursor-pointer oui-items-center oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-4 oui-mb-3\"\n onClick={() =>\n props?.routerAdapter?.onRouteChange({\n href: PortfolioLeftSidebarPath.Setting,\n name: t(\"portfolio.setting\"),\n })\n }\n >\n <SettingFillIcon size={18} opacity={0.98} color=\"white\" />\n <Text className=\"oui-text-base oui-font-semibold oui-text-base-contrast-80\">\n {t(\"portfolio.setting\")}\n </Text>\n <ChevronRightIcon\n className=\"oui-ml-auto\"\n size={18}\n opacity={0.36}\n color=\"white\"\n />\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { RefferalAPI as API } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { RouterAdapter } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Text,\n TraderMobileIcon,\n ChevronRightIcon,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\n\nconst isNumber = (val: unknown): val is number => {\n return typeof val === \"number\" && !Number.isNaN(val);\n};\n\ntype TraderCardMobileProps = {\n referralInfo?: API.ReferralInfo;\n routerAdapter?: RouterAdapter;\n};\n\nexport const TraderCardMobile: FC<TraderCardMobileProps> = (props) => {\n const { t } = useTranslation();\n const { referralInfo, routerAdapter } = props;\n const rebate = referralInfo?.referee_info?.[\"30d_referee_rebate\"];\n return (\n <Flex\n className=\"\n oui-portfolio-trader-card\n oui-via-21.6% \n oui-via-83.23% \n oui-relative \n oui-h-[112px] \n oui-w-full \n oui-flex-col \n oui-items-start \n oui-rounded-xl \n oui-border\n oui-border-solid \n oui-border-[rgba(var(--oui-gradient-success-start)/0.36)]\n oui-bg-gradient-to-r\n oui-from-[rgba(var(--oui-gradient-success-end)/0.12)]\n oui-to-[rgba(var(--oui-gradient-success-start)/0.12)]\n oui-p-3\n \"\n >\n <Flex className=\"oui-w-full oui-flex-row oui-justify-between oui-items-center\">\n <Flex className=\"oui-flex-col oui-items-start\">\n <Text className=\"oui-text-base-contrast oui-text-base oui-font-semibold\">\n {t(\"affiliate.trader.rebates\")}\n </Text>\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"affiliate.trader.tradingRebates\")}\n </Text>\n </Flex>\n <TraderMobileIcon />\n </Flex>\n\n <Flex\n className={cn(\n \"oui-mt-auto oui-w-full oui-flex-row oui-items-center oui-gap-1\",\n )}\n >\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/USDC.png\"\n alt=\"USDC\"\n className=\"oui-size-5\"\n />\n <Text\n className={cn(\n \"oui-text-xs oui-font-semibold\",\n isNumber(rebate) && rebate !== 0\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-36\",\n )}\n >\n {commifyOptional(rebate, { fix: 2, fallback: \"--\" })}\n </Text>\n <Text className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n (30D)\n </Text>\n <ChevronRightIcon\n size={18}\n color=\"white\"\n className=\"oui-ml-auto\"\n onClick={() => {\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate?tab=trader\",\n name: t(\"tradingRewards.rewards\"),\n });\n }}\n />\n </Flex>\n </Flex>\n );\n};\n","export { FeeTierPage } from \"./page\";\nexport { useFeeTierScript } from \"./feeTier.script\";\nexport type { FeeDataType, UseFeeTierScriptOptions } from \"./feeTier.script\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Flex,\n Text,\n Card,\n Divider,\n DataTable,\n Column,\n useScreen,\n cn,\n TanstackColumn,\n} from \"@kodiak-finance/orderly-ui\";\nimport type { FeeDataType, useFeeTierScriptReturn } from \"./feeTier.script\";\n\nconst LazyFeeTierHeader = React.lazy(() =>\n import(\"./feeTierHeader\").then((mod) => {\n return { default: mod.FeeTierHeader };\n }),\n);\n\nexport type FeeTierProps = useFeeTierScriptReturn;\n\nexport type FeeTierHeaderProps = {\n tier?: number;\n vol?: number;\n};\n\ntype FeeTierTableProps = {\n columns: Column<any>[];\n dataSource?: any[];\n page?: number;\n pageSize?: number;\n dataCount?: number;\n tier?: number | null;\n vol?: number | null;\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal?: any;\n active?: any;\n };\n onCell?: (\n column: TanstackColumn<any>,\n record: any,\n index: number,\n ) => {\n normal?: any;\n active?: any;\n };\n};\n\nexport const FeeTierTable: React.FC<FeeTierTableProps> = (props) => {\n const { isMobile } = useScreen();\n\n const { tier, columns, dataSource, onRow, onCell } = props;\n\n const internalOnRow = useCallback(\n (record: FeeDataType, index: number) => {\n const config =\n typeof onRow === \"function\"\n ? onRow(record, index)\n : { normal: undefined, active: undefined };\n const active = tier !== undefined && tier !== null && tier === index + 1;\n if (active) {\n return {\n \"data-state\": \"active\",\n className: cn(\n \"oui-pointer-events-none oui-h-[54px] oui-text-[rgba(0,0,0,0.88)] oui-gradient-brand\",\n ),\n ...config.active,\n };\n } else {\n return {\n \"data-state\": \"none\",\n className: cn(\"oui-h-[54px]\"),\n ...config.normal,\n };\n }\n },\n [tier, onRow],\n );\n\n const internalOnCell = useCallback(\n (\n column: TanstackColumn<FeeDataType>,\n record: FeeDataType,\n index: number,\n ) => {\n const config =\n typeof onCell === \"function\"\n ? onCell(column, record, index)\n : { normal: undefined, active: undefined };\n const active = tier !== undefined && tier !== null && tier === index + 1;\n const isFirstColumn = column.getIsFirstColumn();\n const isLastColumn = column.getIsLastColumn();\n if (active) {\n return {\n className: cn(\n isFirstColumn && \"oui-rounded-l-lg\",\n isLastColumn && \"oui-rounded-r-lg\",\n ),\n ...config.active,\n };\n } else {\n return {\n className: \"\",\n ...config.normal,\n };\n }\n },\n [tier, onCell],\n );\n\n return (\n <Box\n className={cn(\n \"oui-relative oui-border-b oui-border-line-4\",\n isMobile ? \"oui-mt-2 oui-rounded-xl oui-bg-base-9\" : undefined,\n )}\n >\n <DataTable\n bordered\n className=\"oui-font-semibold\"\n classNames={{ root: \"oui-bg-transparent\" }}\n onRow={internalOnRow}\n onCell={internalOnCell}\n columns={columns}\n dataSource={dataSource}\n />\n </Box>\n );\n};\n\nconst CardTitle: React.FC = () => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <Flex itemAlign={\"center\"} justify={\"center\"} gap={2}>\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.feeTier.updatedDailyBy\")}\n </Text>\n <Text size=\"xs\" intensity={80}>\n ~2:15 UTC\n </Text>\n </Flex>\n );\n }\n return (\n <Flex itemAlign={\"center\"} justify={\"between\"}>\n <Text size={\"lg\"}>{t(\"portfolio.feeTier\")}</Text>\n <Flex itemAlign={\"center\"} justify={\"center\"} gap={1}>\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.feeTier.updatedDailyBy\")}\n </Text>\n <Text size=\"xs\" intensity={80}>\n ~2:15 UTC\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const FeeTier: React.FC<FeeTierProps> = (props) => {\n const { columns, dataSource, tier, vol, headerDataAdapter, onRow, onCell } =\n props;\n const { isMobile } = useScreen();\n return (\n <Card\n title={<CardTitle />}\n id=\"oui-portfolio-fee-tier\"\n className=\"w-full\"\n classNames={{\n root: isMobile ? \"oui-bg-transparent oui-p-2\" : \"oui-bg-base-9\",\n }}\n >\n {!isMobile && <Divider />}\n <React.Suspense fallback={null}>\n <LazyFeeTierHeader\n vol={vol}\n tier={tier}\n headerDataAdapter={headerDataAdapter}\n />\n </React.Suspense>\n <FeeTierTable\n dataSource={dataSource}\n columns={columns}\n vol={vol}\n tier={tier}\n onRow={onRow}\n onCell={onCell}\n />\n </Card>\n );\n};\n","import React from \"react\";\nimport { useFeeTierScript, type UseFeeTierScriptOptions } from \".\";\nimport { FeeTier } from \"./feeTier.ui\";\n\nexport type FeeTierWidgetProps = UseFeeTierScriptOptions;\n\nexport const FeeTierWidget: React.FC<FeeTierWidgetProps> = (props) => {\n const state = useFeeTierScript(props);\n return <FeeTier {...state} />;\n};\n","import React from \"react\";\nimport { FeeTierWidget, FeeTierWidgetProps } from \"./feeTier.widget\";\n\nexport type FeeTierPageProps = FeeTierWidgetProps;\n\nexport const FeeTierPage: React.FC<FeeTierPageProps> = (props) => {\n return <FeeTierWidget {...props} />;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { on } from \"events\";\nimport {\n useAccount,\n useAccountInfo,\n usePrivateQuery,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum, API } from \"@kodiak-finance/orderly-types\";\nimport type { Column, TanstackColumn } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useFeeTierColumns } from \"./column\";\nimport { dataSource as defaultDataSource } from \"./dataSource\";\n\nexport type useFeeTierScriptReturn = ReturnType<typeof useFeeTierScript>;\n\nexport type UseFeeTierScriptOptions = {\n dataAdapter?: (\n columns: Column<any>[],\n dataSource: any[],\n context?: {\n tier?: number;\n },\n ) => {\n columns: Column<any>[];\n dataSource: any[];\n };\n headerDataAdapter?: (original: any[]) => any[];\n onRow?: (\n record: any,\n index: number,\n ) => {\n normal?: any;\n active?: any;\n };\n onCell?: (\n column: TanstackColumn<any>,\n record: any,\n index: number,\n ) => {\n normal?: any;\n active?: any;\n };\n};\n\nexport interface FeeDataType {\n tier: number | null;\n volume_min?: number | null;\n volume_max?: number | null;\n volume_node?: React.ReactNode;\n or?: string | null;\n maker_fee: string;\n taker_fee: string;\n}\n\nconst findCurrentTier = (feeList: FeeDataType[], data: API.AccountInfo) => {\n const { futures_taker_fee_rate = 0, futures_maker_fee_rate = 0 } = data;\n const takerRate = new Decimal(futures_taker_fee_rate).mul(0.01);\n const makerRate = new Decimal(futures_maker_fee_rate).mul(0.01);\n const findItem = feeList.find((item) => {\n const itemTakerRate = item.taker_fee.split(\"/\")?.[0].trim();\n const itemMakerRate = item.maker_fee.split(\"/\")?.[0].trim();\n return (\n itemTakerRate === `${takerRate.toNumber()}%` &&\n itemMakerRate === `${makerRate.toNumber()}%`\n );\n });\n return findItem?.tier;\n};\n\nexport const useFeeTierScript = (options?: UseFeeTierScriptOptions) => {\n const { dataAdapter, headerDataAdapter, onRow, onCell } = options || {};\n const [tier, setTier] = useState<number | null>();\n const { data, isLoading } = useAccountInfo();\n const { state } = useAccount();\n\n const cols = useFeeTierColumns();\n\n const { data: volumeStatistics } = usePrivateQuery<{\n perp_volume_last_30_days: number;\n }>(\"/v1/volume/user/stats\");\n\n const { columns, dataSource } = useMemo(() => {\n return typeof dataAdapter === \"function\"\n ? dataAdapter(cols, defaultDataSource, { tier: tier! })\n : { columns: cols, dataSource: defaultDataSource };\n }, [dataAdapter, cols, tier]);\n\n useEffect(() => {\n if (!data || isLoading) {\n return;\n }\n setTier(findCurrentTier(dataSource, data));\n }, [data, isLoading, dataSource]);\n\n const authData = useDataTap(\n {\n tier: tier,\n vol: volumeStatistics?.perp_volume_last_30_days,\n },\n {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n },\n );\n\n return {\n ...authData,\n columns: columns,\n dataSource: dataSource,\n onRow: onRow,\n onCell: onCell,\n headerDataAdapter: headerDataAdapter,\n };\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\nimport { numberToHumanStyle } from \"@kodiak-finance/orderly-utils\";\nimport type { FeeDataType } from \"./feeTier.script\";\n\nconst textStyle: React.CSSProperties = {\n fontVariantLigatures: \"none\",\n};\n\nexport const useFeeTierColumns = () => {\n const { t } = useTranslation();\n return useMemo<Column<FeeDataType>[]>(() => {\n return [\n {\n title: t(\"portfolio.feeTier.column.tier\"),\n dataIndex: \"tier\",\n align: \"left\",\n width: 100,\n },\n {\n title: `${t(\"portfolio.feeTier.column.30dVolume\")} (USDC)`,\n dataIndex: \"volume\",\n align: \"center\",\n width: 180,\n render: (val, record) => {\n const { volume_min, volume_max, volume_node } = record;\n if (volume_node) {\n return volume_node;\n }\n if (!volume_min && !volume_max) {\n return <div style={textStyle}>--</div>;\n }\n if (volume_min && !volume_max) {\n return t(\"portfolio.feeTier.column.30dVolume.above\", {\n volume: numberToHumanStyle(\n volume_min,\n volume_min === 2500000 ? 1 : 0,\n ),\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: t(\"portfolio.feeTier.column.maker\"),\n dataIndex: \"maker_fee\",\n align: \"right\",\n width: 150,\n },\n {\n title: t(\"portfolio.feeTier.column.taker\"),\n dataIndex: \"taker_fee\",\n align: \"right\",\n width: 150,\n },\n ];\n }, [t]);\n};\n","import type { FeeDataType } from \"./feeTier.script\";\n\nexport const dataSource: FeeDataType[] = [\n {\n tier: 1,\n volume_min: 0,\n volume_max: 500000,\n maker_fee: \"0.025% / 0%\",\n taker_fee: \"0.04% / 0.05%\",\n },\n {\n tier: 2,\n volume_min: 500000,\n volume_max: 1000000,\n maker_fee: \"0.02% / 0%\",\n taker_fee: \"0.035% / 0.05%\",\n },\n {\n tier: 3,\n volume_min: 1000000,\n volume_max: 5000000,\n maker_fee: \"0.018% / 0%\",\n taker_fee: \"0.03% / 0.05%\",\n },\n {\n tier: 4,\n volume_min: 5000000,\n volume_max: 20000000,\n maker_fee: \"0.012% / 0%\",\n taker_fee: \"0.025% / 0.05%\",\n },\n {\n tier: 5,\n volume_min: 20000000,\n volume_max: 50000000,\n or: \"/\",\n maker_fee: \"0.009% / 0%\",\n taker_fee: \"0.022% / 0.05%\",\n },\n {\n tier: 6,\n volume_min: 50000000,\n volume_max: 100000000,\n or: \"/\",\n maker_fee: \"0.005% / 0%\",\n taker_fee: \"0.018% / 0.05%\",\n },\n {\n tier: 7,\n volume_min: 100000000,\n volume_max: undefined,\n or: \"/\",\n maker_fee: \"0% / 0%\",\n taker_fee: \"0.015% / 0.05%\",\n },\n];\n","import { useMemo, useState, useRef } from \"react\";\nimport React from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Flex,\n Text,\n Divider,\n Box,\n Tabs,\n TabPanel,\n DataFilter,\n formatAddress,\n Tooltip,\n InfoCircleIcon,\n Button,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n LiquidationWidget,\n PositionHistoryWidget,\n PositionHistoryInstance,\n PositionsProps,\n CombinePositionsWidget,\n PositionsWidget,\n PositionsInstance,\n} from \"@kodiak-finance/orderly-ui-positions\";\nimport type { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport { AccountType } from \"../assets/assetsPage/assets.ui.desktop\";\n\nenum TabsType {\n positions = \"Positions\",\n positionHistory = \"Position history\",\n liquidation = \"Liquidation\",\n}\n\nexport const PositionsPage: React.FC<PositionsProps> = (props) => {\n const [tab, setTab] = useState(TabsType.positions);\n const { t } = useTranslation();\n const { state, isMainAccount } = useAccount();\n\n const subAccounts = state.subAccounts ?? [];\n\n const [selectedAccount, setAccount] = React.useState<string>(AccountType.ALL);\n\n const positionsRef = useRef<PositionsInstance>(null);\n const positionHistoryRef = useRef<PositionHistoryInstance>(null);\n\n const onAccountFilter = React.useCallback(\n (filter: { name: string; value: string }) => {\n const { name, value } = filter;\n if (name === \"account\") {\n setAccount(value);\n }\n },\n [],\n );\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\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\">{t(\"common.positions\")}</Text>\n <Button color=\"gray\" size=\"sm\" className=\"oui-bg-base-4\" disabled>\n Export to CSV\n </Button>\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\n value={tab}\n onValueChange={(e) => setTab(e as any)}\n classNames={{\n tabsList: \"!oui-border-none oui-pb-1\",\n tabsContent: \"oui-h-[calc(100%_-_28px)]\",\n trigger: \"oui-group\",\n }}\n className=\"oui-h-full\"\n >\n <TabPanel value={TabsType.positions} title={t(\"common.positions\")}>\n <Flex direction=\"column\" gap={3} width=\"100%\" height=\"100%\">\n {isMainAccount ? (\n <>\n <DataFilter\n onFilter={onAccountFilter}\n items={[\n {\n type: \"select\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n ]}\n />\n <CombinePositionsWidget\n ref={positionsRef}\n selectedAccount={selectedAccount}\n {...props}\n />\n </>\n ) : (\n <PositionsWidget\n ref={positionsRef}\n {...props}\n enableSortingStorage={false}\n />\n )}\n </Flex>\n </TabPanel>\n <TabPanel\n value={TabsType.positionHistory}\n title={t(\"positions.positionHistory\")}\n >\n <Flex direction=\"column\" gap={3} width=\"100%\" height=\"100%\">\n <PositionHistoryWidget\n ref={positionHistoryRef}\n {...props}\n enableSortingStorage={false}\n />\n </Flex>\n </TabPanel>\n <TabPanel value={TabsType.liquidation} title={<LiquidationTab />}>\n <LiquidationWidget />\n </TabPanel>\n </Tabs>\n </Box>\n </Flex>\n );\n};\n\nconst LiquidationTab: React.FC = () => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-space-x-1\">\n <span>{t(\"positions.liquidation\")}</span>\n <Tooltip\n className=\"oui-max-w-[275px] oui-bg-base-6\"\n content={\n <div>\n <div className=\"oui-text-pretty\">\n {t(\"positions.Liquidation.tooltip.liquidation\")}\n </div>\n <div>\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/perpetual-futures/liquidations\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"oui-text-primary\"\n >\n {t(\"positions.Liquidation.tooltip.viewMore\")}\n </a>\n </div>\n </div>\n }\n arrow={{\n className: \"oui-fill-base-6\",\n }}\n >\n <button className=\"oui-hidden group-data-[state=active]:oui-block\">\n <InfoCircleIcon />\n </button>\n </Tooltip>\n </div>\n );\n};\n","import { FC, SVGProps, useRef } from \"react\";\nimport React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Button,\n Divider,\n Flex,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n OrderListInstance,\n OrdersWidget,\n} from \"@kodiak-finance/orderly-ui-orders\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\n\nexport const OrdersPage: React.FC<{ sharePnLConfig?: SharePnLConfig }> = (\n props,\n) => {\n const { sharePnLConfig } = props;\n const { t } = useTranslation();\n\n const ordersRef = useRef<OrderListInstance>(null);\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\">{t(\"common.orders\")}</Text>\n <Tooltip content={t(\"orders.download.tooltip\")}>\n <Button color=\"gray\" size=\"sm\" className=\"oui-bg-base-4\" disabled>\n {t(\"common.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 = React.forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n (props, ref) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\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 },\n);\n","export { APIManagerWidget } from \"./apiManager.widget\";\nexport { APIManagerPage } from \"./apiManager.page\";\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 { useEffect, useState } from \"react\";\nimport {\n useAccount,\n useAccountInfo,\n useDebouncedCallback,\n useMutation,\n useLocalStorage,\n useOrderlyContext,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\n\nconst ORDERLY_ORDER_SOUND_ALERT_KEY = \"orderly_order_sound_alert\";\n\nexport type SettingScriptReturns = {\n maintenance_cancel_orders?: boolean;\n setMaintainConfig: (maintenance_cancel_order_flag: boolean) => void;\n isSetting: boolean;\n canTouch: boolean;\n soundAlert: boolean;\n setSoundAlert: (value: boolean) => void;\n hasOrderFilledMedia: 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 const { notification } = useOrderlyContext();\n\n const [soundAlert, setSoundAlert] = useLocalStorage<boolean>(\n ORDERLY_ORDER_SOUND_ALERT_KEY,\n notification?.orderFilled?.defaultOpen ?? false,\n );\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 soundAlert,\n setSoundAlert,\n hasOrderFilledMedia: Boolean(notification?.orderFilled?.media),\n };\n};\n","import { FC } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { SettingScriptReturns } from \"./setting.script\";\nimport { SettingDesktop } from \"./setting.ui.desktop\";\nimport { SettingMobile } from \"./setting.ui.mobile\";\n\nexport const Setting: FC<SettingScriptReturns> = (props) => {\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <div className=\"oui-px-3\">\n <SettingMobile {...props} />\n </div>\n );\n }\n return <SettingDesktop {...props} />;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Card, Flex, Switch, Text } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardTooltip } from \"@kodiak-finance/orderly-ui-connector\";\nimport type { SettingScriptReturns } from \"./setting.script\";\n\nexport const SettingDesktop: FC<SettingScriptReturns> = (props) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Card\n title={t(\"portfolio.setting.systemUpgrade\")}\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-border-t-2 oui-border-line-6 oui-font-semibold\"\n >\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-flex-1\">\n <Text intensity={80} size=\"base\">\n {t(\"portfolio.setting.cancelOpenOrders\")}\n </Text>\n <Text intensity={54} size=\"sm\">\n {t(\"portfolio.setting.cancelOpenOrders.description\")}\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 {props.hasOrderFilledMedia && (\n <Card\n title={t(\"portfolio.setting.soundAlerts\")}\n id=\"portfolio-sound-alert-setting\"\n className=\"oui-bg-base-9 oui-font-semibold oui-mt-3\"\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={4}\n className=\"oui-border-t-2 oui-border-line-6 oui-font-semibold\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n >\n <Text intensity={54} size=\"sm\">\n {t(\"portfolio.setting.soundAlerts.description\")}\n </Text>\n </Flex>\n\n <AuthGuardTooltip align=\"end\">\n <Switch\n checked={props.soundAlert}\n onCheckedChange={(checked) => props.setSoundAlert(checked)}\n disabled={!props.canTouch}\n data-testid=\"oui-testid-setting-sound-switch-btn\"\n />\n </AuthGuardTooltip>\n </Flex>\n </Card>\n )}\n </>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Card,\n Flex,\n Switch,\n Text,\n ChevronRightIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardTooltip } from \"@kodiak-finance/orderly-ui-connector\";\nimport { LanguageSwitcherWidget } from \"@kodiak-finance/orderly-ui-scaffold\";\nimport type { SettingScriptReturns } from \"./setting.script\";\n\nexport const SettingMobile: FC<SettingScriptReturns> = (props) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState<boolean>(false);\n const onLanguageChange = () => {\n setOpen(true);\n };\n\n return (\n <>\n <Flex mt={1} p={4} intensity={900} r=\"xl\" itemAlign=\"center\">\n <LanguageSwitcherWidget open={open} onOpenChange={setOpen} />\n <Flex\n className=\"oui-cursor-pointer\"\n itemAlign=\"center\"\n width=\"100%\"\n onClick={onLanguageChange}\n >\n <Text\n size=\"base\"\n weight=\"semibold\"\n intensity={80}\n className=\"oui-ml-2\"\n >\n {t(\"languageSwitcher.language\")}\n </Text>\n <ChevronRightIcon\n size={18}\n className=\"oui-ml-auto oui-text-base-contrast-36\"\n />\n </Flex>\n </Flex>\n\n <Card\n // @ts-ignore\n title={\n <div className=\"oui-text-sm\">\n {t(\"portfolio.setting.systemUpgrade\")}\n </div>\n }\n id=\"portfolio-apikey-manager\"\n className=\"oui-bg-base-9 oui-font-semibold oui-mt-2\"\n classNames={{ root: \"oui-p-4\", content: \"!oui-pt-3\" }}\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={3}\n className=\"oui-font-semibold oui-border-t-2 oui-border-line-6\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1 oui-gap-2\"\n >\n <Text intensity={80} size=\"xs\">\n {t(\"portfolio.setting.cancelOpenOrders\")}\n </Text>\n <Text intensity={36} size=\"2xs\" className=\"oui-font-normal\">\n {t(\"portfolio.setting.cancelOpenOrders.description\")}\n </Text>\n <AuthGuardTooltip>\n <Switch\n className=\"oui-mt-1\"\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 </Flex>\n </Card>\n\n {props.hasOrderFilledMedia && (\n <Card\n // @ts-ignore\n title={\n <div className=\"oui-text-sm\">\n {t(\"portfolio.setting.soundAlerts\")}\n </div>\n }\n id=\"portfolio-sound-alert-setting\"\n className=\"oui-bg-base-9 oui-font-semibold oui-mt-2\"\n classNames={{ root: \"oui-p-4\", content: \"!oui-pt-3\" }}\n >\n <Flex\n direction={\"row\"}\n gap={4}\n width={\"100%\"}\n itemAlign={\"center\"}\n pt={3}\n className=\"oui-font-semibold oui-border-t-2 oui-border-line-6\"\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1 oui-gap-2\"\n >\n <Text intensity={36} size=\"2xs\" className=\"oui-font-normal\">\n {t(\"portfolio.setting.soundAlerts.description\")}\n </Text>\n <AuthGuardTooltip>\n <Switch\n className=\"oui-mt-1\"\n checked={props.soundAlert}\n onCheckedChange={(e) => {\n props.setSoundAlert(e);\n }}\n disabled={!props.canTouch}\n data-testid=\"oui-testid-setting-sound-switch-btn\"\n />\n </AuthGuardTooltip>\n </Flex>\n </Flex>\n </Card>\n )}\n </>\n );\n};\n","import React from \"react\";\nimport { useSettingScript } from \"./setting.script\";\nimport { Setting } from \"./setting.ui\";\n\nexport const SettingWidget: React.FC = () => {\n const state = useSettingScript();\n return <Setting {...state} />;\n};\n","import React from \"react\";\nimport { SettingWidget } from \"./setting.widget\";\n\nexport const SettingPage: React.FC = () => {\n return <SettingWidget />;\n};\n","export { AssetsPage } from \"./page\";\nexport {\n AssetsWidget,\n AssetsDataTableWidget,\n} from \"./assetsPage/assets.widget\";\nexport type { AssetsWidgetProps } from \"./assetsPage/assets.widget\";\nexport { AssetsTable, AssetsDataTable } from \"./assetsPage/assets.ui.desktop\";\nexport { AssetsTableMobile } from \"./assetsPage/assets.ui.mobile\";\n","import React from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { DataTableClassNames, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useAssetsScript } from \"./assets.script\";\nimport type { useAssetsScriptReturn } from \"./assets.script\";\nimport { AssetsDataTable, AssetsTable } from \"./assets.ui.desktop\";\nimport { AssetsTableMobile } from \"./assets.ui.mobile\";\n\nexport type AssetsWidgetProps = useAssetsScriptReturn;\n\nexport type AssetsDataTableWidgetProps = {\n classNames?: {\n root?: string;\n desc?: string;\n scrollRoot?: string;\n };\n tbClassName?: string;\n dataTableClassNames?: DataTableClassNames;\n};\n\nexport const AssetsDataTableWidget: React.FC<AssetsDataTableWidgetProps> = (\n props,\n) => {\n const assetsState = useAssetsScript();\n const accountState = useAccount();\n return <AssetsDataTable {...assetsState} {...accountState} {...props} />;\n};\n\nexport const AssetsWidget: React.FC = () => {\n const assetsState = useAssetsScript();\n const accountState = useAccount();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <AssetsTableMobile {...assetsState} {...accountState} />;\n }\n return <AssetsTable {...assetsState} {...accountState} />;\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useLocalStorage,\n useIndexPricesStream,\n useAppStore,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { account } from \"@kodiak-finance/orderly-perp\";\nimport { useCanTrade, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum, EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport {\n DepositAndWithdrawWithDialogId,\n TransferDialogId,\n} from \"@kodiak-finance/orderly-ui-transfer\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\nimport { useAccountsData, useAssetsMultiFilter } from \"../../../hooks\";\nimport { useAssetTotalValue } from \"../../../hooks/useAssetTotalValue\";\nimport { ORDERLY_ASSETS_VISIBLE_KEY } from \"../type\";\nimport { useAssetsColumns } from \"./assets.column\";\n\nexport const useAssetsScript = () => {\n const [visible, setVisible] = useLocalStorage<boolean>(\n ORDERLY_ASSETS_VISIBLE_KEY,\n true,\n );\n\n const { state, subAccount, isMainAccount } = useAccount();\n const { holding = [] } = useCollateral();\n const { getIndexPrice } = useIndexPricesStream();\n\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n const subAccounts = state.subAccounts ?? [];\n\n useEffect(() => {\n if (holding.length > 0) {\n subAccount.refresh();\n }\n }, [holding]);\n\n // Use the extracted total value hook\n const totalValue = useAssetTotalValue();\n\n const toggleVisible = () => {\n // @ts-ignore\n setVisible((visible: boolean) => !visible);\n };\n\n const assetsOptions = useMemo(() => {\n return tokensInfo?.map((item) => ({\n label: item.token,\n value: item.token,\n }));\n }, [tokensInfo]);\n\n // Use the extracted accounts data hook\n const allAccounts = useAccountsData();\n\n // Use the extracted account and asset filter hook\n const {\n selectedAccount,\n selectedAsset,\n filteredData: filtered,\n onFilter,\n } = useAssetsMultiFilter(allAccounts);\n\n // Enhanced filtered data with additional calculations for children\n const enhancedFiltered = useMemo(() => {\n return filtered.map((accountData) => {\n // Enhance each child (holding) with calculated fields\n const enhancedChildren =\n accountData.children?.map((holding) => {\n const tokenInfo = tokensInfo?.find(\n (item) => item.token === holding.token,\n );\n\n // Use extracted function for index price calculation\n const indexPrice = getIndexPrice(holding.token);\n\n // Use extracted function for asset value calculation\n const assetValue = new Decimal(holding.holding)\n .mul(indexPrice)\n .toNumber();\n\n // Calculate collateral ratio for this token\n const collateralRatio = tokenInfo\n ? account.collateralRatio({\n baseWeight: tokenInfo.base_weight ?? 0,\n discountFactor: tokenInfo.discount_factor ?? 0,\n collateralQty: holding.holding,\n collateralCap: tokenInfo?.user_max_qty ?? holding.holding,\n indexPrice: indexPrice,\n })\n : zero;\n\n // Calculate collateral contribution for this token\n const collateralContribution = account.collateralContribution({\n collateralQty: holding.holding,\n collateralCap: tokenInfo?.user_max_qty ?? holding.holding,\n collateralRatio: collateralRatio.toNumber(),\n indexPrice: indexPrice,\n });\n\n return {\n ...holding,\n indexPrice,\n assetValue,\n collateralRatio,\n collateralContribution,\n };\n }) || [];\n\n return {\n ...accountData,\n children: enhancedChildren,\n };\n });\n }, [filtered, getIndexPrice, tokensInfo]);\n\n const handleTransfer = useCallback((accountId: string, token: string) => {\n if (!accountId) {\n return;\n }\n modal.show(TransferDialogId, {\n toAccountId: accountId,\n token,\n });\n }, []);\n\n const handleConvert = (accountId: string, token: string) => {\n modal.show(\"ConvertDialogId\", {\n accountId,\n token,\n });\n };\n\n const showTransfer = isMainAccount ? subAccounts.length > 0 : true;\n\n const assetsColumns = useAssetsColumns({\n onTransfer: showTransfer ? handleTransfer : undefined,\n onConvert: handleConvert,\n });\n\n const openDepositAndWithdraw = useCallback(\n (viewName: \"deposit\" | \"withdraw\") => {\n modal.show(DepositAndWithdrawWithDialogId, {\n activeTab: viewName,\n });\n },\n [],\n );\n\n const onDeposit = useCallback(() => {\n openDepositAndWithdraw(\"deposit\");\n }, []);\n\n const onWithdraw = useCallback(() => {\n openDepositAndWithdraw(\"withdraw\");\n }, []);\n\n // Use enhanced filtered data with calculated children\n const dataSource = useDataTap(enhancedFiltered, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n });\n\n const canTrade = useCanTrade();\n\n return {\n columns: assetsColumns,\n dataSource,\n visible: visible as boolean,\n onToggleVisibility: toggleVisible,\n selectedAccount,\n selectedAsset,\n onFilter,\n totalValue,\n hasSubAccount: subAccounts.length > 0,\n onDeposit,\n onWithdraw,\n holding,\n assetsOptions: assetsOptions ?? EMPTY_LIST,\n canTrade,\n };\n};\n\nexport type useAssetsScriptReturn = ReturnType<typeof useAssetsScript> &\n ReturnType<typeof useAccount>;\n","import React from \"react\";\nimport { useAppStore } from \"@kodiak-finance/orderly-hooks\";\nimport { useWalletConnector } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { Button, Flex, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport type { Column } from \"@kodiak-finance/orderly-ui\";\n\nexport interface ColumnsOptions {\n onTransfer?: (accountId: string, token: string) => void;\n onConvert?: (accountId: string, token: string) => void;\n}\n\n// Define the enhanced holding interface with calculated fields\ninterface EnhancedHolding {\n token: string;\n holding: number;\n indexPrice: number;\n assetValue: number;\n collateralRatio: number;\n collateralContribution: number;\n account_id: string;\n}\n\nexport const useAssetsColumns = (options: ColumnsOptions) => {\n const { t } = useTranslation();\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n const { namespace } = useWalletConnector();\n const { onTransfer, onConvert } = options;\n const columns = React.useMemo<Column[]>(() => {\n return [\n {\n title: t(\"portfolio.overview.column.token\"),\n dataIndex: \"token\",\n align: \"left\",\n width: 150,\n render(val: string) {\n return (\n <Flex itemAlign=\"center\" gap={2}>\n <TokenIcon name={val} />\n {val}\n </Flex>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.qty\"),\n dataIndex: \"holding\",\n align: \"left\",\n width: 140,\n render(val: number, record) {\n const findToken = tokensInfo?.find(\n ({ token }) => token === record.token,\n );\n return (\n <Text.numeral dp={findToken?.decimals ?? 6} padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.indexPrice\"),\n dataIndex: \"indexPrice\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.assetValue\"),\n dataIndex: \"assetValue\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.assetValue rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.assetValue>\n );\n },\n },\n {\n title: t(\"portfolio.overview.column.collateralRatio\"),\n dataIndex: \"collateralRatio\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.numeral dp={2} suffix=\"%\">\n {val * 100}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"transfer.deposit.collateralContribution\"),\n dataIndex: \"collateralContribution\",\n align: \"left\",\n width: 140,\n render(val: number) {\n return (\n <Text.collateral rule=\"price\" dp={6} currency=\"$\" padding={false}>\n {val}\n </Text.collateral>\n );\n },\n },\n {\n title: null,\n dataIndex: \"account_id\",\n align: \"center\",\n width: 180,\n render(id: string, record: EnhancedHolding) {\n const { token } = record;\n return (\n <Flex itemAlign=\"center\" justify=\"end\" gap={3}>\n {token !== \"USDC\" &&\n namespace !== ChainNamespace.solana &&\n typeof onConvert === \"function\" && (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onConvert?.(id, token)}\n >\n {t(\"transfer.convert\")}\n </Button>\n )}\n {typeof onTransfer === \"function\" && (\n <Button\n size={\"sm\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={() => onTransfer?.(id, token)}\n >\n {t(\"common.transfer\")}\n </Button>\n )}\n </Flex>\n );\n },\n },\n ];\n }, [t, tokensInfo, onTransfer, onConvert, namespace]);\n return columns;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { useWalletConnector } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n TokenIcon,\n Text,\n formatAddress,\n DataFilter,\n modal,\n Flex,\n EmptyDataState,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SelectOption } from \"@kodiak-finance/orderly-ui/src/select/withOptions\";\nimport type { useAssetsScriptReturn } from \"./assets.script\";\nimport { AccountType } from \"./assets.ui.desktop\";\n\nconst AccountTag: React.FC<{ name: string }> = ({ name }) => {\n return (\n <div className=\"oui-mt-2 oui-flex oui-h-[18px] oui-w-fit oui-items-center oui-rounded oui-bg-white/[0.06] oui-px-2 oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {name}\n </div>\n );\n};\n\ntype AssetMobileItemProps = {\n item: any;\n};\n\nconst AssetMobileItem: React.FC<AssetMobileItemProps> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const { namespace } = useWalletConnector();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <Flex\n width={\"100%\"}\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"oui-gap-x-0.5\"\n >\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.token\")}\n </div>\n <Flex\n gap={1}\n justify={\"start\"}\n itemAlign={\"center\"}\n className=\"oui-text-xs oui-font-semibold oui-text-base-contrast-80\"\n >\n <TokenIcon name={item.token} size=\"2xs\" />\n {item.token}\n </Flex>\n </Flex>\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.qty\")}\n </div>\n <Text.numeral\n className=\"oui-truncate\"\n size=\"xs\"\n dp={6}\n padding={false}\n >\n {item.holding}\n </Text.numeral>\n </Flex>\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-w-full oui-text-end oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"common.indexPrice\")}\n </div>\n <Flex\n gap={1}\n width={\"100%\"}\n justify={\"end\"}\n itemAlign={\"center\"}\n className=\"oui-text-end oui-font-semibold oui-text-base-contrast-80\"\n >\n <Text.numeral\n size=\"xs\"\n rule=\"price\"\n dp={6}\n currency=\"$\"\n padding={false}\n >\n {item.indexPrice}\n </Text.numeral>\n <div className=\"oui-text-end oui-text-2xs oui-text-base-contrast-36\">\n USDC\n </div>\n </Flex>\n </Flex>\n </Flex>\n <Flex\n width={\"100%\"}\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"oui-gap-x-0.5\"\n >\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"portfolio.overview.column.assetValue\")}\n </div>\n <Text.assetValue\n size=\"xs\"\n intensity={80}\n className=\"oui-truncate oui-font-semibold\"\n rule=\"price\"\n dp={6}\n currency=\"$\"\n padding={false}\n >\n {item.assetValue}\n </Text.assetValue>\n </Flex>\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"portfolio.overview.column.collateralRatio\")}\n </div>\n <Text.numeral size=\"xs\" dp={2} suffix=\"%\">\n {item.collateralRatio * 100}\n </Text.numeral>\n </Flex>\n <Flex\n className=\"oui-w-1/3 oui-truncate\"\n itemAlign={\"start\"}\n direction={\"column\"}\n >\n <div className=\"oui-w-full oui-text-end oui-text-2xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"transfer.deposit.collateralContribution\")}\n </div>\n <Flex\n gap={1}\n width={\"100%\"}\n justify={\"end\"}\n itemAlign={\"center\"}\n className=\"oui-text-end oui-font-semibold oui-text-base-contrast-80\"\n >\n <Text.collateral\n size=\"xs\"\n rule=\"price\"\n dp={6}\n currency=\"$\"\n padding={false}\n >\n {item.collateralContribution}\n </Text.collateral>\n <div className=\"oui-text-end oui-text-2xs oui-text-base-contrast-36\">\n USDC\n </div>\n </Flex>\n </Flex>\n </Flex>\n <Flex justify={\"between\"} itemAlign={\"center\"} gap={2}>\n {item.token !== \"USDC\" && namespace !== ChainNamespace.solana && (\n <Button\n fullWidth\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n onClick={() => {\n modal.show(\"ConvertSheetId\", {\n accountId: item.account_id,\n token: item.token,\n });\n }}\n className={cn(\n \"oui-flex-1 oui-border-white/[0.36] oui-text-base-contrast-54\",\n )}\n >\n {t(\"transfer.convert\")}\n </Button>\n )}\n <Button\n fullWidth\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n onClick={() => {\n modal.show(\"TransferSheetId\", {\n accountId: item.account_id,\n token: item.token,\n });\n }}\n className={cn(\n \"oui-flex-1 oui-border-white/[0.36] oui-text-base-contrast-54\",\n )}\n >\n {t(\"common.transfer\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nexport const AssetsTableMobile: React.FC<useAssetsScriptReturn> = (props) => {\n const { t } = useTranslation();\n\n const {\n assetsOptions,\n state,\n isMainAccount,\n dataSource,\n selectedAccount,\n selectedAsset,\n onFilter,\n } = props;\n\n const subAccounts = state.subAccounts ?? [];\n\n const ALL_ACCOUNTS: SelectOption = {\n label: t(\"common.allAccount\"),\n value: AccountType.ALL,\n };\n\n const MAIN_ACCOUNT: SelectOption = {\n label: t(\"common.mainAccount\"),\n value: AccountType.MAIN,\n };\n\n const ALL_ASSETS: SelectOption = {\n label: t(\"common.allAssets\"),\n value: \"all\",\n };\n\n const memoizedOptions = useMemo(() => {\n if (Array.isArray(subAccounts) && subAccounts.length) {\n return [\n ALL_ACCOUNTS,\n MAIN_ACCOUNT,\n ...subAccounts.map<SelectOption>((value) => ({\n value: value.id,\n label: value?.description || formatAddress(value?.id),\n })),\n ];\n }\n return [ALL_ACCOUNTS, MAIN_ACCOUNT];\n }, [subAccounts]);\n\n // Create asset options from holding data - optimized and consistent with desktop\n const memoizedAssets = useMemo(() => {\n return [ALL_ASSETS, ...assetsOptions];\n }, [assetsOptions]);\n\n if (!props.canTrade) {\n return (\n <Flex\n direction={\"column\"}\n height={\"100%\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n mt={10}\n >\n <EmptyDataState />\n </Flex>\n );\n }\n\n return (\n <div className={cn(\"oui-flex oui-flex-col oui-gap-1 oui-px-1 oui-pb-4\")}>\n {isMainAccount && (\n <DataFilter\n onFilter={onFilter}\n className=\"oui-border-none oui-py-2\"\n items={[\n {\n size: \"sm\",\n type: \"picker\",\n name: \"account\",\n value: selectedAccount,\n options: memoizedOptions,\n },\n {\n size: \"sm\",\n type: \"picker\",\n name: \"asset\",\n value: selectedAsset,\n options: memoizedAssets,\n },\n ]}\n />\n )}\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n {dataSource?.map((assets, index) => {\n return (\n <React.Fragment key={`item-${index}`}>\n <AccountTag name={assets.description ?? \"sub account\"} />\n {Array.isArray(assets.children) &&\n assets.children.map((child) => (\n <AssetMobileItem\n item={child}\n key={`${child.token}-${child.account_id}`}\n />\n ))}\n </React.Fragment>\n );\n })}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { AssetsWidget } from \"./assetsPage/assets.widget\";\nimport type { AssetsWidgetProps } from \"./assetsPage/assets.widget\";\n\nexport type AssetsPageProps = AssetsWidgetProps;\n\nexport const AssetsPage: React.FC = () => {\n return <AssetsWidget />;\n};\n","export { HistoryPage } from \"./history.page\";\nexport { HistoryWidget } from \"./history.page\";\n","import React from \"react\";\nimport { HistoryDataGroupWidget } from \"../overview/historyDataGroup\";\n\nexport const HistoryWidget: React.FC = () => {\n return <HistoryDataGroupWidget />;\n};\n\nexport const HistoryPage: React.FC = () => {\n return <HistoryDataGroupWidget />;\n};\n","export { SymbolPerformancePage } from \"./page\";\nexport { SymbolPerformanceWidget } from \"./symbolPerformance.widget\";\nexport { SymbolPerformanceUI } from \"./symbolPerformance.ui\";\nexport { useSymbolPerformanceScript } from \"./symbolPerformance.script\";\nexport type {\n UseSymbolPerformanceScriptReturn,\n Timeframe,\n} from \"./symbolPerformance.script\";\n","import React from \"react\";\nimport { Box } from \"@kodiak-finance/orderly-ui\";\nimport { SymbolPerformanceWidget } from \"./symbolPerformance.widget\";\n\nexport const SymbolPerformancePage: React.FC = () => {\n return (\n <Box\n p={6}\n pb={0}\n intensity={900}\n r=\"xl\"\n width=\"100%\"\n style={{\n minHeight: 379,\n maxHeight: 2560,\n overflow: \"auto\",\n }}\n >\n <SymbolPerformanceWidget />\n </Box>\n );\n};\n","import React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useSymbolPerformanceScript } from \"./symbolPerformance.script\";\nimport { SymbolPerformanceUI } from \"./symbolPerformance.ui\";\nimport { SymbolPerformanceUIMobile } from \"./symbolPerformance.ui.mobile\";\n\nexport const SymbolPerformanceWidget: React.FC<{ symbol?: string }> = ({\n symbol,\n}) => {\n const { isMobile } = useScreen();\n const state = useSymbolPerformanceScript(symbol);\n\n if (isMobile) {\n return <SymbolPerformanceUIMobile {...state} />;\n }\n\n return <SymbolPerformanceUI {...state} />;\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, subDays, format } from \"date-fns\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useSymbolPerformanceData } from \"./useSymbolPerformanceData\";\nimport { useTrades } from \"./useTrades\";\n\nexport enum PeriodType {\n DAY = \"1D\",\n WEEK = \"7D\",\n MONTH = \"30D\",\n QUARTER = \"90D\",\n}\n\nexport enum AggregationWindow {\n FIFTEEN_MIN = \"15m\",\n HOURLY = \"1h\",\n DAILY = \"1d\",\n}\n\nexport type Timeframe = \"1D\" | \"7D\" | \"30D\" | \"90D\" | \"ALL\";\n\n/**\n * Number of days in each preset period.\n * DAY = 2 means \"today and yesterday\" (inclusive range)\n */\nconst PRESET_DAYS = {\n [PeriodType.DAY]: 2,\n [PeriodType.WEEK]: 7,\n [PeriodType.MONTH]: 30,\n [PeriodType.QUARTER]: 90,\n} as const;\n\nconst getDateRange = (period: PeriodType | number, today: Date) => {\n const offsetDay = typeof period === \"number\" ? period : PRESET_DAYS[period];\n return {\n from: subDays(today, offsetDay - 1),\n to: today,\n };\n};\n\nconst formatDateRange = (date?: Date) => {\n if (typeof date === \"undefined\") return undefined;\n return format(date, \"yyyy-MM-dd\");\n};\n\nconst getUtcStartOfDay = (date: Date): Date => {\n return new Date(\n Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()),\n );\n};\n\nconst getUtcEndOfDay = (date: Date): Date => {\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n 23,\n 59,\n 59,\n 999,\n ),\n );\n};\n\nexport const useSymbolPerformanceScript = (symbol?: string) => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n const [selectedSymbol, setSelectedSymbol] = useState<string>(\n symbol || \"ALL_SYMBOLS\",\n );\n const [aggregationWindow, setAggregationWindow] = useState<AggregationWindow>(\n AggregationWindow.DAILY,\n );\n const [isNetPnL, setIsNetPnL] = useState(false); // Toggle: Net P&L (fees deducted) vs Gross P&L (default)\n const [today] = useState(() => new Date());\n const [period, setPeriod] = useState<PeriodType | null>(PeriodType.WEEK);\n\n const [dateRange, setDateRange] = useState<{ from: Date; to: Date }>(() => {\n const range = getDateRange(PeriodType.WEEK, today);\n return {\n from: range.from,\n to: range.to,\n };\n });\n\n const onPeriodChange = (value: PeriodType) => {\n const newRange = getDateRange(value, today);\n setPeriod(value);\n setDateRange({\n from: newRange.from,\n to: newRange.to,\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = filter.value;\n\n setDateRange(newDateRange);\n\n if (newDateRange.from && newDateRange.to) {\n const offsetDay =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n\n const range = getDateRange(offsetDay, today);\n\n if (\n formatDateRange(range.from) === formatDateRange(newDateRange.from) &&\n formatDateRange(range.to) === formatDateRange(newDateRange.to)\n ) {\n setPeriod(\n (Object.keys(PRESET_DAYS) as PeriodType[]).find(\n (key) => PRESET_DAYS[key] === offsetDay,\n ) || null,\n );\n } else {\n setPeriod(null);\n }\n }\n }\n };\n\n const startDate = dateRange.from;\n const endDate = dateRange.to;\n\n const startDateForAPI = useMemo(() => {\n if (!startDate) return startDate;\n return getUtcStartOfDay(startDate);\n }, [startDate]);\n\n // Query full UTC day for the selected local end date.\n const endDateForAPI = useMemo(() => {\n if (!endDate) return endDate;\n return getUtcEndOfDay(endDate);\n }, [endDate]);\n\n const filterItems = useMemo(() => {\n return [\n {\n type: \"range\" as const,\n name: \"dateRange\",\n value: dateRange,\n max: 90,\n },\n ];\n }, [dateRange]);\n\n const { trades, isLoading, error } = useTrades({\n symbol: selectedSymbol === \"ALL_SYMBOLS\" ? undefined : selectedSymbol,\n start_t: startDateForAPI ? startDateForAPI.getTime() : undefined,\n end_t: endDateForAPI ? endDateForAPI.getTime() : undefined,\n });\n\n // Always calculate actual performance with fees (for stats)\n // The includeFees toggle only affects chart visualization, not stats\n // Use endDateForAPI to ensure all fetched trades are included in aggregation\n const performanceData = useSymbolPerformanceData(\n trades,\n startDateForAPI,\n endDateForAPI,\n true,\n );\n\n const invisible =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n const periodTypes = Object.values(PeriodType);\n const aggregationWindowTypes = Object.values(AggregationWindow);\n\n const getAggregatedData = () => {\n if (!performanceData) return null;\n\n let result;\n switch (aggregationWindow) {\n case AggregationWindow.FIFTEEN_MIN:\n result = {\n periodData: performanceData.fifteenMinuteData,\n cumulativePnL: performanceData.cumulativeFifteenMinutePnL,\n cumulativeFees: performanceData.cumulativeFifteenMinuteFees,\n cumulativeVolume: performanceData.cumulativeFifteenMinuteVolume,\n };\n break;\n case AggregationWindow.HOURLY:\n result = {\n periodData: performanceData.hourlyData,\n cumulativePnL: performanceData.cumulativeHourlyPnL,\n cumulativeFees: performanceData.cumulativeHourlyFees,\n cumulativeVolume: performanceData.cumulativeHourlyVolume,\n };\n break;\n case AggregationWindow.DAILY:\n default:\n result = {\n periodData: performanceData.dailyData,\n cumulativePnL: performanceData.cumulativeDailyPnL,\n cumulativeFees: performanceData.cumulativeDailyFees,\n cumulativeVolume: performanceData.cumulativeDailyVolume,\n };\n }\n\n return result;\n };\n\n return {\n selectedSymbol,\n setSelectedSymbol,\n period,\n onPeriodChange,\n periodTypes,\n aggregationWindow,\n setAggregationWindow,\n aggregationWindowTypes,\n isNetPnL,\n setIsNetPnL,\n dateRange,\n filterItems,\n onFilter,\n trades,\n isLoading,\n error,\n performanceData,\n aggregatedData: getAggregatedData(),\n invisible,\n };\n};\n\nexport type UseSymbolPerformanceScriptReturn = ReturnType<\n typeof useSymbolPerformanceScript\n>;\n","import { useMemo } from \"react\";\nimport { addDays } from \"date-fns\";\nimport type { TradeData } from \"./useTrades\";\n\nexport interface SymbolPerformanceMetrics {\n totalPnL: number;\n grossPnL: number;\n totalVolume: number;\n totalFees: number;\n totalTrades: number;\n makerShare: number;\n // daily data\n dailyData: Array<{ date: string; pnl: number; volume: number; fees: number }>;\n cumulativeDailyPnL: Array<{ date: string; cumulativePnl: number }>;\n cumulativeDailyFees: Array<{ date: string; cumulativeFees: number }>;\n cumulativeDailyVolume: Array<{ date: string; cumulativeVolume: number }>;\n // hourly data\n hourlyData: Array<{\n date: string;\n pnl: number;\n fees: number;\n volume: number;\n }>;\n cumulativeHourlyPnL: Array<{ date: string; cumulativePnl: number }>;\n cumulativeHourlyFees: Array<{ date: string; cumulativeFees: number }>;\n cumulativeHourlyVolume: Array<{ date: string; cumulativeVolume: number }>;\n // 15-minute data\n fifteenMinuteData: Array<{\n date: string;\n pnl: number;\n fees: number;\n volume: number;\n }>;\n cumulativeFifteenMinutePnL: Array<{ date: string; cumulativePnl: number }>;\n cumulativeFifteenMinuteFees: Array<{ date: string; cumulativeFees: number }>;\n cumulativeFifteenMinuteVolume: Array<{\n date: string;\n cumulativeVolume: number;\n }>;\n}\n\n/**\n * Generic function to fill gaps in aggregated time-series data.\n * Ensures complete coverage of the date range with zero values for missing periods.\n *\n * @param dataMap - Map of aggregated data keyed by ISO datetime string\n * @param startDate - Start of the period\n * @param endDate - End of the period\n * @param incrementFn - Function to increment the current date\n * @param getKeyFn - Function to extract the key from current date\n * @returns Array of filled data points\n */\nconst fillTimeSeriesGaps = (\n dataMap: Map<string, { pnl: number; volume: number; fees: number }>,\n startDate: Date,\n endDate: Date,\n incrementFn: (date: Date) => void,\n getKeyFn: (date: Date) => string,\n) => {\n const filledData: Array<{\n date: string;\n pnl: number;\n volume: number;\n fees: number;\n }> = [];\n\n const current = new Date(startDate);\n current.setUTCHours(0, 0, 0, 0);\n\n while (current <= endDate) {\n const key = getKeyFn(current);\n const data = dataMap.get(key) || {\n pnl: 0,\n volume: 0,\n fees: 0,\n };\n filledData.push({ date: key, ...data });\n incrementFn(current);\n }\n\n return filledData;\n};\n\n// Helper function to fill daily gaps\nconst fillDailyGaps = (\n dailyMap: Map<string, { pnl: number; volume: number; fees: number }>,\n startDate: Date,\n endDate: Date,\n) => {\n return fillTimeSeriesGaps(\n dailyMap,\n startDate,\n endDate,\n (date) => date.setUTCDate(date.getUTCDate() + 1),\n (date) => date.toISOString().split(\"T\")[0],\n );\n};\n\n// Helper function to fill hourly gaps\nconst fillHourlyGaps = (\n hourlyMap: Map<string, { pnl: number; volume: number; fees: number }>,\n startDate: Date,\n endDate: Date,\n) => {\n return fillTimeSeriesGaps(\n hourlyMap,\n startDate,\n endDate,\n (date) => date.setUTCHours(date.getUTCHours() + 1),\n (date) => date.toISOString(),\n );\n};\n\n// Helper function to fill 15-minute gaps\nconst fillFifteenMinuteGaps = (\n fifteenMinMap: Map<string, { pnl: number; volume: number; fees: number }>,\n startDate: Date,\n endDate: Date,\n) => {\n return fillTimeSeriesGaps(\n fifteenMinMap,\n startDate,\n endDate,\n (date) => date.setUTCMinutes(date.getUTCMinutes() + 15),\n (date) => date.toISOString(),\n );\n};\n\nexport const useSymbolPerformanceData = (\n tradesData: TradeData[] | null,\n periodStartDate?: Date,\n periodEndDate?: Date,\n includeFees: boolean = true,\n): SymbolPerformanceMetrics | null => {\n return useMemo(() => {\n if (!tradesData || tradesData.length === 0) {\n return null;\n }\n\n // Process trades - each trade already has realized_pnl (which is net, after fees)\n const tradesWithPnL = tradesData.map((trade) => {\n const volume = Math.abs(trade.executed_quantity * trade.executed_price);\n const fees = trade.fee || 0;\n // If includeFees is true: show net PnL (realized_pnl, which already has fees deducted)\n // If includeFees is false: show gross PnL (add fees back to realized_pnl)\n const pnl = includeFees\n ? trade.realized_pnl || 0\n : (trade.realized_pnl || 0) + fees;\n\n return {\n ...trade,\n pnl,\n volume,\n fees,\n date: new Date(trade.executed_timestamp),\n };\n });\n\n // Calculate metrics\n const totalPnL = tradesWithPnL.reduce((sum, trade) => sum + trade.pnl, 0);\n const totalVolume = tradesWithPnL.reduce(\n (sum, trade) => sum + trade.volume,\n 0,\n );\n const totalFees = tradesWithPnL.reduce((sum, trade) => sum + trade.fees, 0);\n const totalTrades = tradesWithPnL.length;\n const grossPnL = totalPnL + totalFees;\n\n // Use provided period dates or fall back to trade dates\n const sortedByDate = [...tradesWithPnL].sort(\n (a, b) => a.date.getTime() - b.date.getTime(),\n );\n const startDate = periodStartDate || sortedByDate[0].date;\n const endDate = periodEndDate || sortedByDate[sortedByDate.length - 1].date;\n\n // Calculate maker volume share\n const makerVolume = tradesData\n .filter((trade) => trade.is_maker === 1)\n .reduce(\n (sum, trade) =>\n sum + Math.abs(trade.executed_quantity * trade.executed_price),\n 0,\n );\n const makerShare = totalVolume > 0 ? (makerVolume / totalVolume) * 100 : 0;\n\n // Group by day for daily PnL, Volume, and Fees\n const dailyPnLMap = new Map<\n string,\n { pnl: number; volume: number; fees: number }\n >();\n tradesWithPnL.forEach((trade) => {\n const dateKey = trade.date.toISOString().split(\"T\")[0];\n const existing = dailyPnLMap.get(dateKey) || {\n pnl: 0,\n volume: 0,\n fees: 0,\n };\n dailyPnLMap.set(dateKey, {\n pnl: existing.pnl + trade.pnl,\n volume: existing.volume + trade.volume,\n fees: existing.fees + trade.fees,\n });\n });\n\n // Fill gaps in daily data\n const dailyData = fillDailyGaps(dailyPnLMap, startDate, endDate);\n\n // Group by hour for hourly PnL and Fees\n const hourlyDataMap = new Map<\n string,\n { pnl: number; fees: number; volume: number }\n >();\n tradesWithPnL.forEach((trade) => {\n // Format: YYYY-MM-DDTHH:00:00.000Z\n // setMinutes(0, 0, 0) normalizes minutes, seconds, and milliseconds to 0\n // This ensures all trades within the same hour share the same key regardless of seconds/milliseconds\n const date = new Date(trade.date);\n date.setUTCMinutes(0, 0, 0);\n const hourKey = date.toISOString();\n const existing = hourlyDataMap.get(hourKey) || {\n pnl: 0,\n fees: 0,\n volume: 0,\n };\n hourlyDataMap.set(hourKey, {\n pnl: existing.pnl + trade.pnl,\n fees: existing.fees + trade.fees,\n volume: existing.volume + trade.volume,\n });\n });\n\n // Check if this is a single-day selection\n const isSingleDay = startDate.getTime() === endDate.getTime();\n\n // Calculate the next calendar day start time (00:00 UTC of the next day)\n const nextDayDate = addDays(startDate, 1);\n const nextDayStartTime = new Date(\n nextDayDate.getUTCFullYear(),\n nextDayDate.getUTCMonth(),\n nextDayDate.getUTCDate(),\n 0,\n 0,\n 0,\n 0,\n ).getTime();\n\n // For single-day: create buckets that span the full calendar day\n // For multi-day: use the provided date range as-is\n const bucketEndDate = isSingleDay ? addDays(startDate, 1) : endDate;\n\n // Fill gaps in hourly data\n let hourlyData = fillHourlyGaps(hourlyDataMap, startDate, bucketEndDate);\n // For single-day selections only, remove any entries from the next day\n if (isSingleDay) {\n hourlyData = hourlyData.filter(\n (item) => new Date(item.date).getTime() < nextDayStartTime,\n );\n }\n\n // Group by 15 minutes for 15-minute PnL, Fees, and Volume\n const fifteenMinuteDataMap = new Map<\n string,\n { pnl: number; fees: number; volume: number }\n >();\n tradesWithPnL.forEach((trade) => {\n const date = new Date(trade.date);\n // Round down to the nearest 15-minute interval (0, 15, 30, 45)\n const minutes = date.getUTCMinutes();\n const roundedMinutes = Math.floor(minutes / 15) * 15;\n // setMinutes(roundedMinutes, 0, 0) normalizes seconds and milliseconds to 0\n // This ensures all trades within the same 15-minute window share the same key regardless of seconds/milliseconds\n date.setUTCMinutes(roundedMinutes, 0, 0);\n const fifteenMinKey = date.toISOString();\n const existing = fifteenMinuteDataMap.get(fifteenMinKey) || {\n pnl: 0,\n fees: 0,\n volume: 0,\n };\n fifteenMinuteDataMap.set(fifteenMinKey, {\n pnl: existing.pnl + trade.pnl,\n fees: existing.fees + trade.fees,\n volume: existing.volume + trade.volume,\n });\n });\n\n // Fill gaps in 15-minute data\n let fifteenMinuteData = fillFifteenMinuteGaps(\n fifteenMinuteDataMap,\n startDate,\n bucketEndDate,\n );\n // For single-day selections only, remove any entries from the next day\n if (isSingleDay) {\n fifteenMinuteData = fifteenMinuteData.filter(\n (item) => new Date(item.date).getTime() < nextDayStartTime,\n );\n }\n\n // Calculate cumulative PnL\n let _pnl = 0;\n const cumulativeDailyPnL = dailyData.map((day) => {\n _pnl += day.pnl;\n return {\n date: day.date,\n cumulativePnl: _pnl,\n };\n });\n\n let _fees = 0;\n const cumulativeDailyFees = dailyData.map((day) => {\n _fees += day.fees;\n return {\n date: day.date,\n cumulativeFees: _fees,\n };\n });\n let _volume = 0;\n const cumulativeDailyVolume = dailyData.map((day) => {\n _volume += day.volume;\n return {\n date: day.date,\n cumulativeVolume: _volume,\n };\n });\n _pnl = 0;\n const cumulativeHourlyPnL = hourlyData.map((hour) => {\n _pnl += hour.pnl;\n return {\n date: hour.date,\n cumulativePnl: _pnl,\n };\n });\n _fees = 0;\n const cumulativeHourlyFees = hourlyData.map((hour) => {\n _fees += hour.fees;\n return {\n date: hour.date,\n cumulativeFees: _fees,\n };\n });\n _volume = 0;\n const cumulativeHourlyVolume = hourlyData.map((hour) => {\n _volume += hour.volume;\n return {\n date: hour.date,\n cumulativeVolume: _volume,\n };\n });\n\n // Calculate cumulative 15-minute data\n _pnl = 0;\n const cumulativeFifteenMinutePnL = fifteenMinuteData.map((fifteenMin) => {\n _pnl += fifteenMin.pnl;\n return {\n date: fifteenMin.date,\n cumulativePnl: _pnl,\n };\n });\n\n _fees = 0;\n const cumulativeFifteenMinuteFees = fifteenMinuteData.map((fifteenMin) => {\n _fees += fifteenMin.fees;\n return {\n date: fifteenMin.date,\n cumulativeFees: _fees,\n };\n });\n\n _volume = 0;\n const cumulativeFifteenMinuteVolume = fifteenMinuteData.map(\n (fifteenMin) => {\n _volume += fifteenMin.volume;\n return {\n date: fifteenMin.date,\n cumulativeVolume: _volume,\n };\n },\n );\n\n return {\n totalPnL,\n grossPnL,\n totalVolume,\n totalFees,\n totalTrades,\n makerShare,\n\n // daily data\n dailyData,\n cumulativeDailyPnL,\n cumulativeDailyFees,\n cumulativeDailyVolume,\n\n // hourly data\n hourlyData,\n cumulativeHourlyPnL,\n cumulativeHourlyFees,\n cumulativeHourlyVolume,\n\n // 15-minute data\n fifteenMinuteData,\n cumulativeFifteenMinutePnL,\n cumulativeFifteenMinuteFees,\n cumulativeFifteenMinuteVolume,\n };\n }, [tradesData, periodStartDate, periodEndDate, includeFees]);\n};\n","import { useMemo, useEffect, useRef } from \"react\";\nimport { usePrivateInfiniteQuery } from \"@kodiak-finance/orderly-hooks\";\n\nexport interface TradeData {\n id: number;\n symbol: string;\n fee: number;\n fee_asset: string;\n side: \"BUY\" | \"SELL\";\n order_id: number;\n executed_price: number;\n executed_quantity: number;\n executed_timestamp: number;\n is_maker: number;\n realized_pnl: number;\n match_id: string;\n}\n\nexport interface TradesResponse {\n rows: TradeData[];\n meta: {\n total: number;\n records_per_page: number;\n current_page: number;\n };\n}\n\nexport const useTrades = (params: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n size?: number;\n}) => {\n const { symbol, start_t, end_t, size = 500 } = params;\n\n const getKey = useMemo(() => {\n return (pageIndex: number, previousPageData: any): string | null => {\n if (previousPageData) {\n // Use meta.total from API to determine if there's more data to fetch\n const total = previousPageData.meta?.total ?? 0;\n const alreadyFetched = pageIndex * size;\n\n // Stop if we've already fetched all available trades according to the API\n if (alreadyFetched >= total) {\n return null;\n }\n\n // Fallback: stop if current page has fewer items than requested\n if (previousPageData.rows.length < size) {\n return null;\n }\n }\n\n const search = new URLSearchParams();\n search.set(\"size\", size.toString());\n search.set(\"page\", `${pageIndex + 1}`);\n if (symbol) {\n search.set(\"symbol\", symbol);\n }\n if (start_t) {\n search.set(\"start_t\", start_t.toString());\n }\n if (end_t) {\n search.set(\"end_t\", end_t.toString());\n }\n const url = `/v1/trades?${search.toString()}`;\n return url;\n };\n }, [symbol, start_t, end_t, size]);\n\n const result = usePrivateInfiniteQuery<TradesResponse>(getKey, {\n formatter: (data) => data,\n revalidateOnFocus: true,\n keepPreviousData: true,\n });\n\n const timeoutRef = useRef<NodeJS.Timeout>();\n\n // Auto-fetch all pages with rate limiting (10 requests per 1 second = 100ms minimum between requests)\n useEffect(() => {\n if (!result.data) return;\n\n const lastPage = result.data[result.data.length - 1];\n\n // Check if there's more data to fetch (when last page has full size)\n if (lastPage && lastPage.rows.length === size) {\n // Capture next page size before scheduling to avoid stale closure\n const nextPageSize = result.data.length + 1;\n\n // Schedule next fetch with 100ms delay to respect rate limit\n timeoutRef.current = setTimeout(() => {\n result.setSize(nextPageSize);\n }, 100);\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [result.data, size]);\n\n // Clear pending pagination fetch when filters change to prevent mixed data states\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [symbol, start_t, end_t]);\n\n // Flatten all trades from paginated response\n const trades = useMemo(() => {\n if (!result.data) return [];\n return result.data\n .map((page) => page.rows)\n .flat()\n .filter((trade): trade is TradeData => trade !== undefined);\n }, [result.data]);\n\n return {\n trades,\n isLoading: result.isLoading,\n error: result.error,\n mutate: result.mutate,\n };\n};\n","import React, { useMemo, useState } from \"react\";\nimport { endOfDay } from \"date-fns\";\nimport {\n CombinedPnLChart,\n CombinedVolumeChart,\n CombinedFeesChart,\n CombinedPriceChart,\n AssetAreaChart,\n} from \"@kodiak-finance/orderly-chart\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Card,\n Grid,\n Box,\n Statistic,\n Text,\n Divider,\n Flex,\n Select,\n Switch,\n cn,\n DataTable,\n type Column,\n} from \"@kodiak-finance/orderly-ui\";\nimport { formatDateForChart, getAggregationLabel } from \"./dateUtils\";\nimport { PnLRankingChart } from \"./pnlRankingChart\";\nimport type { UseSymbolPerformanceScriptReturn } from \"./symbolPerformance.script\";\nimport { AggregationWindow } from \"./symbolPerformance.script\";\nimport { SymbolSelector } from \"./symbolSelector\";\nimport { useKlineData } from \"./useKlineData\";\nimport type { TradeData } from \"./useTrades\";\n\nconst LazyPeriodTitle = React.lazy(() =>\n import(\"../overview/shared/periodHeader\").then((mod) => {\n return { default: mod.PeriodTitle };\n }),\n);\n\nexport type SymbolPerformanceUIProps = UseSymbolPerformanceScriptReturn;\n\nconst MakerTakerShare: React.FC<{ makerShare: number }> = ({ makerShare }) => {\n const takerShare = 100 - makerShare;\n return (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-gap-4\">\n <Text weight=\"semibold\">{makerShare.toFixed(1)}%</Text>\n <span className=\"oui-text-base-contrast-54\">/</span>\n <Text weight=\"semibold\">{takerShare.toFixed(1)}%</Text>\n </div>\n );\n};\n\nenum ViewType {\n chart = \"chart\",\n table = \"table\",\n}\n\ntype PerformanceTableRow = {\n date: string;\n pnl: number;\n volume: number;\n fees: number;\n};\n\nexport const SymbolPerformanceUI: React.FC<SymbolPerformanceUIProps> = (\n props,\n) => {\n const {\n selectedSymbol,\n setSelectedSymbol,\n period,\n onPeriodChange,\n periodTypes,\n performanceData,\n filterItems,\n onFilter,\n aggregationWindow,\n setAggregationWindow,\n aggregationWindowTypes,\n aggregatedData,\n trades,\n dateRange,\n isNetPnL,\n setIsNetPnL,\n } = props;\n const { t } = useTranslation();\n const symbolsInfo = useSymbolsInfo();\n const [viewType, setViewType] = useState<ViewType>(ViewType.chart);\n const [showCumulativePnL, setShowCumulativePnL] = useState(true);\n const [showCumulativeVolume, setShowCumulativeVolume] = useState(false);\n const [showCumulativeFees, setShowCumulativeFees] = useState(false);\n\n // Trim all data based on first and last non-zero volume to keep all charts aligned\n // This removes leading empty buckets and trailing empty buckets\n const getTrimmedDataRange = (data: any[]) => {\n if (!data || data.length === 0) return { start: 0, end: 0 };\n\n // Find first non-zero volume\n const startIndex = data.findIndex(\n (item) => item.volume && item.volume !== 0,\n );\n\n // Find last non-zero volume\n const endIndex = data.reduce(\n (lastIdx, item, idx) =>\n item.volume && item.volume !== 0 ? idx : lastIdx,\n -1,\n );\n\n return {\n start: startIndex === -1 ? 0 : startIndex,\n end: endIndex === -1 ? data.length : endIndex + 1,\n };\n };\n\n // Get available symbols\n const availableSymbols = useMemo(() => {\n const symbols = Object.keys(symbolsInfo);\n return [\n { value: \"ALL_SYMBOLS\", label: \"All Symbols\" },\n ...symbols.map((symbol) => ({\n value: symbol,\n label: symbol.replace(\"PERP_\", \"\").replace(\"_USDC\", \"\"),\n })),\n ];\n }, [symbolsInfo]);\n\n // Transform period PnL data for CombinedPnLChart (combines bars + cumulative line)\n // aggregatedData.periodData contains NET PnL (after fees)\n // Toggle allows viewing GROSS PnL (before fees) by adding fees back\n const combinedPnLData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(start, end);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n // Net PnL = actual result (with fees deducted)\n // Gross PnL = add fees back to show hypothetical without fees\n pnl: isNetPnL ? item.pnl : item.pnl + item.fees,\n }));\n }, [aggregatedData, aggregationWindow, isNetPnL]);\n\n // Transform period volume data for CombinedVolumeChart (combines bars + cumulative line)\n const combinedVolumeData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(start, end);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n volume: item.volume ?? 0,\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Transform period fees data for CombinedFeesChart (combines bars + cumulative line)\n // Fees are shown as negative since they're a cost\n const combinedFeesData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(start, end);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n fees: -(item.fees ?? 0),\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Map aggregation window to K-line resolution\n const klineResolution = useMemo(() => {\n switch (aggregationWindow) {\n case \"15m\":\n return \"15m\" as const;\n case \"1h\":\n return \"1h\" as const;\n case \"1d\":\n return \"1d\" as const;\n default:\n return \"1d\" as const;\n }\n }, [aggregationWindow]);\n\n // Fetch K-line data (only if a specific symbol is selected, not \"ALL_SYMBOLS\")\n const isAllSymbols = selectedSymbol === \"ALL_SYMBOLS\";\n const klineEndDate = useMemo(() => {\n if (!dateRange?.to) return undefined;\n // Use endOfDay to capture klines through the full day, not just to midnight\n return endOfDay(dateRange.to);\n }, [dateRange?.to]);\n\n const { klines } = useKlineData({\n symbol: !isAllSymbols && selectedSymbol ? selectedSymbol : undefined,\n resolution: klineResolution,\n from: dateRange ? Math.floor(dateRange.from.getTime() / 1000) : undefined,\n to: klineEndDate ? Math.floor(klineEndDate.getTime() / 1000) : undefined,\n });\n\n // Combine price data - align with trading data range, fill gaps with null\n // This ensures price chart covers the full date range of PnL/Volume/Fees charts\n // Missing price data (due to 1k kline API limit) shows as null, maintaining tooltip sync\n const combinedPriceData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) {\n return [];\n }\n\n // Apply same trim range as volume/fees/pnl to align x-axis\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedTradingData = aggregatedData.periodData.slice(start, end);\n\n if (trimmedTradingData.length === 0 || klines.length === 0) {\n return [];\n }\n\n // Create a map of kline data by formatted date for O(1) lookup\n const klineMap = new Map<string, (typeof klines)[0]>();\n klines.forEach((k) => {\n const date = new Date(k.timestamp * 1000);\n const formattedDate = formatDateForChart(\n date.toISOString(),\n aggregationWindow,\n );\n klineMap.set(formattedDate, k);\n });\n\n // Create price data for all trading data buckets, using null where kline data is missing\n const result = trimmedTradingData.map((tradingItem) => {\n const formattedDate = formatDateForChart(\n tradingItem.date,\n aggregationWindow,\n );\n const kline = klineMap.get(formattedDate);\n\n return {\n date: formattedDate,\n open: kline?.open ?? null,\n high: kline?.high ?? null,\n low: kline?.low ?? null,\n close: kline?.close ?? null,\n };\n });\n\n return result;\n }, [klines, aggregatedData, aggregationWindow]);\n\n // Transform data for table view\n const tableData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const { start, end } = getTrimmedDataRange(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(start, end);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n pnl: item.pnl,\n volume: item.volume ?? 0,\n fees: item.fees ?? 0,\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Define table columns\n const tableColumns: Column<PerformanceTableRow>[] = useMemo(\n () => [\n {\n title: t(\"common.date\"),\n dataIndex: \"date\",\n width: 120,\n align: \"left\",\n },\n {\n title: t(\"portfolio.symbolPerformance.realizedPnL\"),\n dataIndex: \"pnl\",\n align: \"right\",\n width: 150,\n render: (value: number) => {\n const isPositive = value >= 0;\n return (\n <Text\n as=\"span\"\n weight=\"semibold\"\n className={\n isPositive ? \"oui-text-profit-500\" : \"oui-text-loss-500\"\n }\n >\n {value.toFixed(2)} USDC\n </Text>\n );\n },\n },\n {\n title: t(\"portfolio.symbolPerformance.volume\"),\n dataIndex: \"volume\",\n align: \"right\",\n width: 150,\n render: (value: number) => {\n return <Text as=\"span\">{formatVolumeValue(value)}</Text>;\n },\n },\n {\n title: t(\"portfolio.symbolPerformance.fees\"),\n dataIndex: \"fees\",\n align: \"right\",\n width: 150,\n render: (value: number) => {\n return <Text as=\"span\">{formatVolumeValue(value)}</Text>;\n },\n },\n ],\n [t],\n );\n\n // Helper function to format volume/fees with K/M/B\n const formatVolumeValue = (value: number): string => {\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\"];\n let index = 0;\n let num = value;\n while (num >= 1000 && index < abbreviations.length - 1) {\n num /= 1000;\n index++;\n }\n const decimalPlaces = num <= 10 ? 2 : num <= 100 ? 1 : 0;\n const rounded = parseFloat(num.toFixed(decimalPlaces));\n return `${rounded}${abbreviations[index]}`;\n };\n\n // Aggregate trades by symbol\n const symbolSummaryData = useMemo(() => {\n if (!trades || trades.length === 0) return [];\n\n const symbolMap = new Map<\n string,\n { pnl: number; volume: number; fees: number; trades: number }\n >();\n\n trades.forEach((trade: TradeData) => {\n const symbol = trade.symbol;\n if (!symbolMap.has(symbol)) {\n symbolMap.set(symbol, { pnl: 0, volume: 0, fees: 0, trades: 0 });\n }\n\n const current = symbolMap.get(symbol)!;\n const tradeVolume = trade.executed_quantity * trade.executed_price;\n\n current.pnl += trade.realized_pnl || 0;\n current.volume += tradeVolume;\n current.fees += trade.fee || 0;\n current.trades += 1;\n });\n\n // Convert map to array and sort by PnL (highest first)\n return Array.from(symbolMap.entries())\n .map(([symbol, data]) => ({\n symbol,\n ...data,\n }))\n .sort((a, b) => b.pnl - a.pnl)\n .slice(0, 10); // Top 10 symbols\n }, [trades]);\n\n return (\n <Card\n title={\n <Box>\n <React.Suspense fallback={null}>\n <LazyPeriodTitle\n onPeriodChange={onPeriodChange}\n periodTypes={periodTypes}\n period={period}\n title={t(\"portfolio.symbolPerformance\")}\n filterItems={filterItems}\n onFilter={onFilter}\n />\n </React.Suspense>\n </Box>\n }\n >\n <Grid cols={1} gap={4}>\n <Flex gap={4} itemAlign=\"end\">\n {/* Symbol Selector - With Logo and Search */}\n <Box className=\"oui-max-w-xs oui-flex-1\">\n <Text size=\"xs\" intensity={54} className=\"oui-mb-2\">\n {t(\"common.symbol\")}\n </Text>\n <SymbolSelector\n value={selectedSymbol || \"\"}\n onValueChange={(value: string) => setSelectedSymbol(value)}\n options={availableSymbols}\n placeholder={t(\"common.symbol\")}\n />\n </Box>\n\n {/* Aggregation Window Selector */}\n <Box className=\"oui-max-w-xs\">\n <Text size=\"xs\" intensity={54} className=\"oui-mb-2\">\n {t(\"portfolio.symbolPerformance.aggregation\")}\n </Text>\n <Select.options\n value={aggregationWindow}\n onValueChange={(value) =>\n setAggregationWindow(value as AggregationWindow)\n }\n options={aggregationWindowTypes.map((type) => ({\n label:\n type === \"15m\"\n ? \"15 min\"\n : type === \"1h\"\n ? \"Hourly\"\n : \"Daily\",\n value: type,\n }))}\n classNames={{ trigger: cn(\"oui-h-[2.4rem]\") }}\n />\n </Box>\n </Flex>\n\n <Divider className=\"oui-my-6 oui-border-t-2\" intensity={8} />\n\n <Box pb={4}>\n {/* Key Metrics */}\n <Grid cols={5} gap={4} mb={4}>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Total PnL (Gross) */}\n <Statistic\n label=\"Total PnL (Gross)\"\n valueProps={{ coloring: true, showIdentifier: true }}\n >\n {performanceData ? performanceData.grossPnL.toFixed(2) : \"--\"}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Total Fees */}\n <Statistic\n label={t(\"portfolio.symbolPerformance.totalFees\")}\n valueProps={{ showIdentifier: false }}\n >\n {performanceData ? performanceData.totalFees.toFixed(2) : \"--\"}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Total PnL (Net) */}\n <Statistic\n label=\"Total PnL (Net)\"\n valueProps={{ coloring: true, showIdentifier: true }}\n >\n {performanceData ? performanceData.totalPnL.toFixed(2) : \"--\"}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Total Volume */}\n <Statistic label={t(\"portfolio.symbolPerformance.totalVolume\")}>\n {performanceData\n ? performanceData.totalVolume.toFixed(2)\n : \"--\"}\n </Statistic>\n </Box>\n <Box\n gradient=\"neutral\"\n r=\"md\"\n px={3}\n py={2}\n angle={184}\n border\n borderColor={6}\n >\n {/* Maker / Taker */}\n <Statistic label=\"Maker / Taker\">\n {performanceData ? (\n <MakerTakerShare makerShare={performanceData.makerShare} />\n ) : (\n <div className=\"oui-text-center\">--</div>\n )}\n </Statistic>\n </Box>\n </Grid>\n\n {/* Chart/Table View Toggle */}\n <Flex gap={2} mb={4}>\n <button\n onClick={() => setViewType(ViewType.chart)}\n className={cn(\n \"oui-px-4 oui-py-2 oui-rounded oui-text-sm oui-font-semibold oui-transition-all\",\n viewType === ViewType.chart\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54 hover:oui-bg-base-4\",\n )}\n >\n Chart\n </button>\n <button\n onClick={() => setViewType(ViewType.table)}\n className={cn(\n \"oui-px-4 oui-py-2 oui-rounded oui-text-sm oui-font-semibold oui-transition-all\",\n viewType === ViewType.table\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54 hover:oui-bg-base-4\",\n )}\n >\n Table\n </button>\n </Flex>\n\n {/* Charts - Conditional Rendering */}\n {viewType === ViewType.chart && (\n <Grid cols={1} gap={6}>\n {/* Combined PnL Chart (bars + cumulative line) */}\n <Box>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.realizedPnL\")}\n </Text>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-3\">\n <Flex gap={2}>\n <button\n onClick={() => setIsNetPnL(false)}\n className={cn(\n \"oui-px-3 oui-py-1 oui-rounded oui-text-xs oui-font-semibold oui-transition-all\",\n !isNetPnL\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54 hover:oui-bg-base-4\",\n )}\n >\n Gross P&L\n </button>\n <button\n onClick={() => setIsNetPnL(true)}\n className={cn(\n \"oui-px-3 oui-py-1 oui-rounded oui-text-xs oui-font-semibold oui-transition-all\",\n isNetPnL\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54 hover:oui-bg-base-4\",\n )}\n >\n Net P&L\n </button>\n </Flex>\n <Flex itemAlign=\"center\" gap={2}>\n <label className=\"oui-text-xs oui-text-base-contrast-54\">\n Cumulative\n </label>\n <Switch\n checked={showCumulativePnL}\n onCheckedChange={setShowCumulativePnL}\n />\n </Flex>\n </Flex>\n <Box\n r=\"md\"\n className=\"oui-h-[300px] oui-border oui-border-line-4\"\n >\n <CombinedPnLChart\n key={`combined-pnl-${aggregationWindow}`}\n data={combinedPnLData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n invisible={\n !aggregatedData ||\n !aggregatedData.periodData ||\n aggregatedData.periodData.length === 0\n }\n showCumulative={showCumulativePnL}\n />\n </Box>\n </Box>\n\n {/* Combined Volume Chart (bars + cumulative line) */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-3\">\n <Text as=\"div\" size=\"sm\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.volume\")}\n </Text>\n <Flex itemAlign=\"center\" gap={2}>\n <label className=\"oui-text-xs oui-text-base-contrast-54\">\n Cumulative\n </label>\n <Switch\n checked={showCumulativeVolume}\n onCheckedChange={setShowCumulativeVolume}\n />\n </Flex>\n </Flex>\n <Box\n r=\"md\"\n className=\"oui-h-[300px] oui-border oui-border-line-4\"\n >\n <CombinedVolumeChart\n key={`combined-vol-${aggregationWindow}`}\n data={combinedVolumeData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n invisible={\n !aggregatedData ||\n !aggregatedData.periodData ||\n aggregatedData.periodData.length === 0\n }\n showCumulative={showCumulativeVolume}\n />\n </Box>\n </Box>\n\n {/* Combined Price Chart - Only show when specific symbol is selected */}\n {!isAllSymbols && (\n <Box>\n <Text as=\"div\" size=\"sm\" className=\"oui-mb-3\">\n {getAggregationLabel(aggregationWindow)} Price\n </Text>\n <Box\n r=\"md\"\n className=\"oui-h-[300px] oui-border oui-border-line-4\"\n >\n <CombinedPriceChart\n key={`combined-price-${aggregationWindow}-${selectedSymbol}`}\n data={combinedPriceData}\n aggregationWindow={\n aggregationWindow as \"15m\" | \"1h\" | \"1d\"\n }\n invisible={combinedPriceData.length === 0}\n />\n </Box>\n </Box>\n )}\n\n {/* Combined Fees Chart (bars + cumulative line) */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-3\">\n <Text as=\"div\" size=\"sm\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.fees\")}\n </Text>\n <Flex itemAlign=\"center\" gap={2}>\n <label className=\"oui-text-xs oui-text-base-contrast-54\">\n Cumulative\n </label>\n <Switch\n checked={showCumulativeFees}\n onCheckedChange={setShowCumulativeFees}\n />\n </Flex>\n </Flex>\n <Box\n r=\"md\"\n className=\"oui-h-[300px] oui-border oui-border-line-4\"\n >\n <CombinedFeesChart\n key={`combined-fees-${aggregationWindow}`}\n data={combinedFeesData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n invisible={\n !aggregatedData ||\n !aggregatedData.periodData ||\n aggregatedData.periodData.length === 0\n }\n showCumulative={showCumulativeFees}\n />\n </Box>\n </Box>\n </Grid>\n )}\n\n {/* Table View - Conditional Rendering */}\n {viewType === ViewType.table && (\n <Box className=\"oui-h-[600px]\">\n <DataTable<PerformanceTableRow>\n bordered\n columns={tableColumns}\n dataSource={tableData}\n emptyView={\n <Box className=\"oui-text-center oui-py-8\">\n <Text>{t(\"portfolio.symbolPerformance.noData\")}</Text>\n </Box>\n }\n />\n </Box>\n )}\n\n {/* Symbol Summary - Top Symbols by PnL */}\n {symbolSummaryData.length > 0 && (\n <Box mt={8}>\n <Divider className=\"oui-my-6 oui-border-t-2\" intensity={8} />\n <Text as=\"div\" size=\"lg\" weight=\"semibold\" className=\"oui-mb-4\">\n {t(\"portfolio.symbolPerformance.pnlRanking\")}\n </Text>\n <Box className=\"oui-border oui-border-line-4 oui-rounded-md oui-p-4\">\n <PnLRankingChart\n data={symbolSummaryData}\n onSymbolSelect={setSelectedSymbol}\n />\n </Box>\n </Box>\n )}\n </Box>\n </Grid>\n </Card>\n );\n};\n","import { format, parseISO } from \"date-fns\";\nimport { AggregationWindow } from \"./symbolPerformance.script\";\n\n/**\n * Get human-readable label for aggregation window type.\n *\n * @param window - Aggregation window (daily, hourly, 15-min)\n * @returns Display label (e.g., \"Daily\", \"Hourly\", \"15 min\")\n */\nexport const getAggregationLabel = (window: AggregationWindow): string => {\n switch (window) {\n case AggregationWindow.FIFTEEN_MIN:\n return \"15 min\";\n case AggregationWindow.HOURLY:\n return \"Hourly\";\n case AggregationWindow.DAILY:\n return \"Daily\";\n default:\n return \"Daily\";\n }\n};\n\n/**\n * Format a date string for display on charts based on aggregation window.\n * Handles different precision levels for different time intervals.\n *\n * @param dateString - ISO datetime string\n * @param window - Aggregation window (daily, hourly, 15-min)\n * @returns Human-readable formatted date string\n */\nexport const formatDateForChart = (\n dateString: string,\n window: AggregationWindow,\n): string => {\n try {\n const date = parseISO(dateString);\n\n switch (window) {\n case AggregationWindow.FIFTEEN_MIN:\n case AggregationWindow.HOURLY:\n // Show time for hourly/15-min: \"Nov 21, 3:00 AM\"\n return format(date, \"MMM d, h:mm a\");\n case AggregationWindow.DAILY:\n default:\n // Show date only for daily: \"Nov 21\"\n return format(date, \"MMM d\");\n }\n } catch {\n // Fallback if parsing fails\n return dateString;\n }\n};\n\n/**\n * Format a date string to \"yyyy-MM-dd\" format.\n * Used for API calls and date range display.\n *\n * @param dateString - ISO datetime string\n * @returns Date in \"yyyy-MM-dd\" format\n */\nexport const formatDateOnly = (dateString: string): string => {\n try {\n const date = parseISO(dateString);\n return format(date, \"yyyy-MM-dd\");\n } catch {\n return dateString;\n }\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Text, cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type PnLRankingDataItem = {\n symbol: string;\n pnl: number;\n volume: number;\n fees: number;\n};\n\ntype PnLRankingChartProps = {\n data: PnLRankingDataItem[];\n onSymbolSelect?: (symbol: string) => void;\n};\n\nconst formatCurrency = (value: number): string => {\n if (value >= 1e9) return `$${(value / 1e9).toFixed(2)}B`;\n if (value >= 1e6) return `$${(value / 1e6).toFixed(2)}M`;\n if (value >= 1e3) return `$${(value / 1e3).toFixed(2)}K`;\n return `$${value.toFixed(2)}`;\n};\n\nexport const PnLRankingChart: React.FC<PnLRankingChartProps> = ({\n data,\n onSymbolSelect,\n}) => {\n const { t } = useTranslation();\n\n const maxAbsValue = useMemo(\n () => Math.max(...data.map((item) => Math.abs(item.pnl)), 1),\n [data],\n );\n\n return (\n <div className=\"oui-w-full\">\n {/* Header Row */}\n <div className=\"oui-grid oui-gap-4 oui-border-b oui-border-line-4 oui-mb-2 oui-px-4 oui-py-3\">\n <div className=\"oui-grid oui-grid-cols-12 oui-gap-4 oui-items-center\">\n <div className=\"oui-col-span-2\">\n <Text size=\"sm\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.symbols\")}\n </Text>\n </div>\n <div className=\"oui-col-span-6\">\n <Text size=\"sm\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.pnl\")}\n </Text>\n </div>\n <div className=\"oui-col-span-2 oui-text-right\">\n <Text size=\"sm\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.volume\")}\n </Text>\n </div>\n <div className=\"oui-col-span-2 oui-text-right\">\n <Text size=\"sm\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.fees\")}\n </Text>\n </div>\n </div>\n </div>\n\n {/* Data Rows */}\n <div className=\"oui-space-y-3\">\n {data.map((item) => {\n const isPositive = item.pnl >= 0;\n const barWidth = (Math.abs(item.pnl) / maxAbsValue) * 100;\n\n return (\n <div\n key={item.symbol}\n onClick={() => onSymbolSelect?.(item.symbol)}\n className=\"oui-border oui-border-line-4 hover:oui-border-line-5 oui-rounded-md oui-transition-colors oui-px-4 oui-py-3 oui-cursor-pointer\"\n >\n <div className=\"oui-grid oui-grid-cols-12 oui-gap-4 oui-items-center\">\n {/* Symbol Column */}\n <div className=\"oui-col-span-2\">\n <Text size=\"sm\" weight=\"semibold\" className=\"oui-truncate\">\n {item.symbol}\n </Text>\n </div>\n\n {/* P&L Column with Inline Bar Chart */}\n <div className=\"oui-col-span-6\">\n <div className=\"oui-relative oui-w-full oui-h-8 oui-rounded oui-bg-base-8 oui-overflow-hidden oui-flex oui-items-center\">\n <div\n className=\"oui-absolute oui-h-full oui-rounded oui-transition-all\"\n style={{\n width: `${barWidth}%`,\n backgroundColor: isPositive ? \"#00B49E\" : \"#FF5959\",\n }}\n />\n <Text\n size=\"sm\"\n weight=\"semibold\"\n className={cn(\n \"oui-relative oui-z-10 oui-ml-2\",\n isPositive\n ? \"oui-text-profit-500\"\n : \"oui-text-loss-500\",\n )}\n >\n {isPositive ? \"+\" : \"\"}\n {item.pnl.toFixed(2)}\n </Text>\n </div>\n </div>\n\n {/* Volume Column */}\n <div className=\"oui-col-span-2 oui-text-right\">\n <Text size=\"sm\" weight=\"semibold\">\n {formatCurrency(item.volume)}\n </Text>\n </div>\n\n {/* Fees Column */}\n <div className=\"oui-col-span-2 oui-text-right\">\n <Text size=\"sm\" weight=\"semibold\" intensity={80}>\n {formatCurrency(item.fees)}\n </Text>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Empty State */}\n {data.length === 0 && (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-py-8\">\n <Text intensity={54}>{t(\"portfolio.symbolPerformance.noData\")}</Text>\n </div>\n )}\n </div>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport {\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuPortal,\n Flex,\n Text,\n TokenIcon,\n Input,\n cn,\n CaretDownIcon,\n CaretUpIcon,\n} from \"@kodiak-finance/orderly-ui\";\n\nexport interface SymbolOption {\n value: string;\n label: string;\n}\n\nexport interface SymbolSelectorProps {\n value: string;\n onValueChange: (value: string) => void;\n options: SymbolOption[];\n placeholder?: string;\n}\n\nexport const SymbolSelector: React.FC<SymbolSelectorProps> = ({\n value,\n onValueChange,\n options,\n placeholder = \"Select symbol\",\n}) => {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n\n const filteredOptions = useMemo(() => {\n if (!search) return options;\n return options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(search.toLowerCase()) ||\n opt.value.toLowerCase().includes(search.toLowerCase()),\n );\n }, [search, options]);\n\n const selectedOption = options.find((opt) => opt.value === value);\n const displayLabel =\n value === \"ALL_SYMBOLS\"\n ? \"All Symbols\"\n : selectedOption?.label || placeholder;\n const isAllSymbols = value === \"ALL_SYMBOLS\";\n\n return (\n <DropdownMenuRoot open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <button className=\"oui-w-full oui-px-3 oui-py-2 oui-rounded oui-border oui-border-line-6 oui-bg-line-4 oui-text-left oui-flex oui-items-center oui-justify-between hover:oui-bg-line-5\">\n <Flex gap={1} itemAlign=\"center\">\n {!isAllSymbols && displayLabel !== placeholder && (\n <TokenIcon name={displayLabel} size=\"2xs\" />\n )}\n <Text size=\"xs\" className=\"oui-text-base-contrast-80\">\n {displayLabel}\n </Text>\n </Flex>\n\n <CaretDownIcon\n size={12}\n className={cn(\n \"oui-text-base-contrast-54 oui-transition-transform\",\n open && \"oui-rotate-180\",\n )}\n />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={4}\n className=\"oui-w-[var(--radix-dropdown-menu-trigger-width)] oui-bg-base-8 oui-border oui-border-line-6 oui-rounded oui-p-2 oui-z-50\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n {/* Search Input */}\n <div className=\"oui-px-2 oui-py-2 oui-border-b oui-border-base-4 oui-mb-2\">\n <Input\n autoFocus\n placeholder=\"Search symbols...\"\n value={search}\n onValueChange={setSearch}\n size=\"sm\"\n />\n </div>\n\n {/* Options List */}\n <div className=\"oui-max-h-[300px] oui-overflow-y-auto\">\n {filteredOptions.length === 0 ? (\n <div className=\"oui-px-3 oui-py-2 oui-text-center oui-text-base-contrast-54 oui-text-xs\">\n No symbols found\n </div>\n ) : (\n filteredOptions.map((option) => {\n const isSelected = value === option.value;\n const cleanLabel =\n option.value === \"ALL_SYMBOLS\" ? \"All Symbols\" : option.label;\n\n return (\n <button\n key={option.value}\n onClick={() => {\n onValueChange(option.value);\n setOpen(false);\n setSearch(\"\");\n }}\n className={cn(\n \"oui-w-full oui-px-3 oui-py-2 oui-rounded oui-flex oui-items-center oui-gap-2 oui-text-left oui-transition-colors\",\n isSelected ? \"oui-bg-base-7\" : \"hover:oui-bg-base-7\",\n )}\n >\n {option.value !== \"ALL_SYMBOLS\" && (\n <TokenIcon name={cleanLabel} size=\"2xs\" />\n )}\n <Text size=\"xs\" className=\"oui-text-base-contrast-80\">\n {cleanLabel}\n </Text>\n </button>\n );\n })\n )}\n </div>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useMemo } from \"react\";\nimport { useSWR } from \"@kodiak-finance/orderly-hooks\";\n\nexport interface KlineData {\n symbol: string;\n resolution: string;\n timestamp: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n}\n\ninterface KlineResponse {\n s: string; // status: \"ok\"\n o: number[]; // open\n h: number[]; // high\n l: number[]; // low\n c: number[]; // close\n v: number[]; // volume\n a: number[]; // notional\n t: number[]; // timestamps\n}\n\nconst fetcher = (url: string) =>\n fetch(`https://api.orderly.org${url}`).then((res) => res.json());\n\nexport const useKlineData = (params: {\n symbol?: string;\n resolution?: \"15m\" | \"1h\" | \"1d\";\n from?: number;\n to?: number;\n limit?: number;\n}) => {\n const { symbol, resolution, from, to, limit = 1000 } = params;\n\n const getKey = useMemo(() => {\n if (!symbol || !resolution) return null;\n\n // Calculate default from/to timestamps\n const now = Math.floor(Date.now() / 1000);\n\n // Use provided from/to timestamps, or calculate defaults\n let fromTimestamp = from;\n const toTimestamp = to || now;\n\n if (!fromTimestamp) {\n // If no from is provided, calculate based on resolution and limit\n const secondsPerCandle = {\n \"15m\": 900,\n \"1h\": 3600,\n \"1d\": 86400,\n }[resolution];\n\n fromTimestamp = now - limit * secondsPerCandle;\n }\n\n const search = new URLSearchParams();\n search.set(\"symbol\", symbol);\n search.set(\"resolution\", resolution);\n search.set(\"from\", fromTimestamp.toString());\n search.set(\"to\", toTimestamp.toString());\n\n return `/v1/tv/kline_history?${search.toString()}`;\n }, [symbol, resolution, from, to, limit]);\n\n const { data, isLoading, error } = useSWR<KlineResponse>(getKey, fetcher, {\n revalidateOnFocus: false,\n dedupingInterval: 60000, // Cache for 1 minute\n });\n\n // Transform API response to usable format\n const klines = useMemo(() => {\n if (!data?.t || !Array.isArray(data.t)) return [];\n\n const { o, h, l, c, v, t } = data as KlineResponse;\n\n return t.map((timestamp, index) => ({\n symbol: symbol || \"\",\n resolution: resolution || \"\",\n timestamp,\n open: o[index],\n high: h[index],\n low: l[index],\n close: c[index],\n volume: v[index],\n }));\n }, [data, symbol, resolution]);\n\n return {\n klines,\n isLoading,\n error,\n };\n};\n","import React, { useMemo, useState } from \"react\";\nimport {\n CombinedPnLChart,\n CombinedVolumeChart,\n CombinedFeesChart,\n CombinedPriceChart,\n} from \"@kodiak-finance/orderly-chart\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Card,\n Text,\n Flex,\n Tabs,\n TabPanel,\n DataFilter,\n Select,\n Grid,\n Divider,\n Switch,\n Statistic,\n cn,\n} from \"@kodiak-finance/orderly-ui\";\nimport { formatDateForChart, getAggregationLabel } from \"./dateUtils\";\nimport { PnLRankingChartMobile } from \"./pnlRankingChartMobile\";\nimport type { UseSymbolPerformanceScriptReturn } from \"./symbolPerformance.script\";\nimport { PeriodType, AggregationWindow } from \"./symbolPerformance.script\";\nimport { SymbolSelector } from \"./symbolSelector\";\nimport { useKlineData } from \"./useKlineData\";\nimport type { TradeData } from \"./useTrades\";\n\nexport type SymbolPerformanceUIMobileProps = UseSymbolPerformanceScriptReturn;\n\nconst MakerTakerShare: React.FC<{ makerShare: number }> = ({ makerShare }) => {\n const takerShare = 100 - makerShare;\n return (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-gap-4\">\n <Text weight=\"semibold\">{makerShare.toFixed(1)}%</Text>\n <span className=\"oui-text-base-contrast-54\">/</span>\n <Text weight=\"semibold\">{takerShare.toFixed(1)}%</Text>\n </div>\n );\n};\n\nexport const SymbolPerformanceUIMobile: React.FC<\n SymbolPerformanceUIMobileProps\n> = (props) => {\n const {\n selectedSymbol,\n setSelectedSymbol,\n period,\n onPeriodChange,\n performanceData,\n filterItems,\n onFilter,\n aggregationWindow,\n setAggregationWindow,\n aggregationWindowTypes,\n aggregatedData,\n trades,\n dateRange,\n isNetPnL,\n setIsNetPnL,\n } = props;\n const { t } = useTranslation();\n const symbolsInfo = useSymbolsInfo();\n const [showCumulativePnL, setShowCumulativePnL] = useState(true);\n const [showCumulativeVolume, setShowCumulativeVolume] = useState(false);\n const [showCumulativeFees, setShowCumulativeFees] = useState(false);\n\n // Trim all data based on first non-zero volume to keep all charts aligned\n const getFirstNonZeroVolumeIndex = (data: any[]) => {\n if (!data || data.length === 0) return 0;\n const index = data.findIndex((item) => item.volume && item.volume !== 0);\n return index === -1 ? 0 : index;\n };\n\n // Get available symbols\n const availableSymbols = useMemo(() => {\n const symbols = Object.keys(symbolsInfo);\n return [\n { value: \"ALL_SYMBOLS\", label: \"All Symbols\" },\n ...symbols.map((symbol) => ({\n value: symbol,\n label: symbol.replace(\"PERP_\", \"\").replace(\"_USDC\", \"\"),\n })),\n ];\n }, [symbolsInfo]);\n\n // Combined PnL chart data with trim\n // aggregatedData.periodData contains NET PnL (after fees)\n // Toggle allows viewing GROSS PnL (before fees) by adding fees back\n const combinedPnLData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const trimIndex = getFirstNonZeroVolumeIndex(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(trimIndex);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n // Net PnL = actual result (with fees deducted)\n // Gross PnL = add fees back to show hypothetical without fees\n pnl: isNetPnL ? item.pnl : item.pnl + item.fees,\n }));\n }, [aggregatedData, aggregationWindow, isNetPnL]);\n\n // Combined Volume chart data with trim\n const combinedVolumeData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const trimIndex = getFirstNonZeroVolumeIndex(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(trimIndex);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n volume: item.volume ?? 0,\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Combined Fees chart data with trim\n // Fees are shown as negative since they're a cost\n const combinedFeesData = useMemo(() => {\n if (!aggregatedData || !aggregatedData.periodData) return [];\n const trimIndex = getFirstNonZeroVolumeIndex(aggregatedData.periodData);\n const trimmedData = aggregatedData.periodData.slice(trimIndex);\n return trimmedData.map((item) => ({\n date: formatDateForChart(item.date, aggregationWindow),\n fees: -(item.fees ?? 0),\n }));\n }, [aggregatedData, aggregationWindow]);\n\n // Map aggregation window to K-line resolution\n const klineResolution = useMemo(() => {\n switch (aggregationWindow) {\n case \"15m\":\n return \"15m\" as const;\n case \"1h\":\n return \"1h\" as const;\n case \"1d\":\n return \"1d\" as const;\n default:\n return \"1d\" as const;\n }\n }, [aggregationWindow]);\n\n // Fetch K-line data (only if a specific symbol is selected, not \"ALL_SYMBOLS\")\n const isAllSymbols = selectedSymbol === \"ALL_SYMBOLS\";\n const { klines } = useKlineData({\n symbol: !isAllSymbols && selectedSymbol ? selectedSymbol : undefined,\n resolution: klineResolution,\n from: dateRange ? Math.floor(dateRange.from.getTime() / 1000) : undefined,\n to: dateRange ? Math.floor(dateRange.to.getTime() / 1000) : undefined,\n });\n\n // Combine price data - trim to match the trading data range for cross-chart alignment\n // This ensures price chart X-axis aligns with PnL/Volume/Fees charts for easy tracing\n const combinedPriceData = useMemo(() => {\n if (klines.length === 0 || !aggregatedData || !aggregatedData.periodData) {\n return [];\n }\n\n // Get the same trim index as trading data\n const trimIndex = getFirstNonZeroVolumeIndex(aggregatedData.periodData);\n const firstTrimmedEntry = aggregatedData.periodData[trimIndex];\n\n if (!firstTrimmedEntry) {\n return [];\n }\n\n // Filter klines to only include those on or after the first trimmed trading date\n const firstTrimmedDate = new Date(firstTrimmedEntry.date);\n\n return klines\n .filter((k) => {\n const klineDate = new Date(k.timestamp * 1000);\n return klineDate >= firstTrimmedDate;\n })\n .map((k) => {\n const date = new Date(k.timestamp * 1000);\n const formattedDate = formatDateForChart(\n date.toISOString(),\n aggregationWindow,\n );\n\n return {\n date: formattedDate,\n open: k.open,\n high: k.high,\n low: k.low,\n close: k.close,\n };\n });\n }, [klines, aggregatedData, aggregationWindow]);\n\n const isEmptyData =\n !aggregatedData ||\n !aggregatedData.periodData ||\n aggregatedData.periodData.length === 0;\n\n // Build DataFilter items with only date range (symbol selector is separate)\n const dataFilterItems = useMemo(() => {\n const items: Array<{ type: \"range\"; name: string; value: any }> = [];\n\n // Add date range filter if available\n if (filterItems && filterItems.length > 0) {\n const dateRangeFilter = filterItems.find(\n (item) => item.name === \"dateRange\",\n );\n if (dateRangeFilter) {\n items.push({\n type: \"range\" as const,\n name: \"dateRange\",\n value: dateRangeFilter.value,\n });\n }\n }\n\n return items;\n }, [filterItems]);\n\n const handleFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\" && onFilter) {\n onFilter(filter);\n }\n };\n\n // Aggregate trades by symbol\n const symbolSummaryData = useMemo(() => {\n if (!trades || trades.length === 0) return [];\n\n const symbolMap = new Map<\n string,\n { pnl: number; volume: number; fees: number; trades: number }\n >();\n\n trades.forEach((trade: TradeData) => {\n const symbol = trade.symbol;\n if (!symbolMap.has(symbol)) {\n symbolMap.set(symbol, { pnl: 0, volume: 0, fees: 0, trades: 0 });\n }\n\n const current = symbolMap.get(symbol)!;\n const tradeVolume = trade.executed_quantity * trade.executed_price;\n\n current.pnl += trade.realized_pnl || 0;\n current.volume += tradeVolume;\n current.fees += trade.fee || 0;\n current.trades += 1;\n });\n\n // Convert map to array and sort by PnL (highest first)\n return Array.from(symbolMap.entries())\n .map(([symbol, data]) => ({\n symbol,\n ...data,\n }))\n .sort((a, b) => b.pnl - a.pnl)\n .slice(0, 10); // Top 10 symbols\n }, [trades]);\n\n return (\n <div>\n {/* Symbol Selector & Aggregation Window */}\n <Flex gap={2} itemAlign=\"end\" mb={2}>\n <Box className=\"oui-flex-1\">\n <Text size=\"xs\" intensity={54} className=\"oui-mb-2\">\n {t(\"common.symbol\")}\n </Text>\n <SymbolSelector\n value={selectedSymbol || \"\"}\n onValueChange={(value: string) => setSelectedSymbol(value)}\n options={availableSymbols}\n placeholder={t(\"common.symbol\")}\n />\n </Box>\n\n <Box className=\"oui-flex-1\">\n <Text size=\"xs\" intensity={54} className=\"oui-mb-2\">\n {t(\"portfolio.symbolPerformance.aggregation\")}\n </Text>\n <Select.combine\n value={aggregationWindow}\n onValueChange={(value) =>\n setAggregationWindow(value as AggregationWindow)\n }\n options={aggregationWindowTypes.map((type) => ({\n label:\n type === \"15m\" ? \"15 min\" : type === \"1h\" ? \"Hourly\" : \"Daily\",\n value: type,\n }))}\n />\n </Box>\n </Flex>\n\n {/* Date Range Filter */}\n {dataFilterItems && dataFilterItems.length > 0 && (\n <Box mb={4}>\n <DataFilter\n items={dataFilterItems}\n onFilter={handleFilter}\n className=\"oui-border-none oui-py-0\"\n />\n </Box>\n )}\n\n {/* Period Buttons - Below Filters */}\n <Box mb={4}>\n <Tabs\n value={period || \"\"}\n defaultValue={PeriodType.WEEK}\n classNames={{ tabsList: \"oui-justify-between\", trigger: \"oui-w-1/4\" }}\n onValueChange={(value) => onPeriodChange(value as PeriodType)}\n >\n <TabPanel\n title={t(\"common.select.1d\")}\n value={PeriodType.DAY}\n className=\"oui-min-h-0 oui-p-0\"\n />\n <TabPanel\n title={t(\"common.select.7d\")}\n value={PeriodType.WEEK}\n className=\"oui-min-h-0 oui-p-0\"\n />\n <TabPanel\n title={t(\"common.select.30d\")}\n value={PeriodType.MONTH}\n className=\"oui-min-h-0 oui-p-0\"\n />\n <TabPanel\n title={t(\"common.select.90d\")}\n value={PeriodType.QUARTER}\n className=\"oui-min-h-0 oui-p-0\"\n />\n </Tabs>\n </Box>\n\n {/* Key Metrics - Above Charts (match desktop set) */}\n <Grid cols={2} gap={2} mb={2}>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5\">\n <Statistic\n label={`${t(\"portfolio.symbolPerformance.totalPnL\")} (Gross)`}\n valueProps={{ coloring: true, showIdentifier: true, dp: 2 }}\n classNames={{ value: \"oui-text-sm oui-font-semibold\" }}\n >\n {performanceData?.grossPnL ?? \"-\"}\n </Statistic>\n </Card>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5\">\n <Statistic\n label={t(\"portfolio.symbolPerformance.totalFees\")}\n valueProps={{ dp: 2 }}\n classNames={{ value: \"oui-text-sm\" }}\n >\n {performanceData?.totalFees ?? \"-\"}\n </Statistic>\n </Card>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5\">\n <Statistic\n label={`${t(\"portfolio.symbolPerformance.totalPnL\")} (Net)`}\n valueProps={{ coloring: true, showIdentifier: true, dp: 2 }}\n classNames={{ value: \"oui-text-sm oui-font-semibold\" }}\n >\n {performanceData?.totalPnL ?? \"-\"}\n </Statistic>\n </Card>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5\">\n <Statistic\n label={t(\"portfolio.symbolPerformance.totalVolume\")}\n valueProps={{ dp: 2 }}\n classNames={{ value: \"oui-text-sm\" }}\n >\n {performanceData?.totalVolume ?? \"-\"}\n </Statistic>\n </Card>\n <Card className=\"oui-bg-base-7 oui-border oui-border-line-4 oui-p-1.5 oui-col-span-2\">\n <Statistic\n label=\"Maker / Taker\"\n classNames={{ value: \"oui-text-sm oui-font-semibold\" }}\n >\n {performanceData ? (\n <MakerTakerShare makerShare={performanceData.makerShare} />\n ) : (\n \"--\"\n )}\n </Statistic>\n </Card>\n </Grid>\n\n {/* Charts - Combined visualization (bars + cumulative line) */}\n <Grid cols={1} gap={4} mb={4}>\n {/* PnL - Combined Bars + Cumulative Line */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-2\">\n <Text as=\"div\" size=\"xs\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.realizedPnL\")}\n </Text>\n <Flex gap={1}>\n <button\n onClick={() => setIsNetPnL(false)}\n className={cn(\n \"oui-px-2 oui-py-0.5 oui-rounded oui-text-2xs oui-font-semibold oui-transition-all\",\n !isNetPnL\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54\",\n )}\n >\n Gross\n </button>\n <button\n onClick={() => setIsNetPnL(true)}\n className={cn(\n \"oui-px-2 oui-py-0.5 oui-rounded oui-text-2xs oui-font-semibold oui-transition-all\",\n isNetPnL\n ? \"oui-bg-primary-darken oui-text-white\"\n : \"oui-bg-base-5 oui-text-base-contrast-54\",\n )}\n >\n Net\n </button>\n <Divider direction=\"vertical\" />\n <Flex itemAlign=\"center\" gap={1}>\n <label className=\"oui-text-2xs oui-text-base-contrast-54\">\n Cum.\n </label>\n <Switch\n checked={showCumulativePnL}\n onCheckedChange={setShowCumulativePnL}\n />\n </Flex>\n </Flex>\n </Flex>\n <Box r=\"md\" className=\"oui-h-[144px] oui-border oui-border-line-4\">\n <CombinedPnLChart\n key={`mobile-pnl-${aggregationWindow}`}\n data={combinedPnLData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n isMobile={true}\n invisible={isEmptyData}\n showCumulative={showCumulativePnL}\n />\n </Box>\n </Box>\n\n {/* Volume - Combined Bars + Cumulative Line */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-2\">\n <Text as=\"div\" size=\"xs\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.volume\")}\n </Text>\n <Flex itemAlign=\"center\" gap={1}>\n <label className=\"oui-text-2xs oui-text-base-contrast-54\">\n Cum.\n </label>\n <Switch\n checked={showCumulativeVolume}\n onCheckedChange={setShowCumulativeVolume}\n />\n </Flex>\n </Flex>\n <Box r=\"md\" className=\"oui-h-[144px] oui-border oui-border-line-4\">\n <CombinedVolumeChart\n key={`mobile-volume-${aggregationWindow}`}\n data={combinedVolumeData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n isMobile={true}\n invisible={isEmptyData}\n showCumulative={showCumulativeVolume}\n />\n </Box>\n </Box>\n\n {/* Price Chart - Only show when specific symbol is selected */}\n {!isAllSymbols && (\n <Box>\n <Text as=\"div\" size=\"xs\" className=\"oui-mb-2\">\n {getAggregationLabel(aggregationWindow)} Price\n </Text>\n <Box r=\"md\" className=\"oui-h-[144px] oui-border oui-border-line-4\">\n <CombinedPriceChart\n key={`mobile-price-${aggregationWindow}-${selectedSymbol}`}\n data={combinedPriceData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n isMobile={true}\n invisible={combinedPriceData.length === 0}\n />\n </Box>\n </Box>\n )}\n\n {/* Fees - Combined Bars + Cumulative Line */}\n <Box>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-mb-2\">\n <Text as=\"div\" size=\"xs\">\n {getAggregationLabel(aggregationWindow)}{\" \"}\n {t(\"portfolio.symbolPerformance.fees\")}\n </Text>\n <Flex itemAlign=\"center\" gap={1}>\n <label className=\"oui-text-2xs oui-text-base-contrast-54\">\n Cum.\n </label>\n <Switch\n checked={showCumulativeFees}\n onCheckedChange={setShowCumulativeFees}\n />\n </Flex>\n </Flex>\n <Box r=\"md\" className=\"oui-h-[144px] oui-border oui-border-line-4\">\n <CombinedFeesChart\n key={`mobile-fees-${aggregationWindow}`}\n data={combinedFeesData}\n aggregationWindow={aggregationWindow as \"15m\" | \"1h\" | \"1d\"}\n isMobile={true}\n invisible={isEmptyData}\n showCumulative={showCumulativeFees}\n />\n </Box>\n </Box>\n </Grid>\n\n {/* Symbol Summary - Top Symbols by PnL */}\n {symbolSummaryData.length > 0 && (\n <Box mt={6} mb={4}>\n <Divider className=\"oui-my-6 oui-border-t-2\" intensity={8} />\n <Text as=\"div\" size=\"sm\" weight=\"semibold\" className=\"oui-mb-4\">\n {t(\"portfolio.symbolPerformance.pnlRanking\")}\n </Text>\n <Box className=\"oui-border oui-border-line-4 oui-rounded-md oui-p-3\">\n <PnLRankingChartMobile\n data={symbolSummaryData}\n onSymbolSelect={setSelectedSymbol}\n />\n </Box>\n </Box>\n )}\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Text, cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type PnLRankingDataItem = {\n symbol: string;\n pnl: number;\n volume: number;\n fees: number;\n};\n\ntype PnLRankingChartMobileProps = {\n data: PnLRankingDataItem[];\n onSymbolSelect?: (symbol: string) => void;\n};\n\nconst formatCurrency = (value: number): string => {\n if (value >= 1e9) return `$${(value / 1e9).toFixed(2)}B`;\n if (value >= 1e6) return `$${(value / 1e6).toFixed(2)}M`;\n if (value >= 1e3) return `$${(value / 1e3).toFixed(2)}K`;\n return `$${value.toFixed(2)}`;\n};\n\nexport const PnLRankingChartMobile: React.FC<PnLRankingChartMobileProps> = ({\n data,\n onSymbolSelect,\n}) => {\n const { t } = useTranslation();\n\n const maxAbsValue = useMemo(\n () => Math.max(...data.map((item) => Math.abs(item.pnl)), 1),\n [data],\n );\n\n return (\n <div className=\"oui-w-full oui-space-y-3\">\n {/* Header Row */}\n <div className=\"oui-border-b oui-border-line-4 oui-mb-2 oui-px-3 oui-py-2\">\n <div className=\"oui-flex oui-items-center oui-justify-between\">\n <Text size=\"xs\" intensity={54} weight=\"semibold\">\n {t(\"portfolio.symbolPerformance.pnlRanking.symbols\")}\n </Text>\n <Text\n size=\"xs\"\n intensity={54}\n weight=\"semibold\"\n className=\"oui-text-right\"\n >\n {t(\"portfolio.symbolPerformance.pnlRanking.pnl\")}\n </Text>\n </div>\n </div>\n\n {/* Data Rows */}\n {data.map((item) => {\n const isPositive = item.pnl >= 0;\n const barWidth = (Math.abs(item.pnl) / maxAbsValue) * 100;\n\n return (\n <div\n key={item.symbol}\n onClick={() => onSymbolSelect?.(item.symbol)}\n className=\"oui-border oui-border-line-4 hover:oui-border-line-5 oui-rounded oui-transition-colors oui-px-3 oui-py-3 oui-cursor-pointer\"\n >\n {/* Symbol - Full Width, No Truncation */}\n <Text size=\"xs\" weight=\"semibold\" className=\"oui-mb-2\">\n {item.symbol}\n </Text>\n\n {/* Bar with P&L Value - Full Width */}\n <div className=\"oui-relative oui-w-full oui-h-7 oui-rounded oui-bg-base-8 oui-overflow-hidden oui-flex oui-items-center oui-mb-3\">\n <div\n className=\"oui-absolute oui-h-full oui-rounded oui-transition-all\"\n style={{\n width: `${barWidth}%`,\n backgroundColor: isPositive ? \"#00B49E\" : \"#FF5959\",\n }}\n />\n <Text\n size=\"xs\"\n weight=\"semibold\"\n className={cn(\n \"oui-relative oui-z-10 oui-ml-2\",\n isPositive ? \"oui-text-profit-500\" : \"oui-text-loss-500\",\n )}\n >\n {isPositive ? \"+\" : \"\"}\n {item.pnl.toFixed(2)}\n </Text>\n </div>\n\n {/* Volume and Fees - Compact Secondary Info */}\n <div className=\"oui-flex oui-justify-between oui-gap-4 oui-border-t oui-border-line-4 oui-pt-3\">\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text size=\"2xs\" intensity={54}>\n {t(\"portfolio.symbolPerformance.pnlRanking.volume\")}\n </Text>\n <Text size=\"xs\" weight=\"semibold\">\n {formatCurrency(item.volume)}\n </Text>\n </div>\n <div className=\"oui-text-right oui-flex oui-flex-col oui-gap-1\">\n <Text size=\"2xs\" intensity={54}>\n {t(\"portfolio.symbolPerformance.pnlRanking.fees\")}\n </Text>\n <Text size=\"xs\" weight=\"semibold\" intensity={80}>\n {formatCurrency(item.fees)}\n </Text>\n </div>\n </div>\n </div>\n );\n })}\n\n {/* Empty State */}\n {data.length === 0 && (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-py-8\">\n <Text size=\"xs\" intensity={54}>\n {t(\"portfolio.symbolPerformance.noData\")}\n </Text>\n </div>\n )}\n </div>\n );\n};\n"]}