@kodiak-finance/orderly-ui-positions 2.8.21-rc.1 → 2.8.21

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/index.ts","../src/components/positions/closePosition/components/confirmDialog.tsx","../src/components/positions/positionsRowContext.tsx","../src/components/fundingFeeHistory/fundingFeeHistory.ui.tsx","../src/components/fundingFeeHistory/endReachedBox.tsx","../src/components/fundingFeeHistory/useEndReached.ts","../src/components/fundingFeeHistory/fundingFeeButton.tsx","../src/components/positions/positions.widget.tsx","../src/components/positions/combinePositions.script.ts","../src/components/positions/hooks/useSubAccountQuery.ts","../src/components/positions/positions.script.ts","../src/constants.ts","../src/utils/sorting.ts","../src/components/reversePosition/reversePosition.ui.tsx","../src/components/reversePosition/OrderInfoCard.ui.tsx","../src/components/reversePosition/reversePosition.script.tsx","../src/components/reversePosition/reversePosition.widget.tsx","../src/components/shared/hooks/useTabSort.ts","../src/components/positions/positions.ui.tsx","../src/provider/symbolProvider.tsx","../src/provider/symbolContext.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/rwaStatus/rwaStatus.tsx","../src/components/positions/closePosition/closePositions.mobile.ui.tsx","../src/components/positions/closePosition/components/quantitySlider.tsx","../src/components/positions/closePosition/closePosition.ui.tsx","../src/components/positions/closePosition/closePosition.widget.tsx","../src/components/positions/closePosition/closePosition.script.tsx","../src/components/positions/desktop/components.tsx","../src/components/positions/desktop/listElement.tsx","../src/components/positions/desktop/priceInput.tsx","../src/components/positions/desktop/quantityInput.tsx","../src/components/positions/desktop/numeralWithCtx.tsx","../src/components/positions/desktop/partialTPSL.tsx","../src/components/positions/desktop/reversePotisionButton.tsx","../src/components/positions/desktop/shareButton/shareButton.ui.tsx","../src/components/positions/desktop/shareButton/shareButton.script.tsx","../src/components/positions/desktop/shareButton/shareButton.widget.tsx","../src/components/positions/desktop/triggerPrice.tsx","../src/components/positions/desktop/unrealPnLHover.tsx","../src/components/positions/mobile/positionCell/positionCell.ui.tsx","../src/components/positions/mobile/positionCell/items.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/positionsRowProvider.tsx","../src/components/positionHistory/positionHistory.ui.tsx","../src/components/positionHistory/desktop/usePositionHistoryColumn.tsx","../src/components/positionHistory/mobile/positionHistoryCell.ui.tsx","../src/components/positionHistory/mobile/items.tsx","../src/components/positionHistory/positionHistory.script.tsx","../src/utils/utils.ts","../src/components/positionHistory/mobile/positionHistoryCell.script.tsx","../src/components/positionHistory/mobile/positionHistoryCell.widget.tsx","../src/components/positionHistory/positionHistory.widget.tsx","../src/components/liquidation/liquidation.ui.tsx","../src/components/liquidation/desktop/useLiquidationColumn.tsx","../src/components/liquidation/mobile/liquidationCell.ui.tsx","../src/components/liquidation/mobile/liquidationCell.script.tsx","../src/components/liquidation/mobile/liquidationCell.widget.tsx","../src/components/liquidation/liquidation.widget.tsx","../src/components/liquidation/liquidation.script.tsx","../src/components/closeAllPositions/closeAllPositions.ui.tsx","../src/components/closeAllPositions/closeAllPositions.script.tsx","../src/components/closeAllPositions/closeAllPositions.widget.tsx"],"names":["registerSimpleDialog","useMemo","useTranslation","Text","Flex","Decimal","useRef","Fragment","jsx","jsxs","useScreen","React","useEffect","useAccount","account","fetcher","usePositionStream","useDataTap","usePagination","useCallback","OrderSide","Badge","Divider","useSymbolsInfo","i18n","SimpleDialog","PositionsTabName","formatAddress","ListView","createContext","useContext","Box","cn","Tooltip","Button","SimpleSheet","ThrottledButton","useState","OrderType","Input","inputFormatter","useLocalStorage","modal","utils","PopoverRoot","PopoverContent","PopoverTrigger","Slider","useLeverageBySymbol","positions","useTpslPriceChecker","PositionType","CloseToLiqPriceIcon","formatNum","children","Grid","Statistic","toast","type","TableFeatures","AuthGuardDataTable","SharePnLDialogId","commifyOptional","LeverageBadge","LeverageDisplay","SharePnLBottomSheetId","capitalizeFirstLetter","differenceInDays","subDays","usePrivateQuery","AccountStatusEnum","data","dateRange","SymbolToken","AvgOpen","FundingFee","forwardRef","DataFilter","Header","Body","usePrivateInfiniteQuery","useFilter","item","useSubAccountMutation"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { MarketCloseConfirm } from \"./components/positions/closePosition/components/confirmDialog\";\n\nexport { usePositionsRowContext } from \"./components/positions/positionsRowContext\";\n\nexport { FundingFeeHistoryUI } from \"./components/fundingFeeHistory/fundingFeeHistory.ui\";\nexport { FundingFeeButton } from \"./components/fundingFeeHistory/fundingFeeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n CombinePositionsWidget,\n} from \"./components/positions/positions.widget\";\nexport type { PositionsInstance } from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps, SortType } from \"./types/types\";\nexport {\n useTabSort,\n PositionsTabName,\n} from \"./components/shared/hooks/useTabSort\";\nexport { useSort, sortList } from \"./utils/sorting\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\n\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";\nexport * from \"./components/closeAllPositions\";\nexport * from \"./components/reversePosition\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderEntity, OrderSide } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Text,\n CloseIcon,\n Flex,\n Divider,\n Badge,\n ThrottledButton,\n Box,\n} from \"@kodiak-finance/orderly-ui\";\nimport { commify, commifyOptional, Decimal } from \"@kodiak-finance/orderly-utils\";\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-relative oui-w-full oui-border-b oui-border-line-4 oui-pb-3\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-p-2 oui-text-base-contrast-54 hover:oui-text-base-contrast-80\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n disabled?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={props.onCancel}\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={props.onConfirm}\n fullWidth\n loading={props.submitting}\n disabled={props.disabled}\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n};\n\nexport const OrderDetail = (props: {\n quantity: any;\n price: any;\n side: OrderSide;\n quoteDp: number;\n className?: string;\n}) => {\n const { quantity, price, quoteDp, side } = props;\n const { t } = useTranslation();\n\n const total = useMemo(() => {\n if (price && quantity) {\n return new Decimal(price)\n .mul(quantity)\n .toFixed(quoteDp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [price, quantity]);\n\n return (\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={5}\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text color={side === OrderSide.BUY ? \"success\" : \"danger\"}>\n {quantity}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {price}\n </Text.formatted>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {total}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n\nexport const MarketCloseConfirm: FC<{\n base?: string;\n quantity?: string;\n onClose?: () => void;\n close?: () => void;\n onConfirm?: () => Promise<any>;\n submitting?: boolean;\n hideCloseIcon?: boolean;\n classNames?: {\n root?: string;\n };\n}> = (props) => {\n const { t } = useTranslation();\n\n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n func?.();\n };\n return (\n <Flex direction={\"column\"} className={props.classNames?.root}>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.marketClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {t(\"positions.marketClose.description\", {\n quantity: commifyOptional(props.quantity),\n base: props.base,\n })}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price } = props;\n const { side } = order;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.onClose?.();\n };\n\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.limitClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Box mt={5}>\n <Text intensity={54} size=\"sm\">\n {t(\"positions.limitClose.description\", {\n quantity: commify(props.quantity),\n base: props.base,\n })}\n </Text>\n </Box>\n\n <Flex gap={2} mb={4} mt={5} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {order.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n </Flex>\n </Flex>\n\n <Divider className=\"oui-w-full\" />\n\n <OrderDetail\n className=\"oui-text-sm\"\n price={price}\n quantity={quantity}\n side={order.side}\n quoteDp={quoteDp ?? 2}\n />\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n />\n </>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { API, OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\n\nexport interface PositionsRowContextState {\n quantity: string;\n price: string;\n type: OrderType;\n side: OrderSide;\n position: API.PositionExt | API.PositionTPSLExt;\n updateQuantity: (value: string) => void;\n updatePriceChange: (value: string) => void;\n updateOrderType: (value: OrderType) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: API.AlgoOrder;\n partialTPSLOrder?: API.AlgoOrder;\n quoteDp?: number;\n baseDp?: number;\n baseTick?: number;\n errors: any | undefined;\n}\n\nexport const PositionsRowContext = createContext(\n {} as PositionsRowContextState,\n);\n\nexport const usePositionsRowContext = () => {\n return useContext(PositionsRowContext);\n};\n","import { FC, useCallback, useMemo } from \"react\";\nimport { usePrivateInfiniteQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport {\n Grid,\n Statistic,\n DataTable,\n Text,\n ListView,\n Flex,\n useScreen,\n cn,\n Tooltip,\n ExclamationFillIcon,\n modal,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { EndReachedBox } from \"./endReachedBox\";\n\ntype FundingFeeHistory = {\n created_time: number;\n funding_fee: number;\n funding_rate: number;\n mark_price: number;\n payment_type: \"Pay\" | \"Receive\";\n status: \"Accrued\" | \"Settled\";\n symbol: string;\n updated_time: number;\n};\n\nconst PAGE_SIZE = 60;\n\nexport const FundingFeeHistoryUI: FC<{\n total: number;\n symbol: string;\n start_t: string;\n end_t: string;\n}> = ({ total, symbol, start_t, end_t }) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const { isLoading, data, setSize } =\n usePrivateInfiniteQuery<FundingFeeHistory>(\n (pageIndex, previousPageData) => {\n if (\n (!previousPageData || (previousPageData.length ?? 0) < PAGE_SIZE) &&\n pageIndex > 0\n )\n return null;\n return `/v1/funding_fee/history?page=${pageIndex + 1}&size=${PAGE_SIZE}&symbol=${symbol}&start_t=${start_t}&end_t=${end_t}`;\n },\n {\n revalidateFirstPage: false,\n },\n );\n\n const loadMore = useCallback(() => {\n setSize((prev) => {\n return prev + 1;\n });\n }, [setSize]);\n\n const flattenData = useMemo(() => {\n if (!Array.isArray(data)) return [];\n return data.flat().map((item) => {\n return {\n ...item,\n funding_fee: -item.funding_fee,\n };\n });\n }, [data]);\n\n const listView = useMemo(() => {\n if (isMobile) {\n return (\n <HistoryDataListViewSimple\n data={flattenData ?? EMPTY_LIST}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }\n return (\n <HistoryDataListView\n data={flattenData ?? EMPTY_LIST}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }, [isMobile, flattenData, isLoading]);\n\n return (\n <div>\n <Grid\n cols={2}\n gapX={3}\n className=\"oui-sticky oui-top-0 oui-z-10 oui-bg-base-8 oui-py-4\"\n >\n <div className=\"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3\">\n {/* <Statistic label={\"Instrument\"} /> */}\n <Flex direction={\"column\"} gap={1} itemAlign={\"start\"}>\n <span className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.symbol\")}\n </span>\n <Text.formatted\n rule=\"symbol\"\n className=\"oui-font-semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n </Flex>\n </div>\n <div className=\"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3\">\n <Statistic\n label={\n isMobile ? (\n <FundingFeeLabelButton\n label={`${t(\"funding.fundingFee\")} (USDC)`}\n tooltip={t(\"positions.fundingFee.tooltip\")}\n size={14}\n />\n ) : (\n <FundingFeeLabel\n label={`${t(\"funding.fundingFee\")} (USDC)`}\n tooltip={t(\"positions.fundingFee.tooltip\")}\n size={14}\n />\n )\n }\n valueProps={{\n ignoreDP: true,\n coloring: true,\n showIdentifier: true,\n }}\n >\n {total}\n </Statistic>\n </div>\n </Grid>\n {listView}\n </div>\n );\n};\n\nconst FundingFeeLabelButton: FC<{\n label: string;\n tooltip: string;\n size: number;\n}> = ({ label, tooltip, size }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <span>{label}</span>\n <button\n className=\"oui-flex oui-items-center\"\n onClick={() => {\n modal.alert({\n message: tooltip,\n title: t(\"positions.fundingFee.title\"),\n });\n }}\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={size}\n />\n </button>\n </div>\n );\n};\n\nconst FundingFeeLabel: FC<{ label: string; tooltip: string; size: number }> = ({\n label,\n tooltip,\n size,\n}) => {\n return (\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <span>{label}</span>\n <Tooltip content={<div className=\"oui-w-64\">{tooltip}</div>}>\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={size}\n />\n </Tooltip>\n </div>\n );\n};\n\ntype ListProps = {\n isLoading: boolean;\n data: any[];\n loadMore: () => void;\n};\n\nconst HistoryDataListView: FC<ListProps> = ({ isLoading, data, loadMore }) => {\n const { t } = useTranslation();\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 120,\n render: (value: string) => {\n return <Text.formatted rule=\"date\">{value}</Text.formatted>;\n },\n },\n {\n title: (\n <FundingFeeLabel\n label={t(\"funding.fundingRate\")}\n tooltip={t(\"positions.fundingRate.tooltip\")}\n size={12}\n />\n ),\n dataIndex: \"funding_rate\",\n formatter: (value: string) => new Decimal(value).mul(100).toString(),\n render: (value: string) => {\n return <span>{`${value}%`}</span>;\n },\n },\n {\n title: t(\"funding.paymentType\"),\n dataIndex: \"payment_type\",\n formatter: (value: string) => {\n return value === \"Pay\"\n ? t(\"funding.paymentType.paid\")\n : t(\"funding.paymentType.received\");\n },\n render: (value: string) => <span>{value}</span>,\n },\n {\n title: `${t(\"funding.fundingFee\")} (USDC)`,\n dataIndex: \"funding_fee\",\n render: (value: string) => {\n return (\n <Text.numeral rule=\"price\" coloring showIdentifier ignoreDP>\n {value}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t]);\n\n return (\n <div className=\"oui-h-[calc(80vh_-_132px_-_8px)] oui-overflow-y-auto\">\n <EndReachedBox onEndReached={loadMore}>\n <DataTable\n classNames={{\n root: cn(\"oui-h-auto oui-bg-base-8 oui-text-sm\"),\n }}\n columns={columns}\n dataSource={data ?? EMPTY_LIST}\n loading={isLoading}\n />\n </EndReachedBox>\n </div>\n );\n};\n\nconst HistoryDataListViewSimple: FC<ListProps> = ({\n data,\n isLoading,\n loadMore,\n}) => {\n const renderItem = useCallback((item: FundingFeeHistory) => {\n return <FundingFeeItem item={item} />;\n }, []);\n return (\n <div className=\"oui-h-[calc(80vh_-_104px)] oui-overflow-y-auto\">\n <ListView\n dataSource={data}\n renderItem={renderItem}\n isLoading={isLoading}\n contentClassName=\"oui-space-y-0\"\n loadMore={loadMore}\n />\n </div>\n );\n};\n\nconst FundingFeeItem: FC<{\n item: any;\n}> = ({ item }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-space-y-2 oui-border-t oui-border-line-6 oui-py-2\">\n <Flex justify={\"between\"}>\n <Statistic\n label={\n <FundingFeeLabelButton\n label={t(\"funding.fundingRate\")}\n tooltip={t(\"positions.fundingRate.tooltip\")}\n size={12}\n />\n }\n classNames={{\n label: \"oui-text-2xs\",\n }}\n valueProps={{\n ignoreDP: true,\n rule: \"percentages\",\n className: \"oui-text-xs\",\n }}\n >\n {item.funding_rate}\n </Statistic>\n <Statistic\n label={t(\"common.amount\")}\n className=\"oui-items-end\"\n classNames={{\n label: \"oui-text-2xs\",\n }}\n valueProps={{\n ignoreDP: true,\n coloring: true,\n as: \"div\",\n className: \"oui-text-xs\",\n showIdentifier: true,\n }}\n >\n {item.funding_fee}\n </Statistic>\n </Flex>\n <Flex justify={\"between\"}>\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36\"\n size=\"2xs\"\n >\n {item.created_time}\n </Text.formatted>\n <Text size=\"sm\" intensity={80}>\n {item.payment_type === \"Pay\"\n ? t(\"funding.paymentType.paid\")\n : t(\"funding.paymentType.received\")}\n </Text>\n </Flex>\n </div>\n );\n};\n","import { FC, useRef, type PropsWithChildren } from \"react\";\nimport { useEndReached } from \"./useEndReached\";\n\nexport interface EndReachedBoxProps {\n onEndReached?: () => void;\n // className?: string;\n}\n\nexport const EndReachedBox: FC<PropsWithChildren<EndReachedBoxProps>> = (\n props,\n) => {\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n const { onEndReached } = props;\n\n useEndReached(sentinelRef, () => {\n onEndReached?.();\n });\n\n return (\n <>\n {props.children}\n <div\n ref={sentinelRef}\n className=\"oui-relative oui-invisible oui-h-[25px] oui-bg-red-400 oui-top-[-300px]\"\n />\n </>\n );\n};\n","import { useEffect, useRef, MutableRefObject } from \"react\";\n\n/**\n * Listen for the specified element to scroll to the bottom\n */\nexport function useEndReached(\n sentinelRef: MutableRefObject<HTMLDivElement | null>,\n onEndReached?: () => void,\n) {\n const observer = useRef<IntersectionObserver>();\n const cb = useRef(onEndReached);\n\n cb.current = onEndReached;\n\n useEffect(() => {\n const options: IntersectionObserverInit = {\n root: null,\n rootMargin: \"0px\",\n threshold: 0,\n };\n\n const handleObserver = (entries: IntersectionObserverEntry[]) => {\n console.log(\">>>>>>>>handleObserver\", entries);\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n cb.current?.();\n }\n });\n };\n\n observer.current = new IntersectionObserver(handleObserver, options);\n\n return () => {\n // console.log(\"------->disconnect\");\n observer.current?.disconnect();\n };\n }, []);\n\n useEffect(() => {\n observer.current?.observe(sentinelRef.current!);\n }, []);\n}\n","import { FC } from \"react\";\nimport { useBoolean } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n SimpleDialog,\n SimpleSheet,\n Text,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { FundingFeeHistoryUI } from \"./fundingFeeHistory.ui\";\n\nexport const FundingFeeButton: FC<{\n fee: number;\n symbol: string;\n start_t: string;\n end_t: string;\n}> = ({ fee, symbol, start_t, end_t }) => {\n const { t } = useTranslation();\n const [isOpen, { setTrue, setFalse }] = useBoolean(false);\n const { isMobile } = useScreen();\n\n return (\n <>\n <button onClick={setTrue}>\n <Text.numeral\n rule=\"price\"\n coloring\n showIdentifier\n ignoreDP\n className=\"oui-border-b oui-border-line-16 oui-border-dashed oui-py-0.5\"\n >\n {fee}\n </Text.numeral>\n </button>\n {isMobile ? (\n <SimpleSheet\n open={isOpen}\n onOpenChange={setFalse}\n title={t(\"funding.fundingFee\")}\n classNames={{\n body: \"oui-max-h-[80vh] oui-py-0\",\n }}\n >\n <FundingFeeHistoryUI\n total={fee}\n symbol={symbol}\n start_t={start_t}\n end_t={end_t}\n />\n </SimpleSheet>\n ) : (\n <SimpleDialog\n open={isOpen}\n onOpenChange={setFalse}\n title={t(\"funding.fundingFee\")}\n classNames={{\n content: \"lg:oui-max-w-[640px]\",\n body: \"oui-max-h-[80vh] oui-bg-base-8 lg:oui-py-0\",\n }}\n >\n <FundingFeeHistoryUI\n total={fee}\n symbol={symbol}\n start_t={start_t}\n end_t={end_t}\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { Table } from \"@kodiak-finance/orderly-ui\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useCombinePositionsScript } from \"./combinePositions.script\";\nimport { usePositionsScript } from \"./positions.script\";\nimport { MobilePositions, Positions, CombinePositions } from \"./positions.ui\";\n\nexport type PositionsInstance = {\n getRowCount?: () => number;\n getDataSource?: () => any[] | null;\n};\n\nexport const PositionsWidget = forwardRef<PositionsInstance, PositionsProps>(\n (props, ref) => {\n const state = usePositionsScript(props);\n const tableRef = React.useRef<Table<any>>(null);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return tableRef.current?.getRowCount?.() ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return <Positions {...state} tableRef={tableRef} />;\n },\n);\n\nPositionsWidget.displayName = \"PositionsWidget\";\n\nexport const MobilePositionsWidget = React.forwardRef<\n PositionsInstance,\n PositionsProps\n>((props, ref) => {\n const state = usePositionsScript(props);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return state.dataSource?.length ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return <MobilePositions {...state} />;\n});\n\nMobilePositionsWidget.displayName = \"MobilePositionsWidget\";\n\nexport const CombinePositionsWidget = forwardRef<\n PositionsInstance,\n PositionsProps\n>((props, ref) => {\n const state = useCombinePositionsScript(props);\n const tableRef = React.useRef<Table<any>>(null);\n\n React.useImperativeHandle(ref, () => ({\n getRowCount: () => {\n return tableRef.current?.getRowCount?.() ?? 0;\n },\n getDataSource: () => {\n // CombinePositions has a different data structure\n return null;\n },\n }));\n\n return <CombinePositions {...state} tableRef={tableRef} />;\n});\n\nCombinePositionsWidget.displayName = \"CombinePositionsWidget\";\n","import { useEffect, useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport {\n SubAccount,\n useAccount,\n usePositionStream,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { positions, account as _account } from \"@kodiak-finance/orderly-perp\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { formatAddress, usePagination } from \"@kodiak-finance/orderly-ui\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useSubAccountQuery } from \"./hooks/useSubAccountQuery\";\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const useCombinePositionsScript = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n selectedAccount,\n } = props;\n\n const { pagination, setPage } = usePagination({ pageSize: 50 });\n\n useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const symbolsInfo = useSymbolsInfo();\n\n const { state } = useAccount();\n\n const [oldPositions, , { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n // need to get sub account Positions info to calculate portfolio and positions\n const {\n data: newPositions = [],\n isLoading: isPositionLoading,\n mutate: mutatePositions,\n } = usePrivateQuery<API.PositionExt[]>(\"/v1/client/aggregate/positions\", {\n // formatter: (data) => data,\n errorRetryCount: 3,\n });\n\n // need to get sub account info to calculate portfolio and positions\n const { data: accountInfo = [], isLoading: isAccountInfoLoading } =\n useSubAccountQuery<API.AccountInfo[]>(\"/v1/client/info\", {\n accountId: newPositions.map((item) => item.account_id!),\n revalidateOnFocus: false,\n });\n\n const processPositions = produce<API.PositionTPSLExt[]>(\n newPositions.filter((acc) => acc.account_id !== state.mainAccountId),\n (draft) => {\n for (const item of draft) {\n const info = symbolsInfo[item.symbol];\n const notional = positions.notional(item.position_qty, item.mark_price);\n const account = accountInfo.find(\n (acc) => acc.account_id === item.account_id,\n );\n const baseMMR = info?.(\"base_mmr\");\n const baseIMR = info?.(\"base_imr\");\n if (!baseMMR || !baseIMR) {\n continue;\n }\n\n const MMR = positions.MMR({\n baseMMR,\n baseIMR,\n IMRFactor: account?.imr_factor[item.symbol] ?? 0,\n positionNotional: notional,\n IMR_factor_power: 4 / 5,\n });\n\n const mm = positions.maintenanceMargin({\n positionQty: item.position_qty,\n markPrice: item.mark_price,\n MMR,\n });\n\n const unrealPnl = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: item.mark_price,\n });\n\n const maxLeverage = item.leverage || 1;\n\n const imr = _account.IMR({\n maxLeverage,\n baseIMR,\n IMR_Factor: account?.imr_factor[item.symbol] ?? 0,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const unrealPnlROI = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl,\n });\n\n let unrealPnl_index = 0;\n let unrealPnlROI_index = 0;\n if (item.index_price) {\n unrealPnl_index = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: item.index_price,\n });\n unrealPnlROI_index = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl_index,\n });\n }\n item.mmr = MMR;\n item.mm = mm;\n item.notional = notional;\n item.unrealized_pnl = unrealPnl;\n item.unrealized_pnl_ROI = unrealPnlROI;\n item.unrealized_pnl_ROI_index = unrealPnlROI_index;\n }\n },\n );\n\n const dataSource =\n useDataTap(\n [...oldPositions?.rows, ...processPositions].filter(\n (acc) => acc.position_qty !== 0,\n ),\n ) ?? [];\n\n const filtered = useMemo(() => {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return dataSource;\n }\n return dataSource.filter((item) => {\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId || !item.account_id;\n } else {\n return item.account_id === selectedAccount;\n }\n });\n }, [dataSource, selectedAccount, state.mainAccountId]);\n\n const groupDataSource = useMemo(() => {\n return groupDataByAccount(filtered, {\n mainAccountId: state.mainAccountId,\n subAccounts: state.subAccounts,\n });\n }, [filtered, state.mainAccountId, state.subAccounts]);\n\n const mergedLoading = useMemo<boolean>(() => {\n return isLoading || isPositionLoading || isAccountInfoLoading;\n }, [isLoading, isPositionLoading, isAccountInfoLoading]);\n\n return {\n tableData: groupDataSource,\n isLoading: mergedLoading,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n onSymbolChange,\n pagination,\n mutatePositions,\n };\n};\n\nexport type CombinePositionsState = ReturnType<\n typeof useCombinePositionsScript\n>;\n\nexport const groupDataByAccount = (\n data: API.PositionExt[],\n options: {\n mainAccountId?: string;\n subAccounts?: SubAccount[];\n },\n) => {\n const { mainAccountId = \"\", subAccounts = [] } = options;\n\n const map = new Map<\n PropertyKey,\n {\n id: string;\n description: string;\n children: API.PositionExt[];\n }\n >();\n\n for (const item of data) {\n // if account_id is not set, as a main account\n const accountId = item.account_id || mainAccountId;\n const findSubAccount = subAccounts.find((acc) => acc.id === accountId);\n if (map.has(accountId)) {\n map.get(accountId)?.children?.push(item);\n } else {\n map.set(accountId, {\n id: accountId,\n description:\n accountId === mainAccountId\n ? i18n.t(\"common.mainAccount\")\n : findSubAccount?.description ||\n formatAddress(findSubAccount?.id || \"\"),\n children: [item],\n });\n }\n }\n return {\n expanded: Array.from(map.keys()),\n dataSource: Array.from(map.values()),\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n type SWRConfiguration,\n type SWRHook,\n type SWRResponse,\n type Middleware,\n useAccount,\n useSWR,\n fetcher,\n useConfig,\n useAccountInstance,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\n\nexport type QueryOptions<T> = SWRConfiguration & {\n formatter?: (data: any) => T;\n accountId?: string | string[];\n};\n\nconst signatureMiddleware = (\n account: ReturnType<typeof useAccountInstance>,\n accountId?: string | string[],\n): Middleware => {\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n // @ts-ignore\n return (useSWRNext: SWRHook) => {\n return (key, fetcher, config) => {\n try {\n const extendedFetcher = async (args: any) => {\n const url = Array.isArray(args) ? args[0] : args;\n const fullUrl = `${apiBaseUrl}${url}`;\n const signer = account.signer;\n const payload: MessageFactor = { method: \"GET\", url };\n const signature = await signer.sign(payload, getTimestamp());\n const ids = Array.isArray(accountId) ? accountId : [accountId];\n return Promise.all(\n ids.map((id) => {\n // @ts-ignore\n return fetcher(fullUrl, {\n headers: {\n ...signature,\n \"orderly-account-id\": id,\n },\n });\n }),\n );\n };\n // @ts-ignore\n return useSWRNext(key, extendedFetcher, config);\n } catch (e) {\n throw e;\n }\n };\n };\n};\n\nexport const useSubAccountQuery = <T>(\n query: Parameters<SWRHook>[0],\n options?: QueryOptions<T>,\n): SWRResponse<T> => {\n const { formatter, accountId, ...swrOptions } = options || {};\n const { state, account } = useAccount();\n const middleware = Array.isArray(options?.use) ? (options?.use ?? []) : [];\n\n const ids = Array.isArray(accountId) ? accountId : [accountId];\n\n const shouldFetch =\n ids.filter(Boolean).length &&\n (state.status >= AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n return useSWR<T>(\n () => (shouldFetch ? [query, ids] : null),\n (url: string, init: RequestInit) => {\n return fetcher(url, init, { formatter });\n },\n {\n ...swrOptions,\n use: [...middleware, signatureMiddleware(account, ids as string[])],\n onError: () => {},\n },\n );\n};\n\nexport type MessageFactor = {\n url: string;\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n data?: any;\n};\n","import React from \"react\";\nimport { usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport { TRADING_POSITIONS_SORT_STORAGE_KEY } from \"../../constants\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useSort } from \"../../utils/sorting\";\nimport { useReversePositionEnabled } from \"../reversePosition\";\nimport { useTabSort, PositionsTabName } from \"../shared/hooks/useTabSort\";\n\nexport const usePositionsScript = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n enableSortingStorage = true, // Default to true for backward compatibility\n } = props;\n // const [showAllSymbol] = useLocalStorage(\n // \"showAllSymbol\",\n // true\n // );\n const { pagination, setPage } = usePagination({ pageSize: 50 });\n\n const { isEnabled: positionReverse } = useReversePositionEnabled();\n\n // Sorting functionality\n const { tabSort, onTabSort } = useTabSort({\n storageKey: TRADING_POSITIONS_SORT_STORAGE_KEY,\n });\n\n const { onSort, getSortedList, sort } = useSort(\n enableSortingStorage ? tabSort?.[PositionsTabName.Positions] : undefined,\n enableSortingStorage ? onTabSort(PositionsTabName.Positions) : undefined,\n );\n\n React.useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const [data, , { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n const rawDataSource =\n useDataTap(data?.rows, { fallbackData: [] }) ?? undefined;\n const dataSource = getSortedList(rawDataSource || []);\n\n return {\n dataSource,\n isLoading, // will be use isLoading when usePositionStream support\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n onSymbolChange,\n pagination,\n onSort,\n positionReverse,\n initialSort: enableSortingStorage\n ? tabSort?.[PositionsTabName.Positions]\n : undefined,\n };\n};\n\nexport type PositionsState = ReturnType<typeof usePositionsScript>;\n","export const TRADING_POSITIONS_SORT_STORAGE_KEY =\n \"orderly_trading_positions_sort\";\n","import { useCallback, useEffect, useState } from \"react\";\nimport { TableSort } from \"@kodiak-finance/orderly-ui\";\nimport { SortType } from \"../types/types\";\n\n/**\n * Compare two values intelligently\n */\nconst compareValues = (aValue: any, bValue: any): number => {\n // Handle null/undefined values (always sort to bottom)\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n\n // Convert to string first for type checking\n const aStr = String(aValue).trim();\n const bStr = String(bValue).trim();\n\n // More robust number detection - check if values can be converted to valid numbers\n const aNum = Number(aStr);\n const bNum = Number(bStr);\n const aIsNumber =\n !isNaN(aNum) && isFinite(aNum) && /^-?\\d*\\.?\\d+([eE][+-]?\\d+)?$/.test(aStr);\n const bIsNumber =\n !isNaN(bNum) && isFinite(bNum) && /^-?\\d*\\.?\\d+([eE][+-]?\\d+)?$/.test(bStr);\n\n if (aIsNumber && bIsNumber) {\n return aNum - bNum;\n }\n\n // Check if both are valid dates (ISO format or timestamp)\n const aIsDate = /^\\d{4}-\\d{2}-\\d{2}/.test(aStr) || /^\\d{13}$/.test(aStr);\n const bIsDate = /^\\d{4}-\\d{2}-\\d{2}/.test(bStr) || /^\\d{13}$/.test(bStr);\n\n if (aIsDate && bIsDate) {\n const aDate = new Date(aValue);\n const bDate = new Date(bValue);\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\n return aDate.getTime() - bDate.getTime();\n }\n }\n\n // String comparison - use localeCompare for proper string sorting\n return aStr.localeCompare(bStr, undefined, {\n sensitivity: \"base\",\n numeric: false,\n });\n};\n\nexport function sortList(list: any[], sort?: SortType) {\n const { sortKey, sortOrder } = sort || {};\n const sortedList = [...(list || [])];\n\n if (sortKey && sortOrder) {\n // sort list\n sortedList.sort((a: any, b: any) => {\n const comparison = compareValues(a[sortKey], b[sortKey]);\n // Handle sort order: desc means reverse the comparison result\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n }\n return sortedList;\n}\n\nexport function useSort(\n initialSort?: SortType,\n onSortChange?: (sort?: SortType) => void,\n) {\n const [sort, setSort] = useState<SortType | undefined>(initialSort);\n\n const onSort = useCallback((options?: TableSort) => {\n const nextSort = options\n ? {\n sortKey: options.sortKey,\n sortOrder: options.sort,\n }\n : undefined;\n\n setSort(nextSort);\n onSortChange?.(nextSort);\n // initialSort, onSortChange is not needed to be in the dependency array, otherwise it will cause infinite loop\n }, []);\n\n const getSortedList = useCallback(\n (list: any[]) => sortList(list, sort),\n [sort],\n );\n\n return {\n sort,\n onSort,\n getSortedList,\n };\n}\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport {\n ArrowDownShortIcon,\n ArrowUpShortIcon,\n Badge,\n Divider,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderInfoCard } from \"./OrderInfoCard.ui\";\nimport type { ReversePositionState } from \"./reversePosition.script\";\n\nexport type ReversePositionProps = ReversePositionState & {\n className?: string;\n style?: React.CSSProperties;\n onConfirm?: () => Promise<void>;\n onCancel?: () => void;\n};\n\nexport const ReversePosition: FC<ReversePositionProps> = (props) => {\n const { displayInfo, className, style, onConfirm, onCancel } = props;\n const { t } = useTranslation();\n\n if (!displayInfo) {\n return null;\n }\n\n const {\n symbol,\n base,\n quote,\n baseDp,\n quoteDp,\n positionQty,\n reverseQty,\n markPrice,\n leverage,\n isLong,\n } = displayInfo;\n\n // Determine side badges\n const closeSide = !isLong ? OrderSide.SELL : OrderSide.BUY;\n const openSide = isLong ? OrderSide.SELL : OrderSide.BUY;\n\n // UI display text translations\n const closeAction = isLong\n ? t(\"positions.reverse.marketCloseLong\")\n : t(\"positions.reverse.marketCloseShort\");\n const openAction =\n openSide === OrderSide.BUY\n ? t(\"positions.reverse.marketOpenLong\")\n : t(\"positions.reverse.marketOpenShort\");\n const reverseTo = isLong\n ? t(\"positions.reverse.reverseToShort\")\n : t(\"positions.reverse.reverseToLong\");\n\n const reverseToIcon = isLong ? (\n <ArrowDownShortIcon size={16} color=\"danger\" opacity={1} />\n ) : (\n <ArrowUpShortIcon size={16} color=\"success\" opacity={1} />\n );\n const priceLabel = (\n <Flex itemAlign=\"center\" gap={1}>\n <Text.numeral dp={quoteDp} size=\"sm\" intensity={80}>\n {markPrice}\n </Text.numeral>\n <Text size=\"sm\" intensity={36}>\n {quote}\n </Text>\n </Flex>\n );\n\n return (\n <Flex\n direction=\"column\"\n className={className}\n style={style}\n gap={4}\n width=\"100%\"\n >\n {/* Symbol and Reverse To Badge */}\n <Flex direction=\"column\" gap={2} width=\"100%\">\n <Flex justify=\"between\" itemAlign=\"center\" width=\"100%\">\n <Text.formatted\n size=\"base\"\n weight=\"semibold\"\n rule=\"symbol\"\n formatString=\"base-type\"\n intensity={98}\n showIcon\n >\n {symbol}\n </Text.formatted>\n\n <Badge color={isLong ? \"sell\" : \"buy\"} size=\"xs\">\n {reverseTo}\n </Badge>\n </Flex>\n\n {/* Mark Price */}\n <Flex justify=\"between\" itemAlign=\"center\" width=\"100%\">\n <Text size=\"sm\" intensity={54}>\n {t(\"common.markPrice\")}\n </Text>\n {priceLabel}\n </Flex>\n </Flex>\n\n <Divider intensity={4} className=\"oui-w-full\" />\n\n {/* Close Position Section */}\n <OrderInfoCard\n title={closeAction}\n side={closeSide}\n leverage={leverage}\n qty={positionQty}\n baseDp={baseDp}\n />\n\n <Flex direction=\"row\" itemAlign=\"center\" width=\"100%\">\n <Divider intensity={8} className=\"oui-w-full\" />\n <Flex className=\"oui-px-4 oui-py-[3px] oui-border oui-border-base-contrast-12 oui-rounded-full oui-shrink-0\">\n {reverseToIcon}\n <Text size=\"2xs\" color={isLong ? \"danger\" : \"success\"}>\n {reverseTo}\n </Text>\n </Flex>\n <Divider intensity={8} className=\"oui-w-full\" />\n </Flex>\n\n {/* Open Position Section */}\n <OrderInfoCard\n title={openAction}\n side={openSide}\n leverage={leverage}\n qty={reverseQty}\n baseDp={baseDp}\n />\n\n {/* Reverse To Description */}\n <Text size=\"2xs\" color=\"warning\" weight=\"semibold\">\n {t(\"positions.reverse.description\")}\n </Text>\n </Flex>\n );\n};\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { Badge, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport interface OrderInfoCardProps {\n /** Order title */\n title: string;\n /** Order side */\n side: OrderSide;\n /** Leverage multiplier */\n leverage: number;\n /** Quantity */\n qty: string;\n /** Base decimal places */\n baseDp: number;\n /** Price label, defaults to \"Market\" */\n estLiqPrice?: React.ReactNode;\n /** Custom class name */\n className?: string;\n}\n\n/**\n * Order info card component\n * Displays detailed order information including title, side, leverage, quantity, and price\n */\nexport const OrderInfoCard: FC<OrderInfoCardProps> = ({\n title,\n side,\n leverage,\n qty,\n baseDp,\n estLiqPrice,\n className,\n}) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n direction=\"column\"\n gap={3}\n itemAlign=\"start\"\n className={`oui-bg-base-6 oui-rounded-lg oui-p-3 oui-w-full oui-font-weight-semibold ${className || \"\"}`}\n >\n <Flex justify=\"between\" itemAlign=\"center\" gap={2}>\n <Text size=\"sm\" weight=\"semibold\" intensity={98}>\n {title}\n </Text>\n <Flex itemAlign=\"center\" gap={1}>\n <Badge color={side === OrderSide.SELL ? \"sell\" : \"buy\"} size=\"xs\">\n {side === OrderSide.SELL ? t(\"common.sell\") : t(\"common.buy\")}\n </Badge>\n <Badge color=\"neutral\" size=\"xs\">\n {leverage}X\n </Badge>\n </Flex>\n </Flex>\n\n {/* Order Info */}\n <Flex\n direction=\"column\"\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n >\n <Flex\n direction=\"row\"\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n gap={1}\n >\n <Text size=\"sm\" intensity={54}>\n {t(\"common.qty\")}\n </Text>\n <Text.numeral dp={baseDp} size=\"sm\" color=\"danger\" padding={false}>\n {qty}\n </Text.numeral>\n </Flex>\n <Flex\n direction=\"row\"\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n gap={1}\n >\n <Text size=\"sm\" intensity={54}>\n {t(\"common.price\")}\n </Text>\n <Text size=\"sm\" weight=\"semibold\">\n {t(\"common.market\")}\n </Text>\n </Flex>\n {estLiqPrice && (\n <Flex\n direction=\"row\"\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n gap={1}\n >\n <Text size=\"sm\" intensity={54}>\n {t(\"orderEntry.estLiqPrice\")}\n </Text>\n <Text size=\"sm\" weight=\"semibold\">\n {estLiqPrice}\n </Text>\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n useLocalStorage,\n useMarkPrice,\n useMaxQty,\n useSubAccountMutation,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { usePositionsRowContext } from \"../positions/positionsRowContext\";\n\nexport interface UseReversePositionScriptOptions {\n position: API.PositionExt | API.PositionTPSLExt;\n onSuccess?: () => void;\n onError?: (error: any) => void;\n}\n\n/**\n * Hook for managing reverse position enabled state\n * Separates desktop and mobile preferences internally\n */\nexport const useReversePositionEnabled = () => {\n const { isMobile, isDesktop } = useScreen();\n\n // Preference storage for desktop and mobile separately\n const [desktopEnabled, setDesktopEnabled] = useLocalStorage(\n \"orderly_reverse_position_enabled_desktop\",\n true,\n );\n const [mobileEnabled, setMobileEnabled] = useLocalStorage(\n \"orderly_reverse_position_enabled_mobile\",\n false,\n );\n\n // Get current preference based on platform\n const isEnabled = useMemo(() => {\n if (isMobile) {\n return mobileEnabled;\n }\n if (isDesktop) {\n return desktopEnabled;\n }\n return false;\n }, [isMobile, isDesktop, desktopEnabled, mobileEnabled]);\n\n // Set enabled state based on current platform\n const setEnabled = useCallback(\n (enabled: boolean) => {\n if (isMobile) {\n setMobileEnabled(enabled);\n } else if (isDesktop) {\n setDesktopEnabled(enabled);\n }\n },\n [isMobile, isDesktop, setMobileEnabled, setDesktopEnabled],\n );\n\n return {\n isEnabled,\n setEnabled,\n };\n};\n\nexport const useReversePositionScript = (\n options?: UseReversePositionScriptOptions,\n) => {\n const { position, onSuccess, onError } = options || {};\n const { t } = useTranslation();\n const { isEnabled, setEnabled } = useReversePositionEnabled();\n\n const symbolsInfo = useSymbolsInfo();\n const symbol = position?.symbol || \"\";\n const { data: symbolMarketPrice } = useMarkPrice(symbol);\n const symbolInfo = symbolsInfo?.[symbol];\n\n // Calculate reverse order quantity\n const positionQty = useMemo(() => {\n if (!position) return 0;\n return Math.abs(position.position_qty);\n }, [position]);\n\n // Determine current position side\n const isLong = useMemo(() => {\n if (!position) return false;\n return position.position_qty > 0;\n }, [position]);\n\n // Calculate max quantity for opening opposite position\n const oppositeSide = useMemo(() => {\n return isLong ? OrderSide.SELL : OrderSide.BUY;\n }, [isLong]);\n\n const maxOpenQty = useMaxQty(symbol, oppositeSide, false);\n\n // Calculate actual reverse quantity (use max available if insufficient margin)\n const reverseQty = useMemo(() => {\n if (!position) return 0;\n const desiredQty = positionQty;\n // If margin is insufficient, use maximum available\n if (desiredQty > maxOpenQty && maxOpenQty > 0) {\n return maxOpenQty;\n }\n return desiredQty;\n }, [positionQty, maxOpenQty]);\n\n const [doCreateOrder, { isMutating }] = useSubAccountMutation(\n \"/v1/order\",\n \"POST\",\n {\n accountId: position?.account_id,\n },\n );\n\n // Reverse position logic\n const reversePosition = useCallback(async () => {\n if (!position || positionQty === 0) {\n toast.error(\"No position to reverse\");\n return false;\n }\n\n try {\n // Step 1: Close current position (market order with reduce_only)\n const closeSide = isLong ? OrderSide.SELL : OrderSide.BUY;\n const closeOrder = await doCreateOrder({\n symbol: position.symbol,\n order_type: OrderType.MARKET,\n side: closeSide,\n order_quantity: new Decimal(positionQty).toString(),\n reduce_only: true,\n });\n\n // if (!closeOrder.success) {\n // throw new Error(closeOrder.message || \"Failed to close position\");\n // }\n\n // Step 2: Open opposite position (market order without reduce_only)\n const openSide = isLong ? OrderSide.SELL : OrderSide.BUY;\n const openOrder = await doCreateOrder({\n symbol: position.symbol,\n order_type: OrderType.MARKET,\n side: openSide,\n order_quantity: new Decimal(reverseQty).toString(),\n reduce_only: false,\n });\n\n if (!openOrder.success) {\n throw new Error(\n openOrder.message || \"Failed to open opposite position\",\n );\n }\n\n onSuccess?.();\n\n return true;\n } catch (error: any) {\n // if (error?.message !== undefined) {\n // toast.error(error.message);\n // } else {\n // toast.error(\"Failed to reverse position\");\n // }\n onError?.(error);\n return false;\n }\n }, [position, positionQty, reverseQty, isLong, doCreateOrder, t, onSuccess]);\n\n // Get display information\n const displayInfo = useMemo(() => {\n if (!position || !symbolInfo) {\n return null;\n }\n\n const base = symbolInfo(\"base\");\n const quote = symbolInfo(\"quote\");\n const baseDp = symbolInfo(\"base_dp\");\n const quoteDp = symbolInfo(\"quote_dp\");\n const leverage = position.leverage || 1;\n\n return {\n symbol: position.symbol,\n base,\n quote,\n baseDp,\n quoteDp,\n positionQty: new Decimal(positionQty).todp(baseDp).toString(),\n reverseQty: new Decimal(reverseQty).todp(baseDp).toString(),\n markPrice: symbolMarketPrice\n ? new Decimal(symbolMarketPrice).todp(quoteDp).toString()\n : \"--\",\n leverage,\n isLong,\n };\n }, [\n position,\n symbolMarketPrice,\n symbolInfo,\n positionQty,\n reverseQty,\n isLong,\n ]);\n\n return {\n isEnabled,\n setEnabled,\n reversePosition,\n isReversing: isMutating,\n displayInfo,\n positionQty,\n reverseQty,\n isLong,\n };\n};\n\nexport type ReversePositionState = ReturnType<typeof useReversePositionScript>;\n","import React, { useMemo } from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n registerSimpleDialog,\n SimpleDialog,\n useModal,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useReversePositionScript } from \"./reversePosition.script\";\nimport { ReversePosition } from \"./reversePosition.ui\";\n\nexport type ReversePositionWidgetProps = {\n position: API.PositionExt | API.PositionTPSLExt;\n close?: () => void;\n resolve?: (value?: any) => void;\n reject?: (reason?: any) => void;\n};\n\nexport const ReversePositionWidget: React.FC<ReversePositionWidgetProps> = (\n props,\n) => {\n const { position, close, resolve, reject } = props;\n const { t } = useTranslation();\n const { visible, hide, onOpenChange } = useModal();\n\n const state = useReversePositionScript({\n position,\n onSuccess: () => {\n resolve?.(true);\n hide();\n },\n onError: (error: any) => {\n reject?.(error);\n hide();\n },\n });\n\n const actions = useMemo(() => {\n return {\n primary: {\n label: t(\"common.confirm\"),\n onClick: async () => {\n try {\n const result = await state.reversePosition();\n if (result) {\n resolve?.(true);\n hide();\n return true;\n } else {\n reject?.(false);\n return false;\n }\n } catch (error) {\n reject?.(error);\n throw error;\n }\n },\n loading: state.isReversing,\n disabled: state.isReversing || !state.displayInfo,\n },\n secondary: {\n label: t(\"common.cancel\"),\n onClick: async () => {\n reject?.(\"cancel\");\n hide();\n return false;\n },\n },\n };\n }, [state, t, resolve, reject, hide]);\n\n // Create our own SimpleDialog to handle actions\n // Note: This will be wrapped by registerSimpleDialog's SimpleDialog\n // We need to override the wrapper's SimpleDialog behavior\n return (\n <SimpleDialog\n open={visible}\n onOpenChange={onOpenChange}\n size=\"sm\"\n title={i18n.t(\"positions.reverse.title\")}\n classNames={{\n content: \"oui-border oui-border-line-6\",\n }}\n actions={actions}\n >\n <ReversePosition {...state} />\n </SimpleDialog>\n );\n};\n\nexport const ReversePositionDialogId = \"ReversePositionDialogId\";\n\nregisterSimpleDialog<ReversePositionWidgetProps>(\n ReversePositionDialogId,\n ReversePositionWidget,\n {\n size: \"sm\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n title: () => i18n.t(\"positions.reverse.title\"),\n },\n);\n","import { useCallback } from \"react\";\nimport { useSessionStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { SortType } from \"../../../types/types\";\n\nexport enum PositionsTabName {\n Positions = \"positions\",\n PositionHistory = \"positionHistory\",\n}\n\nexport function useTabSort(options: { storageKey: string }) {\n const [tabSort, setTabSort] = useSessionStorage(options.storageKey, {\n [PositionsTabName.Positions]: {\n sortKey: \"unrealized_pnl\",\n sortOrder: \"desc\",\n },\n [PositionsTabName.PositionHistory]: {\n sortKey: \"close_timestamp\",\n sortOrder: \"desc\",\n },\n } as Record<PositionsTabName, SortType>);\n\n const onTabSort = useCallback(\n (type: PositionsTabName) => (sort?: SortType) => {\n setTabSort({ ...tabSort, [type]: sort });\n },\n [tabSort, setTabSort],\n );\n\n return {\n tabSort,\n onTabSort,\n };\n}\n","import React from \"react\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n formatAddress,\n ListView,\n Table,\n TableFeatures,\n Flex,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { SymbolProvider } from \"../../provider/symbolProvider\";\nimport type { PositionsProps } from \"../../types/types\";\nimport type { CombinePositionsState } from \"./combinePositions.script\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport type { PositionsState } from \"./positions.script\";\nimport { PositionsRowProvider } from \"./positionsRowProvider\";\n\nexport const Positions: React.FC<\n Readonly<PositionsState & { tableRef?: React.RefObject<Table<any>> }>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n dataSource,\n onSymbolChange,\n positionReverse,\n tableRef,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n positionReverse,\n });\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" gap={3}>\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n bordered\n dataSource={dataSource}\n generatedRowKey={(record: any) => record.symbol}\n renderRowContainer={(record: any, index: number, children: any) => {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider position={record}>\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }}\n manualPagination={false}\n pagination={pagination}\n manualSorting={true}\n onSort={props.onSort}\n initialSort={\n props.initialSort\n ? {\n sortKey: props.initialSort.sortKey,\n sort: props.initialSort.sortOrder,\n }\n : undefined\n }\n features={[TableFeatures.DownloadFeature]}\n getTableInstance={(table) => {\n if (tableRef) {\n (tableRef as any).current = table;\n }\n }}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobilePositions: React.FC<\n Readonly<PositionsState & PositionsProps>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n dataSource,\n onSymbolChange,\n positionReverse,\n } = props;\n return (\n <ListView\n className=\"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionsRowProvider position={item}>\n <PositionCellWidget\n item={item}\n index={index}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n sharePnLConfig={sharePnLConfig}\n onSymbolChange={onSymbolChange}\n positionReverse={positionReverse}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n\nexport const CombinePositions: React.FC<\n Readonly<CombinePositionsState & { tableRef?: React.RefObject<Table<any>> }>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n tableData,\n onSymbolChange,\n mutatePositions,\n tableRef,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n const { dataSource = [] } = tableData;\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" gap={3}>\n <AuthGuardDataTable<any>\n bordered\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n dataSource={dataSource}\n expanded\n getSubRows={(row) => row.children}\n generatedRowKey={(record) => record.id}\n onCell={(column, record) => {\n const isGroup = (record.children ?? []).length > 0;\n if (isGroup) {\n return {\n children:\n column.id === \"symbol\" ? (\n <Badge color=\"neutral\" size=\"xs\">\n {record?.description || formatAddress(record?.id)}\n </Badge>\n ) : null,\n };\n }\n }}\n renderRowContainer={(record: any, index: number, children: any) => {\n if (record.symbol) {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider\n position={record}\n mutatePositions={mutatePositions}\n >\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }\n return children;\n }}\n manualPagination={false}\n pagination={pagination}\n features={[TableFeatures.DownloadFeature]}\n getTableInstance={(table) => {\n if (tableRef) {\n (tableRef as any).current = table;\n }\n }}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n </Flex>\n );\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { SymbolContext, SymbolContextState } from \"./symbolContext\";\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props,\n) => {\n const { symbol, children } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n const memoizedValue = useMemo<SymbolContextState>(() => {\n return {\n symbol: symbol,\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\"),\n };\n }, [symbol, symbolInfo]);\n return (\n <SymbolContext.Provider value={memoizedValue}>\n {children}\n </SymbolContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\n\nexport interface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext<SymbolContextState>(\n {} as SymbolContextState,\n);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n","import { useMemo, useRef } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SymbolLeverageDialogId } from \"@kodiak-finance/orderly-ui-leverage\";\nimport {\n SharePnLOptions,\n SharePnLDialogId,\n} from \"@kodiak-finance/orderly-ui-share\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { RwaStatusTag } from \"../../rwaStatus/rwaStatus\";\nimport { ClosePositionWidget } from \"../closePosition\";\nimport { LeverageBadge } from \"./components\";\nimport { renderQuantity } from \"./listElement\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { PartialTPSL } from \"./partialTPSL\";\nimport { ReversePositionButton } from \"./reversePotisionButton\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\n\ninterface ColumnConfig {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLOptions;\n onSymbolChange?: (symbol: API.Symbol) => void;\n positionReverse?: boolean;\n}\n\nexport const useColumn = (config: ColumnConfig) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n positionReverse,\n } = config;\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n const column = useMemo<Column<API.PositionTPSLExt>[]>(\n () => [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 200,\n onSort: (r1, r2) => {\n return r1.symbol?.localeCompare(r2.symbol || \"\");\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-h-[38px] oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <Flex gap={1}>\n <LeverageBadge\n symbol={value}\n leverage={record.leverage}\n modalId={SymbolLeverageDialogId}\n />\n <RwaStatusTag symbol={value} />\n </Flex>\n </Flex>\n </Flex>\n ),\n },\n {\n title: t(\"common.quantity\"),\n dataIndex: \"position_qty\",\n // onSort: true,\n onSort: (a, b) => {\n return a.position_qty - b.position_qty;\n },\n width: 120,\n className: \"oui-pl-6\",\n // rule: \"price\",\n // numeralProps: {\n // coloring: true,\n // // tick: \"base_dp\",\n // },\n render: renderQuantity,\n // render: (value: string) => (\n // <NumeralWithCtx\n // coloring\n // className=\"oui-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: t(\"common.avgOpen\"),\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: t(\"common.markPrice\"),\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n render: (value: string) => {\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={t(\"positions.column.liqPrice.tooltip\")}\n >\n <Text>{t(\"positions.column.liqPrice\")}</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n dataIndex: \"est_liq_price\",\n render: (value: string) => {\n return Number(value) === 0 ? (\n \"--\"\n ) : (\n <NumeralWithCtx\n rm={Decimal.ROUND_DOWN}\n className={Number(value) > 0 ? \"oui-text-warning-light\" : \"\"}\n >\n {value ?? \"--\"}\n </NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <HoverCard\n content={<UnrealizedPnLPopoverCard />}\n side=\"top\"\n align=\"center\"\n className=\"oui-max-w-[280px] oui-text-2xs\"\n >\n <Text>{t(\"common.unrealizedPnl\")}</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 180,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.pnl\n dp={pnlNotionalDecimalPrecision}\n coloring\n className=\"oui-font-semibold\"\n >\n {value}\n </Text.pnl>\n <Text.roi\n rule=\"percentages\"\n dp={pnlNotionalDecimalPrecision}\n coloring\n className=\"oui-font-semibold\"\n prefix=\"(\"\n suffix=\")\"\n >\n {record.unrealized_pnl_ROI}\n </Text.roi>\n </Flex>\n <ShareButtonWidget\n position={record}\n sharePnLConfig={sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: t(\"common.fullTPSL\"),\n dataIndex: \"full_tpsl\",\n width: 150,\n render: (_: string, record) => {\n return (\n <TriggerPrice\n stopLossPrice={record.full_tp_sl?.sl_trigger_price}\n takeProfitPrice={record.full_tp_sl?.tp_trigger_price}\n />\n );\n },\n },\n\n {\n title: t(\"common.partialTPSL\"),\n dataIndex: \"partial_tpsl\",\n width: 150,\n render: (_: string, record) => (\n <PartialTPSL\n orderNum={record.partial_tp_sl?.order_num}\n tpTriggerPrice={record.partial_tp_sl?.tp_trigger_price}\n slTriggerPrice={record.partial_tp_sl?.sl_trigger_price}\n />\n ),\n },\n {\n title: t(\"common.notional\"),\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.notional dp={pnlNotionalDecimalPrecision}>\n {value}\n </Text.notional>\n ),\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-rounded-sm oui-bg-base-8 oui-text-base-contrast-54\"\n >\n <span>{t(\"positions.column.margin.tooltip\")}</span>\n <Divider className=\"oui-w-full\" />\n <span>{t(\"positions.column.margin.formula\")}</span>\n </Flex>\n }\n >\n <Text>{t(\"positions.column.margin\")}</Text>\n </Tooltip>\n ),\n dataIndex: \"mm\",\n onSort: true,\n width: 100,\n rule: \"price\",\n render: (value: string) => <Text.numeral>{value}</Text.numeral>,\n },\n // {\n // title: t(\"funding.fundingFee\"),\n // dataIndex: \"fundingFee\",\n // width: 100,\n // render: (value, record) => (\n // <FundingFeeButton\n // fee={value}\n // symbol={record.symbol}\n // start_t={record.timestamp.toString()}\n // end_t={fundingFeeEndTime.current}\n // />\n // ),\n // },\n // {\n // title: t(\"common.qty\"),\n // dataIndex: \"close_qty\",\n // width: 100,\n // fixed: \"right\",\n // render: renderQuantityInput,\n // },\n // {\n // title: t(\"common.price\"),\n // dataIndex: \"close_price\",\n // width: 100,\n // fixed: \"right\",\n // render: renderPriceInput,\n // // render: (value: string) => <PriceInput />,\n // },\n {\n title: null,\n dataIndex: \"close_position\",\n align: \"right\",\n width: positionReverse ? 100 : 70,\n fixed: \"right\",\n render(_, record) {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <ClosePositionWidget />\n {positionReverse && <ReversePositionButton position={record} />}\n </Flex>\n );\n },\n },\n ],\n [pnlNotionalDecimalPrecision, sharePnLConfig, t, positionReverse],\n );\n return column;\n};\n","import { useGetRwaSymbolOpenStatus } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport const RwaStatusTag = ({ symbol }: { symbol: string }) => {\n const { isRwa, open } = useGetRwaSymbolOpenStatus(symbol);\n const { t } = useTranslation();\n\n if (!isRwa) {\n return null;\n }\n\n return (\n <Flex\n r=\"base\"\n px={2}\n height={18}\n className={cn(\n \"oui-shrink-0\",\n open ? \"oui-bg-success/15\" : \"oui-bg-danger/15\",\n )}\n >\n <Text size=\"2xs\" color={open ? \"success\" : \"danger\"}>\n {open\n ? t(\"trading.rwa.marketHours\")\n : t(\"trading.rwa.outsideMarketHours\")}\n </Text>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Text,\n ThrottledButton,\n} from \"@kodiak-finance/orderly-ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const MobileClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n base,\n base_dp,\n quote,\n quote_dp,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n quantity,\n price,\n submitting,\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n position,\n maxQty,\n isBuy,\n } = props;\n const { t } = useTranslation();\n\n const title = isMarketClose\n ? t(\"positions.marketClose\")\n : t(\"positions.limitClose\");\n\n const orderType = isMarketClose\n ? t(\"orderEntry.orderType.market\")\n : t(\"orderEntry.orderType.limit\");\n\n const orderSide = isBuy ? (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n );\n\n const header = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {position.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {orderType}\n </Badge>\n {orderSide}\n </Flex>\n </Flex>\n );\n\n const lastPrice = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>{t(\"common.lastPrice\")}</Text>\n <Text.numeral dp={quote_dp} suffix={<Text intensity={36}> {quote}</Text>}>\n {position.mark_price}\n </Text.numeral>\n </Flex>\n );\n\n const inputForm = !isMarketClose && (\n <>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix={t(\"common.price\")}\n suffix={quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n inputMode=\"decimal\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Input.tooltip\n prefix={t(\"common.quantity\")}\n suffix={base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n inputMode=\"decimal\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n </Flex>\n </>\n );\n\n const slider = (\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n );\n\n const footer = (\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button fullWidth color=\"secondary\" onClick={props.onCloseSheet}>\n {t(\"common.cancel\")}\n </Button>\n\n <ThrottledButton\n fullWidth\n disabled={submitting || disabled}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onDoubleConfirm();\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setSheetOpen(true);\n }}\n >\n {title}\n </Button>\n\n <SimpleSheet title={title} open={sheetOpen} onOpenChange={setSheetOpen}>\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n {header}\n <Divider className=\"oui-w-full\" />\n {lastPrice}\n {inputForm}\n {slider}\n {footer}\n </Flex>\n </SimpleSheet>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn, Flex, Slider, Text } from \"@kodiak-finance/orderly-ui\";\n\ntype QuantitySliderProps = {\n value: number;\n onValueChange: (value: number) => void;\n base_dp: number;\n max: number;\n onMax: () => void;\n};\n\nexport const QuantitySlider = (props: QuantitySliderProps) => {\n const { t } = useTranslation();\n const [sliderValue, setSliderValue] = useState(props.value);\n\n useEffect(() => {\n setSliderValue(props.value);\n }, [props.value]);\n\n return (\n <>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n {[25, 50, 75, 100].map((e, index) => (\n <Button\n key={index}\n variant={\"outlined\"}\n size={\"xs\"}\n color=\"secondary\"\n onClick={() => {\n props.onValueChange(e);\n setSliderValue(e);\n }}\n className={cn(\n \"oui-w-1/4\",\n sliderValue === e ? \"oui-border-primary oui-text-primary\" : \"\",\n )}\n >{`${e}%`}</Button>\n ))}\n </Flex>\n <Slider\n showTip\n markCount={4}\n min={0}\n max={100}\n value={[props.value]}\n color=\"primary\"\n onValueChange={(value) => {\n props.onValueChange(value[0]);\n setSliderValue(value[0]);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text color=\"primary\" size=\"2xs\">{`${props.value}%`}</Text>\n <Flex gap={1} onClick={props.onMax} className=\"oui-cursor-pointer\">\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral\n intensity={54}\n size=\"2xs\"\n dp={props.base_dp}\n padding={false}\n >\n {props.max}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n PopoverContent,\n PopoverRoot,\n PopoverTrigger,\n Select,\n SimpleDialog,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n ConfirmFooter,\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const DesktopClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n position,\n base,\n base_dp,\n quote_dp,\n price,\n quantity,\n submitting,\n dialogOpen,\n setDialogOpen,\n isMarketClose,\n popoverOpen,\n setPopoverOpen,\n maxQty,\n quantityErrorMsg,\n priceErrorMsg,\n isEntirePosition,\n } = props;\n\n const { t } = useTranslation();\n\n // const disabled = isMarketClose ? !quantity : !price || !quantity;\n\n const quantityForm = (\n <Flex width=\"100%\" gap={2} mb={1}>\n <Input.tooltip\n ref={props.quantityInputRef}\n prefix={t(\"common.quantity\")}\n suffix={\n isEntirePosition ? (\n <Text\n size=\"2xs\"\n intensity={54}\n className=\"oui-cursor-pointer oui-px-3\"\n onClick={props.onEntirePosition}\n >\n {t(\"tpsl.entirePosition\")}\n </Text>\n ) : (\n base\n )\n }\n align=\"right\"\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n inputMode=\"decimal\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={isEntirePosition ? \"\" : quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Button\n onClick={props.onMax}\n size=\"md\"\n variant=\"outlined\"\n className={cn(\n \"oui-text-2xs\",\n isEntirePosition\n ? \"oui-border-primary-light oui-text-primary-light hover:oui-bg-primary-light/20\"\n : \"oui-border-line-12 oui-bg-base-6 oui-text-base-contrast-54 hover:oui-bg-base-5\",\n )}\n >\n {t(\"common.position\")}\n </Button>\n </Flex>\n );\n\n const suffix = (\n <Select.options\n variant=\"text\"\n size=\"md\"\n options={[\n {\n label: t(\"orderEntry.orderType.limit\"),\n value: OrderType.LIMIT,\n },\n {\n label: t(\"orderEntry.orderType.market\"),\n value: OrderType.MARKET,\n },\n ]}\n classNames={{\n // set the width of the trigger to the width of the content\n trigger: \"oui-w-[--radix-select-content-available-width]\",\n }}\n value={props.type}\n onValueChange={(value) => {\n props.updateOrderType(value as OrderType);\n }}\n contentProps={{\n align: \"end\",\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n\n const disabledInput = isMarketClose;\n\n const priceForm = (\n <Input.tooltip\n suffix={suffix}\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n inputMode=\"decimal\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n placeholder={disabledInput ? \"--\" : \"\"}\n disabled={disabledInput}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n // when disabled, override the outline color\n disabledInput ? \"focus-within:oui-outline-line-12\" : undefined,\n ),\n }}\n />\n );\n\n return (\n <>\n <PopoverRoot open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger\n asChild\n onClick={() => {\n setPopoverOpen(true);\n }}\n >\n <Button variant=\"outlined\" size=\"sm\" color=\"secondary\">\n {t(\"positions.column.close\")}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"oui-w-[360px] oui-p-5\",\n popoverOpen ? \"oui-visible\" : \"oui-invisible\",\n )}\n align=\"end\"\n side=\"top\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <Flex gapY={2} direction=\"column\">\n {quantityForm}\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n <Divider my={2} intensity={8} className=\"oui-w-full\" />\n {priceForm}\n <ConfirmFooter\n onConfirm={props.onDoubleConfirm}\n onCancel={props.onClosePopover}\n submitting={submitting}\n disabled={props.disabled}\n />\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"sm\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport {\n ClosePositionScriptProps,\n useClosePositionScript,\n} from \"./closePosition.script\";\nimport { DesktopClosePosition } from \"./closePosition.ui\";\nimport { MobileClosePosition } from \"./closePositions.mobile.ui\";\n\ntype ClosePositionWidgetProps = Pick<ClosePositionScriptProps, \"type\">;\n\nexport const ClosePositionWidget = (props: ClosePositionWidgetProps) => {\n const state = useClosePositionScript(props);\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <MobileClosePosition {...state} />;\n }\n\n return <DesktopClosePosition {...state} />;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocalStorage, utils } from \"@kodiak-finance/orderly-hooks\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport type ClosePositionScriptProps = {\n type?: OrderType.MARKET | OrderType.LIMIT;\n};\n\nexport type ClosePositionScriptReturn = ReturnType<\n typeof useClosePositionScript\n>;\n\nexport const useClosePositionScript = (props: ClosePositionScriptProps) => {\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState(100);\n const quantityInputRef = useRef<HTMLInputElement>(null);\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const {\n position,\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n type,\n } = usePositionsRowContext();\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n // buy position quantity is positive, sell position quantity is negative\n const isBuy = position.position_qty > 0;\n\n // we need to use Math.abs to get the absolute value of the position quantity\n const maxQty = Math.abs(position.position_qty);\n\n // close position type: limit or market\n const closeType = props.type || type;\n\n const isMarketClose = closeType === OrderType.MARKET;\n\n const isEntirePosition = maxQty?.toString() === quantity.toString();\n\n useEffect(() => {\n // mobile sheet open, update order type\n if (sheetOpen) {\n updateOrderType(props.type as OrderType);\n }\n }, [props.type, sheetOpen]);\n\n // reset state when sheet is closed\n // useEffect(() => {\n // if (!sheetOpen || !popoverOpen) {\n // // set default slider value to 100 when table edit remove\n // updateQuantity(maxQty?.toString());\n // }\n // }, [sheetOpen, popoverOpen, maxQty]);\n\n const { priceErrorMsg, quantityErrorMsg } = useMemo(() => {\n return {\n priceErrorMsg: getErrorMsg(\"order_price\"),\n quantityErrorMsg: getErrorMsg(\"order_quantity\"),\n };\n // getErrorMsg is changed when errors is changed\n }, [errors]);\n\n const disabled = !!(priceErrorMsg || quantityErrorMsg);\n\n const formatQuantityToBaseTick = useCallback(\n (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n },\n [baseTick, updateQuantity],\n );\n\n const onSliderValueChange = useCallback(\n (value: number) => {\n setSliderValue(value);\n\n // transform slider value to quantity\n const qty = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n\n formatQuantityToBaseTick(qty);\n },\n [maxQty, base_dp, formatQuantityToBaseTick],\n );\n\n useEffect(() => {\n const qty = Math.min(Number(quantity || 0), maxQty);\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity]);\n\n const onMax = useCallback(() => {\n updateQuantity(maxQty?.toString());\n }, [maxQty, updateQuantity]);\n\n const onConfirm = useCallback(() => {\n return onSubmit().then((res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n setPopoverOpen(false);\n });\n }, [onSubmit]);\n\n const onDoubleConfirm = useCallback(() => {\n if (!orderConfirm) {\n return onConfirm();\n }\n setDialogOpen(true);\n return Promise.resolve();\n }, [onConfirm, orderConfirm]);\n\n const onCloseSheet = useCallback(() => {\n setSheetOpen(false);\n }, []);\n\n const onCloseDialog = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const onClosePopover = useCallback(() => {\n setPopoverOpen(false);\n }, []);\n\n // when click entire position button, set quantity to 0 and focus on input\n const onEntirePosition = useCallback(() => {\n updateQuantity(\"0\");\n quantityInputRef.current?.focus();\n\n setTimeout(() => {\n quantityInputRef.current?.setSelectionRange(0, 1);\n }, 0);\n }, [updateQuantity]);\n\n return {\n position,\n closeOrderData,\n quote_dp,\n base_dp,\n base,\n quote,\n price,\n quantity,\n submitting,\n\n onConfirm,\n onDoubleConfirm,\n updatePriceChange,\n updateQuantity,\n formatQuantityToBaseTick,\n updateOrderType,\n\n sliderValue,\n onSliderValueChange,\n\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n\n maxQty,\n onMax,\n isBuy,\n isEntirePosition,\n type: closeType,\n quantityInputRef,\n onEntirePosition,\n\n sheetOpen,\n onCloseSheet,\n setSheetOpen,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n\n popoverOpen,\n setPopoverOpen,\n onClosePopover,\n };\n};\n","import {\n useLocalStorage,\n useLeverageBySymbol,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n ChevronRightIcon,\n cn,\n EditIcon,\n Text,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport {\n PositionTPSLPopover,\n TPSLDetailDialogId,\n TPSLDialogId,\n TPSLSheetId,\n TPSLDetailSheetId,\n} from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label={t(\"common.tpsl\")}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { isMobile } = useScreen();\n\n const onEdit = () => {\n const dialogId = isMobile ? TPSLDetailSheetId : TPSLDetailDialogId;\n modal.show(dialogId, {\n order: tpslOrder,\n position: position,\n baseDP: baseDp,\n quoteDP: quoteDp,\n });\n };\n\n return (\n // <PositionTPSLPopover\n // position={position}\n // order={tpslOrder}\n // baseDP={baseDp}\n // quoteDP={quoteDp}\n // isEditing\n // >\n <EditIcon\n onClick={onEdit}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={16}\n />\n // </PositionTPSLPopover>\n );\n};\n\nexport const AddIcon = (props: { positionType: PositionType }) => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const onAdd = () => {\n const dialogId = isMobile ? TPSLSheetId : TPSLDialogId;\n const modalParams = {\n symbol: position.symbol,\n baseDP: baseDp,\n quoteDP: quoteDp,\n isEditing: false,\n positionType: props.positionType,\n };\n modal.show(dialogId, modalParams);\n };\n return (\n <Text\n className={cn(\n \"oui-cursor-pointer oui-text-base-contrast\",\n isMobile && \"oui-text-base-contrast-80\",\n )}\n onClick={onAdd}\n >\n {t(\"tpsl.add\")}\n </Text>\n );\n};\n\ntype LeverageBadgeProps = {\n symbol: string;\n leverage: number;\n modalId: string;\n};\n\nexport const LeverageBadge = (props: LeverageBadgeProps) => {\n const { symbol, leverage } = props;\n\n const showModal = () => {\n modal.show(props.modalId, {\n symbol,\n curLeverage: leverage,\n });\n };\n\n return (\n <div\n className={cn(\n \"oui-flex oui-h-[18px] oui-items-center oui-gap-1\",\n \"oui-cursor-pointer oui-rounded oui-bg-line-6 oui-px-2\",\n \"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\",\n )}\n onClick={showModal}\n >\n {leverage ? (\n <Text.numeral dp={0} rm={Decimal.ROUND_DOWN} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n ) : (\n <LeverageDisplay symbol={symbol} />\n )}\n </div>\n );\n};\n\n/** TODO: remove this */\nexport const LeverageDisplay = ({ symbol }: { symbol: string }) => {\n const leverage = useLeverageBySymbol(symbol);\n\n return (\n <Text.numeral dp={0} rm={Decimal.ROUND_DOWN} size=\"2xs\" unit=\"X\">\n {leverage || 1}\n </Text.numeral>\n );\n};\n","import { Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\n\nexport const renderQuantity = (value: number) => {\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral\n dp={symbolInfo.base_dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n coloring\n >\n {value}\n </Text.numeral>\n );\n};\n\nexport const renderQuantityInput = (value: number, record: any) => {\n return <QuantityInput value={record[\"position_qty\"]} />;\n};\n\nexport const renderPriceInput = (value: number) => {\n return <PriceInput />;\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@kodiak-finance/orderly-ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType } =\n usePositionsRowContext();\n const { t } = useTranslation();\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={\n type === OrderType.LIMIT ? price : t(\"orderEntry.orderType.market\")\n }\n inputMode=\"decimal\"\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={() => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT);\n }\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-h-full oui-px-1\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\n \"oui-border oui-border-solid oui-border-white/[0.12] oui-outline-none focus-within:oui-outline-primary-light\",\n ),\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={() => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>{t(\"common.marketPrice\")}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { utils } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n Flex,\n Text,\n Slider,\n Button,\n inputFormatter,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Input } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const QuantityInput = (props: { value: number }) => {\n const [sliderValue, setSliderValue] = useState<number>(100);\n const { baseDp, updateQuantity, quantity, baseTick } =\n usePositionsRowContext();\n\n const resetQuantity = (percent: number) => {\n formatQuantityToBaseTick(`${props.value * percent}`);\n };\n\n const formatQuantityToBaseTick = (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n };\n\n useEffect(() => {\n const maxQty = Math.abs(props.value);\n const qty = Math.min(Number(quantity || 0), maxQty);\n\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .todp(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity, props.value]);\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n inputMode=\"decimal\"\n classNames={{\n root: \"oui-outline-none oui-border oui-border-solid oui-border-white/[0.12] focus-within:oui-outline-primary-light\",\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n value={quantity}\n onBlur={(event) => formatQuantityToBaseTick(event.target.value)}\n onValueChange={updateQuantity}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n <Text size=\"xs\" intensity={98} className=\"oui-min-w-[40px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(values) => {\n resetQuantity(values[0] / 100);\n }}\n />\n <PercentButtons onClick={resetQuantity} />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst PercentButtons = (props: { onClick: (value: number) => void }) => {\n const { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { NumeralProps, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: React.FC<\n React.PropsWithChildren<\n Omit<NumeralProps, \"precision\" | \"tick\"> & { tick?: TickName }\n >\n> = (props) => {\n const { tick = \"quote_dp\", children, ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n // TODO i18n\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n return (\n <Text.numeral as={\"span\" as any} dp={symbolInfo[tick]} {...rest}>\n {children}\n </Text.numeral>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport {\n ERROR_MSG_CODES,\n useSymbolsInfo,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide, PositionType } from \"@kodiak-finance/orderly-types\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { CloseToLiqPriceIcon } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { AddIcon, TPSLEditIcon } from \"./components\";\n\nexport const PartialTPSL: FC<{\n orderNum?: number;\n tpTriggerPrice?: number;\n slTriggerPrice?: number;\n direction?: \"column\" | \"row\";\n}> = (props) => {\n const {\n orderNum,\n tpTriggerPrice,\n slTriggerPrice,\n direction = \"column\",\n } = props;\n const {\n partialTPSLOrder: order,\n quoteDp,\n baseDp,\n position,\n } = usePositionsRowContext();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const side = position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL;\n const slPriceError = useTpslPriceChecker({\n slPrice: slTriggerPrice?.toString() ?? undefined,\n liqPrice: position.est_liq_price ?? null,\n side: side,\n });\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <AddIcon positionType={PositionType.PARTIAL} />;\n\n if (tpTriggerPrice) {\n children.push(\n <Text.formatted\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20\",\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={tpTriggerPrice}\n prefix={\n !slTriggerPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />,\n );\n }\n if (slTriggerPrice) {\n children.push(\n <Text.formatted\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 \",\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n prefix={<Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>}\n suffix={<CloseToLiqPriceIcon slPriceError={slPriceError} />}\n >\n {slTriggerPrice}\n </Text.formatted>,\n );\n }\n if (children.length === 0)\n return <AddIcon positionType={PositionType.PARTIAL} />;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [tpTriggerPrice, slTriggerPrice, order?.symbol, t, slPriceError]);\n const hasTPSL = Array.isArray(child) ? !!child.length : !child;\n return (\n <Flex className=\"oui-gap-[6px]\">\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n direction === \"column\" ? \"oui-flex-col\" : \"oui-flex-row oui-gap-1\",\n )}\n >\n {child}\n </div>\n {hasTPSL && (\n <>\n <Text className=\"oui-text-base-contrast-54\">({orderNum})</Text>\n <TPSLEditIcon />\n </>\n )}\n </Flex>\n );\n};\n","import { ArrowLeftRightIcon, Button, modal } from \"@kodiak-finance/orderly-ui\";\nimport { ReversePositionDialogId } from \"../../reversePosition\";\n\nexport const ReversePositionButton = (props: { position: any }) => {\n const { position } = props;\n\n return (\n <div\n className=\"\"\n style={{ transform: \"rotate(90deg)\" }}\n onClick={() => {\n modal.show(ReversePositionDialogId, {\n position,\n });\n }}\n >\n <ArrowLeftRightIcon\n size={15}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54 hover:oui-text-base-contrast-80\"\n />\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { ShareIcon } from \"@kodiak-finance/orderly-ui\";\nimport { ShareButtonScriptReturn } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonScriptReturn> = (props) => {\n if (!props.sharePnLConfig) {\n return null;\n }\n\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n props.showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n useAccountInfo,\n useReferralInfo,\n useLeverageBySymbol,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { account, positions } from \"@kodiak-finance/orderly-perp\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { formatNum } from \"@kodiak-finance/orderly-utils\";\n\nexport type ShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport type ShareButtonScriptReturn = ReturnType<typeof useShareButtonScript>;\n\nexport const useShareButtonScript = (props: ShareButtonScriptOptions) => {\n const { position, sharePnLConfig, iconSize } = props;\n const { getFirstRefCode } = useReferralInfo();\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n\n const symbolLeverage = useLeverageBySymbol(position.symbol);\n\n const getHistoryEntity = () => {\n const netPnL = position.netPnL || 0;\n const openPrice = Math.abs(position.avg_open_price);\n const quantity = Math.abs(position.closed_position_qty);\n\n let roi;\n\n const symbolInfo = symbolsInfo[position.symbol];\n const baseIMR = symbolInfo(\"base_imr\");\n const IMR_Factor = symbolInfo(\"imr_factor\");\n\n // calculate unrealized pnl ROI for position history\n if (\n netPnL !== 0 &&\n quantity !== 0 &&\n openPrice !== 0 &&\n accountInfo?.max_leverage &&\n baseIMR &&\n // IMR_Factor is possible to be 0\n typeof IMR_Factor !== \"undefined\"\n ) {\n const notional = positions.notional(quantity, openPrice);\n\n const maxLeverage = position.leverage\n ? position.leverage\n : accountInfo.max_leverage;\n\n const imr = account.IMR({\n maxLeverage,\n baseIMR: baseIMR,\n IMR_Factor: IMR_Factor,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const unrealizedPnLROI = positions.unrealizedPnLROI({\n positionQty: quantity,\n openPrice: openPrice,\n IMR: imr,\n unrealizedPnL: netPnL,\n });\n\n roi = formatNum.roi(unrealizedPnLROI * 100)?.toString();\n }\n\n return {\n side: position.side,\n pnl: netPnL,\n roi: roi,\n openPrice: openPrice,\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n };\n };\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? getHistoryEntity()\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl:\n formatNum.pnl(position.unrealized_pnl)?.toNumber() ??\n position.unrealized_pnl,\n roi:\n formatNum.roi(position.unrealized_pnl_ROI)?.mul(100).toNumber() ??\n position.unrealized_pnl_ROI,\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n // when position.leverage is empty, use leverage from useSymbolLeverage\n leverage: position.leverage || symbolLeverage,\n ...entity,\n },\n refCode,\n ...sharePnLConfig,\n },\n });\n };\n\n return {\n iconSize,\n sharePnLConfig,\n showModal,\n };\n};\n","import {\n useShareButtonScript,\n ShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = ShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationResult,\n useSymbolsInfo,\n useTpslPriceChecker,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AlgoOrderType,\n API,\n OrderSide,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n ExclamationFillIcon,\n Flex,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { CloseToLiqPriceIcon } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { formatNum } from \"@kodiak-finance/orderly-utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { TPSLEditIcon, AddIcon } from \"./components\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n const side = position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL;\n const slPriceError = useTpslPriceChecker({\n slPrice: stopLossPrice?.toString() ?? undefined,\n liqPrice: position.est_liq_price ?? null,\n side: side,\n });\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n slPriceError={slPriceError}\n tooltip\n />\n );\n};\n\nexport const TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const pnl = formatNum\n .pnl(\n utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n },\n ),\n )!\n .toNumber();\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n return (\n <Flex>\n <Text intensity={54} className=\"oui-mr-1\">{`${type} PnL:`}</Text>\n <Text.formatted\n rule=\"price\"\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n prefix={<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>}\n suffix={\n <Text intensity={36} className=\"oui-ml-1\">\n USDC\n </Text>\n }\n >{`${Math.abs(pnl)}`}</Text.formatted>\n </Flex>\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n slPriceError: OrderValidationResult | null;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <AddIcon positionType={PositionType.FULL} />;\n\n const Label = ({ children }: { children?: string }) => {\n return !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{children}</Text>\n ) : (\n \"\"\n );\n };\n\n if (props.takeProfitPrice) {\n children.push(\n <Text.formatted\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20\",\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.takeProfitPrice}\n prefix={\n !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />,\n );\n }\n if (props.stopLossPrice) {\n children.push(\n <Text.formatted\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 \",\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.stopLossPrice}\n prefix={\n !props.takeProfitPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n suffix={<CloseToLiqPriceIcon slPriceError={props.slPriceError} />}\n />,\n );\n }\n\n if (children.length === 0)\n return <AddIcon positionType={PositionType.FULL} />;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n order?.symbol,\n t,\n props.slPriceError,\n ]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className,\n )}\n >\n {child}\n </div>\n );\n\n const showIcon = Array.isArray(child) ? !!child.length : !child;\n\n if (props.tooltip) {\n return (\n <Flex gapX={2}>\n <Tooltip content={pnl}>{content}</Tooltip>\n {showIcon && <TPSLEditIcon />}\n </Flex>\n );\n }\n\n return content;\n};\n","import { FC } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-items-start\"\n >\n <Text>{t(\"positions.column.unrealPnl.tooltip\")}</Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">\n {t(\"positions.column.unrealPnl.priceBasis\")}\n </div>\n <UnPnlPriceBasisCheckBox\n value={unPnlPriceBasis}\n onValueChange={setUnPnlPriceBasic}\n />\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\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 className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { cn, Divider, Flex, Grid } from \"@kodiak-finance/orderly-ui\";\nimport { ClosePositionWidget } from \"../../closePosition\";\nimport { ReversePositionButton } from \"../../desktop/reversePotisionButton\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n FundingFee,\n} from \"./items\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\n\n const header = (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n\n const body = (\n <Grid cols={3} rows={2} gap={2} width={\"100%\"}>\n <Qty {...props} />\n <Margin {...props} />\n <Notional {...props} />\n <AvgOpen {...props} />\n <MarkPrice {...props} />\n <LiqPrice {...props} />\n </Grid>\n );\n\n const buttons = (\n <Grid width={\"100%\"} gap={2} cols={2} rows={1}>\n <ClosePositionWidget type={OrderType.LIMIT} />\n <ClosePositionWidget type={OrderType.MARKET} />\n </Grid>\n );\n\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n p={2}\n r=\"xl\"\n itemAlign={\"start\"}\n className={cn(className, \"oui-bg-base-9\")}\n >\n {header}\n <Divider intensity={6} className=\"oui-w-full\" />\n {body}\n <TPSLPrice {...rest} />\n <FundingFee {...rest} />\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n {buttons}\n {props.positionReverse && (\n <ReversePositionButton position={props.item} />\n )}\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo, useRef } from \"react\";\nimport {\n ERROR_MSG_CODES,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderSide, PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n cn,\n Flex,\n Grid,\n Statistic,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SymbolLeverageSheetId } from \"@kodiak-finance/orderly-ui-leverage\";\nimport { SharePnLBottomSheetId } from \"@kodiak-finance/orderly-ui-share\";\nimport { CloseToLiqPriceIcon } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FundingFeeButton } from \"../../../fundingFeeHistory/fundingFeeButton\";\nimport { LeverageBadge } from \"../../desktop/components\";\nimport { AddIcon, TPSLEditIcon } from \"../../desktop/components\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge\n symbol={item.symbol}\n leverage={item.leverage}\n modalId={SymbolLeverageSheetId}\n />\n </div>\n }\n showIcon\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const UnrealPnL: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <div className=\"oui-text-right\">\n <Text intensity={36}>{t(\"common.unrealizedPnl\")}</Text>\n <Text intensity={20}>(USDC)</Text>\n </div>\n\n <Text.pnl\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.roi\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n prefix=\"(\"\n suffix=\")\"\n className={cn(\n \"oui-ml-1\",\n item.unrealized_pnl_ROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\",\n )}\n >\n {item.unrealized_pnl_ROI}\n </Text.roi>\n }\n >\n {item.unrealized_pnl}\n </Text.pnl>\n </Flex>\n <ShareButtonWidget\n position={item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n );\n};\n\nexport const Qty: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring>\n {item.position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Margin: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <span>\n {t(\"positions.column.margin\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={2} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <span>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={2} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.avgOpen\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.average_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LiqPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={t(\"positions.column.liqPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} color=\"warning\">\n {liqPrice}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TPSLPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const slPriceError = useTpslPriceChecker({\n slPrice: item.full_tp_sl?.sl_trigger_price?.toString() ?? undefined,\n liqPrice: item.est_liq_price ?? null,\n side: item.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL,\n });\n\n const partialSlPriceError = useTpslPriceChecker({\n slPrice: item.partial_tp_sl?.sl_trigger_price?.toString() ?? undefined,\n liqPrice: item.est_liq_price ?? null,\n side: item.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL,\n });\n\n const fullTPSL = useMemo(() => {\n if (\n item.full_tp_sl?.tp_trigger_price == null &&\n item.full_tp_sl?.sl_trigger_price == null\n )\n return <AddIcon positionType={PositionType.FULL} />;\n\n return (\n <Flex className=\"oui-gap-[2px]\">\n {item.full_tp_sl?.tp_trigger_price && (\n <Text.numeral color=\"buy\">\n {item.full_tp_sl.tp_trigger_price}\n </Text.numeral>\n )}\n {item.full_tp_sl?.sl_trigger_price && \"/\"}\n {item.full_tp_sl?.sl_trigger_price && (\n <Text.numeral\n as=\"div\"\n color=\"sell\"\n suffix={<CloseToLiqPriceIcon slPriceError={slPriceError} />}\n className=\"oui-flex oui-items-center\"\n >\n {item.full_tp_sl.sl_trigger_price}\n </Text.numeral>\n )}\n <TPSLEditIcon />\n </Flex>\n );\n }, [item.full_tp_sl]);\n\n const partialTPSL = useMemo(() => {\n if (\n item.partial_tp_sl?.tp_trigger_price == null &&\n item.partial_tp_sl?.sl_trigger_price == null\n )\n return <AddIcon positionType={PositionType.PARTIAL} />;\n\n return (\n <Flex className=\"oui-gap-[2px]\" itemAlign={\"center\"}>\n {item.partial_tp_sl?.tp_trigger_price && (\n <Text.numeral color=\"buy\">\n {item.partial_tp_sl.tp_trigger_price}\n </Text.numeral>\n )}\n {item.partial_tp_sl?.sl_trigger_price && \"/\"}\n {item.partial_tp_sl?.sl_trigger_price && (\n <Text.numeral\n as=\"div\"\n color=\"sell\"\n suffix={<CloseToLiqPriceIcon slPriceError={partialSlPriceError} />}\n className=\"oui-flex oui-items-center\"\n >\n {item.partial_tp_sl.sl_trigger_price}\n </Text.numeral>\n )}\n <Text>{`(${item.partial_tp_sl?.order_num})`}</Text>\n <TPSLEditIcon />\n </Flex>\n );\n }, [item.partial_tp_sl]);\n\n return (\n <Grid cols={2} rows={1} gap={2} width={\"100%\"}>\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n direction={\"column\"}\n itemAlign={\"start\"}\n >\n <Text>{t(\"common.fullTPSL\")}: </Text>\n {fullTPSL}\n </Flex>\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-36 oui-grid-cols-end\"\n direction={\"column\"}\n itemAlign={\"end\"}\n >\n <Text>{t(\"common.partialTPSL\")}: </Text>\n {partialTPSL}\n </Flex>\n </Grid>\n );\n};\n\nexport const FundingFee: FC<PositionCellState> = (props) => {\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n return (\n <Flex justify={\"end\"} className=\"oui-w-full oui-text-2xs\">\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={props.item.fundingFee!}\n symbol={props.item.symbol}\n start_t={props.item.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n </Flex>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { useSymbolContext } from \"../../../../provider/symbolContext\";\nimport { PositionsProps } from \"../../../../types/types\";\n\ntype PositionCellScriptProps = {\n item: API.PositionTPSLExt;\n index: number;\n positionReverse?: boolean;\n} & PositionsProps;\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n\nexport const usePositionCellScript = (props: PositionCellScriptProps) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { PositionsProps } from \"../../../../types/types\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n positionReverse?: boolean;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport {\n KeyedMutator,\n usePositionClose,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { PositionsRowContext } from \"./positionsRowContext\";\nimport type { PositionsRowContextState } from \"./positionsRowContext\";\n\n// export interface PositionsRowContextState {\n// quantity: string;\n// price: string;\n// type: OrderType;\n// side: OrderSide;\n// position: API.PositionExt | API.PositionTPSLExt;\n// updateQuantity: (value: string) => void;\n// updatePriceChange: (value: string) => void;\n\n// updateOrderType: (value: OrderType, price?: string) => void;\n\n// closeOrderData: any;\n\n// onSubmit: () => Promise<any>;\n// submitting: boolean;\n// tpslOrder?: API.AlgoOrder;\n// partialTPSLOrder?: API.AlgoOrder;\n// quoteDp?: number;\n// baseDp?: number;\n// baseTick?: number;\n// errors: any | undefined;\n// }\n\n// export const PositionsRowContext = createContext(\n// {} as PositionsRowContextState,\n// );\n\n// export const usePositionsRowContext = () => {\n// return useContext(PositionsRowContext);\n// };\n\ntype PositionsRowProviderProps = PropsWithChildren<{\n position: API.PositionExt | API.PositionTPSLExt;\n mutatePositions?: KeyedMutator<API.PositionExt[]>;\n}>;\n\nexport const PositionsRowProvider: FC<PositionsRowProviderProps> = (props) => {\n const { position, children, mutatePositions } = props;\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\n Math.abs(position.position_qty).toString(),\n );\n const [price, setPrice] = useState<string>(\n position.mark_price?.toString() || \"\",\n );\n const [type, setType] = useState<OrderType>(OrderType.LIMIT);\n\n useEffect(() => {\n setQuantity(Math.abs(position.position_qty).toString());\n }, [position.position_qty]);\n\n const symbol = position.symbol;\n const symbolsInfo = useSymbolsInfo();\n const symbolInfo = symbolsInfo?.[symbol];\n const quoteDp = symbolInfo(\"quote_dp\");\n const baseDp = symbolInfo(\"base_dp\");\n const baseTick = symbolInfo(\"base_tick\");\n\n const {\n side,\n closeOrderData,\n submit,\n isMutating: submitting,\n errors,\n calculate,\n } = usePositionClose({\n position,\n order: {\n type,\n quantity,\n price,\n },\n });\n\n const updateQuantity = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_quantity\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setQuantity(newValues.order_quantity!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updatePriceChange = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_price\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setPrice(newValues.order_price!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updateOrderType = useCallback(\n (type: OrderType) => {\n setType(type);\n // when type is Limit, set price to mark price\n // when type is Market, set price to empty string\n setPrice(type === OrderType.LIMIT ? position.mark_price?.toString() : \"\");\n },\n [position.mark_price],\n );\n\n const onSubmit = useCallback(async () => {\n if (Number(quantity) > symbolInfo(\"base_max\")) {\n toast.error(\n <div>\n {t(\"positions.limitClose.errors.exceed.title\")}\n <br />\n <div className=\"oui-break-normal\">\n {t(\"positions.limitClose.errors.exceed.description\", {\n quantity: quantity,\n symbol: transSymbolformString(symbol, \"base\"),\n maxQuantity: symbolInfo(\"base_max\"),\n })}\n </div>\n </div>,\n );\n return;\n }\n\n return submit()\n .then((res) => {\n if (res.success) {\n mutatePositions?.();\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n throw true;\n })\n .catch((err) => {\n if (err.message) {\n toast.error(err.message);\n }\n return false;\n });\n }, [submit]);\n\n const memoizedValue = useMemo<PositionsRowContextState>(() => {\n return {\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n tpslOrder: (position as API.PositionTPSLExt).full_tp_sl?.algo_order,\n partialTPSLOrder: (position as API.PositionTPSLExt).partial_tp_sl\n ?.algo_order,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n };\n }, [\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n ]);\n\n return (\n <PositionsRowContext.Provider value={memoizedValue}>\n {children}\n </PositionsRowContext.Provider>\n );\n};\n\nfunction transSymbolformString(symbol: string, formatString = \"base\") {\n const arr = symbol.split(\"_\");\n const type = arr[0];\n const base = arr[1];\n const quote = arr[2];\n return (formatString ?? \"base-quote\")\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Button,\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n Table,\n TableFeatures,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { SymbolProvider } from \"../../provider/symbolProvider\";\nimport { usePositionHistoryColumn } from \"./desktop/usePositionHistoryColumn\";\nimport { PositionHistoryCellWidget } from \"./mobile\";\nimport {\n PositionHistoryExt,\n PositionHistoryState,\n} from \"./positionHistory.script\";\n\ntype PositionHistoryProps = PositionHistoryState & {\n sharePnLConfig?: SharePnLConfig;\n tableRef?: React.RefObject<Table<any>>;\n};\n\nexport const PositionHistory: FC<PositionHistoryProps> = (props) => {\n const { onSymbolChange, pagination, pnlNotionalDecimalPrecision, tableRef } =\n props;\n const column = usePositionHistoryColumn({\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n sharePnLConfig: props.sharePnLConfig,\n });\n\n const { t } = useTranslation();\n\n const dayLabel: Record<number, string> = useMemo(() => {\n return {\n 1: t(\"common.select.1d\"),\n 7: t(\"common.select.7d\"),\n 30: t(\"common.select.30d\"),\n 90: t(\"common.select.90d\"),\n };\n }, [t]);\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={cn(\n \"oui-whitespace-nowrap oui-break-normal\",\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\",\n )}\n >\n {dayLabel[value] || `${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<PositionHistoryExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: PositionHistoryExt) =>\n `${record.symbol}_${record.position_id}`\n }\n renderRowContainer={(record: any, index: number, children: any) => (\n <SymbolProvider symbol={record.symbol}>{children}</SymbolProvider>\n )}\n manualPagination={false}\n pagination={pagination}\n manualSorting={true}\n onSort={props.onSort}\n initialSort={\n props.initialSort\n ? {\n sortKey: props.initialSort.sortKey,\n sort: props.initialSort.sortOrder,\n }\n : undefined\n }\n features={[TableFeatures.DownloadFeature]}\n getTableInstance={(table) => {\n if (tableRef) {\n (tableRef as any).current = table;\n }\n }}\n testIds={{\n body: \"oui-testid-dataList-positionHistory-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobilePositionHistory: FC<\n PositionHistoryState & {\n classNames?: { root?: string; content?: string; cell?: string };\n sharePnLConfig?: SharePnLConfig;\n onExport?: () => void;\n }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex\n gap={2}\n p={2}\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"oui-rounded-b-xl oui-bg-base-9\"\n >\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n {props.onExport && (\n <Button\n variant=\"outlined\"\n size=\"xs\"\n color=\"secondary\"\n onClick={props.onExport}\n >\n {t(\"common.export\") || \"Export CSV\"}\n </Button>\n )}\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionHistoryCellWidget\n item={item}\n index={index}\n onSymbolChange={props.onSymbolChange}\n classNames={{\n root: props.classNames?.cell,\n }}\n sharePnLConfig={props.sharePnLConfig}\n />\n </SymbolProvider>\n )}\n />\n </Grid>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport {\n useLeverageBySymbol,\n useMaxLeverage,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n Box,\n capitalizeFirstLetter,\n cn,\n Column,\n Flex,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n SharePnLConfig,\n SharePnLDialogId,\n} from \"@kodiak-finance/orderly-ui-share\";\nimport { commifyOptional, formatNum } from \"@kodiak-finance/orderly-utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 200,\n onSort: (r1: any, r2: any) => {\n return r1.symbol?.localeCompare(r2.symbol || \"\");\n },\n render: (value: string, record) => (\n <SymbolInfo record={record} onSymbolChange={onSymbolChange} />\n ),\n },\n // quantity\n {\n title: t(\"positions.history.column.closed&maxClosed\"),\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: t(\"positions.history.column.netPnl\"),\n dataIndex: \"netPnL\",\n width: 140,\n onSort: (a, b) => {\n if (a.netPnL == null || b.netPnL == null) return -1;\n return (a.netPnL ?? 0) - (b.netPnL ?? 0);\n },\n render: (_: any, record) => (\n <Flex gapX={1}>\n <NetPnL\n record={record}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n />\n <ShareButtonWidget\n position={record}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n isPositionHistory\n />\n </Flex>\n ),\n },\n // avg open\n {\n title: t(\"common.avgPrice\"),\n dataIndex: \"avg_open\",\n width: 140,\n render: (_: any, record) => {\n const avgOpen =\n record.avg_open_price != null\n ? Math.abs(record.avg_open_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgOpen}\n </Text.numeral>\n );\n },\n },\n // avg close\n {\n title: t(\"common.avgClose\"),\n dataIndex: \"avg_close\",\n width: 175,\n render: (_: any, record) => {\n const avgClose =\n record.avg_close_price != null\n ? Math.abs(record.avg_close_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgClose}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"funding.fundingFee\"),\n dataIndex: \"accumulated_funding_fee\",\n render: (value, record) => {\n return (\n <FundingFeeButton\n fee={-value}\n symbol={record.symbol}\n start_t={record.open_timestamp.toString()}\n end_t={(\n record.close_timestamp || record.last_update_time\n )?.toString()}\n />\n );\n },\n },\n // time opened\n {\n title: t(\"positions.history.column.timeOpened\"),\n dataIndex: \"open_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.open_timestamp}\n </Text.formatted>\n ),\n },\n // time close\n {\n title: t(\"positions.history.column.timeClosed\"),\n dataIndex: \"close_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => {\n if (record.position_status == \"closed\" && record.close_timestamp) {\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {record.close_timestamp ?? \"--\"}\n </Text.formatted>\n );\n }\n return \"--\";\n },\n },\n // updated time\n {\n title: t(\"positions.history.column.updatedTime\"),\n dataIndex: \"last_update_time\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.last_update_time}\n </Text.formatted>\n ),\n },\n ] as Column<PositionHistoryExt>[],\n [pnlNotionalDecimalPrecision, t],\n );\n\n return column;\n};\n\nexport const SymbolInfo = (props: {\n record: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { record, onSymbolChange } = props;\n const { t } = useTranslation();\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge\n key={`status-${status}`}\n color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {renderStatus()}\n </Badge>,\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge key={`type-${record.type}`} color={\"danger\"} size=\"xs\">\n {t(\"positions.history.type.adl\")}\n </Badge>,\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Tooltip\n key={`type-${record.type}`}\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{ className: \"oui-fill-base-5\" }}\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidationId\")}\n </Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidatorFee\")}\n </Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.insFundFee\")}\n </Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n >\n <div>\n <Badge size=\"xs\" color=\"danger\" className=\"oui-cursor-pointer\">\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-1\">\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>\n </div>\n </Tooltip>,\n );\n }\n\n list.push(\n <LeverageBadge\n key={`leverage-${record.symbol}`}\n symbol={record.symbol}\n leverage={record.leverage}\n />,\n );\n\n return list;\n }, [record, t]);\n\n return (\n <Flex gap={2} height={48}>\n <Box\n width={4}\n height={38}\n className={cn(\n \"oui-shrink-0 oui-rounded-[1px]\",\n record.side === \"LONG\" ? \"oui-bg-trade-profit\" : \"oui-bg-trade-loss\",\n )}\n />\n\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: record.symbol } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${record.symbol.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <Flex gap={1}>{tags}</Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Quantity = (props: { record: PositionHistoryExt }) => {\n const { record } = props;\n\n const { base_dp } = useSymbolContext();\n\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-truncate\"\n >\n <Text.numeral dp={base_dp} padding={false}>\n {Math.abs(record.closed_position_qty)}\n </Text.numeral>\n <Text.numeral dp={base_dp} padding={false} className=\"oui-truncate\">\n {Math.abs(record.max_position_qty)}\n </Text.numeral>\n {/* <Text className=\"oui-truncate\">{`${record.symbol.split(\"_\")[1]}`}</Text> */}\n </Flex>\n );\n};\n\nexport const NetPnL = (props: {\n record: PositionHistoryExt;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { record, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n const netPnl = record.netPnL != null ? record.netPnL : undefined;\n\n const text = () => (\n <Text.pnl\n dp={pnlNotionalDecimalPrecision}\n color={\n record.netPnL != null\n ? record.netPnL > 0\n ? \"profit\"\n : \"lose\"\n : undefined\n }\n className={\n netPnl == null\n ? \"\"\n : \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n }\n >\n {netPnl ?? \"--\"}\n </Text.pnl>\n );\n\n if (record.netPnL == null) return text();\n\n return (\n <Tooltip\n // open={record.max_position_qty == 3.22}\n delayDuration={200}\n // @ts-ignore\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-text-2xs\">\n <Text intensity={80}>{t(\"positions.history.column.netPnl\")}</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text\n color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(formatNum.pnl(record.realized_pnl)?.toString())}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"funding.fundingFee\")}</Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text\n color={record.trading_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n >\n <div>{text()}</div>\n </Tooltip>\n );\n};\n\nconst LeverageBadge = (props: { symbol: string; leverage: number }) => {\n const { symbol, leverage } = props;\n\n return (\n <Badge color=\"neutral\" size=\"xs\">\n {leverage ? (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n ) : (\n <LeverageDisplay symbol={symbol} />\n )}\n </Badge>\n );\n};\n\nconst LeverageDisplay = ({ symbol }: { symbol: string }) => {\n const leverage = useMaxLeverage(symbol);\n\n return (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Divider, Flex, Grid, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { SharePnLBottomSheetId } from \"@kodiak-finance/orderly-ui-share\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport {\n PositionHistoryType,\n ClosedQty,\n SymbolToken,\n OpenTime,\n AvgOpen,\n AvgClosed,\n ClosedTime,\n MaxClosedQty,\n FundingFee,\n} from \"./items\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\n\nexport const PositionHistoryCell: FC<PositionHistoryCellState> = (props) => {\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n\n const showAlert = () => {\n const { item: record } = props;\n\n modal.alert({\n title: t(\"positions.history.column.netPnl\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}>\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"funding.fundingFee\")}</Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text color={record.trading_fee > 0 ? \"lose\" : \"profit\"}>\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <SymbolToken {...props} />\n <PositionHistoryType {...props} />\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.history.column.netPnl\")}\n </Text>\n <Flex gapX={1}>\n <button onClick={showAlert}>\n <Text.numeral size=\"xs\" coloring>\n {props.item.netPnL ?? \"--\"}\n </Text.numeral>\n </button>\n\n <ShareButtonWidget\n position={props.item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n isPositionHistory\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<PositionHistoryCellState> = (props) => {\n return (\n <div className=\"oui-w-full\">\n <Grid\n cols={3}\n rows={2}\n width={\"100%\"}\n gap={0}\n className=\"oui-grid-cols-[1fr,1fr,135px]\"\n >\n <ClosedQty {...props} />\n <MaxClosedQty {...props} />\n <OpenTime {...props} />\n <AvgOpen {...props} />\n <AvgClosed {...props} />\n <ClosedTime {...props} />\n </Grid>\n <FundingFee {...props} />\n </div>\n );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n capitalizeFirstLetter,\n Flex,\n modal,\n Statistic,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { PositionHistorySide } from \"../positionHistory.script\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const { t } = useTranslation();\n const isBuy = side === PositionHistorySide.buy;\n\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: symbol } as API.Symbol);\n }}\n // showIcon\n >\n {symbol}\n </Text.formatted>\n );\n};\n\nexport const Time: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n intensity={36}\n size=\"2xs\"\n >\n {item.last_update_time}\n </Text.formatted>\n );\n};\n\nexport const PositionHistoryType: FC<PositionHistoryCellState> = (props) => {\n const { item: record } = props;\n const { t } = useTranslation();\n\n const showAlert = () => {\n modal.alert({\n title: t(\"positions.liquidation\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidationId\")}</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidatorFee\")}</Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.insFundFee\")}</Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge\n key={1}\n color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {renderStatus()}\n </Badge>,\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge key={2} color={\"danger\"} size=\"xs\">\n {t(\"positions.history.type.adl\")}\n </Badge>,\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Badge\n key={3}\n size=\"xs\"\n color=\"danger\"\n className=\"oui-cursor-pointer\"\n onClick={showAlert}\n >\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-1\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>,\n );\n }\n\n return list;\n }, [record]);\n\n return <Flex gap={1}>{tags}</Flex>;\n};\n\nexport const ClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const closedQty =\n item.closed_position_qty != null\n ? Math.abs(item.closed_position_qty)\n : \"--\";\n\n return (\n <Statistic\n // label={\n // <Text>Closed{<Text intensity={20}>{` (${props.base})`}</Text>}</Text>\n // }\n label={<Text>{t(\"positions.history.column.closed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {closedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MaxClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const maxClosedQty =\n item.max_position_qty != null ? Math.abs(item.max_position_qty) : \"--\";\n return (\n <Statistic\n // label={\n // <Text>\n // Max closed{<Text intensity={20}>{` (${props.base})`}</Text>}\n // </Text>\n // }\n label={<Text>{t(\"positions.history.column.maxClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {maxClosedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgOpen =\n item.avg_open_price != null ? Math.abs(item.avg_open_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgOpen\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgOpen}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgClosed: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgClose =\n item.avg_close_price != null ? Math.abs(item.avg_close_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgClose\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgClose}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OpenTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeOpened\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.open_timestamp}\n </Text.formatted>\n </Statistic>\n );\n};\nexport const ClosedTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const child =\n item.position_status == \"closed\" && item.close_timestamp ? (\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.close_timestamp}\n </Text.formatted>\n ) : (\n \"--\"\n );\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\n );\n};\n\nexport const FundingFee: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n justify={\"end\"}\n className=\"oui-text-2xs oui-w-full oui-py-2 oui-gap-1 oui-gap-1\"\n >\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={-props.item.accumulated_funding_fee}\n symbol={props.item.symbol}\n start_t={props.item.open_timestamp.toString()}\n end_t={(\n props.item.close_timestamp || props.item.last_update_time\n )?.toString()}\n />\n </Flex>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\nimport {\n useAccount,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { usePagination, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { TRADING_POSITIONS_SORT_STORAGE_KEY } from \"../../constants\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { useSort } from \"../../utils/sorting\";\nimport { useTabSort, PositionsTabName } from \"../shared/hooks/useTabSort\";\nimport { PositionHistoryProps } from \"./positionHistory.widget\";\n\nexport type PositionHistoryExt = API.PositionHistory & {\n netPnL?: number;\n};\n\nexport enum PositionHistorySide {\n all = \"all\",\n buy = \"LONG\",\n sell = \"SHORT\",\n}\nexport enum PositionHistoryStatus {\n all = \"all\",\n closed = \"closed\",\n partial_closed = \"partial_closed\",\n}\n\nexport const usePositionHistoryScript = (props: PositionHistoryProps) => {\n const {\n onSymbolChange,\n symbol,\n pnlNotionalDecimalPrecision,\n enableSortingStorage = true,\n } = props;\n const { state } = useAccount();\n\n // Sorting functionality\n const { tabSort, onTabSort } = useTabSort({\n storageKey: TRADING_POSITIONS_SORT_STORAGE_KEY,\n });\n\n const { onSort, getSortedList } = useSort(\n enableSortingStorage\n ? tabSort?.[PositionsTabName.PositionHistory]\n : undefined,\n enableSortingStorage\n ? onTabSort(PositionsTabName.PositionHistory)\n : undefined,\n );\n\n const { data, isLoading } = usePrivateQuery<PositionHistoryExt[]>(\n symbol\n ? `/v1/position_history?symbol=${symbol}&limit=1000`\n : \"/v1/position_history?limit=1000\",\n {\n formatter(data) {\n return (data.rows ?? null)?.map(\n (item: API.PositionHistory): PositionHistoryExt => {\n if (\n item.realized_pnl != null &&\n item.accumulated_funding_fee != null &&\n item.trading_fee != null\n ) {\n const netPnL =\n item.realized_pnl -\n item.accumulated_funding_fee -\n item.trading_fee;\n return {\n ...item,\n netPnL: netPnL,\n };\n }\n return item;\n },\n );\n },\n revalidateOnFocus: true,\n },\n );\n\n const { pagination, setPage } = usePagination({\n pageSize: 10,\n });\n\n const {\n status,\n side,\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n } = useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [status, side, dateRange, filterDays, symbol]);\n\n const filterData = useMemo(() => {\n if (data == null) return data;\n\n return data.filter((item) => {\n const sideFilter =\n side === PositionHistorySide.all\n ? true\n : item.side.toLowerCase() === side.toLowerCase();\n const statusFilter =\n status === PositionHistoryStatus.all\n ? true\n : item.position_status.toLowerCase() === status.toLowerCase();\n\n // const time = item.close_timestamp ?? item?.last_update_timestamp ?? item.open_timestamp;\n const time = item?.last_update_time ?? item.open_timestamp;\n const dateFilter =\n dateRange.from && dateRange.to\n ? time >= dateRange.from.getTime() && time <= dateRange.to.getTime()\n : true;\n\n const symbolFilter = symbol ? item.symbol == symbol : true;\n\n return sideFilter && statusFilter && dateFilter && symbolFilter;\n });\n }, [status, side, dateRange, data, symbol]);\n\n const rawDataSource = useDataTap(filterData, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: [],\n });\n\n const dataSource = getSortedList(rawDataSource || []);\n\n return {\n dataSource,\n isLoading,\n onSymbolChange,\n pagination,\n filterItems,\n onFilter,\n symbol,\n filterDays,\n updateFilterDays,\n pnlNotionalDecimalPrecision,\n onSort,\n initialSort: enableSortingStorage\n ? tabSort?.[PositionsTabName.PositionHistory]\n : undefined,\n };\n};\n\nconst useFilter = () => {\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all,\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all,\n );\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n }\n\n if (filter.name === \"status\") {\n setStatus(filter.value);\n }\n\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: t(\"common.side.all\"),\n value: \"all\",\n },\n {\n label: t(\"common.buy\"),\n value: PositionHistorySide.buy,\n },\n {\n label: t(\"common.sell\"),\n value: PositionHistorySide.sell,\n },\n ],\n value: side,\n };\n\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: t(\"common.status.all\"),\n value: \"all\",\n },\n {\n label: t(\"positions.history.status.closed\"),\n value: PositionHistoryStatus.closed,\n },\n {\n label: t(\"positions.history.status.partialClosed\"),\n value: PositionHistoryStatus.partial_closed,\n },\n ],\n value: status,\n };\n\n if (isMobile) {\n return [sideFilter, statusFilter];\n }\n return [sideFilter, statusFilter, dateRangeFilter];\n }, [side, status, dateRange]);\n\n return {\n filterItems,\n onFilter,\n side,\n dateRange,\n status,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type PositionHistoryState = ReturnType<typeof usePositionHistoryScript>;\n","import { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n\nexport function offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexport function offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n\nexport const areDatesEqual = (date1: Date, date2: Date): boolean => {\n return date1.getTime() === date2.getTime();\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import React, { forwardRef } from \"react\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { Table } from \"@kodiak-finance/orderly-ui\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n enableSortingStorage?: boolean; // Controls whether to persist sorting preferences\n};\n\nexport type PositionHistoryInstance = {\n getRowCount?: () => number;\n getDataSource?: () => any[] | null;\n};\n\nexport const PositionHistoryWidget = forwardRef<\n PositionHistoryInstance,\n PositionHistoryProps\n>((props, ref) => {\n const state = usePositionHistoryScript(props);\n const tableRef = React.useRef<Table<any>>(null);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return tableRef.current?.getRowCount?.() ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return (\n <PositionHistory\n {...state}\n sharePnLConfig={props.sharePnLConfig}\n tableRef={tableRef}\n />\n );\n});\n\nPositionHistoryWidget.displayName = \"PositionHistoryWidget\";\n\nexport const MobilePositionHistoryWidget = React.forwardRef<\n PositionHistoryInstance,\n PositionHistoryProps & {\n classNames?: { root?: string; content?: string; cell?: string };\n onExport?: () => void;\n }\n>((props, ref) => {\n const { classNames, onExport, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return state.dataSource?.length ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n onExport={onExport}\n />\n );\n});\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { LiquidationCellWidget } from \"./mobile\";\n\nexport const Liquidation: FC<LiquidationState> = (props) => {\n const [expanded, setExpanded] = useState({});\n const column = useLiquidationColumn({});\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\"\n }\n >\n {`${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<API.Liquidation>\n loading={props.isLoading}\n id=\"oui-desktop-liquidation-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: API.Liquidation) =>\n `${record.liquidation_id}`\n }\n // manualPagination={false}\n pagination={props.pagination}\n testIds={{\n body: \"oui-testid-dataList-liquidation-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n // onRow={(record, index, row) => {\n // return {\n // className: \"[&>td:first-child]:oui-pl-0 [&>td:last-child]:oui-pr-0\",\n // };\n // }}\n expanded={expanded}\n onExpandedChange={setExpanded}\n getRowCanExpand={() => true}\n expandRowRender={(record) => {\n return <LiquidationDetails record={record.original} />;\n }}\n />\n </Flex>\n );\n};\n\nconst TooltipHeaderCell: FC<{\n tooltip: string;\n label: string;\n side?: \"left\";\n}> = (props) => {\n return (\n <th className=\"oui-h-10 oui-border-b oui-border-line oui-text-left oui-text-base-contrast-36\">\n <Tooltip\n content={props.tooltip}\n className=\"oui-w-[275px] oui-bg-base-6\"\n side={props.side}\n arrow={{\n className: \"oui-fill-base-6\",\n }}\n >\n <button className=\"oui-border-b oui-border-dashed oui-border-line-12\">\n {props.label}\n </button>\n </Tooltip>\n </th>\n );\n};\n\nconst LiquidationDetails: FC<{\n record: API.Liquidation;\n}> = (props) => {\n const { margin_ratio, account_mmr, collateral_value, position_notional } =\n props.record as any;\n\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-w-full oui-bg-base-8 oui-px-6\">\n {/* <pre>{JSON.stringify(props.record, null, 2)}</pre> */}\n\n <table className=\"oui-w-full\">\n <thead>\n <tr>\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.mr\")}\n label={t(\"positions.Liquidation.expand.label.mr\")}\n side=\"left\"\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.mmr\")}\n label={t(\"positions.Liquidation.expand.label.mmr\")}\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.collateral\")}\n label={t(\"positions.Liquidation.expand.label.collateral\")}\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.notional\")}\n label={t(\"positions.Liquidation.expand.label.notional\")}\n />\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className=\"oui-h-10\">\n <Text.numeral rule=\"percentages\">{margin_ratio}</Text.numeral>\n </td>\n <td className=\"oui-h-10\">\n <Text.numeral rule=\"percentages\">{account_mmr}</Text.numeral>\n </td>\n <td className=\"oui-h-10\">{commifyOptional(collateral_value)}</td>\n <td className=\"oui-h-10\">{commifyOptional(position_notional)}</td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n};\n\nexport const MobileLiquidation: FC<\n LiquidationState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n onExport?: () => void;\n }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex\n gap={2}\n p={2}\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"oui-rounded-b-xl oui-bg-base-9\"\n >\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n {props.onExport && (\n <Button\n variant=\"outlined\"\n size=\"xs\"\n color=\"secondary\"\n onClick={props.onExport}\n >\n {t(\"common.export\") || \"Export CSV\"}\n </Button>\n )}\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n loadMore={props.loadMore}\n renderItem={(item, index) => (\n <LiquidationCellWidget\n item={item}\n index={index}\n classNames={{\n root: props.classNames?.cell,\n }}\n />\n )}\n />\n </Grid>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Column, Flex, Text, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\n\nconst TooltipButton: FC<{\n tooltip: string;\n label: string;\n}> = (props) => {\n return (\n <Tooltip\n className=\"oui-w-[275px] oui-bg-base-6\"\n content={props.tooltip}\n arrow={{\n className: \"oui-fill-base-6\",\n }}\n >\n <button className=\"oui-border-b oui-border-dashed oui-border-line-12\">\n {props.label}\n </button>\n </Tooltip>\n );\n};\n\nexport const useLiquidationColumn = (props: {}) => {\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: t(\"common.time\"),\n dataIndex: \"timestamp\",\n width: 202,\n render: (value: string) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {value}\n </Text.formatted>\n ),\n },\n // Liquidation id\n {\n title: t(\"positions.Liquidation.column.liquidationId\"),\n dataIndex: \"liquidation_id\",\n width: 120,\n render: (value) => <Text>{value}</Text>,\n },\n // Symbol\n {\n title: t(\"common.symbol\"),\n dataIndex: \"Symbol\",\n // width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n key={item.symbol}\n >\n {item.symbol}\n </Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: t(\"positions.Liquidation.column.markPrice\"),\n dataIndex: \"Price_(USDC)\",\n // width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.mark_price}\n type=\"quote\"\n key={item.symbol}\n />\n ))}\n </Flex>\n );\n },\n },\n // Quantity\n {\n title: t(\"common.quantity\"),\n dataIndex: \"Quantity\",\n // width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.position_qty}\n type=\"base\"\n key={item.symbol}\n />\n ))}\n </Flex>\n );\n },\n },\n\n // net pnl\n // {\n // title: t(\"positions.Liquidation.column.insFundTransfer\"),\n // dataIndex: \"transfer_amount_to_insurance_fund\",\n // width: 202,\n // render: (value) => {\n // return <Text>{commifyOptional(value)}</Text>;\n // },\n // },\n // Liquidation fee rate\n // TODO: use i18\n {\n title: (\n <TooltipButton\n tooltip={t(\"positions.Liquidation.col.tooltip.feeRate\")}\n label={t(\"positions.Liquidation.column.liquidationFeeRate\")}\n />\n ),\n dataIndex: \"liquidationFeeRate\",\n // width: 202,\n render: (value) => {\n return <Text.numeral rule=\"percentages\">{value}</Text.numeral>;\n // return <Text>{commifyOptional(value)}</Text>;\n },\n },\n\n // Liquidation Fee\n {\n title: (\n <TooltipButton\n tooltip={t(\"positions.Liquidation.col.tooltip.fee\")}\n label={t(\"positions.Liquidation.column.liquidationFee\")}\n />\n ),\n dataIndex: \"abs_liquidation_fee\",\n width: 100,\n render: (abs_liquidation_fee: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n key={item.symbol}\n value={item.abs_liquidation_fee}\n type=\"quote\"\n />\n ))}\n </Flex>\n );\n },\n },\n {\n title: \"\",\n dataIndex: \"actions\",\n align: \"right\",\n width: 40,\n render: (_: any, record: API.Liquidation, index, ctx) => {\n const isExpanded = ctx.row.getIsExpanded();\n\n return (\n <button\n className=\"oui-p-2\"\n onClick={() => {\n ctx.row.getToggleExpandedHandler()();\n }}\n >\n <ArrowIcon className={isExpanded ? \"oui-rotate-180\" : \"\"} />\n </button>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n [t],\n );\n\n return column;\n};\n\nconst FormattedText: FC<{ value?: string | number; type: \"base\" | \"quote\" }> = (\n props,\n) => {\n return <Text>{commifyOptional(props.value)}</Text>;\n};\n\nconst ArrowIcon: FC<{\n className?: string;\n onClick?: () => void;\n}> = (props) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M3.884 6.02a.67.67 0 0 0-.436.27.68.68 0 0 0 .187.933L7.63 9.88a.68.68 0 0 0 .749 0l3.994-2.657a.68.68 0 0 0 .187-.934.68.68 0 0 0-.936-.186L8.003 8.51l-3.62-2.407a.65.65 0 0 0-.499-.084\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text, Divider, Badge } from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional, Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\n\nexport const LiquidationCell: FC<\n LiquidationCellState & {\n classNames?: {\n root?: string;\n };\n }\n> = (props) => {\n return (\n <Flex\n key={props.item.timestamp}\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={cn(\n \"oui-rounded-xl oui-bg-base-9 oui-p-2\",\n props.classNames?.root,\n )}\n >\n <Header {...props} />\n <Divider />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex width={\"100%\"} justify={\"between\"} itemAlign={\"start\"}>\n <Flex direction={\"column\"} itemAlign={\"start\"} gap={1}>\n <Flex gap={2} itemAlign={\"center\"}>\n <Flex direction={\"column\"} gap={1} itemAlign={\"start\"}>\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n >\n {props.item.positions_by_perp?.[0]?.symbol || \"\"}\n </Text.formatted>\n {/* <Badge size=\"sm\" color=\"neutral\">\n Cross 10X\n </Badge> */}\n </Flex>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"}>\n <Text size=\"2xs\" intensity={36}>\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {props.item.timestamp}\n </Text.formatted>\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.liquidationId\")}: `}\n <Text as=\"span\" intensity={80}>\n {props.item.liquidation_id}\n </Text>\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n const position = props.item.positions_by_perp?.[0];\n const { t } = useTranslation();\n const mr = useMemo(() => {\n if (isNaN(props.item?.margin_ratio)) return \"--\";\n return `${new Decimal(props.item.margin_ratio).mul(100).todp(2, Decimal.ROUND_DOWN).toNumber()}%`;\n }, [props.item?.margin_ratio]);\n\n if (!position) return null;\n\n return (\n <Flex direction={\"column\"} width={\"100%\"} gap={1}>\n {/* First row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.column.markPrice\")}\n value={commifyOptional(position.transfer_price)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"common.quantity\")}\n value={commifyOptional(position.position_qty)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.column.liquidationFeeRate\")}\n value={props.item.liquidationFeeRate}\n className=\"oui-flex-1\"\n align=\"end\"\n />\n </Flex>\n\n {/* Second row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.column.liquidationFee\")}\n value={commifyOptional(position.abs_liquidation_fee)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.mr\")}\n value={mr}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.mmr\")}\n value={\n props.item.formatted_account_mmr\n ? `${props.item.formatted_account_mmr}%`\n : \"--\"\n }\n className=\"oui-flex-1\"\n align=\"end\"\n />\n </Flex>\n\n {/* Third row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.expand.label.collateral\")}\n value={commifyOptional(props.item.collateral_value)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.notional\")}\n value={commifyOptional(props.item.position_notional)}\n className=\"oui-flex-1\"\n />\n <div className=\"oui-flex-1 oui-opacity-0\" /> {/* Empty placeholder */}\n </Flex>\n </Flex>\n );\n};\n\nconst DataItem: FC<{\n label: string;\n value: string | number;\n className?: string;\n align?: \"start\" | \"end\";\n}> = ({ label, value, className, align = \"start\" }) => {\n return (\n <Flex direction={\"column\"} itemAlign={align} className={className}>\n <Text size=\"2xs\" intensity={36}>\n {label}\n </Text>\n <Text size=\"xs\" intensity={80}>\n {value}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation & {\n formatted_account_mmr: string;\n liquidationFeeRate: number;\n };\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n return {\n ...props,\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { useLiquidationCellScript } from \"./liquidationCell.script\";\nimport { LiquidationCell } from \"./liquidationCell.ui\";\n\nexport const LiquidationCellWidget = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const { classNames, ...rest } = props;\n const state = useLiquidationCellScript(rest);\n return <LiquidationCell classNames={classNames} {...state} />;\n};\n","import React, { forwardRef } from \"react\";\nimport { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n};\n\nexport type LiquidationInstance = {\n getRowCount?: () => number;\n getDataSource?: () => any[] | null;\n};\n\nexport const LiquidationWidget = forwardRef<\n LiquidationInstance,\n LiquidationProps\n>((props, ref) => {\n const state = useLiquidationScript(props);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return state.dataSource?.length ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return <Liquidation {...state} />;\n});\n\nexport const MobileLiquidationWidget = forwardRef<\n LiquidationInstance,\n LiquidationProps & {\n classNames?: { root?: string; content?: string; cell?: string };\n onExport?: () => void;\n }\n>((props, ref) => {\n const { classNames, onExport, ...rest } = props;\n const state = useLiquidationScript(rest);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return state.dataSource?.length ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return (\n <MobileLiquidation classNames={classNames} {...state} onExport={onExport} />\n );\n});\n","import { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { usePagination, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { LiquidationProps } from \"./liquidation.widget\";\n\nexport const useLiquidationScript = (props: LiquidationProps) => {\n const { symbol, enableLoadMore } = props;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: 10,\n });\n\n const { dateRange, filterDays, updateFilterDays, filterItems, onFilter } =\n useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [symbol, dateRange, filterDays]);\n\n const [data, { meta, isLoading, loadMore }] = useLiquidation({\n page: enableLoadMore ? undefined : page,\n size: pageSize,\n symbol,\n start_t: dateRange.from != null ? dateRange.from.getTime() : undefined,\n end_t: dateRange.to != null ? dateRange.to.getTime() : undefined,\n });\n\n const dataSource = useDataTap(data, {\n fallbackData: [],\n });\n\n // useEffect(() => {\n // setPage(1);\n // }, [dateRange, filterDays]);\n\n // console.log(\"pagination\", pagination, meta);\n\n return {\n dataSource,\n isLoading,\n loadMore,\n\n pagination: parsePagination(meta),\n\n // filter\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n };\n};\n\nexport type LiquidationState = ReturnType<typeof useLiquidationScript>;\n\n/**\n *\n * @param props size default is 100\n */\nconst useLiquidation = (props: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n}) => {\n const ordersResponse = usePrivateInfiniteQuery(generateKeyFun(props), {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\n });\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n const data = useMemo(() => {\n return ordersResponse.data\n ?.map((item) =>\n // @ts-ignore\n item.rows?.map((item) => {\n let liquidationFeeRate = null;\n const firstPosition = item.positions_by_perp[0];\n\n if (firstPosition) {\n liquidationFeeRate = new Decimal(firstPosition.liquidator_fee)\n .add(firstPosition.insurance_fund_fee)\n .toNumber();\n }\n\n return {\n ...item,\n // Flatten first position for CSV export\n symbol: firstPosition?.symbol,\n transfer_price: firstPosition?.transfer_price,\n position_qty: firstPosition?.position_qty,\n abs_liquidation_fee: firstPosition?.abs_liquidation_fee,\n // Formatted fields\n formatted_account_mmr: isNaN(item.account_mmr)\n ? null\n : new Decimal(item.account_mmr).mul(100).toFixed(2).toString(),\n liquidationFeeRate,\n };\n }),\n )\n ?.flat();\n }, [ordersResponse.data]);\n\n const isLoading = ordersResponse.isLoading;\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n return [data, { meta, isLoading, loadMore }] as const;\n};\n\nconst useFilter = () => {\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n if (isMobile) {\n return [dateRangeFilter];\n }\n return [dateRangeFilter];\n }, [dateRange]);\n\n return {\n filterItems,\n onFilter,\n dateRange,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst generateKeyFun =\n (args: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const { symbol, size = 10, page, end_t, start_t } = args;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n ]);\n\n if (page) {\n search.set(\"page\", `${page}`);\n }\n\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n\n if (end_t) {\n search.set(`end_t`, `${end_t}`);\n }\n\n if (start_t) {\n search.set(`start_t`, `${start_t}`);\n }\n\n return `/v1/liquidations?${search.toString()}`;\n };\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn } from \"@kodiak-finance/orderly-ui\";\nimport { formatSymbol } from \"@kodiak-finance/orderly-utils\";\nimport type { CloseAllPositionsState } from \"./closeAllPositions.script\";\n\nexport type CloseAllPositionsProps = CloseAllPositionsState & {\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport const CloseAllPositions: FC<CloseAllPositionsProps> = (props) => {\n const { onCloseAll, hasOpenPositions, isClosing, className, style, symbol } =\n props;\n const { t } = useTranslation();\n if (symbol !== undefined) {\n return <></>;\n }\n return (\n <Button\n onClick={onCloseAll}\n disabled={!hasOpenPositions || isClosing}\n loading={isClosing}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n className={cn(\"disabled:oui-bg-transport\", className)}\n style={style}\n >\n {t(\"positions.closeAll\")}\n </Button>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n usePositionStream,\n useSubAccountMutation,\n useTrack,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n API,\n OrderSide,\n OrderType,\n TrackerEventName,\n} from \"@kodiak-finance/orderly-types\";\nimport { modal, Text, toast } from \"@kodiak-finance/orderly-ui\";\n\nexport interface UseCloseAllPositionsScriptOptions {\n symbol?: string;\n onSuccess?: () => void;\n}\n\nexport const useCloseAllPositionsScript = (\n options?: UseCloseAllPositionsScriptOptions,\n) => {\n const { symbol, onSuccess } = options || {};\n const { t } = useTranslation();\n const { tracking } = useTrack();\n\n // Get all positions data\n const [positionsData] = usePositionStream(symbol);\n\n // Get open positions (positions with non-zero quantity)\n const openPositions = useMemo(() => {\n if (!positionsData?.rows) return [];\n return positionsData.rows.filter(\n (position: API.PositionTPSLExt) =>\n position.position_qty !== 0 && position.position_qty !== undefined,\n );\n }, [positionsData]);\n\n // Check if there are open positions\n const hasOpenPositions = useMemo(() => {\n return openPositions.length > 0;\n }, [openPositions]);\n\n const [doCreateOrder, { isMutating }] = useSubAccountMutation(\n \"/v1/order\",\n \"POST\",\n );\n\n // Close all positions function\n const closeAllPositions = useCallback(async () => {\n if (!hasOpenPositions) return;\n\n try {\n // Create market orders to close each position\n const closePromises = openPositions.map(\n (position: API.PositionTPSLExt) => {\n const side =\n position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY;\n const quantity = Math.abs(position.position_qty);\n\n return doCreateOrder({\n symbol: position.symbol,\n order_type: OrderType.MARKET,\n side,\n order_quantity: quantity,\n reduce_only: true,\n });\n },\n );\n\n await Promise.all(closePromises);\n\n toast.success(t(\"positions.closeAll.success\"));\n onSuccess?.();\n\n return true;\n } catch (error: any) {\n if (error?.message !== undefined) {\n toast.error(error.message);\n }\n return false;\n }\n }, [openPositions, hasOpenPositions, doCreateOrder, t, onSuccess]);\n\n // Show confirmation modal\n const onCloseAll = useCallback(() => {\n modal.confirm({\n title: t(\"positions.closeAll\"),\n content: <Text size=\"sm\">{t(\"positions.closeAll.description\")}</Text>,\n onCancel: async () => {},\n onOk: async () => {\n try {\n // Track event\n tracking(TrackerEventName.confirmCloseAllPositions, {\n positions_count: openPositions.length,\n });\n\n const result = await closeAllPositions();\n return Promise.resolve(result);\n } catch (error) {\n return Promise.resolve(false);\n }\n },\n });\n }, [t, tracking, openPositions, closeAllPositions]);\n\n return {\n onCloseAll,\n hasOpenPositions,\n isClosing: isMutating,\n openPositionsCount: openPositions.length,\n symbol,\n };\n};\n\nexport type CloseAllPositionsState = ReturnType<\n typeof useCloseAllPositionsScript\n>;\n","import React from \"react\";\nimport { useCloseAllPositionsScript } from \"./closeAllPositions.script\";\nimport {\n CloseAllPositions,\n type CloseAllPositionsProps,\n} from \"./closeAllPositions.ui\";\n\nexport type CloseAllPositionsWidgetProps = Pick<\n CloseAllPositionsProps,\n \"className\" | \"style\"\n> & {\n symbol?: string;\n onSuccess?: () => void;\n};\n\nexport const CloseAllPositionsWidget: React.FC<CloseAllPositionsWidgetProps> = (\n props,\n) => {\n const { className, style, symbol, onSuccess } = props;\n const state = useCloseAllPositionsScript({ symbol, onSuccess });\n return <CloseAllPositions {...state} className={className} style={style} />;\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/positions/closePosition/components/confirmDialog.tsx","../src/components/positions/positionsRowContext.tsx","../src/components/fundingFeeHistory/fundingFeeHistory.ui.tsx","../src/components/fundingFeeHistory/endReachedBox.tsx","../src/components/fundingFeeHistory/useEndReached.ts","../src/components/fundingFeeHistory/fundingFeeButton.tsx","../src/components/positions/positions.widget.tsx","../src/components/positions/combinePositions.script.ts","../src/components/positions/hooks/useSubAccountQuery.ts","../src/components/positions/positions.script.ts","../src/constants.ts","../src/utils/sorting.ts","../src/components/reversePosition/reversePosition.ui.tsx","../src/components/reversePosition/OrderInfoCard.ui.tsx","../src/components/reversePosition/reversePosition.script.tsx","../src/components/reversePosition/reversePosition.widget.tsx","../src/components/shared/hooks/useTabSort.ts","../src/components/positions/positions.ui.tsx","../src/provider/symbolProvider.tsx","../src/provider/symbolContext.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/rwaStatus/rwaStatus.tsx","../src/components/positions/closePosition/closePositions.mobile.ui.tsx","../src/components/positions/closePosition/components/quantitySlider.tsx","../src/components/positions/closePosition/closePosition.ui.tsx","../src/components/positions/closePosition/closePosition.widget.tsx","../src/components/positions/closePosition/closePosition.script.tsx","../src/components/positions/desktop/components.tsx","../src/components/positions/desktop/listElement.tsx","../src/components/positions/desktop/priceInput.tsx","../src/components/positions/desktop/quantityInput.tsx","../src/components/positions/desktop/numeralWithCtx.tsx","../src/components/positions/desktop/partialTPSL.tsx","../src/components/positions/desktop/reversePotisionButton.tsx","../src/components/positions/desktop/shareButton/shareButton.ui.tsx","../src/components/positions/desktop/shareButton/shareButton.script.tsx","../src/components/positions/desktop/shareButton/shareButton.widget.tsx","../src/components/positions/desktop/triggerPrice.tsx","../src/components/positions/desktop/unrealPnLHover.tsx","../src/components/positions/mobile/positionCell/positionCell.ui.tsx","../src/components/positions/mobile/positionCell/items.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/positionsRowProvider.tsx","../src/components/positionHistory/positionHistory.ui.tsx","../src/components/positionHistory/desktop/usePositionHistoryColumn.tsx","../src/components/positionHistory/mobile/positionHistoryCell.ui.tsx","../src/components/positionHistory/mobile/items.tsx","../src/components/positionHistory/positionHistory.script.tsx","../src/utils/utils.ts","../src/components/positionHistory/mobile/positionHistoryCell.script.tsx","../src/components/positionHistory/mobile/positionHistoryCell.widget.tsx","../src/components/positionHistory/positionHistory.widget.tsx","../src/components/liquidation/liquidation.ui.tsx","../src/components/liquidation/desktop/useLiquidationColumn.tsx","../src/components/liquidation/mobile/liquidationCell.ui.tsx","../src/components/liquidation/mobile/liquidationCell.script.tsx","../src/components/liquidation/mobile/liquidationCell.widget.tsx","../src/components/liquidation/liquidation.widget.tsx","../src/components/liquidation/liquidation.script.tsx","../src/components/closeAllPositions/closeAllPositions.ui.tsx","../src/components/closeAllPositions/closeAllPositions.script.tsx","../src/components/closeAllPositions/closeAllPositions.widget.tsx"],"names":["registerSimpleDialog","useMemo","useTranslation","Text","Flex","Decimal","useRef","Fragment","jsx","jsxs","useScreen","React","useEffect","useAccount","account","fetcher","usePositionStream","useDataTap","usePagination","useCallback","OrderSide","Badge","Divider","useSymbolsInfo","i18n","SimpleDialog","PositionsTabName","formatAddress","ListView","createContext","useContext","Box","cn","Tooltip","Button","SimpleSheet","ThrottledButton","useState","OrderType","Input","inputFormatter","useLocalStorage","modal","utils","PopoverRoot","PopoverContent","PopoverTrigger","Slider","useLeverageBySymbol","positions","useTpslPriceChecker","PositionType","CloseToLiqPriceIcon","formatNum","children","Grid","Statistic","toast","type","TableFeatures","AuthGuardDataTable","SharePnLDialogId","commifyOptional","LeverageBadge","LeverageDisplay","SharePnLBottomSheetId","capitalizeFirstLetter","differenceInDays","subDays","usePrivateQuery","AccountStatusEnum","data","dateRange","SymbolToken","AvgOpen","FundingFee","forwardRef","DataFilter","Header","Body","usePrivateInfiniteQuery","useFilter","item","useSubAccountMutation"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { MarketCloseConfirm } from \"./components/positions/closePosition/components/confirmDialog\";\n\nexport { usePositionsRowContext } from \"./components/positions/positionsRowContext\";\n\nexport { FundingFeeHistoryUI } from \"./components/fundingFeeHistory/fundingFeeHistory.ui\";\nexport { FundingFeeButton } from \"./components/fundingFeeHistory/fundingFeeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n CombinePositionsWidget,\n} from \"./components/positions/positions.widget\";\nexport type { PositionsInstance } from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps, SortType } from \"./types/types\";\nexport {\n useTabSort,\n PositionsTabName,\n} from \"./components/shared/hooks/useTabSort\";\nexport { useSort, sortList } from \"./utils/sorting\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\n\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";\nexport * from \"./components/closeAllPositions\";\nexport * from \"./components/reversePosition\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderEntity, OrderSide } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Text,\n CloseIcon,\n Flex,\n Divider,\n Badge,\n ThrottledButton,\n Box,\n} from \"@kodiak-finance/orderly-ui\";\nimport { commify, commifyOptional, Decimal } from \"@kodiak-finance/orderly-utils\";\n\nexport const ConfirmHeader: FC<{\n onClose?: () => void;\n title: string;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { hideCloseIcon = false } = props;\n return (\n <div className=\"oui-relative oui-w-full oui-border-b oui-border-line-4 oui-pb-3\">\n <Text size={\"base\"}>{props.title}</Text>\n {!hideCloseIcon && (\n <button\n onClick={props.onClose}\n className=\"oui-absolute oui-right-0 oui-top-0 oui-p-2 oui-text-base-contrast-54 hover:oui-text-base-contrast-80\"\n >\n <CloseIcon size={18} color=\"white\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const ConfirmFooter: FC<{\n onConfirm?: () => Promise<any>;\n onCancel?: () => void;\n submitting?: boolean;\n disabled?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n id=\"oui-positions-confirm-footer\"\n gap={2}\n width={\"100%\"}\n className=\"oui-mt-3 oui-pb-1\"\n >\n <Button\n id=\"oui-positions-confirm-footer-cancel-button\"\n color={\"secondary\"}\n fullWidth\n onClick={props.onCancel}\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={props.onConfirm}\n fullWidth\n loading={props.submitting}\n disabled={props.disabled}\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n};\n\nexport const OrderDetail = (props: {\n quantity: any;\n price: any;\n side: OrderSide;\n quoteDp: number;\n className?: string;\n}) => {\n const { quantity, price, quoteDp, side } = props;\n const { t } = useTranslation();\n\n const total = useMemo(() => {\n if (price && quantity) {\n return new Decimal(price)\n .mul(quantity)\n .toFixed(quoteDp, Decimal.ROUND_DOWN);\n }\n return \"--\";\n }, [price, quantity]);\n\n return (\n <Flex\n direction={\"column\"}\n gap={1}\n width={\"100%\"}\n className=\"oui-text-sm oui-text-base-contrast-54\"\n py={5}\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.qty\")}</Text>\n <Text color={side === OrderSide.BUY ? \"success\" : \"danger\"}>\n {quantity}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.price\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {price}\n </Text.formatted>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={1}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {total}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n\nexport const MarketCloseConfirm: FC<{\n base?: string;\n quantity?: string;\n onClose?: () => void;\n close?: () => void;\n onConfirm?: () => Promise<any>;\n submitting?: boolean;\n hideCloseIcon?: boolean;\n classNames?: {\n root?: string;\n };\n}> = (props) => {\n const { t } = useTranslation();\n\n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n func?.();\n };\n return (\n <Flex direction={\"column\"} className={props.classNames?.root}>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.marketClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {t(\"positions.marketClose.description\", {\n quantity: commifyOptional(props.quantity),\n base: props.base,\n })}\n </Text>\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={async () => {\n await props.onConfirm?.();\n onCancel();\n }}\n submitting={props.submitting}\n />\n </Flex>\n );\n};\n\nexport const LimitConfirmDialog: FC<{\n base: string;\n quantity: string;\n price: string;\n onClose?: () => void;\n onConfirm: () => Promise<any>;\n order: OrderEntity;\n submitting: boolean;\n quoteDp?: number;\n hideCloseIcon?: boolean;\n}> = (props) => {\n const { order, quoteDp, quantity, price } = props;\n const { side } = order;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.onClose?.();\n };\n\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title={t(\"positions.limitClose\")}\n hideCloseIcon={props.hideCloseIcon}\n />\n <Box mt={5}>\n <Text intensity={54} size=\"sm\">\n {t(\"positions.limitClose.description\", {\n quantity: commify(props.quantity),\n base: props.base,\n })}\n </Text>\n </Box>\n\n <Flex gap={2} mb={4} mt={5} justify={\"between\"}>\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n >\n {order.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n </Flex>\n </Flex>\n\n <Divider className=\"oui-w-full\" />\n\n <OrderDetail\n className=\"oui-text-sm\"\n price={price}\n quantity={quantity}\n side={order.side}\n quoteDp={quoteDp ?? 2}\n />\n <ConfirmFooter\n onCancel={onCancel}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n />\n </>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { API, OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\n\nexport interface PositionsRowContextState {\n quantity: string;\n price: string;\n type: OrderType;\n side: OrderSide;\n position: API.PositionExt | API.PositionTPSLExt;\n updateQuantity: (value: string) => void;\n updatePriceChange: (value: string) => void;\n updateOrderType: (value: OrderType) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: API.AlgoOrder;\n partialTPSLOrder?: API.AlgoOrder;\n quoteDp?: number;\n baseDp?: number;\n baseTick?: number;\n errors: any | undefined;\n}\n\nexport const PositionsRowContext = createContext(\n {} as PositionsRowContextState,\n);\n\nexport const usePositionsRowContext = () => {\n return useContext(PositionsRowContext);\n};\n","import { FC, useCallback, useMemo } from \"react\";\nimport { usePrivateInfiniteQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport {\n Grid,\n Statistic,\n DataTable,\n Text,\n ListView,\n Flex,\n useScreen,\n cn,\n Tooltip,\n ExclamationFillIcon,\n modal,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { EndReachedBox } from \"./endReachedBox\";\n\ntype FundingFeeHistory = {\n created_time: number;\n funding_fee: number;\n funding_rate: number;\n mark_price: number;\n payment_type: \"Pay\" | \"Receive\";\n status: \"Accrued\" | \"Settled\";\n symbol: string;\n updated_time: number;\n};\n\nconst PAGE_SIZE = 60;\n\nexport const FundingFeeHistoryUI: FC<{\n total: number;\n symbol: string;\n start_t: string;\n end_t: string;\n}> = ({ total, symbol, start_t, end_t }) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const { isLoading, data, setSize } =\n usePrivateInfiniteQuery<FundingFeeHistory>(\n (pageIndex, previousPageData) => {\n if (\n (!previousPageData || (previousPageData.length ?? 0) < PAGE_SIZE) &&\n pageIndex > 0\n )\n return null;\n return `/v1/funding_fee/history?page=${pageIndex + 1}&size=${PAGE_SIZE}&symbol=${symbol}&start_t=${start_t}&end_t=${end_t}`;\n },\n {\n revalidateFirstPage: false,\n },\n );\n\n const loadMore = useCallback(() => {\n setSize((prev) => {\n return prev + 1;\n });\n }, [setSize]);\n\n const flattenData = useMemo(() => {\n if (!Array.isArray(data)) return [];\n return data.flat().map((item) => {\n return {\n ...item,\n funding_fee: -item.funding_fee,\n };\n });\n }, [data]);\n\n const listView = useMemo(() => {\n if (isMobile) {\n return (\n <HistoryDataListViewSimple\n data={flattenData ?? EMPTY_LIST}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }\n return (\n <HistoryDataListView\n data={flattenData ?? EMPTY_LIST}\n isLoading={isLoading}\n loadMore={loadMore}\n />\n );\n }, [isMobile, flattenData, isLoading]);\n\n return (\n <div>\n <Grid\n cols={2}\n gapX={3}\n className=\"oui-sticky oui-top-0 oui-z-10 oui-bg-base-8 oui-py-4\"\n >\n <div className=\"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3\">\n {/* <Statistic label={\"Instrument\"} /> */}\n <Flex direction={\"column\"} gap={1} itemAlign={\"start\"}>\n <span className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"common.symbol\")}\n </span>\n <Text.formatted\n rule=\"symbol\"\n className=\"oui-font-semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n </Flex>\n </div>\n <div className=\"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3\">\n <Statistic\n label={\n isMobile ? (\n <FundingFeeLabelButton\n label={`${t(\"funding.fundingFee\")} (USDC)`}\n tooltip={t(\"positions.fundingFee.tooltip\")}\n size={14}\n />\n ) : (\n <FundingFeeLabel\n label={`${t(\"funding.fundingFee\")} (USDC)`}\n tooltip={t(\"positions.fundingFee.tooltip\")}\n size={14}\n />\n )\n }\n valueProps={{\n ignoreDP: true,\n coloring: true,\n showIdentifier: true,\n }}\n >\n {total}\n </Statistic>\n </div>\n </Grid>\n {listView}\n </div>\n );\n};\n\nconst FundingFeeLabelButton: FC<{\n label: string;\n tooltip: string;\n size: number;\n}> = ({ label, tooltip, size }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <span>{label}</span>\n <button\n className=\"oui-flex oui-items-center\"\n onClick={() => {\n modal.alert({\n message: tooltip,\n title: t(\"positions.fundingFee.title\"),\n });\n }}\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={size}\n />\n </button>\n </div>\n );\n};\n\nconst FundingFeeLabel: FC<{ label: string; tooltip: string; size: number }> = ({\n label,\n tooltip,\n size,\n}) => {\n return (\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <span>{label}</span>\n <Tooltip content={<div className=\"oui-w-64\">{tooltip}</div>}>\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={size}\n />\n </Tooltip>\n </div>\n );\n};\n\ntype ListProps = {\n isLoading: boolean;\n data: any[];\n loadMore: () => void;\n};\n\nconst HistoryDataListView: FC<ListProps> = ({ isLoading, data, loadMore }) => {\n const { t } = useTranslation();\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.time\"),\n dataIndex: \"created_time\",\n width: 120,\n render: (value: string) => {\n return <Text.formatted rule=\"date\">{value}</Text.formatted>;\n },\n },\n {\n title: (\n <FundingFeeLabel\n label={t(\"funding.fundingRate\")}\n tooltip={t(\"positions.fundingRate.tooltip\")}\n size={12}\n />\n ),\n dataIndex: \"funding_rate\",\n formatter: (value: string) => new Decimal(value).mul(100).toString(),\n render: (value: string) => {\n return <span>{`${value}%`}</span>;\n },\n },\n {\n title: t(\"funding.paymentType\"),\n dataIndex: \"payment_type\",\n formatter: (value: string) => {\n return value === \"Pay\"\n ? t(\"funding.paymentType.paid\")\n : t(\"funding.paymentType.received\");\n },\n render: (value: string) => <span>{value}</span>,\n },\n {\n title: `${t(\"funding.fundingFee\")} (USDC)`,\n dataIndex: \"funding_fee\",\n render: (value: string) => {\n return (\n <Text.numeral rule=\"price\" coloring showIdentifier ignoreDP>\n {value}\n </Text.numeral>\n );\n },\n },\n ];\n }, [t]);\n\n return (\n <div className=\"oui-h-[calc(80vh_-_132px_-_8px)] oui-overflow-y-auto\">\n <EndReachedBox onEndReached={loadMore}>\n <DataTable\n classNames={{\n root: cn(\"oui-h-auto oui-bg-base-8 oui-text-sm\"),\n }}\n columns={columns}\n dataSource={data ?? EMPTY_LIST}\n loading={isLoading}\n />\n </EndReachedBox>\n </div>\n );\n};\n\nconst HistoryDataListViewSimple: FC<ListProps> = ({\n data,\n isLoading,\n loadMore,\n}) => {\n const renderItem = useCallback((item: FundingFeeHistory) => {\n return <FundingFeeItem item={item} />;\n }, []);\n return (\n <div className=\"oui-h-[calc(80vh_-_104px)] oui-overflow-y-auto\">\n <ListView\n dataSource={data}\n renderItem={renderItem}\n isLoading={isLoading}\n contentClassName=\"oui-space-y-0\"\n loadMore={loadMore}\n />\n </div>\n );\n};\n\nconst FundingFeeItem: FC<{\n item: any;\n}> = ({ item }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-space-y-2 oui-border-t oui-border-line-6 oui-py-2\">\n <Flex justify={\"between\"}>\n <Statistic\n label={\n <FundingFeeLabelButton\n label={t(\"funding.fundingRate\")}\n tooltip={t(\"positions.fundingRate.tooltip\")}\n size={12}\n />\n }\n classNames={{\n label: \"oui-text-2xs\",\n }}\n valueProps={{\n ignoreDP: true,\n rule: \"percentages\",\n className: \"oui-text-xs\",\n }}\n >\n {item.funding_rate}\n </Statistic>\n <Statistic\n label={t(\"common.amount\")}\n className=\"oui-items-end\"\n classNames={{\n label: \"oui-text-2xs\",\n }}\n valueProps={{\n ignoreDP: true,\n coloring: true,\n as: \"div\",\n className: \"oui-text-xs\",\n showIdentifier: true,\n }}\n >\n {item.funding_fee}\n </Statistic>\n </Flex>\n <Flex justify={\"between\"}>\n <Text.formatted\n rule=\"date\"\n className=\"oui-text-base-contrast-36\"\n size=\"2xs\"\n >\n {item.created_time}\n </Text.formatted>\n <Text size=\"sm\" intensity={80}>\n {item.payment_type === \"Pay\"\n ? t(\"funding.paymentType.paid\")\n : t(\"funding.paymentType.received\")}\n </Text>\n </Flex>\n </div>\n );\n};\n","import { FC, useRef, type PropsWithChildren } from \"react\";\nimport { useEndReached } from \"./useEndReached\";\n\nexport interface EndReachedBoxProps {\n onEndReached?: () => void;\n // className?: string;\n}\n\nexport const EndReachedBox: FC<PropsWithChildren<EndReachedBoxProps>> = (\n props,\n) => {\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n const { onEndReached } = props;\n\n useEndReached(sentinelRef, () => {\n onEndReached?.();\n });\n\n return (\n <>\n {props.children}\n <div\n ref={sentinelRef}\n className=\"oui-relative oui-invisible oui-h-[25px] oui-bg-red-400 oui-top-[-300px]\"\n />\n </>\n );\n};\n","import { useEffect, useRef, MutableRefObject } from \"react\";\n\n/**\n * Listen for the specified element to scroll to the bottom\n */\nexport function useEndReached(\n sentinelRef: MutableRefObject<HTMLDivElement | null>,\n onEndReached?: () => void,\n) {\n const observer = useRef<IntersectionObserver>();\n const cb = useRef(onEndReached);\n\n cb.current = onEndReached;\n\n useEffect(() => {\n const options: IntersectionObserverInit = {\n root: null,\n rootMargin: \"0px\",\n threshold: 0,\n };\n\n const handleObserver = (entries: IntersectionObserverEntry[]) => {\n console.log(\">>>>>>>>handleObserver\", entries);\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n cb.current?.();\n }\n });\n };\n\n observer.current = new IntersectionObserver(handleObserver, options);\n\n return () => {\n // console.log(\"------->disconnect\");\n observer.current?.disconnect();\n };\n }, []);\n\n useEffect(() => {\n observer.current?.observe(sentinelRef.current!);\n }, []);\n}\n","import { FC } from \"react\";\nimport { useBoolean } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n SimpleDialog,\n SimpleSheet,\n Text,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { FundingFeeHistoryUI } from \"./fundingFeeHistory.ui\";\n\nexport const FundingFeeButton: FC<{\n fee: number;\n symbol: string;\n start_t: string;\n end_t: string;\n}> = ({ fee, symbol, start_t, end_t }) => {\n const { t } = useTranslation();\n const [isOpen, { setTrue, setFalse }] = useBoolean(false);\n const { isMobile } = useScreen();\n\n return (\n <>\n <button onClick={setTrue}>\n <Text.numeral\n rule=\"price\"\n coloring\n showIdentifier\n ignoreDP\n className=\"oui-border-b oui-border-line-16 oui-border-dashed oui-py-0.5\"\n >\n {fee}\n </Text.numeral>\n </button>\n {isMobile ? (\n <SimpleSheet\n open={isOpen}\n onOpenChange={setFalse}\n title={t(\"funding.fundingFee\")}\n classNames={{\n body: \"oui-max-h-[80vh] oui-py-0\",\n }}\n >\n <FundingFeeHistoryUI\n total={fee}\n symbol={symbol}\n start_t={start_t}\n end_t={end_t}\n />\n </SimpleSheet>\n ) : (\n <SimpleDialog\n open={isOpen}\n onOpenChange={setFalse}\n title={t(\"funding.fundingFee\")}\n classNames={{\n content: \"lg:oui-max-w-[640px]\",\n body: \"oui-max-h-[80vh] oui-bg-base-8 lg:oui-py-0\",\n }}\n >\n <FundingFeeHistoryUI\n total={fee}\n symbol={symbol}\n start_t={start_t}\n end_t={end_t}\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { Table } from \"@kodiak-finance/orderly-ui\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useCombinePositionsScript } from \"./combinePositions.script\";\nimport { usePositionsScript } from \"./positions.script\";\nimport { MobilePositions, Positions, CombinePositions } from \"./positions.ui\";\n\nexport type PositionsInstance = {\n getRowCount?: () => number;\n getDataSource?: () => any[] | null;\n};\n\nexport const PositionsWidget = forwardRef<PositionsInstance, PositionsProps>(\n (props, ref) => {\n const state = usePositionsScript(props);\n const tableRef = React.useRef<Table<any>>(null);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return tableRef.current?.getRowCount?.() ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return <Positions {...state} tableRef={tableRef} />;\n },\n);\n\nPositionsWidget.displayName = \"PositionsWidget\";\n\nexport const MobilePositionsWidget = React.forwardRef<\n PositionsInstance,\n PositionsProps\n>((props, ref) => {\n const state = usePositionsScript(props);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return state.dataSource?.length ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return <MobilePositions {...state} />;\n});\n\nMobilePositionsWidget.displayName = \"MobilePositionsWidget\";\n\nexport const CombinePositionsWidget = forwardRef<\n PositionsInstance,\n PositionsProps\n>((props, ref) => {\n const state = useCombinePositionsScript(props);\n const tableRef = React.useRef<Table<any>>(null);\n\n React.useImperativeHandle(ref, () => ({\n getRowCount: () => {\n return tableRef.current?.getRowCount?.() ?? 0;\n },\n getDataSource: () => {\n // CombinePositions has a different data structure\n return null;\n },\n }));\n\n return <CombinePositions {...state} tableRef={tableRef} />;\n});\n\nCombinePositionsWidget.displayName = \"CombinePositionsWidget\";\n","import { useEffect, useMemo } from \"react\";\nimport { produce } from \"immer\";\nimport {\n SubAccount,\n useAccount,\n usePositionStream,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { positions, account as _account } from \"@kodiak-finance/orderly-perp\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { formatAddress, usePagination } from \"@kodiak-finance/orderly-ui\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useSubAccountQuery } from \"./hooks/useSubAccountQuery\";\n\nexport enum AccountType {\n ALL = \"All accounts\",\n MAIN = \"Main accounts\",\n}\n\nexport const useCombinePositionsScript = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n selectedAccount,\n } = props;\n\n const { pagination, setPage } = usePagination({ pageSize: 50 });\n\n useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const symbolsInfo = useSymbolsInfo();\n\n const { state } = useAccount();\n\n const [oldPositions, , { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n // need to get sub account Positions info to calculate portfolio and positions\n const {\n data: newPositions = [],\n isLoading: isPositionLoading,\n mutate: mutatePositions,\n } = usePrivateQuery<API.PositionExt[]>(\"/v1/client/aggregate/positions\", {\n // formatter: (data) => data,\n errorRetryCount: 3,\n });\n\n // need to get sub account info to calculate portfolio and positions\n const { data: accountInfo = [], isLoading: isAccountInfoLoading } =\n useSubAccountQuery<API.AccountInfo[]>(\"/v1/client/info\", {\n accountId: newPositions.map((item) => item.account_id!),\n revalidateOnFocus: false,\n });\n\n const processPositions = produce<API.PositionTPSLExt[]>(\n newPositions.filter((acc) => acc.account_id !== state.mainAccountId),\n (draft) => {\n for (const item of draft) {\n const info = symbolsInfo[item.symbol];\n const notional = positions.notional(item.position_qty, item.mark_price);\n const account = accountInfo.find(\n (acc) => acc.account_id === item.account_id,\n );\n const baseMMR = info?.(\"base_mmr\");\n const baseIMR = info?.(\"base_imr\");\n if (!baseMMR || !baseIMR) {\n continue;\n }\n\n const MMR = positions.MMR({\n baseMMR,\n baseIMR,\n IMRFactor: account?.imr_factor[item.symbol] ?? 0,\n positionNotional: notional,\n IMR_factor_power: 4 / 5,\n });\n\n const mm = positions.maintenanceMargin({\n positionQty: item.position_qty,\n markPrice: item.mark_price,\n MMR,\n });\n\n const unrealPnl = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: item.mark_price,\n });\n\n const maxLeverage = item.leverage || 1;\n\n const imr = _account.IMR({\n maxLeverage,\n baseIMR,\n IMR_Factor: account?.imr_factor[item.symbol] ?? 0,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const unrealPnlROI = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl,\n });\n\n let unrealPnl_index = 0;\n let unrealPnlROI_index = 0;\n if (item.index_price) {\n unrealPnl_index = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n // markPrice: unRealizedPrice,\n markPrice: item.index_price,\n });\n unrealPnlROI_index = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl_index,\n });\n }\n item.mmr = MMR;\n item.mm = mm;\n item.notional = notional;\n item.unrealized_pnl = unrealPnl;\n item.unrealized_pnl_ROI = unrealPnlROI;\n item.unrealized_pnl_ROI_index = unrealPnlROI_index;\n }\n },\n );\n\n const dataSource =\n useDataTap(\n [...oldPositions?.rows, ...processPositions].filter(\n (acc) => acc.position_qty !== 0,\n ),\n ) ?? [];\n\n const filtered = useMemo(() => {\n if (!selectedAccount || selectedAccount === AccountType.ALL) {\n return dataSource;\n }\n return dataSource.filter((item) => {\n if (selectedAccount === AccountType.MAIN) {\n return item.account_id === state.mainAccountId || !item.account_id;\n } else {\n return item.account_id === selectedAccount;\n }\n });\n }, [dataSource, selectedAccount, state.mainAccountId]);\n\n const groupDataSource = useMemo(() => {\n return groupDataByAccount(filtered, {\n mainAccountId: state.mainAccountId,\n subAccounts: state.subAccounts,\n });\n }, [filtered, state.mainAccountId, state.subAccounts]);\n\n const mergedLoading = useMemo<boolean>(() => {\n return isLoading || isPositionLoading || isAccountInfoLoading;\n }, [isLoading, isPositionLoading, isAccountInfoLoading]);\n\n return {\n tableData: groupDataSource,\n isLoading: mergedLoading,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n onSymbolChange,\n pagination,\n mutatePositions,\n };\n};\n\nexport type CombinePositionsState = ReturnType<\n typeof useCombinePositionsScript\n>;\n\nexport const groupDataByAccount = (\n data: API.PositionExt[],\n options: {\n mainAccountId?: string;\n subAccounts?: SubAccount[];\n },\n) => {\n const { mainAccountId = \"\", subAccounts = [] } = options;\n\n const map = new Map<\n PropertyKey,\n {\n id: string;\n description: string;\n children: API.PositionExt[];\n }\n >();\n\n for (const item of data) {\n // if account_id is not set, as a main account\n const accountId = item.account_id || mainAccountId;\n const findSubAccount = subAccounts.find((acc) => acc.id === accountId);\n if (map.has(accountId)) {\n map.get(accountId)?.children?.push(item);\n } else {\n map.set(accountId, {\n id: accountId,\n description:\n accountId === mainAccountId\n ? i18n.t(\"common.mainAccount\")\n : findSubAccount?.description ||\n formatAddress(findSubAccount?.id || \"\"),\n children: [item],\n });\n }\n }\n return {\n expanded: Array.from(map.keys()),\n dataSource: Array.from(map.values()),\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n type SWRConfiguration,\n type SWRHook,\n type SWRResponse,\n type Middleware,\n useAccount,\n useSWR,\n fetcher,\n useConfig,\n useAccountInstance,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\n\nexport type QueryOptions<T> = SWRConfiguration & {\n formatter?: (data: any) => T;\n accountId?: string | string[];\n};\n\nconst signatureMiddleware = (\n account: ReturnType<typeof useAccountInstance>,\n accountId?: string | string[],\n): Middleware => {\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n // @ts-ignore\n return (useSWRNext: SWRHook) => {\n return (key, fetcher, config) => {\n try {\n const extendedFetcher = async (args: any) => {\n const url = Array.isArray(args) ? args[0] : args;\n const fullUrl = `${apiBaseUrl}${url}`;\n const signer = account.signer;\n const payload: MessageFactor = { method: \"GET\", url };\n const signature = await signer.sign(payload, getTimestamp());\n const ids = Array.isArray(accountId) ? accountId : [accountId];\n return Promise.all(\n ids.map((id) => {\n // @ts-ignore\n return fetcher(fullUrl, {\n headers: {\n ...signature,\n \"orderly-account-id\": id,\n },\n });\n }),\n );\n };\n // @ts-ignore\n return useSWRNext(key, extendedFetcher, config);\n } catch (e) {\n throw e;\n }\n };\n };\n};\n\nexport const useSubAccountQuery = <T>(\n query: Parameters<SWRHook>[0],\n options?: QueryOptions<T>,\n): SWRResponse<T> => {\n const { formatter, accountId, ...swrOptions } = options || {};\n const { state, account } = useAccount();\n const middleware = Array.isArray(options?.use) ? (options?.use ?? []) : [];\n\n const ids = Array.isArray(accountId) ? accountId : [accountId];\n\n const shouldFetch =\n ids.filter(Boolean).length &&\n (state.status >= AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected);\n\n return useSWR<T>(\n () => (shouldFetch ? [query, ids] : null),\n (url: string, init: RequestInit) => {\n return fetcher(url, init, { formatter });\n },\n {\n ...swrOptions,\n use: [...middleware, signatureMiddleware(account, ids as string[])],\n onError: () => {},\n },\n );\n};\n\nexport type MessageFactor = {\n url: string;\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n data?: any;\n};\n","import React from \"react\";\nimport { usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { usePagination } from \"@kodiak-finance/orderly-ui\";\nimport { TRADING_POSITIONS_SORT_STORAGE_KEY } from \"../../constants\";\nimport type { PositionsProps } from \"../../types/types\";\nimport { useSort } from \"../../utils/sorting\";\nimport { useReversePositionEnabled } from \"../reversePosition\";\nimport { useTabSort, PositionsTabName } from \"../shared/hooks/useTabSort\";\n\nexport const usePositionsScript = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n enableSortingStorage = true, // Default to true for backward compatibility\n } = props;\n // const [showAllSymbol] = useLocalStorage(\n // \"showAllSymbol\",\n // true\n // );\n const { pagination, setPage } = usePagination({ pageSize: 50 });\n\n const { isEnabled: positionReverse } = useReversePositionEnabled();\n\n // Sorting functionality\n const { tabSort, onTabSort } = useTabSort({\n storageKey: TRADING_POSITIONS_SORT_STORAGE_KEY,\n });\n\n const { onSort, getSortedList, sort } = useSort(\n enableSortingStorage ? tabSort?.[PositionsTabName.Positions] : undefined,\n enableSortingStorage ? onTabSort(PositionsTabName.Positions) : undefined,\n );\n\n React.useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const [data, , { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n const rawDataSource =\n useDataTap(data?.rows, { fallbackData: [] }) ?? undefined;\n const dataSource = getSortedList(rawDataSource || []);\n\n return {\n dataSource,\n isLoading, // will be use isLoading when usePositionStream support\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n symbol,\n onSymbolChange,\n pagination,\n onSort,\n positionReverse,\n initialSort: enableSortingStorage\n ? tabSort?.[PositionsTabName.Positions]\n : undefined,\n };\n};\n\nexport type PositionsState = ReturnType<typeof usePositionsScript>;\n","export const TRADING_POSITIONS_SORT_STORAGE_KEY =\n \"orderly_trading_positions_sort\";\n","import { useCallback, useEffect, useState } from \"react\";\nimport { TableSort } from \"@kodiak-finance/orderly-ui\";\nimport { SortType } from \"../types/types\";\n\n/**\n * Compare two values intelligently\n */\nconst compareValues = (aValue: any, bValue: any): number => {\n // Handle null/undefined values (always sort to bottom)\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n\n // Convert to string first for type checking\n const aStr = String(aValue).trim();\n const bStr = String(bValue).trim();\n\n // More robust number detection - check if values can be converted to valid numbers\n const aNum = Number(aStr);\n const bNum = Number(bStr);\n const aIsNumber =\n !isNaN(aNum) && isFinite(aNum) && /^-?\\d*\\.?\\d+([eE][+-]?\\d+)?$/.test(aStr);\n const bIsNumber =\n !isNaN(bNum) && isFinite(bNum) && /^-?\\d*\\.?\\d+([eE][+-]?\\d+)?$/.test(bStr);\n\n if (aIsNumber && bIsNumber) {\n return aNum - bNum;\n }\n\n // Check if both are valid dates (ISO format or timestamp)\n const aIsDate = /^\\d{4}-\\d{2}-\\d{2}/.test(aStr) || /^\\d{13}$/.test(aStr);\n const bIsDate = /^\\d{4}-\\d{2}-\\d{2}/.test(bStr) || /^\\d{13}$/.test(bStr);\n\n if (aIsDate && bIsDate) {\n const aDate = new Date(aValue);\n const bDate = new Date(bValue);\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\n return aDate.getTime() - bDate.getTime();\n }\n }\n\n // String comparison - use localeCompare for proper string sorting\n return aStr.localeCompare(bStr, undefined, {\n sensitivity: \"base\",\n numeric: false,\n });\n};\n\nexport function sortList(list: any[], sort?: SortType) {\n const { sortKey, sortOrder } = sort || {};\n const sortedList = [...(list || [])];\n\n if (sortKey && sortOrder) {\n // sort list\n sortedList.sort((a: any, b: any) => {\n const comparison = compareValues(a[sortKey], b[sortKey]);\n // Handle sort order: desc means reverse the comparison result\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n }\n return sortedList;\n}\n\nexport function useSort(\n initialSort?: SortType,\n onSortChange?: (sort?: SortType) => void,\n) {\n const [sort, setSort] = useState<SortType | undefined>(initialSort);\n\n const onSort = useCallback((options?: TableSort) => {\n const nextSort = options\n ? {\n sortKey: options.sortKey,\n sortOrder: options.sort,\n }\n : undefined;\n\n setSort(nextSort);\n onSortChange?.(nextSort);\n // initialSort, onSortChange is not needed to be in the dependency array, otherwise it will cause infinite loop\n }, []);\n\n const getSortedList = useCallback(\n (list: any[]) => sortList(list, sort),\n [sort],\n );\n\n return {\n sort,\n onSort,\n getSortedList,\n };\n}\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport {\n ArrowDownShortIcon,\n ArrowUpShortIcon,\n Badge,\n Divider,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderInfoCard } from \"./OrderInfoCard.ui\";\nimport type { ReversePositionState } from \"./reversePosition.script\";\n\nexport type ReversePositionProps = ReversePositionState & {\n className?: string;\n style?: React.CSSProperties;\n onConfirm?: () => Promise<void>;\n onCancel?: () => void;\n};\n\nexport const ReversePosition: FC<ReversePositionProps> = (props) => {\n const { displayInfo, className, style, onConfirm, onCancel } = props;\n const { t } = useTranslation();\n\n if (!displayInfo) {\n return null;\n }\n\n const {\n symbol,\n base,\n quote,\n baseDp,\n quoteDp,\n positionQty,\n reverseQty,\n markPrice,\n leverage,\n isLong,\n } = displayInfo;\n\n // Determine side badges\n const closeSide = !isLong ? OrderSide.SELL : OrderSide.BUY;\n const openSide = isLong ? OrderSide.SELL : OrderSide.BUY;\n\n // UI display text translations\n const closeAction = isLong\n ? t(\"positions.reverse.marketCloseLong\")\n : t(\"positions.reverse.marketCloseShort\");\n const openAction =\n openSide === OrderSide.BUY\n ? t(\"positions.reverse.marketOpenLong\")\n : t(\"positions.reverse.marketOpenShort\");\n const reverseTo = isLong\n ? t(\"positions.reverse.reverseToShort\")\n : t(\"positions.reverse.reverseToLong\");\n\n const reverseToIcon = isLong ? (\n <ArrowDownShortIcon size={16} color=\"danger\" opacity={1} />\n ) : (\n <ArrowUpShortIcon size={16} color=\"success\" opacity={1} />\n );\n const priceLabel = (\n <Flex itemAlign=\"center\" gap={1}>\n <Text.numeral dp={quoteDp} size=\"sm\" intensity={80}>\n {markPrice}\n </Text.numeral>\n <Text size=\"sm\" intensity={36}>\n {quote}\n </Text>\n </Flex>\n );\n\n return (\n <Flex\n direction=\"column\"\n className={className}\n style={style}\n gap={4}\n width=\"100%\"\n >\n {/* Symbol and Reverse To Badge */}\n <Flex direction=\"column\" gap={2} width=\"100%\">\n <Flex justify=\"between\" itemAlign=\"center\" width=\"100%\">\n <Text.formatted\n size=\"base\"\n weight=\"semibold\"\n rule=\"symbol\"\n formatString=\"base-type\"\n intensity={98}\n showIcon\n >\n {symbol}\n </Text.formatted>\n\n <Badge color={isLong ? \"sell\" : \"buy\"} size=\"xs\">\n {reverseTo}\n </Badge>\n </Flex>\n\n {/* Mark Price */}\n <Flex justify=\"between\" itemAlign=\"center\" width=\"100%\">\n <Text size=\"sm\" intensity={54}>\n {t(\"common.markPrice\")}\n </Text>\n {priceLabel}\n </Flex>\n </Flex>\n\n <Divider intensity={4} className=\"oui-w-full\" />\n\n {/* Close Position Section */}\n <OrderInfoCard\n title={closeAction}\n side={closeSide}\n leverage={leverage}\n qty={positionQty}\n baseDp={baseDp}\n />\n\n <Flex direction=\"row\" itemAlign=\"center\" width=\"100%\">\n <Divider intensity={8} className=\"oui-w-full\" />\n <Flex className=\"oui-px-4 oui-py-[3px] oui-border oui-border-base-contrast-12 oui-rounded-full oui-shrink-0\">\n {reverseToIcon}\n <Text size=\"2xs\" color={isLong ? \"danger\" : \"success\"}>\n {reverseTo}\n </Text>\n </Flex>\n <Divider intensity={8} className=\"oui-w-full\" />\n </Flex>\n\n {/* Open Position Section */}\n <OrderInfoCard\n title={openAction}\n side={openSide}\n leverage={leverage}\n qty={reverseQty}\n baseDp={baseDp}\n />\n\n {/* Reverse To Description */}\n <Text size=\"2xs\" color=\"warning\" weight=\"semibold\">\n {t(\"positions.reverse.description\")}\n </Text>\n </Flex>\n );\n};\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { Badge, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport interface OrderInfoCardProps {\n /** Order title */\n title: string;\n /** Order side */\n side: OrderSide;\n /** Leverage multiplier */\n leverage: number;\n /** Quantity */\n qty: string;\n /** Base decimal places */\n baseDp: number;\n /** Price label, defaults to \"Market\" */\n estLiqPrice?: React.ReactNode;\n /** Custom class name */\n className?: string;\n}\n\n/**\n * Order info card component\n * Displays detailed order information including title, side, leverage, quantity, and price\n */\nexport const OrderInfoCard: FC<OrderInfoCardProps> = ({\n title,\n side,\n leverage,\n qty,\n baseDp,\n estLiqPrice,\n className,\n}) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n direction=\"column\"\n gap={3}\n itemAlign=\"start\"\n className={`oui-bg-base-6 oui-rounded-lg oui-p-3 oui-w-full oui-font-weight-semibold ${className || \"\"}`}\n >\n <Flex justify=\"between\" itemAlign=\"center\" gap={2}>\n <Text size=\"sm\" weight=\"semibold\" intensity={98}>\n {title}\n </Text>\n <Flex itemAlign=\"center\" gap={1}>\n <Badge color={side === OrderSide.SELL ? \"sell\" : \"buy\"} size=\"xs\">\n {side === OrderSide.SELL ? t(\"common.sell\") : t(\"common.buy\")}\n </Badge>\n <Badge color=\"neutral\" size=\"xs\">\n {leverage}X\n </Badge>\n </Flex>\n </Flex>\n\n {/* Order Info */}\n <Flex\n direction=\"column\"\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n >\n <Flex\n direction=\"row\"\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n gap={1}\n >\n <Text size=\"sm\" intensity={54}>\n {t(\"common.qty\")}\n </Text>\n <Text.numeral dp={baseDp} size=\"sm\" color=\"danger\" padding={false}>\n {qty}\n </Text.numeral>\n </Flex>\n <Flex\n direction=\"row\"\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n gap={1}\n >\n <Text size=\"sm\" intensity={54}>\n {t(\"common.price\")}\n </Text>\n <Text size=\"sm\" weight=\"semibold\">\n {t(\"common.market\")}\n </Text>\n </Flex>\n {estLiqPrice && (\n <Flex\n direction=\"row\"\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n gap={1}\n >\n <Text size=\"sm\" intensity={54}>\n {t(\"orderEntry.estLiqPrice\")}\n </Text>\n <Text size=\"sm\" weight=\"semibold\">\n {estLiqPrice}\n </Text>\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n useLocalStorage,\n useMarkPrice,\n useMaxQty,\n useSubAccountMutation,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { usePositionsRowContext } from \"../positions/positionsRowContext\";\n\nexport interface UseReversePositionScriptOptions {\n position: API.PositionExt | API.PositionTPSLExt;\n onSuccess?: () => void;\n onError?: (error: any) => void;\n}\n\n/**\n * Hook for managing reverse position enabled state\n * Separates desktop and mobile preferences internally\n */\nexport const useReversePositionEnabled = () => {\n const { isMobile, isDesktop } = useScreen();\n\n // Preference storage for desktop and mobile separately\n const [desktopEnabled, setDesktopEnabled] = useLocalStorage(\n \"orderly_reverse_position_enabled_desktop\",\n true,\n );\n const [mobileEnabled, setMobileEnabled] = useLocalStorage(\n \"orderly_reverse_position_enabled_mobile\",\n true,\n );\n\n // Get current preference based on platform\n const isEnabled = useMemo(() => {\n if (isMobile) {\n return mobileEnabled;\n }\n if (isDesktop) {\n return desktopEnabled;\n }\n return false;\n }, [isMobile, isDesktop, desktopEnabled, mobileEnabled]);\n\n // Set enabled state based on current platform\n const setEnabled = useCallback(\n (enabled: boolean) => {\n if (isMobile) {\n setMobileEnabled(enabled);\n } else if (isDesktop) {\n setDesktopEnabled(enabled);\n }\n },\n [isMobile, isDesktop, setMobileEnabled, setDesktopEnabled],\n );\n\n return {\n isEnabled,\n setEnabled,\n };\n};\n\nexport const useReversePositionScript = (\n options?: UseReversePositionScriptOptions,\n) => {\n const { position, onSuccess, onError } = options || {};\n const { t } = useTranslation();\n const { isEnabled, setEnabled } = useReversePositionEnabled();\n\n const symbolsInfo = useSymbolsInfo();\n const symbol = position?.symbol || \"\";\n const { data: symbolMarketPrice } = useMarkPrice(symbol);\n const symbolInfo = symbolsInfo?.[symbol];\n\n // Calculate reverse order quantity\n const positionQty = useMemo(() => {\n if (!position) return 0;\n return Math.abs(position.position_qty);\n }, [position]);\n\n // Determine current position side\n const isLong = useMemo(() => {\n if (!position) return false;\n return position.position_qty > 0;\n }, [position]);\n\n // Calculate max quantity for opening opposite position\n const oppositeSide = useMemo(() => {\n return isLong ? OrderSide.SELL : OrderSide.BUY;\n }, [isLong]);\n\n const maxOpenQty = useMaxQty(symbol, oppositeSide, false);\n\n // Calculate actual reverse quantity (use max available if insufficient margin)\n const reverseQty = useMemo(() => {\n if (!position) return 0;\n const desiredQty = positionQty;\n // If margin is insufficient, use maximum available\n if (desiredQty > maxOpenQty && maxOpenQty > 0) {\n return maxOpenQty;\n }\n return desiredQty;\n }, [positionQty, maxOpenQty]);\n\n const [doCreateOrder, { isMutating }] = useSubAccountMutation(\n \"/v1/order\",\n \"POST\",\n {\n accountId: position?.account_id,\n },\n );\n\n // Reverse position logic\n const reversePosition = useCallback(async () => {\n if (!position || positionQty === 0) {\n toast.error(\"No position to reverse\");\n return false;\n }\n\n try {\n // Step 1: Close current position (market order with reduce_only)\n const closeSide = isLong ? OrderSide.SELL : OrderSide.BUY;\n const closeOrder = await doCreateOrder({\n symbol: position.symbol,\n order_type: OrderType.MARKET,\n side: closeSide,\n order_quantity: new Decimal(positionQty).toString(),\n reduce_only: true,\n });\n\n // if (!closeOrder.success) {\n // throw new Error(closeOrder.message || \"Failed to close position\");\n // }\n\n // Step 2: Open opposite position (market order without reduce_only)\n const openSide = isLong ? OrderSide.SELL : OrderSide.BUY;\n const openOrder = await doCreateOrder({\n symbol: position.symbol,\n order_type: OrderType.MARKET,\n side: openSide,\n order_quantity: new Decimal(reverseQty).toString(),\n reduce_only: false,\n });\n\n if (!openOrder.success) {\n throw new Error(\n openOrder.message || \"Failed to open opposite position\",\n );\n }\n\n onSuccess?.();\n\n return true;\n } catch (error: any) {\n // if (error?.message !== undefined) {\n // toast.error(error.message);\n // } else {\n // toast.error(\"Failed to reverse position\");\n // }\n onError?.(error);\n return false;\n }\n }, [position, positionQty, reverseQty, isLong, doCreateOrder, t, onSuccess]);\n\n // Get display information\n const displayInfo = useMemo(() => {\n if (!position || !symbolInfo) {\n return null;\n }\n\n const base = symbolInfo(\"base\");\n const quote = symbolInfo(\"quote\");\n const baseDp = symbolInfo(\"base_dp\");\n const quoteDp = symbolInfo(\"quote_dp\");\n const leverage = position.leverage || 1;\n\n return {\n symbol: position.symbol,\n base,\n quote,\n baseDp,\n quoteDp,\n positionQty: new Decimal(positionQty).todp(baseDp).toString(),\n reverseQty: new Decimal(reverseQty).todp(baseDp).toString(),\n markPrice: symbolMarketPrice\n ? new Decimal(symbolMarketPrice).todp(quoteDp).toString()\n : \"--\",\n leverage,\n isLong,\n };\n }, [\n position,\n symbolMarketPrice,\n symbolInfo,\n positionQty,\n reverseQty,\n isLong,\n ]);\n\n return {\n isEnabled,\n setEnabled,\n reversePosition,\n isReversing: isMutating,\n displayInfo,\n positionQty,\n reverseQty,\n isLong,\n };\n};\n\nexport type ReversePositionState = ReturnType<typeof useReversePositionScript>;\n","import React, { useMemo } from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n registerSimpleDialog,\n SimpleDialog,\n useModal,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useReversePositionScript } from \"./reversePosition.script\";\nimport { ReversePosition } from \"./reversePosition.ui\";\n\nexport type ReversePositionWidgetProps = {\n position: API.PositionExt | API.PositionTPSLExt;\n close?: () => void;\n resolve?: (value?: any) => void;\n reject?: (reason?: any) => void;\n};\n\nexport const ReversePositionWidget: React.FC<ReversePositionWidgetProps> = (\n props,\n) => {\n const { position, close, resolve, reject } = props;\n const { t } = useTranslation();\n const { visible, hide, onOpenChange } = useModal();\n\n const state = useReversePositionScript({\n position,\n onSuccess: () => {\n resolve?.(true);\n hide();\n },\n onError: (error: any) => {\n reject?.(error);\n hide();\n },\n });\n\n const actions = useMemo(() => {\n return {\n primary: {\n label: t(\"common.confirm\"),\n onClick: async () => {\n try {\n const result = await state.reversePosition();\n if (result) {\n resolve?.(true);\n hide();\n return true;\n } else {\n reject?.(false);\n return false;\n }\n } catch (error) {\n reject?.(error);\n throw error;\n }\n },\n loading: state.isReversing,\n disabled: state.isReversing || !state.displayInfo,\n },\n secondary: {\n label: t(\"common.cancel\"),\n onClick: async () => {\n reject?.(\"cancel\");\n hide();\n return false;\n },\n },\n };\n }, [state, t, resolve, reject, hide]);\n\n // Create our own SimpleDialog to handle actions\n // Note: This will be wrapped by registerSimpleDialog's SimpleDialog\n // We need to override the wrapper's SimpleDialog behavior\n return (\n <SimpleDialog\n open={visible}\n onOpenChange={onOpenChange}\n size=\"sm\"\n title={i18n.t(\"positions.reverse.title\")}\n classNames={{\n content: \"oui-border oui-border-line-6\",\n }}\n actions={actions}\n >\n <ReversePosition {...state} />\n </SimpleDialog>\n );\n};\n\nexport const ReversePositionDialogId = \"ReversePositionDialogId\";\n\nregisterSimpleDialog<ReversePositionWidgetProps>(\n ReversePositionDialogId,\n ReversePositionWidget,\n {\n size: \"sm\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n title: () => i18n.t(\"positions.reverse.title\"),\n },\n);\n","import { useCallback } from \"react\";\nimport { useSessionStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { SortType } from \"../../../types/types\";\n\nexport enum PositionsTabName {\n Positions = \"positions\",\n PositionHistory = \"positionHistory\",\n}\n\nexport function useTabSort(options: { storageKey: string }) {\n const [tabSort, setTabSort] = useSessionStorage(options.storageKey, {\n [PositionsTabName.Positions]: {\n sortKey: \"unrealized_pnl\",\n sortOrder: \"desc\",\n },\n [PositionsTabName.PositionHistory]: {\n sortKey: \"close_timestamp\",\n sortOrder: \"desc\",\n },\n } as Record<PositionsTabName, SortType>);\n\n const onTabSort = useCallback(\n (type: PositionsTabName) => (sort?: SortType) => {\n setTabSort({ ...tabSort, [type]: sort });\n },\n [tabSort, setTabSort],\n );\n\n return {\n tabSort,\n onTabSort,\n };\n}\n","import React from \"react\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n formatAddress,\n ListView,\n Table,\n TableFeatures,\n Flex,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { SymbolProvider } from \"../../provider/symbolProvider\";\nimport type { PositionsProps } from \"../../types/types\";\nimport type { CombinePositionsState } from \"./combinePositions.script\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport type { PositionsState } from \"./positions.script\";\nimport { PositionsRowProvider } from \"./positionsRowProvider\";\n\nexport const Positions: React.FC<\n Readonly<PositionsState & { tableRef?: React.RefObject<Table<any>> }>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n dataSource,\n onSymbolChange,\n positionReverse,\n tableRef,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n positionReverse,\n });\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" gap={3}>\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n bordered\n dataSource={dataSource}\n generatedRowKey={(record: any) => record.symbol}\n renderRowContainer={(record: any, index: number, children: any) => {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider position={record}>\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }}\n manualPagination={false}\n pagination={pagination}\n manualSorting={true}\n onSort={props.onSort}\n initialSort={\n props.initialSort\n ? {\n sortKey: props.initialSort.sortKey,\n sort: props.initialSort.sortOrder,\n }\n : undefined\n }\n features={[TableFeatures.DownloadFeature]}\n getTableInstance={(table) => {\n if (tableRef) {\n (tableRef as any).current = table;\n }\n }}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobilePositions: React.FC<\n Readonly<PositionsState & PositionsProps>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n dataSource,\n onSymbolChange,\n positionReverse,\n } = props;\n return (\n <ListView\n className=\"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionsRowProvider position={item}>\n <PositionCellWidget\n item={item}\n index={index}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n sharePnLConfig={sharePnLConfig}\n onSymbolChange={onSymbolChange}\n positionReverse={positionReverse}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n\nexport const CombinePositions: React.FC<\n Readonly<CombinePositionsState & { tableRef?: React.RefObject<Table<any>> }>\n> = (props) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n pagination,\n isLoading,\n tableData,\n onSymbolChange,\n mutatePositions,\n tableRef,\n } = props;\n\n const columns = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: onSymbolChange,\n });\n\n const { dataSource = [] } = tableData;\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" gap={3}>\n <AuthGuardDataTable<any>\n bordered\n loading={isLoading}\n id=\"oui-desktop-positions-content\"\n columns={columns}\n dataSource={dataSource}\n expanded\n getSubRows={(row) => row.children}\n generatedRowKey={(record) => record.id}\n onCell={(column, record) => {\n const isGroup = (record.children ?? []).length > 0;\n if (isGroup) {\n return {\n children:\n column.id === \"symbol\" ? (\n <Badge color=\"neutral\" size=\"xs\">\n {record?.description || formatAddress(record?.id)}\n </Badge>\n ) : null,\n };\n }\n }}\n renderRowContainer={(record: any, index: number, children: any) => {\n if (record.symbol) {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider\n position={record}\n mutatePositions={mutatePositions}\n >\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }\n return children;\n }}\n manualPagination={false}\n pagination={pagination}\n features={[TableFeatures.DownloadFeature]}\n getTableInstance={(table) => {\n if (tableRef) {\n (tableRef as any).current = table;\n }\n }}\n testIds={{\n body: \"oui-testid-dataList-position-tab-body\",\n }}\n />\n </Flex>\n );\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { SymbolContext, SymbolContextState } from \"./symbolContext\";\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props,\n) => {\n const { symbol, children } = props;\n const symbolInfo = useSymbolsInfo()[symbol];\n const memoizedValue = useMemo<SymbolContextState>(() => {\n return {\n symbol: symbol,\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n base_tick: symbolInfo(\"base_tick\"),\n quote_tick: symbolInfo(\"quote_tick\"),\n base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\"),\n };\n }, [symbol, symbolInfo]);\n return (\n <SymbolContext.Provider value={memoizedValue}>\n {children}\n </SymbolContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\n\nexport interface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n quote_tick: number;\n base: string;\n quote: string;\n symbol: string;\n origin: API.SymbolExt;\n quote_min: number;\n quote_max: number;\n}\n\nexport const SymbolContext = createContext<SymbolContextState>(\n {} as SymbolContextState,\n);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n","import { useMemo, useRef } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SymbolLeverageDialogId } from \"@kodiak-finance/orderly-ui-leverage\";\nimport {\n SharePnLOptions,\n SharePnLDialogId,\n} from \"@kodiak-finance/orderly-ui-share\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { RwaStatusTag } from \"../../rwaStatus/rwaStatus\";\nimport { ClosePositionWidget } from \"../closePosition\";\nimport { LeverageBadge } from \"./components\";\nimport { renderQuantity } from \"./listElement\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { PartialTPSL } from \"./partialTPSL\";\nimport { ReversePositionButton } from \"./reversePotisionButton\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\n\ninterface ColumnConfig {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLOptions;\n onSymbolChange?: (symbol: API.Symbol) => void;\n positionReverse?: boolean;\n}\n\nexport const useColumn = (config: ColumnConfig) => {\n const {\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n positionReverse,\n } = config;\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n const column = useMemo<Column<API.PositionTPSLExt>[]>(\n () => [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 200,\n onSort: (r1, r2) => {\n return r1.symbol?.localeCompare(r2.symbol || \"\");\n // if (sortOrder === \"asc\") {\n // return r1.symbol.localeCompare(r2.symbol);\n // }\n // return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string, record) => (\n <Flex gap={2}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"oui-h-[38px] oui-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <Flex gap={1}>\n <LeverageBadge\n symbol={value}\n leverage={record.leverage}\n modalId={SymbolLeverageDialogId}\n />\n <RwaStatusTag symbol={value} />\n </Flex>\n </Flex>\n </Flex>\n ),\n },\n {\n title: t(\"common.quantity\"),\n dataIndex: \"position_qty\",\n // onSort: true,\n onSort: (a, b) => {\n return a.position_qty - b.position_qty;\n },\n width: 120,\n className: \"oui-pl-6\",\n // rule: \"price\",\n // numeralProps: {\n // coloring: true,\n // // tick: \"base_dp\",\n // },\n render: renderQuantity,\n // render: (value: string) => (\n // <NumeralWithCtx\n // coloring\n // className=\"oui-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: t(\"common.avgOpen\"),\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: t(\"common.markPrice\"),\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n render: (value: string) => {\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={t(\"positions.column.liqPrice.tooltip\")}\n >\n <Text>{t(\"positions.column.liqPrice\")}</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n dataIndex: \"est_liq_price\",\n render: (value: string) => {\n return Number(value) === 0 ? (\n \"--\"\n ) : (\n <NumeralWithCtx\n rm={Decimal.ROUND_DOWN}\n className={Number(value) > 0 ? \"oui-text-warning-light\" : \"\"}\n >\n {value ?? \"--\"}\n </NumeralWithCtx>\n );\n },\n },\n {\n title: (\n <HoverCard\n content={<UnrealizedPnLPopoverCard />}\n side=\"top\"\n align=\"center\"\n className=\"oui-max-w-[280px] oui-text-2xs\"\n >\n <Text>{t(\"common.unrealizedPnl\")}</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 180,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.pnl\n dp={pnlNotionalDecimalPrecision}\n coloring\n className=\"oui-font-semibold\"\n >\n {value}\n </Text.pnl>\n <Text.roi\n rule=\"percentages\"\n dp={pnlNotionalDecimalPrecision}\n coloring\n className=\"oui-font-semibold\"\n prefix=\"(\"\n suffix=\")\"\n >\n {record.unrealized_pnl_ROI}\n </Text.roi>\n </Flex>\n <ShareButtonWidget\n position={record}\n sharePnLConfig={sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: t(\"common.fullTPSL\"),\n dataIndex: \"full_tpsl\",\n width: 150,\n render: (_: string, record) => {\n return (\n <TriggerPrice\n stopLossPrice={record.full_tp_sl?.sl_trigger_price}\n takeProfitPrice={record.full_tp_sl?.tp_trigger_price}\n />\n );\n },\n },\n\n {\n title: t(\"common.partialTPSL\"),\n dataIndex: \"partial_tpsl\",\n width: 150,\n render: (_: string, record) => (\n <PartialTPSL\n orderNum={record.partial_tp_sl?.order_num}\n tpTriggerPrice={record.partial_tp_sl?.tp_trigger_price}\n slTriggerPrice={record.partial_tp_sl?.sl_trigger_price}\n />\n ),\n },\n {\n title: t(\"common.notional\"),\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.notional dp={pnlNotionalDecimalPrecision}>\n {value}\n </Text.notional>\n ),\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54\"\n content={\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-rounded-sm oui-bg-base-8 oui-text-base-contrast-54\"\n >\n <span>{t(\"positions.column.margin.tooltip\")}</span>\n <Divider className=\"oui-w-full\" />\n <span>{t(\"positions.column.margin.formula\")}</span>\n </Flex>\n }\n >\n <Text>{t(\"positions.column.margin\")}</Text>\n </Tooltip>\n ),\n dataIndex: \"mm\",\n onSort: true,\n width: 100,\n rule: \"price\",\n render: (value: string) => <Text.numeral>{value}</Text.numeral>,\n },\n {\n title: t(\"funding.fundingFee\"),\n dataIndex: \"fundingFee\",\n width: 100,\n render: (value, record) => (\n <FundingFeeButton\n fee={value}\n symbol={record.symbol}\n start_t={record.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n ),\n },\n // {\n // title: t(\"common.qty\"),\n // dataIndex: \"close_qty\",\n // width: 100,\n // fixed: \"right\",\n // render: renderQuantityInput,\n // },\n // {\n // title: t(\"common.price\"),\n // dataIndex: \"close_price\",\n // width: 100,\n // fixed: \"right\",\n // render: renderPriceInput,\n // // render: (value: string) => <PriceInput />,\n // },\n {\n title: null,\n dataIndex: \"close_position\",\n align: \"right\",\n width: positionReverse ? 100 : 70,\n fixed: \"right\",\n render(_, record) {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <ClosePositionWidget />\n {positionReverse && <ReversePositionButton position={record} />}\n </Flex>\n );\n },\n },\n ],\n [pnlNotionalDecimalPrecision, sharePnLConfig, t, positionReverse],\n );\n return column;\n};\n","import { useGetRwaSymbolOpenStatus } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport const RwaStatusTag = ({ symbol }: { symbol: string }) => {\n const { isRwa, open } = useGetRwaSymbolOpenStatus(symbol);\n const { t } = useTranslation();\n\n if (!isRwa) {\n return null;\n }\n\n return (\n <Flex\n r=\"base\"\n px={2}\n height={18}\n className={cn(\n \"oui-shrink-0\",\n open ? \"oui-bg-success/15\" : \"oui-bg-danger/15\",\n )}\n >\n <Text size=\"2xs\" color={open ? \"success\" : \"danger\"}>\n {open\n ? t(\"trading.rwa.marketHours\")\n : t(\"trading.rwa.outsideMarketHours\")}\n </Text>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Text,\n ThrottledButton,\n} from \"@kodiak-finance/orderly-ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const MobileClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n base,\n base_dp,\n quote,\n quote_dp,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n quantity,\n price,\n submitting,\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n position,\n maxQty,\n isBuy,\n } = props;\n const { t } = useTranslation();\n\n const title = isMarketClose\n ? t(\"positions.marketClose\")\n : t(\"positions.limitClose\");\n\n const orderType = isMarketClose\n ? t(\"orderEntry.orderType.market\")\n : t(\"orderEntry.orderType.limit\");\n\n const orderSide = isBuy ? (\n <Badge color=\"success\" size=\"xs\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.sell\")}\n </Badge>\n );\n\n const header = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {position.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n {orderType}\n </Badge>\n {orderSide}\n </Flex>\n </Flex>\n );\n\n const lastPrice = (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>{t(\"common.lastPrice\")}</Text>\n <Text.numeral dp={quote_dp} suffix={<Text intensity={36}> {quote}</Text>}>\n {position.mark_price}\n </Text.numeral>\n </Flex>\n );\n\n const inputForm = !isMarketClose && (\n <>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix={t(\"common.price\")}\n suffix={quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n inputMode=\"decimal\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Input.tooltip\n prefix={t(\"common.quantity\")}\n suffix={base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n inputMode=\"decimal\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n </Flex>\n </>\n );\n\n const slider = (\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n );\n\n const footer = (\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button fullWidth color=\"secondary\" onClick={props.onCloseSheet}>\n {t(\"common.cancel\")}\n </Button>\n\n <ThrottledButton\n fullWidth\n disabled={submitting || disabled}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n props.onDoubleConfirm();\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n );\n\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setSheetOpen(true);\n }}\n >\n {title}\n </Button>\n\n <SimpleSheet title={title} open={sheetOpen} onOpenChange={setSheetOpen}>\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n {header}\n <Divider className=\"oui-w-full\" />\n {lastPrice}\n {inputForm}\n {slider}\n {footer}\n </Flex>\n </SimpleSheet>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn, Flex, Slider, Text } from \"@kodiak-finance/orderly-ui\";\n\ntype QuantitySliderProps = {\n value: number;\n onValueChange: (value: number) => void;\n base_dp: number;\n max: number;\n onMax: () => void;\n};\n\nexport const QuantitySlider = (props: QuantitySliderProps) => {\n const { t } = useTranslation();\n const [sliderValue, setSliderValue] = useState(props.value);\n\n useEffect(() => {\n setSliderValue(props.value);\n }, [props.value]);\n\n return (\n <>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n {[25, 50, 75, 100].map((e, index) => (\n <Button\n key={index}\n variant={\"outlined\"}\n size={\"xs\"}\n color=\"secondary\"\n onClick={() => {\n props.onValueChange(e);\n setSliderValue(e);\n }}\n className={cn(\n \"oui-w-1/4\",\n sliderValue === e ? \"oui-border-primary oui-text-primary\" : \"\",\n )}\n >{`${e}%`}</Button>\n ))}\n </Flex>\n <Slider\n showTip\n markCount={4}\n min={0}\n max={100}\n value={[props.value]}\n color=\"primary\"\n onValueChange={(value) => {\n props.onValueChange(value[0]);\n setSliderValue(value[0]);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text color=\"primary\" size=\"2xs\">{`${props.value}%`}</Text>\n <Flex gap={1} onClick={props.onMax} className=\"oui-cursor-pointer\">\n <Text size=\"2xs\" color=\"primary\">\n {t(\"common.max\")}\n </Text>\n <Text.numeral\n intensity={54}\n size=\"2xs\"\n dp={props.base_dp}\n padding={false}\n >\n {props.max}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n PopoverContent,\n PopoverRoot,\n PopoverTrigger,\n Select,\n SimpleDialog,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { ClosePositionScriptReturn } from \"./closePosition.script\";\nimport {\n ConfirmFooter,\n LimitConfirmDialog,\n MarketCloseConfirm,\n} from \"./components/confirmDialog\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\n\nexport const DesktopClosePosition: FC<ClosePositionScriptReturn> = (props) => {\n const {\n position,\n base,\n base_dp,\n quote_dp,\n price,\n quantity,\n submitting,\n dialogOpen,\n setDialogOpen,\n isMarketClose,\n popoverOpen,\n setPopoverOpen,\n maxQty,\n quantityErrorMsg,\n priceErrorMsg,\n isEntirePosition,\n } = props;\n\n const { t } = useTranslation();\n\n // const disabled = isMarketClose ? !quantity : !price || !quantity;\n\n const quantityForm = (\n <Flex width=\"100%\" gap={2} mb={1}>\n <Input.tooltip\n ref={props.quantityInputRef}\n prefix={t(\"common.quantity\")}\n suffix={\n isEntirePosition ? (\n <Text\n size=\"2xs\"\n intensity={54}\n className=\"oui-cursor-pointer oui-px-3\"\n onClick={props.onEntirePosition}\n >\n {t(\"tpsl.entirePosition\")}\n </Text>\n ) : (\n base\n )\n }\n align=\"right\"\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n inputMode=\"decimal\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(base_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={quantityErrorMsg}\n color={quantityErrorMsg ? \"danger\" : undefined}\n value={isEntirePosition ? \"\" : quantity}\n onBlur={() => props.formatQuantityToBaseTick(quantity)}\n onValueChange={props.updateQuantity}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n quantityErrorMsg ? \"oui-outline-danger\" : undefined,\n ),\n }}\n />\n <Button\n onClick={props.onMax}\n size=\"md\"\n variant=\"outlined\"\n className={cn(\n \"oui-text-2xs\",\n isEntirePosition\n ? \"oui-border-primary-light oui-text-primary-light hover:oui-bg-primary-light/20\"\n : \"oui-border-line-12 oui-bg-base-6 oui-text-base-contrast-54 hover:oui-bg-base-5\",\n )}\n >\n {t(\"common.position\")}\n </Button>\n </Flex>\n );\n\n const suffix = (\n <Select.options\n variant=\"text\"\n size=\"md\"\n options={[\n {\n label: t(\"orderEntry.orderType.limit\"),\n value: OrderType.LIMIT,\n },\n {\n label: t(\"orderEntry.orderType.market\"),\n value: OrderType.MARKET,\n },\n ]}\n classNames={{\n // set the width of the trigger to the width of the content\n trigger: \"oui-w-[--radix-select-content-available-width]\",\n }}\n value={props.type}\n onValueChange={(value) => {\n props.updateOrderType(value as OrderType);\n }}\n contentProps={{\n align: \"end\",\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n\n const disabledInput = isMarketClose;\n\n const priceForm = (\n <Input.tooltip\n suffix={suffix}\n size=\"md\"\n fullWidth\n autoComplete=\"off\"\n inputMode=\"decimal\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={priceErrorMsg}\n color={priceErrorMsg ? \"danger\" : undefined}\n value={price}\n onValueChange={props.updatePriceChange}\n placeholder={disabledInput ? \"--\" : \"\"}\n disabled={disabledInput}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-w-full oui-outline-line-12\",\n priceErrorMsg ? \"oui-outline-danger\" : undefined,\n // when disabled, override the outline color\n disabledInput ? \"focus-within:oui-outline-line-12\" : undefined,\n ),\n }}\n />\n );\n\n return (\n <>\n <PopoverRoot open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger\n asChild\n onClick={() => {\n setPopoverOpen(true);\n }}\n >\n <Button variant=\"outlined\" size=\"sm\" color=\"secondary\">\n {t(\"positions.column.close\")}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"oui-w-[360px] oui-p-5\",\n popoverOpen ? \"oui-visible\" : \"oui-invisible\",\n )}\n align=\"end\"\n side=\"top\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <Flex gapY={2} direction=\"column\">\n {quantityForm}\n <QuantitySlider\n value={props.sliderValue}\n onValueChange={props.onSliderValueChange}\n base_dp={base_dp}\n max={maxQty}\n onMax={props.onMax}\n />\n <Divider my={2} intensity={8} className=\"oui-w-full\" />\n {priceForm}\n <ConfirmFooter\n onConfirm={props.onDoubleConfirm}\n onCancel={props.onClosePopover}\n submitting={submitting}\n disabled={props.disabled}\n />\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"sm\">\n {isMarketClose ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n submitting={submitting}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quoteDp={quote_dp}\n quantity={quantity}\n price={price}\n submitting={submitting}\n order={props.closeOrderData}\n onClose={props.onCloseDialog}\n onConfirm={props.onConfirm}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\n","import { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport {\n ClosePositionScriptProps,\n useClosePositionScript,\n} from \"./closePosition.script\";\nimport { DesktopClosePosition } from \"./closePosition.ui\";\nimport { MobileClosePosition } from \"./closePositions.mobile.ui\";\n\ntype ClosePositionWidgetProps = Pick<ClosePositionScriptProps, \"type\">;\n\nexport const ClosePositionWidget = (props: ClosePositionWidgetProps) => {\n const state = useClosePositionScript(props);\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return <MobileClosePosition {...state} />;\n }\n\n return <DesktopClosePosition {...state} />;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocalStorage, utils } from \"@kodiak-finance/orderly-hooks\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport type ClosePositionScriptProps = {\n type?: OrderType.MARKET | OrderType.LIMIT;\n};\n\nexport type ClosePositionScriptReturn = ReturnType<\n typeof useClosePositionScript\n>;\n\nexport const useClosePositionScript = (props: ClosePositionScriptProps) => {\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState(100);\n const quantityInputRef = useRef<HTMLInputElement>(null);\n const [orderConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const {\n position,\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n type,\n } = usePositionsRowContext();\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n // buy position quantity is positive, sell position quantity is negative\n const isBuy = position.position_qty > 0;\n\n // we need to use Math.abs to get the absolute value of the position quantity\n const maxQty = Math.abs(position.position_qty);\n\n // close position type: limit or market\n const closeType = props.type || type;\n\n const isMarketClose = closeType === OrderType.MARKET;\n\n const isEntirePosition = maxQty?.toString() === quantity.toString();\n\n useEffect(() => {\n // mobile sheet open, update order type\n if (sheetOpen) {\n updateOrderType(props.type as OrderType);\n }\n }, [props.type, sheetOpen]);\n\n // reset state when sheet is closed\n // useEffect(() => {\n // if (!sheetOpen || !popoverOpen) {\n // // set default slider value to 100 when table edit remove\n // updateQuantity(maxQty?.toString());\n // }\n // }, [sheetOpen, popoverOpen, maxQty]);\n\n const { priceErrorMsg, quantityErrorMsg } = useMemo(() => {\n return {\n priceErrorMsg: getErrorMsg(\"order_price\"),\n quantityErrorMsg: getErrorMsg(\"order_quantity\"),\n };\n // getErrorMsg is changed when errors is changed\n }, [errors]);\n\n const disabled = !!(priceErrorMsg || quantityErrorMsg);\n\n const formatQuantityToBaseTick = useCallback(\n (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n },\n [baseTick, updateQuantity],\n );\n\n const onSliderValueChange = useCallback(\n (value: number) => {\n setSliderValue(value);\n\n // transform slider value to quantity\n const qty = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n\n formatQuantityToBaseTick(qty);\n },\n [maxQty, base_dp, formatQuantityToBaseTick],\n );\n\n useEffect(() => {\n const qty = Math.min(Number(quantity || 0), maxQty);\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity]);\n\n const onMax = useCallback(() => {\n updateQuantity(maxQty?.toString());\n }, [maxQty, updateQuantity]);\n\n const onConfirm = useCallback(() => {\n return onSubmit().then((res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n setPopoverOpen(false);\n });\n }, [onSubmit]);\n\n const onDoubleConfirm = useCallback(() => {\n if (!orderConfirm) {\n return onConfirm();\n }\n setDialogOpen(true);\n return Promise.resolve();\n }, [onConfirm, orderConfirm]);\n\n const onCloseSheet = useCallback(() => {\n setSheetOpen(false);\n }, []);\n\n const onCloseDialog = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const onClosePopover = useCallback(() => {\n setPopoverOpen(false);\n }, []);\n\n // when click entire position button, set quantity to 0 and focus on input\n const onEntirePosition = useCallback(() => {\n updateQuantity(\"0\");\n quantityInputRef.current?.focus();\n\n setTimeout(() => {\n quantityInputRef.current?.setSelectionRange(0, 1);\n }, 0);\n }, [updateQuantity]);\n\n return {\n position,\n closeOrderData,\n quote_dp,\n base_dp,\n base,\n quote,\n price,\n quantity,\n submitting,\n\n onConfirm,\n onDoubleConfirm,\n updatePriceChange,\n updateQuantity,\n formatQuantityToBaseTick,\n updateOrderType,\n\n sliderValue,\n onSliderValueChange,\n\n priceErrorMsg,\n quantityErrorMsg,\n disabled,\n isMarketClose,\n\n maxQty,\n onMax,\n isBuy,\n isEntirePosition,\n type: closeType,\n quantityInputRef,\n onEntirePosition,\n\n sheetOpen,\n onCloseSheet,\n setSheetOpen,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n\n popoverOpen,\n setPopoverOpen,\n onClosePopover,\n };\n};\n","import {\n useLocalStorage,\n useLeverageBySymbol,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n ChevronRightIcon,\n cn,\n EditIcon,\n Text,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport {\n PositionTPSLPopover,\n TPSLDetailDialogId,\n TPSLDialogId,\n TPSLSheetId,\n TPSLDetailSheetId,\n} from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { t } = useTranslation();\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label={t(\"common.tpsl\")}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const { isMobile } = useScreen();\n\n const onEdit = () => {\n const dialogId = isMobile ? TPSLDetailSheetId : TPSLDetailDialogId;\n modal.show(dialogId, {\n order: tpslOrder,\n position: position,\n baseDP: baseDp,\n quoteDP: quoteDp,\n });\n };\n\n return (\n // <PositionTPSLPopover\n // position={position}\n // order={tpslOrder}\n // baseDP={baseDp}\n // quoteDP={quoteDp}\n // isEditing\n // >\n <EditIcon\n onClick={onEdit}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={16}\n />\n // </PositionTPSLPopover>\n );\n};\n\nexport const AddIcon = (props: { positionType: PositionType }) => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const onAdd = () => {\n const dialogId = isMobile ? TPSLSheetId : TPSLDialogId;\n const modalParams = {\n symbol: position.symbol,\n baseDP: baseDp,\n quoteDP: quoteDp,\n isEditing: false,\n positionType: props.positionType,\n };\n modal.show(dialogId, modalParams);\n };\n return (\n <Text\n className={cn(\n \"oui-cursor-pointer oui-text-base-contrast\",\n isMobile && \"oui-text-base-contrast-80\",\n )}\n onClick={onAdd}\n >\n {t(\"tpsl.add\")}\n </Text>\n );\n};\n\ntype LeverageBadgeProps = {\n symbol: string;\n leverage: number;\n modalId: string;\n};\n\nexport const LeverageBadge = (props: LeverageBadgeProps) => {\n const { symbol, leverage } = props;\n\n const showModal = () => {\n modal.show(props.modalId, {\n symbol,\n curLeverage: leverage,\n });\n };\n\n return (\n <div\n className={cn(\n \"oui-flex oui-h-[18px] oui-items-center oui-gap-1\",\n \"oui-cursor-pointer oui-rounded oui-bg-line-6 oui-px-2\",\n \"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\",\n )}\n onClick={showModal}\n >\n {leverage ? (\n <Text.numeral dp={0} rm={Decimal.ROUND_DOWN} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n ) : (\n <LeverageDisplay symbol={symbol} />\n )}\n </div>\n );\n};\n\n/** TODO: remove this */\nexport const LeverageDisplay = ({ symbol }: { symbol: string }) => {\n const leverage = useLeverageBySymbol(symbol);\n\n return (\n <Text.numeral dp={0} rm={Decimal.ROUND_DOWN} size=\"2xs\" unit=\"X\">\n {leverage || 1}\n </Text.numeral>\n );\n};\n","import { Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\n\nexport const renderQuantity = (value: number) => {\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral\n dp={symbolInfo.base_dp}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n coloring\n >\n {value}\n </Text.numeral>\n );\n};\n\nexport const renderQuantityInput = (value: number, record: any) => {\n return <QuantityInput value={record[\"position_qty\"]} />;\n};\n\nexport const renderPriceInput = (value: number) => {\n return <PriceInput />;\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@kodiak-finance/orderly-ui\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType } =\n usePositionsRowContext();\n const { t } = useTranslation();\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={\n type === OrderType.LIMIT ? price : t(\"orderEntry.orderType.market\")\n }\n inputMode=\"decimal\"\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={() => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT);\n }\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-h-full oui-px-1\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\n \"oui-border oui-border-solid oui-border-white/[0.12] oui-outline-none focus-within:oui-outline-primary-light\",\n ),\n }}\n />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DropdownMenuGroup>\n <DropdownMenuItem\n size=\"xs\"\n onSelect={() => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>{t(\"common.marketPrice\")}</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { utils } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n Flex,\n Text,\n Slider,\n Button,\n inputFormatter,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Input } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\n\nexport const QuantityInput = (props: { value: number }) => {\n const [sliderValue, setSliderValue] = useState<number>(100);\n const { baseDp, updateQuantity, quantity, baseTick } =\n usePositionsRowContext();\n\n const resetQuantity = (percent: number) => {\n formatQuantityToBaseTick(`${props.value * percent}`);\n };\n\n const formatQuantityToBaseTick = (value: string) => {\n if (baseTick && baseTick > 0) {\n // format quantity to baseTick\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n updateQuantity(formatQty);\n }\n };\n\n useEffect(() => {\n const maxQty = Math.abs(props.value);\n const qty = Math.min(Number(quantity || 0), maxQty);\n\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .todp(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity, props.value]);\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n inputMode=\"decimal\"\n classNames={{\n root: \"oui-outline-none oui-border oui-border-solid oui-border-white/[0.12] focus-within:oui-outline-primary-light\",\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n value={quantity}\n onBlur={(event) => formatQuantityToBaseTick(event.target.value)}\n onValueChange={updateQuantity}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"oui-w-[360px] oui-rounded-xl\"\n align=\"start\"\n side=\"bottom\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Flex p={1} gap={2} width={\"100%\"} itemAlign={\"start\"}>\n <Text size=\"xs\" intensity={98} className=\"oui-min-w-[40px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(values) => {\n resetQuantity(values[0] / 100);\n }}\n />\n <PercentButtons onClick={resetQuantity} />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst PercentButtons = (props: { onClick: (value: number) => void }) => {\n const { t } = useTranslation();\n const list = [\n {\n label: \"0%\",\n value: 0,\n },\n {\n label: \"25%\",\n value: 0.25,\n },\n {\n label: \"50%\",\n value: 0.5,\n },\n {\n label: \"75%\",\n value: 0.75,\n },\n {\n label: t(\"common.max\"),\n value: 1,\n },\n ];\n\n return (\n <Flex gap={2} width={\"100%\"}>\n {list.map((item, index) => {\n return (\n <Button\n key={index}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n props.onClick(item.value);\n }}\n className=\"oui-w-1/5\"\n >\n {item.label}\n </Button>\n );\n })}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { NumeralProps, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: React.FC<\n React.PropsWithChildren<\n Omit<NumeralProps, \"precision\" | \"tick\"> & { tick?: TickName }\n >\n> = (props) => {\n const { tick = \"quote_dp\", children, ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n // TODO i18n\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n return (\n <Text.numeral as={\"span\" as any} dp={symbolInfo[tick]} {...rest}>\n {children}\n </Text.numeral>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport {\n ERROR_MSG_CODES,\n useSymbolsInfo,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide, PositionType } from \"@kodiak-finance/orderly-types\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { CloseToLiqPriceIcon } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { AddIcon, TPSLEditIcon } from \"./components\";\n\nexport const PartialTPSL: FC<{\n orderNum?: number;\n tpTriggerPrice?: number;\n slTriggerPrice?: number;\n direction?: \"column\" | \"row\";\n}> = (props) => {\n const {\n orderNum,\n tpTriggerPrice,\n slTriggerPrice,\n direction = \"column\",\n } = props;\n const {\n partialTPSLOrder: order,\n quoteDp,\n baseDp,\n position,\n } = usePositionsRowContext();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const side = position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL;\n const slPriceError = useTpslPriceChecker({\n slPrice: slTriggerPrice?.toString() ?? undefined,\n liqPrice: position.est_liq_price ?? null,\n side: side,\n });\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <AddIcon positionType={PositionType.PARTIAL} />;\n\n if (tpTriggerPrice) {\n children.push(\n <Text.formatted\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20\",\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={tpTriggerPrice}\n prefix={\n !slTriggerPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />,\n );\n }\n if (slTriggerPrice) {\n children.push(\n <Text.formatted\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 \",\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n prefix={<Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>}\n suffix={<CloseToLiqPriceIcon slPriceError={slPriceError} />}\n >\n {slTriggerPrice}\n </Text.formatted>,\n );\n }\n if (children.length === 0)\n return <AddIcon positionType={PositionType.PARTIAL} />;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [tpTriggerPrice, slTriggerPrice, order?.symbol, t, slPriceError]);\n const hasTPSL = Array.isArray(child) ? !!child.length : !child;\n return (\n <Flex className=\"oui-gap-[6px]\">\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n direction === \"column\" ? \"oui-flex-col\" : \"oui-flex-row oui-gap-1\",\n )}\n >\n {child}\n </div>\n {hasTPSL && (\n <>\n <Text className=\"oui-text-base-contrast-54\">({orderNum})</Text>\n <TPSLEditIcon />\n </>\n )}\n </Flex>\n );\n};\n","import { ArrowLeftRightIcon, Button, modal } from \"@kodiak-finance/orderly-ui\";\nimport { ReversePositionDialogId } from \"../../reversePosition\";\n\nexport const ReversePositionButton = (props: { position: any }) => {\n const { position } = props;\n\n return (\n <div\n className=\"\"\n style={{ transform: \"rotate(90deg)\" }}\n onClick={() => {\n modal.show(ReversePositionDialogId, {\n position,\n });\n }}\n >\n <ArrowLeftRightIcon\n size={15}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-base-contrast-54 hover:oui-text-base-contrast-80\"\n />\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { ShareIcon } from \"@kodiak-finance/orderly-ui\";\nimport { ShareButtonScriptReturn } from \"./shareButton.script\";\n\nexport const ShareButton: FC<ShareButtonScriptReturn> = (props) => {\n if (!props.sharePnLConfig) {\n return null;\n }\n\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n props.showModal();\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n useAccountInfo,\n useReferralInfo,\n useLeverageBySymbol,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { account, positions } from \"@kodiak-finance/orderly-perp\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { formatNum } from \"@kodiak-finance/orderly-utils\";\n\nexport type ShareButtonScriptOptions = {\n position: any;\n sharePnLConfig?: SharePnLConfig;\n modalId: string;\n iconSize?: number;\n isPositionHistory?: boolean;\n};\n\nexport type ShareButtonScriptReturn = ReturnType<typeof useShareButtonScript>;\n\nexport const useShareButtonScript = (props: ShareButtonScriptOptions) => {\n const { position, sharePnLConfig, iconSize } = props;\n const { getFirstRefCode } = useReferralInfo();\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n\n const symbolLeverage = useLeverageBySymbol(position.symbol);\n\n const getHistoryEntity = () => {\n const netPnL = position.netPnL || 0;\n const openPrice = Math.abs(position.avg_open_price);\n const quantity = Math.abs(position.closed_position_qty);\n\n let roi;\n\n const symbolInfo = symbolsInfo[position.symbol];\n const baseIMR = symbolInfo(\"base_imr\");\n const IMR_Factor = symbolInfo(\"imr_factor\");\n\n // calculate unrealized pnl ROI for position history\n if (\n netPnL !== 0 &&\n quantity !== 0 &&\n openPrice !== 0 &&\n accountInfo?.max_leverage &&\n baseIMR &&\n // IMR_Factor is possible to be 0\n typeof IMR_Factor !== \"undefined\"\n ) {\n const notional = positions.notional(quantity, openPrice);\n\n const maxLeverage = position.leverage\n ? position.leverage\n : accountInfo.max_leverage;\n\n const imr = account.IMR({\n maxLeverage,\n baseIMR: baseIMR,\n IMR_Factor: IMR_Factor,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const unrealizedPnLROI = positions.unrealizedPnLROI({\n positionQty: quantity,\n openPrice: openPrice,\n IMR: imr,\n unrealizedPnL: netPnL,\n });\n\n roi = formatNum.roi(unrealizedPnLROI * 100)?.toString();\n }\n\n return {\n side: position.side,\n pnl: netPnL,\n roi: roi,\n openPrice: openPrice,\n closePrice: Math.abs(position.avg_close_price),\n openTime: position.open_timestamp,\n closeTime: position.close_timestamp,\n quantity: position.closed_position_qty,\n };\n };\n\n const showModal = () => {\n const entity = props.isPositionHistory\n ? getHistoryEntity()\n : {\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n pnl:\n formatNum.pnl(position.unrealized_pnl)?.toNumber() ??\n position.unrealized_pnl,\n roi:\n formatNum.roi(position.unrealized_pnl_ROI)?.mul(100).toNumber() ??\n position.unrealized_pnl_ROI,\n openPrice: Math.abs(position.average_open_price),\n markPrice: position.mark_price,\n openTime: position.timestamp,\n quantity: position.position_qty,\n };\n\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n // when position.leverage is empty, use leverage from useSymbolLeverage\n leverage: position.leverage || symbolLeverage,\n ...entity,\n },\n refCode,\n ...sharePnLConfig,\n },\n });\n };\n\n return {\n iconSize,\n sharePnLConfig,\n showModal,\n };\n};\n","import {\n useShareButtonScript,\n ShareButtonScriptOptions,\n} from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\n\nexport type ShareButtonWidgetProps = ShareButtonScriptOptions;\n\nexport const ShareButtonWidget = (props: ShareButtonWidgetProps) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationResult,\n useSymbolsInfo,\n useTpslPriceChecker,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AlgoOrderType,\n API,\n OrderSide,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n ExclamationFillIcon,\n Flex,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { CloseToLiqPriceIcon } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { formatNum } from \"@kodiak-finance/orderly-utils\";\nimport { usePositionsRowContext } from \"../positionsRowContext\";\nimport { TPSLEditIcon, AddIcon } from \"./components\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n const side = position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL;\n const slPriceError = useTpslPriceChecker({\n slPrice: stopLossPrice?.toString() ?? undefined,\n liqPrice: position.est_liq_price ?? null,\n side: side,\n });\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n slPriceError={slPriceError}\n tooltip\n />\n );\n};\n\nexport const TriggerPriceItem: FC<{\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n symbolInfo: API.SymbolExt;\n}> = (props) => {\n const { qty, price, entryPrice, orderSide, orderType, symbolInfo } = props;\n const pnl = formatNum\n .pnl(\n utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n },\n ),\n )!\n .toNumber();\n\n const type = orderType === AlgoOrderType.TAKE_PROFIT ? \"TP\" : \"SL\";\n\n return (\n <Flex>\n <Text intensity={54} className=\"oui-mr-1\">{`${type} PnL:`}</Text>\n <Text.formatted\n rule=\"price\"\n className={\n pnl === 0\n ? \"oui-text-base-contrast-36\"\n : pnl > 0\n ? \"oui-text-trade-profit oui-gap-0\"\n : \"oui-text-trade-loss oui-gap-0\"\n }\n prefix={<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>}\n suffix={\n <Text intensity={36} className=\"oui-ml-1\">\n USDC\n </Text>\n }\n >{`${Math.abs(pnl)}`}</Text.formatted>\n </Flex>\n );\n};\n\nexport const TPSLTriggerPrice: FC<{\n takeProfitPrice: number | undefined;\n stopLossPrice: number | undefined;\n className?: string;\n direction?: \"row\" | \"column\";\n tooltip?: boolean;\n order?: API.AlgoOrder;\n position?: API.PositionTPSLExt;\n slPriceError: OrderValidationResult | null;\n}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n const { t } = useTranslation();\n const pnl = useMemo(() => {\n const msgs = [];\n\n if (!props.tooltip || !order || !position) return;\n\n let quantity = order.quantity;\n\n if (quantity === 0) {\n if (order.child_orders[0].type === \"CLOSE_POSITION\") {\n quantity = position.position_qty;\n }\n }\n\n if (!!props.takeProfitPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"tp\"}\n qty={quantity}\n price={props.takeProfitPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.TAKE_PROFIT}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n if (!!props.stopLossPrice) {\n msgs.push(\n <TriggerPriceItem\n key={\"sl\"}\n qty={quantity}\n price={props.stopLossPrice}\n entryPrice={position.average_open_price}\n orderSide={order.side as OrderSide}\n orderType={AlgoOrderType.STOP_LOSS}\n symbolInfo={symbolInfo[order.symbol]()}\n />,\n );\n }\n\n return <div>{msgs}</div>;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n position?.average_open_price,\n order?.side,\n order?.quantity,\n order?.algo_type,\n ]);\n\n const child = useMemo(() => {\n const children = [];\n\n if (!order?.symbol) return <AddIcon positionType={PositionType.FULL} />;\n\n const Label = ({ children }: { children?: string }) => {\n return !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{children}</Text>\n ) : (\n \"\"\n );\n };\n\n if (props.takeProfitPrice) {\n children.push(\n <Text.formatted\n className={cn(\n \"oui-text-trade-profit oui-gap-0 oui-decoration-white/20\",\n )}\n key={\"tp\"}\n rule=\"price\"\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.takeProfitPrice}\n prefix={\n !props.stopLossPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.tp\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n />,\n );\n }\n if (props.stopLossPrice) {\n children.push(\n <Text.formatted\n key={\"sl\"}\n className={cn(\n \"oui-text-trade-loss oui-gap-0 oui-decoration-white/20 \",\n )}\n rule={\"price\"}\n dp={symbolInfo[order!.symbol](\"quote_dp\", 2)}\n children={props.stopLossPrice}\n prefix={\n !props.takeProfitPrice || direction === \"column\" ? (\n <Text intensity={54}>{`${t(\"tpsl.sl\")} - `}</Text>\n ) : (\n \"\"\n )\n }\n suffix={<CloseToLiqPriceIcon slPriceError={props.slPriceError} />}\n />,\n );\n }\n\n if (children.length === 0)\n return <AddIcon positionType={PositionType.FULL} />;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [\n props.takeProfitPrice,\n props.stopLossPrice,\n order?.symbol,\n t,\n props.slPriceError,\n ]);\n\n const content = (\n <div\n className={cn(\n \"oui-inline-flex oui-text-base-contrast-36\",\n props.direction === \"column\"\n ? \"oui-flex-col\"\n : \"oui-flex-row oui-gap-1\",\n props.className,\n )}\n >\n {child}\n </div>\n );\n\n const showIcon = Array.isArray(child) ? !!child.length : !child;\n\n if (props.tooltip) {\n return (\n <Flex gapX={2}>\n <Tooltip content={pnl}>{content}</Tooltip>\n {showIcon && <TPSLEditIcon />}\n </Flex>\n );\n }\n\n return content;\n};\n","import { FC } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n const { t } = useTranslation();\n return (\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-items-start\"\n >\n <Text>{t(\"positions.column.unrealPnl.tooltip\")}</Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">\n {t(\"positions.column.unrealPnl.priceBasis\")}\n </div>\n <UnPnlPriceBasisCheckBox\n value={unPnlPriceBasis}\n onValueChange={setUnPnlPriceBasic}\n />\n </Flex>\n );\n};\n\nconst UnPnlPriceBasisCheckBox = (props: {\n value: string;\n onValueChange: (value: string) => void;\n}) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={t(\"common.markPrice\")}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={t(\"common.lastPrice\")}\n value={\"lastPrice\"}\n onCheckChange={onValueChange}\n />\n </Flex>\n );\n};\n\nconst RadioButton = (props: {\n sel: boolean;\n label: any;\n value: any;\n onCheckChange: (value: any) => void;\n}) => {\n const { sel, label, value, onCheckChange } = props;\n return (\n <Flex\n onClick={(e) => {\n onCheckChange(value);\n e.stopPropagation();\n }}\n gap={1}\n className=\"oui-cursor-pointer\"\n >\n {sel ? <SelIcon /> : <UnselIcon />}\n <Text size=\"xs\" intensity={sel ? 98 : 54}>\n {label}\n </Text>\n </Flex>\n );\n};\n\nconst SelIcon = () => {\n return (\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 className=\"oui-fill-white\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".36\"\n />\n <circle cx=\"8\" cy=\"8\" r=\"3.333\" />\n </svg>\n );\n};\n\nconst UnselIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { cn, Divider, Flex, Grid } from \"@kodiak-finance/orderly-ui\";\nimport { ClosePositionWidget } from \"../../closePosition\";\nimport { ReversePositionButton } from \"../../desktop/reversePotisionButton\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n FundingFee,\n} from \"./items\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\n\n const header = (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n\n const body = (\n <Grid cols={3} rows={2} gap={2} width={\"100%\"}>\n <Qty {...props} />\n <Margin {...props} />\n <Notional {...props} />\n <AvgOpen {...props} />\n <MarkPrice {...props} />\n <LiqPrice {...props} />\n </Grid>\n );\n\n const buttons = (\n <Grid width={\"100%\"} gap={2} cols={2} rows={1}>\n <ClosePositionWidget type={OrderType.LIMIT} />\n <ClosePositionWidget type={OrderType.MARKET} />\n </Grid>\n );\n\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n p={2}\n r=\"xl\"\n itemAlign={\"start\"}\n className={cn(className, \"oui-bg-base-9\")}\n >\n {header}\n <Divider intensity={6} className=\"oui-w-full\" />\n {body}\n <TPSLPrice {...rest} />\n <FundingFee {...rest} />\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n {buttons}\n {props.positionReverse && (\n <ReversePositionButton position={props.item} />\n )}\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo, useRef } from \"react\";\nimport {\n ERROR_MSG_CODES,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderSide, PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n cn,\n Flex,\n Grid,\n Statistic,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { SymbolLeverageSheetId } from \"@kodiak-finance/orderly-ui-leverage\";\nimport { SharePnLBottomSheetId } from \"@kodiak-finance/orderly-ui-share\";\nimport { CloseToLiqPriceIcon } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FundingFeeButton } from \"../../../fundingFeeHistory/fundingFeeButton\";\nimport { LeverageBadge } from \"../../desktop/components\";\nimport { AddIcon, TPSLEditIcon } from \"../../desktop/components\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { PositionCellState } from \"./positionCell.script\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n const { t } = useTranslation();\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge\n symbol={item.symbol}\n leverage={item.leverage}\n modalId={SymbolLeverageSheetId}\n />\n </div>\n }\n showIcon\n onClick={() => {\n props.onSymbolChange?.({ symbol: item.symbol } as API.Symbol);\n }}\n >\n {item.symbol}\n </Text.formatted>\n );\n};\n\nexport const UnrealPnL: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <div className=\"oui-text-right\">\n <Text intensity={36}>{t(\"common.unrealizedPnl\")}</Text>\n <Text intensity={20}>(USDC)</Text>\n </div>\n\n <Text.pnl\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.roi\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n prefix=\"(\"\n suffix=\")\"\n className={cn(\n \"oui-ml-1\",\n item.unrealized_pnl_ROI > 0\n ? \"oui-text-success-darken\"\n : \"oui-text-danger-darken\",\n )}\n >\n {item.unrealized_pnl_ROI}\n </Text.roi>\n }\n >\n {item.unrealized_pnl}\n </Text.pnl>\n </Flex>\n <ShareButtonWidget\n position={item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n />\n </Flex>\n );\n};\n\nexport const Qty: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.qty\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring>\n {item.position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Margin: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={\n <span>\n {t(\"positions.column.margin\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={2} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n align=\"end\"\n label={\n <span>\n {t(\"common.notional\")}\n <Text intensity={20}>(USDC)</Text>\n </span>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={2} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={t(\"common.avgOpen\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.average_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MarkPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n return (\n <Statistic\n label={t(\"common.markPrice\")}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} intensity={80}>\n {item.mark_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const LiqPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={t(\"positions.column.liqPrice\")}\n align=\"end\"\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} rm={Decimal.ROUND_DOWN} color=\"warning\">\n {liqPrice}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const TPSLPrice: FC<PositionCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const slPriceError = useTpslPriceChecker({\n slPrice: item.full_tp_sl?.sl_trigger_price?.toString() ?? undefined,\n liqPrice: item.est_liq_price ?? null,\n side: item.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL,\n });\n\n const partialSlPriceError = useTpslPriceChecker({\n slPrice: item.partial_tp_sl?.sl_trigger_price?.toString() ?? undefined,\n liqPrice: item.est_liq_price ?? null,\n side: item.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL,\n });\n\n const fullTPSL = useMemo(() => {\n if (\n item.full_tp_sl?.tp_trigger_price == null &&\n item.full_tp_sl?.sl_trigger_price == null\n )\n return <AddIcon positionType={PositionType.FULL} />;\n\n return (\n <Flex className=\"oui-gap-[2px]\">\n {item.full_tp_sl?.tp_trigger_price && (\n <Text.numeral color=\"buy\">\n {item.full_tp_sl.tp_trigger_price}\n </Text.numeral>\n )}\n {item.full_tp_sl?.sl_trigger_price && \"/\"}\n {item.full_tp_sl?.sl_trigger_price && (\n <Text.numeral\n as=\"div\"\n color=\"sell\"\n suffix={<CloseToLiqPriceIcon slPriceError={slPriceError} />}\n className=\"oui-flex oui-items-center\"\n >\n {item.full_tp_sl.sl_trigger_price}\n </Text.numeral>\n )}\n <TPSLEditIcon />\n </Flex>\n );\n }, [item.full_tp_sl]);\n\n const partialTPSL = useMemo(() => {\n if (\n item.partial_tp_sl?.tp_trigger_price == null &&\n item.partial_tp_sl?.sl_trigger_price == null\n )\n return <AddIcon positionType={PositionType.PARTIAL} />;\n\n return (\n <Flex className=\"oui-gap-[2px]\" itemAlign={\"center\"}>\n {item.partial_tp_sl?.tp_trigger_price && (\n <Text.numeral color=\"buy\">\n {item.partial_tp_sl.tp_trigger_price}\n </Text.numeral>\n )}\n {item.partial_tp_sl?.sl_trigger_price && \"/\"}\n {item.partial_tp_sl?.sl_trigger_price && (\n <Text.numeral\n as=\"div\"\n color=\"sell\"\n suffix={<CloseToLiqPriceIcon slPriceError={partialSlPriceError} />}\n className=\"oui-flex oui-items-center\"\n >\n {item.partial_tp_sl.sl_trigger_price}\n </Text.numeral>\n )}\n <Text>{`(${item.partial_tp_sl?.order_num})`}</Text>\n <TPSLEditIcon />\n </Flex>\n );\n }, [item.partial_tp_sl]);\n\n return (\n <Grid cols={2} rows={1} gap={2} width={\"100%\"}>\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n direction={\"column\"}\n itemAlign={\"start\"}\n >\n <Text>{t(\"common.fullTPSL\")}: </Text>\n {fullTPSL}\n </Flex>\n <Flex\n className=\"oui-text-2xs oui-text-base-contrast-36 oui-grid-cols-end\"\n direction={\"column\"}\n itemAlign={\"end\"}\n >\n <Text>{t(\"common.partialTPSL\")}: </Text>\n {partialTPSL}\n </Flex>\n </Grid>\n );\n};\n\nexport const FundingFee: FC<PositionCellState> = (props) => {\n const { t } = useTranslation();\n const fundingFeeEndTime = useRef(Date.now().toString());\n return (\n <Flex justify={\"end\"} className=\"oui-w-full oui-text-2xs\">\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={props.item.fundingFee!}\n symbol={props.item.symbol}\n start_t={props.item.timestamp.toString()}\n end_t={fundingFeeEndTime.current}\n />\n </Flex>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { useSymbolContext } from \"../../../../provider/symbolContext\";\nimport { PositionsProps } from \"../../../../types/types\";\n\ntype PositionCellScriptProps = {\n item: API.PositionTPSLExt;\n index: number;\n positionReverse?: boolean;\n} & PositionsProps;\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n\nexport const usePositionCellScript = (props: PositionCellScriptProps) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { PositionsProps } from \"../../../../types/types\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n positionReverse?: boolean;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport {\n KeyedMutator,\n usePositionClose,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { PositionsRowContext } from \"./positionsRowContext\";\nimport type { PositionsRowContextState } from \"./positionsRowContext\";\n\n// export interface PositionsRowContextState {\n// quantity: string;\n// price: string;\n// type: OrderType;\n// side: OrderSide;\n// position: API.PositionExt | API.PositionTPSLExt;\n// updateQuantity: (value: string) => void;\n// updatePriceChange: (value: string) => void;\n\n// updateOrderType: (value: OrderType, price?: string) => void;\n\n// closeOrderData: any;\n\n// onSubmit: () => Promise<any>;\n// submitting: boolean;\n// tpslOrder?: API.AlgoOrder;\n// partialTPSLOrder?: API.AlgoOrder;\n// quoteDp?: number;\n// baseDp?: number;\n// baseTick?: number;\n// errors: any | undefined;\n// }\n\n// export const PositionsRowContext = createContext(\n// {} as PositionsRowContextState,\n// );\n\n// export const usePositionsRowContext = () => {\n// return useContext(PositionsRowContext);\n// };\n\ntype PositionsRowProviderProps = PropsWithChildren<{\n position: API.PositionExt | API.PositionTPSLExt;\n mutatePositions?: KeyedMutator<API.PositionExt[]>;\n}>;\n\nexport const PositionsRowProvider: FC<PositionsRowProviderProps> = (props) => {\n const { position, children, mutatePositions } = props;\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\n Math.abs(position.position_qty).toString(),\n );\n const [price, setPrice] = useState<string>(\n position.mark_price?.toString() || \"\",\n );\n const [type, setType] = useState<OrderType>(OrderType.LIMIT);\n\n useEffect(() => {\n setQuantity(Math.abs(position.position_qty).toString());\n }, [position.position_qty]);\n\n const symbol = position.symbol;\n const symbolsInfo = useSymbolsInfo();\n const symbolInfo = symbolsInfo?.[symbol];\n const quoteDp = symbolInfo(\"quote_dp\");\n const baseDp = symbolInfo(\"base_dp\");\n const baseTick = symbolInfo(\"base_tick\");\n\n const {\n side,\n closeOrderData,\n submit,\n isMutating: submitting,\n errors,\n calculate,\n } = usePositionClose({\n position,\n order: {\n type,\n quantity,\n price,\n },\n });\n\n const updateQuantity = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_quantity\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setQuantity(newValues.order_quantity!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updatePriceChange = useCallback(\n (value: string) => {\n const newValues = calculate(\n {},\n \"order_price\",\n value,\n position.mark_price,\n symbolInfo(),\n );\n setPrice(newValues.order_price!);\n },\n [calculate, symbolsInfo, position.mark_price],\n );\n\n const updateOrderType = useCallback(\n (type: OrderType) => {\n setType(type);\n // when type is Limit, set price to mark price\n // when type is Market, set price to empty string\n setPrice(type === OrderType.LIMIT ? position.mark_price?.toString() : \"\");\n },\n [position.mark_price],\n );\n\n const onSubmit = useCallback(async () => {\n if (Number(quantity) > symbolInfo(\"base_max\")) {\n toast.error(\n <div>\n {t(\"positions.limitClose.errors.exceed.title\")}\n <br />\n <div className=\"oui-break-normal\">\n {t(\"positions.limitClose.errors.exceed.description\", {\n quantity: quantity,\n symbol: transSymbolformString(symbol, \"base\"),\n maxQuantity: symbolInfo(\"base_max\"),\n })}\n </div>\n </div>,\n );\n return;\n }\n\n return submit()\n .then((res) => {\n if (res.success) {\n mutatePositions?.();\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n throw true;\n })\n .catch((err) => {\n if (err.message) {\n toast.error(err.message);\n }\n return false;\n });\n }, [submit]);\n\n const memoizedValue = useMemo<PositionsRowContextState>(() => {\n return {\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n tpslOrder: (position as API.PositionTPSLExt).full_tp_sl?.algo_order,\n partialTPSLOrder: (position as API.PositionTPSLExt).partial_tp_sl\n ?.algo_order,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n };\n }, [\n quantity,\n price,\n type,\n side,\n position,\n updatePriceChange,\n updateQuantity,\n updateOrderType,\n onSubmit,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n ]);\n\n return (\n <PositionsRowContext.Provider value={memoizedValue}>\n {children}\n </PositionsRowContext.Provider>\n );\n};\n\nfunction transSymbolformString(symbol: string, formatString = \"base\") {\n const arr = symbol.split(\"_\");\n const type = arr[0];\n const base = arr[1];\n const quote = arr[2];\n return (formatString ?? \"base-quote\")\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Button,\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n Table,\n TableFeatures,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { SymbolProvider } from \"../../provider/symbolProvider\";\nimport { usePositionHistoryColumn } from \"./desktop/usePositionHistoryColumn\";\nimport { PositionHistoryCellWidget } from \"./mobile\";\nimport {\n PositionHistoryExt,\n PositionHistoryState,\n} from \"./positionHistory.script\";\n\ntype PositionHistoryProps = PositionHistoryState & {\n sharePnLConfig?: SharePnLConfig;\n tableRef?: React.RefObject<Table<any>>;\n};\n\nexport const PositionHistory: FC<PositionHistoryProps> = (props) => {\n const { onSymbolChange, pagination, pnlNotionalDecimalPrecision, tableRef } =\n props;\n const column = usePositionHistoryColumn({\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n sharePnLConfig: props.sharePnLConfig,\n });\n\n const { t } = useTranslation();\n\n const dayLabel: Record<number, string> = useMemo(() => {\n return {\n 1: t(\"common.select.1d\"),\n 7: t(\"common.select.7d\"),\n 30: t(\"common.select.30d\"),\n 90: t(\"common.select.90d\"),\n };\n }, [t]);\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={cn(\n \"oui-whitespace-nowrap oui-break-normal\",\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\",\n )}\n >\n {dayLabel[value] || `${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<PositionHistoryExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: PositionHistoryExt) =>\n `${record.symbol}_${record.position_id}`\n }\n renderRowContainer={(record: any, index: number, children: any) => (\n <SymbolProvider symbol={record.symbol}>{children}</SymbolProvider>\n )}\n manualPagination={false}\n pagination={pagination}\n manualSorting={true}\n onSort={props.onSort}\n initialSort={\n props.initialSort\n ? {\n sortKey: props.initialSort.sortKey,\n sort: props.initialSort.sortOrder,\n }\n : undefined\n }\n features={[TableFeatures.DownloadFeature]}\n getTableInstance={(table) => {\n if (tableRef) {\n (tableRef as any).current = table;\n }\n }}\n testIds={{\n body: \"oui-testid-dataList-positionHistory-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n />\n </Flex>\n );\n};\n\nexport const MobilePositionHistory: FC<\n PositionHistoryState & {\n classNames?: { root?: string; content?: string; cell?: string };\n sharePnLConfig?: SharePnLConfig;\n onExport?: () => void;\n }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex\n gap={2}\n p={2}\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"oui-rounded-b-xl oui-bg-base-9\"\n >\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n {props.onExport && (\n <Button\n variant=\"outlined\"\n size=\"xs\"\n color=\"secondary\"\n onClick={props.onExport}\n >\n {t(\"common.export\") || \"Export CSV\"}\n </Button>\n )}\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n renderItem={(item, index) => (\n <SymbolProvider symbol={item.symbol}>\n <PositionHistoryCellWidget\n item={item}\n index={index}\n onSymbolChange={props.onSymbolChange}\n classNames={{\n root: props.classNames?.cell,\n }}\n sharePnLConfig={props.sharePnLConfig}\n />\n </SymbolProvider>\n )}\n />\n </Grid>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport {\n useLeverageBySymbol,\n useMaxLeverage,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n Box,\n capitalizeFirstLetter,\n cn,\n Column,\n Flex,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n SharePnLConfig,\n SharePnLDialogId,\n} from \"@kodiak-finance/orderly-ui-share\";\nimport { commifyOptional, formatNum } from \"@kodiak-finance/orderly-utils\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 200,\n onSort: (r1: any, r2: any) => {\n return r1.symbol?.localeCompare(r2.symbol || \"\");\n },\n render: (value: string, record) => (\n <SymbolInfo record={record} onSymbolChange={onSymbolChange} />\n ),\n },\n // quantity\n {\n title: t(\"positions.history.column.closed&maxClosed\"),\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: t(\"positions.history.column.netPnl\"),\n dataIndex: \"netPnL\",\n width: 140,\n onSort: (a, b) => {\n if (a.netPnL == null || b.netPnL == null) return -1;\n return (a.netPnL ?? 0) - (b.netPnL ?? 0);\n },\n render: (_: any, record) => (\n <Flex gapX={1}>\n <NetPnL\n record={record}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n />\n <ShareButtonWidget\n position={record}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n isPositionHistory\n />\n </Flex>\n ),\n },\n // avg open\n {\n title: t(\"common.avgPrice\"),\n dataIndex: \"avg_open\",\n width: 140,\n render: (_: any, record) => {\n const avgOpen =\n record.avg_open_price != null\n ? Math.abs(record.avg_open_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgOpen}\n </Text.numeral>\n );\n },\n },\n // avg close\n {\n title: t(\"common.avgClose\"),\n dataIndex: \"avg_close\",\n width: 175,\n render: (_: any, record) => {\n const avgClose =\n record.avg_close_price != null\n ? Math.abs(record.avg_close_price)\n : \"--\";\n const { quote_dp } = useSymbolContext();\n return (\n <Text.numeral dp={quote_dp} padding={false}>\n {avgClose}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"funding.fundingFee\"),\n dataIndex: \"accumulated_funding_fee\",\n render: (value, record) => {\n return (\n <FundingFeeButton\n fee={-value}\n symbol={record.symbol}\n start_t={record.open_timestamp.toString()}\n end_t={(\n record.close_timestamp || record.last_update_time\n )?.toString()}\n />\n );\n },\n },\n // time opened\n {\n title: t(\"positions.history.column.timeOpened\"),\n dataIndex: \"open_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.open_timestamp}\n </Text.formatted>\n ),\n },\n // time close\n {\n title: t(\"positions.history.column.timeClosed\"),\n dataIndex: \"close_timestamp\",\n width: 175,\n onSort: true,\n render: (_: any, record) => {\n if (record.position_status == \"closed\" && record.close_timestamp) {\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {record.close_timestamp ?? \"--\"}\n </Text.formatted>\n );\n }\n return \"--\";\n },\n },\n // updated time\n {\n title: t(\"positions.history.column.updatedTime\"),\n dataIndex: \"last_update_time\",\n width: 175,\n onSort: true,\n render: (_: any, record) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {record.last_update_time}\n </Text.formatted>\n ),\n },\n ] as Column<PositionHistoryExt>[],\n [pnlNotionalDecimalPrecision, t],\n );\n\n return column;\n};\n\nexport const SymbolInfo = (props: {\n record: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { record, onSymbolChange } = props;\n const { t } = useTranslation();\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge\n key={`status-${status}`}\n color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {renderStatus()}\n </Badge>,\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge key={`type-${record.type}`} color={\"danger\"} size=\"xs\">\n {t(\"positions.history.type.adl\")}\n </Badge>,\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Tooltip\n key={`type-${record.type}`}\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{ className: \"oui-fill-base-5\" }}\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidationId\")}\n </Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.liquidatorFee\")}\n </Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.liquidated.insFundFee\")}\n </Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n >\n <div>\n <Badge size=\"xs\" color=\"danger\" className=\"oui-cursor-pointer\">\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-1\">\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>\n </div>\n </Tooltip>,\n );\n }\n\n list.push(\n <LeverageBadge\n key={`leverage-${record.symbol}`}\n symbol={record.symbol}\n leverage={record.leverage}\n />,\n );\n\n return list;\n }, [record, t]);\n\n return (\n <Flex gap={2} height={48}>\n <Box\n width={4}\n height={38}\n className={cn(\n \"oui-shrink-0 oui-rounded-[1px]\",\n record.side === \"LONG\" ? \"oui-bg-trade-profit\" : \"oui-bg-trade-loss\",\n )}\n />\n\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n onSymbolChange?.({ symbol: record.symbol } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${record.symbol.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n <Flex gap={1}>{tags}</Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Quantity = (props: { record: PositionHistoryExt }) => {\n const { record } = props;\n\n const { base_dp } = useSymbolContext();\n\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-truncate\"\n >\n <Text.numeral dp={base_dp} padding={false}>\n {Math.abs(record.closed_position_qty)}\n </Text.numeral>\n <Text.numeral dp={base_dp} padding={false} className=\"oui-truncate\">\n {Math.abs(record.max_position_qty)}\n </Text.numeral>\n {/* <Text className=\"oui-truncate\">{`${record.symbol.split(\"_\")[1]}`}</Text> */}\n </Flex>\n );\n};\n\nexport const NetPnL = (props: {\n record: PositionHistoryExt;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { record, pnlNotionalDecimalPrecision } = props;\n const { t } = useTranslation();\n const netPnl = record.netPnL != null ? record.netPnL : undefined;\n\n const text = () => (\n <Text.pnl\n dp={pnlNotionalDecimalPrecision}\n color={\n record.netPnL != null\n ? record.netPnL > 0\n ? \"profit\"\n : \"lose\"\n : undefined\n }\n className={\n netPnl == null\n ? \"\"\n : \"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n }\n >\n {netPnl ?? \"--\"}\n </Text.pnl>\n );\n\n if (record.netPnL == null) return text();\n\n return (\n <Tooltip\n // open={record.max_position_qty == 3.22}\n delayDuration={200}\n // @ts-ignore\n content={\n <Flex direction={\"column\"} itemAlign={\"start\"} className=\"oui-text-2xs\">\n <Text intensity={80}>{t(\"positions.history.column.netPnl\")}</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text\n color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(formatNum.pnl(record.realized_pnl)?.toString())}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"funding.fundingFee\")}</Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text\n color={record.trading_fee > 0 ? \"lose\" : \"profit\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n }\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n arrow={{\n className: \"oui-fill-base-5\",\n }}\n >\n <div>{text()}</div>\n </Tooltip>\n );\n};\n\nconst LeverageBadge = (props: { symbol: string; leverage: number }) => {\n const { symbol, leverage } = props;\n\n return (\n <Badge color=\"neutral\" size=\"xs\">\n {leverage ? (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n ) : (\n <LeverageDisplay symbol={symbol} />\n )}\n </Badge>\n );\n};\n\nconst LeverageDisplay = ({ symbol }: { symbol: string }) => {\n const leverage = useMaxLeverage(symbol);\n\n return (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Divider, Flex, Grid, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { SharePnLBottomSheetId } from \"@kodiak-finance/orderly-ui-share\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\nimport { ShareButtonWidget } from \"../../positions/desktop/shareButton\";\nimport {\n PositionHistoryType,\n ClosedQty,\n SymbolToken,\n OpenTime,\n AvgOpen,\n AvgClosed,\n ClosedTime,\n MaxClosedQty,\n FundingFee,\n} from \"./items\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\n\nexport const PositionHistoryCell: FC<PositionHistoryCellState> = (props) => {\n return (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={props.classNames?.root}\n >\n <Header {...props} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n\n const showAlert = () => {\n const { item: record } = props;\n\n modal.alert({\n title: t(\"positions.history.column.netPnl\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"common.realizedPnl\")}</Text>\n <Text color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}>\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>{t(\"funding.fundingFee\")}</Text>\n <Text\n color={record.accumulated_funding_fee > 0 ? \"lose\" : \"profit\"}\n >\n {commifyOptional(-record.accumulated_funding_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>\n {t(\"positions.history.netPnl.tradingFee\")}\n </Text>\n <Text color={record.trading_fee > 0 ? \"lose\" : \"profit\"}>\n {commifyOptional(-record.trading_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n return (\n <Flex gap={1} width={\"100%\"}>\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-flex-1\"\n gap={1}\n >\n <SymbolToken {...props} />\n <PositionHistoryType {...props} />\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"positions.history.column.netPnl\")}\n </Text>\n <Flex gapX={1}>\n <button onClick={showAlert}>\n <Text.numeral size=\"xs\" coloring>\n {props.item.netPnL ?? \"--\"}\n </Text.numeral>\n </button>\n\n <ShareButtonWidget\n position={props.item}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLBottomSheetId}\n iconSize={12}\n isPositionHistory\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<PositionHistoryCellState> = (props) => {\n return (\n <div className=\"oui-w-full\">\n <Grid\n cols={3}\n rows={2}\n width={\"100%\"}\n gap={0}\n className=\"oui-grid-cols-[1fr,1fr,135px]\"\n >\n <ClosedQty {...props} />\n <MaxClosedQty {...props} />\n <OpenTime {...props} />\n <AvgOpen {...props} />\n <AvgClosed {...props} />\n <ClosedTime {...props} />\n </Grid>\n <FundingFee {...props} />\n </div>\n );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n capitalizeFirstLetter,\n Flex,\n modal,\n Statistic,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\nimport { FundingFeeButton } from \"../../fundingFeeHistory/fundingFeeButton\";\nimport { PositionHistorySide } from \"../positionHistory.script\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const { t } = useTranslation();\n const isBuy = side === PositionHistorySide.buy;\n\n return (\n <Text.formatted\n intensity={80}\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n // @ts-ignore\n prefix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? t(\"common.buy\") : t(\"common.sell\")}\n </Badge>\n }\n onClick={() => {\n props.onSymbolChange?.({ symbol: symbol } as API.Symbol);\n }}\n // showIcon\n >\n {symbol}\n </Text.formatted>\n );\n};\n\nexport const Time: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Text.formatted\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n intensity={36}\n size=\"2xs\"\n >\n {item.last_update_time}\n </Text.formatted>\n );\n};\n\nexport const PositionHistoryType: FC<PositionHistoryCellState> = (props) => {\n const { item: record } = props;\n const { t } = useTranslation();\n\n const showAlert = () => {\n modal.alert({\n title: t(\"positions.liquidation\"),\n message: (\n <Flex\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n className=\"oui-text-2xs oui-text-base-contrast-54\"\n >\n {record.liquidation_id != null && (\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidationId\")}</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.liquidatorFee\")}</Text>\n <Text color=\"lose\">\n {record.liquidator_fee > 0 && \"-\"}\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>{t(\"positions.history.liquidated.insFundFee\")}</Text>\n <Text color=\"lose\">\n {record.insurance_fund_fee > 0 && \"-\"}\n {commifyOptional(record.insurance_fund_fee)}\n </Text>\n </Flex>\n </Flex>\n ),\n });\n };\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n const status = record.position_status;\n\n const renderStatus = () => {\n if (status === \"closed\") {\n return t(\"positions.history.status.closed\");\n } else if (status === \"partial_closed\") {\n return t(\"positions.history.status.partialClosed\");\n } else {\n return capitalizeFirstLetter(status.replace(\"_\", \" \"));\n }\n };\n\n list.push(\n <Badge\n key={1}\n color={status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {renderStatus()}\n </Badge>,\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge key={2} color={\"danger\"} size=\"xs\">\n {t(\"positions.history.type.adl\")}\n </Badge>,\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Badge\n key={3}\n size=\"xs\"\n color=\"danger\"\n className=\"oui-cursor-pointer\"\n onClick={showAlert}\n >\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-1\">\n {/* {capitalizeFirstLetter(record.type)} */}\n {t(\"positions.history.type.liquidated\")}\n </span>\n </Badge>,\n );\n }\n\n return list;\n }, [record]);\n\n return <Flex gap={1}>{tags}</Flex>;\n};\n\nexport const ClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const closedQty =\n item.closed_position_qty != null\n ? Math.abs(item.closed_position_qty)\n : \"--\";\n\n return (\n <Statistic\n // label={\n // <Text>Closed{<Text intensity={20}>{` (${props.base})`}</Text>}</Text>\n // }\n label={<Text>{t(\"positions.history.column.closed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {closedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MaxClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const maxClosedQty =\n item.max_position_qty != null ? Math.abs(item.max_position_qty) : \"--\";\n return (\n <Statistic\n // label={\n // <Text>\n // Max closed{<Text intensity={20}>{` (${props.base})`}</Text>}\n // </Text>\n // }\n label={<Text>{t(\"positions.history.column.maxClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.base_dp} padding={false} coloring intensity={80}>\n {maxClosedQty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgOpen =\n item.avg_open_price != null ? Math.abs(item.avg_open_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgOpen\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgOpen}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgClosed: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const avgClose =\n item.avg_close_price != null ? Math.abs(item.avg_close_price) : \"--\";\n const { t } = useTranslation();\n return (\n <Statistic\n label={\n <Flex gap={1}>\n {t(\"common.avgClose\")}\n <Text intensity={20}>(USDC)</Text>\n </Flex>\n }\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} padding={false} coloring intensity={80}>\n {avgClose}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OpenTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeOpened\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.open_timestamp}\n </Text.formatted>\n </Statistic>\n );\n};\nexport const ClosedTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n const { t } = useTranslation();\n\n const child =\n item.position_status == \"closed\" && item.close_timestamp ? (\n <Text.formatted\n intensity={80}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n rule={\"date\"}\n >\n {item.close_timestamp}\n </Text.formatted>\n ) : (\n \"--\"\n );\n\n return (\n <Statistic\n label={<Text>{t(\"positions.history.column.timeClosed\")}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\n );\n};\n\nexport const FundingFee: FC<PositionHistoryCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex\n justify={\"end\"}\n className=\"oui-text-2xs oui-w-full oui-py-2 oui-gap-1 oui-gap-1\"\n >\n <Text intensity={36}>{t(\"funding.fundingFee\")}: </Text>\n <FundingFeeButton\n fee={-props.item.accumulated_funding_fee}\n symbol={props.item.symbol}\n start_t={props.item.open_timestamp.toString()}\n end_t={(\n props.item.close_timestamp || props.item.last_update_time\n )?.toString()}\n />\n </Flex>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\nimport {\n useAccount,\n usePrivateQuery,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { usePagination, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { TRADING_POSITIONS_SORT_STORAGE_KEY } from \"../../constants\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { useSort } from \"../../utils/sorting\";\nimport { useTabSort, PositionsTabName } from \"../shared/hooks/useTabSort\";\nimport { PositionHistoryProps } from \"./positionHistory.widget\";\n\nexport type PositionHistoryExt = API.PositionHistory & {\n netPnL?: number;\n};\n\nexport enum PositionHistorySide {\n all = \"all\",\n buy = \"LONG\",\n sell = \"SHORT\",\n}\nexport enum PositionHistoryStatus {\n all = \"all\",\n closed = \"closed\",\n partial_closed = \"partial_closed\",\n}\n\nexport const usePositionHistoryScript = (props: PositionHistoryProps) => {\n const {\n onSymbolChange,\n symbol,\n pnlNotionalDecimalPrecision,\n enableSortingStorage = true,\n } = props;\n const { state } = useAccount();\n\n // Sorting functionality\n const { tabSort, onTabSort } = useTabSort({\n storageKey: TRADING_POSITIONS_SORT_STORAGE_KEY,\n });\n\n const { onSort, getSortedList } = useSort(\n enableSortingStorage\n ? tabSort?.[PositionsTabName.PositionHistory]\n : undefined,\n enableSortingStorage\n ? onTabSort(PositionsTabName.PositionHistory)\n : undefined,\n );\n\n const { data, isLoading } = usePrivateQuery<PositionHistoryExt[]>(\n symbol\n ? `/v1/position_history?symbol=${symbol}&limit=1000`\n : \"/v1/position_history?limit=1000\",\n {\n formatter(data) {\n return (data.rows ?? null)?.map(\n (item: API.PositionHistory): PositionHistoryExt => {\n if (\n item.realized_pnl != null &&\n item.accumulated_funding_fee != null &&\n item.trading_fee != null\n ) {\n const netPnL =\n item.realized_pnl -\n item.accumulated_funding_fee -\n item.trading_fee;\n return {\n ...item,\n netPnL: netPnL,\n };\n }\n return item;\n },\n );\n },\n revalidateOnFocus: true,\n },\n );\n\n const { pagination, setPage } = usePagination({\n pageSize: 10,\n });\n\n const {\n status,\n side,\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n } = useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [status, side, dateRange, filterDays, symbol]);\n\n const filterData = useMemo(() => {\n if (data == null) return data;\n\n return data.filter((item) => {\n const sideFilter =\n side === PositionHistorySide.all\n ? true\n : item.side.toLowerCase() === side.toLowerCase();\n const statusFilter =\n status === PositionHistoryStatus.all\n ? true\n : item.position_status.toLowerCase() === status.toLowerCase();\n\n // const time = item.close_timestamp ?? item?.last_update_timestamp ?? item.open_timestamp;\n const time = item?.last_update_time ?? item.open_timestamp;\n const dateFilter =\n dateRange.from && dateRange.to\n ? time >= dateRange.from.getTime() && time <= dateRange.to.getTime()\n : true;\n\n const symbolFilter = symbol ? item.symbol == symbol : true;\n\n return sideFilter && statusFilter && dateFilter && symbolFilter;\n });\n }, [status, side, dateRange, data, symbol]);\n\n const rawDataSource = useDataTap(filterData, {\n accountStatus:\n state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading,\n fallbackData: [],\n });\n\n const dataSource = getSortedList(rawDataSource || []);\n\n return {\n dataSource,\n isLoading,\n onSymbolChange,\n pagination,\n filterItems,\n onFilter,\n symbol,\n filterDays,\n updateFilterDays,\n pnlNotionalDecimalPrecision,\n onSort,\n initialSort: enableSortingStorage\n ? tabSort?.[PositionsTabName.PositionHistory]\n : undefined,\n };\n};\n\nconst useFilter = () => {\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all,\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all,\n );\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"side\") {\n setSide(filter.value);\n }\n\n if (filter.name === \"status\") {\n setStatus(filter.value);\n }\n\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const sideFilter = {\n type: \"select\",\n name: \"side\",\n options: [\n {\n label: t(\"common.side.all\"),\n value: \"all\",\n },\n {\n label: t(\"common.buy\"),\n value: PositionHistorySide.buy,\n },\n {\n label: t(\"common.sell\"),\n value: PositionHistorySide.sell,\n },\n ],\n value: side,\n };\n\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: t(\"common.status.all\"),\n value: \"all\",\n },\n {\n label: t(\"positions.history.status.closed\"),\n value: PositionHistoryStatus.closed,\n },\n {\n label: t(\"positions.history.status.partialClosed\"),\n value: PositionHistoryStatus.partial_closed,\n },\n ],\n value: status,\n };\n\n if (isMobile) {\n return [sideFilter, statusFilter];\n }\n return [sideFilter, statusFilter, dateRangeFilter];\n }, [side, status, dateRange]);\n\n return {\n filterItems,\n onFilter,\n side,\n dateRange,\n status,\n filterDays,\n updateFilterDays,\n };\n};\n\nexport type PositionHistoryState = ReturnType<typeof usePositionHistoryScript>;\n","import { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\n\nexport const parseDateRangeForFilter = (dateRange: {\n from: Date;\n to?: Date;\n}) => {\n let { from, to } = dateRange;\n\n if (typeof to === \"undefined\") {\n to = new Date();\n }\n\n const diff = differenceInDays(from, to);\n\n // console.log(\"diff\", diff);\n\n if (diff === 0) {\n return [from, setHours(to, 23)];\n }\n\n return [from, to];\n};\n\nexport function offsetStartOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexport function offsetEndOfDay(date?: Date) {\n if (date == null) return date;\n\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n}\n\nexport const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n});\n\nexport const areDatesEqual = (date1: Date, date2: Date): boolean => {\n return date1.getTime() === date2.getTime();\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { useSymbolContext } from \"../../../provider/symbolContext\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const symbolInfo = useSymbolContext();\n\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionHistoryCellState = ReturnType<\n typeof usePositionHistoryCellScript\n>;\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import React, { forwardRef } from \"react\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { Table } from \"@kodiak-finance/orderly-ui\";\nimport { SharePnLConfig } from \"@kodiak-finance/orderly-ui-share\";\nimport { usePositionHistoryScript } from \"./positionHistory.script\";\nimport { MobilePositionHistory, PositionHistory } from \"./positionHistory.ui\";\n\nexport type PositionHistoryProps = {\n onSymbolChange?: (symbol: API.Symbol) => void;\n symbol?: string;\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n enableSortingStorage?: boolean; // Controls whether to persist sorting preferences\n};\n\nexport type PositionHistoryInstance = {\n getRowCount?: () => number;\n getDataSource?: () => any[] | null;\n};\n\nexport const PositionHistoryWidget = forwardRef<\n PositionHistoryInstance,\n PositionHistoryProps\n>((props, ref) => {\n const state = usePositionHistoryScript(props);\n const tableRef = React.useRef<Table<any>>(null);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return tableRef.current?.getRowCount?.() ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return (\n <PositionHistory\n {...state}\n sharePnLConfig={props.sharePnLConfig}\n tableRef={tableRef}\n />\n );\n});\n\nPositionHistoryWidget.displayName = \"PositionHistoryWidget\";\n\nexport const MobilePositionHistoryWidget = React.forwardRef<\n PositionHistoryInstance,\n PositionHistoryProps & {\n classNames?: { root?: string; content?: string; cell?: string };\n onExport?: () => void;\n }\n>((props, ref) => {\n const { classNames, onExport, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return state.dataSource?.length ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return (\n <MobilePositionHistory\n {...state}\n classNames={classNames}\n sharePnLConfig={props.sharePnLConfig}\n onExport={onExport}\n />\n );\n});\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { LiquidationCellWidget } from \"./mobile\";\n\nexport const Liquidation: FC<LiquidationState> = (props) => {\n const [expanded, setExpanded] = useState({});\n const column = useLiquidationColumn({});\n\n return (\n <Flex direction=\"column\" width=\"100%\" height=\"100%\" itemAlign=\"start\">\n {/* <Divider className=\"oui-w-full\" /> */}\n <Flex gap={3}>\n {props.filterItems.length > 0 && (\n <DataFilter\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n )}\n {[1, 7, 30, 90].map((value) => {\n return (\n <button\n key={`item-${value}`}\n className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\"\n >\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={\n props.filterDays !== value\n ? \"oui-text-base-contrast-54\"\n : \"\"\n }\n >\n {`${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-absolute oui-inset-0 oui-rounded oui-opacity-[.12] oui-gradient-primary\"\n onClick={() => {\n props.updateFilterDays(value as any);\n }}\n ></div>\n </button>\n );\n })}\n </Flex>\n\n <AuthGuardDataTable<API.Liquidation>\n loading={props.isLoading}\n id=\"oui-desktop-liquidation-content\"\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record: API.Liquidation) =>\n `${record.liquidation_id}`\n }\n // manualPagination={false}\n pagination={props.pagination}\n testIds={{\n body: \"oui-testid-dataList-liquidation-tab-body\",\n }}\n classNames={{\n root: \"!oui-h-[calc(100%_-_49px)]\",\n }}\n // onRow={(record, index, row) => {\n // return {\n // className: \"[&>td:first-child]:oui-pl-0 [&>td:last-child]:oui-pr-0\",\n // };\n // }}\n expanded={expanded}\n onExpandedChange={setExpanded}\n getRowCanExpand={() => true}\n expandRowRender={(record) => {\n return <LiquidationDetails record={record.original} />;\n }}\n />\n </Flex>\n );\n};\n\nconst TooltipHeaderCell: FC<{\n tooltip: string;\n label: string;\n side?: \"left\";\n}> = (props) => {\n return (\n <th className=\"oui-h-10 oui-border-b oui-border-line oui-text-left oui-text-base-contrast-36\">\n <Tooltip\n content={props.tooltip}\n className=\"oui-w-[275px] oui-bg-base-6\"\n side={props.side}\n arrow={{\n className: \"oui-fill-base-6\",\n }}\n >\n <button className=\"oui-border-b oui-border-dashed oui-border-line-12\">\n {props.label}\n </button>\n </Tooltip>\n </th>\n );\n};\n\nconst LiquidationDetails: FC<{\n record: API.Liquidation;\n}> = (props) => {\n const { margin_ratio, account_mmr, collateral_value, position_notional } =\n props.record as any;\n\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-w-full oui-bg-base-8 oui-px-6\">\n {/* <pre>{JSON.stringify(props.record, null, 2)}</pre> */}\n\n <table className=\"oui-w-full\">\n <thead>\n <tr>\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.mr\")}\n label={t(\"positions.Liquidation.expand.label.mr\")}\n side=\"left\"\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.mmr\")}\n label={t(\"positions.Liquidation.expand.label.mmr\")}\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.collateral\")}\n label={t(\"positions.Liquidation.expand.label.collateral\")}\n />\n <TooltipHeaderCell\n tooltip={t(\"positions.Liquidation.expand.tooltip.notional\")}\n label={t(\"positions.Liquidation.expand.label.notional\")}\n />\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className=\"oui-h-10\">\n <Text.numeral rule=\"percentages\">{margin_ratio}</Text.numeral>\n </td>\n <td className=\"oui-h-10\">\n <Text.numeral rule=\"percentages\">{account_mmr}</Text.numeral>\n </td>\n <td className=\"oui-h-10\">{commifyOptional(collateral_value)}</td>\n <td className=\"oui-h-10\">{commifyOptional(position_notional)}</td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n};\n\nexport const MobileLiquidation: FC<\n LiquidationState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n onExport?: () => void;\n }\n> = (props) => {\n const { t } = useTranslation();\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-w-full oui-grid-rows-[auto,1fr]\"\n gap={1}\n >\n <Flex\n gap={2}\n p={2}\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"oui-rounded-b-xl oui-bg-base-9\"\n >\n <DataFilter\n className=\"oui-border-none oui-py-0\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n {props.onExport && (\n <Button\n variant=\"outlined\"\n size=\"xs\"\n color=\"secondary\"\n onClick={props.onExport}\n >\n {t(\"common.export\") || \"Export CSV\"}\n </Button>\n )}\n </Flex>\n <ListView\n className={cn(\n \"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden\",\n props.classNames?.root,\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\n loadMore={props.loadMore}\n renderItem={(item, index) => (\n <LiquidationCellWidget\n item={item}\n index={index}\n classNames={{\n root: props.classNames?.cell,\n }}\n />\n )}\n />\n </Grid>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Column, Flex, Text, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional } from \"@kodiak-finance/orderly-utils\";\n\nconst TooltipButton: FC<{\n tooltip: string;\n label: string;\n}> = (props) => {\n return (\n <Tooltip\n className=\"oui-w-[275px] oui-bg-base-6\"\n content={props.tooltip}\n arrow={{\n className: \"oui-fill-base-6\",\n }}\n >\n <button className=\"oui-border-b oui-border-dashed oui-border-line-12\">\n {props.label}\n </button>\n </Tooltip>\n );\n};\n\nexport const useLiquidationColumn = (props: {}) => {\n const { t } = useTranslation();\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: t(\"common.time\"),\n dataIndex: \"timestamp\",\n width: 202,\n render: (value: string) => (\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {value}\n </Text.formatted>\n ),\n },\n // Liquidation id\n {\n title: t(\"positions.Liquidation.column.liquidationId\"),\n dataIndex: \"liquidation_id\",\n width: 120,\n render: (value) => <Text>{value}</Text>,\n },\n // Symbol\n {\n title: t(\"common.symbol\"),\n dataIndex: \"Symbol\",\n // width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n key={item.symbol}\n >\n {item.symbol}\n </Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: t(\"positions.Liquidation.column.markPrice\"),\n dataIndex: \"Price_(USDC)\",\n // width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.mark_price}\n type=\"quote\"\n key={item.symbol}\n />\n ))}\n </Flex>\n );\n },\n },\n // Quantity\n {\n title: t(\"common.quantity\"),\n dataIndex: \"Quantity\",\n // width: 202,\n render: (_: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n value={item.position_qty}\n type=\"base\"\n key={item.symbol}\n />\n ))}\n </Flex>\n );\n },\n },\n\n // net pnl\n // {\n // title: t(\"positions.Liquidation.column.insFundTransfer\"),\n // dataIndex: \"transfer_amount_to_insurance_fund\",\n // width: 202,\n // render: (value) => {\n // return <Text>{commifyOptional(value)}</Text>;\n // },\n // },\n // Liquidation fee rate\n // TODO: use i18\n {\n title: (\n <TooltipButton\n tooltip={t(\"positions.Liquidation.col.tooltip.feeRate\")}\n label={t(\"positions.Liquidation.column.liquidationFeeRate\")}\n />\n ),\n dataIndex: \"liquidationFeeRate\",\n // width: 202,\n render: (value) => {\n return <Text.numeral rule=\"percentages\">{value}</Text.numeral>;\n // return <Text>{commifyOptional(value)}</Text>;\n },\n },\n\n // Liquidation Fee\n {\n title: (\n <TooltipButton\n tooltip={t(\"positions.Liquidation.col.tooltip.fee\")}\n label={t(\"positions.Liquidation.column.liquidationFee\")}\n />\n ),\n dataIndex: \"abs_liquidation_fee\",\n width: 100,\n render: (abs_liquidation_fee: any, record) => {\n return (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n // <SymbolProvider symbol={item.symbol}>\n // </SymbolProvider>\n <FormattedText\n key={item.symbol}\n value={item.abs_liquidation_fee}\n type=\"quote\"\n />\n ))}\n </Flex>\n );\n },\n },\n {\n title: \"\",\n dataIndex: \"actions\",\n align: \"right\",\n width: 40,\n render: (_: any, record: API.Liquidation, index, ctx) => {\n const isExpanded = ctx.row.getIsExpanded();\n\n return (\n <button\n className=\"oui-p-2\"\n onClick={() => {\n ctx.row.getToggleExpandedHandler()();\n }}\n >\n <ArrowIcon className={isExpanded ? \"oui-rotate-180\" : \"\"} />\n </button>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n [t],\n );\n\n return column;\n};\n\nconst FormattedText: FC<{ value?: string | number; type: \"base\" | \"quote\" }> = (\n props,\n) => {\n return <Text>{commifyOptional(props.value)}</Text>;\n};\n\nconst ArrowIcon: FC<{\n className?: string;\n onClick?: () => void;\n}> = (props) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M3.884 6.02a.67.67 0 0 0-.436.27.68.68 0 0 0 .187.933L7.63 9.88a.68.68 0 0 0 .749 0l3.994-2.657a.68.68 0 0 0 .187-.934.68.68 0 0 0-.936-.186L8.003 8.51l-3.62-2.407a.65.65 0 0 0-.499-.084\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text, Divider, Badge } from \"@kodiak-finance/orderly-ui\";\nimport { commifyOptional, Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\n\nexport const LiquidationCell: FC<\n LiquidationCellState & {\n classNames?: {\n root?: string;\n };\n }\n> = (props) => {\n return (\n <Flex\n key={props.item.timestamp}\n direction={\"column\"}\n width={\"100%\"}\n gap={2}\n itemAlign={\"start\"}\n className={cn(\n \"oui-rounded-xl oui-bg-base-9 oui-p-2\",\n props.classNames?.root,\n )}\n >\n <Header {...props} />\n <Divider />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\n const { t } = useTranslation();\n return (\n <Flex width={\"100%\"} justify={\"between\"} itemAlign={\"start\"}>\n <Flex direction={\"column\"} itemAlign={\"start\"} gap={1}>\n <Flex gap={2} itemAlign={\"center\"}>\n <Flex direction={\"column\"} gap={1} itemAlign={\"start\"}>\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n >\n {props.item.positions_by_perp?.[0]?.symbol || \"\"}\n </Text.formatted>\n {/* <Badge size=\"sm\" color=\"neutral\">\n Cross 10X\n </Badge> */}\n </Flex>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"}>\n <Text size=\"2xs\" intensity={36}>\n <Text.formatted rule={\"date\"} formatString=\"yyyy-MM-dd HH:mm:ss\">\n {props.item.timestamp}\n </Text.formatted>\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"positions.Liquidation.column.liquidationId\")}: `}\n <Text as=\"span\" intensity={80}>\n {props.item.liquidation_id}\n </Text>\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n const position = props.item.positions_by_perp?.[0];\n const { t } = useTranslation();\n const mr = useMemo(() => {\n if (isNaN(props.item?.margin_ratio)) return \"--\";\n return `${new Decimal(props.item.margin_ratio).mul(100).todp(2, Decimal.ROUND_DOWN).toNumber()}%`;\n }, [props.item?.margin_ratio]);\n\n if (!position) return null;\n\n return (\n <Flex direction={\"column\"} width={\"100%\"} gap={1}>\n {/* First row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.column.markPrice\")}\n value={commifyOptional(position.transfer_price)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"common.quantity\")}\n value={commifyOptional(position.position_qty)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.column.liquidationFeeRate\")}\n value={props.item.liquidationFeeRate}\n className=\"oui-flex-1\"\n align=\"end\"\n />\n </Flex>\n\n {/* Second row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.column.liquidationFee\")}\n value={commifyOptional(position.abs_liquidation_fee)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.mr\")}\n value={mr}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.mmr\")}\n value={\n props.item.formatted_account_mmr\n ? `${props.item.formatted_account_mmr}%`\n : \"--\"\n }\n className=\"oui-flex-1\"\n align=\"end\"\n />\n </Flex>\n\n {/* Third row */}\n <Flex gap={2} width={\"100%\"}>\n <DataItem\n label={t(\"positions.Liquidation.expand.label.collateral\")}\n value={commifyOptional(props.item.collateral_value)}\n className=\"oui-flex-1\"\n />\n <DataItem\n label={t(\"positions.Liquidation.expand.label.notional\")}\n value={commifyOptional(props.item.position_notional)}\n className=\"oui-flex-1\"\n />\n <div className=\"oui-flex-1 oui-opacity-0\" /> {/* Empty placeholder */}\n </Flex>\n </Flex>\n );\n};\n\nconst DataItem: FC<{\n label: string;\n value: string | number;\n className?: string;\n align?: \"start\" | \"end\";\n}> = ({ label, value, className, align = \"start\" }) => {\n return (\n <Flex direction={\"column\"} itemAlign={align} className={className}>\n <Text size=\"2xs\" intensity={36}>\n {label}\n </Text>\n <Text size=\"xs\" intensity={80}>\n {value}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation & {\n formatted_account_mmr: string;\n liquidationFeeRate: number;\n };\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n return {\n ...props,\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { useLiquidationCellScript } from \"./liquidationCell.script\";\nimport { LiquidationCell } from \"./liquidationCell.ui\";\n\nexport const LiquidationCellWidget = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const { classNames, ...rest } = props;\n const state = useLiquidationCellScript(rest);\n return <LiquidationCell classNames={classNames} {...state} />;\n};\n","import React, { forwardRef } from \"react\";\nimport { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n};\n\nexport type LiquidationInstance = {\n getRowCount?: () => number;\n getDataSource?: () => any[] | null;\n};\n\nexport const LiquidationWidget = forwardRef<\n LiquidationInstance,\n LiquidationProps\n>((props, ref) => {\n const state = useLiquidationScript(props);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return state.dataSource?.length ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return <Liquidation {...state} />;\n});\n\nexport const MobileLiquidationWidget = forwardRef<\n LiquidationInstance,\n LiquidationProps & {\n classNames?: { root?: string; content?: string; cell?: string };\n onExport?: () => void;\n }\n>((props, ref) => {\n const { classNames, onExport, ...rest } = props;\n const state = useLiquidationScript(rest);\n\n React.useImperativeHandle(\n ref,\n () => ({\n getRowCount: () => {\n return state.dataSource?.length ?? 0;\n },\n getDataSource: () => {\n return state.dataSource ?? null;\n },\n }),\n [state.dataSource],\n );\n\n return (\n <MobileLiquidation classNames={classNames} {...state} onExport={onExport} />\n );\n});\n","import { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { usePagination, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { LiquidationProps } from \"./liquidation.widget\";\n\nexport const useLiquidationScript = (props: LiquidationProps) => {\n const { symbol, enableLoadMore } = props;\n const { page, pageSize, setPage, pagination, parsePagination } =\n usePagination({\n pageSize: 10,\n });\n\n const { dateRange, filterDays, updateFilterDays, filterItems, onFilter } =\n useFilter();\n\n useEffect(() => {\n setPage(1);\n }, [symbol, dateRange, filterDays]);\n\n const [data, { meta, isLoading, loadMore }] = useLiquidation({\n page: enableLoadMore ? undefined : page,\n size: pageSize,\n symbol,\n start_t: dateRange.from != null ? dateRange.from.getTime() : undefined,\n end_t: dateRange.to != null ? dateRange.to.getTime() : undefined,\n });\n\n const dataSource = useDataTap(data, {\n fallbackData: [],\n });\n\n // useEffect(() => {\n // setPage(1);\n // }, [dateRange, filterDays]);\n\n // console.log(\"pagination\", pagination, meta);\n\n return {\n dataSource,\n isLoading,\n loadMore,\n\n pagination: parsePagination(meta),\n\n // filter\n dateRange,\n filterDays,\n updateFilterDays,\n filterItems,\n onFilter,\n };\n};\n\nexport type LiquidationState = ReturnType<typeof useLiquidationScript>;\n\n/**\n *\n * @param props size default is 100\n */\nconst useLiquidation = (props: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n}) => {\n const ordersResponse = usePrivateInfiniteQuery(generateKeyFun(props), {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\n });\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n const data = useMemo(() => {\n return ordersResponse.data\n ?.map((item) =>\n // @ts-ignore\n item.rows?.map((item) => {\n let liquidationFeeRate = null;\n const firstPosition = item.positions_by_perp[0];\n\n if (firstPosition) {\n liquidationFeeRate = new Decimal(firstPosition.liquidator_fee)\n .add(firstPosition.insurance_fund_fee)\n .toNumber();\n }\n\n return {\n ...item,\n // Flatten first position for CSV export\n symbol: firstPosition?.symbol,\n transfer_price: firstPosition?.transfer_price,\n position_qty: firstPosition?.position_qty,\n abs_liquidation_fee: firstPosition?.abs_liquidation_fee,\n // Formatted fields\n formatted_account_mmr: isNaN(item.account_mmr)\n ? null\n : new Decimal(item.account_mmr).mul(100).toFixed(2).toString(),\n liquidationFeeRate,\n };\n }),\n )\n ?.flat();\n }, [ordersResponse.data]);\n\n const isLoading = ordersResponse.isLoading;\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n return [data, { meta, isLoading, loadMore }] as const;\n};\n\nconst useFilter = () => {\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetStartOfDay(subDays(new Date(), 89)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90 | null>(90);\n\n const [dateRange, setDateRange] = useState<{\n from?: Date;\n to?: Date;\n }>(defaultRange);\n\n const updateFilterDays = (days: 1 | 7 | 30 | 90) => {\n setFilterDays(days);\n setDateRange({\n from: offsetStartOfDay(subDays(new Date(), days - 1)),\n to: offsetEndOfDay(new Date()),\n });\n };\n\n const onFilter = (filter: { name: string; value: any }) => {\n if (filter.name === \"dateRange\") {\n const newDateRange = formatDatePickerRange(filter.value);\n setDateRange(newDateRange);\n if (newDateRange.from && newDateRange.to) {\n const diffDays =\n Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1;\n const dateRangeMap: { [key: number]: { from: Date; to: Date } } = {\n 1: {\n from: offsetStartOfDay(new Date())!,\n to: offsetEndOfDay(new Date())!,\n },\n 7: {\n from: offsetStartOfDay(subDays(new Date(), 6))!,\n to: offsetEndOfDay(new Date())!,\n },\n 30: {\n from: offsetStartOfDay(subDays(new Date(), 29))!,\n to: offsetEndOfDay(new Date())!,\n },\n 90: {\n from: offsetStartOfDay(subDays(new Date(), 89))!,\n to: offsetEndOfDay(new Date())!,\n },\n };\n\n const dateRange = dateRangeMap[diffDays];\n if (\n dateRange &&\n areDatesEqual(dateRange.from, newDateRange.from) &&\n areDatesEqual(dateRange.to, newDateRange.to)\n ) {\n setFilterDays(diffDays as any);\n } else {\n setFilterDays(null);\n }\n }\n }\n };\n\n const { isMobile } = useScreen();\n\n const filterItems = useMemo((): any[] => {\n const dateRangeFilter = {\n type: \"range\",\n name: \"dateRange\",\n value: dateRange,\n fromDate: offsetStartOfDay(subDays(new Date(), 89)),\n toDate: offsetEndOfDay(new Date()),\n };\n\n if (isMobile) {\n return [dateRangeFilter];\n }\n return [dateRangeFilter];\n }, [dateRange]);\n\n return {\n filterItems,\n onFilter,\n dateRange,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst generateKeyFun =\n (args: {\n symbol?: string;\n start_t?: number;\n end_t?: number;\n page?: number;\n size?: number;\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const { symbol, size = 10, page, end_t, start_t } = args;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n ]);\n\n if (page) {\n search.set(\"page\", `${page}`);\n }\n\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n\n if (end_t) {\n search.set(`end_t`, `${end_t}`);\n }\n\n if (start_t) {\n search.set(`start_t`, `${start_t}`);\n }\n\n return `/v1/liquidations?${search.toString()}`;\n };\n","import React, { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn } from \"@kodiak-finance/orderly-ui\";\nimport { formatSymbol } from \"@kodiak-finance/orderly-utils\";\nimport type { CloseAllPositionsState } from \"./closeAllPositions.script\";\n\nexport type CloseAllPositionsProps = CloseAllPositionsState & {\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport const CloseAllPositions: FC<CloseAllPositionsProps> = (props) => {\n const { onCloseAll, hasOpenPositions, isClosing, className, style, symbol } =\n props;\n const { t } = useTranslation();\n if (symbol !== undefined) {\n return <></>;\n }\n return (\n <Button\n onClick={onCloseAll}\n disabled={!hasOpenPositions || isClosing}\n loading={isClosing}\n variant=\"outlined\"\n color=\"secondary\"\n size=\"xs\"\n className={cn(\"disabled:oui-bg-transport\", className)}\n style={style}\n >\n {t(\"positions.closeAll\")}\n </Button>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n usePositionStream,\n useSubAccountMutation,\n useTrack,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n API,\n OrderSide,\n OrderType,\n TrackerEventName,\n} from \"@kodiak-finance/orderly-types\";\nimport { modal, Text, toast } from \"@kodiak-finance/orderly-ui\";\n\nexport interface UseCloseAllPositionsScriptOptions {\n symbol?: string;\n onSuccess?: () => void;\n}\n\nexport const useCloseAllPositionsScript = (\n options?: UseCloseAllPositionsScriptOptions,\n) => {\n const { symbol, onSuccess } = options || {};\n const { t } = useTranslation();\n const { tracking } = useTrack();\n\n // Get all positions data\n const [positionsData] = usePositionStream(symbol);\n\n // Get open positions (positions with non-zero quantity)\n const openPositions = useMemo(() => {\n if (!positionsData?.rows) return [];\n return positionsData.rows.filter(\n (position: API.PositionTPSLExt) =>\n position.position_qty !== 0 && position.position_qty !== undefined,\n );\n }, [positionsData]);\n\n // Check if there are open positions\n const hasOpenPositions = useMemo(() => {\n return openPositions.length > 0;\n }, [openPositions]);\n\n const [doCreateOrder, { isMutating }] = useSubAccountMutation(\n \"/v1/order\",\n \"POST\",\n );\n\n // Close all positions function\n const closeAllPositions = useCallback(async () => {\n if (!hasOpenPositions) return;\n\n try {\n // Create market orders to close each position\n const closePromises = openPositions.map(\n (position: API.PositionTPSLExt) => {\n const side =\n position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY;\n const quantity = Math.abs(position.position_qty);\n\n return doCreateOrder({\n symbol: position.symbol,\n order_type: OrderType.MARKET,\n side,\n order_quantity: quantity,\n reduce_only: true,\n });\n },\n );\n\n await Promise.all(closePromises);\n\n toast.success(t(\"positions.closeAll.success\"));\n onSuccess?.();\n\n return true;\n } catch (error: any) {\n if (error?.message !== undefined) {\n toast.error(error.message);\n }\n return false;\n }\n }, [openPositions, hasOpenPositions, doCreateOrder, t, onSuccess]);\n\n // Show confirmation modal\n const onCloseAll = useCallback(() => {\n modal.confirm({\n title: t(\"positions.closeAll\"),\n content: <Text size=\"sm\">{t(\"positions.closeAll.description\")}</Text>,\n onCancel: async () => {},\n onOk: async () => {\n try {\n // Track event\n tracking(TrackerEventName.confirmCloseAllPositions, {\n positions_count: openPositions.length,\n });\n\n const result = await closeAllPositions();\n return Promise.resolve(result);\n } catch (error) {\n return Promise.resolve(false);\n }\n },\n });\n }, [t, tracking, openPositions, closeAllPositions]);\n\n return {\n onCloseAll,\n hasOpenPositions,\n isClosing: isMutating,\n openPositionsCount: openPositions.length,\n symbol,\n };\n};\n\nexport type CloseAllPositionsState = ReturnType<\n typeof useCloseAllPositionsScript\n>;\n","import React from \"react\";\nimport { useCloseAllPositionsScript } from \"./closeAllPositions.script\";\nimport {\n CloseAllPositions,\n type CloseAllPositionsProps,\n} from \"./closeAllPositions.ui\";\n\nexport type CloseAllPositionsWidgetProps = Pick<\n CloseAllPositionsProps,\n \"className\" | \"style\"\n> & {\n symbol?: string;\n onSuccess?: () => void;\n};\n\nexport const CloseAllPositionsWidget: React.FC<CloseAllPositionsWidgetProps> = (\n props,\n) => {\n const { className, style, symbol, onSuccess } = props;\n const state = useCloseAllPositionsScript({ symbol, onSuccess });\n return <CloseAllPositions {...state} className={className} style={style} />;\n};\n"]}