UNPKG

@wix/design-system

Version:

@wix/design-system

40 lines 1.99 kB
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