// Type definitions for agate/FanSpeedControl

import { ArcPickerProps as agate_ArcPicker_ArcPickerProps } from "@enact/agate/ArcPicker";
import * as React from "react";
import { ChangeableProps as ui_Changeable_ChangeableProps } from "@enact/ui/Changeable";
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 FanSpeedControlBaseProps
  extends agate_ArcPicker_ArcPickerProps {
  /**
   * The maximum value of FanSpeedControl.
   */
  max?: number;
  /**
   * The minimum value of FanSpeedControl.
   */
  min?: number;
  /**
   * Whether or not the component is in a disabled state.
   */
  disabled?: boolean;
  /**
   * FanSpeedControl icon.
   */
  icon?: string;
  /**
   * Called when value is changed.
   */
  onChange?: Function;
  /**
   * Called when the path area is clicked.
   */
  onClick?: Function;
  /**
   * Value of FanSpeedControl.
   */
  value?: number;
}
/**
 * An Agate component for displaying fan speed.
This component is most often not used directly but may be composed within another component as it
is within  FanSpeedControl  .
 */

export class FanSpeedControlBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, FanSpeedControlBaseProps>
> {}

export interface FanSpeedControlDecoratorProps
  extends Merge<
    ui_Changeable_ChangeableProps,
    agate_Skinnable_SkinnableProps
  > {}
export function FanSpeedControlDecorator<P>(
  Component: React.ComponentType<P> | string
): React.ComponentType<P & FanSpeedControlDecoratorProps>;

export interface FanSpeedControlProps
  extends Merge<FanSpeedControlBaseProps, FanSpeedControlDecoratorProps> {}
/**
 * FanSpeedControl with Agate styling and
 `FanSpeedControlDecorator`   applied.
 * 
 * Usage:
 * ```
<FanSpeedControl
  icon="fan"
  max={10}
  min={1}
  value={4}
/>
```
 */

export class FanSpeedControl extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, FanSpeedControlProps>
> {}

export default FanSpeedControl;
