import { React, PropTypes, classnames } from '@gravityforms/libraries';
import Icon from '../Icon';
import Text from '../Text';
const { forwardRef } = React;
/**
* @module Pill
* @description A pill component.
*
* @since 4.3.0
*
* @param {object} props Component props.
* @param {string} props.content The content for the pill.
* @param {object} props.customAttributes Custom attributes for the component.
* @param {string|Array|object} props.customClasses Custom classes for the component.
* @param {string} props.icon The icon to display after the content.
* @param {object} props.iconAttributes Custom attributes for the icon.
* @param {string|Array|object} props.iconClasses Custom classes for the icon.
* @param {string} props.iconPrefix The icon prefix.
* @param {Function} props.onClick The function to call when the pill is clicked.
* @param {string} props.tagName Tag to use for the pill. Defaults to `button`.
* @param {object} props.textAttributes Custom attributes for the text.
* @param {string|Array|object} props.textClasses Custom classes for the text.
* @param {object|null} ref Ref to the component.
*
* @return {JSX.Element} The pill component.
*/
const Pill = forwardRef( ( {
content = '',
customAttributes = {},
customClasses = [],
icon = 'circle-close',
iconAttributes = {},
iconClasses = [],
iconPrefix = 'gform-icon',
onClick = () => {},
tagName = 'button',
textAttributes = {},
textClasses = [],
}, ref ) => {
const componentProps = {
className: classnames( {
'gform-pill': true,
}, customClasses ),
onClick,
...customAttributes,
};
const textProps = {
customClasses: classnames( {
'gform-pill__text': true,
}, textClasses ),
color: 'port',
content,
size: 'text-sm',
tagName: 'span',
weight: 'medium',
...textAttributes,
};
const iconProps = {
customClasses: classnames( {
'gform-pill__icon': true,
}, iconClasses ),
icon,
iconPrefix,
...iconAttributes,
};
const Component = tagName;
return (
<Component { ...componentProps } ref={ ref }>
<Text { ...textProps } />
<Icon { ...iconProps } />
</Component>
);
} );
Pill.propTypes = {
content: PropTypes.string,
customAttributes: PropTypes.object,
customClasses: PropTypes.oneOfType( [
PropTypes.string,
PropTypes.array,
PropTypes.object,
] ),
icon: PropTypes.string,
iconAttributes: PropTypes.object,
iconClasses: PropTypes.oneOfType( [
PropTypes.string,
PropTypes.array,
PropTypes.object,
] ),
iconPrefix: PropTypes.string,
onClick: PropTypes.func,
tagName: PropTypes.string,
textAttributes: PropTypes.object,
textClasses: PropTypes.oneOfType( [
PropTypes.string,
PropTypes.array,
PropTypes.object,
] ),
};
Pill.displayName = 'Pill';
export default Pill;