UNPKG

@enact/moonstone

Version:

Large-screen/TV support library for Enact, containing a variety of UI components.

119 lines (111 loc) 3.48 kB
// 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> > {}