// Type definitions for agate/Icon

import { IconProps as ui_Icon_IconProps } from "@enact/ui/Icon";
import * as React from "react";
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 IconBaseProps extends ui_Icon_IconProps {
  /**
   * The icon content.
   *
   * May be specified as either:
   * *  A string that represents an icon from the  iconList  ,
   * *  An HTML entity string, Unicode reference or hex value (in the form '0x...'),
   * *  A URL specifying path to an icon image, or
   * *  An object representing a resolution independent resource (See   ).
   */
  children?: string | object;
  /**
 * 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:
 * *  `icon`  - The root class name
 * *  `dingbat`  - Applied to dingbat icon
 * *  `focus`  - Applied when icon is focused
 * *  `huge`  - Applied to a  `size='huge'`  icon
 * *  `small`  - Applied to a  `size='small'`  icon
 * *  `smallest`  - Applied to a  `size='smallest'`  icon
 */
  css?: object;
  /**
   * The size of the icon.
   */
  size?: "smallest" | "small" | "large" | "huge";
  /**
   * The amount of sprite "cells" in the src image.
   *
   * This property only affects image-based icons, not icon glyphs.
   */
  spriteCount?: number;
}
/**
 * Renders an Agate-styled icon without any behavior.
 */

export class IconBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, IconBaseProps>
> {}

/**
 * An object whose keys can be used as the child of an  Icon   component.
 * 
 * List of Icons:
 * ```
circlelarge
squarelarge
triangleup
plus
minus
arrowup
arrowdown
arrowleftturn
arrowrightturn
arrowharpoonright
ellipsis
check
arrowstraightup
arrowuturn
arrowlargedown
arrowlargeup
arrowlargeleft
arrowlargeright
closex
search
bluetooth2
bluetoothoff
bright1
bright2
bluetooth
usb
volume0
volume1
volume2
wifi
happyface
notification
pairing
user
calendar
edit
gallery
internet
map
music
video
circle
previous
pairingdisplay
box
play
previoustrack
pause
nexttrack
repeat
shuffle
error
setting
popupstop
accept
decline
stop
cancel
carspeaker
speaker
earphone
detail
install
send
netbook
pad
mobile
update
backapp
uninstall
rain
raindrops
raincloud
snow
cloud
ice
fog
sun
profileA1
profileA2
profileA3
profileA4
profileB1
profileB2
profileB3
profileB4
profileC1
profileC2
profileC3
profileC4
ac
auto
airmode
airdown
airright
airup
heatseatleft
heatseatright
aircirculation
fan
defrosterfront
defrosterback
airflow
home
temperature
compass
phone
fanoff
datetime
display
seatbelt
apps
climate
dashboard
expand
radio
rearscreen
weather
fullscreen
menu
history
browser
lock
search2
bookmark
star
hollowstar
halfstar
refresh
time
pausebold
playbold
controls
diagnostics
mapbox
displaycontrol
controlleft
controlright
mainpage
playlist
resume
trailer
plusbold
minusbold
```
 */
export declare const iconList: object;

export interface IconDecoratorProps extends agate_Skinnable_SkinnableProps {}
export function IconDecorator<P>(
  Component: React.ComponentType<P> | string
): React.ComponentType<P & IconDecoratorProps>;

export interface IconProps extends Merge<IconBaseProps, IconDecoratorProps> {}
/**
 * An Agate-styled icon.
 */

export class Icon extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, IconProps>
> {}

export default Icon;
