// Type definitions for agate/SwitchItem

import * as React from "react";
import { ToggleableProps as ui_Toggleable_ToggleableProps } from "@enact/ui/Toggleable";
import { SpottableProps as spotlight_Spottable_SpottableProps } from "@enact/spotlight/Spottable";
import { SkinnableProps as agate_Skinnable_SkinnableProps } from "@enact/agate/Skinnable";

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 SwitchItemBaseProps {
  /**
 * 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:
 * *  `label`  - Class name for the toggle icon label
 * *  `switchIcon`  - Class name for the toggle icon
 * *  `switchItem`  - The root class name
 */
  css?: object;
  /**
   * Disables component and makes it non-interactive.
   */
  disabled?: boolean;
  /**
   * The icon to display before the text.
   */
  icon?: string | object;
  /**
   * Sets the switch to the 'on' state.
   */
  selected?: boolean;
  /**
   * Customize the text displayed when the switch is "off".
   */
  switchOffLabel?: string;
  /**
   * Customize the text displayed when the switch is "on".
   */
  switchOnLabel?: string;
}
/**
 * Renders an  `Item`  with a radio-dot component. Useful to show a selected state on an Item.
 */

export class SwitchItemBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, SwitchItemBaseProps>
> {}

export interface SwitchItemDecoratorProps
  extends Merge<
    Merge<ui_Toggleable_ToggleableProps, spotlight_Spottable_SpottableProps>,
    agate_Skinnable_SkinnableProps
  > {}
export function SwitchItemDecorator<P>(
  Component: React.ComponentType<P> | string
): React.ComponentType<P & SwitchItemDecoratorProps>;

export interface SwitchItemProps
  extends Merge<SwitchItemBaseProps, SwitchItemDecoratorProps> {}
/**
 * Renders an  `Item`  with a radio-dot component. Useful to show a selected state on an Item.
 */

export class SwitchItem extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, SwitchItemProps>
> {}

export default SwitchItem;
