@wix/design-system
Version:
@wix/design-system
40 lines • 1.99 kB
JavaScript
import React, { useContext, useRef, useEffect, forwardRef, useImperativeHandle, } from 'react';
import { generateDataAttr } from '../utils/generateDataAttr';
import { st, classes } from './CloseButton.st.css.js';
import ButtonCore from '../Button/ButtonCore';
import { ThemeContext } from '../ThemeProvider/ThemeContext';
import { Close, CloseLarge } from '@wix/wix-ui-icons-common/system';
import { SIZES, SKINS } from './CloseButton.constants';
import { useIcons } from '../WixDesignSystemIconThemeProvider';
const CHILD_SIZE = '18px';
const CloseButton = forwardRef(({ skin = SKINS.standard, size = SIZES.small, disabled = false, autoFocus = false, className, dataHook, children, ...rest }, ref) => {
const icons = useIcons('CloseButton', {
Close,
CloseLarge,
});
const sizeToIconMap = {
small: React.createElement(icons.Close, { "data-hook": "close" }),
medium: React.createElement(icons.CloseLarge, { "data-hook": "close-medium" }),
large: React.createElement(icons.CloseLarge, { "data-hook": "close-large", size: "12" }),
};
const theme = useContext(ThemeContext);
const { icons: themeIcons } = theme || {};
const closeIcon = themeIcons?.CloseButton?.[size] ?? sizeToIconMap[size];
const buttonRef = useRef(null);
useImperativeHandle(ref, () => buttonRef.current, []);
useEffect(() => {
if (autoFocus) {
buttonRef.current?.focus();
}
}, [autoFocus]);
return (React.createElement(ButtonCore, { ref: buttonRef, ...rest, disabled: disabled, className: st(classes.root, { skin, size }, className), ...generateDataAttr({ skin, size }, ['skin', 'size']), "data-hook": dataHook }, children
? React.cloneElement(children, {
size: CHILD_SIZE,
width: CHILD_SIZE,
height: CHILD_SIZE,
})
: closeIcon));
});
CloseButton.displayName = 'CloseButton';
export default CloseButton;
//# sourceMappingURL=CloseButton.js.map