upload-pulse 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ export declare function normalizeAccept(accept?: string | string[]): string | undefined;
2
+ export declare function isFileAccepted(file: File, accept?: string | string[]): boolean;
3
+ export declare function filterAcceptedFiles(files: File[], accept?: string | string[]): {
4
+ accepted: File[];
5
+ rejected: File[];
6
+ };
7
+ export declare function applyMaxCount(files: File[], currentCount: number, maxCount?: number): {
8
+ accepted: File[];
9
+ rejected: File[];
10
+ };
@@ -0,0 +1,3 @@
1
+ export declare function cn(...classes: (string | false | undefined | null)[]): string;
2
+ export declare function formatBytes(bytes: number): string;
3
+ export declare function getFileExtension(filename: string): string;
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react/jsx-runtime"),t=require("react");function n(...e){return e.filter(Boolean).join(` `)}function r(e){if(e===0)return`0.0MB`;let t=e/(1024*1024);if(t>=10)return`${Math.round(t)}MB`;if(t>=1)return`${t.toFixed(1)}MB`;let n=e/1024;return n>=1?`${n.toFixed(1)}KB`:`${e}B`}function i(e){let t=e.split(`.`);return t.length<2?`default`:t[t.length-1].toLowerCase()}var a={xlsx:`#10B981`,xls:`#10B981`,csv:`#10B981`,pdf:`#EF4444`,doc:`#3B82F6`,docx:`#3B82F6`,png:`#8B5CF6`,jpg:`#8B5CF6`,jpeg:`#8B5CF6`,default:`#6B7280`},o={xlsx:`XLSX`,xls:`XLS`,csv:`CSV`,pdf:`PDF`,doc:`DOC`,docx:`DOCX`,png:`PNG`,jpg:`JPG`,jpeg:`JPG`,default:`FILE`};function s({filename:t,className:n}){let r=i(t),s=a[r]??a.default,c=o[r]??(r.toUpperCase().slice(0,4)||`FILE`);return(0,e.jsxs)(`svg`,{className:n,width:`40`,height:`48`,viewBox:`0 0 40 48`,fill:`none`,"aria-hidden":`true`,children:[(0,e.jsx)(`path`,{d:`M4 4C4 1.79 5.79 0 8 0H26L36 10V44C36 46.21 34.21 48 32 48H8C5.79 48 4 46.21 4 44V4Z`,fill:s}),(0,e.jsx)(`path`,{d:`M26 0L36 10H30C27.79 10 26 8.21 26 6V0Z`,fill:`rgba(0,0,0,0.15)`}),(0,e.jsx)(`rect`,{x:`10`,y:`12`,width:`6`,height:`6`,rx:`1`,fill:`rgba(0,0,0,0.25)`}),(0,e.jsx)(`rect`,{x:`18`,y:`12`,width:`6`,height:`6`,rx:`1`,fill:`rgba(0,0,0,0.25)`}),(0,e.jsx)(`rect`,{x:`10`,y:`20`,width:`6`,height:`6`,rx:`1`,fill:`rgba(0,0,0,0.25)`}),(0,e.jsx)(`rect`,{x:`18`,y:`20`,width:`6`,height:`6`,rx:`1`,fill:`rgba(0,0,0,0.25)`}),(0,e.jsx)(`text`,{x:`20`,y:`40`,textAnchor:`middle`,fill:`#000`,fontSize:`8`,fontWeight:`700`,fontFamily:`system-ui, sans-serif`,children:c})]})}function c({className:t}){return(0,e.jsxs)(`svg`,{className:t,width:`10`,height:`12`,viewBox:`0 0 10 12`,fill:`none`,"aria-hidden":`true`,children:[(0,e.jsx)(`rect`,{x:`0`,y:`0`,width:`3`,height:`12`,rx:`1`,fill:`currentColor`}),(0,e.jsx)(`rect`,{x:`7`,y:`0`,width:`3`,height:`12`,rx:`1`,fill:`currentColor`})]})}function l({className:t}){return(0,e.jsx)(`svg`,{className:t,width:`10`,height:`12`,viewBox:`0 0 10 12`,fill:`none`,"aria-hidden":`true`,children:(0,e.jsx)(`path`,{d:`M0 0L10 6L0 12V0Z`,fill:`currentColor`})})}function u({className:t}){return(0,e.jsx)(`svg`,{className:t,width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,e.jsx)(`path`,{d:`M1 1L13 13M13 1L1 13`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})}function d({className:t}){return(0,e.jsxs)(`svg`,{className:t,width:`14`,height:`16`,viewBox:`0 0 14 16`,fill:`none`,"aria-hidden":`true`,children:[(0,e.jsx)(`path`,{d:`M1 4H13M5 4V2.5C5 1.67 5.67 1 6.5 1H7.5C8.33 1 9 1.67 9 2.5V4M11 4V14.5C11 15.33 10.33 16 9.5 16H4.5C3.67 16 3 15.33 3 14.5V4H11Z`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,e.jsx)(`path`,{d:`M5.5 7.5V12.5M8.5 7.5V12.5`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})]})}function f({className:t}){return(0,e.jsx)(`svg`,{className:t,width:`10`,height:`8`,viewBox:`0 0 10 8`,fill:`none`,"aria-hidden":`true`,children:(0,e.jsx)(`path`,{d:`M1 4L3.5 6.5L9 1`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function p({className:t}){return(0,e.jsx)(`svg`,{className:t,width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,e.jsx)(`path`,{d:`M12 7A5 5 0 1 1 9.5 2.5M12 2V5.5H8.5`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})}var m={cardBackground:`#000000`,cardShadow:`0 4px 24px rgba(0, 0, 0, 0.4)`,fileName:`#ffffff`,statusUploading:`#a5b4fc`,statusPaused:`#9ca3af`,statusError:`#f87171`,statusCompleted:`#ffffff`,metaMuted:`#9ca3af`,metaSeparator:`#6b7280`,progressTrack:`#374151`,progressBackground:`linear-gradient(to bottom right, #1e1b4b, #312e81, #3730a3)`,progressFill:`linear-gradient(to right, #6366f1, #818cf8)`,progressGlow:`rgba(129, 140, 248, 0.6)`,iconButtonBackground:`rgba(55, 65, 81, 0.8)`,iconButtonHover:`rgba(75, 85, 99, 0.9)`,iconButtonText:`#ffffff`,closeButtonText:`#d1d5db`,closeButtonHover:`#ffffff`,deleteButtonBackground:`rgba(239, 68, 68, 0.2)`,deleteButtonText:`#f87171`,deleteButtonHoverBackground:`rgba(239, 68, 68, 0.35)`,deleteButtonHoverText:`#fca5a5`,deleteButtonShadow:`0 0 16px rgba(239, 68, 68, 0.3)`,deleteButtonHoverShadow:`0 0 20px rgba(239, 68, 68, 0.45)`,successBadgeBackground:`#10b981`,changeButtonBackground:`#374151`,changeButtonHover:`#4b5563`,changeButtonText:`#ffffff`,downloadButtonBackground:`#e5e7eb`,downloadButtonHover:`#f3f4f6`,downloadButtonText:`#111827`},h={cardBackground:`#ffffff`,cardShadow:`0 4px 24px rgba(15, 23, 42, 0.08)`,fileName:`#111827`,statusUploading:`#4f46e5`,statusPaused:`#6b7280`,statusError:`#dc2626`,statusCompleted:`#111827`,metaMuted:`#6b7280`,metaSeparator:`#d1d5db`,progressTrack:`#e5e7eb`,progressBackground:`linear-gradient(to bottom right, #eef2ff, #e0e7ff, #c7d2fe)`,progressFill:`linear-gradient(to right, #6366f1, #818cf8)`,progressGlow:`rgba(99, 102, 241, 0.45)`,iconButtonBackground:`rgba(243, 244, 246, 0.95)`,iconButtonHover:`rgba(229, 231, 235, 1)`,iconButtonText:`#374151`,closeButtonText:`#9ca3af`,closeButtonHover:`#374151`,deleteButtonBackground:`rgba(254, 226, 226, 0.9)`,deleteButtonText:`#dc2626`,deleteButtonHoverBackground:`rgba(254, 202, 202, 0.95)`,deleteButtonHoverText:`#b91c1c`,deleteButtonShadow:`0 0 12px rgba(220, 38, 38, 0.15)`,deleteButtonHoverShadow:`0 0 16px rgba(220, 38, 38, 0.25)`,successBadgeBackground:`#10b981`,changeButtonBackground:`#f3f4f6`,changeButtonHover:`#e5e7eb`,changeButtonText:`#111827`,downloadButtonBackground:`#111827`,downloadButtonHover:`#1f2937`,downloadButtonText:`#ffffff`},g={theme:`light`,colors:h,progressInset:10,maxWidth:480,showProgressBar:!0,showBackgroundProgress:!0,pausable:!0,cancelable:!0,deletable:!0,retryable:!0,labels:{uploading:e=>`Uploading ${e}%`,paused:e=>`Paused ${e}%`,completed:`Completed`,error:e=>e?`Failed · ${e}`:`Failed`,change:`Change`,download:`Download`,retry:`Retry`}},_={maxCountExceeded:e=>`最多只能上传 ${e} 个文件`,invalidFormat:e=>`文件格式不支持:${e}`},v={hint:`拖拽文件到此处上传`,hintActive:`释放文件开始上传`,hintDisabled:`已达上传上限`,clickHint:`或点击选择文件`},y={borderColor:`#d1d5db`,borderColorActive:`#6366f1`,borderColorDisabled:`#e5e7eb`,background:`#ffffff`,backgroundActive:`rgba(99, 102, 241, 0.06)`,textColor:`#6b7280`,textColorActive:`#4f46e5`,textColorDisabled:`#9ca3af`,minHeight:120,borderRadius:16},b={borderColor:`#374151`,borderColorActive:`#6366f1`,borderColorDisabled:`#1f2937`,background:`transparent`,backgroundActive:`rgba(99, 102, 241, 0.08)`,textColor:`#9ca3af`,textColorActive:`#a5b4fc`,textColorDisabled:`#4b5563`,minHeight:120,borderRadius:16},x={enabled:!1,showDropzone:!0,global:!1,preventDocumentDrop:!0,labels:v,style:y},S={dark:`cursor-pointer rounded-lg border border-gray-700 bg-neutral-800 px-4 py-2 text-[13px] text-gray-100 transition-colors duration-150 hover:bg-gray-700 disabled:cursor-not-allowed disabled:opacity-50`,light:`cursor-pointer rounded-lg border border-gray-300 bg-white px-4 py-2 text-[13px] text-gray-900 transition-colors duration-150 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50`},C={dark:b,light:y},w={theme:`light`,multiple:!1,showButton:!0,buttonLabel:`选择文件`,labels:_,drag:x},T={dark:m,light:h};function E(e){let t=e?.theme??g.theme,n=T[t];return{...g,...e,theme:t,colors:{...n,...e?.colors},labels:{...g.labels,...e?.labels}}}function D(e){let t=e?.theme??w.theme,n=C[t];return{...w,...e,theme:t,buttonClassName:S[t],labels:{..._,...e?.labels},drag:{...x,...e?.drag,labels:{...v,...e?.drag?.labels},style:{...n,...e?.drag?.style}}}}function O(e){return{"--upload-card-bg":e.cardBackground,"--upload-card-shadow":e.cardShadow,"--upload-file-name":e.fileName,"--upload-status-uploading":e.statusUploading,"--upload-status-paused":e.statusPaused,"--upload-status-error":e.statusError,"--upload-status-completed":e.statusCompleted,"--upload-meta-muted":e.metaMuted,"--upload-meta-separator":e.metaSeparator,"--upload-progress-track":e.progressTrack,"--upload-progress-bg":e.progressBackground,"--upload-progress-fill":e.progressFill,"--upload-progress-glow":e.progressGlow,"--upload-icon-btn-bg":e.iconButtonBackground,"--upload-icon-btn-hover":e.iconButtonHover,"--upload-icon-btn-text":e.iconButtonText,"--upload-close-text":e.closeButtonText,"--upload-close-hover":e.closeButtonHover,"--upload-delete-bg":e.deleteButtonBackground,"--upload-delete-text":e.deleteButtonText,"--upload-delete-hover-bg":e.deleteButtonHoverBackground,"--upload-delete-hover-text":e.deleteButtonHoverText,"--upload-delete-shadow":e.deleteButtonShadow,"--upload-delete-hover-shadow":e.deleteButtonHoverShadow,"--upload-success-badge":e.successBadgeBackground,"--upload-change-bg":e.changeButtonBackground,"--upload-change-hover":e.changeButtonHover,"--upload-change-text":e.changeButtonText,"--upload-download-bg":e.downloadButtonBackground,"--upload-download-hover":e.downloadButtonHover,"--upload-download-text":e.downloadButtonText}}var k=`inline-flex items-center justify-center border-none cursor-pointer p-0 transition-[background,opacity,transform,color,box-shadow] duration-150 hover:opacity-85 active:scale-95`,A=`relative w-full overflow-hidden rounded-2xl font-sans bg-[var(--upload-card-bg)] shadow-[var(--upload-card-shadow)]`,j=n(k,`h-8 w-8 rounded-full bg-[var(--upload-icon-btn-bg)] text-[var(--upload-icon-btn-text)] hover:bg-[var(--upload-icon-btn-hover)]`),M=n(k,`h-7 w-7 text-[var(--upload-close-text)] hover:text-[var(--upload-close-hover)]`),N=n(k,`h-8 rounded-full bg-[var(--upload-icon-btn-bg)] px-3 text-xs font-medium text-[var(--upload-icon-btn-text)] hover:bg-[var(--upload-icon-btn-hover)]`),P=n(k,`h-9 w-9 rounded-full bg-[var(--upload-delete-bg)] text-[var(--upload-delete-text)] shadow-[var(--upload-delete-shadow)] hover:bg-[var(--upload-delete-hover-bg)] hover:text-[var(--upload-delete-hover-text)] hover:shadow-[var(--upload-delete-hover-shadow)]`);function F({status:t,pausable:n,cancelable:r,deletable:i,retryable:a,retryLabel:o,onPause:s,onResume:f,onCancel:m,onDelete:h,onRetry:g}){return t===`uploading`&&(n||r)?(0,e.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[n&&(0,e.jsx)(`button`,{type:`button`,className:j,onClick:s,"aria-label":`Pause upload`,children:(0,e.jsx)(c,{})}),r&&(0,e.jsx)(`button`,{type:`button`,className:M,onClick:m,"aria-label":`Cancel upload`,children:(0,e.jsx)(u,{})})]}):t===`paused`&&(n||r)?(0,e.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[n&&(0,e.jsx)(`button`,{type:`button`,className:j,onClick:f,"aria-label":`Resume upload`,children:(0,e.jsx)(l,{})}),r&&(0,e.jsx)(`button`,{type:`button`,className:M,onClick:m,"aria-label":`Cancel upload`,children:(0,e.jsx)(u,{})})]}):t===`error`&&(a||r)?(0,e.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[a&&g&&(0,e.jsxs)(`button`,{type:`button`,className:N,onClick:g,"aria-label":o,children:[(0,e.jsx)(p,{className:`mr-1`}),o]}),r&&(0,e.jsx)(`button`,{type:`button`,className:M,onClick:m,"aria-label":`Cancel upload`,children:(0,e.jsx)(u,{})})]}):t===`completed`&&i?(0,e.jsx)(`button`,{type:`button`,className:P,onClick:h,"aria-label":`Delete file`,children:(0,e.jsx)(d,{})}):null}function I({file:e,status:n,progress:i,progressInset:a,errorMessage:o,colors:s,labels:c}){let l=n===`completed`?100:Math.min(100,Math.round(Math.min(100,Math.max(0,i)))),u=n===`uploading`||n===`paused`||n===`error`,d=a*2,f=`${l}%`,p={width:!u||l===0?`0%`:`calc(${a}px + (100% - ${d}px) * ${l} / 100)`,background:s.progressBackground},m=Math.round(e.size*l/100),h=(0,t.useMemo)(()=>n===`completed`?c.completed:n===`error`?typeof c.error==`function`?c.error(o):c.error:n===`paused`?c.paused(l):c.uploading(l),[n,l,o,c]),g=(0,t.useMemo)(()=>n===`completed`||n===`error`?r(e.size):`${r(m)} of ${r(e.size)}`,[n,m,e.size]),_=n===`uploading`?s.statusUploading:n===`paused`?s.statusPaused:n===`error`?s.statusError:s.statusCompleted;return{displayPct:l,isActive:u,progressWidth:f,bgProgressStyle:p,progressFillStyle:{width:f,background:s.progressFill},statusText:h,sizeText:g,statusColor:_,progressInsetPx:a,showProgressGlow:n===`uploading`}}function L({file:t,status:r=`uploading`,progress:i=0,errorMessage:a,completedVariant:o=`compact`,config:c,onPause:l,onResume:u,onCancel:d,onDelete:p,onChange:m,onDownload:h,onRetry:g,className:_=``,exiting:v=!1}){let y=E(c),b=o===`expanded`&&r===`completed`,x=O(y.colors),{isActive:S,bgProgressStyle:C,progressFillStyle:w,statusText:T,sizeText:D,statusColor:k,progressInsetPx:j,showProgressGlow:M}=I({file:t,status:r,progress:i,progressInset:y.progressInset,errorMessage:a,colors:y.colors,labels:y.labels}),N=n(A,v?`animate-upload-exit`:`animate-upload-enter`,_),P={...x,maxWidth:y.maxWidth,backgroundColor:y.colors.cardBackground,boxShadow:y.colors.cardShadow},L=(0,e.jsxs)(e.Fragment,{children:[y.showBackgroundProgress&&S&&(0,e.jsx)(`div`,{className:`pointer-events-none absolute inset-y-0 left-0 z-0 shadow-[inset_-20px_0_40px_rgba(129,140,248,0.15)]`,style:C}),(0,e.jsxs)(`div`,{className:`relative z-[1] flex items-center gap-3 px-4 pt-4 pb-3`,children:[(0,e.jsx)(s,{filename:t.name,className:`h-12 w-10 shrink-0`}),(0,e.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,e.jsx)(`p`,{className:`mb-1 truncate text-[15px] font-semibold`,style:{color:y.colors.fileName},children:t.name}),(0,e.jsxs)(`p`,{className:`m-0 flex items-center gap-1.5 text-[13px] leading-snug`,"aria-live":`polite`,children:[r===`completed`&&(0,e.jsx)(`span`,{className:`inline-flex h-4 w-4 shrink-0 animate-check-in items-center justify-center rounded-full text-white`,style:{backgroundColor:y.colors.successBadgeBackground},children:(0,e.jsx)(f,{})}),(0,e.jsx)(`span`,{className:`font-medium`,style:{color:k},children:T}),(0,e.jsx)(`span`,{style:{color:y.colors.metaSeparator},children:`•`}),(0,e.jsx)(`span`,{style:{color:y.colors.metaMuted},children:D})]})]}),(0,e.jsx)(F,{status:r,pausable:y.pausable,cancelable:y.cancelable,deletable:y.deletable,retryable:y.retryable,retryLabel:y.labels.retry,onPause:l,onResume:u,onCancel:d,onDelete:p,onRetry:g})]}),y.showProgressBar&&S&&(0,e.jsx)(`div`,{className:`relative z-[1] pb-3.5`,style:{paddingLeft:j,paddingRight:j},children:(0,e.jsx)(`div`,{className:`h-[3px] overflow-hidden`,style:{backgroundColor:y.colors.progressTrack},children:(0,e.jsx)(`div`,{className:n(`h-full rounded-full`,M&&`animate-progress-glow`),style:w})})})]});return b?(0,e.jsxs)(`div`,{className:`w-full overflow-visible bg-transparent shadow-none`,style:{maxWidth:y.maxWidth},children:[(0,e.jsx)(`div`,{className:N,style:{...x,backgroundColor:y.colors.cardBackground,boxShadow:y.colors.cardShadow},children:L}),(0,e.jsxs)(`div`,{className:`mt-2 flex gap-2`,children:[(0,e.jsx)(`button`,{type:`button`,className:`flex-1 cursor-pointer rounded-[10px] border-none px-4 py-2.5 text-sm font-medium transition-colors duration-150`,style:{backgroundColor:y.colors.changeButtonBackground,color:y.colors.changeButtonText},onMouseEnter:e=>{e.currentTarget.style.backgroundColor=y.colors.changeButtonHover},onMouseLeave:e=>{e.currentTarget.style.backgroundColor=y.colors.changeButtonBackground},onClick:m,children:y.labels.change}),(0,e.jsx)(`button`,{type:`button`,className:`flex-1 cursor-pointer rounded-[10px] border-none px-4 py-2.5 text-sm font-medium transition-colors duration-150`,style:{backgroundColor:y.colors.downloadButtonBackground,color:y.colors.downloadButtonText},onMouseEnter:e=>{e.currentTarget.style.backgroundColor=y.colors.downloadButtonHover},onMouseLeave:e=>{e.currentTarget.style.backgroundColor=y.colors.downloadButtonBackground},onClick:h,children:y.labels.download})]})]}):(0,e.jsx)(`div`,{className:N,style:P,children:L})}function R({disabled:t,isDragging:r,labels:i,style:a,dropHandlers:o,onOpen:s,className:c,showClickHint:l=!0}){let u=r&&!t,d=t?i.hintDisabled:u?i.hintActive:i.hint,f=t?a.borderColorDisabled:u?a.borderColorActive:a.borderColor,p=u?a.backgroundActive:a.background,m=t?a.textColorDisabled:u?a.textColorActive:a.textColor;return(0,e.jsxs)(`div`,{role:`button`,tabIndex:t?-1:0,"aria-disabled":t,className:n(`flex cursor-pointer flex-col items-center justify-center border border-dashed px-4 py-6 text-center transition-[border-color,background,color,box-shadow] duration-150`,t&&`cursor-not-allowed opacity-70`,u&&`shadow-[0_0_0_1px_var(--upload-dropzone-border)]`,c),style:{"--upload-dropzone-border":f,minHeight:a.minHeight,borderRadius:a.borderRadius,borderColor:f,background:p,color:m,boxShadow:u?`0 0 0 1px ${f}`:void 0},onClick:()=>{t||s()},onKeyDown:e=>{t||(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),s())},...o,children:[(0,e.jsx)(`p`,{className:`m-0 text-sm`,children:d}),l&&!t&&(0,e.jsx)(`button`,{type:`button`,className:`mt-2 cursor-pointer border-none bg-transparent p-0 text-[13px] underline-offset-2 hover:underline`,style:{color:m},onClick:e=>{e.stopPropagation(),s()},children:i.clickHint})]})}function z(e){let t=[];if(e.items?.length){for(let n of e.items)if(n.kind===`file`){let e=n.getAsFile();e&&t.push(e)}return t}return Array.from(e.files)}function B(e){return e?.types?Array.from(e.types).includes(`Files`):!1}function V({enabled:e,global:n=!1,preventDocumentDrop:r=!0,disabled:i=!1,onDropFiles:a}){let[o,s]=(0,t.useState)(!1),c=(0,t.useRef)(0),l=(0,t.useCallback)(()=>{c.current=0,s(!1)},[]),u=(0,t.useCallback)(t=>{if(i||!e)return;let n=z(t??new DataTransfer);n.length>0&&a(n)},[i,e,a]),d=(0,t.useCallback)(t=>{t.preventDefault(),t.stopPropagation(),!(i||!e||!B(t.dataTransfer))&&(c.current+=1,s(!0))},[i,e]),f=(0,t.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),c.current=Math.max(0,c.current-1),c.current===0&&s(!1)},[]),p=(0,t.useCallback)(t=>{t.preventDefault(),t.stopPropagation(),!(i||!e||!B(t.dataTransfer))&&(t.dataTransfer.dropEffect=`copy`)},[i,e]),m=(0,t.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),l(),u(e.dataTransfer)},[u,l]);return(0,t.useEffect)(()=>{if(!e||!n)return;let t=e=>{i||!B(e.dataTransfer)||(e.preventDefault(),c.current+=1,s(!0))},r=e=>{B(e.dataTransfer)&&(e.preventDefault(),c.current=Math.max(0,c.current-1),c.current===0&&s(!1))},a=e=>{i||!B(e.dataTransfer)||(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`))},o=e=>{e.preventDefault(),l(),u(e.dataTransfer)};return document.addEventListener(`dragenter`,t),document.addEventListener(`dragleave`,r),document.addEventListener(`dragover`,a),document.addEventListener(`drop`,o),()=>{document.removeEventListener(`dragenter`,t),document.removeEventListener(`dragleave`,r),document.removeEventListener(`dragover`,a),document.removeEventListener(`drop`,o)}},[i,e,n,u,l]),(0,t.useEffect)(()=>{if(!e||!r)return;let t=e=>{e.preventDefault()};return document.addEventListener(`dragover`,t),document.addEventListener(`drop`,t),()=>{document.removeEventListener(`dragover`,t),document.removeEventListener(`drop`,t)}},[e,r]),{isDragging:o,dropHandlers:e?{onDragEnter:d,onDragLeave:f,onDragOver:p,onDrop:m}:{}}}function H(e){if(e){if(Array.isArray(e)){let t=e.map(e=>e.trim()).filter(Boolean);return t.length>0?t.join(`,`):void 0}return e.trim()||void 0}}function U(e,t){let n=t.trim().toLowerCase();if(!n)return!0;if(n.startsWith(`.`))return(e.name.includes(`.`)?`.${e.name.split(`.`).pop().toLowerCase()}`:``)===n;if(n.endsWith(`/*`)){let t=n.slice(0,-1);return e.type.toLowerCase().startsWith(t)}return n.includes(`/`)?e.type.toLowerCase()===n:(e.name.includes(`.`)?e.name.split(`.`).pop().toLowerCase():``)===n.replace(/^\./,``)}function W(e,t){let n=H(t);return n?n.split(`,`).some(t=>U(e,t)):!0}function G(e,t){let n=[],r=[];for(let i of e)W(i,t)?n.push(i):r.push(i);return{accepted:n,rejected:r}}function K(e,t,n){if(n==null||n<=0)return{accepted:e,rejected:[]};let r=n-t;return r<=0?{accepted:[],rejected:e}:{accepted:e.slice(0,r),rejected:e.slice(r)}}function q({config:e,currentCount:n=0,onFilesSelected:r,onReject:i}){let a=D(e),o=H(a.accept),s=(0,t.useCallback)(e=>{let t=Array.from(e);if(t.length===0)return;let{accepted:o,rejected:s}=G(t,a.accept);if(s.length>0&&i?.(`invalid-format`,s),o.length===0)return;let{accepted:c,rejected:l}=K(o,n,a.maxCount);l.length>0&&i?.(`max-count`,l),c.length>0&&r(c)},[n,r,i,a.accept,a.maxCount]);return{accept:o,multiple:a.multiple,labels:a.labels,processFiles:s}}function J({config:r,currentCount:i=0,onFilesSelected:a,onReject:o,disabled:s=!1,className:c,buttonClassName:l,dropzoneClassName:u,wrapperClassName:d,children:f}){let p=(0,t.useRef)(null),m=D(r),h=m.drag,{accept:g,multiple:_,processFiles:v}=q({config:r,currentCount:i,onFilesSelected:a,onReject:o}),{isDragging:y,dropHandlers:b}=V({enabled:h.enabled,global:h.global,preventDocumentDrop:h.preventDocumentDrop,disabled:s,onDropFiles:v}),x=()=>{s||p.current?.click()},S=e=>{e.target.files&&v(e.target.files),e.target.value=``},C=h.enabled&&h.showDropzone,w=m.showButton,T=h.global?{}:b,E=h.enabled?b:{},O=w?(0,e.jsx)(`button`,{type:`button`,className:n(l??m.buttonClassName,c),onClick:x,disabled:s,...!C&&h.enabled?E:{},children:m.buttonLabel}):null,k=C?(0,e.jsx)(R,{disabled:s,isDragging:y,labels:h.labels,style:h.style,dropHandlers:T,onOpen:x,showClickHint:!w,className:u}):null;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(`input`,{ref:p,type:`file`,hidden:!0,accept:g,multiple:_,disabled:s,onChange:S}),f?f({open:x,disabled:s,isDragging:y,dropHandlers:E,button:O,dropzone:k}):w&&C?(0,e.jsxs)(`div`,{className:n(`flex flex-col gap-3`,d),children:[(0,e.jsx)(`div`,{className:`flex justify-end`,children:O}),k]}):C?k:O]})}var Y=20;function X({file:e,speed:n=Y,onComplete:r}){let[i,a]=(0,t.useState)(`uploading`),[o,s]=(0,t.useState)(0),c=(0,t.useRef)(null),l=(0,t.useRef)(null),u=(0,t.useRef)(0),d=(0,t.useRef)(`uploading`),f=(0,t.useRef)(r);f.current=r;let p=(0,t.useCallback)(()=>{c.current!==null&&(cancelAnimationFrame(c.current),c.current=null),l.current=null},[]),m=(0,t.useCallback)(e=>{if(d.current!==`uploading`){p();return}l.current===null&&(l.current=e);let t=e-l.current;l.current=e;let r=t/1e3*n,i=Math.min(100,u.current+r);if(u.current=i,s(i),i>=100){d.current=`completed`,a(`completed`),p(),f.current?.();return}c.current=requestAnimationFrame(m)},[n,p]),h=(0,t.useCallback)(()=>{p(),l.current=null,c.current=requestAnimationFrame(m)},[p,m]);return(0,t.useEffect)(()=>(u.current=0,d.current=`uploading`,s(0),a(`uploading`),h(),()=>{p()}),[e,h,p]),{status:i,progress:o,pause:(0,t.useCallback)(()=>{d.current===`uploading`&&(d.current=`paused`,a(`paused`),p())},[p]),resume:(0,t.useCallback)(()=>{d.current===`paused`&&(d.current=`uploading`,a(`uploading`),h())},[h]),cancel:(0,t.useCallback)(()=>{p(),d.current=`uploading`,u.current=0},[p])}}function Z({file:n,completedVariant:r=`compact`,config:i,speed:a,onComplete:o,onCancel:s,onDelete:c,onChange:l,onDownload:u,className:d}){let[f,p]=(0,t.useState)(!1),[m,h]=(0,t.useState)(!0),{status:g,progress:_,pause:v,resume:y,cancel:b}=X({file:n,speed:a,onComplete:o}),x=(0,t.useCallback)(e=>{p(!0),setTimeout(()=>{h(!1),e?.()},250)},[]);return m?(0,e.jsx)(L,{file:n,status:g,progress:_,completedVariant:r,config:i,onPause:v,onResume:y,onCancel:()=>{b(),x(s)},onDelete:()=>x(c),onChange:l,onDownload:u,className:d,exiting:f}):null}function Q({file:e,url:n,method:r=`POST`,fieldName:i=`file`,headers:a,withCredentials:o=!1,extraFields:s,onComplete:c,onError:l}){let[u,d]=(0,t.useState)(`uploading`),[f,p]=(0,t.useState)(0),[m,h]=(0,t.useState)(null),g=(0,t.useRef)(null),_=(0,t.useRef)(c),v=(0,t.useRef)(l);_.current=c,v.current=l;let y=(0,t.useCallback)(()=>{g.current?.abort(),g.current=null},[]),b=(0,t.useCallback)(()=>{y();let t=new XMLHttpRequest;g.current=t;let c=new FormData;c.append(i,e),s&&Object.entries(s).forEach(([e,t])=>{c.append(e,t)}),t.upload.onprogress=e=>{e.lengthComputable&&p(Math.min(100,e.loaded/e.total*100))},t.onload=()=>{if(g.current=null,t.status>=200&&t.status<300){d(`completed`),p(100),h(null),_.current?.(t);return}let e=`HTTP ${t.status}`;d(`error`),h(e),v.current?.(Error(e))},t.onerror=()=>{g.current=null;let e=`Network error`;d(`error`),h(e),v.current?.(Error(e))},t.onabort=()=>{g.current=null},t.open(r,n),t.withCredentials=o,a&&Object.entries(a).forEach(([e,n])=>{t.setRequestHeader(e,n)}),d(`uploading`),p(0),h(null),t.send(c)},[y,s,i,e,a,r,n,o]);return(0,t.useEffect)(()=>(b(),y),[e,n,b,y]),{status:u,progress:f,error:m,cancel:(0,t.useCallback)(()=>{y(),p(0),h(null),d(`uploading`)},[y]),retry:(0,t.useCallback)(()=>{b()},[b])}}function $({file:n,url:r,method:i,fieldName:a,headers:o,withCredentials:s,extraFields:c,completedVariant:l=`compact`,config:u,onComplete:d,onError:f,onCancel:p,onDelete:m,onChange:h,onDownload:g,onRetry:_,className:v}){let[y,b]=(0,t.useState)(!1),[x,S]=(0,t.useState)(!0),{status:C,progress:w,error:T,cancel:E,retry:D}=Q({file:n,url:r,method:i,fieldName:a,headers:o,withCredentials:s,extraFields:c,onComplete:d,onError:f}),O=(0,t.useCallback)(e=>{b(!0),setTimeout(()=>{S(!1),e?.()},250)},[]);return x?(0,e.jsx)(L,{file:n,status:C,progress:w,errorMessage:T??void 0,completedVariant:l,config:{pausable:!1,...u},onCancel:()=>{E(),O(p)},onRetry:()=>{D(),_?.()},onDelete:()=>O(m),onChange:h,onDownload:g,className:v,exiting:y}):null}var ee=Object.assign(L,{Dropzone:R,Picker:J});exports.DARK_THEME_COLORS=m,exports.DEFAULT_DRAG_CONFIG=x,exports.DEFAULT_DROPZONE_STYLE=b,exports.DEFAULT_PICKER_CONFIG=w,exports.DEFAULT_UPLOAD_CONFIG=g,exports.Dropzone=R,exports.UploadDropzone=R,exports.FileTypeIcon=s,exports.LIGHT_THEME_COLORS=h,exports.MockUpload=Z,exports.UploadWithMock=Z,exports.Picker=J,exports.UploadPicker=J,exports.Upload=ee,exports.UploadActions=F,exports.UploadRequest=$,exports.UploadWithUpload=$,exports.applyMaxCount=K,exports.cn=n,exports.filterAcceptedFiles=G,exports.formatBytes=r,exports.getFileExtension=i,exports.isFileAccepted=W,exports.normalizeAccept=H,exports.resolveUploadConfig=E,exports.resolveUploadPickerConfig=D,exports.useMockUpload=X,exports.useUpload=Q,exports.useUploadDisplay=I,exports.useUploadDragDrop=V,exports.useUploadPicker=q;
@@ -0,0 +1,2 @@
1
+ import './styles.css';
2
+ export * from './components/upload';