@kodiak-finance/orderly-ui-tpsl 2.8.18 → 2.8.19-rc.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/editorPopover.tsx","../src/positionTPSL/tpsl.widget.tsx","../src/positionTPSL/tpsl.ui.tsx","../src/components/orderInfo.tsx","../src/components/pnlInfo.tsx","../src/components/tpslInputRow/tpslInputRow.script.ts","../src/components/tpslInputRow/tpslInputRow.ui.tsx","../src/pnlInput/pnlInput.ui.tsx","../src/pnlInput/useBuilder.script.ts","../src/pnlInput/pnlInput.widget.tsx","../src/components/orderPriceType.tsx","../src/components/tpslInputRow/priceInput.tsx","../src/components/tpslInputRow/tpslInputRow.widget.tsx","../src/components/tpslPostionType/tpslPositionType.script.tsx","../src/components/tpslPostionType/tpslPositionType.ui.tsx","../src/components/tpslPostionType/tpslPostionType.widget.tsx","../src/components/tpslQty.tsx","../src/positionTPSL/useTPSL.script.tsx","../src/positionTPSL/positionTpslConfirm.tsx","../src/editorSheet.tsx","../src/tpslAdvanced/tpslAdvanced.ui.tsx","../src/tpslAdvanced/useTPSLAdvanced.script.ts","../src/tpslAdvanced/tpslAdvanced.widget.tsx","../src/tpslDetail/tpslDetail.widget.tsx","../src/tpslDetail/tpslDetail.script.tsx","../src/tpslDetail/tpslDetailProvider.tsx","../src/tpslDetail/tsplDetail.ui.tsx","../src/tpslDetail/ordersTable.tsx","../src/tpslDetail/useColum.tsx","../src/tpslDetail/components/estPnl.tsx","../src/tpslDetail/components/common.tsx","../src/tpslDetail/components/orderPrice.tsx","../src/tpslDetail/components/qty.tsx","../src/tpslDetail/components/triggerPrice.tsx","../src/tpslDetail/components/type.tsx","../src/tpslDetail/ordersTable.mobile.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.widget.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.script.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.ui.tsx","../src/editBracketOrder/editBracketOrder.widget.tsx","../src/editBracketOrder/editBracketOrder.script.tsx","../src/editBracketOrder/editBracketOrder.ui.tsx"],"names":["useLocalStorage","useTranslation","AlgoOrderRootType","PositionType","Box","Button","modal","registerSimpleDialog","registerSimpleSheet","useOrderEntryFormErrorMsg","OrderSide","OrderType","Flex","Grid","Text","cn","ThrottledButton","ScrollArea","useScreen","useIndexPrice","useMarkPrice","useLeverageBySymbol","TokenIcon","jsx","jsxs","OrderInfo","props","order","symbolLeverage","symbol","markPrice","indexPrice","leverage","currentLeverage","useMemo","Decimal","checkIsNaN","PnlInfo","tp_pnl","sl_pnl","riskRatio","defaultNode","tpDecimal","slDecimal","ratio","useTPSLInputRowScript","Fragment","Trans","Checkbox","getTPSLDirection","useEffect","useState","CaretDownIcon","Input","SimpleDropdownMenu","inputFormatter","useRef","todpIfNeed","usePNLInputBuilder","type","values","mode","setMode","focus","setFocus","t","key","value","modes","percentageSuffix","onValueChange","formatter","options","dp","endStr","PNLInput","onModeChange","quote","quote_dp","pnl","prefix","setPrefix","placeholder","setPlaceholder","color","num","label","item","PNLMenus","PnlInputWidget","testId","rest","state","Select","OrderPriceType","option","displayLabel","PriceInput","TPSLInputRowUI","getErrorMsg","positionType","roi","_roi","_entryPrice","rootOrderPrice","direction","checked","RenderROI","price","className","orderType","TPSLInputRowWidget","useTPSLPositionTypeScript","ExclamationFillIcon","Tooltip","positionTypeKey","TPSLPositionTypeUI","event","TPSLPositionTypeWidget","memo","utils","Slider","TPSLQuantity","maxQty","base_dp","baseTick","quantity","inputRef","sliderValue","setSliderValue","formatQuantity","_qty","onSliderValueChange","qty","slider","errorMsg","e","TPSL","TPSL_OrderEntity","symbolInfo","onCancel","onComplete","status","position","setValues","onClose","isEditing","errors","validated","isMobile","renderQtyInput","err","useMemoizedFn","usePositionStream","useSymbolsInfo","useTPSLOrder","SDKError","toast","Badge","Divider","textVariants","transSymbolformString","TPSLOrderType","tpPrice","slPrice","PositionTPSLConfirm","side","quoteDP","baseDP","_isPositionTPSL","needConfirm","setNeedConfirm","renderPositionType","renderTPSLPrice","isOrderPrice","isEnable","colorType","isPositionTPSL","check","useTPSLBuilder","triggerPrice","withTriggerPrice","prevTPSLType","positions","tpslOrder","submit","deleteOrder","setValue","validate","metaState","isCreateMutating","isUpdateMutating","setQuantity","setOrderPrice","name","setPnL","dirty","diff","tp_trigger_price","sl_trigger_price","tp_order_price","sl_order_price","cancel","onConfirm","res","onSubmit","error","TPSLWidget","TPSLSheetId","TPSLDialogId","PositionTPSLPopover","buttonProps","useModal","PositionTPSLSheet","resolve","hide","updateArgs","TPSLAdvancedUI","formattedOrder","setOrderValue","tpValues","setTpValuse","slValues","setSlValues","prev","ArrowRightIcon","useOrderEntry","isTPSLEnable","useTPSLAdvanced","innerMetaState","setInnerMetaState","helper","i18n","TPSLAdvancedWidget","TPSLAdvancedSheetId","TPSLAdvancedDialogId","findPositionTPSLFromOrders","useOrderStream","OrderStatus","useTPSLDetail","fullPositionOrders","setFullPositionOrders","partialPositionOrders","setPartialPositionOrders","tpslOrders","cancelAlgoOrder","cancelPostionOrdersByTypes","refresh","onCancelOrder","onCancelAllTPSLOrders","showTPSLDialog","dialogId","editTPSLOrder","addTPSLOrder","fullPositionOrder","createContext","useContext","TPSLDetailContext","TPSLDetailProvider","useTPSLDetailContext","ChevronDownIcon","AuthGuardDataTable","findTPSLFromOrder","perpPositions","FlexCell","EstPnlRender","tp_unrealPnl","sl_unrealPnl","openPrice","findTPSLOrderPriceFromOrder","OrderPriceRender","QtyRender","TriggerPrice","TypeRender","useColumn","moblieColumns","_","record","desktopColums","CancelAllBtn","DeleteIcon","size","loading","setLoading","OrdersTable","orders","columns","OrdersTableMobile","orderIds","acc","curr","row","DeleteBtn","TPSLDetailUI","FullPositionPart","PartialPositionPart","open","setOpen","PositionTypeDescription","AddButton","TPSLDetailWidget","TPSLDetailDialogId","TPSLDetailSheetId","useTPSLSimpleDialog","positionsInfo","TPSLSimpleDialogUI","footer","errorMessage","tpError","slError","text","renderPnl","TPSLSimpleDialogWidget","close","showAdvancedTPSLDialog","TPSLSimpleSheetId","TPSLSimpleDialogId","useMutation","AlgoOrderType","getInitialOrder","childOrder","tpOrder","slOrder","tpslPriceInfo","isTPSLPriceChanged","originPrice","newPrice","originDeci","useEditBracketOrder","baseInfo","tpInfo","slInfo","doUpdateOrder","isMutating","isPriceChanged","childOrders","EditBracketOrderUI","EditBracketOrderWidget","EditBracketOrderSheetId","EditBracketOrderDialogId"],"mappings":"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","sourcesContent":["import { ReactNode } from \"react\";\nimport { ComputedAlgoOrder, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AlgoOrderRootType, API, PositionType } from \"@kodiak-finance/orderly-types\";\nimport { Box, Button, modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { ButtonProps } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLDialogId } from \"./positionTPSL\";\n\nexport const PositionTPSLPopover = (props: {\n position: API.Position;\n order?: API.AlgoOrder;\n label?: string;\n baseDP?: number;\n quoteDP?: number;\n /**\n * Button props\n */\n buttonProps?: ButtonProps;\n isEditing?: boolean;\n children?: ReactNode;\n}) => {\n const { position, order, baseDP, quoteDP, buttonProps, isEditing } = props;\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const { t } = useTranslation();\n\n const isPositionTPSL = isEditing\n ? order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n : undefined;\n\n const onEdit = () => {\n modal.show(TPSLDialogId, {\n order: order,\n symbol: position.symbol,\n baseDP: baseDP,\n quoteDP: quoteDP,\n positionType: isPositionTPSL ? PositionType.FULL : PositionType.PARTIAL,\n isEditing: isEditing,\n });\n };\n\n return (\n <Box onClick={onEdit} className=\"oui-cursor-pointer\">\n {props.children || (\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n {...buttonProps}\n // onClick={() => {\n // setOpen(true);\n // }}\n >\n {props.label}\n </Button>\n )}\n </Box>\n );\n};\n","import React from \"react\";\nimport { type AlgoOrderRootType } from \"@kodiak-finance/orderly-types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { TPSL, TPSLProps } from \"./tpsl.ui\";\nimport { TPSLBuilderOptions, useTPSLBuilder } from \"./useTPSL.script\";\n\nexport type TPSLWidgetProps = {\n onTPSLTypeChange?: (type: AlgoOrderRootType) => void;\n} & TPSLBuilderOptions &\n TPSLProps;\n\nexport const TPSLWidget: React.FC<TPSLWidgetProps> = (props) => {\n const { onCancel, onComplete, ...rest } = props;\n const state = useTPSLBuilder(rest);\n return (\n <TPSL\n {...state}\n onCancel={onCancel}\n onComplete={onComplete}\n close={rest.close}\n />\n );\n};\n\nexport const TPSLSheetId = \"TPSLSheetId\";\nexport const TPSLDialogId = \"TPSLDialogId\";\n\nregisterSimpleSheet(TPSLSheetId, TPSLWidget);\n\nregisterSimpleDialog(TPSLDialogId, TPSLWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import React from \"react\";\nimport { OrderValidationResult } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport {\n API,\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n Button,\n Flex,\n Grid,\n Text,\n cn,\n ThrottledButton,\n ScrollArea,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { TPSLQuantity } from \"../components/tpslQty\";\nimport { TPSLBuilderState } from \"./useTPSL.script\";\n\nexport type TPSLProps = {\n close?: () => void;\n onClose?: () => void;\n onCancel?: () => void;\n onComplete?: () => void;\n withTriggerPrice?: boolean;\n};\n\n//------------- TPSL form start ---------------\nexport const TPSL: React.FC<TPSLBuilderState & TPSLProps> = (props) => {\n const {\n TPSL_OrderEntity,\n symbolInfo,\n onCancel,\n onComplete,\n status,\n position,\n setValues,\n onClose,\n isEditing,\n } = props;\n\n const { errors, validated } = props.metaState;\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n if (!position) {\n return null;\n }\n\n const renderQtyInput = () => {\n if (TPSL_OrderEntity.position_type === PositionType.FULL) {\n return null;\n }\n\n return (\n <Box className=\"oui-px-0.5\">\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={(props.orderQuantity ?? props.maxQty) as number}\n baseTick={symbolInfo(\"base_tick\")}\n base_dp={symbolInfo(\"base_dp\")}\n onQuantityChange={props.setQuantity}\n base={symbolInfo(\"base\")}\n isEditing={props.isEditing}\n errorMsg={validated ? getErrorMsg(\"quantity\") : undefined}\n />\n </Box>\n );\n };\n\n return (\n <div id=\"orderly-tp_sl-order-edit-content\">\n <ScrollArea className={cn(isMobile && \"oui-h-[calc(100vh-200px)]\")}>\n <div className=\"oui-px-2\">\n <OrderInfo\n baseDP={symbolInfo(\"base_dp\")}\n quoteDP={symbolInfo(\"quote_dp\")}\n classNames={{\n root: \"oui-mb-3\",\n container: \"oui-gap-x-[30px]\",\n }}\n order={{\n symbol: position.symbol,\n order_quantity: position.position_qty.toString(),\n order_price: position.average_open_price.toString(),\n }}\n symbolLeverage={position.leverage}\n />\n <Flex\n direction=\"column\"\n justify=\"start\"\n itemAlign={\"start\"}\n gap={3}\n className=\"oui-mb-3 oui-w-full\"\n >\n {!isEditing && (\n <TPSLPositionTypeWidget\n disableSelector\n value={TPSL_OrderEntity.position_type ?? PositionType.PARTIAL}\n onChange={(key, value) => {\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n )}\n {TPSL_OrderEntity.position_type === PositionType.FULL && (\n <Text className=\"oui-text-2xs oui-text-warning\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n )}\n </Flex>\n {renderQtyInput()}\n <Flex\n direction=\"column\"\n itemAlign={\"start\"}\n justify={\"start\"}\n gap={6}\n className=\"oui-mt-3 oui-w-full\"\n >\n <TPSLInputRowWidget\n symbol={position.symbol}\n rootOrderPrice={position.average_open_price.toString()}\n type=\"tp\"\n side={position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL}\n values={{\n enable: TPSL_OrderEntity.tp_enable ?? true,\n trigger_price:\n TPSL_OrderEntity.tp_trigger_price?.toString() ?? undefined,\n PnL: TPSL_OrderEntity.tp_pnl?.toString() ?? undefined,\n Offset: TPSL_OrderEntity.tp_offset?.toString() ?? undefined,\n \"Offset%\":\n TPSL_OrderEntity.tp_offset_percentage?.toString() ??\n undefined,\n order_price:\n TPSL_OrderEntity.tp_order_price?.toString() ?? undefined,\n order_type: TPSL_OrderEntity.tp_order_type ?? OrderType.MARKET,\n }}\n hideOrderPrice={\n TPSL_OrderEntity.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n disableOrderTypeSelector={isEditing}\n quote_dp={symbolInfo(\"quote_dp\")}\n positionType={\n TPSL_OrderEntity.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n symbolLeverage={position.leverage}\n />\n\n <TPSLInputRowWidget\n symbol={position.symbol}\n rootOrderPrice={position.average_open_price.toString()}\n type=\"sl\"\n side={position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL}\n values={{\n enable: TPSL_OrderEntity.sl_enable ?? true,\n trigger_price:\n TPSL_OrderEntity.sl_trigger_price?.toString() ?? undefined,\n PnL: TPSL_OrderEntity.sl_pnl?.toString() ?? undefined,\n Offset: TPSL_OrderEntity.sl_offset?.toString() ?? undefined,\n \"Offset%\":\n TPSL_OrderEntity.sl_offset_percentage?.toString() ??\n undefined,\n order_price:\n TPSL_OrderEntity.sl_order_price?.toString() ?? undefined,\n order_type: TPSL_OrderEntity.sl_order_type ?? OrderType.MARKET,\n }}\n hideOrderPrice={\n TPSL_OrderEntity.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n quote_dp={symbolInfo(\"quote_dp\")}\n positionType={\n TPSL_OrderEntity.position_type ?? PositionType.PARTIAL\n }\n disableOrderTypeSelector={isEditing}\n onChange={(key, value) => {\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n symbolLeverage={position.leverage}\n />\n </Flex>\n <PnlInfo\n tp_pnl={TPSL_OrderEntity.tp_pnl}\n sl_pnl={TPSL_OrderEntity.sl_pnl}\n className=\"oui-my-3\"\n />\n </div>\n </ScrollArea>\n <Grid px={2} cols={2} gap={3} mt={4}>\n <Button\n size={\"md\"}\n color={\"secondary\"}\n data-testid={\"tpsl-cancel\"}\n onClick={() => {\n props.close?.();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n size={\"md\"}\n data-testid={\"tpsl-confirm\"}\n disabled={status.isCreateMutating}\n loading={status.isCreateMutating || status.isUpdateMutating}\n onClick={() => {\n props\n .onSubmit()\n .then(() => {\n props.close?.();\n onComplete?.();\n })\n .catch((err) => {\n console.log(\"--->>>cancel order\", err);\n });\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Grid>\n </div>\n );\n};\n","import {\n useIndexPrice,\n useMarkPrice,\n useLeverageBySymbol,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { cn, Flex, Grid, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\n\ntype Props = {\n order: Partial<OrderlyOrder>;\n baseDP?: number;\n quoteDP?: number;\n className?: string;\n classNames?: {\n root?: string;\n symbol?: string;\n container?: string;\n };\n symbolLeverage?: number;\n};\nexport const OrderInfo = (props: Props) => {\n const { t } = useTranslation();\n const { order, symbolLeverage } = props;\n const { symbol } = order;\n const markPrice = useMarkPrice(symbol!);\n const indexPrice = useIndexPrice(symbol!);\n\n const leverage = useLeverageBySymbol(symbolLeverage ? undefined : symbol);\n\n const currentLeverage = symbolLeverage || leverage;\n\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-w-full oui-gap-3 oui-font-semibold \",\n props.classNames?.root,\n )}\n >\n <Flex\n itemAlign={\"center\"}\n className={cn(\"oui-gap-2 \", props.classNames?.symbol)}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <TokenIcon symbol={symbol} className=\"oui-size-5\" />\n <Text.formatted\n className=\"oui-whitespace-nowrap oui-break-normal\"\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n weight=\"semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n </Flex>\n <Text\n size=\"2xs\"\n className=\"oui-h-[18px] oui-rounded oui-bg-base-7 oui-px-2 oui-font-semibold oui-text-base-contrast-36\"\n >\n {currentLeverage}x\n </Text>\n </Flex>\n <Grid\n cols={2}\n gapX={2}\n gapY={1}\n className={cn(\"oui-w-full oui-gap-x-2 \", props.classNames?.container)}\n >\n <Flex justify={\"between\"} className=\" oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.quantity\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.baseDP ?? 2}\n >\n {Number(order.order_quantity)}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.lastPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {indexPrice?.data}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"tpsl.advanced.orderPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {Number(order.order_price)}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"common.markPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {markPrice?.data}\n </Text.numeral>\n </Flex>\n </Grid>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, checkIsNaN } from \"@kodiak-finance/orderly-utils\";\n\ntype Props = {\n tp_pnl?: string | number;\n sl_pnl?: string | number;\n className?: string;\n};\n\nexport const PnlInfo = (props: Props) => {\n const { t } = useTranslation();\n const { tp_pnl, sl_pnl } = props;\n const riskRatio = useMemo(() => {\n const defaultNode = <Text className=\"oui-text-base-contrast-36\">-- x</Text>;\n if (tp_pnl === undefined || sl_pnl === undefined) {\n return defaultNode;\n }\n if (checkIsNaN(tp_pnl) || checkIsNaN(sl_pnl)) {\n return defaultNode;\n }\n const tpDecimal = new Decimal(tp_pnl);\n const slDecimal = new Decimal(sl_pnl);\n if (slDecimal.isZero() || tpDecimal.isZero()) {\n return defaultNode;\n }\n const ratio = tpDecimal.div(slDecimal).abs().toNumber().toFixed(2);\n return (\n <Flex gap={1} itemAlign={\"center\"} className=\"oui-text-base-contrast-80\">\n <Text>{ratio}</Text>\n <Text className=\"oui-text-base-contrast-36\">x</Text>\n </Flex>\n );\n return defaultNode;\n }, [tp_pnl, sl_pnl]);\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-w-full oui-gap-1 oui-text-2xs oui-text-base-contrast-36\",\n props.className,\n )}\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n rule=\"price\"\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {tp_pnl ? Number(tp_pnl) : \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstSlPnl\")}</Text>\n {sl_pnl ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {Number(sl_pnl)}\n </Text.numeral>\n ) : (\n <Text size=\"2xs\">-- USDC</Text>\n )}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.riskRewardRatio\")}</Text>\n <Text className=\"oui-text-base-contrast-80\" size=\"2xs\">\n {riskRatio}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { OrderValidationResult } from \"@kodiak-finance/orderly-hooks\";\nimport { OrderSide, OrderType, PositionType } from \"@kodiak-finance/orderly-types\";\n\nexport type Props = {\n disableOrderTypeSelector?: boolean;\n type: \"tp\" | \"sl\";\n quote_dp: number;\n positionType: PositionType;\n errors: OrderValidationResult | null;\n hideOrderPrice?: boolean;\n values: {\n enable: boolean;\n trigger_price: string | undefined;\n PnL: string | undefined;\n Offset: string | undefined;\n \"Offset%\": string | undefined;\n ROI?: string | undefined;\n order_price: string | undefined;\n order_type: OrderType;\n };\n onChange: (key: string, value: string | boolean | number) => void;\n rootOrderPrice: string | undefined;\n symbol: string;\n disableEnableCheckbox?: boolean;\n symbolLeverage?: number;\n side: OrderSide;\n};\nexport const useTPSLInputRowScript = (props: Props) => {\n return {\n disableOrderTypeSelector: props.disableOrderTypeSelector,\n values: props.values,\n onChange: props.onChange,\n type: props.type,\n quote_dp: props.quote_dp,\n positionType: props.positionType,\n errors: props.errors,\n hideOrderPrice: props.hideOrderPrice,\n rootOrderPrice: props.rootOrderPrice,\n symbol: props.symbol,\n disableEnableCheckbox: props.disableEnableCheckbox,\n symbolLeverage: props.symbolLeverage,\n side: props.side,\n };\n};\n","import React, { Fragment, useMemo } from \"react\";\nimport { useLeverageBySymbol } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation, Trans } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport { OrderType, PositionType } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, Grid, Checkbox, cn } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, getTPSLDirection } from \"@kodiak-finance/orderly-utils\";\nimport { PnlInputWidget } from \"../../pnlInput/pnlInput.widget\";\nimport { OrderPriceType } from \"../orderPriceType\";\nimport { PriceInput } from \"./priceInput\";\nimport { useTPSLInputRowScript } from \"./tpslInputRow.script\";\n\ntype TPSLInputRowProps = ReturnType<typeof useTPSLInputRowScript>;\n\nexport const TPSLInputRowUI: React.FC<TPSLInputRowProps> = (props) => {\n const { t } = useTranslation();\n const { getErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n const { values, positionType } = props;\n\n // if symbolLeverage is not provided, get it from useLeverageBySymbol\n const symbolLeverage = useLeverageBySymbol(\n props.symbolLeverage ? undefined : props.symbol,\n );\n\n const leverage = props.symbolLeverage || symbolLeverage;\n\n const roi = useMemo(() => {\n if (!leverage || isNaN(Number(leverage))) {\n return null;\n }\n let _roi = null;\n if (!props.rootOrderPrice) {\n return null;\n }\n\n if (!values.trigger_price && !values.order_price) {\n return null;\n }\n let _entryPrice = new Decimal(0);\n if (values.order_type === OrderType.MARKET) {\n if (!values.trigger_price) {\n return null;\n }\n _entryPrice = new Decimal(values.trigger_price);\n } else if (values.order_type === OrderType.LIMIT) {\n if (!values.order_price) {\n return null;\n }\n _entryPrice = new Decimal(values.order_price);\n }\n const rootOrderPrice = new Decimal(props.rootOrderPrice);\n\n // ROI = (close price - order_price) / order_price × leverage × direction\n // direction: long: +1 / short: -1\n // leverage = MIN( current_account_leverage, symbol_leverage)\n const direction = getTPSLDirection({\n side: props.side,\n type: props.type,\n closePrice: _entryPrice.toNumber(),\n orderPrice: rootOrderPrice.toNumber(),\n });\n\n _roi = _entryPrice\n .minus(rootOrderPrice)\n .div(rootOrderPrice)\n .mul(leverage)\n .abs()\n .mul(100)\n .mul(direction)\n // .mul(props.type === \"tp\" ? 1 : -1)\n .toNumber();\n return _roi;\n }, [values, props.rootOrderPrice, symbolLeverage, props.type, props.side]);\n\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"start\"}\n className=\"oui-w-full\"\n >\n <Flex className=\"oui-w-full\" itemAlign={\"center\"} justify={\"start\"}>\n {!props.disableEnableCheckbox && (\n <Checkbox\n data-testid={`oui-testid-orderEntry-${props.type}-enable-checkBox`}\n id={`enable_${props.type}`}\n color={\"white\"}\n checked={values.enable}\n onCheckedChange={(checked: boolean) => {\n props.onChange(`${props.type}_enable`, !!checked);\n }}\n />\n )}\n <label\n htmlFor={`enable_${props.type}`}\n className={cn(\n \"oui-cursor-pointer oui-text-sm\",\n props.disableEnableCheckbox\n ? \"oui-ml-0 oui-text-base-contrast\"\n : \"oui-ml-1 oui-text-base-contrast-36\",\n )}\n >\n {props.type === \"tp\"\n ? t(\"tpsl.advanced.TP.label\")\n : t(\"tpsl.advanced.SL.label\")}\n </label>\n </Flex>\n <Flex\n direction={\"column\"}\n gap={2}\n itemAlign={\"start\"}\n className={cn(\"oui-w-full oui-pt-2\", values.enable ? \"\" : \"oui-hidden\")}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full oui-gap-0.5\"\n >\n <Text className=\"oui-text-2xs oui-text-base-contrast-54\">\n {t(\"tpsl.advanced.triggerPrice\")}\n </Text>\n <Grid cols={2} gap={2} className=\"oui-w-full oui-px-0.5\">\n <PriceInput\n type={`${props.type} price`}\n value={values.trigger_price}\n error={getErrorMsg(`${props.type}_trigger_price`)}\n onValueChange={(value) => {\n props.onChange(`${props.type}_trigger_price`, value);\n }}\n quote_dp={props.quote_dp}\n />\n <PnlInputWidget\n type={props.type === \"tp\" ? \"TP\" : \"SL\"}\n onChange={(key, value) => {\n props.onChange(key, value as string);\n }}\n quote={\"USDC\"}\n quote_dp={2}\n values={values}\n />\n </Grid>\n </Flex>\n <Flex\n direction={\"column\"}\n className={cn(\n \"oui-w-full oui-gap-0.5\",\n props.hideOrderPrice ? \"oui-hidden\" : \"\",\n )}\n itemAlign={\"start\"}\n >\n <Text className=\"oui-text-2xs oui-text-base-contrast-54\">\n {t(\"tpsl.advanced.orderPrice\")}\n </Text>\n <Grid cols={2} gap={2} className=\"oui-w-full oui-px-0.5\">\n <PriceInput\n disabled={\n positionType === PositionType.FULL ||\n values.order_type === OrderType.MARKET\n }\n type={\"order price\"}\n label={\n values.order_type === OrderType.LIMIT\n ? t(\"tpsl.advanced.limit\")\n : t(\"tpsl.advanced.market\")\n }\n value={values.order_price}\n error={getErrorMsg(`${props.type}_order_price`)}\n onValueChange={(value) => {\n props.onChange(`${props.type}_order_price`, value);\n }}\n quote_dp={props.quote_dp}\n />\n <OrderPriceType\n disabled={\n positionType === PositionType.FULL ||\n props.disableOrderTypeSelector\n }\n type={values.order_type}\n onChange={(value) => {\n props.onChange(`${props.type}_order_type`, value as OrderType);\n }}\n />\n </Grid>\n </Flex>\n </Flex>\n <RenderROI\n price={\n values.order_type === OrderType.MARKET\n ? values.trigger_price\n : values.order_price\n }\n orderType={values.order_type}\n pnl={values.PnL}\n roi={roi}\n dp={props.quote_dp}\n className=\"oui-mt-1\"\n />\n </Flex>\n );\n};\n\nconst RenderROI: React.FC<{\n className?: string;\n price?: number | string;\n pnl?: number | string;\n roi?: number | null;\n dp: number;\n orderType: OrderType;\n}> = (props) => {\n const { t } = useTranslation();\n const { price, pnl, roi, dp, className, orderType } = props;\n if (!roi || !price || !pnl) {\n return null;\n }\n return (\n <Text className={cn(\"oui-text-2xs oui-text-base-contrast-36\", className)}>\n <Trans\n i18nKey=\"tpsl.advanced.ROI\"\n components={[\n <Fragment key=\"price\">\n <Text.numeral\n className=\"oui-px-1 oui-text-base-contrast\"\n dp={dp}\n suffix={<Text className=\"oui-pl-0.5\">USDC</Text>}\n >\n {price}\n </Text.numeral>\n </Fragment>,\n <Fragment key=\"orderType\">\n <Text className=\"oui-px-1 oui-text-base-contrast\">\n {orderType === OrderType.MARKET\n ? t(\"common.market\")\n : t(\"common.limit\")}\n </Text>\n </Fragment>,\n <Fragment key=\"pnl\">\n <Text.numeral\n coloring\n className=\"oui-whitespace-nowrap oui-px-1\"\n dp={2}\n suffix={<Text className=\"oui-pl-0.5\">USDC</Text>}\n >\n {pnl}\n </Text.numeral>\n </Fragment>,\n\n <Fragment key=\"roi\">\n <Text.numeral\n coloring\n className=\"oui-whitespace-nowrap oui-px-1\"\n dp={2}\n suffix=\"%\"\n >\n {roi}\n </Text.numeral>\n </Fragment>,\n ]}\n />\n </Text>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n CaretDownIcon,\n cn,\n Input,\n MenuItem,\n SimpleDropdownMenu,\n} from \"@kodiak-finance/orderly-ui\";\nimport { inputFormatter, Text } from \"@kodiak-finance/orderly-ui\";\nimport { PNLInputState, PnLMode } from \"./useBuilder.script\";\n\nexport type PNLInputProps = PNLInputState & { testId?: string; quote: string };\n\nexport const PNLInput = (props: PNLInputProps) => {\n const {\n mode,\n modes,\n onModeChange,\n onValueChange,\n quote,\n quote_dp,\n value,\n pnl,\n } = props;\n const { t } = useTranslation();\n\n const [prefix, setPrefix] = useState<string>(mode);\n const [placeholder, setPlaceholder] = useState<string>(\n mode === PnLMode.PERCENTAGE ? \"%\" : quote,\n );\n\n const color = useMemo(() => {\n const num = Number(pnl);\n\n if (isNaN(num) || num === 0) return \"\";\n\n if (num > 0) return \"oui-text-trade-profit\";\n if (num < 0) return \"oui-text-trade-loss\";\n }, [pnl]);\n\n useEffect(() => {\n const label = modes.find((item) => item.value === mode)?.label;\n setPrefix(label!);\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n }, [mode, modes]);\n\n return (\n <Input\n prefix={prefix}\n size={{\n initial: \"lg\",\n lg: \"md\",\n }}\n placeholder={placeholder}\n align={\"right\"}\n value={value}\n data-testid={props.testId}\n autoComplete={\"off\"}\n onValueChange={onValueChange}\n formatters={[\n // inputFormatter.numberFormatter,\n props.formatter({ dp: quote_dp, mode }),\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n // className={color}\n classNames={{\n input: cn(\"oui-text-2xs\", color),\n prefix: \"oui-text-base-contrast-54 oui-text-2xs\",\n root: \"oui-outline-line-12 focus-within:oui-outline-primary-light\",\n }}\n onFocus={() => {\n setPlaceholder(\"\");\n props.setFocus(true);\n }}\n onBlur={() => {\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n props.setFocus(false);\n }}\n // value={props.value}\n suffix={\n <>\n {mode === PnLMode.PERCENTAGE && !!value && (\n <Text\n size={\"2xs\"}\n color=\"inherit\"\n className={cn(\"oui-ml-[2px]\", color)}\n >\n %\n </Text>\n )}\n <PNLMenus\n mode={mode}\n modes={modes}\n onModeChange={(item) => onModeChange(item.value as PnLMode)}\n />\n </>\n }\n />\n );\n};\n\nconst PNLMenus = (props: {\n mode?: string;\n modes: MenuItem[];\n onModeChange: (value: MenuItem) => void;\n}) => {\n return (\n <SimpleDropdownMenu\n currentValue={props.mode}\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, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { MenuItem } from \"@kodiak-finance/orderly-ui\";\nimport type {\n InputFormatter,\n InputFormatterOptions,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, todpIfNeed } from \"@kodiak-finance/orderly-utils\";\n\nexport enum PnLMode {\n PnL = \"PnL\",\n OFFSET = \"Offset\",\n PERCENTAGE = \"Offset%\",\n}\n\nexport type PNL_Values = {\n PnL: string | undefined;\n Offset: string | undefined;\n \"Offset%\": string | undefined;\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 const [focus, setFocus] = useState(true);\n\n const { t } = useTranslation();\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, mode]);\n\n const modes = useMemo<MenuItem[]>(() => {\n return [\n {\n label: t(\"tpsl.pnl\"),\n value: PnLMode.PnL,\n testId: `${PnLMode.PnL}_menu_item`,\n },\n {\n label: t(\"tpsl.offset\"),\n value: PnLMode.OFFSET,\n testId: `${PnLMode.OFFSET}_mneu_item`,\n },\n {\n label: `${t(\"tpsl.offset\")}%`,\n value: PnLMode.PERCENTAGE,\n testId: `${PnLMode.PERCENTAGE}_menu_item`,\n },\n ];\n }, [t]);\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 value = `${value}`; // convert to string\n\n if (focus) {\n // not need to add \"-\", because the value is already negative\n // if (type === \"SL\" && mode === PnLMode.PnL) {\n // value = value.startsWith(\"-\") ? value : \"-\" + value;\n // }\n }\n\n if (value === \"\" || value === \"-\") return \"\";\n // if (mode === PnLMode.PnL || mode === PnLMode.OFFSET) {\n // return commify(value);\n // }\n\n if (mode === PnLMode.PERCENTAGE) {\n return `${new Decimal(\n value.replace(\n new RegExp(percentageSuffix.current.replace(\".\", \"\\\\.\") + \"$\"),\n \"\",\n ),\n )\n .mul(100)\n .todp(2, 4)\n .toString()}${percentageSuffix.current}`;\n } else if (mode === PnLMode.OFFSET) {\n value = todpIfNeed(value, dp);\n } else {\n // value = new Decimal(value).todp(2).toString();\n }\n\n return `${value}`;\n },\n onSendBefore: (value: string) => {\n if (/^\\-?0{2,}$/.test(value)) {\n return \"0\";\n }\n\n if (mode === PnLMode.PERCENTAGE) {\n // console.log(\"value\", value);\n if (value !== \"\") {\n // percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n value = todpIfNeed(value, 2);\n const endStr = value.match(/\\.0{0,2}$/);\n if (!!endStr) {\n percentageSuffix.current = endStr[0];\n } else {\n percentageSuffix.current = \"\";\n }\n value = new Decimal(value).div(100).toString();\n value = `${value}${percentageSuffix.current}`;\n }\n } else if (mode === PnLMode.PnL && type === \"SL\" && focus) {\n // not need to add \"-\", because the value is already negative\n // value = value.startsWith(\"-\") ? value : \"-\" + value;\n } else {\n value = todpIfNeed(value, dp);\n }\n\n if (value === \"\" || value === \"-\") return \"\";\n\n return value;\n },\n };\n // return {\n // onRenderBefore: (\n // value: string | number,\n // options: InputFormatterOptions\n // ) => {\n // // console.log(\"???\", options);\n // const { isFocused } = options;\n // value = `${value}`;\n // if (value === \"\" || value === \"-\") return \"\";\n\n // // if (type === \"SL\" && mode === PnLMode.PnL) {\n // // if (isFocused) {\n // // value = value.startsWith(\"-\") ? value : \"-\" + value;\n // // }\n // // }\n\n // if (mode === PnLMode.PERCENTAGE) {\n // return `${todpIfNeed(new Decimal(value).mul(100).toString(), 2)}${\n // percentageSuffix.current\n // }`;\n // // return (Number(value) * 100).toFixed(2);\n // } else if (mode === PnLMode.OFFSET) {\n // value = todpIfNeed(value, 2);\n // } else {\n // // value = new Decimal(value).todp(2).toString();\n // }\n\n // return value;\n // },\n // onSendBefore: (value: string, options: InputFormatterOptions) => {\n // const { isFocused } = options;\n\n // if (mode === PnLMode.PERCENTAGE) {\n // if (value !== \"\") {\n // percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n // value = new Decimal(value).div(100).toString();\n // value = todpIfNeed(value, 4);\n // }\n // } else {\n // // value = todpIfNeed(value, quote_dp);\n // if (isFocused) {\n // if (type === \"SL\" && mode === PnLMode.PnL) {\n // // if (\n // // typeof values[PnLMode.PnL] !== \"undefined\" &&\n // // values[PnLMode.PnL] !== \"\"\n // // )\n // // return value;\n // const num = Number(value);\n // if (!isNaN(num) && num !== 0) {\n // value = (Math.abs(num) * -1).toString();\n // } else {\n // value = \"\";\n // }\n // }\n // }\n // }\n\n // return value;\n // },\n // };\n };\n\n return {\n mode,\n modes,\n type: props.type,\n formatter,\n onModeChange: (mode: PnLMode) => {\n setMode(mode);\n },\n value,\n pnl: values[PnLMode.PnL],\n onValueChange,\n quote_dp: props.quote_dp,\n setFocus,\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 { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Select, Text } from \"@kodiak-finance/orderly-ui\";\n\ntype Props = {\n type: OrderType;\n onChange: (type: OrderType) => void;\n disabled?: boolean;\n};\n\nexport const OrderPriceType = (props: Props) => {\n const { t } = useTranslation();\n const options = [\n { label: t(\"orderEntry.orderType.limitOrder\"), value: OrderType.LIMIT },\n { label: t(\"orderEntry.orderType.marketOrder\"), value: OrderType.MARKET },\n ];\n return (\n <Select.options\n value={props.type}\n options={options}\n disabled={props.disabled}\n onValueChange={props.onChange}\n size={\"xs\"}\n classNames={{\n trigger:\n \"oui-bg-transparent oui-w-auto oui-outline-line-1 oui-input-root oui-bg-base-6 oui-h-10 lg:oui-h-8 oui-outline-line-12 \",\n }}\n valueFormatter={(value, option) => {\n const displayLabel = {\n [OrderType.LIMIT]: t(\"orderEntry.orderType.limit\"),\n [OrderType.MARKET]: t(\"common.marketPrice\"),\n }[value];\n return <Text size={\"2xs\"}>{displayLabel}</Text>;\n }}\n />\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Input, inputFormatter } from \"@kodiak-finance/orderly-ui\";\n\nexport const PriceInput: React.FC<{\n type: string;\n label?: string;\n value?: string | number;\n error?: string;\n onValueChange: (value: string) => void;\n quote_dp: number;\n disabled?: boolean;\n}> = (props) => {\n const [placeholder, setPlaceholder] = useState<string>(\"USDC\");\n const { t } = useTranslation();\n\n return (\n <Input.tooltip\n data-testid={`oui-testid-tpsl-popUp-${props.type.toLowerCase()}-input`}\n prefix={props.label ?? t(\"common.markPrice\")}\n size={{ initial: \"lg\", lg: \"md\" }}\n tooltip={props.error}\n placeholder={placeholder}\n disabled={props.disabled}\n align={\"right\"}\n autoComplete={\"off\"}\n inputMode=\"decimal\"\n value={props.value}\n color={props.error ? \"danger\" : undefined}\n classNames={{\n input: \"oui-text-2xs placeholder:oui-text-2xs\",\n prefix: \"oui-text-base-contrast-54 oui-text-2xs\",\n root: \"oui-w-full\",\n // root: \"oui-outline-line-12 focus-within:oui-outline-primary-light\",\n }}\n onValueChange={props.onValueChange}\n onFocus={() => {\n setPlaceholder(\"\");\n }}\n onBlur={() => {\n setPlaceholder(\"USDC\");\n }}\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n />\n );\n};\n","import { Props, useTPSLInputRowScript } from \"./tpslInputRow.script\";\nimport { TPSLInputRowUI } from \"./tpslInputRow.ui\";\n\nexport const TPSLInputRowWidget = (props: Props) => {\n const state = useTPSLInputRowScript(props);\n return <TPSLInputRowUI {...state} />;\n};\n","import { useState } from \"react\";\nimport { OrderlyOrder, PositionType } from \"@kodiak-finance/orderly-types\";\n\ntype OrderValueKeys = keyof OrderlyOrder;\nexport type PositionTypeProps = {\n disableSelector?: boolean;\n value: PositionType;\n onChange: (key: OrderValueKeys, value: any) => void;\n};\n\nexport const useTPSLPositionTypeScript = (props: PositionTypeProps) => {\n return {\n value: props.value,\n onChange: props.onChange,\n disableSelector: props.disableSelector,\n };\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n ExclamationFillIcon,\n Flex,\n Select,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useTPSLPositionTypeScript } from \"./tpslPositionType.script\";\n\ntype TPSLPositionTypeUIProps = ReturnType<typeof useTPSLPositionTypeScript>;\n\nconst positionTypeKey = \"position_type\";\nexport const TPSLPositionTypeUI = (props: TPSLPositionTypeUIProps) => {\n const { t } = useTranslation();\n const options = [\n {\n label: t(\"tpsl.positionType.partial\"),\n value: PositionType.PARTIAL,\n },\n {\n label: t(\"tpsl.positionType.full\"),\n value: PositionType.FULL,\n },\n ];\n\n return (\n <Flex gap={1} itemAlign={\"center\"} justify={\"start\"}>\n <Tooltip\n className=\"oui-w-[280px] oui-p-3\"\n content={\n props.value === PositionType.FULL\n ? t(\"tpsl.positionType.full.tips\")\n : t(\"tpsl.positionType.partial.tips\")\n }\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={12}\n />\n </Tooltip>\n {props.disableSelector ? (\n props.value === PositionType.FULL ? (\n <Text className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n {t(\"tpsl.positionType.full\")}\n </Text>\n ) : (\n <Text className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n {t(\"tpsl.positionType.partial\")}\n </Text>\n )\n ) : (\n <Select.options\n value={props.value}\n options={options}\n onValueChange={(event) => {\n props.onChange(positionTypeKey, event as PositionType);\n }}\n size={\"xs\"}\n classNames={{\n trigger: \" oui-bg-transparent oui-border-0 oui-w-auto oui-px-0\",\n }}\n contentProps={{\n className: \" oui-bg-base-8 oui-border-0\",\n }}\n />\n )}\n </Flex>\n );\n};\n","import {\n PositionTypeProps,\n useTPSLPositionTypeScript,\n} from \"./tpslPositionType.script\";\nimport { TPSLPositionTypeUI } from \"./tpslPositionType.ui\";\n\nexport const TPSLPositionTypeWidget = (props: PositionTypeProps) => {\n const state = useTPSLPositionTypeScript(props);\n return <TPSLPositionTypeUI {...state} />;\n};\n","import { memo, useEffect, useRef, useState } from \"react\";\nimport { utils } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Input, Slider, Text } from \"@kodiak-finance/orderly-ui\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\nexport type TPSLQuantityProps = {\n maxQty: number;\n baseTick: number;\n base_dp: number;\n base: string;\n onQuantityChange?: (value: number | string) => void;\n quantity: number;\n isEditing?: boolean;\n errorMsg?: string;\n};\n\nexport const TPSLQuantity = memo<TPSLQuantityProps>((props) => {\n const { maxQty, base_dp, baseTick, quantity } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { t } = useTranslation();\n const [sliderValue, setSliderValue] = useState(0);\n\n // format quantity to base tick\n const formatQuantity = (value: string) => {\n let _qty = value;\n if (Number(value) > maxQty) {\n _qty = maxQty.toString();\n }\n if (baseTick > 0) {\n props.onQuantityChange?.(utils.formatNumber(_qty, baseTick) ?? value);\n }\n };\n\n const onSliderValueChange = (value: number) => {\n setSliderValue(value);\n // transform slider value to quantity\n const qty = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n\n formatQuantity(qty);\n };\n\n useEffect(() => {\n const qty = Math.min(Number(quantity || 0), maxQty);\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity, maxQty]);\n\n const errorMsg =\n props.quantity.toString().length > 0 ? props.errorMsg : undefined;\n\n return (\n <>\n <Flex gap={2}>\n <div className={\"oui-flex-1\"}>\n <Input.tooltip\n data-testid=\"oui-testid-tpsl-popUp-quantity-input\"\n ref={inputRef}\n prefix={t(\"common.quantity\")}\n size={{\n initial: \"md\",\n lg: \"sm\",\n }}\n align=\"right\"\n value={props.quantity}\n autoComplete=\"off\"\n inputMode=\"decimal\"\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-bg-base-5 oui-outline-line-12\",\n errorMsg && \"oui-outline-danger\",\n ),\n }}\n tooltipProps={{\n content: {\n className: \"oui-bg-base-6 oui-text-base-contrast-80\",\n },\n arrow: {\n className: \"oui-fill-base-6\",\n },\n }}\n tooltip={errorMsg}\n color={errorMsg ? \"danger\" : undefined}\n formatters={[\n inputFormatter.dpFormatter(props.base_dp),\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n onValueChange={(value) => {\n props.onQuantityChange?.(value);\n // TODO: optimize this\n const qty = Number(value);\n if (qty && qty > props.maxQty) {\n const qty = props.maxQty;\n props.onQuantityChange?.(qty);\n inputRef.current?.blur();\n }\n }}\n onBlur={(e) => formatQuantity(e.target.value)}\n suffix={\n <span className=\"oui-px-3 oui-text-2xs oui-text-base-contrast-54\">\n {props.base}\n </span>\n }\n />\n </div>\n </Flex>\n <Flex mt={2} itemAlign={\"center\"} height={\"15px\"}>\n <Slider\n min={0}\n max={100}\n markCount={5}\n showTip\n value={[sliderValue]}\n color=\"primary\"\n onValueChange={(value) => {\n onSliderValueChange(value[0]);\n }}\n />\n </Flex>\n <Flex justify={\"between\"}>\n <Text.numeral color={\"primary\"} size={\"2xs\"} suffix=\"%\">\n {sliderValue}\n </Text.numeral>\n <Flex itemAlign={\"center\"} gap={1}>\n <button\n className={\"oui-leading-none\"}\n style={{ lineHeight: 0 }}\n onClick={() => {\n props.onQuantityChange?.(props.maxQty);\n }}\n >\n <Text color={\"primary\"} size={\"2xs\"}>\n {t(\"common.max\")}\n </Text>\n </button>\n\n <Text.numeral\n rule={\"price\"}\n size={\"2xs\"}\n intensity={54}\n tick={props.baseTick}\n >\n {props.maxQty}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n});\n","import { useEffect, useMemo, useRef } from \"react\";\nimport {\n type ComputedAlgoOrder,\n useLocalStorage,\n useMemoizedFn,\n usePositionStream,\n useSymbolsInfo,\n useTPSLOrder,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderType,\n PositionType,\n SDKError,\n} from \"@kodiak-finance/orderly-types\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { PositionTPSLConfirm } from \"./positionTpslConfirm\";\n\ntype PropsWithTriggerPrice = {\n withTriggerPrice?: boolean;\n triggerPrice?: number;\n type?: \"tp\" | \"sl\";\n qty?: number;\n};\n\nexport type TPSLBuilderOptions = {\n symbol: string;\n position?: API.Position;\n order?: API.AlgoOrder;\n onTPSLTypeChange?: (type: AlgoOrderRootType) => void;\n isEditing?: boolean;\n positionType?: PositionType;\n /**\n * either show the confirm dialog or not,\n * if the Promise reject or return false, cancel the submit action\n */\n onConfirm?: (\n order: ComputedAlgoOrder,\n options: {\n position: API.Position;\n submit: (params?: { accountId?: string }) => Promise<any>;\n cancel: () => Promise<any>;\n },\n ) => Promise<boolean>;\n close?: () => void;\n};\n\nexport const useTPSLBuilder = (\n options: TPSLBuilderOptions & PropsWithTriggerPrice,\n) => {\n const {\n symbol,\n order,\n isEditing,\n positionType,\n triggerPrice,\n type,\n withTriggerPrice,\n } = options;\n const { t } = useTranslation();\n // const isEditing = !!order;\n if (isEditing && !order) {\n throw new SDKError(\"order is required when isEditing is true\");\n }\n // const symbol = isEditing ? order!.symbol : position.symbol;\n const symbolInfo = useSymbolsInfo();\n\n const prevTPSLType = useRef<AlgoOrderRootType>(AlgoOrderRootType.TP_SL);\n const [{ rows: positions }] = usePositionStream();\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const position = positions.find((item) => item.symbol === symbol);\n\n useEffect(() => {\n if (!position) {\n options.close?.();\n }\n }, [position]);\n\n const [\n tpslOrder,\n {\n submit,\n deleteOrder,\n setValue,\n setValues,\n validate,\n metaState,\n errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ] = useTPSLOrder(\n {\n symbol,\n position_qty: position?.position_qty ?? 0,\n average_open_price: position?.average_open_price ?? 0,\n },\n {\n defaultOrder: order,\n positionType: triggerPrice ? PositionType.PARTIAL : positionType,\n tpslEnable: {\n tp_enable: !withTriggerPrice ? true : type === \"tp\",\n sl_enable: !withTriggerPrice ? true : type === \"sl\",\n },\n isEditing,\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(\n () => Math.abs(Number(position?.position_qty)),\n [position?.position_qty],\n );\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 } else if (!isEditing && !!tpslOrder.quantity) {\n diff = 1;\n }\n\n if (order && isEditing) {\n const { tp_trigger_price, sl_trigger_price } =\n utils.findTPSLFromOrder(order);\n const { tp_order_price, sl_order_price } =\n utils.findTPSLOrderPriceFromOrder(order);\n\n if (\n tp_trigger_price !== Number(tpslOrder.tp_trigger_price) &&\n typeof typeof tpslOrder.tp_trigger_price !== \"undefined\"\n ) {\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 if (\n typeof tpslOrder.tp_order_price !== \"undefined\" &&\n tp_order_price !== OrderType.MARKET &&\n tp_order_price !== Number(tpslOrder.tp_order_price)\n ) {\n diff = 4;\n }\n if (\n typeof tpslOrder.sl_order_price !== \"undefined\" &&\n sl_order_price !== OrderType.MARKET &&\n sl_order_price !== Number(tpslOrder.sl_order_price)\n ) {\n diff = 5;\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.tp_order_price,\n tpslOrder.sl_trigger_price,\n tpslOrder.sl_order_price,\n tpslOrder.quantity,\n order,\n isEditing,\n ]);\n\n useEffect(() => {\n if (!withTriggerPrice) {\n return;\n }\n if (!triggerPrice) {\n return;\n }\n if (type === \"tp\") {\n setValue(\"tp_trigger_price\", triggerPrice);\n } else {\n setValue(\"sl_trigger_price\", triggerPrice);\n }\n if (options.qty) {\n setValue(\"quantity\", options.qty);\n }\n }, [type, triggerPrice, options.qty]);\n\n const cancel = (): Promise<void> => {\n if (order?.algo_order_id && order?.symbol) {\n return deleteOrder(order?.algo_order_id, order?.symbol);\n }\n return Promise.reject(\"order id or symbol is invalid\");\n };\n\n const onConfirm = (\n order: ComputedAlgoOrder,\n options: {\n position: API.Position;\n submit: (params?: { accountId?: string }) => Promise<any>;\n cancel: () => Promise<any>;\n },\n ) => {\n if (!needConfirm) {\n return Promise.resolve(true);\n }\n\n const maxQty = Math.abs(Number(position?.position_qty));\n if (\n `${order.tp_trigger_price ?? \"\"}`.length === 0 &&\n `${order.sl_trigger_price ?? \"\"}`.length === 0\n ) {\n return modal\n .confirm({\n title: t(\"orders.cancelOrder\"),\n content: t(\"tpsl.cancelOrder.description\"),\n onOk: () => {\n return options.cancel();\n },\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n }\n\n return modal\n .confirm({\n title: t(\"tpsl.confirmOrder\"),\n // bodyClassName: \"lg:oui-py-0\",\n onOk: async () => {\n try {\n const res = await options.submit({\n accountId: position?.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n classNames: {\n body: \"!oui-pb-0\",\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={positionType === PositionType.FULL}\n isEditing={isEditing}\n symbol={order.symbol!}\n qty={Number(order.quantity)}\n maxQty={maxQty}\n tpPrice={Number(order.tp_trigger_price)}\n slPrice={Number(order.sl_trigger_price)}\n side={order.side!}\n orderInfo={order}\n quoteDP={symbolInfo[symbol](\"quote_dp\") ?? 2}\n baseDP={symbolInfo[symbol](\"base_dp\") ?? 2}\n />\n ),\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n };\n\n const onSubmit = async () => {\n try {\n const validOrder = await validate();\n console.log(\"validOrder\", validOrder);\n if (validOrder) {\n if (!needConfirm) {\n return submit({ accountId: position?.account_id })\n .then(() => true)\n .catch((err) => {\n if (err?.message) {\n toast.error(err.message);\n }\n throw false;\n });\n }\n\n return onConfirm(tpslOrder, {\n position: position!,\n submit,\n cancel,\n });\n }\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n return {\n isEditing,\n symbolInfo: symbolInfo[symbol],\n maxQty,\n setQuantity: useMemoizedFn(setQuantity),\n orderQuantity: tpslOrder.quantity,\n // isPosition: isPositionTPSL,\n\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n // needConfirm,\n onSubmit,\n metaState,\n errors,\n status: {\n isCreateMutating,\n isUpdateMutating,\n },\n position,\n setValues,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLBuilder>;\n","import {\n ComputedAlgoOrder,\n useLocalStorage,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide, PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n Box,\n Checkbox,\n cn,\n Divider,\n Flex,\n Text,\n textVariants,\n} from \"@kodiak-finance/orderly-ui\";\nimport { transSymbolformString } from \"@kodiak-finance/orderly-utils\";\n\nexport type PositionTPSLConfirmProps = {\n symbol: string;\n qty: number;\n tpPrice?: number;\n slPrice?: number;\n maxQty: number;\n side: OrderSide;\n // symbolConfig:API.SymbolExt\n baseDP: number;\n quoteDP: number;\n isEditing?: boolean;\n isPositionTPSL?: boolean;\n orderInfo: ComputedAlgoOrder;\n};\n\nconst TPSLOrderType = (props: { tpPrice?: number; slPrice?: number }) => {\n const { tpPrice, slPrice } = props;\n const { t } = useTranslation();\n\n if (!!tpPrice && !!slPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"common.tpsl\")}\n </Badge>\n );\n }\n\n if (!!tpPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"tpsl.tp\")}\n </Badge>\n );\n }\n\n if (!!slPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"tpsl.sl\")}\n </Badge>\n );\n }\n\n return null;\n};\n\n// ------------ Position TP/SL Confirm dialog start------------\nexport const PositionTPSLConfirm = (props: PositionTPSLConfirmProps) => {\n const {\n symbol,\n tpPrice,\n slPrice,\n qty,\n maxQty,\n side,\n quoteDP,\n baseDP,\n isEditing,\n isPositionTPSL: _isPositionTPSL,\n orderInfo: order,\n } = props;\n const { t } = useTranslation();\n\n const [needConfirm, setNeedConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true,\n );\n const renderPositionType = () => {\n if (order.position_type === PositionType.FULL) {\n return <Text>{t(\"tpsl.positionType.full\")}</Text>;\n }\n return <Text>{t(\"tpsl.positionType.partial\")}</Text>;\n };\n // console.log(\"PositionTPSLConfirm\", qty, maxQty, quoteDP);\n\n const renderTPSLPrice = ({\n price,\n isOrderPrice,\n isEnable,\n colorType,\n }: {\n price: string | number;\n isOrderPrice?: boolean;\n isEnable?: boolean;\n colorType: \"TP\" | \"SL\";\n }) => {\n if (!isEnable) {\n return <Text className=\"oui-text-base-contrast-36\">-- USDC</Text>;\n }\n if (!price) {\n if (isOrderPrice) {\n return (\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n );\n }\n }\n return (\n <Text.numeral\n unit={\"USDC\"}\n rule={\"price\"}\n className={cn(\n \"oui-text-base-contrast\",\n colorType === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n dp={quoteDP}\n padding={false}\n >\n {price}\n </Text.numeral>\n );\n };\n\n const isPositionTPSL = _isPositionTPSL;\n\n return (\n <>\n {isEditing && (\n <Text as=\"div\" size=\"2xs\" intensity={80} className=\"oui-mb-3\">\n {t(\"tpsl.agreement\", { symbol: transSymbolformString(symbol) })}\n </Text>\n )}\n\n <Flex pb={4}>\n <Box grow>\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n as=\"div\"\n intensity={80}\n >\n {symbol}\n </Text.formatted>\n </Box>\n <Flex gap={1}>\n {isPositionTPSL && (\n <Badge size=\"xs\" color={\"primary\"}>\n {t(\"common.position\")}\n </Badge>\n )}\n\n {/* <Badge size=\"xs\" color=\"neutral\">\n TP/SL\n </Badge> */}\n <TPSLOrderType tpPrice={tpPrice} slPrice={slPrice} />\n {side === OrderSide.SELL ? (\n <Badge size=\"xs\" color=\"success\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge size=\"xs\" color=\"danger\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider />\n {order.tp_trigger_price || order.sl_trigger_price ? (\n <>\n <Divider className=\"oui-my-4\" />\n <div\n className={textVariants({\n size: \"sm\",\n intensity: 54,\n className:\n \"oui-space-y-1 oui-w-full oui-flex oui-flex-col oui-gap-3\",\n })}\n >\n <Text className=\"oui-text-base-contrast\">\n {renderPositionType()}\n </Text>\n <Flex justify={\"between\"}>\n <Text>{t(\"common.orderQty\")}</Text>\n <Text.numeral\n rule={\"price\"}\n dp={baseDP}\n padding={false}\n className=\"oui-text-base-contrast\"\n >\n {order.quantity ?? \"-\"}\n </Text.numeral>\n </Flex>\n\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n gap={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpTriggerPrice\")}</Text>{\" \"}\n {renderTPSLPrice({\n price: order.tp_trigger_price ?? \"\",\n isOrderPrice: false,\n isEnable: !!order.tp_trigger_price,\n colorType: \"TP\",\n })}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpOrderPrice\")}</Text>\n {renderTPSLPrice({\n price: order.tp_order_price ?? \"\",\n isOrderPrice: true,\n isEnable: !!order.tp_trigger_price,\n colorType: \"TP\",\n })}\n </Flex>\n </Flex>\n\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n gap={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slTriggerPrice\")}</Text>\n {renderTPSLPrice({\n price: order.sl_trigger_price ?? \"\",\n isOrderPrice: false,\n isEnable: !!order.sl_trigger_price,\n colorType: \"SL\",\n })}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slOrderPrice\")}</Text>\n {renderTPSLPrice({\n price: order.sl_order_price ?? \"\",\n isOrderPrice: true,\n isEnable: !!order.sl_trigger_price,\n colorType: \"SL\",\n })}\n </Flex>\n </Flex>\n </div>\n </>\n ) : null}\n <Box pt={2}>\n <Flex gap={1}>\n <Checkbox\n id=\"disabledConfirm\"\n color=\"white\"\n checked={!needConfirm}\n onCheckedChange={(check) => {\n setNeedConfirm(!check);\n }}\n />\n <label\n htmlFor=\"disabledConfirm\"\n className={textVariants({\n size: \"xs\",\n intensity: 54,\n className: \"oui-ml-1\",\n })}\n >\n {t(\"orderEntry.disableOrderConfirm\")}\n </label>\n </Flex>\n </Box>\n </>\n );\n};\n\n//------------- Position TP/SL Confirm dialog end------------\n","import { useMemo } from \"react\";\nimport { useLocalStorage, useMarkPrice } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AlgoOrderRootType, API, PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n modal,\n useModal,\n Text,\n Box,\n Badge,\n Divider,\n toast,\n} from \"@kodiak-finance/orderly-ui\";\nimport { TPSLWidget, TPSLWidgetProps } from \"./positionTPSL\";\n\ntype TPSLSheetProps = {\n order?: API.AlgoOrder;\n // label: string;\n // baseDP?: number;\n // quoteDP?: number;\n symbolInfo: API.SymbolExt;\n isEditing?: boolean;\n};\n\nexport const PositionTPSLSheet = (props: TPSLWidgetProps & TPSLSheetProps) => {\n const { position, order, symbolInfo, isEditing } = props;\n const { resolve, hide, updateArgs } = useModal();\n\n const isPositionTPSL = isEditing\n ? order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n : undefined;\n\n return (\n <>\n <TPSLWidget\n {...props}\n positionType={\n props.positionType ??\n (isPositionTPSL ? PositionType.FULL : PositionType.PARTIAL)\n }\n onCancel={() => {\n hide();\n }}\n />\n </>\n );\n};\n","import { useEffect, useState, SVGProps } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n Divider,\n Flex,\n ScrollArea,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { useTPSLAdvanced } from \"./useTPSLAdvanced.script\";\n\ntype Props = ReturnType<typeof useTPSLAdvanced>;\n\nexport const TPSLAdvancedUI = (props: Props) => {\n const { t } = useTranslation();\n const { errors, validated } = props.metaState;\n\n const {\n formattedOrder,\n setValue: setOrderValue,\n symbolInfo,\n setValues,\n } = props;\n const [tpValues, setTpValuse] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n });\n\n const [slValues, setSlValues] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n });\n\n // Update tpValues when formattedOrder changes\n useEffect(() => {\n setTpValuse((prev) => ({\n ...prev,\n enable: formattedOrder.tp_enable ?? true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n useEffect(() => {\n setSlValues((prev) => ({\n ...prev,\n enable: formattedOrder.sl_enable ?? true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n return (\n <div className=\"oui-rounded-[16px] oui-py-3 oui-flex oui-flex-col oui-justify-between oui-h-full\">\n <div className=\"oui-px-3\">\n <Flex\n className=\"oui-mb-5 oui-cursor-pointer oui-text-base oui-text-base-contrast-80\"\n gap={1}\n itemAlign={\"center\"}\n onClick={props.onClose}\n >\n <ArrowRightIcon className=\" oui-text-base-contrast-80\" />\n <Text>{t(\"tpsl.advanced.title\")}</Text>\n </Flex>\n </div>\n <ScrollArea className=\"oui-flex-1\">\n <div className=\"oui-px-3\">\n <OrderInfo\n order={formattedOrder as OrderlyOrder}\n baseDP={symbolInfo.base_dp}\n quoteDP={symbolInfo.quote_dp}\n symbolLeverage={props.symbolLeverage}\n />\n </div>\n <Divider className=\"oui-my-3\" />\n <div className=\"oui-px-3\">\n <Flex className=\"oui-gap-[6px]\">\n <Button\n onClick={() => {\n setOrderValue(\"side\", OrderSide.BUY);\n }}\n size={\"sm\"}\n fullWidth\n data-type={OrderSide.BUY}\n // color={side === OrderSide.BUY ? \"buy\" : \"secondary\"}\n className={cn(\n formattedOrder.side === OrderSide.BUY\n ? \"oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\"\n : \"oui-bg-base-7 oui-text-base-contrast-36 hover:oui-bg-base-6 active:oui-bg-base-6\",\n )}\n data-testid=\"oui-testid-orderEntry-side-buy-button\"\n >\n {t(\"common.buy\")}\n </Button>\n <Button\n onClick={() => {\n setOrderValue(\"side\", OrderSide.SELL);\n }}\n data-type={OrderSide.SELL}\n fullWidth\n size={\"sm\"}\n // color={side === OrderSide.SELL ? \"sell\" : \"secondary\"}\n className={cn(\n formattedOrder.side === OrderSide.SELL\n ? \"oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\"\n : \"oui-bg-base-7 oui-text-base-contrast-36 hover:oui-bg-base-6 active:oui-bg-base-6\",\n )}\n data-testid=\"oui-testid-orderEntry-side-sell-button\"\n >\n {t(\"common.sell\")}\n </Button>\n </Flex>\n <div className=\"oui-py-3\">\n <TPSLPositionTypeWidget\n value={formattedOrder.position_type ?? PositionType.PARTIAL}\n onChange={(key, value) => {\n // setOrderValue(\"position_type\", value);\n if (value === PositionType.FULL) {\n setValues({\n position_type: PositionType.FULL,\n tp_order_type: OrderType.MARKET,\n tp_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n sl_order_price: undefined,\n });\n // setOrderValue(\"tp_order_type\", OrderType.MARKET);\n // setOrderValue(\"sl_order_type\", OrderType.MARKET);\n return;\n }\n setOrderValue(\"position_type\", value);\n }}\n />\n {formattedOrder.position_type === PositionType.FULL && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-3 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-[#D25f00]\" />\n <Text className=\"oui-text-2xs oui-text-[#D25f00]\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n </Flex>\n )}\n </div>\n <Flex direction={\"column\"} gap={6}>\n <TPSLInputRowWidget\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"tp\"\n side={formattedOrder.side as OrderSide}\n values={tpValues}\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n onChange={(key, value) => {\n // setTpValuse((prev) => ({ ...prev, [key]: value }));\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n symbolLeverage={props.symbolLeverage}\n />\n <TPSLInputRowWidget\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"sl\"\n side={formattedOrder.side as OrderSide}\n values={slValues}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n symbolLeverage={props.symbolLeverage}\n />\n </Flex>\n\n <PnlInfo\n tp_pnl={formattedOrder.tp_pnl}\n sl_pnl={formattedOrder.sl_pnl}\n className=\"oui-mt-6\"\n />\n </div>\n </ScrollArea>\n <Flex className=\"oui-mt-6 oui-px-3\" gap={2}>\n <Button\n size=\"md\"\n fullWidth\n color=\"gray\"\n variant=\"outlined\"\n className=\"oui-text-base-contrast-36\"\n onClick={props.onClose}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n size=\"md\"\n fullWidth\n color=\"success\"\n className={cn(\n formattedOrder.side === OrderSide.SELL\n ? \"oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\"\n : \"oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\",\n )}\n onClick={props.onSubmit}\n >\n {t(\"tpsl.advanced.submit\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nexport const ArrowRightIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.03752 2.9294C7.89169 2.95857 7.74527 3.03207 7.65661 3.16624L5.33145 6.66624C5.20137 6.86224 5.20137 7.12648 5.33145 7.32248L7.65661 10.8225C7.83452 11.0902 8.20669 11.1655 8.47385 10.9864C8.74044 10.8079 8.8151 10.434 8.63719 10.1662L6.53019 6.99408L8.63719 3.82249C8.8151 3.55416 8.74044 3.18082 8.47385 3.00232C8.34027 2.91249 8.18335 2.89965 8.03752 2.9294Z\" />\n </svg>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { OrderValidationResult, useOrderEntry } from \"@kodiak-finance/orderly-hooks\";\nimport { OrderlyOrder, OrderType, PositionType } from \"@kodiak-finance/orderly-types\";\n\ntype Props = {\n order: OrderlyOrder;\n setOrderValue: (key: string, value: any) => void;\n onSubmit: (formattedOrder: OrderlyOrder) => void;\n onClose: () => void;\n symbolLeverage?: number;\n};\n\nconst isTPSLEnable = (order: OrderlyOrder, type: \"tp\" | \"sl\") => {\n if (order.tp_trigger_price || order.sl_trigger_price) {\n if (type === \"tp\") {\n return !!order.tp_trigger_price;\n }\n if (type === \"sl\") {\n return !!order.sl_trigger_price;\n }\n }\n // no edit, enable tp /sl\n return true;\n};\n\nexport const useTPSLAdvanced = (props: Props) => {\n const { order, setOrderValue, onClose } = props;\n const [innerMetaState, setInnerMetaState] =\n useState<OrderValidationResult | null>(null);\n const {\n formattedOrder,\n setValue,\n setValues,\n helper,\n symbolInfo,\n metaState,\n ...state\n } = useOrderEntry(order.symbol, {\n initialOrder: {\n symbol: order.symbol,\n order_type: order.order_type,\n side: order.side,\n order_price: order.order_price,\n order_quantity: order.order_quantity,\n position_type: order.position_type ?? PositionType.PARTIAL,\n trigger_price: order.trigger_price,\n tp_enable: isTPSLEnable(order, \"tp\"),\n sl_enable: isTPSLEnable(order, \"sl\"),\n tp_trigger_price: order.tp_trigger_price,\n sl_trigger_price: order.sl_trigger_price,\n tp_order_price: order.tp_order_price,\n sl_order_price: order.sl_order_price,\n tp_order_type: order.tp_order_type,\n sl_order_type: order.sl_order_type,\n sl_pnl: order.sl_pnl,\n sl_offset: order.sl_offset,\n sl_offset_percentage: order.sl_offset_percentage,\n tp_pnl: order.tp_pnl,\n tp_offset: order.tp_offset,\n tp_offset_percentage: order.tp_offset_percentage,\n },\n });\n\n const onSubmit = () => {\n helper\n .validate()\n .then(() => {\n props.onSubmit(formattedOrder as OrderlyOrder);\n })\n .catch((err) => {\n console.log(\"metaState\", metaState);\n console.log(\"err\", err);\n });\n };\n\n return {\n order,\n formattedOrder,\n symbolInfo,\n setValue,\n setValues,\n onSubmit,\n onClose,\n metaState,\n symbolLeverage: props.symbolLeverage,\n };\n};\n","import { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLAdvancedUI } from \"./tpslAdvanced.ui\";\nimport { useTPSLAdvanced } from \"./useTPSLAdvanced.script\";\n\ntype Props = {\n order: OrderlyOrder;\n setOrderValue: (key: string, value: any) => void;\n onSubmit: (formattedOrder: OrderlyOrder) => void;\n onClose: () => void;\n symbolLeverage?: number;\n};\n\nexport const TPSLAdvancedWidget = (props: Props) => {\n const state = useTPSLAdvanced({\n order: props.order,\n setOrderValue: props.setOrderValue,\n onSubmit: props.onSubmit,\n onClose: props.onClose,\n symbolLeverage: props.symbolLeverage,\n });\n return <TPSLAdvancedUI {...state} />;\n};\n\nexport const TPSLAdvancedSheetId = \"TPSLAdvancedSheetId\";\nexport const TPSLAdvancedDialogId = \"TPSLAdvancedDialogId\";\n\nregisterSimpleSheet(TPSLAdvancedSheetId, TPSLAdvancedWidget, {\n title: () => i18n.t(\"common.settings\"),\n});\n\nregisterSimpleDialog(TPSLAdvancedDialogId, TPSLAdvancedWidget, {\n title: () => i18n.t(\"common.settings\"),\n});\n","import { AlgoOrder, API } from \"@kodiak-finance/orderly-types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useTPSLDetail } from \"./tpslDetail.script\";\nimport { TPSLDetailProvider } from \"./tpslDetailProvider\";\nimport { TPSLDetailUI } from \"./tsplDetail.ui\";\n\nexport type TPSLDetailProps = {\n position: API.Position;\n order: AlgoOrder;\n baseDP: number;\n quoteDP: number;\n};\n\nexport const TPSLDetailWidget = (props: TPSLDetailProps) => {\n const state = useTPSLDetail(props);\n return (\n <TPSLDetailProvider\n symbol={props.position.symbol}\n position={props.position}\n >\n <TPSLDetailUI {...state} />\n </TPSLDetailProvider>\n );\n};\nexport const TPSLDetailDialogId = \"TPSLDetailDialogId \";\nexport const TPSLDetailSheetId = \"TPSLDetailSheetId\";\nregisterSimpleDialog(TPSLDetailDialogId, TPSLDetailWidget, {\n classNames: {\n content: \"oui-w-[420px] lg:oui-pt-4 lg:oui-pb-2 !oui-px-0\",\n body: \"lg:oui-py-0\",\n },\n});\n\nregisterSimpleSheet(TPSLDetailSheetId, TPSLDetailWidget, {\n classNames: {\n content: \"!oui-p-0\",\n },\n});\n","import { useEffect, useState } from \"react\";\nimport {\n ComputedAlgoOrder,\n findPositionTPSLFromOrders,\n findTPSLFromOrder,\n useLocalStorage,\n useOrderStream,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AlgoOrder,\n AlgoOrderRootType,\n API,\n OrderStatus,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport { modal, toast, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLDialogId, TPSLSheetId } from \"../positionTPSL/tpsl.widget\";\nimport { TPSLDetailProps } from \"./tpslDetail.widget\";\n\nexport const useTPSLDetail = (props: TPSLDetailProps) => {\n const { position } = props;\n const symbol = position.symbol;\n const symbolInfo = useSymbolsInfo()[symbol];\n\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n const [fullPositionOrders, setFullPositionOrders] = useState<API.AlgoOrder[]>(\n [],\n );\n const [partialPositionOrders, setPartialPositionOrders] = useState<\n API.AlgoOrder[]\n >([]);\n\n const [tpslOrders, { cancelAlgoOrder, cancelPostionOrdersByTypes, refresh }] =\n useOrderStream(\n {\n symbol: position.symbol,\n status: OrderStatus.INCOMPLETE,\n includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n size: 500,\n },\n {\n keeplive: true,\n },\n );\n\n const onCancelOrder = async (order: API.AlgoOrder) => {\n return await cancelAlgoOrder(order.algo_order_id, order.symbol);\n };\n const onCancelAllTPSLOrders = async () => {\n return await cancelPostionOrdersByTypes(symbol, [AlgoOrderRootType.TP_SL]);\n };\n\n const showTPSLDialog = ({\n order,\n positionType,\n isEditing,\n }: {\n order?: API.AlgoOrder;\n positionType: PositionType;\n isEditing: boolean;\n }) => {\n const dialogId = isMobile ? TPSLSheetId : TPSLDialogId;\n modal.show(dialogId, {\n order: order,\n symbol: position.symbol,\n positionType,\n isEditing,\n });\n };\n\n const editTPSLOrder = (order: API.AlgoOrder, positionType: PositionType) => {\n showTPSLDialog({ order, positionType, isEditing: true });\n };\n\n const addTPSLOrder = (positionType: PositionType) => {\n showTPSLDialog({ positionType, isEditing: false });\n };\n\n useEffect(() => {\n if (tpslOrders) {\n const { fullPositionOrder, partialPositionOrders } =\n findPositionTPSLFromOrders(tpslOrders, symbol);\n\n setFullPositionOrders(fullPositionOrder ? [fullPositionOrder] : []);\n setPartialPositionOrders(partialPositionOrders ?? []);\n }\n }, [tpslOrders, symbol]);\n\n return {\n symbolInfo,\n position,\n symbol,\n fullPositionOrders,\n partialPositionOrders,\n cancelPostionOrdersByTypes,\n onCancelOrder,\n onCancelAllTPSLOrders,\n editTPSLOrder,\n addTPSLOrder,\n };\n};\n\nexport type TPSLDetailState = ReturnType<typeof useTPSLDetail>;\n","import { createContext, PropsWithChildren, useContext } from \"react\";\nimport { useSymbolsInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\n\nexport interface TPSLDetailContextState {\n base_dp: number;\n quote_dp: number;\n position: API.Position;\n}\n\nexport const TPSLDetailContext = createContext({} as TPSLDetailContextState);\n\ninterface TPSLDetailProviderProps {\n symbol: string;\n position: API.Position;\n}\n\nexport const TPSLDetailProvider = (\n props: PropsWithChildren<TPSLDetailProviderProps>,\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n return (\n <TPSLDetailContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n position: props.position,\n }}\n >\n {props.children}\n </TPSLDetailContext.Provider>\n );\n};\n\nexport const useTPSLDetailContext = () => {\n return useContext(TPSLDetailContext);\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n ChevronDownIcon,\n cn,\n ExclamationFillIcon,\n Flex,\n Text,\n toast,\n Tooltip,\n ThrottledButton,\n useScreen,\n ScrollArea,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { OrdersTable } from \"./ordersTable\";\nimport { OrdersTableMobile } from \"./ordersTable.mobile\";\nimport { TPSLDetailState } from \"./tpslDetail.script\";\n\nexport const TPSLDetailUI = (props: TPSLDetailState) => {\n const { isMobile } = useScreen();\n const {\n position,\n fullPositionOrders,\n partialPositionOrders,\n onCancelOrder,\n onCancelAllTPSLOrders,\n editTPSLOrder,\n addTPSLOrder,\n symbolInfo,\n } = props;\n\n return (\n <Box>\n <ScrollArea className={cn(isMobile && \"oui-h-[calc(100vh-100px)]\")}>\n <OrderInfo\n order={{\n symbol: position.symbol,\n order_quantity: position.position_qty.toString(),\n order_price: position.average_open_price.toString(),\n }}\n symbolLeverage={position.leverage}\n baseDP={symbolInfo(\"base_dp\")}\n quoteDP={symbolInfo(\"quote_dp\")}\n classNames={{\n root: cn(\"oui-mb-6 oui-gap-3 oui-px-5\"),\n container: \"oui-gap-x-[30px]\",\n }}\n />\n <FullPositionPart\n position={position}\n orders={fullPositionOrders}\n onCancelOrder={onCancelOrder}\n onCancelAllTPSLOrders={onCancelAllTPSLOrders}\n editTPSLOrder={editTPSLOrder}\n addTPSLOrder={addTPSLOrder}\n />\n <PartialPositionPart\n position={position}\n orders={partialPositionOrders}\n onCancelOrder={onCancelOrder}\n onCancelAllTPSLOrders={onCancelAllTPSLOrders}\n editTPSLOrder={editTPSLOrder}\n addTPSLOrder={addTPSLOrder}\n />\n </ScrollArea>\n </Box>\n );\n};\n\nconst FullPositionPart = (props: {\n orders: API.AlgoOrder[];\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n onCancelAllTPSLOrders: () => Promise<void>;\n position: API.Position;\n editTPSLOrder: (order: API.AlgoOrder, positionType: PositionType) => void;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const [open, setOpen] = useState(true);\n const { orders } = props;\n const { isMobile } = useScreen();\n return (\n <Box className=\"oui-mt-6\">\n <Box\n className={cn(\"oui-flex oui-items-center oui-justify-between oui-px-5\")}\n >\n <PositionTypeDescription\n positionType={PositionType.FULL}\n open={open}\n onOpenChange={setOpen}\n />\n {orders && orders.length === 0 && (\n <Flex gap={2}>\n <AddButton\n positionType={PositionType.FULL}\n position={props.position}\n addTPSLOrder={props.addTPSLOrder}\n />\n </Flex>\n )}\n </Box>\n\n <Box\n className={cn(\n \"oui-overflow-hidden oui-transition-[height] oui-duration-150\",\n open ? \"oui-h-auto\" : \"oui-h-0 oui-pb-4\",\n )}\n >\n {isMobile ? (\n <OrdersTableMobile\n orders={orders}\n editTPSLOrder={(order) =>\n props.editTPSLOrder(order, PositionType.FULL)\n }\n canCancelOrder={props.onCancelOrder}\n />\n ) : (\n <OrdersTable\n orders={orders}\n editTPSLOrder={(order) => {\n props.editTPSLOrder(order, PositionType.FULL);\n }}\n onCancelOrder={props.onCancelOrder}\n />\n )}\n </Box>\n </Box>\n );\n};\n\nconst PartialPositionPart = (props: {\n position: API.Position;\n orders: API.AlgoOrder[];\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n onCancelAllTPSLOrders: () => Promise<void>;\n editTPSLOrder: (order: API.AlgoOrder, positionType: PositionType) => void;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const [open, setOpen] = useState(true);\n const { orders } = props;\n const { isMobile } = useScreen();\n return (\n <Box className=\"oui-pt-6\">\n <Box\n className={cn(\n \"oui-flex oui-items-center oui-justify-between\",\n \"oui-px-5\",\n isMobile\n ? \"oui-flex-col oui-items-start oui-justify-start oui-gap-[11px]\"\n : \"oui-flex-row oui-items-center oui-justify-between\",\n )}\n >\n <PositionTypeDescription\n positionType={PositionType.PARTIAL}\n open={open}\n onOpenChange={setOpen}\n />\n <Flex gap={2}>\n <AddButton\n positionType={PositionType.PARTIAL}\n position={props.position}\n addTPSLOrder={props.addTPSLOrder}\n />\n {orders && orders.length > 0 && (\n <CancelAllBtn\n canCancelAll={orders && orders.length > 0}\n onCancelAllTPSLOrders={props.onCancelAllTPSLOrders}\n />\n )}\n </Flex>\n </Box>\n <Box\n className={cn(\n \"oui-overflow-hidden oui-transition-[height] oui-duration-150\",\n open ? \"oui-h-auto\" : \"oui-h-0 oui-pb-4\",\n )}\n >\n {isMobile ? (\n <OrdersTableMobile\n orders={orders}\n editTPSLOrder={(order) =>\n props.editTPSLOrder(order, PositionType.PARTIAL)\n }\n canCancelOrder={props.onCancelOrder}\n />\n ) : (\n <OrdersTable\n className=\"oui-h-[300px]\"\n orders={orders}\n editTPSLOrder={(order) => {\n props.editTPSLOrder(order, PositionType.PARTIAL);\n }}\n onCancelOrder={props.onCancelOrder}\n />\n )}\n </Box>\n </Box>\n );\n};\n\nconst PositionTypeDescription = (props: {\n positionType: PositionType;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) => {\n const { t } = useTranslation();\n return (\n <Flex\n gap={1}\n itemAlign={\"center\"}\n justify={\"start\"}\n className=\"oui-text-2xs\"\n >\n <Flex\n itemAlign={\"center\"}\n justify={\"start\"}\n gap={1}\n className=\"oui-cursor-pointer\"\n onClick={() => props.onOpenChange(!props.open)}\n >\n <ChevronDownIcon\n size={12}\n color=\"white\"\n className={cn(\n \"oui-cursor-pointer oui-transition-transform\",\n props.open && \"oui-rotate-180\",\n )}\n />\n {props.positionType === PositionType.FULL ? (\n <Text>{t(\"tpsl.positionType.full\")}</Text>\n ) : (\n <Text>{t(\"tpsl.positionType.partial\")}</Text>\n )}\n </Flex>\n <Tooltip\n className=\"oui-w-[280px] oui-p-3\"\n content={\n props.positionType === PositionType.FULL\n ? t(\"tpsl.positionType.full.tips\")\n : t(\"tpsl.positionType.partial.tips\")\n }\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={12}\n />\n </Tooltip>\n </Flex>\n );\n};\n\nexport const AddButton = (props: {\n positionType: PositionType;\n position: API.Position;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const { t } = useTranslation();\n const onAdd = () => {\n props.addTPSLOrder(props.positionType);\n };\n return (\n <ThrottledButton\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-w-[94px] oui-text-2xs\"\n onClick={onAdd}\n >\n {t(\"tpsl.add\")}\n </ThrottledButton>\n );\n};\n\nexport const CancelAllBtn = (props: {\n onCancelAllTPSLOrders: () => Promise<void>;\n canCancelAll: boolean;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n <ThrottledButton\n loading={loading}\n variant=\"outlined\"\n disabled={!props.canCancelAll}\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-w-[94px] oui-text-2xs disabled:oui-border-base-contrast-16 disabled:oui-bg-transparent disabled:oui-text-base-contrast-20\"\n onClick={() => {\n setLoading(true);\n props\n .onCancelAllTPSLOrders()\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n {t(\"tpsl.cancelAll\")}\n </ThrottledButton>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { cn, ScrollArea } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useColumn } from \"./useColum\";\n\nexport const OrdersTable = (props: {\n className?: string;\n orders: API.AlgoOrder[];\n editTPSLOrder: (order: API.AlgoOrder) => void;\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { orders } = props;\n const columns = useColumn({ onCancelOrder: props.onCancelOrder });\n return (\n // <ScrollArea className={cn( props.className)}>\n\n <AuthGuardDataTable\n columns={columns}\n dataSource={orders}\n className=\"oui-bg-transparent oui-text-2xs\"\n bordered\n classNames={{\n root: cn(props.className),\n header: \"!oui-bg-base-8\",\n scroll: cn(\n !orders || orders.length === 0\n ? \"!oui-min-h-[170px]\"\n : \"!oui-min-h-[100px]\",\n ),\n }}\n onRow={(record) => {\n return {\n className: cn(\n \"oui-h-[53px] oui-cursor-svg-edit !oui-border-none !oui-p-0\",\n ),\n onClick: () => {\n props.editTPSLOrder(record);\n },\n };\n }}\n />\n // </ScrollArea>\n );\n};\n","import { FC, SVGProps, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n Flex,\n Text,\n ThrottledButton,\n toast,\n Tooltip,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { EstPnlRender } from \"./components/estPnl\";\nimport { OrderPriceRender } from \"./components/orderPrice\";\nimport { QtyRender } from \"./components/qty\";\nimport { TriggerPrice } from \"./components/triggerPrice\";\nimport { TypeRender } from \"./components/type\";\n\nexport const useColumn = (props: {\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { onCancelOrder } = props;\n\n const columns = useMemo(() => {\n const moblieColumns = [\n {\n title: t(\"tpsl.tpslDetail.qty\"),\n dataIndex: \"quantity\",\n width: 70,\n className: \"oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <QtyRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.type\"),\n dataIndex: \"type\",\n width: 35,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <TypeRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.trigger\"),\n dataIndex: \"trigger\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => {\n return <TriggerPrice order={record} />;\n },\n },\n {\n title: t(\"tpsl.tpslDetail.price\"),\n dataIndex: \"price\",\n width: 70,\n className: \"oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <OrderPriceRender order={record} />\n ),\n },\n\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast\"\n content={t(\"tpsl.tpslDetail.estPnl.tooltip\")}\n >\n <Text className=\"oui-underline oui-decoration-dashed oui-underline-offset-2\">\n {t(\"tpsl.tpslDetail.estPnl\")}\n </Text>\n </Tooltip>\n ),\n dataIndex: \"estpnl\",\n width: 70,\n className: \"!oui-pr-0 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <EstPnlRender order={record} />\n ),\n },\n ];\n const desktopColums = [\n {\n title: t(\"tpsl.tpslDetail.qty\"),\n dataIndex: \"quantity\",\n width: 70,\n className: cn(\" oui-py-2 !oui-pl-5\"),\n render: (_: string, record: API.AlgoOrder) => (\n <QtyRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.type\"),\n dataIndex: \"type\",\n width: 35,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <TypeRender order={record} />\n ),\n },\n {\n title: t(\"tpsl.tpslDetail.trigger\"),\n dataIndex: \"trigger\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => {\n return <TriggerPrice order={record} />;\n },\n },\n {\n title: t(\"tpsl.tpslDetail.price\"),\n dataIndex: \"price\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <OrderPriceRender order={record} />\n ),\n },\n\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast\"\n content={t(\"tpsl.tpslDetail.estPnl.tooltip\")}\n >\n <Text className=\"oui-underline oui-decoration-dashed oui-underline-offset-2\">\n {t(\"tpsl.tpslDetail.estPnl\")}\n </Text>\n </Tooltip>\n ),\n dataIndex: \"estpnl\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <EstPnlRender order={record} />\n ),\n },\n {\n title: \"\",\n dataIndex: \"delete\",\n width: 50,\n className: cn(\"oui-py-2 !oui-pr-5\"),\n render: (_: any, record: API.AlgoOrder) => {\n return <CancelAllBtn order={record} onCancelOrder={onCancelOrder} />;\n },\n },\n ];\n if (isMobile) {\n return moblieColumns;\n }\n return desktopColums;\n }, [t, isMobile]);\n return columns;\n};\n\nexport const FlexCell = (props: { children: React.ReactNode }) => {\n return (\n <Flex\n direction={\"column\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs oui-h-[36px]\"\n >\n {props.children}\n </Flex>\n );\n};\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\nconst DeleteIcon: FC<IconProps> = (props) => {\n const { size = 18 } = props;\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M5.48081 15.375C5.10681 15.375 4.78731 15.2426 4.52231 14.9777C4.25744 14.7127 4.125 14.3932 4.125 14.0192V4.50004H3.375V3.37505H6.75V2.71167H11.25V3.37505H14.625V4.50004H13.875V14.0192C13.875 14.3981 13.7438 14.7188 13.4813 14.9813C13.2188 15.2438 12.8981 15.375 12.5192 15.375H5.48081ZM12.75 4.50004H5.25V14.0192C5.25 14.0866 5.27162 14.1419 5.31487 14.1852C5.35812 14.2284 5.41344 14.25 5.48081 14.25H12.5192C12.5769 14.25 12.6298 14.226 12.6778 14.1779C12.7259 14.1299 12.75 14.077 12.75 14.0192V4.50004ZM7.053 12.75H8.17781V6.00004H7.053V12.75ZM9.82219 12.75H10.947V6.00004H9.82219V12.75Z\" />\n </svg>\n );\n};\n\nexport const CancelAllBtn = (props: {\n order: API.AlgoOrder;\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n return (\n <ThrottledButton\n size=\"sm\"\n loading={loading}\n variant=\"text\"\n color=\"gray\"\n onClick={(e) => {\n e.stopPropagation();\n console.log(\"delete\");\n setLoading(true);\n props\n .onCancelOrder?.(props.order)\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n <DeleteIcon className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer\" />\n </ThrottledButton>\n );\n};\n","import { findTPSLFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { positions as perpPositions } from \"@kodiak-finance/orderly-perp\";\nimport { API, OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, getTPSLDirection } from \"@kodiak-finance/orderly-utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const EstPnlRender = ({ order }: { order: API.AlgoOrder }) => {\n const { position, base_dp, quote_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n\n let tp_unrealPnl = undefined;\n let sl_unrealPnl = undefined;\n const qty = new Decimal(order.quantity).eq(0)\n ? position.position_qty\n : order.quantity;\n\n const side = position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL;\n const openPrice = position?.average_open_price;\n\n if (tp_trigger_price) {\n const direction = getTPSLDirection({\n side,\n type: \"tp\",\n closePrice: tp_trigger_price,\n orderPrice: openPrice,\n });\n tp_unrealPnl = new Decimal(\n perpPositions.unrealizedPnL({\n qty,\n openPrice,\n // markPrice: unRealizedPrice,\n markPrice: tp_trigger_price,\n }),\n )\n .abs()\n .mul(direction)\n .toNumber();\n }\n\n if (sl_trigger_price) {\n const direction = getTPSLDirection({\n side,\n type: \"sl\",\n closePrice: sl_trigger_price,\n orderPrice: openPrice,\n });\n sl_unrealPnl = new Decimal(\n perpPositions.unrealizedPnL({\n qty: qty,\n openPrice,\n // markPrice: unRealizedPrice,\n markPrice: sl_trigger_price,\n }),\n )\n .abs()\n .mul(direction)\n // .mul(-1)\n .toNumber();\n }\n return (\n <Flex\n gap={2}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_unrealPnl && (\n <FlexCell>\n <Text.numeral dp={2} rm={Decimal.ROUND_DOWN} coloring padding={false}>\n {tp_unrealPnl}\n </Text.numeral>\n </FlexCell>\n )}\n {sl_unrealPnl && (\n <FlexCell>\n <Text.numeral dp={2} rm={Decimal.ROUND_DOWN} coloring padding={false}>\n {sl_unrealPnl}\n </Text.numeral>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { Flex } from \"@kodiak-finance/orderly-ui\";\n\nexport const FlexCell = (props: { children: React.ReactNode }) => {\n return (\n <Flex\n direction={\"column\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs oui-h-[36px]\"\n >\n {props.children}\n </Flex>\n );\n};\n","import { findTPSLOrderPriceFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const OrderPriceRender = ({ order }: { order: API.AlgoOrder }) => {\n const { quote_dp } = useTPSLDetailContext();\n const { tp_order_price, sl_order_price } = findTPSLOrderPriceFromOrder(order);\n const { t } = useTranslation();\n return (\n <Flex\n gap={2}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_order_price && (\n <FlexCell>\n {tp_order_price === OrderType.MARKET ? (\n <Text>{t(\"common.market\")}</Text>\n ) : (\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {tp_order_price}\n </Text.numeral>\n )}\n </FlexCell>\n )}\n {sl_order_price && (\n <FlexCell>\n {sl_order_price === OrderType.MARKET ? (\n <Text>{t(\"common.market\")}</Text>\n ) : (\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {sl_order_price}\n </Text.numeral>\n )}\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { findTPSLFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const QtyRender = ({ order }: { order: API.AlgoOrder }) => {\n const { position, base_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n\n const quantity = useMemo(() => {\n if (order.quantity === 0) {\n return -position.position_qty;\n }\n\n return position.position_qty > 0 ? -order.quantity : order.quantity;\n }, [order.quantity, position.position_qty]);\n\n return (\n <Flex\n direction={\"column\"}\n justify={\"start\"}\n itemAlign={\"start\"}\n className=\"oui-h-full oui-text-2xs\"\n >\n <FlexCell>\n <Text.numeral dp={base_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {quantity}\n </Text.numeral>\n </FlexCell>\n {tp_trigger_price && sl_trigger_price && (\n <FlexCell>\n <div />\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const TriggerPrice = ({ order }: { order: API.AlgoOrder }) => {\n const { quote_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n const { t } = useTranslation();\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_trigger_price && (\n <FlexCell>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {tp_trigger_price}\n </Text.numeral>\n </Flex>\n </FlexCell>\n )}\n {sl_trigger_price && (\n <FlexCell>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {sl_trigger_price}\n </Text.numeral>\n </Flex>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { FlexCell } from \"../components/common\";\n\nexport const TypeRender = ({ order }: { order: API.AlgoOrder }) => {\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_trigger_price && (\n <FlexCell>\n <Text className=\"oui-text-trade-profit\">{t(\"tpsl.tp\")}</Text>\n </FlexCell>\n )}\n\n {sl_trigger_price && (\n <FlexCell>\n <Text className=\"oui-text-trade-loss\">{t(\"tpsl.sl\")}</Text>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Button, cn, ThrottledButton, toast } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useColumn } from \"./useColum\";\n\nexport const OrdersTableMobile = (props: {\n orders: API.AlgoOrder[];\n editTPSLOrder: (order: API.AlgoOrder) => void;\n canCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { t } = useTranslation();\n const { orders } = props;\n const columns = useColumn({ onCancelOrder: () => Promise.resolve() });\n const orderIds = useMemo(() => {\n return orders.reduce(\n (acc, curr) => {\n acc[curr.algo_order_id] = true;\n return acc;\n },\n {} as Record<string, boolean>,\n );\n }, [orders]);\n return (\n <AuthGuardDataTable\n columns={columns}\n dataSource={orders}\n expanded={orderIds}\n bordered\n getRowCanExpand={() => true}\n expandRowRender={(row) => {\n return (\n <Flex gap={2} justify={\"end\"}>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-text-2xs oui-text-base-contrast-54\"\n onClick={() => props.editTPSLOrder(row.original)}\n >\n {t(\"common.edit\")}\n </Button>\n <DeleteBtn\n order={row.original}\n onCancelOrder={props.canCancelOrder}\n />\n </Flex>\n );\n }}\n className=\"oui-bg-transparent oui-px-2 oui-text-2xs\"\n classNames={{\n scroll: cn(\n !orders || orders.length === 0\n ? \"!oui-min-h-[170px]\"\n : \"!oui-min-h-[100px]\",\n ),\n }}\n onRow={() => {\n return {\n className: cn(\n \"oui-h-[53px] oui-cursor-svg-edit !oui-border-none !oui-p-0\",\n ),\n };\n }}\n generatedRowKey={(record) => record.algo_order_id}\n />\n );\n};\n\nexport const DeleteBtn = (props: {\n order: API.AlgoOrder;\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n <ThrottledButton\n className=\"oui-h-6 oui-text-2xs oui-text-base-contrast-54\"\n size=\"sm\"\n loading={loading}\n variant=\"outlined\"\n color=\"gray\"\n onClick={(e) => {\n e.stopPropagation();\n setLoading(true);\n props\n .onCancelOrder?.(props.order)\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n {t(\"common.delete\")}\n </ThrottledButton>\n );\n};\n","import React from \"react\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useTPSLSimpleDialog } from \"./tpslSimpleDialog.script\";\nimport { TPSLSimpleDialogUI } from \"./tpslSimpleDialog.ui\";\n\nexport const TPSLSimpleDialogWidget: React.FC<{\n type: \"tp\" | \"sl\";\n triggerPrice?: number;\n symbol: string;\n close?: () => void;\n onComplete?: () => void;\n showAdvancedTPSLDialog?: () => void;\n}> = (props) => {\n const { close, onComplete, showAdvancedTPSLDialog } = props;\n const state = useTPSLSimpleDialog(props);\n return (\n <TPSLSimpleDialogUI\n {...state}\n close={close}\n onComplete={onComplete}\n showAdvancedTPSLDialog={showAdvancedTPSLDialog}\n />\n );\n};\n\nexport const TPSLSimpleSheetId = \"TPSLSimpleSheetId\";\n\nexport const TPSLSimpleDialogId = \"TPSLSimpleDialogId\";\n\nregisterSimpleSheet(TPSLSimpleSheetId, TPSLSimpleDialogWidget, {\n classNames: {},\n});\n\nregisterSimpleDialog(TPSLSimpleDialogId, TPSLSimpleDialogWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useEffect, useMemo, useRef } from \"react\";\nimport {\n type ComputedAlgoOrder,\n useLocalStorage,\n useMemoizedFn,\n usePositionStream,\n useSymbolsInfo,\n useTPSLOrder,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AlgoOrderRootType,\n API,\n OrderType,\n PositionType,\n SDKError,\n} from \"@kodiak-finance/orderly-types\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { PositionTPSLConfirm } from \"../positionTPSL\";\n\nexport type TPSLBuilderOptions = {\n type: \"tp\" | \"sl\";\n triggerPrice?: number;\n symbol: string;\n};\n\nexport const useTPSLSimpleDialog = (options: TPSLBuilderOptions) => {\n const { type, triggerPrice, symbol } = options;\n const symbolInfo = useSymbolsInfo();\n const [{ rows: positions }, positionsInfo] = usePositionStream(symbol);\n const position = positions?.[0];\n const prevTPSLType = useRef<AlgoOrderRootType>(AlgoOrderRootType.TP_SL);\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n\n const [\n tpslOrder,\n {\n submit,\n deleteOrder,\n setValue,\n setValues,\n validate,\n errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ] = useTPSLOrder(\n {\n symbol: symbol!,\n position_qty: position?.position_qty,\n average_open_price: position?.average_open_price,\n },\n {\n defaultOrder: undefined,\n positionType: PositionType.PARTIAL,\n tpslEnable: { tp_enable: type === \"tp\", sl_enable: type === \"sl\" },\n isEditing: false,\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(\n () => Math.abs(Number(position.position_qty)),\n [position.position_qty],\n );\n\n useEffect(() => {\n if (!maxQty) {\n return;\n }\n setValue(\"quantity\", maxQty);\n if (type === \"tp\") {\n setValue(\"tp_trigger_price\", triggerPrice ?? \"\");\n } else {\n setValue(\"sl_trigger_price\", triggerPrice ?? \"\");\n }\n }, [type, triggerPrice, maxQty]);\n\n const onSubmit = async () => {\n try {\n const validOrder = await validate();\n if (validOrder) {\n if (!needConfirm) {\n return submit({ accountId: position.account_id })\n .then(() => true)\n .catch((err) => {\n if (err?.message) {\n toast.error(err.message);\n }\n throw false;\n });\n }\n // confirm\n return modal\n .confirm({\n title: t(\"tpsl.confirmOrder\"),\n // bodyClassName: \"lg:oui-py-0\",\n onOk: async () => {\n try {\n const res = await submit({\n accountId: position.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n classNames: {\n body: \"!oui-pb-0\",\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={false}\n isEditing={false}\n symbol={symbol}\n qty={Number(tpslOrder.quantity)}\n maxQty={maxQty}\n tpPrice={Number(tpslOrder.tp_trigger_price)}\n slPrice={Number(tpslOrder.sl_trigger_price)}\n side={tpslOrder.side!}\n orderInfo={tpslOrder}\n quoteDP={symbolInfo[symbol](\"quote_dp\")}\n baseDP={symbolInfo[symbol](\"base_dp\")}\n />\n ),\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n }\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n return {\n symbolInfo: symbolInfo[symbol!],\n maxQty,\n setQuantity: useMemoizedFn(setQuantity),\n orderQuantity: tpslOrder.quantity,\n isPosition: false,\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n onSubmit,\n errors,\n status: {\n isCreateMutating,\n isUpdateMutating,\n },\n position,\n setValues,\n type,\n triggerPrice,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLSimpleDialog>;\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport { Box, Button, cn, Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLQuantity } from \"../components/tpslQty\";\nimport { useTPSLSimpleDialog } from \"./tpslSimpleDialog.script\";\n\ntype Props = ReturnType<typeof useTPSLSimpleDialog> & {\n close?: () => void;\n onComplete?: () => void;\n showAdvancedTPSLDialog?: (options: { qty: number }) => void;\n};\n\nexport const TPSLSimpleDialogUI: React.FC<Props> = (props) => {\n const { type, triggerPrice, errors, TPSL_OrderEntity } = props;\n const { t } = useTranslation();\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const footer = (\n <Flex width=\"100%\" itemAlign=\"center\" gap={3} mt={4}>\n <Button\n key=\"secondary\"\n color=\"gray\"\n onClick={() => {\n props.onComplete?.();\n props.close?.();\n }}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n key=\"primary\"\n onClick={() => {\n props.onSubmit().then(() => {\n props.onComplete?.();\n props.close?.();\n });\n }}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </Button>\n </Flex>\n );\n\n const errorMessage = () => {\n const tpError = getErrorMsg(\"tp_trigger_price\");\n const slError = getErrorMsg(\"sl_trigger_price\");\n let text = \"\";\n if (tpError && type === \"tp\") {\n text = tpError;\n }\n if (slError && type === \"sl\") {\n text = slError;\n }\n if (!text) {\n return null;\n }\n return (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-2 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-danger\" />\n <Text className=\"oui-text-danger\">{text}</Text>\n </Flex>\n );\n };\n\n const renderPnl = () => {\n const { tp_pnl, sl_pnl } = TPSL_OrderEntity;\n if (type === \"sl\") {\n return (\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstSlPnl\")}</Text>\n {sl_pnl ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</Text>\n }\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {Number(sl_pnl)}\n </Text.numeral>\n ) : (\n <Text size=\"2xs\">-- USDC</Text>\n )}\n </Flex>\n );\n }\n return (\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n rule=\"price\"\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {tp_pnl ? Number(tp_pnl) : \"--\"}\n </Text.numeral>\n </Flex>\n );\n };\n\n return (\n <Box className=\"oui-w-full oui-px-0.5\">\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={Number(props.orderQuantity ?? props.maxQty)}\n baseTick={props.symbolInfo(\"base_tick\")}\n base_dp={props.symbolInfo(\"base_dp\")}\n base={props.symbolInfo(\"base\")}\n isEditing={false}\n errorMsg={getErrorMsg(\"quantity\")}\n onQuantityChange={props.setQuantity}\n />\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-mt-4 oui-w-full oui-gap-1 oui-text-xs oui-text-base-contrast-36\",\n )}\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"xs\">{t(\"tpsl.advanced.triggerPrice\")}</Text>\n <Text.numeral\n className=\"oui-text-base-contrast\"\n suffix={\n <Text className=\"oui-ml-1 oui-text-xs oui-text-base-contrast-36\">\n USDC\n </Text>\n }\n rule=\"price\"\n size=\"xs\"\n dp={props.symbolInfo(\"quote_dp\")}\n >\n {triggerPrice ? Number(triggerPrice) : \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"xs\">{t(\"tpsl.advanced.orderPrice\")}</Text>\n <Text className=\"oui-text-base-contrast\" size=\"xs\">\n {t(\"tpsl.advanced.market\")}\n </Text>\n </Flex>\n {renderPnl()}\n </Flex>\n {errorMessage()}\n\n <Divider className=\"oui-my-3 oui-w-full\" />\n <Flex\n itemAlign={\"center\"}\n onClick={() => {\n props.close?.();\n props.showAdvancedTPSLDialog?.({\n qty: Number(TPSL_OrderEntity.quantity),\n });\n }}\n className=\"oui-pb-4\"\n >\n <Text color=\"primary\" className=\"oui-cursor-pointer oui-text-sm\">\n {t(\"tpsl.advancedSetting\")}\n </Text>\n </Flex>\n {footer}\n </Box>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useEditBracketOrder } from \"./editBracketOrder.script\";\nimport { EditBracketOrderUI } from \"./editBracketOrder.ui\";\n\nexport const EditBracketOrderWidget = (props: {\n order: API.AlgoOrderExt;\n close?: () => void;\n}) => {\n const state = useEditBracketOrder({ order: props.order });\n return <EditBracketOrderUI {...state} onClose={props.close} />;\n};\n\nexport const EditBracketOrderSheetId = \"EditBracketOrderSheetId\";\nexport const EditBracketOrderDialogId = \"EditBracketOrderDialogId\";\n\nregisterSimpleSheet(EditBracketOrderSheetId, EditBracketOrderWidget);\n\nregisterSimpleDialog(EditBracketOrderDialogId, EditBracketOrderWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useEffect, useMemo } from \"react\";\nimport {\n useMutation,\n useOrderEntry,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderlyOrder,\n OrderType,\n PositionType,\n SDKError,\n} from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\nfunction getInitialOrder(order: API.AlgoOrderExt) {\n const childOrder = order.child_orders[0];\n const positionType =\n childOrder.algo_type === AlgoOrderRootType.TP_SL\n ? PositionType.PARTIAL\n : PositionType.FULL;\n const tpOrder = childOrder.child_orders.find(\n (item) =>\n item.algo_type === AlgoOrderType.TAKE_PROFIT && item.trigger_price,\n );\n const slOrder = childOrder.child_orders.find(\n (item) => item.algo_type === AlgoOrderType.STOP_LOSS && item.trigger_price,\n );\n const tpslPriceInfo: {\n tp_trigger_price?: string | undefined;\n tp_order_type?: OrderType;\n tp_order_price?: string | undefined;\n sl_trigger_price?: string | undefined;\n sl_order_type?: OrderType;\n sl_order_price?: string | undefined;\n } = {};\n if (tpOrder) {\n tpslPriceInfo.tp_trigger_price = tpOrder.trigger_price?.toString();\n tpslPriceInfo.tp_order_type =\n typeof tpOrder.type === \"string\"\n ? (tpOrder.type.replace(\"_ORDER\", \"\") as OrderType)\n : undefined;\n if (tpslPriceInfo.tp_order_type === OrderType.LIMIT) {\n tpslPriceInfo.tp_order_price = tpOrder.price?.toString();\n }\n }\n if (slOrder) {\n tpslPriceInfo.sl_trigger_price = slOrder.trigger_price?.toString();\n tpslPriceInfo.sl_order_type =\n typeof slOrder.type === \"string\"\n ? (slOrder.type.replace(\"_ORDER\", \"\") as OrderType)\n : undefined;\n if (tpslPriceInfo.sl_order_type === OrderType.LIMIT) {\n tpslPriceInfo.sl_order_price = slOrder.price?.toString();\n }\n }\n\n return {\n baseInfo: {\n symbol: order.symbol,\n order_type: order.type,\n side: order.side,\n order_price: order.price,\n order_quantity: order.quantity,\n position_type: positionType,\n tp_enable: !!tpOrder?.trigger_price,\n sl_enable: !!slOrder?.trigger_price,\n },\n tpslPriceInfo,\n tpInfo: {\n orderId: tpOrder?.algo_order_id,\n },\n slInfo: {\n orderId: slOrder?.algo_order_id,\n },\n };\n}\n\nfunction isTPSLPriceChanged(\n originPrice: string | number,\n newPrice: string | number,\n) {\n if (newPrice === undefined || newPrice === null) {\n return true;\n }\n if (isNaN(Number(newPrice))) {\n return false;\n }\n const originDeci = new Decimal(Number(originPrice));\n const newDeci = new Decimal(Number(newPrice));\n return !newDeci.eq(originDeci);\n}\n\nexport const useEditBracketOrder = (props: { order: API.AlgoOrderExt }) => {\n if (!props.order) {\n throw new SDKError(\"order is required for editBracketOrder\");\n }\n const { baseInfo, tpslPriceInfo, tpInfo, slInfo } = getInitialOrder(\n props.order,\n );\n\n const [doUpdateOrder, { isMutating }] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n const { formattedOrder, setValue, setValues, metaState, symbolInfo, helper } =\n useOrderEntry(props.order.symbol, {\n initialOrder: baseInfo,\n });\n const symbol = props.order.symbol;\n\n const isPriceChanged = useMemo(() => {\n let dirty = false;\n const {\n tp_order_price,\n sl_order_price,\n tp_trigger_price,\n sl_trigger_price,\n } = formattedOrder;\n if (tpslPriceInfo.tp_trigger_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(\n tpslPriceInfo.tp_trigger_price,\n tp_trigger_price ?? 0,\n );\n }\n if (tpslPriceInfo.tp_order_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(tpslPriceInfo.tp_order_price, tp_order_price ?? 0);\n }\n if (tpslPriceInfo.sl_trigger_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(\n tpslPriceInfo.sl_trigger_price,\n sl_trigger_price ?? 0,\n );\n }\n if (tpslPriceInfo.sl_order_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(tpslPriceInfo.sl_order_price, sl_order_price ?? 0);\n }\n return dirty;\n }, [\n tpslPriceInfo,\n formattedOrder.tp_order_price,\n formattedOrder.sl_order_price,\n formattedOrder.tp_trigger_price,\n formattedOrder.sl_trigger_price,\n ]);\n useEffect(() => {\n setValues({\n ...tpslPriceInfo,\n });\n }, [props.order, setValues]);\n\n const onSubmit = async () => {\n return helper.validate().then(() => {\n const tpOrder: {\n order_id?: number;\n trigger_price?: string;\n algo_type: AlgoOrderType;\n price?: string;\n reduce_only?: boolean;\n is_activated?: boolean;\n } = {\n order_id: tpInfo.orderId,\n algo_type: AlgoOrderType.TAKE_PROFIT,\n trigger_price: formattedOrder.tp_trigger_price,\n reduce_only: true,\n };\n if (formattedOrder.tp_order_type === OrderType.LIMIT) {\n tpOrder.price = formattedOrder.tp_order_price;\n }\n\n const slOrder: {\n order_id?: number;\n trigger_price?: string;\n algo_type: AlgoOrderType;\n price?: string;\n reduce_only?: boolean;\n is_activated?: boolean;\n } = {\n order_id: slInfo.orderId,\n algo_type: AlgoOrderType.STOP_LOSS,\n trigger_price: formattedOrder.sl_trigger_price,\n reduce_only: true,\n };\n if (formattedOrder.sl_order_type === OrderType.LIMIT) {\n slOrder.price = formattedOrder.sl_order_price;\n }\n\n const childOrders = [];\n if (tpInfo.orderId) {\n childOrders.push(tpOrder);\n }\n if (slInfo.orderId) {\n childOrders.push(slOrder);\n }\n return doUpdateOrder({\n order_id: props.order.algo_order_id,\n child_orders: [\n {\n order_id: props.order.child_orders[0].algo_order_id,\n child_orders: childOrders,\n },\n ],\n });\n });\n };\n\n return {\n symbol,\n symbolInfo,\n formattedOrder,\n setValue,\n setValues,\n metaState,\n onSubmit,\n isMutating,\n isPriceChanged,\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n DialogFooter,\n Divider,\n Flex,\n Grid,\n ScrollArea,\n Text,\n ThrottledButton,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { useEditBracketOrder } from \"./editBracketOrder.script\";\n\ntype Props = ReturnType<typeof useEditBracketOrder>;\nexport const EditBracketOrderUI = (props: Props & { onClose?: () => void }) => {\n const { t } = useTranslation();\n const { errors, validated } = props.metaState;\n const { isMobile } = useScreen();\n // console.log('errors', errors, validated);\n\n const {\n formattedOrder,\n setValue: setOrderValue,\n symbol,\n symbolInfo,\n setValues,\n } = props;\n\n const [tpValues, setTpValuse] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n });\n\n const [slValues, setSlValues] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n });\n\n // Update tpValues when formattedOrder changes\n useEffect(() => {\n setTpValuse((prev) => ({\n ...prev,\n enable: formattedOrder.tp_enable ?? true,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n useEffect(() => {\n setSlValues((prev) => ({\n ...prev,\n enable: formattedOrder.sl_enable ?? true,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n return (\n <div>\n <ScrollArea\n className={cn(\"oui-flex-1\", isMobile && \"oui-h-[calc(100vh-200px)]\")}\n >\n <div className=\"\">\n <OrderInfo\n order={{\n symbol,\n order_quantity: formattedOrder.order_quantity,\n order_price: formattedOrder.order_price,\n }}\n baseDP={symbolInfo.base_dp}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n <Divider className=\"oui-my-3\" />\n <div className=\"\">\n <div className=\"oui-py-3\">\n <TPSLPositionTypeWidget\n value={formattedOrder.position_type ?? PositionType.PARTIAL}\n disableSelector\n onChange={(key, value) => {\n // setOrderValue(\"position_type\", value);\n if (value === PositionType.FULL) {\n setValues({\n position_type: PositionType.FULL,\n tp_order_type: OrderType.MARKET,\n tp_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n sl_order_price: undefined,\n });\n // setOrderValue(\"tp_order_type\", OrderType.MARKET);\n // setOrderValue(\"sl_order_type\", OrderType.MARKET);\n return;\n }\n setOrderValue(\"position_type\", value);\n }}\n />\n {formattedOrder.position_type === PositionType.FULL && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-3 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-[#D25f00]\" />\n <Text className=\"oui-text-2xs oui-text-[#D25f00]\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n </Flex>\n )}\n </div>\n <Flex direction={\"column\"} gap={6}>\n {formattedOrder.tp_enable && (\n <TPSLInputRowWidget\n disableEnableCheckbox\n disableOrderTypeSelector\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"tp\"\n side={formattedOrder.side as OrderSide}\n values={tpValues}\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n />\n )}\n {formattedOrder.sl_enable && formattedOrder.tp_enable && (\n <Divider className=\"oui-w-full\" />\n )}\n {formattedOrder.sl_enable && (\n <TPSLInputRowWidget\n disableEnableCheckbox\n disableOrderTypeSelector\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"sl\"\n side={formattedOrder.side as OrderSide}\n values={slValues}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n )}\n </Flex>\n\n <PnlInfo\n tp_pnl={formattedOrder.tp_pnl}\n sl_pnl={formattedOrder.sl_pnl}\n className=\"oui-mt-6\"\n />\n </div>\n </ScrollArea>\n <Flex\n itemAlign={\"center\"}\n gap={3}\n mt={5}\n width={\"100%\"}\n justify={\"center\"}\n >\n <ThrottledButton\n className=\"oui-w-[184px]\"\n data-testid={\"tpsl-confirm\"}\n disabled={!props.isPriceChanged}\n loading={props.isMutating}\n onClick={() => {\n props\n .onSubmit()\n .then(() => {\n props.onClose?.();\n })\n .catch((err) => {\n console.log(\"--->>>cancel order\", err);\n });\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/editorPopover.tsx","../src/positionTPSL/tpsl.widget.tsx","../src/positionTPSL/tpsl.ui.tsx","../src/components/orderInfo.tsx","../src/components/pnlInfo.tsx","../src/components/tpslInputRow/tpslInputRow.script.ts","../src/components/tpslInputRow/tpslInputRow.ui.tsx","../src/pnlInput/pnlInput.ui.tsx","../src/pnlInput/useBuilder.script.ts","../src/pnlInput/pnlInput.widget.tsx","../src/components/orderPriceType.tsx","../src/components/tpslInputRow/priceInput.tsx","../src/components/tpslInputRow/tpslInputRow.widget.tsx","../src/components/tpslPostionType/tpslPositionType.script.tsx","../src/components/tpslPostionType/tpslPositionType.ui.tsx","../src/components/tpslPostionType/tpslPostionType.widget.tsx","../src/components/tpslQty.tsx","../src/positionTPSL/useTPSL.script.tsx","../src/positionTPSL/positionTpslConfirm.tsx","../src/editorSheet.tsx","../src/tpslAdvanced/tpslAdvanced.ui.tsx","../src/tpslAdvanced/useTPSLAdvanced.script.ts","../src/tpslAdvanced/tpslAdvanced.widget.tsx","../src/tpslDetail/tpslDetail.widget.tsx","../src/tpslDetail/tpslDetail.script.tsx","../src/tpslDetail/tpslDetailProvider.tsx","../src/tpslDetail/tsplDetail.ui.tsx","../src/tpslDetail/ordersTable.tsx","../src/tpslDetail/useColum.tsx","../src/tpslDetail/components/estPnl.tsx","../src/tpslDetail/components/common.tsx","../src/tpslDetail/components/orderPrice.tsx","../src/tpslDetail/components/qty.tsx","../src/tpslDetail/components/triggerPrice.tsx","../src/tpslDetail/components/type.tsx","../src/components/closeLiqPriceIcon.tsx","../src/tpslDetail/ordersTable.mobile.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.widget.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.script.tsx","../src/tpslSimpleDialog/tpslSimpleDialog.ui.tsx","../src/editBracketOrder/editBracketOrder.widget.tsx","../src/editBracketOrder/editBracketOrder.script.tsx","../src/editBracketOrder/editBracketOrder.ui.tsx"],"names":["useLocalStorage","useTranslation","AlgoOrderRootType","PositionType","Box","Button","modal","useMemo","useOrderEntryFormErrorMsg","OrderSide","OrderType","Flex","Grid","cn","order","Text","jsx","jsxs","useLeverageBySymbol","roi","Fragment","useState","Decimal","value","options","mode","Input","inputFormatter","Select","useEffect","useRef","qty","ERROR_MSG_CODES","utils","Checkbox","type","maxQty","Divider","DotStatus","ScrollArea","useTpslPriceChecker","registerSimpleDialog","registerSimpleSheet","useSymbolsInfo","useScreen","partialPositionOrders","useEstLiqPriceBySymbol","ExclamationFillIcon","toast","Tooltip","ThrottledButton","findTPSLFromOrder","AuthGuardDataTable","CancelAllBtn","useMemoizedFn","usePositionStream","useTPSLOrder","useOrderEntry","AlgoOrderType","SDKError"],"mappings":"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","sourcesContent":["import { ReactNode } from \"react\";\nimport { ComputedAlgoOrder, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AlgoOrderRootType, API, PositionType } from \"@kodiak-finance/orderly-types\";\nimport { Box, Button, modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { ButtonProps } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLDialogId } from \"./positionTPSL\";\n\nexport const PositionTPSLPopover = (props: {\n position: API.Position;\n order?: API.AlgoOrder;\n label?: string;\n baseDP?: number;\n quoteDP?: number;\n /**\n * Button props\n */\n buttonProps?: ButtonProps;\n isEditing?: boolean;\n children?: ReactNode;\n}) => {\n const { position, order, baseDP, quoteDP, buttonProps, isEditing } = props;\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n\n const { t } = useTranslation();\n\n const isPositionTPSL = isEditing\n ? order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n : undefined;\n\n const onEdit = () => {\n modal.show(TPSLDialogId, {\n order: order,\n symbol: position.symbol,\n baseDP: baseDP,\n quoteDP: quoteDP,\n positionType: isPositionTPSL ? PositionType.FULL : PositionType.PARTIAL,\n isEditing: isEditing,\n });\n };\n\n return (\n <Box onClick={onEdit} className=\"oui-cursor-pointer\">\n {props.children || (\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"secondary\"\n {...buttonProps}\n // onClick={() => {\n // setOpen(true);\n // }}\n >\n {props.label}\n </Button>\n )}\n </Box>\n );\n};\n","import React from \"react\";\nimport { type AlgoOrderRootType } from \"@kodiak-finance/orderly-types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { TPSL, TPSLProps } from \"./tpsl.ui\";\nimport { TPSLBuilderOptions, useTPSLBuilder } from \"./useTPSL.script\";\n\nexport type TPSLWidgetProps = {\n onTPSLTypeChange?: (type: AlgoOrderRootType) => void;\n} & TPSLBuilderOptions &\n TPSLProps;\n\nexport const TPSLWidget: React.FC<TPSLWidgetProps> = (props) => {\n const { onCancel, onComplete, ...rest } = props;\n const state = useTPSLBuilder(rest);\n return (\n <TPSL\n {...state}\n onCancel={onCancel}\n onComplete={onComplete}\n close={rest.close}\n />\n );\n};\n\nexport const TPSLSheetId = \"TPSLSheetId\";\nexport const TPSLDialogId = \"TPSLDialogId\";\n\nregisterSimpleSheet(TPSLSheetId, TPSLWidget);\n\nregisterSimpleDialog(TPSLDialogId, TPSLWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import React, { useMemo } from \"react\";\nimport { ERROR_MSG_CODES } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport {\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n Button,\n Flex,\n Grid,\n Text,\n cn,\n ThrottledButton,\n ScrollArea,\n useScreen,\n ExclamationFillIcon,\n DotStatus,\n} from \"@kodiak-finance/orderly-ui\";\nimport { CloseToLiqPriceIcon } from \"../components/closeLiqPriceIcon\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { TPSLQuantity } from \"../components/tpslQty\";\nimport { TPSLBuilderState } from \"./useTPSL.script\";\n\nexport type TPSLProps = {\n close?: () => void;\n onCancel?: () => void;\n onComplete?: () => void;\n withTriggerPrice?: boolean;\n};\n\n//------------- TPSL form start ---------------\nexport const TPSL: React.FC<TPSLBuilderState & TPSLProps> = (props) => {\n const {\n TPSL_OrderEntity,\n symbolInfo,\n onCancel,\n onComplete,\n status,\n position,\n setValues,\n isEditing,\n } = props;\n\n const { errors, validated } = props.metaState;\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n // Filter errors for TP and SL components separately\n const tpErrors = useMemo(() => {\n if (!errors) return null;\n const { sl_trigger_price, ...rest } = errors;\n return rest;\n }, [errors]);\n\n const slErrors = useMemo(() => {\n if (!errors) return null;\n const { tp_trigger_price, ...rest } = errors;\n return rest;\n }, [errors]);\n\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n const { getErrorMsg: getSlPriceErrorMsg } = useOrderEntryFormErrorMsg(\n props.slPriceError,\n );\n\n const isSlPriceWarning =\n props.slPriceError?.sl_trigger_price?.type ===\n ERROR_MSG_CODES.SL_PRICE_WARNING;\n\n if (!position) {\n return null;\n }\n\n const tpslEnable =\n TPSL_OrderEntity.tp_trigger_price || TPSL_OrderEntity.sl_trigger_price;\n\n const renderQtyInput = () => {\n if (TPSL_OrderEntity.position_type === PositionType.FULL) {\n return null;\n }\n\n return (\n <Box className=\"oui-px-0.5\">\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={(props.orderQuantity ?? props.maxQty) as number}\n baseTick={symbolInfo(\"base_tick\")}\n base_dp={symbolInfo(\"base_dp\")}\n onQuantityChange={props.setQuantity}\n base={symbolInfo(\"base\")}\n isEditing={props.isEditing}\n errorMsg={validated ? getErrorMsg(\"quantity\") : undefined}\n />\n </Box>\n );\n };\n\n return (\n <div id=\"orderly-tp_sl-order-edit-content\">\n <ScrollArea className={cn(isMobile && \"oui-h-[calc(100vh-200px)]\")}>\n <div className=\"oui-px-2\">\n <OrderInfo\n baseDP={symbolInfo(\"base_dp\")}\n quoteDP={symbolInfo(\"quote_dp\")}\n estLiqPrice={props.estLiqPrice}\n classNames={{\n root: \"oui-mb-3\",\n container: \"oui-gap-x-[30px]\",\n }}\n order={{\n symbol: position.symbol,\n order_quantity: position.position_qty.toString(),\n order_price: position.average_open_price.toString(),\n }}\n symbolLeverage={position.leverage}\n />\n <Flex\n direction=\"column\"\n justify=\"start\"\n itemAlign={\"start\"}\n gap={3}\n className=\"oui-mb-3 oui-w-full\"\n >\n {!isEditing && (\n <TPSLPositionTypeWidget\n disableSelector\n value={TPSL_OrderEntity.position_type ?? PositionType.PARTIAL}\n onChange={(key, value) => {\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n )}\n {TPSL_OrderEntity.position_type === PositionType.FULL && (\n <DotStatus\n color=\"warning\"\n size=\"xs\"\n label={t(\"tpsl.positionType.full.tips.market\")}\n />\n )}\n </Flex>\n {renderQtyInput()}\n <Flex\n direction=\"column\"\n itemAlign={\"start\"}\n justify={\"start\"}\n gap={6}\n className=\"oui-mt-3 oui-w-full\"\n >\n <TPSLInputRowWidget\n symbol={position.symbol}\n rootOrderPrice={position.average_open_price.toString()}\n type=\"tp\"\n side={position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL}\n values={{\n // enable: TPSL_OrderEntity.tp_enable ?? false,\n trigger_price:\n TPSL_OrderEntity.tp_trigger_price?.toString() ?? undefined,\n PnL: TPSL_OrderEntity.tp_pnl?.toString() ?? undefined,\n Offset: TPSL_OrderEntity.tp_offset?.toString() ?? undefined,\n \"Offset%\":\n TPSL_OrderEntity.tp_offset_percentage?.toString() ??\n undefined,\n order_price:\n TPSL_OrderEntity.tp_order_price?.toString() ?? undefined,\n order_type: TPSL_OrderEntity.tp_order_type ?? OrderType.MARKET,\n }}\n hideOrderPrice={\n TPSL_OrderEntity.position_type === PositionType.FULL\n }\n errors={validated ? tpErrors : null}\n disableOrderTypeSelector={isEditing}\n quote_dp={symbolInfo(\"quote_dp\")}\n positionType={\n TPSL_OrderEntity.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n symbolLeverage={position.leverage}\n />\n\n <TPSLInputRowWidget\n inputWarnNode={\n isSlPriceWarning && (\n <DotStatus\n color=\"warning\"\n label={getSlPriceErrorMsg(\"sl_trigger_price\")}\n classNames={{\n root: \"oui-mt-1\",\n }}\n />\n )\n }\n symbol={position.symbol}\n rootOrderPrice={position.average_open_price.toString()}\n type=\"sl\"\n side={position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL}\n values={{\n // enable: TPSL_OrderEntity.sl_enable ?? false,\n trigger_price:\n TPSL_OrderEntity.sl_trigger_price?.toString() ?? undefined,\n PnL: TPSL_OrderEntity.sl_pnl?.toString() ?? undefined,\n Offset: TPSL_OrderEntity.sl_offset?.toString() ?? undefined,\n \"Offset%\":\n TPSL_OrderEntity.sl_offset_percentage?.toString() ??\n undefined,\n order_price:\n TPSL_OrderEntity.sl_order_price?.toString() ?? undefined,\n order_type: TPSL_OrderEntity.sl_order_type ?? OrderType.MARKET,\n }}\n hideOrderPrice={\n TPSL_OrderEntity.position_type === PositionType.FULL\n }\n errors={validated ? slErrors : null}\n quote_dp={symbolInfo(\"quote_dp\")}\n positionType={\n TPSL_OrderEntity.position_type ?? PositionType.PARTIAL\n }\n disableOrderTypeSelector={isEditing}\n onChange={(key, value) => {\n props.setOrderValue(key as keyof OrderlyOrder, value);\n }}\n symbolLeverage={position.leverage}\n />\n </Flex>\n <PnlInfo\n tp_pnl={TPSL_OrderEntity.tp_pnl}\n sl_pnl={TPSL_OrderEntity.sl_pnl}\n className=\"oui-my-3\"\n />\n </div>\n </ScrollArea>\n <Grid px={2} cols={2} gap={3} mt={4}>\n <Button\n size={\"md\"}\n color={\"secondary\"}\n data-testid={\"tpsl-cancel\"}\n onClick={() => {\n props.close?.();\n onCancel?.();\n }}\n >\n {t(\"common.cancel\")}\n </Button>\n <ThrottledButton\n size={\"md\"}\n data-testid={\"tpsl-confirm\"}\n disabled={status.isCreateMutating || !tpslEnable}\n loading={status.isCreateMutating || status.isUpdateMutating}\n onClick={() => {\n props\n .onSubmit()\n .then(() => {\n props.close?.();\n onComplete?.();\n })\n .catch((err) => {\n console.log(\"--->>>cancel order\", err);\n });\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Grid>\n </div>\n );\n};\n","import {\n useIndexPrice,\n useMarkPrice,\n useLeverageBySymbol,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { cn, Flex, Grid, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\n\ntype Props = {\n order: Partial<OrderlyOrder>;\n baseDP?: number;\n quoteDP?: number;\n estLiqPrice?: number;\n className?: string;\n classNames?: {\n root?: string;\n symbol?: string;\n container?: string;\n };\n symbolLeverage?: number;\n};\nexport const OrderInfo = (props: Props) => {\n const { t } = useTranslation();\n const { order, symbolLeverage } = props;\n const { symbol } = order;\n const markPrice = useMarkPrice(symbol!);\n const indexPrice = useIndexPrice(symbol!);\n\n const leverage = useLeverageBySymbol(symbolLeverage ? undefined : symbol);\n\n const currentLeverage = symbolLeverage || leverage;\n\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-w-full oui-gap-3 oui-font-semibold \",\n props.classNames?.root,\n )}\n >\n <Flex\n itemAlign={\"center\"}\n className={cn(\"oui-gap-2 \", props.classNames?.symbol)}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <TokenIcon symbol={symbol} className=\"oui-size-5\" />\n <Text.formatted\n className=\"oui-whitespace-nowrap oui-break-normal\"\n rule=\"symbol\"\n formatString=\"base-type\"\n size=\"sm\"\n weight=\"semibold\"\n intensity={98}\n >\n {symbol}\n </Text.formatted>\n </Flex>\n <Text\n size=\"2xs\"\n className=\"oui-h-[18px] oui-rounded oui-bg-base-7 oui-px-2 oui-font-semibold oui-text-base-contrast-36\"\n >\n {currentLeverage}x\n </Text>\n </Flex>\n <Grid\n cols={2}\n gapX={2}\n gapY={1}\n className={cn(\"oui-w-full oui-gap-x-2 \", props.classNames?.container)}\n >\n <Flex justify={\"between\"} className=\" oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"common.quantity\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.baseDP ?? 2}\n >\n {Number(order.order_quantity)}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"common.lastPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {indexPrice?.data}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"common.orderPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {Number(order.order_price)}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"common.markPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-base-contrast-80\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {markPrice?.data}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-text-base-contrast-36\">\n <Text size=\"2xs\">{t(\"positions.column.liqPrice\")}</Text>\n <Text.numeral\n rule=\"price\"\n className=\"oui-text-warning\"\n size=\"2xs\"\n dp={props.quoteDP ?? 2}\n >\n {props.estLiqPrice ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Grid>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, checkIsNaN } from \"@kodiak-finance/orderly-utils\";\n\ntype Props = {\n tp_pnl?: string | number;\n sl_pnl?: string | number;\n className?: string;\n};\n\nexport const PnlInfo = (props: Props) => {\n const { t } = useTranslation();\n const { tp_pnl, sl_pnl } = props;\n const riskRatio = useMemo(() => {\n const defaultNode = <Text className=\"oui-text-base-contrast-36\">-- x</Text>;\n if (tp_pnl === undefined || sl_pnl === undefined) {\n return defaultNode;\n }\n if (checkIsNaN(tp_pnl) || checkIsNaN(sl_pnl)) {\n return defaultNode;\n }\n const tpDecimal = new Decimal(tp_pnl);\n const slDecimal = new Decimal(sl_pnl);\n if (slDecimal.isZero() || tpDecimal.isZero()) {\n return defaultNode;\n }\n const ratio = tpDecimal.div(slDecimal).abs().toNumber().toFixed(2);\n return (\n <Flex gap={1} itemAlign={\"center\"} className=\"oui-text-base-contrast-80\">\n <Text>{ratio}</Text>\n <Text className=\"oui-text-base-contrast-36\">x</Text>\n </Flex>\n );\n return defaultNode;\n }, [tp_pnl, sl_pnl]);\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-w-full oui-gap-1 oui-text-2xs oui-text-base-contrast-36\",\n props.className,\n )}\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n rule=\"price\"\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {tp_pnl ? Number(tp_pnl) : \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstSlPnl\")}</Text>\n {sl_pnl ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {Number(sl_pnl)}\n </Text.numeral>\n ) : (\n <Text size=\"2xs\">-- USDC</Text>\n )}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.riskRewardRatio\")}</Text>\n <Text className=\"oui-text-base-contrast-80\" size=\"2xs\">\n {riskRatio}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport {\n OrderValidationResult,\n useLeverageBySymbol,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { order } from \"@kodiak-finance/orderly-perp\";\nimport {\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\n\nexport type Props = {\n disableOrderTypeSelector?: boolean;\n type: \"tp\" | \"sl\";\n quote_dp: number;\n positionType: PositionType;\n errors: OrderValidationResult | null;\n hideOrderPrice?: boolean;\n values: {\n // enable: boolean;\n trigger_price: string | undefined;\n PnL: string | undefined;\n Offset: string | undefined;\n \"Offset%\": string | undefined;\n ROI?: string | undefined;\n order_price: string | undefined;\n order_type: OrderType;\n };\n onChange: (key: string, value: string | boolean | number) => void;\n rootOrderPrice: string | undefined;\n symbol: string;\n disableEnableCheckbox?: boolean;\n symbolLeverage?: number;\n side: OrderSide;\n inputWarnNode?: React.ReactNode;\n};\nexport const useTPSLInputRowScript = (props: Props) => {\n const { values, side, type, rootOrderPrice } = props;\n // if symbolLeverage is not provided, get it from useLeverageBySymbol\n const symbolLeverage = useLeverageBySymbol(\n props.symbolLeverage ? undefined : props.symbol,\n );\n\n const leverage = props.symbolLeverage || symbolLeverage;\n\n const roi = useMemo(() => {\n if (!leverage || !rootOrderPrice || Number(rootOrderPrice) === 0) {\n return null;\n }\n\n let closePrice: string | undefined;\n if (values.order_type === OrderType.MARKET) {\n closePrice = values.trigger_price;\n } else if (values.order_type === OrderType.LIMIT) {\n closePrice = values.order_price;\n }\n if (!closePrice) {\n return null;\n }\n\n try {\n const roi = order.tpslROI({\n side,\n type,\n closePrice: Number(closePrice),\n orderPrice: Number(rootOrderPrice),\n leverage,\n });\n return roi * 100;\n } catch (error) {\n console.error(\"error\", error);\n return null;\n }\n }, [values, leverage, rootOrderPrice, type, side]);\n\n return {\n ...props,\n roi,\n };\n};\n","import { FC, Fragment } from \"react\";\nimport { useMemoizedFn } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation, Trans } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport { OrderType, PositionType } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, Grid, Checkbox, cn } from \"@kodiak-finance/orderly-ui\";\nimport { PnlInputWidget } from \"../../pnlInput/pnlInput.widget\";\nimport { OrderPriceType } from \"../orderPriceType\";\nimport { PriceInput } from \"./priceInput\";\nimport { useTPSLInputRowScript } from \"./tpslInputRow.script\";\n\ntype TPSLInputRowProps = ReturnType<typeof useTPSLInputRowScript>;\n\nexport const TPSLInputRowUI: FC<TPSLInputRowProps> = (props) => {\n const { t } = useTranslation();\n const { getErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n const { values, positionType } = props;\n\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"start\"}\n className=\"oui-w-full\"\n >\n {/* <Flex className=\"oui-w-full\" itemAlign={\"center\"} justify={\"start\"}>\n {!props.disableEnableCheckbox && (\n <Checkbox\n data-testid={`oui-testid-orderEntry-${props.type}-enable-checkBox`}\n id={`enable_${props.type}`}\n color={\"white\"}\n checked={values.enable}\n onCheckedChange={(checked: boolean) => {\n props.onChange(`${props.type}_enable`, !!checked);\n }}\n />\n )}\n <label\n htmlFor={`enable_${props.type}`}\n className={cn(\n \"oui-text-sm\",\n props.disableEnableCheckbox\n ? \"oui-ml-0 oui-text-base-contrast\"\n : \"oui-ml-1 oui-text-base-contrast-36\",\n )}\n >\n {props.type === \"tp\" ? t(\"tpsl.takeProfit\") : t(\"tpsl.stopLoss\")}\n </label>\n </Flex> */}\n <Text size=\"sm\" intensity={98}>\n {props.type === \"tp\" ? t(\"tpsl.takeProfit\") : t(\"tpsl.stopLoss\")}\n </Text>\n <Flex\n direction={\"column\"}\n gap={2}\n itemAlign={\"start\"}\n className={\"oui-w-full oui-pt-2\"}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full oui-gap-0.5\"\n >\n <Text className=\"oui-text-2xs oui-text-base-contrast-54\">\n {t(\"common.triggerPrice\")}\n </Text>\n <Grid cols={2} gap={2} className=\"oui-w-full oui-px-0.5\">\n <PriceInput\n type={`${props.type} price`}\n value={values.trigger_price}\n error={getErrorMsg(`${props.type}_trigger_price`)}\n onValueChange={(value) => {\n props.onChange(`${props.type}_trigger_price`, value);\n }}\n quote_dp={props.quote_dp}\n classNames={{\n root: props.inputWarnNode\n ? \"oui-outline-warning-darken focus-within:oui-outline-warning-darken\"\n : undefined,\n }}\n />\n <PnlInputWidget\n type={props.type === \"tp\" ? \"TP\" : \"SL\"}\n onChange={(key, value) => {\n props.onChange(key, value as string);\n }}\n quote={\"USDC\"}\n quote_dp={2}\n values={values}\n />\n </Grid>\n </Flex>\n {props.inputWarnNode}\n <Flex\n direction={\"column\"}\n className={cn(\n \"oui-w-full oui-gap-0.5\",\n props.hideOrderPrice ? \"oui-hidden\" : \"\",\n )}\n itemAlign={\"start\"}\n >\n <Text className=\"oui-text-2xs oui-text-base-contrast-54\">\n {t(\"common.orderPrice\")}\n </Text>\n <Grid cols={2} gap={2} className=\"oui-w-full oui-px-0.5\">\n <PriceInput\n disabled={\n positionType === PositionType.FULL ||\n values.order_type === OrderType.MARKET\n }\n type={\"order price\"}\n label={\n values.order_type === OrderType.LIMIT\n ? t(\"common.limit\")\n : t(\"common.market\")\n }\n value={values.order_price}\n error={getErrorMsg(`${props.type}_order_price`)}\n onValueChange={(value) => {\n props.onChange(`${props.type}_order_price`, value);\n }}\n quote_dp={props.quote_dp}\n />\n <OrderPriceType\n disabled={\n positionType === PositionType.FULL ||\n props.disableOrderTypeSelector\n }\n type={values.order_type}\n onChange={(value) => {\n props.onChange(`${props.type}_order_type`, value as OrderType);\n }}\n />\n </Grid>\n </Flex>\n </Flex>\n <RenderROI\n price={\n values.order_type === OrderType.MARKET\n ? values.trigger_price\n : values.order_price\n }\n orderType={values.order_type}\n pnl={values.PnL}\n roi={props.roi}\n dp={props.quote_dp}\n className=\"oui-mt-1\"\n />\n </Flex>\n );\n};\n\nconst RenderROI: React.FC<{\n className?: string;\n price?: number | string;\n pnl?: number | string;\n roi?: number | null;\n dp: number;\n orderType: OrderType;\n}> = (props) => {\n const { t } = useTranslation();\n const { price, pnl, roi, dp, className, orderType } = props;\n if (!roi || !price || !pnl) {\n return null;\n }\n return (\n <Text className={cn(\"oui-text-2xs oui-text-base-contrast-36\", className)}>\n <Trans\n i18nKey=\"tpsl.advanced.ROI\"\n components={[\n <Fragment key=\"price\">\n <Text.numeral\n className=\"oui-px-1 oui-text-base-contrast\"\n dp={dp}\n suffix={<Text className=\"oui-pl-0.5\">USDC</Text>}\n >\n {price}\n </Text.numeral>\n </Fragment>,\n <Fragment key=\"orderType\">\n <Text className=\"oui-px-1 oui-text-base-contrast\">\n {orderType === OrderType.MARKET\n ? t(\"common.market\")\n : t(\"common.limit\")}\n </Text>\n </Fragment>,\n <Fragment key=\"pnl\">\n <Text.numeral\n coloring\n className=\"oui-whitespace-nowrap oui-px-1\"\n dp={2}\n suffix={<Text className=\"oui-pl-0.5\">USDC</Text>}\n >\n {pnl}\n </Text.numeral>\n </Fragment>,\n\n <Fragment key=\"roi\">\n <Text.numeral\n coloring\n className=\"oui-whitespace-nowrap oui-px-1\"\n dp={2}\n suffix=\"%\"\n >\n {roi}\n </Text.numeral>\n </Fragment>,\n ]}\n />\n </Text>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n CaretDownIcon,\n cn,\n Input,\n MenuItem,\n SimpleDropdownMenu,\n} from \"@kodiak-finance/orderly-ui\";\nimport { inputFormatter, Text } from \"@kodiak-finance/orderly-ui\";\nimport { PNLInputState, PnLMode } from \"./useBuilder.script\";\n\nexport type PNLInputProps = PNLInputState & { testId?: string; quote: string };\n\nexport const PNLInput = (props: PNLInputProps) => {\n const {\n mode,\n modes,\n onModeChange,\n onValueChange,\n quote,\n quote_dp,\n value,\n pnl,\n } = props;\n const { t } = useTranslation();\n\n const [prefix, setPrefix] = useState<string>(mode);\n const [placeholder, setPlaceholder] = useState<string>(\n mode === PnLMode.PERCENTAGE ? \"%\" : quote,\n );\n\n const color = useMemo(() => {\n const num = Number(pnl);\n\n if (isNaN(num) || num === 0) return \"\";\n\n if (num > 0) return \"oui-text-trade-profit\";\n if (num < 0) return \"oui-text-trade-loss\";\n }, [pnl]);\n\n useEffect(() => {\n const label = modes.find((item) => item.value === mode)?.label;\n setPrefix(label!);\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n }, [mode, modes]);\n\n return (\n <Input\n prefix={prefix}\n size={{\n initial: \"lg\",\n lg: \"md\",\n }}\n placeholder={placeholder}\n align={\"right\"}\n value={value}\n data-testid={props.testId}\n autoComplete={\"off\"}\n onValueChange={onValueChange}\n formatters={[\n // inputFormatter.numberFormatter,\n props.formatter({ dp: quote_dp, mode }),\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n // className={color}\n classNames={{\n input: cn(\"oui-text-2xs\", color),\n prefix: \"oui-text-base-contrast-54 oui-text-2xs\",\n root: \"oui-outline-line-12 focus-within:oui-outline-primary-light\",\n }}\n onFocus={() => {\n setPlaceholder(\"\");\n props.setFocus(true);\n }}\n onBlur={() => {\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n props.setFocus(false);\n }}\n // value={props.value}\n suffix={\n <>\n {mode === PnLMode.PERCENTAGE && !!value && (\n <Text\n size={\"2xs\"}\n color=\"inherit\"\n className={cn(\"oui-ml-[2px]\", color)}\n >\n %\n </Text>\n )}\n <PNLMenus\n mode={mode}\n modes={modes}\n onModeChange={(item) => onModeChange(item.value as PnLMode)}\n />\n </>\n }\n />\n );\n};\n\nconst PNLMenus = (props: {\n mode?: string;\n modes: MenuItem[];\n onModeChange: (value: MenuItem) => void;\n}) => {\n return (\n <SimpleDropdownMenu\n currentValue={props.mode}\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, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { MenuItem } from \"@kodiak-finance/orderly-ui\";\nimport type {\n InputFormatter,\n InputFormatterOptions,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, todpIfNeed } from \"@kodiak-finance/orderly-utils\";\n\nexport enum PnLMode {\n PnL = \"PnL\",\n OFFSET = \"Offset\",\n PERCENTAGE = \"Offset%\",\n}\n\nexport type PNL_Values = {\n PnL: string | undefined;\n Offset: string | undefined;\n \"Offset%\": string | undefined;\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 const [focus, setFocus] = useState(true);\n\n const { t } = useTranslation();\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, mode]);\n\n const modes = useMemo<MenuItem[]>(() => {\n return [\n {\n label: t(\"tpsl.pnl\"),\n value: PnLMode.PnL,\n testId: `${PnLMode.PnL}_menu_item`,\n },\n {\n label: t(\"tpsl.offset\"),\n value: PnLMode.OFFSET,\n testId: `${PnLMode.OFFSET}_mneu_item`,\n },\n {\n label: `${t(\"tpsl.offset\")}%`,\n value: PnLMode.PERCENTAGE,\n testId: `${PnLMode.PERCENTAGE}_menu_item`,\n },\n ];\n }, [t]);\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 value = `${value}`; // convert to string\n\n if (focus) {\n // not need to add \"-\", because the value is already negative\n // if (type === \"SL\" && mode === PnLMode.PnL) {\n // value = value.startsWith(\"-\") ? value : \"-\" + value;\n // }\n }\n\n if (value === \"\" || value === \"-\") return \"\";\n // if (mode === PnLMode.PnL || mode === PnLMode.OFFSET) {\n // return commify(value);\n // }\n\n if (mode === PnLMode.PERCENTAGE) {\n return `${new Decimal(\n value.replace(\n new RegExp(percentageSuffix.current.replace(\".\", \"\\\\.\") + \"$\"),\n \"\",\n ),\n )\n .mul(100)\n .todp(2, 4)\n .toString()}${percentageSuffix.current}`;\n } else if (mode === PnLMode.OFFSET) {\n value = todpIfNeed(value, dp);\n } else {\n // value = new Decimal(value).todp(2).toString();\n }\n\n return `${value}`;\n },\n onSendBefore: (value: string) => {\n if (/^\\-?0{2,}$/.test(value)) {\n return \"0\";\n }\n\n if (mode === PnLMode.PERCENTAGE) {\n // console.log(\"value\", value);\n if (value !== \"\") {\n // percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n value = todpIfNeed(value, 2);\n const endStr = value.match(/\\.0{0,2}$/);\n if (!!endStr) {\n percentageSuffix.current = endStr[0];\n } else {\n percentageSuffix.current = \"\";\n }\n value = new Decimal(value).div(100).toString();\n value = `${value}${percentageSuffix.current}`;\n }\n } else if (mode === PnLMode.PnL && type === \"SL\" && focus) {\n // not need to add \"-\", because the value is already negative\n value = value.startsWith(\"-\") ? value : \"-\" + value;\n } else {\n value = todpIfNeed(value, dp);\n }\n\n if (value === \"\" || value === \"-\") return \"\";\n\n return value;\n },\n };\n // return {\n // onRenderBefore: (\n // value: string | number,\n // options: InputFormatterOptions\n // ) => {\n // // console.log(\"???\", options);\n // const { isFocused } = options;\n // value = `${value}`;\n // if (value === \"\" || value === \"-\") return \"\";\n\n // // if (type === \"SL\" && mode === PnLMode.PnL) {\n // // if (isFocused) {\n // // value = value.startsWith(\"-\") ? value : \"-\" + value;\n // // }\n // // }\n\n // if (mode === PnLMode.PERCENTAGE) {\n // return `${todpIfNeed(new Decimal(value).mul(100).toString(), 2)}${\n // percentageSuffix.current\n // }`;\n // // return (Number(value) * 100).toFixed(2);\n // } else if (mode === PnLMode.OFFSET) {\n // value = todpIfNeed(value, 2);\n // } else {\n // // value = new Decimal(value).todp(2).toString();\n // }\n\n // return value;\n // },\n // onSendBefore: (value: string, options: InputFormatterOptions) => {\n // const { isFocused } = options;\n\n // if (mode === PnLMode.PERCENTAGE) {\n // if (value !== \"\") {\n // percentageSuffix.current = value.endsWith(\".\") ? \".\" : \"\";\n // value = new Decimal(value).div(100).toString();\n // value = todpIfNeed(value, 4);\n // }\n // } else {\n // // value = todpIfNeed(value, quote_dp);\n // if (isFocused) {\n // if (type === \"SL\" && mode === PnLMode.PnL) {\n // // if (\n // // typeof values[PnLMode.PnL] !== \"undefined\" &&\n // // values[PnLMode.PnL] !== \"\"\n // // )\n // // return value;\n // const num = Number(value);\n // if (!isNaN(num) && num !== 0) {\n // value = (Math.abs(num) * -1).toString();\n // } else {\n // value = \"\";\n // }\n // }\n // }\n // }\n\n // return value;\n // },\n // };\n };\n\n return {\n mode,\n modes,\n type: props.type,\n formatter,\n onModeChange: (mode: PnLMode) => {\n setMode(mode);\n },\n value,\n pnl: values[PnLMode.PnL],\n onValueChange,\n quote_dp: props.quote_dp,\n setFocus,\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 { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Select, Text } from \"@kodiak-finance/orderly-ui\";\n\ntype Props = {\n type: OrderType;\n onChange: (type: OrderType) => void;\n disabled?: boolean;\n};\n\nexport const OrderPriceType = (props: Props) => {\n const { t } = useTranslation();\n const options = [\n { label: t(\"orderEntry.orderType.limitOrder\"), value: OrderType.LIMIT },\n { label: t(\"orderEntry.orderType.marketOrder\"), value: OrderType.MARKET },\n ];\n return (\n <Select.options\n value={props.type}\n options={options}\n disabled={props.disabled}\n onValueChange={props.onChange}\n size={\"xs\"}\n classNames={{\n trigger:\n \"oui-bg-transparent oui-w-auto oui-outline-line-1 oui-input-root oui-bg-base-6 oui-h-10 lg:oui-h-8 oui-outline-line-12 \",\n }}\n valueFormatter={(value, option) => {\n const displayLabel = {\n [OrderType.LIMIT]: t(\"orderEntry.orderType.limit\"),\n [OrderType.MARKET]: t(\"common.marketPrice\"),\n }[value];\n return <Text size={\"2xs\"}>{displayLabel}</Text>;\n }}\n />\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Input, inputFormatter } from \"@kodiak-finance/orderly-ui\";\n\nexport const PriceInput: React.FC<{\n type: string;\n label?: string;\n value?: string | number;\n error?: string;\n onValueChange: (value: string) => void;\n quote_dp: number;\n disabled?: boolean;\n classNames?: {\n root?: string;\n input?: string;\n prefix?: string;\n };\n}> = (props) => {\n const [placeholder, setPlaceholder] = useState<string>(\"USDC\");\n const { t } = useTranslation();\n\n return (\n <Input.tooltip\n data-testid={`oui-testid-tpsl-popUp-${props.type.toLowerCase()}-input`}\n prefix={props.label ?? t(\"common.markPrice\")}\n size={{ initial: \"lg\", lg: \"md\" }}\n tooltip={props.error}\n placeholder={placeholder}\n disabled={props.disabled}\n align={\"right\"}\n autoComplete={\"off\"}\n inputMode=\"decimal\"\n value={props.value}\n color={props.error ? \"danger\" : undefined}\n classNames={{\n input: cn(\n \"oui-text-2xs placeholder:oui-text-2xs\",\n props.classNames?.input,\n ),\n prefix: cn(\n \"oui-text-base-contrast-54 oui-text-2xs\",\n props.classNames?.prefix,\n ),\n root: cn(\"oui-w-full\", props.classNames?.root),\n }}\n onValueChange={props.onValueChange}\n onFocus={() => {\n setPlaceholder(\"\");\n }}\n onBlur={() => {\n setPlaceholder(\"USDC\");\n }}\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp),\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n />\n );\n};\n","import { Props, useTPSLInputRowScript } from \"./tpslInputRow.script\";\nimport { TPSLInputRowUI } from \"./tpslInputRow.ui\";\n\nexport const TPSLInputRowWidget = (props: Props) => {\n const state = useTPSLInputRowScript(props);\n return <TPSLInputRowUI {...state} />;\n};\n","import { useState } from \"react\";\nimport { OrderlyOrder, PositionType } from \"@kodiak-finance/orderly-types\";\n\ntype OrderValueKeys = keyof OrderlyOrder;\nexport type PositionTypeProps = {\n disableSelector?: boolean;\n value: PositionType;\n onChange: (key: OrderValueKeys, value: any) => void;\n};\n\nexport const useTPSLPositionTypeScript = (props: PositionTypeProps) => {\n return {\n value: props.value,\n onChange: props.onChange,\n disableSelector: props.disableSelector,\n };\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n ExclamationFillIcon,\n Flex,\n Select,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useTPSLPositionTypeScript } from \"./tpslPositionType.script\";\n\ntype TPSLPositionTypeUIProps = ReturnType<typeof useTPSLPositionTypeScript>;\n\nconst positionTypeKey = \"position_type\";\nexport const TPSLPositionTypeUI = (props: TPSLPositionTypeUIProps) => {\n const { t } = useTranslation();\n const options = [\n {\n label: t(\"tpsl.partialPosition\"),\n value: PositionType.PARTIAL,\n },\n {\n label: t(\"tpsl.fullPosition\"),\n value: PositionType.FULL,\n },\n ];\n\n return (\n <Flex gap={1} itemAlign={\"center\"} justify={\"start\"}>\n <Tooltip\n className=\"oui-w-[280px] oui-p-3\"\n content={\n props.value === PositionType.FULL\n ? t(\"tpsl.positionType.full.tips\")\n : t(\"tpsl.positionType.partial.tips\")\n }\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={12}\n />\n </Tooltip>\n {props.disableSelector ? (\n props.value === PositionType.FULL ? (\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"tpsl.positionType.full\")}\n </Text>\n ) : (\n <Text className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"tpsl.positionType.partial\")}\n </Text>\n )\n ) : (\n <Select.options\n value={props.value}\n options={options}\n onValueChange={(event) => {\n props.onChange(positionTypeKey, event as PositionType);\n }}\n size={\"xs\"}\n classNames={{\n trigger:\n \" oui-bg-transparent oui-border-0 oui-w-auto oui-px-0 oui-font-normal\",\n }}\n contentProps={{\n className: \" oui-bg-base-8 oui-border-0\",\n }}\n />\n )}\n </Flex>\n );\n};\n","import {\n PositionTypeProps,\n useTPSLPositionTypeScript,\n} from \"./tpslPositionType.script\";\nimport { TPSLPositionTypeUI } from \"./tpslPositionType.ui\";\n\nexport const TPSLPositionTypeWidget = (props: PositionTypeProps) => {\n const state = useTPSLPositionTypeScript(props);\n return <TPSLPositionTypeUI {...state} />;\n};\n","import { memo, useEffect, useRef, useState } from \"react\";\nimport { utils } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Input, Slider, Text } from \"@kodiak-finance/orderly-ui\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\nexport type TPSLQuantityProps = {\n maxQty: number;\n baseTick: number;\n base_dp: number;\n base: string;\n onQuantityChange?: (value: number | string) => void;\n quantity: number;\n isEditing?: boolean;\n errorMsg?: string;\n};\n\nexport const TPSLQuantity = memo<TPSLQuantityProps>((props) => {\n const { maxQty, base_dp, baseTick, quantity } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { t } = useTranslation();\n const [sliderValue, setSliderValue] = useState(0);\n\n // format quantity to base tick\n const formatQuantity = (value: string) => {\n let _qty = value;\n if (Number(value) > maxQty) {\n _qty = maxQty.toString();\n }\n if (baseTick > 0) {\n props.onQuantityChange?.(utils.formatNumber(_qty, baseTick) ?? value);\n }\n };\n\n const onSliderValueChange = (value: number) => {\n setSliderValue(value);\n // transform slider value to quantity\n const qty = new Decimal(value)\n .div(100)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n\n formatQuantity(qty);\n };\n\n useEffect(() => {\n const qty = Math.min(Number(quantity || 0), maxQty);\n // transform quantity to slider value\n const slider = new Decimal(qty)\n .div(maxQty)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n .toNumber();\n\n setSliderValue(slider);\n }, [quantity, maxQty]);\n\n const errorMsg =\n props.quantity.toString().length > 0 ? props.errorMsg : undefined;\n\n return (\n <>\n <Flex gap={2}>\n <div className={\"oui-flex-1\"}>\n <Input.tooltip\n data-testid=\"oui-testid-tpsl-popUp-quantity-input\"\n ref={inputRef}\n prefix={t(\"common.quantity\")}\n size={{\n initial: \"md\",\n lg: \"sm\",\n }}\n align=\"right\"\n value={props.quantity}\n autoComplete=\"off\"\n inputMode=\"decimal\"\n classNames={{\n prefix: \"oui-text-base-contrast-54\",\n root: cn(\n \"oui-bg-base-5 oui-outline-line-12\",\n errorMsg && \"oui-outline-danger\",\n ),\n }}\n tooltipProps={{\n content: {\n className: \"oui-bg-base-6 oui-text-base-contrast-80\",\n },\n arrow: {\n className: \"oui-fill-base-6\",\n },\n }}\n tooltip={errorMsg}\n color={errorMsg ? \"danger\" : undefined}\n formatters={[\n inputFormatter.dpFormatter(props.base_dp),\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]}\n onValueChange={(value) => {\n props.onQuantityChange?.(value);\n // TODO: optimize this\n const qty = Number(value);\n if (qty && qty > props.maxQty) {\n const qty = props.maxQty;\n props.onQuantityChange?.(qty);\n inputRef.current?.blur();\n }\n }}\n onBlur={(e) => formatQuantity(e.target.value)}\n suffix={\n <span className=\"oui-px-3 oui-text-2xs oui-text-base-contrast-54\">\n {props.base}\n </span>\n }\n />\n </div>\n </Flex>\n <Flex mt={2} itemAlign={\"center\"} height={\"15px\"}>\n <Slider\n min={0}\n max={100}\n markCount={5}\n showTip\n value={[sliderValue]}\n color=\"primary\"\n onValueChange={(value) => {\n onSliderValueChange(value[0]);\n }}\n />\n </Flex>\n <Flex justify={\"between\"}>\n <Text.numeral color={\"primary\"} size={\"2xs\"} suffix=\"%\">\n {sliderValue}\n </Text.numeral>\n <Flex itemAlign={\"center\"} gap={1}>\n <button\n className={\"oui-leading-none\"}\n style={{ lineHeight: 0 }}\n onClick={() => {\n props.onQuantityChange?.(props.maxQty);\n }}\n >\n <Text color={\"primary\"} size={\"2xs\"}>\n {t(\"common.max\")}\n </Text>\n </button>\n\n <Text.numeral\n rule={\"price\"}\n size={\"2xs\"}\n intensity={54}\n tick={props.baseTick}\n >\n {props.maxQty}\n </Text.numeral>\n </Flex>\n </Flex>\n </>\n );\n});\n","import { useEffect, useMemo, useRef } from \"react\";\nimport {\n type ComputedAlgoOrder,\n ERROR_MSG_CODES,\n useEstLiqPriceBySymbol,\n useLocalStorage,\n useMemoizedFn,\n usePositionStream,\n useSymbolsInfo,\n useTPSLOrder,\n useTpslPriceChecker,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderType,\n PositionType,\n SDKError,\n} from \"@kodiak-finance/orderly-types\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { PositionTPSLConfirm } from \"./positionTpslConfirm\";\n\ntype PropsWithTriggerPrice = {\n withTriggerPrice?: boolean;\n triggerPrice?: number;\n type?: \"tp\" | \"sl\";\n qty?: number;\n};\n\nexport type TPSLBuilderOptions = {\n symbol: string;\n position?: API.Position;\n order?: API.AlgoOrder;\n onTPSLTypeChange?: (type: AlgoOrderRootType) => void;\n isEditing?: boolean;\n positionType?: PositionType;\n /**\n * either show the confirm dialog or not,\n * if the Promise reject or return false, cancel the submit action\n */\n onConfirm?: (\n order: ComputedAlgoOrder,\n options: {\n position: API.Position;\n submit: (params?: { accountId?: string }) => Promise<any>;\n cancel: () => Promise<any>;\n },\n ) => Promise<boolean>;\n close?: () => void;\n};\n\nexport const useTPSLBuilder = (\n options: TPSLBuilderOptions & PropsWithTriggerPrice,\n) => {\n const {\n symbol,\n order,\n isEditing,\n positionType,\n triggerPrice,\n type,\n withTriggerPrice,\n } = options;\n const { t } = useTranslation();\n // const isEditing = !!order;\n if (isEditing && !order) {\n throw new SDKError(\"order is required when isEditing is true\");\n }\n // const symbol = isEditing ? order!.symbol : position.symbol;\n const symbolInfo = useSymbolsInfo();\n\n const prevTPSLType = useRef<AlgoOrderRootType>(AlgoOrderRootType.TP_SL);\n const [{ rows: positions }] = usePositionStream();\n\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const position = positions.find((item) => item.symbol === symbol);\n\n const estLiqPrice = useEstLiqPriceBySymbol(symbol);\n\n useEffect(() => {\n if (!position) {\n options.close?.();\n }\n }, [position]);\n\n const [\n tpslOrder,\n {\n submit,\n deleteOrder,\n setValue,\n setValues,\n validate,\n metaState,\n errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ] = useTPSLOrder(\n {\n symbol,\n position_qty: position?.position_qty ?? 0,\n average_open_price: position?.average_open_price ?? 0,\n },\n {\n defaultOrder: order,\n positionType: triggerPrice ? PositionType.PARTIAL : positionType,\n // tpslEnable: {\n // tp_enable: !withTriggerPrice ? true : type === \"tp\",\n // sl_enable: !withTriggerPrice ? true : type === \"sl\",\n // },\n isEditing,\n },\n );\n\n const slPriceError = useTpslPriceChecker({\n slPrice: tpslOrder.sl_trigger_price?.toString() ?? undefined,\n liqPrice: estLiqPrice ?? null,\n side: tpslOrder.side,\n });\n\n const isSlPriceWarning =\n slPriceError?.sl_trigger_price?.type === ERROR_MSG_CODES.SL_PRICE_WARNING;\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(\n () => Math.abs(Number(position?.position_qty)),\n [position?.position_qty],\n );\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 } else if (!isEditing && !!tpslOrder.quantity) {\n diff = 1;\n }\n\n if (order && isEditing) {\n const { tp_trigger_price, sl_trigger_price } =\n utils.findTPSLFromOrder(order);\n const { tp_order_price, sl_order_price } =\n utils.findTPSLOrderPriceFromOrder(order);\n\n if (\n tp_trigger_price !== Number(tpslOrder.tp_trigger_price) &&\n typeof typeof tpslOrder.tp_trigger_price !== \"undefined\"\n ) {\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 if (\n typeof tpslOrder.tp_order_price !== \"undefined\" &&\n tp_order_price !== OrderType.MARKET &&\n tp_order_price !== Number(tpslOrder.tp_order_price)\n ) {\n diff = 4;\n }\n if (\n typeof tpslOrder.sl_order_price !== \"undefined\" &&\n sl_order_price !== OrderType.MARKET &&\n sl_order_price !== Number(tpslOrder.sl_order_price)\n ) {\n diff = 5;\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.tp_order_price,\n tpslOrder.sl_trigger_price,\n tpslOrder.sl_order_price,\n tpslOrder.quantity,\n order,\n isEditing,\n ]);\n\n useEffect(() => {\n if (!withTriggerPrice) {\n return;\n }\n if (!triggerPrice) {\n return;\n }\n if (type === \"tp\") {\n setValue(\"tp_trigger_price\", triggerPrice);\n } else {\n setValue(\"sl_trigger_price\", triggerPrice);\n }\n if (options.qty) {\n setValue(\"quantity\", options.qty);\n }\n }, [type, triggerPrice, options.qty]);\n\n const cancel = (): Promise<void> => {\n if (order?.algo_order_id && order?.symbol) {\n return deleteOrder(order?.algo_order_id, order?.symbol);\n }\n return Promise.reject(\"order id or symbol is invalid\");\n };\n\n const onConfirm = (\n order: ComputedAlgoOrder,\n options: {\n position: API.Position;\n submit: (params?: { accountId?: string }) => Promise<any>;\n cancel: () => Promise<any>;\n },\n ) => {\n if (!needConfirm) {\n return Promise.resolve(true);\n }\n\n const maxQty = Math.abs(Number(position?.position_qty));\n if (\n `${order.tp_trigger_price ?? \"\"}`.length === 0 &&\n `${order.sl_trigger_price ?? \"\"}`.length === 0\n ) {\n return modal\n .confirm({\n title: t(\"orders.cancelOrder\"),\n content: t(\"tpsl.cancelOrder.description\"),\n onOk: () => {\n return options.cancel();\n },\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n }\n\n return modal\n .confirm({\n title: t(\"tpsl.confirmOrder\"),\n // bodyClassName: \"lg:oui-py-0\",\n onOk: async () => {\n try {\n const res = await options.submit({\n accountId: position?.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n classNames: {\n body: \"!oui-pb-0\",\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={positionType === PositionType.FULL}\n isEditing={isEditing}\n symbol={order.symbol!}\n qty={Number(order.quantity)}\n maxQty={maxQty}\n tpPrice={Number(order.tp_trigger_price)}\n slPrice={Number(order.sl_trigger_price)}\n side={order.side!}\n orderInfo={order}\n quoteDP={symbolInfo[symbol](\"quote_dp\") ?? 2}\n baseDP={symbolInfo[symbol](\"base_dp\") ?? 2}\n />\n ),\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n };\n\n const onSubmit = async () => {\n try {\n const validOrder = await validate(\n isSlPriceWarning ? undefined : (slPriceError as any),\n );\n if (validOrder) {\n if (!needConfirm) {\n return submit({ accountId: position?.account_id })\n .then(() => true)\n .catch((err) => {\n if (err?.message) {\n toast.error(err.message);\n }\n throw false;\n });\n }\n\n return onConfirm(tpslOrder, {\n position: position!,\n submit,\n cancel,\n });\n }\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n return {\n isEditing,\n symbolInfo: symbolInfo[symbol],\n maxQty,\n setQuantity: useMemoizedFn(setQuantity),\n orderQuantity: tpslOrder.quantity,\n // isPosition: isPositionTPSL,\n\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n // needConfirm,\n onSubmit,\n slPriceError,\n estLiqPrice,\n metaState,\n errors,\n status: {\n isCreateMutating,\n isUpdateMutating,\n },\n position,\n setValues,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLBuilder>;\n","import {\n ComputedAlgoOrder,\n useLocalStorage,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide, PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n Box,\n Checkbox,\n cn,\n Divider,\n Flex,\n Text,\n textVariants,\n} from \"@kodiak-finance/orderly-ui\";\nimport { transSymbolformString } from \"@kodiak-finance/orderly-utils\";\n\nexport type PositionTPSLConfirmProps = {\n symbol: string;\n qty: number;\n tpPrice?: number;\n slPrice?: number;\n maxQty: number;\n side: OrderSide;\n // symbolConfig:API.SymbolExt\n baseDP: number;\n quoteDP: number;\n isEditing?: boolean;\n isPositionTPSL?: boolean;\n orderInfo: ComputedAlgoOrder;\n};\n\nconst TPSLOrderType = (props: { tpPrice?: number; slPrice?: number }) => {\n const { tpPrice, slPrice } = props;\n const { t } = useTranslation();\n\n if (!!tpPrice && !!slPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"common.tpsl\")}\n </Badge>\n );\n }\n\n if (!!tpPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"tpsl.tp\")}\n </Badge>\n );\n }\n\n if (!!slPrice) {\n return (\n <Badge size=\"xs\" color=\"neutral\">\n {t(\"tpsl.sl\")}\n </Badge>\n );\n }\n\n return null;\n};\n\n// ------------ Position TP/SL Confirm dialog start------------\nexport const PositionTPSLConfirm = (props: PositionTPSLConfirmProps) => {\n const {\n symbol,\n tpPrice,\n slPrice,\n qty,\n maxQty,\n side,\n quoteDP,\n baseDP,\n isEditing,\n isPositionTPSL: _isPositionTPSL,\n orderInfo: order,\n } = props;\n const { t } = useTranslation();\n\n const [needConfirm, setNeedConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true,\n );\n const renderPositionType = () => {\n if (order.position_type === PositionType.FULL) {\n return <Text>{t(\"tpsl.positionType.full\")}</Text>;\n }\n return <Text>{t(\"tpsl.positionType.partial\")}</Text>;\n };\n // console.log(\"PositionTPSLConfirm\", qty, maxQty, quoteDP);\n\n const renderTPSLPrice = ({\n price,\n isOrderPrice,\n isEnable,\n colorType,\n }: {\n price: string | number;\n isOrderPrice?: boolean;\n isEnable?: boolean;\n colorType: \"TP\" | \"SL\";\n }) => {\n if (!isEnable) {\n return <Text className=\"oui-text-base-contrast-36\">-- USDC</Text>;\n }\n if (!price) {\n if (isOrderPrice) {\n return (\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n );\n }\n }\n return (\n <Text.numeral\n unit={\"USDC\"}\n rule={\"price\"}\n className={cn(\n \"oui-text-base-contrast\",\n colorType === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n dp={quoteDP}\n padding={false}\n >\n {price}\n </Text.numeral>\n );\n };\n\n const isPositionTPSL = _isPositionTPSL;\n\n return (\n <>\n {isEditing && (\n <Text as=\"div\" size=\"2xs\" intensity={80} className=\"oui-mb-3\">\n {t(\"tpsl.agreement\", { symbol: transSymbolformString(symbol) })}\n </Text>\n )}\n\n <Flex pb={4}>\n <Box grow>\n <Text.formatted\n rule={\"symbol\"}\n formatString=\"base-type\"\n size=\"base\"\n showIcon\n as=\"div\"\n intensity={80}\n >\n {symbol}\n </Text.formatted>\n </Box>\n <Flex gap={1}>\n {isPositionTPSL && (\n <Badge size=\"xs\" color={\"primary\"}>\n {t(\"common.position\")}\n </Badge>\n )}\n\n {/* <Badge size=\"xs\" color=\"neutral\">\n TP/SL\n </Badge> */}\n <TPSLOrderType tpPrice={tpPrice} slPrice={slPrice} />\n {side === OrderSide.SELL ? (\n <Badge size=\"xs\" color=\"success\">\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge size=\"xs\" color=\"danger\">\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Divider />\n {order.tp_trigger_price || order.sl_trigger_price ? (\n <>\n <Divider className=\"oui-my-4\" />\n <div\n className={textVariants({\n size: \"sm\",\n intensity: 54,\n className:\n \"oui-space-y-1 oui-w-full oui-flex oui-flex-col oui-gap-3\",\n })}\n >\n <Text className=\"oui-text-base-contrast\">\n {renderPositionType()}\n </Text>\n <Flex justify={\"between\"}>\n <Text>{t(\"common.orderQty\")}</Text>\n <Text.numeral\n rule={\"price\"}\n dp={baseDP}\n padding={false}\n className=\"oui-text-base-contrast\"\n >\n {order.quantity ?? \"-\"}\n </Text.numeral>\n </Flex>\n\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n gap={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpTriggerPrice\")}</Text>{\" \"}\n {renderTPSLPrice({\n price: order.tp_trigger_price ?? \"\",\n isOrderPrice: false,\n isEnable: !!order.tp_trigger_price,\n colorType: \"TP\",\n })}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpOrderPrice\")}</Text>\n {renderTPSLPrice({\n price: order.tp_order_price ?? \"\",\n isOrderPrice: true,\n isEnable: !!order.tp_trigger_price,\n colorType: \"TP\",\n })}\n </Flex>\n </Flex>\n\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n gap={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slTriggerPrice\")}</Text>\n {renderTPSLPrice({\n price: order.sl_trigger_price ?? \"\",\n isOrderPrice: false,\n isEnable: !!order.sl_trigger_price,\n colorType: \"SL\",\n })}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slOrderPrice\")}</Text>\n {renderTPSLPrice({\n price: order.sl_order_price ?? \"\",\n isOrderPrice: true,\n isEnable: !!order.sl_trigger_price,\n colorType: \"SL\",\n })}\n </Flex>\n </Flex>\n </div>\n </>\n ) : null}\n <Box pt={2}>\n <Flex gap={1}>\n <Checkbox\n id=\"disabledConfirm\"\n color=\"white\"\n checked={!needConfirm}\n onCheckedChange={(check) => {\n setNeedConfirm(!check);\n }}\n />\n <label\n htmlFor=\"disabledConfirm\"\n className={textVariants({\n size: \"xs\",\n intensity: 54,\n className: \"oui-ml-1\",\n })}\n >\n {t(\"orderEntry.disableOrderConfirm\")}\n </label>\n </Flex>\n </Box>\n </>\n );\n};\n\n//------------- Position TP/SL Confirm dialog end------------\n","import { useMemo } from \"react\";\nimport { useLocalStorage, useMarkPrice } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AlgoOrderRootType, API, PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n modal,\n useModal,\n Text,\n Box,\n Badge,\n Divider,\n toast,\n} from \"@kodiak-finance/orderly-ui\";\nimport { TPSLWidget, TPSLWidgetProps } from \"./positionTPSL\";\n\ntype TPSLSheetProps = {\n order?: API.AlgoOrder;\n // label: string;\n // baseDP?: number;\n // quoteDP?: number;\n symbolInfo: API.SymbolExt;\n isEditing?: boolean;\n};\n\nexport const PositionTPSLSheet = (props: TPSLWidgetProps & TPSLSheetProps) => {\n const { position, order, symbolInfo, isEditing } = props;\n const { resolve, hide, updateArgs } = useModal();\n\n const isPositionTPSL = isEditing\n ? order?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n : undefined;\n\n return (\n <>\n <TPSLWidget\n {...props}\n positionType={\n props.positionType ??\n (isPositionTPSL ? PositionType.FULL : PositionType.PARTIAL)\n }\n onCancel={() => {\n hide();\n }}\n />\n </>\n );\n};\n","import { useEffect, useState, SVGProps } from \"react\";\nimport { ERROR_MSG_CODES } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport {\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n cn,\n Divider,\n DotStatus,\n Flex,\n ScrollArea,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { CloseToLiqPriceIcon } from \"../components/closeLiqPriceIcon\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { useTPSLAdvanced } from \"./useTPSLAdvanced.script\";\n\ntype Props = ReturnType<typeof useTPSLAdvanced>;\n\nexport const TPSLAdvancedUI = (props: Props) => {\n const { t } = useTranslation();\n const { errors, validated } = props.metaState;\n\n const { getErrorMsg } = useOrderEntryFormErrorMsg(props.slPriceError);\n const isSlPriceWarning =\n props.slPriceError?.sl_trigger_price?.type ===\n ERROR_MSG_CODES.SL_PRICE_WARNING;\n\n const {\n formattedOrder,\n setValue: setOrderValue,\n symbolInfo,\n setValues,\n } = props;\n const [tpValues, setTpValuse] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: false,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n });\n\n const [slValues, setSlValues] = useState<{\n enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n enable: false,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n });\n\n // Update tpValues when formattedOrder changes\n useEffect(() => {\n setTpValuse((prev) => ({\n ...prev,\n // enable: formattedOrder.tp_enable ?? false,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n useEffect(() => {\n setSlValues((prev) => ({\n ...prev,\n // enable: formattedOrder.sl_enable ?? false,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n const tpslEnable =\n formattedOrder.tp_trigger_price || formattedOrder.sl_trigger_price;\n\n return (\n <div className=\"oui-flex oui-h-full oui-flex-col oui-justify-between oui-rounded-[16px] oui-py-3\">\n <div className=\"oui-px-3\">\n <Flex\n className=\"oui-mb-5 oui-cursor-pointer oui-text-base oui-text-base-contrast-80\"\n gap={1}\n itemAlign={\"center\"}\n onClick={props.onClose}\n >\n <ArrowRightIcon className=\" oui-text-base-contrast-80\" />\n <Text>{t(\"common.tpsl\")}</Text>\n </Flex>\n </div>\n <ScrollArea className=\"oui-flex-1\">\n <div className=\"oui-px-3\">\n <OrderInfo\n order={formattedOrder as OrderlyOrder}\n baseDP={symbolInfo.base_dp}\n quoteDP={symbolInfo.quote_dp}\n estLiqPrice={props.estLiqPrice ?? undefined}\n symbolLeverage={props.symbolLeverage}\n />\n </div>\n <Divider className=\"oui-my-3\" />\n <div className=\"oui-px-3\">\n <Flex className=\"oui-gap-[6px]\">\n <Button\n onClick={() => {\n setOrderValue(\"side\", OrderSide.BUY);\n }}\n size={\"sm\"}\n fullWidth\n data-type={OrderSide.BUY}\n // color={side === OrderSide.BUY ? \"buy\" : \"secondary\"}\n className={cn(\n formattedOrder.side === OrderSide.BUY\n ? \"oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\"\n : \"oui-bg-base-7 oui-text-base-contrast-36 hover:oui-bg-base-6 active:oui-bg-base-6\",\n )}\n data-testid=\"oui-testid-orderEntry-side-buy-button\"\n >\n {t(\"common.buy\")}\n </Button>\n <Button\n onClick={() => {\n setOrderValue(\"side\", OrderSide.SELL);\n }}\n data-type={OrderSide.SELL}\n fullWidth\n size={\"sm\"}\n // color={side === OrderSide.SELL ? \"sell\" : \"secondary\"}\n className={cn(\n formattedOrder.side === OrderSide.SELL\n ? \"oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\"\n : \"oui-bg-base-7 oui-text-base-contrast-36 hover:oui-bg-base-6 active:oui-bg-base-6\",\n )}\n data-testid=\"oui-testid-orderEntry-side-sell-button\"\n >\n {t(\"common.sell\")}\n </Button>\n </Flex>\n <div className=\"oui-py-3\">\n <TPSLPositionTypeWidget\n value={formattedOrder.position_type ?? PositionType.PARTIAL}\n onChange={(key, value) => {\n // setOrderValue(\"position_type\", value);\n if (value === PositionType.FULL) {\n setValues({\n position_type: PositionType.FULL,\n tp_order_type: OrderType.MARKET,\n tp_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n sl_order_price: undefined,\n });\n // setOrderValue(\"tp_order_type\", OrderType.MARKET);\n // setOrderValue(\"sl_order_type\", OrderType.MARKET);\n return;\n }\n setOrderValue(\"position_type\", value);\n }}\n />\n {formattedOrder.position_type === PositionType.FULL && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-3 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-[#D25f00]\" />\n <Text className=\"oui-text-2xs oui-text-[#D25f00]\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n </Flex>\n )}\n </div>\n <Flex direction={\"column\"} gap={6}>\n <TPSLInputRowWidget\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"tp\"\n side={formattedOrder.side as OrderSide}\n values={tpValues}\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n onChange={(key, value) => {\n // setTpValuse((prev) => ({ ...prev, [key]: value }));\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n symbolLeverage={props.symbolLeverage}\n />\n <TPSLInputRowWidget\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"sl\"\n side={formattedOrder.side as OrderSide}\n values={slValues}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n errors={validated ? errors : null}\n inputWarnNode={\n isSlPriceWarning && (\n <DotStatus\n color=\"warning\"\n size=\"xs\"\n label={getErrorMsg(\"sl_trigger_price\")}\n />\n )\n }\n quote_dp={symbolInfo.quote_dp}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n symbolLeverage={props.symbolLeverage}\n />\n </Flex>\n\n <PnlInfo\n tp_pnl={formattedOrder.tp_pnl}\n sl_pnl={formattedOrder.sl_pnl}\n className=\"oui-mt-6\"\n />\n </div>\n </ScrollArea>\n <Flex className=\"oui-mt-6 oui-px-3\" gap={2}>\n <Button\n size=\"md\"\n fullWidth\n color=\"gray\"\n variant=\"outlined\"\n className=\"oui-text-base-contrast-36\"\n onClick={props.onClose}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n size=\"md\"\n fullWidth\n color=\"success\"\n className={cn(\n formattedOrder.side === OrderSide.SELL\n ? \"oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\"\n : \"oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\",\n )}\n onClick={props.onSubmit}\n disabled={!tpslEnable}\n >\n {t(\"tpsl.advanced.submit\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nexport const ArrowRightIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.03752 2.9294C7.89169 2.95857 7.74527 3.03207 7.65661 3.16624L5.33145 6.66624C5.20137 6.86224 5.20137 7.12648 5.33145 7.32248L7.65661 10.8225C7.83452 11.0902 8.20669 11.1655 8.47385 10.9864C8.74044 10.8079 8.8151 10.434 8.63719 10.1662L6.53019 6.99408L8.63719 3.82249C8.8151 3.55416 8.74044 3.18082 8.47385 3.00232C8.34027 2.91249 8.18335 2.89965 8.03752 2.9294Z\" />\n </svg>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationResult,\n useOrderEntry,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n OrderlyOrder,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\n\ntype Props = {\n order: OrderlyOrder;\n setOrderValue: (key: string, value: any) => void;\n onSubmit: (formattedOrder: OrderlyOrder) => void;\n onClose: () => void;\n symbolLeverage?: number;\n};\n\nconst isTPSLEnable = (order: OrderlyOrder, type: \"tp\" | \"sl\") => {\n if (order.tp_trigger_price || order.sl_trigger_price) {\n if (type === \"tp\") {\n return !!order.tp_trigger_price;\n }\n if (type === \"sl\") {\n return !!order.sl_trigger_price;\n }\n }\n // no edit, disabled tp /sl\n return false;\n};\n\nexport const useTPSLAdvanced = (props: Props) => {\n const { order, setOrderValue, onClose } = props;\n const [innerMetaState, setInnerMetaState] =\n useState<OrderValidationResult | null>(null);\n const {\n formattedOrder,\n setValue,\n setValues,\n helper,\n symbolInfo,\n metaState,\n ...state\n } = useOrderEntry(order.symbol, {\n initialOrder: {\n symbol: order.symbol,\n order_type: order.order_type,\n side: order.side,\n order_price: order.order_price,\n order_quantity: order.order_quantity,\n position_type: order.position_type ?? PositionType.PARTIAL,\n trigger_price: order.trigger_price,\n // tp_enable: isTPSLEnable(order, \"tp\"),\n // sl_enable: isTPSLEnable(order, \"sl\"),\n tp_trigger_price: order.tp_trigger_price,\n sl_trigger_price: order.sl_trigger_price,\n tp_order_price: order.tp_order_price,\n sl_order_price: order.sl_order_price,\n tp_order_type: order.tp_order_type,\n sl_order_type: order.sl_order_type,\n sl_pnl: order.sl_pnl,\n sl_offset: order.sl_offset,\n sl_offset_percentage: order.sl_offset_percentage,\n tp_pnl: order.tp_pnl,\n tp_offset: order.tp_offset,\n tp_offset_percentage: order.tp_offset_percentage,\n },\n });\n\n const slPriceError = useTpslPriceChecker({\n slPrice: formattedOrder.sl_trigger_price,\n liqPrice: state.estLiqPrice,\n side: formattedOrder.side,\n });\n\n const onSubmit = () => {\n const isSlPriceError =\n slPriceError?.sl_trigger_price?.type === ERROR_MSG_CODES.SL_PRICE_ERROR;\n helper\n .validate(isSlPriceError ? slPriceError : undefined)\n .then(() => {\n props.onSubmit(formattedOrder as OrderlyOrder);\n })\n .catch((err) => {\n console.log(\"metaState\", metaState);\n console.log(\"err\", err);\n });\n };\n\n return {\n order,\n formattedOrder,\n symbolInfo,\n slPriceError,\n estLiqPrice: state.estLiqPrice,\n setValue,\n setValues,\n onSubmit,\n onClose,\n metaState,\n symbolLeverage: props.symbolLeverage,\n };\n};\n","import { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLAdvancedUI } from \"./tpslAdvanced.ui\";\nimport { useTPSLAdvanced } from \"./useTPSLAdvanced.script\";\n\ntype Props = {\n order: OrderlyOrder;\n setOrderValue: (key: string, value: any) => void;\n onSubmit: (formattedOrder: OrderlyOrder) => void;\n onClose: () => void;\n symbolLeverage?: number;\n};\n\nexport const TPSLAdvancedWidget = (props: Props) => {\n const state = useTPSLAdvanced({\n order: props.order,\n setOrderValue: props.setOrderValue,\n onSubmit: props.onSubmit,\n onClose: props.onClose,\n symbolLeverage: props.symbolLeverage,\n });\n return <TPSLAdvancedUI {...state} />;\n};\n\nexport const TPSLAdvancedSheetId = \"TPSLAdvancedSheetId\";\nexport const TPSLAdvancedDialogId = \"TPSLAdvancedDialogId\";\n\nregisterSimpleSheet(TPSLAdvancedSheetId, TPSLAdvancedWidget, {\n title: () => i18n.t(\"common.settings\"),\n});\n\nregisterSimpleDialog(TPSLAdvancedDialogId, TPSLAdvancedWidget, {\n title: () => i18n.t(\"common.settings\"),\n});\n","import { AlgoOrder, API } from \"@kodiak-finance/orderly-types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useTPSLDetail } from \"./tpslDetail.script\";\nimport { TPSLDetailProvider } from \"./tpslDetailProvider\";\nimport { TPSLDetailUI } from \"./tsplDetail.ui\";\n\nexport type TPSLDetailProps = {\n position: API.Position;\n order: AlgoOrder;\n baseDP: number;\n quoteDP: number;\n};\n\nexport const TPSLDetailWidget = (props: TPSLDetailProps) => {\n const state = useTPSLDetail(props);\n return (\n <TPSLDetailProvider\n symbol={props.position.symbol}\n position={props.position}\n >\n <TPSLDetailUI {...state} />\n </TPSLDetailProvider>\n );\n};\nexport const TPSLDetailDialogId = \"TPSLDetailDialogId \";\nexport const TPSLDetailSheetId = \"TPSLDetailSheetId\";\nregisterSimpleDialog(TPSLDetailDialogId, TPSLDetailWidget, {\n classNames: {\n content: \"oui-w-[420px] lg:oui-pt-4 lg:oui-pb-2 !oui-px-0\",\n body: \"lg:oui-py-0\",\n },\n});\n\nregisterSimpleSheet(TPSLDetailSheetId, TPSLDetailWidget, {\n classNames: {\n content: \"!oui-p-0\",\n },\n});\n","import { useEffect, useState } from \"react\";\nimport {\n ComputedAlgoOrder,\n findPositionTPSLFromOrders,\n findTPSLFromOrder,\n useLocalStorage,\n useOrderStream,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AlgoOrder,\n AlgoOrderRootType,\n API,\n OrderStatus,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport { modal, toast, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLDialogId, TPSLSheetId } from \"../positionTPSL/tpsl.widget\";\nimport { TPSLDetailProps } from \"./tpslDetail.widget\";\n\nexport const useTPSLDetail = (props: TPSLDetailProps) => {\n const { position } = props;\n const symbol = position.symbol;\n const symbolInfo = useSymbolsInfo()[symbol];\n\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n const [fullPositionOrders, setFullPositionOrders] = useState<API.AlgoOrder[]>(\n [],\n );\n const [partialPositionOrders, setPartialPositionOrders] = useState<\n API.AlgoOrder[]\n >([]);\n\n const [tpslOrders, { cancelAlgoOrder, cancelPostionOrdersByTypes, refresh }] =\n useOrderStream(\n {\n symbol: position.symbol,\n status: OrderStatus.INCOMPLETE,\n includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n size: 500,\n },\n {\n keeplive: true,\n },\n );\n\n const onCancelOrder = async (order: API.AlgoOrder) => {\n return await cancelAlgoOrder(order.algo_order_id, order.symbol);\n };\n const onCancelAllTPSLOrders = async () => {\n return await cancelPostionOrdersByTypes(symbol, [AlgoOrderRootType.TP_SL]);\n };\n\n const showTPSLDialog = ({\n order,\n positionType,\n isEditing,\n }: {\n order?: API.AlgoOrder;\n positionType: PositionType;\n isEditing: boolean;\n }) => {\n const dialogId = isMobile ? TPSLSheetId : TPSLDialogId;\n modal.show(dialogId, {\n order: order,\n symbol: position.symbol,\n positionType,\n isEditing,\n });\n };\n\n const editTPSLOrder = (order: API.AlgoOrder, positionType: PositionType) => {\n showTPSLDialog({ order, positionType, isEditing: true });\n };\n\n const addTPSLOrder = (positionType: PositionType) => {\n showTPSLDialog({ positionType, isEditing: false });\n };\n\n useEffect(() => {\n if (tpslOrders) {\n const { fullPositionOrder, partialPositionOrders } =\n findPositionTPSLFromOrders(tpslOrders, symbol);\n\n setFullPositionOrders(fullPositionOrder ? [fullPositionOrder] : []);\n setPartialPositionOrders(partialPositionOrders ?? []);\n }\n }, [tpslOrders, symbol]);\n\n return {\n symbolInfo,\n position,\n symbol,\n fullPositionOrders,\n partialPositionOrders,\n cancelPostionOrdersByTypes,\n onCancelOrder,\n onCancelAllTPSLOrders,\n editTPSLOrder,\n addTPSLOrder,\n };\n};\n\nexport type TPSLDetailState = ReturnType<typeof useTPSLDetail>;\n","import { createContext, PropsWithChildren, useContext } from \"react\";\nimport {\n useEstLiqPriceBySymbol,\n useSymbolsInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { API, OrderSide } from \"@kodiak-finance/orderly-types\";\n\nexport interface TPSLDetailContextState {\n base_dp: number;\n quote_dp: number;\n position: API.Position;\n side: OrderSide;\n estLiqPrice: number | undefined;\n}\n\nexport const TPSLDetailContext = createContext({} as TPSLDetailContextState);\n\ninterface TPSLDetailProviderProps {\n symbol: string;\n position: API.Position;\n}\n\nexport const TPSLDetailProvider = (\n props: PropsWithChildren<TPSLDetailProviderProps>,\n) => {\n const symbolInfo = useSymbolsInfo()[props.symbol];\n const estLiqPrice = useEstLiqPriceBySymbol(props.symbol);\n\n return (\n <TPSLDetailContext.Provider\n value={{\n base_dp: symbolInfo(\"base_dp\"),\n quote_dp: symbolInfo(\"quote_dp\"),\n side: props.position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL,\n position: props.position,\n estLiqPrice: estLiqPrice,\n }}\n >\n {props.children}\n </TPSLDetailContext.Provider>\n );\n};\n\nexport const useTPSLDetailContext = () => {\n return useContext(TPSLDetailContext);\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, PositionType } from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n ChevronDownIcon,\n cn,\n ExclamationFillIcon,\n Flex,\n Text,\n toast,\n Tooltip,\n ThrottledButton,\n useScreen,\n ScrollArea,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { OrdersTable } from \"./ordersTable\";\nimport { OrdersTableMobile } from \"./ordersTable.mobile\";\nimport { TPSLDetailState } from \"./tpslDetail.script\";\nimport { useTPSLDetailContext } from \"./tpslDetailProvider\";\n\nexport const TPSLDetailUI = (props: TPSLDetailState) => {\n const { isMobile } = useScreen();\n const {\n position,\n fullPositionOrders,\n partialPositionOrders,\n onCancelOrder,\n onCancelAllTPSLOrders,\n editTPSLOrder,\n addTPSLOrder,\n symbolInfo,\n } = props;\n const { estLiqPrice } = useTPSLDetailContext();\n\n return (\n <Box>\n <ScrollArea className={cn(isMobile && \"oui-h-[calc(100vh-100px)]\")}>\n <OrderInfo\n order={{\n symbol: position.symbol,\n order_quantity: position.position_qty.toString(),\n order_price: position.average_open_price.toString(),\n }}\n estLiqPrice={estLiqPrice}\n symbolLeverage={position.leverage}\n baseDP={symbolInfo(\"base_dp\")}\n quoteDP={symbolInfo(\"quote_dp\")}\n classNames={{\n root: cn(\"oui-mb-6 oui-gap-3 oui-px-5\"),\n container: \"oui-gap-x-[30px]\",\n }}\n />\n <FullPositionPart\n position={position}\n orders={fullPositionOrders}\n onCancelOrder={onCancelOrder}\n onCancelAllTPSLOrders={onCancelAllTPSLOrders}\n editTPSLOrder={editTPSLOrder}\n addTPSLOrder={addTPSLOrder}\n />\n <PartialPositionPart\n position={position}\n orders={partialPositionOrders}\n onCancelOrder={onCancelOrder}\n onCancelAllTPSLOrders={onCancelAllTPSLOrders}\n editTPSLOrder={editTPSLOrder}\n addTPSLOrder={addTPSLOrder}\n />\n </ScrollArea>\n </Box>\n );\n};\n\nconst FullPositionPart = (props: {\n orders: API.AlgoOrder[];\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n onCancelAllTPSLOrders: () => Promise<void>;\n position: API.Position;\n editTPSLOrder: (order: API.AlgoOrder, positionType: PositionType) => void;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const [open, setOpen] = useState(true);\n const { orders } = props;\n const { isMobile } = useScreen();\n return (\n <Box className=\"oui-mt-6\">\n <Box\n className={cn(\"oui-flex oui-items-center oui-justify-between oui-px-5\")}\n >\n <PositionTypeDescription\n positionType={PositionType.FULL}\n open={open}\n onOpenChange={setOpen}\n />\n {orders && orders.length === 0 && (\n <Flex gap={2}>\n <AddButton\n positionType={PositionType.FULL}\n position={props.position}\n addTPSLOrder={props.addTPSLOrder}\n />\n </Flex>\n )}\n </Box>\n\n <Box\n className={cn(\n \"oui-overflow-hidden oui-transition-[height] oui-duration-150\",\n open ? \"oui-h-auto\" : \"oui-h-0 oui-pb-4\",\n )}\n >\n {isMobile ? (\n <OrdersTableMobile\n orders={orders}\n editTPSLOrder={(order) =>\n props.editTPSLOrder(order, PositionType.FULL)\n }\n canCancelOrder={props.onCancelOrder}\n />\n ) : (\n <OrdersTable\n orders={orders}\n editTPSLOrder={(order) => {\n props.editTPSLOrder(order, PositionType.FULL);\n }}\n onCancelOrder={props.onCancelOrder}\n />\n )}\n </Box>\n </Box>\n );\n};\n\nconst PartialPositionPart = (props: {\n position: API.Position;\n orders: API.AlgoOrder[];\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n onCancelAllTPSLOrders: () => Promise<void>;\n editTPSLOrder: (order: API.AlgoOrder, positionType: PositionType) => void;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const [open, setOpen] = useState(true);\n const { orders } = props;\n const { isMobile } = useScreen();\n return (\n <Box className=\"oui-pt-6\">\n <Box\n className={cn(\n \"oui-flex oui-items-center oui-justify-between\",\n \"oui-px-5\",\n isMobile\n ? \"oui-flex-col oui-items-start oui-justify-start oui-gap-[11px]\"\n : \"oui-flex-row oui-items-center oui-justify-between\",\n )}\n >\n <PositionTypeDescription\n positionType={PositionType.PARTIAL}\n open={open}\n onOpenChange={setOpen}\n />\n <Flex gap={2}>\n <AddButton\n positionType={PositionType.PARTIAL}\n position={props.position}\n addTPSLOrder={props.addTPSLOrder}\n />\n {orders && orders.length > 0 && (\n <CancelAllBtn\n canCancelAll={orders && orders.length > 0}\n onCancelAllTPSLOrders={props.onCancelAllTPSLOrders}\n />\n )}\n </Flex>\n </Box>\n <Box\n className={cn(\n \"oui-overflow-hidden oui-transition-[height] oui-duration-150\",\n open ? \"oui-h-auto\" : \"oui-h-0 oui-pb-4\",\n )}\n >\n {isMobile ? (\n <OrdersTableMobile\n orders={orders}\n editTPSLOrder={(order) =>\n props.editTPSLOrder(order, PositionType.PARTIAL)\n }\n canCancelOrder={props.onCancelOrder}\n />\n ) : (\n <OrdersTable\n className=\"oui-h-[300px]\"\n orders={orders}\n editTPSLOrder={(order) => {\n props.editTPSLOrder(order, PositionType.PARTIAL);\n }}\n onCancelOrder={props.onCancelOrder}\n />\n )}\n </Box>\n </Box>\n );\n};\n\nconst PositionTypeDescription = (props: {\n positionType: PositionType;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) => {\n const { t } = useTranslation();\n return (\n <Flex\n gap={1}\n itemAlign={\"center\"}\n justify={\"start\"}\n className=\"oui-text-2xs\"\n >\n <Flex\n itemAlign={\"center\"}\n justify={\"start\"}\n gap={1}\n className=\"oui-cursor-pointer\"\n onClick={() => props.onOpenChange(!props.open)}\n >\n <ChevronDownIcon\n size={12}\n color=\"white\"\n className={cn(\n \"oui-cursor-pointer oui-transition-transform\",\n props.open && \"oui-rotate-180\",\n )}\n />\n {props.positionType === PositionType.FULL ? (\n <Text>{t(\"tpsl.positionType.full\")}</Text>\n ) : (\n <Text>{t(\"tpsl.positionType.partial\")}</Text>\n )}\n </Flex>\n <Tooltip\n className=\"oui-w-[280px] oui-p-3\"\n content={\n props.positionType === PositionType.FULL\n ? t(\"tpsl.positionType.full.tips\")\n : t(\"tpsl.positionType.partial.tips\")\n }\n >\n <ExclamationFillIcon\n className=\"oui-cursor-pointer oui-text-base-contrast-54\"\n size={12}\n />\n </Tooltip>\n </Flex>\n );\n};\n\nexport const AddButton = (props: {\n positionType: PositionType;\n position: API.Position;\n addTPSLOrder: (positionType: PositionType) => void;\n}) => {\n const { t } = useTranslation();\n const onAdd = () => {\n props.addTPSLOrder(props.positionType);\n };\n return (\n <ThrottledButton\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-w-[94px] oui-text-2xs\"\n onClick={onAdd}\n >\n {t(\"tpsl.add\")}\n </ThrottledButton>\n );\n};\n\nexport const CancelAllBtn = (props: {\n onCancelAllTPSLOrders: () => Promise<void>;\n canCancelAll: boolean;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n <ThrottledButton\n loading={loading}\n variant=\"outlined\"\n disabled={!props.canCancelAll}\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-w-[94px] oui-text-2xs disabled:oui-border-base-contrast-16 disabled:oui-bg-transparent disabled:oui-text-base-contrast-20\"\n onClick={() => {\n setLoading(true);\n props\n .onCancelAllTPSLOrders()\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n {t(\"tpsl.cancelAll\")}\n </ThrottledButton>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { cn, ScrollArea } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useColumn } from \"./useColum\";\n\nexport const OrdersTable = (props: {\n className?: string;\n orders: API.AlgoOrder[];\n editTPSLOrder: (order: API.AlgoOrder) => void;\n onCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { orders } = props;\n const columns = useColumn({ onCancelOrder: props.onCancelOrder });\n return (\n // <ScrollArea className={cn( props.className)}>\n\n <AuthGuardDataTable\n columns={columns}\n dataSource={orders}\n className=\"oui-bg-transparent oui-text-2xs\"\n bordered\n classNames={{\n root: cn(props.className),\n header: \"!oui-bg-base-8\",\n scroll: cn(\n !orders || orders.length === 0\n ? \"!oui-min-h-[170px]\"\n : \"!oui-min-h-[100px]\",\n ),\n }}\n onRow={(record) => {\n return {\n className: cn(\n \"oui-h-[53px] oui-cursor-svg-edit !oui-border-none !oui-p-0\",\n ),\n onClick: () => {\n props.editTPSLOrder(record);\n },\n };\n }}\n />\n // </ScrollArea>\n );\n};\n","import { FC, SVGProps, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n Flex,\n Text,\n ThrottledButton,\n toast,\n Tooltip,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { EstPnlRender } from \"./components/estPnl\";\nimport { OrderPriceRender } from \"./components/orderPrice\";\nimport { QtyRender } from \"./components/qty\";\nimport { TriggerPrice } from \"./components/triggerPrice\";\nimport { TypeRender } from \"./components/type\";\n\nexport const useColumn = (props: {\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { onCancelOrder } = props;\n\n const columns = useMemo(() => {\n const moblieColumns = [\n {\n title: t(\"tpsl.tpslDetail.qty\"),\n dataIndex: \"quantity\",\n width: 70,\n className: \"oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <QtyRender order={record} />\n ),\n },\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n width: 35,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <TypeRender order={record} />\n ),\n },\n {\n title: t(\"common.trigger\"),\n dataIndex: \"trigger\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => {\n return <TriggerPrice order={record} />;\n },\n },\n {\n title: t(\"common.price\"),\n dataIndex: \"price\",\n width: 70,\n className: \"oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <OrderPriceRender order={record} />\n ),\n },\n\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast\"\n content={t(\"tpsl.tpslDetail.estPnl.tooltip\")}\n >\n <Text className=\"oui-underline oui-decoration-dashed oui-underline-offset-2\">\n {t(\"tpsl.tpslDetail.estPnl\")}\n </Text>\n </Tooltip>\n ),\n dataIndex: \"estpnl\",\n width: 70,\n className: \"!oui-pr-0 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <EstPnlRender order={record} />\n ),\n },\n ];\n const desktopColums = [\n {\n title: t(\"tpsl.tpslDetail.qty\"),\n dataIndex: \"quantity\",\n width: 70,\n className: cn(\" oui-py-2 !oui-pl-5\"),\n render: (_: string, record: API.AlgoOrder) => (\n <QtyRender order={record} />\n ),\n },\n {\n title: t(\"common.type\"),\n dataIndex: \"type\",\n width: 35,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <TypeRender order={record} />\n ),\n },\n {\n title: t(\"common.trigger\"),\n dataIndex: \"trigger\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => {\n return <TriggerPrice order={record} />;\n },\n },\n {\n title: t(\"common.price\"),\n dataIndex: \"price\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <OrderPriceRender order={record} />\n ),\n },\n\n {\n title: (\n <Tooltip\n className=\"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast\"\n content={t(\"tpsl.tpslDetail.estPnl.tooltip\")}\n >\n <Text className=\"oui-underline oui-decoration-dashed oui-underline-offset-2\">\n {t(\"tpsl.tpslDetail.estPnl\")}\n </Text>\n </Tooltip>\n ),\n dataIndex: \"estpnl\",\n width: 70,\n className: \"oui-pl-1 oui-py-2\",\n render: (_: string, record: API.AlgoOrder) => (\n <EstPnlRender order={record} />\n ),\n },\n {\n title: \"\",\n dataIndex: \"delete\",\n width: 50,\n className: cn(\"oui-py-2 !oui-pr-5\"),\n render: (_: any, record: API.AlgoOrder) => {\n return <CancelAllBtn order={record} onCancelOrder={onCancelOrder} />;\n },\n },\n ];\n if (isMobile) {\n return moblieColumns;\n }\n return desktopColums;\n }, [t, isMobile]);\n return columns;\n};\n\nexport const FlexCell = (props: { children: React.ReactNode }) => {\n return (\n <Flex\n direction={\"column\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs oui-h-[36px]\"\n >\n {props.children}\n </Flex>\n );\n};\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\nconst DeleteIcon: FC<IconProps> = (props) => {\n const { size = 18 } = props;\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M5.48081 15.375C5.10681 15.375 4.78731 15.2426 4.52231 14.9777C4.25744 14.7127 4.125 14.3932 4.125 14.0192V4.50004H3.375V3.37505H6.75V2.71167H11.25V3.37505H14.625V4.50004H13.875V14.0192C13.875 14.3981 13.7438 14.7188 13.4813 14.9813C13.2188 15.2438 12.8981 15.375 12.5192 15.375H5.48081ZM12.75 4.50004H5.25V14.0192C5.25 14.0866 5.27162 14.1419 5.31487 14.1852C5.35812 14.2284 5.41344 14.25 5.48081 14.25H12.5192C12.5769 14.25 12.6298 14.226 12.6778 14.1779C12.7259 14.1299 12.75 14.077 12.75 14.0192V4.50004ZM7.053 12.75H8.17781V6.00004H7.053V12.75ZM9.82219 12.75H10.947V6.00004H9.82219V12.75Z\" />\n </svg>\n );\n};\n\nexport const CancelAllBtn = (props: {\n order: API.AlgoOrder;\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n return (\n <ThrottledButton\n size=\"sm\"\n loading={loading}\n variant=\"text\"\n color=\"gray\"\n onClick={(e) => {\n e.stopPropagation();\n console.log(\"delete\");\n setLoading(true);\n props\n .onCancelOrder?.(props.order)\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n <DeleteIcon className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast oui-cursor-pointer\" />\n </ThrottledButton>\n );\n};\n","import { findTPSLFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { positions as perpPositions } from \"@kodiak-finance/orderly-perp\";\nimport { API, OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport {\n Decimal,\n formatNum,\n getTPSLDirection,\n} from \"@kodiak-finance/orderly-utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const EstPnlRender = ({ order }: { order: API.AlgoOrder }) => {\n const { position, base_dp, quote_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n\n let tp_unrealPnl = undefined;\n let sl_unrealPnl = undefined;\n const qty = new Decimal(order.quantity).eq(0)\n ? position.position_qty\n : order.quantity;\n\n const side = position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL;\n const openPrice = position?.average_open_price;\n\n if (tp_trigger_price) {\n const direction = getTPSLDirection({\n side,\n type: \"tp\",\n closePrice: tp_trigger_price,\n orderPrice: openPrice,\n });\n tp_unrealPnl = formatNum\n .pnl(\n perpPositions.unrealizedPnL({\n qty,\n openPrice,\n // markPrice: unRealizedPrice,\n markPrice: tp_trigger_price,\n }),\n )\n ?.abs()\n .mul(direction)\n .toNumber();\n }\n\n if (sl_trigger_price) {\n const direction = getTPSLDirection({\n side,\n type: \"sl\",\n closePrice: sl_trigger_price,\n orderPrice: openPrice,\n });\n sl_unrealPnl = formatNum\n .pnl(\n perpPositions.unrealizedPnL({\n qty: qty,\n openPrice,\n // markPrice: unRealizedPrice,\n markPrice: sl_trigger_price,\n }),\n )\n ?.abs()\n .mul(direction)\n .toNumber();\n }\n return (\n <Flex\n gap={2}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_unrealPnl && (\n <FlexCell>\n <Text.numeral dp={2} rm={Decimal.ROUND_DOWN} coloring padding={false}>\n {tp_unrealPnl}\n </Text.numeral>\n </FlexCell>\n )}\n {sl_unrealPnl && (\n <FlexCell>\n <Text.numeral dp={2} rm={Decimal.ROUND_DOWN} coloring padding={false}>\n {sl_unrealPnl}\n </Text.numeral>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { cn, Flex } from \"@kodiak-finance/orderly-ui\";\n\nexport const FlexCell = (props: {\n children: React.ReactNode;\n className?: string;\n}) => {\n return (\n <Flex\n direction={\"column\"}\n justify={\"center\"}\n itemAlign={\"start\"}\n className={cn(\"oui-text-2xs oui-h-[36px]\", props.className)}\n >\n {props.children}\n </Flex>\n );\n};\n","import { findTPSLOrderPriceFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const OrderPriceRender = ({ order }: { order: API.AlgoOrder }) => {\n const { quote_dp } = useTPSLDetailContext();\n const { tp_order_price, sl_order_price } = findTPSLOrderPriceFromOrder(order);\n const { t } = useTranslation();\n return (\n <Flex\n gap={2}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_order_price && (\n <FlexCell>\n {tp_order_price === OrderType.MARKET ? (\n <Text>{t(\"common.market\")}</Text>\n ) : (\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {tp_order_price}\n </Text.numeral>\n )}\n </FlexCell>\n )}\n {sl_order_price && (\n <FlexCell>\n {sl_order_price === OrderType.MARKET ? (\n <Text>{t(\"common.market\")}</Text>\n ) : (\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {sl_order_price}\n </Text.numeral>\n )}\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { findTPSLFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const QtyRender = ({ order }: { order: API.AlgoOrder }) => {\n const { position, base_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n\n const quantity = useMemo(() => {\n if (order.quantity === 0) {\n return -position.position_qty;\n }\n\n return position.position_qty > 0 ? -order.quantity : order.quantity;\n }, [order.quantity, position.position_qty]);\n\n return (\n <Flex\n direction={\"column\"}\n justify={\"start\"}\n itemAlign={\"start\"}\n className=\"oui-h-full oui-text-2xs\"\n >\n <FlexCell>\n <Text.numeral dp={base_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {quantity}\n </Text.numeral>\n </FlexCell>\n {tp_trigger_price && sl_trigger_price && (\n <FlexCell>\n <div />\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import { findTPSLFromOrder } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const TriggerPrice = ({ order }: { order: API.AlgoOrder }) => {\n const { quote_dp } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n const { t } = useTranslation();\n return (\n <Flex\n gap={1}\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_trigger_price && (\n <FlexCell>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {tp_trigger_price}\n </Text.numeral>\n </Flex>\n </FlexCell>\n )}\n {sl_trigger_price && (\n <FlexCell>\n <Flex direction={\"column\"} justify={\"start\"} itemAlign={\"start\"}>\n <Text className=\"oui-text-base-contrast-36\">\n {t(\"common.market\")}\n </Text>\n <Text.numeral dp={quote_dp} rm={Decimal.ROUND_DOWN} padding={false}>\n {sl_trigger_price}\n </Text.numeral>\n </Flex>\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import {\n ERROR_MSG_CODES,\n findTPSLFromOrder,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { CloseToLiqPriceIcon } from \"../../components/closeLiqPriceIcon\";\nimport { FlexCell } from \"../components/common\";\nimport { useTPSLDetailContext } from \"../tpslDetailProvider\";\n\nexport const TypeRender = ({ order }: { order: API.AlgoOrder }) => {\n const { side, estLiqPrice } = useTPSLDetailContext();\n const { tp_trigger_price, sl_trigger_price } = findTPSLFromOrder(order);\n const { t } = useTranslation();\n\n const slPriceError = useTpslPriceChecker({\n slPrice: sl_trigger_price?.toString() ?? undefined,\n liqPrice: estLiqPrice ?? null,\n side: side,\n });\n const isSlPriceWarning =\n slPriceError?.sl_trigger_price?.type === ERROR_MSG_CODES.SL_PRICE_WARNING;\n return (\n <Flex\n direction={\"column\"}\n justify={\"between\"}\n itemAlign={\"start\"}\n className=\"oui-text-2xs\"\n >\n {tp_trigger_price && (\n <FlexCell>\n <Text className=\"oui-text-trade-profit\">{t(\"tpsl.tp\")}</Text>\n </FlexCell>\n )}\n\n {sl_trigger_price && (\n <FlexCell className={\"oui-flex-row oui-items-center oui-gap-1\"}>\n <Text className=\"oui-text-trade-loss\">{t(\"tpsl.sl\")}</Text>\n {isSlPriceWarning && (\n <CloseToLiqPriceIcon slPriceError={slPriceError} />\n )}\n </FlexCell>\n )}\n </Flex>\n );\n};\n","import {\n ERROR_MSG_CODES,\n OrderValidationResult,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport {\n cn,\n ExclamationFillIcon,\n modal,\n Tooltip,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\n\nconst CloseToLiqPriceIcon = ({\n slPriceError,\n className,\n}: {\n slPriceError: OrderValidationResult | null;\n className?: string;\n}) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { getErrorMsg } = useOrderEntryFormErrorMsg(slPriceError);\n const isSlPriceWarning =\n slPriceError?.sl_trigger_price?.type === ERROR_MSG_CODES.SL_PRICE_WARNING;\n\n const icon = (\n <ExclamationFillIcon\n onMouseEnter={(e) => e.stopPropagation()}\n onMouseLeave={(e) => e.stopPropagation()}\n onPointerEnter={(e) => e.stopPropagation()}\n onPointerLeave={(e) => e.stopPropagation()}\n size={14}\n className={cn(\n \"oui-text-warning-darken hover:oui-cursor-pointer\",\n className,\n )}\n />\n );\n if (!isSlPriceWarning || !slPriceError) return null;\n\n if (isMobile) {\n return (\n <button\n onClick={(e) => {\n modal.alert({\n title: t(\"common.tips\"),\n message: getErrorMsg(\"sl_trigger_price\"),\n });\n }}\n className=\"oui-px-1\"\n >\n {icon}\n </button>\n );\n }\n\n return (\n <Tooltip\n content={getErrorMsg(\"sl_trigger_price\")}\n className=\"oui-max-w-[240px] oui-text-base-contrast-80\"\n >\n {icon}\n </Tooltip>\n );\n};\nCloseToLiqPriceIcon.displayName = \"CloseToLiqPriceIcon\";\n\nexport { CloseToLiqPriceIcon };\n","import { useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Button, cn, ThrottledButton, toast } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuardDataTable } from \"@kodiak-finance/orderly-ui-connector\";\nimport { useColumn } from \"./useColum\";\n\nexport const OrdersTableMobile = (props: {\n orders: API.AlgoOrder[];\n editTPSLOrder: (order: API.AlgoOrder) => void;\n canCancelOrder: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const { t } = useTranslation();\n const { orders } = props;\n const columns = useColumn({ onCancelOrder: () => Promise.resolve() });\n const orderIds = useMemo(() => {\n return orders.reduce(\n (acc, curr) => {\n acc[curr.algo_order_id] = true;\n return acc;\n },\n {} as Record<string, boolean>,\n );\n }, [orders]);\n return (\n <AuthGuardDataTable\n columns={columns}\n dataSource={orders}\n expanded={orderIds}\n bordered\n getRowCanExpand={() => true}\n expandRowRender={(row) => {\n return (\n <Flex gap={2} justify={\"end\"}>\n <Button\n variant=\"outlined\"\n size=\"sm\"\n color=\"gray\"\n className=\"oui-h-6 oui-text-2xs oui-text-base-contrast-54\"\n onClick={() => props.editTPSLOrder(row.original)}\n >\n {t(\"common.edit\")}\n </Button>\n <DeleteBtn\n order={row.original}\n onCancelOrder={props.canCancelOrder}\n />\n </Flex>\n );\n }}\n className=\"oui-bg-transparent oui-px-2 oui-text-2xs\"\n classNames={{\n scroll: cn(\n !orders || orders.length === 0\n ? \"!oui-min-h-[170px]\"\n : \"!oui-min-h-[100px]\",\n ),\n }}\n onRow={() => {\n return {\n className: cn(\n \"oui-h-[53px] oui-cursor-svg-edit !oui-border-none !oui-p-0\",\n ),\n };\n }}\n generatedRowKey={(record) => record.algo_order_id}\n />\n );\n};\n\nexport const DeleteBtn = (props: {\n order: API.AlgoOrder;\n onCancelOrder?: (order: API.AlgoOrder) => Promise<void>;\n}) => {\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n return (\n <ThrottledButton\n className=\"oui-h-6 oui-text-2xs oui-text-base-contrast-54\"\n size=\"sm\"\n loading={loading}\n variant=\"outlined\"\n color=\"gray\"\n onClick={(e) => {\n e.stopPropagation();\n setLoading(true);\n props\n .onCancelOrder?.(props.order)\n .then(\n () => {},\n (error) => {\n toast.error(error.message);\n },\n )\n .finally(() => {\n setLoading(false);\n });\n }}\n >\n {t(\"common.delete\")}\n </ThrottledButton>\n );\n};\n","import React from \"react\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useTPSLSimpleDialog } from \"./tpslSimpleDialog.script\";\nimport { TPSLSimpleDialogUI } from \"./tpslSimpleDialog.ui\";\n\nexport const TPSLSimpleDialogWidget: React.FC<{\n type: \"tp\" | \"sl\";\n triggerPrice?: number;\n symbol: string;\n close?: () => void;\n onComplete?: () => void;\n showAdvancedTPSLDialog?: () => void;\n}> = (props) => {\n const { close, onComplete, showAdvancedTPSLDialog } = props;\n const state = useTPSLSimpleDialog(props);\n return (\n <TPSLSimpleDialogUI\n {...state}\n close={close}\n onComplete={onComplete}\n showAdvancedTPSLDialog={showAdvancedTPSLDialog}\n />\n );\n};\n\nexport const TPSLSimpleSheetId = \"TPSLSimpleSheetId\";\n\nexport const TPSLSimpleDialogId = \"TPSLSimpleDialogId\";\n\nregisterSimpleSheet(TPSLSimpleSheetId, TPSLSimpleDialogWidget, {\n classNames: {},\n});\n\nregisterSimpleDialog(TPSLSimpleDialogId, TPSLSimpleDialogWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useEffect, useMemo, useRef } from \"react\";\nimport {\n type ComputedAlgoOrder,\n useLocalStorage,\n useMemoizedFn,\n usePositionStream,\n useSymbolsInfo,\n useTPSLOrder,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AlgoOrderRootType,\n API,\n OrderType,\n PositionType,\n SDKError,\n} from \"@kodiak-finance/orderly-types\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { PositionTPSLConfirm } from \"../positionTPSL\";\n\nexport type TPSLBuilderOptions = {\n type: \"tp\" | \"sl\";\n triggerPrice?: number;\n symbol: string;\n};\n\nexport const useTPSLSimpleDialog = (options: TPSLBuilderOptions) => {\n const { type, triggerPrice, symbol } = options;\n const symbolInfo = useSymbolsInfo();\n const [{ rows: positions }, positionsInfo] = usePositionStream(symbol);\n const position = positions?.[0];\n const prevTPSLType = useRef<AlgoOrderRootType>(AlgoOrderRootType.TP_SL);\n const [needConfirm] = useLocalStorage(\"orderly_order_confirm\", true);\n const { t } = useTranslation();\n\n const [\n tpslOrder,\n {\n submit,\n deleteOrder,\n setValue,\n setValues,\n validate,\n errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ] = useTPSLOrder(\n {\n symbol: symbol!,\n position_qty: position?.position_qty,\n average_open_price: position?.average_open_price,\n },\n {\n defaultOrder: undefined,\n positionType: PositionType.PARTIAL,\n // tpslEnable: { tp_enable: type === \"tp\", sl_enable: type === \"sl\" },\n isEditing: false,\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(\n () => Math.abs(Number(position.position_qty)),\n [position.position_qty],\n );\n\n useEffect(() => {\n if (!maxQty) {\n return;\n }\n setValue(\"quantity\", maxQty);\n if (type === \"tp\") {\n setValue(\"tp_trigger_price\", triggerPrice ?? \"\");\n } else {\n setValue(\"sl_trigger_price\", triggerPrice ?? \"\");\n }\n }, [type, triggerPrice, maxQty]);\n\n const onSubmit = async () => {\n try {\n const validOrder = await validate();\n if (validOrder) {\n if (!needConfirm) {\n return submit({ accountId: position.account_id })\n .then(() => true)\n .catch((err) => {\n if (err?.message) {\n toast.error(err.message);\n }\n throw false;\n });\n }\n // confirm\n return modal\n .confirm({\n title: t(\"tpsl.confirmOrder\"),\n // bodyClassName: \"lg:oui-py-0\",\n onOk: async () => {\n try {\n const res = await submit({\n accountId: position.account_id,\n });\n\n if (res.success) {\n return res;\n }\n\n if (res.message) {\n toast.error(res.message);\n }\n\n return false;\n } catch (err: any) {\n if (err?.message) {\n toast.error(err.message);\n }\n return false;\n }\n },\n classNames: {\n body: \"!oui-pb-0\",\n },\n content: (\n <PositionTPSLConfirm\n isPositionTPSL={false}\n isEditing={false}\n symbol={symbol}\n qty={Number(tpslOrder.quantity)}\n maxQty={maxQty}\n tpPrice={Number(tpslOrder.tp_trigger_price)}\n slPrice={Number(tpslOrder.sl_trigger_price)}\n side={tpslOrder.side!}\n orderInfo={tpslOrder}\n quoteDP={symbolInfo[symbol](\"quote_dp\")}\n baseDP={symbolInfo[symbol](\"base_dp\")}\n />\n ),\n })\n .then(\n () => {\n return true;\n },\n () => {\n return Promise.reject(false);\n },\n );\n }\n } catch (error) {\n return Promise.reject(error);\n }\n };\n\n return {\n symbolInfo: symbolInfo[symbol!],\n maxQty,\n setQuantity: useMemoizedFn(setQuantity),\n orderQuantity: tpslOrder.quantity,\n isPosition: false,\n TPSL_OrderEntity: tpslOrder,\n setOrderValue: setValue,\n setPnL,\n setOrderPrice,\n onSubmit,\n errors,\n status: {\n isCreateMutating,\n isUpdateMutating,\n },\n position,\n setValues,\n type,\n triggerPrice,\n } as const;\n};\n\nexport type TPSLBuilderState = ReturnType<typeof useTPSLSimpleDialog>;\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport {\n Box,\n Button,\n cn,\n Divider,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { TPSLQuantity } from \"../components/tpslQty\";\nimport { useTPSLSimpleDialog } from \"./tpslSimpleDialog.script\";\n\ntype Props = ReturnType<typeof useTPSLSimpleDialog> & {\n close?: () => void;\n onComplete?: () => void;\n showAdvancedTPSLDialog?: (options: { qty: number }) => void;\n};\n\nexport const TPSLSimpleDialogUI: React.FC<Props> = (props) => {\n const { type, triggerPrice, errors, TPSL_OrderEntity } = props;\n const { t } = useTranslation();\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n\n const footer = (\n <Flex width=\"100%\" itemAlign=\"center\" gap={3} mt={4}>\n <Button\n key=\"secondary\"\n color=\"gray\"\n onClick={() => {\n props.onComplete?.();\n props.close?.();\n }}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n key=\"primary\"\n onClick={() => {\n props.onSubmit().then(() => {\n props.onComplete?.();\n props.close?.();\n });\n }}\n fullWidth\n className=\"oui-text-sm\"\n size=\"md\"\n >\n {t(\"common.confirm\")}\n </Button>\n </Flex>\n );\n\n const errorMessage = () => {\n const tpError = getErrorMsg(\"tp_trigger_price\");\n const slError = getErrorMsg(\"sl_trigger_price\");\n let text = \"\";\n if (tpError && type === \"tp\") {\n text = tpError;\n }\n if (slError && type === \"sl\") {\n text = slError;\n }\n if (!text) {\n return null;\n }\n return (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-2 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-danger\" />\n <Text className=\"oui-text-danger\">{text}</Text>\n </Flex>\n );\n };\n\n const renderPnl = () => {\n const { tp_pnl, sl_pnl } = TPSL_OrderEntity;\n if (type === \"sl\") {\n return (\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstSlPnl\")}</Text>\n {sl_pnl ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</Text>\n }\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {Number(sl_pnl)}\n </Text.numeral>\n ) : (\n <Text size=\"2xs\">-- USDC</Text>\n )}\n </Flex>\n );\n }\n return (\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"2xs\">{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-text-base-contrast-36 oui-ml-1\">USDC</Text>\n }\n rule=\"price\"\n coloring\n visible={true}\n size=\"2xs\"\n dp={2}\n >\n {tp_pnl ? Number(tp_pnl) : \"--\"}\n </Text.numeral>\n </Flex>\n );\n };\n\n return (\n <Box className=\"oui-w-full oui-px-0.5\">\n <TPSLQuantity\n maxQty={props.maxQty}\n quantity={Number(props.orderQuantity ?? props.maxQty)}\n baseTick={props.symbolInfo(\"base_tick\")}\n base_dp={props.symbolInfo(\"base_dp\")}\n base={props.symbolInfo(\"base\")}\n isEditing={false}\n errorMsg={getErrorMsg(\"quantity\")}\n onQuantityChange={props.setQuantity}\n />\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className={cn(\n \"oui-mt-4 oui-w-full oui-gap-1 oui-text-xs oui-text-base-contrast-36\",\n )}\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"xs\">{t(\"common.triggerPrice\")}</Text>\n <Text.numeral\n className=\"oui-text-base-contrast\"\n suffix={\n <Text className=\"oui-ml-1 oui-text-xs oui-text-base-contrast-36\">\n USDC\n </Text>\n }\n rule=\"price\"\n size=\"xs\"\n dp={props.symbolInfo(\"quote_dp\")}\n >\n {triggerPrice ? Number(triggerPrice) : \"--\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text size=\"xs\">{t(\"common.orderPrice\")}</Text>\n <Text className=\"oui-text-base-contrast\" size=\"xs\">\n {t(\"common.market\")}\n </Text>\n </Flex>\n {renderPnl()}\n </Flex>\n {errorMessage()}\n\n <Divider className=\"oui-my-3 oui-w-full\" />\n <Flex\n itemAlign={\"center\"}\n onClick={() => {\n props.close?.();\n props.showAdvancedTPSLDialog?.({\n qty: Number(TPSL_OrderEntity.quantity),\n });\n }}\n className=\"oui-pb-4\"\n >\n <Text color=\"primary\" className=\"oui-cursor-pointer oui-text-sm\">\n {t(\"tpsl.advancedSetting\")}\n </Text>\n </Flex>\n {footer}\n </Box>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useEditBracketOrder } from \"./editBracketOrder.script\";\nimport { EditBracketOrderUI } from \"./editBracketOrder.ui\";\n\nexport const EditBracketOrderWidget = (props: {\n order: API.AlgoOrderExt;\n close?: () => void;\n}) => {\n const state = useEditBracketOrder({ order: props.order });\n return <EditBracketOrderUI {...state} onClose={props.close} />;\n};\n\nexport const EditBracketOrderSheetId = \"EditBracketOrderSheetId\";\nexport const EditBracketOrderDialogId = \"EditBracketOrderDialogId\";\n\nregisterSimpleSheet(EditBracketOrderSheetId, EditBracketOrderWidget);\n\nregisterSimpleDialog(EditBracketOrderDialogId, EditBracketOrderWidget, {\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useEffect, useMemo } from \"react\";\nimport {\n ERROR_MSG_CODES,\n useMaxQty,\n useMutation,\n useOrderEntry,\n useSymbolsInfo,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n SDKError,\n} from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\nfunction getInitialOrder(order: API.AlgoOrderExt) {\n const childOrder = order.child_orders[0];\n const positionType =\n childOrder.algo_type === AlgoOrderRootType.TP_SL\n ? PositionType.PARTIAL\n : PositionType.FULL;\n const tpOrder = childOrder.child_orders.find(\n (item) =>\n item.algo_type === AlgoOrderType.TAKE_PROFIT && item.trigger_price,\n );\n const slOrder = childOrder.child_orders.find(\n (item) => item.algo_type === AlgoOrderType.STOP_LOSS && item.trigger_price,\n );\n const tpslPriceInfo: {\n tp_trigger_price?: string | undefined;\n tp_order_type?: OrderType;\n tp_order_price?: string | undefined;\n sl_trigger_price?: string | undefined;\n sl_order_type?: OrderType;\n sl_order_price?: string | undefined;\n } = {};\n if (tpOrder) {\n tpslPriceInfo.tp_trigger_price = tpOrder.trigger_price?.toString();\n tpslPriceInfo.tp_order_type =\n typeof tpOrder.type === \"string\"\n ? (tpOrder.type.replace(\"_ORDER\", \"\") as OrderType)\n : undefined;\n if (tpslPriceInfo.tp_order_type === OrderType.LIMIT) {\n tpslPriceInfo.tp_order_price = tpOrder.price?.toString();\n }\n }\n if (slOrder) {\n tpslPriceInfo.sl_trigger_price = slOrder.trigger_price?.toString();\n tpslPriceInfo.sl_order_type =\n typeof slOrder.type === \"string\"\n ? (slOrder.type.replace(\"_ORDER\", \"\") as OrderType)\n : undefined;\n if (tpslPriceInfo.sl_order_type === OrderType.LIMIT) {\n tpslPriceInfo.sl_order_price = slOrder.price?.toString();\n }\n }\n\n return {\n baseInfo: {\n symbol: order.symbol,\n order_type: order.type,\n side: order.side,\n order_price: order.price,\n order_quantity: order.quantity,\n position_type: positionType,\n // tp_enable: !!tpOrder?.trigger_price,\n // sl_enable: !!slOrder?.trigger_price,\n },\n tpslPriceInfo,\n tpInfo: {\n orderId: tpOrder?.algo_order_id,\n },\n slInfo: {\n orderId: slOrder?.algo_order_id,\n },\n };\n}\n\nfunction isTPSLPriceChanged(\n originPrice: string | number,\n newPrice: string | number,\n) {\n if (newPrice === undefined || newPrice === null) {\n return true;\n }\n if (isNaN(Number(newPrice))) {\n return false;\n }\n const originDeci = new Decimal(Number(originPrice));\n const newDeci = new Decimal(Number(newPrice));\n return !newDeci.eq(originDeci);\n}\n\nexport const useEditBracketOrder = (props: { order: API.AlgoOrderExt }) => {\n if (!props.order) {\n throw new SDKError(\"order is required for editBracketOrder\");\n }\n const { baseInfo, tpslPriceInfo, tpInfo, slInfo } = getInitialOrder(\n props.order,\n );\n\n const [doUpdateOrder, { isMutating }] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n const maxQty = useEditOrderMaxQty(props.order, props.order.quantity);\n\n const {\n formattedOrder,\n setValue,\n setValues,\n estLiqPrice,\n metaState,\n symbolInfo,\n helper,\n ...state\n } = useOrderEntry(props.order.symbol, {\n initialOrder: baseInfo,\n maxQty,\n });\n const symbol = props.order.symbol;\n\n const isPriceChanged = useMemo(() => {\n let dirty = false;\n const {\n tp_order_price,\n sl_order_price,\n tp_trigger_price,\n sl_trigger_price,\n } = formattedOrder;\n if (tpslPriceInfo.tp_trigger_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(\n tpslPriceInfo.tp_trigger_price,\n tp_trigger_price ?? 0,\n );\n }\n if (tpslPriceInfo.tp_order_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(tpslPriceInfo.tp_order_price, tp_order_price ?? 0);\n }\n if (tpslPriceInfo.sl_trigger_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(\n tpslPriceInfo.sl_trigger_price,\n sl_trigger_price ?? 0,\n );\n }\n if (tpslPriceInfo.sl_order_price) {\n dirty =\n dirty ||\n isTPSLPriceChanged(tpslPriceInfo.sl_order_price, sl_order_price ?? 0);\n }\n return dirty;\n }, [\n tpslPriceInfo,\n formattedOrder.tp_order_price,\n formattedOrder.sl_order_price,\n formattedOrder.tp_trigger_price,\n formattedOrder.sl_trigger_price,\n ]);\n useEffect(() => {\n setValues({\n ...tpslPriceInfo,\n });\n }, [props.order, setValues]);\n\n const slPriceError = useTpslPriceChecker({\n slPrice: formattedOrder.sl_trigger_price,\n liqPrice: estLiqPrice,\n side: formattedOrder.side,\n });\n\n const isSlPriceError =\n slPriceError?.sl_trigger_price?.type === ERROR_MSG_CODES.SL_PRICE_ERROR;\n\n const onSubmit = async () => {\n return helper\n .validate(isSlPriceError ? slPriceError : undefined)\n .then(() => {\n const tpOrder: {\n order_id?: number;\n trigger_price?: string;\n algo_type: AlgoOrderType;\n price?: string;\n reduce_only?: boolean;\n is_activated?: boolean;\n } = {\n order_id: tpInfo.orderId,\n algo_type: AlgoOrderType.TAKE_PROFIT,\n trigger_price: formattedOrder.tp_trigger_price,\n reduce_only: true,\n };\n if (formattedOrder.tp_order_type === OrderType.LIMIT) {\n tpOrder.price = formattedOrder.tp_order_price;\n }\n\n const slOrder: {\n order_id?: number;\n trigger_price?: string;\n algo_type: AlgoOrderType;\n price?: string;\n reduce_only?: boolean;\n is_activated?: boolean;\n } = {\n order_id: slInfo.orderId,\n algo_type: AlgoOrderType.STOP_LOSS,\n trigger_price: formattedOrder.sl_trigger_price,\n reduce_only: true,\n };\n if (formattedOrder.sl_order_type === OrderType.LIMIT) {\n slOrder.price = formattedOrder.sl_order_price;\n }\n\n const childOrders = [];\n if (tpInfo.orderId) {\n childOrders.push(tpOrder);\n }\n if (slInfo.orderId) {\n childOrders.push(slOrder);\n }\n return doUpdateOrder({\n order_id: props.order.algo_order_id,\n child_orders: [\n {\n order_id: props.order.child_orders[0].algo_order_id,\n child_orders: childOrders,\n },\n ],\n });\n });\n };\n\n return {\n symbol,\n symbolInfo,\n slPriceError,\n estLiqPrice,\n side: formattedOrder.side,\n formattedOrder,\n setValue,\n setValues,\n metaState,\n onSubmit,\n isMutating,\n isPriceChanged,\n };\n};\n\nexport function useEditOrderMaxQty(\n order: API.AlgoOrderExt,\n positionQty?: number,\n) {\n const { reduce_only } = order;\n\n const maxQty = useMaxQty(order.symbol, order.side as OrderSide, reduce_only);\n\n return useMemo(() => {\n if (reduce_only) {\n return Math.abs(positionQty ?? 0);\n }\n return order.quantity + Math.abs(maxQty);\n }, [order.quantity, maxQty, reduce_only, positionQty]);\n}\n","import { useEffect, useState } from \"react\";\nimport { ERROR_MSG_CODES } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useOrderEntryFormErrorMsg } from \"@kodiak-finance/orderly-react-app\";\nimport {\n OrderlyOrder,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n Divider,\n DotStatus,\n Flex,\n ScrollArea,\n Text,\n ThrottledButton,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderInfo } from \"../components/orderInfo\";\nimport { PnlInfo } from \"../components/pnlInfo\";\nimport { TPSLInputRowWidget } from \"../components/tpslInputRow\";\nimport { TPSLPositionTypeWidget } from \"../components/tpslPostionType\";\nimport { useEditBracketOrder } from \"./editBracketOrder.script\";\n\ntype Props = ReturnType<typeof useEditBracketOrder>;\nexport const EditBracketOrderUI = (props: Props & { onClose?: () => void }) => {\n const { t } = useTranslation();\n const { errors, validated } = props.metaState;\n const { isMobile } = useScreen();\n // console.log('errors', errors, validated);\n\n const isSlPriceWarning =\n props.slPriceError?.sl_trigger_price?.type ===\n ERROR_MSG_CODES.SL_PRICE_WARNING;\n\n const { getErrorMsg } = useOrderEntryFormErrorMsg(props.slPriceError);\n\n const {\n formattedOrder,\n setValue: setOrderValue,\n symbol,\n symbolInfo,\n setValues,\n } = props;\n\n const [tpValues, setTpValuse] = useState<{\n // enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n // enable: false,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n });\n\n const [slValues, setSlValues] = useState<{\n // enable: boolean;\n trigger_price: string;\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n order_price: string;\n order_type: OrderType;\n }>({\n // enable: false,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n });\n\n // Update tpValues when formattedOrder changes\n useEffect(() => {\n setTpValuse((prev) => ({\n ...prev,\n // enable: formattedOrder.tp_enable ?? false,\n order_type: formattedOrder.tp_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.tp_order_price ?? \"\",\n trigger_price: formattedOrder.tp_trigger_price ?? \"\",\n PnL: formattedOrder.tp_pnl ?? \"\",\n Offset: formattedOrder.tp_offset ?? \"\",\n \"Offset%\": formattedOrder.tp_offset_percentage ?? \"\",\n ROI: formattedOrder.tp_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n\n useEffect(() => {\n setSlValues((prev) => ({\n ...prev,\n // enable: formattedOrder.sl_enable ?? false,\n order_type: formattedOrder.sl_order_type ?? OrderType.MARKET,\n order_price: formattedOrder.sl_order_price ?? \"\",\n trigger_price: formattedOrder.sl_trigger_price ?? \"\",\n PnL: formattedOrder.sl_pnl ?? \"\",\n Offset: formattedOrder.sl_offset ?? \"\",\n \"Offset%\": formattedOrder.sl_offset_percentage ?? \"\",\n ROI: formattedOrder.sl_ROI ?? \"\",\n }));\n }, [formattedOrder]);\n return (\n <div>\n <ScrollArea\n className={cn(\"oui-flex-1\", isMobile && \"oui-h-[calc(100vh-200px)]\")}\n >\n <div className=\"\">\n <OrderInfo\n order={{\n symbol,\n order_quantity: formattedOrder.order_quantity,\n order_price: formattedOrder.order_price,\n }}\n estLiqPrice={props.estLiqPrice ?? undefined}\n baseDP={symbolInfo.base_dp}\n quoteDP={symbolInfo.quote_dp}\n />\n </div>\n <Divider className=\"oui-my-3\" />\n <div className=\"\">\n <div className=\"oui-py-3\">\n <TPSLPositionTypeWidget\n value={formattedOrder.position_type ?? PositionType.PARTIAL}\n disableSelector\n onChange={(key, value) => {\n // setOrderValue(\"position_type\", value);\n if (value === PositionType.FULL) {\n setValues({\n position_type: PositionType.FULL,\n tp_order_type: OrderType.MARKET,\n tp_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n sl_order_price: undefined,\n });\n // setOrderValue(\"tp_order_type\", OrderType.MARKET);\n // setOrderValue(\"sl_order_type\", OrderType.MARKET);\n return;\n }\n setOrderValue(\"position_type\", value);\n }}\n />\n {formattedOrder.position_type === PositionType.FULL && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"oui-mt-3 oui-w-full\"\n >\n <div className=\"oui-relative oui-top-[7px] oui-size-1 oui-rounded-full oui-bg-[#D25f00]\" />\n <Text className=\"oui-text-2xs oui-text-[#D25f00]\">\n {t(\"tpsl.positionType.full.tips.market\")}\n </Text>\n </Flex>\n )}\n </div>\n <Flex direction={\"column\"} gap={6}>\n {/* {formattedOrder.tp_enable && ( */}\n <TPSLInputRowWidget\n disableEnableCheckbox\n disableOrderTypeSelector\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"tp\"\n side={formattedOrder.side as OrderSide}\n values={tpValues}\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n />\n {/* )} */}\n {/* {formattedOrder.sl_enable && formattedOrder.tp_enable && ( */}\n <Divider className=\"oui-w-full\" />\n {/* )} */}\n {/* {formattedOrder.sl_enable && ( */}\n <TPSLInputRowWidget\n disableEnableCheckbox\n disableOrderTypeSelector\n rootOrderPrice={formattedOrder.order_price}\n symbol={symbolInfo.symbol}\n type=\"sl\"\n side={formattedOrder.side as OrderSide}\n values={slValues}\n hideOrderPrice={\n formattedOrder.position_type === PositionType.FULL\n }\n inputWarnNode={\n isSlPriceWarning && (\n <DotStatus\n color=\"warning\"\n size=\"xs\"\n label={getErrorMsg(\"sl_trigger_price\")}\n />\n )\n }\n errors={validated ? errors : null}\n quote_dp={symbolInfo.quote_dp}\n positionType={\n formattedOrder.position_type ?? PositionType.PARTIAL\n }\n onChange={(key, value) => {\n setOrderValue(key as keyof OrderlyOrder, value);\n }}\n />\n {/* )} */}\n </Flex>\n\n <PnlInfo\n tp_pnl={formattedOrder.tp_pnl}\n sl_pnl={formattedOrder.sl_pnl}\n className=\"oui-mt-6\"\n />\n </div>\n </ScrollArea>\n <Flex\n itemAlign={\"center\"}\n gap={3}\n mt={5}\n width={\"100%\"}\n justify={\"center\"}\n >\n <ThrottledButton\n className=\"oui-w-[184px]\"\n data-testid={\"tpsl-confirm\"}\n disabled={!props.isPriceChanged}\n loading={props.isMutating}\n onClick={() => {\n props\n .onSubmit()\n .then(() => {\n props.onClose?.();\n })\n .catch((err) => {\n console.log(\"--->>>cancel order\", err);\n });\n }}\n >\n {t(\"common.confirm\")}\n </ThrottledButton>\n </Flex>\n </div>\n );\n};\n"]}