import type { Ref, MouseEventHandler, KeyboardEventHandler, ReactNode } from 'react';
import type { ImageProps } from '../Image';
import type { FieldValueListItemProps, FieldValueListProps } from '../FieldValueList';
import type { FormControlProps } from '../FormControl';
import type { Action, WithAttributes, NoChildrenProp, TestIdProp, OmitStrict } from '../../types';
import type { selectionCardElements } from './SelectionCard.test-ids';
export type ImagePlacement = 'block-start' | 'inline-end' | 'inline-start';
export type ImageSize = 'flexible' | 'large' | 'small';
interface SelectionCardTileBase {
    foregroundColor: string;
    backgroundColor: string;
}
/** Tile with a registered icon. */
interface SelectionCardTileWithIcon extends SelectionCardTileBase {
    icon: string;
    text?: never;
}
/** Tile with a short metric string. */
interface SelectionCardTileWithText extends SelectionCardTileBase {
    icon?: never;
    text: string;
}
export type SelectionCardTile = SelectionCardTileWithIcon | SelectionCardTileWithText;
export type FieldValueItemPropsOmitName = OmitStrict<FieldValueListItemProps, 'name'>;
export type SelectionCardProps = WithAttributes<'div', NoChildrenProp & TestIdProp<typeof selectionCardElements> & {
    /** Content to be rendered as a card heading */
    heading: ReactNode;
    /** The image or tile to render in the card. */
    image?: (ImageProps | SelectionCardTile) & {
        /**
         * Used to determine image placement
         * @default 'inline-start'
         */
        placement?: ImagePlacement;
        /**
         * Used to determine image size
         * @default 'large'
         */
        size?: ImageSize;
    };
    /** The onClick handler for the item. */
    onClick?: MouseEventHandler;
    /** Called when user presses a key. */
    onKeyDown?: KeyboardEventHandler;
    /** The set of field values to render in the card. */
    fields?: FieldValueListProps['fields'] | FieldValueItemPropsOmitName[];
    /** Pass a heading and content to show additional information on the field. */
    additionalInfo?: FormControlProps['additionalInfo'];
    /** Set the card to disabled state, ie. non-interactive. */
    disabled?: boolean;
    /** Set the card to read-only state */
    readOnly?: boolean;
    /** Additional actions as a static array or a fetcher function for on-demand loading. */
    actions?: Action[] | (() => Promise<Action[]>);
    /** Optional footer content rendered at the bottom of the card. */
    footer?: ReactNode;
    /** Reference to the component's input element. */
    ref?: Ref<HTMLDivElement>;
}>;
export {};
//# sourceMappingURL=SelectionCard.types.d.ts.map