import { type ComponentPropsWithoutRef, type PropsWithChildren, type ReactElement, type ReactNode, type Ref } from 'react'; import { type PanelWidth } from './width-utils.js'; import type { AriaLabelingProps } from '../../core/types/a11y-props.js'; import type { BehaviorTrackingProps } from '../../core/types/behavior-tracking-props.js'; import type { DataTestId } from '../../core/types/data-props.js'; import type { MaskingProps } from '../../core/types/masking-props.js'; import type { StylingProps } from '../../core/types/styling-props.js'; /** @public */ export interface ResizablePanelProps extends PropsWithChildren, BehaviorTrackingProps, AriaLabelingProps, StylingProps, MaskingProps, DataTestId, Pick, 'id'> { /** The minimum width of the panel. Accepts a pixel value or a percentage string. */ minWidth?: PanelWidth; /** The maximum width of the panel. Accepts a pixel value or a percentage string. */ maxWidth?: PanelWidth; /** The initial width of the panel. Accepts a pixel value or a percentage string. */ defaultWidth?: PanelWidth; /** * Whether the panel width can be resized by dragging. * @defaultValue true */ resizable?: boolean; /** * The position of the panel relative to the content. * @defaultValue 'start' */ position?: 'start' | 'end'; /** Callback triggered when the panel is resized, with the new width in pixels. */ onResize?: (width: number) => void; /** Accessible name for the resize separator. Referenced by aria-label on the separator element. */ label?: string; } /** @public */ export declare const PanelSlot: (props: ResizablePanelProps & import("react").RefAttributes) => import("react").ReactElement | null; /** @public */ export interface ContentProps extends PropsWithChildren, BehaviorTrackingProps, AriaLabelingProps, StylingProps, MaskingProps, DataTestId { /** The minimum width of the content area. Accepts a pixel value or a percentage string. */ minWidth?: PanelWidth; } export declare const ContentSlot: (props: ContentProps & import("react").RefAttributes) => import("react").ReactElement | null; /** @internal */ export interface ResizeHandleProps extends PropsWithChildren, BehaviorTrackingProps, AriaLabelingProps, StylingProps, MaskingProps, DataTestId { } /** * Optional slot to render custom decorations inside the resize handle area. * * Note: The resize handle column is fixed to 8px to keep layout stable. * Content rendered here does not affect layout width; it may visually overflow. * * @internal */ export declare const ResizeHandleSlot: (props: ResizeHandleProps & import("react").RefAttributes) => import("react").ReactElement | null; export interface ExtractedPanelSlot { children?: ReactNode; config: { minWidth: PanelWidth; maxWidth: PanelWidth; defaultWidth: PanelWidth; position: 'start' | 'end'; resizable: boolean; onResize?: (width: number) => void; label?: string; }; domProps: ComponentPropsWithoutRef<'div'>; ref?: Ref; } export interface ExtractedContentSlot { children?: ReactNode; config: { minWidth: PanelWidth; }; domProps: ComponentPropsWithoutRef<'div'>; ref?: Ref; } export interface ExtractedResizeHandleSlot { children?: ReactNode; domProps: ComponentPropsWithoutRef<'div'>; ref?: Ref; } /** * Extracts only props and children from the slots, to ensure a stable slot component to render in the root */ export declare function extractSlotsProps(children: ReactNode): { panel: ExtractedPanelSlot; content: ExtractedContentSlot | null; resizeHandle: ExtractedResizeHandleSlot | null; };