@kodiak-finance/orderly-ui-order-entry 2.8.21-alpha.0 → 2.8.21-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +58 -153
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +59 -154
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +13 -13
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/orderEntry.ui.tsx","../src/components/additional/additionalConfigButton.tsx","../src/components/additional/additionalInfo.tsx","../src/components/additional/pinButton.tsx","../src/components/advancedTPSLResult/index.tsx","../src/components/assetInfo/index.tsx","../src/components/fee/fees.widget.tsx","../src/components/fee/effectiveFee/effectiveFee.ui.tsx","../src/components/fee/effectiveFee/icons/effectiveFee.tsx","../src/components/fee/effectiveFee/effectiveFee.widget.tsx","../src/components/fee/regularFee/regularFees.ui.tsx","../src/components/fee/regularFee/regularFees.widget.tsx","../src/components/slippage/components/slippageCell.tsx","../src/components/slippage/components/slippageEditor.tsx","../src/components/slippage/slippage.ui.tsx","../src/components/available/index.tsx","../src/components/LTVRiskTooltip/LTVRiskTooltip.ui.tsx","../src/components/LTVRiskTooltip/LTVRiskTooltip.script.ts","../src/components/LTVRiskTooltip/LTVRiskTooltip.widget.tsx","../src/components/dialog/confirm.ui.tsx","../src/utils.ts","../src/components/dialog/maxQtyConfirm.tsx","../src/components/dialog/scaledOrderConfirm/scaledOrderConfirm.ui.tsx","../src/components/dialog/scaledOrderConfirm/scaledOrderConfirm.script.ts","../src/hooks/useAskAndBid.ts","../src/components/dialog/scaledOrderConfirm/scaledOrderConfirm.widget.tsx","../src/components/header/index.tsx","../src/components/orderTypeSelect/index.tsx","../src/components/header/LeverageBadge.tsx","../src/components/orderEntryProvider.tsx","../src/components/orderEntryContext.tsx","../src/components/orderInput/index.tsx","../src/components/orderInput/limit/priceInput.tsx","../src/components/customInput/index.tsx","../src/components/orderInput/limit/bboOrderTypeSelect.tsx","../src/components/orderInput/limit/limitPriceSuffix.tsx","../src/components/orderInput/qtyAndTotal/qtyAndTotalInput.tsx","../src/components/orderInput/qtyAndTotal/quantityInput.tsx","../src/components/orderInput/qtyAndTotal/totalInput.tsx","../src/components/orderInput/qtyAndTotal/totalTypeSelect.tsx","../src/components/orderInput/scaledOrder/index.tsx","../src/components/orderInput/scaledOrder/quantityDistributionInput.tsx","../src/components/orderInput/scaledOrder/scaledPriceInput.tsx","../src/components/orderInput/scaledOrder/scaledQuantityInput.tsx","../src/components/orderInput/scaledOrder/scaledQuantityUnit.tsx","../src/components/orderInput/scaledOrder/skewInput.tsx","../src/components/orderInput/scaledOrder/totalOrdersInput.tsx","../src/components/orderInput/stop/triggerPriceInput.tsx","../src/components/orderInput/trailingStop/activePriceInput.tsx","../src/components/orderInput/trailingStop/trailingCallbackInput.tsx","../src/components/orderInput/trailingStop/callbackRatePercentages.tsx","../src/components/orderInput/trailingStop/trailingCallbackSelect.tsx","../src/components/orderInput/trailingStop/index.tsx","../src/components/quantitySlider/index.tsx","../src/components/reduceOnlySwitch/index.tsx","../src/components/tpsl.tsx","../src/components/pnlInput/pnlInput.ui.tsx","../src/components/pnlInput/useBuilder.script.ts","../src/components/pnlInput/pnlInputContext.tsx","../src/components/pnlInput/pnlInput.widget.tsx","../src/components/pnlInput/pnlInputProvider.tsx","../src/orderEntry.script.ts","../src/hooks/useBBOState.ts","../src/hooks/useCanTrade.ts","../src/hooks/useFocusAndBlur.ts","../src/hooks/usePriceInputContainer.ts","../src/orderEntry.widget.tsx"],"names":["useCallback","useEffect","useId","useMemo","useState","ERROR_MSG_CODES","useLocalStorage","useTranslation","useOrderEntryFormErrorMsg","OrderSide","OrderType","PositionType","Box","cn","Divider","Flex","modal","Switch","useScreen","Decimal","jsx","jsxs","open","Text","AuthGuard","EditIcon","Tooltip","Fragment","Button","i18n","BBOOrderType","Checkbox","textVariants","options","SimpleDialog","forwardRef","Grid","Badge","zero","national","order","totalQuantity","registerSimpleDialog","inputFormatter","Input","Select","item","memo","margin","total","DistributionType","value","useRef","TrailingCallbackType","React","createContext","useContext","mode","errors","useComputedLTV","useEventEmitter","useMemoizedFn","useOrderlyContext","removeTrailingZeros","utils","state"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useId, useMemo, useState } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationResult,\n useLocalStorage,\n useMemoizedFn,\n useOrderlyContext,\n} 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 cn,\n Divider,\n Flex,\n modal,\n SimpleSheet,\n Switch,\n ThrottledButton,\n toast,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { TPSLAdvancedWidget } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { AdditionalConfigButton } from \"./components/additional/additionalConfigButton\";\nimport {\n AdditionalInfo,\n AdditionalInfoProps,\n} from \"./components/additional/additionalInfo\";\nimport { PinButton } from \"./components/additional/pinButton\";\nimport { AdvancedTPSLResult } from \"./components/advancedTPSLResult\";\nimport { AssetInfo } from \"./components/assetInfo\";\nimport { Available } from \"./components/available\";\nimport { orderConfirmDialogId } from \"./components/dialog/confirm.ui\";\nimport { MaxQtyConfirm } from \"./components/dialog/maxQtyConfirm\";\nimport { scaledOrderConfirmDialogId } from \"./components/dialog/scaledOrderConfirm\";\nimport { OrderEntryHeader } from \"./components/header\";\nimport { OrderEntryProvider } from \"./components/orderEntryProvider\";\nimport { OrderInput } from \"./components/orderInput\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\nimport { ReduceOnlySwitch } from \"./components/reduceOnlySwitch\";\nimport { OrderTPSL } from \"./components/tpsl\";\nimport { type OrderEntryScriptReturn } from \"./orderEntry.script\";\nimport { getScaledPlaceOrderMessage } from \"./utils\";\n\ntype OrderEntryProps = OrderEntryScriptReturn & {\n containerRef?: React.RefObject<HTMLDivElement>;\n disableFeatures?: (\"slippageSetting\" | \"feesInfo\")[];\n};\n\nexport const OrderEntry: React.FC<OrderEntryProps> = (props) => {\n const {\n side,\n formattedOrder,\n setOrderValue,\n setOrderValues,\n symbolInfo,\n maxQty,\n freeCollateral,\n helper,\n submit,\n metaState,\n bboStatus,\n bboType,\n onBBOChange,\n toggleBBO,\n disableFeatures,\n currentLtv,\n fillMiddleValue,\n soundAlert,\n setSoundAlert,\n currentFocusInput,\n } = props;\n const [maxQtyConfirmOpen, setMaxQtyConfirmOpen] = useState(false);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n const [hasAdvancedTPSLResult, setHasAdvancedTPSLResult] =\n useState<boolean>(false);\n\n const { errors, validated } = metaState;\n\n const [errorMsgVisible, setErrorMsgVisible] = useState(false);\n\n const [needConfirm, setNeedConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true,\n );\n const [pinned, setPinned] = useLocalStorage(\n \"orderly-order-additional-pinned\",\n true,\n );\n const [showTPSLAdvanced, setShowTPSLAdvanced] = useState(false);\n const [hidden, setHidden] = useLocalStorage(\"orderly-order-hidden\", false);\n\n const [slippage, setSlippage] = useLocalStorage(\"orderly-slippage\", \"1\", {\n parseJSON: ((value: string | null) => {\n return !value || value === '\"\"' ? \"1\" : JSON.parse(value);\n }) as any,\n });\n\n const { notification } = useOrderlyContext();\n\n const soundAlertId = useId();\n\n const isSlPriceWarning =\n props.slPriceError?.sl_trigger_price?.type ===\n ERROR_MSG_CODES.SL_PRICE_WARNING;\n\n const { getErrorMsg } = useOrderEntryFormErrorMsg(validated ? errors : null);\n\n const buttonLabel = useMemo(() => {\n return side === OrderSide.BUY\n ? t(\"orderEntry.buyLong\")\n : t(\"orderEntry.sellShort\");\n }, [side, t]);\n\n useEffect(() => {\n if (validated) {\n setErrorMsgVisible(true);\n }\n }, [validated]);\n\n // set slippage\n useEffect(() => {\n if (disableFeatures?.includes(\"slippageSetting\")) {\n return;\n }\n if (slippage) {\n setOrderValue(\"slippage\", Number(slippage));\n } else {\n setOrderValue(\"slippage\", undefined);\n }\n }, [slippage, disableFeatures]);\n\n useEffect(() => {\n const clickHandler = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (\n target.closest(\"#order-entry-submit-button\")\n // || target.closest(\".orderly-order-entry\")\n ) {\n return;\n }\n setErrorMsgVisible((visible) => {\n if (visible) {\n return false;\n }\n return visible;\n });\n };\n\n if (errorMsgVisible) {\n document.addEventListener(\"click\", clickHandler);\n } else {\n document.removeEventListener(\"click\", clickHandler);\n }\n\n return () => {\n document.removeEventListener(\"click\", clickHandler);\n };\n }, [errorMsgVisible]);\n\n const onSubmit = useMemoizedFn(async () => {\n const isScaledOrder = formattedOrder.order_type === OrderType.SCALED;\n\n // TODO: in the future, we will be add `level` to `OrderValidationItem`, use `level` manager ui state\n const isSlPriceError =\n props.slPriceError?.sl_trigger_price?.type ===\n ERROR_MSG_CODES.SL_PRICE_ERROR;\n helper\n .validate(isSlPriceError ? props.slPriceError : undefined)\n .then(\n // validate success, it return the order\n // TODO: get order from other function\n (order: any) => {\n // scaled order is always need confirm\n if (isScaledOrder) {\n return modal.show(scaledOrderConfirmDialogId, {\n order,\n symbolInfo,\n size: isMobile ? \"sm\" : \"md\",\n });\n }\n\n if (needConfirm) {\n return modal.show(orderConfirmDialogId, {\n order: formattedOrder,\n symbolInfo,\n });\n }\n\n return true;\n },\n // should catch validate error first, then submit\n (errors: OrderValidationResult) => {\n // slippage error message is not show input tooltip, so we need to manually show it by toast\n if (errors.slippage) {\n toast.error(t(\"orderEntry.slippage.error.max\"));\n }\n\n // when switch order type, validated not changed, so we need to set it to true\n setErrorMsgVisible(true);\n\n return Promise.reject();\n },\n )\n .then(() => {\n // validate success, submit order\n return submit({ resetOnSuccess: false }).then((result: any) => {\n if (!result.success && result.message) {\n toast.error(result.message);\n } else if (result.success && isScaledOrder) {\n const message = getScaledPlaceOrderMessage(result);\n if (message) {\n toast.success(message);\n }\n }\n });\n })\n .catch((error) => {\n // submit order error\n if (error?.message) {\n toast.error(error.message);\n // toast.error(`Error:${error.message}`);\n\n // if (error instanceof ApiError) {\n // toast.error(error.message);\n }\n });\n });\n\n const formattedMaxQty = useMemo(() => {\n return new Decimal(maxQty)\n .todp(symbolInfo.base_dp, Decimal.ROUND_DOWN)\n .toString();\n }, [maxQty, symbolInfo.base_dp]);\n\n const onMaxQtyConfirm = useCallback(() => {\n setOrderValue(\"order_quantity\", formattedMaxQty);\n // submit order when order_quantity updated\n requestAnimationFrame(() => {\n onSubmit();\n });\n setMaxQtyConfirmOpen(false);\n }, [setOrderValue, formattedMaxQty]);\n\n const validateSubmit = async () => {\n // show a prompt reminding the user. If the user confirms, automatically disable Reduce Only and proceed with the action.\n if (formattedOrder.reduce_only && maxQty === 0) {\n return modal.confirm({\n title: t(\"orderEntry.reduceOnly.reminder\"),\n content: t(\"orderEntry.reduceOnly.reminder.content\"),\n okLabel: t(\"orderEntry.placeOrderNow\"),\n onOk: async () => {\n setOrderValue(\"reduce_only\", false);\n // submit order when reduce only updated\n requestAnimationFrame(() => {\n props.resetMetaState();\n onSubmit();\n });\n return Promise.resolve(true);\n },\n onCancel: async () => {\n return Promise.resolve(false);\n },\n });\n } else if (maxQty > 0 && Number(formattedOrder.order_quantity) > maxQty) {\n setMaxQtyConfirmOpen(true);\n } else {\n onSubmit();\n }\n };\n\n const onShowTPSLAdvanced = () => {\n helper.validate().then(\n () => {\n setShowTPSLAdvanced(true);\n },\n (errors) => {\n const tpslKey = new Set([\"tp_trigger_price\", \"sl_trigger_price\"]);\n if (Object.keys(errors).every((key: string) => tpslKey.has(key))) {\n setShowTPSLAdvanced(true);\n }\n },\n );\n // modal.show(TPSLAdvancedDialogId, {\n // order: formattedOrder,\n // setOrderValue: setOrderValue,\n // });\n // setShowTPSLAdvanced(true);\n };\n\n const onSubmitAdvancedTPSL = (order: OrderlyOrder) => {\n if (order.side !== formattedOrder.side) {\n setOrderValue(\"side\", order.side);\n }\n setOrderValues({\n position_type: order.position_type,\n tp_order_type: order.tp_order_type,\n tp_pnl: order.tp_pnl,\n tp_offset: order.tp_offset,\n tp_offset_percentage: order.tp_offset_percentage,\n tp_ROI: order.tp_ROI,\n tp_trigger_price: order.tp_trigger_price,\n tp_order_price: order.tp_order_price,\n sl_order_type: order.sl_order_type,\n sl_trigger_price: order.sl_trigger_price,\n sl_order_price: order.sl_order_price,\n sl_pnl: order.sl_pnl,\n sl_offset: order.sl_offset,\n sl_offset_percentage: order.sl_offset_percentage,\n sl_ROI: order.sl_ROI,\n });\n setShowTPSLAdvanced(false);\n setHasAdvancedTPSLResult(true);\n };\n\n const onDeleteAdvancedTPSL = () => {\n setHasAdvancedTPSLResult(false);\n setOrderValues({\n tp_trigger_price: undefined,\n tp_order_price: undefined,\n tp_order_type: OrderType.MARKET,\n sl_trigger_price: undefined,\n sl_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n tp_pnl: undefined,\n sl_pnl: undefined,\n position_type: PositionType.FULL,\n });\n };\n\n useEffect(() => {\n setHasAdvancedTPSLResult(false);\n }, [props.symbol]);\n\n const showReduceOnlySection =\n (isMobile &&\n formattedOrder.order_type !== OrderType.LIMIT &&\n formattedOrder.order_type !== OrderType.MARKET) ||\n !isMobile;\n\n const showSoundSection =\n Boolean(notification?.orderFilled?.media) &&\n (notification?.orderFilled?.displayInOrderEntry ?? true);\n\n const additionalInfoProps: AdditionalInfoProps = {\n pinned,\n setPinned,\n needConfirm,\n setNeedConfirm,\n hidden,\n setHidden,\n onValueChange: setOrderValue,\n orderTypeExtra: formattedOrder[\"order_type_ext\"],\n showExtra:\n formattedOrder[\"order_type\"] === OrderType.LIMIT && !props.tpslSwitch,\n };\n // Additional info (fok,ioc、post only, order confirm hidden)\n const extraButton = !pinned && (\n <AdditionalConfigButton {...additionalInfoProps} />\n );\n\n return (\n <OrderEntryProvider\n errors={errors}\n errorMsgVisible={errorMsgVisible}\n symbolInfo={symbolInfo}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n getErrorMsg={getErrorMsg}\n setOrderValue={setOrderValue}\n setOrderValues={setOrderValues}\n currentFocusInput={currentFocusInput.current}\n priceInputRef={props.priceInputRef}\n priceInputContainerRef={props.priceInputContainerRef}\n triggerPriceInputRef={props.triggerPriceInputRef}\n activatedPriceInputRef={props.activatedPriceInputRef}\n lastQuantityInputType={props.lastQuantityInputType}\n leverage={props.symbolLeverage}\n >\n <MaxQtyConfirm\n open={maxQtyConfirmOpen}\n onOpenChange={setMaxQtyConfirmOpen}\n maxQty={formattedMaxQty}\n onConfirm={onMaxQtyConfirm}\n base={symbolInfo.base}\n />\n <div\n className={\"oui-space-y-2 oui-text-base-contrast-54 xl:oui-space-y-3\"}\n ref={props.containerRef}\n >\n <OrderEntryHeader\n symbol={props.symbol}\n canTrade={props.canTrade}\n side={side}\n order_type={formattedOrder.order_type!}\n setOrderValue={setOrderValue}\n symbolLeverage={props.symbolLeverage}\n />\n\n <Available\n currentLtv={currentLtv}\n canTrade={props.canTrade}\n quote={symbolInfo?.quote}\n freeCollateral={freeCollateral}\n />\n\n <OrderInput\n values={formattedOrder}\n priceInputContainerWidth={props.priceInputContainerWidth}\n fillMiddleValue={fillMiddleValue}\n bbo={{\n bboStatus,\n bboType,\n onBBOChange,\n toggleBBO,\n }}\n />\n\n <QuantitySlider\n canTrade={props.canTrade}\n side={props.side}\n order_quantity={formattedOrder.order_quantity}\n maxQty={maxQty}\n />\n\n {/* Submit button */}\n <ThrottledButton\n fullWidth\n id={\"order-entry-submit-button\"}\n // color={side === OrderSide.BUY ? \"buy\" : \"sell\"}\n data-type={OrderSide.BUY}\n className={cn(\n side === OrderSide.BUY\n ? \"orderly-order-entry-submit-button-buy oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\"\n : \"orderly-order-entry-submit-button-sell oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\",\n )}\n onClick={validateSubmit}\n loading={props.isMutating}\n disabled={!props.canTrade}\n >\n {buttonLabel}\n </ThrottledButton>\n\n {/* Asset info */}\n <AssetInfo\n canTrade={props.canTrade}\n quote={symbolInfo.quote}\n estLiqPrice={props.estLiqPrice}\n estLeverage={props.estLeverage}\n currentLeverage={props.currentLeverage}\n slippage={slippage}\n dp={symbolInfo.quote_dp}\n setSlippage={setSlippage}\n estSlippage={props.estSlippage}\n orderType={formattedOrder.order_type!}\n disableFeatures={disableFeatures}\n symbol={props.symbol}\n />\n\n <Divider className=\"oui-w-full\" />\n\n {/* TP SL switch and content */}\n {hasAdvancedTPSLResult ? (\n <AdvancedTPSLResult\n order={formattedOrder}\n symbolInfo={props.symbolInfo}\n errors={validated ? errors : null}\n onEdit={() => {\n setShowTPSLAdvanced(true);\n }}\n onDelete={() => {\n onDeleteAdvancedTPSL();\n }}\n />\n ) : (\n <OrderTPSL\n // onCancelTPSL={props.cancelTP_SL}\n // onEnableTP_SL={props.enableTP_SL}\n quote_dp={props.symbolInfo.quote_dp}\n switchState={props.tpslSwitch}\n onSwitchChanged={props.setTpslSwitch}\n orderType={formattedOrder.order_type!}\n errors={\n validated || isSlPriceWarning\n ? { ...errors, ...props.slPriceError }\n : null\n }\n setOrderValue={setOrderValue}\n reduceOnlyChecked={formattedOrder.reduce_only ?? false}\n onReduceOnlyChange={(checked) => {\n setOrderValue(\"reduce_only\", checked);\n }}\n values={{\n position_type:\n formattedOrder.position_type ?? PositionType.PARTIAL,\n tp: {\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 sl: {\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 showTPSLAdvanced={onShowTPSLAdvanced}\n onChange={(key, value) => {\n setOrderValue(key, value);\n }}\n />\n )}\n\n {showReduceOnlySection && (\n <Flex justify={\"between\"} itemAlign={\"center\"} className=\"oui-mt-2\">\n <ReduceOnlySwitch\n checked={formattedOrder.reduce_only ?? false}\n onCheckedChange={(checked) => {\n setOrderValue(\"reduce_only\", checked);\n }}\n />\n {!showSoundSection && extraButton}\n </Flex>\n )}\n {showSoundSection && (\n <Flex justify={\"between\"} itemAlign={\"center\"}>\n <Flex itemAlign={\"center\"} gapX={1}>\n <Switch\n className=\"oui-h-[14px]\"\n id={soundAlertId}\n checked={soundAlert}\n onCheckedChange={(checked) => setSoundAlert(checked)}\n />\n <label htmlFor={soundAlertId} className={\"oui-text-xs\"}>\n {t(\"portfolio.setting.soundAlerts\")}\n </label>\n </Flex>\n {extraButton}\n </Flex>\n )}\n {!showSoundSection &&\n isMobile &&\n (formattedOrder.order_type == OrderType.LIMIT ||\n formattedOrder.order_type == OrderType.MARKET) &&\n !formattedOrder.reduce_only &&\n !pinned && (\n <Flex className=\"oui-w-full\" justify={\"end\"}>\n {extraButton}\n </Flex>\n )}\n {/* Additional info (fok,ioc、post only, order confirm hidden) */}\n {pinned && (\n <Box p={2} r={\"md\"} intensity={700} position={\"relative\"}>\n <AdditionalInfo {...additionalInfoProps} />\n <PinButton\n onClick={() => {\n setPinned(false);\n }}\n className={\"oui-group oui-absolute oui-right-2 oui-top-2\"}\n data-testid=\"oui-testid-orderEntry-pinned-button\"\n />\n </Box>\n )}\n </div>\n\n <SimpleSheet\n open={showTPSLAdvanced}\n onOpenChange={setShowTPSLAdvanced}\n classNames={{\n body: \"oui-h-full oui-pb-0 oui-border-none\",\n overlay: \"!oui-bg-base-10/60\",\n content: cn(\n \"oui-rounded-[16px] oui-border-none !oui-p-0\",\n isMobile\n ? \"oui-inset-y-0 oui-right-0 oui-w-[280px]\"\n : \"!oui-bottom-[40px] oui-right-3 oui-top-[44px] !oui-h-auto oui-w-[360px]\",\n ),\n }}\n contentProps={{ side: \"right\", closeable: false }}\n >\n <TPSLAdvancedWidget\n setOrderValue={setOrderValue}\n order={formattedOrder as OrderlyOrder}\n onSubmit={onSubmitAdvancedTPSL}\n onClose={() => {\n setShowTPSLAdvanced(false);\n }}\n symbolLeverage={props.symbolLeverage}\n />\n </SimpleSheet>\n </OrderEntryProvider>\n );\n};\n","import { useState } from \"react\";\nimport {\n PopoverContent,\n PopoverRoot,\n PopoverTrigger,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AdditionalInfo, AdditionalInfoProps } from \"./additionalInfo\";\n\nexport function AdditionalConfigButton(props: AdditionalInfoProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <PopoverRoot open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n data-testid=\"oui-testid-orderEntry-additional-button\"\n onClick={() => {\n setOpen(true);\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-white/[.36] hover:oui-fill-white/80\"\n >\n <path\n d=\"M3.332 2.665a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V3.332a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V3.332a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V3.332a.667.667 0 0 0-.667-.667zm-8 4a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V7.332a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V7.332a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V7.332a.667.667 0 0 0-.667-.667zm-8 4a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667v-1.333a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667v-1.333a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667v-1.333a.667.667 0 0 0-.667-.667z\"\n // fill=\"#fff\"\n // fillOpacity={open ? 0.8 : 0.36}\n />\n </svg>\n </button>\n </PopoverTrigger>\n <PopoverContent side={\"top\"} align={\"end\"} className={\"oui-w-[230px]\"}>\n <AdditionalInfo {...props} />\n </PopoverContent>\n </PopoverRoot>\n );\n}\n","import { FC, useEffect } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderlyOrder, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Checkbox, cn, Divider, Flex, Switch } from \"@kodiak-finance/orderly-ui\";\n\nexport type AdditionalInfoProps = {\n pinned: boolean;\n setPinned: (value: boolean) => void;\n needConfirm: boolean;\n setNeedConfirm: (value: boolean) => void;\n hidden: boolean;\n setHidden: (value: boolean) => void;\n onValueChange?: (key: keyof OrderlyOrder, value: any) => void;\n orderTypeExtra?: OrderType;\n showExtra?: boolean;\n};\n\nexport const AdditionalInfo: FC<AdditionalInfoProps> = (props) => {\n const { pinned, orderTypeExtra } = props;\n const { t } = useTranslation();\n\n const onTypeToggle = (type: OrderType) => (checked: boolean) => {\n if (props.onValueChange) {\n props.onValueChange(\n \"order_type_ext\" as keyof OrderlyOrder,\n checked ? type : \"\",\n // orderTypeExtra === type ? \"\" : type\n );\n }\n };\n\n useEffect(() => {\n props.onValueChange?.(\"visible_quantity\", props.hidden ? 0 : 1);\n }, [props.hidden]);\n\n return (\n <div className={\"oui-text-base-contrast-54\"}>\n <Flex\n justify={pinned ? \"start\" : \"between\"}\n mb={3}\n width={pinned ? \"unset\" : \"100%\"}\n className=\"oui-gap-x-2 md:oui-gap-x-3\"\n wrap=\"wrap\"\n gapY={1}\n >\n <Flex itemAlign={\"center\"}>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-postOnly-checkBox\"\n id={\"toggle_order_post_only\"}\n className=\"oui-peer\"\n color={\"white\"}\n variant={\"radio\"}\n disabled={!props.showExtra}\n checked={orderTypeExtra === OrderType.POST_ONLY}\n onCheckedChange={onTypeToggle(OrderType.POST_ONLY)}\n />\n <label\n htmlFor={\"toggle_order_post_only\"}\n className={cn(\n \"oui-ml-1 oui-text-2xs peer-data-[disabled]:oui-text-base-contrast-20\",\n \"oui-whitespace-nowrap oui-break-normal\",\n )}\n >\n {t(\"orderEntry.orderType.postOnly\")}\n </label>\n </Flex>\n <Flex itemAlign={\"center\"}>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-ioc-checkBox\"\n id={\"toggle_order_iov\"}\n color={\"white\"}\n className=\"oui-peer\"\n variant={\"radio\"}\n checked={orderTypeExtra === OrderType.IOC}\n onCheckedChange={onTypeToggle(OrderType.IOC)}\n disabled={!props.showExtra}\n />\n <label\n htmlFor={\"toggle_order_iov\"}\n className={cn(\n \"oui-ml-1 oui-text-2xs peer-data-[disabled]:oui-text-base-contrast-20\",\n \"oui-whitespace-nowrap oui-break-normal\",\n )}\n >\n {t(\"orderEntry.orderType.ioc\")}\n </label>\n </Flex>\n <Flex itemAlign={\"center\"}>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-fox-checkBox\"\n id={\"toggle_order_fok\"}\n color={\"white\"}\n variant={\"radio\"}\n className=\"oui-peer\"\n checked={orderTypeExtra === OrderType.FOK}\n onCheckedChange={onTypeToggle(OrderType.FOK)}\n disabled={!props.showExtra}\n />\n <label\n htmlFor={\"toggle_order_fok\"}\n className={cn(\n \"oui-ml-1 oui-text-2xs peer-data-[disabled]:oui-text-base-contrast-20\",\n \"oui-whitespace-nowrap oui-break-normal\",\n )}\n >\n {t(\"orderEntry.orderType.fok\")}\n </label>\n </Flex>\n </Flex>\n\n <Flex gapX={6}>\n <Flex>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-orderConfirm-checkBox\"\n id={\"toggle_order_confirm\"}\n color={\"white\"}\n checked={props.needConfirm}\n onCheckedChange={(checked) => {\n props.setNeedConfirm(!!checked);\n }}\n />\n <label\n htmlFor={\"toggle_order_confirm\"}\n className={\"oui-ml-1 oui-text-2xs\"}\n >\n {t(\"orderEntry.orderConfirm\")}\n </label>\n </Flex>\n <Flex>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-hidden-checkBox\"\n id={\"toggle_order_hidden\"}\n color={\"white\"}\n checked={props.hidden}\n onCheckedChange={(checked: boolean) => {\n props.setHidden(checked);\n }}\n />\n <label\n htmlFor={\"toggle_order_hidden\"}\n className={\"oui-ml-1 oui-text-2xs\"}\n >\n {t(\"orderEntry.hidden\")}\n </label>\n </Flex>\n </Flex>\n {!pinned && (\n <>\n <Divider className={\"oui-my-3\"} />\n <Flex>\n <Switch\n data-testid=\"oui-testid-orderEntry-additional-keepVisible-switch\"\n id={\"toggle_order_keep_visible\"}\n onCheckedChange={(checked) => {\n props.setPinned(checked);\n }}\n />\n <label\n htmlFor={\"toggle_order_keep_visible\"}\n className={\"oui-ml-1 oui-text-2xs\"}\n >\n {t(\"orderEntry.keepVisible\")}\n </label>\n </Flex>\n </>\n )}\n </div>\n );\n};\n","import { HTMLAttributes, useState } from \"react\";\n\nconst defaultPath =\n \"M10.007 1.302a.74.74 0 0 0-.486.214c-1.033.989-1.349 1.815-.972 2.948-.88.675-1.437.84-2.536.84-1.503 0-2.484.182-3.152.85v.02a1.583 1.583 0 0 0 0 2.248l1.867 1.882-3.181 3.18c-.26.26-.28.696-.02.956.261.26.699.26.959 0l3.193-3.194 1.87 1.861a1.585 1.585 0 0 0 2.25 0h.02c.668-.667.854-1.523.854-3.144 0-1.03.212-1.758.852-2.523 1.233.361 1.95.015 2.961-.995a.68.68 0 0 0 .188-.48c0-.234-.06-.593-.209-1.04a5.34 5.34 0 0 0-1.312-2.103 5.35 5.35 0 0 0-2.104-1.312c-.448-.15-.808-.208-1.042-.208\";\n\nexport const PinButton = (props: HTMLAttributes<HTMLButtonElement>) => {\n const [path, setPath] = useState(defaultPath);\n return (\n <button {...props}>\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n onMouseEnter={() => {\n setPath(\n 'M10.008 1.302a.74.74 0 0 0-.486.214c-1.033.989-1.349 1.815-.972 2.948-.88.675-1.437.84-2.536.84-1.503 0-2.484.182-3.152.85v.02a1.583 1.583 0 0 0 0 2.248l1.867 1.882-3.181 3.18c-.26.26-.28.696-.02.956.261.26.699.26.959 0l3.193-3.194 1.87 1.861a1.585 1.585 0 0 0 2.25 0h.02c.668-.667.854-1.523.854-3.144 0-1.03.212-1.758.853-2.523 1.232.361 1.95.015 2.96-.995a.68.68 0 0 0 .188-.48c0-.234-.06-.593-.209-1.04a5.34 5.34 0 0 0-1.312-2.103A5.35 5.35 0 0 0 11.05 1.51c-.448-.15-.808-.208-1.042-.208m.258 1.37c.708.131 1.421.6 1.93 1.107.507.508.94 1.13 1.119 1.945-.636.61-1.026.658-1.662.323a.67.67 0 0 0-.779.117c-1.214 1.213-1.533 2.314-1.533 3.8 0 1.292-.076 1.773-.48 2.206-.113.123-.27.104-.374 0L3.799 7.486a.24.24 0 0 1-.017-.34c.239-.29.769-.515 2.226-.514 1.742.001 2.668-.448 3.812-1.52a.67.67 0 0 0 .125-.77c-.343-.686-.29-1.047.321-1.67\"',\n );\n }}\n onMouseLeave={() => {\n setPath(defaultPath);\n }}\n className=\"oui-text-primary-darken\"\n >\n <path d={path} />\n </svg>\n </button>\n );\n};\n","import { SVGProps } 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 OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport { Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport function AdvancedTPSLResult(props: {\n order: Partial<OrderlyOrder>;\n symbolInfo: API.SymbolExt;\n errors: OrderValidationResult | null;\n onEdit: () => void;\n onDelete: () => void;\n}) {\n const { order: formattedOrder, symbolInfo, onEdit, onDelete, errors } = props;\n\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n const { t } = useTranslation();\n\n const renderTp = () => {\n const error = getErrorMsg(\"tp_trigger_price\");\n if (formattedOrder.tp_trigger_price || formattedOrder.tp_order_price) {\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full\"\n gap={4}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n gapY={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpTriggerPrice\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n className=\"oui-text-base-contrast\"\n dp={symbolInfo.quote_dp}\n >\n {formattedOrder.tp_trigger_price ?? \"\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpOrderPrice\")}</Text>\n {formattedOrder.tp_order_type === OrderType.LIMIT ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n className=\"oui-text-base-contrast\"\n dp={symbolInfo.quote_dp}\n >\n {formattedOrder.tp_order_price ?? \"\"}\n </Text.numeral>\n ) : (\n <Text className=\"oui-text-base-contrast\">Market</Text>\n )}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n coloring\n dp={2}\n >\n {Number(formattedOrder.tp_pnl)}\n </Text.numeral>\n </Flex>\n </Flex>\n {error && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"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\">{error}</Text>\n </Flex>\n )}\n </Flex>\n );\n }\n return null;\n };\n\n const renderSl = () => {\n if (formattedOrder.sl_trigger_price || formattedOrder.sl_order_price) {\n const error = getErrorMsg(\"sl_trigger_price\");\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full\"\n gap={4}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n gapY={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slTriggerPrice\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n className=\"oui-text-base-contrast\"\n dp={symbolInfo.quote_dp}\n >\n {formattedOrder.sl_trigger_price ?? \"\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slOrderPrice\")}</Text>\n {formattedOrder.sl_order_type === OrderType.LIMIT ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n className=\"oui-text-base-contrast\"\n dp={symbolInfo.quote_dp}\n >\n {formattedOrder.sl_order_price ?? \"\"}\n </Text.numeral>\n ) : (\n <Text className=\"oui-text-base-contrast\">Market</Text>\n )}\n </Flex>\n\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.totalEstSlPnl\")}</Text>\n <Text.numeral\n coloring\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n dp={2}\n >\n {Number(formattedOrder.sl_pnl)}\n </Text.numeral>\n </Flex>\n {error && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"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\">{error}</Text>\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n }\n return null;\n };\n\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full oui-text-2xs\"\n gap={4}\n >\n <Flex justify={\"between\"} itemAlign={\"start\"} className=\"oui-w-full\">\n <Text>{t(\"common.tpsl\")}</Text>\n <Flex gap={2}>\n <DeleteIcon\n size={12}\n className=\"oui-cursor-pointer oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n opacity={1}\n onClick={onDelete}\n />\n <EditIcon\n size={12}\n className=\"oui-cursor-pointer oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n onClick={onEdit}\n />\n </Flex>\n </Flex>\n <Flex justify={\"between\"} itemAlign={\"start\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.mode\")}</Text>\n <Text className=\"oui-text-base-contrast\">\n {formattedOrder.position_type === PositionType.FULL\n ? t(\"tpsl.fullPosition\")\n : t(\"tpsl.partialPosition\")}\n </Text>\n </Flex>\n {renderTp()}\n {renderSl()}\n\n <Divider className=\"oui-mb-2 oui-w-full\" />\n </Flex>\n );\n}\n\ninterface IconProps extends SVGProps<SVGSVGElement> {\n size: number;\n}\nconst DeleteIcon: React.FC<IconProps> = (props) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={props.size}\n height={props.size}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M5.99903 0.976562C5.44653 0.976562 4.99903 1.42406 4.99903 1.97656H2.49902C2.22302 1.97656 1.99902 2.20056 1.99902 2.47656C1.99902 2.75256 2.22302 2.97656 2.49902 2.97656H9.49903C9.77503 2.97656 9.99903 2.75256 9.99903 2.47656C9.99903 2.20056 9.77503 1.97656 9.49903 1.97656H6.99903C6.99903 1.42406 6.55153 0.976562 5.99903 0.976562ZM2.49902 3.97655V8.97654C2.49902 10.0715 3.40152 10.961 4.49903 10.961L7.51453 10.9765C8.61203 10.9765 9.49903 10.074 9.49903 8.97654V3.97655H2.49902ZM4.99903 5.47655C5.27503 5.47655 5.49903 5.70055 5.49903 5.97655V8.97654C5.49903 9.25254 5.27503 9.47654 4.99903 9.47654C4.72303 9.47654 4.49903 9.25254 4.49903 8.97654V5.97655C4.49903 5.70055 4.72303 5.47655 4.99903 5.47655ZM6.99903 5.47655C7.27503 5.47655 7.49903 5.70055 7.49903 5.97655V8.97654C7.49903 9.25254 7.27503 9.47654 6.99903 9.47654C6.72303 9.47654 6.49903 9.25254 6.49903 8.97654V5.97655C6.49903 5.70055 6.72303 5.47655 6.99903 5.47655Z\" />\n </svg>\n );\n};\n\nconst EditIcon: React.FC<IconProps> = (props) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 12 12\"\n width={props.size}\n height={props.size}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.49779 0.976562C8.36529 0.976562 8.23229 1.02357 8.13829 1.11707C7.86029 1.39507 6.85979 2.39558 6.63779 2.61808L2.13529 7.12059L1.63479 7.62059C1.56529 7.69059 1.52929 7.78958 1.50979 7.88658L1.00979 10.3881C0.939788 10.7381 1.23779 11.0361 1.58779 10.9666C1.90079 10.9036 3.77679 10.5286 4.08929 10.4661C4.18629 10.4466 4.28529 10.4106 4.35529 10.3411L4.85529 9.84059L9.35779 5.33808C9.58029 5.11608 10.5808 4.11506 10.8588 3.83756C10.9523 3.74356 10.9993 3.61056 10.9993 3.47806C10.9993 2.65956 10.7908 2.07456 10.3583 1.63306C9.92179 1.18756 9.33879 0.976562 8.49779 0.976562ZM8.69479 1.98606C9.14629 2.01256 9.43879 2.11608 9.63929 2.32108C9.84429 2.53008 9.97379 2.82008 10.0018 3.26258C9.72779 3.53608 9.32679 3.93106 8.99829 4.25956C8.60179 3.86306 8.11279 3.37407 7.71629 2.97757C8.04529 2.64907 8.42129 2.25956 8.69479 1.98606ZM6.99729 3.69657L8.27929 4.97858L4.49579 8.76207L3.21379 7.48009L6.99729 3.69657ZM2.49479 8.19908L3.77679 9.48107L3.72979 9.52809C3.39979 9.59409 2.73329 9.73359 2.11929 9.85659L2.44779 8.24608L2.49479 8.19908Z\" />\n </svg>\n );\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, textVariants } from \"@kodiak-finance/orderly-ui\";\nimport { FeesWidget } from \"../fee\";\nimport { SlippageUI } from \"../slippage/slippage.ui\";\n\nexport function AssetInfo(props: {\n symbol: string;\n canTrade: boolean;\n quote: string;\n estLiqPrice: number | null;\n estLeverage: number | null;\n currentLeverage: number | null;\n slippage: string;\n dp: number;\n estSlippage: number | null;\n setSlippage: (slippage: string) => void;\n orderType: OrderType;\n disableFeatures?: (\"slippageSetting\" | \"feesInfo\")[];\n}) {\n const { canTrade, disableFeatures, orderType, symbol } = props;\n const { t } = useTranslation();\n\n return (\n <div className={\"oui-space-y-[2px] xl:oui-space-y-1\"}>\n <Flex justify={\"between\"}>\n <Text size={\"2xs\"}>{t(\"orderEntry.estLiqPrice\")}</Text>\n <Text.numeral\n unit={props.quote}\n size={\"2xs\"}\n dp={props.dp}\n className={\"oui-text-base-contrast-80\"}\n unitClassName={\"oui-ml-1 oui-text-base-contrast-36\"}\n >\n {canTrade ? (props.estLiqPrice ?? \"--\") : \"--\"}\n </Text.numeral>\n </Flex>\n\n {orderType === OrderType.MARKET &&\n !disableFeatures?.includes(\"slippageSetting\") && (\n <SlippageUI\n slippage={props.slippage}\n setSlippage={props.setSlippage}\n estSlippage={props.estSlippage}\n />\n )}\n\n {!disableFeatures?.includes(\"feesInfo\") && (\n <FeesWidget symbol={props.symbol} />\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport {\n useFeeState,\n useRwaSymbolsInfoStore,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { EffectiveFeesWidget } from \"./effectiveFee\";\nimport { RegularFeesWidget } from \"./regularFee\";\n\nconst isEffective = (val?: unknown) =>\n typeof val !== \"undefined\" && val !== null;\n\nexport const FeesWidget: React.FC<{ symbol: string }> = ({ symbol }) => {\n const { refereeRebate, ...others } = useFeeState();\n const info = useRwaSymbolsInfoStore();\n const isRwa = info?.[symbol] !== undefined;\n const isEffectiveFee = isEffective(refereeRebate);\n return isEffectiveFee ? (\n <EffectiveFeesWidget\n taker={isRwa ? others.rwaEffectiveTakerFee : others.effectiveTakerFee}\n maker={isRwa ? others.rwaEffectiveMakerFee : others.effectiveMakerFee}\n />\n ) : (\n <RegularFeesWidget\n taker={isRwa ? others.rwaTakerFee : others.takerFee}\n maker={isRwa ? others.rwaMakerFee : others.makerFee}\n />\n );\n};\n","import React from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Flex,\n modal,\n Text,\n Tooltip,\n useModal,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport {\n RouterAdapter,\n useScaffoldContext,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\nimport { EffectiveFee } from \"./icons\";\n\nconst EffectiveFeeBody: React.FC<{\n routerAdapter: RouterAdapter | undefined;\n onClose?: () => void;\n}> = ({ routerAdapter, onClose }) => {\n const { t } = useTranslation();\n return (\n <Text size=\"2xs\" className=\"oui-whitespace-normal oui-break-words\">\n {t(\"portfolio.feeTier.effectiveFee.tooltip\")}{\" \"}\n <a\n href=\"/rewards/affiliate\"\n onClick={(e) => {\n e.preventDefault();\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate\",\n name: t(\"portfolio.feeTier.effectiveFee.tooltipLink\"),\n });\n onClose?.();\n }}\n className=\"oui-cursor-pointer oui-border-none oui-bg-transparent oui-p-0 oui-text-2xs oui-underline hover:oui-text-base-contrast-80\"\n >\n {t(\"portfolio.feeTier.effectiveFee.tooltipLink\")}\n </a>\n </Text>\n );\n};\n\nconst EffectiveFeeMobileContent: React.FC<{\n routerAdapter: RouterAdapter | undefined;\n}> = ({ routerAdapter }) => {\n const { hide } = useModal();\n return <EffectiveFeeBody routerAdapter={routerAdapter} onClose={hide} />;\n};\n\nconst EffectiveFeeSection: React.FC<{\n routerAdapter: RouterAdapter | undefined;\n}> = (props) => {\n const { routerAdapter } = props;\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n if (isMobile) {\n return (\n <EffectiveFee\n onClick={() => {\n modal.dialog({\n size: \"sm\",\n title: t(\"common.tips\"),\n content: (\n <EffectiveFeeMobileContent routerAdapter={routerAdapter} />\n ),\n });\n }}\n />\n );\n }\n return (\n <Tooltip\n content={<EffectiveFeeBody routerAdapter={routerAdapter} />}\n className=\"oui-p-1.5 oui-text-base-contrast-54\"\n >\n <EffectiveFee className={\"oui-cursor-pointer\"} />\n </Tooltip>\n );\n};\n\nexport const EffectiveFeeUI: React.FC<{ taker: string; maker: string }> = (\n props,\n) => {\n const { t } = useTranslation();\n const { routerAdapter } = useScaffoldContext();\n const { taker, maker } = props;\n\n const originalTrailingFees = (\n <Flex itemAlign=\"center\" justify=\"between\" width={\"100%\"} gap={1}>\n <Flex width={\"100%\"} itemAlign=\"center\" justify={\"between\"}>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"common.fees\")}\n </Text>\n <AuthGuard\n fallback={() => (\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.taker\")}: --% / {t(\"dmm.maker\")}: --%\n </Text>\n )}\n >\n <Flex gap={1}>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.taker\")}:\n </Text>\n <Text size=\"2xs\" className=\"oui-text-base-contrast-80\">\n {taker}\n </Text>\n <Text size=\"2xs\">/</Text>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.maker\")}:\n </Text>\n <Text size=\"2xs\" className=\"oui-text-base-contrast-80\">\n {maker}\n </Text>\n </Flex>\n </AuthGuard>\n </Flex>\n <EffectiveFeeSection routerAdapter={routerAdapter} />\n </Flex>\n );\n\n return originalTrailingFees;\n};\n","import React, { useId } from \"react\";\n\nexport const EffectiveFee = React.forwardRef<\n SVGSVGElement,\n React.SVGAttributes<SVGSVGElement>\n>((props, ref) => {\n const linearId = useId();\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={14}\n height={14}\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n ref={ref}\n focusable={false}\n {...props}\n >\n <path\n d=\"M6.16411 1.53106C6.61974 1.07566 7.35888 1.07551 7.81442 1.53106L8.48833 2.20496C8.6797 2.39624 8.93064 2.51452 9.19755 2.54106L9.3132 2.54676H10.2662C10.9104 2.54691 11.4328 3.06926 11.4329 3.71343V4.66647C11.4329 4.97589 11.5559 5.27312 11.7747 5.49191L12.4492 6.16582C12.9047 6.62142 12.9047 7.36054 12.4492 7.81613L11.7753 8.49004L11.6972 8.57549C11.5272 8.78302 11.433 9.04426 11.4329 9.31491V10.2685L11.4272 10.3876C11.3715 10.9366 10.9348 11.373 10.3859 11.4289L10.2662 11.4352H9.3132L9.19755 11.4409C8.93066 11.4674 8.67969 11.5857 8.48833 11.777L7.81442 12.4509L7.72555 12.5306C7.29789 12.8795 6.68066 12.8794 6.25297 12.5306L6.16411 12.4509L5.4902 11.777C5.29887 11.5857 5.04786 11.4675 4.78097 11.4409L4.66533 11.4352H3.71171L3.59265 11.4289C3.04358 11.3731 2.60705 10.9367 2.55131 10.3876L2.54505 10.2685V9.31491C2.54499 9.04416 2.45089 8.78306 2.28072 8.57549L2.20325 8.49004L1.52934 7.81613C1.10213 7.38905 1.07534 6.71297 1.44902 6.25469L1.52934 6.16582L2.20382 5.49191C2.42248 5.27314 2.54505 4.97579 2.54505 4.66647V3.71343C2.54513 3.10945 3.00442 2.61221 3.59265 2.55246L3.71171 2.54676H4.66533L4.78097 2.54106C5.00968 2.51826 5.22694 2.4281 5.40475 2.28244L5.4902 2.20496L6.16411 1.53106ZM6.31507 3.02983C5.87756 3.46727 5.28401 3.71336 4.66533 3.71343H3.71171V4.66647C3.71171 5.28521 3.46614 5.87922 3.02869 6.31678L2.35421 6.99069L3.02812 7.6646C3.46577 8.10214 3.71164 8.69607 3.71171 9.31491V10.2685H4.66533C5.28396 10.2686 5.87757 10.5142 6.31507 10.9515L6.98898 11.6255L7.66289 10.9515C8.10045 10.5141 8.69446 10.2685 9.3132 10.2685H10.2662V9.31491C10.2663 8.69604 10.5127 8.10214 10.9504 7.6646L11.6243 6.99069L10.9498 6.31678C10.5122 5.8792 10.2662 5.28531 10.2662 4.66647V3.71343H9.3132C8.69438 3.71343 8.10047 3.46739 7.66289 3.02983L6.98898 2.35592L6.31507 3.02983ZM8.52934 4.64255C8.7571 4.41479 9.12639 4.41489 9.35421 4.64255C9.58202 4.87035 9.58202 5.23961 9.35421 5.46742L5.4657 9.35593C5.2379 9.58372 4.86863 9.58373 4.64083 9.35593C4.41318 9.12811 4.41308 8.75881 4.64083 8.53106L8.52934 4.64255ZM8.66435 7.83265C9.1245 7.83272 9.49777 8.2059 9.49777 8.66607C9.49769 9.12616 9.12445 9.49941 8.66435 9.49948C8.20419 9.49948 7.83101 9.12621 7.83094 8.66607C7.83094 8.20586 8.20415 7.83265 8.66435 7.83265ZM5.33126 4.49956C5.79141 4.49963 6.16468 4.87282 6.16468 5.33298C6.1646 5.79307 5.79136 6.16575 5.33126 6.16582C4.87111 6.16582 4.49793 5.79311 4.49785 5.33298C4.49785 4.87277 4.87106 4.49956 5.33126 4.49956Z\"\n fill={`url(#${linearId})`}\n />\n <defs>\n <linearGradient\n id={linearId}\n x1=\"12.7908\"\n y1=\"6.99084\"\n x2=\"1.1875\"\n y2=\"6.99084\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop stopColor=\"rgb(var(--oui-gradient-brand-start))\" offset={1} />\n </linearGradient>\n </defs>\n </svg>\n );\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n EffectiveFee.displayName = \"EffectiveFee\";\n}\n","import React from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { EffectiveFeeUI } from \"./effectiveFee.ui\";\n\nexport const EffectiveFeesWidget: React.FC<{ taker: string; maker: string }> = (\n props,\n) => {\n return <EffectiveFeeUI {...props} />;\n};\n","import React from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\n\nexport const RegularFeesUI: React.FC<{ taker: string; maker: string }> = (\n props,\n) => {\n const { t } = useTranslation();\n const { taker, maker } = props;\n\n const originalTrailingFees = (\n <Flex itemAlign=\"center\" justify=\"between\" width={\"100%\"} gap={1}>\n <Flex width={\"100%\"} itemAlign=\"center\" justify={\"between\"}>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"common.fees\")}\n </Text>\n <AuthGuard\n fallback={() => (\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.taker\")}: --% / {t(\"dmm.maker\")}: --%\n </Text>\n )}\n >\n <Flex gap={1}>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.taker\")}:\n </Text>\n <Text size=\"2xs\" className=\"oui-text-base-contrast-80\">\n {taker}\n </Text>\n <Text size=\"2xs\">/</Text>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.maker\")}:\n </Text>\n <Text size=\"2xs\" className=\"oui-text-base-contrast-80\">\n {maker}\n </Text>\n </Flex>\n </AuthGuard>\n </Flex>\n </Flex>\n );\n\n return originalTrailingFees;\n};\n","import React from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { RegularFeesUI } from \"./regularFees.ui\";\n\nexport const RegularFeesWidget: React.FC<{ taker: string; maker: string }> = (\n props,\n) => {\n return <RegularFeesUI {...props} />;\n};\n","import { useRef } from \"react\";\nimport { useBoolean } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n EditIcon,\n Flex,\n Text,\n SimpleDialog,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { SlippageEditor } from \"./slippageEditor\";\n\nexport const SlippageCell = (props: {\n slippage: string;\n setSlippage: (slippage: string) => void;\n estSlippage: number | null;\n}) => {\n const { t } = useTranslation();\n const [open, { setTrue: setOpen, setFalse: setClose, toggle }] =\n useBoolean(false);\n\n const { isMobile } = useScreen();\n const slippageRef = useRef<{ getValue: () => number | undefined }>(null);\n\n const onConfirm = () => {\n const val = slippageRef.current?.getValue();\n\n props.setSlippage(!val ? \"1\" : val.toString());\n setClose();\n return Promise.resolve(true);\n };\n\n return (\n <>\n <SimpleDialog\n open={open}\n onOpenChange={toggle}\n title={t(\"common.settings\")}\n contentProps={{ size: isMobile ? \"xs\" : \"sm\" }}\n actions={{\n primary: {\n disabled: false,\n label: t(\"common.save\"),\n onClick: onConfirm,\n },\n secondary: {\n label: t(\"common.cancel\"),\n onClick: () => setClose(),\n },\n }}\n >\n <SlippageEditor\n ref={slippageRef}\n isMobile={isMobile}\n initialValue={props.slippage ? Number(props.slippage) : undefined}\n />\n </SimpleDialog>\n <Flex justify={\"between\"}>\n <Text size=\"2xs\">{t(\"orderEntry.slippage\")}</Text>\n <AuthGuard\n fallback={() => (\n <Text size=\"2xs\">\n {t(\"orderEntry.slippage.est\")}: -% / {t(\"common.max\")}: --%\n </Text>\n )}\n >\n <Flex gap={1}>\n <Text.numeral\n size=\"2xs\"\n rule=\"percentages\"\n prefix={`${t(\"orderEntry.slippage.est\")}: `}\n suffix={` / ${t(\"common.max\")}: `}\n >\n {props.estSlippage ?? 0}\n </Text.numeral>\n <button className=\"oui-text-2xs\" onClick={() => setOpen()}>\n <Flex className=\"oui-gap-0.5\" as=\"span\">\n <Text size=\"2xs\" className=\"oui-text-primary\">\n {`${props.slippage || \"-\"}%`}\n </Text>\n <EditIcon\n className=\"oui-text-primary oui-hidden md:oui-block\"\n size={12}\n opacity={1}\n />\n </Flex>\n </button>\n </Flex>\n </AuthGuard>\n </Flex>\n </>\n );\n};\n","import {\n FC,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n} from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n cn,\n ExclamationFillIcon,\n Flex,\n Input,\n inputFormatter,\n modal,\n Text,\n Tooltip,\n TooltipTrigger,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\ninterface SlippageProps {\n initialValue?: number;\n isMobile?: boolean;\n}\n\nconst options = [0.01, 0.05, 0.1];\n\nexport const SlippageEditor = forwardRef<\n { getValue: () => number | undefined },\n SlippageProps\n>((props, ref) => {\n const { t } = useTranslation();\n const [value, setValue] = useState<number>();\n const [customValue, setCustomValue] = useState(\"\");\n const [error, setError] = useState<string | undefined>(undefined);\n\n useImperativeHandle(ref, () => ({\n getValue: () =>\n customValue ? new Decimal(customValue)?.toNumber() : value,\n }));\n\n useEffect(() => {\n if (props.initialValue && !options.includes(props.initialValue!)) {\n setCustomValue(props.initialValue!.toString());\n } else {\n setValue(props.initialValue);\n }\n }, [props.initialValue, open]);\n\n const onClick = (val: number) => {\n setValue(val);\n setCustomValue(\"\");\n setError(undefined);\n };\n\n const onValueChange = (val: string) => {\n if (!val) {\n setCustomValue(val);\n return;\n }\n\n const d = new Decimal(val);\n setValue(undefined);\n if (d.gt(3)) {\n setCustomValue(\"3\");\n setError(t(\"orderEntry.slippage.error.exceed\"));\n } else {\n setCustomValue(val);\n setError(undefined);\n }\n };\n\n const toolTipButton = props.isMobile ? (\n <button\n onClick={() => {\n // setOpen(true)\n modal.alert({\n title: t(\"common.tips\"),\n message: <Text size=\"2xs\">{t(\"orderEntry.slippage.tips\")}</Text>,\n });\n }}\n >\n <ExclamationFillIcon className=\"oui-text-base-contrast-54\" size={16} />\n </button>\n ) : (\n <Tooltip\n // @ts-ignore\n content={\n <Text intensity={80} size=\"2xs\">\n {t(\"orderEntry.slippage.tips\")}\n </Text>\n }\n className=\"oui-w-[260px] oui-bg-base-6\"\n arrow={{ className: \"oui-fill-base-6\" }}\n >\n <TooltipTrigger>\n <ExclamationFillIcon className=\"oui-text-base-contrast-54\" size={16} />\n </TooltipTrigger>\n </Tooltip>\n );\n\n return (\n <div className=\"oui-text-2xs\">\n <Flex mb={2} gapX={1}>\n <Text size=\"xs\">{t(\"orderEntry.slippage\")}</Text>\n {toolTipButton}\n </Flex>\n <Flex gapX={2}>\n {options.map((item) => {\n const isActive = value === item;\n return (\n <SlippageItem\n key={item}\n value={item}\n isActive={isActive}\n onClick={() => {\n onClick(item);\n }}\n />\n );\n })}\n\n <Input\n suffix=\"%\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(2),\n ]}\n value={customValue}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-rounded-md oui-bg-base-6\",\n \"oui-h-[40px] oui-w-[74px]\",\n ),\n input: \"oui-text-base-contrast\",\n additional: \"oui-pl-1\",\n }}\n />\n </Flex>\n {!!error && (\n <Box mt={5} className=\"-oui-mb-5\">\n <Text size=\"2xs\" color=\"danger\">\n {error}\n </Text>\n </Box>\n )}\n </div>\n );\n});\n\ntype SlippageItemProps = {\n value: number;\n isActive: boolean;\n onClick: () => void;\n};\n\nconst SlippageItem: FC<SlippageItemProps> = ({ value, isActive, onClick }) => {\n return (\n <Flex\n intensity={600}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"md\"\n width={74}\n height={40}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive && \"oui-bg-primary-light\",\n )}\n onClick={onClick}\n >\n <Text size=\"sm\" intensity={80}>\n {value}%\n </Text>\n </Flex>\n );\n};\n","import { SlippageCell } from \"./components/slippageCell\";\n\nexport const SlippageUI = (props: {\n slippage: string;\n setSlippage: (slippage: string) => void;\n estSlippage: number | null;\n}) => {\n return <SlippageCell {...props} />;\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Flex,\n Tooltip,\n Text,\n InfoCircleIcon,\n AddCircleIcon,\n Button,\n modal,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { LTVRiskTooltipWidget } from \"../LTVRiskTooltip\";\n\ntype AvailableProps = {\n canTrade: boolean;\n currentLtv: number;\n freeCollateral: number;\n quote?: string;\n};\n\nexport const Available = (props: AvailableProps) => {\n const { canTrade, currentLtv, quote, freeCollateral } = props;\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const showLTV = useMemo(() => {\n return (\n typeof currentLtv === \"number\" &&\n !Number.isNaN(currentLtv) &&\n currentLtv > 0\n );\n }, [currentLtv]);\n\n return (\n <Flex itemAlign={\"center\"} justify={\"between\"}>\n <Text size={\"2xs\"}>{t(\"common.available\")}</Text>\n <Flex itemAlign={\"center\"} justify={\"center\"} gap={1}>\n {showLTV && (\n <Tooltip\n className={\"oui-bg-base-6 oui-p-2\"}\n content={<LTVRiskTooltipWidget />}\n >\n <InfoCircleIcon\n className={\"oui-cursor-pointer oui-text-warning oui-opacity-80\"}\n />\n </Tooltip>\n )}\n <Text.numeral\n unit={quote}\n size={\"2xs\"}\n className={\"oui-text-base-contrast-80\"}\n unitClassName={\"oui-ml-1 oui-text-base-contrast-54\"}\n dp={2}\n padding={false}\n >\n {canTrade ? freeCollateral : 0}\n </Text.numeral>\n <Button\n variant=\"text\"\n size=\"xs\"\n color=\"secondary\"\n className=\"oui-p-0 hover:oui-text-base-contrast-80\"\n onClick={() => {\n // TODO: when we plan to move modal IDs to a public package, we need to use the ID from the public package\n const handleDomId = isMobile\n ? \"DepositAndWithdrawWithSheetId\"\n : \"DepositAndWithdrawWithDialogId\";\n modal.show(handleDomId, {\n activeTab: \"deposit\",\n });\n }}\n >\n <AddCircleIcon opacity={1} />\n </Button>\n </Flex>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn, Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { removeTrailingZeros } from \"@kodiak-finance/orderly-utils\";\nimport type { LTVTooltipScriptReturn } from \"./LTVRiskTooltip.script\";\n\nconst calculateLTVColor = (val: number): string => {\n if (val >= 0 && val < 50) {\n return \"oui-text-success\";\n } else if (val >= 50 && val < 80) {\n return \"oui-text-warning\";\n } else if (val >= 80) {\n return \"oui-text-danger\";\n } else {\n return \"\";\n }\n};\n\nexport const LTVRiskTooltipUI: React.FC<LTVTooltipScriptReturn> = (props) => {\n const { t } = useTranslation();\n const {\n ltv_threshold,\n negative_usdc_threshold,\n isThresholdLoading,\n holdingData = [],\n currentLtv,\n onConvert,\n } = props;\n return (\n <Flex gap={1} className=\"oui-w-72 oui-max-w-72\" direction=\"column\">\n <Flex width={\"100%\"} justify=\"between\" itemAlign=\"center\">\n <Text intensity={36} size=\"xs\">\n {t(\"common.assets\")}\n </Text>\n <Text intensity={36} size=\"xs\">\n {t(\"transfer.deposit.collateralContribution\")}\n </Text>\n </Flex>\n {holdingData.map((asset, index) => {\n return (\n <Flex\n key={`item-${index}`}\n width={\"100%\"}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Text intensity={80} size=\"xs\">\n {asset.token}\n </Text>\n <Text\n size=\"xs\"\n intensity={80}\n className={cn(\n Number(asset.collateralContribution) < 0 && \"oui-text-warning\",\n )}\n >\n {removeTrailingZeros(asset.collateralContribution)}\n </Text>\n </Flex>\n );\n })}\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify=\"between\" itemAlign=\"center\">\n <Text intensity={36} size=\"xs\">\n {t(\"transfer.LTV.currentLTV\")}\n </Text>\n <Text\n size=\"xs\"\n intensity={36}\n className={cn(\"oui-select-none\", calculateLTVColor(currentLtv))}\n >\n {currentLtv}%\n </Text>\n </Flex>\n <Text className=\"oui-py-2\" intensity={54} size=\"2xs\">\n {t(\"transfer.LTV.tooltip\", {\n threshold: isThresholdLoading ? \"-\" : ltv_threshold,\n usdcThreshold: isThresholdLoading ? \"-\" : negative_usdc_threshold,\n })}\n </Text>\n <Button\n fullWidth\n size={\"md\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={onConvert}\n >\n {t(\"transfer.convert.convertAssets\")}\n </Button>\n </Flex>\n );\n};\n","import { useCallback } from \"react\";\nimport {\n useComputedLTV,\n useHoldingStream,\n useIndexPricesStream,\n useQuery,\n useAppStore,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { account } from \"@kodiak-finance/orderly-perp\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\n\nconst useConvertThreshold = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n { errorRetryCount: 3 },\n );\n return {\n ltv_threshold: new Decimal(data?.ltv_threshold ?? 0).mul(100).toNumber(),\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n\nexport const useLTVTooltipScript = () => {\n const { data: holdingList = [], isLoading: isHoldingLoading } =\n useHoldingStream();\n\n const {\n ltv_threshold,\n negative_usdc_threshold,\n isLoading: isThresholdLoading,\n } = useConvertThreshold();\n\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n const { getIndexPrice } = useIndexPricesStream();\n\n const holdingData = holdingList.map((item) => {\n const tokenInfo = tokensInfo?.find(({ token }) => token === item.token);\n\n // Use extracted function for index price calculation\n const indexPrice = getIndexPrice(item.token);\n\n // Calculate collateral ratio for this token\n const collateralRatio = tokenInfo\n ? account.collateralRatio({\n baseWeight: tokenInfo.base_weight ?? 0,\n discountFactor: tokenInfo.discount_factor ?? 0,\n collateralQty: item.holding,\n collateralCap: tokenInfo?.user_max_qty ?? item.holding,\n indexPrice: indexPrice,\n })\n : zero;\n\n // Calculate collateral contribution for this token\n const collateralContribution = account.collateralContribution({\n collateralQty: item.holding,\n collateralCap: tokenInfo?.user_max_qty ?? item.holding,\n collateralRatio: collateralRatio.toNumber(),\n indexPrice: indexPrice,\n });\n\n return {\n ...item,\n collateralContribution: collateralContribution,\n };\n });\n\n const currentLtv = useComputedLTV();\n\n const onConvert = useCallback(async () => {\n return modal.show(\"ConvertDialogId\");\n }, []);\n\n return {\n holdingData,\n isHoldingLoading,\n ltv_threshold,\n negative_usdc_threshold,\n isThresholdLoading,\n currentLtv: currentLtv,\n onConvert: onConvert,\n };\n};\n\nexport type LTVTooltipScriptReturn = ReturnType<typeof useLTVTooltipScript>;\n","import React from \"react\";\nimport { useLTVTooltipScript } from \"./LTVRiskTooltip.script\";\nimport { LTVRiskTooltipUI } from \"./LTVRiskTooltip.ui\";\n\nexport const LTVRiskTooltipWidget: React.FC = () => {\n const state = useLTVTooltipScript();\n return <LTVRiskTooltipUI {...state} />;\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { i18n, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n BBOOrderType,\n API,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport { OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n Button,\n Checkbox,\n cn,\n Divider,\n Flex,\n Grid,\n registerSimpleDialog,\n Text,\n textVariants,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, getBBOType } from \"@kodiak-finance/orderly-utils\";\nimport { isBBOOrder } from \"../../utils\";\n\ntype OrderConfirmDialogProps = {\n order: OrderlyOrder;\n symbolInfo: API.SymbolExt;\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport const OrderConfirmDialog = (props: OrderConfirmDialogProps) => {\n const { symbolInfo, order, onConfirm, onCancel } = props;\n const { quote, quote_dp, base_dp } = symbolInfo;\n const { side, order_type, order_type_ext, level, symbol } = order;\n const { t } = useTranslation();\n const [{ rows: positions }] = usePositionStream(symbol);\n const position = positions?.[0];\n const positionQty = position?.position_qty;\n\n const [_, setNeedConfirm] = useLocalStorage(\"orderly_order_confirm\", 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\n const renderPrice = () => {\n if (\n order_type === OrderType.MARKET ||\n order_type === OrderType.STOP_MARKET\n ) {\n return <Text intensity={80}>{t(\"common.marketPrice\")}</Text>;\n }\n\n if (isBBOOrder({ order_type, order_type_ext })) {\n const bboType = getBBOType({\n type: order_type_ext!,\n side,\n level,\n });\n const label = {\n [BBOOrderType.COUNTERPARTY1]: t(\"orderEntry.bbo.counterparty1\"),\n [BBOOrderType.COUNTERPARTY5]: t(\"orderEntry.bbo.counterparty5\"),\n [BBOOrderType.QUEUE1]: t(\"orderEntry.bbo.queue1\"),\n [BBOOrderType.QUEUE5]: t(\"orderEntry.bbo.queue5\"),\n }[bboType!];\n\n return <Text intensity={80}>{label}</Text>;\n }\n\n return (\n <Text.numeral\n unit={quote}\n rule=\"price\"\n className=\"oui-text-base-contrast\"\n unitClassName=\"oui-text-base-contrast-36 oui-ml-1\"\n dp={quote_dp}\n padding={false}\n >\n {order.order_price}\n </Text.numeral>\n );\n };\n\n const renderTPSLPrice = ({\n price,\n isOrderPrice,\n isEnable,\n colorType,\n }: {\n price: string;\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.marketPrice\")}\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={quote_dp}\n padding={false}\n >\n {price}\n </Text.numeral>\n );\n };\n\n const renderTPSLQty = () => {\n if (!positionQty || !order.order_quantity) {\n return null;\n }\n let qty = new Decimal(order.order_quantity);\n if (order.position_type === PositionType.FULL) {\n qty = qty.plus(new Decimal(positionQty ?? 0));\n }\n return (\n <Flex justify={\"between\"}>\n <Text>\n {order.position_type === PositionType.FULL\n ? t(\"common.positionQty\")\n : t(\"common.orderQty\")}\n </Text>\n <Text.numeral\n rule={\"price\"}\n dp={base_dp}\n padding={false}\n className=\"oui-text-base-contrast\"\n >\n {qty.toNumber()}\n </Text.numeral>\n </Flex>\n );\n };\n\n const renderPriceAndTotal = () => {\n if (order_type === OrderType.TRAILING_STOP) {\n const { activated_price, callback_value, callback_rate } = order;\n\n const callbackView = callback_rate ? (\n <Flex justify={\"between\"}>\n <Text>{t(\"orderEntry.trailingRate\")}</Text>\n <Text className=\"oui-text-base-contrast\">{callback_rate}%</Text>\n </Flex>\n ) : (\n <OrderItem\n title={t(\"orderEntry.trailingValue\")}\n value={callback_value!}\n unit={quote}\n dp={quote_dp}\n />\n );\n return (\n <>\n {activated_price && (\n <OrderItem\n title={t(\"common.triggerPrice\")}\n value={activated_price!}\n unit={quote}\n dp={quote_dp}\n />\n )}\n {callbackView}\n </>\n );\n }\n\n return (\n <>\n <Flex justify={\"between\"}>\n <Text>{t(\"common.price\")}</Text>\n {renderPrice()}\n </Flex>\n <OrderItem\n title={t(\"common.estTotal\")}\n value={order.total}\n unit={quote}\n dp={quote_dp}\n />\n </>\n );\n };\n\n const header = (\n <Flex justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {order.symbol}\n </Text.formatted>\n <Flex justify={\"end\"} gapX={1}>\n <OrderTypeTag type={order_type} />\n {side === OrderSide.BUY ? (\n <Badge color={\"buy\"} size={\"sm\"}>\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge color={\"sell\"} size={\"sm\"}>\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n );\n\n const quantityItem = (\n <Flex justify={\"between\"}>\n <Text>{t(\"common.orderQty\")}</Text>\n <Text.numeral\n rule={\"price\"}\n dp={base_dp}\n padding={false}\n className=\"oui-text-base-contrast\"\n >\n {order.order_quantity}\n </Text.numeral>\n </Flex>\n );\n\n const triggerPriceItem = (order_type === OrderType.STOP_LIMIT ||\n (order_type === OrderType.STOP_MARKET && order.trigger_price)) && (\n <OrderItem\n title={t(\"common.trigger\")}\n value={order.trigger_price}\n unit={quote}\n dp={quote_dp}\n />\n );\n\n const tpslTriggerPrice = (order.tp_trigger_price ||\n order.sl_trigger_price) && (\n <>\n <Divider className=\"oui-my-4\" />\n <div\n className={textVariants({\n size: \"sm\",\n intensity: 54,\n className: \"oui-space-y-1 oui-w-full oui-flex oui-flex-col oui-gap-3\",\n })}\n >\n <Text className=\"oui-text-base-contrast\">{renderPositionType()}</Text>\n {renderTPSLQty()}\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 );\n\n const orderConfirmCheckbox = (\n <Flex gapX={1} pt={4} pb={5}>\n <Checkbox\n id=\"orderConfirm\"\n color={\"white\"}\n onCheckedChange={(checked) => {\n setNeedConfirm(!!!checked);\n }}\n />\n <label\n htmlFor=\"orderConfirm\"\n className={textVariants({\n size: \"xs\",\n intensity: 54,\n })}\n >\n {t(\"orderEntry.disableOrderConfirm\")}\n </label>\n </Flex>\n );\n\n const buttons = (\n <Grid cols={2} gapX={3}>\n <Button color={\"secondary\"} size={\"md\"} onClick={() => onCancel()}>\n {t(\"common.cancel\")}\n </Button>\n <Button size={\"md\"} onClick={() => onConfirm()}>\n {t(\"common.confirm\")}\n </Button>\n </Grid>\n );\n\n return (\n <>\n {header}\n <Divider className=\"oui-my-4\" />\n\n <div\n className={textVariants({\n size: \"sm\",\n intensity: 54,\n className: \"oui-space-y-1\",\n })}\n >\n {quantityItem}\n {triggerPriceItem}\n\n {renderPriceAndTotal()}\n </div>\n\n {tpslTriggerPrice}\n\n {orderConfirmCheckbox}\n\n {buttons}\n </>\n );\n};\n\ntype OrderItemProps = {\n title: ReactNode;\n value: string;\n unit: string;\n dp: number;\n};\n\nconst OrderItem: FC<OrderItemProps> = (props) => {\n const { title, value, unit, dp } = props;\n return (\n <Flex justify=\"between\">\n <Text>{title}</Text>\n <Text.numeral\n unit={unit}\n rule=\"price\"\n dp={dp}\n padding={false}\n className=\"oui-text-base-contrast\"\n unitClassName=\"oui-text-base-contrast-36 oui-ml-1\"\n >\n {value}\n </Text.numeral>\n </Flex>\n );\n};\n\nOrderConfirmDialog.displayName = \"OrderConfirmDialog\";\n\nconst OrderTypeTag = (props: { type: OrderType }) => {\n const { t } = useTranslation();\n const typeStr = useMemo(() => {\n switch (props.type) {\n case OrderType.LIMIT:\n return t(\"orderEntry.orderType.limit\");\n case OrderType.MARKET:\n return t(\"common.marketPrice\");\n case OrderType.STOP_LIMIT:\n return t(\"orderEntry.orderType.stopLimit\");\n case OrderType.STOP_MARKET:\n return t(\"orderEntry.orderType.stopMarket\");\n case OrderType.TRAILING_STOP:\n return t(\"orderEntry.orderType.trailingStop\");\n default:\n return \"\";\n }\n }, [props.type]);\n\n return (\n <Badge color={\"neutral\"} size={\"sm\"}>\n {typeStr}\n </Badge>\n );\n};\n\nconst Dialog = (\n props: Omit<OrderConfirmDialogProps, \"onCancel\" | \"onConfirm\"> & {\n close: () => void;\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n },\n) => {\n const { close, resolve, reject, ...rest } = props;\n\n return (\n <OrderConfirmDialog\n {...rest}\n onCancel={() => {\n reject();\n close();\n }}\n onConfirm={() => {\n resolve();\n close();\n }}\n />\n );\n};\n\nexport const orderConfirmDialogId = \"orderConfirm\";\n\nregisterSimpleDialog(orderConfirmDialogId, Dialog, {\n size: \"sm\",\n title: () => i18n.t(\"orderEntry.orderConfirm\"),\n});\n","import { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport {\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@kodiak-finance/orderly-types\";\n\nexport enum BBOStatus {\n ON = \"on\",\n OFF = \"off\",\n DISABLED = \"disabled\",\n}\n\n/**\n * if provide order_type, check order_type and order_type_ext, otherswise only check order_type_ext\n */\nexport function isBBOOrder(options: {\n order_type?: OrderType;\n order_type_ext?: OrderType;\n}) {\n const { order_type, order_type_ext } = options;\n\n const isBBO = [OrderType.ASK, OrderType.BID].includes(order_type_ext!);\n\n if (order_type) {\n return order_type === OrderType.LIMIT && isBBO;\n }\n\n return isBBO;\n}\n\nexport function getOrderTypeByBBO(value: BBOOrderType, size: OrderSide) {\n if (\n [BBOOrderType.COUNTERPARTY1, BBOOrderType.COUNTERPARTY5].includes(value)\n ) {\n return size === OrderSide.BUY ? OrderType.ASK : OrderType.BID;\n }\n\n if ([BBOOrderType.QUEUE1, BBOOrderType.QUEUE5].includes(value)) {\n return size === OrderSide.BUY ? OrderType.BID : OrderType.ASK;\n }\n}\n\nexport function getOrderLevelByBBO(value: BBOOrderType) {\n if ([BBOOrderType.COUNTERPARTY1, BBOOrderType.QUEUE1].includes(value)) {\n return OrderLevel.ONE;\n }\n\n if ([BBOOrderType.COUNTERPARTY5, BBOOrderType.QUEUE5].includes(value)) {\n return OrderLevel.FIVE;\n }\n}\n\nexport function getScaledPlaceOrderMessage(result: any) {\n const rows = result?.data?.rows || [];\n\n if (rows.length > 0) {\n const totalCount = rows.length;\n const successCount = rows.filter((row: any) => row.success).length;\n\n // fully successful\n if (successCount === totalCount) {\n return i18n.t(\"orderEntry.scaledOrder.fullySuccessful\", {\n total: totalCount,\n });\n }\n\n // all failed\n if (successCount === 0) {\n return i18n.t(\"orderEntry.scaledOrder.allFailed\");\n }\n\n // partially successful\n return i18n.t(\"orderEntry.scaledOrder.partiallySuccessful\", {\n successCount,\n total: totalCount,\n });\n }\n}\n\nexport const safeNumber = (val: number | string) => {\n return Number.isNaN(Number(val)) ? 0 : Number(val);\n};\n","import { FC, memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { SimpleDialog } from \"@kodiak-finance/orderly-ui\";\n\ntype MaxQtyConfirmProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n maxQty: string;\n onConfirm: () => void;\n base: string;\n};\n\nexport const MaxQtyConfirm: FC<MaxQtyConfirmProps> = memo((props) => {\n const { t } = useTranslation();\n return (\n <SimpleDialog\n open={props.open}\n title={t(\"orderEntry.orderConfirm\")}\n closable\n onOpenChange={props.onOpenChange}\n size=\"sm\"\n actions={{\n primary: {\n label: t(\"orderEntry.placeOrderNow\"),\n className: \"oui-text-sm oui-font-semibold oui-w-[100%] oui-h-8\",\n onClick: () => {\n props.onConfirm();\n return Promise.resolve();\n },\n },\n secondary: {\n label: t(\"common.cancel\"),\n className: \"oui-text-sm oui-font-semibold oui-w-[100%] oui-h-8\",\n onClick: () => {\n props.onOpenChange(false);\n return Promise.resolve();\n },\n },\n }}\n >\n <div className=\"oui-text-2xs lg:oui-text-sm\">\n {t(\"orderEntry.maxQty.reminder.content\", {\n maxQty: `${props.maxQty} ${props.base}`,\n })}\n </div>\n </SimpleDialog>\n );\n});\n","import { forwardRef, SVGProps, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Flex,\n Grid,\n DataTable,\n cn,\n Badge,\n TokenIcon,\n Tooltip,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n ScaledOrderConfirmScriptOptions,\n ScaledOrderConfirmScriptReturns,\n} from \"./scaledOrderConfirm.script\";\n\nexport type ScaledOrderConfirmProps = ScaledOrderConfirmScriptOptions &\n ScaledOrderConfirmScriptReturns & {\n close?: () => void;\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n };\n\nexport const ScaledOrderConfirm = (props: ScaledOrderConfirmProps) => {\n const { order, symbolInfo, dataSource, national, askAndBid, totalQuantity } =\n props;\n const { base, quote, base_dp, quote_dp } = symbolInfo;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.reject();\n props.close?.();\n };\n\n const onConfirm = () => {\n props.resolve();\n props.close?.();\n };\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 125,\n render: (value: string, record: any) => {\n return (\n <Flex gap={2}>\n <div\n className={cn(\n \"oui-h-[38px] oui-w-1 oui-shrink-0 oui-rounded-[1px]\",\n record.side === OrderSide.BUY\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign=\"start\">\n <Flex gapX={1}>\n <TokenIcon symbol={value} className=\"oui-size-3\" />\n <Text.formatted\n rule=\"symbol\"\n size=\"xs\"\n formatString=\"base-type\"\n >\n {value}\n </Text.formatted>\n </Flex>\n\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n </Flex>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.quantity\"),\n dataIndex: \"order_quantity\",\n width: 100,\n render: (value: string, record: any) => {\n return (\n <Text.numeral\n rule=\"price\"\n dp={base_dp}\n padding={false}\n color={record.side === OrderSide.BUY ? \"buy\" : \"sell\"}\n >\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.orderPrice\"),\n dataIndex: \"order_price\",\n width: 100,\n render: (value: string, record: any) => {\n // buy: limit_price_i >= ask0 , show warning.\n // sell: limit price <= bid0 , show warning.\n const showWarning = !!(record.side === OrderSide.BUY\n ? askAndBid?.[0] && Number(value) >= askAndBid?.[0]\n : askAndBid?.[1] && Number(value) <= askAndBid?.[1]);\n\n return (\n <Flex gapX={1}>\n <Text.numeral rule=\"price\" dp={quote_dp}>\n {value}\n </Text.numeral>\n\n {showWarning && (\n <Tooltip\n content={t(\n \"orderEntry.confirmScaledOrder.orderPrice.warning\",\n )}\n className=\"oui-w-[240px] oui-text-2xs oui-font-semibold oui-text-base-contrast-80\"\n >\n <TooltipIcon className=\"oui-text-warning-darken\" />\n </Tooltip>\n )}\n </Flex>\n );\n },\n },\n ];\n }, [t, symbolInfo, askAndBid, base_dp, quote_dp]);\n\n return (\n <div className=\"oui-font-semibold\">\n <DataTable\n classNames={{\n root: cn(\n \"oui-bg-base-7\",\n \"oui-rounded-lg\",\n // need to set overflow hidden because table header will avoid the border radius\n \"oui-overflow-hidden\",\n // \"oui-text-2xs lg:oui-text-xs\",\n // if orders is greater than 6, set the height to 320px to show scroll bar\n order.orders?.length >= 6 && \"oui-h-[320px]\",\n ),\n // set the min height of the table to show 2 rows\n scroll: \"!oui-min-h-[130px]\",\n }}\n dataSource={dataSource}\n columns={columns}\n bordered\n onRow={() => {\n return {\n className: cn(\"oui-h-[50px]\"),\n };\n }}\n />\n <div className=\"oui-mb-5 oui-mt-4 oui-text-2xs\">\n <Flex justify=\"between\">\n <Text>{t(\"orderEntry.totalOrders\")}</Text>\n <Text intensity={80}>{order.orders?.length}</Text>\n </Flex>\n\n <Flex justify=\"between\" mt={2}>\n <Text>{t(\"orderEntry.totalQuantity\")}</Text>\n <Text.numeral\n rule=\"price\"\n unit={base}\n dp={base_dp}\n padding={false}\n intensity={80}\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n >\n {totalQuantity}\n </Text.numeral>\n </Flex>\n\n <Flex justify=\"between\" mt={2}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.numeral\n rule=\"price\"\n unit={quote}\n dp={quote_dp}\n padding={false}\n intensity={80}\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n >\n {national}\n </Text.numeral>\n </Flex>\n </div>\n\n <Grid cols={2} gapX={3}>\n <Button color={\"secondary\"} size={\"md\"} onClick={onCancel}>\n {t(\"common.cancel\")}\n </Button>\n <Button size={\"md\"} onClick={onConfirm}>\n {t(\"common.confirm\")}\n </Button>\n </Grid>\n </div>\n );\n};\n\nexport const TooltipIcon = forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n (props, ref) => {\n return (\n <svg\n width=\"12\"\n height=\"13\"\n viewBox=\"0 0 12 13\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...props}\n >\n <path d=\"M5.99951 1.50708C3.23811 1.50708 0.999512 3.74558 0.999512 6.50708C0.999512 9.26858 3.23811 11.5071 5.99951 11.5071C8.76091 11.5071 10.9995 9.26858 10.9995 6.50708C10.9995 3.74558 8.76091 1.50708 5.99951 1.50708ZM5.99951 4.00708C6.27566 4.00708 6.49951 4.23108 6.49951 4.50708C6.49951 4.78308 6.27566 5.00708 5.99951 5.00708C5.72336 5.00708 5.49951 4.78308 5.49951 4.50708C5.49951 4.23108 5.72336 4.00708 5.99951 4.00708ZM5.99951 5.50708C6.27566 5.50708 6.49951 5.73108 6.49951 6.00708V8.50708C6.49951 8.78308 6.27566 9.00708 5.99951 9.00708C5.72336 9.00708 5.49951 8.78308 5.49951 8.50708V6.00708C5.49951 5.73108 5.72336 5.50708 5.99951 5.50708Z\" />\n </svg>\n );\n },\n);\n","import { useMemo } from \"react\";\nimport { API, OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\nimport { useAskAndBid } from \"../../../hooks/useAskAndBid\";\n\nexport type ScaledOrderConfirmScriptOptions = {\n order: OrderlyOrder & {\n orders: OrderlyOrder[];\n };\n symbolInfo: API.SymbolExt;\n};\n\nexport type ScaledOrderConfirmScriptReturns = ReturnType<\n typeof useScaledOrderConfirmScript\n>;\n\nexport function useScaledOrderConfirmScript(\n options: ScaledOrderConfirmScriptOptions,\n) {\n const { order, symbolInfo } = options;\n const orders = order.orders;\n\n const askAndBid = useAskAndBid();\n\n const national = useMemo(() => {\n const national = orders.reduce((acc, order) => {\n return acc.add(new Decimal(order.order_price).mul(order.order_quantity));\n }, zero);\n\n return national.toNumber();\n }, [orders]);\n\n const totalQuantity = useMemo(() => {\n const totalQuantity = orders.reduce((acc, order) => {\n return acc.add(new Decimal(order.order_quantity));\n }, zero);\n\n return totalQuantity.toString();\n }, [orders, symbolInfo.base_dp]);\n\n return { dataSource: orders, national, askAndBid, totalQuantity };\n}\n","import { useEffect, useState } from \"react\";\nimport { useDebouncedCallback, useEventEmitter } from \"@kodiak-finance/orderly-hooks\";\n\nexport function useAskAndBid() {\n const ee = useEventEmitter();\n\n const [askAndBid, setAskAndBid] = useState<[number, number]>([0, 0]);\n\n const onOrderBookUpdate = useDebouncedCallback((data: any) => {\n const ask0 = data.asks?.[data.asks.length - 1]?.[0];\n const bid0 = data.bids?.[0]?.[0];\n setAskAndBid([ask0, bid0]);\n }, 200);\n\n useEffect(() => {\n ee.on(\"orderbook:update\", onOrderBookUpdate);\n return () => {\n ee.off(\"orderbook:update\", onOrderBookUpdate);\n onOrderBookUpdate.cancel();\n };\n }, [onOrderBookUpdate]);\n\n return askAndBid;\n}\n","import { FC } from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { useScaledOrderConfirmScript } from \"./scaledOrderConfirm.script\";\nimport {\n ScaledOrderConfirm,\n ScaledOrderConfirmProps,\n} from \"./scaledOrderConfirm.ui\";\n\nexport type ScaledOrderConfirmWidgetProps = ScaledOrderConfirmProps;\n\nexport const ScaledOrderConfirmWidget: FC<ScaledOrderConfirmWidgetProps> = (\n props,\n) => {\n const state = useScaledOrderConfirmScript(props);\n\n return <ScaledOrderConfirm {...props} {...state} />;\n};\n\nexport const scaledOrderConfirmDialogId = \"scaledOrderConfirm\";\n\nregisterSimpleDialog(scaledOrderConfirmDialogId, ScaledOrderConfirmWidget, {\n size: \"md\",\n title: () => i18n.t(\"orderEntry.confirmScaledOrder\"),\n contentProps: {\n // className: \"oui-p-0\",\n },\n});\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderlyOrder, OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Button, cn } from \"@kodiak-finance/orderly-ui\";\nimport { OrderTypeSelect } from \"../orderTypeSelect\";\nimport { LeverageBadge } from \"./LeverageBadge\";\n\ntype OrderEntryHeaderProps = {\n symbol: string;\n side: OrderSide;\n canTrade: boolean;\n order_type: OrderType;\n setOrderValue: (key: keyof OrderlyOrder, value: any) => void;\n symbolLeverage?: number;\n};\n\nexport function OrderEntryHeader(props: OrderEntryHeaderProps) {\n const { canTrade, side, order_type, setOrderValue } = props;\n const { t } = useTranslation();\n\n return (\n <>\n <div\n className={cn(\n \"oui-grid oui-w-full oui-flex-1 oui-gap-x-2 lg:oui-flex lg:oui-gap-x-[6px]\",\n \"oui-grid-cols-2\",\n )}\n >\n <Button\n onClick={() => {\n props.setOrderValue(\"side\", OrderSide.BUY);\n }}\n size={\"md\"}\n fullWidth\n data-type={OrderSide.BUY}\n className={cn(\n side === OrderSide.BUY && canTrade\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 props.setOrderValue(\"side\", OrderSide.SELL);\n }}\n data-type={OrderSide.SELL}\n fullWidth\n size={\"md\"}\n className={cn(\n side === OrderSide.SELL && props.canTrade\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 </div>\n <div\n className={cn(\n \"oui-grid oui-gap-x-2 lg:oui-flex lg:oui-gap-x-[6px]\",\n \"oui-grid-cols-2\",\n )}\n >\n <div className=\"oui-w-full\">\n <OrderTypeSelect\n type={order_type!}\n side={side}\n canTrade={canTrade}\n onChange={(type) => {\n setOrderValue(\"order_type\", type);\n }}\n />\n </div>\n <div className=\"oui-w-full\">\n <LeverageBadge\n symbol={props.symbol}\n side={props.side}\n symbolLeverage={props.symbolLeverage}\n />\n </div>\n </div>\n </>\n );\n}\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Select, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport const OrderTypeSelect = (props: {\n type: OrderType;\n onChange: (type: OrderType) => void;\n side: OrderSide;\n canTrade: boolean;\n}) => {\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"orderEntry.orderType.limitOrder\"), value: OrderType.LIMIT },\n { label: t(\"orderEntry.orderType.marketOrder\"), value: OrderType.MARKET },\n {\n label: t(\"orderEntry.orderType.stopLimit\"),\n value: OrderType.STOP_LIMIT,\n },\n {\n label: t(\"orderEntry.orderType.stopMarket\"),\n value: OrderType.STOP_MARKET,\n },\n {\n label: t(\"orderEntry.orderType.scaledOrder\"),\n value: OrderType.SCALED,\n },\n {\n label: t(\"orderEntry.orderType.trailingStop\"),\n value: OrderType.TRAILING_STOP,\n },\n ];\n }, [t]);\n\n const displayLabelMap = useMemo(() => {\n return {\n [OrderType.LIMIT]: t(\"orderEntry.orderType.limit\"),\n [OrderType.MARKET]: t(\"common.marketPrice\"),\n [OrderType.STOP_LIMIT]: t(\"orderEntry.orderType.stopLimit\"),\n [OrderType.STOP_MARKET]: t(\"orderEntry.orderType.stopMarket\"),\n [OrderType.SCALED]: t(\"orderEntry.orderType.scaledOrder\"),\n [OrderType.TRAILING_STOP]: t(\"orderEntry.orderType.trailingStop\"),\n };\n }, [t]);\n\n return (\n <Select.options\n testid=\"oui-testid-orderEntry-orderType-button\"\n currentValue={props.type}\n value={props.type}\n options={options}\n onValueChange={props.onChange}\n contentProps={{\n className: \"oui-bg-base-8\",\n }}\n classNames={{\n trigger: \"oui-bg-base-6 oui-border-line\",\n }}\n valueFormatter={(value, option) => {\n const item = options.find((o) => o.value === value);\n if (!item) {\n return <Text size={\"xs\"}>{option.placeholder}</Text>;\n }\n\n const label = displayLabelMap[value as keyof typeof displayLabelMap];\n\n return (\n <Text\n size={\"xs\"}\n color={\n props.canTrade\n ? props.side === OrderSide.BUY\n ? \"buy\"\n : \"sell\"\n : undefined\n }\n >\n {label}\n </Text>\n );\n }}\n size={\"md\"}\n />\n );\n};\n","import { useSymbolLeverage } from \"@kodiak-finance/orderly-hooks\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { cn, Flex, modal, Text, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport {\n SymbolLeverageDialogId,\n SymbolLeverageSheetId,\n} from \"@kodiak-finance/orderly-ui-leverage\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\ntype LeverageBadgeProps = {\n symbol: string;\n side: OrderSide;\n symbolLeverage?: number;\n};\n\nexport const LeverageBadge = (props: LeverageBadgeProps) => {\n const { symbol, side, symbolLeverage } = props;\n const { isMobile } = useScreen();\n const { maxLeverage } = useSymbolLeverage(symbol);\n\n const curLeverage = symbolLeverage || maxLeverage;\n\n const showModal = () => {\n const modalId = isMobile ? SymbolLeverageSheetId : SymbolLeverageDialogId;\n modal.show(modalId, {\n symbol,\n side,\n curLeverage,\n });\n };\n\n return (\n <Flex\n justify=\"center\"\n itemAlign=\"center\"\n gapX={1}\n className={cn(\n \"oui-h-8\",\n \"oui-rounded oui-border oui-border-line oui-bg-base-6\",\n \"oui-cursor-pointer oui-select-none oui-text-xs oui-font-semibold oui-text-base-contrast-54\",\n )}\n onClick={showModal}\n >\n <Text>Cross</Text>\n <Text.numeral dp={0} rm={Decimal.ROUND_DOWN} unit=\"X\">\n {curLeverage}\n </Text.numeral>\n </Flex>\n );\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { OrderEntryContext, OrderEntryContextState } from \"./orderEntryContext\";\n\nexport const OrderEntryProvider: FC<\n PropsWithChildren<OrderEntryContextState>\n> = (props) => {\n const {\n errorMsgVisible,\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n setOrderValues,\n currentFocusInput,\n errors,\n priceInputRef,\n priceInputContainerRef,\n triggerPriceInputRef,\n activatedPriceInputRef,\n lastQuantityInputType,\n leverage,\n } = props;\n\n const memoizedValue = useMemo<OrderEntryContextState>(() => {\n return {\n errorMsgVisible,\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n setOrderValues,\n currentFocusInput,\n errors,\n // refs\n priceInputRef,\n priceInputContainerRef,\n triggerPriceInputRef,\n activatedPriceInputRef,\n lastQuantityInputType,\n leverage,\n };\n }, [\n errorMsgVisible,\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n setOrderValues,\n currentFocusInput,\n errors,\n\n priceInputRef,\n priceInputContainerRef,\n triggerPriceInputRef,\n activatedPriceInputRef,\n lastQuantityInputType,\n leverage,\n ]);\n\n return (\n <OrderEntryContext.Provider value={memoizedValue}>\n {props.children}\n </OrderEntryContext.Provider>\n );\n};\n","import {\n createContext,\n FocusEventHandler,\n useContext,\n RefObject,\n MutableRefObject,\n} from \"react\";\nimport { OrderValidationResult } from \"@kodiak-finance/orderly-hooks\";\nimport { API, OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { InputType } from \"../types\";\n\nexport type OrderEntryContextState = {\n errors: OrderValidationResult | null;\n errorMsgVisible: boolean;\n symbolInfo: API.SymbolExt;\n onFocus: (type: InputType) => FocusEventHandler;\n onBlur: (type: InputType) => FocusEventHandler;\n getErrorMsg: (\n key: keyof OrderValidationResult,\n customValue?: string,\n ) => string;\n setOrderValue: (key: keyof OrderlyOrder, value: any) => void;\n setOrderValues: (values: Partial<OrderlyOrder>) => void;\n currentFocusInput: InputType;\n // refs\n priceInputRef: RefObject<HTMLInputElement>;\n priceInputContainerRef: RefObject<HTMLDivElement>;\n triggerPriceInputRef: RefObject<HTMLInputElement>;\n activatedPriceInputRef: RefObject<HTMLInputElement>;\n lastQuantityInputType: MutableRefObject<InputType>;\n leverage?: number;\n};\n\nexport const OrderEntryContext = createContext<OrderEntryContextState>(\n {} as OrderEntryContextState,\n);\n\nexport const useOrderEntryContext = () => {\n return useContext(OrderEntryContext);\n};\n","import { OrderlyOrder, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { PriceInput, PriceInputProps } from \"./limit/priceInput\";\nimport { QtyAndTotalInput } from \"./qtyAndTotal/qtyAndTotalInput\";\nimport { ScaledOrderInput } from \"./scaledOrder\";\nimport { TriggerPriceInput } from \"./stop/triggerPriceInput\";\nimport { TrailingStopInput } from \"./trailingStop\";\n\nexport type OrderInputProps = {\n values: Partial<OrderlyOrder>;\n} & Omit<PriceInputProps, \"order_price\" | \"order_type\">;\n\nexport function OrderInput(props: OrderInputProps) {\n const { values } = props;\n\n const type = values.order_type;\n\n if (type === OrderType.SCALED) {\n return <ScaledOrderInput values={values} />;\n }\n\n if (type === OrderType.TRAILING_STOP) {\n return <TrailingStopInput values={values} />;\n }\n\n const showTriggerPrice =\n type === OrderType.STOP_LIMIT || type === OrderType.STOP_MARKET;\n\n const showPrice = type === OrderType.LIMIT || type === OrderType.STOP_LIMIT;\n\n const triggerPriceInput = showTriggerPrice && (\n <TriggerPriceInput trigger_price={values.trigger_price} />\n );\n\n const priceInput = showPrice && (\n <PriceInput\n order_type={values.order_type!}\n order_price={values.order_price}\n bbo={props.bbo}\n fillMiddleValue={props.fillMiddleValue}\n priceInputContainerWidth={props.priceInputContainerWidth}\n />\n );\n\n return (\n <div className={\"oui-space-y-1\"}>\n {triggerPriceInput}\n {priceInput}\n <QtyAndTotalInput\n order_quantity={values.order_quantity}\n total={values.total}\n />\n </div>\n );\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { cn, inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { OrderEntryScriptReturn } from \"../../../orderEntry.script\";\nimport { InputType } from \"../../../types\";\nimport { BBOStatus } from \"../../../utils\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\nimport { BBOOrderTypeSelect } from \"./bboOrderTypeSelect\";\nimport { LimitPriceSuffix } from \"./limitPriceSuffix\";\n\nexport type PriceInputProps = {\n order_type: OrderType;\n order_price?: string;\n bbo: Pick<\n OrderEntryScriptReturn,\n \"bboStatus\" | \"bboType\" | \"onBBOChange\" | \"toggleBBO\"\n >;\n priceInputContainerWidth?: number;\n fillMiddleValue: OrderEntryScriptReturn[\"fillMiddleValue\"];\n};\n\n// TODO: memo component\nexport const PriceInput: FC<PriceInputProps> = (props) => {\n const { bbo } = props;\n const { t } = useTranslation();\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n priceInputRef,\n priceInputContainerRef,\n } = useOrderEntryContext();\n\n const { quote, quote_dp } = symbolInfo;\n\n const readOnly = bbo.bboStatus === BBOStatus.ON;\n\n const suffix =\n props.order_type === OrderType.LIMIT ? (\n <LimitPriceSuffix\n quote={quote}\n bbo={bbo}\n fillMiddleValue={props.fillMiddleValue}\n />\n ) : (\n quote\n );\n\n return (\n <div\n ref={priceInputContainerRef}\n className=\"oui-group oui-relative oui-w-full\"\n >\n <CustomInput\n id=\"order_price_input\"\n name=\"order_price_input\"\n label={t(\"common.price\")}\n suffix={suffix}\n value={props.order_price}\n onChange={(e) => {\n setOrderValue(\"order_price\", e);\n }}\n error={getErrorMsg(\"order_price\")}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.PRICE)}\n onBlur={onBlur(InputType.PRICE)}\n readonly={readOnly}\n inputMode=\"decimal\"\n ref={priceInputRef}\n classNames={{\n root: cn(readOnly && \"focus-within:oui-outline-transparent \"),\n input: cn(readOnly && \"oui-cursor-auto\"),\n }}\n />\n {bbo.bboStatus === BBOStatus.ON && (\n <div className={cn(\"oui-absolute oui-bottom-1 oui-left-0\")}>\n <BBOOrderTypeSelect\n value={bbo.bboType}\n onChange={bbo.onBBOChange}\n contentStyle={{\n width: props.priceInputContainerWidth,\n }}\n />\n </div>\n )}\n </div>\n );\n};\n","import { forwardRef, PropsWithChildren, ReactNode } from \"react\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n inputFormatter,\n Input,\n InputProps,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useOrderEntryContext } from \"../orderEntryContext\";\n\nexport type CustomInputProps = {\n label: string;\n suffix?: ReactNode;\n placeholder?: string;\n id: string;\n className?: string;\n name?: string;\n onChange?: (value: string) => void;\n value?: InputProps[\"value\"];\n autoFocus?: InputProps[\"autoFocus\"];\n error?: string;\n onFocus?: InputProps[\"onFocus\"];\n onBlur?: InputProps[\"onBlur\"];\n formatters?: InputProps[\"formatters\"];\n overrideFormatters?: InputProps[\"formatters\"];\n classNames?: InputProps[\"classNames\"];\n readonly?: boolean;\n prefix?: ReactNode;\n inputMode?: InputProps[\"inputMode\"];\n};\n\nexport const CustomInput = forwardRef<HTMLInputElement, CustomInputProps>(\n (props, ref) => {\n const { placeholder = \"0\" } = props;\n const { errorMsgVisible } = useOrderEntryContext();\n\n return (\n <Input.tooltip\n ref={ref}\n tooltip={errorMsgVisible ? props.error : undefined}\n autoComplete={\"off\"}\n autoFocus={props.autoFocus}\n size={\"lg\"}\n placeholder={props.readonly ? \"\" : placeholder}\n id={props.id}\n name={props.name}\n color={props.error ? \"danger\" : undefined}\n inputMode={props.inputMode || \"decimal\"}\n prefix={\n props.prefix || (\n <InputLabel id={props.id} className={props.classNames?.prefix}>\n {props.label}\n </InputLabel>\n )\n }\n suffix={props.suffix}\n value={props.readonly ? \"\" : props.value || \"\"}\n // onChange={props.onChange}\n onValueChange={props.onChange}\n onFocus={(event) => {\n props.onFocus?.(event);\n }}\n onBlur={(event) => {\n props.onBlur?.(event);\n }}\n formatters={\n props.overrideFormatters || [\n ...(props.formatters ?? EMPTY_LIST),\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]\n }\n classNames={{\n root: cn(\n \"orderly-order-entry oui-relative oui-h-[54px] oui-rounded oui-border oui-border-solid oui-border-line oui-px-2 oui-py-1 group-first:oui-rounded-t-xl group-last:oui-rounded-b-xl\",\n props.className,\n props.classNames?.root,\n ),\n input: cn(\"oui-mb-1 oui-mt-5 oui-h-5\", props?.classNames?.input),\n // prefix: cn(props.classNames?.prefix),\n suffix: cn(\n \"oui-absolute oui-right-0 oui-top-0 oui-justify-start oui-py-2 oui-text-2xs oui-text-base-contrast-36\",\n props.classNames?.suffix,\n ),\n }}\n readOnly={props.readonly}\n />\n );\n },\n);\n\nCustomInput.displayName = \"CustomInput\";\n\nconst InputLabel = (\n props: PropsWithChildren<{ id: string; className?: string }>,\n) => {\n return (\n <label\n htmlFor={props.id}\n className={cn(\n \"oui-absolute oui-left-2 oui-top-[7px] oui-text-2xs oui-text-base-contrast-36\",\n props.className,\n )}\n >\n {props.children}\n </label>\n );\n};\n","import { CSSProperties, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { BBOOrderType } from \"@kodiak-finance/orderly-types\";\nimport { Box, Select, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport const BBOOrderTypeSelect = (props: {\n value?: BBOOrderType;\n onChange: (value: BBOOrderType) => void;\n contentStyle?: CSSProperties;\n}) => {\n const { t } = useTranslation();\n\n const options = useMemo(\n () => [\n {\n label: t(\"orderEntry.bbo.counterparty1\"),\n value: BBOOrderType.COUNTERPARTY1,\n },\n {\n label: t(\"orderEntry.bbo.counterparty5\"),\n value: BBOOrderType.COUNTERPARTY5,\n },\n {\n label: t(\"orderEntry.bbo.queue1\"),\n value: BBOOrderType.QUEUE1,\n },\n {\n label: t(\"orderEntry.bbo.queue5\"),\n value: BBOOrderType.QUEUE5,\n },\n ],\n [],\n );\n\n return (\n <Select.options\n testid=\"oui-testid-orderEntry-bbo-orderType-button\"\n currentValue={props.value}\n value={props.value}\n options={options}\n onValueChange={props.onChange}\n contentProps={{\n className: \"oui-bg-base-8 oui-w-full\",\n style: props.contentStyle,\n }}\n size={\"sm\"}\n classNames={{\n trigger: \"oui-border-none oui-bg-transparent\",\n }}\n valueFormatter={(value, option) => {\n const item = options.find((item) => item.value === value);\n\n return (\n <Box>\n <Text size=\"sm\">{item?.label}</Text>\n </Box>\n );\n }}\n />\n );\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, cn, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { OrderEntryScriptReturn } from \"../../../orderEntry.script\";\nimport { BBOStatus } from \"../../../utils\";\n\ntype LimitPriceSuffixProps = {\n quote: string;\n bbo: Pick<\n OrderEntryScriptReturn,\n \"bboStatus\" | \"bboType\" | \"onBBOChange\" | \"toggleBBO\"\n >;\n fillMiddleValue: OrderEntryScriptReturn[\"fillMiddleValue\"];\n};\n\nexport const LimitPriceSuffix = (props: LimitPriceSuffixProps) => {\n const { quote, bbo, fillMiddleValue } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"end\"\n className={cn(\"oui-order-entry-limit-price-input-suffix\", \"oui-text-2xs\")}\n >\n {quote}\n <Flex justify={\"end\"} itemAlign=\"center\" gap={2}>\n <Flex\n px={3}\n height={20}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"base\"\n className={cn(\n \"oui-mt-[2px] oui-cursor-pointer oui-select-none oui-border\",\n bbo.bboStatus === BBOStatus.ON\n ? \"oui-border-primary\"\n : \"oui-border-line-12\",\n bbo.bboStatus === BBOStatus.DISABLED && \"oui-cursor-not-allowed\",\n )}\n onClick={() => {\n if (bbo.bboStatus === BBOStatus.DISABLED) {\n modal.dialog({\n title: t(\"common.tips\"),\n size: \"xs\",\n content: (\n <Text intensity={54}>\n {t(\"orderEntry.bbo.disabled.tips\")}\n </Text>\n ),\n });\n } else {\n bbo.toggleBBO();\n }\n }}\n >\n <Text\n className={cn(\n bbo.bboStatus === BBOStatus.ON && \"oui-text-primary\",\n bbo.bboStatus === BBOStatus.OFF && \"oui-text-base-contrast-54\",\n bbo.bboStatus === BBOStatus.DISABLED &&\n \"oui-text-base-contrast-20\",\n )}\n >\n {t(\"orderEntry.bbo\")}\n </Text>\n </Flex>\n <Text\n className={cn(\n \"oui-select-none\",\n \"oui-cursor-pointer oui-text-primary\",\n )}\n onClick={fillMiddleValue}\n >\n Mid\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, memo } from \"react\";\nimport { Grid } from \"@kodiak-finance/orderly-ui\";\nimport { QuantityInput } from \"./quantityInput\";\nimport { TotalInput } from \"./totalInput\";\n\ntype QtyAndTotalInputProps = {\n order_quantity?: string;\n total?: string;\n};\n\nexport const QtyAndTotalInput: FC<QtyAndTotalInputProps> = memo((props) => {\n return (\n <Grid cols={2} className=\"oui-group oui-space-x-1\">\n <QuantityInput order_quantity={props.order_quantity} />\n <TotalInput total={props.total} />\n </Grid>\n );\n});\n\nQtyAndTotalInput.displayName = \"QtyAndTotalInput\";\n","import { FC, memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype QuantityInputProps = {\n order_quantity?: string;\n};\n\nexport const QuantityInput: FC<QuantityInputProps> = memo((props) => {\n const { t } = useTranslation();\n\n const { symbolInfo, onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n const { base, base_dp } = symbolInfo;\n\n return (\n <CustomInput\n id=\"order_quantity_input\"\n name=\"order_quantity_input\"\n label={t(\"common.qty\")}\n suffix={base}\n error={getErrorMsg(\"order_quantity\")}\n value={props.order_quantity}\n onChange={(e) => {\n setOrderValue(\"order_quantity\", e);\n }}\n formatters={[inputFormatter.dpFormatter(base_dp)]}\n onFocus={onFocus(InputType.QUANTITY)}\n onBlur={onBlur(InputType.QUANTITY)}\n className=\"!oui-rounded-r\"\n classNames={{\n suffix: \"oui-justify-end\",\n }}\n />\n );\n});\n\nQuantityInput.displayName = \"QuantityInput\";\n","import { FC, memo, useEffect, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\nimport { OrderTotalType, TotalTypeSelect } from \"./totalTypeSelect\";\n\ntype TotalInputProps = {\n total?: string;\n};\n\n/**\n * order size = order size (notional) = quantity * price\n * Initial margin = order size / leverage = quantity * price / leverage\n * Order size = Initial margin * leverage = quantity * price\n */\nexport const TotalInput: FC<TotalInputProps> = memo((props) => {\n const { t } = useTranslation();\n const { total } = props;\n\n const [margin, setMargin] = useState(\"\");\n\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n leverage = 1,\n currentFocusInput,\n } = useOrderEntryContext();\n\n const { quote } = symbolInfo;\n\n const [totalType, setTotalType] = useLocalStorage<OrderTotalType>(\n \"orderly_order_total_type\",\n OrderTotalType.OrderSize,\n );\n\n useEffect(() => {\n if (total) {\n if (currentFocusInput !== InputType.MARGIN) {\n const margin = new Decimal(total).div(leverage).todp(2).toString();\n setMargin(margin);\n }\n } else {\n setMargin(\"\");\n }\n }, [total, leverage, currentFocusInput]);\n\n const onMarginChange = (val: string) => {\n const total = val ? new Decimal(val).mul(leverage).toString() : \"\";\n setOrderValue(\"total\", total);\n setMargin(val);\n };\n\n const prefix = <TotalTypeSelect value={totalType} onChange={setTotalType} />;\n\n if (totalType === OrderTotalType.InitialMargin) {\n return (\n <CustomInput\n id=\"order_margin_input\"\n name=\"order_margin_input\"\n label={`${t(\"orderEntry.initialMargin\")}≈`}\n prefix={prefix}\n suffix={quote}\n error={getErrorMsg(\"total\") ? \"initial margin error\" : \"\"}\n value={margin}\n onChange={onMarginChange}\n // national precision is 2\n formatters={[inputFormatter.dpFormatter(2)]}\n onFocus={onFocus(InputType.MARGIN)}\n onBlur={onBlur(InputType.MARGIN)}\n className=\"!oui-rounded-l\"\n classNames={{\n suffix: \"oui-justify-end\",\n }}\n />\n );\n }\n\n return (\n <CustomInput\n id=\"order_total_input\"\n name=\"order_total_input\"\n label={`${t(\"orderEntry.orderSize\")}≈`}\n prefix={prefix}\n suffix={quote}\n error={getErrorMsg(\"total\")}\n value={props.total}\n onChange={(val) => {\n setOrderValue(\"total\", val);\n }}\n className=\"!oui-rounded-l\"\n classNames={{\n suffix: \"oui-justify-end\",\n }}\n // national precision is 2\n formatters={[inputFormatter.dpFormatter(2)]}\n onFocus={onFocus(InputType.TOTAL)}\n onBlur={onBlur(InputType.TOTAL)}\n />\n );\n});\n\nTotalInput.displayName = \"TotalInput\";\n","import { FC, memo, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Select } from \"@kodiak-finance/orderly-ui\";\n\nexport enum OrderTotalType {\n OrderSize = \"orderSize\",\n InitialMargin = \"initialMargin\",\n}\n\ntype TotalTypeSelectProps = {\n value: OrderTotalType;\n onChange: (value: OrderTotalType) => void;\n};\n\nexport const TotalTypeSelect: FC<TotalTypeSelectProps> = memo((props) => {\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n {\n label: t(\"orderEntry.orderSize\"),\n value: OrderTotalType.OrderSize,\n },\n {\n label: t(\"orderEntry.initialMargin\"),\n value: OrderTotalType.InitialMargin,\n },\n ];\n }, [t]);\n\n return (\n <Select.options\n size={\"xs\"}\n value={props.value}\n valueFormatter={(value, option) => {\n const item = options.find((o) => o.value === value);\n return item?.label + \"≈\";\n }}\n classNames={{\n trigger: cn(\n \"oui-w-auto oui-border-none oui-bg-transparent\",\n \"oui-absolute oui-left-0 oui-top-[5px] oui-text-2xs oui-text-base-contrast-36\",\n ),\n }}\n onValueChange={props.onChange}\n options={options}\n />\n );\n});\n\nTotalTypeSelect.displayName = \"TotalTypeSelect\";\n","import { DistributionType, OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { cn, Grid } from \"@kodiak-finance/orderly-ui\";\nimport { QuantityDistributionInput } from \"./quantityDistributionInput\";\nimport { ScaledPriceInput } from \"./scaledPriceInput\";\nimport { ScaledQuantityInput } from \"./scaledQuantityInput\";\nimport { SkewInput } from \"./skewInput\";\nimport { TotalOrdersInput } from \"./totalOrdersInput\";\n\ntype ScaledOrderInputProps = {\n values: Partial<OrderlyOrder>;\n};\n\nexport const ScaledOrderInput = (props: ScaledOrderInputProps) => {\n const { values } = props;\n\n const showSkewInput = values.distribution_type === DistributionType.CUSTOM;\n\n return (\n <div className=\"oui-space-y-1\">\n <ScaledPriceInput\n start_price={values.start_price}\n end_price={values.end_price}\n />\n\n <Grid cols={2} className=\"oui-group oui-space-x-1\">\n <ScaledQuantityInput\n order_quantity={values.order_quantity}\n total={values.total}\n />\n <TotalOrdersInput total_orders={values.total_orders} />\n </Grid>\n\n <QuantityDistributionInput\n distribution_type={values.distribution_type}\n className={cn(!showSkewInput && \"oui-rounded-b-xl\")}\n />\n\n {showSkewInput && <SkewInput skew={values.skew} />}\n </div>\n );\n};\n","import { FC, memo, useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DistributionType } from \"@kodiak-finance/orderly-types\";\nimport { Box, Checkbox, cn, Flex, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\nexport type QuantityDistributionInputProps = {\n distribution_type?: DistributionType;\n className?: string;\n};\n\nexport const QuantityDistributionInput: FC<QuantityDistributionInputProps> =\n memo((props) => {\n const { t } = useTranslation();\n const { setOrderValue } = useOrderEntryContext();\n\n const showHint = () => {\n modal.dialog({\n title: t(\"common.tips\"),\n size: \"sm\",\n content: <QuantityDistributionHint value={props.distribution_type} />,\n // classNames: {\n // content: \"oui-bg-base-6\",\n // },\n });\n };\n\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"center\"\n p={2}\n r=\"base\"\n // gapY={1}\n width=\"100%\"\n intensity={600}\n className={cn(\n \"oui-t-rounded oui-text-base-contrast-36\",\n \"oui-border oui-border-solid oui-border-line\",\n props.className,\n )}\n >\n <Text\n size=\"2xs\"\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n onClick={showHint}\n >\n {t(\"orderEntry.quantityDistribution\")}\n </Text>\n <QuantityDistribution\n value={props.distribution_type}\n onValueChange={(value) => {\n setOrderValue(\"distribution_type\", value);\n }}\n />\n </Flex>\n );\n });\n\ntype QuantityDistributionHintProps = {\n value?: DistributionType;\n};\n\nconst QuantityDistributionHint: FC<QuantityDistributionHintProps> = (props) => {\n const { t } = useTranslation();\n const [type, setType] = useState(DistributionType.FLAT);\n\n useEffect(() => {\n setType(\n [\n DistributionType.FLAT,\n DistributionType.ASCENDING,\n DistributionType.DESCENDING,\n ].includes(props.value!)\n ? props.value!\n : DistributionType.FLAT,\n );\n }, [props.value]);\n\n const content = useMemo(() => {\n return [\n {\n type: DistributionType.FLAT,\n title: t(\"orderEntry.distributionType.flat\"),\n description: t(\"orderEntry.distributionType.flat.description\"),\n formula: `${t(\"orderEntry.skew\")} = 1`,\n quantity: <FlatQuantity />,\n },\n {\n type: DistributionType.ASCENDING,\n title: t(\"orderEntry.distributionType.ascending\"),\n description: t(\"orderEntry.distributionType.ascending.description\"),\n formula: `${t(\"orderEntry.skew\")} > 1`,\n quantity: <AscendingQuantity />,\n },\n {\n type: DistributionType.DESCENDING,\n title: t(\"orderEntry.distributionType.descending\"),\n description: t(\"orderEntry.distributionType.descending.description\"),\n formula: `0 < ${t(\"orderEntry.skew\")} < 1`,\n quantity: <DescendingQuantity />,\n },\n ];\n }, []);\n\n const currentContent = useMemo(() => {\n return content.find((item) => item.type === type);\n }, [content, type]);\n\n return (\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Text intensity={80}>\n {t(\"orderEntry.quantityDistribution.description\")}\n </Text>\n <Text>{t(\"orderEntry.quantityDistribution.formula\")}</Text>\n </Flex>\n <Flex intensity={600} p={1} r=\"base\" mt={3} itemAlign=\"start\">\n <Flex direction=\"column\" itemAlign=\"start\">\n {content.map((item) => (\n <Box\n key={item.title}\n intensity={type === item.type ? 500 : 600}\n width={78}\n p={2}\n className=\"oui-cursor-pointer oui-rounded-l\"\n onClick={() => {\n setType(item.type);\n }}\n >\n <Text>{item.title}</Text>\n </Box>\n ))}\n </Flex>\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n gapY={1}\n p={2}\n intensity={500}\n width=\"100%\"\n className={cn(\n \"oui-rounded-r\",\n type === DistributionType.FLAT && \"oui-rounded-bl\",\n type === DistributionType.ASCENDING && \"oui-rounded-l\",\n type === DistributionType.DESCENDING && \"oui-rounded-tl\",\n )}\n >\n <div>{currentContent?.formula}</div>\n <Text>{currentContent?.description}</Text>\n <Flex width=\"100%\" justify=\"center\">\n {currentContent?.quantity}\n </Flex>\n <Flex width=\"100%\" gapX={1} justify=\"center\">\n <Text className=\"oui-text-base-1\">{t(\"common.price\")}</Text>\n <PriceChart />\n </Flex>\n </Flex>\n </Flex>\n </div>\n );\n};\n\ntype QuantityDistributionProps = {\n value?: DistributionType;\n onValueChange: (value: DistributionType) => void;\n};\n\nconst QuantityDistribution: FC<QuantityDistributionProps> = (props) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n const onChange = (value: DistributionType) => (checked: boolean) => {\n onValueChange(value);\n };\n\n const distributionTypeMap = useMemo(() => {\n return {\n [DistributionType.FLAT]: t(\"orderEntry.distributionType.flat\"),\n [DistributionType.ASCENDING]: t(\n \"orderEntry.distributionType.ascending.abbr\",\n ),\n [DistributionType.DESCENDING]: t(\n \"orderEntry.distributionType.descending.abbr\",\n ),\n [DistributionType.CUSTOM]: t(\"orderEntry.distributionType.custom\"),\n };\n }, [t]);\n\n return (\n <Flex className={cn(\"oui-gap-x-[6px] lg:oui-gap-x-2\")} wrap=\"wrap\">\n {Object.values(DistributionType).map((type) => {\n return (\n <Flex itemAlign={\"center\"} key={type}>\n <Checkbox\n id={`distribution-type-${type}`}\n color={\"white\"}\n variant={\"radio\"}\n checked={value === type}\n onCheckedChange={onChange(type)}\n />\n <label\n htmlFor={`distribution-type-${type}`}\n className={cn(\n \"oui-text-2xs\",\n \"oui-ml-1\",\n \"oui-whitespace-nowrap oui-break-normal\",\n )}\n >\n {distributionTypeMap[type]}\n </label>\n </Flex>\n );\n })}\n </Flex>\n );\n};\n\nconst FlatQuantity = () => {\n return (\n <svg\n width=\"218\"\n height=\"40\"\n viewBox=\"0 0 218 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"18\"\n y=\"18\"\n width=\"181\"\n height=\"4\"\n fill=\"rgb(var(--oui-color-base-2))\"\n />\n <circle\n cx=\"15\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"62\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"109\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"156\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"203\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n </svg>\n );\n};\n\nconst AscendingQuantity = () => {\n return (\n <svg\n width=\"218\"\n height=\"40\"\n viewBox=\"0 0 218 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"18\"\n y=\"18\"\n width=\"181\"\n height=\"4\"\n fill=\"rgb(var(--oui-color-base-2))\"\n />\n <circle\n cx=\"15\"\n cy=\"20\"\n r=\"4.28571\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"1.42857\"\n />\n <circle\n cx=\"62\"\n cy=\"20\"\n r=\"5.14286\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"1.71429\"\n />\n <circle\n cx=\"109\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"156\"\n cy=\"20\"\n r=\"6.85714\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2.28571\"\n />\n <circle\n cx=\"203\"\n cy=\"20\"\n r=\"7.71429\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2.57143\"\n />\n </svg>\n );\n};\n\nconst DescendingQuantity = () => {\n return (\n <svg\n width=\"218\"\n height=\"40\"\n viewBox=\"0 0 218 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n width=\"181\"\n height=\"4\"\n transform=\"matrix(-1 0 0 1 200 18)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n />\n <circle\n cx=\"5\"\n cy=\"5\"\n r=\"4.28571\"\n transform=\"matrix(-1 0 0 1 208 15)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"1.42857\"\n />\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"5.14286\"\n transform=\"matrix(-1 0 0 1 162 14)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"1.71429\"\n />\n <circle\n cx=\"7\"\n cy=\"7\"\n r=\"6\"\n transform=\"matrix(-1 0 0 1 116 13)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6.85714\"\n transform=\"matrix(-1 0 0 1 70 12)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2.28571\"\n />\n <circle\n cx=\"9\"\n cy=\"9\"\n r=\"7.71429\"\n transform=\"matrix(-1 0 0 1 24 11)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2.57143\"\n />\n </svg>\n );\n};\n\nconst PriceChart = () => {\n return (\n <svg\n width=\"176\"\n height=\"8\"\n viewBox=\"0 0 176 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M175.354 4.35355C175.549 4.15829 175.549 3.84171 175.354 3.64645L172.172 0.464466C171.976 0.269204 171.66 0.269204 171.464 0.464466C171.269 0.659728 171.269 0.976311 171.464 1.17157L174.293 4L171.464 6.82843C171.269 7.02369 171.269 7.34027 171.464 7.53553C171.66 7.7308 171.976 7.7308 172.172 7.53553L175.354 4.35355ZM0 4V4.5H175V4V3.5H0V4Z\"\n fill=\"rgb(var(--oui-color-base-1))\"\n />\n </svg>\n );\n};\n","import { memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype ScaledPriceInputProps = {\n start_price?: string;\n end_price?: string;\n};\n\nexport const ScaledPriceInput = memo((props: ScaledPriceInputProps) => {\n const { t } = useTranslation();\n\n const { symbolInfo, onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n const { quote, quote_dp } = symbolInfo;\n\n return (\n <>\n <CustomInput\n label={t(\"orderEntry.startPrice\")}\n suffix={quote}\n id=\"order_start_price_input\"\n value={props.start_price}\n error={getErrorMsg(\"start_price\")}\n onChange={(e) => {\n setOrderValue(\"start_price\", e);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.START_PRICE)}\n onBlur={onBlur(InputType.START_PRICE)}\n inputMode=\"decimal\"\n classNames={{\n root: \"oui-rounded-t-xl\",\n }}\n />\n <CustomInput\n label={t(\"orderEntry.endPrice\")}\n suffix={quote}\n id=\"order_end_price_input\"\n value={props.end_price}\n error={getErrorMsg(\"end_price\")}\n onChange={(val) => {\n setOrderValue(\"end_price\", val);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.END_PRICE)}\n onBlur={onBlur(InputType.END_PRICE)}\n inputMode=\"decimal\"\n />\n </>\n );\n});\n\nScaledPriceInput.displayName = \"ScaledPriceInput\";\n","import { memo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\nimport { ScaledQuantityUnit } from \"./scaledQuantityUnit\";\n\ntype ScaledQuantityInputProps = {\n order_quantity?: string;\n total?: string;\n};\n\nexport const ScaledQuantityInput = memo((props: ScaledQuantityInputProps) => {\n const { t } = useTranslation();\n const { errors, symbolInfo, onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n const [quantityUnit, setQuantityUnit] = useLocalStorage<\"quote\" | \"base\">(\n \"orderly_order_quantity_unit\",\n \"quote\",\n );\n\n const { base, quote, base_dp, quote_dp } = symbolInfo;\n\n const isBase = quantityUnit === \"base\";\n const unit = isBase ? base : quote;\n\n const suffix = (\n <ScaledQuantityUnit\n base={base}\n quote={quote}\n value={unit}\n onValueChange={(value) => {\n setQuantityUnit(value === base ? \"base\" : \"quote\");\n }}\n />\n );\n\n if (isBase) {\n return (\n <CustomInput\n label={t(\"common.qty\")}\n suffix={suffix}\n id=\"order_quantity_input\"\n name=\"order_quantity_input\"\n className=\"!oui-rounded-r\"\n value={props.order_quantity}\n error={getErrorMsg(\n \"order_quantity\",\n `${errors?.order_quantity?.value} ${base}`,\n )}\n onChange={(val) => {\n setOrderValue(\"order_quantity\", val);\n }}\n formatters={[inputFormatter.dpFormatter(base_dp)]}\n onFocus={onFocus(InputType.QUANTITY)}\n onBlur={onBlur(InputType.QUANTITY)}\n inputMode=\"decimal\"\n />\n );\n }\n\n return (\n <CustomInput\n label={t(\"common.qty\")}\n suffix={suffix}\n id=\"order_total_input\"\n name=\"order_total_input\"\n className=\"!oui-rounded-r\"\n value={props.total}\n error={getErrorMsg(\"order_quantity\", `${errors?.total?.value} ${quote}`)}\n onChange={(val) => {\n setOrderValue(\"total\", val);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.TOTAL)}\n onBlur={onBlur(InputType.TOTAL)}\n inputMode=\"decimal\"\n />\n );\n});\n","import { FC, useMemo } from \"react\";\nimport { Select, Text, cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type QuantityUnitProps = {\n base: string;\n quote: string;\n value: string;\n onValueChange: (value: string) => void;\n};\n\nconst valueRenderer = (value: string) => {\n return (\n <Text size=\"2xs\" intensity={36}>\n {value}\n </Text>\n );\n};\n\nexport const ScaledQuantityUnit: FC<QuantityUnitProps> = (props) => {\n const { base, quote } = props;\n\n const options = useMemo(() => {\n return [{ name: quote }, { name: base }];\n }, [base, quote]);\n\n return (\n <Select.tokens\n variant=\"text\"\n size=\"xs\"\n iconSize=\"2xs\"\n tokens={options}\n classNames={{\n trigger: cn(\n \"oui-absolute oui-right-0 oui-top-1\",\n \"oui-w-full oui-justify-end\",\n ),\n }}\n value={props.value}\n onValueChange={props.onValueChange}\n valueFormatter={valueRenderer}\n contentProps={{\n align: \"end\",\n alignOffset: -1,\n sideOffset: -4,\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n};\n","import { memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype SkewInputProps = {\n skew?: string;\n};\n\nexport const SkewInput = memo((props: SkewInputProps) => {\n const { t } = useTranslation();\n\n const { onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n return (\n <CustomInput\n id=\"order_skew_input\"\n label={t(\"orderEntry.skew\")}\n value={props.skew}\n error={getErrorMsg(\"skew\")}\n onChange={(val) => {\n setOrderValue(\"skew\", val);\n }}\n onFocus={onFocus(InputType.SKEW)}\n onBlur={onBlur(InputType.SKEW)}\n inputMode=\"decimal\"\n overrideFormatters={[\n inputFormatter.rangeFormatter({ min: 0, max: 100, dp: 2 }),\n inputFormatter.dpFormatter(2),\n ]}\n classNames={{\n root: \"oui-rounded-b-xl\",\n }}\n />\n );\n});\n","import { memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype TotalOrdersInputProps = {\n total_orders?: string;\n};\n\nexport const TotalOrdersInput = memo((props: TotalOrdersInputProps) => {\n const { t } = useTranslation();\n const { onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n return (\n <CustomInput\n label={t(\"orderEntry.totalOrders\")}\n placeholder=\"2-20\"\n id=\"order_total_orders_input\"\n className={\"!oui-rounded-l\"}\n value={props.total_orders}\n error={getErrorMsg(\"total_orders\")}\n onChange={(val) => {\n setOrderValue(\"total_orders\", val);\n }}\n overrideFormatters={[\n // inputFormatter.rangeFormatter({ min: 2, max: 20 }),\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(0),\n ]}\n onFocus={onFocus(InputType.TOTAL_ORDERS)}\n onBlur={onBlur(InputType.TOTAL_ORDERS)}\n inputMode=\"numeric\"\n />\n );\n});\n","import { FC, memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype TriggerPriceInputProps = {\n trigger_price?: string;\n};\n\nexport const TriggerPriceInput: FC<TriggerPriceInputProps> = memo((props) => {\n const { t } = useTranslation();\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n triggerPriceInputRef,\n } = useOrderEntryContext();\n\n return (\n <div className=\"oui-group\">\n <div className=\"oui-group\">\n <CustomInput\n ref={triggerPriceInputRef}\n id=\"order_trigger_price_input\"\n name=\"order_trigger_price_input\"\n label={t(\"common.trigger\")}\n suffix={symbolInfo.quote}\n value={props.trigger_price}\n onChange={(e) => {\n setOrderValue(\"trigger_price\", e);\n }}\n error={getErrorMsg(\"trigger_price\")}\n formatters={[inputFormatter.dpFormatter(symbolInfo.quote_dp)]}\n onFocus={onFocus(InputType.TRIGGER_PRICE)}\n onBlur={onBlur(InputType.TRIGGER_PRICE)}\n inputMode=\"decimal\"\n />\n </div>\n </div>\n );\n});\n\nTriggerPriceInput.displayName = \"TriggerPriceInput\";\n","import { memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype ActivePriceInputProps = {\n activated_price?: string;\n};\n\nexport const ActivePriceInput = memo<ActivePriceInputProps>((props) => {\n const { t } = useTranslation();\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n activatedPriceInputRef,\n } = useOrderEntryContext();\n\n return (\n <div className=\"oui-group\">\n <CustomInput\n ref={activatedPriceInputRef}\n id=\"order_activated_price_input\"\n name=\"order_activated_price_input\"\n label={t(\"common.triggerPrice\")}\n placeholder={`0 (${t(\"common.optional\")})`}\n suffix={symbolInfo.quote}\n error={getErrorMsg(\"activated_price\")}\n value={props.activated_price}\n onChange={(val: string) => {\n setOrderValue(\"activated_price\", val);\n }}\n formatters={[inputFormatter.dpFormatter(symbolInfo.quote_dp)]}\n onFocus={onFocus(InputType.ACTIVATED_PRICE)}\n onBlur={onBlur(InputType.ACTIVATED_PRICE)}\n inputMode=\"decimal\"\n />\n </div>\n );\n});\n\nActivePriceInput.displayName = \"ActivePriceInput\";\n","import { FC, memo, useCallback, useRef } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { TrailingCallbackType } from \"@kodiak-finance/orderly-types\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\nimport { CallbackRatePercentages } from \"./callbackRatePercentages\";\nimport { TrailingCallbackSelect } from \"./trailingCallbackSelect\";\n\ntype TrailingCallbackInputProps = {\n callback_value?: string;\n callback_rate?: string;\n};\n\nexport const TrailingCallbackInput: FC<TrailingCallbackInputProps> = memo(\n (props) => {\n const { callback_value, callback_rate } = props;\n const { t } = useTranslation();\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n setOrderValues,\n } = useOrderEntryContext();\n const { quote, quote_dp } = symbolInfo;\n // const [open, setOpen] = useState(false);\n\n const lastCallbackValueRef = useRef<string>();\n const lastCallbackRateRef = useRef<string>();\n\n const [callbackType, setCallbackType] = useLocalStorage(\n \"orderly_order_trailing_callback_type\",\n TrailingCallbackType.VALUE,\n );\n\n const onCallbackTypeChange = useCallback(\n (type: TrailingCallbackType) => {\n setCallbackType(type);\n // when switch to callback rate, save the last callback value\n if (type === TrailingCallbackType.RATE) {\n lastCallbackValueRef.current = callback_value;\n setOrderValues({\n callback_value: \"\",\n callback_rate: lastCallbackRateRef.current,\n });\n // when switch to callback value, save the last callback rate\n } else {\n lastCallbackRateRef.current = callback_rate;\n setOrderValues({\n callback_value: lastCallbackValueRef.current,\n callback_rate: \"\",\n });\n }\n },\n [callback_value, callback_rate],\n );\n\n const suffix = (\n <TrailingCallbackSelect\n quote={quote}\n value={callbackType}\n onValueChange={onCallbackTypeChange}\n />\n );\n\n // don't need to convert trailing rate to estimated value\n // const estimatedValue = useMemo(() => {\n // if (callbackType === TrailingCallbackType.RATE) {\n // return callback_rate\n // }\n // }, [callback_rate, callbackType]);\n\n // const tooltipContent = estimatedValue\n // ? `≈ ${estimatedValue} ${quote}`\n // : undefined;\n\n // const openTooltip = useCallback(() => {\n // setOpen(true);\n // }, []);\n\n // const closeTooltip = useCallback(() => {\n // setOpen(false);\n // }, []);\n\n if (callbackType === TrailingCallbackType.RATE) {\n return (\n // <Tooltip\n // content={tooltipContent}\n // open={open && !!tooltipContent}\n // sideOffset={-25}\n // className=\"!oui-p-3\"\n // >\n <div className=\"oui-relative\">\n <CustomInput\n id=\"order_callback_rate_input\"\n name=\"order_callback_rate_input\"\n label={t(\"orderEntry.trailingRate\")}\n suffix={suffix}\n error={getErrorMsg(\"callback_rate\")}\n value={callback_rate}\n onChange={(val: string) => {\n setOrderValue(\"callback_rate\", val);\n }}\n formatters={[inputFormatter.dpFormatter(1)]}\n onFocus={(e) => {\n onFocus(InputType.CALLBACK_RATE)(e);\n // openTooltip();\n }}\n onBlur={(e) => {\n onBlur(InputType.CALLBACK_RATE)(e);\n // closeTooltip();\n }}\n inputMode=\"decimal\"\n classNames={{\n root: \"oui-h-[68px]\",\n input: \"oui-mb-5\",\n prefix: \"!oui-top-1\",\n }}\n />\n <CallbackRatePercentages\n className=\"oui-absolute oui-bottom-1 oui-left-2\"\n callback_rate={callback_rate}\n // onClick={openTooltip}\n />\n </div>\n // </Tooltip>\n );\n }\n\n return (\n <CustomInput\n id=\"order_callback_value_input\"\n name=\"order_callback_value_input\"\n label={t(\"orderEntry.trailingValue\")}\n suffix={suffix}\n error={getErrorMsg(\"callback_value\")}\n value={callback_value}\n onChange={(val: string) => {\n setOrderValue(\"callback_value\", val);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.CALLBACK_VALUE)}\n onBlur={onBlur(InputType.CALLBACK_VALUE)}\n inputMode=\"decimal\"\n classNames={{\n input: \"!oui-mb-[6px]\",\n prefix: \"!oui-top-1\",\n }}\n />\n );\n },\n);\n\nTrailingCallbackInput.displayName = \"TrailingCallbackInput\";\n","import { FC, memo } from \"react\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\nconst percentages = [1, 2, 3, 5];\n\ntype CallbackRatePercentagesProps = {\n className?: string;\n callback_rate?: string;\n onClick?: (value: string) => void;\n};\n\nexport const CallbackRatePercentages: FC<CallbackRatePercentagesProps> = memo(\n (props) => {\n const { setOrderValue } = useOrderEntryContext();\n\n return (\n <Flex gapX={2} className={props.className}>\n {percentages.map((item) => {\n const value = item.toString();\n const isActive = props.callback_rate === value;\n\n return (\n <Flex\n key={item}\n justify=\"center\"\n itemAlign=\"center\"\n width={46}\n height={18}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n \"oui-rounded oui-border\",\n isActive ? \"oui-border-base-contrast-36\" : \"oui-border-line-12\",\n )}\n onClick={() => {\n setOrderValue(\"callback_rate\", value);\n props.onClick?.(value);\n }}\n >\n <Text size=\"2xs\" intensity={isActive ? 80 : 36} weight=\"semibold\">\n {item}%\n </Text>\n </Flex>\n );\n })}\n </Flex>\n );\n },\n);\n\nCallbackRatePercentages.displayName = \"CallbackRatePercentages\";\n","import { FC, memo, useMemo } from \"react\";\nimport { TrailingCallbackType } from \"@kodiak-finance/orderly-types\";\nimport { Select, cn } from \"@kodiak-finance/orderly-ui\";\n\ntype TrailingCallbackSelectProps = {\n quote: string;\n value: string;\n onValueChange: (value: TrailingCallbackType) => void;\n};\n\nexport const TrailingCallbackSelect: FC<TrailingCallbackSelectProps> = memo(\n (props) => {\n const { quote } = props;\n\n const options = useMemo(() => {\n return [\n { label: quote, value: TrailingCallbackType.VALUE },\n { label: \"%\", value: TrailingCallbackType.RATE },\n ];\n }, [quote]);\n\n return (\n <Select.options\n variant=\"text\"\n size=\"xs\"\n options={options}\n classNames={{\n trigger: cn(\n \"oui-absolute oui-right-0 oui-top-1\",\n \"oui-w-[124px] oui-justify-end\",\n \"oui-text-base-contrast-36\",\n ),\n }}\n value={props.value}\n onValueChange={props.onValueChange}\n contentProps={{\n align: \"end\",\n alignOffset: -1,\n sideOffset: -4,\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n },\n);\n\nTrailingCallbackSelect.displayName = \"trailingCallbackSelect\";\n","import { OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { QtyAndTotalInput } from \"../qtyAndTotal/qtyAndTotalInput\";\nimport { ActivePriceInput } from \"./activePriceInput\";\nimport { TrailingCallbackInput } from \"./trailingCallbackInput\";\n\ntype TrailingStopInputProps = {\n values: Partial<OrderlyOrder>;\n};\n\nexport const TrailingStopInput = (props: TrailingStopInputProps) => {\n const { values } = props;\n\n return (\n <div className=\"oui-space-y-1\">\n <ActivePriceInput activated_price={values.activated_price} />\n <TrailingCallbackInput\n callback_value={values.callback_value}\n callback_rate={values.callback_rate}\n />\n <QtyAndTotalInput\n order_quantity={values.order_quantity}\n total={values.total}\n />\n </div>\n );\n};\n","import { memo, useEffect, useMemo, useState } from \"react\";\nimport { utils } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Slider, textVariants, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { InputType } from \"../../types\";\nimport { useOrderEntryContext } from \"../orderEntryContext\";\n\ntype QuantitySliderProps = {\n canTrade: boolean;\n side: OrderSide;\n order_quantity?: string;\n maxQty: number;\n};\nconst SLIDER_MIN = 0;\nconst SLIDER_MAX = 100;\n\nexport const QuantitySlider = memo((props: QuantitySliderProps) => {\n const { canTrade, side, order_quantity, maxQty } = props;\n\n const [sliderValue, setSliderValue] = useState<number>(0);\n\n const { setOrderValue, symbolInfo, lastQuantityInputType } =\n useOrderEntryContext();\n\n const { base_dp, base_tick } = symbolInfo;\n\n const { t } = useTranslation();\n\n const color = useMemo(\n () => (canTrade ? (side === OrderSide.BUY ? \"buy\" : \"sell\") : undefined),\n [side, canTrade],\n );\n\n const maxLabel = useMemo(() => {\n return side === OrderSide.BUY\n ? t(\"orderEntry.maxBuy\")\n : t(\"orderEntry.maxSell\");\n }, [side, t]);\n\n const onSliderValueChange = (value: number) => {\n lastQuantityInputType.current = InputType.QUANTITY_SLIDER;\n setSliderValue(value);\n };\n\n const sliderToQuantity = (value: number) => {\n const newQty = new Decimal(value)\n .div(SLIDER_MAX)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n setOrderValue(\"order_quantity\", utils.formatNumber(newQty, base_tick));\n };\n\n const onMax = () => {\n onSliderValueChange(SLIDER_MAX);\n // when previous slider value is max, quantity will not update by useEffect, so must set quantity manually to maxQty\n if (sliderValue === SLIDER_MAX) {\n sliderToQuantity(SLIDER_MAX);\n }\n };\n\n // update quantity when slider value and maxQty changes\n useEffect(() => {\n if (lastQuantityInputType.current === InputType.QUANTITY_SLIDER) {\n sliderToQuantity(sliderValue);\n }\n }, [sliderValue, maxQty]);\n\n useEffect(() => {\n const quantityToSlider = () => {\n if (order_quantity && Number(order_quantity) !== 0 && maxQty !== 0) {\n return new Decimal(Math.min(Number(order_quantity), maxQty))\n .div(maxQty)\n .mul(SLIDER_MAX)\n .todp(2, Decimal.ROUND_DOWN)\n .toNumber();\n }\n return 0;\n };\n\n // update slider value when last quantity input type is not quantity slider\n if (lastQuantityInputType.current !== InputType.QUANTITY_SLIDER) {\n setSliderValue(quantityToSlider());\n }\n }, [order_quantity, maxQty]);\n\n return (\n <div>\n <Slider\n disabled={maxQty === 0 || !canTrade}\n value={[sliderValue]}\n color={color}\n markCount={4}\n showTip\n onValueChange={(e) => {\n onSliderValueChange(e[0]);\n }}\n min={SLIDER_MIN}\n max={SLIDER_MAX}\n />\n <Flex justify={\"between\"} className=\"oui-pt-1 xl:oui-pt-2\">\n <Text.numeral\n size={\"2xs\"}\n color={color}\n dp={2}\n padding={false}\n suffix=\"%\"\n >\n {canTrade ? sliderValue : 0}\n </Text.numeral>\n <Flex>\n <button\n className={textVariants({\n size: \"2xs\",\n className: \"oui-mr-1\",\n })}\n onClick={onMax}\n data-testid=\"oui-testid-orderEntry-maxQty-value-button\"\n >\n {maxLabel}\n </button>\n <Text.numeral\n size={\"2xs\"}\n color={color}\n dp={base_dp}\n padding={false}\n data-testid=\"oui-testid-orderEntry-maxQty-value\"\n >\n {canTrade ? maxQty : 0}\n </Text.numeral>\n </Flex>\n </Flex>\n </div>\n );\n});\n\nQuantitySlider.displayName = \"QuantitySlider\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Switch } from \"@kodiak-finance/orderly-ui\";\n\nexport interface ReduceOnlySwitchProps {\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n className?: string;\n testId?: string;\n}\n\nexport const ReduceOnlySwitch: React.FC<ReduceOnlySwitchProps> = ({\n checked,\n onCheckedChange,\n className,\n testId = \"oui-testid-orderEntry-reduceOnly-switch\",\n}) => {\n const { t } = useTranslation();\n\n return (\n <Flex itemAlign={\"center\"} gapX={1} className={className}>\n <Switch\n data-testid={testId}\n className=\"oui-h-[14px]\"\n id={\"reduceOnly\"}\n checked={checked}\n onCheckedChange={onCheckedChange}\n />\n <label htmlFor={\"reduceOnly\"} className={\"oui-text-xs\"}>\n {t(\"orderEntry.reduceOnly\")}\n </label>\n </Flex>\n );\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport {\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 OrderlyOrder,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n Flex,\n Text,\n Input,\n inputFormatter,\n Switch,\n SettingFillIcon,\n useScreen,\n DotStatus,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Grid } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLPositionTypeWidget } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { useOrderEntryContext } from \"./orderEntryContext\";\nimport { PnlInputWidget } from \"./pnlInput/pnlInput.widget\";\nimport { usePnlInputContext } from \"./pnlInput/pnlInputContext\";\nimport { PnlInputProvider } from \"./pnlInput/pnlInputProvider\";\nimport { PNL_Values } from \"./pnlInput/useBuilder.script\";\nimport { ReduceOnlySwitch } from \"./reduceOnlySwitch\";\n\ntype OrderValueKeys = keyof OrderlyOrder;\n\ntype Est_Values = PNL_Values & {\n trigger_price?: string;\n};\n\ntype TPSL_Values = {\n tp: Est_Values;\n sl: Est_Values;\n position_type: PositionType;\n};\n\nexport const OrderTPSL = (props: {\n // onCancelTPSL: () => void;\n // onEnableTP_SL: () => void;\n switchState: boolean;\n onSwitchChanged: (state: boolean) => void;\n onChange: (key: OrderValueKeys, value: any) => void;\n values: TPSL_Values;\n orderType: OrderType;\n errors: OrderValidationResult | null;\n quote_dp: number | undefined;\n showTPSLAdvanced: () => void;\n setOrderValue: (key: string, value: any) => void;\n reduceOnlyChecked?: boolean;\n onReduceOnlyChange?: (checked: boolean) => void;\n}) => {\n const tpslFormRef = React.useRef<HTMLDivElement>(null);\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n useEffect(() => {\n if (\n props.orderType !== OrderType.LIMIT &&\n props.orderType !== OrderType.MARKET\n ) {\n props.onSwitchChanged(false);\n }\n }, [props.orderType]);\n\n if (\n props.orderType !== OrderType.LIMIT &&\n props.orderType !== OrderType.MARKET\n ) {\n return null;\n }\n\n const isSlPriceWarning =\n props.errors?.[\"sl_trigger_price\"]?.[\"type\"] ===\n ERROR_MSG_CODES.SL_PRICE_WARNING;\n\n return (\n <div>\n <Flex itemAlign={\"center\"} justify={\"between\"}>\n <Flex itemAlign={\"center\"} gapX={1}>\n <Switch\n id={\"order_entry_tpsl\"}\n className=\"oui-h-[14px]\"\n checked={props.switchState}\n disabled={\n props.orderType !== OrderType.LIMIT &&\n props.orderType !== OrderType.MARKET\n }\n onCheckedChange={(checked) => {\n props.onSwitchChanged(checked);\n }}\n />\n <label htmlFor={\"order_entry_tpsl\"} className={\"oui-text-xs\"}>\n {t(\"common.tpsl\")}\n </label>\n {/* <ExclamationFillIcon\n color=\"white\"\n // opacity={0.36}\n size={14}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-white/[.36] hover:oui-text-white/80\"\n onClick={() => {\n modal.dialog({\n title: t(\"common.tips\"),\n size: \"xs\",\n content: (\n <Text intensity={54}>{t(\"orderEntry.tpsl.tips\")}</Text>\n ),\n });\n }}\n /> */}\n </Flex>\n <Flex itemAlign={\"center\"} gapX={2}>\n {isMobile && props.onReduceOnlyChange && (\n <ReduceOnlySwitch\n checked={props.reduceOnlyChecked ?? false}\n onCheckedChange={props.onReduceOnlyChange}\n />\n )}\n {!isMobile && (\n <TPSLAdvancedButton\n className={cn(\n \"oui-group oui-invisible\",\n props.switchState && \"oui-visible\",\n )}\n showTPSLAdvanced={props.showTPSLAdvanced}\n />\n )}\n </Flex>\n </Flex>\n <div\n className={cn(\n \"oui-max-h-0 oui-overflow-hidden oui-transition-all\",\n props.switchState && \"oui-max-h-[120px]\",\n )}\n onTransitionEnd={() => {\n console.log(\"transition end\");\n tpslFormRef.current?.style.setProperty(\n \"opacity\",\n props.switchState ? \"1\" : \"0\",\n );\n }}\n >\n <TPSLInputForm\n ref={tpslFormRef}\n setOrderValue={props.setOrderValue}\n onChange={props.onChange}\n values={props.values}\n errors={isSlPriceWarning ? {} : props.errors}\n quote_dp={props.quote_dp}\n showTPSLAdvanced={props.showTPSLAdvanced}\n isMobile={isMobile}\n isSlPriceWarning={isSlPriceWarning}\n />\n </div>\n\n {isSlPriceWarning && <TPSLPriceWarning errors={props.errors} />}\n </div>\n );\n};\n\nconst TPSLPriceWarning = (props: { errors: OrderValidationResult | null }) => {\n const { getErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n\n return (\n <DotStatus\n color=\"warning\"\n size=\"xs\"\n label={getErrorMsg(\"sl_trigger_price\")}\n />\n );\n};\n\nconst TPSLInputForm = React.forwardRef<\n HTMLDivElement,\n {\n setOrderValue: (key: string, value: any) => void;\n onChange: (key: OrderValueKeys, value: any) => void;\n values: TPSL_Values;\n errors: OrderValidationResult | null;\n quote_dp: number | undefined;\n showTPSLAdvanced: () => void;\n isMobile: boolean;\n isSlPriceWarning?: boolean;\n }\n>((props, ref) => {\n const { getErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n const { t } = useTranslation();\n\n return (\n <div\n ref={ref}\n className={\"oui-space-y-1 oui-px-px oui-py-2 oui-transition-all\"}\n >\n <Flex itemAlign={\"center\"} justify={\"between\"} gapX={2}>\n <TPSLPositionTypeWidget\n value={props.values.position_type}\n onChange={props.onChange}\n />\n {props.isMobile && (\n <TPSLAdvancedButton\n showTPSLAdvanced={props.showTPSLAdvanced}\n isMobile={props.isMobile}\n />\n )}\n </Flex>\n <PnlInputProvider values={props.values.tp} type={\"TP\"}>\n <TPSLInputRow\n type={\"TP\"}\n error={getErrorMsg(\"tp_trigger_price\")}\n onChange={props.onChange}\n values={props.values.tp}\n quote_dp={props.quote_dp}\n testIds={{\n first: \"oui-testid-orderEntry-tpsl-tpPrice-input\",\n second: \"oui-testid-orderEntry-tpsl-tpPnl-input\",\n dropDown: \"oui-testid-orderEntry-tpsl-tp-dropDown-trigger-button\",\n }}\n />\n </PnlInputProvider>\n <PnlInputProvider values={props.values.sl} type={\"SL\"}>\n <TPSLInputRow\n type={\"SL\"}\n error={getErrorMsg(\"sl_trigger_price\")}\n onChange={props.onChange}\n values={props.values.sl}\n quote_dp={props.quote_dp}\n testIds={{\n first: \"oui-testid-orderEntry-tpsl-slPrice-input\",\n second: \"oui-testid-orderEntry-tpsl-slPnl-input\",\n dropDown: \"oui-testid-orderEntry-tpsl-sl-dropDown-trigger-button\",\n }}\n classNames={{\n root: props.isSlPriceWarning\n ? \"oui-outline-warning-darken focus-within:oui-outline-warning-darken\"\n : undefined,\n }}\n />\n </PnlInputProvider>\n </div>\n );\n});\n\nTPSLInputForm.displayName = \"TPSLInputForm\";\n\nconst TPSLAdvancedButton = (props: {\n showTPSLAdvanced: () => void;\n className?: string;\n isMobile?: boolean;\n}) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n itemAlign={\"center\"}\n gapX={1}\n onClick={props.showTPSLAdvanced}\n className={cn(\"oui-group oui-cursor-pointer\", props.className)}\n >\n <Text\n className={cn(\n \"oui-cursor-pointer group-hover:oui-text-base-contrast\",\n props.isMobile ? \"oui-text-2xs\" : \"oui-text-sm\",\n )}\n >\n {t(\"tpsl.advanced\")}\n </Text>\n <SettingFillIcon\n size={12}\n className=\"oui-text-base-contrast-54 group-hover:oui-text-base-contrast oui-cursor-pointer\"\n opacity={1}\n onClick={props.showTPSLAdvanced}\n />\n </Flex>\n );\n};\n\n//------- TPSLTriggerPriceInput start -------\nconst TPSLTriggerPriceInput = (props: {\n type: \"TP\" | \"SL\";\n error: string | undefined;\n values: Est_Values;\n onChange: (value: string) => void;\n quote_dp: number | undefined;\n testId?: string;\n classNames?: {\n root?: string;\n input?: string;\n prefix?: string;\n };\n}) => {\n const { t } = useTranslation();\n const { errorMsgVisible } = useOrderEntryContext();\n const { tipsEle } = usePnlInputContext();\n const [prefix, setPrefix] = useState<string>(`${props.type} Price`);\n const [placeholder, setPlaceholder] = useState<string>(\"USDC\");\n\n const [tipVisible, setTipVisible] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const [innerValue, setInnerValue] = useState<string>(\n props.values.trigger_price ?? \"\",\n );\n\n useEffect(() => {\n if (isFocused) {\n return;\n }\n setInnerValue(props.values.trigger_price ?? \"\");\n }, [props.values.trigger_price, isFocused]);\n\n const triggerPriceToolTipEle = useMemo(() => {\n if (props.error && errorMsgVisible) return props.error;\n if (tipVisible) return tipsEle;\n\n return null;\n }, [props.error, errorMsgVisible, tipVisible, tipsEle]);\n\n const getPrefixLabel = (trigger_price?: string) => {\n let _prefix = props.type === \"TP\" ? t(\"tpsl.tpPrice\") : t(\"tpsl.slPrice\");\n\n if (trigger_price) {\n _prefix = props.type === \"TP\" ? t(\"tpsl.tp\") : t(\"tpsl.sl\");\n }\n return _prefix;\n };\n\n const onValueChange = (value: string) => {\n setInnerValue(value);\n props.onChange(value);\n };\n\n // console.log(\"props.values.trigger_price\", props.values.trigger_price);\n\n useEffect(() => {\n setPrefix(getPrefixLabel(props.values.trigger_price));\n\n if (!isFocused) {\n setInnerValue(props.values.trigger_price ?? \"\");\n }\n }, [props.type, props.values.trigger_price]);\n\n const onFocus = () => {\n setPrefix(props.type === \"TP\" ? t(\"tpsl.tp\") : t(\"tpsl.sl\"));\n setPlaceholder(\"\");\n setTipVisible(true);\n setIsFocused(true);\n };\n\n const onBlur = () => {\n setPrefix(getPrefixLabel(props.values.trigger_price));\n setPlaceholder(\"USDC\");\n setTipVisible(false);\n setIsFocused(false);\n props.onChange(innerValue);\n };\n\n return (\n <Input.tooltip\n data-testid={props.testId}\n prefix={prefix}\n size={\"md\"}\n placeholder={placeholder}\n align=\"right\"\n onFocus={onFocus}\n onBlur={onBlur}\n tooltip={triggerPriceToolTipEle}\n tooltipProps={{\n content: {\n side: props.type === \"TP\" ? \"top\" : \"bottom\",\n },\n }}\n color={props.error ? \"danger\" : undefined}\n autoComplete={\"off\"}\n value={innerValue}\n classNames={{\n additional: \"oui-text-base-contrast-54\",\n root: cn(\"oui-pr-2 md:oui-pr-3\", props.classNames?.root),\n prefix: cn(\"oui-pr-1 md:oui-pr-2\", props.classNames?.prefix),\n input: cn(\n \"oui-text-2xs placeholder:oui-text-2xs\",\n props.classNames?.input,\n ),\n }}\n // onChange={props.onChange}\n onValueChange={onValueChange}\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp ?? 2),\n inputFormatter.currencyFormatter,\n ]}\n />\n );\n};\n\n//------- TPSLTriggerPriceInput end -------\n\nconst TPSLInputRow: React.FC<{\n type: \"TP\" | \"SL\";\n values: Est_Values;\n error?: string;\n onChange: (key: OrderValueKeys, value: any) => void;\n quote_dp: number | undefined;\n testIds?: {\n first?: string;\n second?: string;\n dropDown?: string;\n };\n classNames?: {\n root?: string;\n input?: string;\n prefix?: string;\n };\n}> = (props) => {\n return (\n <Grid cols={2} gapX={1}>\n <TPSLTriggerPriceInput\n testId={props.testIds?.first}\n type={props.type}\n error={props.error}\n values={props.values ?? \"\"}\n classNames={props.classNames}\n onChange={(event) => {\n props.onChange(\n props.type === \"SL\" ? \"sl_trigger_price\" : \"tp_trigger_price\",\n event,\n );\n }}\n quote_dp={props.quote_dp}\n />\n\n <PnlInputWidget\n testIds={{\n input: props.testIds?.second,\n dropDown: props.testIds?.dropDown,\n }}\n onChange={props.onChange}\n quote={\"USDC\"}\n quote_dp={2}\n type={props.type}\n values={{\n PnL: props.values.PnL,\n Offset: props.values.Offset,\n \"Offset%\": props.values[\"Offset%\"],\n ROI: props.values.ROI,\n }}\n />\n </Grid>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n CaretDownIcon,\n Input,\n MenuItem,\n Text,\n SimpleDropdownMenu,\n} from \"@kodiak-finance/orderly-ui\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { PNLInputState, PnLMode } from \"./useBuilder.script\";\n\nexport type PNLInputProps = PNLInputState & {\n testIds?: {\n input?: string;\n dropDown?: string;\n };\n quote: string;\n type: \"TP\" | \"SL\";\n};\n\nexport const PNLInput = (props: PNLInputProps) => {\n const {\n mode,\n modes,\n modeLabelMap,\n onModeChange,\n onValueChange,\n quote,\n quote_dp,\n value,\n type,\n tips,\n onFocus,\n onBlur,\n setFocus,\n } = props;\n\n const [prefix, setPrefix] = useState<string>(mode);\n\n const [placeholder, setPlaceholder] = useState<string>(\n mode === PnLMode.PERCENTAGE ? \"%\" : quote,\n );\n\n useEffect(() => {\n setPrefix(mode);\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n }, [mode]);\n\n useEffect(() => {\n setPrefix(!!value ? \"\" : mode);\n }, [value]);\n\n const id = useMemo(() => `${type.toLowerCase()}_${mode.toLowerCase()}`, []);\n\n return (\n <Input.tooltip\n prefix={modeLabelMap[prefix as keyof typeof modeLabelMap] || prefix}\n size={\"md\"}\n placeholder={placeholder}\n id={id}\n align={\"right\"}\n value={value}\n tooltip={tips}\n tooltipProps={{\n content: {\n side: props.type === \"TP\" ? \"top\" : \"bottom\",\n },\n }}\n data-testid={props.testIds?.input}\n autoComplete={\"off\"}\n inputMode=\"decimal\"\n onValueChange={onValueChange}\n formatters={[\n props.formatter({ dp: quote_dp, mode, type }),\n inputFormatter.currencyFormatter,\n // inputFormatter.identifierFormatter(),\n ]}\n classNames={{\n root: type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n additional: \"oui-text-base-contrast-54\",\n input: \"oui-text-inherit\",\n }}\n onFocus={() => {\n setPrefix(\"\");\n setPlaceholder(\"\");\n setFocus(true);\n onFocus();\n }}\n onBlur={() => {\n setPrefix(!!value ? \"\" : mode);\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n onBlur();\n }}\n suffix={\n <>\n {mode === PnLMode.PERCENTAGE && !!value && (\n <Text size={\"2xs\"} color=\"inherit\" className=\"oui-ml-[2px]\">\n %\n </Text>\n )}\n <PNLMenus\n mode={mode}\n modes={modes}\n onModeChange={(item) => onModeChange(item.value as PnLMode)}\n testId={props.testIds?.dropDown}\n />\n </>\n }\n />\n );\n};\n\nconst PNLMenus = (props: {\n mode?: string;\n modes: MenuItem[];\n onModeChange: (value: MenuItem) => void;\n testId?: string;\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 onCloseAutoFocus={(event) => event.preventDefault()}\n onSelect={(item) => props.onModeChange(item as MenuItem)}\n >\n <button className={\"oui-p-2\"} data-testid={props.testId}>\n <CaretDownIcon size={12} color={\"white\"} />\n </button>\n </SimpleDropdownMenu>\n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\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\";\nimport { usePnlInputContext } from \"./pnlInputContext\";\n\nexport enum PnLMode {\n PnL = \"PnL\",\n OFFSET = \"Offset\",\n PERCENTAGE = \"Offset%\",\n}\n\nexport type PNL_Values = {\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n};\n\ntype PNL_Keys =\n | \"tp_offset\"\n | \"tp_offset_percentage\"\n | \"tp_pnl\"\n | \"sl_offset\"\n | \"sl_offset_percentage\"\n | \"sl_pnl\";\n\nexport type BuilderProps = {\n type: \"TP\" | \"SL\";\n\n quote_dp?: number;\n onChange: (key: PNL_Keys, value: number | string) => void;\n\n values: PNL_Values;\n};\n\nexport const usePNLInputBuilder = (props: BuilderProps) => {\n const { type, values, quote_dp } = props;\n const { t } = useTranslation();\n const [focus, setFocus] = useState(true);\n // const [mode, setMode] = useLocalStorage<PnLMode>(\n // \"TP/SL_Mode\",\n // PnLMode.PERCENTAGE\n // );\n const { mode, setMode, tipsEle } = usePnlInputContext();\n\n const [tipVisible, setTipVisible] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const key = useMemo<PNL_Keys>(() => {\n switch (mode) {\n case PnLMode.OFFSET:\n return `${type.toLowerCase()}_offset` as PNL_Keys;\n case PnLMode.PERCENTAGE:\n return `${type.toLowerCase()}_offset_percentage` as PNL_Keys;\n default:\n return `${type.toLowerCase()}_pnl` as PNL_Keys;\n }\n }, [mode]);\n\n const [innerValue, setInnerValue] = useState<string>(\n values[mode as keyof PNL_Values],\n );\n\n // const value = useMemo(() => {\n // // console.log(\"mode\", mode, values);\n // const value = values[mode as keyof PNL_Values];\n // // if (isFocused) {\n // // return value;\n // // }\n // return value;\n // }, [values, mode, isFocused]);\n\n useEffect(() => {\n if (isFocused) {\n return;\n }\n setInnerValue(values[mode as keyof PNL_Values]);\n }, [values, mode, isFocused]);\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 modeLabelMap = useMemo(() => {\n return {\n [PnLMode.PnL]: t(\"tpsl.pnl\"),\n [PnLMode.OFFSET]: t(\"tpsl.offset\"),\n [PnLMode.PERCENTAGE]: `${t(\"tpsl.offset\")}%`,\n };\n }, [t]);\n\n const percentageSuffix = useRef<string>(\"\");\n\n const onValueChange = (value: string) => {\n // console.log(\"onValueChange\", value);\n // if (!isFocused) {\n // props.onChange(key, value);\n // } else {\n // setInnerValue(value);\n // }\n setInnerValue(value);\n props.onChange(key, value);\n };\n\n const onFocus = () => {\n // updateTips();\n setTipVisible(true);\n setIsFocused(true);\n };\n\n /**\n * hide tips when input is blurred\n */\n const onBlur = () => {\n // setTips(undefined);\n setTipVisible(false);\n setIsFocused(false);\n props.onChange(key, innerValue);\n };\n\n const formatter = (options: {\n dp?: number;\n mode: PnLMode;\n type: \"TP\" | \"SL\";\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 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 // value = new Decimal(\n // value.replace(\n // new RegExp(percentageSuffix.current.replace(\".\", \"\\\\.\") + \"$\"),\n // \"\"\n // )\n // )\n // .mul(100)\n // .toString();\n\n // return `${todpIfNeed(value, 2)}${percentageSuffix.current}`;\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 // return (Number(value) * 100).toFixed(2);\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 // console.log(\"onSendBefore\", value);\n\n if (mode === PnLMode.PERCENTAGE) {\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 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 };\n\n return {\n mode,\n modes,\n modeLabelMap,\n formatter,\n onModeChange: (mode: PnLMode) => {\n setMode(mode);\n },\n onFocus,\n onBlur,\n value: innerValue,\n onValueChange,\n quote_dp,\n tips: tipVisible ? tipsEle : undefined,\n setFocus,\n };\n};\n\nexport type PNLInputState = ReturnType<typeof usePNLInputBuilder>;\n","import { createContext, ReactNode, useContext } from \"react\";\nimport { PnLMode } from \"./useBuilder.script\";\n\nexport type PnlInputContextState = {\n mode: PnLMode;\n setMode: (mode: PnLMode) => void;\n tipsEle: ReactNode | null;\n};\n\nexport const PnlInputContext = createContext<PnlInputContextState>(\n {} as PnlInputContextState,\n);\n\nexport const usePnlInputContext = () => {\n return useContext(PnlInputContext);\n};\n","import { PNLInput } from \"./pnlInput.ui\";\nimport { BuilderProps, PnLMode, usePNLInputBuilder } from \"./useBuilder.script\";\n\nexport const PnlInputWidget = (\n props: BuilderProps & {\n testIds?: {\n input?: string;\n dropDown?: string;\n };\n quote: string;\n }\n) => {\n const { testIds, quote, ...rest } = props;\n const state = usePNLInputBuilder(rest);\n return (\n <PNLInput {...state} testIds={testIds} quote={quote} type={props.type} />\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { PnlInputContext, PnlInputContextState } from \"./pnlInputContext\";\nimport { PNL_Values, PnLMode } from \"./useBuilder.script\";\n\nexport const PnlInputProvider: React.FC<\n React.PropsWithChildren<{\n values: PNL_Values & { trigger_price?: string };\n type: \"TP\" | \"SL\";\n }>\n> = (props) => {\n const { type, values, children } = props;\n const [mode, setMode] = useLocalStorage<PnLMode>(\n \"TP/SL_Mode\",\n PnLMode.PERCENTAGE,\n );\n const { t } = useTranslation();\n\n const tipsEle = useMemo(() => {\n if (!values.PnL || !values.trigger_price) {\n return null;\n }\n return (\n <Flex>\n <span className={\"oui-text-xs oui-text-base-contrast-54\"}>\n {mode === PnLMode.PnL\n ? t(\"orderEntry.estRoi\")\n : t(\"orderEntry.estPnL\")}\n </span>\n {mode === PnLMode.PnL ? (\n <Text.numeral\n rule={\"percentages\"}\n className={cn(\n \"oui-ml-1 oui-text-xs\",\n type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n >\n {values.ROI}\n </Text.numeral>\n ) : (\n <Text.numeral\n rule={\"price\"}\n className={cn(\n \"oui-ml-1 oui-text-xs\",\n type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n >\n {values.PnL}\n </Text.numeral>\n )}\n </Flex>\n );\n }, [mode, values.ROI, values.PnL, values.trigger_price]);\n\n const memoizedValue = useMemo<PnlInputContextState>(() => {\n return { mode, setMode, tipsEle };\n }, [mode, setMode, tipsEle]);\n\n return (\n <PnlInputContext.Provider value={memoizedValue}>\n {children}\n </PnlInputContext.Provider>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport {\n useComputedLTV,\n useEventEmitter,\n useLocalStorage,\n useMarginRatio,\n useMemoizedFn,\n useOrderEntry,\n useOrderlyContext,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n DistributionType,\n OrderLevel,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport { Decimal, removeTrailingZeros } from \"@kodiak-finance/orderly-utils\";\nimport { useAskAndBid } from \"./hooks/useAskAndBid\";\nimport { useBBOState } from \"./hooks/useBBOState\";\nimport { useCanTrade } from \"./hooks/useCanTrade\";\nimport { useFocusAndBlur } from \"./hooks/useFocusAndBlur\";\nimport { usePriceInputContainer } from \"./hooks/usePriceInputContainer\";\nimport { InputType } from \"./types\";\nimport { BBOStatus, isBBOOrder, safeNumber } from \"./utils\";\n\nexport type OrderEntryScriptInputs = {\n symbol: string;\n};\n\nexport const ORDERLY_ORDER_SOUND_ALERT_KEY = \"orderly_order_sound_alert\";\n\nexport type OrderEntryScriptReturn = ReturnType<typeof useOrderEntryScript>;\n\nexport const useOrderEntryScript = (inputs: OrderEntryScriptInputs) => {\n const { symbol } = inputs;\n const [localOrderType, setLocalOrderType] = useLocalStorage(\n \"orderly-order-entry-order-type\",\n OrderType.LIMIT,\n );\n const [localOrderSide, setLocalOrderSide] = useLocalStorage(\n \"orderly-order-entry-order-side\",\n OrderSide.BUY,\n );\n\n const { notification } = useOrderlyContext();\n\n const [soundAlert, setSoundAlert] = useLocalStorage<boolean>(\n ORDERLY_ORDER_SOUND_ALERT_KEY,\n notification?.orderFilled?.defaultOpen ?? false,\n );\n\n const canTrade = useCanTrade();\n\n const {\n formattedOrder,\n setValue,\n setValues: setOrderValues,\n symbolInfo,\n ...state\n } = useOrderEntry(symbol, {\n initialOrder: {\n symbol,\n order_type: localOrderType,\n position_type: PositionType.PARTIAL,\n side: localOrderSide,\n },\n });\n\n const [tpslSwitch, setTpslSwitch] = useLocalStorage(\n \"orderly-order-entry-tp_sl-switch\",\n false,\n );\n\n const { currentLeverage } = useMarginRatio();\n const ee = useEventEmitter();\n const triggerPriceInputRef = useRef<HTMLInputElement | null>(null);\n const priceInputRef = useRef<HTMLInputElement | null>(null);\n const activatedPriceInputRef = useRef<HTMLInputElement | null>(null);\n\n const { bboStatus, bboType, setBBOType, onBBOChange, toggleBBO } =\n useBBOState({\n tpslSwitch,\n order_type: formattedOrder.order_type,\n order_type_ext: formattedOrder.order_type_ext,\n side: formattedOrder.side,\n setOrderValues,\n });\n\n const {\n currentFocusInput,\n lastScaledOrderPriceInput,\n lastQuantityInputType,\n onFocus,\n onBlur,\n } = useFocusAndBlur({\n base_tick: symbolInfo?.base_tick,\n order_type: formattedOrder.order_type,\n order_quantity: formattedOrder.order_quantity,\n setValue,\n });\n\n // cancel TP/SL\n const cancelTP_SL = () => {\n // if(formattedOrder.)\n setOrderValues({\n tp_trigger_price: \"\",\n sl_trigger_price: \"\",\n position_type: PositionType.FULL,\n });\n };\n\n const enableTP_SL = () => {\n setOrderValues({\n order_type_ext: undefined,\n position_type: PositionType.FULL,\n });\n };\n\n const setOrderValue = useMemoizedFn(\n (\n key: any,\n value: any,\n options?: {\n shouldUpdateLastChangedField?: boolean;\n },\n ) => {\n if (key === \"order_type\") {\n setLocalOrderType(value);\n }\n if (key === \"side\") {\n setLocalOrderSide(value);\n }\n\n if (\n (key === \"reduce_only\" && value) ||\n (key === \"order_type\" &&\n (value === OrderType.STOP_LIMIT || value === OrderType.STOP_MARKET))\n ) {\n // cancelTP_SL();\n\n const data = {\n tp_trigger_price: \"\",\n sl_trigger_price: \"\",\n [key]: value,\n };\n\n if (key === \"order_type\") {\n data[\"order_type_ext\" as any] = \"\";\n }\n\n setOrderValues(data);\n\n return;\n }\n\n if (key === \"order_type\" && value !== OrderType.LIMIT) {\n const data = {\n level: undefined,\n order_type_ext: undefined,\n [key]: value,\n };\n\n setOrderValues(data);\n\n return;\n }\n\n if (key === \"order_type\" && value === OrderType.SCALED) {\n setOrderValues({\n distribution_type: DistributionType.FLAT,\n [key]: value,\n });\n return;\n }\n\n setValue(key, value, options);\n },\n );\n\n const onTPSLSwitchChanged = (state: boolean) => {\n setTpslSwitch(state);\n if (state) {\n enableTP_SL();\n } else {\n cancelTP_SL();\n }\n };\n\n useEffect(() => {\n const updateOrderPrice = (price: string) => {\n setValue(\"order_price\", price);\n };\n ee.on(\"update:orderPrice\", updateOrderPrice);\n\n return () => {\n ee.off(\"update:orderPrice\", updateOrderPrice);\n };\n }, []);\n\n useEffect(() => {\n const focusInputElement = (target: HTMLInputElement | null) => {\n requestAnimationFrame(() => {\n target?.focus();\n });\n };\n\n // handle orderbook item click event\n const orderBookItemClickHandler = (item: number[]) => {\n const price = removeTrailingZeros(item[0]);\n const { order_type, order_type_ext } = formattedOrder;\n\n // handle trigger price input, focus on trigger price input\n if (\n currentFocusInput.current === InputType.TRIGGER_PRICE &&\n (order_type === OrderType.STOP_LIMIT ||\n order_type === OrderType.STOP_MARKET)\n ) {\n setValue(\"trigger_price\", price);\n focusInputElement(triggerPriceInputRef.current);\n return;\n }\n\n // handle bbo order, unselect bbo and set order price, focus on order price input\n if (isBBOOrder({ order_type, order_type_ext })) {\n setBBOType(undefined);\n\n setOrderValues({\n order_type_ext: undefined,\n level: undefined,\n });\n\n requestAnimationFrame(() => {\n // Since BBO will update the price when unselected, we should set order price in requestAnimationFrame\n // We can't call setValue directly here because it's inside a requestAnimationFrame, and the formattedOrder accessed inside setValue would be the old value\n // setValue(\"order_price\", price);\n ee.emit(\"update:orderPrice\", price);\n });\n\n focusInputElement(priceInputRef.current);\n return;\n }\n\n // handle limit order and stop limit order, set order price and focus on order price input\n if (\n order_type === OrderType.STOP_LIMIT ||\n order_type === OrderType.LIMIT\n ) {\n setValue(\"order_price\", price);\n focusInputElement(priceInputRef.current);\n return;\n }\n\n // handle stop market order, set trigger price and focus on trigger price input\n if (order_type === OrderType.STOP_MARKET) {\n setValue(\"trigger_price\", price);\n focusInputElement(triggerPriceInputRef.current);\n return;\n }\n\n // handle market order, set order type to limit\n if (order_type === OrderType.MARKET) {\n // unselect bbo\n setBBOType(undefined);\n\n // You can't call setValue twice here , the second value will override the first, so you need to combine them into a single setValues call\n setOrderValues({\n order_type: OrderType.LIMIT,\n order_price: price,\n });\n\n focusInputElement(priceInputRef.current);\n return;\n }\n\n if (\n order_type === OrderType.SCALED &&\n lastScaledOrderPriceInput.current\n ) {\n const field =\n lastScaledOrderPriceInput.current === InputType.START_PRICE\n ? \"start_price\"\n : \"end_price\";\n setValue(field, price);\n focusInputElement(priceInputRef.current);\n return;\n }\n\n // handle trailing stop order, set activated price and focus on activated price input\n if (order_type === OrderType.TRAILING_STOP) {\n setValue(\"activated_price\", price);\n focusInputElement(activatedPriceInputRef.current);\n return;\n }\n\n // default, set order price and focus on order price input\n setValue(\"order_price\", price);\n focusInputElement(priceInputRef.current);\n };\n\n ee.on(\"orderbook:item:click\", orderBookItemClickHandler);\n\n return () => {\n ee.off(\"orderbook:item:click\", orderBookItemClickHandler);\n };\n // Please do not modify this deps lightly, because `setValue` also relies on these state internally\n }, [formattedOrder, symbolInfo]);\n\n useEffect(() => {\n // after switching symbol, all the input number should be cleared (price, qty, TP/SL, etc)\n state.reset();\n state.resetMetaState();\n // reset last quantity input type\n lastQuantityInputType.current = InputType.NONE;\n }, [symbol]);\n\n // if scaled order, and distribution_type is not set, set it to flat\n useEffect(() => {\n if (\n formattedOrder.order_type === OrderType.SCALED &&\n !formattedOrder.distribution_type\n ) {\n setValue(\"distribution_type\", DistributionType.FLAT);\n }\n }, [formattedOrder.order_type, formattedOrder.distribution_type]);\n\n const currentLtv = useComputedLTV();\n const askAndBid = useAskAndBid();\n\n const fillMiddleValue = () => {\n if (bboStatus === BBOStatus.ON) {\n toggleBBO();\n }\n if (formattedOrder.order_type === OrderType.LIMIT) {\n const [bestAsk = 0, bestBid = 0] = askAndBid;\n const midPrice = new Decimal(safeNumber(bestAsk))\n .add(safeNumber(bestBid))\n .div(2)\n .toNumber();\n // 1. Since BBO will update the price when unselected, we should set order price in raf\n // 2. raf is mainly used to solve the timing problem caused by React state update, ensuring that the orderPrice is triggered after the state is fully updated to avoid accessing expired state values.\n requestAnimationFrame(() => {\n ee.emit(\"update:orderPrice\", midPrice);\n });\n }\n };\n\n const { priceInputContainerRef, priceInputContainerWidth } =\n usePriceInputContainer({\n order_type_ext: formattedOrder.order_type_ext,\n });\n\n const slPriceError = useTpslPriceChecker({\n slPrice: formattedOrder.sl_trigger_price,\n liqPrice: state.estLiqPrice,\n side: formattedOrder.side,\n });\n\n useEffect(() => {\n if (formattedOrder.reduce_only) {\n setTpslSwitch(false);\n }\n }, [formattedOrder.reduce_only]);\n\n useEffect(() => {\n if (tpslSwitch) {\n setOrderValue(\"reduce_only\", false);\n }\n }, [tpslSwitch]);\n\n return {\n ...state,\n slPriceError: slPriceError ?? undefined,\n side: formattedOrder.side as OrderSide,\n type: formattedOrder.order_type as OrderType,\n level: formattedOrder.level as OrderLevel,\n formattedOrder,\n setOrderValue,\n setOrderValues,\n currentLeverage,\n\n // cancelTP_SL,\n // enableTP_SL,\n tpslSwitch,\n setTpslSwitch: onTPSLSwitchChanged,\n symbolInfo,\n onFocus,\n onBlur,\n\n priceInputRef,\n priceInputContainerRef,\n priceInputContainerWidth,\n triggerPriceInputRef,\n activatedPriceInputRef,\n lastQuantityInputType,\n\n canTrade,\n bboStatus,\n bboType,\n onBBOChange,\n toggleBBO,\n currentLtv,\n fillMiddleValue,\n symbol,\n soundAlert,\n setSoundAlert,\n currentFocusInput,\n };\n};\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { useLocalStorage, useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport {\n BBOOrderType,\n OrderlyOrder,\n OrderSide,\n OrderType,\n TrackerEventName,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n BBOStatus,\n getOrderLevelByBBO,\n getOrderTypeByBBO,\n isBBOOrder,\n} from \"../utils\";\n\nexport function useBBOState({\n tpslSwitch,\n order_type,\n order_type_ext,\n side,\n setOrderValues,\n}: {\n tpslSwitch: boolean;\n order_type?: OrderType;\n order_type_ext?: OrderType;\n side?: OrderSide;\n setOrderValues: (values: Partial<OrderlyOrder>) => void;\n}) {\n const [localBBOType, setLocalBBOType] = useLocalStorage<\n BBOOrderType | undefined\n >(\"orderly_order_bbo_type\", undefined);\n\n const lastBBOType = useRef<BBOOrderType>(localBBOType);\n\n const { track } = useTrack();\n\n const bboStatus = useMemo(() => {\n if (\n tpslSwitch ||\n [OrderType.POST_ONLY, OrderType.IOC, OrderType.FOK].includes(\n order_type_ext!,\n )\n ) {\n return BBOStatus.DISABLED;\n }\n\n return localBBOType && order_type === OrderType.LIMIT\n ? BBOStatus.ON\n : BBOStatus.OFF;\n }, [tpslSwitch, order_type_ext, order_type, localBBOType]);\n\n const toggleBBO = () => {\n track(TrackerEventName.clickBBOButton);\n if (localBBOType) {\n // unselect bbo\n setLocalBBOType(undefined);\n // update formattedOrder values immediately instead of via useEffect\n setOrderValues({\n order_type_ext: undefined,\n level: undefined,\n });\n } else {\n setLocalBBOType(lastBBOType.current || BBOOrderType.COUNTERPARTY1);\n }\n };\n\n const onBBOChange = (value: BBOOrderType) => {\n setLocalBBOType(value);\n lastBBOType.current = value;\n };\n\n useEffect(() => {\n if (bboStatus === BBOStatus.DISABLED) {\n setOrderValues({\n // if order_type_ext is not bbo(ask, bid), keep previous value\n order_type_ext: isBBOOrder({ order_type_ext })\n ? undefined\n : order_type_ext,\n level: undefined,\n });\n }\n }, [bboStatus, order_type_ext]);\n\n useEffect(() => {\n if (bboStatus === BBOStatus.ON) {\n const orderType = getOrderTypeByBBO(localBBOType, side!);\n const orderLevel = getOrderLevelByBBO(localBBOType)!;\n setOrderValues({\n order_type_ext: orderType,\n level: orderLevel,\n });\n }\n }, [localBBOType, bboStatus, side]);\n\n return {\n bboStatus,\n bboType: localBBOType,\n setBBOType: setLocalBBOType,\n onBBOChange,\n toggleBBO,\n };\n}\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\n\nexport function useCanTrade() {\n const { state } = useAccount();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n return canTrade;\n}\n","import { useRef, FocusEvent } from \"react\";\nimport {\n OrderEntryReturn,\n useMemoizedFn,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { InputType } from \"../types\";\n\ntype FocusAndBlurProps = {\n base_tick: number;\n order_type?: OrderType;\n order_quantity?: string;\n setValue: OrderEntryReturn[\"setValue\"];\n};\n\nexport function useFocusAndBlur(props: FocusAndBlurProps) {\n const { base_tick, order_type, order_quantity, setValue } = props;\n const currentFocusInput = useRef<InputType>(InputType.NONE);\n const lastScaledOrderPriceInput = useRef<InputType>(InputType.END_PRICE);\n const lastQuantityInputType = useRef<InputType>(InputType.NONE);\n\n const formatQty = () => {\n if (\n base_tick < 1 ||\n // scaled order should not format quantity, because it is total quantity\n order_type === OrderType.SCALED ||\n !order_quantity\n ) {\n return;\n }\n\n // TODO: use this to format quantity instead of utils.formatNumber, need time to test\n // const formatQty = new Decimal(formattedOrder.order_quantity)\n // .todp(0, Decimal.ROUND_DOWN)\n // .div(symbolInfo.base_tick)\n // .toString();\n\n const quantity = utils.formatNumber(\n order_quantity,\n new Decimal(base_tick || \"0\").toNumber(),\n );\n\n setValue(\"order_quantity\", quantity, {\n shouldUpdateLastChangedField: false,\n });\n };\n\n const onFocus = (type: InputType) => (_: FocusEvent) => {\n currentFocusInput.current = type;\n\n // set last scaled order price input\n if (\n [InputType.START_PRICE, InputType.END_PRICE].includes(\n currentFocusInput.current!,\n )\n ) {\n lastScaledOrderPriceInput.current = type;\n }\n\n if (\n [InputType.QUANTITY, InputType.TOTAL, InputType.MARGIN].includes(type)\n ) {\n lastQuantityInputType.current = type;\n }\n };\n\n const onBlur = (type: InputType) => (_: FocusEvent) => {\n setTimeout(() => {\n if (currentFocusInput.current !== type) {\n return;\n }\n currentFocusInput.current = InputType.NONE;\n }, 300);\n\n if (type === InputType.QUANTITY) {\n formatQty();\n }\n };\n\n return {\n currentFocusInput,\n lastScaledOrderPriceInput,\n lastQuantityInputType,\n onFocus: useMemoizedFn(onFocus),\n onBlur: useMemoizedFn(onBlur),\n };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\n\nexport function usePriceInputContainer({\n order_type_ext,\n}: {\n order_type_ext?: OrderType;\n}) {\n const [priceInputContainerWidth, setPriceInputContainerWidth] = useState(0);\n const priceInputContainerRef = useRef<HTMLDivElement | null>(null);\n\n // useEffect(() => {\n // if (\n // priceInputContainerRef.current &&\n // // update BBO select width when is BBO order\n // isBBOOrder({ order_type_ext: formattedOrder.order_type_ext })\n // ) {\n // const width =\n // priceInputContainerRef.current.getBoundingClientRect()?.width;\n // if (width) {\n // setPriceInputContainerWidth(width);\n // }\n // }\n // }, [priceInputContainerRef, formattedOrder.order_type_ext]);\n\n useEffect(() => {\n const element = priceInputContainerRef.current;\n\n if (!element) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry.contentRect.width;\n if (width) {\n // update BBO order select dropdown width when priceInputContainerRef width changed\n setPriceInputContainerWidth(width);\n }\n }\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.unobserve(element);\n };\n }, [priceInputContainerRef, order_type_ext]);\n\n return { priceInputContainerRef, priceInputContainerWidth };\n}\n","import React from \"react\";\nimport {\n OrderEntryScriptInputs,\n useOrderEntryScript,\n} from \"./orderEntry.script\";\nimport { OrderEntry } from \"./orderEntry.ui\";\n\nexport const OrderEntryWidget: React.FC<\n OrderEntryScriptInputs & {\n containerRef?: React.RefObject<HTMLDivElement>;\n disableFeatures?: (\"slippageSetting\" | \"feesInfo\")[];\n }\n> = (props) => {\n const state = useOrderEntryScript(props);\n return (\n <OrderEntry\n {...state}\n containerRef={props.containerRef}\n disableFeatures={props.disableFeatures}\n />\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/orderEntry.ui.tsx","../src/components/additional/additionalConfigButton.tsx","../src/components/additional/additionalInfo.tsx","../src/components/additional/pinButton.tsx","../src/components/advancedTPSLResult/index.tsx","../src/components/assetInfo/index.tsx","../src/components/fee/fees.widget.tsx","../src/components/fee/effectiveFee/effectiveFee.ui.tsx","../src/components/fee/effectiveFee/icons/effectiveFee.tsx","../src/components/fee/effectiveFee/effectiveFee.widget.tsx","../src/components/fee/regularFee/regularFees.ui.tsx","../src/components/fee/regularFee/regularFees.widget.tsx","../src/components/slippage/components/slippageCell.tsx","../src/components/slippage/components/slippageEditor.tsx","../src/components/slippage/slippage.ui.tsx","../src/components/available/index.tsx","../src/components/LTVRiskTooltip/LTVRiskTooltip.ui.tsx","../src/components/LTVRiskTooltip/LTVRiskTooltip.script.ts","../src/components/LTVRiskTooltip/LTVRiskTooltip.widget.tsx","../src/components/dialog/confirm.ui.tsx","../src/utils.ts","../src/components/dialog/maxQtyConfirm.tsx","../src/components/dialog/scaledOrderConfirm/scaledOrderConfirm.ui.tsx","../src/components/dialog/scaledOrderConfirm/scaledOrderConfirm.script.ts","../src/hooks/useAskAndBid.ts","../src/components/dialog/scaledOrderConfirm/scaledOrderConfirm.widget.tsx","../src/components/header/index.tsx","../src/components/orderTypeSelect/index.tsx","../src/components/header/LeverageBadge.tsx","../src/components/orderEntryProvider.tsx","../src/components/orderEntryContext.tsx","../src/components/orderInput/index.tsx","../src/components/orderInput/limit/priceInput.tsx","../src/components/customInput/index.tsx","../src/components/orderInput/limit/bboOrderTypeSelect.tsx","../src/components/orderInput/limit/limitPriceSuffix.tsx","../src/components/orderInput/qtyAndTotal/qtyAndTotalInput.tsx","../src/components/orderInput/scaledOrder/index.tsx","../src/components/orderInput/scaledOrder/quantityDistributionInput.tsx","../src/components/orderInput/scaledOrder/scaledPriceInput.tsx","../src/components/orderInput/scaledOrder/scaledQuantityInput.tsx","../src/components/orderInput/scaledOrder/scaledQuantityUnit.tsx","../src/components/orderInput/scaledOrder/skewInput.tsx","../src/components/orderInput/scaledOrder/totalOrdersInput.tsx","../src/components/orderInput/stop/triggerPriceInput.tsx","../src/components/orderInput/trailingStop/activePriceInput.tsx","../src/components/orderInput/trailingStop/trailingCallbackInput.tsx","../src/components/orderInput/trailingStop/callbackRatePercentages.tsx","../src/components/orderInput/trailingStop/trailingCallbackSelect.tsx","../src/components/orderInput/trailingStop/index.tsx","../src/components/quantitySlider/index.tsx","../src/components/reduceOnlySwitch/index.tsx","../src/components/tpsl.tsx","../src/components/pnlInput/pnlInput.ui.tsx","../src/components/pnlInput/useBuilder.script.ts","../src/components/pnlInput/pnlInputContext.tsx","../src/components/pnlInput/pnlInput.widget.tsx","../src/components/pnlInput/pnlInputProvider.tsx","../src/orderEntry.script.ts","../src/hooks/useBBOState.ts","../src/hooks/useCanTrade.ts","../src/hooks/useFocusAndBlur.ts","../src/hooks/usePriceInputContainer.ts","../src/orderEntry.widget.tsx"],"names":["useCallback","useEffect","useId","useMemo","useState","ERROR_MSG_CODES","useLocalStorage","useTranslation","useOrderEntryFormErrorMsg","OrderSide","OrderType","PositionType","Box","cn","Divider","Flex","modal","Switch","useScreen","Decimal","jsx","jsxs","open","Text","AuthGuard","EditIcon","Tooltip","Fragment","Button","i18n","BBOOrderType","Checkbox","textVariants","options","SimpleDialog","forwardRef","Grid","Badge","zero","national","order","totalQuantity","registerSimpleDialog","inputFormatter","Input","Select","item","memo","DistributionType","value","useRef","TrailingCallbackType","React","createContext","useContext","mode","errors","useComputedLTV","useEventEmitter","useMemoizedFn","useOrderlyContext","removeTrailingZeros","utils","state"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useId, useMemo, useState } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationResult,\n useLocalStorage,\n useMemoizedFn,\n useOrderlyContext,\n} 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 cn,\n Divider,\n Flex,\n modal,\n SimpleSheet,\n Switch,\n ThrottledButton,\n toast,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { TPSLAdvancedWidget } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { AdditionalConfigButton } from \"./components/additional/additionalConfigButton\";\nimport {\n AdditionalInfo,\n AdditionalInfoProps,\n} from \"./components/additional/additionalInfo\";\nimport { PinButton } from \"./components/additional/pinButton\";\nimport { AdvancedTPSLResult } from \"./components/advancedTPSLResult\";\nimport { AssetInfo } from \"./components/assetInfo\";\nimport { Available } from \"./components/available\";\nimport { orderConfirmDialogId } from \"./components/dialog/confirm.ui\";\nimport { MaxQtyConfirm } from \"./components/dialog/maxQtyConfirm\";\nimport { scaledOrderConfirmDialogId } from \"./components/dialog/scaledOrderConfirm\";\nimport { OrderEntryHeader } from \"./components/header\";\nimport { OrderEntryProvider } from \"./components/orderEntryProvider\";\nimport { OrderInput } from \"./components/orderInput\";\nimport { QuantitySlider } from \"./components/quantitySlider\";\nimport { ReduceOnlySwitch } from \"./components/reduceOnlySwitch\";\nimport { OrderTPSL } from \"./components/tpsl\";\nimport { type OrderEntryScriptReturn } from \"./orderEntry.script\";\nimport { getScaledPlaceOrderMessage } from \"./utils\";\n\ntype OrderEntryProps = OrderEntryScriptReturn & {\n containerRef?: React.RefObject<HTMLDivElement>;\n disableFeatures?: (\"slippageSetting\" | \"feesInfo\")[];\n};\n\nexport const OrderEntry: React.FC<OrderEntryProps> = (props) => {\n const {\n side,\n formattedOrder,\n setOrderValue,\n setOrderValues,\n symbolInfo,\n maxQty,\n freeCollateral,\n helper,\n submit,\n metaState,\n bboStatus,\n bboType,\n onBBOChange,\n toggleBBO,\n disableFeatures,\n currentLtv,\n fillMiddleValue,\n soundAlert,\n setSoundAlert,\n currentFocusInput,\n } = props;\n const [maxQtyConfirmOpen, setMaxQtyConfirmOpen] = useState(false);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n const [hasAdvancedTPSLResult, setHasAdvancedTPSLResult] =\n useState<boolean>(false);\n\n const { errors, validated } = metaState;\n\n const [errorMsgVisible, setErrorMsgVisible] = useState(false);\n\n const [needConfirm, setNeedConfirm] = useLocalStorage(\n \"orderly_order_confirm\",\n true,\n );\n const [pinned, setPinned] = useLocalStorage(\n \"orderly-order-additional-pinned\",\n true,\n );\n const [showTPSLAdvanced, setShowTPSLAdvanced] = useState(false);\n const [hidden, setHidden] = useLocalStorage(\"orderly-order-hidden\", false);\n\n const [slippage, setSlippage] = useLocalStorage(\"orderly-slippage\", \"1\", {\n parseJSON: ((value: string | null) => {\n return !value || value === '\"\"' ? \"1\" : JSON.parse(value);\n }) as any,\n });\n\n const { notification } = useOrderlyContext();\n\n const soundAlertId = useId();\n\n const isSlPriceWarning =\n props.slPriceError?.sl_trigger_price?.type ===\n ERROR_MSG_CODES.SL_PRICE_WARNING;\n\n const { getErrorMsg } = useOrderEntryFormErrorMsg(validated ? errors : null);\n\n const buttonLabel = useMemo(() => {\n return side === OrderSide.BUY\n ? t(\"orderEntry.buyLong\")\n : t(\"orderEntry.sellShort\");\n }, [side, t]);\n\n useEffect(() => {\n if (validated) {\n setErrorMsgVisible(true);\n }\n }, [validated]);\n\n // set slippage\n useEffect(() => {\n if (disableFeatures?.includes(\"slippageSetting\")) {\n return;\n }\n if (slippage) {\n setOrderValue(\"slippage\", Number(slippage));\n } else {\n setOrderValue(\"slippage\", undefined);\n }\n }, [slippage, disableFeatures]);\n\n useEffect(() => {\n const clickHandler = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (\n target.closest(\"#order-entry-submit-button\")\n // || target.closest(\".orderly-order-entry\")\n ) {\n return;\n }\n setErrorMsgVisible((visible) => {\n if (visible) {\n return false;\n }\n return visible;\n });\n };\n\n if (errorMsgVisible) {\n document.addEventListener(\"click\", clickHandler);\n } else {\n document.removeEventListener(\"click\", clickHandler);\n }\n\n return () => {\n document.removeEventListener(\"click\", clickHandler);\n };\n }, [errorMsgVisible]);\n\n const onSubmit = useMemoizedFn(async () => {\n const isScaledOrder = formattedOrder.order_type === OrderType.SCALED;\n\n // TODO: in the future, we will be add `level` to `OrderValidationItem`, use `level` manager ui state\n const isSlPriceError =\n props.slPriceError?.sl_trigger_price?.type ===\n ERROR_MSG_CODES.SL_PRICE_ERROR;\n helper\n .validate(isSlPriceError ? props.slPriceError : undefined)\n .then(\n // validate success, it return the order\n // TODO: get order from other function\n (order: any) => {\n // scaled order is always need confirm\n if (isScaledOrder) {\n return modal.show(scaledOrderConfirmDialogId, {\n order,\n symbolInfo,\n size: isMobile ? \"sm\" : \"md\",\n });\n }\n\n if (needConfirm) {\n return modal.show(orderConfirmDialogId, {\n order: formattedOrder,\n symbolInfo,\n });\n }\n\n return true;\n },\n // should catch validate error first, then submit\n (errors: OrderValidationResult) => {\n // slippage error message is not show input tooltip, so we need to manually show it by toast\n if (errors.slippage) {\n toast.error(t(\"orderEntry.slippage.error.max\"));\n }\n\n // when switch order type, validated not changed, so we need to set it to true\n setErrorMsgVisible(true);\n\n return Promise.reject();\n },\n )\n .then(() => {\n // validate success, submit order\n return submit({ resetOnSuccess: false }).then((result: any) => {\n if (!result.success && result.message) {\n toast.error(result.message);\n } else if (result.success && isScaledOrder) {\n const message = getScaledPlaceOrderMessage(result);\n if (message) {\n toast.success(message);\n }\n }\n });\n })\n .catch((error) => {\n // submit order error\n if (error?.message) {\n toast.error(error.message);\n // toast.error(`Error:${error.message}`);\n\n // if (error instanceof ApiError) {\n // toast.error(error.message);\n }\n });\n });\n\n const formattedMaxQty = useMemo(() => {\n return new Decimal(maxQty)\n .todp(symbolInfo.base_dp, Decimal.ROUND_DOWN)\n .toString();\n }, [maxQty, symbolInfo.base_dp]);\n\n const onMaxQtyConfirm = useCallback(() => {\n setOrderValue(\"order_quantity\", formattedMaxQty);\n // submit order when order_quantity updated\n requestAnimationFrame(() => {\n onSubmit();\n });\n setMaxQtyConfirmOpen(false);\n }, [setOrderValue, formattedMaxQty]);\n\n const validateSubmit = async () => {\n // show a prompt reminding the user. If the user confirms, automatically disable Reduce Only and proceed with the action.\n if (formattedOrder.reduce_only && maxQty === 0) {\n return modal.confirm({\n title: t(\"orderEntry.reduceOnly.reminder\"),\n content: t(\"orderEntry.reduceOnly.reminder.content\"),\n okLabel: t(\"orderEntry.placeOrderNow\"),\n onOk: async () => {\n setOrderValue(\"reduce_only\", false);\n // submit order when reduce only updated\n requestAnimationFrame(() => {\n props.resetMetaState();\n onSubmit();\n });\n return Promise.resolve(true);\n },\n onCancel: async () => {\n return Promise.resolve(false);\n },\n });\n } else if (maxQty > 0 && Number(formattedOrder.order_quantity) > maxQty) {\n setMaxQtyConfirmOpen(true);\n } else {\n onSubmit();\n }\n };\n\n const onShowTPSLAdvanced = () => {\n helper.validate().then(\n () => {\n setShowTPSLAdvanced(true);\n },\n (errors) => {\n const tpslKey = new Set([\"tp_trigger_price\", \"sl_trigger_price\"]);\n if (Object.keys(errors).every((key: string) => tpslKey.has(key))) {\n setShowTPSLAdvanced(true);\n }\n },\n );\n // modal.show(TPSLAdvancedDialogId, {\n // order: formattedOrder,\n // setOrderValue: setOrderValue,\n // });\n // setShowTPSLAdvanced(true);\n };\n\n const onSubmitAdvancedTPSL = (order: OrderlyOrder) => {\n if (order.side !== formattedOrder.side) {\n setOrderValue(\"side\", order.side);\n }\n setOrderValues({\n position_type: order.position_type,\n tp_order_type: order.tp_order_type,\n tp_pnl: order.tp_pnl,\n tp_offset: order.tp_offset,\n tp_offset_percentage: order.tp_offset_percentage,\n tp_ROI: order.tp_ROI,\n tp_trigger_price: order.tp_trigger_price,\n tp_order_price: order.tp_order_price,\n sl_order_type: order.sl_order_type,\n sl_trigger_price: order.sl_trigger_price,\n sl_order_price: order.sl_order_price,\n sl_pnl: order.sl_pnl,\n sl_offset: order.sl_offset,\n sl_offset_percentage: order.sl_offset_percentage,\n sl_ROI: order.sl_ROI,\n });\n setShowTPSLAdvanced(false);\n setHasAdvancedTPSLResult(true);\n };\n\n const onDeleteAdvancedTPSL = () => {\n setHasAdvancedTPSLResult(false);\n setOrderValues({\n tp_trigger_price: undefined,\n tp_order_price: undefined,\n tp_order_type: OrderType.MARKET,\n sl_trigger_price: undefined,\n sl_order_price: undefined,\n sl_order_type: OrderType.MARKET,\n tp_pnl: undefined,\n sl_pnl: undefined,\n position_type: PositionType.FULL,\n });\n };\n\n useEffect(() => {\n setHasAdvancedTPSLResult(false);\n }, [props.symbol]);\n\n const showReduceOnlySection =\n (isMobile &&\n formattedOrder.order_type !== OrderType.LIMIT &&\n formattedOrder.order_type !== OrderType.MARKET) ||\n !isMobile;\n\n const showSoundSection =\n Boolean(notification?.orderFilled?.media) &&\n (notification?.orderFilled?.displayInOrderEntry ?? true);\n\n const additionalInfoProps: AdditionalInfoProps = {\n pinned,\n setPinned,\n needConfirm,\n setNeedConfirm,\n hidden,\n setHidden,\n onValueChange: setOrderValue,\n orderTypeExtra: formattedOrder[\"order_type_ext\"],\n showExtra:\n formattedOrder[\"order_type\"] === OrderType.LIMIT && !props.tpslSwitch,\n };\n // Additional info (fok,ioc、post only, order confirm hidden)\n const extraButton = !pinned && (\n <AdditionalConfigButton {...additionalInfoProps} />\n );\n\n return (\n <OrderEntryProvider\n errors={errors}\n errorMsgVisible={errorMsgVisible}\n symbolInfo={symbolInfo}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n getErrorMsg={getErrorMsg}\n setOrderValue={setOrderValue}\n setOrderValues={setOrderValues}\n currentFocusInput={currentFocusInput.current}\n priceInputRef={props.priceInputRef}\n priceInputContainerRef={props.priceInputContainerRef}\n triggerPriceInputRef={props.triggerPriceInputRef}\n activatedPriceInputRef={props.activatedPriceInputRef}\n lastQuantityInputType={props.lastQuantityInputType}\n leverage={props.symbolLeverage}\n >\n <MaxQtyConfirm\n open={maxQtyConfirmOpen}\n onOpenChange={setMaxQtyConfirmOpen}\n maxQty={formattedMaxQty}\n onConfirm={onMaxQtyConfirm}\n base={symbolInfo.base}\n />\n <div\n className={\"oui-space-y-2 oui-text-base-contrast-54 xl:oui-space-y-3\"}\n ref={props.containerRef}\n >\n <OrderEntryHeader\n symbol={props.symbol}\n canTrade={props.canTrade}\n side={side}\n order_type={formattedOrder.order_type!}\n setOrderValue={setOrderValue}\n symbolLeverage={props.symbolLeverage}\n />\n\n <Available\n currentLtv={currentLtv}\n canTrade={props.canTrade}\n quote={symbolInfo?.quote}\n freeCollateral={freeCollateral}\n />\n\n <OrderInput\n values={formattedOrder}\n priceInputContainerWidth={props.priceInputContainerWidth}\n fillMiddleValue={fillMiddleValue}\n bbo={{\n bboStatus,\n bboType,\n onBBOChange,\n toggleBBO,\n }}\n />\n\n <QuantitySlider\n canTrade={props.canTrade}\n side={props.side}\n order_quantity={formattedOrder.order_quantity}\n maxQty={maxQty}\n />\n\n {/* Submit button */}\n <ThrottledButton\n fullWidth\n id={\"order-entry-submit-button\"}\n // color={side === OrderSide.BUY ? \"buy\" : \"sell\"}\n data-type={OrderSide.BUY}\n className={cn(\n side === OrderSide.BUY\n ? \"orderly-order-entry-submit-button-buy oui-bg-success-darken hover:oui-bg-success-darken/80 active:oui-bg-success-darken/80\"\n : \"orderly-order-entry-submit-button-sell oui-bg-danger-darken hover:oui-bg-danger-darken/80 active:oui-bg-danger-darken/80\",\n )}\n onClick={validateSubmit}\n loading={props.isMutating}\n disabled={!props.canTrade}\n >\n {buttonLabel}\n </ThrottledButton>\n\n {/* Asset info */}\n <AssetInfo\n canTrade={props.canTrade}\n quote={symbolInfo.quote}\n estLiqPrice={props.estLiqPrice}\n estLeverage={props.estLeverage}\n currentLeverage={props.currentLeverage}\n slippage={slippage}\n dp={symbolInfo.quote_dp}\n setSlippage={setSlippage}\n estSlippage={props.estSlippage}\n orderType={formattedOrder.order_type!}\n disableFeatures={disableFeatures}\n symbol={props.symbol}\n />\n\n <Divider className=\"oui-w-full\" />\n\n {/* TP SL switch and content */}\n {hasAdvancedTPSLResult ? (\n <AdvancedTPSLResult\n order={formattedOrder}\n symbolInfo={props.symbolInfo}\n errors={validated ? errors : null}\n onEdit={() => {\n setShowTPSLAdvanced(true);\n }}\n onDelete={() => {\n onDeleteAdvancedTPSL();\n }}\n />\n ) : (\n <OrderTPSL\n // onCancelTPSL={props.cancelTP_SL}\n // onEnableTP_SL={props.enableTP_SL}\n quote_dp={props.symbolInfo.quote_dp}\n switchState={props.tpslSwitch}\n onSwitchChanged={props.setTpslSwitch}\n orderType={formattedOrder.order_type!}\n errors={\n validated || isSlPriceWarning\n ? { ...errors, ...props.slPriceError }\n : null\n }\n setOrderValue={setOrderValue}\n reduceOnlyChecked={formattedOrder.reduce_only ?? false}\n onReduceOnlyChange={(checked) => {\n setOrderValue(\"reduce_only\", checked);\n }}\n values={{\n position_type:\n formattedOrder.position_type ?? PositionType.PARTIAL,\n tp: {\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 sl: {\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 showTPSLAdvanced={onShowTPSLAdvanced}\n onChange={(key, value) => {\n setOrderValue(key, value);\n }}\n />\n )}\n\n {showReduceOnlySection && (\n <Flex justify={\"between\"} itemAlign={\"center\"} className=\"oui-mt-2\">\n <ReduceOnlySwitch\n checked={formattedOrder.reduce_only ?? false}\n onCheckedChange={(checked) => {\n setOrderValue(\"reduce_only\", checked);\n }}\n />\n {!showSoundSection && extraButton}\n </Flex>\n )}\n {showSoundSection && (\n <Flex\n justify={\"between\"}\n itemAlign={\"center\"}\n className=\"!oui-mt-0 xl:!oui-mt-3\"\n >\n <Flex itemAlign={\"center\"} gapX={1}>\n <Switch\n className=\"oui-h-[14px]\"\n id={soundAlertId}\n checked={soundAlert}\n onCheckedChange={(checked) => setSoundAlert(checked)}\n />\n <label htmlFor={soundAlertId} className={\"oui-text-xs\"}>\n {t(\"portfolio.setting.soundAlerts\")}\n </label>\n </Flex>\n {extraButton}\n </Flex>\n )}\n {!showSoundSection &&\n isMobile &&\n (formattedOrder.order_type == OrderType.LIMIT ||\n formattedOrder.order_type == OrderType.MARKET) &&\n !formattedOrder.reduce_only &&\n !pinned && (\n <Flex className=\"oui-w-full\" justify={\"end\"}>\n {extraButton}\n </Flex>\n )}\n {/* Additional info (fok,ioc、post only, order confirm hidden) */}\n {pinned && (\n <Box p={2} r={\"md\"} intensity={700} position={\"relative\"}>\n <AdditionalInfo {...additionalInfoProps} />\n <PinButton\n onClick={() => {\n setPinned(false);\n }}\n className={\"oui-group oui-absolute oui-right-2 oui-top-2\"}\n data-testid=\"oui-testid-orderEntry-pinned-button\"\n />\n </Box>\n )}\n </div>\n\n <SimpleSheet\n open={showTPSLAdvanced}\n onOpenChange={setShowTPSLAdvanced}\n classNames={{\n body: \"oui-h-full oui-pb-0 oui-border-none\",\n overlay: \"!oui-bg-base-10/60\",\n content: cn(\n \"oui-rounded-[16px] oui-border-none !oui-p-0\",\n isMobile\n ? \"oui-inset-y-0 oui-right-0 oui-w-[280px]\"\n : \"!oui-bottom-[40px] oui-right-3 oui-top-[44px] !oui-h-auto oui-w-[360px]\",\n ),\n }}\n contentProps={{ side: \"right\", closeable: false }}\n >\n <TPSLAdvancedWidget\n setOrderValue={setOrderValue}\n order={formattedOrder as OrderlyOrder}\n onSubmit={onSubmitAdvancedTPSL}\n onClose={() => {\n setShowTPSLAdvanced(false);\n }}\n symbolLeverage={props.symbolLeverage}\n />\n </SimpleSheet>\n </OrderEntryProvider>\n );\n};\n","import { useState } from \"react\";\nimport {\n PopoverContent,\n PopoverRoot,\n PopoverTrigger,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AdditionalInfo, AdditionalInfoProps } from \"./additionalInfo\";\n\nexport function AdditionalConfigButton(props: AdditionalInfoProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <PopoverRoot open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n data-testid=\"oui-testid-orderEntry-additional-button\"\n onClick={() => {\n setOpen(true);\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-white/[.36] hover:oui-fill-white/80\"\n >\n <path\n d=\"M3.332 2.665a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V3.332a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V3.332a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V3.332a.667.667 0 0 0-.667-.667zm-8 4a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V7.332a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V7.332a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667V7.332a.667.667 0 0 0-.667-.667zm-8 4a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667v-1.333a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667v-1.333a.667.667 0 0 0-.667-.667zm4 0a.667.667 0 0 0-.667.667v1.333c0 .368.299.667.667.667h1.333a.667.667 0 0 0 .667-.667v-1.333a.667.667 0 0 0-.667-.667z\"\n // fill=\"#fff\"\n // fillOpacity={open ? 0.8 : 0.36}\n />\n </svg>\n </button>\n </PopoverTrigger>\n <PopoverContent side={\"top\"} align={\"end\"} className={\"oui-w-[230px]\"}>\n <AdditionalInfo {...props} />\n </PopoverContent>\n </PopoverRoot>\n );\n}\n","import { FC, useEffect } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderlyOrder, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Checkbox, cn, Divider, Flex, Switch } from \"@kodiak-finance/orderly-ui\";\n\nexport type AdditionalInfoProps = {\n pinned: boolean;\n setPinned: (value: boolean) => void;\n needConfirm: boolean;\n setNeedConfirm: (value: boolean) => void;\n hidden: boolean;\n setHidden: (value: boolean) => void;\n onValueChange?: (key: keyof OrderlyOrder, value: any) => void;\n orderTypeExtra?: OrderType;\n showExtra?: boolean;\n};\n\nexport const AdditionalInfo: FC<AdditionalInfoProps> = (props) => {\n const { pinned, orderTypeExtra } = props;\n const { t } = useTranslation();\n\n const onTypeToggle = (type: OrderType) => (checked: boolean) => {\n if (props.onValueChange) {\n props.onValueChange(\n \"order_type_ext\" as keyof OrderlyOrder,\n checked ? type : \"\",\n // orderTypeExtra === type ? \"\" : type\n );\n }\n };\n\n useEffect(() => {\n props.onValueChange?.(\"visible_quantity\", props.hidden ? 0 : 1);\n }, [props.hidden]);\n\n return (\n <div className={\"oui-text-base-contrast-54\"}>\n <Flex\n justify={pinned ? \"start\" : \"between\"}\n mb={3}\n width={pinned ? \"unset\" : \"100%\"}\n className=\"oui-gap-x-2 md:oui-gap-x-3\"\n wrap=\"wrap\"\n gapY={1}\n >\n <Flex itemAlign={\"center\"}>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-postOnly-checkBox\"\n id={\"toggle_order_post_only\"}\n className=\"oui-peer\"\n color={\"white\"}\n variant={\"radio\"}\n disabled={!props.showExtra}\n checked={orderTypeExtra === OrderType.POST_ONLY}\n onCheckedChange={onTypeToggle(OrderType.POST_ONLY)}\n />\n <label\n htmlFor={\"toggle_order_post_only\"}\n className={cn(\n \"oui-ml-1 oui-text-2xs peer-data-[disabled]:oui-text-base-contrast-20\",\n \"oui-whitespace-nowrap oui-break-normal\",\n )}\n >\n {t(\"orderEntry.orderType.postOnly\")}\n </label>\n </Flex>\n <Flex itemAlign={\"center\"}>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-ioc-checkBox\"\n id={\"toggle_order_iov\"}\n color={\"white\"}\n className=\"oui-peer\"\n variant={\"radio\"}\n checked={orderTypeExtra === OrderType.IOC}\n onCheckedChange={onTypeToggle(OrderType.IOC)}\n disabled={!props.showExtra}\n />\n <label\n htmlFor={\"toggle_order_iov\"}\n className={cn(\n \"oui-ml-1 oui-text-2xs peer-data-[disabled]:oui-text-base-contrast-20\",\n \"oui-whitespace-nowrap oui-break-normal\",\n )}\n >\n {t(\"orderEntry.orderType.ioc\")}\n </label>\n </Flex>\n <Flex itemAlign={\"center\"}>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-fox-checkBox\"\n id={\"toggle_order_fok\"}\n color={\"white\"}\n variant={\"radio\"}\n className=\"oui-peer\"\n checked={orderTypeExtra === OrderType.FOK}\n onCheckedChange={onTypeToggle(OrderType.FOK)}\n disabled={!props.showExtra}\n />\n <label\n htmlFor={\"toggle_order_fok\"}\n className={cn(\n \"oui-ml-1 oui-text-2xs peer-data-[disabled]:oui-text-base-contrast-20\",\n \"oui-whitespace-nowrap oui-break-normal\",\n )}\n >\n {t(\"orderEntry.orderType.fok\")}\n </label>\n </Flex>\n </Flex>\n\n <Flex gapX={6}>\n <Flex>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-orderConfirm-checkBox\"\n id={\"toggle_order_confirm\"}\n color={\"white\"}\n checked={props.needConfirm}\n onCheckedChange={(checked) => {\n props.setNeedConfirm(!!checked);\n }}\n />\n <label\n htmlFor={\"toggle_order_confirm\"}\n className={\"oui-ml-1 oui-text-2xs\"}\n >\n {t(\"orderEntry.orderConfirm\")}\n </label>\n </Flex>\n <Flex>\n <Checkbox\n data-testid=\"oui-testid-orderEntry-hidden-checkBox\"\n id={\"toggle_order_hidden\"}\n color={\"white\"}\n checked={props.hidden}\n onCheckedChange={(checked: boolean) => {\n props.setHidden(checked);\n }}\n />\n <label\n htmlFor={\"toggle_order_hidden\"}\n className={\"oui-ml-1 oui-text-2xs\"}\n >\n {t(\"orderEntry.hidden\")}\n </label>\n </Flex>\n </Flex>\n {!pinned && (\n <>\n <Divider className={\"oui-my-3\"} />\n <Flex>\n <Switch\n data-testid=\"oui-testid-orderEntry-additional-keepVisible-switch\"\n id={\"toggle_order_keep_visible\"}\n onCheckedChange={(checked) => {\n props.setPinned(checked);\n }}\n />\n <label\n htmlFor={\"toggle_order_keep_visible\"}\n className={\"oui-ml-1 oui-text-2xs\"}\n >\n {t(\"orderEntry.keepVisible\")}\n </label>\n </Flex>\n </>\n )}\n </div>\n );\n};\n","import { HTMLAttributes, useState } from \"react\";\n\nconst defaultPath =\n \"M10.007 1.302a.74.74 0 0 0-.486.214c-1.033.989-1.349 1.815-.972 2.948-.88.675-1.437.84-2.536.84-1.503 0-2.484.182-3.152.85v.02a1.583 1.583 0 0 0 0 2.248l1.867 1.882-3.181 3.18c-.26.26-.28.696-.02.956.261.26.699.26.959 0l3.193-3.194 1.87 1.861a1.585 1.585 0 0 0 2.25 0h.02c.668-.667.854-1.523.854-3.144 0-1.03.212-1.758.852-2.523 1.233.361 1.95.015 2.961-.995a.68.68 0 0 0 .188-.48c0-.234-.06-.593-.209-1.04a5.34 5.34 0 0 0-1.312-2.103 5.35 5.35 0 0 0-2.104-1.312c-.448-.15-.808-.208-1.042-.208\";\n\nexport const PinButton = (props: HTMLAttributes<HTMLButtonElement>) => {\n const [path, setPath] = useState(defaultPath);\n return (\n <button {...props}>\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n onMouseEnter={() => {\n setPath(\n 'M10.008 1.302a.74.74 0 0 0-.486.214c-1.033.989-1.349 1.815-.972 2.948-.88.675-1.437.84-2.536.84-1.503 0-2.484.182-3.152.85v.02a1.583 1.583 0 0 0 0 2.248l1.867 1.882-3.181 3.18c-.26.26-.28.696-.02.956.261.26.699.26.959 0l3.193-3.194 1.87 1.861a1.585 1.585 0 0 0 2.25 0h.02c.668-.667.854-1.523.854-3.144 0-1.03.212-1.758.853-2.523 1.232.361 1.95.015 2.96-.995a.68.68 0 0 0 .188-.48c0-.234-.06-.593-.209-1.04a5.34 5.34 0 0 0-1.312-2.103A5.35 5.35 0 0 0 11.05 1.51c-.448-.15-.808-.208-1.042-.208m.258 1.37c.708.131 1.421.6 1.93 1.107.507.508.94 1.13 1.119 1.945-.636.61-1.026.658-1.662.323a.67.67 0 0 0-.779.117c-1.214 1.213-1.533 2.314-1.533 3.8 0 1.292-.076 1.773-.48 2.206-.113.123-.27.104-.374 0L3.799 7.486a.24.24 0 0 1-.017-.34c.239-.29.769-.515 2.226-.514 1.742.001 2.668-.448 3.812-1.52a.67.67 0 0 0 .125-.77c-.343-.686-.29-1.047.321-1.67\"',\n );\n }}\n onMouseLeave={() => {\n setPath(defaultPath);\n }}\n className=\"oui-text-primary-darken\"\n >\n <path d={path} />\n </svg>\n </button>\n );\n};\n","import { SVGProps } 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 OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport { Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport function AdvancedTPSLResult(props: {\n order: Partial<OrderlyOrder>;\n symbolInfo: API.SymbolExt;\n errors: OrderValidationResult | null;\n onEdit: () => void;\n onDelete: () => void;\n}) {\n const { order: formattedOrder, symbolInfo, onEdit, onDelete, errors } = props;\n\n const { getErrorMsg } = useOrderEntryFormErrorMsg(errors);\n const { t } = useTranslation();\n\n const renderTp = () => {\n const error = getErrorMsg(\"tp_trigger_price\");\n if (formattedOrder.tp_trigger_price || formattedOrder.tp_order_price) {\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full\"\n gap={4}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n gapY={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpTriggerPrice\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n className=\"oui-text-base-contrast\"\n dp={symbolInfo.quote_dp}\n >\n {formattedOrder.tp_trigger_price ?? \"\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.tpOrderPrice\")}</Text>\n {formattedOrder.tp_order_type === OrderType.LIMIT ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n className=\"oui-text-base-contrast\"\n dp={symbolInfo.quote_dp}\n >\n {formattedOrder.tp_order_price ?? \"\"}\n </Text.numeral>\n ) : (\n <Text className=\"oui-text-base-contrast\">Market</Text>\n )}\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.totalEstTpPnl\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n coloring\n dp={2}\n >\n {Number(formattedOrder.tp_pnl)}\n </Text.numeral>\n </Flex>\n </Flex>\n {error && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"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\">{error}</Text>\n </Flex>\n )}\n </Flex>\n );\n }\n return null;\n };\n\n const renderSl = () => {\n if (formattedOrder.sl_trigger_price || formattedOrder.sl_order_price) {\n const error = getErrorMsg(\"sl_trigger_price\");\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full\"\n gap={4}\n >\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n justify={\"between\"}\n gapY={1}\n className=\"oui-w-full\"\n >\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slTriggerPrice\")}</Text>\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n className=\"oui-text-base-contrast\"\n dp={symbolInfo.quote_dp}\n >\n {formattedOrder.sl_trigger_price ?? \"\"}\n </Text.numeral>\n </Flex>\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.slOrderPrice\")}</Text>\n {formattedOrder.sl_order_type === OrderType.LIMIT ? (\n <Text.numeral\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n className=\"oui-text-base-contrast\"\n dp={symbolInfo.quote_dp}\n >\n {formattedOrder.sl_order_price ?? \"\"}\n </Text.numeral>\n ) : (\n <Text className=\"oui-text-base-contrast\">Market</Text>\n )}\n </Flex>\n\n <Flex justify={\"between\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.totalEstSlPnl\")}</Text>\n <Text.numeral\n coloring\n suffix={\n <Text className=\"oui-ml-1 oui-text-base-contrast-36\">\n {symbolInfo.quote}\n </Text>\n }\n dp={2}\n >\n {Number(formattedOrder.sl_pnl)}\n </Text.numeral>\n </Flex>\n {error && (\n <Flex\n justify={\"start\"}\n itemAlign={\"start\"}\n gap={2}\n className=\"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\">{error}</Text>\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n }\n return null;\n };\n\n return (\n <Flex\n direction={\"column\"}\n itemAlign={\"start\"}\n className=\"oui-w-full oui-text-2xs\"\n gap={4}\n >\n <Flex justify={\"between\"} itemAlign={\"start\"} className=\"oui-w-full\">\n <Text>{t(\"common.tpsl\")}</Text>\n <Flex gap={2}>\n <DeleteIcon\n size={12}\n className=\"oui-cursor-pointer oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n opacity={1}\n onClick={onDelete}\n />\n <EditIcon\n size={12}\n className=\"oui-cursor-pointer oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n onClick={onEdit}\n />\n </Flex>\n </Flex>\n <Flex justify={\"between\"} itemAlign={\"start\"} className=\"oui-w-full\">\n <Text>{t(\"tpsl.mode\")}</Text>\n <Text className=\"oui-text-base-contrast\">\n {formattedOrder.position_type === PositionType.FULL\n ? t(\"tpsl.fullPosition\")\n : t(\"tpsl.partialPosition\")}\n </Text>\n </Flex>\n {renderTp()}\n {renderSl()}\n\n <Divider className=\"oui-mb-2 oui-w-full\" />\n </Flex>\n );\n}\n\ninterface IconProps extends SVGProps<SVGSVGElement> {\n size: number;\n}\nconst DeleteIcon: React.FC<IconProps> = (props) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={props.size}\n height={props.size}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M5.99903 0.976562C5.44653 0.976562 4.99903 1.42406 4.99903 1.97656H2.49902C2.22302 1.97656 1.99902 2.20056 1.99902 2.47656C1.99902 2.75256 2.22302 2.97656 2.49902 2.97656H9.49903C9.77503 2.97656 9.99903 2.75256 9.99903 2.47656C9.99903 2.20056 9.77503 1.97656 9.49903 1.97656H6.99903C6.99903 1.42406 6.55153 0.976562 5.99903 0.976562ZM2.49902 3.97655V8.97654C2.49902 10.0715 3.40152 10.961 4.49903 10.961L7.51453 10.9765C8.61203 10.9765 9.49903 10.074 9.49903 8.97654V3.97655H2.49902ZM4.99903 5.47655C5.27503 5.47655 5.49903 5.70055 5.49903 5.97655V8.97654C5.49903 9.25254 5.27503 9.47654 4.99903 9.47654C4.72303 9.47654 4.49903 9.25254 4.49903 8.97654V5.97655C4.49903 5.70055 4.72303 5.47655 4.99903 5.47655ZM6.99903 5.47655C7.27503 5.47655 7.49903 5.70055 7.49903 5.97655V8.97654C7.49903 9.25254 7.27503 9.47654 6.99903 9.47654C6.72303 9.47654 6.49903 9.25254 6.49903 8.97654V5.97655C6.49903 5.70055 6.72303 5.47655 6.99903 5.47655Z\" />\n </svg>\n );\n};\n\nconst EditIcon: React.FC<IconProps> = (props) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 12 12\"\n width={props.size}\n height={props.size}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M8.49779 0.976562C8.36529 0.976562 8.23229 1.02357 8.13829 1.11707C7.86029 1.39507 6.85979 2.39558 6.63779 2.61808L2.13529 7.12059L1.63479 7.62059C1.56529 7.69059 1.52929 7.78958 1.50979 7.88658L1.00979 10.3881C0.939788 10.7381 1.23779 11.0361 1.58779 10.9666C1.90079 10.9036 3.77679 10.5286 4.08929 10.4661C4.18629 10.4466 4.28529 10.4106 4.35529 10.3411L4.85529 9.84059L9.35779 5.33808C9.58029 5.11608 10.5808 4.11506 10.8588 3.83756C10.9523 3.74356 10.9993 3.61056 10.9993 3.47806C10.9993 2.65956 10.7908 2.07456 10.3583 1.63306C9.92179 1.18756 9.33879 0.976562 8.49779 0.976562ZM8.69479 1.98606C9.14629 2.01256 9.43879 2.11608 9.63929 2.32108C9.84429 2.53008 9.97379 2.82008 10.0018 3.26258C9.72779 3.53608 9.32679 3.93106 8.99829 4.25956C8.60179 3.86306 8.11279 3.37407 7.71629 2.97757C8.04529 2.64907 8.42129 2.25956 8.69479 1.98606ZM6.99729 3.69657L8.27929 4.97858L4.49579 8.76207L3.21379 7.48009L6.99729 3.69657ZM2.49479 8.19908L3.77679 9.48107L3.72979 9.52809C3.39979 9.59409 2.73329 9.73359 2.11929 9.85659L2.44779 8.24608L2.49479 8.19908Z\" />\n </svg>\n );\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, textVariants } from \"@kodiak-finance/orderly-ui\";\nimport { FeesWidget } from \"../fee\";\nimport { SlippageUI } from \"../slippage/slippage.ui\";\n\nexport function AssetInfo(props: {\n symbol: string;\n canTrade: boolean;\n quote: string;\n estLiqPrice: number | null;\n estLeverage: number | null;\n currentLeverage: number | null;\n slippage: string;\n dp: number;\n estSlippage: number | null;\n setSlippage: (slippage: string) => void;\n orderType: OrderType;\n disableFeatures?: (\"slippageSetting\" | \"feesInfo\")[];\n}) {\n const { canTrade, disableFeatures, orderType, symbol } = props;\n const { t } = useTranslation();\n\n return (\n <div className={\"oui-space-y-[2px] xl:oui-space-y-1\"}>\n <Flex justify={\"between\"}>\n <Text size={\"2xs\"}>{t(\"orderEntry.estLiqPrice\")}</Text>\n <Text.numeral\n unit={props.quote}\n size={\"2xs\"}\n dp={props.dp}\n className={\"oui-text-base-contrast-80\"}\n unitClassName={\"oui-ml-1 oui-text-base-contrast-36\"}\n >\n {canTrade ? (props.estLiqPrice ?? \"--\") : \"--\"}\n </Text.numeral>\n </Flex>\n\n {orderType === OrderType.MARKET &&\n !disableFeatures?.includes(\"slippageSetting\") && (\n <SlippageUI\n slippage={props.slippage}\n setSlippage={props.setSlippage}\n estSlippage={props.estSlippage}\n />\n )}\n\n {!disableFeatures?.includes(\"feesInfo\") && (\n <FeesWidget symbol={props.symbol} />\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { pick } from \"ramda\";\nimport {\n useFeeState,\n useRwaSymbolsInfoStore,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { EffectiveFeesWidget } from \"./effectiveFee\";\nimport { RegularFeesWidget } from \"./regularFee\";\n\nconst isEffective = (val?: unknown) =>\n typeof val !== \"undefined\" && val !== null;\n\nexport const FeesWidget: React.FC<{ symbol: string }> = ({ symbol }) => {\n const { refereeRebate, ...others } = useFeeState();\n const info = useRwaSymbolsInfoStore();\n const isRwa = info?.[symbol] !== undefined;\n const isEffectiveFee = isEffective(refereeRebate);\n return isEffectiveFee ? (\n <EffectiveFeesWidget\n taker={isRwa ? others.rwaEffectiveTakerFee : others.effectiveTakerFee}\n maker={isRwa ? others.rwaEffectiveMakerFee : others.effectiveMakerFee}\n />\n ) : (\n <RegularFeesWidget\n taker={isRwa ? others.rwaTakerFee : others.takerFee}\n maker={isRwa ? others.rwaMakerFee : others.makerFee}\n />\n );\n};\n","import React from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Flex,\n modal,\n Text,\n Tooltip,\n useModal,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport {\n RouterAdapter,\n useScaffoldContext,\n} from \"@kodiak-finance/orderly-ui-scaffold\";\nimport { EffectiveFee } from \"./icons\";\n\nconst EffectiveFeeBody: React.FC<{\n routerAdapter: RouterAdapter | undefined;\n onClose?: () => void;\n}> = ({ routerAdapter, onClose }) => {\n const { t } = useTranslation();\n return (\n <Text size=\"2xs\" className=\"oui-whitespace-normal oui-break-words\">\n {t(\"portfolio.feeTier.effectiveFee.tooltip\")}{\" \"}\n <a\n href=\"/rewards/affiliate\"\n onClick={(e) => {\n e.preventDefault();\n routerAdapter?.onRouteChange({\n href: \"/rewards/affiliate\",\n name: t(\"portfolio.feeTier.effectiveFee.tooltipLink\"),\n });\n onClose?.();\n }}\n className=\"oui-cursor-pointer oui-border-none oui-bg-transparent oui-p-0 oui-text-2xs oui-underline hover:oui-text-base-contrast-80\"\n >\n {t(\"portfolio.feeTier.effectiveFee.tooltipLink\")}\n </a>\n </Text>\n );\n};\n\nconst EffectiveFeeMobileContent: React.FC<{\n routerAdapter: RouterAdapter | undefined;\n}> = ({ routerAdapter }) => {\n const { hide } = useModal();\n return <EffectiveFeeBody routerAdapter={routerAdapter} onClose={hide} />;\n};\n\nconst EffectiveFeeSection: React.FC<{\n routerAdapter: RouterAdapter | undefined;\n}> = (props) => {\n const { routerAdapter } = props;\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n if (isMobile) {\n return (\n <EffectiveFee\n onClick={() => {\n modal.dialog({\n size: \"sm\",\n title: t(\"common.tips\"),\n content: (\n <EffectiveFeeMobileContent routerAdapter={routerAdapter} />\n ),\n });\n }}\n />\n );\n }\n return (\n <Tooltip\n content={<EffectiveFeeBody routerAdapter={routerAdapter} />}\n className=\"oui-p-1.5 oui-text-base-contrast-54\"\n >\n <EffectiveFee className={\"oui-cursor-pointer\"} />\n </Tooltip>\n );\n};\n\nexport const EffectiveFeeUI: React.FC<{ taker: string; maker: string }> = (\n props,\n) => {\n const { t } = useTranslation();\n const { routerAdapter } = useScaffoldContext();\n const { taker, maker } = props;\n\n const originalTrailingFees = (\n <Flex itemAlign=\"center\" justify=\"between\" width={\"100%\"} gap={1}>\n <Flex width={\"100%\"} itemAlign=\"center\" justify={\"between\"}>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"common.fees\")}\n </Text>\n <AuthGuard\n fallback={() => (\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.taker\")}: --% / {t(\"dmm.maker\")}: --%\n </Text>\n )}\n >\n <Flex gap={1}>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.taker\")}:\n </Text>\n <Text size=\"2xs\" className=\"oui-text-base-contrast-80\">\n {taker}\n </Text>\n <Text size=\"2xs\">/</Text>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.maker\")}:\n </Text>\n <Text size=\"2xs\" className=\"oui-text-base-contrast-80\">\n {maker}\n </Text>\n </Flex>\n </AuthGuard>\n </Flex>\n <EffectiveFeeSection routerAdapter={routerAdapter} />\n </Flex>\n );\n\n return originalTrailingFees;\n};\n","import React, { useId } from \"react\";\n\nexport const EffectiveFee = React.forwardRef<\n SVGSVGElement,\n React.SVGAttributes<SVGSVGElement>\n>((props, ref) => {\n const linearId = useId();\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={14}\n height={14}\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n ref={ref}\n focusable={false}\n {...props}\n >\n <path\n d=\"M6.16411 1.53106C6.61974 1.07566 7.35888 1.07551 7.81442 1.53106L8.48833 2.20496C8.6797 2.39624 8.93064 2.51452 9.19755 2.54106L9.3132 2.54676H10.2662C10.9104 2.54691 11.4328 3.06926 11.4329 3.71343V4.66647C11.4329 4.97589 11.5559 5.27312 11.7747 5.49191L12.4492 6.16582C12.9047 6.62142 12.9047 7.36054 12.4492 7.81613L11.7753 8.49004L11.6972 8.57549C11.5272 8.78302 11.433 9.04426 11.4329 9.31491V10.2685L11.4272 10.3876C11.3715 10.9366 10.9348 11.373 10.3859 11.4289L10.2662 11.4352H9.3132L9.19755 11.4409C8.93066 11.4674 8.67969 11.5857 8.48833 11.777L7.81442 12.4509L7.72555 12.5306C7.29789 12.8795 6.68066 12.8794 6.25297 12.5306L6.16411 12.4509L5.4902 11.777C5.29887 11.5857 5.04786 11.4675 4.78097 11.4409L4.66533 11.4352H3.71171L3.59265 11.4289C3.04358 11.3731 2.60705 10.9367 2.55131 10.3876L2.54505 10.2685V9.31491C2.54499 9.04416 2.45089 8.78306 2.28072 8.57549L2.20325 8.49004L1.52934 7.81613C1.10213 7.38905 1.07534 6.71297 1.44902 6.25469L1.52934 6.16582L2.20382 5.49191C2.42248 5.27314 2.54505 4.97579 2.54505 4.66647V3.71343C2.54513 3.10945 3.00442 2.61221 3.59265 2.55246L3.71171 2.54676H4.66533L4.78097 2.54106C5.00968 2.51826 5.22694 2.4281 5.40475 2.28244L5.4902 2.20496L6.16411 1.53106ZM6.31507 3.02983C5.87756 3.46727 5.28401 3.71336 4.66533 3.71343H3.71171V4.66647C3.71171 5.28521 3.46614 5.87922 3.02869 6.31678L2.35421 6.99069L3.02812 7.6646C3.46577 8.10214 3.71164 8.69607 3.71171 9.31491V10.2685H4.66533C5.28396 10.2686 5.87757 10.5142 6.31507 10.9515L6.98898 11.6255L7.66289 10.9515C8.10045 10.5141 8.69446 10.2685 9.3132 10.2685H10.2662V9.31491C10.2663 8.69604 10.5127 8.10214 10.9504 7.6646L11.6243 6.99069L10.9498 6.31678C10.5122 5.8792 10.2662 5.28531 10.2662 4.66647V3.71343H9.3132C8.69438 3.71343 8.10047 3.46739 7.66289 3.02983L6.98898 2.35592L6.31507 3.02983ZM8.52934 4.64255C8.7571 4.41479 9.12639 4.41489 9.35421 4.64255C9.58202 4.87035 9.58202 5.23961 9.35421 5.46742L5.4657 9.35593C5.2379 9.58372 4.86863 9.58373 4.64083 9.35593C4.41318 9.12811 4.41308 8.75881 4.64083 8.53106L8.52934 4.64255ZM8.66435 7.83265C9.1245 7.83272 9.49777 8.2059 9.49777 8.66607C9.49769 9.12616 9.12445 9.49941 8.66435 9.49948C8.20419 9.49948 7.83101 9.12621 7.83094 8.66607C7.83094 8.20586 8.20415 7.83265 8.66435 7.83265ZM5.33126 4.49956C5.79141 4.49963 6.16468 4.87282 6.16468 5.33298C6.1646 5.79307 5.79136 6.16575 5.33126 6.16582C4.87111 6.16582 4.49793 5.79311 4.49785 5.33298C4.49785 4.87277 4.87106 4.49956 5.33126 4.49956Z\"\n fill={`url(#${linearId})`}\n />\n <defs>\n <linearGradient\n id={linearId}\n x1=\"12.7908\"\n y1=\"6.99084\"\n x2=\"1.1875\"\n y2=\"6.99084\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop stopColor=\"rgb(var(--oui-gradient-brand-start))\" offset={1} />\n </linearGradient>\n </defs>\n </svg>\n );\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n EffectiveFee.displayName = \"EffectiveFee\";\n}\n","import React from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { EffectiveFeeUI } from \"./effectiveFee.ui\";\n\nexport const EffectiveFeesWidget: React.FC<{ taker: string; maker: string }> = (\n props,\n) => {\n return <EffectiveFeeUI {...props} />;\n};\n","import React from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\n\nexport const RegularFeesUI: React.FC<{ taker: string; maker: string }> = (\n props,\n) => {\n const { t } = useTranslation();\n const { taker, maker } = props;\n\n const originalTrailingFees = (\n <Flex itemAlign=\"center\" justify=\"between\" width={\"100%\"} gap={1}>\n <Flex width={\"100%\"} itemAlign=\"center\" justify={\"between\"}>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"common.fees\")}\n </Text>\n <AuthGuard\n fallback={() => (\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.taker\")}: --% / {t(\"dmm.maker\")}: --%\n </Text>\n )}\n >\n <Flex gap={1}>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.taker\")}:\n </Text>\n <Text size=\"2xs\" className=\"oui-text-base-contrast-80\">\n {taker}\n </Text>\n <Text size=\"2xs\">/</Text>\n <Text className=\"oui-truncate\" size=\"2xs\">\n {t(\"dmm.maker\")}:\n </Text>\n <Text size=\"2xs\" className=\"oui-text-base-contrast-80\">\n {maker}\n </Text>\n </Flex>\n </AuthGuard>\n </Flex>\n </Flex>\n );\n\n return originalTrailingFees;\n};\n","import React from \"react\";\nimport { useFeeState } from \"@kodiak-finance/orderly-hooks\";\nimport { RegularFeesUI } from \"./regularFees.ui\";\n\nexport const RegularFeesWidget: React.FC<{ taker: string; maker: string }> = (\n props,\n) => {\n return <RegularFeesUI {...props} />;\n};\n","import { useRef } from \"react\";\nimport { useBoolean } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n EditIcon,\n Flex,\n Text,\n SimpleDialog,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { SlippageEditor } from \"./slippageEditor\";\n\nexport const SlippageCell = (props: {\n slippage: string;\n setSlippage: (slippage: string) => void;\n estSlippage: number | null;\n}) => {\n const { t } = useTranslation();\n const [open, { setTrue: setOpen, setFalse: setClose, toggle }] =\n useBoolean(false);\n\n const { isMobile } = useScreen();\n const slippageRef = useRef<{ getValue: () => number | undefined }>(null);\n\n const onConfirm = () => {\n const val = slippageRef.current?.getValue();\n\n props.setSlippage(!val ? \"1\" : val.toString());\n setClose();\n return Promise.resolve(true);\n };\n\n return (\n <>\n <SimpleDialog\n open={open}\n onOpenChange={toggle}\n title={t(\"common.settings\")}\n contentProps={{ size: isMobile ? \"xs\" : \"sm\" }}\n actions={{\n primary: {\n disabled: false,\n label: t(\"common.save\"),\n onClick: onConfirm,\n },\n secondary: {\n label: t(\"common.cancel\"),\n onClick: () => setClose(),\n },\n }}\n >\n <SlippageEditor\n ref={slippageRef}\n isMobile={isMobile}\n initialValue={props.slippage ? Number(props.slippage) : undefined}\n />\n </SimpleDialog>\n <Flex justify={\"between\"}>\n <Text size=\"2xs\">{t(\"orderEntry.slippage\")}</Text>\n <AuthGuard\n fallback={() => (\n <Text size=\"2xs\">\n {t(\"orderEntry.slippage.est\")}: -% / {t(\"common.max\")}: --%\n </Text>\n )}\n >\n <Flex gap={1}>\n <Text.numeral\n size=\"2xs\"\n rule=\"percentages\"\n prefix={`${t(\"orderEntry.slippage.est\")}: `}\n suffix={` / ${t(\"common.max\")}: `}\n >\n {props.estSlippage ?? 0}\n </Text.numeral>\n <button className=\"oui-text-2xs\" onClick={() => setOpen()}>\n <Flex className=\"oui-gap-0.5\" as=\"span\">\n <Text size=\"2xs\" className=\"oui-text-primary\">\n {`${props.slippage || \"-\"}%`}\n </Text>\n <EditIcon\n className=\"oui-text-primary oui-hidden md:oui-block\"\n size={12}\n opacity={1}\n />\n </Flex>\n </button>\n </Flex>\n </AuthGuard>\n </Flex>\n </>\n );\n};\n","import {\n FC,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n} from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n cn,\n ExclamationFillIcon,\n Flex,\n Input,\n inputFormatter,\n modal,\n Text,\n Tooltip,\n TooltipTrigger,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\ninterface SlippageProps {\n initialValue?: number;\n isMobile?: boolean;\n}\n\nconst options = [0.01, 0.05, 0.1];\n\nexport const SlippageEditor = forwardRef<\n { getValue: () => number | undefined },\n SlippageProps\n>((props, ref) => {\n const { t } = useTranslation();\n const [value, setValue] = useState<number>();\n const [customValue, setCustomValue] = useState(\"\");\n const [error, setError] = useState<string | undefined>(undefined);\n\n useImperativeHandle(ref, () => ({\n getValue: () =>\n customValue ? new Decimal(customValue)?.toNumber() : value,\n }));\n\n useEffect(() => {\n if (props.initialValue && !options.includes(props.initialValue!)) {\n setCustomValue(props.initialValue!.toString());\n } else {\n setValue(props.initialValue);\n }\n }, [props.initialValue, open]);\n\n const onClick = (val: number) => {\n setValue(val);\n setCustomValue(\"\");\n setError(undefined);\n };\n\n const onValueChange = (val: string) => {\n if (!val) {\n setCustomValue(val);\n return;\n }\n\n const d = new Decimal(val);\n setValue(undefined);\n if (d.gt(3)) {\n setCustomValue(\"3\");\n setError(t(\"orderEntry.slippage.error.exceed\"));\n } else {\n setCustomValue(val);\n setError(undefined);\n }\n };\n\n const toolTipButton = props.isMobile ? (\n <button\n onClick={() => {\n // setOpen(true)\n modal.alert({\n title: t(\"common.tips\"),\n message: <Text size=\"2xs\">{t(\"orderEntry.slippage.tips\")}</Text>,\n });\n }}\n >\n <ExclamationFillIcon className=\"oui-text-base-contrast-54\" size={16} />\n </button>\n ) : (\n <Tooltip\n // @ts-ignore\n content={\n <Text intensity={80} size=\"2xs\">\n {t(\"orderEntry.slippage.tips\")}\n </Text>\n }\n className=\"oui-w-[260px] oui-bg-base-6\"\n arrow={{ className: \"oui-fill-base-6\" }}\n >\n <TooltipTrigger>\n <ExclamationFillIcon className=\"oui-text-base-contrast-54\" size={16} />\n </TooltipTrigger>\n </Tooltip>\n );\n\n return (\n <div className=\"oui-text-2xs\">\n <Flex mb={2} gapX={1}>\n <Text size=\"xs\">{t(\"orderEntry.slippage\")}</Text>\n {toolTipButton}\n </Flex>\n <Flex gapX={2}>\n {options.map((item) => {\n const isActive = value === item;\n return (\n <SlippageItem\n key={item}\n value={item}\n isActive={isActive}\n onClick={() => {\n onClick(item);\n }}\n />\n );\n })}\n\n <Input\n suffix=\"%\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(2),\n ]}\n value={customValue}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-rounded-md oui-bg-base-6\",\n \"oui-h-[40px] oui-w-[74px]\",\n ),\n input: \"oui-text-base-contrast\",\n additional: \"oui-pl-1\",\n }}\n />\n </Flex>\n {!!error && (\n <Box mt={5} className=\"-oui-mb-5\">\n <Text size=\"2xs\" color=\"danger\">\n {error}\n </Text>\n </Box>\n )}\n </div>\n );\n});\n\ntype SlippageItemProps = {\n value: number;\n isActive: boolean;\n onClick: () => void;\n};\n\nconst SlippageItem: FC<SlippageItemProps> = ({ value, isActive, onClick }) => {\n return (\n <Flex\n intensity={600}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"md\"\n width={74}\n height={40}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive && \"oui-bg-primary-light\",\n )}\n onClick={onClick}\n >\n <Text size=\"sm\" intensity={80}>\n {value}%\n </Text>\n </Flex>\n );\n};\n","import { SlippageCell } from \"./components/slippageCell\";\n\nexport const SlippageUI = (props: {\n slippage: string;\n setSlippage: (slippage: string) => void;\n estSlippage: number | null;\n}) => {\n return <SlippageCell {...props} />;\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Flex,\n Tooltip,\n Text,\n InfoCircleIcon,\n AddCircleIcon,\n Button,\n modal,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { LTVRiskTooltipWidget } from \"../LTVRiskTooltip\";\n\ntype AvailableProps = {\n canTrade: boolean;\n currentLtv: number;\n freeCollateral: number;\n quote?: string;\n};\n\nexport const Available = (props: AvailableProps) => {\n const { canTrade, currentLtv, quote, freeCollateral } = props;\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const showLTV = useMemo(() => {\n return (\n typeof currentLtv === \"number\" &&\n !Number.isNaN(currentLtv) &&\n currentLtv > 0\n );\n }, [currentLtv]);\n\n return (\n <Flex itemAlign={\"center\"} justify={\"between\"}>\n <Text size={\"2xs\"}>{t(\"common.available\")}</Text>\n <Flex itemAlign={\"center\"} justify={\"center\"} gap={1}>\n {showLTV && (\n <Tooltip\n className={\"oui-bg-base-6 oui-p-2\"}\n content={<LTVRiskTooltipWidget />}\n >\n <InfoCircleIcon\n className={\"oui-cursor-pointer oui-text-warning oui-opacity-80\"}\n />\n </Tooltip>\n )}\n <Text.numeral\n unit={quote}\n size={\"2xs\"}\n className={\"oui-text-base-contrast-80\"}\n unitClassName={\"oui-ml-1 oui-text-base-contrast-54\"}\n dp={2}\n padding={false}\n >\n {canTrade ? freeCollateral : 0}\n </Text.numeral>\n <Button\n variant=\"text\"\n size=\"xs\"\n color=\"secondary\"\n className=\"oui-p-0 hover:oui-text-base-contrast-80\"\n onClick={() => {\n // TODO: when we plan to move modal IDs to a public package, we need to use the ID from the public package\n const handleDomId = isMobile\n ? \"DepositAndWithdrawWithSheetId\"\n : \"DepositAndWithdrawWithDialogId\";\n modal.show(handleDomId, {\n activeTab: \"deposit\",\n });\n }}\n >\n <AddCircleIcon opacity={1} />\n </Button>\n </Flex>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn, Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { removeTrailingZeros } from \"@kodiak-finance/orderly-utils\";\nimport type { LTVTooltipScriptReturn } from \"./LTVRiskTooltip.script\";\n\nconst calculateLTVColor = (val: number): string => {\n if (val >= 0 && val < 50) {\n return \"oui-text-success\";\n } else if (val >= 50 && val < 80) {\n return \"oui-text-warning\";\n } else if (val >= 80) {\n return \"oui-text-danger\";\n } else {\n return \"\";\n }\n};\n\nexport const LTVRiskTooltipUI: React.FC<LTVTooltipScriptReturn> = (props) => {\n const { t } = useTranslation();\n const {\n ltv_threshold,\n negative_usdc_threshold,\n isThresholdLoading,\n holdingData = [],\n currentLtv,\n onConvert,\n } = props;\n return (\n <Flex gap={1} className=\"oui-w-72 oui-max-w-72\" direction=\"column\">\n <Flex width={\"100%\"} justify=\"between\" itemAlign=\"center\">\n <Text intensity={36} size=\"xs\">\n {t(\"common.assets\")}\n </Text>\n <Text intensity={36} size=\"xs\">\n {t(\"transfer.deposit.collateralContribution\")}\n </Text>\n </Flex>\n {holdingData.map((asset, index) => {\n return (\n <Flex\n key={`item-${index}`}\n width={\"100%\"}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Text intensity={80} size=\"xs\">\n {asset.token}\n </Text>\n <Text\n size=\"xs\"\n intensity={80}\n className={cn(\n Number(asset.collateralContribution) < 0 && \"oui-text-warning\",\n )}\n >\n {removeTrailingZeros(asset.collateralContribution)}\n </Text>\n </Flex>\n );\n })}\n <Divider className=\"oui-w-full\" />\n <Flex width={\"100%\"} justify=\"between\" itemAlign=\"center\">\n <Text intensity={36} size=\"xs\">\n {t(\"transfer.LTV.currentLTV\")}\n </Text>\n <Text\n size=\"xs\"\n intensity={36}\n className={cn(\"oui-select-none\", calculateLTVColor(currentLtv))}\n >\n {currentLtv}%\n </Text>\n </Flex>\n <Text className=\"oui-py-2\" intensity={54} size=\"2xs\">\n {t(\"transfer.LTV.tooltip\", {\n threshold: isThresholdLoading ? \"-\" : ltv_threshold,\n usdcThreshold: isThresholdLoading ? \"-\" : negative_usdc_threshold,\n })}\n </Text>\n <Button\n fullWidth\n size={\"md\"}\n variant={\"outlined\"}\n color={\"secondary\"}\n onClick={onConvert}\n >\n {t(\"transfer.convert.convertAssets\")}\n </Button>\n </Flex>\n );\n};\n","import { useCallback } from \"react\";\nimport {\n useComputedLTV,\n useHoldingStream,\n useIndexPricesStream,\n useQuery,\n useAppStore,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { account } from \"@kodiak-finance/orderly-perp\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\n\nconst useConvertThreshold = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n { errorRetryCount: 3 },\n );\n return {\n ltv_threshold: new Decimal(data?.ltv_threshold ?? 0).mul(100).toNumber(),\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n\nexport const useLTVTooltipScript = () => {\n const { data: holdingList = [], isLoading: isHoldingLoading } =\n useHoldingStream();\n\n const {\n ltv_threshold,\n negative_usdc_threshold,\n isLoading: isThresholdLoading,\n } = useConvertThreshold();\n\n const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n const { getIndexPrice } = useIndexPricesStream();\n\n const holdingData = holdingList.map((item) => {\n const tokenInfo = tokensInfo?.find(({ token }) => token === item.token);\n\n // Use extracted function for index price calculation\n const indexPrice = getIndexPrice(item.token);\n\n // Calculate collateral ratio for this token\n const collateralRatio = tokenInfo\n ? account.collateralRatio({\n baseWeight: tokenInfo.base_weight ?? 0,\n discountFactor: tokenInfo.discount_factor ?? 0,\n collateralQty: item.holding,\n collateralCap: tokenInfo?.user_max_qty ?? item.holding,\n indexPrice: indexPrice,\n })\n : zero;\n\n // Calculate collateral contribution for this token\n const collateralContribution = account.collateralContribution({\n collateralQty: item.holding,\n collateralCap: tokenInfo?.user_max_qty ?? item.holding,\n collateralRatio: collateralRatio.toNumber(),\n indexPrice: indexPrice,\n });\n\n return {\n ...item,\n collateralContribution: collateralContribution,\n };\n });\n\n const currentLtv = useComputedLTV();\n\n const onConvert = useCallback(async () => {\n return modal.show(\"ConvertDialogId\");\n }, []);\n\n return {\n holdingData,\n isHoldingLoading,\n ltv_threshold,\n negative_usdc_threshold,\n isThresholdLoading,\n currentLtv: currentLtv,\n onConvert: onConvert,\n };\n};\n\nexport type LTVTooltipScriptReturn = ReturnType<typeof useLTVTooltipScript>;\n","import React from \"react\";\nimport { useLTVTooltipScript } from \"./LTVRiskTooltip.script\";\nimport { LTVRiskTooltipUI } from \"./LTVRiskTooltip.ui\";\n\nexport const LTVRiskTooltipWidget: React.FC = () => {\n const state = useLTVTooltipScript();\n return <LTVRiskTooltipUI {...state} />;\n};\n","import { FC, ReactNode, useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { usePositionStream } from \"@kodiak-finance/orderly-hooks\";\nimport { i18n, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n BBOOrderType,\n API,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport { OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport {\n Badge,\n Button,\n Checkbox,\n cn,\n Divider,\n Flex,\n Grid,\n registerSimpleDialog,\n Text,\n textVariants,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, getBBOType } from \"@kodiak-finance/orderly-utils\";\nimport { isBBOOrder } from \"../../utils\";\n\ntype OrderConfirmDialogProps = {\n order: OrderlyOrder;\n symbolInfo: API.SymbolExt;\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport const OrderConfirmDialog = (props: OrderConfirmDialogProps) => {\n const { symbolInfo, order, onConfirm, onCancel } = props;\n const { quote, quote_dp, base_dp } = symbolInfo;\n const { side, order_type, order_type_ext, level, symbol } = order;\n const { t } = useTranslation();\n const [{ rows: positions }] = usePositionStream(symbol);\n const position = positions?.[0];\n const positionQty = position?.position_qty;\n\n const [_, setNeedConfirm] = useLocalStorage(\"orderly_order_confirm\", 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\n const renderPrice = () => {\n if (\n order_type === OrderType.MARKET ||\n order_type === OrderType.STOP_MARKET\n ) {\n return <Text intensity={80}>{t(\"common.marketPrice\")}</Text>;\n }\n\n if (isBBOOrder({ order_type, order_type_ext })) {\n const bboType = getBBOType({\n type: order_type_ext!,\n side,\n level,\n });\n const label = {\n [BBOOrderType.COUNTERPARTY1]: t(\"orderEntry.bbo.counterparty1\"),\n [BBOOrderType.COUNTERPARTY5]: t(\"orderEntry.bbo.counterparty5\"),\n [BBOOrderType.QUEUE1]: t(\"orderEntry.bbo.queue1\"),\n [BBOOrderType.QUEUE5]: t(\"orderEntry.bbo.queue5\"),\n }[bboType!];\n\n return <Text intensity={80}>{label}</Text>;\n }\n\n return (\n <Text.numeral\n unit={quote}\n rule=\"price\"\n className=\"oui-text-base-contrast\"\n unitClassName=\"oui-text-base-contrast-36 oui-ml-1\"\n dp={quote_dp}\n padding={false}\n >\n {order.order_price}\n </Text.numeral>\n );\n };\n\n const renderTPSLPrice = ({\n price,\n isOrderPrice,\n isEnable,\n colorType,\n }: {\n price: string;\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.marketPrice\")}\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={quote_dp}\n padding={false}\n >\n {price}\n </Text.numeral>\n );\n };\n\n const renderTPSLQty = () => {\n if (!positionQty || !order.order_quantity) {\n return null;\n }\n let qty = new Decimal(order.order_quantity);\n if (order.position_type === PositionType.FULL) {\n qty = qty.plus(new Decimal(positionQty ?? 0));\n }\n return (\n <Flex justify={\"between\"}>\n <Text>\n {order.position_type === PositionType.FULL\n ? t(\"common.positionQty\")\n : t(\"common.orderQty\")}\n </Text>\n <Text.numeral\n rule={\"price\"}\n dp={base_dp}\n padding={false}\n className=\"oui-text-base-contrast\"\n >\n {qty.toNumber()}\n </Text.numeral>\n </Flex>\n );\n };\n\n const renderPriceAndTotal = () => {\n if (order_type === OrderType.TRAILING_STOP) {\n const { activated_price, callback_value, callback_rate } = order;\n\n const callbackView = callback_rate ? (\n <Flex justify={\"between\"}>\n <Text>{t(\"orderEntry.trailingRate\")}</Text>\n <Text className=\"oui-text-base-contrast\">{callback_rate}%</Text>\n </Flex>\n ) : (\n <OrderItem\n title={t(\"orderEntry.trailingValue\")}\n value={callback_value!}\n unit={quote}\n dp={quote_dp}\n />\n );\n return (\n <>\n {activated_price && (\n <OrderItem\n title={t(\"common.triggerPrice\")}\n value={activated_price!}\n unit={quote}\n dp={quote_dp}\n />\n )}\n {callbackView}\n </>\n );\n }\n\n return (\n <>\n <Flex justify={\"between\"}>\n <Text>{t(\"common.price\")}</Text>\n {renderPrice()}\n </Flex>\n <OrderItem\n title={t(\"common.estTotal\")}\n value={order.total}\n unit={quote}\n dp={quote_dp}\n />\n </>\n );\n };\n\n const header = (\n <Flex justify={\"between\"}>\n <Text.formatted rule={\"symbol\"} showIcon>\n {order.symbol}\n </Text.formatted>\n <Flex justify={\"end\"} gapX={1}>\n <OrderTypeTag type={order_type} />\n {side === OrderSide.BUY ? (\n <Badge color={\"buy\"} size={\"sm\"}>\n {t(\"common.buy\")}\n </Badge>\n ) : (\n <Badge color={\"sell\"} size={\"sm\"}>\n {t(\"common.sell\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n );\n\n const quantityItem = (\n <Flex justify={\"between\"}>\n <Text>{t(\"common.orderQty\")}</Text>\n <Text.numeral\n rule={\"price\"}\n dp={base_dp}\n padding={false}\n className=\"oui-text-base-contrast\"\n >\n {order.order_quantity}\n </Text.numeral>\n </Flex>\n );\n\n const triggerPriceItem = (order_type === OrderType.STOP_LIMIT ||\n (order_type === OrderType.STOP_MARKET && order.trigger_price)) && (\n <OrderItem\n title={t(\"common.trigger\")}\n value={order.trigger_price}\n unit={quote}\n dp={quote_dp}\n />\n );\n\n const tpslTriggerPrice = (order.tp_trigger_price ||\n order.sl_trigger_price) && (\n <>\n <Divider className=\"oui-my-4\" />\n <div\n className={textVariants({\n size: \"sm\",\n intensity: 54,\n className: \"oui-space-y-1 oui-w-full oui-flex oui-flex-col oui-gap-3\",\n })}\n >\n <Text className=\"oui-text-base-contrast\">{renderPositionType()}</Text>\n {renderTPSLQty()}\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 );\n\n const orderConfirmCheckbox = (\n <Flex gapX={1} pt={4} pb={5}>\n <Checkbox\n id=\"orderConfirm\"\n color={\"white\"}\n onCheckedChange={(checked) => {\n setNeedConfirm(!!!checked);\n }}\n />\n <label\n htmlFor=\"orderConfirm\"\n className={textVariants({\n size: \"xs\",\n intensity: 54,\n })}\n >\n {t(\"orderEntry.disableOrderConfirm\")}\n </label>\n </Flex>\n );\n\n const buttons = (\n <Grid cols={2} gapX={3}>\n <Button color={\"secondary\"} size={\"md\"} onClick={() => onCancel()}>\n {t(\"common.cancel\")}\n </Button>\n <Button size={\"md\"} onClick={() => onConfirm()}>\n {t(\"common.confirm\")}\n </Button>\n </Grid>\n );\n\n return (\n <>\n {header}\n <Divider className=\"oui-my-4\" />\n\n <div\n className={textVariants({\n size: \"sm\",\n intensity: 54,\n className: \"oui-space-y-1\",\n })}\n >\n {quantityItem}\n {triggerPriceItem}\n\n {renderPriceAndTotal()}\n </div>\n\n {tpslTriggerPrice}\n\n {orderConfirmCheckbox}\n\n {buttons}\n </>\n );\n};\n\ntype OrderItemProps = {\n title: ReactNode;\n value: string;\n unit: string;\n dp: number;\n};\n\nconst OrderItem: FC<OrderItemProps> = (props) => {\n const { title, value, unit, dp } = props;\n return (\n <Flex justify=\"between\">\n <Text>{title}</Text>\n <Text.numeral\n unit={unit}\n rule=\"price\"\n dp={dp}\n padding={false}\n className=\"oui-text-base-contrast\"\n unitClassName=\"oui-text-base-contrast-36 oui-ml-1\"\n >\n {value}\n </Text.numeral>\n </Flex>\n );\n};\n\nOrderConfirmDialog.displayName = \"OrderConfirmDialog\";\n\nconst OrderTypeTag = (props: { type: OrderType }) => {\n const { t } = useTranslation();\n const typeStr = useMemo(() => {\n switch (props.type) {\n case OrderType.LIMIT:\n return t(\"orderEntry.orderType.limit\");\n case OrderType.MARKET:\n return t(\"common.marketPrice\");\n case OrderType.STOP_LIMIT:\n return t(\"orderEntry.orderType.stopLimit\");\n case OrderType.STOP_MARKET:\n return t(\"orderEntry.orderType.stopMarket\");\n case OrderType.TRAILING_STOP:\n return t(\"orderEntry.orderType.trailingStop\");\n default:\n return \"\";\n }\n }, [props.type]);\n\n return (\n <Badge color={\"neutral\"} size={\"sm\"}>\n {typeStr}\n </Badge>\n );\n};\n\nconst Dialog = (\n props: Omit<OrderConfirmDialogProps, \"onCancel\" | \"onConfirm\"> & {\n close: () => void;\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n },\n) => {\n const { close, resolve, reject, ...rest } = props;\n\n return (\n <OrderConfirmDialog\n {...rest}\n onCancel={() => {\n reject();\n close();\n }}\n onConfirm={() => {\n resolve();\n close();\n }}\n />\n );\n};\n\nexport const orderConfirmDialogId = \"orderConfirm\";\n\nregisterSimpleDialog(orderConfirmDialogId, Dialog, {\n size: \"sm\",\n title: () => i18n.t(\"orderEntry.orderConfirm\"),\n});\n","import { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport {\n BBOOrderType,\n OrderLevel,\n OrderSide,\n OrderType,\n} from \"@kodiak-finance/orderly-types\";\n\nexport enum BBOStatus {\n ON = \"on\",\n OFF = \"off\",\n DISABLED = \"disabled\",\n}\n\n/**\n * if provide order_type, check order_type and order_type_ext, otherswise only check order_type_ext\n */\nexport function isBBOOrder(options: {\n order_type?: OrderType;\n order_type_ext?: OrderType;\n}) {\n const { order_type, order_type_ext } = options;\n\n const isBBO = [OrderType.ASK, OrderType.BID].includes(order_type_ext!);\n\n if (order_type) {\n return order_type === OrderType.LIMIT && isBBO;\n }\n\n return isBBO;\n}\n\nexport function getOrderTypeByBBO(value: BBOOrderType, size: OrderSide) {\n if (\n [BBOOrderType.COUNTERPARTY1, BBOOrderType.COUNTERPARTY5].includes(value)\n ) {\n return size === OrderSide.BUY ? OrderType.ASK : OrderType.BID;\n }\n\n if ([BBOOrderType.QUEUE1, BBOOrderType.QUEUE5].includes(value)) {\n return size === OrderSide.BUY ? OrderType.BID : OrderType.ASK;\n }\n}\n\nexport function getOrderLevelByBBO(value: BBOOrderType) {\n if ([BBOOrderType.COUNTERPARTY1, BBOOrderType.QUEUE1].includes(value)) {\n return OrderLevel.ONE;\n }\n\n if ([BBOOrderType.COUNTERPARTY5, BBOOrderType.QUEUE5].includes(value)) {\n return OrderLevel.FIVE;\n }\n}\n\nexport function getScaledPlaceOrderMessage(result: any) {\n const rows = result?.data?.rows || [];\n\n if (rows.length > 0) {\n const totalCount = rows.length;\n const successCount = rows.filter((row: any) => row.success).length;\n\n // fully successful\n if (successCount === totalCount) {\n return i18n.t(\"orderEntry.scaledOrder.fullySuccessful\", {\n total: totalCount,\n });\n }\n\n // all failed\n if (successCount === 0) {\n return i18n.t(\"orderEntry.scaledOrder.allFailed\");\n }\n\n // partially successful\n return i18n.t(\"orderEntry.scaledOrder.partiallySuccessful\", {\n successCount,\n total: totalCount,\n });\n }\n}\n\nexport const safeNumber = (val: number | string) => {\n return Number.isNaN(Number(val)) ? 0 : Number(val);\n};\n","import { FC, memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { SimpleDialog } from \"@kodiak-finance/orderly-ui\";\n\ntype MaxQtyConfirmProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n maxQty: string;\n onConfirm: () => void;\n base: string;\n};\n\nexport const MaxQtyConfirm: FC<MaxQtyConfirmProps> = memo((props) => {\n const { t } = useTranslation();\n return (\n <SimpleDialog\n open={props.open}\n title={t(\"orderEntry.orderConfirm\")}\n closable\n onOpenChange={props.onOpenChange}\n size=\"sm\"\n actions={{\n primary: {\n label: t(\"orderEntry.placeOrderNow\"),\n className: \"oui-text-sm oui-font-semibold oui-w-[100%] oui-h-8\",\n onClick: () => {\n props.onConfirm();\n return Promise.resolve();\n },\n },\n secondary: {\n label: t(\"common.cancel\"),\n className: \"oui-text-sm oui-font-semibold oui-w-[100%] oui-h-8\",\n onClick: () => {\n props.onOpenChange(false);\n return Promise.resolve();\n },\n },\n }}\n >\n <div className=\"oui-text-2xs lg:oui-text-sm\">\n {t(\"orderEntry.maxQty.reminder.content\", {\n maxQty: `${props.maxQty} ${props.base}`,\n })}\n </div>\n </SimpleDialog>\n );\n});\n","import { forwardRef, SVGProps, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Flex,\n Grid,\n DataTable,\n cn,\n Badge,\n TokenIcon,\n Tooltip,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n ScaledOrderConfirmScriptOptions,\n ScaledOrderConfirmScriptReturns,\n} from \"./scaledOrderConfirm.script\";\n\nexport type ScaledOrderConfirmProps = ScaledOrderConfirmScriptOptions &\n ScaledOrderConfirmScriptReturns & {\n close?: () => void;\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n };\n\nexport const ScaledOrderConfirm = (props: ScaledOrderConfirmProps) => {\n const { order, symbolInfo, dataSource, national, askAndBid, totalQuantity } =\n props;\n const { base, quote, base_dp, quote_dp } = symbolInfo;\n const { t } = useTranslation();\n\n const onCancel = () => {\n props.reject();\n props.close?.();\n };\n\n const onConfirm = () => {\n props.resolve();\n props.close?.();\n };\n\n const columns = useMemo(() => {\n return [\n {\n title: t(\"common.symbol\"),\n dataIndex: \"symbol\",\n width: 125,\n render: (value: string, record: any) => {\n return (\n <Flex gap={2}>\n <div\n className={cn(\n \"oui-h-[38px] oui-w-1 oui-shrink-0 oui-rounded-[1px]\",\n record.side === OrderSide.BUY\n ? \"oui-bg-trade-profit\"\n : \"oui-bg-trade-loss\",\n )}\n />\n <Flex direction=\"column\" itemAlign=\"start\">\n <Flex gapX={1}>\n <TokenIcon symbol={value} className=\"oui-size-3\" />\n <Text.formatted\n rule=\"symbol\"\n size=\"xs\"\n formatString=\"base-type\"\n >\n {value}\n </Text.formatted>\n </Flex>\n\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"orderEntry.orderType.limit\")}\n </Badge>\n </Flex>\n </Flex>\n );\n },\n },\n {\n title: t(\"common.quantity\"),\n dataIndex: \"order_quantity\",\n width: 100,\n render: (value: string, record: any) => {\n return (\n <Text.numeral\n rule=\"price\"\n dp={base_dp}\n padding={false}\n color={record.side === OrderSide.BUY ? \"buy\" : \"sell\"}\n >\n {value}\n </Text.numeral>\n );\n },\n },\n {\n title: t(\"common.orderPrice\"),\n dataIndex: \"order_price\",\n width: 100,\n render: (value: string, record: any) => {\n // buy: limit_price_i >= ask0 , show warning.\n // sell: limit price <= bid0 , show warning.\n const showWarning = !!(record.side === OrderSide.BUY\n ? askAndBid?.[0] && Number(value) >= askAndBid?.[0]\n : askAndBid?.[1] && Number(value) <= askAndBid?.[1]);\n\n return (\n <Flex gapX={1}>\n <Text.numeral rule=\"price\" dp={quote_dp}>\n {value}\n </Text.numeral>\n\n {showWarning && (\n <Tooltip\n content={t(\n \"orderEntry.confirmScaledOrder.orderPrice.warning\",\n )}\n className=\"oui-w-[240px] oui-text-2xs oui-font-semibold oui-text-base-contrast-80\"\n >\n <TooltipIcon className=\"oui-text-warning-darken\" />\n </Tooltip>\n )}\n </Flex>\n );\n },\n },\n ];\n }, [t, symbolInfo, askAndBid, base_dp, quote_dp]);\n\n return (\n <div className=\"oui-font-semibold\">\n <DataTable\n classNames={{\n root: cn(\n \"oui-bg-base-7\",\n \"oui-rounded-lg\",\n // need to set overflow hidden because table header will avoid the border radius\n \"oui-overflow-hidden\",\n // \"oui-text-2xs lg:oui-text-xs\",\n // if orders is greater than 6, set the height to 320px to show scroll bar\n order.orders?.length >= 6 && \"oui-h-[320px]\",\n ),\n // set the min height of the table to show 2 rows\n scroll: \"!oui-min-h-[130px]\",\n }}\n dataSource={dataSource}\n columns={columns}\n bordered\n onRow={() => {\n return {\n className: cn(\"oui-h-[50px]\"),\n };\n }}\n />\n <div className=\"oui-mb-5 oui-mt-4 oui-text-2xs\">\n <Flex justify=\"between\">\n <Text>{t(\"orderEntry.totalOrders\")}</Text>\n <Text intensity={80}>{order.orders?.length}</Text>\n </Flex>\n\n <Flex justify=\"between\" mt={2}>\n <Text>{t(\"orderEntry.totalQuantity\")}</Text>\n <Text.numeral\n rule=\"price\"\n unit={base}\n dp={base_dp}\n padding={false}\n intensity={80}\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n >\n {totalQuantity}\n </Text.numeral>\n </Flex>\n\n <Flex justify=\"between\" mt={2}>\n <Text>{t(\"common.notional\")}</Text>\n <Text.numeral\n rule=\"price\"\n unit={quote}\n dp={quote_dp}\n padding={false}\n intensity={80}\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n >\n {national}\n </Text.numeral>\n </Flex>\n </div>\n\n <Grid cols={2} gapX={3}>\n <Button color={\"secondary\"} size={\"md\"} onClick={onCancel}>\n {t(\"common.cancel\")}\n </Button>\n <Button size={\"md\"} onClick={onConfirm}>\n {t(\"common.confirm\")}\n </Button>\n </Grid>\n </div>\n );\n};\n\nexport const TooltipIcon = forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n (props, ref) => {\n return (\n <svg\n width=\"12\"\n height=\"13\"\n viewBox=\"0 0 12 13\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...props}\n >\n <path d=\"M5.99951 1.50708C3.23811 1.50708 0.999512 3.74558 0.999512 6.50708C0.999512 9.26858 3.23811 11.5071 5.99951 11.5071C8.76091 11.5071 10.9995 9.26858 10.9995 6.50708C10.9995 3.74558 8.76091 1.50708 5.99951 1.50708ZM5.99951 4.00708C6.27566 4.00708 6.49951 4.23108 6.49951 4.50708C6.49951 4.78308 6.27566 5.00708 5.99951 5.00708C5.72336 5.00708 5.49951 4.78308 5.49951 4.50708C5.49951 4.23108 5.72336 4.00708 5.99951 4.00708ZM5.99951 5.50708C6.27566 5.50708 6.49951 5.73108 6.49951 6.00708V8.50708C6.49951 8.78308 6.27566 9.00708 5.99951 9.00708C5.72336 9.00708 5.49951 8.78308 5.49951 8.50708V6.00708C5.49951 5.73108 5.72336 5.50708 5.99951 5.50708Z\" />\n </svg>\n );\n },\n);\n","import { useMemo } from \"react\";\nimport { API, OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-utils\";\nimport { useAskAndBid } from \"../../../hooks/useAskAndBid\";\n\nexport type ScaledOrderConfirmScriptOptions = {\n order: OrderlyOrder & {\n orders: OrderlyOrder[];\n };\n symbolInfo: API.SymbolExt;\n};\n\nexport type ScaledOrderConfirmScriptReturns = ReturnType<\n typeof useScaledOrderConfirmScript\n>;\n\nexport function useScaledOrderConfirmScript(\n options: ScaledOrderConfirmScriptOptions,\n) {\n const { order, symbolInfo } = options;\n const orders = order.orders;\n\n const askAndBid = useAskAndBid();\n\n const national = useMemo(() => {\n const national = orders.reduce((acc, order) => {\n return acc.add(new Decimal(order.order_price).mul(order.order_quantity));\n }, zero);\n\n return national.toNumber();\n }, [orders]);\n\n const totalQuantity = useMemo(() => {\n const totalQuantity = orders.reduce((acc, order) => {\n return acc.add(new Decimal(order.order_quantity));\n }, zero);\n\n return totalQuantity.toString();\n }, [orders, symbolInfo.base_dp]);\n\n return { dataSource: orders, national, askAndBid, totalQuantity };\n}\n","import { useEffect, useState } from \"react\";\nimport { useDebouncedCallback, useEventEmitter } from \"@kodiak-finance/orderly-hooks\";\n\nexport function useAskAndBid() {\n const ee = useEventEmitter();\n\n const [askAndBid, setAskAndBid] = useState<[number, number]>([0, 0]);\n\n const onOrderBookUpdate = useDebouncedCallback((data: any) => {\n const ask0 = data.asks?.[data.asks.length - 1]?.[0];\n const bid0 = data.bids?.[0]?.[0];\n setAskAndBid([ask0, bid0]);\n }, 200);\n\n useEffect(() => {\n ee.on(\"orderbook:update\", onOrderBookUpdate);\n return () => {\n ee.off(\"orderbook:update\", onOrderBookUpdate);\n onOrderBookUpdate.cancel();\n };\n }, [onOrderBookUpdate]);\n\n return askAndBid;\n}\n","import { FC } from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { useScaledOrderConfirmScript } from \"./scaledOrderConfirm.script\";\nimport {\n ScaledOrderConfirm,\n ScaledOrderConfirmProps,\n} from \"./scaledOrderConfirm.ui\";\n\nexport type ScaledOrderConfirmWidgetProps = ScaledOrderConfirmProps;\n\nexport const ScaledOrderConfirmWidget: FC<ScaledOrderConfirmWidgetProps> = (\n props,\n) => {\n const state = useScaledOrderConfirmScript(props);\n\n return <ScaledOrderConfirm {...props} {...state} />;\n};\n\nexport const scaledOrderConfirmDialogId = \"scaledOrderConfirm\";\n\nregisterSimpleDialog(scaledOrderConfirmDialogId, ScaledOrderConfirmWidget, {\n size: \"md\",\n title: () => i18n.t(\"orderEntry.confirmScaledOrder\"),\n contentProps: {\n // className: \"oui-p-0\",\n },\n});\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderlyOrder, OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Button, cn } from \"@kodiak-finance/orderly-ui\";\nimport { OrderTypeSelect } from \"../orderTypeSelect\";\nimport { LeverageBadge } from \"./LeverageBadge\";\n\ntype OrderEntryHeaderProps = {\n symbol: string;\n side: OrderSide;\n canTrade: boolean;\n order_type: OrderType;\n setOrderValue: (key: keyof OrderlyOrder, value: any) => void;\n symbolLeverage?: number;\n};\n\nexport function OrderEntryHeader(props: OrderEntryHeaderProps) {\n const { canTrade, side, order_type, setOrderValue } = props;\n const { t } = useTranslation();\n\n return (\n <>\n <div\n className={cn(\n \"oui-grid oui-w-full oui-flex-1 oui-gap-x-2 lg:oui-flex lg:oui-gap-x-[6px]\",\n \"oui-grid-cols-2\",\n )}\n >\n <Button\n onClick={() => {\n props.setOrderValue(\"side\", OrderSide.BUY);\n }}\n size={\"md\"}\n fullWidth\n data-type={OrderSide.BUY}\n className={cn(\n side === OrderSide.BUY && canTrade\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 props.setOrderValue(\"side\", OrderSide.SELL);\n }}\n data-type={OrderSide.SELL}\n fullWidth\n size={\"md\"}\n className={cn(\n side === OrderSide.SELL && props.canTrade\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 </div>\n <div\n className={cn(\n \"oui-grid oui-gap-x-2 lg:oui-flex lg:oui-gap-x-[6px]\",\n \"oui-grid-cols-2\",\n )}\n >\n <div className=\"oui-w-full\">\n <OrderTypeSelect\n type={order_type!}\n side={side}\n canTrade={canTrade}\n onChange={(type) => {\n setOrderValue(\"order_type\", type);\n }}\n />\n </div>\n <div className=\"oui-w-full\">\n <LeverageBadge\n symbol={props.symbol}\n side={props.side}\n symbolLeverage={props.symbolLeverage}\n />\n </div>\n </div>\n </>\n );\n}\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Select, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport const OrderTypeSelect = (props: {\n type: OrderType;\n onChange: (type: OrderType) => void;\n side: OrderSide;\n canTrade: boolean;\n}) => {\n const { t } = useTranslation();\n\n const options = useMemo(() => {\n return [\n { label: t(\"orderEntry.orderType.limitOrder\"), value: OrderType.LIMIT },\n { label: t(\"orderEntry.orderType.marketOrder\"), value: OrderType.MARKET },\n {\n label: t(\"orderEntry.orderType.stopLimit\"),\n value: OrderType.STOP_LIMIT,\n },\n {\n label: t(\"orderEntry.orderType.stopMarket\"),\n value: OrderType.STOP_MARKET,\n },\n {\n label: t(\"orderEntry.orderType.scaledOrder\"),\n value: OrderType.SCALED,\n },\n {\n label: t(\"orderEntry.orderType.trailingStop\"),\n value: OrderType.TRAILING_STOP,\n },\n ];\n }, [t]);\n\n const displayLabelMap = useMemo(() => {\n return {\n [OrderType.LIMIT]: t(\"orderEntry.orderType.limit\"),\n [OrderType.MARKET]: t(\"common.marketPrice\"),\n [OrderType.STOP_LIMIT]: t(\"orderEntry.orderType.stopLimit\"),\n [OrderType.STOP_MARKET]: t(\"orderEntry.orderType.stopMarket\"),\n [OrderType.SCALED]: t(\"orderEntry.orderType.scaledOrder\"),\n [OrderType.TRAILING_STOP]: t(\"orderEntry.orderType.trailingStop\"),\n };\n }, [t]);\n\n return (\n <Select.options\n testid=\"oui-testid-orderEntry-orderType-button\"\n currentValue={props.type}\n value={props.type}\n options={options}\n onValueChange={props.onChange}\n contentProps={{\n className: \"oui-bg-base-8\",\n }}\n classNames={{\n trigger: \"oui-bg-base-6 oui-border-line\",\n }}\n valueFormatter={(value, option) => {\n const item = options.find((o) => o.value === value);\n if (!item) {\n return <Text size={\"xs\"}>{option.placeholder}</Text>;\n }\n\n const label = displayLabelMap[value as keyof typeof displayLabelMap];\n\n return (\n <Text\n size={\"xs\"}\n color={\n props.canTrade\n ? props.side === OrderSide.BUY\n ? \"buy\"\n : \"sell\"\n : undefined\n }\n >\n {label}\n </Text>\n );\n }}\n size={\"md\"}\n />\n );\n};\n","import { useSymbolLeverage } from \"@kodiak-finance/orderly-hooks\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { cn, Flex, modal, Text, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport {\n SymbolLeverageDialogId,\n SymbolLeverageSheetId,\n} from \"@kodiak-finance/orderly-ui-leverage\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\ntype LeverageBadgeProps = {\n symbol: string;\n side: OrderSide;\n symbolLeverage?: number;\n};\n\nexport const LeverageBadge = (props: LeverageBadgeProps) => {\n const { symbol, side, symbolLeverage } = props;\n const { isMobile } = useScreen();\n const { maxLeverage } = useSymbolLeverage(symbol);\n\n const curLeverage = symbolLeverage || maxLeverage;\n\n const showModal = () => {\n const modalId = isMobile ? SymbolLeverageSheetId : SymbolLeverageDialogId;\n modal.show(modalId, {\n symbol,\n side,\n curLeverage,\n });\n };\n\n return (\n <Flex\n justify=\"center\"\n itemAlign=\"center\"\n gapX={1}\n className={cn(\n \"oui-h-8\",\n \"oui-rounded oui-border oui-border-line oui-bg-base-6\",\n \"oui-cursor-pointer oui-select-none oui-text-xs oui-font-semibold oui-text-base-contrast-54\",\n )}\n onClick={showModal}\n >\n <Text>Cross</Text>\n <Text.numeral dp={0} rm={Decimal.ROUND_DOWN} unit=\"X\">\n {curLeverage}\n </Text.numeral>\n </Flex>\n );\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { OrderEntryContext, OrderEntryContextState } from \"./orderEntryContext\";\n\nexport const OrderEntryProvider: FC<\n PropsWithChildren<OrderEntryContextState>\n> = (props) => {\n const {\n errorMsgVisible,\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n setOrderValues,\n currentFocusInput,\n errors,\n priceInputRef,\n priceInputContainerRef,\n triggerPriceInputRef,\n activatedPriceInputRef,\n lastQuantityInputType,\n leverage,\n } = props;\n\n const memoizedValue = useMemo<OrderEntryContextState>(() => {\n return {\n errorMsgVisible,\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n setOrderValues,\n currentFocusInput,\n errors,\n // refs\n priceInputRef,\n priceInputContainerRef,\n triggerPriceInputRef,\n activatedPriceInputRef,\n lastQuantityInputType,\n leverage,\n };\n }, [\n errorMsgVisible,\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n setOrderValues,\n currentFocusInput,\n errors,\n\n priceInputRef,\n priceInputContainerRef,\n triggerPriceInputRef,\n activatedPriceInputRef,\n lastQuantityInputType,\n leverage,\n ]);\n\n return (\n <OrderEntryContext.Provider value={memoizedValue}>\n {props.children}\n </OrderEntryContext.Provider>\n );\n};\n","import {\n createContext,\n FocusEventHandler,\n useContext,\n RefObject,\n MutableRefObject,\n} from \"react\";\nimport { OrderValidationResult } from \"@kodiak-finance/orderly-hooks\";\nimport { API, OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { InputType } from \"../types\";\n\nexport type OrderEntryContextState = {\n errors: OrderValidationResult | null;\n errorMsgVisible: boolean;\n symbolInfo: API.SymbolExt;\n onFocus: (type: InputType) => FocusEventHandler;\n onBlur: (type: InputType) => FocusEventHandler;\n getErrorMsg: (\n key: keyof OrderValidationResult,\n customValue?: string,\n ) => string;\n setOrderValue: (key: keyof OrderlyOrder, value: any) => void;\n setOrderValues: (values: Partial<OrderlyOrder>) => void;\n currentFocusInput: InputType;\n // refs\n priceInputRef: RefObject<HTMLInputElement>;\n priceInputContainerRef: RefObject<HTMLDivElement>;\n triggerPriceInputRef: RefObject<HTMLInputElement>;\n activatedPriceInputRef: RefObject<HTMLInputElement>;\n lastQuantityInputType: MutableRefObject<InputType>;\n leverage?: number;\n};\n\nexport const OrderEntryContext = createContext<OrderEntryContextState>(\n {} as OrderEntryContextState,\n);\n\nexport const useOrderEntryContext = () => {\n return useContext(OrderEntryContext);\n};\n","import { OrderlyOrder, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { PriceInput, PriceInputProps } from \"./limit/priceInput\";\nimport { QtyAndTotalInput } from \"./qtyAndTotal/qtyAndTotalInput\";\nimport { ScaledOrderInput } from \"./scaledOrder\";\nimport { TriggerPriceInput } from \"./stop/triggerPriceInput\";\nimport { TrailingStopInput } from \"./trailingStop\";\n\nexport type OrderInputProps = {\n values: Partial<OrderlyOrder>;\n} & Omit<PriceInputProps, \"order_price\" | \"order_type\">;\n\nexport function OrderInput(props: OrderInputProps) {\n const { values } = props;\n\n const type = values.order_type;\n\n if (type === OrderType.SCALED) {\n return <ScaledOrderInput values={values} />;\n }\n\n if (type === OrderType.TRAILING_STOP) {\n return <TrailingStopInput values={values} />;\n }\n\n const showTriggerPrice =\n type === OrderType.STOP_LIMIT || type === OrderType.STOP_MARKET;\n\n const showPrice = type === OrderType.LIMIT || type === OrderType.STOP_LIMIT;\n\n const triggerPriceInput = showTriggerPrice && (\n <TriggerPriceInput trigger_price={values.trigger_price} />\n );\n\n const priceInput = showPrice && (\n <PriceInput\n order_type={values.order_type!}\n order_price={values.order_price}\n bbo={props.bbo}\n fillMiddleValue={props.fillMiddleValue}\n priceInputContainerWidth={props.priceInputContainerWidth}\n />\n );\n\n return (\n <div className={\"oui-space-y-1\"}>\n {triggerPriceInput}\n {priceInput}\n <QtyAndTotalInput\n order_quantity={values.order_quantity}\n total={values.total}\n />\n </div>\n );\n}\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { cn, inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { OrderEntryScriptReturn } from \"../../../orderEntry.script\";\nimport { InputType } from \"../../../types\";\nimport { BBOStatus } from \"../../../utils\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\nimport { BBOOrderTypeSelect } from \"./bboOrderTypeSelect\";\nimport { LimitPriceSuffix } from \"./limitPriceSuffix\";\n\nexport type PriceInputProps = {\n order_type: OrderType;\n order_price?: string;\n bbo: Pick<\n OrderEntryScriptReturn,\n \"bboStatus\" | \"bboType\" | \"onBBOChange\" | \"toggleBBO\"\n >;\n priceInputContainerWidth?: number;\n fillMiddleValue: OrderEntryScriptReturn[\"fillMiddleValue\"];\n};\n\n// TODO: memo component\nexport const PriceInput: FC<PriceInputProps> = (props) => {\n const { bbo } = props;\n const { t } = useTranslation();\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n priceInputRef,\n priceInputContainerRef,\n } = useOrderEntryContext();\n\n const { quote, quote_dp } = symbolInfo;\n\n const readOnly = bbo.bboStatus === BBOStatus.ON;\n\n const suffix =\n props.order_type === OrderType.LIMIT ? (\n <LimitPriceSuffix\n quote={quote}\n bbo={bbo}\n fillMiddleValue={props.fillMiddleValue}\n />\n ) : (\n quote\n );\n\n return (\n <div\n ref={priceInputContainerRef}\n className=\"oui-group oui-relative oui-w-full\"\n >\n <CustomInput\n id=\"order_price_input\"\n name=\"order_price_input\"\n label={t(\"common.price\")}\n suffix={suffix}\n value={props.order_price}\n onChange={(e) => {\n setOrderValue(\"order_price\", e);\n }}\n error={getErrorMsg(\"order_price\")}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.PRICE)}\n onBlur={onBlur(InputType.PRICE)}\n readonly={readOnly}\n inputMode=\"decimal\"\n ref={priceInputRef}\n classNames={{\n root: cn(readOnly && \"focus-within:oui-outline-transparent \"),\n input: cn(readOnly && \"oui-cursor-auto\"),\n }}\n />\n {bbo.bboStatus === BBOStatus.ON && (\n <div className={cn(\"oui-absolute oui-bottom-1 oui-left-0\")}>\n <BBOOrderTypeSelect\n value={bbo.bboType}\n onChange={bbo.onBBOChange}\n contentStyle={{\n width: props.priceInputContainerWidth,\n }}\n />\n </div>\n )}\n </div>\n );\n};\n","import { forwardRef, PropsWithChildren, ReactNode } from \"react\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n inputFormatter,\n Input,\n InputProps,\n} from \"@kodiak-finance/orderly-ui\";\nimport { useOrderEntryContext } from \"../orderEntryContext\";\n\nexport type CustomInputProps = {\n label: string;\n suffix?: ReactNode;\n placeholder?: string;\n id: string;\n className?: string;\n name?: string;\n onChange?: (value: string) => void;\n value?: InputProps[\"value\"];\n autoFocus?: InputProps[\"autoFocus\"];\n error?: string;\n onFocus?: InputProps[\"onFocus\"];\n onBlur?: InputProps[\"onBlur\"];\n formatters?: InputProps[\"formatters\"];\n overrideFormatters?: InputProps[\"formatters\"];\n classNames?: InputProps[\"classNames\"];\n readonly?: boolean;\n prefix?: ReactNode;\n inputMode?: InputProps[\"inputMode\"];\n};\n\nexport const CustomInput = forwardRef<HTMLInputElement, CustomInputProps>(\n (props, ref) => {\n const { placeholder = \"0\" } = props;\n const { errorMsgVisible } = useOrderEntryContext();\n\n return (\n <Input.tooltip\n ref={ref}\n tooltip={errorMsgVisible ? props.error : undefined}\n autoComplete={\"off\"}\n autoFocus={props.autoFocus}\n size={\"lg\"}\n placeholder={props.readonly ? \"\" : placeholder}\n id={props.id}\n name={props.name}\n color={props.error ? \"danger\" : undefined}\n inputMode={props.inputMode || \"decimal\"}\n prefix={\n props.prefix || (\n <InputLabel id={props.id} className={props.classNames?.prefix}>\n {props.label}\n </InputLabel>\n )\n }\n suffix={props.suffix}\n value={props.readonly ? \"\" : props.value || \"\"}\n // onChange={props.onChange}\n onValueChange={props.onChange}\n onFocus={(event) => {\n props.onFocus?.(event);\n }}\n onBlur={(event) => {\n props.onBlur?.(event);\n }}\n formatters={\n props.overrideFormatters || [\n ...(props.formatters ?? EMPTY_LIST),\n inputFormatter.numberFormatter,\n inputFormatter.currencyFormatter,\n inputFormatter.decimalPointFormatter,\n ]\n }\n classNames={{\n root: cn(\n \"orderly-order-entry oui-relative oui-h-[54px] oui-rounded oui-border oui-border-solid oui-border-line oui-px-2 oui-py-1 group-first:oui-rounded-t-xl group-last:oui-rounded-b-xl\",\n props.className,\n props.classNames?.root,\n ),\n input: cn(\"oui-mb-1 oui-mt-5 oui-h-5\", props?.classNames?.input),\n // prefix: cn(props.classNames?.prefix),\n suffix: cn(\n \"oui-absolute oui-right-0 oui-top-0 oui-justify-start oui-py-2 oui-text-2xs oui-text-base-contrast-36\",\n props.classNames?.suffix,\n ),\n }}\n readOnly={props.readonly}\n />\n );\n },\n);\n\nCustomInput.displayName = \"CustomInput\";\n\nconst InputLabel = (\n props: PropsWithChildren<{ id: string; className?: string }>,\n) => {\n return (\n <label\n htmlFor={props.id}\n className={cn(\n \"oui-absolute oui-left-2 oui-top-[7px] oui-text-2xs oui-text-base-contrast-36\",\n props.className,\n )}\n >\n {props.children}\n </label>\n );\n};\n","import { CSSProperties, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { BBOOrderType } from \"@kodiak-finance/orderly-types\";\nimport { Box, Select, Text } from \"@kodiak-finance/orderly-ui\";\n\nexport const BBOOrderTypeSelect = (props: {\n value?: BBOOrderType;\n onChange: (value: BBOOrderType) => void;\n contentStyle?: CSSProperties;\n}) => {\n const { t } = useTranslation();\n\n const options = useMemo(\n () => [\n {\n label: t(\"orderEntry.bbo.counterparty1\"),\n value: BBOOrderType.COUNTERPARTY1,\n },\n {\n label: t(\"orderEntry.bbo.counterparty5\"),\n value: BBOOrderType.COUNTERPARTY5,\n },\n {\n label: t(\"orderEntry.bbo.queue1\"),\n value: BBOOrderType.QUEUE1,\n },\n {\n label: t(\"orderEntry.bbo.queue5\"),\n value: BBOOrderType.QUEUE5,\n },\n ],\n [],\n );\n\n return (\n <Select.options\n testid=\"oui-testid-orderEntry-bbo-orderType-button\"\n currentValue={props.value}\n value={props.value}\n options={options}\n onValueChange={props.onChange}\n contentProps={{\n className: \"oui-bg-base-8 oui-w-full\",\n style: props.contentStyle,\n }}\n size={\"sm\"}\n classNames={{\n trigger: \"oui-border-none oui-bg-transparent\",\n }}\n valueFormatter={(value, option) => {\n const item = options.find((item) => item.value === value);\n\n return (\n <Box>\n <Text size=\"sm\">{item?.label}</Text>\n </Box>\n );\n }}\n />\n );\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, cn, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { OrderEntryScriptReturn } from \"../../../orderEntry.script\";\nimport { BBOStatus } from \"../../../utils\";\n\ntype LimitPriceSuffixProps = {\n quote: string;\n bbo: Pick<\n OrderEntryScriptReturn,\n \"bboStatus\" | \"bboType\" | \"onBBOChange\" | \"toggleBBO\"\n >;\n fillMiddleValue: OrderEntryScriptReturn[\"fillMiddleValue\"];\n};\n\nexport const LimitPriceSuffix = (props: LimitPriceSuffixProps) => {\n const { quote, bbo, fillMiddleValue } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"end\"\n className={cn(\"oui-order-entry-limit-price-input-suffix\", \"oui-text-2xs\")}\n >\n {quote}\n <Flex justify={\"end\"} itemAlign=\"center\" gap={2}>\n <Flex\n px={3}\n height={20}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"base\"\n className={cn(\n \"oui-mt-[2px] oui-cursor-pointer oui-select-none oui-border\",\n bbo.bboStatus === BBOStatus.ON\n ? \"oui-border-primary\"\n : \"oui-border-line-12\",\n bbo.bboStatus === BBOStatus.DISABLED && \"oui-cursor-not-allowed\",\n )}\n onClick={() => {\n if (bbo.bboStatus === BBOStatus.DISABLED) {\n modal.dialog({\n title: t(\"common.tips\"),\n size: \"xs\",\n content: (\n <Text intensity={54}>\n {t(\"orderEntry.bbo.disabled.tips\")}\n </Text>\n ),\n });\n } else {\n bbo.toggleBBO();\n }\n }}\n >\n <Text\n className={cn(\n bbo.bboStatus === BBOStatus.ON && \"oui-text-primary\",\n bbo.bboStatus === BBOStatus.OFF && \"oui-text-base-contrast-54\",\n bbo.bboStatus === BBOStatus.DISABLED &&\n \"oui-text-base-contrast-20\",\n )}\n >\n {t(\"orderEntry.bbo\")}\n </Text>\n </Flex>\n <Text\n className={cn(\n \"oui-select-none\",\n \"oui-cursor-pointer oui-text-primary\",\n )}\n onClick={fillMiddleValue}\n >\n Mid\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Grid, inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype QtyAndTotalInputProps = {\n order_quantity?: string;\n total?: string;\n};\n\nexport const QtyAndTotalInput: FC<QtyAndTotalInputProps> = memo((props) => {\n const { t } = useTranslation();\n\n const { symbolInfo, onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n const { base, quote, base_dp, quote_dp } = symbolInfo;\n\n return (\n <Grid cols={2} className=\"oui-group oui-space-x-1\">\n <CustomInput\n id=\"order_quantity_input\"\n name=\"order_quantity_input\"\n label={t(\"common.qty\")}\n suffix={base}\n error={getErrorMsg(\"order_quantity\")}\n value={props.order_quantity}\n onChange={(e) => {\n setOrderValue(\"order_quantity\", e);\n }}\n formatters={[inputFormatter.dpFormatter(base_dp)]}\n onFocus={onFocus(InputType.QUANTITY)}\n onBlur={onBlur(InputType.QUANTITY)}\n inputMode=\"decimal\"\n className=\"!oui-rounded-r oui-rounded-bl-xl\"\n />\n <CustomInput\n id=\"order_total_input\"\n name=\"order_total_input\"\n label={`${t(\"common.total\")}≈`}\n suffix={quote}\n error={getErrorMsg(\"total\")}\n value={props.total}\n onChange={(e) => {\n setOrderValue(\"total\", e);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.TOTAL)}\n onBlur={onBlur(InputType.TOTAL)}\n inputMode=\"decimal\"\n className=\"!oui-rounded-bl oui-rounded-br-xl\"\n />\n </Grid>\n );\n});\n\nQtyAndTotalInput.displayName = \"QtyAndTotalInput\";\n","import { DistributionType, OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { cn, Grid } from \"@kodiak-finance/orderly-ui\";\nimport { QuantityDistributionInput } from \"./quantityDistributionInput\";\nimport { ScaledPriceInput } from \"./scaledPriceInput\";\nimport { ScaledQuantityInput } from \"./scaledQuantityInput\";\nimport { SkewInput } from \"./skewInput\";\nimport { TotalOrdersInput } from \"./totalOrdersInput\";\n\ntype ScaledOrderInputProps = {\n values: Partial<OrderlyOrder>;\n};\n\nexport const ScaledOrderInput = (props: ScaledOrderInputProps) => {\n const { values } = props;\n\n const showSkewInput = values.distribution_type === DistributionType.CUSTOM;\n\n return (\n <div className=\"oui-space-y-1\">\n <ScaledPriceInput\n start_price={values.start_price}\n end_price={values.end_price}\n />\n\n <Grid cols={2} className=\"oui-group oui-space-x-1\">\n <ScaledQuantityInput\n order_quantity={values.order_quantity}\n total={values.total}\n />\n <TotalOrdersInput total_orders={values.total_orders} />\n </Grid>\n\n <QuantityDistributionInput\n distribution_type={values.distribution_type}\n className={cn(!showSkewInput && \"oui-rounded-b-xl\")}\n />\n\n {showSkewInput && <SkewInput skew={values.skew} />}\n </div>\n );\n};\n","import { FC, memo, useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { DistributionType } from \"@kodiak-finance/orderly-types\";\nimport { Box, Checkbox, cn, Flex, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\nexport type QuantityDistributionInputProps = {\n distribution_type?: DistributionType;\n className?: string;\n};\n\nexport const QuantityDistributionInput: FC<QuantityDistributionInputProps> =\n memo((props) => {\n const { t } = useTranslation();\n const { setOrderValue } = useOrderEntryContext();\n\n const showHint = () => {\n modal.dialog({\n title: t(\"common.tips\"),\n size: \"sm\",\n content: <QuantityDistributionHint value={props.distribution_type} />,\n // classNames: {\n // content: \"oui-bg-base-6\",\n // },\n });\n };\n\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"center\"\n p={2}\n r=\"base\"\n // gapY={1}\n width=\"100%\"\n intensity={600}\n className={cn(\n \"oui-t-rounded oui-text-base-contrast-36\",\n \"oui-border oui-border-solid oui-border-line\",\n props.className,\n )}\n >\n <Text\n size=\"2xs\"\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n onClick={showHint}\n >\n {t(\"orderEntry.quantityDistribution\")}\n </Text>\n <QuantityDistribution\n value={props.distribution_type}\n onValueChange={(value) => {\n setOrderValue(\"distribution_type\", value);\n }}\n />\n </Flex>\n );\n });\n\ntype QuantityDistributionHintProps = {\n value?: DistributionType;\n};\n\nconst QuantityDistributionHint: FC<QuantityDistributionHintProps> = (props) => {\n const { t } = useTranslation();\n const [type, setType] = useState(DistributionType.FLAT);\n\n useEffect(() => {\n setType(\n [\n DistributionType.FLAT,\n DistributionType.ASCENDING,\n DistributionType.DESCENDING,\n ].includes(props.value!)\n ? props.value!\n : DistributionType.FLAT,\n );\n }, [props.value]);\n\n const content = useMemo(() => {\n return [\n {\n type: DistributionType.FLAT,\n title: t(\"orderEntry.distributionType.flat\"),\n description: t(\"orderEntry.distributionType.flat.description\"),\n formula: `${t(\"orderEntry.skew\")} = 1`,\n quantity: <FlatQuantity />,\n },\n {\n type: DistributionType.ASCENDING,\n title: t(\"orderEntry.distributionType.ascending\"),\n description: t(\"orderEntry.distributionType.ascending.description\"),\n formula: `${t(\"orderEntry.skew\")} > 1`,\n quantity: <AscendingQuantity />,\n },\n {\n type: DistributionType.DESCENDING,\n title: t(\"orderEntry.distributionType.descending\"),\n description: t(\"orderEntry.distributionType.descending.description\"),\n formula: `0 < ${t(\"orderEntry.skew\")} < 1`,\n quantity: <DescendingQuantity />,\n },\n ];\n }, []);\n\n const currentContent = useMemo(() => {\n return content.find((item) => item.type === type);\n }, [content, type]);\n\n return (\n <div className=\"oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n <Flex direction=\"column\" itemAlign=\"start\" gapY={1}>\n <Text intensity={80}>\n {t(\"orderEntry.quantityDistribution.description\")}\n </Text>\n <Text>{t(\"orderEntry.quantityDistribution.formula\")}</Text>\n </Flex>\n <Flex intensity={600} p={1} r=\"base\" mt={3} itemAlign=\"start\">\n <Flex direction=\"column\" itemAlign=\"start\">\n {content.map((item) => (\n <Box\n key={item.title}\n intensity={type === item.type ? 500 : 600}\n width={78}\n p={2}\n className=\"oui-cursor-pointer oui-rounded-l\"\n onClick={() => {\n setType(item.type);\n }}\n >\n <Text>{item.title}</Text>\n </Box>\n ))}\n </Flex>\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n gapY={1}\n p={2}\n intensity={500}\n width=\"100%\"\n className={cn(\n \"oui-rounded-r\",\n type === DistributionType.FLAT && \"oui-rounded-bl\",\n type === DistributionType.ASCENDING && \"oui-rounded-l\",\n type === DistributionType.DESCENDING && \"oui-rounded-tl\",\n )}\n >\n <div>{currentContent?.formula}</div>\n <Text>{currentContent?.description}</Text>\n <Flex width=\"100%\" justify=\"center\">\n {currentContent?.quantity}\n </Flex>\n <Flex width=\"100%\" gapX={1} justify=\"center\">\n <Text className=\"oui-text-base-1\">{t(\"common.price\")}</Text>\n <PriceChart />\n </Flex>\n </Flex>\n </Flex>\n </div>\n );\n};\n\ntype QuantityDistributionProps = {\n value?: DistributionType;\n onValueChange: (value: DistributionType) => void;\n};\n\nconst QuantityDistribution: FC<QuantityDistributionProps> = (props) => {\n const { value, onValueChange } = props;\n const { t } = useTranslation();\n\n const onChange = (value: DistributionType) => (checked: boolean) => {\n onValueChange(value);\n };\n\n const distributionTypeMap = useMemo(() => {\n return {\n [DistributionType.FLAT]: t(\"orderEntry.distributionType.flat\"),\n [DistributionType.ASCENDING]: t(\n \"orderEntry.distributionType.ascending.abbr\",\n ),\n [DistributionType.DESCENDING]: t(\n \"orderEntry.distributionType.descending.abbr\",\n ),\n [DistributionType.CUSTOM]: t(\"orderEntry.distributionType.custom\"),\n };\n }, [t]);\n\n return (\n <Flex className={cn(\"oui-gap-x-[6px] lg:oui-gap-x-2\")} wrap=\"wrap\">\n {Object.values(DistributionType).map((type) => {\n return (\n <Flex itemAlign={\"center\"} key={type}>\n <Checkbox\n id={`distribution-type-${type}`}\n color={\"white\"}\n variant={\"radio\"}\n checked={value === type}\n onCheckedChange={onChange(type)}\n />\n <label\n htmlFor={`distribution-type-${type}`}\n className={cn(\n \"oui-text-2xs\",\n \"oui-ml-1\",\n \"oui-whitespace-nowrap oui-break-normal\",\n )}\n >\n {distributionTypeMap[type]}\n </label>\n </Flex>\n );\n })}\n </Flex>\n );\n};\n\nconst FlatQuantity = () => {\n return (\n <svg\n width=\"218\"\n height=\"40\"\n viewBox=\"0 0 218 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"18\"\n y=\"18\"\n width=\"181\"\n height=\"4\"\n fill=\"rgb(var(--oui-color-base-2))\"\n />\n <circle\n cx=\"15\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"62\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"109\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"156\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"203\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n </svg>\n );\n};\n\nconst AscendingQuantity = () => {\n return (\n <svg\n width=\"218\"\n height=\"40\"\n viewBox=\"0 0 218 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"18\"\n y=\"18\"\n width=\"181\"\n height=\"4\"\n fill=\"rgb(var(--oui-color-base-2))\"\n />\n <circle\n cx=\"15\"\n cy=\"20\"\n r=\"4.28571\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"1.42857\"\n />\n <circle\n cx=\"62\"\n cy=\"20\"\n r=\"5.14286\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"1.71429\"\n />\n <circle\n cx=\"109\"\n cy=\"20\"\n r=\"6\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"156\"\n cy=\"20\"\n r=\"6.85714\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2.28571\"\n />\n <circle\n cx=\"203\"\n cy=\"20\"\n r=\"7.71429\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2.57143\"\n />\n </svg>\n );\n};\n\nconst DescendingQuantity = () => {\n return (\n <svg\n width=\"218\"\n height=\"40\"\n viewBox=\"0 0 218 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n width=\"181\"\n height=\"4\"\n transform=\"matrix(-1 0 0 1 200 18)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n />\n <circle\n cx=\"5\"\n cy=\"5\"\n r=\"4.28571\"\n transform=\"matrix(-1 0 0 1 208 15)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"1.42857\"\n />\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"5.14286\"\n transform=\"matrix(-1 0 0 1 162 14)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"1.71429\"\n />\n <circle\n cx=\"7\"\n cy=\"7\"\n r=\"6\"\n transform=\"matrix(-1 0 0 1 116 13)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2\"\n />\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6.85714\"\n transform=\"matrix(-1 0 0 1 70 12)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2.28571\"\n />\n <circle\n cx=\"9\"\n cy=\"9\"\n r=\"7.71429\"\n transform=\"matrix(-1 0 0 1 24 11)\"\n fill=\"rgb(var(--oui-color-base-2))\"\n stroke=\"rgb(var(--oui-color-base-5))\"\n strokeWidth=\"2.57143\"\n />\n </svg>\n );\n};\n\nconst PriceChart = () => {\n return (\n <svg\n width=\"176\"\n height=\"8\"\n viewBox=\"0 0 176 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M175.354 4.35355C175.549 4.15829 175.549 3.84171 175.354 3.64645L172.172 0.464466C171.976 0.269204 171.66 0.269204 171.464 0.464466C171.269 0.659728 171.269 0.976311 171.464 1.17157L174.293 4L171.464 6.82843C171.269 7.02369 171.269 7.34027 171.464 7.53553C171.66 7.7308 171.976 7.7308 172.172 7.53553L175.354 4.35355ZM0 4V4.5H175V4V3.5H0V4Z\"\n fill=\"rgb(var(--oui-color-base-1))\"\n />\n </svg>\n );\n};\n","import { memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype ScaledPriceInputProps = {\n start_price?: string;\n end_price?: string;\n};\n\nexport const ScaledPriceInput = memo((props: ScaledPriceInputProps) => {\n const { t } = useTranslation();\n\n const { symbolInfo, onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n const { quote, quote_dp } = symbolInfo;\n\n return (\n <>\n <CustomInput\n label={t(\"orderEntry.startPrice\")}\n suffix={quote}\n id=\"order_start_price_input\"\n value={props.start_price}\n error={getErrorMsg(\"start_price\")}\n onChange={(e) => {\n setOrderValue(\"start_price\", e);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.START_PRICE)}\n onBlur={onBlur(InputType.START_PRICE)}\n inputMode=\"decimal\"\n classNames={{\n root: \"oui-rounded-t-xl\",\n }}\n />\n <CustomInput\n label={t(\"orderEntry.endPrice\")}\n suffix={quote}\n id=\"order_end_price_input\"\n value={props.end_price}\n error={getErrorMsg(\"end_price\")}\n onChange={(val) => {\n setOrderValue(\"end_price\", val);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.END_PRICE)}\n onBlur={onBlur(InputType.END_PRICE)}\n inputMode=\"decimal\"\n />\n </>\n );\n});\n\nScaledPriceInput.displayName = \"ScaledPriceInput\";\n","import { memo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\nimport { ScaledQuantityUnit } from \"./scaledQuantityUnit\";\n\ntype ScaledQuantityInputProps = {\n order_quantity?: string;\n total?: string;\n};\n\nexport const ScaledQuantityInput = memo((props: ScaledQuantityInputProps) => {\n const { t } = useTranslation();\n const { errors, symbolInfo, onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n const [quantityUnit, setQuantityUnit] = useLocalStorage<\"quote\" | \"base\">(\n \"orderly_order_quantity_unit\",\n \"quote\",\n );\n\n const { base, quote, base_dp, quote_dp } = symbolInfo;\n\n const isBase = quantityUnit === \"base\";\n const unit = isBase ? base : quote;\n\n const suffix = (\n <ScaledQuantityUnit\n base={base}\n quote={quote}\n value={unit}\n onValueChange={(value) => {\n setQuantityUnit(value === base ? \"base\" : \"quote\");\n }}\n />\n );\n\n if (isBase) {\n return (\n <CustomInput\n label={t(\"common.qty\")}\n suffix={suffix}\n id=\"order_quantity_input\"\n name=\"order_quantity_input\"\n className=\"!oui-rounded-r\"\n value={props.order_quantity}\n error={getErrorMsg(\n \"order_quantity\",\n `${errors?.order_quantity?.value} ${base}`,\n )}\n onChange={(val) => {\n setOrderValue(\"order_quantity\", val);\n }}\n formatters={[inputFormatter.dpFormatter(base_dp)]}\n onFocus={onFocus(InputType.QUANTITY)}\n onBlur={onBlur(InputType.QUANTITY)}\n inputMode=\"decimal\"\n />\n );\n }\n\n return (\n <CustomInput\n label={t(\"common.qty\")}\n suffix={suffix}\n id=\"order_total_input\"\n name=\"order_total_input\"\n className=\"!oui-rounded-r\"\n value={props.total}\n error={getErrorMsg(\"order_quantity\", `${errors?.total?.value} ${quote}`)}\n onChange={(val) => {\n setOrderValue(\"total\", val);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.TOTAL)}\n onBlur={onBlur(InputType.TOTAL)}\n inputMode=\"decimal\"\n />\n );\n});\n","import { FC, useMemo } from \"react\";\nimport { Select, Text, cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type QuantityUnitProps = {\n base: string;\n quote: string;\n value: string;\n onValueChange: (value: string) => void;\n};\n\nconst valueRenderer = (value: string) => {\n return (\n <Text size=\"2xs\" intensity={36}>\n {value}\n </Text>\n );\n};\n\nexport const ScaledQuantityUnit: FC<QuantityUnitProps> = (props) => {\n const { base, quote } = props;\n\n const options = useMemo(() => {\n return [{ name: quote }, { name: base }];\n }, [base, quote]);\n\n return (\n <Select.tokens\n variant=\"text\"\n size=\"xs\"\n iconSize=\"2xs\"\n tokens={options}\n classNames={{\n trigger: cn(\n \"oui-absolute oui-right-0 oui-top-1\",\n \"oui-w-full oui-justify-end\",\n ),\n }}\n value={props.value}\n onValueChange={props.onValueChange}\n valueFormatter={valueRenderer}\n contentProps={{\n align: \"end\",\n alignOffset: -1,\n sideOffset: -4,\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n};\n","import { memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype SkewInputProps = {\n skew?: string;\n};\n\nexport const SkewInput = memo((props: SkewInputProps) => {\n const { t } = useTranslation();\n\n const { onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n return (\n <CustomInput\n id=\"order_skew_input\"\n label={t(\"orderEntry.skew\")}\n value={props.skew}\n error={getErrorMsg(\"skew\")}\n onChange={(val) => {\n setOrderValue(\"skew\", val);\n }}\n onFocus={onFocus(InputType.SKEW)}\n onBlur={onBlur(InputType.SKEW)}\n inputMode=\"decimal\"\n overrideFormatters={[\n inputFormatter.rangeFormatter({ min: 0, max: 100, dp: 2 }),\n inputFormatter.dpFormatter(2),\n ]}\n classNames={{\n root: \"oui-rounded-b-xl\",\n }}\n />\n );\n});\n","import { memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype TotalOrdersInputProps = {\n total_orders?: string;\n};\n\nexport const TotalOrdersInput = memo((props: TotalOrdersInputProps) => {\n const { t } = useTranslation();\n const { onFocus, onBlur, getErrorMsg, setOrderValue } =\n useOrderEntryContext();\n\n return (\n <CustomInput\n label={t(\"orderEntry.totalOrders\")}\n placeholder=\"2-20\"\n id=\"order_total_orders_input\"\n className={\"!oui-rounded-l\"}\n value={props.total_orders}\n error={getErrorMsg(\"total_orders\")}\n onChange={(val) => {\n setOrderValue(\"total_orders\", val);\n }}\n overrideFormatters={[\n // inputFormatter.rangeFormatter({ min: 2, max: 20 }),\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(0),\n ]}\n onFocus={onFocus(InputType.TOTAL_ORDERS)}\n onBlur={onBlur(InputType.TOTAL_ORDERS)}\n inputMode=\"numeric\"\n />\n );\n});\n","import { FC, memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype TriggerPriceInputProps = {\n trigger_price?: string;\n};\n\nexport const TriggerPriceInput: FC<TriggerPriceInputProps> = memo((props) => {\n const { t } = useTranslation();\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n triggerPriceInputRef,\n } = useOrderEntryContext();\n\n return (\n <div className=\"oui-group\">\n <div className=\"oui-group\">\n <CustomInput\n ref={triggerPriceInputRef}\n id=\"order_trigger_price_input\"\n name=\"order_trigger_price_input\"\n label={t(\"common.trigger\")}\n suffix={symbolInfo.quote}\n value={props.trigger_price}\n onChange={(e) => {\n setOrderValue(\"trigger_price\", e);\n }}\n error={getErrorMsg(\"trigger_price\")}\n formatters={[inputFormatter.dpFormatter(symbolInfo.quote_dp)]}\n onFocus={onFocus(InputType.TRIGGER_PRICE)}\n onBlur={onBlur(InputType.TRIGGER_PRICE)}\n inputMode=\"decimal\"\n />\n </div>\n </div>\n );\n});\n\nTriggerPriceInput.displayName = \"TriggerPriceInput\";\n","import { memo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\ntype ActivePriceInputProps = {\n activated_price?: string;\n};\n\nexport const ActivePriceInput = memo<ActivePriceInputProps>((props) => {\n const { t } = useTranslation();\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n activatedPriceInputRef,\n } = useOrderEntryContext();\n\n return (\n <div className=\"oui-group\">\n <CustomInput\n ref={activatedPriceInputRef}\n id=\"order_activated_price_input\"\n name=\"order_activated_price_input\"\n label={t(\"common.triggerPrice\")}\n placeholder={`0 (${t(\"common.optional\")})`}\n suffix={symbolInfo.quote}\n error={getErrorMsg(\"activated_price\")}\n value={props.activated_price}\n onChange={(val: string) => {\n setOrderValue(\"activated_price\", val);\n }}\n formatters={[inputFormatter.dpFormatter(symbolInfo.quote_dp)]}\n onFocus={onFocus(InputType.ACTIVATED_PRICE)}\n onBlur={onBlur(InputType.ACTIVATED_PRICE)}\n inputMode=\"decimal\"\n />\n </div>\n );\n});\n\nActivePriceInput.displayName = \"ActivePriceInput\";\n","import { FC, memo, useCallback, useRef } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { TrailingCallbackType } from \"@kodiak-finance/orderly-types\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { InputType } from \"../../../types\";\nimport { CustomInput } from \"../../customInput\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\nimport { CallbackRatePercentages } from \"./callbackRatePercentages\";\nimport { TrailingCallbackSelect } from \"./trailingCallbackSelect\";\n\ntype TrailingCallbackInputProps = {\n callback_value?: string;\n callback_rate?: string;\n};\n\nexport const TrailingCallbackInput: FC<TrailingCallbackInputProps> = memo(\n (props) => {\n const { callback_value, callback_rate } = props;\n const { t } = useTranslation();\n const {\n symbolInfo,\n onFocus,\n onBlur,\n getErrorMsg,\n setOrderValue,\n setOrderValues,\n } = useOrderEntryContext();\n const { quote, quote_dp } = symbolInfo;\n // const [open, setOpen] = useState(false);\n\n const lastCallbackValueRef = useRef<string>();\n const lastCallbackRateRef = useRef<string>();\n\n const [callbackType, setCallbackType] = useLocalStorage(\n \"orderly_order_trailing_callback_type\",\n TrailingCallbackType.VALUE,\n );\n\n const onCallbackTypeChange = useCallback(\n (type: TrailingCallbackType) => {\n setCallbackType(type);\n // when switch to callback rate, save the last callback value\n if (type === TrailingCallbackType.RATE) {\n lastCallbackValueRef.current = callback_value;\n setOrderValues({\n callback_value: \"\",\n callback_rate: lastCallbackRateRef.current,\n });\n // when switch to callback value, save the last callback rate\n } else {\n lastCallbackRateRef.current = callback_rate;\n setOrderValues({\n callback_value: lastCallbackValueRef.current,\n callback_rate: \"\",\n });\n }\n },\n [callback_value, callback_rate],\n );\n\n const suffix = (\n <TrailingCallbackSelect\n quote={quote}\n value={callbackType}\n onValueChange={onCallbackTypeChange}\n />\n );\n\n // don't need to convert trailing rate to estimated value\n // const estimatedValue = useMemo(() => {\n // if (callbackType === TrailingCallbackType.RATE) {\n // return callback_rate\n // }\n // }, [callback_rate, callbackType]);\n\n // const tooltipContent = estimatedValue\n // ? `≈ ${estimatedValue} ${quote}`\n // : undefined;\n\n // const openTooltip = useCallback(() => {\n // setOpen(true);\n // }, []);\n\n // const closeTooltip = useCallback(() => {\n // setOpen(false);\n // }, []);\n\n if (callbackType === TrailingCallbackType.RATE) {\n return (\n // <Tooltip\n // content={tooltipContent}\n // open={open && !!tooltipContent}\n // sideOffset={-25}\n // className=\"!oui-p-3\"\n // >\n <div className=\"oui-relative\">\n <CustomInput\n id=\"order_callback_rate_input\"\n name=\"order_callback_rate_input\"\n label={t(\"orderEntry.trailingRate\")}\n suffix={suffix}\n error={getErrorMsg(\"callback_rate\")}\n value={callback_rate}\n onChange={(val: string) => {\n setOrderValue(\"callback_rate\", val);\n }}\n formatters={[inputFormatter.dpFormatter(1)]}\n onFocus={(e) => {\n onFocus(InputType.CALLBACK_RATE)(e);\n // openTooltip();\n }}\n onBlur={(e) => {\n onBlur(InputType.CALLBACK_RATE)(e);\n // closeTooltip();\n }}\n inputMode=\"decimal\"\n classNames={{\n root: \"oui-h-[68px]\",\n input: \"oui-mb-5\",\n prefix: \"!oui-top-1\",\n }}\n />\n <CallbackRatePercentages\n className=\"oui-absolute oui-bottom-1 oui-left-2\"\n callback_rate={callback_rate}\n // onClick={openTooltip}\n />\n </div>\n // </Tooltip>\n );\n }\n\n return (\n <CustomInput\n id=\"order_callback_value_input\"\n name=\"order_callback_value_input\"\n label={t(\"orderEntry.trailingValue\")}\n suffix={suffix}\n error={getErrorMsg(\"callback_value\")}\n value={callback_value}\n onChange={(val: string) => {\n setOrderValue(\"callback_value\", val);\n }}\n formatters={[inputFormatter.dpFormatter(quote_dp)]}\n onFocus={onFocus(InputType.CALLBACK_VALUE)}\n onBlur={onBlur(InputType.CALLBACK_VALUE)}\n inputMode=\"decimal\"\n classNames={{\n input: \"!oui-mb-[6px]\",\n prefix: \"!oui-top-1\",\n }}\n />\n );\n },\n);\n\nTrailingCallbackInput.displayName = \"TrailingCallbackInput\";\n","import { FC, memo } from \"react\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { useOrderEntryContext } from \"../../orderEntryContext\";\n\nconst percentages = [1, 2, 3, 5];\n\ntype CallbackRatePercentagesProps = {\n className?: string;\n callback_rate?: string;\n onClick?: (value: string) => void;\n};\n\nexport const CallbackRatePercentages: FC<CallbackRatePercentagesProps> = memo(\n (props) => {\n const { setOrderValue } = useOrderEntryContext();\n\n return (\n <Flex gapX={2} className={props.className}>\n {percentages.map((item) => {\n const value = item.toString();\n const isActive = props.callback_rate === value;\n\n return (\n <Flex\n key={item}\n justify=\"center\"\n itemAlign=\"center\"\n width={46}\n height={18}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n \"oui-rounded oui-border\",\n isActive ? \"oui-border-base-contrast-36\" : \"oui-border-line-12\",\n )}\n onClick={() => {\n setOrderValue(\"callback_rate\", value);\n props.onClick?.(value);\n }}\n >\n <Text size=\"2xs\" intensity={isActive ? 80 : 36} weight=\"semibold\">\n {item}%\n </Text>\n </Flex>\n );\n })}\n </Flex>\n );\n },\n);\n\nCallbackRatePercentages.displayName = \"CallbackRatePercentages\";\n","import { FC, memo, useMemo } from \"react\";\nimport { TrailingCallbackType } from \"@kodiak-finance/orderly-types\";\nimport { Select, cn } from \"@kodiak-finance/orderly-ui\";\n\ntype TrailingCallbackSelectProps = {\n quote: string;\n value: string;\n onValueChange: (value: TrailingCallbackType) => void;\n};\n\nexport const TrailingCallbackSelect: FC<TrailingCallbackSelectProps> = memo(\n (props) => {\n const { quote } = props;\n\n const options = useMemo(() => {\n return [\n { label: quote, value: TrailingCallbackType.VALUE },\n { label: \"%\", value: TrailingCallbackType.RATE },\n ];\n }, [quote]);\n\n return (\n <Select.options\n variant=\"text\"\n size=\"xs\"\n options={options}\n classNames={{\n trigger: cn(\n \"oui-absolute oui-right-0 oui-top-1\",\n \"oui-w-[124px] oui-justify-end\",\n \"oui-text-base-contrast-36\",\n ),\n }}\n value={props.value}\n onValueChange={props.onValueChange}\n contentProps={{\n align: \"end\",\n alignOffset: -1,\n sideOffset: -4,\n className: \"oui-border oui-border-line-6\",\n }}\n />\n );\n },\n);\n\nTrailingCallbackSelect.displayName = \"trailingCallbackSelect\";\n","import { OrderlyOrder } from \"@kodiak-finance/orderly-types\";\nimport { QtyAndTotalInput } from \"../qtyAndTotal/qtyAndTotalInput\";\nimport { ActivePriceInput } from \"./activePriceInput\";\nimport { TrailingCallbackInput } from \"./trailingCallbackInput\";\n\ntype TrailingStopInputProps = {\n values: Partial<OrderlyOrder>;\n};\n\nexport const TrailingStopInput = (props: TrailingStopInputProps) => {\n const { values } = props;\n\n return (\n <div className=\"oui-space-y-1\">\n <ActivePriceInput activated_price={values.activated_price} />\n <TrailingCallbackInput\n callback_value={values.callback_value}\n callback_rate={values.callback_rate}\n />\n <QtyAndTotalInput\n order_quantity={values.order_quantity}\n total={values.total}\n />\n </div>\n );\n};\n","import { memo, useEffect, useMemo, useState } from \"react\";\nimport { utils } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { OrderSide } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Slider, textVariants, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { InputType } from \"../../types\";\nimport { useOrderEntryContext } from \"../orderEntryContext\";\n\ntype QuantitySliderProps = {\n canTrade: boolean;\n side: OrderSide;\n order_quantity?: string;\n maxQty: number;\n};\nconst SLIDER_MIN = 0;\nconst SLIDER_MAX = 100;\n\nexport const QuantitySlider = memo((props: QuantitySliderProps) => {\n const { canTrade, side, order_quantity, maxQty } = props;\n\n const [sliderValue, setSliderValue] = useState<number>(0);\n\n const { setOrderValue, symbolInfo, lastQuantityInputType } =\n useOrderEntryContext();\n\n const { base_dp, base_tick } = symbolInfo;\n\n const { t } = useTranslation();\n\n const color = useMemo(\n () => (canTrade ? (side === OrderSide.BUY ? \"buy\" : \"sell\") : undefined),\n [side, canTrade],\n );\n\n const maxLabel = useMemo(() => {\n return side === OrderSide.BUY\n ? t(\"orderEntry.maxBuy\")\n : t(\"orderEntry.maxSell\");\n }, [side, t]);\n\n const onSliderValueChange = (value: number) => {\n lastQuantityInputType.current = InputType.QUANTITY_SLIDER;\n setSliderValue(value);\n };\n\n const sliderToQuantity = (value: number) => {\n const newQty = new Decimal(value)\n .div(SLIDER_MAX)\n .mul(maxQty)\n .toFixed(base_dp, Decimal.ROUND_DOWN);\n setOrderValue(\"order_quantity\", utils.formatNumber(newQty, base_tick));\n };\n\n const onMax = () => {\n onSliderValueChange(SLIDER_MAX);\n // when previous slider value is max, quantity will not update by useEffect, so must set quantity manually to maxQty\n if (sliderValue === SLIDER_MAX) {\n sliderToQuantity(SLIDER_MAX);\n }\n };\n\n // update quantity when slider value and maxQty changes\n useEffect(() => {\n if (lastQuantityInputType.current === InputType.QUANTITY_SLIDER) {\n sliderToQuantity(sliderValue);\n }\n }, [sliderValue, maxQty]);\n\n useEffect(() => {\n const quantityToSlider = () => {\n if (order_quantity && Number(order_quantity) !== 0 && maxQty !== 0) {\n return new Decimal(Math.min(Number(order_quantity), maxQty))\n .div(maxQty)\n .mul(SLIDER_MAX)\n .todp(2, Decimal.ROUND_DOWN)\n .toNumber();\n }\n return 0;\n };\n\n // update slider value when last quantity input type is not quantity slider\n if (lastQuantityInputType.current !== InputType.QUANTITY_SLIDER) {\n setSliderValue(quantityToSlider());\n }\n }, [order_quantity, maxQty]);\n\n return (\n <div>\n <Slider\n disabled={maxQty === 0 || !canTrade}\n value={[sliderValue]}\n color={color}\n markCount={4}\n showTip\n onValueChange={(e) => {\n onSliderValueChange(e[0]);\n }}\n min={SLIDER_MIN}\n max={SLIDER_MAX}\n />\n <Flex justify={\"between\"} className=\"oui-pt-1 xl:oui-pt-2\">\n <Text.numeral\n size={\"2xs\"}\n color={color}\n dp={2}\n padding={false}\n suffix=\"%\"\n >\n {canTrade ? sliderValue : 0}\n </Text.numeral>\n <Flex>\n <button\n className={textVariants({\n size: \"2xs\",\n className: \"oui-mr-1\",\n })}\n onClick={onMax}\n data-testid=\"oui-testid-orderEntry-maxQty-value-button\"\n >\n {maxLabel}\n </button>\n <Text.numeral\n size={\"2xs\"}\n color={color}\n dp={base_dp}\n padding={false}\n data-testid=\"oui-testid-orderEntry-maxQty-value\"\n >\n {canTrade ? maxQty : 0}\n </Text.numeral>\n </Flex>\n </Flex>\n </div>\n );\n});\n\nQuantitySlider.displayName = \"QuantitySlider\";\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Switch } from \"@kodiak-finance/orderly-ui\";\n\nexport interface ReduceOnlySwitchProps {\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n className?: string;\n testId?: string;\n}\n\nexport const ReduceOnlySwitch: React.FC<ReduceOnlySwitchProps> = ({\n checked,\n onCheckedChange,\n className,\n testId = \"oui-testid-orderEntry-reduceOnly-switch\",\n}) => {\n const { t } = useTranslation();\n\n return (\n <Flex itemAlign={\"center\"} gapX={1} className={className}>\n <Switch\n data-testid={testId}\n className=\"oui-h-[14px]\"\n id={\"reduceOnly\"}\n checked={checked}\n onCheckedChange={onCheckedChange}\n />\n <label htmlFor={\"reduceOnly\"} className={\"oui-text-xs\"}>\n {t(\"orderEntry.reduceOnly\")}\n </label>\n </Flex>\n );\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport {\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 OrderlyOrder,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n cn,\n Flex,\n Text,\n Input,\n inputFormatter,\n Switch,\n SettingFillIcon,\n useScreen,\n DotStatus,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Grid } from \"@kodiak-finance/orderly-ui\";\nimport { TPSLPositionTypeWidget } from \"@kodiak-finance/orderly-ui-tpsl\";\nimport { useOrderEntryContext } from \"./orderEntryContext\";\nimport { PnlInputWidget } from \"./pnlInput/pnlInput.widget\";\nimport { usePnlInputContext } from \"./pnlInput/pnlInputContext\";\nimport { PnlInputProvider } from \"./pnlInput/pnlInputProvider\";\nimport { PNL_Values } from \"./pnlInput/useBuilder.script\";\nimport { ReduceOnlySwitch } from \"./reduceOnlySwitch\";\n\ntype OrderValueKeys = keyof OrderlyOrder;\n\ntype Est_Values = PNL_Values & {\n trigger_price?: string;\n};\n\ntype TPSL_Values = {\n tp: Est_Values;\n sl: Est_Values;\n position_type: PositionType;\n};\n\nexport const OrderTPSL = (props: {\n // onCancelTPSL: () => void;\n // onEnableTP_SL: () => void;\n switchState: boolean;\n onSwitchChanged: (state: boolean) => void;\n onChange: (key: OrderValueKeys, value: any) => void;\n values: TPSL_Values;\n orderType: OrderType;\n errors: OrderValidationResult | null;\n quote_dp: number | undefined;\n showTPSLAdvanced: () => void;\n setOrderValue: (key: string, value: any) => void;\n reduceOnlyChecked?: boolean;\n onReduceOnlyChange?: (checked: boolean) => void;\n}) => {\n const tpslFormRef = React.useRef<HTMLDivElement>(null);\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n useEffect(() => {\n if (\n props.orderType !== OrderType.LIMIT &&\n props.orderType !== OrderType.MARKET\n ) {\n props.onSwitchChanged(false);\n }\n }, [props.orderType]);\n\n if (\n props.orderType !== OrderType.LIMIT &&\n props.orderType !== OrderType.MARKET\n ) {\n return null;\n }\n\n const isSlPriceWarning =\n props.errors?.[\"sl_trigger_price\"]?.[\"type\"] ===\n ERROR_MSG_CODES.SL_PRICE_WARNING;\n\n return (\n <div>\n <Flex itemAlign={\"center\"} justify={\"between\"}>\n <Flex itemAlign={\"center\"} gapX={1}>\n <Switch\n id={\"order_entry_tpsl\"}\n className=\"oui-h-[14px]\"\n checked={props.switchState}\n disabled={\n props.orderType !== OrderType.LIMIT &&\n props.orderType !== OrderType.MARKET\n }\n onCheckedChange={(checked) => {\n props.onSwitchChanged(checked);\n }}\n />\n <label htmlFor={\"order_entry_tpsl\"} className={\"oui-text-xs\"}>\n {t(\"common.tpsl\")}\n </label>\n {/* <ExclamationFillIcon\n color=\"white\"\n // opacity={0.36}\n size={14}\n opacity={1}\n className=\"oui-cursor-pointer oui-text-white/[.36] hover:oui-text-white/80\"\n onClick={() => {\n modal.dialog({\n title: t(\"common.tips\"),\n size: \"xs\",\n content: (\n <Text intensity={54}>{t(\"orderEntry.tpsl.tips\")}</Text>\n ),\n });\n }}\n /> */}\n </Flex>\n <Flex itemAlign={\"center\"} gapX={2}>\n {isMobile && props.onReduceOnlyChange && (\n <ReduceOnlySwitch\n checked={props.reduceOnlyChecked ?? false}\n onCheckedChange={props.onReduceOnlyChange}\n />\n )}\n {!isMobile && (\n <TPSLAdvancedButton\n className={cn(\n \"oui-group oui-invisible\",\n props.switchState && \"oui-visible\",\n )}\n showTPSLAdvanced={props.showTPSLAdvanced}\n />\n )}\n </Flex>\n </Flex>\n <div\n className={cn(\n \"oui-max-h-0 oui-overflow-hidden oui-transition-all\",\n props.switchState && \"oui-max-h-[120px]\",\n )}\n onTransitionEnd={() => {\n tpslFormRef.current?.style.setProperty(\n \"opacity\",\n props.switchState ? \"1\" : \"0\",\n );\n }}\n >\n <TPSLInputForm\n ref={tpslFormRef}\n setOrderValue={props.setOrderValue}\n onChange={props.onChange}\n values={props.values}\n errors={isSlPriceWarning ? {} : props.errors}\n quote_dp={props.quote_dp}\n showTPSLAdvanced={props.showTPSLAdvanced}\n isMobile={isMobile}\n isSlPriceWarning={isSlPriceWarning}\n />\n </div>\n\n {isSlPriceWarning && <TPSLPriceWarning errors={props.errors} />}\n </div>\n );\n};\n\nconst TPSLPriceWarning = (props: { errors: OrderValidationResult | null }) => {\n const { getErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n\n return (\n <DotStatus\n color=\"warning\"\n size=\"xs\"\n label={getErrorMsg(\"sl_trigger_price\")}\n />\n );\n};\n\nconst TPSLInputForm = React.forwardRef<\n HTMLDivElement,\n {\n setOrderValue: (key: string, value: any) => void;\n onChange: (key: OrderValueKeys, value: any) => void;\n values: TPSL_Values;\n errors: OrderValidationResult | null;\n quote_dp: number | undefined;\n showTPSLAdvanced: () => void;\n isMobile: boolean;\n isSlPriceWarning?: boolean;\n }\n>((props, ref) => {\n const { getErrorMsg } = useOrderEntryFormErrorMsg(props.errors);\n const { t } = useTranslation();\n\n return (\n <div\n ref={ref}\n className={\"oui-space-y-1 oui-px-px oui-py-2 oui-transition-all\"}\n >\n <Flex itemAlign={\"center\"} justify={\"between\"} gapX={2}>\n <TPSLPositionTypeWidget\n value={props.values.position_type}\n onChange={props.onChange}\n />\n {props.isMobile && (\n <TPSLAdvancedButton\n showTPSLAdvanced={props.showTPSLAdvanced}\n isMobile={props.isMobile}\n />\n )}\n </Flex>\n <PnlInputProvider values={props.values.tp} type={\"TP\"}>\n <TPSLInputRow\n type={\"TP\"}\n error={getErrorMsg(\"tp_trigger_price\")}\n onChange={props.onChange}\n values={props.values.tp}\n quote_dp={props.quote_dp}\n testIds={{\n first: \"oui-testid-orderEntry-tpsl-tpPrice-input\",\n second: \"oui-testid-orderEntry-tpsl-tpPnl-input\",\n dropDown: \"oui-testid-orderEntry-tpsl-tp-dropDown-trigger-button\",\n }}\n />\n </PnlInputProvider>\n <PnlInputProvider values={props.values.sl} type={\"SL\"}>\n <TPSLInputRow\n type={\"SL\"}\n error={getErrorMsg(\"sl_trigger_price\")}\n onChange={props.onChange}\n values={props.values.sl}\n quote_dp={props.quote_dp}\n testIds={{\n first: \"oui-testid-orderEntry-tpsl-slPrice-input\",\n second: \"oui-testid-orderEntry-tpsl-slPnl-input\",\n dropDown: \"oui-testid-orderEntry-tpsl-sl-dropDown-trigger-button\",\n }}\n classNames={{\n root: props.isSlPriceWarning\n ? \"oui-outline-warning-darken focus-within:oui-outline-warning-darken\"\n : undefined,\n }}\n />\n </PnlInputProvider>\n </div>\n );\n});\n\nTPSLInputForm.displayName = \"TPSLInputForm\";\n\nconst TPSLAdvancedButton = (props: {\n showTPSLAdvanced: () => void;\n className?: string;\n isMobile?: boolean;\n}) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n itemAlign={\"center\"}\n gapX={1}\n onClick={props.showTPSLAdvanced}\n className={cn(\"oui-group oui-cursor-pointer\", props.className)}\n >\n <Text\n className={cn(\n \"oui-cursor-pointer group-hover:oui-text-base-contrast\",\n props.isMobile ? \"oui-text-2xs\" : \"oui-text-sm\",\n )}\n >\n {t(\"tpsl.advanced\")}\n </Text>\n <SettingFillIcon\n size={12}\n className=\"oui-text-base-contrast-54 group-hover:oui-text-base-contrast oui-cursor-pointer\"\n opacity={1}\n onClick={props.showTPSLAdvanced}\n />\n </Flex>\n );\n};\n\n//------- TPSLTriggerPriceInput start -------\nconst TPSLTriggerPriceInput = (props: {\n type: \"TP\" | \"SL\";\n error: string | undefined;\n values: Est_Values;\n onChange: (value: string) => void;\n quote_dp: number | undefined;\n testId?: string;\n classNames?: {\n root?: string;\n input?: string;\n prefix?: string;\n };\n}) => {\n const { t } = useTranslation();\n const { errorMsgVisible } = useOrderEntryContext();\n const { tipsEle } = usePnlInputContext();\n const [prefix, setPrefix] = useState<string>(`${props.type} Price`);\n const [placeholder, setPlaceholder] = useState<string>(\"USDC\");\n\n const [tipVisible, setTipVisible] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const [innerValue, setInnerValue] = useState<string>(\n props.values.trigger_price ?? \"\",\n );\n\n useEffect(() => {\n if (isFocused) {\n return;\n }\n setInnerValue(props.values.trigger_price ?? \"\");\n }, [props.values.trigger_price, isFocused]);\n\n const triggerPriceToolTipEle = useMemo(() => {\n if (props.error && errorMsgVisible) return props.error;\n if (tipVisible) return tipsEle;\n\n return null;\n }, [props.error, errorMsgVisible, tipVisible, tipsEle]);\n\n const getPrefixLabel = (trigger_price?: string) => {\n let _prefix = props.type === \"TP\" ? t(\"tpsl.tpPrice\") : t(\"tpsl.slPrice\");\n\n if (trigger_price) {\n _prefix = props.type === \"TP\" ? t(\"tpsl.tp\") : t(\"tpsl.sl\");\n }\n return _prefix;\n };\n\n const onValueChange = (value: string) => {\n setInnerValue(value);\n props.onChange(value);\n };\n\n // console.log(\"props.values.trigger_price\", props.values.trigger_price);\n\n useEffect(() => {\n setPrefix(getPrefixLabel(props.values.trigger_price));\n\n if (!isFocused) {\n setInnerValue(props.values.trigger_price ?? \"\");\n }\n }, [props.type, props.values.trigger_price]);\n\n const onFocus = () => {\n setPrefix(props.type === \"TP\" ? t(\"tpsl.tp\") : t(\"tpsl.sl\"));\n setPlaceholder(\"\");\n setTipVisible(true);\n setIsFocused(true);\n };\n\n const onBlur = () => {\n setPrefix(getPrefixLabel(props.values.trigger_price));\n setPlaceholder(\"USDC\");\n setTipVisible(false);\n setIsFocused(false);\n props.onChange(innerValue);\n };\n\n return (\n <Input.tooltip\n data-testid={props.testId}\n prefix={prefix}\n size={\"md\"}\n placeholder={placeholder}\n align=\"right\"\n onFocus={onFocus}\n onBlur={onBlur}\n tooltip={triggerPriceToolTipEle}\n tooltipProps={{\n content: {\n side: props.type === \"TP\" ? \"top\" : \"bottom\",\n },\n }}\n color={props.error ? \"danger\" : undefined}\n autoComplete={\"off\"}\n value={innerValue}\n classNames={{\n additional: \"oui-text-base-contrast-54\",\n root: cn(\"oui-pr-2 md:oui-pr-3\", props.classNames?.root),\n prefix: cn(\"oui-pr-1 md:oui-pr-2\", props.classNames?.prefix),\n input: cn(\n \"oui-text-2xs placeholder:oui-text-2xs\",\n props.classNames?.input,\n ),\n }}\n // onChange={props.onChange}\n onValueChange={onValueChange}\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(props.quote_dp ?? 2),\n inputFormatter.currencyFormatter,\n ]}\n />\n );\n};\n\n//------- TPSLTriggerPriceInput end -------\n\nconst TPSLInputRow: React.FC<{\n type: \"TP\" | \"SL\";\n values: Est_Values;\n error?: string;\n onChange: (key: OrderValueKeys, value: any) => void;\n quote_dp: number | undefined;\n testIds?: {\n first?: string;\n second?: string;\n dropDown?: string;\n };\n classNames?: {\n root?: string;\n input?: string;\n prefix?: string;\n };\n}> = (props) => {\n return (\n <Grid cols={2} gapX={1}>\n <TPSLTriggerPriceInput\n testId={props.testIds?.first}\n type={props.type}\n error={props.error}\n values={props.values ?? \"\"}\n classNames={props.classNames}\n onChange={(event) => {\n props.onChange(\n props.type === \"SL\" ? \"sl_trigger_price\" : \"tp_trigger_price\",\n event,\n );\n }}\n quote_dp={props.quote_dp}\n />\n\n <PnlInputWidget\n testIds={{\n input: props.testIds?.second,\n dropDown: props.testIds?.dropDown,\n }}\n onChange={props.onChange}\n quote={\"USDC\"}\n quote_dp={2}\n type={props.type}\n values={{\n PnL: props.values.PnL,\n Offset: props.values.Offset,\n \"Offset%\": props.values[\"Offset%\"],\n ROI: props.values.ROI,\n }}\n />\n </Grid>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n CaretDownIcon,\n Input,\n MenuItem,\n Text,\n SimpleDropdownMenu,\n} from \"@kodiak-finance/orderly-ui\";\nimport { inputFormatter } from \"@kodiak-finance/orderly-ui\";\nimport { PNLInputState, PnLMode } from \"./useBuilder.script\";\n\nexport type PNLInputProps = PNLInputState & {\n testIds?: {\n input?: string;\n dropDown?: string;\n };\n quote: string;\n type: \"TP\" | \"SL\";\n};\n\nexport const PNLInput = (props: PNLInputProps) => {\n const {\n mode,\n modes,\n modeLabelMap,\n onModeChange,\n onValueChange,\n quote,\n quote_dp,\n value,\n type,\n tips,\n onFocus,\n onBlur,\n setFocus,\n } = props;\n\n const [prefix, setPrefix] = useState<string>(mode);\n\n const [placeholder, setPlaceholder] = useState<string>(\n mode === PnLMode.PERCENTAGE ? \"%\" : quote,\n );\n\n useEffect(() => {\n setPrefix(mode);\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n }, [mode]);\n\n useEffect(() => {\n setPrefix(!!value ? \"\" : mode);\n }, [value]);\n\n const id = useMemo(() => `${type.toLowerCase()}_${mode.toLowerCase()}`, []);\n\n return (\n <Input.tooltip\n prefix={modeLabelMap[prefix as keyof typeof modeLabelMap] || prefix}\n size={\"md\"}\n placeholder={placeholder}\n id={id}\n align={\"right\"}\n value={value}\n tooltip={tips}\n tooltipProps={{\n content: {\n side: props.type === \"TP\" ? \"top\" : \"bottom\",\n },\n }}\n data-testid={props.testIds?.input}\n autoComplete={\"off\"}\n inputMode=\"decimal\"\n onValueChange={onValueChange}\n formatters={[\n props.formatter({ dp: quote_dp, mode, type }),\n inputFormatter.currencyFormatter,\n // inputFormatter.identifierFormatter(),\n ]}\n classNames={{\n root: type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n additional: \"oui-text-base-contrast-54\",\n input: \"oui-text-inherit\",\n }}\n onFocus={() => {\n setPrefix(\"\");\n setPlaceholder(\"\");\n setFocus(true);\n onFocus();\n }}\n onBlur={() => {\n setPrefix(!!value ? \"\" : mode);\n setPlaceholder(mode === PnLMode.PERCENTAGE ? \"%\" : quote);\n onBlur();\n }}\n suffix={\n <>\n {mode === PnLMode.PERCENTAGE && !!value && (\n <Text size={\"2xs\"} color=\"inherit\" className=\"oui-ml-[2px]\">\n %\n </Text>\n )}\n <PNLMenus\n mode={mode}\n modes={modes}\n onModeChange={(item) => onModeChange(item.value as PnLMode)}\n testId={props.testIds?.dropDown}\n />\n </>\n }\n />\n );\n};\n\nconst PNLMenus = (props: {\n mode?: string;\n modes: MenuItem[];\n onModeChange: (value: MenuItem) => void;\n testId?: string;\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 onCloseAutoFocus={(event) => event.preventDefault()}\n onSelect={(item) => props.onModeChange(item as MenuItem)}\n >\n <button className={\"oui-p-2\"} data-testid={props.testId}>\n <CaretDownIcon size={12} color={\"white\"} />\n </button>\n </SimpleDropdownMenu>\n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\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\";\nimport { usePnlInputContext } from \"./pnlInputContext\";\n\nexport enum PnLMode {\n PnL = \"PnL\",\n OFFSET = \"Offset\",\n PERCENTAGE = \"Offset%\",\n}\n\nexport type PNL_Values = {\n PnL: string;\n Offset: string;\n \"Offset%\": string;\n ROI: string;\n};\n\ntype PNL_Keys =\n | \"tp_offset\"\n | \"tp_offset_percentage\"\n | \"tp_pnl\"\n | \"sl_offset\"\n | \"sl_offset_percentage\"\n | \"sl_pnl\";\n\nexport type BuilderProps = {\n type: \"TP\" | \"SL\";\n\n quote_dp?: number;\n onChange: (key: PNL_Keys, value: number | string) => void;\n\n values: PNL_Values;\n};\n\nexport const usePNLInputBuilder = (props: BuilderProps) => {\n const { type, values, quote_dp } = props;\n const { t } = useTranslation();\n const [focus, setFocus] = useState(true);\n // const [mode, setMode] = useLocalStorage<PnLMode>(\n // \"TP/SL_Mode\",\n // PnLMode.PERCENTAGE\n // );\n const { mode, setMode, tipsEle } = usePnlInputContext();\n\n const [tipVisible, setTipVisible] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const key = useMemo<PNL_Keys>(() => {\n switch (mode) {\n case PnLMode.OFFSET:\n return `${type.toLowerCase()}_offset` as PNL_Keys;\n case PnLMode.PERCENTAGE:\n return `${type.toLowerCase()}_offset_percentage` as PNL_Keys;\n default:\n return `${type.toLowerCase()}_pnl` as PNL_Keys;\n }\n }, [mode]);\n\n const [innerValue, setInnerValue] = useState<string>(\n values[mode as keyof PNL_Values],\n );\n\n // const value = useMemo(() => {\n // // console.log(\"mode\", mode, values);\n // const value = values[mode as keyof PNL_Values];\n // // if (isFocused) {\n // // return value;\n // // }\n // return value;\n // }, [values, mode, isFocused]);\n\n useEffect(() => {\n if (isFocused) {\n return;\n }\n setInnerValue(values[mode as keyof PNL_Values]);\n }, [values, mode, isFocused]);\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 modeLabelMap = useMemo(() => {\n return {\n [PnLMode.PnL]: t(\"tpsl.pnl\"),\n [PnLMode.OFFSET]: t(\"tpsl.offset\"),\n [PnLMode.PERCENTAGE]: `${t(\"tpsl.offset\")}%`,\n };\n }, [t]);\n\n const percentageSuffix = useRef<string>(\"\");\n\n const onValueChange = (value: string) => {\n // console.log(\"onValueChange\", value);\n // if (!isFocused) {\n // props.onChange(key, value);\n // } else {\n // setInnerValue(value);\n // }\n setInnerValue(value);\n props.onChange(key, value);\n };\n\n const onFocus = () => {\n // updateTips();\n setTipVisible(true);\n setIsFocused(true);\n };\n\n /**\n * hide tips when input is blurred\n */\n const onBlur = () => {\n // setTips(undefined);\n setTipVisible(false);\n setIsFocused(false);\n props.onChange(key, innerValue);\n };\n\n const formatter = (options: {\n dp?: number;\n mode: PnLMode;\n type: \"TP\" | \"SL\";\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 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 // value = new Decimal(\n // value.replace(\n // new RegExp(percentageSuffix.current.replace(\".\", \"\\\\.\") + \"$\"),\n // \"\"\n // )\n // )\n // .mul(100)\n // .toString();\n\n // return `${todpIfNeed(value, 2)}${percentageSuffix.current}`;\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 // return (Number(value) * 100).toFixed(2);\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 // console.log(\"onSendBefore\", value);\n\n if (mode === PnLMode.PERCENTAGE) {\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 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 };\n\n return {\n mode,\n modes,\n modeLabelMap,\n formatter,\n onModeChange: (mode: PnLMode) => {\n setMode(mode);\n },\n onFocus,\n onBlur,\n value: innerValue,\n onValueChange,\n quote_dp,\n tips: tipVisible ? tipsEle : undefined,\n setFocus,\n };\n};\n\nexport type PNLInputState = ReturnType<typeof usePNLInputBuilder>;\n","import { createContext, ReactNode, useContext } from \"react\";\nimport { PnLMode } from \"./useBuilder.script\";\n\nexport type PnlInputContextState = {\n mode: PnLMode;\n setMode: (mode: PnLMode) => void;\n tipsEle: ReactNode | null;\n};\n\nexport const PnlInputContext = createContext<PnlInputContextState>(\n {} as PnlInputContextState,\n);\n\nexport const usePnlInputContext = () => {\n return useContext(PnlInputContext);\n};\n","import { PNLInput } from \"./pnlInput.ui\";\nimport { BuilderProps, PnLMode, usePNLInputBuilder } from \"./useBuilder.script\";\n\nexport const PnlInputWidget = (\n props: BuilderProps & {\n testIds?: {\n input?: string;\n dropDown?: string;\n };\n quote: string;\n }\n) => {\n const { testIds, quote, ...rest } = props;\n const state = usePNLInputBuilder(rest);\n return (\n <PNLInput {...state} testIds={testIds} quote={quote} type={props.type} />\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { PnlInputContext, PnlInputContextState } from \"./pnlInputContext\";\nimport { PNL_Values, PnLMode } from \"./useBuilder.script\";\n\nexport const PnlInputProvider: React.FC<\n React.PropsWithChildren<{\n values: PNL_Values & { trigger_price?: string };\n type: \"TP\" | \"SL\";\n }>\n> = (props) => {\n const { type, values, children } = props;\n const [mode, setMode] = useLocalStorage<PnLMode>(\n \"TP/SL_Mode\",\n PnLMode.PERCENTAGE,\n );\n const { t } = useTranslation();\n\n const tipsEle = useMemo(() => {\n if (!values.PnL || !values.trigger_price) {\n return null;\n }\n return (\n <Flex>\n <span className={\"oui-text-xs oui-text-base-contrast-54\"}>\n {mode === PnLMode.PnL\n ? t(\"orderEntry.estRoi\")\n : t(\"orderEntry.estPnL\")}\n </span>\n {mode === PnLMode.PnL ? (\n <Text.numeral\n rule={\"percentages\"}\n className={cn(\n \"oui-ml-1 oui-text-xs\",\n type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n >\n {values.ROI}\n </Text.numeral>\n ) : (\n <Text.numeral\n rule={\"price\"}\n className={cn(\n \"oui-ml-1 oui-text-xs\",\n type === \"TP\" ? \"oui-text-trade-profit\" : \"oui-text-trade-loss\",\n )}\n >\n {values.PnL}\n </Text.numeral>\n )}\n </Flex>\n );\n }, [mode, values.ROI, values.PnL, values.trigger_price]);\n\n const memoizedValue = useMemo<PnlInputContextState>(() => {\n return { mode, setMode, tipsEle };\n }, [mode, setMode, tipsEle]);\n\n return (\n <PnlInputContext.Provider value={memoizedValue}>\n {children}\n </PnlInputContext.Provider>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport {\n useComputedLTV,\n useEventEmitter,\n useLocalStorage,\n useMarginRatio,\n useMemoizedFn,\n useOrderEntry,\n useOrderlyContext,\n useTpslPriceChecker,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n DistributionType,\n OrderLevel,\n OrderSide,\n OrderType,\n PositionType,\n} from \"@kodiak-finance/orderly-types\";\nimport { Decimal, removeTrailingZeros } from \"@kodiak-finance/orderly-utils\";\nimport { useAskAndBid } from \"./hooks/useAskAndBid\";\nimport { useBBOState } from \"./hooks/useBBOState\";\nimport { useCanTrade } from \"./hooks/useCanTrade\";\nimport { useFocusAndBlur } from \"./hooks/useFocusAndBlur\";\nimport { usePriceInputContainer } from \"./hooks/usePriceInputContainer\";\nimport { InputType } from \"./types\";\nimport { BBOStatus, isBBOOrder, safeNumber } from \"./utils\";\n\nexport type OrderEntryScriptInputs = {\n symbol: string;\n};\n\nexport const ORDERLY_ORDER_SOUND_ALERT_KEY = \"orderly_order_sound_alert\";\n\nexport type OrderEntryScriptReturn = ReturnType<typeof useOrderEntryScript>;\n\nexport const useOrderEntryScript = (inputs: OrderEntryScriptInputs) => {\n const { symbol } = inputs;\n const [localOrderType, setLocalOrderType] = useLocalStorage(\n \"orderly-order-entry-order-type\",\n OrderType.LIMIT,\n );\n const [localOrderSide, setLocalOrderSide] = useLocalStorage(\n \"orderly-order-entry-order-side\",\n OrderSide.BUY,\n );\n\n const { notification } = useOrderlyContext();\n\n const [soundAlert, setSoundAlert] = useLocalStorage<boolean>(\n ORDERLY_ORDER_SOUND_ALERT_KEY,\n notification?.orderFilled?.defaultOpen ?? false,\n );\n\n const canTrade = useCanTrade();\n\n const {\n formattedOrder,\n setValue,\n setValues: setOrderValues,\n symbolInfo,\n ...state\n } = useOrderEntry(symbol, {\n initialOrder: {\n symbol,\n order_type: localOrderType,\n position_type: PositionType.PARTIAL,\n side: localOrderSide,\n },\n });\n\n const [tpslSwitch, setTpslSwitch] = useLocalStorage(\n \"orderly-order-entry-tp_sl-switch\",\n false,\n );\n\n const { currentLeverage } = useMarginRatio();\n const ee = useEventEmitter();\n const triggerPriceInputRef = useRef<HTMLInputElement | null>(null);\n const priceInputRef = useRef<HTMLInputElement | null>(null);\n const activatedPriceInputRef = useRef<HTMLInputElement | null>(null);\n\n const { bboStatus, bboType, setBBOType, onBBOChange, toggleBBO } =\n useBBOState({\n tpslSwitch,\n order_type: formattedOrder.order_type,\n order_type_ext: formattedOrder.order_type_ext,\n side: formattedOrder.side,\n setOrderValues,\n });\n\n const {\n currentFocusInput,\n lastScaledOrderPriceInput,\n lastQuantityInputType,\n onFocus,\n onBlur,\n } = useFocusAndBlur({\n base_tick: symbolInfo?.base_tick,\n order_type: formattedOrder.order_type,\n order_quantity: formattedOrder.order_quantity,\n setValue,\n });\n\n // cancel TP/SL\n const cancelTP_SL = () => {\n // if(formattedOrder.)\n setOrderValues({\n tp_trigger_price: \"\",\n sl_trigger_price: \"\",\n position_type: PositionType.FULL,\n });\n };\n\n const enableTP_SL = () => {\n setOrderValues({\n order_type_ext: undefined,\n position_type: PositionType.FULL,\n });\n };\n\n const setOrderValue = useMemoizedFn(\n (\n key: any,\n value: any,\n options?: {\n shouldUpdateLastChangedField?: boolean;\n },\n ) => {\n if (key === \"order_type\") {\n setLocalOrderType(value);\n }\n if (key === \"side\") {\n setLocalOrderSide(value);\n }\n\n if (\n (key === \"reduce_only\" && value) ||\n (key === \"order_type\" &&\n (value === OrderType.STOP_LIMIT || value === OrderType.STOP_MARKET))\n ) {\n // cancelTP_SL();\n\n const data = {\n tp_trigger_price: \"\",\n sl_trigger_price: \"\",\n [key]: value,\n };\n\n if (key === \"order_type\") {\n data[\"order_type_ext\" as any] = \"\";\n }\n\n setOrderValues(data);\n\n return;\n }\n\n if (key === \"order_type\" && value !== OrderType.LIMIT) {\n const data = {\n level: undefined,\n order_type_ext: undefined,\n [key]: value,\n };\n\n setOrderValues(data);\n\n return;\n }\n\n if (key === \"order_type\" && value === OrderType.SCALED) {\n setOrderValues({\n distribution_type: DistributionType.FLAT,\n [key]: value,\n });\n return;\n }\n\n setValue(key, value, options);\n },\n );\n\n const onTPSLSwitchChanged = (state: boolean) => {\n setTpslSwitch(state);\n if (state) {\n enableTP_SL();\n } else {\n cancelTP_SL();\n }\n };\n\n useEffect(() => {\n const updateOrderPrice = (price: string) => {\n setValue(\"order_price\", price);\n };\n ee.on(\"update:orderPrice\", updateOrderPrice);\n\n return () => {\n ee.off(\"update:orderPrice\", updateOrderPrice);\n };\n }, []);\n\n useEffect(() => {\n const focusInputElement = (target: HTMLInputElement | null) => {\n requestAnimationFrame(() => {\n target?.focus();\n });\n };\n\n // handle orderbook item click event\n const orderBookItemClickHandler = (item: number[]) => {\n const price = removeTrailingZeros(item[0]);\n const { order_type, order_type_ext } = formattedOrder;\n\n // handle trigger price input, focus on trigger price input\n if (\n currentFocusInput.current === InputType.TRIGGER_PRICE &&\n (order_type === OrderType.STOP_LIMIT ||\n order_type === OrderType.STOP_MARKET)\n ) {\n setValue(\"trigger_price\", price);\n focusInputElement(triggerPriceInputRef.current);\n return;\n }\n\n // handle bbo order, unselect bbo and set order price, focus on order price input\n if (isBBOOrder({ order_type, order_type_ext })) {\n setBBOType(undefined);\n\n setOrderValues({\n order_type_ext: undefined,\n level: undefined,\n });\n\n requestAnimationFrame(() => {\n // Since BBO will update the price when unselected, we should set order price in requestAnimationFrame\n // We can't call setValue directly here because it's inside a requestAnimationFrame, and the formattedOrder accessed inside setValue would be the old value\n // setValue(\"order_price\", price);\n ee.emit(\"update:orderPrice\", price);\n });\n\n focusInputElement(priceInputRef.current);\n return;\n }\n\n // handle limit order and stop limit order, set order price and focus on order price input\n if (\n order_type === OrderType.STOP_LIMIT ||\n order_type === OrderType.LIMIT\n ) {\n setValue(\"order_price\", price);\n focusInputElement(priceInputRef.current);\n return;\n }\n\n // handle stop market order, set trigger price and focus on trigger price input\n if (order_type === OrderType.STOP_MARKET) {\n setValue(\"trigger_price\", price);\n focusInputElement(triggerPriceInputRef.current);\n return;\n }\n\n // handle market order, set order type to limit\n if (order_type === OrderType.MARKET) {\n // unselect bbo\n setBBOType(undefined);\n\n // You can't call setValue twice here , the second value will override the first, so you need to combine them into a single setValues call\n setOrderValues({\n order_type: OrderType.LIMIT,\n order_price: price,\n });\n\n focusInputElement(priceInputRef.current);\n return;\n }\n\n if (\n order_type === OrderType.SCALED &&\n lastScaledOrderPriceInput.current\n ) {\n const field =\n lastScaledOrderPriceInput.current === InputType.START_PRICE\n ? \"start_price\"\n : \"end_price\";\n setValue(field, price);\n focusInputElement(priceInputRef.current);\n return;\n }\n\n // handle trailing stop order, set activated price and focus on activated price input\n if (order_type === OrderType.TRAILING_STOP) {\n setValue(\"activated_price\", price);\n focusInputElement(activatedPriceInputRef.current);\n return;\n }\n\n // default, set order price and focus on order price input\n setValue(\"order_price\", price);\n focusInputElement(priceInputRef.current);\n };\n\n ee.on(\"orderbook:item:click\", orderBookItemClickHandler);\n\n return () => {\n ee.off(\"orderbook:item:click\", orderBookItemClickHandler);\n };\n // Please do not modify this deps lightly, because `setValue` also relies on these state internally\n }, [formattedOrder, symbolInfo]);\n\n useEffect(() => {\n // after switching symbol, all the input number should be cleared (price, qty, TP/SL, etc)\n state.reset();\n state.resetMetaState();\n // reset last quantity input type\n lastQuantityInputType.current = InputType.NONE;\n }, [symbol]);\n\n // if scaled order, and distribution_type is not set, set it to flat\n useEffect(() => {\n if (\n formattedOrder.order_type === OrderType.SCALED &&\n !formattedOrder.distribution_type\n ) {\n setValue(\"distribution_type\", DistributionType.FLAT);\n }\n }, [formattedOrder.order_type, formattedOrder.distribution_type]);\n\n const currentLtv = useComputedLTV();\n const askAndBid = useAskAndBid();\n\n const fillMiddleValue = () => {\n if (bboStatus === BBOStatus.ON) {\n toggleBBO();\n }\n if (formattedOrder.order_type === OrderType.LIMIT) {\n const [bestAsk = 0, bestBid = 0] = askAndBid;\n const midPrice = new Decimal(safeNumber(bestAsk))\n .add(safeNumber(bestBid))\n .div(2)\n .toNumber();\n // 1. Since BBO will update the price when unselected, we should set order price in raf\n // 2. raf is mainly used to solve the timing problem caused by React state update, ensuring that the orderPrice is triggered after the state is fully updated to avoid accessing expired state values.\n requestAnimationFrame(() => {\n ee.emit(\"update:orderPrice\", midPrice);\n });\n }\n };\n\n const { priceInputContainerRef, priceInputContainerWidth } =\n usePriceInputContainer({\n order_type_ext: formattedOrder.order_type_ext,\n });\n\n const slPriceError = useTpslPriceChecker({\n slPrice: formattedOrder.sl_trigger_price,\n liqPrice: state.estLiqPrice,\n side: formattedOrder.side,\n });\n\n useEffect(() => {\n if (formattedOrder.reduce_only) {\n setTpslSwitch(false);\n }\n }, [formattedOrder.reduce_only]);\n\n useEffect(() => {\n if (tpslSwitch) {\n setOrderValue(\"reduce_only\", false);\n }\n }, [tpslSwitch]);\n\n return {\n ...state,\n slPriceError: slPriceError ?? undefined,\n side: formattedOrder.side as OrderSide,\n type: formattedOrder.order_type as OrderType,\n level: formattedOrder.level as OrderLevel,\n formattedOrder,\n setOrderValue,\n setOrderValues,\n currentLeverage,\n\n // cancelTP_SL,\n // enableTP_SL,\n tpslSwitch,\n setTpslSwitch: onTPSLSwitchChanged,\n symbolInfo,\n onFocus,\n onBlur,\n\n priceInputRef,\n priceInputContainerRef,\n priceInputContainerWidth,\n triggerPriceInputRef,\n activatedPriceInputRef,\n lastQuantityInputType,\n\n canTrade,\n bboStatus,\n bboType,\n onBBOChange,\n toggleBBO,\n currentLtv,\n fillMiddleValue,\n symbol,\n soundAlert,\n setSoundAlert,\n currentFocusInput,\n };\n};\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { useLocalStorage, useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport {\n BBOOrderType,\n OrderlyOrder,\n OrderSide,\n OrderType,\n TrackerEventName,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n BBOStatus,\n getOrderLevelByBBO,\n getOrderTypeByBBO,\n isBBOOrder,\n} from \"../utils\";\n\nexport function useBBOState({\n tpslSwitch,\n order_type,\n order_type_ext,\n side,\n setOrderValues,\n}: {\n tpslSwitch: boolean;\n order_type?: OrderType;\n order_type_ext?: OrderType;\n side?: OrderSide;\n setOrderValues: (values: Partial<OrderlyOrder>) => void;\n}) {\n const [localBBOType, setLocalBBOType] = useLocalStorage<\n BBOOrderType | undefined\n >(\"orderly_order_bbo_type\", undefined);\n\n const lastBBOType = useRef<BBOOrderType>(localBBOType);\n\n const { track } = useTrack();\n\n const bboStatus = useMemo(() => {\n if (\n tpslSwitch ||\n [OrderType.POST_ONLY, OrderType.IOC, OrderType.FOK].includes(\n order_type_ext!,\n )\n ) {\n return BBOStatus.DISABLED;\n }\n\n return localBBOType && order_type === OrderType.LIMIT\n ? BBOStatus.ON\n : BBOStatus.OFF;\n }, [tpslSwitch, order_type_ext, order_type, localBBOType]);\n\n const toggleBBO = () => {\n track(TrackerEventName.clickBBOButton);\n if (localBBOType) {\n // unselect bbo\n setLocalBBOType(undefined);\n // update formattedOrder values immediately instead of via useEffect\n setOrderValues({\n order_type_ext: undefined,\n level: undefined,\n });\n } else {\n setLocalBBOType(lastBBOType.current || BBOOrderType.COUNTERPARTY1);\n }\n };\n\n const onBBOChange = (value: BBOOrderType) => {\n setLocalBBOType(value);\n lastBBOType.current = value;\n };\n\n useEffect(() => {\n if (bboStatus === BBOStatus.DISABLED) {\n setOrderValues({\n // if order_type_ext is not bbo(ask, bid), keep previous value\n order_type_ext: isBBOOrder({ order_type_ext })\n ? undefined\n : order_type_ext,\n level: undefined,\n });\n }\n }, [bboStatus, order_type_ext]);\n\n useEffect(() => {\n if (bboStatus === BBOStatus.ON) {\n const orderType = getOrderTypeByBBO(localBBOType, side!);\n const orderLevel = getOrderLevelByBBO(localBBOType)!;\n setOrderValues({\n order_type_ext: orderType,\n level: orderLevel,\n });\n }\n }, [localBBOType, bboStatus, side]);\n\n return {\n bboStatus,\n bboType: localBBOType,\n setBBOType: setLocalBBOType,\n onBBOChange,\n toggleBBO,\n };\n}\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\n\nexport function useCanTrade() {\n const { state } = useAccount();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n return canTrade;\n}\n","import { useRef, FocusEvent } from \"react\";\nimport {\n OrderEntryReturn,\n useMemoizedFn,\n utils,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { InputType } from \"../types\";\n\ntype FocusAndBlurProps = {\n base_tick: number;\n order_type?: OrderType;\n order_quantity?: string;\n setValue: OrderEntryReturn[\"setValue\"];\n};\n\nexport function useFocusAndBlur(props: FocusAndBlurProps) {\n const { base_tick, order_type, order_quantity, setValue } = props;\n const currentFocusInput = useRef<InputType>(InputType.NONE);\n const lastScaledOrderPriceInput = useRef<InputType>(InputType.END_PRICE);\n const lastQuantityInputType = useRef<InputType>(InputType.NONE);\n\n const formatQty = () => {\n if (\n base_tick < 1 ||\n // scaled order should not format quantity, because it is total quantity\n order_type === OrderType.SCALED ||\n !order_quantity\n ) {\n return;\n }\n\n // TODO: use this to format quantity instead of utils.formatNumber, need time to test\n // const formatQty = new Decimal(formattedOrder.order_quantity)\n // .todp(0, Decimal.ROUND_DOWN)\n // .div(symbolInfo.base_tick)\n // .toString();\n\n const quantity = utils.formatNumber(\n order_quantity,\n new Decimal(base_tick || \"0\").toNumber(),\n );\n\n setValue(\"order_quantity\", quantity, {\n shouldUpdateLastChangedField: false,\n });\n };\n\n const onFocus = (type: InputType) => (_: FocusEvent) => {\n currentFocusInput.current = type;\n\n // set last scaled order price input\n if (\n [InputType.START_PRICE, InputType.END_PRICE].includes(\n currentFocusInput.current!,\n )\n ) {\n lastScaledOrderPriceInput.current = type;\n }\n\n if (\n [InputType.QUANTITY, InputType.TOTAL, InputType.MARGIN].includes(type)\n ) {\n lastQuantityInputType.current = type;\n }\n };\n\n const onBlur = (type: InputType) => (_: FocusEvent) => {\n setTimeout(() => {\n if (currentFocusInput.current !== type) {\n return;\n }\n currentFocusInput.current = InputType.NONE;\n }, 300);\n\n if (type === InputType.QUANTITY) {\n formatQty();\n }\n };\n\n return {\n currentFocusInput,\n lastScaledOrderPriceInput,\n lastQuantityInputType,\n onFocus: useMemoizedFn(onFocus),\n onBlur: useMemoizedFn(onBlur),\n };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { OrderType } from \"@kodiak-finance/orderly-types\";\n\nexport function usePriceInputContainer({\n order_type_ext,\n}: {\n order_type_ext?: OrderType;\n}) {\n const [priceInputContainerWidth, setPriceInputContainerWidth] = useState(0);\n const priceInputContainerRef = useRef<HTMLDivElement | null>(null);\n\n // useEffect(() => {\n // if (\n // priceInputContainerRef.current &&\n // // update BBO select width when is BBO order\n // isBBOOrder({ order_type_ext: formattedOrder.order_type_ext })\n // ) {\n // const width =\n // priceInputContainerRef.current.getBoundingClientRect()?.width;\n // if (width) {\n // setPriceInputContainerWidth(width);\n // }\n // }\n // }, [priceInputContainerRef, formattedOrder.order_type_ext]);\n\n useEffect(() => {\n const element = priceInputContainerRef.current;\n\n if (!element) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry.contentRect.width;\n if (width) {\n // update BBO order select dropdown width when priceInputContainerRef width changed\n setPriceInputContainerWidth(width);\n }\n }\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.unobserve(element);\n };\n }, [priceInputContainerRef, order_type_ext]);\n\n return { priceInputContainerRef, priceInputContainerWidth };\n}\n","import React from \"react\";\nimport {\n OrderEntryScriptInputs,\n useOrderEntryScript,\n} from \"./orderEntry.script\";\nimport { OrderEntry } from \"./orderEntry.ui\";\n\nexport const OrderEntryWidget: React.FC<\n OrderEntryScriptInputs & {\n containerRef?: React.RefObject<HTMLDivElement>;\n disableFeatures?: (\"slippageSetting\" | \"feesInfo\")[];\n }\n> = (props) => {\n const state = useOrderEntryScript(props);\n return (\n <OrderEntry\n {...state}\n containerRef={props.containerRef}\n disableFeatures={props.disableFeatures}\n />\n );\n};\n"]}
|