/** * External dependencies */ // eslint-disable-next-line no-restricted-imports import type { Ref } from 'react'; // eslint-disable-next-line no-restricted-imports import { Radio } from 'reakit'; /** * GeChiUI dependencies */ import { useInstanceId } from '@gechiui/compose'; /** * Internal dependencies */ import { contextConnect, useContextSystem, GeChiUIComponentProps, } from '../../ui/context'; import type { ToggleGroupControlOptionProps, WithToolTipProps } from '../types'; 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 = ( { showTooltip, text, children }: WithToolTipProps ) => { if ( showTooltip && text ) { return ( { children } ); } return <>{ children }; }; function ToggleGroupControlOption( props: GeChiUIComponentProps< ToggleGroupControlOptionProps, 'button' >, forwardedRef: Ref< any > ) { const toggleGroupControlContext = useToggleGroupControlContext(); const id = useInstanceId( ToggleGroupControlOption, toggleGroupControlContext.baseId || 'toggle-group-control-option' ) as string; 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 ( { label } { 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 ( * * * * * ); * } * ``` */ const ConnectedToggleGroupControlOption = contextConnect( ToggleGroupControlOption, 'ToggleGroupControlOption' ); export default ConnectedToggleGroupControlOption;