{"version":3,"sources":["../src/components/file-item.tsx"],"names":["FileItem","file","progress","onRemove","onRetry","onCancel","showPreview","showProgress","showFileSize","showFileType","theme","isDark","bgClass","textClass","getStatusColor","status","getStatusIcon","jsxs","jsx","FileProcessor","Fragment"],"mappings":"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","file":"chunk-K5HTOHGL.cjs","sourcesContent":["import React from 'react';\r\nimport type { UploadFile } from '../types';\r\nimport { FileProcessor } from '../core/file-processor';\r\n\r\ninterface FileItemProps {\r\n  readonly file: UploadFile;\r\n  readonly progress: number;\r\n  readonly onRemove: (fileId: string) => void;\r\n  readonly onRetry: (fileId: string) => void;\r\n  readonly onCancel: (fileId: string) => void;\r\n  readonly showPreview: boolean;\r\n  readonly showProgress: boolean;\r\n  readonly showFileSize: boolean;\r\n  readonly showFileType: boolean;\r\n  readonly theme: 'light' | 'dark' | 'custom';\r\n}\r\n\r\nexport const FileItem: React.FC<FileItemProps> = ({\r\n  file,\r\n  progress,\r\n  onRemove,\r\n  onRetry,\r\n  onCancel,\r\n  showPreview,\r\n  showProgress,\r\n  showFileSize,\r\n  showFileType,\r\n  theme,\r\n}) => {\r\n  const isDark = theme === 'dark';\r\n  const bgClass = isDark ? 'bg-gray-700' : 'bg-gray-50';\r\n  const textClass = isDark ? 'text-gray-200' : 'text-gray-700';\r\n\r\n  const getStatusColor = (status: UploadFile['status']) => {\r\n    switch (status) {\r\n      case 'success':\r\n        return 'text-green-600';\r\n      case 'error':\r\n        return 'text-red-600';\r\n      case 'uploading':\r\n        return 'text-blue-600';\r\n      case 'cancelled':\r\n        return 'text-gray-500';\r\n      default:\r\n        return 'text-gray-600';\r\n    }\r\n  };\r\n\r\n  const getStatusIcon = (status: UploadFile['status']) => {\r\n    switch (status) {\r\n      case 'success':\r\n        return '✓';\r\n      case 'error':\r\n        return '✗';\r\n      case 'uploading':\r\n        return '⏳';\r\n      case 'cancelled':\r\n        return '⊘';\r\n      default:\r\n        return '⏸️';\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div className={`p-3 rounded-lg ${bgClass} ${textClass}`}>\r\n      <div className=\"flex items-center space-x-3\">\r\n        {/* File Icon */}\r\n        <div className=\"text-2xl\">{FileProcessor.getFileIcon(file.type)}</div>\r\n\r\n        {/* File Info */}\r\n        <div className=\"flex-1 min-w-0\">\r\n          <p className=\"font-medium truncate\">{file.name}</p>\r\n          <div className=\"flex items-center space-x-2 text-sm opacity-75\">\r\n            {showFileSize && (\r\n              <span>{FileProcessor.formatFileSize(file.size)}</span>\r\n            )}\r\n            {showFileSize && showFileType && <span>•</span>}\r\n            {showFileType && <span>{file.type}</span>}\r\n            {file.uploadedAt && (\r\n              <>\r\n                <span>•</span>\r\n                <span>{file.uploadedAt.toLocaleTimeString()}</span>\r\n              </>\r\n            )}\r\n          </div>\r\n\r\n          {/* Progress Bar */}\r\n          {showProgress && file.status === 'uploading' && (\r\n            <div className=\"mt-2\">\r\n              <div className=\"w-full bg-gray-200 rounded-full h-2\">\r\n                <div\r\n                  className=\"bg-blue-600 h-2 rounded-full transition-all duration-300\"\r\n                  style={{ width: `${progress}%` }}\r\n                />\r\n              </div>\r\n              <p className=\"text-xs mt-1\">{Math.round(progress)}%</p>\r\n            </div>\r\n          )}\r\n\r\n          {/* Status */}\r\n          <div className=\"flex items-center space-x-2 mt-1\">\r\n            <span className={`text-sm ${getStatusColor(file.status)}`}>\r\n              {getStatusIcon(file.status)} {file.status}\r\n            </span>\r\n            {file.status === 'error' && file.error && (\r\n              <span className=\"text-xs text-red-500\">({file.error})</span>\r\n            )}\r\n          </div>\r\n        </div>\r\n\r\n        {/* Preview */}\r\n        {showPreview && file.preview && FileProcessor.isImage(file.type) && (\r\n          <div className=\"w-16 h-16 rounded-lg overflow-hidden bg-gray-200\">\r\n            <img\r\n              src={file.preview}\r\n              alt={file.name}\r\n              className=\"w-full h-full object-cover\"\r\n            />\r\n          </div>\r\n        )}\r\n\r\n        {/* Action Buttons */}\r\n        <div className=\"flex items-center space-x-2\">\r\n          {file.status === 'error' && (\r\n            <button\r\n              onClick={() => onRetry(file.id)}\r\n              className=\"text-blue-500 hover:text-blue-700 transition-colors\"\r\n              title=\"Retry upload\"\r\n            >\r\n              🔄\r\n            </button>\r\n          )}\r\n          {file.status === 'uploading' && (\r\n            <button\r\n              onClick={() => onCancel(file.id)}\r\n              className=\"text-yellow-500 hover:text-yellow-700 transition-colors\"\r\n              title=\"Cancel upload\"\r\n            >\r\n              ⏹️\r\n            </button>\r\n          )}\r\n          <button\r\n            onClick={() => onRemove(file.id)}\r\n            className=\"text-red-500 hover:text-red-700 transition-colors\"\r\n            title=\"Remove file\"\r\n          >\r\n            ✕\r\n          </button>\r\n        </div>\r\n      </div>\r\n\r\n      {/* Additional File Details */}\r\n      {file.status === 'success' && file.url && (\r\n        <div className=\"mt-2 pt-2 border-t border-gray-200\">\r\n          <div className=\"flex items-center justify-between text-xs\">\r\n            <span className=\"text-green-600\">Upload successful!</span>\r\n            <a\r\n              href={file.url}\r\n              target=\"_blank\"\r\n              rel=\"noopener noreferrer\"\r\n              className=\"text-blue-600 hover:text-blue-800 underline\"\r\n            >\r\n              View file\r\n            </a>\r\n          </div>\r\n        </div>\r\n      )}\r\n\r\n      {/* File Category Badge */}\r\n      <div className=\"mt-2\">\r\n        <span className=\"inline-block px-2 py-1 text-xs bg-gray-200 text-gray-700 rounded-full\">\r\n          {FileProcessor.getFileCategory(file.type)}\r\n        </span>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n"]}