UNPKG

react-floater

Version:
163 lines (162 loc) 5.27 kB
import { CSSProperties, FunctionComponent, MouseEventHandler, ReactElement, ReactNode } from "react"; import * as react_jsx_runtime0 from "react/jsx-runtime"; import { Instance, Placement as Placement$1 } from "@popperjs/core"; import { ApplyStylesModifier } from "@popperjs/core/lib/modifiers/applyStyles"; import { ArrowModifier } from "@popperjs/core/lib/modifiers/arrow"; import { ComputeStylesModifier } from "@popperjs/core/lib/modifiers/computeStyles"; import { EventListenersModifier } from "@popperjs/core/lib/modifiers/eventListeners"; import { FlipModifier } from "@popperjs/core/lib/modifiers/flip"; import { HideModifier } from "@popperjs/core/lib/modifiers/hide"; import { OffsetModifier } from "@popperjs/core/lib/modifiers/offset"; import { PopperOffsetsModifier } from "@popperjs/core/lib/modifiers/popperOffsets"; import { PreventOverflowModifier } from "@popperjs/core/lib/modifiers/preventOverflow"; //#region src/types/popper.d.ts type PopperInstance = Instance; type PopperPlacement = Placement$1; interface PopperModifiers { applyStyles?: Partial<ApplyStylesModifier>; arrow?: Partial<ArrowModifier>; computeStyles?: Partial<ComputeStylesModifier>; eventListeners?: Partial<EventListenersModifier>; flip?: Partial<FlipModifier>; hide?: Partial<HideModifier>; offset?: Partial<OffsetModifier>; popperOffsets?: Partial<PopperOffsetsModifier>; preventOverflow?: Partial<PreventOverflowModifier>; } //#endregion //#region src/types/utilities.d.ts type PartialDeep<T> = { [K in keyof T]?: T[K] extends object ? Partial<T[K]> : T[K] }; type RequireExactlyOne<T, Keys extends keyof T = keyof T> = { [K in Keys]: Required<Pick<T, K>> & Partial<Record<Exclude<Keys, K>, never>> }[Keys] & Omit<T, Keys>; //#endregion //#region src/types/common.d.ts type Action = 'open' | 'close'; type CloseFunction<T = HTMLElement> = MouseEventHandler<T>; type FloaterComponent<T = CustomComponentProps> = FunctionComponent<T> | ReactElement<T>; type Placement = PopperPlacement | 'center'; type Props = RequireExactlyOne<BaseProps, 'content' | 'component'>; type SelectorOrElement = string | null | HTMLElement; interface BaseProps { /** * A custom arrow for the Floater. */ arrow?: ReactNode; /** * Open the Floater automatically. * @default false */ autoOpen?: boolean; callback?: (action: Action, props: Props) => void; children?: ReactNode; /** * A React element or function to be used as the custom UI for the Floater. * The prop closeFloater will be available in your component. */ component: FloaterComponent; content: ReactNode; /** * Log some actions. * @default false */ debug?: boolean; /** * Disable placement adjustments on scroll/resize. * @default false */ disableFlip?: boolean; /** * Disable the conversion of hover to click on mobile. * @default false */ disableHoverToClick?: boolean; /** * The event type that will trigger the Floater. * Unused in controlled mode. * @default click */ event?: 'click' | 'hover'; /** * The amount of time (in seconds) that the floater should wait after a mouseLeave event before hiding. * Only valid for event type hover. * @default 0.4 * */ eventDelay?: number; footer?: ReactNode; getPopper?: (popper: PopperInstance, origin: 'floater' | 'wrapper') => void; /** * Hide the arrow. * @default false */ hideArrow?: boolean; id?: string; modifiers?: PopperModifiers; /** * The distance between the target and the Floater in pixels. * @default 15 */ offset?: number; open?: boolean; /** * The placement of the Floater * This will be updated automatically if there's no space available unless the "disableFlip" is set to true * @default bottom */ placement?: Placement; portalElement?: SelectorOrElement; /** * Show a button to close the Floater. * @default false */ showCloseButton?: boolean; style?: CSSProperties; styles?: PartialDeep<Styles>; target?: SelectorOrElement; title?: ReactNode; wrapperOptions?: { offset?: number; placement?: PopperPlacement; position?: boolean; }; } interface CustomComponentProps { closeFn: CloseFunction; } interface Styles { arrow: CSSProperties & { /** * The distance from the tip of the arrow to the edge of the Floater. */ base: number; /** * The width of the base of the arrow. */ size: number; }; close: CSSProperties; container: CSSProperties; content: CSSProperties; floater: CSSProperties; floaterCentered: CSSProperties; floaterClosing: CSSProperties; floaterOpening: CSSProperties; floaterWithAnimation: CSSProperties; floaterWithComponent: CSSProperties; footer: CSSProperties; options: { zIndex: number; }; title: CSSProperties; wrapper: CSSProperties; wrapperPosition: CSSProperties; } declare global { interface Window { ReactFloaterDebug?: boolean; } } //#endregion //#region src/index.d.ts declare function ReactFloater(props: Props): react_jsx_runtime0.JSX.Element | null; //#endregion export { type Action, type CustomComponentProps, type Placement, type PopperInstance, type Props, type Styles, ReactFloater as default }; //# sourceMappingURL=index.d.mts.map