UNPKG

@wix/design-system

Version:

@wix/design-system

57 lines 3.64 kB
import React, { useState } from 'react'; import Text from '../../../Text'; import Toggle from '../../../Transition/Toggle'; import AccordionItemCaret from '../AccordionItemCaret'; import { timingMap } from '../../../Transition/constants'; import { dataHooks } from '../../constants'; import { st, classes } from './AccordionItem.st.css.js'; const IconsContainer = ({ position, toggleIconPlacement, icon, iconDataHook, caretProps, }) => { const shouldShowToggleIcon = toggleIconPlacement === position; return shouldShowToggleIcon || icon ? (React.createElement("div", { className: classes.iconsContainer }, shouldShowToggleIcon && position === 'start' && (React.createElement(AccordionItemCaret, { ...caretProps })), icon && (React.createElement("div", { className: classes.affix, "data-hook": iconDataHook }, icon)), shouldShowToggleIcon && position === 'end' && (React.createElement(AccordionItemCaret, { ...caretProps })))) : null; }; function AccordionItem({ icon, prefix, suffix, title, subtitle, open, children, onToggle, onMouseLeave, onMouseEnter, disabled, skin, hideShadow, className, size, horizontalPadding, contentPadding, last, transitionSpeed = 'medium', onAnimationEnter, onAnimationExit, buttonType = 'textButton', expandLabel, collapseLabel, toggleIconPlacement = 'end', showLabel, titleSize, }) { // needed for toggle button label visibility const [hover, setHover] = useState(false); const caretProps = { hover, buttonType, expandLabel, collapseLabel, showLabel, open, disabled, skin, }; const _onMouseLeave = (e) => { setHover(false); !disabled && onMouseLeave && onMouseLeave(e); }; const _onMouseEnter = (e) => { setHover(true); !disabled && onMouseEnter && onMouseEnter(e); }; return (React.createElement("div", { "data-hook": dataHooks.item, className: st(classes.root, { disabled, open, skin, hideShadow, size, horizontalPadding, contentPadding, last, titleSize, }, className) }, React.createElement("div", { onClick: !disabled ? onToggle : () => { }, className: st(classes.header, { size }), "data-hook": dataHooks.header, onMouseEnter: _onMouseEnter, onMouseLeave: _onMouseLeave }, React.createElement(IconsContainer, { position: "start", toggleIconPlacement: toggleIconPlacement, icon: prefix || icon, caretProps: caretProps, iconDataHook: dataHooks.prefix }), React.createElement("div", { className: classes.titleWrapper }, title && (React.createElement("div", { "data-hook": "titleContainer" }, typeof title === 'string' ? (React.createElement(Text, { dataHook: "title", ellipsis: true, weight: "normal", className: classes.title }, title)) : (title))), subtitle && (React.createElement("div", { "data-hook": dataHooks.subtitle }, typeof subtitle === 'string' ? (React.createElement(Text, { size: "small" }, subtitle)) : (subtitle)))), React.createElement(IconsContainer, { position: "end", toggleIconPlacement: toggleIconPlacement, icon: suffix, caretProps: caretProps, iconDataHook: dataHooks.suffix })), React.createElement(Toggle, { show: open, timeout: timingMap[transitionSpeed], onStart: onAnimationEnter, onEnd: onAnimationExit, unmountOnExit: true }, React.createElement("div", { "data-hook": "children", className: classes.children }, children)))); } export default AccordionItem; //# sourceMappingURL=AccordionItem.js.map