@blueprintjs/icons
Version:
Components, fonts, icons, and css files for creating and displaying icons.
90 lines (89 loc) • 4.22 kB
TypeScript
import type * as React from "react";
type OmittedDOMAttributes = "children" | "dangerouslySetInnerHTML";
/**
* Default set of DOM attributes which are assignable as props to the root element rendered by an
* SVG icon component. This limited set of attributes is assignable to any `<Icon>` component regardless
* of its `tagName` prop (it works for both HTML and SVG elements).
*/
export type DefaultSVGIconAttributes = React.AriaAttributes & Omit<React.DOMAttributes<Element>, OmittedDOMAttributes> & Pick<React.HTMLAttributes<Element>, "id" | "style" | "tabIndex" | "role">;
/**
* DOM attributes which are assignable as props to the root element rendered by an SVG icon component.
* Specify a type parameter to narrow this type and allow more attributes to be passed to the root element.
*
* @see https://blueprintjs.com/docs/#core/components/icon.dom-attributes
*
* When `tagName` is specified, either:
* - as a custom HTML element tag name,
* - as `null` to signfiy that there should be no wrapper around the `<svg>` element,
* - or its default value of "span" is used,
* then it may be useful to narrow this type to pass along additional attributes which not supported by
* the more general `DefaultSVGIconAttributes` interface. You can do this by specifying a generic type param
* on `<Icon>` components, for example:
*
* ```
* <Icon<HTMLSpanElement> icon="drag-handle-horizontal" draggable="false" />
* ```
*/
export type SVGIconAttributes<T extends Element = Element> = T extends SVGElement ? Omit<React.SVGAttributes<T>, OmittedDOMAttributes> : T extends HTMLElement ? Omit<React.HTMLAttributes<T>, OmittedDOMAttributes> : DefaultSVGIconAttributes;
export interface SVGIconOwnProps {
/** A space-delimited list of class names to pass along to the SVG element. */
className?: string;
/** This component does not support child nodes. */
children?: never;
/**
* Color of icon. This is used as the `fill` attribute on the `<svg>` image
* so it will override any CSS `color` property, including that set by
* `intent`. If this prop is omitted, icon color is inherited from
* surrounding text.
*/
color?: string;
/**
* String for the `title` attribute on the rendered element, which will appear
* on hover as a native browser tooltip.
*/
htmlTitle?: string;
/**
* Size of the icon, in pixels. Blueprint contains 16px and 20px SVG icon
* images, and chooses the appropriate resolution based on this prop.
*
* @default 16
*/
size?: number;
/** CSS style properties. */
style?: React.CSSProperties;
/**
* HTML tag to use for the rendered element. Commonly "span" or "div".
* If `null`, no wrapper will be rendered, just the `<svg>` element.
*
* @default "span"
*/
tagName?: keyof React.JSX.IntrinsicElements | null;
/**
* Description string. This string does not appear in normal browsers, but
* it increases accessibility. For instance, screen readers will use it for
* aural feedback.
*
* If this value is nullish, `false`, or an empty string, the component will assume
* that the icon is decorative and `aria-hidden="true"` will be applied (can be overridden
* by manually passing `aria-hidden` prop).
*
* @see https://www.w3.org/WAI/tutorials/images/decorative/
*/
title?: string | false | null;
/** Props to apply to the `SVG` element */
svgProps?: React.HTMLAttributes<SVGElement>;
}
/**
* Interface for generated icon components which have their name and icon paths statically defined
* inside their JS implementation.
*
* @see https://blueprintjs.com/docs/#core/components/icon.static-components
*/
export type SVGIconProps<T extends Element = Element> = React.RefAttributes<T> & SVGIconAttributes<T> & SVGIconOwnProps;
/**
* The default SVG icon props interface, equivalent to `SVGIconProps` with its default type parameter.
* This is primarly exported for documentation purposes; users should reference `SVGIconProps<T>` instead.
*/
export interface DefaultSVGIconProps extends React.RefAttributes<Element>, SVGIconAttributes<Element>, SVGIconOwnProps {
}
export {};