{"version":3,"file":"EmojiPicker.mjs","sources":["../../../src/components/internal/EmojiPicker.tsx"],"sourcesContent":["import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport React, { forwardRef, useCallback, useMemo, useState } from \"react\";\n\nimport { useCommentsConfig } from \"../../config\";\nimport {\n  FLOATING_ELEMENT_COLLISION_PADDING,\n  FLOATING_ELEMENT_SIDE_OFFSET,\n} from \"../../constants\";\nimport { SearchIcon } from \"../../icons/Search\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport { useOverrides } from \"../../overrides\";\nimport * as EmojiPickerPrimitive from \"../../primitives/EmojiPicker\";\nimport type {\n  EmojiPickerContentCategoryHeaderProps,\n  EmojiPickerContentEmojiProps,\n  EmojiPickerContentEmptyProps,\n  EmojiPickerContentErrorProps,\n  EmojiPickerContentGridProps,\n  EmojiPickerContentLoadingProps,\n  EmojiPickerContentRowProps,\n} from \"../../primitives/EmojiPicker/types\";\nimport { classNames } from \"../../utils/class-names\";\nimport { Emoji } from \"../internal/Emoji\";\n\nexport interface EmojiPickerProps extends ComponentPropsWithoutRef<\"div\"> {\n  onOpenChange?: (open: boolean) => void;\n  onEmojiSelect?: (emoji: string) => void;\n}\n\nfunction EmojiPickerLoading({\n  className,\n  ...props\n}: EmojiPickerContentLoadingProps) {\n  return (\n    <div\n      className={classNames(\"lb-emoji-picker-loading\", className)}\n      {...props}\n    >\n      <SpinnerIcon />\n    </div>\n  );\n}\n\nfunction EmojiPickerEmpty({\n  className,\n  ...props\n}: EmojiPickerContentEmptyProps) {\n  const $ = useOverrides();\n\n  return (\n    <div className={classNames(\"lb-emoji-picker-empty\", className)} {...props}>\n      {$.EMOJI_PICKER_EMPTY}\n    </div>\n  );\n}\n\nfunction EmojiPickerError({\n  error,\n  className,\n  ...props\n}: EmojiPickerContentErrorProps) {\n  const $ = useOverrides();\n\n  return (\n    <div className={classNames(\"lb-emoji-picker-error\", className)} {...props}>\n      {$.EMOJI_PICKER_ERROR(error)}\n    </div>\n  );\n}\n\nfunction EmojiPickerCategoryHeader({\n  category,\n  className,\n  ...props\n}: EmojiPickerContentCategoryHeaderProps) {\n  return (\n    <div\n      className={classNames(\"lb-emoji-picker-category-header\", className)}\n      {...props}\n    >\n      <span className=\"lb-emoji-picker-category-header-title\">{category}</span>\n    </div>\n  );\n}\n\nfunction EmojiPickerGrid({\n  children,\n  className,\n  ...props\n}: EmojiPickerContentGridProps) {\n  return (\n    <div className={classNames(\"lb-emoji-picker-grid\", className)} {...props}>\n      {children}\n    </div>\n  );\n}\n\nfunction EmojiPickerRow({\n  attributes,\n  children,\n  className,\n  ...props\n}: EmojiPickerContentRowProps) {\n  const isFirstRow = useMemo(\n    () => attributes.categoryRowIndex === 0,\n    [attributes.categoryRowIndex]\n  );\n  const isLastRow = useMemo(\n    () => attributes.categoryRowIndex === attributes.categoryRowsCount - 1,\n    [attributes.categoryRowIndex, attributes.categoryRowsCount]\n  );\n\n  return (\n    <div\n      className={classNames(\"lb-emoji-picker-row\", className)}\n      data-first={isFirstRow ? \"\" : undefined}\n      data-last={isLastRow ? \"\" : undefined}\n      {...props}\n    >\n      {children}\n    </div>\n  );\n}\n\nfunction EmojiPickerEmoji({\n  emoji,\n  className,\n  ...props\n}: EmojiPickerContentEmojiProps) {\n  return (\n    <button\n      className={classNames(\"lb-emoji-picker-emoji\", className)}\n      {...props}\n    >\n      <Emoji emoji={emoji} />\n    </button>\n  );\n}\n\nexport const EmojiPicker = forwardRef<HTMLDivElement, EmojiPickerProps>(\n  (\n    { onEmojiSelect, onOpenChange, children, className, ...props },\n    forwardedRef\n  ) => {\n    const [isOpen, setOpen] = useState(false);\n    const { portalContainer } = useCommentsConfig();\n    const $ = useOverrides();\n\n    const handleOpenChange = useCallback(\n      (isOpen: boolean) => {\n        setOpen(isOpen);\n        onOpenChange?.(isOpen);\n      },\n      [onOpenChange]\n    );\n\n    const handleEmojiSelect = useCallback(\n      (emoji: string) => {\n        setOpen(false);\n        onEmojiSelect?.(emoji);\n      },\n      [onEmojiSelect]\n    );\n\n    return (\n      <PopoverPrimitive.Root open={isOpen} onOpenChange={handleOpenChange}>\n        {children}\n        <PopoverPrimitive.Portal container={portalContainer}>\n          <PopoverPrimitive.Content\n            side=\"top\"\n            align=\"center\"\n            sideOffset={FLOATING_ELEMENT_SIDE_OFFSET}\n            collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n            className={classNames(\n              \"lb-root lb-portal lb-elevation lb-emoji-picker\",\n              className\n            )}\n            {...props}\n            ref={forwardedRef}\n          >\n            <EmojiPickerPrimitive.Root\n              onEmojiSelect={handleEmojiSelect}\n              locale={$.locale}\n            >\n              <div className=\"lb-emoji-picker-header\">\n                <div className=\"lb-emoji-picker-search-container\">\n                  <EmojiPickerPrimitive.Search\n                    className=\"lb-emoji-picker-search\"\n                    placeholder={$.EMOJI_PICKER_SEARCH_PLACEHOLDER}\n                    autoFocus\n                  />\n                  <SearchIcon className=\"lb-emoji-picker-search-icon\" />\n                </div>\n              </div>\n              <EmojiPickerPrimitive.Content\n                className=\"lb-emoji-picker-content\"\n                components={{\n                  Loading: EmojiPickerLoading,\n                  Empty: EmojiPickerEmpty,\n                  Error: EmojiPickerError,\n                  CategoryHeader: EmojiPickerCategoryHeader,\n                  Grid: EmojiPickerGrid,\n                  Row: EmojiPickerRow,\n                  Emoji: EmojiPickerEmoji,\n                }}\n              />\n            </EmojiPickerPrimitive.Root>\n          </PopoverPrimitive.Content>\n        </PopoverPrimitive.Portal>\n      </PopoverPrimitive.Root>\n    );\n  }\n);\n\nexport { PopoverTrigger as EmojiPickerTrigger } from \"@radix-ui/react-popover\";\n"],"names":["React","isOpen","EmojiPickerPrimitive.Root","EmojiPickerPrimitive.Search","EmojiPickerPrimitive.Content"],"mappings":"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"}