import { FC, PropsWithChildren, RefCallback, RefObject, ReactElement } from 'react';

interface ScrollSyncProps {
    /**
     * Whether scroll synchronization is enabled.
     * @default true
     */
    enabled?: boolean;
    /**
     * Enable horizontal scroll synchronization.
     * @default true
     */
    horizontal?: boolean;
    /**
     * Callback fired after panes are synchronized.
     * Receives the scrolled HTMLElement as an argument.
     */
    onSync?: (el: HTMLElement) => void;
    /**
     * Whether to synchronize scroll positions proportionally.
     * If false, uses absolute scroll values.
     * @default true
     */
    proportional?: boolean;
    /**
     * Enable vertical scroll synchronization.
     * @default true
     */
    vertical?: boolean;
}
declare const ScrollSync: FC<PropsWithChildren<ScrollSyncProps>>;

interface ScrollSyncPaneProps {
    /**
     * Optionally attach scroll sync to an external HTMLElement ref or callback.
     * If provided, the pane will sync scroll with this element instead of the child.
     */
    attachTo?: RefCallback<HTMLElement> | RefObject<HTMLElement>;
    /**
     * The scrollable child element to be synchronized.
     */
    children: ReactElement<any>;
    /**
     * Whether scroll synchronization is enabled for this pane.
     * @default true
     */
    enabled?: boolean;
    /**
     * Group or groups this pane belongs to for scroll synchronization.
     * Panes in the same group will sync scroll positions.
     * @default 'default'
     */
    group?: string | string[];
    /**
     * Ref or callback to access the underlying HTMLElement of the pane.
     */
    innerRef?: RefCallback<HTMLElement> | RefObject<HTMLElement>;
}
declare const ScrollSyncPane: FC<ScrollSyncPaneProps>;

export { ScrollSync, ScrollSyncPane, type ScrollSyncPaneProps, type ScrollSyncProps };
