@orderly.network/ui-positions 2.0.1-preview.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +7 -8
- package/dist/index.d.ts +7 -8
- package/dist/index.js +15 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/positions/desktop/closeButton.tsx","../src/components/positions/desktop/positionRowContext.tsx","../src/providers/symbolProvider.tsx","../src/components/positions/positions.ui.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/positions/desktop/listElement.tsx","../src/components/positions/desktop/priceInput.tsx","../src/components/positions/desktop/quantityInput.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/components.tsx","../src/components/positions/desktop/unrealPnLHover.tsx","../src/components/positions/desktop/numeralWithCtx.tsx","../src/components/positions/mobile/positionCell/positionCell.ui.tsx","../src/components/positions/mobile/positionCell/items.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.ui.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.script.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.widget.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.ui.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.script.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.widget.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.ui.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.script.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.widget.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/usePositionsBuilder.script.ts","../src/components/positions/positions.widget.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/items.tsx","../src/components/liquidation/mobile/liquidationCell.script.tsx","../src/components/liquidation/mobile/liquidationCell.widget.tsx","../src/components/liquidation/liquidation.script.tsx","../src/components/liquidation/liquidation.widget.tsx"],"names":["registerSimpleDialog","Button","toast","Text","CloseIcon","Flex","Divider","Badge","SimpleDialog","ThrottledButton","OrderSide","OrderType","createContext","useContext","useEffect","useMemo","useState","useOrderEntry_deprecated","useSymbolsInfo","jsx","PositionsRowContext","usePositionsRowContext","PositionsRowProvider","props","quantity","setQuantity","price","setPrice","side","setSide","errors","setErrors","type","setType","config","symbol","curSymbolInfo","quoteDp","baseDp","baseTick","helper","onSubmit","submitting","updateOrderType","closeOrderData","position","data","onUpdateQuantity","value","newValues","onUpdatePrice","order","postOrder","error","commify","commifyOptional","Decimal","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","useLocalStorage","Fragment","jsxs","CloseButton","open","setOpen","base","quote","orderConfirm","onConfirm","res","onClose","disabled","e","quantityMsg","priceMsg","MarketCloseConfirm","LimitConfirmDialog","ConfirmHeader","hideCloseIcon","ConfirmFooter","onCancel","OrderDetail","total","ListView","Box","cn","HoverCard","Tooltip","CaretDownIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","Input","inputFormatter","PriceInput","updatePriceChange","hasFocus","setHasFocus","vent","PopoverRoot","PopoverContent","PopoverTrigger","Slider","utils","QuantityInput","sliderValue","setSliderValue","handleClick","event","resetQuantity","percent","onBlur","formatQty","values","Buttons","item","index","renderQuantity","record","renderQuantityInput","renderPriceInput","SharePnLDialogId","modal","ShareIcon","ShareButton","useReferralInfo","useSymbolLeverage","useShareButtonScript","sharePnLConfig","modalId","iconSize","getFirstRefCode","refCode","leverage","ShareButtonWidget","state","AlgoOrderType","TriggerPrice","stopLossPrice","takeProfitPrice","tpslOrder","TPSLTriggerPrice","TriggerPriceItem","qty","entryPrice","orderSide","orderType","pnl","direction","msgs","child","children","content","PositionTPSLPopover","TPSLButton","UnrealizedPnLPopoverCard","unPnlPriceBasis","setUnPnlPriceBasic","UnPnlPriceBasisCheckBox","onValueChange","RadioButton","sel","label","onCheckChange","SelIcon","UnselIcon","NumeralWithCtx","tick","rest","useColumn","pnlNotionalDecimalPrecision","r1","r2","a","b","_","Grid","Statistic","SharePnLBottomSheetId","SymbolToken","isBuy","UnrealPnL","Qty","Margin","Notional","AvgOpen","MarkPrice","LiqPrice","liqPrice","TPSLPrice","SimpleSheet","LimitCloseBtn","sheetOpen","setSheetOpen","dialogOpen","setDialogOpen","quote_dp","onCloseDialog","slider","useMarkPricesStream","useRef","useLimitCloseBtnScript","updateQuantity","prices","curMarkPrice","base_dp","LimitCloseBtnWidget","MarketCloseBtn","useMarketCloseBtnScript","MarketCloseBtnWidget","TpSLBtn","PositionTPSLSheet","useTpSLBtnScript","TpSLBtnWidget","PositionCell","className","Header","Body","usePositionCellScript","PositionCellWidget","AuthGuardDataTable","Positions","pagination","column","MobilePositions","usePositionStream","useDataTap","usePagination","usePositionsBuilder","calcMode","includedPendingOrder","onSymbolChange","info","isLoading","PositionsWidget","MobilePositionsWidget","DataFilter","capitalizeFirstLetter","usePositionHistoryColumn","SymbolInfo","Quantity","NetPnL","tags","list","text","usePrivateQuery","AccountStatusEnum","useScreen","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","usePositionHistoryScript","netPnL","status","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","isMobile","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","MaxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","usePrivateInfiniteQuery","useLiquidationScript","page","pageSize","setPage","parsePagination","meta","useLiquidation","ordersResponse","generateKeyFun","args","pageIndex","previousPageData","size","end_t","start_t","search","LiquidationWidget","MobileLiquidationWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/positions/desktop/closeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n} from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";","import {\n Button,\n Popover,\n toast,\n Text,\n CloseIcon,\n Flex,\n Box,\n Divider,\n cn,\n NumeralProps,\n Badge,\n SimpleDialog,\n ThrottledButton,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n// import { useSymbolContext } from \"../providers/symbolProvider\";\nimport { FC, useMemo, useState } from \"react\";\nimport { OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { TokenIcon } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\n\nexport const CloseButton = () => {\n const [open, setOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n type,\n submitting,\n quoteDp,\n errors,\n } = usePositionsRowContext();\n\n const { base, quote } = useSymbolContext();\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n \n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n ).catch((error) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n });\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const disabled = useMemo(() => {\n if (type === OrderType.MARKET) {\n if (!quantity) {\n return true;\n }\n return false;\n }\n\n return !price || !quantity;\n }, [price, quantity, type]);\n\n return (\n <>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n disabled={disabled || submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n const quantityMsg = errors?.order_quantity?.message;\n const priceMsg = errors?.order_price?.message;\n if (quantityMsg || priceMsg) {\n toast.error(quantityMsg ?? priceMsg);\n return;\n }\n if (!orderConfirm) {\n onSubmit();\n return;\n }\n setOpen(true);\n }}\n >\n Close\n </Button>\n <SimpleDialog open={open} onOpenChange={setOpen} size=\"sm\">\n {type === OrderType.MARKET ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quoteDp}\n order={closeOrderData}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\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-pb-3 oui-border-b oui-border-line-4 oui-relative oui-w-full\">\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-text-base-contrast-54 hover:oui-text-base-contrast-80 oui-p-2\"\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}> = ({ onCancel, onConfirm, submitting }) => {\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={onCancel}\n size=\"md\"\n >\n Cancel\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={onConfirm}\n fullWidth\n loading={submitting}\n size=\"md\"\n >\n 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\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>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>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>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 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=\"Market Close\"\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {`You agree closing ${commifyOptional(props.quantity)} ${\n props.base\n } position at market price.`}\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, submitting } = props;\n\n const { side } = order;\n const onCancel = () => {\n props.onClose?.();\n };\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title=\"Limit Close\"\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-mt-5\">\n {`You agree closing ${commify(props.quantity)} ${\n props.base\n } position at limit price.`}\n </Text>\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 Limit\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? \"Buy\" : \"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 { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport {\n FC,\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport {\n useOrderEntry_deprecated,\n useSymbolsInfo,\n utils,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { commifyOptional } from \"@orderly.network/utils\";\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\n updateOrderType: (value: OrderType, price?: string) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: 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\nexport const PositionsRowProvider: FC<\n PropsWithChildren<{ position: API.PositionExt | API.PositionTPSLExt }>\n> = (props) => {\n const [quantity, setQuantity] = useState<string>(\n Math.abs(props.position.position_qty).toString()\n );\n\n useEffect(() => {\n setQuantity(Math.abs(props.position.position_qty).toString());\n }, [props.position.position_qty]);\n\n const [price, setPrice] = useState<string>(\"\");\n const [side, setSide] = useState<OrderSide>(\n props.position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY\n );\n\n const [errors, setErrors] = useState<any | undefined>(undefined);\n\n const [type, setType] = useState<OrderType>(OrderType.MARKET);\n\n const config = useSymbolsInfo();\n const symbol = props.position.symbol;\n const curSymbolInfo = config?.[symbol];\n const quoteDp = curSymbolInfo(\"quote_dp\");\n const baseDp = curSymbolInfo(\"base_dp\");\n const baseTick = curSymbolInfo(\"base_tick\");\n\n const { helper, onSubmit, submitting } = useOrderEntry_deprecated(\n props.position?.symbol!,\n side,\n true\n );\n\n const updateOrderType = (type: OrderType, price?: string) => {\n setType(type);\n if (type === OrderType.LIMIT) {\n if (!price) {\n throw new Error(\"price is required\");\n }\n setPrice(price);\n } else {\n setPrice(\"\");\n }\n };\n\n const closeOrderData = useMemo(() => {\n const { position } = props;\n\n if (!position) return null;\n\n const data: any = {\n // order_price: undefined,\n order_quantity: quantity,\n symbol: props.position.symbol,\n order_type: type,\n side,\n reduce_only: true,\n };\n\n if (type === OrderType.LIMIT) {\n data.order_price = price;\n }\n\n return data;\n }, [props.position, price, type, quantity]);\n\n const onUpdateQuantity = (value: string) => {\n const newValues = helper.calculate(\n {},\n \"order_quantity\",\n value\n ) as OrderEntity;\n setQuantity(newValues[\"order_quantity\"] as string);\n };\n\n const onUpdatePrice = (value: string) => {\n const newValues = helper.calculate({}, \"order_price\", value) as OrderEntity;\n setPrice(newValues[\"order_price\"] as string);\n };\n\n useEffect(() => {\n let order = closeOrderData;\n helper.validator(order).then((value: any) => {\n setErrors(value);\n });\n }, [closeOrderData]);\n\n const postOrder = () => {\n return onSubmit(closeOrderData)\n .catch((error) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n return Promise.resolve();\n })\n ;\n };\n\n return (\n <PositionsRowContext.Provider\n value={{\n quantity,\n price,\n type,\n side,\n position: props.position,\n updatePriceChange: onUpdatePrice,\n updateQuantity: onUpdateQuantity,\n updateOrderType,\n tpslOrder: (props.position as unknown as API.PositionTPSLExt)\n .algo_order,\n onSubmit: postOrder,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n }}\n >\n {props.children}\n </PositionsRowContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, createContext, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/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({} as SymbolContextState);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n\n return (\n <SymbolContext.Provider\n value={{\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 symbol: props.symbol,\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\")\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import { ListView } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsBuilderState } from \"./usePositionsBuilder.script\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { PositionsProps } from \"../../types/types\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionsRowProvider } from \"./desktop/positionRowContext\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\nexport const Positions = (props: PositionsBuilderState) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig, pagination } = props;\n const column = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: props.onSymbolChange,\n });\n\n // console.log(\"xxxx positions\", props);\n\n return (\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n columns={column}\n bordered\n dataSource={props.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 testIds={{\n body: \"oui-testid-dataList-position-tab-body\"\n }}\n />\n );\n};\n\nexport const MobilePositions = (\n props: PositionsBuilderState & PositionsProps\n) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n return (\n <ListView\n className=\"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={props.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={props.onSymbolChange}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n","import {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { CloseButton } from \"./closeButton\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n SharePnLBottomSheetId,\n SharePnLConfig,\n SharePnLDialogId,\n} from \"@orderly.network/ui-share\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { API } from \"@orderly.network/types\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { TPSLButton } from \"./components\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\n\nexport const useColumn = (props: {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n const column = useMemo(\n () =>\n [\n {\n title: \"Instrument\",\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\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-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\"\n )}\n />\n\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n props.onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: \"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: \"Avg. open\",\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string, record: any) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: \"Mark price\",\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n\n render: (value: string, record: any) => {\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-text-2xs oui-text-base-contrast-54 oui-p-3 oui-bg-base-8\"\n content={\n \"Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.\"\n }\n >\n <Text>Liq. price</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n // hint: \"Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.\",\n dataIndex: \"est_liq_price\",\n render: (value: string, record: any) => {\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>Unreal. PnL</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 150,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record: any) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.numeral\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n >\n {value}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n prefix=\"(\"\n suffix=\")\"\n >\n {record.unrealized_pnl_ROI}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={record}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: \"TP/SL\",\n dataIndex: \"__\",\n width: 150,\n render: (_: string, record) => (\n <TriggerPrice\n stopLossPrice={record.sl_trigger_price}\n takeProfitPrice={record.tp_trigger_price}\n />\n ),\n },\n\n {\n title: \"Notional\",\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.numeral dp={pnlNotionalDecimalPrecision}>\n {value}\n </Text.numeral>\n ),\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-text-2xs oui-text-base-contrast-54 oui-p-3 oui-bg-base-8\"\n content={\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-bg-base-8 oui-rounded-sm\"\n >\n <span>The minimum equity to keep your position. </span>\n <Divider className=\"oui-w-full\" />\n <span>Margin = Position size * Mark price * MMR</span>\n </Flex>\n }\n >\n <Text>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 // hint: (\n // <Flex\n // direction={\"column\"}\n // gap={3}\n // className=\"oui-text-base-contrast-54 oui-bg-base-8 oui-rounded-sm\"\n // >\n // <span>The minimum equity to keep your position. </span>\n // <Divider className=\"oui-w-full\" />\n // <span>Margin = Position size * Mark price * MMR</span>\n // </Flex>\n // ),\n },\n {\n title: \"Qty.\",\n dataIndex: \"close_qty\",\n width: 100,\n fixed: \"right\",\n render: renderQuantityInput,\n },\n {\n title: \"Price\",\n dataIndex: \"close_price\",\n width: 100,\n fixed: \"right\",\n render: renderPriceInput,\n // render: (value: string) => <PriceInput />,\n },\n {\n title: \"\",\n dataIndex: \"close_position\",\n align: \"right\",\n width: 160,\n fixed: \"right\",\n render: (value: string) => {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <CloseButton />\n <TPSLButton />\n </Flex>\n );\n },\n },\n ] as Column<API.PositionTPSLExt>[],\n [pnlNotionalDecimalPrecision, sharePnLConfig]\n );\n\n return column;\n};\n","import { Button, Text } from \"@orderly.network/ui\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport const renderQuantity = (value: number, record: any) => {\n\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral dp={symbolInfo.base_dp} rm={Decimal.ROUND_DOWN} padding={false} coloring>\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 {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { useState } from \"react\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType, position } =\n usePositionsRowContext();\n const [hasFocus, setHasFocus] = useState(false);\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={type === OrderType.LIMIT ? price : \"Market\"}\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={(e) => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT, `${position.mark_price}`);\n }\n setHasFocus(true);\n }}\n onBlur={(e) => {\n setTimeout(() => {\n setHasFocus(false);\n }, 100);\n\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-px-1 oui-h-full\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\"oui-outline-line-12 focus-within:oui-outline-primary-light\")\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={(vent) => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>Market</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import {\n PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n Flex,\n Text,\n Slider,\n Button,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { Input } from \"@orderly.network/ui\";\nimport { useEffect, useState } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { utils } from \"@orderly.network/hooks\";\n\nexport const QuantityInput = (props: { value: number }) => {\n // const [quantity, setQuantity] = useState(`${props.value}`);\n const [open, setOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState<number>(100);\n const {\n baseDp,\n quoteDp,\n updateQuantity: setQuantity,\n quantity,\n type,\n errors,\n baseTick,\n } = usePositionsRowContext();\n\n useEffect(() => {\n // when click the outside of the popover, close the popover\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (!target.closest(\"[data-popover-root]\")) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"click\", handleClick);\n\n return () => {\n document.removeEventListener(\"click\", handleClick);\n };\n }, []);\n\n const resetQuantity = (percent: number) => {\n onBlur(`${props.value * (percent / 100)}`);\n };\n\n const onBlur = (value: string) => {\n if (baseTick && baseTick > 0) {\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n setQuantity(formatQty);\n }\n };\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n onFocus={() => {\n setOpen(true);\n }}\n classNames={{\n root: \"oui-outline-line-12 \"\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n // tooltip={errors?.order_quantity?.message}\n // color={errors?.order_quantity?.message ? \"danger\" : undefined}\n value={quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n setQuantity(e);\n // if (type === OrderType.LIMIT) {\n if (e == '0' || e == \"\") {\n setSliderValue(0);\n return;\n }\n const value = new Decimal(e)\n .div(props.value)\n .mul(100)\n .abs()\n .toFixed(0, Decimal.ROUND_DOWN);\n // console.log(\"xxxxxx value\", value);\n\n setSliderValue(Math.min(100, Number(value)));\n // }\n }}\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-[30px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(e) => {\n const values = Array.from(e.values());\n setSliderValue(values[0]);\n resetQuantity(values[0]);\n }}\n />\n <Buttons\n onClick={(value) => {\n setSliderValue(value * 100);\n resetQuantity(value * 100);\n }}\n />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst Buttons = (props: { onClick: (value: number) => void }) => {\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: \"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 { FC } from \"react\";\nimport { Flex, modal, Text, ShareIcon } from \"@orderly.network/ui\";\nimport { SharePnLDialogId } from \"@orderly.network/ui-share\";\nimport { ShareButtonState } from \"./shareButton.script\";\nimport React from \"react\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n modal.show(props.modalId, {\n pnl: {\n position: props.position,\n refCode: props.refCode,\n leverage: props.leverage,\n ...props.sharePnLConfig\n\n },\n });\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig, SharePnLParams } from \"@orderly.network/ui-share\";\nimport { useMemo } from \"react\";\n\nexport const useShareButtonScript = (props: {\n position: any;\n sharePnLConfig?: SharePnLConfig &\n Partial<Omit<SharePnLParams, \"position\" | \"refCode\" | \"leverage\">>;\n modalId: string;\n iconSize?: number;\n}) => {\n const { sharePnLConfig, position, modalId, iconSize } = props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","import { PositionsProps } from \"../../../types/types\";\nimport { useShareButtonScript } from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\nimport { SharePnLConfig, SharePnLParams } from \"@orderly.network/ui-share\";\n\nexport const ShareButtonWidget = (props: {\n position: any;\n sharePnLConfig?: SharePnLConfig &\n Partial<Omit<PositionsProps, \"position\" | \"refCode\" | \"leverage\">>;\n modalId: string;\n iconSize?: number;\n}) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { AlgoOrderType, API, OrderSide } from \"@orderly.network/types\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\n\nexport const TriggerPrice: FC<{\n stopLossPrice?: number;\n takeProfitPrice?: number;\n}> = (props) => {\n const { stopLossPrice, takeProfitPrice } = props;\n const { tpslOrder, position } = usePositionsRowContext();\n\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\n tooltip\n />\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 = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\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={\n (<Text>{pnl === 0 ? \"\" : pnl > 0 ? \"+\" : \"-\"}</Text>)\n }\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\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}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n\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 <span>-</span>;\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}>\n TP - \n </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} >\n SL - \n </Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <Text>-</Text>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol]);\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 if (props.tooltip) {\n return <Tooltip content={pnl}>{content}</Tooltip>;\n }\n\n return content;\n};","import { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label=\"TP/SL\"\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { FC, useCallback } from \"react\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n\n return (\n <Flex direction={\"column\"} gap={3} className=\"oui-text-base-contrast-54 oui-items-start\">\n <Text>\n Current unrealized profit or loss on your open positions across all\n widgets calculated using Mark Price.\n </Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">Unrealized PnL Price Basis</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 // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={\"Mark price\"}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={\"Last price\"}\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 { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: FC<\n Omit<NumeralProps, \"precision\" | \"tick\"> & {\n tick?: TickName;\n }\n> = (props) => {\n const { tick = \"quote_dp\", ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n return <Text.numeral as=\"span\" {...rest} dp={symbolInfo[tick]} />;\n};\n","import { FC } from \"react\";\nimport { cn, Divider, Flex, Grid } from \"@orderly.network/ui\";\nimport { PositionCellState } from \"./positionCell.script\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n} from \"./items\";\nimport { LimitCloseBtnWidget } from \"../limitCloseBtn\";\nimport { MarketCloseBtnWidget } from \"../marketCloseBtn\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\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 {...rest} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...rest} />\n <TPSLPrice {...rest} />\n <Buttons {...rest} />\n </Flex>\n );\n};\n\nconst Header: FC<PositionCellState> = (props) => {\n return (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n};\n\nconst Body: FC<PositionCellState> = (props) => {\n return (\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\nconst Buttons: FC<PositionCellState> = (props) => {\n return (\n <Grid width={\"100%\"} gap={2} cols={3} rows={1}>\n <TpSLBtnWidget state={props} />\n <LimitCloseBtnWidget state={props} />\n <MarketCloseBtnWidget state={props} />\n </Grid>\n );\n};\n","import { Badge, cn, Flex, Statistic, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { PositionCellState } from \"./positionCell.script\";\nimport { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? \"Buy\" : \"Sell\"}\n </Badge>\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\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <Text intensity={36}>\n Unreal. PnL{<Text intensity={20}>(USDC)</Text>}\n </Text>\n <Text.numeral\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\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.numeral>\n }\n >\n {item.unrealized_pnl}\n </Text.numeral>\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\n return (\n <Statistic\n label={\"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\n return (\n <Statistic\n label={<Text>Margin{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n align=\"end\"\n label={<Text>Notional{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={\"Avg. open\"}\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\n return (\n <Statistic\n label={\"Mark price\"}\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\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={\"Liq. price\"}\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\n if (item.tp_trigger_price == null && item.sl_trigger_price == null)\n return <></>;\n\n return (\n <Flex className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Text>TP/SL: </Text>\n <Flex className=\"oui-gap-[2px]\">\n {item.tp_trigger_price && (\n <Text.numeral color=\"buy\">{item.tp_trigger_price}</Text.numeral>\n )}\n {item.sl_trigger_price && \"/\"}\n {item.sl_trigger_price && (\n <Text.numeral color=\"sell\">{item.sl_trigger_price}</Text.numeral>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Slider,\n Text,\n ThrottledButton,\n toast,\n} from \"@orderly.network/ui\";\nimport { LimitCloseBtnState } from \"./limitCloseBtn.script\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { LimitConfirmDialog } from \"../../desktop/closeButton\";\nimport { utils } from \"@orderly.network/hooks\";\n\nexport const LimitCloseBtn: FC<LimitCloseBtnState> = (props) => {\n const {\n item,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n updatePriceChange,\n base,\n quantity,\n price,\n onClose,\n onConfirm,\n submitting,\n quote_dp,\n closeOrderData,\n onCloseDialog,\n } = props;\n const isBuy = item.position_qty > 0;\n\n const onBlur = (value: string) => {\n if (props.baseTick && props.baseTick > 0) {\n const formatQty = utils.formatNumber(value, props.baseTick) ?? value;\n props.updateQuantity(formatQty);\n }\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={() => {\n updatePriceChange(\"limit\");\n setSheetOpen(true);\n }}\n >\n Limit Close\n </Button>\n\n {sheetOpen && (\n <SimpleSheet\n title={\"Limit close\"}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n >\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {item.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n Limit\n </Badge>\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n Buy\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n Sell\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>Last price</Text>\n <Text.numeral\n dp={(props.item as any)?.symbolInfo?.quote_dp}\n suffix={<Text intensity={36}>USDC</Text>}\n >\n {props.curMarkPrice}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix=\"Price\"\n suffix={props.quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={props.errors?.order_price?.message}\n color={\n props.errors?.order_price?.message ? \"danger\" : undefined\n }\n value={props.price}\n onValueChange={(e) => props.updatePriceChange(e)}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n props.errors?.order_price?.message\n ? \"oui-outline-danger\"\n : undefined\n ),\n }}\n />\n <Input\n prefix=\"Quantity\"\n suffix={props.base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n ]}\n // triggerClassName=\"oui-w-full\"\n // tooltip={props.errors?.order_quantity?.message}\n // color={\n // props.errors?.order_quantity?.message ? \"danger\" : undefined\n // }\n value={props.quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n props.updateQuantity(e);\n const slider = new Decimal(e)\n .div(props.item.position_qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n props.setSliderValue(slider);\n }}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n // props.errors?.order_quantity?.message\n // ? \"oui-outline-danger\"\n // : undefined\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue]}\n color=\"primary\"\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n const qty = new Decimal(e[0])\n .div(100)\n .mul(props.item.position_qty)\n .toFixed(props.base_dp, Decimal.ROUND_DOWN);\n // props.updateQuantity(qty);\n onBlur(qty);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text\n color=\"primary\"\n size=\"2xs\"\n >{`${props.sliderValue}%`}</Text>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primary\">\n Max\n </Text>\n <Text.numeral intensity={54} size=\"2xs\">\n {Math.abs(props.item.position_qty)}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n onClose();\n }}\n >\n Cancel\n </Button>\n <ThrottledButton\n fullWidth\n disabled={submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n const errors = props.errors;\n\n const quantityMsg = errors?.order_quantity?.message;\n const priceMsg = errors?.order_price?.message;\n if (quantityMsg || priceMsg) {\n toast.error(quantityMsg ?? priceMsg);\n return;\n }\n if (!props.orderConfirm) {\n onConfirm();\n return;\n }\n setDialogOpen(true);\n }}\n // disabled={Object.keys(props.errors ?? {}).length > 0}\n >\n Confirm\n </ThrottledButton>\n </Flex>\n </Flex>\n </SimpleSheet>\n )}\n\n {dialogOpen && (\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onCloseDialog}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quote_dp}\n order={closeOrderData}\n hideCloseIcon\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { useLocalStorage, useMarkPricesStream } from \"@orderly.network/hooks\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { toast } from \"@orderly.network/ui\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const useLimitCloseBtnScript = (props: { state: PositionCellState }) => {\n const { state } = props;\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n type,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n } = usePositionsRowContext();\n const setPrice = useRef(false);\n\n const [sliderValue, setSliderValue] = useState(100);\n\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n\n\n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n );\n };\n\n const onClose = () => {\n setSheetOpen(false);\n };\n const onCloseDialog = () => {\n setDialogOpen(false);\n };\n const prices = useMarkPricesStream();\n const curMarkPrice = useMemo(() => {\n return prices?.[\"data\"]?.[state.item.symbol] ?? \"--\";\n }, [prices]);\n\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n useEffect(() => {\n if (!setPrice.current && curMarkPrice && sheetOpen) {\n setPrice.current = true;\n updateOrderType(OrderType.LIMIT, `${curMarkPrice}`);\n }\n }, [setPrice, curMarkPrice, sheetOpen]);\n\n // clear state\n useEffect(() => {\n if (!sheetOpen) {\n updateOrderType(OrderType.MARKET);\n setPrice.current = false;\n // setSliderValue(100);\n }\n }, [sheetOpen]);\n\n return {\n ...state,\n sheetOpen,\n setSheetOpen,\n curMarkPrice,\n quote_dp,\n base_dp,\n base,\n quote,\n baseTick,\n\n orderConfirm,\n\n onClose,\n onConfirm,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateQuantity,\n errors,\n\n // slider\n sliderValue,\n setSliderValue,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n };\n};\n\nexport type LimitCloseBtnState = ReturnType<typeof useLimitCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useLimitCloseBtnScript } from \"./limitCloseBtn.script\";\nimport { LimitCloseBtn } from \"./limitCloseBtn.ui\";\n\nexport const LimitCloseBtnWidget = (props: {\n state: PositionCellState;\n}) => {\n const state = useLimitCloseBtnScript(props);\n return (<LimitCloseBtn {...state} />);\n};\n","import { FC } from \"react\";\nimport { Button, Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { MarketCloseBtnState } from \"./marketCloseBtn.script\";\nimport { MarketCloseConfirm } from \"../../desktop/closeButton\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const MarketCloseBtn: FC<MarketCloseBtnState> = (props) => {\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n disabled={props.submitting}\n loading={props.submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n props.updateOrderType(OrderType.MARKET);\n\n if (!props.orderConfirm) {\n props.onConfirm();\n return;\n }\n props.setDialogOpen(true);\n }}\n >\n Market Close\n </Button>\n <SimpleDialog open={props.dialogOpen} onOpenChange={props.setDialogOpen} size=\"xs\">\n <MarketCloseConfirm\n base={props.base}\n quantity={props.quantity}\n onClose={props.onClose}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n hideCloseIcon\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useState } from \"react\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\n\nexport const useMarketCloseBtnScript = (props: {\n state: PositionCellState;\n}) => {\n const symbolInfo = useSymbolContext();\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n type,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n } = usePositionsRowContext();\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n\n\n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setDialogOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n );\n };\n\n const onClose = () => {\n setDialogOpen(false);\n };\n\n return {\n ...props,\n ...symbolInfo,\n\n dialogOpen,\n setDialogOpen,\n\n orderConfirm,\n\n onSubmit,\n quantity,\n onClose,\n onConfirm,\n submitting,\n updateOrderType,\n updateQuantity,\n };\n};\n\nexport type MarketCloseBtnState = ReturnType<typeof useMarketCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useMarketCloseBtnScript } from \"./marketCloseBtn.script\";\nimport { MarketCloseBtn } from \"./marketCloseBtn.ui\";\n\nexport const MarketCloseBtnWidget = (props: { state: PositionCellState }) => {\n const state = useMarketCloseBtnScript(props);\n return <MarketCloseBtn {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button, Flex, Text, toast } from \"@orderly.network/ui\";\nimport { TpSLBtnState } from \"./tpSLBtn.script\";\n\nexport const TpSLBtn: FC<TpSLBtnState> = (props) => {\n // const { item } = props;\n //\n return (\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 props.openTP_SL();\n }}\n >\n TP/SL\n </Button>\n );\n};\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\n\nexport const useTpSLBtnScript = (props: { state: PositionCellState }) => {\n const symbolInfo: API.SymbolExt = useSymbolsInfo()[props.state.item.symbol]();\n\n const openTP_SL = () => {\n modal.sheet({\n title: \"TP/SL\",\n content: (\n <PositionTPSLSheet\n position={props.state.item}\n symbolInfo={symbolInfo}\n />\n ),\n });\n };\n\n return {\n openTP_SL,\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type TpSLBtnState = ReturnType<typeof useTpSLBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useTpSLBtnScript } from \"./tpSLBtn.script\";\nimport { TpSLBtn } from \"./tpSLBtn.ui\";\n\nexport const TpSLBtnWidget = (props: { state: PositionCellState }) => {\n const state = useTpSLBtnScript(props);\n return (<TpSLBtn {...state} />);\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\n\nexport const usePositionCellScript = (\n props: {\n item: API.PositionTPSLExt;\n index: number;\n } & PositionsProps\n) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n","import { FC } from \"react\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../types/types\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import { usePositionStream } from \"@orderly.network/hooks\";\nimport { PositionsProps } from \"../../types/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { usePagination } from \"@orderly.network/ui\";\n\nexport const usePositionsBuilder = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n } = props;\n // const [showAllSymbol] = useLocalStorage(\n // \"showAllSymbol\",\n // true\n // );\n const { pagination } = usePagination({\n pageSize: 50,\n });\n\n const [data, info, { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n const dataSource = useDataTap(data?.rows) ?? undefined;\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 };\n};\n\nexport type PositionsBuilderState = ReturnType<typeof usePositionsBuilder>;\n","import { PositionsProps } from \"../../types/types\";\nimport { MobilePositions, Positions } from \"./positions.ui\";\nimport { usePositionsBuilder } from \"./usePositionsBuilder.script\";\n\nexport const PositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder(props);\n return <Positions {...state} />;\n};\n\nexport const MobilePositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder(props);\n return <MobilePositions {...state} />;\n};\n","import { FC } from \"react\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n PositionHistoryExt,\n PositionHistoryState,\n} from \"./positionHistory.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { usePositionHistoryColumn } from \"./desktop/usePositionHistoryColumn\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { PositionHistoryCellWidget } from \"./mobile\";\n\nexport const PositionHistory: FC<PositionHistoryState> = (props) => {\n const { onSymbolChange, pagination } = props;\n const column = usePositionHistoryColumn({\n onSymbolChange,\n });\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 className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\">\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={props.filterDays !== value ? \"oui-text-base-contrast-54\": \"\"}\n >\n {`${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-gradient-primary oui-opacity-[.12] oui-absolute oui-left-0 oui-right-0 oui-top-0 oui-bottom-0 oui-rounded\"\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 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?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-grid-rows-[auto,1fr] oui-w-full\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-bg-base-9 oui-rounded-b-xl\">\n <DataFilter\n className=\"oui-pt-0 oui-pb-0 oui-border-none\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\",\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 />\n </SymbolProvider>\n )}\n />\n </Grid>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n capitalizeFirstLetter,\n cn,\n Column,\n Flex,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { onSymbolChange } = props;\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: \"Instrument\",\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\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: \"Closed / Max closed\",\n dataIndex: \"close_maxClose\",\n width: 175,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: \"Net PnL\",\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) => <NetPnL record={record} />,\n },\n // avg open\n {\n title: \"Avg. open\",\n dataIndex: \"avg_open\",\n width: 140,\n render: (_: any, record) => (\n <Text.numeral>{record.avg_open_price}</Text.numeral>\n ),\n },\n // avg close\n {\n title: \"Avg. close\",\n dataIndex: \"avg_close\",\n width: 175,\n render: (_: any, record) => (\n <Text.numeral>{record.avg_close_price}</Text.numeral>\n ),\n },\n // time opened\n {\n title: \"Time opened\",\n dataIndex: \"open_timestamp\",\n width: 175, 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: \"Time closed\",\n dataIndex: \"close_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.position_status == \"closed\"\n ? record.close_timestamp\n : \"--\"}\n </Text.formatted>\n ),\n },\n // updated time\n {\n title: \"Updated time\",\n dataIndex: \"last_update_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.last_update_time}\n </Text.formatted>\n ),\n },\n ] as Column<PositionHistoryExt>[],\n []\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\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n list.push(\n <Badge\n color={record.position_status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {capitalizeFirstLetter(record.position_status)}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n <Badge color={\"neutral\"} size=\"xs\">\n {capitalizeFirstLetter(record.type)}\n </Badge>;\n } else if (record.type === \"liquidated\") {\n list.push(\n <Tooltip\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n tooltipProps={{\n arrow: {\n className: \"oui-fill-base-5\",\n },\n }}\n // @ts-ignore\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Liquidation id</Text>\n <Text.numeral intensity={98}>\n {record.liquidation_id}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Liquidator fee</Text>\n <Text.numeral coloring>{record.liquidator_fee}</Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Ins. Fund fee</Text>\n <Text.numeral coloring>\n {record.insurance_fund_fee}\n </Text.numeral>\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-[1px]\">\n {capitalizeFirstLetter(record.type)}\n </span>\n </Badge>\n </div>\n </Tooltip>\n );\n }\n\n return list;\n }, [record]);\n\n return (\n <Flex gap={2} height={48}>\n <Box\n width={4}\n height={20}\n className={cn(\n \"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 className=\"oui-overflow-hidden oui-whitespace-nowrap oui-text-ellipsis\"\n >\n <Text.numeral dp={base_dp}>{record.closed_position_qty}</Text.numeral>/\n <Text.numeral dp={base_dp} className=\"oui-truncate\">\n {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: { record: PositionHistoryExt }) => {\n const { record } = props;\n\n const text = () => (\n <Text.numeral\n coloring\n className={record.netPnL == null ? \"\" : \"oui-cursor-pointer\"}\n >\n {record.netPnL ?? \"--\"}\n </Text.numeral>\n );\n\n if (record.netPnL == null) return text();\n\n return (\n <Flex>\n <Tooltip\n // open={record.max_position_qty == 3.22}\n delayDuration={200}\n // @ts-ignore\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n <Text intensity={80}>Net PnL</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Realized PnL</Text>\n <Text.numeral coloring>{record.realized_pnl}</Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Funding fee</Text>\n <Text.numeral coloring>\n {record.accumulated_funding_fee}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Trading fee</Text>\n <Text.numeral coloring>{record.trading_fee}</Text.numeral>\n </Flex>\n </Flex>\n }\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n tooltipProps={{\n arrow: {\n className: \"oui-fill-base-5\",\n },\n }}\n >\n <div>{text()}</div>\n </Tooltip>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Divider, Flex, Grid, modal, Text } from \"@orderly.network/ui\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\nimport {\n PositionHistoryType,\n ClosedQty,\n SymbolToken,\n OpenTime,\n AvgOpen,\n AvgClosed,\n ClosedTime,\n MaxClosedQty,\n} from \"./items\";\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 showAlert = () => {\n const { item: record } = props;\n modal.alert({\n title: \"Net PnL\",\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}>Realized PnL</Text>\n <Text.numeral coloring>{record.realized_pnl}</Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Funding fee</Text>\n <Text.numeral coloring>\n {record.accumulated_funding_fee}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Trading fee</Text>\n <Text.numeral coloring>{record.trading_fee}</Text.numeral>\n </Flex>\n </Flex>\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 Net PnL\n </Text>\n <button onClick={showAlert}>\n <Text.numeral size=\"xs\" coloring>\n {props.item.netPnL ?? \"--\"}\n </Text.numeral>\n </button>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<PositionHistoryCellState> = (props) => {\n return (\n <Grid cols={3} rows={2} width={\"100%\"} gap={1}>\n <ClosedQty {...props} />\n <MaxClosedQty {...props} />\n <OpenTime {...props} />\n <AvgOpen {...props} />\n <AvgClosed {...props} />\n <ClosedTime {...props} />\n </Grid>\n );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport {\n PositionHistoryExt,\n PositionHistorySide,\n} from \"../positionHistory.script\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n capitalizeFirstLetter,\n Flex,\n modal,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\nimport { PositionsRowContextState } from \"../../positions/desktop/positionRowContext\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const isBuy = side === PositionHistorySide.buy;\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 ? \"Buy\" : \"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\n const showAlert = () => {\n modal.alert({\n title: \"Liquidation\",\n message: (\n <Flex direction={\"column\"} width={\"100%\"} gap={2} className=\"oui-text-2xs oui-text-base-contrast-54\">\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>Liquidation id</Text>\n <Text.numeral intensity={98}>{record.liquidation_id}</Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>Liquidator fee</Text>\n <Text.numeral coloring>{record.liquidator_fee}</Text.numeral>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>Ins. Fund fee</Text>\n <Text.numeral coloring>{record.insurance_fund_fee}</Text.numeral>\n </Flex>\n </Flex>\n ),\n });\n };\n\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n list.push(\n <Badge\n color={record.position_status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {capitalizeFirstLetter(record.position_status)}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n <Badge color={\"neutral\"} size=\"xs\">\n {capitalizeFirstLetter(record.type)}\n </Badge>;\n } else if (record.type === \"liquidated\") {\n list.push(\n <Badge size=\"xs\" color=\"danger\" className=\"oui-cursor-pointer\" onClick={showAlert}>\n <span className=\"oui-underline oui-decoration-dashed oui-decoration-[1px]\">\n {capitalizeFirstLetter(record.type)}\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\n return (\n <Statistic\n label={\"Closed\"}\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 {item.closed_position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MaxClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={\"Max closed\"}\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 {item.max_position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={<Text>Avg. open{<Text intensity={20}>(USDC)</Text>}</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 {item.avg_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgClosed: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={<Text>Avg. closed{<Text intensity={20}>(USDC)</Text>}</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 {item.avg_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OpenTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={\"Time opened\"}\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\n return (\n <Statistic\n label={\"Time closed\"}\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.position_status === 'closed' ? item.close_timestamp : \"--\"}\n </Text.formatted>\n </Statistic>\n );\n};\n","import { usePrivateQuery, useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { PositionHistoryProps } from \"./positionHistory.widget\";\nimport { API } from \"@orderly.network/types\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { useMemo, useState } from \"react\";\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\nimport { formatDatePickerRange, offsetEndOfDay, offsetStartOfDay } from \"../../utils\";\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 { onSymbolChange, symbol } = props;\n const { data, isLoading } = usePrivateQuery<PositionHistoryExt[]>(\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 &&\n item.accumulated_funding_fee &&\n item.trading_fee\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 }\n );\n\n const { pagination } = 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 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 dataSource = useDataTap(filterData, {\n accountStatus: AccountStatusEnum.EnableTrading,\n });\n\n return {\n dataSource,\n isLoading,\n onSymbolChange,\n pagination,\n filterItems,\n onFilter,\n symbol,\n filterDays,\n updateFilterDays,\n };\n};\n\nconst useFilter = () => {\n const [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all\n );\n\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetEndOfDay(subDays(new Date(), 90)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90>(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 {\n const diffDays = Math.abs(differenceInDays(newDateRange.from, newDateRange.to)) + 1; \n if ([1,7,30,90].includes(diffDays)) {\n setFilterDays(diffDays as any);\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: \"All sides\",\n value: \"all\",\n },\n {\n label: \"Buy\",\n value: PositionHistorySide.buy,\n },\n {\n label: \"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 };\n\n const statusFilter = {\n type: \"select\",\n name: \"status\",\n options: [\n {\n label: \"All status\",\n value: \"all\",\n },\n {\n label: \"Closed\",\n value: PositionHistoryStatus.closed,\n },\n {\n label: \"Partial closed\",\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","\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\n\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 \n export 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 \n export 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 \n export const formatDatePickerRange = (option: { from?: Date; to?: Date }) => ({\n from: offsetStartOfDay(option.from),\n to: offsetEndOfDay(option.to ?? option.from),\n });\n ","import { API } from \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { SymbolInfo } from \"../desktop/usePositionHistoryColumn\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\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 \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\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};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return <MobilePositionHistory {...state} classNames={classNames} />;\n};\n","import { FC } from \"react\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { API } from \"@orderly.network/types\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { LiquidationCellWidget } from \"./mobile\";\n\nexport const Liquidation: FC<LiquidationState> = (props) => {\n const column = useLiquidationColumn({});\n\n console.log(\"props\", props);\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 className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\">\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-gradient-primary oui-opacity-[.12] oui-absolute oui-left-0 oui-right-0 oui-top-0 oui-bottom-0 oui-rounded\"\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 />\n </Flex>\n );\n};\n\nexport const MobileLiquidation: FC<\n LiquidationState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-grid-rows-[auto,1fr] oui-w-full\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-bg-base-9 oui-rounded-b-xl\">\n <DataFilter\n className=\"oui-pt-0 oui-pb-0 oui-border-none\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\",\n props.classNames?.root\n )}\n contentClassName={cn(\"!oui-space-y-1\", props.classNames?.content)}\n dataSource={props.dataSource}\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 { API } from \"@orderly.network/types\";\nimport {\n Column,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const {} = props;\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: \"Time\",\n dataIndex: \"timestamp\",\n fixed: \"left\",\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: \"Liquidation id\",\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => (<Text>{value}</Text>)\n },\n // net pnl\n {\n title: \"Ins. fund transfer\",\n dataIndex: \"transfer_amount_to_insurance_fund\",\n width: 202,\n },\n // Instrument\n {\n title: \"Instrument \",\n dataIndex: \"Instrument\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text>{item.symbol}</Text>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: \"Price (USDC)\",\n dataIndex: \"Price_(USDC)\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text>{item.transfer_price}</Text>\n ))}\n </Flex>\n ),\n },\n // Quantity\n {\n title: \"Quantity\",\n dataIndex: \"Quantity\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text>{item.position_qty}</Text>\n ))}\n </Flex>\n ),\n },\n // Liquidation Fee\n {\n title: \"Liquidation Fee\",\n dataIndex: \"Liquidation_Fee\",\n width: 202,\n render: (_: any, record) => (\n <Flex direction={\"column\"} itemAlign={\"start\"}>\n {record.positions_by_perp?.map((item) => (\n <Text>{item.liquidator_fee}</Text>\n ))}\n </Flex>\n ),\n },\n ] as Column<API.Liquidation>[],\n []\n );\n\n return column;\n};\n","import { FC } from \"react\";\nimport { cn, Divider, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\nimport { LiquidationFee, Price, Quantity } from \"./items\";\nimport { API } from \"@orderly.network/types\";\nimport { SymbolProvider } from \"../../../providers/symbolProvider\";\n\nexport const LiquidationCell: FC<\n LiquidationCellState & {\n classNames?: {\n root?: string;\n };\n }\n> = (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 <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\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 <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule={\"date\"}\n formatString=\"yyyy-MM-dd hh:mm:ss\"\n >\n {props.item.timestamp}\n </Text.formatted>\n <Flex>\n <Text size=\"2xs\" intensity={36}>\n liquidation_id:\n </Text>\n <Text\n size=\"2xs\"\n intensity={80}\n >{` ${props.item.liquidation_id}`}</Text>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n Ins. Fund Transfer:\n </Text>\n <Text.numeral intensity={80} size=\"xs\">\n {props.item.transfer_amount_to_insurance_fund}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n return (\n <Flex direction={\"column\"} width={\"100%\"}>\n {props.item.positions_by_perp?.map((item, index) => {\n return (\n <SymbolProvider symbol={item.symbol}>\n <Cell isLast={index === props.item.positions_by_perp.length-1} {...item} />\n </SymbolProvider>\n );\n })}\n </Flex>\n );\n};\n\nconst Cell: FC<API.LiquidationPositionByPerp & {\n isLast: boolean;\n}> = (props) => {\n return (\n <Flex\n width={\"100%\"}\n itemAlign={\"start\"}\n className={cn(\"oui-border-t-[1px] oui-border-line-6 oui-pt-2\", !props.isLast && \"oui-pb-2\")}\n >\n <Text size=\"xs\" intensity={80} className=\"oui-flex-1\">\n {props.symbol}\n </Text>\n <Grid cols={1} rows={3} width={\"100%\"} gap={1} className=\"oui-flex-1\">\n <Price {...props} />\n <Quantity {...props} />\n <LiquidationFee {...props} />\n </Grid>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport React from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport {\n SymbolContextState,\n useSymbolContext,\n} from \"../../../providers/symbolProvider\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n const { quote_dp } = useSymbolContext();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Avg. open{<Text intensity={20}>(USDC)</Text>}\n </Text>\n <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.transfer_price}\n </Text.numeral>\n </Flex>\n );\n};\nexport const Quantity: FC<API.LiquidationPositionByPerp> = (props) => {\n const { quote_dp } = useSymbolContext();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Quantity\n </Text>\n <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.position_qty}\n </Text.numeral>\n </Flex>\n );\n};\nexport const LiquidationFee: FC<API.LiquidationPositionByPerp> = (props) => {\n const { quote_dp } = useSymbolContext();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Liquidation fee\n </Text>\n <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.abs_liquidator_fee}\n </Text.numeral>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n\n return {\n ...props\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@orderly.network/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 {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { API } from \"@orderly.network/types\";\nimport { useMemo, useState } from \"react\";\nimport {\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { LiquidationProps } from \"./liquidation.widget\";\n\nexport const useLiquidationScript = (props: LiquidationProps) => {\n const { symbol } = 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 const [data, { meta, isLoading }] = useLiquidation({\n 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\n const loadMore = () => {\n setPage((page) => page + 1);\n };\n\n return {\n dataSource,\n isLoading,\n loadMore,\n\n pagination,\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<API.Liquidation>(\n generateKeyFun(props),\n {\n initialSize: 1,\n formatter: (data) => data,\n }\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?.map((item: any) => item.rows)?.flat();\n }, [ordersResponse.data]);\n\n const isLoading = ordersResponse.isLoading;\n\n return [data, { meta, isLoading }] as const;\n};\n\nconst useFilter = () => {\n const defaultRange = formatDatePickerRange({\n to: offsetEndOfDay(new Date()),\n from: offsetEndOfDay(subDays(new Date(), 90)),\n });\n\n /// default is 90d\n const [filterDays, setFilterDays] = useState<1 | 7 | 30 | 90>(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 if ([1, 7, 30, 90].includes(diffDays)) {\n setFilterDays(diffDays as any);\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 };\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 (status) {\n search.set(`status`, status);\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 { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n}\n\nexport const LiquidationWidget = (props: LiquidationProps) => {\n const state = useLiquidationScript(props);\n return (<Liquidation {...state} />);\n};\n\nexport const MobileLiquidationWidget = (props: LiquidationProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }) => {\n\n const { classNames, ...rest} = props;\n const state = useLiquidationScript(rest);\n return (<MobileLiquidation classNames={classNames} {...state} />);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/positions/desktop/closeButton.tsx","../src/components/positions/desktop/positionRowContext.tsx","../src/providers/symbolProvider.tsx","../src/components/positions/positions.ui.tsx","../src/components/positions/desktop/useColumn.tsx","../src/components/positions/desktop/listElement.tsx","../src/components/positions/desktop/priceInput.tsx","../src/components/positions/desktop/quantityInput.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/components.tsx","../src/components/positions/desktop/unrealPnLHover.tsx","../src/components/positions/desktop/numeralWithCtx.tsx","../src/components/positions/mobile/positionCell/positionCell.ui.tsx","../src/components/positions/mobile/positionCell/items.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.ui.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.script.tsx","../src/components/positions/mobile/limitCloseBtn/limitCloseBtn.widget.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.ui.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.script.tsx","../src/components/positions/mobile/marketCloseBtn/marketCloseBtn.widget.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.ui.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.script.tsx","../src/components/positions/mobile/tpSLBtn/tpSLBtn.widget.tsx","../src/components/positions/mobile/positionCell/positionCell.script.tsx","../src/components/positions/mobile/positionCell/positionCell.widget.tsx","../src/components/positions/usePositionsBuilder.script.ts","../src/components/positions/positions.widget.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/items.tsx","../src/components/liquidation/mobile/liquidationCell.script.tsx","../src/components/liquidation/mobile/liquidationCell.widget.tsx","../src/components/liquidation/liquidation.script.tsx","../src/components/liquidation/liquidation.widget.tsx"],"names":["registerSimpleDialog","Button","toast","Text","CloseIcon","Flex","Divider","Badge","SimpleDialog","ThrottledButton","OrderSide","OrderType","createContext","useContext","useEffect","useMemo","useState","useOrderEntry_deprecated","useSymbolsInfo","jsx","PositionsRowContext","usePositionsRowContext","PositionsRowProvider","props","quantity","setQuantity","price","setPrice","side","setSide","errors","setErrors","type","setType","config","symbol","curSymbolInfo","quoteDp","baseDp","baseTick","helper","onSubmit","submitting","updateOrderType","closeOrderData","position","data","onUpdateQuantity","value","newValues","onUpdatePrice","order","postOrder","error","commify","commifyOptional","Decimal","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","useLocalStorage","Fragment","jsxs","CloseButton","open","setOpen","base","quote","orderConfirm","onConfirm","res","onClose","disabled","e","quantityMsg","priceMsg","MarketCloseConfirm","LimitConfirmDialog","ConfirmHeader","hideCloseIcon","ConfirmFooter","onCancel","OrderDetail","total","ListView","Box","cn","HoverCard","Tooltip","CaretDownIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","Input","inputFormatter","PriceInput","updatePriceChange","hasFocus","setHasFocus","vent","PopoverRoot","PopoverContent","PopoverTrigger","Slider","utils","QuantityInput","sliderValue","setSliderValue","handleClick","event","resetQuantity","percent","onBlur","formatQty","values","Buttons","item","index","renderQuantity","record","renderQuantityInput","renderPriceInput","SharePnLDialogId","modal","ShareIcon","ShareButton","useReferralInfo","useSymbolLeverage","useShareButtonScript","sharePnLConfig","modalId","iconSize","getFirstRefCode","refCode","leverage","ShareButtonWidget","state","AlgoOrderType","PositionTPSLPopover","EditIcon","TPSLButton","tpslOrder","TPSLEditIcon","TriggerPrice","stopLossPrice","takeProfitPrice","TPSLTriggerPrice","TriggerPriceItem","qty","entryPrice","orderSide","orderType","pnl","direction","msgs","child","children","content","showIcon","UnrealizedPnLPopoverCard","unPnlPriceBasis","setUnPnlPriceBasic","UnPnlPriceBasisCheckBox","onValueChange","RadioButton","sel","label","onCheckChange","SelIcon","UnselIcon","NumeralWithCtx","tick","rest","useColumn","pnlNotionalDecimalPrecision","r1","r2","a","b","_","Grid","Statistic","SharePnLBottomSheetId","SymbolToken","isBuy","UnrealPnL","Qty","Margin","Notional","AvgOpen","MarkPrice","LiqPrice","liqPrice","TPSLPrice","SimpleSheet","LimitCloseBtn","sheetOpen","setSheetOpen","dialogOpen","setDialogOpen","quote_dp","onCloseDialog","slider","useMarkPricesStream","useRef","useLimitCloseBtnScript","updateQuantity","prices","curMarkPrice","base_dp","LimitCloseBtnWidget","MarketCloseBtn","useMarketCloseBtnScript","MarketCloseBtnWidget","TpSLBtn","PositionTPSLSheet","useTpSLBtnScript","TpSLBtnWidget","PositionCell","className","Header","Body","usePositionCellScript","PositionCellWidget","AuthGuardDataTable","Positions","pagination","column","MobilePositions","usePositionStream","useDataTap","usePagination","usePositionsBuilder","calcMode","includedPendingOrder","onSymbolChange","setPage","info","isLoading","PositionsWidget","MobilePositionsWidget","DataFilter","capitalizeFirstLetter","usePositionHistoryColumn","SymbolInfo","Quantity","NetPnL","avgOpen","avgClose","tags","list","netPnl","text","usePrivateQuery","AccountStatusEnum","useScreen","differenceInDays","subDays","setHours","offsetStartOfDay","date","newDate","offsetEndOfDay","formatDatePickerRange","option","areDatesEqual","date1","date2","usePositionHistoryScript","netPnL","status","dateRange","filterDays","updateFilterDays","filterItems","onFilter","useFilter","filterData","sideFilter","statusFilter","time","dateFilter","symbolFilter","setStatus","defaultRange","setFilterDays","setDateRange","days","filter","newDateRange","diffDays","isMobile","dateRangeFilter","PositionHistoryType","showAlert","ClosedQty","MaxClosedQty","AvgClosed","OpenTime","ClosedTime","PositionHistoryCell","usePositionHistoryCellScript","PositionHistoryCellWidget","PositionHistory","MobilePositionHistory","PositionHistoryWidget","MobilePositionHistoryWidget","classNames","useLiquidationColumn","FormattedText","abs_liquidation_fee","Price","LiquidationFee","LiquidationCell","Cell","useLiquidationCellScript","LiquidationCellWidget","Liquidation","MobileLiquidation","usePrivateInfiniteQuery","useLiquidationScript","enableLoadMore","page","pageSize","parsePagination","meta","loadMore","useLiquidation","ordersResponse","generateKeyFun","args","pageIndex","previousPageData","size","end_t","start_t","search","LiquidationWidget","MobileLiquidationWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/positions/desktop/closeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n} from \"./components/positions/positions.widget\";\n\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n\n\nexport * from \"./components/positionHistory\";\nexport * from \"./components/liquidation\";","import {\n Button,\n Popover,\n toast,\n Text,\n CloseIcon,\n Flex,\n Box,\n Divider,\n cn,\n NumeralProps,\n Badge,\n SimpleDialog,\n ThrottledButton,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\n// import { useSymbolContext } from \"../providers/symbolProvider\";\nimport { FC, useMemo, useState } from \"react\";\nimport { OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { commify, commifyOptional, Decimal } from \"@orderly.network/utils\";\nimport { TokenIcon } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\n\nexport const CloseButton = () => {\n const [open, setOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n type,\n submitting,\n quoteDp,\n errors,\n } = usePositionsRowContext();\n\n const { base, quote } = useSymbolContext();\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n \n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n ).catch((error) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n });\n };\n\n const onClose = () => {\n setOpen(false);\n };\n\n const disabled = useMemo(() => {\n if (type === OrderType.MARKET) {\n if (!quantity) {\n return true;\n }\n return false;\n }\n\n return !price || !quantity;\n }, [price, quantity, type]);\n\n return (\n <>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n disabled={disabled || submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n const quantityMsg = errors?.order_quantity?.message;\n const priceMsg = errors?.order_price?.message;\n if (quantityMsg || priceMsg) {\n toast.error(quantityMsg ?? priceMsg);\n return;\n }\n if (!orderConfirm) {\n onSubmit();\n return;\n }\n setOpen(true);\n }}\n >\n Close\n </Button>\n <SimpleDialog open={open} onOpenChange={setOpen} size=\"sm\">\n {type === OrderType.MARKET ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n classNames={{\n root: \"oui-items-start\",\n }}\n hideCloseIcon\n />\n ) : (\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quoteDp}\n order={closeOrderData}\n hideCloseIcon\n />\n )}\n </SimpleDialog>\n </>\n );\n};\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-pb-3 oui-border-b oui-border-line-4 oui-relative oui-w-full\">\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-text-base-contrast-54 hover:oui-text-base-contrast-80 oui-p-2\"\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}> = ({ onCancel, onConfirm, submitting }) => {\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={onCancel}\n size=\"md\"\n >\n Cancel\n </Button>\n <ThrottledButton\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={onConfirm}\n fullWidth\n loading={submitting}\n size=\"md\"\n >\n 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\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>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>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>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 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=\"Market Close\"\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-my-5\">\n {`You agree closing ${commifyOptional(props.quantity)} ${\n props.base\n } position at market price.`}\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, submitting } = props;\n\n const { side } = order;\n const onCancel = () => {\n props.onClose?.();\n };\n return (\n <>\n <ConfirmHeader\n onClose={onCancel}\n title=\"Limit Close\"\n hideCloseIcon={props.hideCloseIcon}\n />\n <Text intensity={54} size=\"sm\" className=\"oui-mt-5\">\n {`You agree closing ${commify(props.quantity)} ${\n props.base\n } position at limit price.`}\n </Text>\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 Limit\n </Badge>\n <Badge\n color={side === OrderSide.BUY ? \"success\" : \"danger\"}\n size=\"xs\"\n >\n {side === OrderSide.BUY ? \"Buy\" : \"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 { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport {\n FC,\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport {\n useOrderEntry_deprecated,\n useSymbolsInfo,\n utils,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { commifyOptional } from \"@orderly.network/utils\";\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\n updateOrderType: (value: OrderType, price?: string) => void;\n\n closeOrderData: any;\n\n onSubmit: () => Promise<any>;\n submitting: boolean;\n tpslOrder?: 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\nexport const PositionsRowProvider: FC<\n PropsWithChildren<{ position: API.PositionExt | API.PositionTPSLExt }>\n> = (props) => {\n const [quantity, setQuantity] = useState<string>(\n Math.abs(props.position.position_qty).toString()\n );\n\n useEffect(() => {\n setQuantity(Math.abs(props.position.position_qty).toString());\n }, [props.position.position_qty]);\n\n const [price, setPrice] = useState<string>(\"\");\n const [side, setSide] = useState<OrderSide>(\n props.position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY\n );\n\n const [errors, setErrors] = useState<any | undefined>(undefined);\n\n const [type, setType] = useState<OrderType>(OrderType.MARKET);\n\n const config = useSymbolsInfo();\n const symbol = props.position.symbol;\n const curSymbolInfo = config?.[symbol];\n const quoteDp = curSymbolInfo(\"quote_dp\");\n const baseDp = curSymbolInfo(\"base_dp\");\n const baseTick = curSymbolInfo(\"base_tick\");\n\n const { helper, onSubmit, submitting } = useOrderEntry_deprecated(\n props.position?.symbol!,\n side,\n true\n );\n\n const updateOrderType = (type: OrderType, price?: string) => {\n setType(type);\n if (type === OrderType.LIMIT) {\n if (!price) {\n throw new Error(\"price is required\");\n }\n setPrice(price);\n } else {\n setPrice(\"\");\n }\n };\n\n const closeOrderData = useMemo(() => {\n const { position } = props;\n\n if (!position) return null;\n\n const data: any = {\n // order_price: undefined,\n order_quantity: quantity,\n symbol: props.position.symbol,\n order_type: type,\n side,\n reduce_only: true,\n };\n\n if (type === OrderType.LIMIT) {\n data.order_price = price;\n }\n\n return data;\n }, [props.position, price, type, quantity]);\n\n const onUpdateQuantity = (value: string) => {\n const newValues = helper.calculate(\n {},\n \"order_quantity\",\n value\n ) as OrderEntity;\n setQuantity(newValues[\"order_quantity\"] as string);\n };\n\n const onUpdatePrice = (value: string) => {\n const newValues = helper.calculate({}, \"order_price\", value) as OrderEntity;\n setPrice(newValues[\"order_price\"] as string);\n };\n\n useEffect(() => {\n let order = closeOrderData;\n helper.validator(order).then((value: any) => {\n setErrors(value);\n });\n }, [closeOrderData]);\n\n const postOrder = () => {\n return onSubmit(closeOrderData)\n .catch((error) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n return Promise.resolve();\n })\n ;\n };\n\n return (\n <PositionsRowContext.Provider\n value={{\n quantity,\n price,\n type,\n side,\n position: props.position,\n updatePriceChange: onUpdatePrice,\n updateQuantity: onUpdateQuantity,\n updateOrderType,\n tpslOrder: (props.position as unknown as API.PositionTPSLExt)\n .algo_order,\n onSubmit: postOrder,\n submitting,\n closeOrderData,\n quoteDp,\n baseDp,\n baseTick,\n errors,\n }}\n >\n {props.children}\n </PositionsRowContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, createContext, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/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({} as SymbolContextState);\n\nexport const useSymbolContext = () => {\n return useContext(SymbolContext);\n};\n\ninterface FormatterProviderProps {\n symbol: string;\n}\n\nexport const SymbolProvider: FC<PropsWithChildren<FormatterProviderProps>> = (\n props\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n\n return (\n <SymbolContext.Provider\n value={{\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 symbol: props.symbol,\n origin: symbolInfo(),\n quote_max: symbolInfo(\"quote_max\"),\n quote_min: symbolInfo(\"quote_min\")\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import { ListView } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsBuilderState } from \"./usePositionsBuilder.script\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { PositionsProps } from \"../../types/types\";\nimport { useColumn } from \"./desktop/useColumn\";\nimport { PositionsRowProvider } from \"./desktop/positionRowContext\";\nimport { PositionCellWidget } from \"./mobile/positionCell\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\n\nexport const Positions = (props: PositionsBuilderState) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig, pagination } = props;\n const column = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange: props.onSymbolChange,\n });\n\n // console.log(\"xxxx positions\", props);\n\n return (\n <AuthGuardDataTable<API.PositionTPSLExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n columns={column}\n bordered\n dataSource={props.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 testIds={{\n body: \"oui-testid-dataList-position-tab-body\"\n }}\n />\n );\n};\n\nexport const MobilePositions = (\n props: PositionsBuilderState & PositionsProps\n) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n return (\n <ListView\n className=\"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\"\n contentClassName=\"!oui-space-y-1\"\n dataSource={props.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={props.onSymbolChange}\n />\n </PositionsRowProvider>\n </SymbolProvider>\n )}\n />\n );\n};\n","import {\n Box,\n cn,\n Divider,\n Flex,\n HoverCard,\n Column,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { CloseButton } from \"./closeButton\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n SharePnLConfig,\n SharePnLDialogId,\n} from \"@orderly.network/ui-share\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { API } from \"@orderly.network/types\";\nimport { TriggerPrice } from \"./triggerPrice\";\nimport { TPSLButton } from \"./components\";\nimport { UnrealizedPnLPopoverCard } from \"./unrealPnLHover\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\n\nexport const useColumn = (props: {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n onSymbolChange?: (symbol: API.Symbol) => void;\n}) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n const column = useMemo(\n () =>\n [\n {\n title: \"Symbol\",\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 140,\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-rounded-[1px]\",\n record.position_qty > 0\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\"\n )}\n />\n\n <Text.formatted\n // rule={\"symbol\"}\n formatString=\"base-type\"\n className=\"oui-cursor-pointer\"\n onClick={(e) => {\n props.onSymbolChange?.({ symbol: value } as API.Symbol);\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {`${value.split(\"_\")[1]}-PERP`}\n </Text.formatted>\n </Flex>\n ),\n },\n {\n title: \"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: \"Avg. open\",\n className: \"oui-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string, record: any) => {\n // const ctx = usePositionsRowContext();\n return (\n <NumeralWithCtx rm={Decimal.ROUND_DOWN}>{value}</NumeralWithCtx>\n );\n },\n },\n {\n title: \"Mark price\",\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"oui-h-[48px]\",\n\n render: (value: string, record: any) => {\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-text-2xs oui-text-base-contrast-54 oui-p-3 oui-bg-base-8\"\n content={\n \"Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.\"\n }\n >\n <Text>Liq. price</Text>\n </Tooltip>\n ),\n width: 100,\n onSort: true,\n // hint: \"Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.\",\n dataIndex: \"est_liq_price\",\n render: (value: string, record: any) => {\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>Unreal. PnL</Text>\n </HoverCard>\n ),\n dataIndex: \"unrealized_pnl\",\n width: 150,\n onSort: true,\n rule: \"price\",\n numeralProps: {\n coloring: true,\n // tick: \"base_dp\",\n },\n // hint: <UnrealizedPnLPopoverCard />,\n render: (value: string, record: any) => {\n return (\n <Flex gap={2}>\n <Flex>\n <Text.numeral\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n >\n {value}\n </Text.numeral>\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n prefix=\"(\"\n suffix=\")\"\n >\n {record.unrealized_pnl_ROI}\n </Text.numeral>\n </Flex>\n <ShareButtonWidget\n position={record}\n sharePnLConfig={props.sharePnLConfig}\n modalId={SharePnLDialogId}\n />\n </Flex>\n );\n },\n },\n {\n title: \"TP/SL\",\n dataIndex: \"__\",\n width: 150,\n render: (_: string, record) => (\n <TriggerPrice\n stopLossPrice={record.sl_trigger_price}\n takeProfitPrice={record.tp_trigger_price}\n />\n ),\n },\n\n {\n title: \"Notional\",\n dataIndex: \"notional\",\n className: \"oui-h-[48px]\",\n width: 100,\n onSort: true,\n render: (value: string) => (\n <Text.numeral dp={pnlNotionalDecimalPrecision}>\n {value}\n </Text.numeral>\n ),\n },\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-text-2xs oui-text-base-contrast-54 oui-p-3 oui-bg-base-8\"\n content={\n <Flex\n direction={\"column\"}\n gap={3}\n className=\"oui-text-base-contrast-54 oui-bg-base-8 oui-rounded-sm\"\n >\n <span>The minimum equity to keep your position. </span>\n <Divider className=\"oui-w-full\" />\n <span>Margin = Position size * Mark price * MMR</span>\n </Flex>\n }\n >\n <Text>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 // hint: (\n // <Flex\n // direction={\"column\"}\n // gap={3}\n // className=\"oui-text-base-contrast-54 oui-bg-base-8 oui-rounded-sm\"\n // >\n // <span>The minimum equity to keep your position. </span>\n // <Divider className=\"oui-w-full\" />\n // <span>Margin = Position size * Mark price * MMR</span>\n // </Flex>\n // ),\n },\n {\n title: \"Qty.\",\n dataIndex: \"close_qty\",\n width: 100,\n fixed: \"right\",\n render: renderQuantityInput,\n },\n {\n title: \"Price\",\n dataIndex: \"close_price\",\n width: 100,\n fixed: \"right\",\n render: renderPriceInput,\n // render: (value: string) => <PriceInput />,\n },\n {\n title: \"\",\n dataIndex: \"close_position\",\n align: \"right\",\n width: 160,\n fixed: \"right\",\n render: (value: string) => {\n return (\n <Flex gapX={2} justify={\"end\"}>\n <CloseButton />\n <TPSLButton />\n </Flex>\n );\n },\n },\n ] as Column<API.PositionTPSLExt>[],\n [pnlNotionalDecimalPrecision, sharePnLConfig]\n );\n\n return column;\n};\n","import { Button, Text } from \"@orderly.network/ui\";\nimport { NumeralWithCtx } from \"./numeralWithCtx\";\nimport { PriceInput } from \"./priceInput\";\nimport { QuantityInput } from \"./quantityInput\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport const renderQuantity = (value: number, record: any) => {\n\n const symbolInfo = useSymbolContext();\n return (\n <Text.numeral dp={symbolInfo.base_dp} rm={Decimal.ROUND_DOWN} padding={false} coloring>\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 {\n CaretDownIcon,\n cn,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Input,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { useState } from \"react\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const PriceInput = () => {\n const { type, quoteDp, price, updatePriceChange, updateOrderType, position } =\n usePositionsRowContext();\n const [hasFocus, setHasFocus] = useState(false);\n\n return (\n <DropdownMenuRoot>\n <Input\n size=\"sm\"\n value={type === OrderType.LIMIT ? price : \"Market\"}\n onValueChange={(e) => updatePriceChange(e)}\n formatters={[\n inputFormatter.numberFormatter,\n ...(quoteDp ? [inputFormatter.dpFormatter(quoteDp)] : []),\n ]}\n onFocus={(e) => {\n if (type === OrderType.MARKET) {\n updateOrderType(OrderType.LIMIT, `${position.mark_price}`);\n }\n setHasFocus(true);\n }}\n onBlur={(e) => {\n setTimeout(() => {\n setHasFocus(false);\n }, 100);\n\n }}\n suffix={\n <DropdownMenuTrigger asChild>\n <button className=\"oui-px-1 oui-h-full\">\n <CaretDownIcon size={12} color=\"white\" />\n </button>\n </DropdownMenuTrigger>\n }\n classNames={{\n root: cn(\"oui-outline-line-12 focus-within:oui-outline-primary-light\")\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={(vent) => {\n updateOrderType(OrderType.MARKET);\n }}\n >\n <span>Market</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuRoot>\n );\n};\n","import {\n PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n Flex,\n Text,\n Slider,\n Button,\n inputFormatter,\n} from \"@orderly.network/ui\";\nimport { Input } from \"@orderly.network/ui\";\nimport { useEffect, useState } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { utils } from \"@orderly.network/hooks\";\n\nexport const QuantityInput = (props: { value: number }) => {\n // const [quantity, setQuantity] = useState(`${props.value}`);\n const [open, setOpen] = useState(false);\n const [sliderValue, setSliderValue] = useState<number>(100);\n const {\n baseDp,\n quoteDp,\n updateQuantity: setQuantity,\n quantity,\n type,\n errors,\n baseTick,\n } = usePositionsRowContext();\n\n useEffect(() => {\n // when click the outside of the popover, close the popover\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (!target.closest(\"[data-popover-root]\")) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"click\", handleClick);\n\n return () => {\n document.removeEventListener(\"click\", handleClick);\n };\n }, []);\n\n const resetQuantity = (percent: number) => {\n onBlur(`${props.value * (percent / 100)}`);\n };\n\n const onBlur = (value: string) => {\n if (baseTick && baseTick > 0) {\n const formatQty = utils.formatNumber(value, baseTick) ?? value;\n setQuantity(formatQty);\n }\n };\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n onFocus={() => {\n setOpen(true);\n }}\n classNames={{\n root: \"oui-outline-line-12 \"\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n // tooltip={errors?.order_quantity?.message}\n // color={errors?.order_quantity?.message ? \"danger\" : undefined}\n value={quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n setQuantity(e);\n // if (type === OrderType.LIMIT) {\n if (e == '0' || e == \"\") {\n setSliderValue(0);\n return;\n }\n const value = new Decimal(e)\n .div(props.value)\n .mul(100)\n .abs()\n .toFixed(0, Decimal.ROUND_DOWN);\n // console.log(\"xxxxxx value\", value);\n\n setSliderValue(Math.min(100, Number(value)));\n // }\n }}\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-[30px]\">\n {`${sliderValue}%`}\n </Text>\n <Flex direction={\"column\"} width={\"100%\"} gap={2}>\n <Slider\n markCount={4}\n value={[sliderValue]}\n onValueChange={(e) => {\n const values = Array.from(e.values());\n setSliderValue(values[0]);\n resetQuantity(values[0]);\n }}\n />\n <Buttons\n onClick={(value) => {\n setSliderValue(value * 100);\n resetQuantity(value * 100);\n }}\n />\n </Flex>\n </Flex>\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst Buttons = (props: { onClick: (value: number) => void }) => {\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: \"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 { FC } from \"react\";\nimport { modal, ShareIcon } from \"@orderly.network/ui\";\nimport { ShareButtonState } from \"./shareButton.script\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const ShareButton: FC<ShareButtonState> = (props) => {\n if (props.sharePnLConfig == null) return <></>;\n\n const { position } = props;\n return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n modal.show(props.modalId, {\n pnl: {\n entity: {\n symbol: position.symbol,\n pnl: position.unrealized_pnl,\n roi: new Decimal(position.unrealized_pnl_ROI * 100).toFixed(\n 2,\n Decimal.ROUND_DOWN\n ),\n side: position.position_qty > 0 ? \"LONG\" : \"SHORT\",\n openPrice: position.average_open_price,\n openTime: position.timestamp,\n markPrice: position.mark_price,\n quantity: position.position_qty,\n },\n refCode: props.refCode,\n leverage: props.leverage,\n ...props.sharePnLConfig,\n },\n });\n }}\n >\n <ShareIcon color=\"white\" opacity={0.54} size={props.iconSize ?? 16} />\n </button>\n );\n};\n","import { useReferralInfo, useSymbolLeverage } from \"@orderly.network/hooks\";\nimport { SharePnLConfig, SharePnLParams } from \"@orderly.network/ui-share\";\nimport { useMemo } from \"react\";\n\nexport const useShareButtonScript = (props: {\n position: any;\n sharePnLConfig?: SharePnLConfig &\n Partial<Omit<SharePnLParams, \"position\" | \"refCode\" | \"leverage\">>;\n modalId: string;\n iconSize?: number;\n}) => {\n const { sharePnLConfig, position, modalId, iconSize } = props;\n const { getFirstRefCode } = useReferralInfo();\n const refCode = useMemo(() => {\n return getFirstRefCode()?.code;\n }, [getFirstRefCode]);\n const leverage = useSymbolLeverage(props.position.symbol);\n return {\n iconSize,\n position,\n refCode,\n leverage,\n sharePnLConfig,\n modalId,\n };\n};\n\nexport type ShareButtonState = ReturnType<typeof useShareButtonScript>;\n","// import { PositionsProps } from \"../../../types/types\";\nimport { PositionsProps } from \"../../../../types/types\";\nimport { useShareButtonScript } from \"./shareButton.script\";\nimport { ShareButton } from \"./shareButton.ui\";\nimport { SharePnLConfig, SharePnLParams } from \"@orderly.network/ui-share\";\n\nexport const ShareButtonWidget = (props: {\n position: any;\n sharePnLConfig?: SharePnLConfig &\n Partial<Omit<PositionsProps, \"position\" | \"refCode\" | \"leverage\">>;\n modalId: string;\n iconSize?: number;\n}) => {\n const state = useShareButtonScript(props);\n return <ShareButton {...state} />;\n};\n","import { FC, useMemo } from \"react\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { AlgoOrderType, API, OrderSide } from \"@orderly.network/types\";\nimport { useSymbolsInfo, utils } from \"@orderly.network/hooks\";\nimport { cn, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { TPSLEditIcon } 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\n return (\n <TPSLTriggerPrice\n stopLossPrice={stopLossPrice}\n takeProfitPrice={takeProfitPrice}\n direction={\"column\"}\n order={tpslOrder}\n position={position}\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 = utils.priceToPnl(\n {\n qty,\n price,\n entryPrice,\n orderSide,\n orderType,\n },\n {\n symbol: symbolInfo,\n }\n );\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}> = (props) => {\n const { direction = \"row\", order, position } = props;\n // const symbolInfo = useSymbolsInfo()[position?.symbol ?? \"\"]();\n const symbolInfo = useSymbolsInfo();\n\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 <span>-</span>;\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}>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}>SL - </Text>\n ) : (\n \"\"\n )\n }\n />\n );\n }\n\n if (children.length === 0) return <Text>-</Text>;\n\n if (children.length === 2 && direction === \"row\") {\n children.splice(1, 0, <Text key={\"split\"}>/</Text>);\n }\n\n return children;\n }, [props.takeProfitPrice, props.stopLossPrice, order?.symbol]);\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 { PositionTPSLPopover } from \"@orderly.network/ui-tpsl\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { EditIcon } from \"@orderly.network/ui\";\n\n// ------------ TP/SL Price input end------------\nexport const TPSLButton = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n label=\"TP/SL\"\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing={false}\n />\n );\n};\n\nexport const TPSLEditIcon = () => {\n const { position, baseDp, quoteDp, tpslOrder } = usePositionsRowContext();\n\n return (\n <PositionTPSLPopover\n position={position}\n order={tpslOrder}\n baseDP={baseDp}\n quoteDP={quoteDp}\n isEditing\n >\n <EditIcon\n opacity={1}\n className=\"oui-text-base-contrast-54 oui-cursor-pointer\"\n size={16}\n />\n </PositionTPSLPopover>\n );\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { Divider, Flex, Text } from \"@orderly.network/ui\";\nimport { FC, useCallback } from \"react\";\n\nexport const UnrealizedPnLPopoverCard: FC<{}> = (props) => {\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\"\n );\n\n return (\n <Flex direction={\"column\"} gap={3} className=\"oui-text-base-contrast-54 oui-items-start\">\n <Text>\n Current unrealized profit or loss on your open positions across all\n widgets calculated using Mark Price.\n </Text>\n <Divider className=\"oui-w-full\" />\n <div className=\"oui-mb-0\">Unrealized PnL Price Basis</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 // \"markPrice\" | \"lastPrice\"\n return (\n <Flex gap={2}>\n <RadioButton\n sel={value === \"markPrice\"}\n label={\"Mark price\"}\n value={\"markPrice\"}\n onCheckChange={onValueChange}\n />\n <RadioButton\n sel={value === \"lastPrice\"}\n label={\"Last price\"}\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 { NumeralProps, Text } from \"@orderly.network/ui\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport type TickName = \"quote_dp\" | \"base_dp\";\n\nexport const NumeralWithCtx: FC<\n Omit<NumeralProps, \"precision\" | \"tick\"> & {\n tick?: TickName;\n }\n> = (props) => {\n const { tick = \"quote_dp\", ...rest } = props;\n const symbolInfo = useSymbolContext();\n\n if (!symbolInfo) {\n throw new Error(\"NumeralWithCtx must be used inside SymbolProvider\");\n }\n\n return <Text.numeral as=\"span\" {...rest} dp={symbolInfo[tick]} />;\n};\n","import { FC } from \"react\";\nimport { cn, Divider, Flex, Grid } from \"@orderly.network/ui\";\nimport { PositionCellState } from \"./positionCell.script\";\nimport {\n UnrealPnL,\n SymbolToken,\n Qty,\n Margin,\n Notional,\n AvgOpen,\n MarkPrice,\n LiqPrice,\n TPSLPrice,\n} from \"./items\";\nimport { LimitCloseBtnWidget } from \"../limitCloseBtn\";\nimport { MarketCloseBtnWidget } from \"../marketCloseBtn\";\nimport { TpSLBtnWidget } from \"../tpSLBtn\";\n\nexport const PositionCell: FC<\n PositionCellState & {\n className?: string;\n }\n> = (props) => {\n const { className, ...rest } = props;\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 {...rest} />\n <Divider intensity={6} className=\"oui-w-full\" />\n <Body {...rest} />\n <TPSLPrice {...rest} />\n <Buttons {...rest} />\n </Flex>\n );\n};\n\nconst Header: FC<PositionCellState> = (props) => {\n return (\n <Flex justify={\"between\"} width={\"100%\"}>\n <SymbolToken {...props} />\n <UnrealPnL {...props} />\n </Flex>\n );\n};\n\nconst Body: FC<PositionCellState> = (props) => {\n return (\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\nconst Buttons: FC<PositionCellState> = (props) => {\n return (\n <Grid width={\"100%\"} gap={2} cols={3} rows={1}>\n <TpSLBtnWidget state={props} />\n <LimitCloseBtnWidget state={props} />\n <MarketCloseBtnWidget state={props} />\n </Grid>\n );\n};\n","import { Badge, cn, Flex, Statistic, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { ShareButtonWidget } from \"../../desktop/shareButton\";\nimport { SharePnLBottomSheetId } from \"@orderly.network/ui-share\";\nimport { PositionCellState } from \"./positionCell.script\";\nimport { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nexport const SymbolToken: FC<PositionCellState> = (props) => {\n const { item } = props;\n const isBuy = item.position_qty > 0;\n return (\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"2xs\"\n suffix={\n <Badge color={isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {isBuy ? \"Buy\" : \"Sell\"}\n </Badge>\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\n return (\n <Flex gap={3}>\n <Flex direction={\"column\"} className=\"oui-text-2xs\" itemAlign={\"end\"}>\n <Text intensity={36}>\n Unreal. PnL{<Text intensity={20}>(USDC)</Text>}\n </Text>\n <Text.numeral\n size=\"xs\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"orderly-font-semibold\"\n suffix={\n <Text.numeral\n rule=\"percentages\"\n dp={props.pnlNotionalDecimalPrecision}\n rm={Decimal.ROUND_DOWN}\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.numeral>\n }\n >\n {item.unrealized_pnl}\n </Text.numeral>\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\n return (\n <Statistic\n label={\"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\n return (\n <Statistic\n label={<Text>Margin{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.mm}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const Notional: FC<PositionCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n align=\"end\"\n label={<Text>Notional{<Text intensity={20}>(USDC)</Text>}</Text>}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n >\n <Text.numeral dp={props.quote_dp} intensity={80}>\n {item.notional}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={\"Avg. open\"}\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\n return (\n <Statistic\n label={\"Mark price\"}\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\n const liqPrice =\n item.est_liq_price && item.est_liq_price > 0 ? item.est_liq_price : \"-\";\n\n return (\n <Statistic\n label={\"Liq. price\"}\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\n if (item.tp_trigger_price == null && item.sl_trigger_price == null)\n return <></>;\n\n return (\n <Flex className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Text>TP/SL: </Text>\n <Flex className=\"oui-gap-[2px]\">\n {item.tp_trigger_price && (\n <Text.numeral color=\"buy\">{item.tp_trigger_price}</Text.numeral>\n )}\n {item.sl_trigger_price && \"/\"}\n {item.sl_trigger_price && (\n <Text.numeral color=\"sell\">{item.sl_trigger_price}</Text.numeral>\n )}\n </Flex>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Badge,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n SimpleDialog,\n SimpleSheet,\n Slider,\n Text,\n ThrottledButton,\n toast,\n} from \"@orderly.network/ui\";\nimport { LimitCloseBtnState } from \"./limitCloseBtn.script\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { LimitConfirmDialog } from \"../../desktop/closeButton\";\nimport { utils } from \"@orderly.network/hooks\";\n\nexport const LimitCloseBtn: FC<LimitCloseBtnState> = (props) => {\n const {\n item,\n sheetOpen,\n setSheetOpen,\n dialogOpen,\n setDialogOpen,\n updatePriceChange,\n base,\n quantity,\n price,\n onClose,\n onConfirm,\n submitting,\n quote_dp,\n closeOrderData,\n onCloseDialog,\n } = props;\n const isBuy = item.position_qty > 0;\n\n const onBlur = (value: string) => {\n if (props.baseTick && props.baseTick > 0) {\n const formatQty = utils.formatNumber(value, props.baseTick) ?? value;\n props.updateQuantity(formatQty);\n }\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={() => {\n updatePriceChange(\"limit\");\n setSheetOpen(true);\n }}\n >\n Limit Close\n </Button>\n\n {sheetOpen && (\n <SimpleSheet\n title={\"Limit close\"}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n >\n <Flex\n direction={\"column\"}\n gap={3}\n width={\"100%\"}\n itemAlign={\"start\"}\n className=\"oui-text-sm\"\n >\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {item.symbol}\n </Text.formatted>\n <Flex gap={1}>\n <Badge color=\"neutral\" size=\"xs\">\n Limit\n </Badge>\n {isBuy && (\n <Badge color=\"success\" size=\"xs\">\n Buy\n </Badge>\n )}\n {!isBuy && (\n <Badge color=\"danger\" size=\"xs\">\n Sell\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text intensity={54}>Last price</Text>\n <Text.numeral\n dp={(props.item as any)?.symbolInfo?.quote_dp}\n suffix={<Text intensity={36}>USDC</Text>}\n >\n {props.curMarkPrice}\n </Text.numeral>\n </Flex>\n <Flex width={\"100%\"} direction={\"column\"} gap={2}>\n <Input.tooltip\n prefix=\"Price\"\n suffix={props.quote}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n ]}\n triggerClassName=\"oui-w-full\"\n tooltip={props.errors?.order_price?.message}\n color={\n props.errors?.order_price?.message ? \"danger\" : undefined\n }\n value={props.price}\n onValueChange={(e) => props.updatePriceChange(e)}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n props.errors?.order_price?.message\n ? \"oui-outline-danger\"\n : undefined\n ),\n }}\n />\n <Input\n prefix=\"Quantity\"\n suffix={props.base}\n align=\"right\"\n fullWidth\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.base_dp),\n ]}\n // triggerClassName=\"oui-w-full\"\n // tooltip={props.errors?.order_quantity?.message}\n // color={\n // props.errors?.order_quantity?.message ? \"danger\" : undefined\n // }\n value={props.quantity}\n onBlur={(event) => onBlur(event.target.value)}\n onValueChange={(e) => {\n props.updateQuantity(e);\n const slider = new Decimal(e)\n .div(props.item.position_qty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n props.setSliderValue(slider);\n }}\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n suffix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-outline-line-12 oui-w-full\",\n // props.errors?.order_quantity?.message\n // ? \"oui-outline-danger\"\n // : undefined\n ),\n }}\n />\n <Slider\n markCount={4}\n value={[props.sliderValue]}\n color=\"primary\"\n onValueChange={(e) => {\n props.setSliderValue(e[0]);\n const qty = new Decimal(e[0])\n .div(100)\n .mul(props.item.position_qty)\n .toFixed(props.base_dp, Decimal.ROUND_DOWN);\n // props.updateQuantity(qty);\n onBlur(qty);\n }}\n />\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text\n color=\"primary\"\n size=\"2xs\"\n >{`${props.sliderValue}%`}</Text>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primary\">\n Max\n </Text>\n <Text.numeral intensity={54} size=\"2xs\">\n {Math.abs(props.item.position_qty)}\n </Text.numeral>\n </Flex>\n </Flex>\n </Flex>\n <Flex width={\"100%\"} gap={3} mt={2}>\n <Button\n fullWidth\n color=\"secondary\"\n onClick={(e) => {\n onClose();\n }}\n >\n Cancel\n </Button>\n <ThrottledButton\n fullWidth\n disabled={submitting}\n loading={submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n const errors = props.errors;\n\n const quantityMsg = errors?.order_quantity?.message;\n const priceMsg = errors?.order_price?.message;\n if (quantityMsg || priceMsg) {\n toast.error(quantityMsg ?? priceMsg);\n return;\n }\n if (!props.orderConfirm) {\n onConfirm();\n return;\n }\n setDialogOpen(true);\n }}\n // disabled={Object.keys(props.errors ?? {}).length > 0}\n >\n Confirm\n </ThrottledButton>\n </Flex>\n </Flex>\n </SimpleSheet>\n )}\n\n {dialogOpen && (\n <SimpleDialog open={dialogOpen} onOpenChange={setDialogOpen} size=\"xs\">\n <LimitConfirmDialog\n base={base}\n quantity={quantity}\n price={price}\n onClose={onCloseDialog}\n onConfirm={onConfirm}\n submitting={submitting}\n quoteDp={quote_dp}\n order={closeOrderData}\n hideCloseIcon\n />\n </SimpleDialog>\n )}\n </>\n );\n};\n","import { useLocalStorage, useMarkPricesStream } from \"@orderly.network/hooks\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { toast } from \"@orderly.network/ui\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const useLimitCloseBtnScript = (props: { state: PositionCellState }) => {\n const { state } = props;\n const [sheetOpen, setSheetOpen] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n type,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n errors,\n baseTick,\n } = usePositionsRowContext();\n const setPrice = useRef(false);\n\n const [sliderValue, setSliderValue] = useState(100);\n\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n\n\n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setSheetOpen(false);\n setDialogOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n );\n };\n\n const onClose = () => {\n setSheetOpen(false);\n };\n const onCloseDialog = () => {\n setDialogOpen(false);\n };\n const prices = useMarkPricesStream();\n const curMarkPrice = useMemo(() => {\n return prices?.[\"data\"]?.[state.item.symbol] ?? \"--\";\n }, [prices]);\n\n const { quote_dp, base_dp, base, quote } = useSymbolContext();\n useEffect(() => {\n if (!setPrice.current && curMarkPrice && sheetOpen) {\n setPrice.current = true;\n updateOrderType(OrderType.LIMIT, `${curMarkPrice}`);\n }\n }, [setPrice, curMarkPrice, sheetOpen]);\n\n // clear state\n useEffect(() => {\n if (!sheetOpen) {\n updateOrderType(OrderType.MARKET);\n setPrice.current = false;\n // setSliderValue(100);\n }\n }, [sheetOpen]);\n\n return {\n ...state,\n sheetOpen,\n setSheetOpen,\n curMarkPrice,\n quote_dp,\n base_dp,\n base,\n quote,\n baseTick,\n\n orderConfirm,\n\n onClose,\n onConfirm,\n price,\n quantity,\n closeOrderData,\n submitting,\n updatePriceChange,\n updateQuantity,\n errors,\n\n // slider\n sliderValue,\n setSliderValue,\n\n dialogOpen,\n setDialogOpen,\n onCloseDialog,\n };\n};\n\nexport type LimitCloseBtnState = ReturnType<typeof useLimitCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useLimitCloseBtnScript } from \"./limitCloseBtn.script\";\nimport { LimitCloseBtn } from \"./limitCloseBtn.ui\";\n\nexport const LimitCloseBtnWidget = (props: {\n state: PositionCellState;\n}) => {\n const state = useLimitCloseBtnScript(props);\n return (<LimitCloseBtn {...state} />);\n};\n","import { FC } from \"react\";\nimport { Button, Flex, SimpleDialog, Text } from \"@orderly.network/ui\";\nimport { MarketCloseBtnState } from \"./marketCloseBtn.script\";\nimport { MarketCloseConfirm } from \"../../desktop/closeButton\";\nimport { OrderType } from \"@orderly.network/types\";\n\nexport const MarketCloseBtn: FC<MarketCloseBtnState> = (props) => {\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"sm\"\n className=\"oui-border-base-contrast-36\"\n disabled={props.submitting}\n loading={props.submitting}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n props.updateOrderType(OrderType.MARKET);\n\n if (!props.orderConfirm) {\n props.onConfirm();\n return;\n }\n props.setDialogOpen(true);\n }}\n >\n Market Close\n </Button>\n <SimpleDialog open={props.dialogOpen} onOpenChange={props.setDialogOpen} size=\"xs\">\n <MarketCloseConfirm\n base={props.base}\n quantity={props.quantity}\n onClose={props.onClose}\n onConfirm={props.onConfirm}\n submitting={props.submitting}\n hideCloseIcon\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useState } from \"react\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\nimport { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\n\nexport const useMarketCloseBtnScript = (props: {\n state: PositionCellState;\n}) => {\n const symbolInfo = useSymbolContext();\n const [dialogOpen, setDialogOpen] = useState(false);\n const {\n onSubmit,\n price,\n quantity,\n closeOrderData,\n submitting,\n type,\n updatePriceChange,\n updateOrderType,\n updateQuantity,\n } = usePositionsRowContext();\n\n const [orderConfirm ] = useLocalStorage(\"orderly_order_confirm\", true);\n\n\n const onConfirm = () => {\n return onSubmit().then(\n (res) => {\n setDialogOpen(false);\n },\n (error: any) => {\n if (typeof error === \"string\") {\n toast.error(error);\n } else {\n toast.error(error.message);\n }\n }\n );\n };\n\n const onClose = () => {\n setDialogOpen(false);\n };\n\n return {\n ...props,\n ...symbolInfo,\n\n dialogOpen,\n setDialogOpen,\n\n orderConfirm,\n\n onSubmit,\n quantity,\n onClose,\n onConfirm,\n submitting,\n updateOrderType,\n updateQuantity,\n };\n};\n\nexport type MarketCloseBtnState = ReturnType<typeof useMarketCloseBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useMarketCloseBtnScript } from \"./marketCloseBtn.script\";\nimport { MarketCloseBtn } from \"./marketCloseBtn.ui\";\n\nexport const MarketCloseBtnWidget = (props: { state: PositionCellState }) => {\n const state = useMarketCloseBtnScript(props);\n return <MarketCloseBtn {...state} />;\n};\n","import { FC } from \"react\";\nimport { Button, Flex, Text, toast } from \"@orderly.network/ui\";\nimport { TpSLBtnState } from \"./tpSLBtn.script\";\n\nexport const TpSLBtn: FC<TpSLBtnState> = (props) => {\n // const { item } = props;\n //\n return (\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 props.openTP_SL();\n }}\n >\n TP/SL\n </Button>\n );\n};\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { modal } from \"@orderly.network/ui\";\nimport { PositionTPSLSheet } from \"@orderly.network/ui-tpsl\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { usePositionsRowContext } from \"../../desktop/positionRowContext\";\n\nexport const useTpSLBtnScript = (props: { state: PositionCellState }) => {\n const symbolInfo: API.SymbolExt = useSymbolsInfo()[props.state.item.symbol]();\n const { tpslOrder } = usePositionsRowContext();\n\n const openTP_SL = () => {\n modal.sheet({\n title: \"TP/SL\",\n content: (\n <PositionTPSLSheet\n position={props.state.item}\n symbolInfo={symbolInfo}\n order={tpslOrder}\n isEditing={false}\n />\n ),\n });\n };\n\n return {\n openTP_SL,\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type TpSLBtnState = ReturnType<typeof useTpSLBtnScript>;\n","import { PositionCellState } from \"../positionCell/positionCell.script\";\nimport { useTpSLBtnScript } from \"./tpSLBtn.script\";\nimport { TpSLBtn } from \"./tpSLBtn.ui\";\n\nexport const TpSLBtnWidget = (props: { state: PositionCellState }) => {\n const state = useTpSLBtnScript(props);\n return (<TpSLBtn {...state} />);\n};\n","import { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useSymbolContext } from \"../../../../providers/symbolProvider\";\n\nexport const usePositionCellScript = (\n props: {\n item: API.PositionTPSLExt;\n index: number;\n } & PositionsProps\n) => {\n const symbolInfo = useSymbolContext();\n return {\n ...props,\n ...symbolInfo,\n };\n};\n\nexport type PositionCellState = ReturnType<typeof usePositionCellScript>;\n","import { FC } from \"react\";\nimport { usePositionCellScript } from \"./positionCell.script\";\nimport { PositionCell } from \"./positionCell.ui\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsProps } from \"../../../../types/types\";\n\nexport const PositionCellWidget: FC<\n {\n item: API.PositionTPSLExt;\n index: number;\n className?: string;\n shareIconSize?: number;\n } & PositionsProps\n> = (props) => {\n const state = usePositionCellScript(props);\n return <PositionCell {...state} className={props.className} />;\n};\n","import { usePositionStream } from \"@orderly.network/hooks\";\nimport { PositionsProps } from \"../../types/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { usePagination } from \"@orderly.network/ui\";\nimport { useEffect } from \"react\";\n\nexport const usePositionsBuilder = (props: PositionsProps) => {\n const {\n symbol,\n calcMode,\n includedPendingOrder,\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n onSymbolChange,\n } = props;\n // const [showAllSymbol] = useLocalStorage(\n // \"showAllSymbol\",\n // true\n // );\n const { pagination, setPage } = usePagination({\n pageSize: 50,\n });\n\n const [data, info, { isLoading }] = usePositionStream(symbol, {\n calcMode,\n includedPendingOrder,\n });\n\n useEffect(() => {\n setPage(1);\n }, [symbol]);\n\n const dataSource = useDataTap(data?.rows) ?? undefined;\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 };\n};\n\nexport type PositionsBuilderState = ReturnType<typeof usePositionsBuilder>;\n","import { PositionsProps } from \"../../types/types\";\nimport { MobilePositions, Positions } from \"./positions.ui\";\nimport { usePositionsBuilder } from \"./usePositionsBuilder.script\";\n\nexport const PositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder(props);\n return <Positions {...state} />;\n};\n\nexport const MobilePositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder(props);\n return <MobilePositions {...state} />;\n};\n","import { FC } from \"react\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n PositionHistoryExt,\n PositionHistoryState,\n} from \"./positionHistory.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { usePositionHistoryColumn } from \"./desktop/usePositionHistoryColumn\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { PositionHistoryCellWidget } from \"./mobile\";\n\nexport const PositionHistory: FC<PositionHistoryState> = (props) => {\n const { onSymbolChange, pagination, pnlNotionalDecimalPrecision } = props;\n const column = usePositionHistoryColumn({\n onSymbolChange,\n pnlNotionalDecimalPrecision,\n });\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 className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\">\n <div className=\"oui-z-10\">\n <Text.gradient\n color={props.filterDays === value ? \"brand\" : undefined}\n className={props.filterDays !== value ? \"oui-text-base-contrast-54\": \"\"}\n >\n {`${value}D`}\n </Text.gradient>\n </div>\n <div\n className=\"oui-gradient-primary oui-opacity-[.12] oui-absolute oui-left-0 oui-right-0 oui-top-0 oui-bottom-0 oui-rounded\"\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 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?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-grid-rows-[auto,1fr] oui-w-full\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-bg-base-9 oui-rounded-b-xl\">\n <DataFilter\n className=\"oui-pt-0 oui-pb-0 oui-border-none\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\",\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 />\n </SymbolProvider>\n )}\n />\n </Grid>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n capitalizeFirstLetter,\n cn,\n Column,\n Flex,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const usePositionHistoryColumn = (props: {\n onSymbolChange?: (symbol: API.Symbol) => void;\n pnlNotionalDecimalPrecision?: number;\n}) => {\n const { onSymbolChange, pnlNotionalDecimalPrecision } = props;\n\n const column = useMemo(\n () =>\n [\n // instrument\n {\n title: \"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: \"Closed / Max closed\",\n dataIndex: \"close_maxClose\",\n width: 200,\n render: (value: string, record) => <Quantity record={record} />,\n },\n // net pnl\n {\n title: \"Net PnL\",\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 <NetPnL\n record={record}\n pnlNotionalDecimalPrecision={pnlNotionalDecimalPrecision}\n />\n ),\n },\n // avg open\n {\n title: \"Avg. open\",\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: \"Avg. close\",\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 // time opened\n {\n title: \"Time opened\",\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: \"Time closed\",\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: \"Updated time\",\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]\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\n const tags = useMemo(() => {\n const list: ReactNode[] = [];\n\n list.push(\n <Badge\n color={record.position_status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {capitalizeFirstLetter(\n record.position_status === \"partial_closed\"\n ? \"Partially closed\"\n : record.position_status.replace(\"_\", \" \")\n )}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {capitalizeFirstLetter(record.type)}\n </Badge>\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Tooltip\n className=\"oui-min-w-[204px] oui-bg-base-5\"\n tooltipProps={{\n arrow: {\n className: \"oui-fill-base-5\",\n },\n }}\n // @ts-ignore\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}>Liquidation id</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Liquidator fee</Text>\n <Text color={record.liquidator_fee >= 0 ? \"profit\" : \"lose\"}>\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Ins. Fund fee</Text>\n <Text\n color={record.insurance_fund_fee >= 0 ? \"profit\" : \"lose\"}\n >\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-[1px]\">\n {capitalizeFirstLetter(record.type)}\n </span>\n </Badge>\n </div>\n </Tooltip>\n );\n }\n\n return list;\n }, [record]);\n\n return (\n <Flex gap={2} height={48}>\n <Box\n width={4}\n height={38}\n className={cn(\n \"oui-rounded-[1px] oui-shrink-0\",\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-overflow-hidden oui-whitespace-nowrap oui-text-ellipsis\"\n >\n <Text.numeral dp={base_dp}>\n {Math.abs(record.closed_position_qty)}\n </Text.numeral>\n <Text.numeral dp={base_dp} 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\n const netPnl = record.netPnL != null ? record.netPnL : undefined;\n\n const text = () => (\n <Text.numeral\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.numeral>\n );\n\n if (record.netPnL == null) return text();\n\n return (\n <Flex>\n <Tooltip\n // open={record.max_position_qty == 3.22}\n delayDuration={200}\n // @ts-ignore\n content={\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n <Text intensity={80}>Net PnL</Text>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Realized PnL</Text>\n <Text\n color={record.realized_pnl >= 0 ? \"profit\" : \"lose\"}\n className=\"oui-cursor-pointer\"\n >\n {commifyOptional(record.realized_pnl)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"} gap={2}>\n <Text intensity={54}>Funding fee</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}>Trading fee</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 tooltipProps={{\n arrow: {\n className: \"oui-fill-base-5\",\n },\n }}\n >\n <div>{text()}</div>\n </Tooltip>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Divider, Flex, Grid, modal, Text } from \"@orderly.network/ui\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\nimport {\n PositionHistoryType,\n ClosedQty,\n SymbolToken,\n OpenTime,\n AvgOpen,\n AvgClosed,\n ClosedTime,\n MaxClosedQty,\n} from \"./items\";\nimport { commifyOptional } from \"@orderly.network/utils\";\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 showAlert = () => {\n const { item: record } = props;\n modal.alert({\n title: \"Net PnL\",\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}>Realized PnL</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}>Funding fee</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}>Trading fee</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 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 Net PnL\n </Text>\n <button onClick={showAlert}>\n <Text.numeral size=\"xs\" coloring>\n {props.item.netPnL ?? \"--\"}\n </Text.numeral>\n </button>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<PositionHistoryCellState> = (props) => {\n return (\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 );\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport {\n PositionHistoryExt,\n PositionHistorySide,\n} from \"../positionHistory.script\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n capitalizeFirstLetter,\n Flex,\n modal,\n Statistic,\n Text,\n} from \"@orderly.network/ui\";\nimport { PositionHistoryCellState } from \"./positionHistoryCell.script\";\nimport { PositionsRowContextState } from \"../../positions/desktop/positionRowContext\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const SymbolToken: FC<PositionHistoryCellState> = (props) => {\n const { side, symbol } = props.item;\n const isBuy = side === PositionHistorySide.buy;\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 ? \"Buy\" : \"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\n const showAlert = () => {\n modal.alert({\n title: \"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>Liquidation id</Text>\n <Text intensity={98}>{record.liquidation_id}</Text>\n </Flex>\n )}\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>Liquidator fee</Text>\n <Text color={record.liquidator_fee >= 0 ? \"profit\" : \"lose\"}>\n {commifyOptional(record.liquidator_fee)}\n </Text>\n </Flex>\n <Flex justify={\"between\"} width={\"100%\"}>\n <Text>Ins. Fund fee</Text>\n <Text color={record.insurance_fund_fee >= 0 ? \"profit\" : \"lose\"}>\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 list.push(\n <Badge\n color={record.position_status !== \"closed\" ? \"primaryLight\" : \"neutral\"}\n size=\"xs\"\n >\n {capitalizeFirstLetter(\n record.position_status === \"partial_closed\"\n ? \"Partially closed\"\n : record.position_status.replace(\"_\", \" \")\n )}\n </Badge>\n );\n\n if (record.type === \"adl\") {\n list.push(\n <Badge color={\"danger\"} size=\"xs\">\n {capitalizeFirstLetter(record.type)}\n </Badge>\n );\n } else if (record.type === \"liquidated\") {\n list.push(\n <Badge\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-[1px]\">\n {capitalizeFirstLetter(record.type)}\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\n return (\n <Statistic\n // label={\n // <Text>Closed{<Text intensity={20}>{` (${props.base})`}</Text>}</Text>\n // }\n label={<Text>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 {item.closed_position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const MaxClosedQty: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n // label={\n // <Text>\n // Max closed{<Text intensity={20}>{` (${props.base})`}</Text>}\n // </Text>\n // }\n label={<Text>Max 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 {item.max_position_qty}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgOpen: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={<Text>Avg. open{<Text intensity={20}>{\" (USDC)\"}</Text>}</Text>}\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 {item.avg_open_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const AvgClosed: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={<Text>Avg. close{<Text intensity={20}>{\" (USDC)\"}</Text>}</Text>}\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 {item.avg_close_price}\n </Text.numeral>\n </Statistic>\n );\n};\n\nexport const OpenTime: FC<PositionHistoryCellState> = (props) => {\n const { item } = props;\n\n return (\n <Statistic\n label={\"Time opened\"}\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\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={\"Time closed\"}\n classNames={{\n root: \"oui-text-xs\",\n label: \"oui-text-2xs\",\n }}\n align=\"end\"\n >\n {child}\n </Statistic>\n );\n};\n","import { usePrivateQuery, useSymbolsInfo } from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { PositionHistoryProps } from \"./positionHistory.widget\";\nimport { API } from \"@orderly.network/types\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { differenceInDays, setDate, setHours, subDays } from \"date-fns\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\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 { onSymbolChange, symbol, pnlNotionalDecimalPrecision } = props;\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 dataSource = useDataTap(filterData, {\n accountStatus: AccountStatusEnum.EnableTrading,\n });\n\n return {\n dataSource,\n isLoading,\n onSymbolChange,\n pagination,\n filterItems,\n onFilter,\n symbol,\n filterDays,\n updateFilterDays,\n pnlNotionalDecimalPrecision,\n };\n};\n\nconst useFilter = () => {\n const [status, setStatus] = useState<PositionHistoryStatus>(\n PositionHistoryStatus.all\n );\n const [side, setSide] = useState<PositionHistorySide>(\n PositionHistorySide.all\n );\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 \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: \"All sides\",\n value: \"all\",\n },\n {\n label: \"Buy\",\n value: PositionHistorySide.buy,\n },\n {\n label: \"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: \"All status\",\n value: \"all\",\n },\n {\n label: \"Closed\",\n value: PositionHistoryStatus.closed,\n },\n {\n label: \"Partially Closed\",\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 \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { SymbolInfo } from \"../desktop/usePositionHistoryColumn\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\n\nexport const usePositionHistoryCellScript = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\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 \"@orderly.network/types\";\nimport { PositionHistoryExt } from \"../positionHistory.script\";\nimport { usePositionHistoryCellScript } from \"./positionHistoryCell.script\";\nimport { PositionHistoryCell } from \"./positionHistoryCell.ui\";\n\nexport const PositionHistoryCellWidget = (props: {\n item: PositionHistoryExt;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n classNames?: {\n root?: string;\n };\n}) => {\n const state = usePositionHistoryCellScript(props);\n return <PositionHistoryCell {...state} />;\n};\n","import { API } from \"@orderly.network/types\";\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};\n\nexport const PositionHistoryWidget = (props: PositionHistoryProps) => {\n const state = usePositionHistoryScript(props);\n return <PositionHistory {...state} />;\n};\n\nexport const MobilePositionHistoryWidget = (\n props: PositionHistoryProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n) => {\n const { classNames, ...rest } = props;\n const state = usePositionHistoryScript(rest);\n return <MobilePositionHistory {...state} classNames={classNames} />;\n};\n","import { FC } from \"react\";\nimport {\n cn,\n DataFilter,\n Flex,\n Grid,\n ListView,\n Text,\n} from \"@orderly.network/ui\";\nimport { LiquidationState } from \"./liquidation.script\";\nimport { AuthGuardDataTable } from \"@orderly.network/ui-connector\";\nimport { API } from \"@orderly.network/types\";\nimport { useLiquidationColumn } from \"./desktop/useLiquidationColumn\";\nimport { SymbolProvider } from \"../../providers/symbolProvider\";\nimport { LiquidationCellWidget } from \"./mobile\";\n\nexport const Liquidation: FC<LiquidationState> = (props) => {\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 className=\"oui-relative oui-px-2 oui-py-[2px] oui-text-sm\">\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-gradient-primary oui-opacity-[.12] oui-absolute oui-left-0 oui-right-0 oui-top-0 oui-bottom-0 oui-rounded\"\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 />\n </Flex>\n );\n};\n\nexport const MobileLiquidation: FC<\n LiquidationState & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }\n> = (props) => {\n return (\n <Grid\n cols={1}\n rows={2}\n className=\"oui-grid-rows-[auto,1fr] oui-w-full\"\n gap={1}\n >\n <Flex gap={2} p={2} className=\"oui-bg-base-9 oui-rounded-b-xl\">\n <DataFilter\n className=\"oui-pt-0 oui-pb-0 oui-border-none\"\n items={props.filterItems}\n onFilter={(value: any) => {\n props.onFilter(value);\n }}\n />\n </Flex>\n <ListView\n className={cn(\n \"oui-w-full oui-hide-scrollbar oui-overflow-y-hidden oui-space-y-0\",\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 { API } from \"@orderly.network/types\";\nimport { Column, Flex, Text } from \"@orderly.network/ui\";\nimport { FC, useMemo } from \"react\";\nimport {\n SymbolProvider,\n useSymbolContext,\n} from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const useLiquidationColumn = (props: {}) => {\n const {} = props;\n\n const column = useMemo(\n () =>\n [\n // Time\n {\n title: \"Time\",\n dataIndex: \"timestamp\",\n fixed: \"left\",\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: \"Liquidation id\",\n dataIndex: \"liquidation_id\",\n width: 202,\n render: (value) => <Text>{value}</Text>,\n },\n // net pnl\n {\n title: \"Ins. fund transfer\",\n dataIndex: \"transfer_amount_to_insurance_fund\",\n width: 202,\n render: (value) => {\n return <Text>{commifyOptional(value)}</Text>;\n },\n },\n // Symbol\n {\n title: \"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 rule={\"symbol\"} formatString=\"base-quote\">{item.symbol}</Text.formatted>\n ))}\n </Flex>\n ),\n },\n // Price (USDC)\n {\n title: \"Price (USDC)\",\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 value={item.transfer_price} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n // Quantity\n {\n title: \"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 value={item.position_qty} type=\"base\" />\n ))}\n </Flex>\n );\n },\n },\n // Liquidation Fee\n {\n title: \"Liquidation fee\",\n dataIndex: \"abs_liquidation_fee\",\n width: 202,\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 value={item.abs_liquidation_fee} type=\"quote\" />\n ))}\n </Flex>\n );\n },\n },\n ] as Column<API.Liquidation>[],\n []\n );\n\n return column;\n};\n\nconst FormattedText: FC<{ value?: string | number; type: \"base\" | \"quote\" }> = (\n props\n) => {\n // const { quote_dp, base_dp } = useSymbolContext();\n return (\n <Text>\n {commifyOptional(props.value)}\n </Text>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Divider, Flex, Grid, Text } from \"@orderly.network/ui\";\nimport { LiquidationCellState } from \"./liquidationCell.script\";\nimport { LiquidationFee, Price, Quantity } from \"./items\";\nimport { API } from \"@orderly.network/types\";\nimport { SymbolProvider } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\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={props.classNames?.root}\n >\n <Header {...props} />\n <Body {...props} />\n </Flex>\n );\n};\n\nexport const Header: FC<LiquidationCellState> = (props) => {\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 <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule={\"date\"}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.item.timestamp}\n </Text.formatted>\n <Flex gap={1}>\n <Text size=\"2xs\" intensity={36}>\n Liquidation id:\n </Text>\n <Text\n size=\"2xs\"\n intensity={80}\n >{` ${props.item.liquidation_id}`}</Text>\n </Flex>\n </Flex>\n <Flex direction={\"column\"} itemAlign={\"end\"} className=\"oui-flex-1\">\n <Text size=\"2xs\" intensity={36}>\n Ins. Fund Transfer:\n </Text>\n <Text intensity={80} size=\"xs\">\n {commifyOptional(props.item.transfer_amount_to_insurance_fund)}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nexport const Body: FC<LiquidationCellState> = (props) => {\n return (\n <Flex direction={\"column\"} width={\"100%\"}>\n {props.item.positions_by_perp?.map((item, index) => {\n return (\n <Cell\n key={`${index}-${item.symbol}`}\n isLast={index === props.item.positions_by_perp.length - 1}\n {...item}\n />\n );\n })}\n </Flex>\n );\n};\n\nconst Cell: FC<\n API.LiquidationPositionByPerp & {\n isLast: boolean;\n key: string;\n }\n> = (props) => {\n return (\n <Flex\n key={props.key}\n width={\"100%\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-border-t-[1px] oui-border-line-6 oui-pt-2\",\n !props.isLast && \"oui-pb-2\"\n )}\n >\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-quote\"\n size=\"xs\"\n intensity={80}\n className=\"oui-flex-1\"\n >\n {props.symbol}\n </Text.formatted>\n <Grid cols={1} rows={3} width={\"100%\"} gap={1} className=\"oui-flex-1\">\n <Price {...props} />\n <Quantity {...props} />\n <LiquidationFee {...props} />\n </Grid>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport React from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolContext } from \"../../../providers/symbolProvider\";\nimport { commifyOptional } from \"@orderly.network/utils\";\n\nexport const Price: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Price{<Text intensity={20}>{\" (USDC)\"}</Text>}\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.transfer_price}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.transfer_price)}\n </Text>\n </Flex>\n );\n};\nexport const Quantity: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Quantity\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.position_qty}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.position_qty)}\n </Text>\n </Flex>\n );\n};\nexport const LiquidationFee: FC<API.LiquidationPositionByPerp> = (props) => {\n // const { quote_dp } = useSymbolContext();\n return (\n <Flex width={\"100%\"} justify={\"between\"}>\n <Text size=\"2xs\" intensity={36}>\n Liquidation fee\n </Text>\n {/* <Text.numeral size=\"2xs\" intensity={80} dp={quote_dp} padding={false}>\n {props.abs_liquidation_fee}\n </Text.numeral> */}\n <Text size=\"2xs\" intensity={80}>\n {commifyOptional(props.abs_liquidation_fee)}\n </Text>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const useLiquidationCellScript = (props: {\n item: API.Liquidation;\n onSymbolChange?: (symbol: API.Symbol) => void;\n index: number;\n}) => {\n\n return {\n ...props\n };\n};\n\nexport type LiquidationCellState = ReturnType<typeof useLiquidationCellScript>;\n","import { API } from \"@orderly.network/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 {\n usePrivateInfiniteQuery,\n usePrivateQuery,\n} from \"@orderly.network/hooks\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { API } from \"@orderly.network/types\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n areDatesEqual,\n formatDatePickerRange,\n offsetEndOfDay,\n offsetStartOfDay,\n} from \"../../utils\";\nimport { differenceInDays, subDays } from \"date-fns\";\nimport { usePagination, useScreen } from \"@orderly.network/ui\";\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\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<API.Liquidation>(\n generateKeyFun(props),\n {\n initialSize: 1,\n formatter: (data) => data,\n revalidateOnFocus: true,\n }\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?.map((item: any) => item.rows)?.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 \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 { useLiquidationScript } from \"./liquidation.script\";\nimport { Liquidation, MobileLiquidation } from \"./liquidation.ui\";\n\nexport type LiquidationProps = {\n symbol?: string;\n enableLoadMore?: boolean;\n}\n\nexport const LiquidationWidget = (props: LiquidationProps) => {\n const state = useLiquidationScript(props);\n return (<Liquidation {...state} />);\n};\n\nexport const MobileLiquidationWidget = (props: LiquidationProps & {\n classNames?: {\n root?: string;\n content?: string;\n cell?: string;\n };\n }) => {\n\n const { classNames, ...rest} = props;\n const state = useLiquidationScript(rest);\n return (<MobileLiquidation classNames={classNames} {...state} />);\n};\n"]}
|