import { Component, ContextType, Ref, MouseEventHandler, CSSProperties, PropsWithChildren, ReactNode } from 'react'; import { Instance as PopperInstance, Options as PopperOptions, Placement, Rect as PopperRect, ModifierArguments, VirtualElement } from '@popperjs/core'; import { PopupProps } from '@befe/brick-comp-popup'; import { ChildNodePopperGetter, PopperContext } from './popper-context'; export type PopperTargetObject = Element | VirtualElement; export type PopperTarget = PopperTargetObject | (() => PopperTargetObject | void | null) | null; type PopperInstanceState = PopperInstance['state']; type ModifierData = PopperInstanceState['modifiersData']; type PropsFromPopup = Omit; export interface PopperProps extends PropsFromPopup { /** * 自定义 class */ className?: string; /** * 是否显示 */ visible?: boolean; /** * 目标元素 * * @type Element | VirtualElement | (() => Element | VirtualElement | void | null) */ target?: PopperTarget; /** * 浮层相对于 target 的位置 * | 'top-start' | 'top' | 'top-end' * | 'right-start' | 'right' | 'right-end' * | 'bottom-end' | 'bottom' | 'bottom-start' * | 'left-end' | 'left' | 'left-start' */ placement?: Placement; /** * 位置策略 * - 默认为 `'absolute'` 可以满足绝大多数场景, * - 如若果 target element 位于一个 fixed 容器,设置为 `'fixed'` */ strategy?: PopperOptions['strategy']; /** * use `strategy` instead * @deprecated since 0.2.44 */ positionFixed?: boolean; /** * modifier 设置 */ modifiers?: PopperOptions['modifiers']; /** * popperWrap 的 element ref 函数 */ refPopperWrap?: Ref; /** * popperWrap 最小宽度匹配到 target 的宽度 */ matchMinWidthToTarget?: boolean; /** * popperWrap 宽度匹配到 target 的宽度 */ matchWidthToTarget?: boolean; /** * 鼠标进入 popper wrap 回调 */ onMouseEnter?: MouseEventHandler; /** * 鼠标离开 popper wrap 回调 */ onMouseLeave?: MouseEventHandler; /** * popper 总状态更新时的回调(预留) */ onChange?: (popperState: PopperState) => void; /** * 是否带箭头 */ withArrow?: boolean; /** * 箭头垂直于 placement 的偏移,只在 placement 为 \*-end, \*-start 时有效 * - `'auto'`: 当 popper 宽/高尺寸小于 target 时按默认值偏移 * - `number`: 按指定量偏移 */ arrowOffset?: 'auto' | number; } interface PopperState { placement: Placement; popperStyles: CSSProperties; arrowStyles: CSSProperties; modifiersData: ModifierData; popperRect: PopperRect; targetRect: PopperRect; isHidden?: boolean; } export declare class Popper extends Component { static displayName: string; static propTypes: { positionFixed: (props: import("@befe/brick-utils").StringIndexedObject, propName: string, componentName: string) => Error | null; }; static defaultProps: { className: string; destroyOnHide: boolean; placement: string; strategy: string; matchMinWidthToTarget: boolean; withArrow: boolean; arrowOffset: string; }; static contextType: import("react").Context; context: ContextType; state: PopperState; elemPopperWrap: HTMLDivElement | null; popperInstance: PopperInstance | null; targetObject: Element | null; targetLastRect: DOMRect | null; popperLastRect: DOMRect | null; refArrow: import("react").RefObject; descendantPoppersGetters: ChildNodePopperGetter[]; refPopperWrap: (node: HTMLDivElement) => void; nodePopperGetter: () => this; setChildPopperGetter: (childNodePopperGetter: ChildNodePopperGetter) => void; removeChildPopperGetter: (childNodePopperGetter: ChildNodePopperGetter) => void; get strategy(): import("@popperjs/core").PositioningStrategy | undefined; get options(): Partial; get wrapWidthStyle(): CSSProperties; get wrapStyle(): CSSProperties; get arrowStyle(): CSSProperties; get target(): void | PopperTargetObject | null; isDescendant: (elem: Node) => boolean; updateLastRect(): void; popperUpdateStateModifier: (data: ModifierArguments>) => void; destroyPopperInstance(): void; reCreatePopperInstance(): void; updatePopperInstance(): Promise> | undefined; updatePopperInstanceOptions(): Promise> | undefined; renderPopperArrow: () => import("react/jsx-runtime").JSX.Element | null; renderPopper: () => false | "" | 0 | import("react/jsx-runtime").JSX.Element | null | undefined; renderPopup: () => import("react/jsx-runtime").JSX.Element; componentWillUnmount(): void; componentDidMount(): void; componentDidUpdate(prevProps: Readonly>): void; render(): import("react/jsx-runtime").JSX.Element; } export declare const isPopper: (node: ReactNode) => boolean; export {};