import { SymbolInfoBarFullProps } from '@orderly.network/markets';
import * as React$1 from 'react';
import React__default, { ReactNode, RefObject, FC, PropsWithChildren } from 'react';
import * as _orderly_network_types from '@orderly.network/types';
import { API, NetworkId, AccountStatusEnum } from '@orderly.network/types';
import * as _orderly_network_ui_share from '@orderly.network/ui-share';
import { SharePnLConfig } from '@orderly.network/ui-share';
import { TradingviewWidgetPropsInterface } from '@orderly.network/ui-tradingview';
import { AccountState as AccountState$1 } from '@orderly.network/core';
import Split, { SplitProps } from '@uiw/react-split';
import { PositionsProps } from '@orderly.network/ui-positions';
import * as _orderly_network_hooks from '@orderly.network/hooks';
import { SliderMarks } from '@orderly.network/ui';
import * as react_jsx_runtime from 'react/jsx-runtime';

type layoutInfo = {
    width?: number;
    height?: number;
    fontSize?: number;
    color?: string;
    textAlign?: CanvasTextAlign;
    textBaseline?: CanvasTextBaseline;
    position: Partial<{
        left: number;
        right: number;
        top: number;
        bottom: number;
    }>;
};
type PosterLayoutConfig = {
    message?: layoutInfo;
    domain?: layoutInfo;
    position?: layoutInfo;
    unrealizedPnl?: layoutInfo & {
        secondaryColor: string;
        secondaryFontSize: number;
    };
    informations?: layoutInfo & {
        labelColor?: string;
    };
    updateTime?: layoutInfo;
};
type ShareOptions = {
    pnl: {
        /**
         * defualt is Manrope
         */
        fontFamily?: string;
        /**
         * can not empty
         */
        backgroundImages: string[];
        /**
         * posterLayoutConfig
         */
        layout?: PosterLayoutConfig;
        /**
         * norma text color, default is  "rgba(255, 255, 255, 0.98)"
         */
        color?: string;
        /**
         * profit text color, default is "rgb(0,181,159)"
         */
        profitColor?: string;
        /**
         * loss text color, default is  "rgb(255,103,194)"
         */
        lossColor?: string;
        /**
         * brand color, default is "rgb(0,181,159)"
         */
        brandColor?: string;
    };
};
declare enum TradingFeatures {
    Sider = "sider",
    TopNavBar = "topNavBar",
    Footer = "footer",
    Header = "header",
    Kline = "kline",
    OrderBook = "orderBook",
    TradeHistory = "tradeHistory",
    Positions = "positions",
    Orders = "orders",
    AssetAndMarginInfo = "asset_margin_info",
    SlippageSetting = "slippageSetting",
    FeesInfo = "feesInfo"
}
type BasicSymbolInfo = {
    base_dp: number;
    quote_dp: number;
    base_tick: number;
    base: string;
    quote: string;
};
interface TradingPageState extends TradingPageProps {
    symbolInfo: {
        base_dp: number;
        quote_dp: number;
        base_tick: number;
        base: string;
        quote: string;
        symbol: string;
    };
}
interface TradingViewConfigInterface {
    scriptSRC?: string;
    library_path: string;
    overrides?: TradingviewWidgetPropsInterface["overrides"];
    studiesOverrides?: TradingviewWidgetPropsInterface["studiesOverrides"];
    customCssUrl?: string;
    colorConfig?: ColorConfigInterface;
    locale?: TradingviewWidgetPropsInterface["locale"];
    enabled_features?: string[];
    disabled_features?: string[];
}
interface ColorConfigInterface {
    chartBG?: string;
    upColor?: string;
    downColor?: string;
    pnlUpColor?: string;
    pnlDownColor?: string;
    pnlZoreColor?: string;
    textColor?: string;
    qtyTextColor?: string;
    font?: string;
    closeIcon?: string;
}
type ReferralProps = {
    saveRefCode?: boolean;
    onClickReferral?: () => void;
    onBoundRefCode?: (success: boolean, error: any) => void;
};
type TradingRewardsProps = {
    onClickTradingRewards?: () => void;
};
type BaseTradingPageProps = {
    symbol: string;
    tradingViewConfig: TradingViewConfigInterface;
    onSymbolChange?: (symbol: API.Symbol) => void;
    disableFeatures?: TradingFeatures[];
    overrideFeatures?: Record<TradingFeatures, ReactNode>;
};
type TradingPageProps = BaseTradingPageProps & {
    sharePnLConfig?: SharePnLConfig;
    referral?: ReferralProps;
    tradingRewards?: TradingRewardsProps;
    bottomSheetLeading?: React.ReactNode | string;
};

/**
 * Desktop asks list props. `symbolInfo` and `depth` are threaded through
 * {@link InjectableDesktopAsks} so Orderly plugins replacing `OrderBook.Desktop.Asks`
 * can render without relying only on context. The default `DesktopAsks` uses `data`
 * and reads symbol/depth from `OrderBookProvider` / `OrderBookContext`.
 */
interface Props$1 {
    data: number[][];
    /** For plugin replacements; unused by the default asks row list (context carries symbol). */
    symbolInfo: BasicSymbolInfo;
    /** For plugin replacements; active depth key; unused by the default list (context carries depth). */
    depth: string | undefined;
}

/**
 * Desktop bids list props. `symbolInfo` and `depth` are threaded through
 * {@link InjectableDesktopBids} so Orderly plugins replacing `OrderBook.Desktop.Bids`
 * can render without relying only on context. The default `DesktopBids` uses `data`
 * and reads symbol/depth from `OrderBookProvider` / `OrderBookContext`.
 */
interface Props {
    data: number[][];
    /** For plugin replacements; unused by the default bids row list (context carries symbol). */
    symbolInfo: BasicSymbolInfo;
    /** For plugin replacements; active depth key; unused by the default list (context carries depth). */
    depth: string | undefined;
}

declare const useAccountScript: () => {
    onShowAccountSheet: () => void;
    address: string | undefined;
    state: AccountState$1;
};
type AccountState = ReturnType<typeof useAccountScript>;

type LayoutPosition = "left" | "right";

type TradingState = ReturnType<typeof useTradingScript>;
type MarketLayoutPosition = "left" | "top" | "bottom" | "hide";
declare const useTradingScript: () => TradingPageState & {
    marketsWidth: number;
    tradindviewMaxHeight: number;
    dataListMinHeight: number;
    total: number | null;
    hideAssets: any;
    setHideAssets: (value: boolean) => void;
    onShowPortfolioSheet: () => void;
    navigateToPortfolio: (() => void) | undefined;
    isFirstTimeDeposit: boolean;
    symbolInfoBarHeight: number;
    max2XLSplitRef: RefObject<Split>;
    tradingviewAndOrderbookSplitRef: RefObject<Split>;
    onTradingviewAndOrderbookDragging: (preSize: number, nextSize: number) => void;
    onDataListSplitHeightDragging: (preSize: number, nextSize: number) => void;
    extraHeight: any;
    dataListHeight: any;
    restrictedInfo: {
        ip: string;
        invalidRegions: string[];
        restrictedOpen: boolean;
        content: React$1.ReactNode | ((data: {
            ip: string;
            brokerName: string;
        }) => React$1.ReactNode);
        canUnblock: boolean;
        accessRestricted: any;
        setAccessRestricted: (value: boolean | undefined) => void;
    };
    orderEntryViewRef: RefObject<HTMLDivElement>;
    orderEntryHeight: number;
    orderBookSplitSize: string | undefined;
    setOrderbookSplitSize: (size: string) => void;
    dataListSplitSize: string | undefined;
    setDataListSplitSize: (size: string) => void;
    mainSplitSize: string | undefined;
    setMainSplitSize: (size: string) => void;
    dataListSplitHeightSM: string | undefined;
    setDataListSplitHeightSM: (size: string) => void;
    orderBookSplitHeightSM: string | undefined;
    setOrderbookSplitHeightSM: (size: string) => void;
    positions: number[];
    showPositionIcon: boolean;
    updatePositions: (currentIdx: number, targetIdx: number) => void;
    resizeable: boolean;
    panelSize: "small" | "middle" | "large";
    onPanelSizeChange: (collapsed: "small" | "middle" | "large") => void;
    animating: boolean;
    setAnimating: React$1.Dispatch<React$1.SetStateAction<boolean>>;
    layout: any;
    onLayout: (value: LayoutPosition) => void;
    marketLayout: any;
    onMarketLayout: (value: MarketLayoutPosition) => void;
    max2XL: boolean;
    min3XL: boolean;
    max4XL: boolean;
    canTrade: boolean;
    openMarketsSheet: boolean;
    onOpenMarketsSheetChange: React$1.Dispatch<React$1.SetStateAction<boolean>>;
    horizontalDraggable: boolean;
};

type DesktopLayoutProps = TradingState & {
    className?: string;
};

/**
 * Module augmentation: maps interceptor target paths to their component props types.
 * Import from @orderly.network/trading to enable typed props in
 * createInterceptor('Trading.Layout.Desktop', ...), createInterceptor('Account.MobileAccountMenu', ...), etc.
 */

declare module "@orderly.network/plugin-core" {
    interface InterceptorTargetPropsMap {
        "Account.MobileAccountMenu": AccountState;
        "OrderBook.Desktop.Asks": Props$1;
        "OrderBook.Desktop.Bids": Props;
        "Trading.Layout.Desktop": DesktopLayoutProps;
        "Trading.SymbolInfoBar.Desktop": SymbolInfoBarFullProps;
    }
}

declare enum DataListTabType {
    positions = "Positions",
    pending = "Pending",
    tp_sl = "TP/SL",
    filled = "Filled",
    positionHistory = "Position history",
    orderHistory = "Order history",
    liquidation = "Liquidation",
    assets = "Assets"
}
declare const useDataListScript: (inputs: {
    current?: DataListTabType;
} & PositionsProps) => {
    positionCount: number;
    pendingOrderCount: number;
    tpSlOrderCount: number;
    onSymbolChange: ((symbol: _orderly_network_types.API.Symbol) => void) | undefined;
    unPnlPriceBasis: any;
    setUnPnlPriceBasic: (value: string) => void;
    pnlNotionalDecimalPrecision: any;
    setPnlNotionalDecimalPrecision: (value: number) => void;
    showAllSymbol: any;
    setShowAllSymbol: (value: boolean) => void;
    hideAssets: any;
    setHideAssets: (value: boolean) => void;
    current: DataListTabType | undefined;
    sharePnLConfig: _orderly_network_ui_share.SharePnLConfig | undefined;
    symbol: string | undefined;
    calcMode: any;
    includedPendingOrder: boolean | undefined;
};
type DataListState = ReturnType<typeof useDataListScript>;

declare const DataList: React__default.FC<DataListState>;

declare const DataListWidget: React__default.FC<{
    current?: DataListTabType;
} & PositionsProps>;

declare const useLastTradesScript: (symbol: string) => {
    base: string;
    quote: string;
    data: _orderly_network_types.API.Trade[];
    isLoading: boolean;
    baseDp: number;
    quoteDp: number;
};
type LastTradesState = ReturnType<typeof useLastTradesScript>;

declare const LastTrades: FC<LastTradesState & {
    classNames?: {
        root?: string;
        list?: string;
        listHeader?: string;
        listItem?: {
            left?: string;
            mid?: string;
            right?: string;
        };
    };
    style?: React__default.CSSProperties;
}>;

declare const LastTradesWidget: React__default.FC<{
    symbol: string;
    classNames?: {
        root?: string;
        list?: string;
        listHeader?: string;
        listItem?: {
            left?: string;
            mid?: string;
            right?: string;
        };
    };
    style?: React__default.CSSProperties;
}>;

declare const useAssetViewScript: () => {
    onDeposit: () => Promise<unknown>;
    onWithdraw: () => Promise<unknown>;
    onTransfer: () => Promise<unknown>;
    onSettle: () => Promise<any>;
    visible: any;
    toggleVisible: () => void;
    networkId: NetworkId;
    totalValue: number | undefined;
    status: AccountStatusEnum;
    freeCollateral: number | undefined;
    marginRatioVal: number | undefined;
    renderMMR: number | undefined;
    maintenanceMargin: number | undefined;
    currentLeverage: number | undefined;
    isConnected: boolean;
    isMainAccount: boolean;
    hasSubAccount: boolean;
    currentLtv: number;
};
type AssetViewState = ReturnType<typeof useAssetViewScript>;

declare const AssetView: FC<AssetViewState & {
    isFirstTimeDeposit?: boolean;
}>;

type AssetViewWidgetProps = {
    isFirstTimeDeposit?: boolean;
};
declare const AssetViewWidget: React__default.FC<AssetViewWidgetProps>;

interface BuySellRatio {
    buyPercentage: number;
    sellPercentage: number;
    buyAmount: number;
    sellAmount: number;
}
declare const useOrderBookScript: (props: {
    symbol: string;
    height?: number;
}) => {
    level: number;
    asks: _orderly_network_hooks.OrderBookItem[] | undefined;
    bids: _orderly_network_hooks.OrderBookItem[] | undefined;
    markPrice: number | undefined;
    lastPrice: number[] | undefined;
    depths: string[];
    selDepth: string | undefined;
    /** Canonical API / route symbol (do not reconstruct from base+quote). */
    symbol: string;
    base: string;
    quote: string;
    isLoading: boolean | undefined;
    onItemClick: ((item: _orderly_network_hooks.OrderBookItem) => void) | undefined;
    cellHeight: number;
    onDepthChange: ((val: number) => void) | undefined;
    pendingOrders: number[];
    symbolInfo: BasicSymbolInfo;
    isMobile: boolean;
    showBuySellRatio: any;
    setShowBuySellRatio: (value: boolean) => void;
    buySellRatio: BuySellRatio | null;
};
type OrderBookState = ReturnType<typeof useOrderBookScript>;

declare const OrderBook: React__default.FC<OrderBookState & {
    className?: string;
}>;

interface OrderBookWidgetProps {
    className?: string;
    symbol: string;
    height?: number;
}
declare const OrderBookWidget: React__default.FC<OrderBookWidgetProps>;

interface BuySellRatioBarProps {
    ratio: BuySellRatio | null;
    className?: string;
}
declare const BuySellRatioBar: FC<BuySellRatioBarProps>;

type QtyMode = "quantity" | "amount";
type TotalMode = "quantity" | "amount";

interface OrderBookContextValue {
    cellHeight: number;
    mode: QtyMode;
    depth?: string;
    onModeChange?: (mode: QtyMode) => void;
    onItemClick?: (item: number[]) => void;
    showTotal: boolean;
    totalMode: TotalMode;
    pendingOrders: ReadonlyArray<number> | number[];
    onTotalModeChange?: (mode: TotalMode) => void;
    symbolInfo: BasicSymbolInfo;
    showBuySellRatio: boolean;
    onShowBuySellRatioChange?: (show: boolean) => void;
}
declare const useOrderBookContext: () => OrderBookContextValue;
interface OrderBookProviderProps {
    cellHeight: number;
    depth?: string;
    showTotal: boolean;
    pendingOrders: ReadonlyArray<number> | number[];
    onItemClick?: (item: number[]) => void;
    symbolInfo: BasicSymbolInfo;
    showBuySellRatio?: boolean;
    onShowBuySellRatioChange?: (show: boolean) => void;
}
declare const OrderBookProvider: FC<PropsWithChildren<OrderBookProviderProps>>;

declare const useRiskRateScript: () => {
    riskRate: string | null;
    riskRateColor: {
        isHigh: boolean;
        isMedium: boolean;
        isLow: boolean;
        isDefault: boolean;
    };
    isConnected: boolean;
    currentLeverage: number | null;
    maxLeverage: number | null;
};
type RiskRateState = ReturnType<typeof useRiskRateScript>;

declare const RiskRate: FC<RiskRateState>;

declare const RiskRateWidget: React__default.FC;

declare const useOrderBookAndTradesScript: (symbol: string) => {
    symbol: string;
    containerSize: {
        width: number;
        height: number;
    } | undefined;
    containerRef: React$1.RefObject<HTMLDivElement>;
    tab: "orderBook" | "lastTrades";
    setTab: React$1.Dispatch<React$1.SetStateAction<"orderBook" | "lastTrades">>;
};
type OrderBookAndTradesState = ReturnType<typeof useOrderBookAndTradesScript>;

declare const OrderBookAndTrades: React__default.FC<OrderBookAndTradesState>;

declare const OrderBookAndTradesWidget: React__default.FC<{
    symbol: string;
}>;

declare const SplitLayout: React__default.ForwardRefExoticComponent<SplitProps & {
    children?: React__default.ReactNode | undefined;
} & {
    onSizeChange?: (size: string) => void;
} & React__default.RefAttributes<Split>>;

declare const useBottomNavBarScript: () => {
    wrongNetwork: boolean;
    disabledConnect: boolean;
    status: _orderly_network_types.AccountStatusEnum;
    onDisconnect: () => Promise<void>;
};
type BottomNavBarState = ReturnType<typeof useBottomNavBarScript>;

declare const BottomNavBar: FC<BottomNavBarState>;

declare const BottomNavBarWidget: React__default.FC;

declare const usePortfolioSheetScript: () => {
    onSettlePnL: () => Promise<any>;
    onDeposit: () => void;
    onWithdraw: () => void;
    showSliderTip: boolean;
    setShowSliderTip: React$1.Dispatch<React$1.SetStateAction<boolean>>;
    isMainAccount: boolean;
    onTransfer: () => void;
    hasSubAccount: boolean;
    aggregated: Omit<_orderly_network_types.API.PositionsTPSLExt, "rows">;
    totalUnrealizedROI: number;
    positionsInfo: Record<"notional" | "unsettledPnL" | "margin_ratio" | "initial_margin_ratio" | "maintenance_margin_ratio" | "open_margin_ratio" | "current_margin_ratio_with_orders" | "initial_margin_ratio_with_orders" | "maintenance_margin_ratio_with_orders" | "total_collateral_value" | "free_collateral" | "total_pnl_24_h" | "unrealPnL" | "total_unreal_pnl" | "total_unreal_pnl_index" | "total_unsettled_pnl" | "unrealPnlROI" | "unrealPnlROI_index" | "total_unsettled_cross_pnl" | "total_unsettled_isolated_pnl", <Key extends "unsettledPnL" | "margin_ratio" | "initial_margin_ratio" | "maintenance_margin_ratio" | "open_margin_ratio" | "current_margin_ratio_with_orders" | "initial_margin_ratio_with_orders" | "maintenance_margin_ratio_with_orders" | "total_collateral_value" | "free_collateral" | "total_pnl_24_h" | "unrealPnL" | "total_unreal_pnl" | "total_unreal_pnl_index" | "total_unsettled_pnl" | "notional" | "unrealPnlROI" | "unrealPnlROI_index" | "total_unsettled_cross_pnl" | "total_unsettled_isolated_pnl">(defaultValue?: Omit<_orderly_network_types.API.PositionInfo, "rows">[Key] | undefined) => Omit<_orderly_network_types.API.PositionInfo, "rows">[Key]> & {
        isNil: boolean;
    };
    marginRatio: number;
    marginRatioVal: number;
    mmr: number | null;
    currentLeverage: number | null;
    step: number;
    marks: SliderMarks;
    onLeverageChange: (leverage: number) => void;
    onLeverageIncrease: React$1.MouseEventHandler<SVGSVGElement>;
    onLeverageReduce: React$1.MouseEventHandler<SVGSVGElement>;
    onInputChange: React$1.ChangeEventHandler<HTMLInputElement>;
    isReduceDisabled: boolean;
    isIncreaseDisabled: boolean;
    onValueCommit: (value: number | number[]) => void;
    value: number;
    maxLeverage: number;
    onSaveLeverage: (leverage: number) => Promise<void>;
    hideAssets: any;
    toggleHideAssets: () => void;
    totalCollateral: number;
    freeCollateral: number;
    totalValue: number | null;
    availableBalance: number;
};
type PortfolioSheetState = ReturnType<typeof usePortfolioSheetScript>;

declare const PortfolioSheet: FC<PortfolioSheetState>;

declare const PortfolioSheetWidget: () => react_jsx_runtime.JSX.Element;

declare const useFundingRateScript: (symbol: string) => {
    data: {
        est_funding_rate: string | null | undefined;
        countDown: string;
        symbol?: string | undefined;
        est_funding_rate_timestamp?: number | undefined;
        last_funding_rate?: number | undefined;
        last_funding_rate_timestamp?: number | undefined;
        next_funding_time?: number | undefined;
        sum_unitary_funding?: number | undefined;
    };
    onClick: React$1.MouseEventHandler<HTMLElement>;
};
type FundingRateState = ReturnType<typeof useFundingRateScript>;

declare const FundingRate: FC<FundingRateState>;

declare const FundingRateWidget: React__default.FC<{
    symbol: string;
}>;

interface FundingRateOptions {
    symbol: string;
}
declare const useFundingRateModalScript: (options: FundingRateOptions) => {
    fundingPeriod: string;
    capFunding: string;
    floorFunding: string;
    lastFundingRate: string | undefined;
    estFundingFee: string;
    lastFundingRateAnnualized: string | undefined;
    estFundingRateByTimeframe: {
        timeframe: "1H" | "4H" | "1D" | "7D" | "30D" | "1Y";
        value: string;
    }[];
};
type FundingRateModalState = ReturnType<typeof useFundingRateModalScript>;

declare const FundingRateModal: React__default.FC<FundingRateModalState>;

declare const FundingRateModalWidget: React__default.FC<{
    symbol: string;
}>;
declare const FundingRateDialogId = "FundingRateDialogId";
declare const FundingRateSheetId = "FundingRateSheetId";

declare const Trading: FC<TradingState>;

declare const TradingWidget: React__default.FC;

declare const TradingPage: React__default.FC<TradingPageProps>;

declare const TradingPageContext: React$1.Context<TradingPageState>;
declare const useTradingPageContext: () => TradingPageState;

declare const TradingPageProvider: FC<PropsWithChildren<TradingPageProps>>;

declare const useTradingLocalStorage: (props?: {
    pnlNotionalDecimalPrecision?: number;
}) => {
    unPnlPriceBasis: any;
    setUnPnlPriceBasic: (value: string) => void;
    pnlNotionalDecimalPrecision: any;
    setPnlNotionalDecimalPrecision: (value: number) => void;
    showAllSymbol: any;
    setShowAllSymbol: (value: boolean) => void;
    hideAssets: any;
    setHideAssets: (value: boolean) => void;
};

declare const usePositionsCount: (symbol?: string) => {
    positionCount: number;
};

declare const usePendingOrderCount: (symbol?: string) => {
    pendingOrderCount: number;
    tpSlOrderCount: number;
};

export { type AccountState, AssetView, AssetViewWidget, BottomNavBar, BottomNavBarWidget, type BuySellRatio, BuySellRatioBar, DataList, DataListWidget, type DesktopLayoutProps, FundingRate, FundingRateDialogId, FundingRateModal, type FundingRateModalState, FundingRateModalWidget, FundingRateSheetId, FundingRateWidget, LastTrades, LastTradesWidget, OrderBook, OrderBookAndTrades, OrderBookAndTradesWidget, type Props$1 as OrderBookDesktopAsksProps, type Props as OrderBookDesktopBidsProps, OrderBookProvider, OrderBookWidget, PortfolioSheet, PortfolioSheetWidget, type ReferralProps, RiskRate, RiskRateWidget, type ShareOptions, SplitLayout, Trading, TradingPage, TradingPageContext, type TradingPageProps, TradingPageProvider, type TradingRewardsProps, TradingWidget, useBottomNavBarScript, useFundingRateModalScript, useFundingRateScript, useOrderBookAndTradesScript, useOrderBookContext, useOrderBookScript, usePendingOrderCount, usePortfolioSheetScript, usePositionsCount, useTradingLocalStorage, useTradingPageContext, useTradingScript };
