@orderly.network/ui-leverage 2.11.3-rc.0 → 2.12.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -633,6 +633,13 @@ function useCalc(inputs) {
633
633
  overRequiredMargin
634
634
  };
635
635
  }
636
+ var SymbolBadge = (props) => {
637
+ const { brokerId, brokerName, brokerNameRaw } = hooks.useBadgeBySymbol(
638
+ props.symbol
639
+ );
640
+ const badge = brokerName ?? brokerId ?? void 0;
641
+ return /* @__PURE__ */ jsxRuntime.jsx(ui.SymbolBadge, { badge, fullName: brokerNameRaw });
642
+ };
636
643
  var SymbolLeverage = (props) => {
637
644
  const { t } = i18n.useTranslation();
638
645
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "oui-flex oui-flex-col oui-gap-3 lg:oui-gap-4", children: [
@@ -642,10 +649,11 @@ var SymbolLeverage = (props) => {
642
649
  ui.Text.formatted,
643
650
  {
644
651
  rule: "symbol",
645
- formatString: "base-type",
652
+ formatString: "base",
646
653
  size: props.isMobile ? "xs" : "base",
647
654
  weight: "semibold",
648
655
  intensity: 98,
656
+ suffix: /* @__PURE__ */ jsxRuntime.jsx(SymbolBadge, { symbol: props.symbol }),
649
657
  children: props.symbol
650
658
  }
651
659
  ),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/leverage.ui.tsx","../src/leverage.script.ts","../src/leverage.widget.tsx","../src/symbolLeverage/symbolLeverage.script.tsx","../src/symbolLeverage/symbolLeverage.ui.tsx","../src/symbolLeverage/symbolLeverage.widget.tsx","../src/symbolLeverage/index.ts","../src/index.ts"],"names":["jsx","cn","React","inputFormatter","useId","jsxs","ReduceIcon","Flex","Input","PlusIcon","useTranslation","Button","Text","Box","Slider","value","useState","useLeverage","useMemo","leverage","useCallback","toast","useScreen","useSymbolLeverage","useEffect","modal","OrderSide","useSymbolsInfo","useAccountInfo","useMarkPricesStream","usePortfolio","useLocalStorage","usePositionStream","maxPositionLeverage","positionsPerp","zero","MarginMode","accountPerp","freeCollateral","TokenIcon","Badge","Divider","Trans","registerSimpleSheet","i18n","registerSimpleDialog"],"mappings":"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","file":"index.js","sourcesContent":["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-base-contrast 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 onInputBlur?: React.FocusEventHandler<HTMLInputElement>;\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 onBlur={props.onInputBlur}\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 marks?: { label: string; value: number }[];\n};\n\nconst getMarkPosition = (\n item: number,\n index: number,\n max: number,\n total: number,\n) => {\n // Use the same calculation logic as Slider component marks array\n const min = 1;\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const position = percentPerStep * (item - min);\n\n // Keep boundary adjustments\n if (index === 0) return Math.min(position + 2, 100);\n if (index === total - 1) return Math.max(position - 3, 0);\n return position;\n};\n\nexport const LeverageSlider: FC<LeverageSliderProps> = (props) => {\n const {\n leverageLevers,\n maxLeverage = 0,\n className,\n value,\n showSliderTip,\n marks,\n } = props;\n\n // Use the maximum value of leverageLevers array as slider maximum\n const sliderMax =\n leverageLevers.length > 0 ? Math.max(...leverageLevers) : maxLeverage;\n\n return (\n <Box pt={4} pb={7} width={\"100%\"} className={className}>\n <Slider\n step={1}\n max={maxLeverage}\n min={1}\n // markLabelVisible={true}\n marks={marks}\n // markCount={markCount}\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 <div className=\"oui-relative oui-w-full oui-pt-3\">\n {leverageLevers?.map((item, index) => {\n const position = getMarkPosition(\n item,\n index,\n sliderMax,\n leverageLevers.length,\n );\n\n return (\n <button\n key={item}\n onClick={() => {\n props.onLeverageChange(item);\n props.onValueCommit?.([item]);\n }}\n className={cn(\n \"oui-absolute oui-pb-3 oui-text-2xs oui-transform oui--translate-x-1/2\",\n Number(props.value) >= Number(item)\n ? \"oui-text-primary-light\"\n : \"oui-text-base-contrast-54\",\n )}\n style={{\n left: `${position}%`,\n }}\n data-testid={`oui-testid-leverage-${item}-btn`}\n >\n {`${item}x`}\n </button>\n );\n })}\n </div>\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 { useCallback, useEffect, 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 { MarginMode, 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 marginMode: MarginMode;\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, marginMode } = options;\n const [showSliderTip, setShowSliderTip] = useState(false);\n // Local leverage value used by the input and slider; it tracks the in-flight user edits.\n // We seed it with curLeverage but intentionally do not sync further changes to avoid jumping while editing.\n const [leverage, setLeverage] = useState<number>(curLeverage);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n\n const {\n maxLeverage: originalMaxLeverage,\n update,\n isLoading,\n } = useSymbolLeverage(symbol);\n\n // Sync when external current leverage changes (e.g. symbol or margin mode changed)\n useEffect(() => {\n setLeverage(curLeverage);\n }, [curLeverage]);\n\n const maxLeverage = originalMaxLeverage;\n\n const {\n position,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n } = useCalc({ symbol: symbol!, leverage, maxLeverage, marginMode });\n\n const formattedLeverageLevers = useMemo(() => {\n return generateLeverageLeversForSelector(maxLeverage);\n }, [maxLeverage]);\n\n const leverageLevers = useMemo(() => {\n return generateLeverageLevers(maxLeverage);\n }, [maxLeverage]);\n\n const marks = useMemo<SliderMarks>(() => {\n return (\n leverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n })) || []\n );\n }, [leverageLevers]);\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 [],\n );\n\n const onInputBlur = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n (e) => {\n const inputValue = e.target.value.trim();\n if (inputValue === \"\") {\n setLeverage(curLeverage);\n }\n },\n [curLeverage],\n );\n\n const onConfirmSave = async () => {\n try {\n update?.({ leverage, symbol, margin_mode: marginMode }).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.error(\"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,\n currentLeverage: curLeverage, // Keep the displayed leverage fixed until the user confirms the change.\n value: leverage, // Input and slider reflect the temporary value being edited.\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n onInputBlur,\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 marginMode,\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 generateLeverageLeversForSelector = (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/**\n * Generate evenly distributed marks\n * @param max Maximum leverage value\n * @returns Array of evenly distributed marks\n */\nconst generateEvenlyDistributedMarks = (max: number): number[] => {\n const result: number[] = [];\n\n // Check if divisible by 5\n if (max % 5 === 0) {\n // Divisible by 5, divide from 0 to max into 5 intervals (6 marks), 1x represents 0\n const step = max / 5;\n for (let i = 0; i < 6; i++) {\n const value = step * i;\n result.push(value === 0 ? 1 : value); // 0 displays as 1x, other values display normally\n }\n } else {\n // Not divisible by 5, use 25%, 50%, 75% strategy to select nearest integers\n result.push(1); // Always include 1x\n\n // Calculate values at 25%, 50%, 75% positions\n const quarter = max * 0.25;\n const half = max * 0.5;\n const threeQuarter = max * 0.75;\n\n // Select nearest integers\n const quarterRounded = Math.round(quarter);\n const halfRounded = Math.round(half);\n const threeQuarterRounded = Math.round(threeQuarter);\n\n // Add 25% position value (if greater than 1 and not equal to 50%)\n if (quarterRounded > 1 && quarterRounded !== halfRounded) {\n result.push(quarterRounded);\n }\n\n // Add 50% position value (if greater than 1)\n if (halfRounded > 1) {\n result.push(halfRounded);\n }\n\n // Add 75% position value (if greater than 50% and less than max)\n if (threeQuarterRounded > halfRounded && threeQuarterRounded < max) {\n result.push(threeQuarterRounded);\n }\n\n // Add maximum value (if greater than 1)\n if (max > 1) {\n result.push(max);\n }\n }\n\n return result;\n};\n\n// 5x: 1, 2, 3, 4, 5\n// 10x: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n// 20x: 1, 5, 10, 15, 20\n// 50x: 1, 10, 20, 30, 40, 50\n// 100x: 1, 20, 40, 60, 80, 100\nconst generateLeverageLevers = (max: number) => {\n switch (max) {\n case 10:\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n case 20:\n return [1, 5, 10, 15, 20];\n case 50:\n return [1, 10, 20, 30, 40, 50];\n case 100:\n return [1, 20, 40, 60, 80, 100];\n }\n\n // Fallback strategy: evenly distribute mark distances, treat 1x as 0\n const result: number[] = [];\n // Optimization\n if (max < 10) {\n // For 10x and below, divide into n equal parts, each with length 1\n for (let i = 1; i <= max; i++) {\n result.push(i);\n }\n } else {\n // Use unified even distribution strategy\n result.push(...generateEvenlyDistributedMarks(max));\n }\n\n return result;\n};\n\nfunction useCalc(inputs: {\n symbol: string;\n leverage: number;\n maxLeverage: number;\n marginMode: MarginMode;\n}) {\n const { symbol, leverage, maxLeverage, marginMode } = 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(\n (item) => item.symbol === symbol && item.margin_mode === marginMode,\n );\n }\n }, [positions, symbol, marginMode]);\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 && item.margin_mode === marginMode) {\n return {\n ...item,\n leverage,\n };\n }\n return item;\n })\n : positions?.rows;\n const maxLeverageBySymbol =\n positionList?.reduce<Record<string, number>>((acc, item) => {\n if (\n item.margin_mode !== MarginMode.ISOLATED &&\n item.leverage &&\n !acc[item.symbol]\n ) {\n acc[item.symbol] = item.leverage;\n }\n return acc;\n }, {}) ?? {};\n\n // TODO: Pass actual orders data for accurate initial margin calculation\n const totalInitialMarginWithOrders = accountPerp.totalInitialMarginWithQty({\n positions: positionList,\n orders: [],\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverageBySymbol,\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 marginMode,\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 { MarginMode } from \"@orderly.network/types\";\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\n leverage={props.currentLeverage}\n marginMode={props.marginMode}\n />\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 = ({\n leverage,\n marginMode,\n}: {\n leverage: number;\n marginMode: MarginMode;\n}) => {\n const { t } = useTranslation();\n\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>\n {marginMode === undefined\n ? \"--\"\n : marginMode === MarginMode.ISOLATED\n ? t(\"marginMode.isolated\")\n : t(\"marginMode.cross\")}\n </Text>\n {leverage === undefined ? (\n <Text size=\"2xs\">--</Text>\n ) : (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n )}\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","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 { 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"]}
1
+ {"version":3,"sources":["../src/leverage.ui.tsx","../src/leverage.script.ts","../src/leverage.widget.tsx","../src/symbolLeverage/symbolLeverage.script.tsx","../src/symbolBadge.tsx","../src/symbolLeverage/symbolLeverage.ui.tsx","../src/symbolLeverage/symbolLeverage.widget.tsx","../src/symbolLeverage/index.ts","../src/index.ts"],"names":["jsx","cn","React","inputFormatter","useId","jsxs","ReduceIcon","Flex","Input","PlusIcon","useTranslation","Button","Text","Box","Slider","value","useState","useLeverage","useMemo","leverage","useCallback","toast","useScreen","useSymbolLeverage","useEffect","modal","OrderSide","useSymbolsInfo","useAccountInfo","useMarkPricesStream","usePortfolio","useLocalStorage","usePositionStream","maxPositionLeverage","positionsPerp","zero","MarginMode","accountPerp","freeCollateral","useBadgeBySymbol","UISymbolBadge","TokenIcon","Badge","Divider","Trans","registerSimpleSheet","i18n","registerSimpleDialog"],"mappings":"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","file":"index.js","sourcesContent":["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-base-contrast 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 onInputBlur?: React.FocusEventHandler<HTMLInputElement>;\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 onBlur={props.onInputBlur}\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 marks?: { label: string; value: number }[];\n};\n\nconst getMarkPosition = (\n item: number,\n index: number,\n max: number,\n total: number,\n) => {\n // Use the same calculation logic as Slider component marks array\n const min = 1;\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const position = percentPerStep * (item - min);\n\n // Keep boundary adjustments\n if (index === 0) return Math.min(position + 2, 100);\n if (index === total - 1) return Math.max(position - 3, 0);\n return position;\n};\n\nexport const LeverageSlider: FC<LeverageSliderProps> = (props) => {\n const {\n leverageLevers,\n maxLeverage = 0,\n className,\n value,\n showSliderTip,\n marks,\n } = props;\n\n // Use the maximum value of leverageLevers array as slider maximum\n const sliderMax =\n leverageLevers.length > 0 ? Math.max(...leverageLevers) : maxLeverage;\n\n return (\n <Box pt={4} pb={7} width={\"100%\"} className={className}>\n <Slider\n step={1}\n max={maxLeverage}\n min={1}\n // markLabelVisible={true}\n marks={marks}\n // markCount={markCount}\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 <div className=\"oui-relative oui-w-full oui-pt-3\">\n {leverageLevers?.map((item, index) => {\n const position = getMarkPosition(\n item,\n index,\n sliderMax,\n leverageLevers.length,\n );\n\n return (\n <button\n key={item}\n onClick={() => {\n props.onLeverageChange(item);\n props.onValueCommit?.([item]);\n }}\n className={cn(\n \"oui-absolute oui-pb-3 oui-text-2xs oui-transform oui--translate-x-1/2\",\n Number(props.value) >= Number(item)\n ? \"oui-text-primary-light\"\n : \"oui-text-base-contrast-54\",\n )}\n style={{\n left: `${position}%`,\n }}\n data-testid={`oui-testid-leverage-${item}-btn`}\n >\n {`${item}x`}\n </button>\n );\n })}\n </div>\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 { useCallback, useEffect, 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 { MarginMode, 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 marginMode: MarginMode;\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, marginMode } = options;\n const [showSliderTip, setShowSliderTip] = useState(false);\n // Local leverage value used by the input and slider; it tracks the in-flight user edits.\n // We seed it with curLeverage but intentionally do not sync further changes to avoid jumping while editing.\n const [leverage, setLeverage] = useState<number>(curLeverage);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n\n const {\n maxLeverage: originalMaxLeverage,\n update,\n isLoading,\n } = useSymbolLeverage(symbol);\n\n // Sync when external current leverage changes (e.g. symbol or margin mode changed)\n useEffect(() => {\n setLeverage(curLeverage);\n }, [curLeverage]);\n\n const maxLeverage = originalMaxLeverage;\n\n const {\n position,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n } = useCalc({ symbol: symbol!, leverage, maxLeverage, marginMode });\n\n const formattedLeverageLevers = useMemo(() => {\n return generateLeverageLeversForSelector(maxLeverage);\n }, [maxLeverage]);\n\n const leverageLevers = useMemo(() => {\n return generateLeverageLevers(maxLeverage);\n }, [maxLeverage]);\n\n const marks = useMemo<SliderMarks>(() => {\n return (\n leverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n })) || []\n );\n }, [leverageLevers]);\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 [],\n );\n\n const onInputBlur = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n (e) => {\n const inputValue = e.target.value.trim();\n if (inputValue === \"\") {\n setLeverage(curLeverage);\n }\n },\n [curLeverage],\n );\n\n const onConfirmSave = async () => {\n try {\n update?.({ leverage, symbol, margin_mode: marginMode }).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.error(\"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,\n currentLeverage: curLeverage, // Keep the displayed leverage fixed until the user confirms the change.\n value: leverage, // Input and slider reflect the temporary value being edited.\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n onInputBlur,\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 marginMode,\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 generateLeverageLeversForSelector = (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/**\n * Generate evenly distributed marks\n * @param max Maximum leverage value\n * @returns Array of evenly distributed marks\n */\nconst generateEvenlyDistributedMarks = (max: number): number[] => {\n const result: number[] = [];\n\n // Check if divisible by 5\n if (max % 5 === 0) {\n // Divisible by 5, divide from 0 to max into 5 intervals (6 marks), 1x represents 0\n const step = max / 5;\n for (let i = 0; i < 6; i++) {\n const value = step * i;\n result.push(value === 0 ? 1 : value); // 0 displays as 1x, other values display normally\n }\n } else {\n // Not divisible by 5, use 25%, 50%, 75% strategy to select nearest integers\n result.push(1); // Always include 1x\n\n // Calculate values at 25%, 50%, 75% positions\n const quarter = max * 0.25;\n const half = max * 0.5;\n const threeQuarter = max * 0.75;\n\n // Select nearest integers\n const quarterRounded = Math.round(quarter);\n const halfRounded = Math.round(half);\n const threeQuarterRounded = Math.round(threeQuarter);\n\n // Add 25% position value (if greater than 1 and not equal to 50%)\n if (quarterRounded > 1 && quarterRounded !== halfRounded) {\n result.push(quarterRounded);\n }\n\n // Add 50% position value (if greater than 1)\n if (halfRounded > 1) {\n result.push(halfRounded);\n }\n\n // Add 75% position value (if greater than 50% and less than max)\n if (threeQuarterRounded > halfRounded && threeQuarterRounded < max) {\n result.push(threeQuarterRounded);\n }\n\n // Add maximum value (if greater than 1)\n if (max > 1) {\n result.push(max);\n }\n }\n\n return result;\n};\n\n// 5x: 1, 2, 3, 4, 5\n// 10x: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n// 20x: 1, 5, 10, 15, 20\n// 50x: 1, 10, 20, 30, 40, 50\n// 100x: 1, 20, 40, 60, 80, 100\nconst generateLeverageLevers = (max: number) => {\n switch (max) {\n case 10:\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n case 20:\n return [1, 5, 10, 15, 20];\n case 50:\n return [1, 10, 20, 30, 40, 50];\n case 100:\n return [1, 20, 40, 60, 80, 100];\n }\n\n // Fallback strategy: evenly distribute mark distances, treat 1x as 0\n const result: number[] = [];\n // Optimization\n if (max < 10) {\n // For 10x and below, divide into n equal parts, each with length 1\n for (let i = 1; i <= max; i++) {\n result.push(i);\n }\n } else {\n // Use unified even distribution strategy\n result.push(...generateEvenlyDistributedMarks(max));\n }\n\n return result;\n};\n\nfunction useCalc(inputs: {\n symbol: string;\n leverage: number;\n maxLeverage: number;\n marginMode: MarginMode;\n}) {\n const { symbol, leverage, maxLeverage, marginMode } = 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(\n (item) => item.symbol === symbol && item.margin_mode === marginMode,\n );\n }\n }, [positions, symbol, marginMode]);\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 && item.margin_mode === marginMode) {\n return {\n ...item,\n leverage,\n };\n }\n return item;\n })\n : positions?.rows;\n const maxLeverageBySymbol =\n positionList?.reduce<Record<string, number>>((acc, item) => {\n if (\n item.margin_mode !== MarginMode.ISOLATED &&\n item.leverage &&\n !acc[item.symbol]\n ) {\n acc[item.symbol] = item.leverage;\n }\n return acc;\n }, {}) ?? {};\n\n // TODO: Pass actual orders data for accurate initial margin calculation\n const totalInitialMarginWithOrders = accountPerp.totalInitialMarginWithQty({\n positions: positionList,\n orders: [],\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverageBySymbol,\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 marginMode,\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 { type FC } from \"react\";\nimport { useBadgeBySymbol } from \"@orderly.network/hooks\";\nimport { SymbolBadge as UISymbolBadge } from \"@orderly.network/ui\";\n\nexport type SymbolBadgeProps = {\n symbol: string;\n className?: string;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n};\n\nexport const SymbolBadge: FC<SymbolBadgeProps> = (props) => {\n const { brokerId, brokerName, brokerNameRaw } = useBadgeBySymbol(\n props.symbol,\n );\n const badge = brokerName ?? brokerId ?? undefined;\n return <UISymbolBadge badge={badge} fullName={brokerNameRaw} />;\n};\n","import { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { MarginMode } from \"@orderly.network/types\";\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 { SymbolBadge } from \"../symbolBadge\";\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\"\n size={props.isMobile ? \"xs\" : \"base\"}\n weight=\"semibold\"\n intensity={98}\n suffix={<SymbolBadge symbol={props.symbol} />}\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\n leverage={props.currentLeverage}\n marginMode={props.marginMode}\n />\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 = ({\n leverage,\n marginMode,\n}: {\n leverage: number;\n marginMode: MarginMode;\n}) => {\n const { t } = useTranslation();\n\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>\n {marginMode === undefined\n ? \"--\"\n : marginMode === MarginMode.ISOLATED\n ? t(\"marginMode.isolated\")\n : t(\"marginMode.cross\")}\n </Text>\n {leverage === undefined ? (\n <Text size=\"2xs\">--</Text>\n ) : (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n )}\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","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 { 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"]}
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { i18n, useTranslation, Trans } from '@orderly.network/i18n';
2
- import { registerSimpleSheet, registerSimpleDialog, useScreen, TokenIcon, Text, cn, Badge, Divider, Flex, modal, inputFormatter, ReduceIcon, Input, PlusIcon, Box, Slider, Button, toast } from '@orderly.network/ui';
2
+ import { registerSimpleSheet, registerSimpleDialog, useScreen, TokenIcon, Text, cn, Badge, Divider, Flex, modal, SymbolBadge as SymbolBadge$1, inputFormatter, ReduceIcon, Input, PlusIcon, Box, Slider, Button, toast } from '@orderly.network/ui';
3
3
  import React, { useState, useEffect, useMemo, useCallback, useId } from 'react';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
5
- import { useSymbolLeverage, useLeverage, useSymbolsInfo, useAccountInfo, useMarkPricesStream, usePortfolio, useLocalStorage, usePositionStream } from '@orderly.network/hooks';
5
+ import { useSymbolLeverage, useLeverage, useSymbolsInfo, useAccountInfo, useMarkPricesStream, usePortfolio, useLocalStorage, usePositionStream, useBadgeBySymbol } from '@orderly.network/hooks';
6
6
  import { positions, account } from '@orderly.network/perp';
7
7
  import { OrderSide, MarginMode } from '@orderly.network/types';
8
8
  import { zero } from '@orderly.network/utils';
@@ -627,6 +627,13 @@ function useCalc(inputs) {
627
627
  overRequiredMargin
628
628
  };
629
629
  }
630
+ var SymbolBadge = (props) => {
631
+ const { brokerId, brokerName, brokerNameRaw } = useBadgeBySymbol(
632
+ props.symbol
633
+ );
634
+ const badge = brokerName ?? brokerId ?? void 0;
635
+ return /* @__PURE__ */ jsx(SymbolBadge$1, { badge, fullName: brokerNameRaw });
636
+ };
630
637
  var SymbolLeverage = (props) => {
631
638
  const { t } = useTranslation();
632
639
  return /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-3 lg:oui-gap-4", children: [
@@ -636,10 +643,11 @@ var SymbolLeverage = (props) => {
636
643
  Text.formatted,
637
644
  {
638
645
  rule: "symbol",
639
- formatString: "base-type",
646
+ formatString: "base",
640
647
  size: props.isMobile ? "xs" : "base",
641
648
  weight: "semibold",
642
649
  intensity: 98,
650
+ suffix: /* @__PURE__ */ jsx(SymbolBadge, { symbol: props.symbol }),
643
651
  children: props.symbol
644
652
  }
645
653
  ),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/leverage.ui.tsx","../src/leverage.script.ts","../src/leverage.widget.tsx","../src/symbolLeverage/symbolLeverage.script.tsx","../src/symbolLeverage/symbolLeverage.ui.tsx","../src/symbolLeverage/symbolLeverage.widget.tsx","../src/symbolLeverage/index.ts","../src/index.ts"],"names":["value","useTranslation","leverage","jsx","useState","useMemo","useCallback","toast","Text","positions","maxPositionLeverage","positionsPerp","accountPerp","freeCollateral","jsxs","cn","Flex","MarginMode","registerSimpleDialog","i18n","registerSimpleSheet"],"mappings":"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","file":"index.mjs","sourcesContent":["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-base-contrast 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 onInputBlur?: React.FocusEventHandler<HTMLInputElement>;\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 onBlur={props.onInputBlur}\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 marks?: { label: string; value: number }[];\n};\n\nconst getMarkPosition = (\n item: number,\n index: number,\n max: number,\n total: number,\n) => {\n // Use the same calculation logic as Slider component marks array\n const min = 1;\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const position = percentPerStep * (item - min);\n\n // Keep boundary adjustments\n if (index === 0) return Math.min(position + 2, 100);\n if (index === total - 1) return Math.max(position - 3, 0);\n return position;\n};\n\nexport const LeverageSlider: FC<LeverageSliderProps> = (props) => {\n const {\n leverageLevers,\n maxLeverage = 0,\n className,\n value,\n showSliderTip,\n marks,\n } = props;\n\n // Use the maximum value of leverageLevers array as slider maximum\n const sliderMax =\n leverageLevers.length > 0 ? Math.max(...leverageLevers) : maxLeverage;\n\n return (\n <Box pt={4} pb={7} width={\"100%\"} className={className}>\n <Slider\n step={1}\n max={maxLeverage}\n min={1}\n // markLabelVisible={true}\n marks={marks}\n // markCount={markCount}\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 <div className=\"oui-relative oui-w-full oui-pt-3\">\n {leverageLevers?.map((item, index) => {\n const position = getMarkPosition(\n item,\n index,\n sliderMax,\n leverageLevers.length,\n );\n\n return (\n <button\n key={item}\n onClick={() => {\n props.onLeverageChange(item);\n props.onValueCommit?.([item]);\n }}\n className={cn(\n \"oui-absolute oui-pb-3 oui-text-2xs oui-transform oui--translate-x-1/2\",\n Number(props.value) >= Number(item)\n ? \"oui-text-primary-light\"\n : \"oui-text-base-contrast-54\",\n )}\n style={{\n left: `${position}%`,\n }}\n data-testid={`oui-testid-leverage-${item}-btn`}\n >\n {`${item}x`}\n </button>\n );\n })}\n </div>\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 { useCallback, useEffect, 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 { MarginMode, 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 marginMode: MarginMode;\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, marginMode } = options;\n const [showSliderTip, setShowSliderTip] = useState(false);\n // Local leverage value used by the input and slider; it tracks the in-flight user edits.\n // We seed it with curLeverage but intentionally do not sync further changes to avoid jumping while editing.\n const [leverage, setLeverage] = useState<number>(curLeverage);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n\n const {\n maxLeverage: originalMaxLeverage,\n update,\n isLoading,\n } = useSymbolLeverage(symbol);\n\n // Sync when external current leverage changes (e.g. symbol or margin mode changed)\n useEffect(() => {\n setLeverage(curLeverage);\n }, [curLeverage]);\n\n const maxLeverage = originalMaxLeverage;\n\n const {\n position,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n } = useCalc({ symbol: symbol!, leverage, maxLeverage, marginMode });\n\n const formattedLeverageLevers = useMemo(() => {\n return generateLeverageLeversForSelector(maxLeverage);\n }, [maxLeverage]);\n\n const leverageLevers = useMemo(() => {\n return generateLeverageLevers(maxLeverage);\n }, [maxLeverage]);\n\n const marks = useMemo<SliderMarks>(() => {\n return (\n leverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n })) || []\n );\n }, [leverageLevers]);\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 [],\n );\n\n const onInputBlur = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n (e) => {\n const inputValue = e.target.value.trim();\n if (inputValue === \"\") {\n setLeverage(curLeverage);\n }\n },\n [curLeverage],\n );\n\n const onConfirmSave = async () => {\n try {\n update?.({ leverage, symbol, margin_mode: marginMode }).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.error(\"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,\n currentLeverage: curLeverage, // Keep the displayed leverage fixed until the user confirms the change.\n value: leverage, // Input and slider reflect the temporary value being edited.\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n onInputBlur,\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 marginMode,\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 generateLeverageLeversForSelector = (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/**\n * Generate evenly distributed marks\n * @param max Maximum leverage value\n * @returns Array of evenly distributed marks\n */\nconst generateEvenlyDistributedMarks = (max: number): number[] => {\n const result: number[] = [];\n\n // Check if divisible by 5\n if (max % 5 === 0) {\n // Divisible by 5, divide from 0 to max into 5 intervals (6 marks), 1x represents 0\n const step = max / 5;\n for (let i = 0; i < 6; i++) {\n const value = step * i;\n result.push(value === 0 ? 1 : value); // 0 displays as 1x, other values display normally\n }\n } else {\n // Not divisible by 5, use 25%, 50%, 75% strategy to select nearest integers\n result.push(1); // Always include 1x\n\n // Calculate values at 25%, 50%, 75% positions\n const quarter = max * 0.25;\n const half = max * 0.5;\n const threeQuarter = max * 0.75;\n\n // Select nearest integers\n const quarterRounded = Math.round(quarter);\n const halfRounded = Math.round(half);\n const threeQuarterRounded = Math.round(threeQuarter);\n\n // Add 25% position value (if greater than 1 and not equal to 50%)\n if (quarterRounded > 1 && quarterRounded !== halfRounded) {\n result.push(quarterRounded);\n }\n\n // Add 50% position value (if greater than 1)\n if (halfRounded > 1) {\n result.push(halfRounded);\n }\n\n // Add 75% position value (if greater than 50% and less than max)\n if (threeQuarterRounded > halfRounded && threeQuarterRounded < max) {\n result.push(threeQuarterRounded);\n }\n\n // Add maximum value (if greater than 1)\n if (max > 1) {\n result.push(max);\n }\n }\n\n return result;\n};\n\n// 5x: 1, 2, 3, 4, 5\n// 10x: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n// 20x: 1, 5, 10, 15, 20\n// 50x: 1, 10, 20, 30, 40, 50\n// 100x: 1, 20, 40, 60, 80, 100\nconst generateLeverageLevers = (max: number) => {\n switch (max) {\n case 10:\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n case 20:\n return [1, 5, 10, 15, 20];\n case 50:\n return [1, 10, 20, 30, 40, 50];\n case 100:\n return [1, 20, 40, 60, 80, 100];\n }\n\n // Fallback strategy: evenly distribute mark distances, treat 1x as 0\n const result: number[] = [];\n // Optimization\n if (max < 10) {\n // For 10x and below, divide into n equal parts, each with length 1\n for (let i = 1; i <= max; i++) {\n result.push(i);\n }\n } else {\n // Use unified even distribution strategy\n result.push(...generateEvenlyDistributedMarks(max));\n }\n\n return result;\n};\n\nfunction useCalc(inputs: {\n symbol: string;\n leverage: number;\n maxLeverage: number;\n marginMode: MarginMode;\n}) {\n const { symbol, leverage, maxLeverage, marginMode } = 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(\n (item) => item.symbol === symbol && item.margin_mode === marginMode,\n );\n }\n }, [positions, symbol, marginMode]);\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 && item.margin_mode === marginMode) {\n return {\n ...item,\n leverage,\n };\n }\n return item;\n })\n : positions?.rows;\n const maxLeverageBySymbol =\n positionList?.reduce<Record<string, number>>((acc, item) => {\n if (\n item.margin_mode !== MarginMode.ISOLATED &&\n item.leverage &&\n !acc[item.symbol]\n ) {\n acc[item.symbol] = item.leverage;\n }\n return acc;\n }, {}) ?? {};\n\n // TODO: Pass actual orders data for accurate initial margin calculation\n const totalInitialMarginWithOrders = accountPerp.totalInitialMarginWithQty({\n positions: positionList,\n orders: [],\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverageBySymbol,\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 marginMode,\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 { MarginMode } from \"@orderly.network/types\";\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\n leverage={props.currentLeverage}\n marginMode={props.marginMode}\n />\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 = ({\n leverage,\n marginMode,\n}: {\n leverage: number;\n marginMode: MarginMode;\n}) => {\n const { t } = useTranslation();\n\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>\n {marginMode === undefined\n ? \"--\"\n : marginMode === MarginMode.ISOLATED\n ? t(\"marginMode.isolated\")\n : t(\"marginMode.cross\")}\n </Text>\n {leverage === undefined ? (\n <Text size=\"2xs\">--</Text>\n ) : (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n )}\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","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 { 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"]}
1
+ {"version":3,"sources":["../src/leverage.ui.tsx","../src/leverage.script.ts","../src/leverage.widget.tsx","../src/symbolLeverage/symbolLeverage.script.tsx","../src/symbolBadge.tsx","../src/symbolLeverage/symbolLeverage.ui.tsx","../src/symbolLeverage/symbolLeverage.widget.tsx","../src/symbolLeverage/index.ts","../src/index.ts"],"names":["value","useTranslation","leverage","jsx","useState","useMemo","useCallback","toast","Text","positions","maxPositionLeverage","positionsPerp","accountPerp","freeCollateral","UISymbolBadge","jsxs","cn","Flex","MarginMode","registerSimpleDialog","i18n","registerSimpleSheet"],"mappings":"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","file":"index.mjs","sourcesContent":["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-base-contrast 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 onInputBlur?: React.FocusEventHandler<HTMLInputElement>;\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 onBlur={props.onInputBlur}\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 marks?: { label: string; value: number }[];\n};\n\nconst getMarkPosition = (\n item: number,\n index: number,\n max: number,\n total: number,\n) => {\n // Use the same calculation logic as Slider component marks array\n const min = 1;\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const position = percentPerStep * (item - min);\n\n // Keep boundary adjustments\n if (index === 0) return Math.min(position + 2, 100);\n if (index === total - 1) return Math.max(position - 3, 0);\n return position;\n};\n\nexport const LeverageSlider: FC<LeverageSliderProps> = (props) => {\n const {\n leverageLevers,\n maxLeverage = 0,\n className,\n value,\n showSliderTip,\n marks,\n } = props;\n\n // Use the maximum value of leverageLevers array as slider maximum\n const sliderMax =\n leverageLevers.length > 0 ? Math.max(...leverageLevers) : maxLeverage;\n\n return (\n <Box pt={4} pb={7} width={\"100%\"} className={className}>\n <Slider\n step={1}\n max={maxLeverage}\n min={1}\n // markLabelVisible={true}\n marks={marks}\n // markCount={markCount}\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 <div className=\"oui-relative oui-w-full oui-pt-3\">\n {leverageLevers?.map((item, index) => {\n const position = getMarkPosition(\n item,\n index,\n sliderMax,\n leverageLevers.length,\n );\n\n return (\n <button\n key={item}\n onClick={() => {\n props.onLeverageChange(item);\n props.onValueCommit?.([item]);\n }}\n className={cn(\n \"oui-absolute oui-pb-3 oui-text-2xs oui-transform oui--translate-x-1/2\",\n Number(props.value) >= Number(item)\n ? \"oui-text-primary-light\"\n : \"oui-text-base-contrast-54\",\n )}\n style={{\n left: `${position}%`,\n }}\n data-testid={`oui-testid-leverage-${item}-btn`}\n >\n {`${item}x`}\n </button>\n );\n })}\n </div>\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 { useCallback, useEffect, 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 { MarginMode, 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 marginMode: MarginMode;\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, marginMode } = options;\n const [showSliderTip, setShowSliderTip] = useState(false);\n // Local leverage value used by the input and slider; it tracks the in-flight user edits.\n // We seed it with curLeverage but intentionally do not sync further changes to avoid jumping while editing.\n const [leverage, setLeverage] = useState<number>(curLeverage);\n\n const { t } = useTranslation();\n\n const { isMobile } = useScreen();\n\n const {\n maxLeverage: originalMaxLeverage,\n update,\n isLoading,\n } = useSymbolLeverage(symbol);\n\n // Sync when external current leverage changes (e.g. symbol or margin mode changed)\n useEffect(() => {\n setLeverage(curLeverage);\n }, [curLeverage]);\n\n const maxLeverage = originalMaxLeverage;\n\n const {\n position,\n maxPositionNotional,\n maxPositionLeverage,\n overMaxPositionLeverage,\n overRequiredMargin,\n } = useCalc({ symbol: symbol!, leverage, maxLeverage, marginMode });\n\n const formattedLeverageLevers = useMemo(() => {\n return generateLeverageLeversForSelector(maxLeverage);\n }, [maxLeverage]);\n\n const leverageLevers = useMemo(() => {\n return generateLeverageLevers(maxLeverage);\n }, [maxLeverage]);\n\n const marks = useMemo<SliderMarks>(() => {\n return (\n leverageLevers.map((e) => ({\n label: `${e}x`,\n value: e,\n })) || []\n );\n }, [leverageLevers]);\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 [],\n );\n\n const onInputBlur = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n (e) => {\n const inputValue = e.target.value.trim();\n if (inputValue === \"\") {\n setLeverage(curLeverage);\n }\n },\n [curLeverage],\n );\n\n const onConfirmSave = async () => {\n try {\n update?.({ leverage, symbol, margin_mode: marginMode }).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.error(\"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,\n currentLeverage: curLeverage, // Keep the displayed leverage fixed until the user confirms the change.\n value: leverage, // Input and slider reflect the temporary value being edited.\n marks,\n onLeverageChange,\n onLeverageIncrease,\n onLeverageReduce,\n onInputChange,\n onInputBlur,\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 marginMode,\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 generateLeverageLeversForSelector = (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/**\n * Generate evenly distributed marks\n * @param max Maximum leverage value\n * @returns Array of evenly distributed marks\n */\nconst generateEvenlyDistributedMarks = (max: number): number[] => {\n const result: number[] = [];\n\n // Check if divisible by 5\n if (max % 5 === 0) {\n // Divisible by 5, divide from 0 to max into 5 intervals (6 marks), 1x represents 0\n const step = max / 5;\n for (let i = 0; i < 6; i++) {\n const value = step * i;\n result.push(value === 0 ? 1 : value); // 0 displays as 1x, other values display normally\n }\n } else {\n // Not divisible by 5, use 25%, 50%, 75% strategy to select nearest integers\n result.push(1); // Always include 1x\n\n // Calculate values at 25%, 50%, 75% positions\n const quarter = max * 0.25;\n const half = max * 0.5;\n const threeQuarter = max * 0.75;\n\n // Select nearest integers\n const quarterRounded = Math.round(quarter);\n const halfRounded = Math.round(half);\n const threeQuarterRounded = Math.round(threeQuarter);\n\n // Add 25% position value (if greater than 1 and not equal to 50%)\n if (quarterRounded > 1 && quarterRounded !== halfRounded) {\n result.push(quarterRounded);\n }\n\n // Add 50% position value (if greater than 1)\n if (halfRounded > 1) {\n result.push(halfRounded);\n }\n\n // Add 75% position value (if greater than 50% and less than max)\n if (threeQuarterRounded > halfRounded && threeQuarterRounded < max) {\n result.push(threeQuarterRounded);\n }\n\n // Add maximum value (if greater than 1)\n if (max > 1) {\n result.push(max);\n }\n }\n\n return result;\n};\n\n// 5x: 1, 2, 3, 4, 5\n// 10x: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n// 20x: 1, 5, 10, 15, 20\n// 50x: 1, 10, 20, 30, 40, 50\n// 100x: 1, 20, 40, 60, 80, 100\nconst generateLeverageLevers = (max: number) => {\n switch (max) {\n case 10:\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n case 20:\n return [1, 5, 10, 15, 20];\n case 50:\n return [1, 10, 20, 30, 40, 50];\n case 100:\n return [1, 20, 40, 60, 80, 100];\n }\n\n // Fallback strategy: evenly distribute mark distances, treat 1x as 0\n const result: number[] = [];\n // Optimization\n if (max < 10) {\n // For 10x and below, divide into n equal parts, each with length 1\n for (let i = 1; i <= max; i++) {\n result.push(i);\n }\n } else {\n // Use unified even distribution strategy\n result.push(...generateEvenlyDistributedMarks(max));\n }\n\n return result;\n};\n\nfunction useCalc(inputs: {\n symbol: string;\n leverage: number;\n maxLeverage: number;\n marginMode: MarginMode;\n}) {\n const { symbol, leverage, maxLeverage, marginMode } = 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(\n (item) => item.symbol === symbol && item.margin_mode === marginMode,\n );\n }\n }, [positions, symbol, marginMode]);\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 && item.margin_mode === marginMode) {\n return {\n ...item,\n leverage,\n };\n }\n return item;\n })\n : positions?.rows;\n const maxLeverageBySymbol =\n positionList?.reduce<Record<string, number>>((acc, item) => {\n if (\n item.margin_mode !== MarginMode.ISOLATED &&\n item.leverage &&\n !acc[item.symbol]\n ) {\n acc[item.symbol] = item.leverage;\n }\n return acc;\n }, {}) ?? {};\n\n // TODO: Pass actual orders data for accurate initial margin calculation\n const totalInitialMarginWithOrders = accountPerp.totalInitialMarginWithQty({\n positions: positionList,\n orders: [],\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverageBySymbol,\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 marginMode,\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 { type FC } from \"react\";\nimport { useBadgeBySymbol } from \"@orderly.network/hooks\";\nimport { SymbolBadge as UISymbolBadge } from \"@orderly.network/ui\";\n\nexport type SymbolBadgeProps = {\n symbol: string;\n className?: string;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n};\n\nexport const SymbolBadge: FC<SymbolBadgeProps> = (props) => {\n const { brokerId, brokerName, brokerNameRaw } = useBadgeBySymbol(\n props.symbol,\n );\n const badge = brokerName ?? brokerId ?? undefined;\n return <UISymbolBadge badge={badge} fullName={brokerNameRaw} />;\n};\n","import { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { MarginMode } from \"@orderly.network/types\";\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 { SymbolBadge } from \"../symbolBadge\";\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\"\n size={props.isMobile ? \"xs\" : \"base\"}\n weight=\"semibold\"\n intensity={98}\n suffix={<SymbolBadge symbol={props.symbol} />}\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\n leverage={props.currentLeverage}\n marginMode={props.marginMode}\n />\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 = ({\n leverage,\n marginMode,\n}: {\n leverage: number;\n marginMode: MarginMode;\n}) => {\n const { t } = useTranslation();\n\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>\n {marginMode === undefined\n ? \"--\"\n : marginMode === MarginMode.ISOLATED\n ? t(\"marginMode.isolated\")\n : t(\"marginMode.cross\")}\n </Text>\n {leverage === undefined ? (\n <Text size=\"2xs\">--</Text>\n ) : (\n <Text.numeral dp={0} size=\"2xs\" unit=\"X\">\n {leverage}\n </Text.numeral>\n )}\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","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 { 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderly.network/ui-leverage",
3
- "version": "2.11.3-rc.0",
3
+ "version": "2.12.0-alpha.0",
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.11.3-rc.0",
19
- "@orderly.network/ui": "2.11.3-rc.0",
20
- "@orderly.network/utils": "2.11.3-rc.0",
21
- "@orderly.network/perp": "4.11.3-rc.0",
22
- "@orderly.network/hooks": "2.11.3-rc.0",
23
- "@orderly.network/types": "2.11.3-rc.0"
18
+ "@orderly.network/i18n": "2.12.0-alpha.0",
19
+ "@orderly.network/hooks": "2.12.0-alpha.0",
20
+ "@orderly.network/types": "2.12.0-alpha.0",
21
+ "@orderly.network/utils": "2.12.0-alpha.0",
22
+ "@orderly.network/ui": "2.12.0-alpha.0",
23
+ "@orderly.network/perp": "4.12.0-alpha.0"
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": "^8.5.1",
34
- "tsconfig": "0.14.3-rc.0"
34
+ "tsconfig": "0.15.0-alpha.0"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "react": ">=18",