// Type definitions for agate/SliderButton

import { ChangeableProps as ui_Changeable_ChangeableProps } from "@enact/ui/Changeable";
import { SpottableProps as spotlight_Spottable_SpottableProps } from "@enact/spotlight/Spottable";
import { SkinnableProps as agate_Skinnable_SkinnableProps } from "@enact/agate/Skinnable";
import { SliderProps as ui_Slider_SliderProps } from "@enact/ui/Slider";
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 SliderButtonBaseProps extends ui_Slider_SliderProps {
  /**
   * The value options of SliderButtonBase.
   */
  children: Array<any>;
  /**
 * Customizes the component by mapping the supplied collection of CSS class names to the
corresponding internal elements and states of this component.
 */
  css?: object;
}
/**
 * Renders the base level DOM structure of the component.
 */

export class SliderButtonBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, SliderButtonBaseProps>
> {}

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

export interface SliderButtonProps
  extends Merge<SliderButtonBaseProps, SliderButtonDecoratorProps> {}
/**
 * Renders a slider that appears as a series of connected buttons.
 */

export class SliderButton extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, SliderButtonProps>
> {}

export default SliderButton;
