import { IEventEmitter } from '@breadstone/mosaik-elements';
import { CssLength } from '@breadstone/mosaik-themes';
import { SplitLock } from '../../../Types/SplitLock';
import { CustomElement } from '../../Abstracts/CustomElement';
import type { ISplitRepositionEventDetail } from './Events/ISplitRepositionEventDetail';
import type { ISplitElementEvents } from './ISplitElementEvents';
import type { ISplitElementProps } from './ISplitElementProps';
import { ISlottable } from '../../../Behaviors/Slottable';
declare const SplitElement_base: (abstract new (...args: Array<any>) => import("../../../Behaviors/Themeable").IThemeableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Reversible").IReversibleProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Orientable").IOrientableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Disableable").IDisableableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Fitable").IFitableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Slottable").ISlottableProps & ISlottable) & typeof CustomElement & import("../../../Behaviors/Themeable").IThemeableCtor;
/**
 * Split - A layout component that creates a resizable split pane layout with a draggable divider.
 *
 * Enables users to dynamically resize two content areas separated by an interactive divider.
 * Supports both horizontal and vertical orientations, position locking, snapping, and keyboard navigation.
 *
 * @name SplitElement
 * @element mosaik-split
 * @category Layout
 *
 * @slot start - The primary content panel positioned at the beginning of the split
 * @slot end - The secondary content panel positioned at the end of the split
 * @slot thumb - Custom grip icon for the draggable divider (defaults to three dots icon)
 *
 * @csspart panel - The container for each split panel content
 * @csspart start - The start panel container
 * @csspart end - The end panel container
 * @csspart divider - The interactive draggable divider element
 * @csspart thumb - The visual grip icon within the divider
 *
 * @cssprop --split-min - Minimum size constraint for the primary panel (default: 0%)
 * @cssprop --split-max - Maximum size constraint for the primary panel (default: 100%)
 * @cssprop --split-divider-width - Width/height of the divider based on orientation
 *
 * @dependency IconElement - For the default thumb grip icon
 *
 * @example
 * ```html
 * <!-- Basic split layout -->
 * <mosaik-split position="30">
 *   <div slot="start">Left Panel</div>
 *   <div slot="end">Right Panel</div>
 * </mosaik-split>
 *
 * <!-- Vertical split with snapping -->
 * <mosaik-split orientation="vertical" snaps="25% 50% 75%">
 *   <div slot="start">Top Panel</div>
 *   <div slot="end">Bottom Panel</div>
 * </mosaik-split>
 *
 * <!-- Locked split with custom thickness -->
 * <mosaik-split lock="start" thickness="4" position="200px">
 *   <nav slot="start">Navigation</nav>
 *   <main slot="end">Content</main>
 * </mosaik-split>
 * ```
 *
 * @fires splitRepositioned - Fired when the split position changes via user interaction
 *
 * @public
 */
export declare class SplitElement extends SplitElement_base implements ISplitElementProps, ISplitElementEvents, ISlottable {
    private readonly _resizeController;
    private readonly _splitRepositioned;
    private _cachedPositionInPixels;
    private _size;
    private _position;
    private _positionInPixels;
    private _lock;
    private _snaps;
    private _snapThreshold;
    private _thickness;
    /**
     * Constructs a new instance of the `SplitElement` class.
     *
     * @public
     */
    constructor();
    /**
     * Returns the `{@link is}` property.
     * The `{@link is}` property represents natural name of this element.
     *
     * @public
     * @static
     * @readonly
     */
    static get is(): string;
    /**
     * Gets or sets the `position` property.
     *
     * @public
     * @attr
     */
    get position(): number;
    set position(value: number);
    /**
     * Gets or sets the `positionInPixels` property.
     *
     * @public
     * @attr
     */
    get positionInPixels(): number;
    set positionInPixels(value: number);
    /**
     * Gets or sets the `lock` property.
     *
     * @public
     * @attr
     */
    get lock(): SplitLock;
    set lock(value: SplitLock);
    /**
     * Gets or sets the `snap` property.
     * The `snap` is a space separated list of snap points.
     * When the split is dragged, it will snap to the nearest snap point.
     *
     * @public
     * @attr
     */
    get snaps(): Array<Exclude<CssLength, 'auto'>>;
    set snaps(value: Array<Exclude<CssLength, 'auto'>>);
    /**
     * Gets or sets the `snapThreshold` property.
     *
     * @public
     * @attr
     */
    get snapThreshold(): number;
    set snapThreshold(value: number);
    /**
     * Gets or sets the `thickness` property.
     *
     * @public
     * @attr
     */
    get thickness(): number;
    set thickness(value: number);
    /**
     * Gets or sets the `hasPanels` property.
     *
     * @public
     */
    get hasPanels(): boolean;
    /**
     * Called when the split is repositioned.
     * Provides reference to `{@link IEventDetail}` as event detail.
     *
     * @public
     * @readonly
     * @eventProperty
     */
    get splitRepositioned(): IEventEmitter<ISplitRepositionEventDetail>;
    /**
     * @public
     * @override
     */
    connectedCallback(): void;
    /**
     * @public
     * @override
     */
    disconnectedCallback(): void;
    /**
     * @public
     * @override
     */
    onSlotChanges(_slotName?: string): void;
    /**
     * @private
     */
    handleDrag(event: PointerEvent): void;
    /**
     * @private
     */
    handleKeyDown(event: KeyboardEvent): void;
    /**
     * Emits the {@link splitRepositioned} event.
     *
     * @protected
     */
    protected onSplitRepositioned(args: ISplitRepositionEventDetail): void;
    /**
     * @protected
     */
    protected onPositionPropertyChanged(_prev?: number, next?: number): void;
    /**
     * @protected
     */
    protected onPositionInPixelsPropertyChanged(_prev?: number, next?: number): void;
    /**
     * @protected
     */
    protected onOrientationPropertyChanged(_prev?: boolean, _next?: boolean): void;
    /**
     * @private
     */
    private detectSize;
    /**
     * @private
     */
    private percentageToPixels;
    /**
     * @private
     */
    private pixelsToPercentage;
    /**
     * @private
     */
    private handleResize;
    /**
     * @private
     */
    private drag;
}
/**
 * @public
 */
export declare namespace SplitElement {
    type Props = ISplitElementProps;
}
/**
 * @public
 */
declare global {
    interface HTMLElementTagNameMap {
        'mosaik-split': SplitElement;
    }
    interface HTMLElementEventMap {
        splitRepositioned: CustomEvent<ISplitRepositionEventDetail>;
    }
}
export {};
//# sourceMappingURL=SplitElement.d.ts.map