@enact/moonstone
Version:
Large-screen/TV support library for Enact, containing a variety of UI components.
119 lines (111 loc) • 3.48 kB
TypeScript
// Type definitions for moonstone/UiIconButton
import { ForwardRefProps as ui_ForwardRef_ForwardRefProps } from "@enact/ui/ForwardRef";
import { TouchableProps as ui_Touchable_TouchableProps } from "@enact/ui/Touchable";
import * as React from "react";
import { IconButtonBaseProps as moonstone_IconButton_IconButtonBaseProps } from "@enact/moonstone/IconButton";
import { IconButtonDecoratorProps as moonstone_IconButton_IconButtonDecoratorProps } from "@enact/moonstone/IconButton";
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 IconButtonBaseProps {
/**
* This is the root component used to render the button and will receive all props except
`icon` .
*/
buttonComponent: React.ComponentType | JSX.Element;
/**
* The component used to render the .
*
* This component will receive the `flip` and `size` property set on the `IconButton` as well as the
`icon` class to customize its styling.
*/
iconComponent: React.ComponentType;
/**
* Additional children that follow the icon.
*
* If `icon` isn't specified but `children` is, `children` is used as the icon's value.
*/
children?: React.ReactNode;
/**
* Called with a reference to the root component.
*
* When using , the `ref` prop is forwarded to this
component as `componentRef` .
*/
componentRef?: object | Function;
/**
* 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:
* * `iconButton` - The root component class
* * `icon` - The class
* * `large` - Applied when `size` prop is `'large'`
* * `small` - Applied when `size` prop is `'small'`
* * `pressed` - Applied when `pressed` prop is `true`
*/
css?: object;
/**
* Disables IconButton.
*
* When `true` , the button is shown as disabled and does not generate
`onClick` .
*/
disabled?: boolean;
/**
* Flip the icon horizontally, vertically or both.
*/
flip?: "both" | "horizontal" | "vertical";
/**
* The icon displayed within the IconButton.
*
* If not specified, `children` is used as the icon value instead.
*/
icon?: string;
/**
* Applies the `pressed` CSS class.
*/
pressed?: boolean;
/**
* Applies the `selected` CSS class.
*/
selected?: boolean;
/**
* The size of the button.
*
* Applies the CSS class which can be customized by
.
*/
size?: string;
}
/**
* An ui-styled button without any behavior.
*/
export class IconButtonBase extends React.Component<
Merge<React.HTMLProps<HTMLElement>, IconButtonBaseProps>
> {}
export interface IconButtonDecoratorProps
extends Merge<ui_ForwardRef_ForwardRefProps, ui_Touchable_TouchableProps> {}
export function IconButtonDecorator<P>(
Component: React.ComponentType<P> | string,
): React.ComponentType<P & IconButtonDecoratorProps>;
export interface IconButtonProps
extends Omit<
Merge<
moonstone_IconButton_IconButtonBaseProps,
moonstone_IconButton_IconButtonDecoratorProps
>,
"componentRef"
> {}
/**
* A minimally styled, but interactive, Button ready for customization by a theme.
*
* Example:
* ```
<IconButton size="small">
plus
</IconButton>
```
*/
export class IconButton extends React.Component<
Merge<React.HTMLProps<HTMLElement>, IconButtonProps>
> {}