// Type definitions for ui/Card

import { ForwardRefProps as ui_ForwardRef_ForwardRefProps } from "@enact/ui/ForwardRef";
import * as React from "react";

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;

export interface CardBaseProps {
  /**
   * Determines whether the caption will be placed over the image or not.
   */
  captionOverlay?: boolean;
  /**
   * The caption node to be displayed with the image.
   */
  children?: React.ReactNode;
  /**
 * Called with a reference to the root component.
 * 
 * When using   , the  `ref`  prop is forwarded to this component
as  `componentRef` .
 */
  componentRef?: object | Function;
  /**
 * Customizes the component by mapping the supplied collection of CSS class names to the
corresponding internal elements and states of this component.
 * 
 * The following classes are supported.
 */
  css?: object;
  /**
   * Fits the image to its height and width and positions it on the center of the Card
   */
  fitImage?: boolean;
  /**
   * The component used to render the image component.
   */
  imageComponent?: React.ComponentType | JSX.Element;
  /**
   * The layout orientation of the component.
   */
  orientation?: "horizontal" | "vertical";
  /**
   * A placeholder image to be displayed before the image is loaded.
   */
  placeholder?: string;
  /**
   * Applies a selected visual effect to the image.
   */
  selected?: boolean;
  /**
 * Splits the captions in two sections. This prop is only used when
 `captionOverlayOnFocus`  or  `captionOverlay`  is  `true`  and  `orientation`  is  `'vertical'` .
 */
  splitCaption?: boolean;
  /**
 * String value or object of values used to determine which image will appear on a specific
screenSize.
 */
  src?: string | object;
}
/**
 * A basic card without any behavior.
 */

export class CardBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, CardBaseProps>
> {}

export interface CardDecoratorProps extends ui_ForwardRef_ForwardRefProps {}
export function CardDecorator<P>(
  Component: React.ComponentType<P> | string,
): React.ComponentType<P & CardDecoratorProps>;

export interface CardProps extends Omit<
  Merge<CardBaseProps, CardDecoratorProps>,
  "componentRef"
> {}
/**
 * A minimally styled Card ready for customization by a theme.
 */

export class Card extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, CardProps>
> {}

export default Card;
