@orderly.network/ui-positions 2.0.0 → 2.0.1-alpha.0
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 -29
- package/dist/index.d.ts +7 -29
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/closeButton.tsx","../src/components/positionRowContext.tsx","../src/providers/symbolProvider.tsx","../src/components/positions.ui.tsx","../src/components/useColumn.tsx","../src/components/tpsl/tpsl.ui.tsx","../src/components/tpsl/pnlInput/pnlInput.ui.tsx","../src/components/tpsl/pnlInput/useBuilder.script.ts","../src/components/tpsl/pnlInput/pnlInput.widget.tsx","../src/components/listElement.tsx","../src/components/priceInput.tsx","../src/components/quantityInput.tsx","../src/components/shareButton/shareButton.ui.tsx","../src/components/shareButton/shareButton.script.tsx","../src/components/shareButton/shareButton.widget.tsx","../src/components/triggerPrice.tsx","../src/components/usePositionsBuilder.script.ts","../src/components/positions.widget.tsx","../src/components/tpsl/useTPSL.script.ts","../src/components/tpsl/tpsl.widget.tsx","../src/components/tpsl/dialog/tpslDialog.ui.tsx","../src/components/tpsl/dialog/tpslDialog.script.ts","../src/components/tpsl/dialog/tpslDialog.widget.tsx"],"names":["registerSimpleDialog","Button","Popover","toast","Text","CloseIcon","Flex","Divider","Badge","OrderSide","OrderType","createContext","useContext","useEffect","useMemo","useState","useOrderEntry","useSymbolsInfo","jsx","PositionsRowContext","usePositionsRowContext","PositionsRowProvider","props","quantity","setQuantity","price","setPrice","side","setSide","type","setType","config","symbol","curSymbolInfo","quoteDp","baseDp","helper","onSubmit","submitting","updateOrderType","closeOrderData","position","data","onUpdateQuantity","value","newValues","onUpdatePrice","postOrder","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","commify","commifyOptional","Decimal","Fragment","jsxs","CloseButton","open","setOpen","base","quote","onConfirm","res","error","onClose","disabled","MarketCloseConfirm","LimitConfirmDialog","e","ConfirmHeader","ConfirmFooter","onCancel","OrderDetail","order","DataTable","useRef","Box","Grid","Input","Slider","textVariants","cn","inputFormatter","Checkbox","CaretDownIcon","SimpleDropdownMenu","useLocalStorage","usePNLInputBuilder","values","mode","setMode","key","modes","percentageSuffix","options","dp","PNLInput","onModeChange","onValueChange","quote_db","PNLMenus","item","PnlInputWidget","testId","rest","state","TPSL","TPSL_OrderEntity","onComplete","TPSLQuantity","TPSLPrice","isPosition","inputRef","setTPSL","qty","onPnLChange","PriceInput","TPSLButton","PositionTPSLConfirm","tpPrice","slPrice","textClassName","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuRoot","DropdownMenuTrigger","updatePriceChange","vent","PopoverRoot","PopoverContent","PopoverTrigger","QuantityInput","sliderValue","setSliderValue","handleClick","event","resetQuantity","percent","Buttons","index","renderQuantity","record","renderQuantityInput","renderPriceInput","modal","ShareIcon","SharePnLDialogId","ShareButton","useReferralInfo","useSymbolLeverage","useShareButtonScript","sharePnLConfig","getFirstRefCode","refCode","leverage","ShareButtonWidget","AlgoOrderType","utils","Tooltip","TriggerPrice","stopLossPrice","takeProfitPrice","tpslOrder","TPSLTriggerPrice","TriggerPriceItem","entryPrice","orderSide","orderType","pnl","direction","msgs","child","children","content","useColumn","pnlNotionalDecimalPrecision","r1","r2","sortOrder","_","Positions","column","usePositionStream","usePositionsBuilder","info","isLoading","PositionsWidget","useTPSLOrder","AlgoOrderRootType","useTPSLBuilder","isEditing","submit","setValue","validate","errors","setOrderPrice","name","setPnL","maxQty","dirty","diff","tp","o","sl","valid","isConfirm","TPSLWidget","SimpleDialog","TPSLDialog","needConfirm","useTPSLEditorBuilder","setNeedConfirm","TPSLEditorWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/closeButton\";\n\nexport { PositionsWidget } from \"./components/positions.widget\";\nexport { TPSLWidget } from \"./components/tpsl/tpsl.widget\";\nexport { TPSLEditorWidget } from \"./components/tpsl/dialog/tpslDialog.widget\";\nexport { PositionTPSLConfirm } from \"./components/tpsl/tpsl.ui\";\nexport type { PositionsProps } from \"./types/types\";\n\nexport const MarketCloseConfirmID = \"MarketCloseConfirmID\";\nregisterSimpleDialog(MarketCloseConfirmID, MarketCloseConfirm, {\n size: \"md\",\n closable: false,\n});\n","import {\n Button,\n Popover,\n toast,\n Text,\n CloseIcon,\n Flex,\n Box,\n Divider,\n cn,\n NumeralProps,\n Badge,\n} from \"@orderly.network/ui\";\nimport { usePositionsRowContext } from \"./positionRowContext\";\nimport { 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\";\n\nexport const CloseButton = () => {\n const [open, setOpen] = useState(false);\n const { onSubmit, price, quantity, closeOrderData, type, submitting, quoteDp } =\n usePositionsRowContext();\n\n const { base, quote } = useSymbolContext();\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 );\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 return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n contentProps={{\n className: \"oui-w-[360px] oui-px-5 oui-rounded-xl\",\n }}\n content={\n type === OrderType.MARKET ? (\n <MarketCloseConfirm\n base={base}\n quantity={quantity}\n onClose={onClose}\n onConfirm={onConfirm}\n submitting={submitting}\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 />\n )\n }\n >\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n }}\n >\n Close\n </Button>\n </Popover>\n );\n};\n\nexport const ConfirmHeader: FC<{\n onClose: () => void;\n title: string;\n}> = (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 <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 </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 <Button\n id=\"oui-positions-confirm-footer-confirm-button\"\n onClick={onConfirm}\n fullWidth\n loading={submitting}\n size=\"md\"\n >\n Confirm\n </Button>\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\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>Total</Text>\n <Text.formatted\n intensity={98}\n suffix={<Text intensity={54}>USDC</Text>}\n >\n {new Decimal(price).mul(quantity).toFixed(quoteDp, Decimal.ROUND_DOWN)}\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}> = (props) => {\n console.log(\"props\", props);\n \n const onCancel = () => {\n const func = props?.onClose ?? props.close;\n console.log(\"xxxxxxxxxxx func is\", func);\n func?.();\n };\n return (\n <Flex direction={\"column\"}>\n <ConfirmHeader onClose={onCancel} title=\"Market Close\" />\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}> = (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 onClose={onCancel} title=\"Limit close\" />\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=\"neutural\" 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\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 { useOrderEntry, useSymbolsInfo } from \"@orderly.network/hooks\";\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}\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 [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 \n\n const { helper, onSubmit, submitting } = useOrderEntry(\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 const postOrder = () => {\n return onSubmit(closeOrderData);\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 }}\n >\n {props.children}\n </PositionsRowContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, createContext, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@orderly.network/hooks\";\n\ninterface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n base: string;\n quote: string;\n symbol: string;\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 base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n symbol: props.symbol,\n }}\n >\n {props.children}\n </SymbolContext.Provider>\n );\n};\n","import { DataTable } from \"@orderly.network/ui\";\nimport { useColumn } from \"./useColumn\";\nimport { API } from \"@orderly.network/types\";\nimport { PositionsBuilderState } from \"./usePositionsBuilder.script\";\nimport { PositionsRowProvider } from \"./positionRowContext\";\nimport { SymbolProvider } from \"../providers/symbolProvider\";\nimport { PositionsProps } from \"../types/types\";\n\nexport const Positions = (\n props: PositionsBuilderState & PositionsProps\n) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n const column = useColumn({\n pnlNotionalDecimalPrecision,\n sharePnLConfig,\n });\n return (\n <div>\n <DataTable<API.PositionTPSLExt>\n loading={props.isLoading}\n id=\"oui-desktop-positions-content\"\n classNames={{\n header: \"oui-text-base-contrast-36\",\n body: \"oui-text-base-contrast-80\",\n }}\n columns={column}\n bordered\n dataSource={props.dataSource}\n generatedRowKey={(record) => record.symbol}\n renderRowContainer={(record, index, children) => {\n return (\n <SymbolProvider symbol={record.symbol}>\n <PositionsRowProvider position={record}>\n {children}\n </PositionsRowProvider>\n </SymbolProvider>\n );\n }}\n />\n </div>\n );\n};\n","import { Column, Flex, Text } from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport { TPSLButton } from \"./tpsl/tpsl.ui\";\nimport {\n renderPriceInput,\n renderQuantity,\n renderQuantityInput,\n} from \"./listElement\";\nimport { CloseButton } from \"./closeButton\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { SharePnLConfig } from \"@orderly.network/ui-share\";\nimport { ShareButtonWidget } from \"./shareButton\";\nimport { API } from \"@orderly.network/types\";\nimport { TriggerPrice } from \"./triggerPrice\";\n\nexport const useColumn = (props: {\n pnlNotionalDecimalPrecision?: number;\n sharePnLConfig?: SharePnLConfig;\n}) => {\n const { pnlNotionalDecimalPrecision, sharePnLConfig } = props;\n const column = useMemo<Column<API.PositionTPSLExt>[]>(\n () => [\n {\n title: \"Instrument\",\n dataIndex: \"symbol\",\n fixed: \"left\",\n width: 120,\n onSort: (r1, r2, sortOrder) => {\n if (sortOrder === \"asc\") {\n return r1.symbol.localeCompare(r2.symbol);\n }\n return r2.symbol.localeCompare(r1.symbol);\n },\n render: (value: string) => (\n <Text.formatted\n rule={\"symbol\"}\n onClick={(e) => {\n // props.onSymbolChange?.({ symbol: value } as API.Symbol);\n // e.stopPropagation();\n // e.preventDefault();\n }}\n >\n {value}\n </Text.formatted>\n ),\n },\n {\n title: \"Quantity\",\n dataIndex: \"position_qty\",\n onSort: true,\n width: 100,\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=\"orderly-font-semibold\"\n // tick=\"base_dp\"\n // >\n // {value}\n // </NumeralWithCtx>\n // ),\n },\n {\n title: \"Avg. open\",\n className: \"orderly-h-[48px]\",\n width: 120,\n onSort: true,\n dataIndex: \"average_open_price\",\n render: (value: string, record: any) => {\n return (\n <Text.numeral dp={record?.symbolInfo?.(\"quote_dp\")} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: \"Mark price\",\n dataIndex: \"mark_price\",\n width: 120,\n onSort: true,\n className: \"orderly-h-[48px]\",\n\n render: (value: string, record: any) => {\n return (\n <Text.numeral dp={record?.symbolInfo?.(\"quote_dp\")} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: \"Liq. price\",\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 <Text.numeral dp={record?.symbolInfo?.(\"quote_dp\")} rm={Decimal.ROUND_DOWN}>\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: \"Unreal. PnL\",\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: (\n // <UnrealizedPnLPopoverCard\n // unPnlPriceBasis={props.unPnlPriceBasis}\n // setUnPnlPriceBasic={props.setUnPnlPriceBasic}\n // />\n // ),\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=\"orderly-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=\"orderly-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 />\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: \"Est. total\",\n dataIndex: \"notional\",\n className: \"orderly-h-[48px]\",\n width: 100,\n onSort: true,\n // render: (value: string) => (\n // <Numeral\n // precision={pnlNotionalDecimalPrecision}\n // className=\"orderly-font-semibold\"\n // >\n // {value}\n // </Numeral>\n // ),\n },\n {\n title: \"Margin\",\n dataIndex: \"mm\",\n onSort: true,\n width: 100,\n rule: \"price\",\n // render: (value: string) => (\n // <Numeral className=\"orderly-font-semibold\">{value}</Numeral>\n // ),\n // hint: (\n // <div>\n // <span>The minimum equity to keep your position. </span>\n // <Divider className=\"orderly-py-2 orderly-border-white/10\" />\n // <span>Margin = Position size * Mark price * MMR</span>\n // </div>\n // ),\n // hintClassName: \"orderly-p-2\",\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 <div className=\"oui-flex oui-space-x-2\">\n <CloseButton />\n <TPSLButton />\n </div>\n );\n },\n },\n ],\n [pnlNotionalDecimalPrecision, sharePnLConfig]\n );\n\n return column;\n};\n","import { useRef } from \"react\";\nimport {\n Badge,\n Box,\n Button,\n Divider,\n Flex,\n Grid,\n Input,\n Slider,\n Text,\n textVariants,\n cn,\n inputFormatter,\n Checkbox,\n} from \"@orderly.network/ui\";\nimport { PnlInputWidget } from \"./pnlInput/pnlInput.widget\";\nimport { TPSLBuilderState } from \"./useTPSL.script\";\n\nimport { PNL_Values } from \"./pnlInput/useBuilder.script\";\n\nexport type TPSLProps = {\n onCancel?: () => void;\n onComplete?: () => void;\n};\n\nexport const TPSL = (props: TPSLBuilderState & TPSLProps) => {\n const { TPSL_OrderEntity, symbolInfo, onCancel, onComplete } = props;\n return (\n <div id=\"orderly-tp_sl-order-edit-content\">\n {!props.isEditing && (\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={(props.orderQuantity ?? props.maxQty) as number}\n tick={symbolInfo(\"base_tick\")}\n onQuantityChange={props.setQuantity}\n quote=\"BTC\"\n />\n )}\n\n <Divider my={4} intensity={8} />\n <TPSLPrice\n sl_pnl={TPSL_OrderEntity.sl_pnl}\n tp_pnl={TPSL_OrderEntity.tp_pnl}\n quote={symbolInfo(\"quote\")}\n quote_db={symbolInfo(\"quote_dp\")}\n onPriceChange={props.setOrderPrice}\n onPnLChange={props.setPnL}\n tp_values={{\n PnL: `${TPSL_OrderEntity.tp_pnl ?? \"\"}`,\n Offset: `${TPSL_OrderEntity.tp_offset ?? \"\"}`,\n \"Offset%\": `${TPSL_OrderEntity.tp_offset_percentage ?? \"\"}`,\n }}\n sl_values={{\n PnL: `${TPSL_OrderEntity.sl_pnl ?? \"\"}`,\n Offset: `${TPSL_OrderEntity.sl_offset ?? \"\"}`,\n \"Offset%\": `${TPSL_OrderEntity.sl_offset_percentage ?? \"\"}`,\n }}\n tp_trigger_price={TPSL_OrderEntity.tp_trigger_price ?? \"\"}\n sl_trigger_price={TPSL_OrderEntity.sl_trigger_price ?? \"\"}\n />\n <Grid cols={2} gap={3} mt={4}>\n <Button\n size={\"md\"}\n color={\"secondary\"}\n data-testid={\"tpsl-cancel\"}\n onClick={() => {\n onCancel?.();\n }}\n >\n Cancel\n </Button>\n <Button\n size={\"md\"}\n data-testid={\"tpsl-confirm\"}\n disabled={!props.valid}\n onClick={() => {\n // if (props.needConfirm) {\n // //show confirm dialog\n // } else {\n props.onSubmit();\n // }\n }}\n >\n Confirm\n </Button>\n </Grid>\n </div>\n );\n};\n\n// ------------- Quantity input start------------\nconst TPSLQuantity = (props: {\n maxQty: number;\n tick: number;\n quote: string;\n onQuantityChange?: (value: number | string) => void;\n quantity: number;\n setOrderValue?: (key: string, value: number | string) => void;\n}) => {\n const isPosition = props.quantity === props.maxQty;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const setTPSL = () => {\n props.onQuantityChange?.(0);\n inputRef.current?.focus();\n\n setTimeout(() => {\n inputRef.current?.setSelectionRange(0, 1);\n }, 0);\n };\n\n return (\n <>\n <Flex gap={2}>\n <div className={\"oui-flex-1\"}>\n <Input\n ref={inputRef}\n prefix={\"Quantity\"}\n size={\"md\"}\n align=\"right\"\n value={isPosition ? \"\" : props.quantity}\n autoComplete=\"off\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n ]}\n onValueChange={(value) => {\n props.onQuantityChange?.(value);\n }}\n suffix={\n isPosition ? (\n <button\n className=\"oui-text-2xs oui-text-base-contrast-54 oui-px-3\"\n onClick={() => {\n setTPSL();\n }}\n >\n Entire position\n </button>\n ) : (\n <span className=\"oui-text-2xs oui-text-base-contrast-54 oui-px-3\">\n {props.quote}\n </span>\n )\n }\n />\n </div>\n <Button\n onClick={() => {\n const qty = isPosition ? 0 : props.maxQty;\n props.onQuantityChange?.(qty);\n if (qty === 0) {\n setTPSL();\n }\n }}\n variant={\"outlined\"}\n size={\"md\"}\n className={cn(\n isPosition\n ? \"oui-border-primary-light oui-text-primary-light hover:oui-bg-primary-light/20\"\n : \"oui-border-line-12 oui-text-base-contrast-54 hover:oui-bg-base-5\"\n )}\n >\n Position\n </Button>\n </Flex>\n <Flex mt={2} itemAlign={\"center\"} height={\"15px\"}>\n <Slider.signle\n markCount={5}\n color=\"primaryLight\"\n max={props.maxQty}\n min={0}\n step={props.tick}\n value={props.quantity}\n onValueChange={(value) => {\n props.onQuantityChange?.(value);\n }}\n />\n </Flex>\n <Flex justify={\"between\"}>\n <Text.numeral rule={\"percentages\"} color={\"primaryLight\"} size={\"2xs\"}>\n 0\n </Text.numeral>\n <Flex itemAlign={\"center\"} gap={1}>\n <button\n className={\"oui-leading-none\"}\n style={{ lineHeight: 0 }}\n onClick={() => {\n console.log(\"maxQty\", props.maxQty);\n props.onQuantityChange?.(props.maxQty);\n }}\n >\n <Text color={\"primaryLight\"} size={\"2xs\"}>\n Max\n </Text>\n </button>\n <Text.numeral\n rule={\"price\"}\n size={\"2xs\"}\n intensity={54}\n tick={props.tick}\n >\n {props.maxQty}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n};\n// ------------- Quantity input end------------\n\n// ------------ TP/SL Price and PNL input start------------\nconst TPSLPrice = (props: {\n tp_pnl?: number;\n sl_pnl?: number;\n quote: string;\n quote_db?: number;\n onPriceChange: TPSLBuilderState[\"setOrderPrice\"];\n onPnLChange: TPSLBuilderState[\"setPnL\"];\n tp_values: PNL_Values;\n sl_values: PNL_Values;\n tp_trigger_price?: number | string;\n sl_trigger_price?: number | string;\n}) => {\n const onPnLChange = (key: string, value: number | string) => {\n // console.log(key, value);\n props.onPnLChange(key, value);\n };\n return (\n <>\n <div>\n <Flex justify={\"between\"}>\n <Text size={\"sm\"}>Task profit</Text>\n <Flex>\n <Text size={\"2xs\"} intensity={36}>\n Est. PNL:\n </Text>\n <Text.numeral size={\"2xs\"} coloring showIdentifier>\n {props.tp_pnl ?? \"-\"}\n </Text.numeral>\n </Flex>\n </Flex>\n <Grid cols={2} gap={2} pt={2} pb={4}>\n <PriceInput\n type={\"TP\"}\n value={props.tp_trigger_price}\n onValueChange={(value) => {\n props.onPriceChange(\"tp_trigger_price\", value);\n }}\n />\n <PnlInputWidget\n type={\"TP\"}\n onChange={onPnLChange}\n quote={props.quote}\n quote_dp={props.quote_db}\n values={props.tp_values}\n />\n </Grid>\n </div>\n <div>\n <Flex justify={\"between\"}>\n <Text size={\"sm\"}>Stop loss</Text>\n <Flex>\n <Text size={\"2xs\"} intensity={36}>\n Est. PNL:\n </Text>\n <Text.numeral size={\"2xs\"} coloring showIdentifier>\n {props.sl_pnl ?? \"-\"}\n </Text.numeral>\n </Flex>\n </Flex>\n <Grid cols={2} gap={2} pt={2} pb={4}>\n <PriceInput\n type={\"SL\"}\n value={props.sl_trigger_price}\n onValueChange={(value) => {\n props.onPriceChange(\"sl_trigger_price\", value);\n }}\n />\n <PnlInputWidget\n type={\"SL\"}\n onChange={onPnLChange}\n quote={props.quote}\n quote_dp={props.quote_db}\n values={props.sl_values}\n />\n </Grid>\n </div>\n </>\n );\n};\n// ------------ TP/SL Price and PNL input end------------\n// ------------ TP/SL Price input start------------\nconst PriceInput = (props: {\n type: string;\n value?: string | number;\n onValueChange: (value: string) => void;\n}) => {\n return (\n <Input\n prefix={`${props.type} price`}\n size={\"md\"}\n placeholder={\"USDC\"}\n align={\"right\"}\n autoComplete={\"off\"}\n value={props.value}\n onValueChange={props.onValueChange}\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n ]}\n />\n );\n};\n// ------------ TP/SL Price input end------------\n\nexport const TPSLButton = () => {\n return (\n <Button variant=\"outlined\" size=\"sm\" color=\"secondary\">\n TP/SL\n </Button>\n );\n};\n\nexport type PositionTPSLConfirmProps = {\n symbol: string;\n isPosition: boolean;\n qty: number;\n tpPrice?: number;\n slPrice?: number;\n // type\n};\n\n// ------------ Position TP/SL Confirm dialog start------------\nexport const PositionTPSLConfirm = (props: PositionTPSLConfirmProps) => {\n const { symbol, tpPrice, slPrice, qty } = props;\n const textClassName = textVariants({\n size: \"xs\",\n intensity: 54,\n });\n return (\n <>\n <Flex pt={5} pb={4}>\n <Box grow>\n <Text.formatted rule={\"symbol\"} size=\"base\" showIcon as=\"div\">\n {symbol}\n </Text.formatted>\n </Box>\n <Flex gap={1}>\n <Badge size=\"xs\" color={\"primaryLight\"}>\n Position\n </Badge>\n <Badge size=\"xs\" color=\"neutural\">\n TP/SL\n </Badge>\n </Flex>\n </Flex>\n <Divider />\n <Flex\n direction={\"column\"}\n itemAlign={\"stretch\"}\n gapY={1}\n pt={4}\n pb={5}\n className={textClassName}\n >\n <Flex>\n <Box grow>Qty.</Box>\n\n <div>Entire position</div>\n </Flex>\n {typeof tpPrice === \"number\" ? (\n <Flex>\n <Box grow>TP Price</Box>\n <Text.numeral\n as={\"div\"}\n coloring\n unit={\"USDC\"}\n size={\"sm\"}\n unitClassName={\"oui-text-base-contrast-54 oui-ml-1\"}\n >\n 52.32\n </Text.numeral>\n </Flex>\n ) : null}\n\n <Flex>\n <Box grow>SL Price</Box>\n <Text.numeral\n as={\"div\"}\n coloring\n unit={\"USDC\"}\n size={\"sm\"}\n unitClassName={\"oui-text-base-contrast-54 oui-ml-1\"}\n >\n 52.32\n </Text.numeral>\n </Flex>\n <Flex>\n <Box grow>Price</Box>\n <div>Market</div>\n </Flex>\n </Flex>\n <Box py={2}>\n <Flex gap={1}>\n <Checkbox id=\"disabledConfirm\" />\n <label\n htmlFor=\"disabledConfirm\"\n className={textVariants({\n size: \"xs\",\n intensity: 54,\n className: \"oui-ml-1\",\n })}\n >\n Disable order confirmation\n </label>\n </Flex>\n </Box>\n </>\n );\n};\n\n//------------- Position TP/SL Confirm dialog end------------\n","import {\n CaretDownIcon,\n Input,\n MenuItem,\n SimpleDropdownMenu,\n} from \"@orderly.network/ui\";\nimport { PNLInputState, PnLMode } from \"./useBuilder.script\";\n\nexport type PNLInputProps = PNLInputState & { testId?: string; quote: string };\n\nexport const PNLInput = (props: PNLInputProps) => {\n const { mode, modes, onModeChange, onValueChange, quote, quote_db, value } =\n props;\n return (\n <Input\n prefix={mode}\n size={\"md\"}\n placeholder={mode === PnLMode.PERCENTAGE ? \"%\" : quote}\n align={\"right\"}\n value={value}\n data-testid={props.testId}\n autoComplete={\"off\"}\n onValueChange={onValueChange}\n formatters={[props.formatter({ dp: quote_db, mode })]}\n // value={props.value}\n suffix={\n <PNLMenus\n modes={modes}\n onModeChange={(item) => onModeChange(item.value as PnLMode)}\n />\n }\n />\n );\n};\n\nconst PNLMenus = (props: {\n modes: MenuItem[];\n onModeChange: (value: MenuItem) => void;\n}) => {\n return (\n <SimpleDropdownMenu\n menu={props.modes}\n align={\"end\"}\n size={\"xs\"}\n className={\"oui-min-w-[80px]\"}\n onSelect={(item) => props.onModeChange(item as MenuItem)}\n >\n <button className={\"oui-p-2\"}>\n <CaretDownIcon size={12} color={\"white\"} />\n </button>\n </SimpleDropdownMenu>\n );\n};\n","import { useMemo, useRef } from \"react\";\nimport { useLocalStorage } from \"@orderly.network/hooks\";\nimport { MenuItem } from \"@orderly.network/ui\";\nimport { commify, Decimal } from \"@orderly.network/utils\";\nimport type {\n InputFormatter,\n InputFormatterOptions,\n} from \"@orderly.network/ui\";\n\nexport enum PnLMode {\n PnL = \"PnL\",\n OFFSET = \"Offset\",\n PERCENTAGE = \"Offset%\",\n}\n\nexport type PNL_Values = {\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n};\n\nexport type BuilderProps = {\n type: \"TP\" | \"SL\";\n\n quote_dp?: number;\n onChange: (key: string, value: number | string) => void;\n\n values: PNL_Values;\n};\n\nexport const usePNLInputBuilder = (props: BuilderProps) => {\n const { type, values } = props;\n const [mode, setMode] = useLocalStorage<PnLMode>(\n \"TP/SL_Mode\",\n PnLMode.PERCENTAGE\n );\n\n const key = useMemo(() => {\n switch (mode) {\n case PnLMode.OFFSET:\n return `${type.toLowerCase()}_offset`;\n case PnLMode.PERCENTAGE:\n return `${type.toLowerCase()}_offset_percentage`;\n default:\n return `${type.toLowerCase()}_pnl`;\n }\n }, [mode]);\n\n const value = useMemo(() => {\n return values[mode as keyof PNL_Values];\n }, [values]);\n\n const modes = useMemo<MenuItem[]>(() => {\n return [\n { label: \"PnL\", value: PnLMode.PnL, testId: `${PnLMode.PnL}_menu_item` },\n {\n label: \"Offset\",\n value: PnLMode.OFFSET,\n testId: `${PnLMode.OFFSET}_mneu_item`,\n },\n {\n label: \"Offset%\",\n value: PnLMode.PERCENTAGE,\n testId: `${PnLMode.PERCENTAGE}_menu_item`,\n },\n ];\n }, []);\n\n const percentageSuffix = useRef<string>(\"\");\n\n const onValueChange = (value: string) => {\n props.onChange(key, value);\n };\n\n const formatter = (options: {\n dp?: number;\n mode: PnLMode;\n }): InputFormatter => {\n const { dp = 2 } = options;\n return {\n onRenderBefore: (\n value: string | number,\n options: InputFormatterOptions\n ) => {\n if (value === \"\") return value;\n\n if (mode === PnLMode.PnL || mode === PnLMode.OFFSET) {\n return commify(value);\n }\n\n if (mode === PnLMode.PERCENTAGE) {\n return `${new Decimal(value).mul(100).todp(2, 4).toString()}${\n percentageSuffix.current\n }`;\n // return (Number(value) * 100).toFixed(2);\n }\n\n return `${value}`;\n },\n onSendBefore: (value: string) => {\n if (mode === PnLMode.PERCENTAGE) {\n if (value !== \"\") {\n percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n value = new Decimal(value).div(100).todp(4, 4).toString();\n }\n } else {\n // value = todpIfNeed(value, quote_dp);\n }\n return value;\n },\n };\n };\n\n return {\n mode,\n modes,\n formatter,\n onModeChange: (mode: PnLMode) => {\n setMode(mode);\n },\n value,\n onValueChange,\n quote_db: props.quote_dp,\n };\n};\n\nexport type PNLInputState = ReturnType<typeof usePNLInputBuilder>;\n","import { PNLInput } from \"./pnlInput.ui\";\nimport { BuilderProps, usePNLInputBuilder } from \"./useBuilder.script\";\n\nexport const PnlInputWidget = (\n props: BuilderProps & {\n testId?: string;\n quote: string;\n }\n) => {\n const { testId, quote, ...rest } = props;\n const state = usePNLInputBuilder(rest);\n return <PNLInput {...state} testId={testId} quote={quote} />;\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\";\n\nexport const renderQuantity = (value: number, record: any) => {\n return (\n <Text.numeral dp={record?.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 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\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 }}\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 />\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-w-[96px] oui-min-w-[96px]\"\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\";\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 } = 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 setQuantity(`${props.value * (percent / 100)}`);\n };\n\n return (\n <PopoverRoot>\n <PopoverTrigger>\n <Input\n size=\"sm\"\n onFocus={() => {\n setOpen(true);\n }}\n formatters={[\n inputFormatter.numberFormatter,\n ...(baseDp ? [inputFormatter.dpFormatter(baseDp)] : []),\n ]}\n value={quantity}\n onValueChange={(e) => {\n setQuantity(e);\n if (type === OrderType.LIMIT) {\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 return (\n <button\n type=\"button\"\n onClick={(e: any) => {\n e.stopPropagation();\n modal.show(SharePnLDialogId, {\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\" size={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}) => {\n const { sharePnLConfig, position } = 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 position,\n refCode,\n leverage,\n sharePnLConfig,\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 & Partial<Omit<PositionsProps, 'position' | 'refCode' | 'leverage'>>;\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 precision={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 precision={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 { usePositionStream } from \"@orderly.network/hooks\";\n\nexport const usePositionsBuilder = () => {\n const [data, info, { isLoading }] = usePositionStream();\n return {\n dataSource: data?.rows,\n isLoading,\n };\n};\n\nexport type PositionsBuilderState = ReturnType<typeof usePositionsBuilder>;\n","import { PositionsProps } from \"../types/types\";\nimport { Positions } from \"./positions.ui\";\nimport { usePositionsBuilder } from \"./usePositionsBuilder.script\";\n\nexport const PositionsWidget = (props: PositionsProps) => {\n const state = usePositionsBuilder();\n return (\n <Positions\n {...state}\n pnlNotionalDecimalPrecision={props.pnlNotionalDecimalPrecision}\n sharePnLConfig={props.sharePnLConfig}\n />\n );\n};\n","import {\n useLocalStorage,\n useSymbolsInfo,\n useTPSLOrder,\n} from \"@orderly.network/hooks\";\nimport { AlgoOrderRootType, AlgoOrderType, API } from \"@orderly.network/types\";\nimport { useMemo } from \"react\";\n\nexport type TPSLBuilderOptions = {\n position: API.Position;\n order?: API.AlgoOrder;\n\n /**\n * either show the confirm dialog or not,\n * if the Promise reject or return false, cancel the sumbit action\n */\n onConfirm?: () => Promise<boolean>;\n};\n\nexport const useTPSLBuilder = (options: TPSLBuilderOptions) => {\n const { position, order } = options;\n const isEditing = !!order;\n const symbol = isEditing ? order.symbol : position.symbol;\n const symbolInfo = useSymbolsInfo();\n\n const [tpslOrder, { submit, setValue, validate, errors }] = useTPSLOrder(\n {\n symbol,\n position_qty: position.position_qty,\n average_open_price: position.average_open_price,\n },\n {\n defaultOrder: order,\n }\n );\n\n const setQuantity = (value: number | string) => {\n setValue(\"quantity\", value);\n };\n\n const setOrderPrice = (\n name: \"tp_trigger_price\" | \"sl_trigger_price\",\n value: number | string\n ) => {\n setValue(name, value);\n };\n\n const setPnL = (type: string, value: number | string) => {\n setValue(type, value);\n };\n\n const maxQty = useMemo(() => position.position_qty, [position.position_qty]);\n\n const dirty = useMemo(() => {\n const quantity =\n order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? maxQty\n : order?.quantity;\n\n let diff: number = 0;\n\n if (Number(tpslOrder.quantity) !== quantity) {\n diff = 1;\n }\n\n if (order) {\n const tp = order.child_orders.find(\n (o) => o.algo_type === AlgoOrderType.TAKE_PROFIT\n );\n const sl = order.child_orders.find(\n (o) => o.algo_type === AlgoOrderType.STOP_LOSS\n );\n\n if (\n tp?.trigger_price !== Number(tpslOrder.tp_trigger_price) &&\n typeof typeof tpslOrder.tp_trigger_price !== \"undefined\"\n ) {\n // return true;\n diff = 2;\n }\n\n if (\n sl?.trigger_price !== Number(tpslOrder.sl_trigger_price) &&\n typeof tpslOrder.sl_trigger_price !== \"undefined\"\n ) {\n diff = 3;\n }\n }\n\n if (\n diff === 1 &&\n !tpslOrder.tp_trigger_price &&\n !tpslOrder.sl_trigger_price\n ) {\n diff = -1;\n }\n\n return diff;\n }, [\n tpslOrder.tp_trigger_price,\n tpslOrder.sl_trigger_price,\n tpslOrder.quantity,\n order,\n ]);\n\n const valid = useMemo(() => {\n if (\n order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL &&\n Number(tpslOrder.quantity) < maxQty &&\n !tpslOrder.tp_trigger_price &&\n !tpslOrder.sl_trigger_price\n ) {\n return false;\n }\n\n return dirty > 0 && !!tpslOrder.quantity;\n }, [tpslOrder.quantity, maxQty, dirty]);\n\n const onSubmit = async () => {\n console.log(\"submitting\", typeof options.onConfirm);\n\n return Promise.resolve()\n .then(() => {\n if (typeof options.onConfirm !== \"function\") {\n return true;\n }\n return options.onConfirm();\n })\n .then((isConfirm) => {\n if (isConfirm) {\n return submit();\n }\n // return;\n });\n };\n\n return {\n isEditing,\n symbolInfo: symbolInfo[symbol],\n maxQty,\n setQuantity,\n orderQuantity: tpslOrder.quantity,\n isPosition: tpslOrder.quantity === position.position_qty,\n\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n // needConfirm,\n onSubmit,\n valid,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLBuilder>;\n","import { TPSL, TPSLProps } from \"./tpsl.ui\";\nimport { TPSLBuilderOptions, useTPSLBuilder } from \"./useTPSL.script\";\n\nexport type TPSLWidgetProps = {} & TPSLBuilderOptions & TPSLProps;\n\nexport const TPSLWidget = (props: TPSLWidgetProps) => {\n const { onCancel, ...rest } = props;\n const state = useTPSLBuilder(rest);\n return <TPSL {...state} onCancel={onCancel} />;\n};\n","import { modal, SimpleDialog } from \"@orderly.network/ui\";\nimport { TPSLWidget, TPSLWidgetProps } from \"../tpsl.widget\";\nimport { TPSLEditorBuilderState } from \"./tpslDialog.script\";\nimport { PositionTPSLConfirm } from \"../tpsl.ui\";\n\ntype Props = {\n // onConfirm: () => Promise<boolean>;\n} & TPSLWidgetProps &\n TPSLEditorBuilderState;\n\nexport const TPSLDialog = (props: Props) => {\n const { open, needConfirm, ...rest } = props;\n // const\n return (\n <>\n <SimpleDialog open={open}>\n <TPSLWidget\n {...rest}\n onConfirm={() => {\n console.log(\"onConfirm ********\", needConfirm);\n\n if (!needConfirm) {\n return Promise.resolve(true);\n }\n\n return modal.confirm({\n content: (\n <PositionTPSLConfirm\n symbol={\"PERP_ETH_USDC\"}\n isPosition={false}\n qty={0}\n />\n ),\n });\n }}\n />\n </SimpleDialog>\n {/* <SimpleDialog>\n <PositionTPSLConfirm\n symbol={\"PERP_ETH_USDC\"}\n isPosition={false}\n qty={0}\n />\n </SimpleDialog> */}\n </>\n );\n};\n","import { useLocalStorage } from \"@orderly.network/hooks\";\nimport { useState } from \"react\";\n\nexport const useTPSLEditorBuilder = (props?: {\n // confirmContent:\n}) => {\n const [needConfirm, setNeedConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true\n );\n\n const [open, setOpen] = useState(false);\n\n return {\n open,\n needConfirm,\n };\n};\n\nexport type TPSLEditorBuilderState = ReturnType<typeof useTPSLEditorBuilder>;\n","import { TPSLDialog } from \"./tpslDialog.ui\";\nimport { useTPSLEditorBuilder } from \"./tpslDialog.script\";\nimport { TPSLWidgetProps } from \"../tpsl.widget\";\n\nexport const TPSLEditorWidget = (props: TPSLWidgetProps) => {\n const state = useTPSLEditorBuilder();\n return <TPSLDialog {...props} {...state} />;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/desktop/closeButton.tsx","../src/components/desktop/positionRowContext.tsx","../src/providers/symbolProvider.tsx","../src/components/positions.ui.tsx","../src/components/desktop/useColumn.tsx","../src/components/desktop/listElement.tsx","../src/components/desktop/priceInput.tsx","../src/components/desktop/quantityInput.tsx","../src/components/desktop/shareButton/shareButton.ui.tsx","../src/components/desktop/shareButton/shareButton.script.tsx","../src/components/desktop/shareButton/shareButton.widget.tsx","../src/components/desktop/triggerPrice.tsx","../src/components/desktop/components.tsx","../src/components/desktop/unrealPnLHover.tsx","../src/components/desktop/numeralWithCtx.tsx","../src/components/mobile/positionCell/positionCell.ui.tsx","../src/components/mobile/positionCell/items.tsx","../src/components/mobile/limitCloseBtn/limitCloseBtn.ui.tsx","../src/components/mobile/limitCloseBtn/limitCloseBtn.script.tsx","../src/components/mobile/limitCloseBtn/limitCloseBtn.widget.tsx","../src/components/mobile/marketCloseBtn/marketCloseBtn.ui.tsx","../src/components/mobile/marketCloseBtn/marketCloseBtn.script.tsx","../src/components/mobile/marketCloseBtn/marketCloseBtn.widget.tsx","../src/components/mobile/tpSLBtn/tpSLBtn.ui.tsx","../src/components/mobile/tpSLBtn/tpSLBtn.script.tsx","../src/components/mobile/tpSLBtn/tpSLBtn.widget.tsx","../src/components/mobile/positionCell/positionCell.script.tsx","../src/components/mobile/positionCell/positionCell.widget.tsx","../src/components/usePositionsBuilder.script.ts","../src/components/positions.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","commify","commifyOptional","Decimal","SymbolContext","useSymbolContext","SymbolProvider","symbolInfo","Fragment","jsxs","CloseButton","open","setOpen","base","quote","onConfirm","res","error","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","useLocalStorage","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","AuthGuardTableView","Positions","pagination","column","MobilePositions","usePositionStream","useDataTap","usePagination","usePositionsBuilder","calcMode","includedPendingOrder","onSymbolChange","page","pageSize","setPage","setPageSize","info","isLoading","dataSource","PositionsWidget","MobilePositionsWidget","MarketCloseConfirmID"],"mappings":"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","sourcesContent":["import { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { MarketCloseConfirm } from \"./components/desktop/closeButton\";\n\nexport {\n PositionsWidget,\n MobilePositionsWidget,\n} from \"./components/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","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\";\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 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 );\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}\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 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>Est. Total</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 };\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\";\n\ninterface SymbolContextState {\n base_dp: number;\n quote_dp: number;\n base_tick: number;\n base: string;\n quote: string;\n symbol: string;\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 base: symbolInfo(\"base\"),\n quote: symbolInfo(\"quote\"),\n symbol: props.symbol,\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 { AuthGuardTableView } 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 <AuthGuardTableView<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 />\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 TableColumn,\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: \"Est. total\",\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 TableColumn<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=\"primaryLight\"\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=\"primaryLight\"\n size=\"2xs\"\n >{`${props.sliderValue}%`}</Text>\n <Flex gap={1}>\n <Text size=\"2xs\" color=\"primaryLight\">\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 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 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 { 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 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 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 onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n\n props.updateOrderType(OrderType.MARKET);\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\";\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 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 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 {\n PriceMode,\n useLocalStorage,\n usePositionStream,\n} from \"@orderly.network/hooks\";\nimport { PositionsProps } from \"../types/types\";\nimport { useDataTap } from \"@orderly.network/react-app\";\nimport { PaginationMeta, usePagination } from \"@orderly.network/ui\";\nimport { useMemo } 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 { page, pageSize, setPage, setPageSize } = 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 const pagination = useMemo(\n () =>\n ({\n page,\n pageSize,\n count: dataSource?.length,\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n } as PaginationMeta),\n [page, pageSize, setPage, setPageSize, dataSource]\n );\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"]}
|