// This file is auto-generated by "@aria-ui/cli". Do not edit this file directly. import { registerPopoverPositionerElement, type PopoverPositionerElement, type PopoverPositionerProps as PopoverPositionerElementProps } from '@prosekit/web/popover'; import { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react'; /** Props for the {@link PopoverPositioner} React component. */ export interface PopoverPositionerProps { /** * The strategy to use for positioning * * @default "absolute" */ strategy?: PopoverPositionerElementProps['strategy']; /** * The initial placement of the floating element * * @default "top" */ placement?: PopoverPositionerElementProps['placement']; /** * Options to activate auto-update listeners * * @see https://floating-ui.com/docs/autoUpdate * * @default true */ autoUpdate?: PopoverPositionerElementProps['autoUpdate']; /** * Whether to use the browser Popover API to place the floating element on * top of other page content. * * @default true */ hoist?: PopoverPositionerElementProps['hoist']; /** * The distance between the reference and floating element. * * @default 6 */ offset?: PopoverPositionerElementProps['offset']; /** * Whether to flip the `placement` in order to keep it in view when the * preferred placement(s) will overflow the clipping boundary. You can also * provide an array of placements to try sequentially if the preferred * `placement` does not fit. * * @default true */ flip?: PopoverPositionerElementProps['flip']; /** * Whether the floating element should shift to keep it in view. * * @default true */ shift?: PopoverPositionerElementProps['shift']; /** * Whether the floating element can overlap the reference element to keep it * in view. * * @default false */ overlap?: PopoverPositionerElementProps['overlap']; /** * Whether to constrain the floating element's width and height to not exceed * the viewport. * * @default false */ fitViewport?: PopoverPositionerElementProps['fitViewport']; /** * Whether to constrain the floating element's width so that it matches the * reference element. * * @default false */ sameWidth?: PopoverPositionerElementProps['sameWidth']; /** * Whether to constrain the floating element's height so that it matches the * reference element. * * @default false */ sameHeight?: PopoverPositionerElementProps['sameHeight']; /** * Whether to improve positioning for inline reference elements that span over * multiple lines. * * @default false */ inline?: PopoverPositionerElementProps['inline']; /** * Whether to hide the floating element when the reference element or the * floating element is fully clipped. * * @default false */ hide?: PopoverPositionerElementProps['hide']; /** * Describes the clipping element(s) or area that overflow will be checked relative to. * Please see https://floating-ui.com/docs/detectoverflow#boundary for more information. * * @default 'clippingAncestors' */ boundary?: PopoverPositionerElementProps['boundary']; /** * Describes the root boundary that the element will be checked for overflow relative to. * Please see https://floating-ui.com/docs/detectoverflow#rootboundary for more information. * * @default 'viewport' */ rootBoundary?: PopoverPositionerElementProps['rootBoundary']; /** * Describes the virtual padding around the boundary to check for overflow. * Please see https://floating-ui.com/docs/detectoverflow#padding for more information. * * @default 4 */ overflowPadding?: PopoverPositionerElementProps['overflowPadding']; /** * The element that will be used to check for overflow. Please see * https://floating-ui.com/docs/detectoverflow#elementcontext for more * information. * * @default 'floating' */ elementContext?: PopoverPositionerElementProps['elementContext']; /** * Whether to check the alternate elementContext's boundary. Please see * https://floating-ui.com/docs/detectoverflow#altboundary for more * information. * * @default false */ altBoundary?: PopoverPositionerElementProps['altBoundary']; } function PopoverPositionerComponent(props: PopoverPositionerProps, forwardedRef: ForwardedRef) { registerPopoverPositionerElement(); const elementRef = useRef(null); const { altBoundary: p0, autoUpdate: p1, boundary: p2, elementContext: p3, fitViewport: p4, flip: p5, hide: p6, hoist: p7, inline: p8, offset: p9, overflowPadding: p10, overlap: p11, placement: p12, rootBoundary: p13, sameHeight: p14, sameWidth: p15, shift: p16, strategy: p17, ...restProps } = props; useLayoutEffect(() => { const element = elementRef.current as Record | null; if (!element) return; Object.assign(element, { altBoundary: p0, autoUpdate: p1, boundary: p2, elementContext: p3, fitViewport: p4, flip: p5, hide: p6, hoist: p7, inline: p8, offset: p9, overflowPadding: p10, overlap: p11, placement: p12, rootBoundary: p13, sameHeight: p14, sameWidth: p15, shift: p16, strategy: p17 }); }); const mergedRef = useCallback( (element: PopoverPositionerElement | null) => { elementRef.current = element; if (typeof forwardedRef === 'function') { forwardedRef(element); } else if (forwardedRef) { forwardedRef.current = element; } }, [forwardedRef], ); return createElement('prosekit-popover-positioner', { ...restProps, ref: mergedRef, suppressHydrationWarning: true }); } /** A React component that renders an `prosekit-popover-positioner` custom element. */ export const PopoverPositioner: ForwardRefExoticComponent & RefAttributes> = /* @__PURE__ */ forwardRef(PopoverPositionerComponent);