Files
infocom-systems-design/node_modules/@floating-ui/react/dist/floating-ui.react.d.ts
2025-10-03 22:27:28 +03:00

1449 lines
48 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { AlignedPlacement } from '@floating-ui/react-dom';
import { Alignment } from '@floating-ui/react-dom';
import { arrow } from '@floating-ui/react-dom';
import { ArrowOptions } from '@floating-ui/react-dom';
import { autoPlacement } from '@floating-ui/react-dom';
import { AutoPlacementOptions } from '@floating-ui/react-dom';
import { autoUpdate } from '@floating-ui/react-dom';
import { AutoUpdateOptions } from '@floating-ui/react-dom';
import { Axis } from '@floating-ui/react-dom';
import { Boundary } from '@floating-ui/react-dom';
import { ClientRectObject } from '@floating-ui/react-dom';
import { computePosition } from '@floating-ui/react-dom';
import { ComputePositionConfig } from '@floating-ui/react-dom';
import { ComputePositionReturn } from '@floating-ui/react-dom';
import { Coords } from '@floating-ui/react-dom';
import { Derivable } from '@floating-ui/react-dom';
import { detectOverflow } from '@floating-ui/react-dom';
import { DetectOverflowOptions } from '@floating-ui/react-dom';
import { Dimensions } from '@floating-ui/react-dom';
import { ElementContext } from '@floating-ui/react-dom';
import { ElementRects } from '@floating-ui/react-dom';
import { Elements } from '@floating-ui/react-dom';
import { flip } from '@floating-ui/react-dom';
import { FlipOptions } from '@floating-ui/react-dom';
import { FloatingElement } from '@floating-ui/react-dom';
import { getOverflowAncestors } from '@floating-ui/react-dom';
import { hide } from '@floating-ui/react-dom';
import { HideOptions } from '@floating-ui/react-dom';
import { inline } from '@floating-ui/react-dom';
import { InlineOptions } from '@floating-ui/react-dom';
import { Length } from '@floating-ui/react-dom';
import { limitShift } from '@floating-ui/react-dom';
import { Middleware } from '@floating-ui/react-dom';
import { MiddlewareArguments } from '@floating-ui/react-dom';
import { MiddlewareData } from '@floating-ui/react-dom';
import { MiddlewareReturn } from '@floating-ui/react-dom';
import { MiddlewareState } from '@floating-ui/react-dom';
import { NodeScroll } from '@floating-ui/react-dom';
import { offset } from '@floating-ui/react-dom';
import { OffsetOptions } from '@floating-ui/react-dom';
import { Padding } from '@floating-ui/react-dom';
import { Placement } from '@floating-ui/react-dom';
import { Platform } from '@floating-ui/react-dom';
import { platform } from '@floating-ui/react-dom';
import * as React from 'react';
import { Rect } from '@floating-ui/react-dom';
import { ReferenceElement } from '@floating-ui/react-dom';
import { RootBoundary } from '@floating-ui/react-dom';
import { shift } from '@floating-ui/react-dom';
import { ShiftOptions } from '@floating-ui/react-dom';
import { Side } from '@floating-ui/react-dom';
import { SideObject } from '@floating-ui/react-dom';
import { size } from '@floating-ui/react-dom';
import { SizeOptions } from '@floating-ui/react-dom';
import { Strategy } from '@floating-ui/react-dom';
import type { UseFloatingOptions as UseFloatingOptions_2 } from '@floating-ui/react-dom';
import type { UseFloatingReturn as UseFloatingReturn_2 } from '@floating-ui/react-dom';
import { VirtualElement } from '@floating-ui/react-dom';
declare const ACTIVE_KEY = "active";
export { AlignedPlacement }
export { Alignment }
declare type AriaRole = 'tooltip' | 'dialog' | 'alertdialog' | 'menu' | 'listbox' | 'grid' | 'tree';
export { arrow }
export { ArrowOptions }
export { autoPlacement }
export { AutoPlacementOptions }
export { autoUpdate }
export { AutoUpdateOptions }
export { Axis }
export { Boundary }
export { ClientRectObject }
declare type ComponentRole = 'select' | 'label' | 'combobox';
/**
* Creates a single tab stop whose items are navigated by arrow keys, which
* provides list navigation outside of floating element contexts.
*
* This is useful to enable navigation of a list of items that arent part of a
* floating element. A menubar is an example of a composite, with each reference
* element being an item.
* @see https://floating-ui.com/docs/Composite
*/
export declare const Composite: React.ForwardRefExoticComponent<Omit<React.HTMLProps<HTMLElement> & CompositeProps, "ref"> & React.RefAttributes<HTMLElement>>;
/**
* @see https://floating-ui.com/docs/Composite
*/
export declare const CompositeItem: React.ForwardRefExoticComponent<Omit<React.HTMLProps<HTMLElement> & CompositeItemProps, "ref"> & React.RefAttributes<HTMLElement>>;
export declare interface CompositeItemProps {
/**
* Determines the element to render.
* @example
* ```jsx
* <CompositeItem render={<li />} />
* <CompositeItem render={(htmlProps) => <li {...htmlProps} />} />
* ```
*/
render?: RenderProp;
}
export declare interface CompositeProps {
/**
* Determines the element to render.
* @example
* ```jsx
* <Composite render={<ul />} />
* <Composite render={(htmlProps) => <ul {...htmlProps} />} />
* ```
*/
render?: RenderProp;
/**
* Determines the orientation of the composite.
*/
orientation?: 'horizontal' | 'vertical' | 'both';
/**
* Determines whether focus should loop around when navigating past the first
* or last item.
*/
loop?: boolean;
/**
* Whether the direction of the composites navigation is in RTL layout.
*/
rtl?: boolean;
/**
* Determines the number of columns there are in the composite
* (i.e. its a grid).
*/
cols?: number;
/**
* Determines which items are disabled. The `disabled` or `aria-disabled`
* attributes are used by default.
*/
disabledIndices?: number[] | ((index: number) => boolean);
/**
* Determines which item is active. Used to externally control the active
* item.
*/
activeIndex?: number;
/**
* Called when the user navigates to a new item. Used to externally control
* the active item.
*/
onNavigate?(index: number): void;
/**
* Only for `cols > 1`, specify sizes for grid items.
* `{ width: 2, height: 2 }` means an item is 2 columns wide and 2 rows tall.
*/
itemSizes?: Dimensions[];
/**
* Only relevant for `cols > 1` and items with different sizes, specify if
* the grid is dense (as defined in the CSS spec for grid-auto-flow).
*/
dense?: boolean;
}
export { computePosition }
export { ComputePositionConfig }
export { ComputePositionReturn }
export declare interface ContextData {
openEvent?: Event;
floatingContext?: FloatingContext;
/** @deprecated use `onTypingChange` prop in `useTypeahead` */
typing?: boolean;
[key: string]: any;
}
export { Coords }
declare type CSSStylesProperty = React.CSSProperties | ((params: {
side: Side;
placement: Placement;
}) => React.CSSProperties);
export declare type Delay = number | Partial<{
open: number;
close: number;
}>;
declare type Delay_2 = number | Partial<{
open: number;
close: number;
}>;
export { detectOverflow }
export { DetectOverflowOptions }
export { Dimensions }
declare type Duration = number | {
open?: number;
close?: number;
};
export { ElementContext }
export declare interface ElementProps {
reference?: React.HTMLProps<Element>;
floating?: React.HTMLProps<HTMLElement>;
item?: React.HTMLProps<HTMLElement> | ((props: ExtendedUserProps) => React.HTMLProps<HTMLElement>);
}
export { ElementRects }
export { Elements }
export declare interface ExtendedElements<RT> {
reference: ReferenceType | null;
floating: HTMLElement | null;
domReference: NarrowedElement<RT> | null;
}
export declare interface ExtendedRefs<RT> {
reference: React.MutableRefObject<ReferenceType | null>;
floating: React.MutableRefObject<HTMLElement | null>;
domReference: React.MutableRefObject<NarrowedElement<RT> | null>;
setReference(node: RT | null): void;
setFloating(node: HTMLElement | null): void;
setPositionReference(node: ReferenceType | null): void;
}
declare type ExtendedUserProps = {
[ACTIVE_KEY]?: boolean;
[SELECTED_KEY]?: boolean;
};
export { flip }
export { FlipOptions }
/**
* Renders a pointing arrow triangle.
* @see https://floating-ui.com/docs/FloatingArrow
*/
export declare const FloatingArrow: React.ForwardRefExoticComponent<Omit<FloatingArrowProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
export declare interface FloatingArrowProps extends React.ComponentPropsWithRef<'svg'> {
/**
* The floating context.
*/
context: Omit<FloatingContext, 'refs'> & {
refs: any;
};
/**
* Width of the arrow.
* @default 14
*/
width?: number;
/**
* Height of the arrow.
* @default 7
*/
height?: number;
/**
* The corner radius (rounding) of the arrow tip.
* @default 0 (sharp)
*/
tipRadius?: number;
/**
* Forces a static offset over dynamic positioning under a certain condition.
* If the shift() middleware causes the popover to shift, this value will be
* ignored.
*/
staticOffset?: string | number | null;
/**
* Custom path string.
*/
d?: string;
/**
* Stroke (border) color of the arrow.
*/
stroke?: string;
/**
* Stroke (border) width of the arrow.
*/
strokeWidth?: number;
}
export declare type FloatingContext<RT extends ReferenceType = ReferenceType> = Omit<UseFloatingReturn_2<RT>, 'refs' | 'elements'> & {
open: boolean;
onOpenChange(open: boolean, event?: Event, reason?: OpenChangeReason): void;
events: FloatingEvents;
dataRef: React.MutableRefObject<ContextData>;
nodeId: string | undefined;
floatingId: string | undefined;
refs: ExtendedRefs<RT>;
elements: ExtendedElements<RT>;
};
/**
* Provides context for a group of floating elements that should share a
* `delay`.
* @see https://floating-ui.com/docs/FloatingDelayGroup
*/
export declare function FloatingDelayGroup(props: FloatingDelayGroupProps): React.JSX.Element;
export declare interface FloatingDelayGroupProps {
children?: React.ReactNode;
/**
* The delay to use for the group.
*/
delay: Delay_2;
/**
* An optional explicit timeout to use for the group, which represents when
* grouping logic will no longer be active after the close delay completes.
* This is useful if you want grouping to “last” longer than the close delay,
* for example if there is no close delay at all.
*/
timeoutMs?: number;
}
export { FloatingElement }
export declare interface FloatingEvents {
emit<T extends string>(event: T, data?: any): void;
on(event: string, handler: (data: any) => void): void;
off(event: string, handler: (data: any) => void): void;
}
/**
* Provides focus management for the floating element.
* @see https://floating-ui.com/docs/FloatingFocusManager
*/
export declare function FloatingFocusManager(props: FloatingFocusManagerProps): React.JSX.Element;
export declare interface FloatingFocusManagerProps {
children: React.JSX.Element;
/**
* The floating context returned from `useFloatingRootContext`.
*/
context: FloatingRootContext;
/**
* Whether or not the focus manager should be disabled. Useful to delay focus
* management until after a transition completes or some other conditional
* state.
* @default false
*/
disabled?: boolean;
/**
* The order in which focus cycles.
* @default ['content']
*/
order?: Array<'reference' | 'floating' | 'content'>;
/**
* Which element to initially focus. Can be either a number (tabbable index as
* specified by the `order`) or a ref.
* @default 0
*/
initialFocus?: number | React.MutableRefObject<HTMLElement | null>;
/**
* Determines if the focus guards are rendered. If not, focus can escape into
* the address bar/console/browser UI, like in native dialogs.
* @default true
*/
guards?: boolean;
/**
* Determines if focus should be returned to the reference element once the
* floating element closes/unmounts (or if that is not available, the
* previously focused element). This prop is ignored if the floating element
* lost focus.
* It can be also set to a ref to explicitly control the element to return focus to.
* @default true
*/
returnFocus?: boolean | React.MutableRefObject<HTMLElement | null>;
/**
* Determines if focus should be restored to the nearest tabbable element if
* focus inside the floating element is lost (such as due to the removal of
* the currently focused element from the DOM).
* @default false
*/
restoreFocus?: boolean;
/**
* Determines if focus is “modal”, meaning focus is fully trapped inside the
* floating element and outside content cannot be accessed. This includes
* screen reader virtual cursors.
* @default true
*/
modal?: boolean;
/**
* If your focus management is modal and there is no explicit close button
* available, you can use this prop to render a visually-hidden dismiss
* button at the start and end of the floating element. This allows
* touch-based screen readers to escape the floating element due to lack of
* an `esc` key.
* @default undefined
*/
visuallyHiddenDismiss?: boolean | string;
/**
* Determines whether `focusout` event listeners that control whether the
* floating element should be closed if the focus moves outside of it are
* attached to the reference and floating elements. This affects non-modal
* focus management.
* @default true
*/
closeOnFocusOut?: boolean;
/**
* Determines whether outside elements are `inert` when `modal` is enabled.
* This enables pointer modality without a backdrop.
* @default false
*/
outsideElementsInert?: boolean;
/**
* Returns a list of elements that should be considered part of the
* floating element.
*/
getInsideElements?: () => Element[];
}
/**
* Provides context for a list of items within the floating element.
* @see https://floating-ui.com/docs/FloatingList
*/
export declare function FloatingList(props: FloatingListProps): React.JSX.Element;
declare interface FloatingListProps {
children: React.ReactNode;
/**
* A ref to the list of HTML elements, ordered by their index.
* `useListNavigation`'s `listRef` prop.
*/
elementsRef: React.MutableRefObject<Array<HTMLElement | null>>;
/**
* A ref to the list of element labels, ordered by their index.
* `useTypeahead`'s `listRef` prop.
*/
labelsRef?: React.MutableRefObject<Array<string | null>>;
}
/**
* Provides parent node context for nested floating elements.
* @see https://floating-ui.com/docs/FloatingTree
*/
export declare function FloatingNode(props: FloatingNodeProps): React.JSX.Element;
export declare interface FloatingNodeProps {
children?: React.ReactNode;
id: string | undefined;
}
export declare interface FloatingNodeType<RT extends ReferenceType = ReferenceType> {
id: string | undefined;
parentId: string | null;
context?: FloatingContext<RT>;
}
/**
* Provides base styling for a fixed overlay element to dim content or block
* pointer events behind a floating element.
* It's a regular `<div>`, so it can be styled via any CSS solution you prefer.
* @see https://floating-ui.com/docs/FloatingOverlay
*/
export declare const FloatingOverlay: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & FloatingOverlayProps & React.RefAttributes<HTMLDivElement>>;
export declare interface FloatingOverlayProps {
/**
* Whether the overlay should lock scrolling on the document body.
* @default false
*/
lockScroll?: boolean;
}
/**
* Portals the floating element into a given container element — by default,
* outside of the app root and into the body.
* This is necessary to ensure the floating element can appear outside any
* potential parent containers that cause clipping (such as `overflow: hidden`),
* while retaining its location in the React tree.
* @see https://floating-ui.com/docs/FloatingPortal
*/
export declare function FloatingPortal(props: FloatingPortalProps): React.JSX.Element;
export declare interface FloatingPortalProps {
children?: React.ReactNode;
/**
* Optionally selects the node with the id if it exists, or create it and
* append it to the specified `root` (by default `document.body`).
*/
id?: string;
/**
* Specifies the root node the portal container will be appended to.
*/
root?: HTMLElement | ShadowRoot | null | React.MutableRefObject<HTMLElement | ShadowRoot | null>;
/**
* When using non-modal focus management using `FloatingFocusManager`, this
* will preserve the tab order context based on the React tree instead of the
* DOM tree.
*/
preserveTabOrder?: boolean;
}
export declare interface FloatingRootContext<RT extends ReferenceType = ReferenceType> {
dataRef: React.MutableRefObject<ContextData>;
open: boolean;
onOpenChange: (open: boolean, event?: Event, reason?: OpenChangeReason) => void;
elements: {
domReference: Element | null;
reference: RT | null;
floating: HTMLElement | null;
};
events: FloatingEvents;
floatingId: string | undefined;
refs: {
setPositionReference(node: ReferenceType | null): void;
};
}
/**
* Provides context for nested floating elements when they are not children of
* each other on the DOM.
* This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:
* - The `bubbles` option in the `useDismiss()` Hook
* - Nested virtual list navigation
* - Nested floating elements that each open on hover
* - Custom communication between parent and child floating elements
* @see https://floating-ui.com/docs/FloatingTree
*/
export declare function FloatingTree(props: FloatingTreeProps): React.JSX.Element;
export declare interface FloatingTreeProps {
children?: React.ReactNode;
}
export declare interface FloatingTreeType<RT extends ReferenceType = ReferenceType> {
nodesRef: React.MutableRefObject<Array<FloatingNodeType<RT>>>;
events: FloatingEvents;
addNode(node: FloatingNodeType): void;
removeNode(node: FloatingNodeType): void;
}
export { getOverflowAncestors }
declare interface GroupContext extends GroupState {
setCurrentId: React.Dispatch<React.SetStateAction<any>>;
setState: React.Dispatch<Partial<GroupState>>;
}
declare interface GroupState {
delay: Delay_2;
initialDelay: Delay_2;
currentId: any;
timeoutMs: number;
isInstantPhase: boolean;
}
export declare interface HandleClose {
(context: HandleCloseContext): (event: MouseEvent) => void;
__options?: SafePolygonOptions;
}
export declare interface HandleCloseContext extends FloatingContext {
onClose: () => void;
tree?: FloatingTreeType | null;
leave?: boolean;
}
export { hide }
export { HideOptions }
export { inline }
export { InlineOptions }
/**
* Positions the floating element such that an inner element inside of it is
* anchored to the reference element.
* @see https://floating-ui.com/docs/inner
* @deprecated
*/
export declare const inner: (props: InnerProps | Derivable<InnerProps>) => Middleware;
export declare interface InnerProps extends DetectOverflowOptions {
/**
* A ref which contains an array of HTML elements.
* @default empty list
*/
listRef: React.MutableRefObject<Array<HTMLElement | null>>;
/**
* The index of the active (focused or highlighted) item in the list.
* @default 0
*/
index: number;
/**
* Callback invoked when the fallback state changes.
*/
onFallbackChange?: null | ((fallback: boolean) => void);
/**
* The offset to apply to the floating element.
* @default 0
*/
offset?: number;
/**
* A ref which contains the overflow of the floating element.
*/
overflowRef?: React.MutableRefObject<SideObject | null>;
/**
* An optional ref containing an HTMLElement. This may be used as the
* scrolling container instead of the floating element — for instance,
* to position inner elements as direct children without being interfered by
* scrolling layout.
*/
scrollRef?: React.MutableRefObject<HTMLElement | null>;
/**
* The minimum number of items that should be visible in the list.
* @default 4
*/
minItemsVisible?: number;
/**
* The threshold for the reference element's overflow in pixels.
* @default 0
*/
referenceOverflowThreshold?: number;
}
export { Length }
export { limitShift }
export { Middleware }
export { MiddlewareArguments }
export { MiddlewareData }
export { MiddlewareReturn }
export { MiddlewareState }
export declare type NarrowedElement<T> = T extends Element ? T : Element;
/**
* Experimental next version of `FloatingDelayGroup` to become the default
* in the future. This component is not yet stable.
* Provides context for a group of floating elements that should share a
* `delay`. Unlike `FloatingDelayGroup`, `useNextDelayGroup` with this
* component does not cause a re-render of unrelated consumers of the
* context when the delay changes.
* @see https://floating-ui.com/docs/FloatingDelayGroup
*/
export declare function NextFloatingDelayGroup(props: NextFloatingDelayGroupProps): React.JSX.Element;
export declare interface NextFloatingDelayGroupProps {
children?: React.ReactNode;
/**
* The delay to use for the group when it's not in the instant phase.
*/
delay: Delay;
/**
* An optional explicit timeout to use for the group, which represents when
* grouping logic will no longer be active after the close delay completes.
* This is useful if you want grouping to “last” longer than the close delay,
* for example if there is no close delay at all.
*/
timeoutMs?: number;
}
export { NodeScroll }
export { offset }
export { OffsetOptions }
export declare type OpenChangeReason = 'outside-press' | 'escape-key' | 'ancestor-scroll' | 'reference-press' | 'click' | 'hover' | 'focus' | 'focus-out' | 'list-navigation' | 'safe-polygon';
export { Padding }
export { Placement }
export { Platform }
export { platform }
declare type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
export { Rect }
export { ReferenceElement }
export declare type ReferenceType = Element | VirtualElement;
declare type RenderProp = React.JSX.Element | ((props: React.HTMLAttributes<HTMLElement>) => React.JSX.Element);
export { RootBoundary }
/**
* Generates a safe polygon area that the user can traverse without closing the
* floating element once leaving the reference element.
* @see https://floating-ui.com/docs/useHover#safepolygon
*/
export declare function safePolygon(options?: SafePolygonOptions): HandleClose;
export declare interface SafePolygonOptions {
buffer?: number;
blockPointerEvents?: boolean;
requireIntent?: boolean;
}
declare const SELECTED_KEY = "selected";
export { shift }
export { ShiftOptions }
export { Side }
export { SideObject }
export { size }
export { SizeOptions }
export { Strategy }
declare type TransitionStatus = 'unmounted' | 'initial' | 'open' | 'close';
/**
* Opens or closes the floating element when clicking the reference element.
* @see https://floating-ui.com/docs/useClick
*/
export declare function useClick(context: FloatingRootContext, props?: UseClickProps): ElementProps;
export declare interface UseClickProps {
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* The type of event to use to determine a “click” with mouse input.
* Keyboard clicks work as normal.
* @default 'click'
*/
event?: 'click' | 'mousedown';
/**
* Whether to toggle the open state with repeated clicks.
* @default true
*/
toggle?: boolean;
/**
* Whether to ignore the logic for mouse input (for example, if `useHover()`
* is also being used).
* @default false
*/
ignoreMouse?: boolean;
/**
* Whether to add keyboard handlers (Enter and Space key functionality) for
* non-button elements (to open/close the floating element via keyboard
* “click”).
* @default true
*/
keyboardHandlers?: boolean;
/**
* If already open from another event such as the `useHover()` Hook,
* determines whether to keep the floating element open when clicking the
* reference element for the first time.
* @default true
*/
stickIfOpen?: boolean;
}
/**
* Positions the floating element relative to a client point (in the viewport),
* such as the mouse position. By default, it follows the mouse cursor.
* @see https://floating-ui.com/docs/useClientPoint
*/
export declare function useClientPoint(context: FloatingRootContext, props?: UseClientPointProps): ElementProps;
export declare interface UseClientPointProps {
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* Whether to restrict the client point to an axis and use the reference
* element (if it exists) as the other axis. This can be useful if the
* floating element is also interactive.
* @default 'both'
*/
axis?: 'x' | 'y' | 'both';
/**
* An explicitly defined `x` client coordinate.
* @default null
*/
x?: number | null;
/**
* An explicitly defined `y` client coordinate.
* @default null
*/
y?: number | null;
}
/**
* Enables grouping when called inside a component that's a child of a
* `FloatingDelayGroup`.
* @see https://floating-ui.com/docs/FloatingDelayGroup
*/
export declare function useDelayGroup(context: FloatingRootContext, options?: UseGroupOptions): GroupContext;
/**
* @deprecated
* Use the return value of `useDelayGroup()` instead.
*/
export declare const useDelayGroupContext: () => GroupContext;
/**
* Closes the floating element when a dismissal is requested — by default, when
* the user presses the `escape` key or outside of the floating element.
* @see https://floating-ui.com/docs/useDismiss
*/
export declare function useDismiss(context: FloatingRootContext, props?: UseDismissProps): ElementProps;
export declare interface UseDismissProps {
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* Whether to dismiss the floating element upon pressing the `esc` key.
* @default true
*/
escapeKey?: boolean;
/**
* Whether to dismiss the floating element upon pressing the reference
* element. You likely want to ensure the `move` option in the `useHover()`
* Hook has been disabled when this is in use.
* @default false
*/
referencePress?: boolean;
/**
* The type of event to use to determine a “press”.
* - `pointerdown` is eager on both mouse + touch input.
* - `mousedown` is eager on mouse input, but lazy on touch input.
* - `click` is lazy on both mouse + touch input.
* @default 'pointerdown'
*/
referencePressEvent?: 'pointerdown' | 'mousedown' | 'click';
/**
* Whether to dismiss the floating element upon pressing outside of the
* floating element.
* If you have another element, like a toast, that is rendered outside the
* floating elements React tree and dont want the floating element to close
* when pressing it, you can guard the check like so:
* ```jsx
* useDismiss(context, {
* outsidePress: (event) => !event.target.closest('.toast'),
* });
* ```
* @default true
*/
outsidePress?: boolean | ((event: MouseEvent) => boolean);
/**
* The type of event to use to determine an outside “press”.
* - `pointerdown` is eager on both mouse + touch input.
* - `mousedown` is eager on mouse input, but lazy on touch input.
* - `click` is lazy on both mouse + touch input.
* @default 'pointerdown'
*/
outsidePressEvent?: 'pointerdown' | 'mousedown' | 'click';
/**
* Whether to dismiss the floating element upon scrolling an overflow
* ancestor.
* @default false
*/
ancestorScroll?: boolean;
/**
* Determines whether event listeners bubble upwards through a tree of
* floating elements.
*/
bubbles?: boolean | {
escapeKey?: boolean;
outsidePress?: boolean;
};
/**
* Determines whether to use capture phase event listeners.
*/
capture?: boolean | {
escapeKey?: boolean;
outsidePress?: boolean;
};
}
/**
* Provides data to position a floating element and context to add interactions.
* @see https://floating-ui.com/docs/useFloating
*/
export declare function useFloating<RT extends ReferenceType = ReferenceType>(options?: UseFloatingOptions): UseFloatingReturn<RT>;
export declare type UseFloatingData = Prettify<UseFloatingReturn>;
/**
* Registers a node into the `FloatingTree`, returning its id.
* @see https://floating-ui.com/docs/FloatingTree
*/
export declare function useFloatingNodeId(customParentId?: string): string | undefined;
export declare interface UseFloatingOptions<RT extends ReferenceType = ReferenceType> extends Omit<UseFloatingOptions_2<RT>, 'elements'> {
rootContext?: FloatingRootContext<RT>;
/**
* Object of external elements as an alternative to the `refs` object setters.
*/
elements?: {
/**
* Externally passed reference element. Store in state.
*/
reference?: Element | null;
/**
* Externally passed floating element. Store in state.
*/
floating?: HTMLElement | null;
};
/**
* An event callback that is invoked when the floating element is opened or
* closed.
*/
onOpenChange?(open: boolean, event?: Event, reason?: OpenChangeReason): void;
/**
* Unique node id when using `FloatingTree`.
*/
nodeId?: string;
}
/**
* Returns the parent node id for nested floating elements, if available.
* Returns `null` for top-level floating elements.
*/
export declare const useFloatingParentNodeId: () => string | null;
/**
* @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode
*/
export declare function useFloatingPortalNode(props?: UseFloatingPortalNodeProps): HTMLElement | null;
export declare interface UseFloatingPortalNodeProps {
id?: string;
root?: HTMLElement | ShadowRoot | null | React.MutableRefObject<HTMLElement | ShadowRoot | null>;
}
export declare type UseFloatingReturn<RT extends ReferenceType = ReferenceType> = Prettify<UseFloatingReturn_2 & {
/**
* `FloatingContext`
*/
context: Prettify<FloatingContext<RT>>;
/**
* Object containing the reference and floating refs and reactive setters.
*/
refs: ExtendedRefs<RT>;
elements: ExtendedElements<RT>;
}>;
export declare function useFloatingRootContext(options: UseFloatingRootContextOptions): FloatingRootContext;
export declare interface UseFloatingRootContextOptions {
open?: boolean;
onOpenChange?: (open: boolean, event?: Event, reason?: OpenChangeReason) => void;
elements: {
reference: Element | null;
floating: HTMLElement | null;
};
}
/**
* Returns the nearest floating tree context, if available.
*/
export declare const useFloatingTree: <RT extends ReferenceType = ReferenceType>() => FloatingTreeType<RT> | null;
/**
* Opens the floating element while the reference element has focus, like CSS
* `:focus`.
* @see https://floating-ui.com/docs/useFocus
*/
export declare function useFocus(context: FloatingRootContext, props?: UseFocusProps): ElementProps;
export declare interface UseFocusProps {
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* Whether the open state only changes if the focus event is considered
* visible (`:focus-visible` CSS selector).
* @default true
*/
visibleOnly?: boolean;
}
declare interface UseGroupOptions {
/**
* Whether delay grouping should be enabled.
* @default true
*/
enabled?: boolean;
id?: any;
}
/**
* Opens the floating element while hovering over the reference element, like
* CSS `:hover`.
* @see https://floating-ui.com/docs/useHover
*/
export declare function useHover(context: FloatingRootContext, props?: UseHoverProps): ElementProps;
export declare interface UseHoverProps {
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* Accepts an event handler that runs on `mousemove` to control when the
* floating element closes once the cursor leaves the reference element.
* @default null
*/
handleClose?: HandleClose | null;
/**
* Waits until the users cursor is at “rest” over the reference element
* before changing the `open` state.
* @default 0
*/
restMs?: number | (() => number);
/**
* Waits for the specified time when the event listener runs before changing
* the `open` state.
* @default 0
*/
delay?: Delay | (() => Delay);
/**
* Whether the logic only runs for mouse input, ignoring touch input.
* Note: due to a bug with Linux Chrome, "pen" inputs are considered "mouse".
* @default false
*/
mouseOnly?: boolean;
/**
* Whether moving the cursor over the floating element will open it, without a
* regular hover event required.
* @default true
*/
move?: boolean;
}
/**
* Uses React 18's built-in `useId()` when available, or falls back to a
* slightly less performant (requiring a double render) implementation for
* earlier React versions.
* @see https://floating-ui.com/docs/react-utils#useid
*/
export declare const useId: () => string | undefined;
/**
* Changes the `inner` middleware's `offset` upon a `wheel` event to
* expand the floating element's height, revealing more list items.
* @see https://floating-ui.com/docs/inner
* @deprecated
*/
export declare function useInnerOffset(context: FloatingRootContext, props: UseInnerOffsetProps): ElementProps;
export declare interface UseInnerOffsetProps {
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* A ref which contains the overflow of the floating element.
*/
overflowRef: React.MutableRefObject<SideObject | null>;
/**
* An optional ref containing an HTMLElement. This may be used as the
* scrolling container instead of the floating element — for instance,
* to position inner elements as direct children without being interfered by
* scrolling layout.
*/
scrollRef?: React.MutableRefObject<HTMLElement | null>;
/**
* Callback invoked when the offset changes.
*/
onChange: (offset: number | ((offset: number) => number)) => void;
}
/**
* Merges an array of interaction hooks' props into prop getters, allowing
* event handler functions to be composed together without overwriting one
* another.
* @see https://floating-ui.com/docs/useInteractions
*/
export declare function useInteractions(propsList?: Array<ElementProps | void>): UseInteractionsReturn;
export declare interface UseInteractionsReturn {
getReferenceProps: (userProps?: React.HTMLProps<Element>) => Record<string, unknown>;
getFloatingProps: (userProps?: React.HTMLProps<HTMLElement>) => Record<string, unknown>;
getItemProps: (userProps?: Omit<React.HTMLProps<HTMLElement>, 'selected' | 'active'> & ExtendedUserProps) => Record<string, unknown>;
}
/**
* Used to register a list item and its index (DOM position) in the
* `FloatingList`.
* @see https://floating-ui.com/docs/FloatingList#uselistitem
*/
export declare function useListItem(props?: UseListItemProps): {
ref: (node: HTMLElement | null) => void;
index: number;
};
declare interface UseListItemProps {
label?: string | null;
}
/**
* Adds arrow key-based navigation of a list of items, either using real DOM
* focus or virtual focus.
* @see https://floating-ui.com/docs/useListNavigation
*/
export declare function useListNavigation(context: FloatingRootContext, props: UseListNavigationProps): ElementProps;
export declare interface UseListNavigationProps {
/**
* A ref that holds an array of list items.
* @default empty list
*/
listRef: React.MutableRefObject<Array<HTMLElement | null>>;
/**
* The index of the currently active (focused or highlighted) item, which may
* or may not be selected.
* @default null
*/
activeIndex: number | null;
/**
* A callback that is called when the user navigates to a new active item,
* passed in a new `activeIndex`.
*/
onNavigate?: (activeIndex: number | null) => void;
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* The currently selected item index, which may or may not be active.
* @default null
*/
selectedIndex?: number | null;
/**
* Whether to focus the item upon opening the floating element. 'auto' infers
* what to do based on the input type (keyboard vs. pointer), while a boolean
* value will force the value.
* @default 'auto'
*/
focusItemOnOpen?: boolean | 'auto';
/**
* Whether hovering an item synchronizes the focus.
* @default true
*/
focusItemOnHover?: boolean;
/**
* Whether pressing an arrow key on the navigations main axis opens the
* floating element.
* @default true
*/
openOnArrowKeyDown?: boolean;
/**
* By default elements with either a `disabled` or `aria-disabled` attribute
* are skipped in the list navigation — however, this requires the items to
* be rendered.
* This prop allows you to manually specify indices which should be disabled,
* overriding the default logic.
* For Windows-style select menus, where the menu does not open when
* navigating via arrow keys, specify an empty array.
* @default undefined
*/
disabledIndices?: Array<number> | ((index: number) => boolean);
/**
* Determines whether focus can escape the list, such that nothing is selected
* after navigating beyond the boundary of the list. In some
* autocomplete/combobox components, this may be desired, as screen
* readers will return to the input.
* `loop` must be `true`.
* @default false
*/
allowEscape?: boolean;
/**
* Determines whether focus should loop around when navigating past the first
* or last item.
* @default false
*/
loop?: boolean;
/**
* If the list is nested within another one (e.g. a nested submenu), the
* navigation semantics change.
* @default false
*/
nested?: boolean;
/**
* Allows to specify the orientation of the parent list, which is used to
* determine the direction of the navigation.
* This is useful when list navigation is used within a Composite,
* as the hook can't determine the orientation of the parent list automatically.
*/
parentOrientation?: UseListNavigationProps['orientation'];
/**
* Whether the direction of the floating elements navigation is in RTL
* layout.
* @default false
*/
rtl?: boolean;
/**
* Whether the focus is virtual (using `aria-activedescendant`).
* Use this if you need focus to remain on the reference element
* (such as an input), but allow arrow keys to navigate list items.
* This is common in autocomplete listbox components.
* Your virtually-focused list items must have a unique `id` set on them.
* If youre using a component role with the `useRole()` Hook, then an `id` is
* generated automatically.
* @default false
*/
virtual?: boolean;
/**
* The orientation in which navigation occurs.
* @default 'vertical'
*/
orientation?: 'vertical' | 'horizontal' | 'both';
/**
* Specifies how many columns the list has (i.e., its a grid). Use an
* orientation of 'horizontal' (e.g. for an emoji picker/date picker, where
* pressing ArrowRight or ArrowLeft can change rows), or 'both' (where the
* current row cannot be escaped with ArrowRight or ArrowLeft, only ArrowUp
* and ArrowDown).
* @default 1
*/
cols?: number;
/**
* Whether to scroll the active item into view when navigating. The default
* value uses nearest options.
*/
scrollItemIntoView?: boolean | ScrollIntoViewOptions;
/**
* When using virtual focus management, this holds a ref to the
* virtually-focused item. This allows nested virtual navigation to be
* enabled, and lets you know when a nested element is virtually focused from
* the root reference handling the events. Requires `FloatingTree` to be
* setup.
*/
virtualItemRef?: React.MutableRefObject<HTMLElement | null>;
/**
* Only for `cols > 1`, specify sizes for grid items.
* `{ width: 2, height: 2 }` means an item is 2 columns wide and 2 rows tall.
*/
itemSizes?: Dimensions[];
/**
* Only relevant for `cols > 1` and items with different sizes, specify if
* the grid is dense (as defined in the CSS spec for `grid-auto-flow`).
* @default false
*/
dense?: boolean;
}
/**
* Merges an array of refs into a single memoized callback ref or `null`.
* @see https://floating-ui.com/docs/react-utils#usemergerefs
*/
export declare function useMergeRefs<Instance>(refs: Array<React.Ref<Instance> | undefined>): null | React.RefCallback<Instance>;
/**
* Enables grouping when called inside a component that's a child of a
* `NextFloatingDelayGroup`.
* @see https://floating-ui.com/docs/FloatingDelayGroup
*/
export declare function useNextDelayGroup(context: FloatingRootContext, options?: UseNextDelayGroupOptions): UseNextDelayGroupReturn;
declare interface UseNextDelayGroupOptions {
/**
* Whether delay grouping should be enabled.
* @default true
*/
enabled?: boolean;
}
declare interface UseNextDelayGroupReturn {
/**
* The delay reference object.
*/
delayRef: React.MutableRefObject<Delay>;
/**
* Whether animations should be removed.
*/
isInstantPhase: boolean;
/**
* Whether a `<NextFloatingDelayGroup>` provider is present.
*/
hasProvider: boolean;
}
/**
* Adds base screen reader props to the reference and floating elements for a
* given floating element `role`.
* @see https://floating-ui.com/docs/useRole
*/
export declare function useRole(context: FloatingRootContext, props?: UseRoleProps): ElementProps;
export declare interface UseRoleProps {
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* The role of the floating element.
* @default 'dialog'
*/
role?: AriaRole | ComponentRole;
}
/**
* Provides a status string to apply CSS transitions to a floating element,
* correctly handling placement-aware transitions.
* @see https://floating-ui.com/docs/useTransition#usetransitionstatus
*/
export declare function useTransitionStatus(context: FloatingContext, props?: UseTransitionStatusProps): {
isMounted: boolean;
status: TransitionStatus;
};
export declare interface UseTransitionStatusProps {
/**
* The duration of the transition in milliseconds, or an object containing
* `open` and `close` keys for different durations.
*/
duration?: Duration;
}
/**
* Provides styles to apply CSS transitions to a floating element, correctly
* handling placement-aware transitions. Wrapper around `useTransitionStatus`.
* @see https://floating-ui.com/docs/useTransition#usetransitionstyles
*/
export declare function useTransitionStyles<RT extends ReferenceType = ReferenceType>(context: FloatingContext<RT>, props?: UseTransitionStylesProps): {
isMounted: boolean;
styles: React.CSSProperties;
};
export declare interface UseTransitionStylesProps extends UseTransitionStatusProps {
/**
* The styles to apply when the floating element is initially mounted.
*/
initial?: CSSStylesProperty;
/**
* The styles to apply when the floating element is transitioning to the
* `open` state.
*/
open?: CSSStylesProperty;
/**
* The styles to apply when the floating element is transitioning to the
* `close` state.
*/
close?: CSSStylesProperty;
/**
* The styles to apply to all states.
*/
common?: CSSStylesProperty;
}
/**
* Provides a matching callback that can be used to focus an item as the user
* types, often used in tandem with `useListNavigation()`.
* @see https://floating-ui.com/docs/useTypeahead
*/
export declare function useTypeahead(context: FloatingRootContext, props: UseTypeaheadProps): ElementProps;
export declare interface UseTypeaheadProps {
/**
* A ref which contains an array of strings whose indices match the HTML
* elements of the list.
* @default empty list
*/
listRef: React.MutableRefObject<Array<string | null>>;
/**
* The index of the active (focused or highlighted) item in the list.
* @default null
*/
activeIndex: number | null;
/**
* Callback invoked with the matching index if found as the user types.
*/
onMatch?: (index: number) => void;
/**
* Callback invoked with the typing state as the user types.
*/
onTypingChange?: (isTyping: boolean) => void;
/**
* Whether the Hook is enabled, including all internal Effects and event
* handlers.
* @default true
*/
enabled?: boolean;
/**
* A function that returns the matching string from the list.
* @default lowercase-finder
*/
findMatch?: null | ((list: Array<string | null>, typedString: string) => string | null | undefined);
/**
* The number of milliseconds to wait before resetting the typed string.
* @default 750
*/
resetMs?: number;
/**
* An array of keys to ignore when typing.
* @default []
*/
ignoreKeys?: Array<string>;
/**
* The index of the selected item in the list, if available.
* @default null
*/
selectedIndex?: number | null;
}
export { VirtualElement }
export { }