// Type definitions for sandstone/ActionGuide

import { SkinnableProps as sandstone_Skinnable_SkinnableProps } from "@enact/sandstone/Skinnable";
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 ActionGuideBaseProps {
  /**
   * The "aria-label" for the button.
   */
  buttonAriaLabel?: string;
  /**
   * The contents for the action guide.
   */
  children?: string;
  /**
 * 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:
 * *  `actionGuide`  - The root component class
 */
  css?: object;
  /**
   * Disables the button.
   */
  disabled?: boolean;
  /**
   * The icon displayed within the action guide.
   */
  icon?: string;
  /**
   * Called when Button is clicked.
   */
  onClick?: Function;
}
/**
 * An Action Guide component.
 * 
 * This component is most often not used directly but may be composed within another component as it
is within   .
 */

export class ActionGuideBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, ActionGuideBaseProps>
> {}

export interface ActionGuideDecoratorProps
  extends sandstone_Skinnable_SkinnableProps {}
export function ActionGuideDecorator<P>(
  Component: React.ComponentType<P> | string,
): React.ComponentType<P & ActionGuideDecoratorProps>;

export interface ActionGuideProps
  extends Merge<ActionGuideBaseProps, ActionGuideDecoratorProps> {}
/**
 * An Action Guide component, ready to use in Sandstone applications.
 * 
 * `ActionGuide`  may be used to display text and icon to describe an action.
 * 
 * Usage:
 * ```
<ActionGuide icon="arrowlargedown">Hello</ActionGuide>
```
 */

export class ActionGuide extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, ActionGuideProps>
> {}

export default ActionGuide;
