@react-magma/dropzone 10.0.0-next.1 → 10.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.
- package/dist/fileuploader.js +1 -1
- package/dist/fileuploader.js.map +1 -1
- package/dist/fileuploader.modern.js +3 -3
- package/dist/fileuploader.modern.js.map +1 -1
- package/dist/fileuploader.modern.module.js +1 -1
- package/dist/fileuploader.modern.module.js.map +1 -1
- package/dist/fileuploader.umd.js +1 -1
- package/dist/fileuploader.umd.js.map +1 -1
- package/package.json +4 -4
- package/src/components/dropzone/Dropzone.tsx +1 -1
- package/src/components/dropzone/Preview.tsx +2 -2
package/dist/fileuploader.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("react-magma-icons"),n=require("react-magma-dom"),r=require("react/jsx-runtime"),t=require("react"),o=require("react-dropzone"),i=require("polished");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(t),a={default:{Icon:e.InsertDriveFileIcon,style:{color:n.magma.colors.neutral500}},word:{Icon:e.FileWordIcon,style:{color:n.magma.colors.info500}},excel:{Icon:e.FileExcelIcon,style:{color:n.magma.colors.success500}},powerpoint:{Icon:e.FilePowerpointIcon,style:{color:n.magma.colors.warning500}},pdf:{Icon:e.FilePdfIcon,style:{color:n.magma.colors.danger500}},image:{Icon:e.ImageIcon,style:{color:n.magma.colors.neutral500}},video:{Icon:e.VideocamIcon,style:{color:n.magma.colors.neutral500}},audio:{Icon:e.AudiotrackIcon,style:{color:n.magma.colors.neutral500}},archive:{Icon:e.FileZipIcon,style:{color:n.magma.colors.neutral500}}},c={default:a.default,xlsx:a.excel,xlsm:a.excel,xlsb:a.excel,xltx:a.excel,xls:a.excel,xlt:a.excel,doc:a.word,docx:a.word,docm:a.word,dotx:a.word,dotm:a.word,docb:a.word,pptx:a.powerpoint,pptm:a.powerpoint,ppt:a.powerpoint,pdf:a.pdf,png:a.image,svg:a.image,image:a.image,audio:a.audio,video:a.video,zip:a.archive},u=function(e){var t=e.file,o=e.isInverse,i=t.path,s=void 0===i?"":i,l=t.type,a=(void 0===l?"":l).split("/")[0],u=s.split(".").pop()||"default",d=c[u]||c[a]||c.default;return r.jsx(d.Icon,{size:n.magma.iconSizes.medium,style:o?{}:d.style})};function d(){return d=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},d.apply(this,arguments)}function p(e,n){if(null==e)return{};var r={};for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){if(n.indexOf(t)>=0)continue;r[t]=e[t]}return r}function f(e,n){return n||(n=e.slice(0)),e.raw=n,e}var m,g,x,h,v,y,I,b,j,z,F,S=function(e,n,r){if(void 0===n&&(n=2),void 0===r&&(r="Bytes"),void 0!==e){if(0==e)return"0 "+r;var t=[r,"KB","MB","GB","TB","PB","EB","ZB","YB"],o=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,o)).toFixed(n))+" "+t[o]}},w=["accept","file","isInverse","maxSize","minSize","onDeleteFile","onRemoveFile","testId","thumbnails"],C=["code"],B=n.styled.div(m||(m=f(["\n background-image: ",";\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n"])),function(e){var n=e.file;return"url('"+("preview"in n&&n.preview)+"')"}),D=n.styled.div(g||(g=f(["\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n"]))),k={marginRight:"12px",display:"flex"},O=n.styled.div(x||(x=f(["\n border-top: 1px solid ",";\n padding: 16px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.colors.neutral300},function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),R=n.styled(n.Flex)(h||(h=f(["\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),A=n.styled(n.Flex)(v||(v=f(["\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),E=n.styled(n.Card)(y||(y=f(["\n background-color: none;\n border-color: ",";\n border-width: 1px;\n margin: 10px 0;\n"])),function(e){var n=e.theme;return e.file.errors?e.isInverse?n.colors.danger200:n.colors.danger:n.colors.neutral300}),P=n.styled.span(I||(I=f(["\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n"]))),T=n.styled.span(b||(b=f(["\n display: block;\n"]))),H=t.forwardRef(function(o,i){var s,a=o.accept,c=o.file,f=o.isInverse,m=o.maxSize,g=o.minSize,x=o.onDeleteFile,h=o.onRemoveFile,v=o.thumbnails,y=p(o,w),I=t.useContext(n.ThemeContext),b=l.default.useContext(n.I18nContext),j=n.useIsInverse(f),z=t.useState(r.jsx(e.CloseIcon,{})),F=z[0],H=z[1],M=function(){h&&"function"==typeof h&&h(c)},L=function(){x&&"function"==typeof x&&x(c)},V=function(o){var i=o.status,s=void 0===i?"ready":i,l=t.useState(!1),a=l[0],c=l[1];return t.useEffect(function(){var e=!0;return setTimeout(function(){e&&c(!0)},1e3),function(){e=!1}},[s]),"error"===s||"ready"===s?r.jsx(D,{children:r.jsx(n.IconButton,{onClick:M,variant:n.ButtonVariant.link,color:n.ButtonColor.secondary,"aria-label":b.dropzone.removeFile,icon:r.jsx(e.CloseIcon,{})})}):"pending"===s?r.jsx(D,{children:r.jsx(n.Spinner,{color:j?I.colors.neutral100:I.colors.primary})}):r.jsxs(D,{children:[r.jsx(n.Transition,{isOpen:!a,unmountOnExit:!0,fade:!0,children:r.jsx(e.CheckCircleIcon,{color:j?I.colors.success200:I.colors.success,style:{marginTop:"4px"}})}),r.jsx(n.Transition,{isOpen:a,unmountOnExit:!0,fade:!0,children:r.jsx(n.IconButton,{onClick:L,variant:n.ButtonVariant.link,color:n.ButtonColor.secondary,"aria-label":b.dropzone.deleteFile,icon:r.jsx(e.DeleteIcon,{})})})]})};return t.useEffect(function(){var e;H(r.jsx(V,{status:null==c||null==(e=c.processor)?void 0:e.status}))},[null==c||null==(s=c.processor)?void 0:s.status]),r.jsx(n.InverseContext.Provider,{value:{isInverse:j},children:r.jsxs(E,{isInverse:j,theme:I,file:c,"data-testid":o.testId,ref:i,role:c.errors?"alert":"",children:[r.jsxs(R,d({theme:I,behavior:n.FlexBehavior.container,alignItems:n.FlexAlignItems.center},y,{children:[r.jsx(n.Flex,{behavior:n.FlexBehavior.item,alignItems:n.FlexAlignItems.center,style:k,children:c.errors?r.jsx(e.ErrorIcon,{color:j?I.colors.danger200:I.colors.danger,size:24}):c.preview&&v&&c.type&&c.type.startsWith("image")?r.jsx(B,{role:"img",file:c}):r.jsx(u,{isInverse:j,file:c})}),r.jsx(A,{xs:!0,behavior:n.FlexBehavior.item,theme:I,children:c.name}),c.processor&&"pending"===c.processor.status&&r.jsx(n.Flex,{role:"progressbar",style:{marginLeft:"auto"},behavior:n.FlexBehavior.item,children:c.processor.percent}),r.jsx(n.Flex,{behavior:n.FlexBehavior.item,children:F})]})),c.errors&&r.jsx(O,{theme:I,children:c.errors.slice(0,1).map(function(e){var n=e.code,t=function(e,n,r){var t=Array.isArray(n.accept)&&1===n.accept.length?n.accept[0]:n.accept,o=Array.isArray(t)?"one of "+t.join(", "):t;switch(e.code){case"file-too-large":return d({},e,{message:e.message+" "+S(n.maxSize,2,r)+"."});case"file-too-small":return d({},e,{message:e.message+" "+S(n.minSize,2,r)+"."});case"file-invalid-type":return d({},e,{message:e.message+": "+o});default:return e}}(d({code:n},p(e,C),b.dropzone.errors[n]),{accept:a,minSize:g,maxSize:m},b.dropzone.bytes),o=t.header,i=t.message;return r.jsxs(l.default.Fragment,{children:[r.jsx(P,{style:{color:j?I.colors.danger200:I.colors.danger},children:void 0===o?"":o}),r.jsx(T,{children:i})]},n)})})]})})}),M=["accept","containerStyle","disabled","dropzoneOptions","helperMessage","id","inputSize","isInverse","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","maxSize","minSize","multiple","noDrag","onSendFile","onDeleteFile","onRemoveFile","sendFiles","testId","thumbnails"],L=n.styled(n.Flex)(j||(j=f(["\n flex-direction: column;\n align-items: ",";\n justify-content: ",";\n text-align: ",";\n padding: ",";\n border-radius: ",";\n border: ",";\n\n border-style: ",";\n background-color: ",";\n outline: none;\n transition: ",";\n"])),function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"0px":"24px"},function(e){return e.noDrag?"0px":"4px"},function(e){var n=e.dragState,r=void 0===n?"default":n,t=e.theme;return e.noDrag?"0px":"dragReject"===r||"error"===r?e.isInverse?"1px dashed "+t.colors.danger200:"1px dashed "+t.colors.danger:"dragActive"===r?"1px dashed "+t.colors.primary:"dragAccept"===r?"1px dashed "+t.colors.success:"1px dashed "+t.colors.neutral400},function(e){var n=e.dragState;return"error"===(void 0===n?"default":n)?"solid":"dashed"},function(e){var n=e.theme;return e.noDrag?"transparent":e.isInverse?i.transparentize(.75,n.colors.neutral900):n.colors.neutral200},function(e){return"border "+(e.noDrag?0:".24s")+" ease-in-out"}),V=n.styled.span(z||(z=f(["\n color: ",";\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n"])),function(e){var n=e.theme;return e.isInverse?n.colors.neutral100:n.colors.neutral700}),q=n.styled.div(F||(F=f(["\n color: ",";\n margin: 0 0 24px 0;\n font-size: ",";\n line-height: ",";\n font-weight: 500;\n padding: ",";\n"])),function(e){var n=e.theme;return e.isInverse?n.colors.neutral100:n.colors.neutral700},function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight},function(e){return e.theme.spaceScale.spacing01});exports.Dropzone=l.default.forwardRef(function(i,s){var a=i.accept,c=i.containerStyle,u=i.disabled,f=i.helperMessage,m=i.id,g=i.inputSize,x=i.isInverse,h=i.isLabelVisuallyHidden,v=i.labelStyle,y=i.labelText,I=i.maxFiles,b=i.minFiles,j=i.maxSize,z=i.minSize,F=i.multiple,S=void 0===F||F,w=i.noDrag,C=void 0!==w&&w,B=i.onSendFile,D=i.onDeleteFile,k=i.onRemoveFile,O=i.sendFiles,R=void 0!==O&&O,A=i.testId,E=i.thumbnails,P=void 0===E||E,T=p(i,M),U=l.default.useState([]),G=U[0],W=U[1],Z=l.default.useState(null),K=Z[0],Y=Z[1],J=n.useIsInverse(x),N=l.default.useContext(n.ThemeContext),Q=l.default.useContext(n.I18nContext),X=n.useGenerateId(m),$=l.default.useCallback(function(e,n){W(function(r){return[].concat(r,e.map(function(e){return Object.assign(e,{preview:URL.createObjectURL(e)})}),n.map(function(e){return Object.assign(e.file,{errors:e.errors})}))})},[]),_=o.useDropzone({noClick:!0,disabled:u,multiple:S,maxSize:j,minSize:z,accept:a,onDrop:$,noDrag:C}),ee=_.getInputProps,ne=_.getRootProps,re=_.isDragAccept,te=_.isDragActive,oe=_.isDragReject,ie=_.open,se=_.inputRef;t.useImperativeHandle(s,function(){return se.current});var le=ee({id:X}),ae=K?"error":re?"dragAccept":oe?"dragReject":te?"dragActive":"default",ce=function(e){W(function(n){return n.filter(function(n){return n!==e})}),k&&"function"==typeof k&&k(e)},ue=function(e){W(function(n){return n.filter(function(n){return n!==e})}),D&&"function"==typeof D&&D(e)},de=function(e){W(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{processor:d({},n.processor,{percent:e.percent+"%",status:"pending"})}):n})})},pe=function(e){W(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{processor:d({},n.processor,{percent:"",status:"finished"})}):n})})},fe=function(e){W(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{errors:e.errors,processor:d({},n.processor,{status:"error"})}):n})})};return l.default.useEffect(function(){return function(){G.forEach(function(e){return e.preview&&URL.revokeObjectURL(e.preview)})}},[G]),l.default.useEffect(function(){var e=b&&G.length<b,n=I&&G.length>I;Y(function(e,n){if(null===e)return null;var r=Q.dropzone.errors[e];switch(e){case"too-many-files":return r.message+" "+n.maxFiles+" "+Q.dropzone.files+".";case"too-few-files":return r.message+" "+n.minFiles+" "+Q.dropzone.files+".";default:return r.message}}(n?"too-many-files":e?"too-few-files":null,{minFiles:b,maxFiles:I})),R&&G.length>0&&!n&&!e&&W(function(e){return e.map(function(e){return!e.errors&&!e.processor&&B&&B({file:e,onError:fe,onFinish:pe,onProgress:de}),e})})},[R,G.length,B]),r.jsxs(n.InverseContext.Provider,{value:{isInverse:J},children:[r.jsxs(n.FormFieldContainer,{actionable:!1,containerStyle:c,errorMessage:K,fieldId:X,inputSize:g,isInverse:J,isLabelVisuallyHidden:h,labelStyle:v,labelText:y,messageStyle:{minHeight:0},"data-testid":A,children:[r.jsx(V,{theme:N,isInverse:J,children:f}),r.jsxs(L,d({behavior:n.FlexBehavior.container,dragState:ae,isInverse:J,noDrag:C,theme:N},ne(),T,{testId:A,tabIndex:-1,children:[r.jsx("input",{ref:se,type:le.type,accept:le.accept,autoComplete:le.autoComplete,id:le.id,multiple:le.multiple,onChange:le.onChange,onClick:le.onClick,style:le.style,tabIndex:le.tabIndex,"data-testid":"file-input"}),C?r.jsx(n.Flex,{xs:!0,behavior:n.FlexBehavior.item,children:r.jsx(n.Button,{color:n.ButtonColor.primary,disabled:u,isInverse:J,onClick:ie,style:{margin:0},children:Q.dropzone.browseFiles})}):r.jsxs(n.Flex,{behavior:n.FlexBehavior.item,children:[r.jsx(e.CloudUploadIcon,{"aria-hidden":"true",color:J?N.colors.neutral100:N.colors.neutral500,size:48}),r.jsx(q,{isInverse:J,theme:N,children:Q.dropzone.dragMessage}),r.jsx(n.Button,{color:n.ButtonColor.primary,disabled:u,isInverse:J,onClick:ie,style:{margin:0},variant:n.ButtonVariant.solid,children:Q.dropzone.browseFiles})]})]}))]}),G.map(function(e){return r.jsx(H,{accept:a,file:e,isInverse:J,maxSize:j,minSize:z,onDeleteFile:ue,onRemoveFile:ce,thumbnails:P},e.name)})]})}),exports.FileIcon=u;
|
|
1
|
+
var e=require("react-magma-icons"),n=require("react-magma-dom"),r=require("react/jsx-runtime"),t=require("react"),o=require("react-dropzone"),i=require("polished");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(t),a={default:{Icon:e.InsertDriveFileIcon,style:{color:n.magma.colors.neutral500}},word:{Icon:e.FileWordIcon,style:{color:n.magma.colors.info500}},excel:{Icon:e.FileExcelIcon,style:{color:n.magma.colors.success500}},powerpoint:{Icon:e.FilePowerpointIcon,style:{color:n.magma.colors.warning500}},pdf:{Icon:e.FilePdfIcon,style:{color:n.magma.colors.danger500}},image:{Icon:e.ImageIcon,style:{color:n.magma.colors.neutral500}},video:{Icon:e.VideocamIcon,style:{color:n.magma.colors.neutral500}},audio:{Icon:e.AudiotrackIcon,style:{color:n.magma.colors.neutral500}},archive:{Icon:e.FileZipIcon,style:{color:n.magma.colors.neutral500}}},c={default:a.default,xlsx:a.excel,xlsm:a.excel,xlsb:a.excel,xltx:a.excel,xls:a.excel,xlt:a.excel,doc:a.word,docx:a.word,docm:a.word,dotx:a.word,dotm:a.word,docb:a.word,pptx:a.powerpoint,pptm:a.powerpoint,ppt:a.powerpoint,pdf:a.pdf,png:a.image,svg:a.image,image:a.image,audio:a.audio,video:a.video,zip:a.archive},u=function(e){var t=e.file,o=e.isInverse,i=t.path,s=void 0===i?"":i,l=t.type,a=(void 0===l?"":l).split("/")[0],u=s.split(".").pop()||"default",d=c[u]||c[a]||c.default;return r.jsx(d.Icon,{size:n.magma.iconSizes.medium,style:o?{}:d.style})};function d(){return d=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},d.apply(this,arguments)}function p(e,n){if(null==e)return{};var r={};for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){if(n.indexOf(t)>=0)continue;r[t]=e[t]}return r}function f(e,n){return n||(n=e.slice(0)),e.raw=n,e}var m,g,x,h,v,y,I,b,j,z,F,S=function(e,n,r){if(void 0===n&&(n=2),void 0===r&&(r="Bytes"),void 0!==e){if(0==e)return"0 "+r;var t=[r,"KB","MB","GB","TB","PB","EB","ZB","YB"],o=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,o)).toFixed(n))+" "+t[o]}},w=["accept","file","isInverse","maxSize","minSize","onDeleteFile","onRemoveFile","testId","thumbnails"],C=["code"],B=n.styled.div(m||(m=f(["\n background-image: ",";\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n"])),function(e){var n=e.file;return"url('"+("preview"in n&&n.preview)+"')"}),D=n.styled.div(g||(g=f(["\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n"]))),k={marginRight:"12px",display:"flex"},O=n.styled.div(x||(x=f(["\n border-top: 1px solid ",";\n padding: 16px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.colors.neutral300},function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),R=n.styled(n.Flex)(h||(h=f(["\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),A=n.styled(n.Flex)(v||(v=f(["\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),E=n.styled(n.Card)(y||(y=f(["\n background-color: none;\n border-color: ",";\n border-width: 1px;\n margin: 10px 0;\n"])),function(e){var n=e.theme;return e.file.errors?e.isInverse?n.colors.danger300:n.colors.danger:n.colors.neutral300}),P=n.styled.span(I||(I=f(["\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n"]))),T=n.styled.span(b||(b=f(["\n display: block;\n"]))),H=t.forwardRef(function(o,i){var s,a=o.accept,c=o.file,f=o.isInverse,m=o.maxSize,g=o.minSize,x=o.onDeleteFile,h=o.onRemoveFile,v=o.thumbnails,y=p(o,w),I=t.useContext(n.ThemeContext),b=l.default.useContext(n.I18nContext),j=n.useIsInverse(f),z=t.useState(r.jsx(e.CloseIcon,{})),F=z[0],H=z[1],M=function(){h&&"function"==typeof h&&h(c)},L=function(){x&&"function"==typeof x&&x(c)},V=function(o){var i=o.status,s=void 0===i?"ready":i,l=t.useState(!1),a=l[0],c=l[1];return t.useEffect(function(){var e=!0;return setTimeout(function(){e&&c(!0)},1e3),function(){e=!1}},[s]),"error"===s||"ready"===s?r.jsx(D,{children:r.jsx(n.IconButton,{onClick:M,variant:n.ButtonVariant.link,color:n.ButtonColor.secondary,"aria-label":b.dropzone.removeFile,icon:r.jsx(e.CloseIcon,{})})}):"pending"===s?r.jsx(D,{children:r.jsx(n.Spinner,{color:j?I.colors.neutral100:I.colors.primary})}):r.jsxs(D,{children:[r.jsx(n.Transition,{isOpen:!a,unmountOnExit:!0,fade:!0,children:r.jsx(e.CheckCircleIcon,{color:j?I.colors.success200:I.colors.success,style:{marginTop:"4px"}})}),r.jsx(n.Transition,{isOpen:a,unmountOnExit:!0,fade:!0,children:r.jsx(n.IconButton,{onClick:L,variant:n.ButtonVariant.link,color:n.ButtonColor.secondary,"aria-label":b.dropzone.deleteFile,icon:r.jsx(e.DeleteIcon,{})})})]})};return t.useEffect(function(){var e;H(r.jsx(V,{status:null==c||null==(e=c.processor)?void 0:e.status}))},[null==c||null==(s=c.processor)?void 0:s.status]),r.jsx(n.InverseContext.Provider,{value:{isInverse:j},children:r.jsxs(E,{isInverse:j,theme:I,file:c,"data-testid":o.testId,ref:i,role:c.errors?"alert":"",children:[r.jsxs(R,d({theme:I,behavior:n.FlexBehavior.container,alignItems:n.FlexAlignItems.center},y,{children:[r.jsx(n.Flex,{behavior:n.FlexBehavior.item,alignItems:n.FlexAlignItems.center,style:k,children:c.errors?r.jsx(e.ErrorIcon,{color:j?I.colors.danger300:I.colors.danger,size:24}):c.preview&&v&&c.type&&c.type.startsWith("image")?r.jsx(B,{role:"img",file:c}):r.jsx(u,{isInverse:j,file:c})}),r.jsx(A,{xs:!0,behavior:n.FlexBehavior.item,theme:I,children:c.name}),c.processor&&"pending"===c.processor.status&&r.jsx(n.Flex,{role:"progressbar",style:{marginLeft:"auto"},behavior:n.FlexBehavior.item,children:c.processor.percent}),r.jsx(n.Flex,{behavior:n.FlexBehavior.item,children:F})]})),c.errors&&r.jsx(O,{theme:I,children:c.errors.slice(0,1).map(function(e){var n=e.code,t=function(e,n,r){var t=Array.isArray(n.accept)&&1===n.accept.length?n.accept[0]:n.accept,o=Array.isArray(t)?"one of "+t.join(", "):t;switch(e.code){case"file-too-large":return d({},e,{message:e.message+" "+S(n.maxSize,2,r)+"."});case"file-too-small":return d({},e,{message:e.message+" "+S(n.minSize,2,r)+"."});case"file-invalid-type":return d({},e,{message:e.message+": "+o});default:return e}}(d({code:n},p(e,C),b.dropzone.errors[n]),{accept:a,minSize:g,maxSize:m},b.dropzone.bytes),o=t.header,i=t.message;return r.jsxs(l.default.Fragment,{children:[r.jsx(P,{style:{color:j?I.colors.danger200:I.colors.danger},children:void 0===o?"":o}),r.jsx(T,{children:i})]},n)})})]})})}),M=["accept","containerStyle","disabled","dropzoneOptions","helperMessage","id","inputSize","isInverse","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","maxSize","minSize","multiple","noDrag","onSendFile","onDeleteFile","onRemoveFile","sendFiles","testId","thumbnails"],L=n.styled(n.Flex)(j||(j=f(["\n flex-direction: column;\n align-items: ",";\n justify-content: ",";\n text-align: ",";\n padding: ",";\n border-radius: ",";\n border: ",";\n\n border-style: ",";\n background-color: ",";\n outline: none;\n transition: ",";\n"])),function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"0px":"24px"},function(e){return e.noDrag?"0px":"4px"},function(e){var n=e.dragState,r=void 0===n?"default":n,t=e.theme;return e.noDrag?"0px":"dragReject"===r||"error"===r?e.isInverse?"1px dashed "+t.colors.danger300:"1px dashed "+t.colors.danger:"dragActive"===r?"1px dashed "+t.colors.primary:"dragAccept"===r?"1px dashed "+t.colors.success:"1px dashed "+t.colors.neutral400},function(e){var n=e.dragState;return"error"===(void 0===n?"default":n)?"solid":"dashed"},function(e){var n=e.theme;return e.noDrag?"transparent":e.isInverse?i.transparentize(.75,n.colors.neutral900):n.colors.neutral200},function(e){return"border "+(e.noDrag?0:".24s")+" ease-in-out"}),V=n.styled.span(z||(z=f(["\n color: ",";\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n"])),function(e){var n=e.theme;return e.isInverse?n.colors.neutral100:n.colors.neutral700}),q=n.styled.div(F||(F=f(["\n color: ",";\n margin: 0 0 24px 0;\n font-size: ",";\n line-height: ",";\n font-weight: 500;\n padding: ",";\n"])),function(e){var n=e.theme;return e.isInverse?n.colors.neutral100:n.colors.neutral700},function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight},function(e){return e.theme.spaceScale.spacing01});exports.Dropzone=l.default.forwardRef(function(i,s){var a=i.accept,c=i.containerStyle,u=i.disabled,f=i.helperMessage,m=i.id,g=i.inputSize,x=i.isInverse,h=i.isLabelVisuallyHidden,v=i.labelStyle,y=i.labelText,I=i.maxFiles,b=i.minFiles,j=i.maxSize,z=i.minSize,F=i.multiple,S=void 0===F||F,w=i.noDrag,C=void 0!==w&&w,B=i.onSendFile,D=i.onDeleteFile,k=i.onRemoveFile,O=i.sendFiles,R=void 0!==O&&O,A=i.testId,E=i.thumbnails,P=void 0===E||E,T=p(i,M),U=l.default.useState([]),G=U[0],W=U[1],Z=l.default.useState(null),K=Z[0],Y=Z[1],J=n.useIsInverse(x),N=l.default.useContext(n.ThemeContext),Q=l.default.useContext(n.I18nContext),X=n.useGenerateId(m),$=l.default.useCallback(function(e,n){W(function(r){return[].concat(r,e.map(function(e){return Object.assign(e,{preview:URL.createObjectURL(e)})}),n.map(function(e){return Object.assign(e.file,{errors:e.errors})}))})},[]),_=o.useDropzone({noClick:!0,disabled:u,multiple:S,maxSize:j,minSize:z,accept:a,onDrop:$,noDrag:C}),ee=_.getInputProps,ne=_.getRootProps,re=_.isDragAccept,te=_.isDragActive,oe=_.isDragReject,ie=_.open,se=_.inputRef;t.useImperativeHandle(s,function(){return se.current});var le=ee({id:X}),ae=K?"error":re?"dragAccept":oe?"dragReject":te?"dragActive":"default",ce=function(e){W(function(n){return n.filter(function(n){return n!==e})}),k&&"function"==typeof k&&k(e)},ue=function(e){W(function(n){return n.filter(function(n){return n!==e})}),D&&"function"==typeof D&&D(e)},de=function(e){W(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{processor:d({},n.processor,{percent:e.percent+"%",status:"pending"})}):n})})},pe=function(e){W(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{processor:d({},n.processor,{percent:"",status:"finished"})}):n})})},fe=function(e){W(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{errors:e.errors,processor:d({},n.processor,{status:"error"})}):n})})};return l.default.useEffect(function(){return function(){G.forEach(function(e){return e.preview&&URL.revokeObjectURL(e.preview)})}},[G]),l.default.useEffect(function(){var e=b&&G.length<b,n=I&&G.length>I;Y(function(e,n){if(null===e)return null;var r=Q.dropzone.errors[e];switch(e){case"too-many-files":return r.message+" "+n.maxFiles+" "+Q.dropzone.files+".";case"too-few-files":return r.message+" "+n.minFiles+" "+Q.dropzone.files+".";default:return r.message}}(n?"too-many-files":e?"too-few-files":null,{minFiles:b,maxFiles:I})),R&&G.length>0&&!n&&!e&&W(function(e){return e.map(function(e){return!e.errors&&!e.processor&&B&&B({file:e,onError:fe,onFinish:pe,onProgress:de}),e})})},[R,G.length,B]),r.jsxs(n.InverseContext.Provider,{value:{isInverse:J},children:[r.jsxs(n.FormFieldContainer,{actionable:!1,containerStyle:c,errorMessage:K,fieldId:X,inputSize:g,isInverse:J,isLabelVisuallyHidden:h,labelStyle:v,labelText:y,messageStyle:{minHeight:0},"data-testid":A,children:[r.jsx(V,{theme:N,isInverse:J,children:f}),r.jsxs(L,d({behavior:n.FlexBehavior.container,dragState:ae,isInverse:J,noDrag:C,theme:N},ne(),T,{testId:A,tabIndex:-1,children:[r.jsx("input",{ref:se,type:le.type,accept:le.accept,autoComplete:le.autoComplete,id:le.id,multiple:le.multiple,onChange:le.onChange,onClick:le.onClick,style:le.style,tabIndex:le.tabIndex,"data-testid":"file-input"}),C?r.jsx(n.Flex,{xs:!0,behavior:n.FlexBehavior.item,children:r.jsx(n.Button,{color:n.ButtonColor.primary,disabled:u,isInverse:J,onClick:ie,style:{margin:0},children:Q.dropzone.browseFiles})}):r.jsxs(n.Flex,{behavior:n.FlexBehavior.item,children:[r.jsx(e.CloudUploadIcon,{"aria-hidden":"true",color:J?N.colors.neutral100:N.colors.neutral500,size:48}),r.jsx(q,{isInverse:J,theme:N,children:Q.dropzone.dragMessage}),r.jsx(n.Button,{color:n.ButtonColor.primary,disabled:u,isInverse:J,onClick:ie,style:{margin:0},variant:n.ButtonVariant.solid,children:Q.dropzone.browseFiles})]})]}))]}),G.map(function(e){return r.jsx(H,{accept:a,file:e,isInverse:J,maxSize:j,minSize:z,onDeleteFile:ue,onRemoveFile:ce,thumbnails:P},e.name)})]})}),exports.FileIcon=u;
|
|
2
2
|
//# sourceMappingURL=fileuploader.js.map
|
package/dist/fileuploader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileuploader.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\nimport { magma } from 'react-magma-dom';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint: number = 2,\n bytesLabel: string = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled\n} from 'react-magma-dom';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger200\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.removeFile}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.deleteFile}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger200 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\n\nimport { CloudUploadIcon } from 'react-magma-icons';\nimport { Preview } from './Preview';\nimport { FilePreview, FileError } from './FilePreview';\nimport { transparentize } from 'polished';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger200}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n setFiles((files: FilePreview[]) => [\n ...files,\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ]);\n },\n []\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n const dragState: DragState = errorMessage\n ? 'error'\n : isDragAccept\n ? 'dragAccept'\n : isDragReject\n ? 'dragReject'\n : isDragActive\n ? 'dragActive'\n : 'default';\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onRemoveFile &&\n typeof onRemoveFile === 'function' &&\n onRemoveFile(removedFile);\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onDeleteFile &&\n typeof onDeleteFile === 'function' &&\n onDeleteFile(removedFile);\n };\n\n const setProgress = (props: { percent: number; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${props.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n };\n\n const setFinished = (props: { file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n };\n\n const setError = (props: { errors: FileError[]; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n errors: props.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n setErrorMessage(\n formatError(\n maxFileError\n ? 'too-many-files'\n : minFileError\n ? 'too-few-files'\n : null,\n { minFiles, maxFiles }\n )\n );\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((files: FilePreview[]) => {\n return files.map((file: FilePreview) => {\n !file.errors &&\n !file.processor &&\n onSendFile &&\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n return file;\n });\n });\n }\n }, [sendFiles, files.length, onSendFile]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage theme={theme} isInverse={isInverse}>\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n {files.map((file: FilePreview) => (\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n key={file.name}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n ))}\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","_ref","file","isInverse","_file$path","path","_file$type","type","category","split","extension","pop","_ref2","_jsx","size","iconSizes","medium","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","Thumb","styled","div","_templateObject","_taggedTemplateLiteralLoose","preview","StatusIcons","_templateObject2","IconStyles","marginRight","display","Errors","_templateObject3","theme","neutral300","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_templateObject4","_ref5","_ref6","FileName","_templateObject5","_ref7","_ref8","StyledCard","Card","_templateObject6","_ref9","errors","danger200","danger","ErrorHeader","span","_templateObject7","ErrorMessage","_templateObject8","Preview","forwardRef","props","ref","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","_excluded","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref10","status","_ref10$status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","_file$processor2","InverseContext","Provider","value","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","name","marginLeft","percent","slice","map","_ref11","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_excluded2","_formatError$header","header","Fragment","Container","noDrag","_ref6$dragState","dragState","neutral400","_ref7$dragState","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","_ref12","_ref13","_ref14","spaceScale","spacing01","containerStyle","disabled","helperMessage","defaultId","id","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","_props$multiple","multiple","_props$noDrag","onSendFile","_props$sendFiles","sendFiles","_props$thumbnails","_React$useState","files","setFiles","_React$useState2","errorMessage","setErrorMessage","useGenerateId","onDrop","useCallback","acceptedFiles","rejectedFiles","concat","Object","assign","URL","createObjectURL","_ref15","_useDropzone","useDropzone","noClick","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useImperativeHandle","current","inputProps","removedFile","filter","setProgress","setFinished","setError","forEach","revokeObjectURL","minFileError","maxFileError","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fileuploader.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\nimport { magma } from 'react-magma-dom';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint: number = 2,\n bytesLabel: string = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled\n} from 'react-magma-dom';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger300\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.removeFile}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.deleteFile}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger300 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\n\nimport { CloudUploadIcon } from 'react-magma-icons';\nimport { Preview } from './Preview';\nimport { FilePreview, FileError } from './FilePreview';\nimport { transparentize } from 'polished';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger300}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n setFiles((files: FilePreview[]) => [\n ...files,\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ]);\n },\n []\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n const dragState: DragState = errorMessage\n ? 'error'\n : isDragAccept\n ? 'dragAccept'\n : isDragReject\n ? 'dragReject'\n : isDragActive\n ? 'dragActive'\n : 'default';\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onRemoveFile &&\n typeof onRemoveFile === 'function' &&\n onRemoveFile(removedFile);\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onDeleteFile &&\n typeof onDeleteFile === 'function' &&\n onDeleteFile(removedFile);\n };\n\n const setProgress = (props: { percent: number; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${props.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n };\n\n const setFinished = (props: { file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n };\n\n const setError = (props: { errors: FileError[]; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n errors: props.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n setErrorMessage(\n formatError(\n maxFileError\n ? 'too-many-files'\n : minFileError\n ? 'too-few-files'\n : null,\n { minFiles, maxFiles }\n )\n );\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((files: FilePreview[]) => {\n return files.map((file: FilePreview) => {\n !file.errors &&\n !file.processor &&\n onSendFile &&\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n return file;\n });\n });\n }\n }, [sendFiles, files.length, onSendFile]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage theme={theme} isInverse={isInverse}>\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n {files.map((file: FilePreview) => (\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n key={file.name}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n ))}\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","_ref","file","isInverse","_file$path","path","_file$type","type","category","split","extension","pop","_ref2","_jsx","jsx","size","iconSizes","medium","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral300","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_ref9","errors","danger300","danger","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref10","_ref10$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","jsxs","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","name","marginLeft","percent","slice","map","_ref11","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_formatError$header","header","Fragment","danger200","Container","noDrag","_ref6$dragState","dragState","neutral400","_ref7$dragState","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","_ref12","_ref13","_ref14","spaceScale","spacing01","containerStyle","disabled","helperMessage","defaultId","id","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","_props$multiple","multiple","_props$noDrag","onSendFile","_props$sendFiles","sendFiles","_props$thumbnails","_React$useState","files","setFiles","_React$useState2","errorMessage","setErrorMessage","useGenerateId","onDrop","useCallback","acceptedFiles","rejectedFiles","concat","Object","assign","URL","createObjectURL","_ref15","_useDropzone","useDropzone","noClick","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useImperativeHandle","current","inputProps","removedFile","filter","setProgress","setFinished","setError","forEach","revokeObjectURL","minFileError","maxFileError","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid"],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ import{InsertDriveFileIcon as e,FileWordIcon as r,FileExcelIcon as o,FilePowerpo
|
|
|
41
41
|
border-color: ${0};
|
|
42
42
|
border-width: 1px;
|
|
43
43
|
margin: 10px 0;
|
|
44
|
-
`),({file:e,theme:r,isInverse:o})=>e.errors?o?r.colors.
|
|
44
|
+
`),({file:e,theme:r,isInverse:o})=>e.errors?o?r.colors.danger300:r.colors.danger:r.colors.neutral300),me=h.span(oe||(oe=te`
|
|
45
45
|
display: block;
|
|
46
46
|
|
|
47
47
|
> div {
|
|
@@ -51,7 +51,7 @@ import{InsertDriveFileIcon as e,FileWordIcon as r,FileExcelIcon as o,FilePowerpo
|
|
|
51
51
|
}
|
|
52
52
|
`)),ge=h.span(ie||(ie=te`
|
|
53
53
|
display: block;
|
|
54
|
-
`)),ue=M((e,r)=>{var o;const{accept:i,file:t,isInverse:n,maxSize:l,minSize:s,onDeleteFile:a,onRemoveFile:g,thumbnails:u}=e,h=Y(e,q),v=H(x),O=B.useContext(y),j=b(n),[R,M]=L(C(c,{})),E=()=>{g&&"function"==typeof g&&g(t)},T=()=>{a&&"function"==typeof a&&a(t)},U=({status:e="ready"})=>{const[r,o]=L(!1);return P(()=>{let e=!0;return setTimeout(()=>{e&&o(!0)},1e3),()=>{e=!1}},[e]),"error"===e||"ready"===e?C(le,{children:C(I,{onClick:E,variant:w.link,color:F.secondary,"aria-label":O.dropzone.removeFile,icon:C(c,{})})}):"pending"===e?C(le,{children:C(k,{color:j?v.colors.neutral100:v.colors.primary})}):A(le,{children:[C(D,{isOpen:!r,unmountOnExit:!0,fade:!0,children:C(p,{color:j?v.colors.success200:v.colors.success,style:{marginTop:"4px"}})}),C(D,{isOpen:r,unmountOnExit:!0,fade:!0,children:C(I,{onClick:T,variant:w.link,color:F.secondary,"aria-label":O.dropzone.deleteFile,icon:C(m,{})})})]})};return P(()=>{var e;M(C(U,{status:null==t||null==(e=t.processor)?void 0:e.status}))},[null==t||null==(o=t.processor)?void 0:o.status]),C(z.Provider,{value:{isInverse:j},children:A(pe,{isInverse:j,theme:v,file:t,"data-testid":e.testId,ref:r,role:t.errors?"alert":"",children:[A(ce,W({theme:v,behavior:S.container,alignItems:$.center},h,{children:[C(f,{behavior:S.item,alignItems:$.center,style:se,children:t.errors?C(d,{color:j?v.colors.
|
|
54
|
+
`)),ue=M((e,r)=>{var o;const{accept:i,file:t,isInverse:n,maxSize:l,minSize:s,onDeleteFile:a,onRemoveFile:g,thumbnails:u}=e,h=Y(e,q),v=H(x),O=B.useContext(y),j=b(n),[R,M]=L(C(c,{})),E=()=>{g&&"function"==typeof g&&g(t)},T=()=>{a&&"function"==typeof a&&a(t)},U=({status:e="ready"})=>{const[r,o]=L(!1);return P(()=>{let e=!0;return setTimeout(()=>{e&&o(!0)},1e3),()=>{e=!1}},[e]),"error"===e||"ready"===e?C(le,{children:C(I,{onClick:E,variant:w.link,color:F.secondary,"aria-label":O.dropzone.removeFile,icon:C(c,{})})}):"pending"===e?C(le,{children:C(k,{color:j?v.colors.neutral100:v.colors.primary})}):A(le,{children:[C(D,{isOpen:!r,unmountOnExit:!0,fade:!0,children:C(p,{color:j?v.colors.success200:v.colors.success,style:{marginTop:"4px"}})}),C(D,{isOpen:r,unmountOnExit:!0,fade:!0,children:C(I,{onClick:T,variant:w.link,color:F.secondary,"aria-label":O.dropzone.deleteFile,icon:C(m,{})})})]})};return P(()=>{var e;M(C(U,{status:null==t||null==(e=t.processor)?void 0:e.status}))},[null==t||null==(o=t.processor)?void 0:o.status]),C(z.Provider,{value:{isInverse:j},children:A(pe,{isInverse:j,theme:v,file:t,"data-testid":e.testId,ref:r,role:t.errors?"alert":"",children:[A(ce,W({theme:v,behavior:S.container,alignItems:$.center},h,{children:[C(f,{behavior:S.item,alignItems:$.center,style:se,children:t.errors?C(d,{color:j?v.colors.danger300:v.colors.danger,size:24}):t.preview&&u&&t.type&&t.type.startsWith("image")?C(ne,{role:"img",file:t}):C(K,{isInverse:j,file:t})}),C(de,{xs:!0,behavior:S.item,theme:v,children:t.name}),t.processor&&"pending"===t.processor.status&&C(f,{role:"progressbar",style:{marginLeft:"auto"},behavior:S.item,children:t.processor.percent}),C(f,{behavior:S.item,children:R})]})),t.errors&&C(ae,{theme:v,children:t.errors.slice(0,1).map(e=>{let{code:r}=e,o=Y(e,J);const{header:t="",message:n}=((e,r,o)=>{const i=Array.isArray(r.accept)&&1===r.accept.length?r.accept[0]:r.accept,t=Array.isArray(i)?`one of ${i.join(", ")}`:i;switch(e.code){case"file-too-large":return W({},e,{message:`${e.message} ${Z(r.maxSize,2,o)}.`});case"file-too-small":return W({},e,{message:`${e.message} ${Z(r.minSize,2,o)}.`});case"file-invalid-type":return W({},e,{message:`${e.message}: ${t}`});default:return e}})(W({code:r},o,O.dropzone.errors[r]),{accept:i,minSize:s,maxSize:l},O.dropzone.bytes);return A(B.Fragment,{children:[C(me,{style:{color:j?v.colors.danger200:v.colors.danger},children:t}),C(ge,{children:n})]},r)})})]})})}),he=["accept","containerStyle","disabled","dropzoneOptions","helperMessage","id","inputSize","isInverse","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","maxSize","minSize","multiple","noDrag","onSendFile","onDeleteFile","onRemoveFile","sendFiles","testId","thumbnails"];let fe,ve,xe,ye=e=>e;const be=h(f)(fe||(fe=ye`
|
|
55
55
|
flex-direction: column;
|
|
56
56
|
align-items: ${0};
|
|
57
57
|
justify-content: ${0};
|
|
@@ -64,7 +64,7 @@ import{InsertDriveFileIcon as e,FileWordIcon as r,FileExcelIcon as o,FilePowerpo
|
|
|
64
64
|
background-color: ${0};
|
|
65
65
|
outline: none;
|
|
66
66
|
transition: ${0};
|
|
67
|
-
`),({noDrag:e})=>e?"left":"center",({noDrag:e})=>e?"left":"center",({noDrag:e})=>e?"left":"center",({noDrag:e})=>e?"0px":"24px",({noDrag:e})=>e?"0px":"4px",({dragState:e="default",noDrag:r,theme:o,isInverse:i})=>r?"0px":"dragReject"===e||"error"===e?i?`1px dashed ${o.colors.
|
|
67
|
+
`),({noDrag:e})=>e?"left":"center",({noDrag:e})=>e?"left":"center",({noDrag:e})=>e?"left":"center",({noDrag:e})=>e?"0px":"24px",({noDrag:e})=>e?"0px":"4px",({dragState:e="default",noDrag:r,theme:o,isInverse:i})=>r?"0px":"dragReject"===e||"error"===e?i?`1px dashed ${o.colors.danger300}`:`1px dashed ${o.colors.danger}`:"dragActive"===e?`1px dashed ${o.colors.primary}`:"dragAccept"===e?`1px dashed ${o.colors.success}`:`1px dashed ${o.colors.neutral400}`,({dragState:e="default"})=>"error"===e?"solid":"dashed",({theme:e,noDrag:r,isInverse:o})=>r?"transparent":o?U(.75,e.colors.neutral900):e.colors.neutral200,({noDrag:e})=>`border ${e?0:".24s"} ease-in-out`),ze=h.span(ve||(ve=ye`
|
|
68
68
|
color: ${0};
|
|
69
69
|
display: block;
|
|
70
70
|
font-size: 14px;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileuploader.modern.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\nimport { magma } from 'react-magma-dom';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint: number = 2,\n bytesLabel: string = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled\n} from 'react-magma-dom';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger200\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.removeFile}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.deleteFile}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger200 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\n\nimport { CloudUploadIcon } from 'react-magma-icons';\nimport { Preview } from './Preview';\nimport { FilePreview, FileError } from './FilePreview';\nimport { transparentize } from 'polished';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger200}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n setFiles((files: FilePreview[]) => [\n ...files,\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ]);\n },\n []\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n const dragState: DragState = errorMessage\n ? 'error'\n : isDragAccept\n ? 'dragAccept'\n : isDragReject\n ? 'dragReject'\n : isDragActive\n ? 'dragActive'\n : 'default';\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onRemoveFile &&\n typeof onRemoveFile === 'function' &&\n onRemoveFile(removedFile);\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onDeleteFile &&\n typeof onDeleteFile === 'function' &&\n onDeleteFile(removedFile);\n };\n\n const setProgress = (props: { percent: number; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${props.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n };\n\n const setFinished = (props: { file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n };\n\n const setError = (props: { errors: FileError[]; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n errors: props.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n setErrorMessage(\n formatError(\n maxFileError\n ? 'too-many-files'\n : minFileError\n ? 'too-few-files'\n : null,\n { minFiles, maxFiles }\n )\n );\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((files: FilePreview[]) => {\n return files.map((file: FilePreview) => {\n !file.errors &&\n !file.processor &&\n onSendFile &&\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n return file;\n });\n });\n }\n }, [sendFiles, files.length, onSendFile]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage theme={theme} isInverse={isInverse}>\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n {files.map((file: FilePreview) => (\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n key={file.name}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n ))}\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","file","isInverse","path","type","category","split","extension","pop","_jsx","size","iconSizes","medium","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","Thumb","styled","div","_t","_","preview","StatusIcons","_t2","IconStyles","marginRight","display","Errors","_t3","theme","neutral300","typeScale","size02","fontSize","lineHeight","StyledFlex","Flex","_t4","FileName","_t5","StyledCard","Card","_t6","errors","danger200","danger","ErrorHeader","span","_t7","ErrorMessage","_t8","Preview","forwardRef","props","ref","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","_excluded","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","actions","setActions","useState","CloseIcon","handleRemoveFile","handleDeleteFile","FinishedActions","status","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","_file$processor2","InverseContext","Provider","value","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","name","marginLeft","percent","slice","map","_ref","code","_excluded2","header","message","formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","Fragment","Container","noDrag","dragState","neutral400","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","spaceScale","spacing01","Dropzone","containerStyle","disabled","dropzoneOptions","multiple","helperMessage","id","defaultId","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","onSendFile","sendFiles","files","setFiles","errorMessage","setErrorMessage","useGenerateId","onDrop","useCallback","acceptedFiles","rejectedFiles","Object","assign","URL","createObjectURL","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useDropzone","noClick","useImperativeHandle","current","inputProps","removedFile","filter","setProgress","setFinished","setError","forEach","revokeObjectURL","minFileError","maxFileError","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fileuploader.modern.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\nimport { magma } from 'react-magma-dom';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint: number = 2,\n bytesLabel: string = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled\n} from 'react-magma-dom';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger300\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.removeFile}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.deleteFile}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger300 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\n\nimport { CloudUploadIcon } from 'react-magma-icons';\nimport { Preview } from './Preview';\nimport { FilePreview, FileError } from './FilePreview';\nimport { transparentize } from 'polished';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger300}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n setFiles((files: FilePreview[]) => [\n ...files,\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ]);\n },\n []\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n const dragState: DragState = errorMessage\n ? 'error'\n : isDragAccept\n ? 'dragAccept'\n : isDragReject\n ? 'dragReject'\n : isDragActive\n ? 'dragActive'\n : 'default';\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onRemoveFile &&\n typeof onRemoveFile === 'function' &&\n onRemoveFile(removedFile);\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onDeleteFile &&\n typeof onDeleteFile === 'function' &&\n onDeleteFile(removedFile);\n };\n\n const setProgress = (props: { percent: number; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${props.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n };\n\n const setFinished = (props: { file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n };\n\n const setError = (props: { errors: FileError[]; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n errors: props.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n setErrorMessage(\n formatError(\n maxFileError\n ? 'too-many-files'\n : minFileError\n ? 'too-few-files'\n : null,\n { minFiles, maxFiles }\n )\n );\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((files: FilePreview[]) => {\n return files.map((file: FilePreview) => {\n !file.errors &&\n !file.processor &&\n onSendFile &&\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n return file;\n });\n });\n }\n }, [sendFiles, files.length, onSendFile]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage theme={theme} isInverse={isInverse}>\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n {files.map((file: FilePreview) => (\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n key={file.name}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n ))}\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","file","isInverse","path","type","category","split","extension","pop","_jsx","size","iconSizes","medium","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_","t","Thumb","styled","div","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral300","typeScale","size02","fontSize","lineHeight","StyledFlex","Flex","FileName","StyledCard","Card","errors","danger300","danger","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","actions","setActions","useState","CloseIcon","handleRemoveFile","handleDeleteFile","FinishedActions","status","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","name","marginLeft","percent","slice","map","_ref","code","header","message","formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","Fragment","danger200","Container","noDrag","dragState","neutral400","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","spaceScale","spacing01","Dropzone","containerStyle","disabled","dropzoneOptions","multiple","helperMessage","id","defaultId","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","onSendFile","sendFiles","files","setFiles","errorMessage","setErrorMessage","useGenerateId","onDrop","useCallback","acceptedFiles","rejectedFiles","Object","assign","URL","createObjectURL","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useDropzone","noClick","useImperativeHandle","current","inputProps","removedFile","filter","setProgress","setFinished","setError","forEach","revokeObjectURL","minFileError","maxFileError","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid"],"mappings":"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"}
|