import type { CSSProperties } from 'react' import { Children, forwardRef, useState } from 'react' import * as ToggleGroup from '@radix-ui/react-toggle-group' import classNames from 'classnames' import useMergeRefs from '~/src/hooks/useMergeRefs' import { cssDimension } from '~/src/utils/style' import { EMOJI_BUTTON_GROUP_GAP, EMOJI_BUTTON_SIZE, useToggleEmojiButtonSize, } from '~/src/components/AlphaToggleEmojiButtonGroup/useToggleEmojiButtonSize' import { BaseButton } from '~/src/components/BaseButton' import { Emoji } from '~/src/components/Emoji' import { type ToggleEmojiButtonGroupProps, type ToggleEmojiButtonSourceProps, } from './ToggleEmojiButtonGroup.types' import styles from './ToggleEmojiButtonGroup.module.scss' const EMOJI_SIZE = 30 /** * Toggle Button that contains `Emoji` component with size fixed to 30. * It should be used with `ToggleEmojiButtonGroup` component. * @example * ```tsx * * } * /> * ``` */ export const ToggleEmojiButtonSource = forwardRef< HTMLButtonElement, ToggleEmojiButtonSourceProps >(function ToggleEmojiButtonSource( { name, variant, className, selected, size = 'm', value, onResize, ...rest }, forwardedRef ) { return (
) }) /** * Component for grouping `ToggleEmojiButtonSource`. * @example * ```tsx * * } /> * } /> * * ``` */ export const ToggleEmojiButtonGroup = forwardRef< HTMLDivElement, ToggleEmojiButtonGroupProps >(function ToggleEmojiButtonGroup( { fillDirection, value, className, defaultValue, children, style, dir = 'ltr', onValueChange, ...rest }, forwardedRef ) { const [container, setContainer] = useState(null) const mergedRefs = useMergeRefs(setContainer, forwardedRef) const shouldResizeButton = fillDirection === 'all' const resizedButtonSize = useToggleEmojiButtonSize({ container, enabled: shouldResizeButton, buttonCount: Children.count(children), }) return ( {children} ) })