UNPKG

zentrixui

Version:

ZentrixUI - A modern, highly customizable and accessible React file upload component library with multiple variants, JSON-based configuration, and excellent developer experience.

1 lines 5.45 kB
{"version":3,"file":"components.cjs","sources":["../src/lib/components/file-upload/progress/overall-progress.tsx"],"sourcesContent":["import React from 'react'\r\nimport { cn } from '../../../utils/cn'\r\nimport { ProgressBar } from './progress-bar'\r\nimport { LoadingSpinner } from './loading-spinner'\r\nimport type { UploadFile } from '../file-upload.types'\r\n\r\ninterface OverallProgressProps {\r\n files: UploadFile[]\r\n isUploading: boolean\r\n showDetails?: boolean\r\n className?: string\r\n 'aria-label'?: string\r\n}\r\n\r\nexport const OverallProgress: React.FC<OverallProgressProps> = ({\r\n files,\r\n isUploading,\r\n showDetails = true,\r\n className,\r\n 'aria-label': ariaLabel\r\n}) => {\r\n // Calculate overall progress\r\n const totalFiles = files.length\r\n const completedFiles = files.filter(f => f.status === 'success').length\r\n const failedFiles = files.filter(f => f.status === 'error').length\r\n const uploadingFiles = files.filter(f => f.status === 'uploading').length\r\n\r\n // Calculate weighted progress based on individual file progress\r\n const totalProgress = files.reduce((sum, file) => sum + file.progress, 0)\r\n const overallProgress = totalFiles > 0 ? totalProgress / totalFiles : 0\r\n\r\n if (totalFiles === 0) {\r\n return null\r\n }\r\n\r\n return (\r\n <div\r\n className={cn('space-y-2', className)}\r\n role=\"region\"\r\n aria-label={ariaLabel || 'Upload progress summary'}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2\">\r\n {isUploading && <LoadingSpinner size=\"sm\" />}\r\n <span className=\"text-sm font-medium\">\r\n {isUploading ? 'Uploading files...' : 'Upload complete'}\r\n </span>\r\n </div>\r\n {showDetails && (\r\n <span className=\"text-xs text-gray-600\">\r\n {completedFiles}/{totalFiles} files\r\n </span>\r\n )}\r\n </div>\r\n\r\n <ProgressBar\r\n progress={overallProgress}\r\n variant={\r\n failedFiles > 0 && !isUploading\r\n ? 'error'\r\n : completedFiles === totalFiles && totalFiles > 0\r\n ? 'success'\r\n : 'default'\r\n }\r\n showPercentage={showDetails}\r\n aria-label={`Overall upload progress: ${Math.round(overallProgress)}%`}\r\n />\r\n\r\n {showDetails && (\r\n <div className=\"flex justify-between text-xs text-gray-600\">\r\n <div className=\"flex gap-4\">\r\n {completedFiles > 0 && (\r\n <span className=\"text-green-600\">\r\n ✓ {completedFiles} completed\r\n </span>\r\n )}\r\n {uploadingFiles > 0 && (\r\n <span className=\"text-blue-600\">\r\n ↑ {uploadingFiles} uploading\r\n </span>\r\n )}\r\n {failedFiles > 0 && (\r\n <span className=\"text-red-600\">\r\n ✗ {failedFiles} failed\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}"],"names":["jsxs","cn","jsx","LoadingSpinner","ProgressBar"],"mappings":";;;;;AAcO,MAAM,kBAAkD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,cAAc;AAClB,MAAM;AAEF,QAAM,aAAa,MAAM;AACzB,QAAM,iBAAiB,MAAM,OAAO,OAAK,EAAE,WAAW,SAAS,EAAE;AACjE,QAAM,cAAc,MAAM,OAAO,OAAK,EAAE,WAAW,OAAO,EAAE;AAC5D,QAAM,iBAAiB,MAAM,OAAO,OAAK,EAAE,WAAW,WAAW,EAAE;AAGnE,QAAM,gBAAgB,MAAM,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,UAAU,CAAC;AACxE,QAAM,kBAAkB,aAAa,IAAI,gBAAgB,aAAa;AAEtE,MAAI,eAAe,GAAG;AAClB,WAAO;AAAA,EACX;AAEA,SACIA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAWC,WAAAA,GAAG,aAAa,SAAS;AAAA,MACpC,MAAK;AAAA,MACL,cAAY,aAAa;AAAA,MAEzB,UAAA;AAAA,QAAAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACV,UAAA;AAAA,YAAA,eAAeE,2BAAAA,IAACC,WAAAA,gBAAA,EAAe,MAAK,KAAA,CAAK;AAAA,2CACzC,QAAA,EAAK,WAAU,uBACX,UAAA,cAAc,uBAAuB,kBAAA,CAC1C;AAAA,UAAA,GACJ;AAAA,UACC,eACGH,2BAAAA,KAAC,QAAA,EAAK,WAAU,yBACX,UAAA;AAAA,YAAA;AAAA,YAAe;AAAA,YAAE;AAAA,YAAW;AAAA,UAAA,EAAA,CACjC;AAAA,QAAA,GAER;AAAA,QAEAE,2BAAAA;AAAAA,UAACE,WAAAA;AAAAA,UAAA;AAAA,YACG,UAAU;AAAA,YACV,SACI,cAAc,KAAK,CAAC,cACd,UACA,mBAAmB,cAAc,aAAa,IAC1C,YACA;AAAA,YAEd,gBAAgB;AAAA,YAChB,cAAY,4BAA4B,KAAK,MAAM,eAAe,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGtE,8CACI,OAAA,EAAI,WAAU,8CACX,UAAAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,cACV,UAAA;AAAA,UAAA,iBAAiB,KACdA,gCAAC,QAAA,EAAK,WAAU,kBAAiB,UAAA;AAAA,YAAA;AAAA,YAC1B;AAAA,YAAe;AAAA,UAAA,GACtB;AAAA,UAEH,iBAAiB,KACdA,gCAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA;AAAA,YAAA;AAAA,YACzB;AAAA,YAAe;AAAA,UAAA,GACtB;AAAA,UAEH,cAAc,KACXA,gCAAC,QAAA,EAAK,WAAU,gBAAe,UAAA;AAAA,YAAA;AAAA,YACxB;AAAA,YAAY;AAAA,UAAA,EAAA,CACnB;AAAA,QAAA,EAAA,CAER,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIhB;;;;;;;;;;;;;;;;;;;;;;;"}