{"version":3,"file":"FileUploadArea.cjs","sources":["../../../../src/components/FileUpload/FileUploadArea.tsx"],"sourcesContent":["import type { DragEvent, FC, ReactNode } from 'react';\nimport { cn, cva } from '@/lib/cva';\nimport { Text } from '@/components/Text';\nimport { Title } from '@/components/Title';\nimport { Icon } from '@/components/Icon';\nimport { Button } from '@/components/Button';\nimport styles from './FileUploadArea.module.css';\n\nconst uploadAreaVariants = cva(styles['upload-area'], {\n  variants: {\n    radius: {\n      sm: styles['upload-area_radius_sm'],\n      md: styles['upload-area_radius_md'],\n    },\n    padding: {\n      sm: styles['upload-area_padding_sm'],\n      md: styles['upload-area_padding_md'],\n    },\n    minHeight: {\n      sm: styles['upload-area_min-height_sm'],\n      md: styles['upload-area_min-height_md'],\n    },\n    direction: {\n      row: styles['upload-area_direction_row'],\n      column: styles['upload-area_direction_column'],\n    },\n    justify: {\n      'space-between': styles['upload-area_justify_space-between'],\n      center: styles['upload-area_justify_center'],\n    },\n    gap: {\n      sm: styles['upload-area_gap_sm'],\n      md: styles['upload-area_gap_md'],\n    },\n    cursor: {\n      default: styles['upload-area_cursor_default'],\n      pointer: styles['upload-area_cursor_pointer'],\n    },\n    dashed: {\n      true: styles['upload-area_dashed_true'],\n    },\n    dragging: {\n      true: styles['upload-area_dragging_true'],\n    },\n    error: {\n      true: styles['upload-area_error_true'],\n    },\n  },\n});\n\nconst titleVariants = cva(styles.title, {\n  variants: {\n    notSupported: {\n      true: styles['title_not-supported_true'],\n    },\n  },\n});\n\nconst uploadTextVariants = cva(styles['upload-text'], {\n  variants: {\n    centered: {\n      true: styles['upload-text_centered_true'],\n    },\n    grow: {\n      true: styles['upload-text_grow_true'],\n    },\n  },\n});\n\nexport interface FileUploadAreaProps {\n  title: string;\n  supportedFileTypes: string[];\n  size?: 'sm' | 'md';\n  isDragging: boolean;\n  isNotSupported: boolean;\n  hasFile?: boolean;\n  isError?: boolean;\n  multiple?: boolean;\n  onDragEnter: (e: DragEvent<HTMLDivElement>) => void;\n  onDragLeave: (e: DragEvent<HTMLDivElement>) => void;\n  onDragOver: (e: DragEvent<HTMLDivElement>) => void;\n  onDrop: (e: DragEvent<HTMLDivElement>) => void;\n  onClick?: () => void;\n  children?: ReactNode;\n}\n\nexport const FileUploadArea: FC<FileUploadAreaProps> = ({\n  title,\n  supportedFileTypes,\n  size = 'sm',\n  isDragging,\n  isNotSupported,\n  hasFile = false,\n  isError = false,\n  multiple = false,\n  onDragEnter,\n  onDragLeave,\n  onDragOver,\n  onDrop,\n  onClick,\n  children,\n}) => {\n  const isCompact = hasFile || size === 'sm';\n\n  return (\n    // eslint-disable-next-line jsx-a11y/click-events-have-key-events -- area click widens the pointer target; the Browse button inside is the keyboard path\n    <div\n      className={cn(\n        uploadAreaVariants({\n          radius: hasFile ? 'sm' : 'md',\n          padding: isCompact ? 'sm' : 'md',\n          minHeight: size === 'sm' ? 'sm' : 'md',\n          direction: hasFile || size === 'sm' ? 'row' : 'column',\n          justify: hasFile || size === 'sm' ? 'space-between' : 'center',\n          gap: size === 'sm' ? 'sm' : 'md',\n          cursor: hasFile ? 'default' : 'pointer',\n          dashed: !hasFile,\n          dragging: !hasFile && isDragging,\n          error: isError,\n        })\n      )}\n      onDragEnter={onDragEnter}\n      onDragLeave={onDragLeave}\n      onDragOver={onDragOver}\n      onDrop={onDrop}\n      onClick={!hasFile ? onClick : undefined}\n    >\n      {!hasFile ? (\n        <>\n          <Icon\n            name=\"upload\"\n            className={styles['upload-icon']}\n          />\n          <div\n            className={cn(\n              uploadTextVariants({\n                centered: !hasFile && size === 'md',\n                grow: hasFile || size === 'sm',\n              })\n            )}\n          >\n            {isNotSupported ? (\n              <Title\n                type=\"h1\"\n                className={cn(titleVariants({ notSupported: true }))}\n              >\n                Unsupported file type\n              </Title>\n            ) : (\n              <Title\n                type=\"h1\"\n                className={cn(titleVariants({ notSupported: isNotSupported }))}\n              >\n                {title}\n              </Title>\n            )}\n            <Text className={styles.description}>\n              Files supported: {supportedFileTypes.join(', ')}\n            </Text>\n          </div>\n          <Button\n            type={'secondary'}\n            onClick={e => {\n              e.stopPropagation();\n              onClick?.();\n            }}\n          >\n            {multiple ? 'Browse files' : 'Browse file'}\n          </Button>\n        </>\n      ) : (\n        children\n      )}\n    </div>\n  );\n};\n"],"names":["cva","styles","jsx","cn","jsxs","Fragment","Icon","Title","Text","Button"],"mappings":"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"}