UNPKG

@gechiui/components

Version:
110 lines (101 loc) 3.16 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { createElement, Fragment } from "@gechiui/element"; /** * External dependencies */ // eslint-disable-next-line no-restricted-imports // eslint-disable-next-line no-restricted-imports import { Radio } from 'reakit'; /** * GeChiUI dependencies */ import { useInstanceId } from '@gechiui/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, LabelPlaceholderView, 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 ToggleGroupControlOption(props, forwardedRef) { const toggleGroupControlContext = useToggleGroupControlContext(); const id = useInstanceId(ToggleGroupControlOption, toggleGroupControlContext.baseId || 'toggle-group-control-option'); const buttonProps = useContextSystem({ ...props, id }, 'ToggleGroupControlOption'); const { className, isBlock = false, label, value, showTooltip = false, ...radioProps } = { ...toggleGroupControlContext, ...buttonProps }; const isActive = radioProps.state === value; const cx = useCx(); const labelViewClasses = cx(isBlock && styles.labelBlock); const classes = cx(styles.buttonView, className, isActive && styles.buttonActive); const optionLabel = !!radioProps['aria-label'] ? radioProps['aria-label'] : label; return createElement(LabelView, { className: labelViewClasses, "data-active": isActive }, createElement(WithToolTip, { showTooltip: showTooltip, text: optionLabel }, createElement(Radio, _extends({}, radioProps, { as: "button", "aria-label": optionLabel, className: classes, "data-value": value, ref: forwardedRef, value: value }), createElement(ButtonContentView, null, label), createElement(LabelPlaceholderView, { "aria-hidden": true }, label)))); } /** * `ToggleGroupControlOption` is a form component and is meant to be used as a * child of `ToggleGroupControl`. * * @example * ```jsx * import { * __experimentalToggleGroupControl as ToggleGroupControl, * __experimentalToggleGroupControlOption as ToggleGroupControlOption, * } from '@gechiui/components'; * * function Example() { * return ( * <ToggleGroupControl label="my label" value="vertical" isBlock> * <ToggleGroupControlOption value="horizontal" label="Horizontal" /> * <ToggleGroupControlOption value="vertical" label="Vertical" /> * </ToggleGroupControl> * ); * } * ``` */ const ConnectedToggleGroupControlOption = contextConnect(ToggleGroupControlOption, 'ToggleGroupControlOption'); export default ConnectedToggleGroupControlOption; //# sourceMappingURL=component.js.map