import { type IconProps } from '@primer/octicons-react';
import React, { type JSX } from 'react';
import type { AnchoredOverlayProps } from '../AnchoredOverlay';
import type { AnchoredOverlayWrapperAnchorProps } from '../AnchoredOverlay/AnchoredOverlay';
import type { FilteredActionListProps } from '../FilteredActionList';
import type { OverlayProps } from '../Overlay';
import type { ItemInput } from './';
import type { ButtonProps, LinkButtonProps } from '../Button/types';
interface SelectPanelSingleSelection {
    selected: ItemInput | undefined;
    onSelectedChange: (selected: ItemInput | undefined) => void;
}
interface SelectPanelMultiSelection {
    selected: ItemInput[];
    onSelectedChange: (selected: ItemInput[]) => void;
}
export type InitialLoadingType = 'spinner' | 'skeleton';
export type SelectPanelSecondaryAction = React.ReactElement<typeof SecondaryButton> | React.ReactElement<typeof SecondaryLink>;
interface SelectPanelBaseProps {
    title?: string | React.ReactElement<any>;
    subtitle?: string | React.ReactElement<any>;
    onOpenChange: (open: boolean, gesture: 'anchor-click' | 'anchor-key-press' | 'click-outside' | 'escape' | 'selection' | 'cancel') => void;
    secondaryAction?: SelectPanelSecondaryAction;
    placeholder?: string;
    inputLabel?: string;
    overlayProps?: Partial<OverlayProps>;
    initialLoadingType?: InitialLoadingType;
    className?: string;
    notice?: {
        text: string | React.ReactElement<any>;
        variant: 'info' | 'warning' | 'error';
    };
    message?: {
        title: string;
        body: string | React.ReactElement<any>;
        variant: 'empty' | 'error' | 'warning';
        icon?: React.ComponentType<IconProps>;
        action?: React.ReactElement<any>;
    };
    /**
     * @deprecated Use `secondaryAction` instead.
     */
    footer?: string | React.ReactElement<any>;
    showSelectedOptionsFirst?: boolean;
    /**
     * Whether to disable fullscreen behavior on narrow viewports.
     * When `true`, the panel will maintain its anchored position regardless of viewport size.
     * When `false`, the panel will go fullscreen on narrow viewports (if feature flag is enabled).
     * @default undefined (uses feature flag default)
     */
    disableFullscreenOnNarrow?: boolean;
    showSelectAll?: boolean;
    /**
     * Set to true to allow focus to move to elements that are dynamically prepended to the container.
     * Default is false.
     */
    focusPrependedElements?: boolean;
}
type SelectPanelVariantProps = {
    variant?: 'anchored';
    onCancel?: () => void;
} | {
    variant: 'modal';
    onCancel: () => void;
};
export type SelectPanelProps = SelectPanelBaseProps & Omit<FilteredActionListProps, 'selectionVariant' | 'variant' | 'message'> & Pick<AnchoredOverlayProps, 'open' | 'height' | 'width' | 'align' | 'displayInViewport'> & AnchoredOverlayWrapperAnchorProps & (SelectPanelSingleSelection | SelectPanelMultiSelection) & SelectPanelVariantProps;
declare function Panel({ open, onOpenChange, renderAnchor, anchorRef: externalAnchorRef, placeholder, placeholderText, inputLabel, selected, title, subtitle, onSelectedChange, filterValue: externalFilterValue, onFilterChange: externalOnFilterChange, items, footer, textInputProps, overlayProps, loading, initialLoadingType, className, height, width, id, message, notice, onCancel, variant, secondaryAction, showSelectedOptionsFirst, disableFullscreenOnNarrow, align, showSelectAll, focusPrependedElements, virtualized, displayInViewport, ...listProps }: SelectPanelProps): JSX.Element;
declare const SecondaryButton: React.FC<ButtonProps>;
declare const SecondaryLink: React.FC<LinkButtonProps & ButtonProps>;
export declare const SelectPanel: typeof Panel & {
    __SLOT__: symbol;
    SecondaryActionButton: React.FC<ButtonProps>;
    SecondaryActionLink: React.FC<LinkButtonProps & {
        alignContent?: import("../Button/types").AlignContent;
        icon?: React.FunctionComponent<IconProps> | React.ElementType | React.ReactElement<any> | null;
        leadingVisual?: React.ElementType | React.ReactElement<any> | null;
        trailingVisual?: React.ElementType | React.ReactElement<any> | null;
        trailingAction?: React.ElementType | null;
        children?: React.ReactNode;
        count?: number | string;
    } & {
        variant?: import("../Button/types").VariantType;
        size?: import("../Button/types").Size;
        disabled?: boolean;
        block?: boolean;
        loading?: boolean;
        loadingAnnouncement?: string;
        inactive?: boolean;
        labelWrap?: boolean;
    } & React.ButtonHTMLAttributes<HTMLButtonElement>>;
    Message: React.FC<import("./SelectPanelMessage").SelectPanelMessageProps>;
};
export {};
//# sourceMappingURL=SelectPanel.d.ts.map