UNPKG

@wordpress/components

Version:
131 lines (119 loc) 3.66 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { createElement, Fragment } from "@wordpress/element"; /** * External dependencies */ // eslint-disable-next-line no-restricted-imports import { Radio } from 'reakit'; /** * WordPress dependencies */ import { useInstanceId } from '@wordpress/compose'; /** * Internal dependencies */ import { contextConnect, useContextSystem } from '../../ui/context'; import { useToggleGroupControlContext } from '../context'; import * as styles from './styles'; import { useCx } from '../../utils/hooks'; import Tooltip from '../../tooltip'; const { ButtonContentView, LabelView } = styles; const WithToolTip = _ref => { let { showTooltip, text, children } = _ref; if (showTooltip && text) { return createElement(Tooltip, { text: text, position: "top center" }, children); } return createElement(Fragment, null, children); }; function ToggleGroupControlOptionBase(props, forwardedRef) { const toggleGroupControlContext = useToggleGroupControlContext(); const id = useInstanceId(ToggleGroupControlOptionBase, toggleGroupControlContext.baseId || 'toggle-group-control-option-base'); const buttonProps = useContextSystem({ ...props, id }, 'ToggleGroupControlOptionBase'); const { isBlock = false, isDeselectable = false, size = 'default', ...otherContextProps /* context props for Ariakit Radio */ } = toggleGroupControlContext; const { className, isIcon = false, value, children, showTooltip = false, ...otherButtonProps } = buttonProps; const isPressed = otherContextProps.state === value; const cx = useCx(); const labelViewClasses = cx(isBlock && styles.labelBlock); const classes = cx(styles.buttonView({ isDeselectable, isIcon, isPressed, size }), className); const buttonOnClick = () => { if (isDeselectable && isPressed) { otherContextProps.setState(undefined); } else { otherContextProps.setState(value); } }; const commonProps = { ...otherButtonProps, className: classes, 'data-value': value, ref: forwardedRef }; return createElement(LabelView, { className: labelViewClasses }, createElement(WithToolTip, { showTooltip: showTooltip, text: otherButtonProps['aria-label'] }, isDeselectable ? createElement("button", _extends({}, commonProps, { "aria-pressed": isPressed, type: "button", onClick: buttonOnClick }), createElement(ButtonContentView, null, children)) : createElement(Radio, _extends({}, commonProps, otherContextProps /* these are only for Ariakit Radio */ , { as: "button", value: value }), createElement(ButtonContentView, null, children)))); } /** * `ToggleGroupControlOptionBase` is a form component and is meant to be used as an internal, * generic component for any children of `ToggleGroupControl`. * * @example * ```jsx * import { * __experimentalToggleGroupControl as ToggleGroupControl, * __experimentalToggleGroupControlOptionBase as ToggleGroupControlOptionBase, * } from '@wordpress/components'; * * function Example() { * return ( * <ToggleGroupControl label="my label" value="vertical" isBlock> * <ToggleGroupControlOption value="horizontal" label="Horizontal" /> * <ToggleGroupControlOption value="vertical" label="Vertical" /> * </ToggleGroupControl> * ); * } * ``` */ const ConnectedToggleGroupControlOptionBase = contextConnect(ToggleGroupControlOptionBase, 'ToggleGroupControlOptionBase'); export default ConnectedToggleGroupControlOptionBase; //# sourceMappingURL=component.js.map