@orderly.network/ui-leverage 2.7.2 → 2.7.3
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.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -8
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/leverage.ui.tsx","../src/leverage.script.ts","../src/leverage.widget.tsx","../src/symbolLeverage/index.ts","../src/symbolLeverage/symbolLeverage.script.tsx","../src/symbolLeverage/symbolLeverage.ui.tsx","../src/symbolLeverage/symbolLeverage.widget.tsx"],"names":["i18n","registerSimpleDialog","registerSimpleSheet","React","useId","useTranslation","Box","Button","Flex","Input","Slider","Text","cn","PlusIcon","ReduceIcon","inputFormatter","jsx","jsxs","IconButton","props","Icon","onClick","disabled","LeverageInput","formatters","id","Leverage","currentLeverage","LeverageHeader","LeverageSelector","LeverageSlider","LeverageFooter","t","value","onLeverageChange","option","leverageLevers","maxLeverage","className","showSliderTip","e","item","index","useCallback","useMemo","useState","useLeverage","toast","useLeverageScript","options","setShowSliderTip","curLeverage","isLoading","update","marks","leverage","setLeverage","step","onLeverageIncrease","prev","onLeverageReduce","onInputChange","parsed","onSave","err","isReduceDisabled","isIncreaseDisabled","toggles","LeverageEditor","state","useAccountInfo","useLocalStorage","useMarkPricesStream","usePortfolio","usePositionStream","useSymbolLeverage","useSymbolsInfo","accountPerp","positionsPerp","OrderSide","modal","useScreen","zero","useSymbolLeverageScript","symbol","side","isMobile","position","maxPositionNotional","maxPositionLeverage","overMaxPositionLeverage","overRequiredMargin","useCalc","formattedLeverageLevers","generateLeverageLevers","onConfirmSave","res","isBuy","max","min","parts","result","i","inputs","symbolsInfo","accountInfo","markPrices","totalCollateral","unPnlPriceBasis","setUnPnlPriceBasic","positions","IMRFactor","notional","freeCollateral","positionList","totalInitialMarginWithOrders","Trans","TokenIcon","Badge","Divider","SymbolLeverage","LeverageBadge","SymbolLeverageWidget","SymbolLeverageSheetId","SymbolLeverageDialogId","LeverageWidgetWithDialogId","LeverageWidgetWithSheetId"],"mappings":"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","sourcesContent":["import { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { LeverageEditor } from \"./leverage.widget\";\n\nexport { LeverageEditor, type LeverageEditorProps } from \"./leverage.widget\";\nexport { Leverage, LeverageSlider, LeverageHeader } from \"./leverage.ui\";\nexport type {\n LeverageProps,\n LeverageSliderProps,\n LeverageHeaderProps,\n} from \"./leverage.ui\";\nexport {\n useLeverageScript,\n type LeverageScriptReturns,\n} from \"./leverage.script\";\nexport * from \"./symbolLeverage\";\n\nexport const LeverageWidgetWithDialogId = \"LeverageWidgetWithDialog\";\nexport const LeverageWidgetWithSheetId = \"LeverageWidgetWithSheet\";\n\nregisterSimpleDialog(LeverageWidgetWithDialogId, LeverageEditor, {\n title: () => i18n.t(\"leverage.maxAccountLeverage\"),\n size: \"md\",\n});\n\nregisterSimpleSheet(LeverageWidgetWithSheetId, LeverageEditor, {\n title: () => i18n.t(\"leverage.maxAccountLeverage\"),\n});\n","import React, { FC, useId } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n Flex,\n Input,\n Slider,\n Text,\n cn,\n PlusIcon,\n ReduceIcon,\n inputFormatter,\n InputFormatter,\n} from \"@orderly.network/ui\";\nimport { LeverageScriptReturns } from \"./leverage.script\";\n\nconst IconButton: React.FC<{\n Icon: React.ComponentType<any>;\n onClick: React.MouseEventHandler<SVGSVGElement>;\n disabled: boolean;\n}> = (props) => {\n const { Icon, onClick, disabled } = props;\n return (\n <Icon\n onClick={disabled ? undefined : onClick}\n className={cn(\n \"oui-m-2 oui-text-white oui-transition-all\",\n disabled\n ? \"oui-cursor-not-allowed oui-opacity-20\"\n : \"oui-cursor-pointer oui-opacity-100\",\n )}\n />\n );\n};\n\ntype LeverageInputProps = LeverageProps & {\n classNames?: {\n input?: string;\n unit?: string;\n };\n};\n\nexport const LeverageInput: React.FC<LeverageInputProps> = (props) => {\n const formatters = React.useMemo<InputFormatter[]>(\n () => [inputFormatter.numberFormatter, inputFormatter.dpFormatter(0)],\n [],\n );\n const id = useId();\n return (\n <label\n htmlFor={id}\n className={cn(\n \"oui-w-full\",\n \"oui-rounded\",\n \"oui-bg-base-6\",\n \"oui-flex\",\n \"oui-items-center\",\n \"oui-justify-between\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-light\",\n \"oui-input-root\",\n )}\n >\n <IconButton\n Icon={ReduceIcon}\n onClick={props.onLeverageReduce}\n disabled={props.isReduceDisabled}\n />\n <Flex itemAlign=\"center\" justify=\"center\" className=\"oui-mr-4\">\n <Input\n value={props.value}\n id={id}\n autoComplete=\"off\"\n classNames={{\n input: cn(\"oui-text-right oui-text-[24px]\"),\n root: cn(\n \"oui-w-12\",\n \"oui-px-0\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-none\",\n ),\n }}\n formatters={formatters}\n onChange={props.onInputChange}\n />\n <div\n className={cn(\n \"oui-ml-1 oui-mt-1 oui-select-none\",\n \"oui-text-base oui-text-base-contrast-36\",\n )}\n >\n x\n </div>\n </Flex>\n <IconButton\n Icon={PlusIcon}\n onClick={props.onLeverageIncrease}\n disabled={props.isIncreaseDisabled}\n />\n </label>\n );\n};\n\nexport type LeverageProps = LeverageScriptReturns;\n\nexport const Leverage: FC<LeverageProps> = (props) => {\n const { currentLeverage } = props;\n const { t } = useTranslation();\n return (\n <Flex itemAlign={\"start\"} direction={\"column\"} mb={0}>\n <LeverageHeader currentLeverage={currentLeverage} />\n <LeverageInput {...props} />\n <LeverageSelector {...props} />\n <LeverageSlider {...props} />\n <LeverageFooter {...props} />\n </Flex>\n );\n};\n\nexport const LeverageFooter: FC<LeverageProps & { isMobile?: boolean }> = (\n props,\n) => {\n const { t } = useTranslation();\n return (\n <Flex direction={\"row\"} gap={2} width={\"100%\"} mt={0} pt={5}>\n <Button\n variant=\"contained\"\n color=\"gray\"\n fullWidth\n onClick={props.onCancel}\n data-testid=\"oui-testid-leverage-cancel-btn\"\n size={props.isMobile ? \"md\" : \"lg\"}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n fullWidth\n loading={props.isLoading}\n onClick={props.onSave}\n data-testid=\"oui-testid-leverage-save-btn\"\n disabled={props.disabled}\n size={props.isMobile ? \"md\" : \"lg\"}\n >\n {t(\"common.save\")}\n </Button>\n </Flex>\n );\n};\n\nexport type LeverageHeaderProps = Pick<LeverageProps, \"currentLeverage\">;\n\nexport const LeverageHeader: FC<LeverageHeaderProps> = (props) => {\n const { t } = useTranslation();\n const { currentLeverage } = props;\n return (\n <Flex justify={\"center\"} width={\"100%\"} mb={2}>\n <Flex gap={1}>\n {`${t(\"common.current\")}:`}\n <Text.numeral unit=\"x\" size={\"sm\"} intensity={80} dp={0}>\n {currentLeverage ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n\ninterface LeverageSelectorProps {\n value: number;\n onLeverageChange: (value: number) => void;\n toggles: number[];\n}\n\nexport const LeverageSelector: React.FC<LeverageSelectorProps> = (props) => {\n const { value, onLeverageChange } = props;\n return (\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n width={\"100%\"}\n mt={4}\n className=\"oui-text-base-contrast-80\"\n >\n {props.toggles.map((option) => (\n <Flex\n key={option}\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\n `oui-box-border oui-cursor-pointer oui-rounded-md oui-border oui-border-solid oui-bg-clip-padding oui-px-3 oui-py-2.5 oui-transition-all`,\n value === option\n ? \"oui-border-primary oui-bg-base-6\"\n : \"oui-border-line-12\",\n )}\n onClick={() => onLeverageChange?.(option)}\n >\n <Flex\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(`oui-h-3 oui-w-9 oui-select-none`)}\n >\n {option}x\n </Flex>\n </Flex>\n ))}\n </Flex>\n );\n};\n\nexport type LeverageSliderProps = {\n maxLeverage?: number;\n value: number;\n onLeverageChange: (value: number) => void;\n setShowSliderTip: (value: boolean) => void;\n showSliderTip: boolean;\n className?: string;\n onValueCommit?: (value: number[]) => void;\n leverageLevers: number[];\n};\n\nexport const LeverageSlider: FC<LeverageSliderProps> = (props) => {\n const {\n leverageLevers,\n maxLeverage = 0,\n className,\n value,\n showSliderTip,\n } = props;\n return (\n <Box pt={4} width={\"100%\"} className={className}>\n <Slider\n // step={1.04}\n max={maxLeverage}\n min={1}\n // markLabelVisible={true}\n // marks={props.marks}\n markCount={5}\n value={[value]}\n onValueChange={(e) => {\n props.onLeverageChange(e[0]);\n props.setShowSliderTip(true);\n }}\n color=\"primary\"\n onValueCommit={(e) => {\n props.onValueCommit?.(e);\n props.setShowSliderTip(false);\n }}\n showTip={showSliderTip}\n tipFormatter={(value) => {\n return `${value}x`;\n }}\n />\n <Flex justify={\"between\"} width={\"100%\"} pt={3}>\n {leverageLevers?.map((item, index) => {\n return (\n <button\n key={item}\n onClick={() => {\n props.onLeverageChange(item);\n props.onValueCommit?.([item]);\n }}\n className={cn(\n \"oui-pb-3 oui-text-2xs\",\n index === 0\n ? \"oui-pr-2\"\n : index === 5\n ? \"oui-pl-0\"\n : \"oui-ml-2 oui-px-0\",\n props.value >= item && \"oui-text-primary-light\",\n )}\n data-testid={`oui-testid-leverage-${item}-btn`}\n >\n {`${item}x`}\n </button>\n );\n })}\n </Flex>\n </Box>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { SliderMarks, toast } from \"@orderly.network/ui\";\n\ntype UseLeverageScriptOptions = {\n close?: () => void;\n};\n\nexport type LeverageScriptReturns = ReturnType<typeof useLeverageScript>;\n\nexport const useLeverageScript = (options?: UseLeverageScriptOptions) => {\n const [showSliderTip, setShowSliderTip] = useState(false);\n const { t } = useTranslation();\n\n const { curLeverage, maxLeverage, isLoading, leverageLevers, update } =\n useLeverage();\n\n const marks = useMemo<SliderMarks>(() => {\n return leverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n }));\n }, [leverageLevers]);\n\n const [leverage, setLeverage] = useState<number>(curLeverage ?? 0);\n\n const step = 100 / ((marks?.length || 0) - 1);\n\n const onLeverageChange = (leverage: number) => {\n setLeverage(leverage);\n };\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev + 1);\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev - 1);\n };\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value);\n const value = Number.isNaN(parsed) ? \"\" : parsed;\n setLeverage(value as number);\n },\n [maxLeverage],\n );\n\n const onSave = async () => {\n try {\n update({ leverage }).then(\n () => {\n options?.close?.();\n toast.success(t(\"leverage.updated\"));\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch (err) {\n console.log(\"update leverage error\", err);\n }\n };\n\n const isReduceDisabled = leverage <= 1;\n const isIncreaseDisabled = leverage >= maxLeverage;\n const disabled = !leverage || leverage < 1 || leverage > maxLeverage;\n\n const toggles = useMemo(() => {\n return [5, 10, 20, 50, 100].filter((e) => e <= maxLeverage);\n }, [maxLeverage]);\n\n return {\n leverageLevers,\n currentLeverage: curLeverage,\n value: leverage,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled,\n isIncreaseDisabled,\n disabled,\n step,\n onCancel: options?.close,\n onSave,\n isLoading: isLoading,\n showSliderTip,\n setShowSliderTip,\n maxLeverage,\n toggles,\n };\n};\n","import { FC } from \"react\";\nimport { Leverage } from \"./leverage.ui\";\nimport { useLeverageScript } from \"./leverage.script\";\n\nexport type LeverageEditorProps = {\n close?: () => void;\n};\n\nexport const LeverageEditor: FC<LeverageEditorProps> = (props) => {\n const state = useLeverageScript({ close: props.close });\n return <Leverage {...state} />;\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { SymbolLeverageWidget } from \"./symbolLeverage.widget\";\n\nexport {\n SymbolLeverageWidget,\n type SymbolLeverageWidgetProps,\n} from \"./symbolLeverage.widget\";\n\nexport const SymbolLeverageSheetId = \"SymbolLeverageSheetId\";\nexport const SymbolLeverageDialogId = \"SymbolLeverageDialogId\";\n\n// Register sheet version for mobile\nregisterSimpleSheet(SymbolLeverageSheetId, SymbolLeverageWidget, {\n title: () => i18n.t(\"leverage.adjustedLeverage\"),\n classNames: {\n // content: \"oui-p-5\",\n },\n});\n\n// Register dialog version for desktop\nregisterSimpleDialog(SymbolLeverageDialogId, SymbolLeverageWidget, {\n title: () => i18n.t(\"leverage.adjustedLeverage\"),\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n useAccountInfo,\n useLocalStorage,\n useMarkPricesStream,\n usePortfolio,\n usePositionStream,\n useSymbolLeverage,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n account as accountPerp,\n positions as positionsPerp,\n} from \"@orderly.network/perp\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport {\n modal,\n SliderMarks,\n toast,\n useScreen,\n Text,\n} from \"@orderly.network/ui\";\nimport { zero } from \"@orderly.network/utils\";\n\ntype UseLeverageScriptOptions = {\n close?: () => void;\n};\n\nexport type SymbolLeverageScriptOptions = {\n symbol: string;\n side?: OrderSide;\n curLeverage: number;\n};\n\nexport type SymbolLeverageScriptReturns = ReturnType<\n typeof useSymbolLeverageScript\n>;\n\nexport const useSymbolLeverageScript = (\n options: SymbolLeverageScriptOptions & UseLeverageScriptOptions,\n) => {\n const { curLeverage = 1, symbol, side } = options;\n const [showSliderTip, setShowSliderTip] = useState(false);\n const [leverage, setLeverage] = useState<number>(curLeverage);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n\n const { maxLeverage, update, isLoading } = useSymbolLeverage(symbol);\n\n const {\n position,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n } = useCalc({ symbol: symbol!, leverage, maxLeverage });\n\n const formattedLeverageLevers = useMemo(() => {\n return generateLeverageLevers(maxLeverage);\n }, [maxLeverage]);\n\n const marks = useMemo<SliderMarks>(() => {\n return (\n formattedLeverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n })) || []\n );\n }, [formattedLeverageLevers]);\n\n const step = useMemo(() => {\n return 100 / ((marks?.length || 0) - 1);\n }, [marks]);\n\n const onLeverageChange = (leverage: number) => {\n setLeverage(leverage);\n };\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev + 1);\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev - 1);\n };\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value);\n const value = Number.isNaN(parsed) ? \"\" : parsed;\n setLeverage(value as number);\n },\n [maxLeverage],\n );\n\n const onConfirmSave = async () => {\n try {\n update?.({ leverage, symbol }).then(\n (res) => {\n if (res.success) {\n options?.close?.();\n toast.success(t(\"leverage.updated\"));\n } else {\n toast.error(res.message);\n }\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch (err) {\n console.log(\"update leverage error\", err);\n }\n };\n\n const onSave = async () => {\n modal.confirm({\n title: t(\"leverage.confirm\"),\n content: <Text intensity={54}>{t(\"leverage.confirm.content\")}</Text>,\n onOk: onConfirmSave,\n onCancel: () => {\n return Promise.resolve();\n },\n });\n };\n\n const isReduceDisabled = leverage <= 1;\n const isIncreaseDisabled = leverage >= maxLeverage;\n\n const isBuy = side\n ? side === OrderSide.BUY\n : position?.position_qty && position.position_qty > 0;\n\n const disabled =\n !leverage ||\n leverage < 1 ||\n leverage > maxLeverage ||\n overRequiredMargin ||\n overMaxPositionLeverage;\n\n return {\n leverageLevers: formattedLeverageLevers,\n currentLeverage: curLeverage,\n value: leverage,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled,\n isIncreaseDisabled,\n disabled,\n step,\n onCancel: options?.close,\n onSave,\n isLoading,\n showSliderTip,\n setShowSliderTip,\n maxLeverage,\n toggles: formattedLeverageLevers,\n symbol,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n isBuy,\n isMobile,\n };\n};\n\n// 5x: 1x, 2x, 3x, 4x, 5x\n// 10x: 1x, 3x, 5x, 8x, 10x\n// 20x: 1x, 5x, 10x, 15x, 20x\n// 50x: 1x, 10x, 20x, 35x, 50x\n// 100x: 1x, 20x, 50x, 75x, 100x\nconst generateLeverageLevers = (max: number) => {\n if (max === 10) {\n return [1, 3, 5, 8, 10];\n } else if (max === 50) {\n return [1, 10, 20, 35, 50];\n }\n\n const min = 1;\n const parts = 5;\n const step = (max - min) / (parts - 1);\n const result: number[] = [];\n for (let i = 0; i < parts; i++) {\n result.push(Math.floor(min + step * i));\n }\n return result;\n};\n\nfunction useCalc(inputs: {\n symbol: string;\n leverage: number;\n maxLeverage: number;\n}) {\n const { symbol, leverage, maxLeverage } = inputs;\n\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n const { data: markPrices } = useMarkPricesStream();\n const { totalCollateral } = usePortfolio();\n\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\",\n );\n const [positions] = usePositionStream(\"all\", {\n calcMode: unPnlPriceBasis,\n });\n\n const position = useMemo(() => {\n if (symbol && positions?.rows?.length) {\n return positions.rows.find((item) => item.symbol === symbol);\n }\n }, [positions, symbol]);\n\n /** the highest allowable leverage. Block users from setting leverage above this limit. */\n const maxPositionLeverage = useMemo(() => {\n const IMRFactor = accountInfo?.imr_factor?.[symbol];\n const notional = position?.notional;\n // when user has existing position\n if (IMRFactor && notional) {\n const maxPositionLeverage = positionsPerp.maxPositionLeverage({\n IMRFactor,\n notional,\n });\n return Math.min(maxPositionLeverage, maxLeverage);\n }\n\n // when user has no existing position\n return maxLeverage;\n }, [position, maxLeverage, symbol]);\n\n /** calculate maximum position at current leverage */\n const maxPositionNotional = useMemo(() => {\n const IMRFactor = accountInfo?.imr_factor?.[symbol];\n if (leverage && IMRFactor) {\n return positionsPerp.maxPositionNotional({\n leverage,\n IMRFactor,\n });\n }\n }, [leverage, symbol]);\n\n const overMaxPositionLeverage = useMemo(() => {\n return leverage > maxPositionLeverage;\n }, [leverage, maxPositionLeverage]);\n\n // calc free collateral with new leverage\n const freeCollateral = useMemo(() => {\n if (!accountInfo || !markPrices || !symbolsInfo) {\n return zero;\n }\n\n const positionList = leverage\n ? positions?.rows.map((item) => {\n if (item.symbol === symbol) {\n return {\n ...item,\n leverage,\n };\n }\n return item;\n })\n : positions?.rows;\n\n const totalInitialMarginWithOrders = accountPerp.totalInitialMarginWithQty({\n positions: positionList,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo: symbolsInfo,\n });\n\n const freeCollateral = accountPerp.freeCollateral({\n totalCollateral,\n totalInitialMarginWithOrders,\n });\n\n return freeCollateral;\n }, [\n positions,\n symbolsInfo,\n accountInfo,\n markPrices,\n totalCollateral,\n leverage,\n symbol,\n ]);\n\n const overRequiredMargin = useMemo(() => {\n return freeCollateral.eq(0) || freeCollateral.isNegative();\n }, [freeCollateral]);\n\n return {\n position,\n freeCollateral,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n };\n}\n","import { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { TokenIcon, Text, Badge, Divider, Flex, cn } from \"@orderly.network/ui\";\nimport { LeverageHeader } from \"../index\";\nimport {\n LeverageInput,\n LeverageSelector,\n LeverageSlider,\n LeverageFooter,\n} from \"../leverage.ui\";\nimport { SymbolLeverageScriptReturns } from \"./symbolLeverage.script\";\n\nexport const SymbolLeverage = (props: SymbolLeverageScriptReturns) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3 lg:oui-gap-4\">\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <TokenIcon symbol={props.symbol} className=\"oui-size-5\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size={props.isMobile ? \"xs\" : \"base\"}\n weight=\"semibold\"\n intensity={98}\n >\n {props.symbol}\n </Text.formatted>\n <div\n className={cn([\"oui-ml-auto oui-flex oui-items-center oui-gap-1\"])}\n >\n <Badge color={props.isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {props.isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge leverage={props.currentLeverage} />\n </div>\n </div>\n <Divider />\n <Flex itemAlign={\"start\"} direction={\"column\"} mb={0}>\n <LeverageHeader currentLeverage={props.currentLeverage} />\n <LeverageInput {...props} />\n <LeverageSelector {...props} />\n <LeverageSlider {...props} />\n <Divider className=\"oui-mb-3 oui-w-full\" />\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-pb-4 oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {/* <div>\n <Trans\n i18nKey=\"leverage.maxPositionLeverage.tips\"\n values={{ amount: props.maxPositionNotional }}\n components={[\n // @ts-ignore\n <Text.numeral\n as=\"span\"\n key=\"0\"\n className=\"oui-text-base-contrast\"\n dp={0}\n />,\n ]}\n />\n </div> */}\n <div>\n <Trans\n i18nKey=\"leverage.maxAvailableLeverage.tips\"\n values={{ leverage: props.maxPositionLeverage }}\n components={[\n // @ts-ignore\n <Text.numeral\n dp={0}\n suffix=\"x\"\n as=\"span\"\n key=\"0\"\n className=\"oui-text-base-contrast\"\n />,\n ]}\n />\n </div>\n <div>{t(\"leverage.actualPositionLeverage.tips\")}</div>\n </div>\n <div\n className={cn([\n \"-oui-mb-2\",\n props.overRequiredMargin || props.overMaxPositionLeverage\n ? \"oui-block oui-text-xs oui-font-normal\"\n : \"oui-hidden\",\n ])}\n >\n {props.overRequiredMargin && (\n <div>\n <Text color=\"warning\">\n {t(\"leverage.overRequiredMargin.tips\")}\n </Text>\n </div>\n )}\n {props.overMaxPositionLeverage && (\n <div>\n <Text color=\"warning\">\n <Trans\n i18nKey=\"leverage.overMaxPositionLeverage.tips\"\n values={{ leverage: props.maxPositionLeverage }}\n components={[\n // @ts-ignore\n <Text.numeral dp={0} suffix=\"X\" as=\"span\" key=\"0\" />,\n ]}\n />\n </Text>\n </div>\n )}\n </div>\n <LeverageFooter {...props} />\n </Flex>\n </div>\n );\n};\n\nconst LeverageBadge = ({ leverage }: { leverage: number }) => {\n return (\n <div\n className={cn(\n \"oui-flex oui-h-[18px] oui-items-center oui-gap-1\",\n \"oui-cursor-pointer oui-rounded oui-bg-line-6 oui-px-2\",\n \"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\",\n )}\n >\n <Text>Cross</Text>\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport {\n SymbolLeverageScriptOptions,\n useSymbolLeverageScript,\n} from \"./symbolLeverage.script\";\nimport { SymbolLeverage } from \"./symbolLeverage.ui\";\n\nexport type SymbolLeverageWidgetProps = {\n close?: () => void;\n} & SymbolLeverageScriptOptions;\n\nexport const SymbolLeverageWidget: FC<SymbolLeverageWidgetProps> = (props) => {\n const state = useSymbolLeverageScript(props);\n return <SymbolLeverage {...state} />;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/leverage.ui.tsx","../src/leverage.script.ts","../src/leverage.widget.tsx","../src/symbolLeverage/index.ts","../src/symbolLeverage/symbolLeverage.script.tsx","../src/symbolLeverage/symbolLeverage.ui.tsx","../src/symbolLeverage/symbolLeverage.widget.tsx"],"names":["i18n","registerSimpleDialog","registerSimpleSheet","React","useId","useTranslation","Box","Button","Flex","Input","Slider","Text","cn","PlusIcon","ReduceIcon","inputFormatter","jsx","jsxs","IconButton","props","Icon","onClick","disabled","LeverageInput","formatters","id","Leverage","currentLeverage","LeverageHeader","LeverageSelector","LeverageSlider","LeverageFooter","t","value","onLeverageChange","option","leverageLevers","maxLeverage","className","showSliderTip","e","item","index","useCallback","useMemo","useState","useLeverage","toast","useLeverageScript","options","setShowSliderTip","curLeverage","isLoading","update","marks","leverage","setLeverage","step","onLeverageIncrease","prev","onLeverageReduce","onInputChange","parsed","onSave","err","isReduceDisabled","isIncreaseDisabled","toggles","LeverageEditor","state","useAccountInfo","useLocalStorage","useMarkPricesStream","usePortfolio","usePositionStream","useSymbolLeverage","useSymbolsInfo","accountPerp","positionsPerp","OrderSide","modal","useScreen","zero","useSymbolLeverageScript","symbol","side","isMobile","position","maxPositionNotional","maxPositionLeverage","overMaxPositionLeverage","overRequiredMargin","useCalc","formattedLeverageLevers","generateLeverageLevers","onConfirmSave","res","isBuy","max","min","parts","result","i","inputs","symbolsInfo","accountInfo","markPrices","totalCollateral","unPnlPriceBasis","setUnPnlPriceBasic","positions","IMRFactor","notional","freeCollateral","positionList","totalInitialMarginWithOrders","Trans","TokenIcon","Badge","Divider","SymbolLeverage","LeverageBadge","SymbolLeverageWidget","SymbolLeverageSheetId","SymbolLeverageDialogId","LeverageWidgetWithDialogId","LeverageWidgetWithSheetId"],"mappings":"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","sourcesContent":["import { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { LeverageEditor } from \"./leverage.widget\";\n\nexport { LeverageEditor, type LeverageEditorProps } from \"./leverage.widget\";\nexport { Leverage, LeverageSlider, LeverageHeader } from \"./leverage.ui\";\nexport type {\n LeverageProps,\n LeverageSliderProps,\n LeverageHeaderProps,\n} from \"./leverage.ui\";\nexport {\n useLeverageScript,\n type LeverageScriptReturns,\n} from \"./leverage.script\";\nexport * from \"./symbolLeverage\";\n\nexport const LeverageWidgetWithDialogId = \"LeverageWidgetWithDialog\";\nexport const LeverageWidgetWithSheetId = \"LeverageWidgetWithSheet\";\n\nregisterSimpleDialog(LeverageWidgetWithDialogId, LeverageEditor, {\n title: () => i18n.t(\"leverage.maxAccountLeverage\"),\n size: \"md\",\n});\n\nregisterSimpleSheet(LeverageWidgetWithSheetId, LeverageEditor, {\n title: () => i18n.t(\"leverage.maxAccountLeverage\"),\n});\n","import React, { FC, useId } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n Flex,\n Input,\n Slider,\n Text,\n cn,\n PlusIcon,\n ReduceIcon,\n inputFormatter,\n InputFormatter,\n} from \"@orderly.network/ui\";\nimport { LeverageScriptReturns } from \"./leverage.script\";\n\nconst IconButton: React.FC<{\n Icon: React.ComponentType<any>;\n onClick: React.MouseEventHandler<SVGSVGElement>;\n disabled: boolean;\n}> = (props) => {\n const { Icon, onClick, disabled } = props;\n return (\n <Icon\n onClick={disabled ? undefined : onClick}\n className={cn(\n \"oui-m-2 oui-text-white oui-transition-all\",\n disabled\n ? \"oui-cursor-not-allowed oui-opacity-20\"\n : \"oui-cursor-pointer oui-opacity-100\",\n )}\n />\n );\n};\n\ntype LeverageInputProps = LeverageProps & {\n classNames?: {\n input?: string;\n unit?: string;\n };\n};\n\nexport const LeverageInput: React.FC<LeverageInputProps> = (props) => {\n const formatters = React.useMemo<InputFormatter[]>(\n () => [inputFormatter.numberFormatter, inputFormatter.dpFormatter(0)],\n [],\n );\n const id = useId();\n return (\n <label\n htmlFor={id}\n className={cn(\n \"oui-w-full\",\n \"oui-rounded\",\n \"oui-bg-base-6\",\n \"oui-flex\",\n \"oui-items-center\",\n \"oui-justify-between\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-light\",\n \"oui-input-root\",\n )}\n >\n <IconButton\n Icon={ReduceIcon}\n onClick={props.onLeverageReduce}\n disabled={props.isReduceDisabled}\n />\n <Flex itemAlign=\"center\" justify=\"center\" className=\"oui-mr-4\">\n <Input\n value={props.value}\n id={id}\n autoComplete=\"off\"\n classNames={{\n input: cn(\"oui-text-right oui-text-[24px]\"),\n root: cn(\n \"oui-w-12\",\n \"oui-px-0\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-none\",\n ),\n }}\n formatters={formatters}\n onChange={props.onInputChange}\n />\n <div\n className={cn(\n \"oui-ml-1 oui-mt-1 oui-select-none\",\n \"oui-text-base oui-text-base-contrast-36\",\n )}\n >\n x\n </div>\n </Flex>\n <IconButton\n Icon={PlusIcon}\n onClick={props.onLeverageIncrease}\n disabled={props.isIncreaseDisabled}\n />\n </label>\n );\n};\n\nexport type LeverageProps = LeverageScriptReturns;\n\nexport const Leverage: FC<LeverageProps> = (props) => {\n const { currentLeverage } = props;\n const { t } = useTranslation();\n return (\n <Flex itemAlign={\"start\"} direction={\"column\"} mb={0}>\n <LeverageHeader currentLeverage={currentLeverage} />\n <LeverageInput {...props} />\n <LeverageSelector {...props} />\n <LeverageSlider {...props} />\n <LeverageFooter {...props} />\n </Flex>\n );\n};\n\nexport const LeverageFooter: FC<LeverageProps & { isMobile?: boolean }> = (\n props,\n) => {\n const { t } = useTranslation();\n return (\n <Flex direction={\"row\"} gap={2} width={\"100%\"} mt={0} pt={5}>\n <Button\n variant=\"contained\"\n color=\"gray\"\n fullWidth\n onClick={props.onCancel}\n data-testid=\"oui-testid-leverage-cancel-btn\"\n size={props.isMobile ? \"md\" : \"lg\"}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n fullWidth\n loading={props.isLoading}\n onClick={props.onSave}\n data-testid=\"oui-testid-leverage-save-btn\"\n disabled={props.disabled}\n size={props.isMobile ? \"md\" : \"lg\"}\n >\n {t(\"common.save\")}\n </Button>\n </Flex>\n );\n};\n\nexport type LeverageHeaderProps = Pick<LeverageProps, \"currentLeverage\">;\n\nexport const LeverageHeader: FC<LeverageHeaderProps> = (props) => {\n const { t } = useTranslation();\n const { currentLeverage } = props;\n return (\n <Flex justify={\"center\"} width={\"100%\"} mb={2}>\n <Flex gap={1}>\n {`${t(\"common.current\")}:`}\n <Text.numeral unit=\"x\" size={\"sm\"} intensity={80} dp={0}>\n {currentLeverage ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n\ninterface LeverageSelectorProps {\n value: number;\n onLeverageChange: (value: number) => void;\n toggles: number[];\n}\n\nexport const LeverageSelector: React.FC<LeverageSelectorProps> = (props) => {\n const { value, onLeverageChange } = props;\n return (\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n width={\"100%\"}\n mt={4}\n className=\"oui-text-base-contrast-80\"\n >\n {props.toggles.map((option) => (\n <Flex\n key={option}\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\n `oui-box-border oui-cursor-pointer oui-rounded-md oui-border oui-border-solid oui-bg-clip-padding oui-px-3 oui-py-2.5 oui-transition-all`,\n value === option\n ? \"oui-border-primary oui-bg-base-6\"\n : \"oui-border-line-12\",\n )}\n onClick={() => onLeverageChange?.(option)}\n >\n <Flex\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(`oui-h-3 oui-w-9 oui-select-none`)}\n >\n {option}x\n </Flex>\n </Flex>\n ))}\n </Flex>\n );\n};\n\nexport type LeverageSliderProps = {\n maxLeverage?: number;\n value: number;\n onLeverageChange: (value: number) => void;\n setShowSliderTip: (value: boolean) => void;\n showSliderTip: boolean;\n className?: string;\n onValueCommit?: (value: number[]) => void;\n leverageLevers: number[];\n};\n\nexport const LeverageSlider: FC<LeverageSliderProps> = (props) => {\n const {\n leverageLevers,\n maxLeverage = 0,\n className,\n value,\n showSliderTip,\n } = props;\n return (\n <Box pt={4} width={\"100%\"} className={className}>\n <Slider\n // step={1.04}\n max={maxLeverage}\n min={1}\n // markLabelVisible={true}\n // marks={props.marks}\n markCount={5}\n value={[value]}\n onValueChange={(e) => {\n props.onLeverageChange(e[0]);\n props.setShowSliderTip(true);\n }}\n color=\"primary\"\n onValueCommit={(e) => {\n props.onValueCommit?.(e);\n props.setShowSliderTip(false);\n }}\n showTip={showSliderTip}\n tipFormatter={(value) => {\n return `${value}x`;\n }}\n />\n <Flex justify={\"between\"} width={\"100%\"} pt={3}>\n {leverageLevers?.map((item, index) => {\n return (\n <button\n key={item}\n onClick={() => {\n props.onLeverageChange(item);\n props.onValueCommit?.([item]);\n }}\n className={cn(\n \"oui-pb-3 oui-text-2xs\",\n index === 0\n ? \"oui-pr-2\"\n : index === 5\n ? \"oui-pl-0\"\n : \"oui-ml-2 oui-px-0\",\n props.value >= item && \"oui-text-primary-light\",\n )}\n data-testid={`oui-testid-leverage-${item}-btn`}\n >\n {`${item}x`}\n </button>\n );\n })}\n </Flex>\n </Box>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { SliderMarks, toast } from \"@orderly.network/ui\";\n\ntype UseLeverageScriptOptions = {\n close?: () => void;\n};\n\nexport type LeverageScriptReturns = ReturnType<typeof useLeverageScript>;\n\nexport const useLeverageScript = (options?: UseLeverageScriptOptions) => {\n const [showSliderTip, setShowSliderTip] = useState(false);\n const { t } = useTranslation();\n\n const { curLeverage, maxLeverage, isLoading, leverageLevers, update } =\n useLeverage();\n\n const marks = useMemo<SliderMarks>(() => {\n return leverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n }));\n }, [leverageLevers]);\n\n const [leverage, setLeverage] = useState<number>(curLeverage ?? 0);\n\n const step = 100 / ((marks?.length || 0) - 1);\n\n const onLeverageChange = (leverage: number) => {\n setLeverage(leverage);\n };\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev + 1);\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev - 1);\n };\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value);\n const value = Number.isNaN(parsed) ? \"\" : parsed;\n setLeverage(value as number);\n },\n [maxLeverage],\n );\n\n const onSave = async () => {\n try {\n update({ leverage }).then(\n () => {\n options?.close?.();\n toast.success(t(\"leverage.updated\"));\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch (err) {\n console.log(\"update leverage error\", err);\n }\n };\n\n const isReduceDisabled = leverage <= 1;\n const isIncreaseDisabled = leverage >= maxLeverage;\n const disabled = !leverage || leverage < 1 || leverage > maxLeverage;\n\n const toggles = useMemo(() => {\n return [5, 10, 20, 50, 100].filter((e) => e <= maxLeverage);\n }, [maxLeverage]);\n\n return {\n leverageLevers,\n currentLeverage: curLeverage,\n value: leverage,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled,\n isIncreaseDisabled,\n disabled,\n step,\n onCancel: options?.close,\n onSave,\n isLoading: isLoading,\n showSliderTip,\n setShowSliderTip,\n maxLeverage,\n toggles,\n };\n};\n","import { FC } from \"react\";\nimport { Leverage } from \"./leverage.ui\";\nimport { useLeverageScript } from \"./leverage.script\";\n\nexport type LeverageEditorProps = {\n close?: () => void;\n};\n\nexport const LeverageEditor: FC<LeverageEditorProps> = (props) => {\n const state = useLeverageScript({ close: props.close });\n return <Leverage {...state} />;\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { SymbolLeverageWidget } from \"./symbolLeverage.widget\";\n\nexport {\n SymbolLeverageWidget,\n type SymbolLeverageWidgetProps,\n} from \"./symbolLeverage.widget\";\n\nexport const SymbolLeverageSheetId = \"SymbolLeverageSheetId\";\nexport const SymbolLeverageDialogId = \"SymbolLeverageDialogId\";\n\n// Register sheet version for mobile\nregisterSimpleSheet(SymbolLeverageSheetId, SymbolLeverageWidget, {\n title: () => i18n.t(\"leverage.adjustedLeverage\"),\n classNames: {\n // content: \"oui-p-5\",\n },\n});\n\n// Register dialog version for desktop\nregisterSimpleDialog(SymbolLeverageDialogId, SymbolLeverageWidget, {\n title: () => i18n.t(\"leverage.adjustedLeverage\"),\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n useAccountInfo,\n useLocalStorage,\n useMarkPricesStream,\n usePortfolio,\n usePositionStream,\n useSymbolLeverage,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n account as accountPerp,\n positions as positionsPerp,\n} from \"@orderly.network/perp\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport {\n modal,\n SliderMarks,\n toast,\n useScreen,\n Text,\n} from \"@orderly.network/ui\";\nimport { zero } from \"@orderly.network/utils\";\n\ntype UseLeverageScriptOptions = {\n close?: () => void;\n};\n\nexport type SymbolLeverageScriptOptions = {\n symbol: string;\n side?: OrderSide;\n curLeverage: number;\n};\n\nexport type SymbolLeverageScriptReturns = ReturnType<\n typeof useSymbolLeverageScript\n>;\n\nexport const useSymbolLeverageScript = (\n options: SymbolLeverageScriptOptions & UseLeverageScriptOptions,\n) => {\n const { curLeverage = 1, symbol, side } = options;\n const [showSliderTip, setShowSliderTip] = useState(false);\n const [leverage, setLeverage] = useState<number>(curLeverage);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n\n const { maxLeverage, update, isLoading } = useSymbolLeverage(symbol);\n\n const {\n position,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n } = useCalc({ symbol: symbol!, leverage, maxLeverage });\n\n const formattedLeverageLevers = useMemo(() => {\n return generateLeverageLevers(maxLeverage);\n }, [maxLeverage]);\n\n const marks = useMemo<SliderMarks>(() => {\n return (\n formattedLeverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n })) || []\n );\n }, [formattedLeverageLevers]);\n\n const step = useMemo(() => {\n return 100 / ((marks?.length || 0) - 1);\n }, [marks]);\n\n const onLeverageChange = (leverage: number) => {\n setLeverage(leverage);\n };\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev + 1);\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev - 1);\n };\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value);\n const value = Number.isNaN(parsed) ? \"\" : parsed;\n setLeverage(value as number);\n },\n [maxLeverage],\n );\n\n const onConfirmSave = async () => {\n try {\n update?.({ leverage, symbol }).then(\n (res) => {\n if (res.success) {\n options?.close?.();\n toast.success(t(\"leverage.updated\"));\n } else {\n toast.error(res.message);\n }\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch (err) {\n console.log(\"update leverage error\", err);\n }\n };\n\n const onSave = async () => {\n modal.confirm({\n title: t(\"leverage.confirm\"),\n content: <Text intensity={54}>{t(\"leverage.confirm.content\")}</Text>,\n onOk: onConfirmSave,\n onCancel: () => {\n return Promise.resolve();\n },\n });\n };\n\n const isReduceDisabled = leverage <= 1;\n const isIncreaseDisabled = leverage >= maxLeverage;\n\n const isBuy = side\n ? side === OrderSide.BUY\n : position?.position_qty && position.position_qty > 0;\n\n const disabled =\n !leverage ||\n leverage < 1 ||\n leverage > maxLeverage ||\n overRequiredMargin ||\n overMaxPositionLeverage;\n\n return {\n leverageLevers: formattedLeverageLevers,\n currentLeverage: curLeverage,\n value: leverage,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled,\n isIncreaseDisabled,\n disabled,\n step,\n onCancel: options?.close,\n onSave,\n isLoading,\n showSliderTip,\n setShowSliderTip,\n maxLeverage,\n toggles: formattedLeverageLevers,\n symbol,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n isBuy,\n isMobile,\n };\n};\n\n// 5x: 1x, 2x, 3x, 4x, 5x\n// 10x: 1x, 3x, 5x, 8x, 10x\n// 20x: 1x, 5x, 10x, 15x, 20x\n// 50x: 1x, 10x, 20x, 35x, 50x\n// 100x: 1x, 20x, 50x, 75x, 100x\nconst generateLeverageLevers = (max: number) => {\n if (max === 10) {\n return [1, 3, 5, 8, 10];\n } else if (max === 50) {\n return [1, 10, 20, 35, 50];\n }\n\n const min = 1;\n const parts = 5;\n const step = (max - min) / (parts - 1);\n const result: number[] = [];\n for (let i = 0; i < parts; i++) {\n result.push(Math.floor(min + step * i));\n }\n return result;\n};\n\nfunction useCalc(inputs: {\n symbol: string;\n leverage: number;\n maxLeverage: number;\n}) {\n const { symbol, leverage, maxLeverage } = inputs;\n\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n const { data: markPrices } = useMarkPricesStream();\n const { totalCollateral } = usePortfolio();\n\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\",\n );\n const [positions] = usePositionStream(\"all\", {\n calcMode: unPnlPriceBasis,\n });\n\n const position = useMemo(() => {\n if (symbol && positions?.rows?.length) {\n return positions.rows.find((item) => item.symbol === symbol);\n }\n }, [positions, symbol]);\n\n /** the highest allowable leverage. Block users from setting leverage above this limit. */\n const maxPositionLeverage = useMemo(() => {\n const IMRFactor = accountInfo?.imr_factor?.[symbol];\n const notional = position?.notional;\n // when user has existing position\n if (IMRFactor && notional) {\n const maxPositionLeverage = positionsPerp.maxPositionLeverage({\n IMRFactor,\n notional,\n });\n return Math.min(maxPositionLeverage, maxLeverage);\n }\n\n // when user has no existing position\n return maxLeverage;\n }, [position, maxLeverage, symbol]);\n\n /** calculate maximum position at current leverage */\n const maxPositionNotional = useMemo(() => {\n const IMRFactor = accountInfo?.imr_factor?.[symbol];\n if (leverage && IMRFactor) {\n return positionsPerp.maxPositionNotional({\n leverage,\n IMRFactor,\n });\n }\n }, [leverage, symbol]);\n\n const overMaxPositionLeverage = useMemo(() => {\n return leverage > maxPositionLeverage;\n }, [leverage, maxPositionLeverage]);\n\n // calc free collateral with new leverage\n const freeCollateral = useMemo(() => {\n if (!accountInfo || !markPrices || !symbolsInfo) {\n return zero;\n }\n\n const positionList = leverage\n ? positions?.rows.map((item) => {\n if (item.symbol === symbol) {\n return {\n ...item,\n leverage,\n };\n }\n return item;\n })\n : positions?.rows;\n\n const totalInitialMarginWithOrders = accountPerp.totalInitialMarginWithQty({\n positions: positionList,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n // not used\n maxLeverage: accountInfo.max_leverage,\n symbolInfo: symbolsInfo,\n });\n\n const freeCollateral = accountPerp.freeCollateral({\n totalCollateral,\n totalInitialMarginWithOrders,\n });\n\n return freeCollateral;\n }, [\n positions,\n symbolsInfo,\n accountInfo,\n markPrices,\n totalCollateral,\n leverage,\n symbol,\n ]);\n\n const overRequiredMargin = useMemo(() => {\n return freeCollateral.eq(0) || freeCollateral.isNegative();\n }, [freeCollateral]);\n\n return {\n position,\n freeCollateral,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n };\n}\n","import { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { TokenIcon, Text, Badge, Divider, Flex, cn } from \"@orderly.network/ui\";\nimport { LeverageHeader } from \"../index\";\nimport {\n LeverageInput,\n LeverageSelector,\n LeverageSlider,\n LeverageFooter,\n} from \"../leverage.ui\";\nimport { SymbolLeverageScriptReturns } from \"./symbolLeverage.script\";\n\nexport const SymbolLeverage = (props: SymbolLeverageScriptReturns) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3 lg:oui-gap-4\">\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <TokenIcon symbol={props.symbol} className=\"oui-size-5\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size={props.isMobile ? \"xs\" : \"base\"}\n weight=\"semibold\"\n intensity={98}\n >\n {props.symbol}\n </Text.formatted>\n <div\n className={cn([\"oui-ml-auto oui-flex oui-items-center oui-gap-1\"])}\n >\n <Badge color={props.isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {props.isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge leverage={props.currentLeverage} />\n </div>\n </div>\n <Divider />\n <Flex itemAlign={\"start\"} direction={\"column\"} mb={0}>\n <LeverageHeader currentLeverage={props.currentLeverage} />\n <LeverageInput {...props} />\n <LeverageSelector {...props} />\n <LeverageSlider {...props} />\n <Divider className=\"oui-mb-3 oui-w-full\" />\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-pb-4 oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {/* <div>\n <Trans\n i18nKey=\"leverage.maxPositionLeverage.tips\"\n values={{ amount: props.maxPositionNotional }}\n components={[\n // @ts-ignore\n <Text.numeral\n as=\"span\"\n key=\"0\"\n className=\"oui-text-base-contrast\"\n dp={0}\n />,\n ]}\n />\n </div> */}\n <div>\n <Trans\n i18nKey=\"leverage.maxAvailableLeverage.tips\"\n values={{ leverage: props.maxPositionLeverage }}\n components={[\n // @ts-ignore\n <Text.numeral\n dp={0}\n suffix=\"x\"\n as=\"span\"\n key=\"0\"\n className=\"oui-text-base-contrast\"\n />,\n ]}\n />\n </div>\n <div>{t(\"leverage.actualPositionLeverage.tips\")}</div>\n </div>\n <div\n className={cn([\n \"-oui-mb-2\",\n props.overRequiredMargin || props.overMaxPositionLeverage\n ? \"oui-block oui-text-xs oui-font-normal\"\n : \"oui-hidden\",\n ])}\n >\n {props.overRequiredMargin && (\n <div>\n <Text color=\"warning\">\n {t(\"leverage.overRequiredMargin.tips\")}\n </Text>\n </div>\n )}\n {props.overMaxPositionLeverage && (\n <div>\n <Text color=\"warning\">\n <Trans\n i18nKey=\"leverage.overMaxPositionLeverage.tips\"\n values={{ leverage: props.maxPositionLeverage }}\n components={[\n // @ts-ignore\n <Text.numeral dp={0} suffix=\"X\" as=\"span\" key=\"0\" />,\n ]}\n />\n </Text>\n </div>\n )}\n </div>\n <LeverageFooter {...props} />\n </Flex>\n </div>\n );\n};\n\nconst LeverageBadge = ({ leverage }: { leverage: number }) => {\n return (\n <div\n className={cn(\n \"oui-flex oui-h-[18px] oui-items-center oui-gap-1\",\n \"oui-cursor-pointer oui-rounded oui-bg-line-6 oui-px-2\",\n \"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\",\n )}\n >\n <Text>Cross</Text>\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport {\n SymbolLeverageScriptOptions,\n useSymbolLeverageScript,\n} from \"./symbolLeverage.script\";\nimport { SymbolLeverage } from \"./symbolLeverage.ui\";\n\nexport type SymbolLeverageWidgetProps = {\n close?: () => void;\n} & SymbolLeverageScriptOptions;\n\nexport const SymbolLeverageWidget: FC<SymbolLeverageWidgetProps> = (props) => {\n const state = useSymbolLeverageScript(props);\n return <SymbolLeverage {...state} />;\n};\n"]}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/leverage.ui.tsx","../src/leverage.script.ts","../src/leverage.widget.tsx","../src/symbolLeverage/index.ts","../src/symbolLeverage/symbolLeverage.script.tsx","../src/symbolLeverage/symbolLeverage.ui.tsx","../src/symbolLeverage/symbolLeverage.widget.tsx"],"names":["i18n","registerSimpleDialog","registerSimpleSheet","React","useId","useTranslation","Box","Button","Flex","Input","Slider","Text","cn","PlusIcon","ReduceIcon","inputFormatter","jsx","jsxs","IconButton","props","Icon","onClick","disabled","LeverageInput","formatters","id","Leverage","currentLeverage","LeverageHeader","LeverageSelector","LeverageSlider","LeverageFooter","t","value","onLeverageChange","option","leverageLevers","maxLeverage","className","showSliderTip","e","item","index","useCallback","useMemo","useState","useLeverage","toast","useLeverageScript","options","setShowSliderTip","curLeverage","isLoading","update","marks","leverage","setLeverage","step","onLeverageIncrease","prev","onLeverageReduce","onInputChange","parsed","onSave","err","isReduceDisabled","isIncreaseDisabled","toggles","LeverageEditor","state","useAccountInfo","useLocalStorage","useMarkPricesStream","usePortfolio","usePositionStream","useSymbolLeverage","useSymbolsInfo","accountPerp","positionsPerp","OrderSide","modal","useScreen","zero","useSymbolLeverageScript","symbol","side","isMobile","position","maxPositionNotional","maxPositionLeverage","overMaxPositionLeverage","overRequiredMargin","useCalc","formattedLeverageLevers","generateLeverageLevers","onConfirmSave","res","isBuy","max","min","parts","result","i","inputs","symbolsInfo","accountInfo","markPrices","totalCollateral","unPnlPriceBasis","setUnPnlPriceBasic","positions","IMRFactor","notional","freeCollateral","positionList","totalInitialMarginWithOrders","Trans","TokenIcon","Badge","Divider","SymbolLeverage","LeverageBadge","SymbolLeverageWidget","SymbolLeverageSheetId","SymbolLeverageDialogId","LeverageWidgetWithDialogId","LeverageWidgetWithSheetId"],"mappings":"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","sourcesContent":["import { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { LeverageEditor } from \"./leverage.widget\";\n\nexport { LeverageEditor, type LeverageEditorProps } from \"./leverage.widget\";\nexport { Leverage, LeverageSlider, LeverageHeader } from \"./leverage.ui\";\nexport type {\n LeverageProps,\n LeverageSliderProps,\n LeverageHeaderProps,\n} from \"./leverage.ui\";\nexport {\n useLeverageScript,\n type LeverageScriptReturns,\n} from \"./leverage.script\";\nexport * from \"./symbolLeverage\";\n\nexport const LeverageWidgetWithDialogId = \"LeverageWidgetWithDialog\";\nexport const LeverageWidgetWithSheetId = \"LeverageWidgetWithSheet\";\n\nregisterSimpleDialog(LeverageWidgetWithDialogId, LeverageEditor, {\n title: () => i18n.t(\"leverage.maxAccountLeverage\"),\n size: \"md\",\n});\n\nregisterSimpleSheet(LeverageWidgetWithSheetId, LeverageEditor, {\n title: () => i18n.t(\"leverage.maxAccountLeverage\"),\n});\n","import React, { FC, useId } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n Flex,\n Input,\n Slider,\n Text,\n cn,\n PlusIcon,\n ReduceIcon,\n inputFormatter,\n InputFormatter,\n} from \"@orderly.network/ui\";\nimport { LeverageScriptReturns } from \"./leverage.script\";\n\nconst IconButton: React.FC<{\n Icon: React.ComponentType<any>;\n onClick: React.MouseEventHandler<SVGSVGElement>;\n disabled: boolean;\n}> = (props) => {\n const { Icon, onClick, disabled } = props;\n return (\n <Icon\n onClick={disabled ? undefined : onClick}\n className={cn(\n \"oui-m-2 oui-text-white oui-transition-all\",\n disabled\n ? \"oui-cursor-not-allowed oui-opacity-20\"\n : \"oui-cursor-pointer oui-opacity-100\",\n )}\n />\n );\n};\n\ntype LeverageInputProps = LeverageProps & {\n classNames?: {\n input?: string;\n unit?: string;\n };\n};\n\nexport const LeverageInput: React.FC<LeverageInputProps> = (props) => {\n const formatters = React.useMemo<InputFormatter[]>(\n () => [inputFormatter.numberFormatter, inputFormatter.dpFormatter(0)],\n [],\n );\n const id = useId();\n return (\n <label\n htmlFor={id}\n className={cn(\n \"oui-w-full\",\n \"oui-rounded\",\n \"oui-bg-base-6\",\n \"oui-flex\",\n \"oui-items-center\",\n \"oui-justify-between\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-light\",\n \"oui-input-root\",\n )}\n >\n <IconButton\n Icon={ReduceIcon}\n onClick={props.onLeverageReduce}\n disabled={props.isReduceDisabled}\n />\n <Flex itemAlign=\"center\" justify=\"center\" className=\"oui-mr-4\">\n <Input\n value={props.value}\n id={id}\n autoComplete=\"off\"\n classNames={{\n input: cn(\"oui-text-right oui-text-[24px]\"),\n root: cn(\n \"oui-w-12\",\n \"oui-px-0\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-none\",\n ),\n }}\n formatters={formatters}\n onChange={props.onInputChange}\n />\n <div\n className={cn(\n \"oui-ml-1 oui-mt-1 oui-select-none\",\n \"oui-text-base oui-text-base-contrast-36\",\n )}\n >\n x\n </div>\n </Flex>\n <IconButton\n Icon={PlusIcon}\n onClick={props.onLeverageIncrease}\n disabled={props.isIncreaseDisabled}\n />\n </label>\n );\n};\n\nexport type LeverageProps = LeverageScriptReturns;\n\nexport const Leverage: FC<LeverageProps> = (props) => {\n const { currentLeverage } = props;\n const { t } = useTranslation();\n return (\n <Flex itemAlign={\"start\"} direction={\"column\"} mb={0}>\n <LeverageHeader currentLeverage={currentLeverage} />\n <LeverageInput {...props} />\n <LeverageSelector {...props} />\n <LeverageSlider {...props} />\n <LeverageFooter {...props} />\n </Flex>\n );\n};\n\nexport const LeverageFooter: FC<LeverageProps & { isMobile?: boolean }> = (\n props,\n) => {\n const { t } = useTranslation();\n return (\n <Flex direction={\"row\"} gap={2} width={\"100%\"} mt={0} pt={5}>\n <Button\n variant=\"contained\"\n color=\"gray\"\n fullWidth\n onClick={props.onCancel}\n data-testid=\"oui-testid-leverage-cancel-btn\"\n size={props.isMobile ? \"md\" : \"lg\"}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n fullWidth\n loading={props.isLoading}\n onClick={props.onSave}\n data-testid=\"oui-testid-leverage-save-btn\"\n disabled={props.disabled}\n size={props.isMobile ? \"md\" : \"lg\"}\n >\n {t(\"common.save\")}\n </Button>\n </Flex>\n );\n};\n\nexport type LeverageHeaderProps = Pick<LeverageProps, \"currentLeverage\">;\n\nexport const LeverageHeader: FC<LeverageHeaderProps> = (props) => {\n const { t } = useTranslation();\n const { currentLeverage } = props;\n return (\n <Flex justify={\"center\"} width={\"100%\"} mb={2}>\n <Flex gap={1}>\n {`${t(\"common.current\")}:`}\n <Text.numeral unit=\"x\" size={\"sm\"} intensity={80} dp={0}>\n {currentLeverage ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n\ninterface LeverageSelectorProps {\n value: number;\n onLeverageChange: (value: number) => void;\n toggles: number[];\n}\n\nexport const LeverageSelector: React.FC<LeverageSelectorProps> = (props) => {\n const { value, onLeverageChange } = props;\n return (\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n width={\"100%\"}\n mt={4}\n className=\"oui-text-base-contrast-80\"\n >\n {props.toggles.map((option) => (\n <Flex\n key={option}\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\n `oui-box-border oui-cursor-pointer oui-rounded-md oui-border oui-border-solid oui-bg-clip-padding oui-px-3 oui-py-2.5 oui-transition-all`,\n value === option\n ? \"oui-border-primary oui-bg-base-6\"\n : \"oui-border-line-12\",\n )}\n onClick={() => onLeverageChange?.(option)}\n >\n <Flex\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(`oui-h-3 oui-w-9 oui-select-none`)}\n >\n {option}x\n </Flex>\n </Flex>\n ))}\n </Flex>\n );\n};\n\nexport type LeverageSliderProps = {\n maxLeverage?: number;\n value: number;\n onLeverageChange: (value: number) => void;\n setShowSliderTip: (value: boolean) => void;\n showSliderTip: boolean;\n className?: string;\n onValueCommit?: (value: number[]) => void;\n leverageLevers: number[];\n};\n\nexport const LeverageSlider: FC<LeverageSliderProps> = (props) => {\n const {\n leverageLevers,\n maxLeverage = 0,\n className,\n value,\n showSliderTip,\n } = props;\n return (\n <Box pt={4} width={\"100%\"} className={className}>\n <Slider\n // step={1.04}\n max={maxLeverage}\n min={1}\n // markLabelVisible={true}\n // marks={props.marks}\n markCount={5}\n value={[value]}\n onValueChange={(e) => {\n props.onLeverageChange(e[0]);\n props.setShowSliderTip(true);\n }}\n color=\"primary\"\n onValueCommit={(e) => {\n props.onValueCommit?.(e);\n props.setShowSliderTip(false);\n }}\n showTip={showSliderTip}\n tipFormatter={(value) => {\n return `${value}x`;\n }}\n />\n <Flex justify={\"between\"} width={\"100%\"} pt={3}>\n {leverageLevers?.map((item, index) => {\n return (\n <button\n key={item}\n onClick={() => {\n props.onLeverageChange(item);\n props.onValueCommit?.([item]);\n }}\n className={cn(\n \"oui-pb-3 oui-text-2xs\",\n index === 0\n ? \"oui-pr-2\"\n : index === 5\n ? \"oui-pl-0\"\n : \"oui-ml-2 oui-px-0\",\n props.value >= item && \"oui-text-primary-light\",\n )}\n data-testid={`oui-testid-leverage-${item}-btn`}\n >\n {`${item}x`}\n </button>\n );\n })}\n </Flex>\n </Box>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { SliderMarks, toast } from \"@orderly.network/ui\";\n\ntype UseLeverageScriptOptions = {\n close?: () => void;\n};\n\nexport type LeverageScriptReturns = ReturnType<typeof useLeverageScript>;\n\nexport const useLeverageScript = (options?: UseLeverageScriptOptions) => {\n const [showSliderTip, setShowSliderTip] = useState(false);\n const { t } = useTranslation();\n\n const { curLeverage, maxLeverage, isLoading, leverageLevers, update } =\n useLeverage();\n\n const marks = useMemo<SliderMarks>(() => {\n return leverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n }));\n }, [leverageLevers]);\n\n const [leverage, setLeverage] = useState<number>(curLeverage ?? 0);\n\n const step = 100 / ((marks?.length || 0) - 1);\n\n const onLeverageChange = (leverage: number) => {\n setLeverage(leverage);\n };\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev + 1);\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev - 1);\n };\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value);\n const value = Number.isNaN(parsed) ? \"\" : parsed;\n setLeverage(value as number);\n },\n [maxLeverage],\n );\n\n const onSave = async () => {\n try {\n update({ leverage }).then(\n () => {\n options?.close?.();\n toast.success(t(\"leverage.updated\"));\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch (err) {\n console.log(\"update leverage error\", err);\n }\n };\n\n const isReduceDisabled = leverage <= 1;\n const isIncreaseDisabled = leverage >= maxLeverage;\n const disabled = !leverage || leverage < 1 || leverage > maxLeverage;\n\n const toggles = useMemo(() => {\n return [5, 10, 20, 50, 100].filter((e) => e <= maxLeverage);\n }, [maxLeverage]);\n\n return {\n leverageLevers,\n currentLeverage: curLeverage,\n value: leverage,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled,\n isIncreaseDisabled,\n disabled,\n step,\n onCancel: options?.close,\n onSave,\n isLoading: isLoading,\n showSliderTip,\n setShowSliderTip,\n maxLeverage,\n toggles,\n };\n};\n","import { FC } from \"react\";\nimport { Leverage } from \"./leverage.ui\";\nimport { useLeverageScript } from \"./leverage.script\";\n\nexport type LeverageEditorProps = {\n close?: () => void;\n};\n\nexport const LeverageEditor: FC<LeverageEditorProps> = (props) => {\n const state = useLeverageScript({ close: props.close });\n return <Leverage {...state} />;\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { SymbolLeverageWidget } from \"./symbolLeverage.widget\";\n\nexport {\n SymbolLeverageWidget,\n type SymbolLeverageWidgetProps,\n} from \"./symbolLeverage.widget\";\n\nexport const SymbolLeverageSheetId = \"SymbolLeverageSheetId\";\nexport const SymbolLeverageDialogId = \"SymbolLeverageDialogId\";\n\n// Register sheet version for mobile\nregisterSimpleSheet(SymbolLeverageSheetId, SymbolLeverageWidget, {\n title: () => i18n.t(\"leverage.adjustedLeverage\"),\n classNames: {\n // content: \"oui-p-5\",\n },\n});\n\n// Register dialog version for desktop\nregisterSimpleDialog(SymbolLeverageDialogId, SymbolLeverageWidget, {\n title: () => i18n.t(\"leverage.adjustedLeverage\"),\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n useAccountInfo,\n useLocalStorage,\n useMarkPricesStream,\n usePortfolio,\n usePositionStream,\n useSymbolLeverage,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n account as accountPerp,\n positions as positionsPerp,\n} from \"@orderly.network/perp\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport {\n modal,\n SliderMarks,\n toast,\n useScreen,\n Text,\n} from \"@orderly.network/ui\";\nimport { zero } from \"@orderly.network/utils\";\n\ntype UseLeverageScriptOptions = {\n close?: () => void;\n};\n\nexport type SymbolLeverageScriptOptions = {\n symbol: string;\n side?: OrderSide;\n curLeverage: number;\n};\n\nexport type SymbolLeverageScriptReturns = ReturnType<\n typeof useSymbolLeverageScript\n>;\n\nexport const useSymbolLeverageScript = (\n options: SymbolLeverageScriptOptions & UseLeverageScriptOptions,\n) => {\n const { curLeverage = 1, symbol, side } = options;\n const [showSliderTip, setShowSliderTip] = useState(false);\n const [leverage, setLeverage] = useState<number>(curLeverage);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n\n const { maxLeverage, update, isLoading } = useSymbolLeverage(symbol);\n\n const {\n position,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n } = useCalc({ symbol: symbol!, leverage, maxLeverage });\n\n const formattedLeverageLevers = useMemo(() => {\n return generateLeverageLevers(maxLeverage);\n }, [maxLeverage]);\n\n const marks = useMemo<SliderMarks>(() => {\n return (\n formattedLeverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n })) || []\n );\n }, [formattedLeverageLevers]);\n\n const step = useMemo(() => {\n return 100 / ((marks?.length || 0) - 1);\n }, [marks]);\n\n const onLeverageChange = (leverage: number) => {\n setLeverage(leverage);\n };\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev + 1);\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev - 1);\n };\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value);\n const value = Number.isNaN(parsed) ? \"\" : parsed;\n setLeverage(value as number);\n },\n [maxLeverage],\n );\n\n const onConfirmSave = async () => {\n try {\n update?.({ leverage, symbol }).then(\n (res) => {\n if (res.success) {\n options?.close?.();\n toast.success(t(\"leverage.updated\"));\n } else {\n toast.error(res.message);\n }\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch (err) {\n console.log(\"update leverage error\", err);\n }\n };\n\n const onSave = async () => {\n modal.confirm({\n title: t(\"leverage.confirm\"),\n content: <Text intensity={54}>{t(\"leverage.confirm.content\")}</Text>,\n onOk: onConfirmSave,\n onCancel: () => {\n return Promise.resolve();\n },\n });\n };\n\n const isReduceDisabled = leverage <= 1;\n const isIncreaseDisabled = leverage >= maxLeverage;\n\n const isBuy = side\n ? side === OrderSide.BUY\n : position?.position_qty && position.position_qty > 0;\n\n const disabled =\n !leverage ||\n leverage < 1 ||\n leverage > maxLeverage ||\n overRequiredMargin ||\n overMaxPositionLeverage;\n\n return {\n leverageLevers: formattedLeverageLevers,\n currentLeverage: curLeverage,\n value: leverage,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled,\n isIncreaseDisabled,\n disabled,\n step,\n onCancel: options?.close,\n onSave,\n isLoading,\n showSliderTip,\n setShowSliderTip,\n maxLeverage,\n toggles: formattedLeverageLevers,\n symbol,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n isBuy,\n isMobile,\n };\n};\n\n// 5x: 1x, 2x, 3x, 4x, 5x\n// 10x: 1x, 3x, 5x, 8x, 10x\n// 20x: 1x, 5x, 10x, 15x, 20x\n// 50x: 1x, 10x, 20x, 35x, 50x\n// 100x: 1x, 20x, 50x, 75x, 100x\nconst generateLeverageLevers = (max: number) => {\n if (max === 10) {\n return [1, 3, 5, 8, 10];\n } else if (max === 50) {\n return [1, 10, 20, 35, 50];\n }\n\n const min = 1;\n const parts = 5;\n const step = (max - min) / (parts - 1);\n const result: number[] = [];\n for (let i = 0; i < parts; i++) {\n result.push(Math.floor(min + step * i));\n }\n return result;\n};\n\nfunction useCalc(inputs: {\n symbol: string;\n leverage: number;\n maxLeverage: number;\n}) {\n const { symbol, leverage, maxLeverage } = inputs;\n\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n const { data: markPrices } = useMarkPricesStream();\n const { totalCollateral } = usePortfolio();\n\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\",\n );\n const [positions] = usePositionStream(\"all\", {\n calcMode: unPnlPriceBasis,\n });\n\n const position = useMemo(() => {\n if (symbol && positions?.rows?.length) {\n return positions.rows.find((item) => item.symbol === symbol);\n }\n }, [positions, symbol]);\n\n /** the highest allowable leverage. Block users from setting leverage above this limit. */\n const maxPositionLeverage = useMemo(() => {\n const IMRFactor = accountInfo?.imr_factor?.[symbol];\n const notional = position?.notional;\n // when user has existing position\n if (IMRFactor && notional) {\n const maxPositionLeverage = positionsPerp.maxPositionLeverage({\n IMRFactor,\n notional,\n });\n return Math.min(maxPositionLeverage, maxLeverage);\n }\n\n // when user has no existing position\n return maxLeverage;\n }, [position, maxLeverage, symbol]);\n\n /** calculate maximum position at current leverage */\n const maxPositionNotional = useMemo(() => {\n const IMRFactor = accountInfo?.imr_factor?.[symbol];\n if (leverage && IMRFactor) {\n return positionsPerp.maxPositionNotional({\n leverage,\n IMRFactor,\n });\n }\n }, [leverage, symbol]);\n\n const overMaxPositionLeverage = useMemo(() => {\n return leverage > maxPositionLeverage;\n }, [leverage, maxPositionLeverage]);\n\n // calc free collateral with new leverage\n const freeCollateral = useMemo(() => {\n if (!accountInfo || !markPrices || !symbolsInfo) {\n return zero;\n }\n\n const positionList = leverage\n ? positions?.rows.map((item) => {\n if (item.symbol === symbol) {\n return {\n ...item,\n leverage,\n };\n }\n return item;\n })\n : positions?.rows;\n\n const totalInitialMarginWithOrders = accountPerp.totalInitialMarginWithQty({\n positions: positionList,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo: symbolsInfo,\n });\n\n const freeCollateral = accountPerp.freeCollateral({\n totalCollateral,\n totalInitialMarginWithOrders,\n });\n\n return freeCollateral;\n }, [\n positions,\n symbolsInfo,\n accountInfo,\n markPrices,\n totalCollateral,\n leverage,\n symbol,\n ]);\n\n const overRequiredMargin = useMemo(() => {\n return freeCollateral.eq(0) || freeCollateral.isNegative();\n }, [freeCollateral]);\n\n return {\n position,\n freeCollateral,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n };\n}\n","import { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { TokenIcon, Text, Badge, Divider, Flex, cn } from \"@orderly.network/ui\";\nimport { LeverageHeader } from \"../index\";\nimport {\n LeverageInput,\n LeverageSelector,\n LeverageSlider,\n LeverageFooter,\n} from \"../leverage.ui\";\nimport { SymbolLeverageScriptReturns } from \"./symbolLeverage.script\";\n\nexport const SymbolLeverage = (props: SymbolLeverageScriptReturns) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3 lg:oui-gap-4\">\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <TokenIcon symbol={props.symbol} className=\"oui-size-5\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size={props.isMobile ? \"xs\" : \"base\"}\n weight=\"semibold\"\n intensity={98}\n >\n {props.symbol}\n </Text.formatted>\n <div\n className={cn([\"oui-ml-auto oui-flex oui-items-center oui-gap-1\"])}\n >\n <Badge color={props.isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {props.isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge leverage={props.currentLeverage} />\n </div>\n </div>\n <Divider />\n <Flex itemAlign={\"start\"} direction={\"column\"} mb={0}>\n <LeverageHeader currentLeverage={props.currentLeverage} />\n <LeverageInput {...props} />\n <LeverageSelector {...props} />\n <LeverageSlider {...props} />\n <Divider className=\"oui-mb-3 oui-w-full\" />\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-pb-4 oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {/* <div>\n <Trans\n i18nKey=\"leverage.maxPositionLeverage.tips\"\n values={{ amount: props.maxPositionNotional }}\n components={[\n // @ts-ignore\n <Text.numeral\n as=\"span\"\n key=\"0\"\n className=\"oui-text-base-contrast\"\n dp={0}\n />,\n ]}\n />\n </div> */}\n <div>\n <Trans\n i18nKey=\"leverage.maxAvailableLeverage.tips\"\n values={{ leverage: props.maxPositionLeverage }}\n components={[\n // @ts-ignore\n <Text.numeral\n dp={0}\n suffix=\"x\"\n as=\"span\"\n key=\"0\"\n className=\"oui-text-base-contrast\"\n />,\n ]}\n />\n </div>\n <div>{t(\"leverage.actualPositionLeverage.tips\")}</div>\n </div>\n <div\n className={cn([\n \"-oui-mb-2\",\n props.overRequiredMargin || props.overMaxPositionLeverage\n ? \"oui-block oui-text-xs oui-font-normal\"\n : \"oui-hidden\",\n ])}\n >\n {props.overRequiredMargin && (\n <div>\n <Text color=\"warning\">\n {t(\"leverage.overRequiredMargin.tips\")}\n </Text>\n </div>\n )}\n {props.overMaxPositionLeverage && (\n <div>\n <Text color=\"warning\">\n <Trans\n i18nKey=\"leverage.overMaxPositionLeverage.tips\"\n values={{ leverage: props.maxPositionLeverage }}\n components={[\n // @ts-ignore\n <Text.numeral dp={0} suffix=\"X\" as=\"span\" key=\"0\" />,\n ]}\n />\n </Text>\n </div>\n )}\n </div>\n <LeverageFooter {...props} />\n </Flex>\n </div>\n );\n};\n\nconst LeverageBadge = ({ leverage }: { leverage: number }) => {\n return (\n <div\n className={cn(\n \"oui-flex oui-h-[18px] oui-items-center oui-gap-1\",\n \"oui-cursor-pointer oui-rounded oui-bg-line-6 oui-px-2\",\n \"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\",\n )}\n >\n <Text>Cross</Text>\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport {\n SymbolLeverageScriptOptions,\n useSymbolLeverageScript,\n} from \"./symbolLeverage.script\";\nimport { SymbolLeverage } from \"./symbolLeverage.ui\";\n\nexport type SymbolLeverageWidgetProps = {\n close?: () => void;\n} & SymbolLeverageScriptOptions;\n\nexport const SymbolLeverageWidget: FC<SymbolLeverageWidgetProps> = (props) => {\n const state = useSymbolLeverageScript(props);\n return <SymbolLeverage {...state} />;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/leverage.ui.tsx","../src/leverage.script.ts","../src/leverage.widget.tsx","../src/symbolLeverage/index.ts","../src/symbolLeverage/symbolLeverage.script.tsx","../src/symbolLeverage/symbolLeverage.ui.tsx","../src/symbolLeverage/symbolLeverage.widget.tsx"],"names":["i18n","registerSimpleDialog","registerSimpleSheet","React","useId","useTranslation","Box","Button","Flex","Input","Slider","Text","cn","PlusIcon","ReduceIcon","inputFormatter","jsx","jsxs","IconButton","props","Icon","onClick","disabled","LeverageInput","formatters","id","Leverage","currentLeverage","LeverageHeader","LeverageSelector","LeverageSlider","LeverageFooter","t","value","onLeverageChange","option","leverageLevers","maxLeverage","className","showSliderTip","e","item","index","useCallback","useMemo","useState","useLeverage","toast","useLeverageScript","options","setShowSliderTip","curLeverage","isLoading","update","marks","leverage","setLeverage","step","onLeverageIncrease","prev","onLeverageReduce","onInputChange","parsed","onSave","err","isReduceDisabled","isIncreaseDisabled","toggles","LeverageEditor","state","useAccountInfo","useLocalStorage","useMarkPricesStream","usePortfolio","usePositionStream","useSymbolLeverage","useSymbolsInfo","accountPerp","positionsPerp","OrderSide","modal","useScreen","zero","useSymbolLeverageScript","symbol","side","isMobile","position","maxPositionNotional","maxPositionLeverage","overMaxPositionLeverage","overRequiredMargin","useCalc","formattedLeverageLevers","generateLeverageLevers","onConfirmSave","res","isBuy","max","min","parts","result","i","inputs","symbolsInfo","accountInfo","markPrices","totalCollateral","unPnlPriceBasis","setUnPnlPriceBasic","positions","IMRFactor","notional","freeCollateral","positionList","totalInitialMarginWithOrders","Trans","TokenIcon","Badge","Divider","SymbolLeverage","LeverageBadge","SymbolLeverageWidget","SymbolLeverageSheetId","SymbolLeverageDialogId","LeverageWidgetWithDialogId","LeverageWidgetWithSheetId"],"mappings":"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","sourcesContent":["import { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { LeverageEditor } from \"./leverage.widget\";\n\nexport { LeverageEditor, type LeverageEditorProps } from \"./leverage.widget\";\nexport { Leverage, LeverageSlider, LeverageHeader } from \"./leverage.ui\";\nexport type {\n LeverageProps,\n LeverageSliderProps,\n LeverageHeaderProps,\n} from \"./leverage.ui\";\nexport {\n useLeverageScript,\n type LeverageScriptReturns,\n} from \"./leverage.script\";\nexport * from \"./symbolLeverage\";\n\nexport const LeverageWidgetWithDialogId = \"LeverageWidgetWithDialog\";\nexport const LeverageWidgetWithSheetId = \"LeverageWidgetWithSheet\";\n\nregisterSimpleDialog(LeverageWidgetWithDialogId, LeverageEditor, {\n title: () => i18n.t(\"leverage.maxAccountLeverage\"),\n size: \"md\",\n});\n\nregisterSimpleSheet(LeverageWidgetWithSheetId, LeverageEditor, {\n title: () => i18n.t(\"leverage.maxAccountLeverage\"),\n});\n","import React, { FC, useId } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n Flex,\n Input,\n Slider,\n Text,\n cn,\n PlusIcon,\n ReduceIcon,\n inputFormatter,\n InputFormatter,\n} from \"@orderly.network/ui\";\nimport { LeverageScriptReturns } from \"./leverage.script\";\n\nconst IconButton: React.FC<{\n Icon: React.ComponentType<any>;\n onClick: React.MouseEventHandler<SVGSVGElement>;\n disabled: boolean;\n}> = (props) => {\n const { Icon, onClick, disabled } = props;\n return (\n <Icon\n onClick={disabled ? undefined : onClick}\n className={cn(\n \"oui-m-2 oui-text-white oui-transition-all\",\n disabled\n ? \"oui-cursor-not-allowed oui-opacity-20\"\n : \"oui-cursor-pointer oui-opacity-100\",\n )}\n />\n );\n};\n\ntype LeverageInputProps = LeverageProps & {\n classNames?: {\n input?: string;\n unit?: string;\n };\n};\n\nexport const LeverageInput: React.FC<LeverageInputProps> = (props) => {\n const formatters = React.useMemo<InputFormatter[]>(\n () => [inputFormatter.numberFormatter, inputFormatter.dpFormatter(0)],\n [],\n );\n const id = useId();\n return (\n <label\n htmlFor={id}\n className={cn(\n \"oui-w-full\",\n \"oui-rounded\",\n \"oui-bg-base-6\",\n \"oui-flex\",\n \"oui-items-center\",\n \"oui-justify-between\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-light\",\n \"oui-input-root\",\n )}\n >\n <IconButton\n Icon={ReduceIcon}\n onClick={props.onLeverageReduce}\n disabled={props.isReduceDisabled}\n />\n <Flex itemAlign=\"center\" justify=\"center\" className=\"oui-mr-4\">\n <Input\n value={props.value}\n id={id}\n autoComplete=\"off\"\n classNames={{\n input: cn(\"oui-text-right oui-text-[24px]\"),\n root: cn(\n \"oui-w-12\",\n \"oui-px-0\",\n \"oui-outline\",\n \"oui-outline-offset-0\",\n \"oui-outline-1\",\n \"oui-outline-transparent\",\n \"focus-within:oui-outline-primary-none\",\n ),\n }}\n formatters={formatters}\n onChange={props.onInputChange}\n />\n <div\n className={cn(\n \"oui-ml-1 oui-mt-1 oui-select-none\",\n \"oui-text-base oui-text-base-contrast-36\",\n )}\n >\n x\n </div>\n </Flex>\n <IconButton\n Icon={PlusIcon}\n onClick={props.onLeverageIncrease}\n disabled={props.isIncreaseDisabled}\n />\n </label>\n );\n};\n\nexport type LeverageProps = LeverageScriptReturns;\n\nexport const Leverage: FC<LeverageProps> = (props) => {\n const { currentLeverage } = props;\n const { t } = useTranslation();\n return (\n <Flex itemAlign={\"start\"} direction={\"column\"} mb={0}>\n <LeverageHeader currentLeverage={currentLeverage} />\n <LeverageInput {...props} />\n <LeverageSelector {...props} />\n <LeverageSlider {...props} />\n <LeverageFooter {...props} />\n </Flex>\n );\n};\n\nexport const LeverageFooter: FC<LeverageProps & { isMobile?: boolean }> = (\n props,\n) => {\n const { t } = useTranslation();\n return (\n <Flex direction={\"row\"} gap={2} width={\"100%\"} mt={0} pt={5}>\n <Button\n variant=\"contained\"\n color=\"gray\"\n fullWidth\n onClick={props.onCancel}\n data-testid=\"oui-testid-leverage-cancel-btn\"\n size={props.isMobile ? \"md\" : \"lg\"}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button\n fullWidth\n loading={props.isLoading}\n onClick={props.onSave}\n data-testid=\"oui-testid-leverage-save-btn\"\n disabled={props.disabled}\n size={props.isMobile ? \"md\" : \"lg\"}\n >\n {t(\"common.save\")}\n </Button>\n </Flex>\n );\n};\n\nexport type LeverageHeaderProps = Pick<LeverageProps, \"currentLeverage\">;\n\nexport const LeverageHeader: FC<LeverageHeaderProps> = (props) => {\n const { t } = useTranslation();\n const { currentLeverage } = props;\n return (\n <Flex justify={\"center\"} width={\"100%\"} mb={2}>\n <Flex gap={1}>\n {`${t(\"common.current\")}:`}\n <Text.numeral unit=\"x\" size={\"sm\"} intensity={80} dp={0}>\n {currentLeverage ?? \"--\"}\n </Text.numeral>\n </Flex>\n </Flex>\n );\n};\n\ninterface LeverageSelectorProps {\n value: number;\n onLeverageChange: (value: number) => void;\n toggles: number[];\n}\n\nexport const LeverageSelector: React.FC<LeverageSelectorProps> = (props) => {\n const { value, onLeverageChange } = props;\n return (\n <Flex\n itemAlign=\"center\"\n justify=\"between\"\n width={\"100%\"}\n mt={4}\n className=\"oui-text-base-contrast-80\"\n >\n {props.toggles.map((option) => (\n <Flex\n key={option}\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\n `oui-box-border oui-cursor-pointer oui-rounded-md oui-border oui-border-solid oui-bg-clip-padding oui-px-3 oui-py-2.5 oui-transition-all`,\n value === option\n ? \"oui-border-primary oui-bg-base-6\"\n : \"oui-border-line-12\",\n )}\n onClick={() => onLeverageChange?.(option)}\n >\n <Flex\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(`oui-h-3 oui-w-9 oui-select-none`)}\n >\n {option}x\n </Flex>\n </Flex>\n ))}\n </Flex>\n );\n};\n\nexport type LeverageSliderProps = {\n maxLeverage?: number;\n value: number;\n onLeverageChange: (value: number) => void;\n setShowSliderTip: (value: boolean) => void;\n showSliderTip: boolean;\n className?: string;\n onValueCommit?: (value: number[]) => void;\n leverageLevers: number[];\n};\n\nexport const LeverageSlider: FC<LeverageSliderProps> = (props) => {\n const {\n leverageLevers,\n maxLeverage = 0,\n className,\n value,\n showSliderTip,\n } = props;\n return (\n <Box pt={4} width={\"100%\"} className={className}>\n <Slider\n // step={1.04}\n max={maxLeverage}\n min={1}\n // markLabelVisible={true}\n // marks={props.marks}\n markCount={5}\n value={[value]}\n onValueChange={(e) => {\n props.onLeverageChange(e[0]);\n props.setShowSliderTip(true);\n }}\n color=\"primary\"\n onValueCommit={(e) => {\n props.onValueCommit?.(e);\n props.setShowSliderTip(false);\n }}\n showTip={showSliderTip}\n tipFormatter={(value) => {\n return `${value}x`;\n }}\n />\n <Flex justify={\"between\"} width={\"100%\"} pt={3}>\n {leverageLevers?.map((item, index) => {\n return (\n <button\n key={item}\n onClick={() => {\n props.onLeverageChange(item);\n props.onValueCommit?.([item]);\n }}\n className={cn(\n \"oui-pb-3 oui-text-2xs\",\n index === 0\n ? \"oui-pr-2\"\n : index === 5\n ? \"oui-pl-0\"\n : \"oui-ml-2 oui-px-0\",\n props.value >= item && \"oui-text-primary-light\",\n )}\n data-testid={`oui-testid-leverage-${item}-btn`}\n >\n {`${item}x`}\n </button>\n );\n })}\n </Flex>\n </Box>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useLeverage } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { SliderMarks, toast } from \"@orderly.network/ui\";\n\ntype UseLeverageScriptOptions = {\n close?: () => void;\n};\n\nexport type LeverageScriptReturns = ReturnType<typeof useLeverageScript>;\n\nexport const useLeverageScript = (options?: UseLeverageScriptOptions) => {\n const [showSliderTip, setShowSliderTip] = useState(false);\n const { t } = useTranslation();\n\n const { curLeverage, maxLeverage, isLoading, leverageLevers, update } =\n useLeverage();\n\n const marks = useMemo<SliderMarks>(() => {\n return leverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n }));\n }, [leverageLevers]);\n\n const [leverage, setLeverage] = useState<number>(curLeverage ?? 0);\n\n const step = 100 / ((marks?.length || 0) - 1);\n\n const onLeverageChange = (leverage: number) => {\n setLeverage(leverage);\n };\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev + 1);\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev - 1);\n };\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value);\n const value = Number.isNaN(parsed) ? \"\" : parsed;\n setLeverage(value as number);\n },\n [maxLeverage],\n );\n\n const onSave = async () => {\n try {\n update({ leverage }).then(\n () => {\n options?.close?.();\n toast.success(t(\"leverage.updated\"));\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch (err) {\n console.log(\"update leverage error\", err);\n }\n };\n\n const isReduceDisabled = leverage <= 1;\n const isIncreaseDisabled = leverage >= maxLeverage;\n const disabled = !leverage || leverage < 1 || leverage > maxLeverage;\n\n const toggles = useMemo(() => {\n return [5, 10, 20, 50, 100].filter((e) => e <= maxLeverage);\n }, [maxLeverage]);\n\n return {\n leverageLevers,\n currentLeverage: curLeverage,\n value: leverage,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled,\n isIncreaseDisabled,\n disabled,\n step,\n onCancel: options?.close,\n onSave,\n isLoading: isLoading,\n showSliderTip,\n setShowSliderTip,\n maxLeverage,\n toggles,\n };\n};\n","import { FC } from \"react\";\nimport { Leverage } from \"./leverage.ui\";\nimport { useLeverageScript } from \"./leverage.script\";\n\nexport type LeverageEditorProps = {\n close?: () => void;\n};\n\nexport const LeverageEditor: FC<LeverageEditorProps> = (props) => {\n const state = useLeverageScript({ close: props.close });\n return <Leverage {...state} />;\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport { SymbolLeverageWidget } from \"./symbolLeverage.widget\";\n\nexport {\n SymbolLeverageWidget,\n type SymbolLeverageWidgetProps,\n} from \"./symbolLeverage.widget\";\n\nexport const SymbolLeverageSheetId = \"SymbolLeverageSheetId\";\nexport const SymbolLeverageDialogId = \"SymbolLeverageDialogId\";\n\n// Register sheet version for mobile\nregisterSimpleSheet(SymbolLeverageSheetId, SymbolLeverageWidget, {\n title: () => i18n.t(\"leverage.adjustedLeverage\"),\n classNames: {\n // content: \"oui-p-5\",\n },\n});\n\n// Register dialog version for desktop\nregisterSimpleDialog(SymbolLeverageDialogId, SymbolLeverageWidget, {\n title: () => i18n.t(\"leverage.adjustedLeverage\"),\n classNames: {\n content: \"oui-w-[420px]\",\n },\n});\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n useAccountInfo,\n useLocalStorage,\n useMarkPricesStream,\n usePortfolio,\n usePositionStream,\n useSymbolLeverage,\n useSymbolsInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n account as accountPerp,\n positions as positionsPerp,\n} from \"@orderly.network/perp\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport {\n modal,\n SliderMarks,\n toast,\n useScreen,\n Text,\n} from \"@orderly.network/ui\";\nimport { zero } from \"@orderly.network/utils\";\n\ntype UseLeverageScriptOptions = {\n close?: () => void;\n};\n\nexport type SymbolLeverageScriptOptions = {\n symbol: string;\n side?: OrderSide;\n curLeverage: number;\n};\n\nexport type SymbolLeverageScriptReturns = ReturnType<\n typeof useSymbolLeverageScript\n>;\n\nexport const useSymbolLeverageScript = (\n options: SymbolLeverageScriptOptions & UseLeverageScriptOptions,\n) => {\n const { curLeverage = 1, symbol, side } = options;\n const [showSliderTip, setShowSliderTip] = useState(false);\n const [leverage, setLeverage] = useState<number>(curLeverage);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n\n const { maxLeverage, update, isLoading } = useSymbolLeverage(symbol);\n\n const {\n position,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n } = useCalc({ symbol: symbol!, leverage, maxLeverage });\n\n const formattedLeverageLevers = useMemo(() => {\n return generateLeverageLevers(maxLeverage);\n }, [maxLeverage]);\n\n const marks = useMemo<SliderMarks>(() => {\n return (\n formattedLeverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n })) || []\n );\n }, [formattedLeverageLevers]);\n\n const step = useMemo(() => {\n return 100 / ((marks?.length || 0) - 1);\n }, [marks]);\n\n const onLeverageChange = (leverage: number) => {\n setLeverage(leverage);\n };\n\n const onLeverageIncrease: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev + 1);\n };\n\n const onLeverageReduce: React.MouseEventHandler<SVGSVGElement> = () => {\n setLeverage((prev) => prev - 1);\n };\n\n const onInputChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const parsed = Number.parseInt(e.target.value);\n const value = Number.isNaN(parsed) ? \"\" : parsed;\n setLeverage(value as number);\n },\n [maxLeverage],\n );\n\n const onConfirmSave = async () => {\n try {\n update?.({ leverage, symbol }).then(\n (res) => {\n if (res.success) {\n options?.close?.();\n toast.success(t(\"leverage.updated\"));\n } else {\n toast.error(res.message);\n }\n },\n (err: Error) => {\n toast.error(err.message);\n },\n );\n } catch (err) {\n console.log(\"update leverage error\", err);\n }\n };\n\n const onSave = async () => {\n modal.confirm({\n title: t(\"leverage.confirm\"),\n content: <Text intensity={54}>{t(\"leverage.confirm.content\")}</Text>,\n onOk: onConfirmSave,\n onCancel: () => {\n return Promise.resolve();\n },\n });\n };\n\n const isReduceDisabled = leverage <= 1;\n const isIncreaseDisabled = leverage >= maxLeverage;\n\n const isBuy = side\n ? side === OrderSide.BUY\n : position?.position_qty && position.position_qty > 0;\n\n const disabled =\n !leverage ||\n leverage < 1 ||\n leverage > maxLeverage ||\n overRequiredMargin ||\n overMaxPositionLeverage;\n\n return {\n leverageLevers: formattedLeverageLevers,\n currentLeverage: curLeverage,\n value: leverage,\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n isReduceDisabled,\n isIncreaseDisabled,\n disabled,\n step,\n onCancel: options?.close,\n onSave,\n isLoading,\n showSliderTip,\n setShowSliderTip,\n maxLeverage,\n toggles: formattedLeverageLevers,\n symbol,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n isBuy,\n isMobile,\n };\n};\n\n// 5x: 1x, 2x, 3x, 4x, 5x\n// 10x: 1x, 3x, 5x, 8x, 10x\n// 20x: 1x, 5x, 10x, 15x, 20x\n// 50x: 1x, 10x, 20x, 35x, 50x\n// 100x: 1x, 20x, 50x, 75x, 100x\nconst generateLeverageLevers = (max: number) => {\n if (max === 10) {\n return [1, 3, 5, 8, 10];\n } else if (max === 50) {\n return [1, 10, 20, 35, 50];\n }\n\n const min = 1;\n const parts = 5;\n const step = (max - min) / (parts - 1);\n const result: number[] = [];\n for (let i = 0; i < parts; i++) {\n result.push(Math.floor(min + step * i));\n }\n return result;\n};\n\nfunction useCalc(inputs: {\n symbol: string;\n leverage: number;\n maxLeverage: number;\n}) {\n const { symbol, leverage, maxLeverage } = inputs;\n\n const symbolsInfo = useSymbolsInfo();\n const { data: accountInfo } = useAccountInfo();\n const { data: markPrices } = useMarkPricesStream();\n const { totalCollateral } = usePortfolio();\n\n const [unPnlPriceBasis, setUnPnlPriceBasic] = useLocalStorage(\n \"unPnlPriceBasis\",\n \"markPrice\",\n );\n const [positions] = usePositionStream(\"all\", {\n calcMode: unPnlPriceBasis,\n });\n\n const position = useMemo(() => {\n if (symbol && positions?.rows?.length) {\n return positions.rows.find((item) => item.symbol === symbol);\n }\n }, [positions, symbol]);\n\n /** the highest allowable leverage. Block users from setting leverage above this limit. */\n const maxPositionLeverage = useMemo(() => {\n const IMRFactor = accountInfo?.imr_factor?.[symbol];\n const notional = position?.notional;\n // when user has existing position\n if (IMRFactor && notional) {\n const maxPositionLeverage = positionsPerp.maxPositionLeverage({\n IMRFactor,\n notional,\n });\n return Math.min(maxPositionLeverage, maxLeverage);\n }\n\n // when user has no existing position\n return maxLeverage;\n }, [position, maxLeverage, symbol]);\n\n /** calculate maximum position at current leverage */\n const maxPositionNotional = useMemo(() => {\n const IMRFactor = accountInfo?.imr_factor?.[symbol];\n if (leverage && IMRFactor) {\n return positionsPerp.maxPositionNotional({\n leverage,\n IMRFactor,\n });\n }\n }, [leverage, symbol]);\n\n const overMaxPositionLeverage = useMemo(() => {\n return leverage > maxPositionLeverage;\n }, [leverage, maxPositionLeverage]);\n\n // calc free collateral with new leverage\n const freeCollateral = useMemo(() => {\n if (!accountInfo || !markPrices || !symbolsInfo) {\n return zero;\n }\n\n const positionList = leverage\n ? positions?.rows.map((item) => {\n if (item.symbol === symbol) {\n return {\n ...item,\n leverage,\n };\n }\n return item;\n })\n : positions?.rows;\n\n const totalInitialMarginWithOrders = accountPerp.totalInitialMarginWithQty({\n positions: positionList,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n // not used\n maxLeverage: accountInfo.max_leverage,\n symbolInfo: symbolsInfo,\n });\n\n const freeCollateral = accountPerp.freeCollateral({\n totalCollateral,\n totalInitialMarginWithOrders,\n });\n\n return freeCollateral;\n }, [\n positions,\n symbolsInfo,\n accountInfo,\n markPrices,\n totalCollateral,\n leverage,\n symbol,\n ]);\n\n const overRequiredMargin = useMemo(() => {\n return freeCollateral.eq(0) || freeCollateral.isNegative();\n }, [freeCollateral]);\n\n return {\n position,\n freeCollateral,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n };\n}\n","import { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { TokenIcon, Text, Badge, Divider, Flex, cn } from \"@orderly.network/ui\";\nimport { LeverageHeader } from \"../index\";\nimport {\n LeverageInput,\n LeverageSelector,\n LeverageSlider,\n LeverageFooter,\n} from \"../leverage.ui\";\nimport { SymbolLeverageScriptReturns } from \"./symbolLeverage.script\";\n\nexport const SymbolLeverage = (props: SymbolLeverageScriptReturns) => {\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3 lg:oui-gap-4\">\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <TokenIcon symbol={props.symbol} className=\"oui-size-5\" />\n <Text.formatted\n rule=\"symbol\"\n formatString=\"base-type\"\n size={props.isMobile ? \"xs\" : \"base\"}\n weight=\"semibold\"\n intensity={98}\n >\n {props.symbol}\n </Text.formatted>\n <div\n className={cn([\"oui-ml-auto oui-flex oui-items-center oui-gap-1\"])}\n >\n <Badge color={props.isBuy ? \"success\" : \"danger\"} size=\"xs\">\n {props.isBuy ? t(\"common.long\") : t(\"common.short\")}\n </Badge>\n <LeverageBadge leverage={props.currentLeverage} />\n </div>\n </div>\n <Divider />\n <Flex itemAlign={\"start\"} direction={\"column\"} mb={0}>\n <LeverageHeader currentLeverage={props.currentLeverage} />\n <LeverageInput {...props} />\n <LeverageSelector {...props} />\n <LeverageSlider {...props} />\n <Divider className=\"oui-mb-3 oui-w-full\" />\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-pb-4 oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {/* <div>\n <Trans\n i18nKey=\"leverage.maxPositionLeverage.tips\"\n values={{ amount: props.maxPositionNotional }}\n components={[\n // @ts-ignore\n <Text.numeral\n as=\"span\"\n key=\"0\"\n className=\"oui-text-base-contrast\"\n dp={0}\n />,\n ]}\n />\n </div> */}\n <div>\n <Trans\n i18nKey=\"leverage.maxAvailableLeverage.tips\"\n values={{ leverage: props.maxPositionLeverage }}\n components={[\n // @ts-ignore\n <Text.numeral\n dp={0}\n suffix=\"x\"\n as=\"span\"\n key=\"0\"\n className=\"oui-text-base-contrast\"\n />,\n ]}\n />\n </div>\n <div>{t(\"leverage.actualPositionLeverage.tips\")}</div>\n </div>\n <div\n className={cn([\n \"-oui-mb-2\",\n props.overRequiredMargin || props.overMaxPositionLeverage\n ? \"oui-block oui-text-xs oui-font-normal\"\n : \"oui-hidden\",\n ])}\n >\n {props.overRequiredMargin && (\n <div>\n <Text color=\"warning\">\n {t(\"leverage.overRequiredMargin.tips\")}\n </Text>\n </div>\n )}\n {props.overMaxPositionLeverage && (\n <div>\n <Text color=\"warning\">\n <Trans\n i18nKey=\"leverage.overMaxPositionLeverage.tips\"\n values={{ leverage: props.maxPositionLeverage }}\n components={[\n // @ts-ignore\n <Text.numeral dp={0} suffix=\"X\" as=\"span\" key=\"0\" />,\n ]}\n />\n </Text>\n </div>\n )}\n </div>\n <LeverageFooter {...props} />\n </Flex>\n </div>\n );\n};\n\nconst LeverageBadge = ({ leverage }: { leverage: number }) => {\n return (\n <div\n className={cn(\n \"oui-flex oui-h-[18px] oui-items-center oui-gap-1\",\n \"oui-cursor-pointer oui-rounded oui-bg-line-6 oui-px-2\",\n \"oui-text-2xs oui-font-semibold oui-text-base-contrast-36\",\n )}\n >\n <Text>Cross</Text>\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport {\n SymbolLeverageScriptOptions,\n useSymbolLeverageScript,\n} from \"./symbolLeverage.script\";\nimport { SymbolLeverage } from \"./symbolLeverage.ui\";\n\nexport type SymbolLeverageWidgetProps = {\n close?: () => void;\n} & SymbolLeverageScriptOptions;\n\nexport const SymbolLeverageWidget: FC<SymbolLeverageWidgetProps> = (props) => {\n const state = useSymbolLeverageScript(props);\n return <SymbolLeverage {...state} />;\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orderly.network/ui-leverage",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"access": "public"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@orderly.network/i18n": "2.7.
|
|
19
|
-
"@orderly.network/
|
|
20
|
-
"@orderly.network/
|
|
21
|
-
"@orderly.network/
|
|
22
|
-
"@orderly.network/
|
|
23
|
-
"@orderly.network/
|
|
18
|
+
"@orderly.network/i18n": "2.7.3",
|
|
19
|
+
"@orderly.network/perp": "4.7.3",
|
|
20
|
+
"@orderly.network/types": "2.7.3",
|
|
21
|
+
"@orderly.network/utils": "2.7.3",
|
|
22
|
+
"@orderly.network/ui": "2.7.3",
|
|
23
|
+
"@orderly.network/hooks": "2.7.3"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@swc/cli": "^0.3.12",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"react-dom": "^18.2.0",
|
|
32
32
|
"tailwindcss": "^3.4.4",
|
|
33
33
|
"tsup": "^7.1.0",
|
|
34
|
-
"tsconfig": "0.10.
|
|
34
|
+
"tsconfig": "0.10.3"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"react": ">=18",
|