UNPKG

355 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.es.js","sources":["../src/utils/SyntheticFile.ts","../src/utils/files.utils.ts","../src/components/file-item/utils/utils.files.ts","../src/components/file-item/utils/IconFiles/index.ts","../src/components/file-item/utils/mime.files.ts","../src/components/file-item/utils/reader.files.ts","../src/components/dropzone/components/utils/validation.utils.ts","../src/localization/Italian/localization.italian.ts","../src/localization/French/localization.french.ts","../src/localization/English/localization.english.ts","../src/localization/Spanish/localization.spanish.ts","../src/localization/Russian/localization.russian.ts","../src/localization/Portuguese/localization.portuguese.ts","../src/localization/Chinese-simplified/localization.simplifiedChinese.ts","../src/localization/Chinese-traditional/localization.traditionalChinese.ts","../src/localization/FileItem.localization.ts","../src/localization/dropzone.localization.ts","../src/localization/validationError.localization.ts","../node_modules/tslib/tslib.es6.js","../node_modules/@unlimited-react-components/kernel/build/index.es.js","../node_modules/@dynamicss/dynamicss/build/index.es.js","../src/components/dropzone/components/hooks/useDropzoneStyles.ts","../src/components/dropzone/components/Dropzone/DropzoneProps.ts","../src/components/dropzone/components/utils/dropzone-ui.utils.ts","../src/components/icons/utils/utils.ts","../src/components/icons/Info/Info.tsx","../src/components/icons/CheckCircle/CheckCircle.tsx","../src/components/icons/DoDisturb/DoDisturb.tsx","../src/components/icons/Cancel/Cancel.tsx","../src/components/icons/Visibility/Visibility.tsx","../src/components/icons/ViewList/ViewList.tsx","../src/components/icons/ViewGrid/ViewGrid.tsx","../src/components/icons/UploadDone/UploadDone.tsx","../src/components/icons/UploadError/UploadError.tsx","../src/components/icons/Clean/Clean.tsx","../src/components/icons/Play/PlayIcon.tsx","../src/components/icons/UploadingProcess/UploadingProcess.tsx","../src/components/icons/Upload/Upload.tsx","../src/components/dropzone/components/DropzoneHeader/DropzoneHeader.tsx","../src/components/dropzone/components/DropzoneFooter.tsx/DropzoneFooter.tsx","../src/components/file-item/components/FileItemContainer/FileItemContainer.tsx","../src/components/dropzone/components/DropzoneLabel/DropzoneLabel.tsx","../src/components/dropzone/components/utils/dropzone-ui.upload.utils.ts","../src/components/dropzone/components/Dropzone/Dropzone.tsx","../src/components/file-item/components/FileItem/FileItemProps.ts","../src/components/paper/components/PaperProps.ts","../src/components/paper/components/Paper.tsx","../src/utils/loader.tsx","../src/components/file-item/components/FileItemStatus/FileItemStatus.tsx","../src/components/file-item/components/FileItemFullInfoLayer/FileItemFullInfoLayer.tsx","../src/components/file-item/components/FileItemImage/FileItemImage.tsx","../src/components/file-item/components/FileItemMainLayer/FileItemMainLayer.tsx","../src/components/tooltip/components/Tooltip.tsx","../src/components/file-item/components/FileItem/FileItem.tsx","../src/components/image-preview/FullScreenPreview.tsx","../src/components/video-preview/VideoPreview.tsx","../node_modules/@unlimited-react-components/material-button/build/index.es.js","../src/components/input-button/InputButtonProps.ts","../src/components/input-button/InputButton.tsx"],"sourcesContent":["\r\n/**\r\n * A syntetic file creator.\r\n * Very useful for tests\r\n */\r\nexport abstract class SyntheticFile {\r\n /**\r\n * \r\n * @param name the file name\r\n * @param size the file size\r\n * @param type the file type\r\n * @returns \r\n */\r\n static createFile = (name: string, size: number, type: string) => {\r\n const file = new File([], name, { type });\r\n Object.defineProperty(file, \"size\", {\r\n get() {\r\n return size;\r\n },\r\n });\r\n return file;\r\n };\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_aac = (size?: number): File => {\r\n return SyntheticFile.createFile(\"acc_audio-file-with-large-name.aac\", size ? size : 3516516, \"audio/aac\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_abw = (size?: number): File => {\r\n return SyntheticFile.createFile(\"abiword-file-with-large-name.abw\", size ? size : 3516516, \"application/x-abiword\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_freearc = (size?: number): File => {\r\n return SyntheticFile.createFile(\"freearc-file-with-large-name.arc\", size ? size : 3516516, \"application/x-freearc\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_avi = (size?: number): File => {\r\n return SyntheticFile.createFile(\"avi-file-with-large-name.avi\", size ? size : 3516516, \"video/x-msvideo\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_azw = (size?: number): File => {\r\n return SyntheticFile.createFile(\"amazon_kindle_ebook-file-with-large-name.azw\", size ? size : 3516516, \"application/vnd.amazon.ebook\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_octet = (size?: number): File => {\r\n return SyntheticFile.createFile(\"binary_octet_stream-file-with-large-name.bin\", size ? size : 3516516, \"application/octet-stream\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_bmp = (size?: number): File => {\r\n return SyntheticFile.createFile(\"bit_map-file-with-large-name.bmp\", size ? size : 3516516, \"image/bmp\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_bz = (size?: number): File => {\r\n return SyntheticFile.createFile(\"x_bzip-file-with-large-name.bz\", size ? size : 3516516, \"application/x-bzip\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_bz2 = (size?: number): File => {\r\n return SyntheticFile.createFile(\"x_bzip_2-file-with-large-name.bz2\", size ? size : 3516516, \"application/x-bzip2\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_cda = (size?: number): File => {\r\n return SyntheticFile.createFile(\"cd_audio-file-with-large-name.cda\", size ? size : 3516516, \"application/x-cdf\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_csh = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.csh\", size ? size : 3516516, \"application/x-csh\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_css = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.css\", size ? size : 3516516, \"text/css\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_csv = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.csv\", size ? size : 3516516, \"text/csv\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_doc = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.doc\", size ? size : 3516516, \"application/msword\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_docx = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.docx\", size ? size : 3516516, \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_eot = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.eot\", size ? size : 3516516, \"application/vnd.ms-fontobject\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_epub = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.epub\", size ? size : 3516516, \"application/epub+zip\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_gzip = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.gz\", size ? size : 3516516, \"application/gzip\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_gif = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.gif\", size ? size : 3516516, \"image/gif\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_htm = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.htm\", size ? size : 3516516, \"text/html\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_html = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.html\", size ? size : 3516516, \"text/html\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_ico = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.ico\", size ? size : 3516516, \"image/vnd.microsoft.icon\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_icalendar = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.ics\", size ? size : 3516516, \"text/calendar\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_jar = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.jar\", size ? size : 3516516, \"application/java-archive\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_jpeg = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.jpeg\", size ? size : 3516516, \"image/jpeg\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_jpg = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.jpg\", size ? size : 3516516, \"image/jpeg\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_js = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.js\", size ? size : 3516516, \"text/javascript\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_json = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.json\", size ? size : 3516516, \"application/json\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_jsonld = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.jsonld\", size ? size : 3516516, \"application/ld+json\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_mid = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.mid\", size ? size : 3516516, \"audio/midi\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_x_mid = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.mid\", size ? size : 3516516, \"audio/x-midi\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_midi = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.midi\", size ? size : 3516516, \"audio/x-midi\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_x_midi = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.midi\", size ? size : 3516516, \"audio/x-midi\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_mjs = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.mjs\", size ? size : 3516516, \"text/javascript\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_mp3 = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.mp3\", size ? size : 3516516, \"audio/mpeg\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_mp4 = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.mp4\", size ? size : 3516516, \"video/mp4\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_mpeg = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.mpeg\", size ? size : 3516516, \"video/mpeg\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_mpkg = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.mpkg\", size ? size : 3516516, \"application/vnd.apple.installer+xml\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_odp = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.odp\", size ? size : 3516516, \"application/vnd.oasis.opendocument.presentation\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_ods = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.ods\", size ? size : 3516516, \"application/vnd.oasis.opendocument.spreadsheet\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_odt = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.odt\", size ? size : 3516516, \"application/vnd.oasis.opendocument.text\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_oga = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.oga\", size ? size : 3516516, \"audio/ogg\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_ogv = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.ogv\", size ? size : 3516516, \"video/ogg\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_ogx = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.ogx\", size ? size : 3516516, \"application/ogg\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_opus = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.opus\", size ? size : 3516516, \"audio/opus\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_otf = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.otf\", size ? size : 3516516, \"font/otf\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_png = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.png\", size ? size : 3516516, \"image/png\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_pdf = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.pdf\", size ? size : 3516516, \"application/pdf\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_php = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.php\", size ? size : 3516516, \"application/x-httpd-php\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_ppt = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.ppt\", size ? size : 3516516, \"application/vnd.ms-powerpoint\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_pptx = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.pptx\", size ? size : 3516516, \"application/vnd.openxmlformats-officedocument.presentationml.presentation\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_rar = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.rar\", size ? size : 3516516, \"application/vnd.rar\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_rtf = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.rtf\", size ? size : 3516516, \"application/rtf\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_sh = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.sh\", size ? size : 3516516, \"application/x-sh\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_svg = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.svg\", size ? size : 3516516, \"image/svg+xml\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_swf = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.swf\", size ? size : 3516516, \"application/x-shockwave-flash\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_tar = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.tar\", size ? size : 3516516, \"application/x-tar\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_tif = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.tif\", size ? size : 3516516, \"image/tiff\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_tiff = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.tiff\", size ? size : 3516516, \"image/tiff\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_ts = (size?: number): File => {\r\n return SyntheticFile.createFile(\"mp2t_video-file-with-large-name.ts\", size ? size : 3516516, \"video/mp2t\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_ttf = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.ttf\", size ? size : 3516516, \"font/ttf\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_text = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.txt\", size ? size : 3516516, \"text/plain\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_typescript = (size?: number): File => {\r\n return SyntheticFile.createFile(\"typescript-file-with-large-name.ts\", size ? size : 3516516, \"text/plain\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_vsd = (size?: number): File => {\r\n return SyntheticFile.createFile(\"ms_visio-file-with-large-name.vsd\", size ? size : 3516516, \"application/vnd.visio\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_wav = (size?: number): File => {\r\n return SyntheticFile.createFile(\"wav_audio-file-with-large-name.wav\", size ? size : 3516516, \"audio/wav\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_weba = (size?: number): File => {\r\n return SyntheticFile.createFile(\"web_audio-file-with-large-name.weba\", size ? size : 3516516, \"audio/webm\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_webm = (size?: number): File => {\r\n return SyntheticFile.createFile(\"web_video-file-with-large-name.webm\", size ? size : 3516516, \"video/webm\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_webp = (size?: number): File => {\r\n return SyntheticFile.createFile(\"web_image-file-with-large-name.webp\", size ? size : 3516516, \"image/webp\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_woff = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.woff\", size ? size : 3516516, \"font/woff\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_woff2 = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.woff2\", size ? size : 3516516, \"font/woff2\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_xhtml = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.xhtml\", size ? size : 3516516, \"application/xhtml+xml\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_xlsx = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.xls\", size ? size : 3516516, \"application/vnd.ms-excel\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_xls = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.xlsx\", size ? size : 3516516, \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_xml = (size?: number): File => {\r\n return SyntheticFile.createFile(\"xml-file-with-large-name.xml\", size ? size : 3516516, \"application/xml\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_xml_txt = (size?: number): File => {\r\n return SyntheticFile.createFile(\"xml_plain_text-file-with-large-name.xml\", size ? size : 3516516, \"application/xml\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_xul = (size?: number): File => {\r\n return SyntheticFile.createFile(\"test-file-with-large-name.xul\", size ? size : 3516516, \"application/vnd.mozilla.xul+xml\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_zip = (size?: number): File => {\r\n return SyntheticFile.createFile(\"zip-file-with-large-name.zip\", size ? size : 3516516, \"application/zip\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_3gp = (size?: number): File => {\r\n return SyntheticFile.createFile(\"3gp_video-file-with-large-name.3gp\", size ? size : 3516516, \"video/3gpp\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_3gp2 = (size?: number): File => {\r\n return SyntheticFile.createFile(\"3gp2_video-file-with-large-name.3g2\", size ? size : 3516516, \"video/3gpp2\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_3gp_a = (size?: number): File => {\r\n return SyntheticFile.createFile(\"3gp_audio-file-with-large-name.3gp\", size ? size : 3516516, \"audio/3gpp\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_3gp_v = (size?: number): File => {\r\n return SyntheticFile.createFile(\"3gp_audio-file-with-large-name.3gp2\", size ? size : 3516516, \"audio/3gpp2\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_7z = (size?: number): File => {\r\n return SyntheticFile.createFile(\"seven_zip-file-with-large-name.7z\", size ? size : 3516516, \"application/x-7z-compressed\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_python = (size?: number): File => {\r\n return SyntheticFile.createFile(\"python-file-with-large-name.py\", size ? size : 3516516, \"text/plain\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_java = (size?: number): File => {\r\n return SyntheticFile.createFile(\"java-file-with-large-name.java\", size ? size : 3516516, \"text/plain\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_react = (size?: number): File => {\r\n return SyntheticFile.createFile(\"react_jsx-file-with-large-name.jsx\", size ? size : 3516516, \"text/plain\");\r\n }\r\n /**\r\n * \r\n * @param size the file size\r\n * @returns a syntetic File object instance\r\n */\r\n static create_vue = (size?: number): File => {\r\n return SyntheticFile.createFile(\"vue-file-with-large-name.vue\", size ? size : 3516516, \"text/plain\");\r\n }\r\n /**\r\n * Creates an array of fake (synthetic) files\r\n * @param size the file size for all synthetic files\r\n * @returns an array of all file icon preview supported files\r\n */\r\n static createFileListMiscelanious = (size?: number): File[] => {\r\n\r\n let listFile: File[] = [];\r\n\r\n listFile.push(SyntheticFile.create_aac(size));\r\n listFile.push(SyntheticFile.create_abw(size));\r\n listFile.push(SyntheticFile.create_freearc(size));\r\n listFile.push(SyntheticFile.create_avi(size));\r\n listFile.push(SyntheticFile.create_azw(size));\r\n listFile.push(SyntheticFile.create_octet(size));\r\n listFile.push(SyntheticFile.create_bmp(size));\r\n listFile.push(SyntheticFile.create_bz(size));\r\n listFile.push(SyntheticFile.create_bz2(size));\r\n listFile.push(SyntheticFile.create_cda(size));\r\n listFile.push(SyntheticFile.create_csh(size));\r\n listFile.push(SyntheticFile.create_css(size));\r\n listFile.push(SyntheticFile.create_csv(size));\r\n listFile.push(SyntheticFile.create_doc(size));\r\n listFile.push(SyntheticFile.create_docx(size));\r\n listFile.push(SyntheticFile.create_eot(size));\r\n listFile.push(SyntheticFile.create_epub(size));\r\n listFile.push(SyntheticFile.create_gzip(size));\r\n listFile.push(SyntheticFile.create_gif(size));\r\n listFile.push(SyntheticFile.create_htm(size));\r\n listFile.push(SyntheticFile.create_html(size));\r\n listFile.push(SyntheticFile.create_ico(size));\r\n listFile.push(SyntheticFile.create_icalendar(size));\r\n listFile.push(SyntheticFile.create_jar(size));\r\n listFile.push(SyntheticFile.create_jpeg(size));\r\n listFile.push(SyntheticFile.create_jpg(size));\r\n listFile.push(SyntheticFile.create_js(size));\r\n listFile.push(SyntheticFile.create_json(size));\r\n listFile.push(SyntheticFile.create_jsonld(size));\r\n listFile.push(SyntheticFile.create_mid(size));\r\n listFile.push(SyntheticFile.create_midi(size));\r\n listFile.push(SyntheticFile.create_x_mid(size));\r\n listFile.push(SyntheticFile.create_x_midi(size));\r\n listFile.push(SyntheticFile.create_mjs(size));\r\n listFile.push(SyntheticFile.create_mp3(size));\r\n listFile.push(SyntheticFile.create_mp4(size));\r\n listFile.push(SyntheticFile.create_mpeg(size));\r\n listFile.push(SyntheticFile.create_mpkg(size));\r\n listFile.push(SyntheticFile.create_odp(size));\r\n listFile.push(SyntheticFile.create_ods(size));\r\n listFile.push(SyntheticFile.create_odt(size));\r\n listFile.push(SyntheticFile.create_oga(size));\r\n listFile.push(SyntheticFile.create_ogv(size));\r\n listFile.push(SyntheticFile.create_ogx(size));\r\n listFile.push(SyntheticFile.create_opus(size));\r\n listFile.push(SyntheticFile.create_otf(size));\r\n listFile.push(SyntheticFile.create_png(size));\r\n listFile.push(SyntheticFile.create_pdf(size));\r\n listFile.push(SyntheticFile.create_php(size));\r\n listFile.push(SyntheticFile.create_ppt(size));\r\n listFile.push(SyntheticFile.create_pptx(size));\r\n listFile.push(SyntheticFile.create_rar(size));\r\n listFile.push(SyntheticFile.create_rtf(size));\r\n listFile.push(SyntheticFile.create_sh(size));\r\n listFile.push(SyntheticFile.create_svg(size));\r\n listFile.push(SyntheticFile.create_swf(size));\r\n listFile.push(SyntheticFile.create_tar(size));\r\n listFile.push(SyntheticFile.create_tif(size));\r\n listFile.push(SyntheticFile.create_tiff(size));\r\n listFile.push(SyntheticFile.create_ts(size));\r\n listFile.push(SyntheticFile.create_ttf(size));\r\n listFile.push(SyntheticFile.create_text(size));\r\n listFile.push(SyntheticFile.create_typescript(size));\r\n listFile.push(SyntheticFile.create_vsd(size));\r\n listFile.push(SyntheticFile.create_wav(size));\r\n listFile.push(SyntheticFile.create_weba(size));\r\n listFile.push(SyntheticFile.create_webm(size));\r\n listFile.push(SyntheticFile.create_webp(size));\r\n listFile.push(SyntheticFile.create_woff(size));\r\n listFile.push(SyntheticFile.create_woff2(size));\r\n listFile.push(SyntheticFile.create_xhtml(size));\r\n listFile.push(SyntheticFile.create_xlsx(size));\r\n listFile.push(SyntheticFile.create_xls(size));\r\n listFile.push(SyntheticFile.create_xml(size));\r\n listFile.push(SyntheticFile.create_xml_txt(size));\r\n listFile.push(SyntheticFile.create_xul(size));\r\n listFile.push(SyntheticFile.create_zip(size));\r\n //listFile.push(SyntheticFile.create_3gp(size));\r\n //listFile.push(SyntheticFile.create_3gp2(size));\r\n //listFile.push(SyntheticFile.create_3gp_a(size));\r\n //listFile.push(SyntheticFile.create_3gp_v(size));\r\n //listFile.push(SyntheticFile.create_7z(size));\r\n listFile.push(SyntheticFile.create_python(size));\r\n listFile.push(SyntheticFile.create_java(size));\r\n listFile.push(SyntheticFile.create_react(size));\r\n listFile.push(SyntheticFile.create_vue(size));\r\n\r\n return listFile;\r\n }\r\n}","import { SyntheticFile } from \"./SyntheticFile\";\r\n\r\n/**\r\n * Creates a synthetic pdf File object instance\r\n * @param name \r\n * @param size \r\n * @param type \r\n * @returns \r\n */\r\nexport const createPDF = (\r\n name = \"pdf-file-with-large-name.pdf\",\r\n size = 455005,\r\n type = \"application/pdf\"\r\n): File => {\r\n return SyntheticFile.createFile(name, size, type);\r\n}\r\n\r\n/**\r\n * Creates a synthetic word File object instance\r\n * @param name \r\n * @param size \r\n * @param type \r\n * @returns \r\n */\r\nexport const createWord = (\r\n name = \"word-file-with-large-name.docx\",\r\n size = 4555,\r\n type = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\r\n): File => {\r\n return SyntheticFile.createFile(name, size, type);\r\n}\r\n\r\n/**\r\n * Create a list of synthetic files with different mime types\r\n * @param size the file size for each synthetic file\r\n * @returns a list of synthetic file\r\n */\r\nexport const createListOfMultiTypeFile = (size?: number): File[] => {\r\n return SyntheticFile.createFileListMiscelanious(size);\r\n}\r\n/**\r\n * Creates a synthetic file.\r\n * By default, creates a png image file\r\n * @param name the file name to show. By default is set to \"png-image-file-with-large-name.png\"\r\n * @param size the size in bytes of the file. By default this value is set to 455555\r\n * @param type the mime type of the file. By default is set to \"image/png\"\r\n * @returns \r\n */\r\nexport const createSyntheticFile = (\r\n name = \"png-image-file-with-large-name.png\",\r\n size = 455555,\r\n type = \"image/png\",\r\n): File => {\r\n return SyntheticFile.createFile(name, size, type);\r\n}","/**\r\n * @param size the size of the file in bytes, by default 4555 bytes\r\n * @returns a PDF file\r\n */\r\nexport const createDPF = (size?: number): File => {\r\n return createFile(\r\n \"test-file-with-large-name.pdf\",\r\n size ? size : 4555,\r\n \"application/pdf\"\r\n );\r\n}\r\n/**\r\n * @param size the size of the file in bytes, by default 4555 bytes\r\n * @returns a word file\r\n */\r\nexport const createWord = (size?: number): File => {\r\n return createFile(\r\n \"test-file-with-large-name.pdf\",\r\n size ? size : 4555,\r\n \"application/pdf\"\r\n );\r\n}\r\n/**\r\n * Creates a dummy pdf file with an specific size in bytes\r\n * if not given, size will be 15 bytes\r\n * @param amount the amount of items in the array of files\r\n * @returns a pdf file\r\n */\r\nexport const createListOfPDF = (amount?: number): File[] => {\r\n const quantity = amount ? amount : 15;\r\n let listFile: File[] = [];\r\n for (let i = 0; i < quantity; i++) {\r\n listFile.push(createDPF());\r\n }\r\n return listFile;\r\n}\r\n/**\r\n * Gives a XX.XX format in Bytes KB, MB, GB or TB\r\n * @param fileSize file size to give format in Bytes\r\n */\r\nexport const fileSizeFormater = (fileSize?: number): string => {\r\n let result = \"\";\r\n if (!fileSize) {\r\n return 0 + \" Bytes\";\r\n }\r\n if (fileSize < 1024) {\r\n result = fileSize + \" Bytes\"\r\n } else {\r\n //KB\r\n if (fileSize < 1024 * 1024) {\r\n result = (fileSize / 1024).toFixed(2) + \" KB\";\r\n } else if (fileSize < 1024 * 1024 * 1024) {\r\n result = ((fileSize / 1024) / 1024).toFixed(2) + \" MB\";\r\n } else if (fileSize < 1024 * 1024 * 1024 * 1024) {\r\n result = (((fileSize / 1024) / 1024) / 1024).toFixed(2) + \" GB\";\r\n } else {\r\n result = ((((fileSize / 1024) / 1024) / 1024) / 1024).toFixed(2) + \" TB\";\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Looks for the first file extension\r\n * @param fileName file name\r\n * @returns the file name extension\r\n */\r\nexport const getExt = (fileName: string): string => {\r\n const re = /(?:\\.([^.]+))?$/;\r\n const result = re.exec(fileName);\r\n if (result) {\r\n return result[1];\r\n } else {\r\n return \"\";\r\n }\r\n\r\n};\r\n/**\r\n * Basic function to create dummy files for tests\r\n * @param name the file name\r\n * @param size the file size in bytes\r\n * @param type the file type\r\n * @returns a file object\r\n */\r\nconst createFile = (name: string, size: number, type: string) => {\r\n const file = new File([], name, { type });\r\n Object.defineProperty(file, \"size\", {\r\n get() {\r\n return size;\r\n },\r\n });\r\n return file;\r\n};\r\nconst MAX_SIZE_WORD = 30;\r\n/**\r\n * \r\n * @param word \r\n * @returns \r\n */\r\nexport const shrinkWord = (word=\"\"): string => {\r\n let newWord = word;\r\n if (word.length >= MAX_SIZE_WORD) {\r\n newWord = word.slice(0, 13) + \"...\" + word.slice(-8);\r\n }\r\n return newWord;\r\n};","/* import aac from \"./aac.png\";\r\nimport accdb from \"./accdb.png\";\r\nimport abw from \"./abw.png\";\r\nimport freearc from \"./freearc.png\";\r\nimport avi from \"./avi.png\";\r\nimport azw from \"./azw.png\";\r\nimport octet from \"./octet.png\";\r\nimport bmp from \"./bmp.png\";\r\nimport bz from \"./bz.png\";\r\nimport bz2 from \"./bz2.png\";\r\nimport cda from \"./cda.png\";\r\nimport csh from \"./csh.png\";\r\nimport css from \"./css.png\";\r\nimport csv from \"./csv.png\";\r\nimport docx from \"./docx.png\";\r\nimport drawio from \"./drawio.png\";\r\nimport eot from \"./eot.png\";\r\nimport epub from \"./epub.png\";\r\nimport gzip from \"./gzip.png\";\r\nimport gif from \"./gif.png\";\r\nimport html from \"./html.png\";\r\n//import ico from \"./ico.png\";\r\nimport icalendar from \"./icalendar.png\";\r\nimport jar from \"./java.png\";\r\nimport jpeg from \"./jpeg.png\";\r\nimport javascript from \"./javascript.png\";\r\nimport json from \"./json.png\";\r\nimport jsonld from \"./jsonld.png\";\r\nimport midi from \"./midi.png\";\r\n//import mjs from \"./js.png\";\r\nimport mp3 from \"./mp3.png\";\r\nimport mp4 from \"./mp4.png\";\r\nimport mpeg from \"./mpeg.png\";\r\nimport mpkg from \"./mpkg.png\";\r\nimport odp from \"./odp.png\";\r\nimport ods from \"./ods.png\";\r\nimport odt from \"./odt.png\";\r\n//import oga from \"./oga.png\";\r\n//import ogv from \"./ogv.png\";\r\n//import ogx from \"./ogx.png\";\r\nimport opus from \"./opus.png\";\r\nimport otf from \"./otf.png\";\r\nimport png from \"./png.png\";\r\nimport pdf from \"./pdf.png\";\r\nimport php from \"./php.png\";\r\nimport pptx from \"./pptx.png\";\r\nimport psd from \"./psd.png\";\r\nimport rar from \"./rar.png\";\r\nimport rtf from \"./rtf.png\";\r\nimport sh from \"./sh.png\";\r\n//import svg from \"./svg.png\";\r\nimport sass from \"./sass.png\";\r\nimport swf from \"./swf.png\";\r\nimport tar from \"./rar.png\";\r\nimport tiff from \"./tiff.png\";\r\nimport ttf from \"./ttf.png\";\r\n//import ts from \"./ts.png\";\r\nimport typescript from \"./typescript.png\";\r\nimport text from \"./text.png\";\r\nimport vsd from \"./vsd.png\";\r\nimport wav from \"./wav.png\";\r\nimport weba from \"./webm.png\";\r\nimport webm from \"./webm.png\";\r\nimport webp from \"./webp.png\";\r\nimport wma from \"./wma.png\";\r\nimport wmv from \"./wmv.png\";\r\nimport woff from \"./woff.png\";\r\n//import xhtml from \"./xhtml.png\";\r\nimport xlsx from \"./xlsx.png\";\r\nimport xml from \"./xml.png\";\r\nimport xul from \"./xul.png\";\r\nimport zip from \"./zip.png\";\r\n//import threegp from \"./3gp.png\";\r\nimport sevenzip from \"./7z.png\";\r\nimport python from \"./python.png\";\r\nimport java from \"./java.png\";\r\nimport react from \"./react.png\";\r\nimport vue from \"./vue.png\"; */\r\n\r\n\r\n\r\nexport const sevenzip = \"https://user-images.githubusercontent.com/43678736/132086517-72a51a12-e403-4675-bfd7-22c23affa730.png\";\r\nexport const aac = \"https://user-images.githubusercontent.com/43678736/132086518-7026d4f1-ea16-4ed0-89fd-37c1aa8ac3ed.png\";\r\nexport const abw = \"https://user-images.githubusercontent.com/43678736/132086519-863c63b4-917e-4471-94ff-7e15651cc14b.png\";\r\nexport const accdb = \"https://user-images.githubusercontent.com/43678736/132086520-9bc6aa3b-51c9-4da2-9ef7-349162b86d0b.png\";\r\nexport const avi = \"https://user-images.githubusercontent.com/43678736/132086521-dbd6cf0d-d4d7-4b92-bb26-17e8a51a9383.png\";\r\nexport const azw = \"https://user-images.githubusercontent.com/43678736/132086522-070f48e8-78a8-4294-8dbb-aab81525e164.png\";\r\nexport const bmp = \"https://user-images.githubusercontent.com/43678736/132086595-90ab7f90-f87e-4900-94d9-d0b26745df48.png\";\r\nexport const bz = \"https://user-images.githubusercontent.com/43678736/132086597-e285ad5c-613a-4679-a270-493e5be4ffd9.png\";\r\nexport const bz2 = \"https://user-images.githubusercontent.com/43678736/132086598-623c410a-084a-4395-a448-211b2ff61cfe.png\";\r\nexport const c = \"https://user-images.githubusercontent.com/43678736/132086599-7a5cd692-b4df-45f5-80d9-384cb3e0c314.png\";\r\nexport const cda = \"https://user-images.githubusercontent.com/43678736/132086600-8b70a007-512d-4252-9c66-eabd3ddd6573.png\";\r\nexport const csh = \"https://user-images.githubusercontent.com/43678736/132086601-e62e5d1a-d8a2-4475-a14f-85922cec9272.png\";\r\nexport const css = \"https://user-images.githubusercontent.com/43678736/132086602-4c772934-f608-4f01-8459-c4622cee8ad5.png\";\r\nexport const csv = \"https://user-images.githubusercontent.com/43678736/132086604-b5b019fe-572e-477e-92c2-3769a48a1304.png\";\r\n//export const default = \"https://user-images.githubusercontent.com/43678736/132086605-d03db898-045c-477e-bae6-156699833eb0.png\";\r\nexport const docx = \"https://user-images.githubusercontent.com/43678736/132086606-715ccb66-4702-4f7d-9b09-ac93ba17b643.png\";\r\nexport const docx2 = \"https://user-images.githubusercontent.com/43678736/132086607-a246b386-52c9-4fe1-a7e4-204894e6722d.png\";\r\nexport const drawio = \"https://user-images.githubusercontent.com/43678736/132086608-bcae9d57-8e54-488c-90c4-4952ae530b5e.png\";\r\nexport const dw = \"https://user-images.githubusercontent.com/43678736/132086616-0c7842d6-d20e-4ede-988b-3dd063a4de8d.png\";\r\nexport const eml = \"https://user-images.githubusercontent.com/43678736/132086617-1e351075-ffaf-4b81-a1fe-0b7b338772a2.png\";\r\nexport const eot = \"https://user-images.githubusercontent.com/43678736/132086618-397d6bd2-9fda-43ed-a135-cb40388c35af.png\";\r\nexport const eps = \"https://user-images.githubusercontent.com/43678736/132086619-9daf0b61-dbb0-4d47-8a12-9fba13b88856.png\";\r\nexport const epub = \"https://user-images.githubusercontent.com/43678736/132086620-2586ba40-c583-4589-b1a4-8bb5b258b44d.png\";\r\nexport const freearc = \"https://user-images.githubusercontent.com/43678736/132086621-3b95fb64-2533-4ccc-abcd-bd2beba572e9.png\";\r\nexport const gif = \"https://user-images.githubusercontent.com/43678736/132086622-af705a0c-2b25-4ba7-8ab6-bd69ec97f7e2.png\";\r\nexport const gzip = \"https://user-images.githubusercontent.com/43678736/132086624-89141a46-64e4-4fa0-bf69-54a0eb4d48c9.png\";\r\nexport const html = \"https://user-images.githubusercontent.com/43678736/132086625-1b8f2652-1de0-4475-8c12-7da4a9973ffb.png\";\r\nexport const icalendar = \"https://user-images.githubusercontent.com/43678736/132086626-38699705-1e6f-4bca-984b-03167b236faa.png\";\r\nexport const ind = \"https://user-images.githubusercontent.com/43678736/132086627-2f24067a-00bc-424a-af36-349a9ba14b6c.png\";\r\nexport const ini = \"https://user-images.githubusercontent.com/43678736/132086649-20c9c9e6-8e63-4d87-9b8e-8fe8eba12ada.png\";\r\nexport const java = \"https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png\";\r\nexport const jar = \"https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png\";\r\nexport const javascript = \"https://user-images.githubusercontent.com/43678736/132086652-4562942e-aaea-466c-968f-380fffabf3f9.png\";\r\nexport const jpeg = \"https://user-images.githubusercontent.com/43678736/132086653-0487e7e2-1ee3-49e2-8cfe-3e20f1f7490a.png\";\r\nexport const jsf = \"https://user-images.githubusercontent.com/43678736/132086654-c510bd8f-8de7-4afe-8c20-cc810b004b07.png\";\r\nexport const json = \"https://user-images.githubusercontent.com/43678736/132086656-6e96c815-e4e2-4ffd-9d71-57e9cc2450bc.png\";\r\nexport const jsonld = \"https://user-images.githubusercontent.com/43678736/132086658-5d27d3c2-394f-43fb-b512-9b414a257875.png\";\r\nexport const midi = \"https://user-images.githubusercontent.com/43678736/132086659-98f3ef6e-b9f3-4b6d-b18f-469b5334ba27.png\";\r\nexport const mov = \"https://user-images.githubusercontent.com/43678736/132086660-adcecedd-56b4-4286-8b0f-69417f77e961.png\";\r\nexport const mp3 = \"https://user-images.githubusercontent.com/43678736/132086661-a5484553-06c7-4ffa-a8f9-96b57b1b0344.png\";\r\nexport const mp4 = \"https://user-images.githubusercontent.com/43678736/132086662-05ad1597-d5e5-4efa-833e-2876e966a745.png\";\r\nexport const mpeg = \"https://user-images.githubusercontent.com/43678736/132086663-90c58955-f7fb-4bdb-ac53-92667d16d4a3.png\";\r\nexport const mpkg = \"https://user-images.githubusercontent.com/43678736/132086664-9a7530e7-6d78-4ef3-a176-20cf7f57b555.png\";\r\nexport const octet = \"https://user-images.githubusercontent.com/43678736/132086666-ab3c505d-b2c0-4177-9a06-aed5d9c39ee4.png\";\r\nexport const odp = \"https://user-images.githubusercontent.com/43678736/132086667-6c7dcbcc-8d83-41a2-8e0a-85b09e2791ae.png\";\r\nexport const ods = \"https://user-images.githubusercontent.com/43678736/132086668-9f246e91-cf2e-49cf-9617-e1fbb71abbbb.png\";\r\nexport const odt = \"https://user-images.githubusercontent.com/43678736/132086669-46113762-84d1-4b32-9441-b0138ce17a5d.png\";\r\n\r\n//ogg type\r\nexport const oga = \"https://user-images.githubusercontent.com/43678736/145835364-2054509d-3448-4d34-921f-73dd6e297fc7.png\";\r\nexport const ogv = \"https://user-images.githubusercontent.com/43678736/145835367-19172bf8-cd5a-4cbe-b512-d0de1d91f269.png\";\r\nexport const ogx = \"https://user-images.githubusercontent.com/43678736/145835373-a57ef0f5-3968-483b-9f55-6d67e7f1dcea.png\";\r\n\r\nexport const opus = \"https://user-images.githubusercontent.com/43678736/132086670-0f96e770-cedc-4635-a5f9-cf97894c1d7a.png\";\r\nexport const otf = \"https://user-images.githubusercontent.com/43678736/132086671-02ad35ef-ec3a-4a65-abd5-5bf794dfcf7b.png\";\r\nexport const pdf = \"https://user-images.githubusercontent.com/43678736/132086672-3a856fda-823d-4997-b802-c7c640e6ef44.png\";\r\nexport const php = \"https://user-images.githubusercontent.com/43678736/132086673-0c4409ab-754e-4619-8cfa-179d0ccf1bd9.png\";\r\nexport const png = \"https://user-images.githubusercontent.com/43678736/132086674-fdb56d02-5845-49b7-8462-6357bc963464.png\";\r\nexport const pptx = \"https://user-images.githubusercontent.com/43678736/132086675-c879645d-acb4-41a6-ab3c-4e6c2048badb.png\";\r\nexport const pptx2 = \"https://user-images.githubusercontent.com/43678736/132086676-6de1bbd7-764f-4197-9aa4-405a60ce6734.png\";\r\nexport const proj = \"https://user-images.githubusercontent.com/43678736/132086683-3dc0a8b8-72f8-4fa1-a08a-fcfd75b465e1.png\";\r\nexport const psd = \"https://user-images.githubusercontent.com/43678736/132086685-4e327c4c-a409-4b83-b36a-8d88936b314b.png\";\r\nexport const pst = \"https://user-images.githubusercontent.com/43678736/132086686-3888e43a-5abf-41f7-9940-4b86e436521f.png\";\r\nexport const publisher = \"https://user-images.githubusercontent.com/43678736/132086687-d92b56ff-f7f7-4be7-bbf4-47b8a33f4c6f.png\";\r\nexport const python = \"https://user-images.githubusercontent.com/43678736/132086688-8e82fae4-3a9b-49c0-bf99-77189525514c.png\";\r\nexport const tar = \"https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png\";\r\nexport const rar = \"https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png\";\r\nexport const react = \"https://user-images.githubusercontent.com/43678736/132086691-d472576b-ec6a-4332-acd2-dd6a00b72952.png\";\r\nexport const richtextformat = \"https://user-images.githubusercontent.com/43678736/132086692-df6e3518-2e6a-4553-883d-e21694980449.png\";\r\nexport const rtf = \"https://user-images.githubusercontent.com/43678736/132086693-9d43571e-0c86-438f-b247-e2cb42e19e06.png\";\r\nexport const sass = \"https://user-images.githubusercontent.com/43678736/132086694-4e661d6a-1118-441e-8bc3-c52fcb2133b6.png\";\r\nexport const settings = \"https://user-images.githubusercontent.com/43678736/132086696-0dd21f83-b9fc-490c-9ed5-bd88151dc9bb.png\";\r\nexport const sh = \"https://user-images.githubusercontent.com/43678736/132086697-1d82d724-35b6-4f06-847a-3c59a5deda6e.png\";\r\n\r\nexport const swf = \"https://user-images.githubusercontent.com/43678736/132086698-19384230-dbd7-4e05-bc69-ef4537b6aae3.png\";\r\nexport const text = \"https://user-images.githubusercontent.com/43678736/132086699-5993a482-04f4-4915-b105-9037f527cf61.png\";\r\nexport const tiff = \"https://user-images.githubusercontent.com/43678736/132086700-c23461c8-6819-46e1-aecd-0a1f8d3507bb.png\";\r\nexport const ttf = \"https://user-images.githubusercontent.com/43678736/132086701-c8044c09-8d95-4af1-9410-66761001d7da.png\";\r\nexport const typescript = \"https://user-images.githubusercontent.com/43678736/132086702-59294337-ed99-4302-badd-316b2c1ff62f.png\";\r\nexport const url = \"https://user-images.githubusercontent.com/43678736/132086703-86d97476-b76e-4949-b89a-31ecb03f3b6e.png\";\r\nexport const vsd = \"https://user-images.githubusercontent.com/43678736/132086704-8fd51e7c-afa2-47a3-ab2f-d0bcd0ecae9f.png\";\r\nexport const vue = \"https://user-images.githubusercontent.com/43678736/132086705-33294da1-5c0f-49f7-b890-e4857cec0a6d.png\";\r\nexport const wav = \"https://user-images.githubusercontent.com/43678736/132086706-22f805d0-39d4-494b-824e-47dc75d05eb7.png\";\r\nexport const webm = \"https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png\";\r\nexport const weba = \"https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png\";\r\nexport const webp = \"https://user-images.githubusercontent.com/43678736/132086708-21d096dd-7148-40aa-97f1-cbb099339740.png\";\r\nexport const wma = \"https://user-images.githubusercontent.com/43678736/132086709-811d4e90-3cfa-4044-a956-aeda9c67fc92.png\";\r\nexport const wmv = \"https://user-images.githubusercontent.com/43678736/132086710-c5479c6c-0249-4542-adad-48b0ef40b775.png\";\r\nexport const woff = \"https://user-images.githubusercontent.com/43678736/132086711-1524a3e7-3e33-4822-a34f-ff3235404045.png\";\r\nexport const xlsx = \"https://user-images.githubusercontent.com/43678736/132086712-17e2c491-f6e4-4586-aef6-06bcc5f4b0e5.png\";\r\nexport const xlsx2 = \"https://user-images.githubusercontent.com/43678736/132086714-7ddf285d-2b83-4115-80a5-f02f510300a1.png\";\r\nexport const xml = \"https://user-images.githubusercontent.com/43678736/132086715-204b5a8b-9c5a-4bac-8294-9237ebc16089.png\";\r\nexport const xul = \"https://user-images.githubusercontent.com/43678736/132086716-64511d20-58cb-45a8-85df-f4d9408b469d.png\";\r\nexport const zip = \"https://user-images.githubusercontent.com/43678736/132086718-a8499333-6282-4820-aa1f-4d133eb54648.png\";\r\n\r\n//export { aac, abw, accdb, avi, azw, bmp, bz, bz2, cda, csh, css, csv, docx, drawio, eot, epub, freearc, gif, gzip, html, icalendar, jar, java, javascript, jpeg, json, jsonld, midi, mp3, mp4, mpeg, mpkg, octet, odp, ods, odt, opus, otf, pdf, php, png, pptx, psd, python, rar, react, rtf,sass, sevenzip, sh, swf, tar, text, tiff, ttf, typescript, vsd, vue, wav, weba, webm, webp, wma, wmv, woff, xlsx, xml, xul, zip };\r\n","import { getExt } from \"./utils.files\";\r\n\r\nimport {\r\n aac, abw, accdb, avi, azw,\r\n bmp, bz, bz2, cda,\r\n csh, css, csv,\r\n docx, drawio,\r\n eot, epub,\r\n freearc, gif, gzip,\r\n html, icalendar,\r\n jar, java, javascript, jpeg, json, jsonld,\r\n midi, mp3, mp4, mpeg, mpkg,\r\n octet, odp, ods, odt, oga, ogv, ogx, opus, otf,\r\n pdf, php, png, pptx, psd, python,\r\n rar, react, rtf,\r\n sass, sevenzip, sh, swf,\r\n tar, text, tiff, ttf, typescript,\r\n vsd, vue,\r\n wav, weba, webm, webp, wma, wmv, woff,\r\n xlsx, xml, xul,\r\n zip\r\n} from \"./IconFiles\";\r\n\r\nconst DEF_GEN_MIME: string = \"octet\";\r\n/**\r\n * \r\n * @param tailMime \r\n * @returns \r\n */\r\nexport const audioSelector = (tailMime: string): string => {\r\n switch (tailMime) {\r\n case \"aac\": return \"aac\";\r\n case \"midi\": return \"midi\";\r\n case \"x-midi\": return \"midi\";\r\n case \"mpeg\": return \"mpeg\";//mp3\r\n case \"ogg\": return \"oga\";\r\n case \"opus\": return \"opus\";\r\n case \"wav\": return \"wav\";\r\n case \"webm\": return \"webm\";\r\n //case \"3gpp\": return \"threegp\";\r\n //case \"3gpp2\": return \"threegp\";\r\n //case \"mp3\": return \"mp3\";\r\n case \"wma\": return \"wma\";\r\n default: return DEF_GEN_MIME;\r\n }\r\n}\r\nexport const textSelector = (tailMime: string): string => {\r\n switch (tailMime) {\r\n case \"css\": return \"css\";\r\n case \"csv\": return \"csv\";\r\n case \"html\": return \"html\";\r\n case \"calendar\": return \"icalendar\";\r\n case \"javascript\": return \"javascript\";\r\n case \"x-javascript\": return \"javascript\";\r\n case \"plain\": return \"text\";\r\n case \"xml\": return \"xml\";\r\n default: return DEF_GEN_MIME;\r\n\r\n }\r\n}\r\nexport const imageSelector = (tailMime: string): string => {\r\n switch (tailMime) {\r\n case \"bmp\": return \"bmp\";\r\n case \"gif\": return \"gif\";\r\n // case \"vnd.microsoft.icon\": return \"ico\";\r\n case \"ico\": return \"ico\";\r\n case \"jpg\": return \"jpeg\";\r\n case \"jpeg\": return \"jpeg\";\r\n case \"png\": return \"png\";\r\n //case \"svg+xml\": return \"svg\";\r\n //case \"svg\": return \"svg\";\r\n case \"tiff\": return \"tiff\";\r\n case \"webp\": return \"webp\";\r\n default: return DEF_GEN_MIME;\r\n\r\n }\r\n}\r\nexport const fontSelector = (tailMime: string): string => {\r\n switch (tailMime) {\r\n case \"otf\": return \"otf\";\r\n case \"ttf\": return \"ttf\";\r\n case \"woff\": return \"woff\";\r\n case \"woff2\": return \"woff\";\r\n default: return DEF_GEN_MIME;\r\n\r\n }\r\n}\r\n\r\nexport const videoSelector = (tailMime: string): string => {\r\n switch (tailMime) {\r\n case \"x-msvideo\": return \"avi\";\r\n case \"msvideo\": return \"avi\";\r\n case \"avi\": return \"avi\";\r\n case \"mp4\": return \"mp4\";\r\n case \"mpeg\": return \"mpeg\";\r\n case \"ogg\": return \"ogv\";\r\n case \"mp2t\": return \"mp2t\";\r\n case \"wmv\": return \"wmv\";\r\n\r\n case \"webm\": return \"webm\";\r\n // case \"3gpp\": return \"threegp\";\r\n // case \"3gpp2\": return \"threegp2\";\r\n\r\n default: return DEF_GEN_MIME;\r\n }\r\n}\r\n/**\r\n * \r\n * @param tailMime \r\n * @returns \r\n */\r\nexport const applicationSelector = (tailMime: string): string => {\r\n switch (tailMime) {\r\n case \"x-abiword\": return \"abw\";\r\n case \"abiword\": return \"abw\";\r\n case \"x-freearc\": return \"arc\";\r\n case \"freearc\": return \"arc\";\r\n case \"vnd.amazon.ebook\": return \"azw\";\r\n case \"octet-stream\": return \"octet\";\r\n case \"x-bzip\": return \"bz\";\r\n case \"x-bzip2\": return \"bz2\";\r\n case \"bzip\": return \"bz\";\r\n case \"bzip2\": return \"bz2\";\r\n case \"x-cdf\": return \"cda\";\r\n case \"msaccess\": return \"accdb\";\r\n case \"csh\": return \"csh\";\r\n case \"x-csh\": return \"csh\";\r\n case \"vnd.ms-fontobject\": return \"eot\";\r\n case \"epub+zip\": return \"epub\";\r\n case \"gzip\": return \"gzip\";\r\n case \"java-archive\": return \"jar\";\r\n case \"x-javascript\": return \"javascript\";\r\n case \"json\": return \"json\";\r\n case \"ld+json\": return \"jsonld\";\r\n case \"vnd.apple.installer+xml\": return \"mpkg\";\r\n case \"ogg\": return \"ogx\";\r\n case \"vnd.rar\": return \"rar\";\r\n case \"rtf\": return \"rtf\";\r\n case \"x-sh\": return \"sh\";\r\n case \"sh\": return \"sh\";\r\n case \"x-shockwave-flash\": return \"swf\";\r\n case \"x-tar\": return \"tar\";\r\n case \"x-httpd-php\": return \"php\";\r\n case \"vnd.visio\": return \"vsd\";\r\n case \"xhtml+xml\": return \"xhtml\";\r\n case \"xml\": return \"xml\";\r\n case \"vnd.mozilla.xul+xml\": return \"xul\";\r\n case \"vnd.openxmlformats-officedocument.wordprocessingml.document\": return \"docx\";\r\n case \"msword\": return \"docx\";\r\n case \"vnd.openxmlformats-officedocument.spreadsheetml.sheet\": return \"xlsx\";\r\n case \"vnd.openxmlformats-officedocument.presentationml.presentation\": return \"pptx\";\r\n case \"vnd.ms-powerpoint\": return \"pptx\";\r\n case \"vnd.oasis.opendocument.presentation\": return \"odp\";\r\n case \"vnd.oasis.opendocument.text\": return \"odt\";\r\n case \"vnd.oasis.opendocument.spreadsheet\": return \"ods\";\r\n case \"zip\": return \"zip\";\r\n case \"x-zip-compressed\": return \"zip\";\r\n case \"pdf\": return \"pdf\";\r\n default: return DEF_GEN_MIME;\r\n }\r\n}\r\n/**\r\n * Selects to wich mime type the mime type given belongs to\r\n * @param mimeType mime type to be searched \r\n * @returns the generic type, \r\nif not found it return \"octet\" that means generic binary file\r\n */\r\nexport const mimeSelector = (mimeType?: string): string => {\r\n // let genericMime: string | undefined = undefined;\r\n if (!mimeType || !mimeType.includes(\"/\")) {\r\n return DEF_GEN_MIME;\r\n }\r\n let headerMime = mimeType.split(\"/\")[0];\r\n let tailMime = mimeType.split(\"/\")[1];\r\n /**\r\n * Every mimetype that \r\n * starts with: \"application/....\"\r\n */\r\n\r\n switch (headerMime) {\r\n case \"application\": return applicationSelector(tailMime);\r\n case \"audio\": return audioSelector(tailMime);\r\n case \"video\": return videoSelector(tailMime);\r\n case \"text\": return textSelector(tailMime);\r\n case \"image\": return imageSelector(tailMime);\r\n case \"font\": return fontSelector(tailMime);\r\n\r\n default: return DEF_GEN_MIME;\r\n }\r\n}\r\n/**\r\n * Selects to wich mapped extension\r\n * the given exension belongs to\r\n * \r\n * @param extension \r\n * @returns \r\n */\r\nexport const extensionSelector = (extension?: string): string => {\r\n let genericMime: string = \"octet\";\r\n\r\n if (extension && extension !== \"\") {\r\n if (extension.includes(\"zip\") || extension.includes(\"rar\")) {\r\n genericMime = \"zip\";\r\n } else if (extension.includes(\"doc\")) {\r\n genericMime = \"docx\";\r\n } else if (extension.includes(\"xls\")) {\r\n genericMime = \"xlsx\";\r\n } else if (extension.includes(\"drawio\")) {\r\n genericMime = \"drawio\";\r\n } else if (extension.includes(\"psd\")) {\r\n genericMime = \"psd\";\r\n } else if (extension.includes(\"csv\")) {\r\n genericMime = \"csv\";\r\n } else if (extension === \"jsx\") {\r\n genericMime = \"react\";\r\n } else if (extension === \"py\") {\r\n genericMime = \"python\";\r\n } else if (extension === \"vue\") {\r\n genericMime = \"vue\";\r\n } else if (extension === \"java\") {\r\n genericMime = \"java\";\r\n } else if (extension === \"ts\") {\r\n genericMime = \"ts\";\r\n } else if (extension === \"sass\" || extension === \"scss\") {\r\n genericMime = \"sass\";\r\n }\r\n }\r\n return genericMime;\r\n\r\n}\r\n/**\r\n * Chack for extention whether the file is code os not\r\n * @param extension \r\n * @returns \r\n */\r\nexport const checkIsCode = (extension?: string): string => {\r\n let genericMime = \"text\";\r\n if (extension && extension !== \"\") {\r\n if (extension === \"jsx\") {\r\n genericMime = \"react\";\r\n } else if (extension === \"py\") {\r\n genericMime = \"python\";\r\n } else if (extension === \"vue\") {\r\n genericMime = \"vue\";\r\n } else if (extension === \"java\") {\r\n genericMime = \"java\";\r\n } else if (extension === \"ts\" || extension === \"tsx\") {\r\n genericMime = \"typescript\";\r\n } else if (extension === \"js\") {\r\n genericMime = \"javascript\";\r\n } else if (extension === \"xml\") {\r\n genericMime = \"xml\";\r\n } else if (extension === \"php\") {\r\n genericMime = \"php\";\r\n }\r\n }\r\n return genericMime;\r\n}\r\n\r\n/**\r\n * Looks for a suitable file icon\r\n * @param props mime and extension from file to search\r\n * @returns the result file ico, if not found, turns octet-stream url\r\n */\r\nexport const getURLFileIco = (file: File | undefined): ResultFileIco => {\r\n\r\n let result = \"\";\r\n //if not file, return octet\r\n if (!file) {\r\n result = DEF_GEN_MIME;\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n } else {\r\n result = mimeSelector(file.type);\r\n }\r\n //If plain text\r\n const extention: string = getExt(file.name);\r\n\r\n if (result === \"text\") {\r\n result = checkIsCode(extention);\r\n\r\n }\r\n //If octet stream result, second chance: file extention\r\n if (result === DEF_GEN_MIME) {\r\n result = extensionSelector(extention);\r\n }\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n}\r\ninterface ResultFileIco {\r\n url: string;\r\n mimeResume: string;\r\n}\r\n/**\r\n * set of registered mimes on MDN\r\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\r\n * \r\n */\r\ninterface MimeSelector {\r\n [mime: string]: string;\r\n}\r\n\r\nconst mimeUrlList: MimeSelector = {\r\n img: \"https://ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_image_x16.png\",\r\n video: \"https://ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_video_x16.png\",\r\n audio: \"https://ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_audio_x16.png\",\r\n aac: aac,\r\n accdb: accdb,\r\n abw: abw,\r\n arc: freearc,\r\n avi: avi,\r\n azw: azw,\r\n octet: octet,\r\n bmp: bmp,\r\n bz: bz,\r\n bz2: bz2,\r\n cda: cda,\r\n csh: csh,\r\n css: css,\r\n csv: csv,\r\n docx: docx,\r\n drawio: drawio,\r\n eot: eot,\r\n epub: epub,\r\n gzip: gzip,\r\n gif: gif,\r\n html: html,\r\n //ico: ico,\r\n icalendar: icalendar,\r\n jar: jar,\r\n jpeg: jpeg,\r\n javascript: javascript,\r\n json: json,\r\n jsonld: jsonld,\r\n midi: midi,\r\n // js: js,\r\n mp3: mp3,\r\n mp4: mp4,\r\n mpeg: mpeg,\r\n mpkg: mpkg,\r\n mp2t: octet,\r\n odp: odp,\r\n ods: ods,\r\n odt: odt,\r\n oga: oga,\r\n ogv: ogv,\r\n ogx: ogx,\r\n opus: opus,\r\n otf: otf,\r\n png: png,\r\n pdf: pdf,\r\n php: php,\r\n pptx: pptx,\r\n psd: psd,\r\n rar: rar,\r\n rtf: rtf,\r\n sass: sass,\r\n sh: sh,\r\n //svg: svg,\r\n swf: swf,\r\n tar: tar,\r\n tiff: tiff,\r\n ttf: ttf,\r\n //ts: ts,\r\n typescript: typescript,\r\n text: text,\r\n vsd: vsd,\r\n wav: wav,\r\n weba: weba,\r\n webm: webm,\r\n webp: webp,\r\n woff: woff,\r\n wma: wma,\r\n wmv: wmv,\r\n xhtml: html,\r\n xlsx: xlsx,\r\n xml: xml,\r\n xul: xul,\r\n zip: zip,\r\n // threegp: threegp,\r\n sevenzip: sevenzip,\r\n python: python,\r\n java: java,\r\n react: react,\r\n vue: vue,\r\n\r\n};","/**\r\n * @deprecated use readImagePromise() instead.\r\n * \r\n * Read an image and returns the URL expresion in base 64\r\n * @param file the image file\r\n * @param afterRead a function of what to do when load finishes\r\n */\r\nexport const readImage = (file: File, afterRead: Function) => {\r\n const reader = new FileReader();\r\n reader.onload = function () {\r\n // convert image file to base64 string\r\n afterRead(reader.result);\r\n };\r\n if (file) {\r\n reader.readAsDataURL(file);\r\n }\r\n}\r\n/**\r\n * \r\n * @param base64Str \r\n * @param maxWidth \r\n * @param maxHeight \r\n * @returns \r\n */\r\nexport function resizeImage(\r\n base64Str: string,\r\n maxWidth = 135,\r\n maxHeight = 120\r\n): Promise<string | undefined> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let img: HTMLImageElement = new Image();\r\n img.src = base64Str;\r\n img.onload = () => {\r\n let canvas = document.createElement('canvas');\r\n const MAX_WIDTH = maxWidth;\r\n const MAX_HEIGHT = maxHeight;\r\n let width = img.width;\r\n let height = img.height;\r\n\r\n if (maxWidth > width && maxHeight > height) {\r\n resolve(base64Str);\r\n } else\r\n if (width > height) {\r\n if (width > MAX_WIDTH) {\r\n height *= MAX_WIDTH / width;\r\n width = MAX_WIDTH;\r\n }\r\n } else {\r\n if (height > MAX_HEIGHT) {\r\n width *= MAX_HEIGHT / height;\r\n height = MAX_HEIGHT;\r\n }\r\n }\r\n canvas.width = width\r\n canvas.height = height\r\n let ctx = canvas.getContext('2d')\r\n if (ctx) {\r\n ctx.drawImage(img, 0, 0, width, height);\r\n resolve(canvas.toDataURL());\r\n\r\n } else {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n reject(undefined);\r\n }\r\n\r\n }\r\n } catch (error) {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n reject(undefined);\r\n }\r\n\r\n })\r\n}\r\n/**\r\n * Reads an image file in a promise way, so you can use await.\r\n * If other kind of file is sent, this function will read it anyway\r\n * and will return a string that contains the URL representation\r\n * @param file File image object\r\n * @returns data URL of the image file\r\n */\r\nexport const readImagePromise = (file: File): Promise<string | undefined> => {\r\n return new Promise<string | undefined>((resolve, reject) => {\r\n try {\r\n const reader = new FileReader();\r\n reader.onload = function () {\r\n resolve(reader.result as string);\r\n }\r\n reader.readAsDataURL(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n","import { FunctionLabel, LocalLabels } from \"../../../../localization/localization\";\r\nimport { getExt } from \"../../../file-item/utils\";\r\n\r\nexport enum UPLOADSTATUS {\r\n uploading = \"uploading\",\r\n success = \"success\",\r\n error = \"error\"\r\n}\r\nexport interface FileValidated {\r\n file: File;\r\n valid: boolean;\r\n id: number | string | undefined;\r\n errors?: string[];\r\n uploadMessage?: string;\r\n uploadStatus?: undefined | UPLOADSTATUS;\r\n}\r\nexport interface FileValidator {\r\n maxFileSize?: number;\r\n accept?: string;\r\n}\r\n/**\r\n * Separate the accept string array into an array of strings separated by commas\r\n * @param accept the string accept array\r\n * @returns an array of strings in wich every item\r\n */\r\nexport const separateAccept = (accept: string | undefined): string[] => {\r\n if (!accept || accept.length === 0) {\r\n return [];\r\n }\r\n const commaSeparatedAccpet: string[] = accept.split(\",\").map((acceptItem) => acceptItem.trim());\r\n return commaSeparatedAccpet;\r\n}\r\n/**\r\n * Checks whether a file is valid or not given an array of file extentions and mime types\r\n * e.g. accept = [\".doc\", \".docx\", \".xml\", \"application/msword\", \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"]\r\n * @param accept the array of strings accept items\r\n * @param file a File object to be evaluated\r\n * @returns true if the mime type file is included in the accept param\r\n */\r\nexport const validateAccept = (accept: string[], file: File): boolean => {\r\n let valid: boolean = false;\r\n const { name, type } = file;\r\n //Array(5) [ \".doc\", \".docx\", \".xml\", \"application/msword\", \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" ]\r\n for (let i = 0; i < accept.length; i++) {\r\n const acceptItem: string = accept[i];\r\n //check is not empty\r\n if (acceptItem.length !== 0) {\r\n //check extention\r\n if (acceptItem.charAt(0) === \".\") {\r\n if (acceptItem.includes(getExt(name))) {\r\n return true;\r\n }\r\n }\r\n //check mime\r\n // header/tail => image/png ; image/* ; audio\r\n if (type && type.length > 0 && acceptItem.includes(\"/\") && type.includes(\"/\")) {\r\n let headerMime = acceptItem.split(\"/\")[0];\r\n let tailMime = acceptItem.split(\"/\")[1];\r\n\r\n let headerMimeFile = type.split(\"/\")[0];\r\n let tailMimeFile = type.split(\"/\")[1];\r\n\r\n if (headerMime === headerMimeFile) {\r\n // image/*\r\n if (tailMime === \"*\") {\r\n return true;\r\n } else if (tailMime === tailMimeFile) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return valid;\r\n}\r\n/**\r\n * Function that validate whether afile is valid or not\r\n * according to the Filevalidator properties\r\n * @param file a File object to be evaluated\r\n * @param validator the validator object \r\n * @returns a FileValidated object\r\n */\r\nexport const validateFile = (\r\n file: File,\r\n validator: FileValidator,\r\n localErrors: LocalLabels\r\n): FileValidated => {\r\n\r\n const idGenerated = FileIdGenerator.getNextId();\r\n let errors: string[] = [];\r\n\r\n const { maxFileSize, accept } = validator;\r\n\r\n //check file size\r\n if (maxFileSize && file.size > maxFileSize) {\r\n const maxFileSizeErrorMessenger: FunctionLabel = localErrors.maxSizeError as FunctionLabel;\r\n errors.push(maxFileSizeErrorMessenger(maxFileSize));\r\n }\r\n\r\n //check file type\r\n // const allowedTypes = accept.filter((type) => (file.type === type))\r\n if (accept && !validateAccept(separateAccept(accept), file)) {\r\n errors.push(localErrors.acceptError as string);\r\n }\r\n\r\n\r\n const fileResult: FileValidated = {\r\n id: idGenerated,\r\n file: file,\r\n valid: errors.length === 0,\r\n errors: errors\r\n };\r\n // logic here\r\n return fileResult;\r\n};\r\nexport interface CustomValidateFileResponse {\r\n valid: boolean,\r\n errors?: string[]\r\n}\r\n/**\r\n * Function that validates a file\r\n * according to the Filevalidator properties\r\n * @param file \r\n * @param validator \r\n * @returns a CustomValidateFileResponse objectthaat contains 2 fields: list of errors and boolean value \"valid\"\r\n */\r\nexport const customValidateFile = (\r\n file: File,\r\n validator: (f: File) => CustomValidateFileResponse\r\n): FileValidated => {\r\n const id = FileIdGenerator.getNextId();\r\n const { valid, errors } = validator(file);\r\n let fileResult: FileValidated = {\r\n id,\r\n file,\r\n valid,\r\n errors\r\n };\r\n // logic here\r\n return fileResult;\r\n};\r\n\r\n/**\r\n * An id generaor\r\n */\r\nexport abstract class FileIdGenerator {\r\n static nextId = 0;\r\n /**\r\n * Increases the id conter and returns the next id available.\r\n * @returns the next integer id available\r\n */\r\n static getNextId(): number {\r\n FileIdGenerator.nextId++;\r\n return FileIdGenerator.nextId;\r\n }\r\n}\r\n/**\r\n * Random integer between min (included) and max (excluded)\r\n * @param min \r\n * @param max \r\n * @returns a random number between min (included) and max (excluded)\r\n */\r\nfunction getRandomInt(min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n}\r\n/**\r\n * Generates a random number betwen 0 and 3\r\n * where\r\n * 0 => error\r\n * 1 => uploading\r\n * 2 => success\r\n * 3 => undefined\r\n * @returns a random upload status or undefined\r\n */\r\nconst getRandomUploadStatus = (): UPLOADSTATUS | undefined => {\r\n const result: number = getRandomInt(0, 4);\r\n switch (result) {\r\n case 0: return UPLOADSTATUS.error;\r\n case 1: return UPLOADSTATUS.uploading;\r\n case 2: return UPLOADSTATUS.success;\r\n default:\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Make a validated file that is ready to be used on FileItem component,\r\n * if valid is not set, a random operation will decide whether the file is valid or not\r\n * If valid is false, then the natural order is not to be uploadable and wont have upload message nor upload status\r\n * If valid is true, then file can be uploaded and can have upload message if the status is succes or error\r\n * @param file The file\r\n * @param valid true if it is a valid file, otherwise is false\r\n * @param uploadStatus the current upload status. If not given a random upload status will be set\r\n * @param uploadMessage the upload message after uploading\r\n * @returns a Vaidated File object\r\n */\r\nexport const makeSynthticFileValidate = (\r\n file: File,\r\n valid = (Math.ceil(Math.random() * 28) % 2 === 0),\r\n uploadStatus?: UPLOADSTATUS,\r\n uploadMessage?: string\r\n): FileValidated => {\r\n //if valid, naturally, can be uploaded\r\n let errors: string[] | undefined = [];\r\n let newUpoadStatus = uploadStatus || getRandomUploadStatus();\r\n\r\n let customUploadMessage: string | undefined = uploadMessage || \"\";\r\n if (valid) {\r\n //we can decide according to upload status \r\n if (!uploadMessage) {\r\n switch (newUpoadStatus) {\r\n case UPLOADSTATUS.error: customUploadMessage = \"Upload failed. There was an error\"; break;\r\n case UPLOADSTATUS.success: customUploadMessage = \"File was successfully upload\"; break;\r\n default: uploadMessage = undefined;\r\n }\r\n }\r\n errors = undefined;\r\n } else {\r\n //if not valid, just show error messages\r\n const randInt: number = getRandomInt(0, 3);\r\n errors.push(listOfErrors[randInt]);\r\n newUpoadStatus = undefined;\r\n customUploadMessage = undefined;\r\n }\r\n //now make a File Validated instance \r\n const newFileValidated: FileValidated = {\r\n id: FileIdGenerator.getNextId(),\r\n valid: valid,\r\n file: file,\r\n uploadStatus: newUpoadStatus,\r\n uploadMessage: customUploadMessage,\r\n errors: errors\r\n };\r\n return newFileValidated;\r\n}\r\n/**\r\n * list of dumy errors in english\r\n */\r\nexport const listOfErrors: string[] = [\"File is too big. Max file size allowed is 80mb.\", \"File's type is not allowed\", \"Max amount of files (28) has been reached\"];","import { fileSizeFormater } from \"../../components/file-item/utils\";\r\nimport { LocalLabels } from \"../localization\";\r\n\r\n/**\r\n * Italian translation for Dropzone component\r\n */\r\nexport const DropzoneItalian: LocalLabels = {\r\n defaultLabel: \"Trascina qui i tuoi file\",\r\n\r\n uploadingMessage: (amountOfFiles) => { return `Caricamento di ${amountOfFiles} file`; },\r\n uploadFinished: (uploaded, rejected) => `File caricati: ${uploaded}, File rifiutati: ${rejected}`,\r\n noFilesMessage: `Nessun file valido in attesa di essere caricato`,\r\n footer: {\r\n acceptAll: `Tutti i tipi di file sono accettati`,\r\n acceptCustom: (accept) => `Tipi di file consentiti: ${accept}`\r\n },\r\n header: {\r\n uploadFilesMessage: \"Caricamento\",\r\n maxSizeMessage: (maxFileSize) => `Dimensione massima ${maxFileSize}`,\r\n validFilesMessage: (numberOfValidFiles, maxFiles) => `File ${numberOfValidFiles}/${maxFiles}`\r\n },\r\n fakeuploadsuccess: \"Il file è stato caricato con successo \",\r\n fakeUploadError: \"Errore di caricamento del file\",\r\n}\r\n\r\n/**\r\n * Italian translation for FileItem component\r\n */\r\nexport const FileItemItalian: LocalLabels = {\r\n fullInfoLayer: {\r\n name: `Nome: `,\r\n size: \"Dimensione: \",\r\n type: \"Tipo: \"\r\n },\r\n status: {\r\n uploading: \"In corso\",\r\n success: \"Successo\",\r\n valid: \"Valido\",\r\n denied: \"Non válido\",\r\n error: \"Errore\"\r\n\r\n },\r\n}\r\n/**\r\n * Italian translation for Validation Errors\r\n */\r\n export const ValidateErrorItalian: LocalLabels = {\r\n maxSizeError: (maxSize) => `Il file è molto grande. Il tam. il massimo è ${fileSizeFormater(maxSize as number)}`,\r\n acceptError: `Tipo di file illegale`,\r\n maxFileCount: (maxFiles) => `Numero massimo di file (${maxFiles}) raggiunto`\r\n}","import { fileSizeFormater } from \"../../components/file-item/utils\";\r\nimport { LocalLabels } from \"../localization\";\r\n\r\n/**\r\n * French translation for Dropzone component\r\n */\r\nexport const DropzoneFrench: LocalLabels = {\r\n defaultLabel: \"Déposez vos fichiers ici\",\r\n\r\n uploadingMessage: (amountOfFiles) => { return `Envoi de ${amountOfFiles} fichiers`; },\r\n uploadFinished: (uploaded, rejected) => `Fichiers téléchargés : ${uploaded}, Fichiers rejetés: ${rejected}`,\r\n noFilesMessage: `Aucun fichier valide ne manque`,\r\n footer: {\r\n acceptAll: `Tous types de fichiers acceptés `,\r\n acceptCustom: (accept) => `Types de fichier: ${accept}`\r\n },\r\n header: {\r\n uploadFilesMessage: \"Envoyer\",\r\n maxSizeMessage: (maxFileSize) => `Taille maximale ${maxFileSize}`,\r\n validFilesMessage: (numberOfValidFiles, maxFiles) => `Fichiers ${numberOfValidFiles}/${maxFiles}`\r\n },\r\n fakeuploadsuccess: \"Le fichier a été téléchargé avec succès\",\r\n fakeUploadError: \"Erreur lors du téléchargement \",\r\n}\r\n\r\n/**\r\n * French translation for FileItem component\r\n */\r\nexport const FileItemFrench: LocalLabels = {\r\n fullInfoLayer: {\r\n name: `Le nom: `,\r\n size: \"Le taille: \",\r\n type: \"Le type: \"\r\n },\r\n status: {\r\n uploading: \"En cours\",\r\n success: \"Succès\",\r\n valid: \"Valide\",\r\n denied: \"Refusé\",\r\n error: \"Erreur\"\r\n\r\n },\r\n}\r\n/**\r\n * French translation for Validation Errors\r\n */\r\n export const ValidateErrorFrench: LocalLabels = {\r\n maxSizeError: (maxSize) => `Le fichier est très volumineux. Le tam. le maximum est de ${fileSizeFormater(maxSize as number)}`,\r\n acceptError: `Type de fichier illégal `,\r\n maxFileCount: (maxFiles) => `Limite de fichiers atteinte (${maxFiles})`\r\n}","\r\nimport { fileSizeFormater } from \"../../components/file-item/utils\";\r\nimport { LocalLabels } from \"../localization\";\r\n\r\n/**\r\n * English translation for Dropzone component\r\n */\r\nexport const DropzoneEnglish: LocalLabels = {\r\n defaultLabel: \"Drop your files here\",\r\n uploadingMessage: (amountOfFiles) => { return `Uploading ${amountOfFiles} files`; },\r\n uploadFinished: (uploaded, rejected) => `Uploaded files: ${uploaded}, Rejected files: ${rejected}`,\r\n noFilesMessage: `There is no missing valid file to upload`,\r\n footer: {\r\n acceptAll: `All file types accepted`,\r\n acceptCustom: (accept) => `Allowed types: ${accept}`\r\n },\r\n header: {\r\n uploadFilesMessage: \"Upload files\",\r\n maxSizeMessage: (maxFileSize) => `Max file size: ${maxFileSize}`,\r\n validFilesMessage: (numberOfValidFiles, maxFiles) => `Files ${numberOfValidFiles}/${maxFiles}`\r\n },\r\n fakeuploadsuccess: \"File was successfuly uploaded\",\r\n fakeUploadError: \"Error on uploading. Please try again later.\",\r\n}\r\n\r\n/**\r\n * English translation for FileItem component\r\n */\r\nexport const FileItemEnglish: LocalLabels = {\r\n fullInfoLayer: {\r\n name: `Name: `,\r\n size: \"Size: \",\r\n type: \"Type: \"\r\n },\r\n status: {\r\n uploading: \"Uploading\",\r\n success: \"Success\",\r\n valid: \"Valid\",\r\n denied: \"Not valid\",\r\n error: \"Error\"\r\n },\r\n}\r\n\r\n/**\r\n * English translation for Validation Errors\r\n */\r\nexport const ValidateErrorEnglish: LocalLabels = {\r\n maxSizeError: (maxSize) =>\r\n `File is too big. Max file size allowed is ${fileSizeFormater(maxSize as number)}`,\r\n acceptError: `File type is not allowed`,\r\n maxFileCount: (maxFiles) =>\r\n `Max amount of files (${maxFiles}) has been reached`\r\n}","import { fileSizeFormater } from \"../../components/file-item/utils\";\r\nimport { LocalLabels } from \"../localization\";\r\n\r\n/**\r\n * Spanish translation for Dropzone component\r\n */\r\nexport const DropzoneSpanish: LocalLabels = {\r\n defaultLabel: \"Suelta tus archivos aquí\",\r\n\r\n uploadingMessage: (amountOfFiles) => { return `Subiendo ${amountOfFiles} archivos`; },\r\n uploadFinished: (uploaded, rejected) => `Archivos subidos: ${uploaded}, Archivos rechazados: ${rejected}`,\r\n noFilesMessage: `No hay archivos válidos pendientes por subir`,\r\n footer: {\r\n acceptAll: `Todos los tipos de archivo aceptados`,\r\n acceptCustom: (accept) => `Tipo(s) de archivo permitidos: ${accept}`\r\n },\r\n header: {\r\n uploadFilesMessage: \"Subir\",\r\n maxSizeMessage: (maxFileSize) => `Tam. máximo ${maxFileSize}`,\r\n validFilesMessage: (numberOfValidFiles, maxFiles) => `Archivos ${numberOfValidFiles}/${maxFiles}`\r\n },\r\n fakeuploadsuccess: \"El archivo se subió correctamente\",\r\n fakeUploadError: \"Error al subir el archivo\",\r\n}\r\n\r\n/**\r\n * Spanish translation for FileItem component\r\n */\r\nexport const FileItemSpanish: LocalLabels = {\r\n fullInfoLayer: {\r\n name: `Nombre: `,\r\n size: \"Tamaño: \",\r\n type: \"Tipo: \"\r\n },\r\n status: {\r\n uploading: \"Subiendo\",\r\n success: \"Éxito\",\r\n valid: \"Válido\",\r\n denied: \"No válido\",\r\n error: \"Error\"\r\n\r\n },\r\n}\r\n/**\r\n * Spanish translation for Validation Errors\r\n */\r\n export const ValidateErrorSpanish: LocalLabels = {\r\n maxSizeError: (maxSize) => `El archivo es muy grande. El tam. máximo es ${fileSizeFormater(maxSize as number)}`,\r\n acceptError: `Tipo de archivo no permitido`,\r\n maxFileCount: (maxFiles) => `Cantidad máxima de archivos (${maxFiles}) alcanzada`\r\n}\r\n","import { fileSizeFormater } from \"../../components/file-item/utils\";\r\nimport { LocalLabels } from \"../localization\";\r\n\r\n/**\r\n * Russian translation for Dropzone component\r\n */\r\nexport const DropzoneRussian: LocalLabels = {\r\n defaultLabel: \"Перетащите сюда свои файлы.\",\r\n uploadingMessage: (amountOfFiles) => { return `Выгрузка ${amountOfFiles} файлов`; },\r\n uploadFinished: (uploaded, rejected) => `Загружено файлов: ${uploaded}, отклоненных файлов: ${rejected}`,\r\n noFilesMessage: `Действительный файл не отсутствует для загрузки`,\r\n footer: {\r\n acceptAll: `Принимаются все типы файлов `,\r\n acceptCustom: (accept) => `Допустимые типы: ${accept}`\r\n },\r\n header: {\r\n uploadFilesMessage: \"Отправить\",\r\n maxSizeMessage: (maxFileSize) => `макс размер: ${maxFileSize}`,\r\n validFilesMessage: (numberOfValidFiles, maxFiles) => `Файлы ${numberOfValidFiles}/${maxFiles}`\r\n },\r\n fakeuploadsuccess: \"Файл был успешно загружен\",\r\n fakeUploadError: \"Ошибка при загрузке\",\r\n}\r\n\r\n/**\r\n * Russian translation for FileItem component\r\n *\r\n */\r\nexport const FileItemRussian: LocalLabels = {\r\n fullInfoLayer: {\r\n name: `Имя: `,\r\n size: \"Размер: \",\r\n type: \"Tип: \"\r\n },\r\n status: {\r\n uploading: \"Загрузка\",\r\n success: \"успех\",\r\n valid: \"годный\",\r\n denied: \"выкинутый\",\r\n error: \"ошибка\"\r\n },\r\n}\r\n\r\n/**\r\n * Russian translation for Validation Errors\r\n */\r\nexport const ValidateErrorRussian: LocalLabels = {\r\n maxSizeError: (maxSize) =>\r\n `Файл слишком большой. Максимально допустимый размер файла - ${fileSizeFormater(maxSize as number)}`,\r\n acceptError: `Тип файла не разрешен`,\r\n maxFileCount: (maxFiles) =>\r\n `Достигнуто максимальное количество файлов (${maxFiles})`\r\n}","import { fileSizeFormater } from \"../../components/file-item/utils\";\r\nimport { LocalLabels } from \"../localization\";\r\n\r\n/**\r\n * Portuguese translation for Dropzone\r\n */\r\nexport const DropzonePortuguese: LocalLabels = {\r\n defaultLabel: \"Solte seus arquivos aqui \",\r\n\r\n uploadingMessage: (amountOfFiles) => { return `Enviando ${amountOfFiles} arquivos`; },\r\n uploadFinished: (uploaded, rejected) => `Arquivos enviados: ${uploaded}, Arquivos rejeitados: ${rejected}`,\r\n noFilesMessage: `Nenhum arquivo válido está faltando para enviar`,\r\n footer: {\r\n acceptAll: `Todos os tipos de arquivo são aceitos`,\r\n acceptCustom: (accept) => `Tipos permitidos: ${accept}`\r\n },\r\n header: {\r\n uploadFilesMessage: \"Enviar\",\r\n maxSizeMessage: (maxFileSize) => `Tamanho máximo: ${maxFileSize}`,\r\n validFilesMessage: (numberOfValidFiles, maxFiles) => `Arquivos ${numberOfValidFiles}/${maxFiles}`\r\n },\r\n fakeuploadsuccess: \"O arquivo foi enviado com sucesso\",\r\n fakeUploadError: \"Erro ao enviar\",\r\n}\r\n\r\n\r\n/**\r\n * Portuguese translation for FileItem component\r\n */\r\nexport const FileItemPortuguese: LocalLabels = {\r\n fullInfoLayer: {\r\n name: `Nome: `,\r\n size: \"Tamanho: \",\r\n type: \"Tipo: \"\r\n },\r\n status: {\r\n uploading: \"Enviando\",\r\n success: \"Êxito\",\r\n valid: \"válido\",\r\n denied: \"Negado\",\r\n error: \"Erro\"\r\n },\r\n}\r\n/**\r\n * Portuguese translation for Validation Errors\r\n */\r\n export const ValidateErrorPortuguese: LocalLabels = {\r\n maxSizeError: (maxSize) => `O arquivo é muito grande. O tamanho máximo de arquivo permitido é ${fileSizeFormater(maxSize as number)}`,\r\n acceptError: `O tipo de arquivo não é permitido `,\r\n maxFileCount: (maxFiles) => `Quantidade máxima de arquivos (${maxFiles}) alcançada`\r\n}","\r\nimport { fileSizeFormater } from \"../../components/file-item/utils\";\r\nimport { LocalLabels } from \"../localization\";\r\n\r\n/**\r\n * English translation for Dropzone component\r\n */\r\nexport const DropzoneSimplifiedChinese: LocalLabels = {\r\n defaultLabel: \"将您的文件放在这里\",\r\n uploadingMessage: (amountOfFiles) => { return `上传 ${amountOfFiles} 个文件`; },\r\n uploadFinished: (uploaded, rejected) => `上传文件:${uploaded},拒绝文件:${rejected}`,\r\n noFilesMessage: `没有缺少要加载的有效文件`,\r\n footer: {\r\n acceptAll: `接受所有文件类型`,\r\n acceptCustom: (accept) => `允许的类型: ${accept}`\r\n },\r\n header: {\r\n uploadFilesMessage: \"上传文件\",\r\n maxSizeMessage: (maxFileSize) => `最大文件大小:${maxFileSize}`,\r\n validFilesMessage: (numberOfValidFiles, maxFiles) => `文档 ${numberOfValidFiles}/${maxFiles}`\r\n },\r\n fakeuploadsuccess: \"文件已成功上传\",\r\n fakeUploadError: \"上传时出错\",\r\n}\r\n\r\n/**\r\n * English translation for FileItem component\r\n */\r\nexport const FileItemSimplifiedChinese: LocalLabels = {\r\n fullInfoLayer: {\r\n name: `文档名称: `,\r\n size: \"尺寸: \",\r\n type: \"文件类型: \"\r\n },\r\n status: {\r\n uploading: \"上传\",\r\n success: \"成功\",\r\n valid: \"接受的文件\",\r\n denied: \"被拒绝的文件\",\r\n error: \"错误\"\r\n },\r\n}\r\n\r\n/**\r\n * English translation for Validation Errors\r\n */\r\nexport const ValidateErrorSimplifiedChinese: LocalLabels = {\r\n maxSizeError: (maxSize) =>\r\n `文件太大。 允许的最大文件大小为 ${fileSizeFormater(maxSize as number)}`,\r\n acceptError: `文件类型不允许`,\r\n maxFileCount: (maxFiles) =>\r\n `已达到最大文件数 (${maxFiles})`\r\n}","\r\nimport { fileSizeFormater } from \"../../components/file-item/utils\";\r\nimport { LocalLabels } from \"../localization\";\r\n\r\n/**\r\n * English translation for Dropzone component\r\n */\r\nexport const DropzoneTraditionalChinese: LocalLabels = {\r\n defaultLabel: \"把你的文件放在這裡 \",\r\n uploadingMessage: (amountOfFiles) => { return `上傳${amountOfFiles}個文件`; },\r\n uploadFinished: (uploaded, rejected) => `上傳文件: ${uploaded}, 拒絕的文件:${rejected}`,\r\n noFilesMessage: `沒有缺少要上傳的有效文件`,\r\n footer: {\r\n acceptAll: `接受所有文件類型`,\r\n acceptCustom: (accept) => `允許的類型:${accept}`\r\n },\r\n header: {\r\n uploadFilesMessage: \"上傳文件\",\r\n maxSizeMessage: (maxFileSize) => `最大文件大小:${maxFileSize}`,\r\n validFilesMessage: (numberOfValidFiles, maxFiles) => ` 文件 ${numberOfValidFiles}/${maxFiles}`\r\n },\r\n fakeuploadsuccess: \"文件已成功上傳\",\r\n fakeUploadError: \"上傳時出錯\",\r\n}\r\n\r\n/**\r\n * English translation for FileItem component\r\n */\r\nexport const FileItemTraditionalChinese: LocalLabels = {\r\n fullInfoLayer: {\r\n name: `文檔名稱: `,\r\n size: \"文件大小: \",\r\n type: \"文件類型: \"\r\n },\r\n status: {\r\n uploading: \"上傳\",\r\n success: \"成功\",\r\n valid: \"有效文件\",\r\n denied: \"無效文件\",\r\n error: \"錯誤\"\r\n },\r\n}\r\n\r\n/**\r\n * English translation for Validation Errors\r\n */\r\nexport const ValidateErrorTraditionalChinese: LocalLabels = {\r\n maxSizeError: (maxSize) =>\r\n `文件太大。 允許的最大文件大小為 ${fileSizeFormater(maxSize as number)}`,\r\n acceptError: `文件類型不允許`,\r\n maxFileCount: (maxFiles) =>\r\n `已達到最大文件數 (${maxFiles})`\r\n}","import { FileItemRussian } from \"./Russian/localization.russian\";\r\nimport { ComponentLocalizer, LocalLabels, Localization } from \"./localization\";\r\nimport { FileItemEnglish } from \"./English/localization.english\";\r\nimport { FileItemFrench } from \"./French/localization.french\";\r\nimport { FileItemPortuguese } from \"./Portuguese/localization.portuguese\";\r\nimport { FileItemSpanish } from \"./Spanish/localization.spanish\";\r\nimport { FileItemSimplifiedChinese } from \"./Chinese-simplified/localization.simplifiedChinese\";\r\nimport { FileItemTraditionalChinese } from \"./Chinese-traditional/localization.traditionalChinese\";\r\nimport { FileItemItalian } from \"./Italian/localization.italian\";\r\n\r\nexport const FileItemLocalizer: ComponentLocalizer = {\r\n \"ES-es\": FileItemSpanish,\r\n \"EN-en\": FileItemEnglish,\r\n \"FR-fr\": FileItemFrench,\r\n \"IT-it\": FileItemItalian,\r\n \"PT-pt\": FileItemPortuguese,\r\n \"RU-ru\": FileItemRussian,\r\n \"ZH-cn\": FileItemSimplifiedChinese,\r\n \"ZH-hk\": FileItemTraditionalChinese\r\n}\r\n\r\n/**\r\n * Secure translation through a selector\r\n * @param local the Localization\r\n * @returns a ComponentLocalizer object that contains the translation\r\n */\r\nexport const FileItemLocalizerSelector = (local: Localization): LocalLabels => {\r\n switch (local) {\r\n case \"ES-es\": return FileItemLocalizer[\"ES-es\"];\r\n case \"EN-en\": return FileItemLocalizer[\"EN-en\"];\r\n case \"FR-fr\": return FileItemLocalizer[\"FR-fr\"];\r\n case \"IT-it\": return FileItemLocalizer[\"IT-it\"];\r\n case \"PT-pt\": return FileItemLocalizer[\"PT-pt\"];\r\n case \"RU-ru\": return FileItemLocalizer[\"RU-ru\"];\r\n case \"ZH-cn\": return FileItemLocalizer[\"ZH-cn\"];\r\n case \"ZH-hk\": return FileItemLocalizer[\"ZH-hk\"];\r\n default: return FileItemLocalizer[\"EN-en\"];\r\n }\r\n}","import { DropzoneRussian } from \"./Russian/localization.russian\";\r\nimport { ComponentLocalizer, LocalLabels, Localization } from \"./localization\";\r\nimport { DropzoneEnglish } from \"./English/localization.english\";\r\nimport { DropzoneFrench } from \"./French/localization.french\";\r\nimport { DropzonePortuguese } from \"./Portuguese/localization.portuguese\";\r\nimport { DropzoneSpanish } from \"./Spanish/localization.spanish\";\r\nimport { DropzoneSimplifiedChinese } from \"./Chinese-simplified/localization.simplifiedChinese\";\r\nimport { DropzoneTraditionalChinese } from \"./Chinese-traditional/localization.traditionalChinese\";\r\nimport { DropzoneItalian } from \"./Italian/localization.italian\";\r\n\r\nexport const DropzoneLocalizer: ComponentLocalizer = {\r\n \"ES-es\": DropzoneSpanish,\r\n \"EN-en\": DropzoneEnglish,\r\n \"FR-fr\": DropzoneFrench,\r\n \"IT-it\": DropzoneItalian,\r\n \"PT-pt\": DropzonePortuguese,\r\n \"RU-ru\": DropzoneRussian,\r\n \"ZH-cn\": DropzoneSimplifiedChinese,\r\n \"ZH-hk\": DropzoneTraditionalChinese\r\n\r\n}\r\n/**\r\n * Secure translation through a selector\r\n * @param local the Localization\r\n * @returns a ComponentLocalizer object that contains the translation\r\n */\r\nexport const DropzoneLocalizerSelector = (local: Localization | undefined): LocalLabels => {\r\n switch (local) {\r\n case \"ES-es\": return DropzoneLocalizer[\"ES-es\"];\r\n case \"EN-en\": return DropzoneLocalizer[\"EN-en\"];\r\n case \"FR-fr\": return DropzoneLocalizer[\"FR-fr\"];\r\n case \"IT-it\": return DropzoneLocalizer[\"IT-it\"];\r\n case \"PT-pt\": return DropzoneLocalizer[\"PT-pt\"];\r\n case \"RU-ru\": return DropzoneLocalizer[\"RU-ru\"];\r\n case \"ZH-cn\": return DropzoneLocalizer[\"ZH-cn\"];\r\n case \"ZH-hk\": return DropzoneLocalizer[\"ZH-hk\"];\r\n default: return DropzoneLocalizer[\"EN-en\"];\r\n }\r\n}","import { ValidateErrorRussian } from \"./Russian/localization.russian\";\r\nimport { ComponentLocalizer, LocalLabels, Localization } from \"./localization\";\r\nimport { ValidateErrorEnglish } from \"./English/localization.english\";\r\nimport { ValidateErrorFrench } from \"./French/localization.french\";\r\nimport { ValidateErrorPortuguese } from \"./Portuguese/localization.portuguese\";\r\nimport { ValidateErrorSpanish } from \"./Spanish/localization.spanish\";\r\nimport { ValidateErrorSimplifiedChinese } from \"./Chinese-simplified/localization.simplifiedChinese\";\r\nimport { ValidateErrorTraditionalChinese } from \"./Chinese-traditional/localization.traditionalChinese\";\r\nimport { ValidateErrorItalian } from \"./Italian/localization.italian\";\r\n\r\nexport const ValidateErrorLocalizer: ComponentLocalizer = {\r\n \"ES-es\": ValidateErrorSpanish,\r\n \"EN-en\": ValidateErrorEnglish,\r\n \"FR-fr\": ValidateErrorFrench,\r\n \"IT-it\": ValidateErrorItalian,\r\n \"PT-pt\": ValidateErrorPortuguese,\r\n \"RU-ru\": ValidateErrorRussian,\r\n \"ZH-cn\": ValidateErrorSimplifiedChinese,\r\n \"ZH-hk\": ValidateErrorTraditionalChinese,\r\n}\r\n/**\r\n * Secure translation through a selector\r\n * @param local the Localization\r\n * @returns a ComponentLocalizer object that contains the translation\r\n */\r\nexport const ValidateErrorLocalizerSelector = (local: Localization | undefined): LocalLabels => {\r\n \r\n switch (local) {\r\n case \"ES-es\": return ValidateErrorLocalizer[\"ES-es\"];\r\n case \"EN-en\": return ValidateErrorLocalizer[\"EN-en\"];\r\n case \"FR-fr\": return ValidateErrorLocalizer[\"FR-fr\"];\r\n case \"IT-it\": return ValidateErrorLocalizer[\"IT-it\"];\r\n case \"PT-pt\": return ValidateErrorLocalizer[\"PT-pt\"];\r\n case \"RU-ru\": return ValidateErrorLocalizer[\"RU-ru\"];\r\n case \"ZH-cn\": return ValidateErrorLocalizer[\"ZH-cn\"];\r\n case \"ZH-hk\": return ValidateErrorLocalizer[\"ZH-hk\"];\r\n default: return ValidateErrorLocalizer[\"EN-en\"];\r\n }\r\n}","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","function ___$insertStyle(css) {\n if (!css) {\n return;\n }\n\n if (typeof window === 'undefined') {\n return;\n }\n\n const style = document.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n return css;\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\n/**\r\n * hexArray & decArray\r\n *\r\n * arrays of numbers used to convert hexadecimal numbers into decimal and viceversa\r\n */\r\nvar hexArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];\r\nvar decArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];\r\n/**\r\n * Converts hex number in string representation to decimal number\r\n *\r\n *\r\n * @param letter the string hex number\r\n * @returns a decimal number\r\n */\r\nvar hexTodec = function (letter) {\r\n if (hexArray.includes(letter)) {\r\n return decArray[hexArray.indexOf(letter)];\r\n }\r\n else {\r\n return 0;\r\n }\r\n};\r\n/**\r\n * Validates wheteher the color is hexadecimal css color\r\n * Example: #FF56AC\r\n *\r\n *\r\n * @param colorInput the color inpt to test\r\n * @returns true if the inputColor is a hexadecimal css color\r\n */\r\nvar isHexColor = function (colorInput) {\r\n // if first element is no '#' return default background color\r\n if (colorInput.charAt(0) !== '#') {\r\n return false;\r\n }\r\n // if color lenght is not exactly 7 return default\r\n if (colorInput.length !== 7) {\r\n return false;\r\n }\r\n // if one of the letters is not included in hex array return default\r\n for (var i = 1; i < colorInput.length; i++) {\r\n if (!hexArray.includes(colorInput.charAt(i))) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n};\r\n/**\r\n * In order to managae rgba() we convert hex colors into rgba()\r\n * If the given color is already a rgb() color, it can add the percentage to convert it into rgba()\r\n *\r\n *\r\n * @param colorInput color in hex or in rgb\r\n * @param perc percentage for RGBA() color\r\n * @returns the rgba representation of a hex color\r\n */\r\nvar hexColorToRGB = function (colorInput, perc, defaultColor) {\r\n if (perc === void 0) { perc = 0; }\r\n var resultDefault = defaultColor ? defaultColor : \"rgba(255, 255, 255, 0.6)\";\r\n if (!colorInput) {\r\n return resultDefault;\r\n }\r\n //work only in uppercase\r\n var color = colorInput.toUpperCase();\r\n // is already a rgba color\r\n if (color.includes(\"RGBA\")) {\r\n return color;\r\n }\r\n //return rbg => rgba\r\n if (color.includes(\"RGB\")) {\r\n return color.replace('RGB', \"rgba\").replace(')', \", \" + perc + \")\");\r\n }\r\n // if is a hex color or named color\r\n if (!isHexColor(colourNameToHex(color))) {\r\n return resultDefault;\r\n }\r\n var resultOk = \"\";\r\n //let strVar: string = \"\";\r\n var component1 = 0;\r\n var component2 = 0;\r\n var component3 = 0;\r\n //If passed all validations, proceed to transform\r\n component1 = hexTodec(color.charAt(1)) * 16 + hexTodec(color.charAt(2));\r\n component2 = hexTodec(color.charAt(3)) * 16 + hexTodec(color.charAt(4));\r\n component3 = hexTodec(color.charAt(5)) * 16 + hexTodec(color.charAt(6));\r\n resultOk = \"rgba(\" + component1 + \", \" + component2 + \",\" + component3 + \" , \" + perc + \")\";\r\n return resultOk;\r\n};\r\n/**\r\n * Make the color into a darker color\r\n * @param colorInput\r\n * @returns the darked color in\r\n */\r\nvar darkerColor = function (colorInput, percentage) {\r\n if (percentage === void 0) { percentage = 25; }\r\n var darkedColor = \"\";\r\n var reduce = (100 - percentage) / 100;\r\n var component1 = 0;\r\n var component2 = 0;\r\n var component3 = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n component1 = hexTodec(colorInput.charAt(1)) * 16 + hexTodec(colorInput.charAt(2));\r\n component2 = hexTodec(colorInput.charAt(3)) * 16 + hexTodec(colorInput.charAt(4));\r\n component3 = hexTodec(colorInput.charAt(5)) * 16 + hexTodec(colorInput.charAt(6));\r\n darkedColor = \"rgb(\" + component1 * reduce + \", \" + component2 * reduce + \",\" + component3 * reduce + \")\";\r\n }\r\n else {\r\n if (colorInput.includes(\"rgba\")) {\r\n var slicer = colorInput.replace(\"rgba(\", \"\");\r\n var components = slicer.split(\",\");\r\n darkedColor = \"rgb(\" + parseInt(components[0], 10) * reduce + \", \" + parseInt(components[1], 10) * reduce + \",\" + parseInt(components[2], 10) * reduce + \")\";\r\n //return darkedColor;\r\n }\r\n else if (colorInput.includes(\"rgb\")) {\r\n var slicer = colorInput.replace(\"rgb(\", \"\");\r\n var components = slicer.split(\",\");\r\n darkedColor = \"rgb(\" + parseInt(components[0], 10) * reduce + \", \" + parseInt(components[1], 10) * reduce + \",\" + parseInt(components[2], 10) * reduce + \")\";\r\n // return darkedColor;\r\n }\r\n }\r\n return darkedColor;\r\n};\r\n/**\r\n * Merge props that com form user and those ones that are default\r\n * if incommingStyle is null this returns teh default value\r\n *\r\n * @param incommingProps prop that comes from props attributoo of a React Node\r\n * @param defaultProps default prop defined for that React Node\r\n * @returns merged props\r\n */\r\nfunction mergeProps(incommingProps, defaultProps) {\r\n if (!incommingProps) {\r\n return defaultProps;\r\n }\r\n else {\r\n return __assign(__assign({}, defaultProps), incommingProps);\r\n }\r\n}\r\n/**\r\n * Asure a base colour when not given or when given an incorrect color format\r\n * default color is this kind of grey #5d6475\r\n *\r\n * @param color param color given by user\r\n * @returns returns the same color\r\n */\r\nvar asureColor = function (color) {\r\n if (color !== undefined && color !== \"\") {\r\n return color;\r\n }\r\n else {\r\n return \"#5d6475\";\r\n }\r\n};\r\n/**\r\n * Converts a named color into hexadecimal color\r\n * from a list of well known namd colors if found.\r\n * When not given returns a \"\"\r\n * When not found in the list, returns the same value given\r\n * @param colour the named color\r\n * @returns The hex representation of the color or \"\" or the same color\r\n */\r\nfunction colourNameToHex(colour) {\r\n /**\r\n * When not given\r\n */\r\n if (!colour) {\r\n return \"\";\r\n }\r\n /**\r\n * when named color is found\r\n */\r\n if (namedColours2[colour.toLocaleLowerCase()] !== undefined) {\r\n return namedColours2[colour.toLocaleLowerCase()];\r\n }\r\n /**\r\n * When the named color was not found\r\n */\r\n return colour;\r\n}\r\n/**\r\n * The full list of named Colors provided by\r\n * https://htmlcolorcodes.com/es/nombres-de-los-colores/\r\n */\r\nvar namedColours2 = {\r\n //RED\r\n indianred: \"#CD5C5C\",\r\n lightcoral: \"#F08080\",\r\n salmon: \"#FA8072\",\r\n darksalmon: \"#E9967A\",\r\n lightsalmon: \"#FFA07A\",\r\n crimson: \"#DC143C\",\r\n red: \"#FF0000\",\r\n firebrick: \"#B22222\",\r\n darkred: \"#8B0000\",\r\n //PINK\r\n pink: \"#FFC0CB\",\r\n lightpink: \"#FFB6C1\",\r\n hotpink: \"#FF69B4\",\r\n deeppink: \"#FF1493\",\r\n mediumvioletred: \"#C71585\",\r\n palevioletred: \"#DB7093\",\r\n //ORANGE\r\n //\"lightsalmon: \"#FFA07A\",\r\n coral: \"#FF7F50\",\r\n tomato: \"#FF6347\",\r\n orangered: \"#FF4500\",\r\n darkorange: \"#FF8C00\",\r\n orange: \"#FFA500\",\r\n //YELLOW\r\n gold: \"#FFD700\",\r\n yellow: \"#FFFF00\",\r\n lightyellow: \"#FFFFE0\",\r\n lemonchiffon: \"#FFFACD\",\r\n lightgoldenrodyellow: \"#FAFAD2\",\r\n papayawhip: \"#FFEFD5\",\r\n moccasin: \"#FFE4B5\",\r\n peachpuff: \"#FFDAB9\",\r\n palegoldenrod: \"#EEE8AA\",\r\n khaki: \"#F0E68C\",\r\n darkkhaki: \"#BDB76B\",\r\n //PURPLE\r\n lavender: \"#E6E6FA\",\r\n thistle: \"#D8BFD8\",\r\n plum: \"#DDA0DD\",\r\n violet: \"#EE82EE\",\r\n orchid: \"#DA70D6\",\r\n fuchsia: \"#FF00FF\",\r\n magenta: \"#FF00FF\",\r\n mediumorchid: \"#BA55D3\",\r\n mediumpurple: \"#9370DB\",\r\n rebeccapurple: \"#663399\",\r\n blueviolet: \"#8A2BE2\",\r\n darkviolet: \"#9400D3\",\r\n darkorchid: \"#9932CC\",\r\n darkmagenta: \"#8B008B\",\r\n purple: \"#800080\",\r\n indigo: \"#4B0082\",\r\n slateblue: \"#6A5ACD\",\r\n darkslateblue: \"#483D8B\",\r\n mediumslateblue: \"#7B68EE\",\r\n //GREEN\r\n greenyellow: \"#ADFF2F\",\r\n chartreuse: \"#7FFF00\",\r\n lawngreen: \"#7CFC00\",\r\n lime: \"#00FF00\",\r\n limegreen: \"#32CD32\",\r\n palegreen: \"#98FB98\",\r\n lightgreen: \"#90EE90\",\r\n mediumspringgreen: \"#00FA9A\",\r\n springgreen: \"#00FF7F\",\r\n mediumseagreen: \"#3CB371\",\r\n seagreen: \"#2E8B57\",\r\n forestgreen: \"#228B22\",\r\n green: \"#008000\",\r\n darkgreen: \"#006400\",\r\n yellowgreen: \"#9ACD32\",\r\n olivedrab: \"#6B8E23\",\r\n olive: \"#808000\",\r\n darkolivegreen: \"#556B2F\",\r\n mediumaquamarine: \"#66CDAA\",\r\n darkseagreen: \"#8FBC8B\",\r\n lightseagreen: \"#20B2AA\",\r\n darkcyan: \"#008B8B\",\r\n teal: \"#008080\",\r\n //BLUE\r\n aqua: \"#00FFFF\",\r\n cyan: \"#00FFFF\",\r\n lightcyan: \"#E0FFFF\",\r\n paleturquoise: \"#AFEEEE\",\r\n aquamarine: \"#7FFFD4\",\r\n turquoise: \"#40E0D0\",\r\n mediumturquoise: \"#48D1CC\",\r\n darkturquoise: \"#00CED1\",\r\n cadetblue: \"#5F9EA0\",\r\n steelblue: \"#4682B4\",\r\n lightsteelblue: \"#B0C4DE\",\r\n powderblue: \"#B0E0E6\",\r\n lightblue: \"#ADD8E6\",\r\n skyblue: \"#87CEEB\",\r\n lightskyblue: \"#87CEFA\",\r\n deepskyblue: \"#00BFFF\",\r\n dodgerblue: \"#1E90FF\",\r\n cornflowerblue: \"#6495ED\",\r\n //\"mediumslateblue: \"#7B68EE\",\r\n royalblue: \"#4169E1\",\r\n blue: \"#0000FF\",\r\n mediumblue: \"#0000CD\",\r\n darkblue: \"#00008B\",\r\n navy: \"#000080\",\r\n midnightblue: \"#191970\",\r\n //BROWN\r\n cornsilk: \"#FFF8DC\",\r\n blanchedalmond: \"#FFEBCD\",\r\n bisque: \"#FFE4C4\",\r\n navajowhite: \"#FFDEAD\",\r\n wheat: \"#F5DEB3\",\r\n burlywood: \"#DEB887\",\r\n tan: \"#D2B48C\",\r\n rosybrown: \"#BC8F8F\",\r\n sandybrown: \"#F4A460\",\r\n goldenrod: \"#DAA520\",\r\n darkgoldenrod: \"#B8860B\",\r\n peru: \"#CD853F\",\r\n chocolate: \"#D2691E\",\r\n saddlebrown: \"#8B4513\",\r\n sienna: \"#A0522D\",\r\n brown: \"#A52A2A\",\r\n maroon: \"#800000\",\r\n //WHITE\r\n white: \"#FFFFFF\",\r\n snow: \"#FFFAFA\",\r\n honeydew: \"#F0FFF0\",\r\n mintcream: \"#F5FFFA\",\r\n azure: \"#F0FFFF\",\r\n aliceblue: \"#F0F8FF\",\r\n ghostwhite: \"#F8F8FF\",\r\n whitesmoke: \"#F5F5F5\",\r\n seashell: \"#FFF5EE\",\r\n beige: \"#F5F5DC\",\r\n oldlace: \"#FDF5E6\",\r\n floralwhite: \"#FFFAF0\",\r\n ivory: \"#FFFFF0\",\r\n antiquewhite: \"#FAEBD7\",\r\n linen: \"#FAF0E6\",\r\n lavenderblush: \"#FFF0F5\",\r\n mistyrose: \"#FFE4E1\",\r\n //GREY\r\n gainsboro: \"#DCDCDC\",\r\n lightgray: \"#D3D3D3\",\r\n silver: \"#C0C0C0\",\r\n darkgray: \"#A9A9A9\",\r\n gray: \"#808080\",\r\n dimgray: \"#696969\",\r\n lightslategray: \"#778899\",\r\n slategray: \"#708090\",\r\n darkslategray: \"#2F4F4F\",\r\n black: \"#000000\"\r\n};\n\nexport { asureColor, colourNameToHex, darkerColor, hexColorToRGB, mergeProps };\n//# sourceMappingURL=index.es.js.map\n","function ___$insertStyle(css) {\n if (!css) {\n return;\n }\n\n if (typeof window === 'undefined') {\n return;\n }\n\n const style = document.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n return css;\n}\n\nvar DynamiCSS;\r\n(function (DynamiCSS) {\r\n function insertStyleSheet(dynamicSheet) {\r\n var result_id = \"\";\r\n if (typeof window === \"undefined\") {\r\n return \"\";\r\n }\r\n if (!dynamicSheet) {\r\n return \"\";\r\n }\r\n //if already exists\r\n if (document.getElementById(dynamicSheet.id)) {\r\n return dynamicSheet.id;\r\n }\r\n result_id = dynamicSheet.id;\r\n var styleSheet = document.createElement(\"style\");\r\n styleSheet.id = result_id;\r\n styleSheet.setAttribute(\"type\", \"text/css\");\r\n var contetRaw = toRawStyleSheet(dynamicSheet.sheetRules || []) + dynamicSheet.raw || \"\";\r\n styleSheet.textContent = contetRaw;\r\n var appendResult = document.head.appendChild(styleSheet);\r\n if (!appendResult) {\r\n return \"\";\r\n }\r\n return result_id;\r\n }\r\n DynamiCSS.insertStyleSheet = insertStyleSheet;\r\n function editStyleSheet(id, sheetRules) {\r\n var result_id = \"\";\r\n if (typeof window === \"undefined\") {\r\n return \"\";\r\n }\r\n if (!id || !sheetRules) {\r\n return \"\";\r\n }\r\n //if dont exists yet\r\n var styleSheet = document.getElementById(id);\r\n if (!styleSheet) {\r\n return \"\";\r\n }\r\n /* result_id = id;\r\n //var styleSheet: HTMLStyleElement = document.createElement(\"style\");\r\n styleSheet.id = result_id;\r\n styleSheet.setAttribute(\"type\", \"text/css\"); */\r\n styleSheet.textContent = toRawStyleSheet(sheetRules);\r\n return result_id;\r\n }\r\n DynamiCSS.editStyleSheet = editStyleSheet;\r\n function removeStyleSheet(id) {\r\n var result_id = \"\";\r\n if (!id) {\r\n return \"\";\r\n }\r\n var htmlObject = document.getElementById(id);\r\n if (htmlObject) {\r\n document.head.removeChild(htmlObject);\r\n result_id = id;\r\n }\r\n return result_id;\r\n }\r\n DynamiCSS.removeStyleSheet = removeStyleSheet;\r\n function existStyleSheet(id) {\r\n if (!id) {\r\n return false;\r\n }\r\n var htmlObject = document.getElementById(id);\r\n if (htmlObject) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n DynamiCSS.existStyleSheet = existStyleSheet;\r\n function makeStyleSheet(styleSheet) {\r\n if (!styleSheet) {\r\n return null;\r\n }\r\n return styleSheet;\r\n }\r\n DynamiCSS.makeStyleSheet = makeStyleSheet;\r\n})(DynamiCSS || (DynamiCSS = {}));\r\n/**\r\n * Determines whether a character is upperCase or not\r\n * @param str a character\r\n * @returns true if str contains a string character\r\n */\r\nfunction isUpper(character) {\r\n if (!character)\r\n return false;\r\n return !/[a-z]/.test(character) && /[A-Z]/.test(character);\r\n}\r\n/**\r\n * Converts a rule with uppercase to a hyphen-lowercase version\r\n * @param rule the rule\r\n * @returns\r\n */\r\nfunction fromUpperCaseToHyphen(ruleLabel) {\r\n var result = \"\";\r\n var charUpper = ' ';\r\n var isupper = false;\r\n for (var i = 0; i < ruleLabel.length; i++) {\r\n var currentChar = ruleLabel[i];\r\n if (isUpper(currentChar)) {\r\n charUpper = currentChar;\r\n isupper = true;\r\n break;\r\n }\r\n }\r\n //add hyphen\r\n if (isupper) {\r\n var parts = ruleLabel.split(charUpper);\r\n result = parts[0] + \"-\" + charUpper.toLowerCase() + parts[1];\r\n }\r\n else {\r\n result = ruleLabel;\r\n }\r\n return result;\r\n}\r\n/**\r\n *\r\n * @param ruleLabel the rule\r\n * @returns true if the rule label corresponds to a pseudo class\r\n */\r\nfunction isPseudo(ruleLabel) {\r\n if (!ruleLabel)\r\n return false;\r\n return ruleLabel.includes(\":\");\r\n}\r\nfunction makeRawRuleLabel(className) {\r\n var result = \"\";\r\n var splitedClassName = className.trim().split(\" \");\r\n //is composed classname?\r\n if (splitedClassName.length > 1) {\r\n for (var i = 0; i < splitedClassName.length; i++) {\r\n result += \".\" + splitedClassName[i];\r\n }\r\n result += \"{\\n\";\r\n }\r\n else {\r\n result += \".\" + className + \"{\\n\";\r\n }\r\n return result;\r\n}\r\nfunction toRawStyleSheet(sheetRules) {\r\n if (!sheetRules) {\r\n return \"\";\r\n }\r\n var rawStyleSheet = \"\";\r\n var nestedPseudos = [];\r\n for (var j = 0; j < sheetRules.length; j++) {\r\n var currentRule = sheetRules[j];\r\n var currnetRawRule = \"\";\r\n // currnetRawRule += `.${currentRule.className}{\\n`;\r\n currnetRawRule += makeRawRuleLabel(currentRule.className);\r\n //list of labels for rules\r\n var ruleskeys = Object.keys(currentRule.rules);\r\n for (var i = 0; i < ruleskeys.length; i++) {\r\n var currentKey = ruleskeys[i];\r\n var styleLabel = fromUpperCaseToHyphen(currentKey);\r\n //if a pseudo class found, separate it\r\n if (isPseudo(styleLabel)) {\r\n var pseudoClassName = currentRule.className + styleLabel;\r\n nestedPseudos.push({ className: pseudoClassName, rules: currentRule.rules[styleLabel] });\r\n }\r\n else {\r\n var styleRule = currentRule.rules[currentKey];\r\n currnetRawRule += \"\\t\" + styleLabel + \" : \" + styleRule + \";\\n\";\r\n }\r\n }\r\n currnetRawRule += \"}\\n\";\r\n rawStyleSheet += currnetRawRule;\r\n }\r\n //nested pseudos\r\n for (var p = 0; p < nestedPseudos.length; p++) {\r\n var currnetRawRule = \"\";\r\n var currentRule = nestedPseudos[p];\r\n var ruleskeys = Object.keys(currentRule.rules);\r\n currnetRawRule += \".\" + currentRule.className + \"{\\n\";\r\n for (var i = 0; i < ruleskeys.length; i++) {\r\n var currentKey = ruleskeys[i];\r\n var styleLabel = fromUpperCaseToHyphen(currentKey);\r\n var styleRule = currentRule.rules[currentKey];\r\n currnetRawRule += \"\\t\" + styleLabel + \" : \" + styleRule + \";\\n\";\r\n }\r\n currnetRawRule += \"}\\n\";\r\n rawStyleSheet += currnetRawRule;\r\n }\r\n return rawStyleSheet;\r\n}\n\nexport { DynamiCSS };\n//# sourceMappingURL=index.es.js.map\n","import { DynamicSheet, DynamiCSS } from \"@dynamicss/dynamicss\";\r\nimport { asureColor, colourNameToHex, hexColorToRGB } from \"@unlimited-react-components/kernel\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { DropzoneProps } from \"../Dropzone/DropzoneProps\";\r\n\r\n/**\r\n * \r\n * @param color The color theme\r\n * @param backgroundColor the background Color\r\n * @param maxHeight the max heigth for dropzone container\r\n * @param minHeight the min heigth for dropzone container\r\n * @returns a valid classnname for the component\r\n */\r\nconst useDropzoneStyles = (\r\n color: string | undefined,\r\n backgroundColor: string | undefined,\r\n maxHeight: string | undefined,\r\n minHeight: string | undefined,\r\n offset: number\r\n): string => {\r\n const [idStyles, setIdStyles] = useState<string>(\"\");\r\n const [styleInjected, setStyleInjected] = useState<boolean>(false);\r\n const [classNameCreated, setClassNameCreated] = useState<string>(\"\");\r\n\r\n useEffect(() => {\r\n /* const removeStyle = () => {\r\n if (styleInjected) {\r\n DynamiCSS.removeStyleSheet(idStyles);\r\n setStyleInjected(false);\r\n setIdStyles(\"\");\r\n }\r\n }; */\r\n const handleInserStyle = (\r\n color: DropzoneProps[\"color\"], backgroundColor: string | undefined,\r\n maxHeight: string | undefined,\r\n minHeight: string | undefined, \r\n offset: number\r\n ) => {\r\n //console.log(\"offset: \", offset);\r\n //console.log(\"result\",(offset === 0 || offset === 50) ? \"center\" : \"flex-start\");\r\n //console.log(\"minHeight\",`calc(${minHeight} + ${offset}px)`);\r\n let styleSheet: DynamicSheet = {\r\n id: \"dropzone-ui-styles\",\r\n sheetRules: [\r\n {\r\n className: `dropzone-ui-extra`,\r\n rules: {\r\n border: `1px dashed ${hexColorToRGB(\r\n asureColor(colourNameToHex(color)),\r\n 1\r\n )}`,\r\n backgroundColor: backgroundColor,\r\n maxHeight: maxHeight,\r\n //minHeight: `calc(${minHeight} + 50px)`\r\n minHeight: `calc(${minHeight} + ${offset}px)`,\r\n //justifyContent: (offset === 0 || offset === 50) ? \"center\" : \"flex-start\",\r\n },\r\n },\r\n {\r\n className: `drag`,\r\n rules: {\r\n border: `2px dashed ${hexColorToRGB(\r\n asureColor(colourNameToHex(color)),\r\n 1\r\n )}`,\r\n backgroundColor: hexColorToRGB(\r\n asureColor(colourNameToHex(color)),\r\n 0.085\r\n ),\r\n },\r\n }\r\n\r\n ],\r\n };;\r\n let idStyle: string = \"\";\r\n if (!styleInjected) {\r\n idStyle = DynamiCSS.insertStyleSheet(styleSheet);\r\n\r\n setClassNameCreated(` dropzone-ui-extra`);\r\n setIdStyles(idStyle);\r\n if (idStyle !== \"\") {\r\n setStyleInjected(true);\r\n }\r\n } else {\r\n //already a stylesheet associated\r\n DynamiCSS.editStyleSheet(idStyles, styleSheet.sheetRules || []);\r\n }\r\n\r\n //className\r\n };\r\n\r\n\r\n handleInserStyle(color, backgroundColor, maxHeight, minHeight, offset);\r\n /* return () => {\r\n removeStyle();\r\n } */\r\n // eslint-disable-next-line\r\n }, [color, backgroundColor, maxHeight, minHeight, offset]);\r\n\r\n return classNameCreated;\r\n}\r\nexport default useDropzoneStyles;","import { OverridableProps } from \"@unlimited-react-components/kernel\";\r\nimport { Localization } from \"../../../../localization/localization\";\r\nimport { FileItemContainerProps } from \"../../../file-item/components/FileItemContainer/FileItemContainerProps\";\r\nimport { FileDuiResponse } from \"../utils/dropzone-ui.upload.utils\";\r\nimport { CustomValidateFileResponse, FileValidated } from \"../utils/validation.utils\";\r\n\r\nexport interface DropzoneProps extends OverridableProps {\r\n /**\r\n * This event is triggered when files are dropped or selected. \r\n * Returns as first parameter the list of FileValidate files dropped or selected.\r\n */\r\n onDrop?: (filesDropped: FileValidated[]) => void;\r\n /**\r\n * server Url or endpoint to upload the files\r\n */\r\n url?: string;\r\n /**\r\n * upload method, can be POST | PUT | PATCH\r\n */\r\n method?: \"POST\" | \"PUT\" | \"PATCH\";\r\n /**\r\n * Extra configuration for uploading\r\n * e.g. headers or bearer token\r\n * default:\r\n * config = {\r\n * headers: { \r\n * \"content-type\": \"multipart/form-data\", \r\n * }, \r\n * } \r\n * \r\n */\r\n config?: Object;\r\n /**\r\n * If true, onDrop event will return the list of files, but also\r\n * will upload the files if url was set, and also config\r\n */\r\n uploadOnDrop?: boolean;\r\n /**\r\n * Max number of files to be accepted.\r\n */\r\n maxFiles?: number;\r\n /**\r\n * max file size allowed in bytes\r\n */\r\n maxFileSize?: number;\r\n /**\r\n * If true, the dropzone component itself will be clickable\r\n */\r\n clickable?: boolean;\r\n /**\r\n * Extra featur to perform on click\r\n * Only if clickable was set to true\r\n */\r\n onClick?: Function;\r\n /**\r\n * The default implementation of accept\r\n * checks the file's mime type or extension\r\n * against this list. This is a comma\r\n * separated list of mime types or file extensions.\r\n * Eg.: image/*,application/pdf,.psd\r\n */\r\n accept?: string;\r\n /**\r\n * If true, files that does not match accept\r\n * criteria will be ignored\r\n */\r\n removeOnDrop?: boolean;\r\n /**\r\n * If present, delete all butoon will be visible\r\n * and will trigger this function onClick\r\n */\r\n onReset?: Function;\r\n /**\r\n * if true, will show a ripple everytime\r\n * the user drops files os selects files\r\n */\r\n disableRipple?: boolean;\r\n /**\r\n * The background color for dropzone,\r\n * by default is linear-gradient(to bottom, aliceblue,#b7a8a8)\r\n */\r\n backgroundColor?: string;\r\n /**\r\n * custom validator\r\n * must be a function that recieves as first parameter a File Object\r\n * and must return a boolean value\r\n */\r\n validator?: (f: File) => CustomValidateFileResponse;\r\n /**\r\n * The current number of valid files\r\n */\r\n //numberOfValidFiles?: number;\r\n /**\r\n * If present will make change view visible\r\n * and also return the selected view mode\r\n */\r\n onChangeView?: Function;\r\n /**\r\n * The current view\r\n */\r\n view?: FileItemContainerProps[\"view\"];\r\n /**\r\n * The max height of the container\r\n * in string format\r\n * by default \"500px\"\r\n * \r\n * examples: \r\n * \"50vh\"\r\n * \"20%\"\r\n * \"40em\"\r\n * \"1rem\"\r\n */\r\n maxHeight?: string;\r\n /**\r\n * The max height of the container\r\n * in string format\r\n * by default \"500px\"\r\n * \r\n * examples: \r\n * \"50vh\"\r\n * \"20%\"\r\n * \"40em\"\r\n * \"1rem\"\r\n */\r\n minHeight?: string;\r\n /**\r\n * if true, shows the dropzone footer\r\n */\r\n footer?: boolean;\r\n /**\r\n * if true, shows the dropzone footer\r\n */\r\n header?: boolean;\r\n /**\r\n * Just like any other input component\r\n * the value prop is the current value\r\n */\r\n value?: FileValidated[];\r\n /**\r\n * This event is triggered when upload process starts\r\n * also returns the list of files that will be uploaded,\r\n * Unlike Onchange, onUploadStart will only return a list of files thta are candidates to be uploaded,\r\n * in case they are valid or upload status is \"error\"\r\n */\r\n onUploadStart?: (files: FileValidated[]) => void;\r\n /**\r\n * This event returns as first aparameter the list of responses for each file following the structure:\r\n * responses = [\r\n * {id: <the file id>, serverResponse: the server response}\r\n * ]\r\n */\r\n onUploadFinish?: (responses: FileDuiResponse[]) => void;\r\n\r\n /**\r\n * A message to show in the footer when the uploading process happens\r\n */\r\n uploadingMessage?: string;\r\n /**\r\n * Probably one of the most important methods.\r\n * Onchange returns as first parameter the list of validated files,\r\n * following the structure:\r\n * file = \r\n * {\r\n * file: File;\r\n * valid: boolean;\r\n * id: number | string | undefined;\r\n * errors?: string[];\r\n * uploadMessage?: string;\r\n * uploadStatus?: undefined | \"uploading\", success, error;\r\n * }\r\n *\r\n * This event is also triggered when upload starts and when upload \r\n * finishes for each file in order to update the props on very FIleItem\r\n */\r\n onChange?: (files: FileValidated[]) => void;\r\n /**\r\n * This event is triggered when \"clean button is clicked\"\r\n * Retuns as first parameter the list of files without not valid files\r\n */\r\n onClean?: (files: FileValidated[]) => void;\r\n /**\r\n * The behaviuor on drop files\r\n */\r\n behaviour?: \"add\" | \"replace\";\r\n /**\r\n * Label to place when no files selected\r\n */\r\n label?: string;\r\n /**\r\n * Use this prop only in development mode\r\n * This will make dropzone to simulate a server upload\r\n */\r\n fakeUploading?: boolean;\r\n /**\r\n * language to be used\r\n * for now\r\n * only English, French , Portuguese, Chinnese (traditional and simplyfied) and Spanish are supported\r\n */\r\n localization?: Localization;\r\n /**\r\n * if present or true, removes scrolls\r\n * and sets the Dropzone in a grid view\r\n */\r\n disableScroll?: boolean;\r\n}\r\n\r\nexport const DropzonePropsDefault: DropzoneProps = {\r\n children: undefined,\r\n uploadOnDrop: false,\r\n maxFiles: undefined,\r\n style: {},\r\n //backgroundColor: \"linear-gradient(to bottom, aliceblue,#b7a8a8)\",\r\n //numberOfValidFiles: 0,\r\n disableRipple: false,\r\n clickable: true,\r\n view: undefined,\r\n maxHeight: \"450px\",\r\n minHeight: \"280px\",\r\n footer: true,\r\n header: true,\r\n config:\r\n {\r\n headers: {\r\n \"content-type\": \"multipart/form-data\",\r\n },\r\n },\r\n value: undefined,\r\n onUploadFinish: undefined,\r\n uploadingMessage: undefined,\r\n onClean: undefined,\r\n behaviour: \"add\",\r\n label: undefined,\r\n localization: \"EN-en\",\r\n disableScroll:undefined\r\n};\r\n\r\n\r\n","import { asureColor, colourNameToHex, hexColorToRGB } from \"@unlimited-react-components/kernel\";\r\n\r\nexport function createRipple<\r\n T extends HTMLButtonElement | HTMLAnchorElement | HTMLDivElement\r\n>(event: React.MouseEvent<T, MouseEvent>, color: string) {\r\n const buttonAnchorDiv = event.currentTarget;\r\n\r\n const circle: HTMLSpanElement = document.createElement(\"span\");\r\n const diameter = Math.max(\r\n buttonAnchorDiv.clientWidth,\r\n buttonAnchorDiv.clientHeight\r\n );\r\n const radius: number = diameter / 2;\r\n\r\n circle.style.width = circle.style.height = `${diameter}px`;\r\n circle.style.left = `${event.clientX - buttonAnchorDiv.offsetLeft - radius\r\n }px`;\r\n circle.style.top = `${event.clientY - buttonAnchorDiv.offsetTop - radius}px`;\r\n circle.classList.add(\"ripple\");\r\n\r\n circle.style.backgroundColor = hexColorToRGB(\r\n asureColor(colourNameToHex(color)),\r\n 0.4\r\n );\r\n\r\n const ripple = buttonAnchorDiv.getElementsByClassName(\"ripple\")[0];\r\n if (ripple) {\r\n ripple.remove();\r\n }\r\n buttonAnchorDiv.appendChild(circle);\r\n}\r\n\r\n\r\nexport function createRippleFromElement<\r\n T extends HTMLButtonElement | HTMLAnchorElement | HTMLDivElement\r\n>(element: HTMLDivElement | null, event: React.MouseEvent<T, MouseEvent>, color: string) {\r\n if (!element) {\r\n return;\r\n }\r\n const buttonAnchorDiv = element;\r\n buttonAnchorDiv.style.height = \"100%\";\r\n buttonAnchorDiv.style.width = \"100%\";\r\n const circle: HTMLSpanElement = document.createElement(\"span\");\r\n const diameter = Math.max(\r\n buttonAnchorDiv.clientWidth,\r\n buttonAnchorDiv.clientHeight\r\n );\r\n const radius: number = diameter / 2;\r\n\r\n circle.style.width = circle.style.height = `${diameter}px`;\r\n circle.style.left = `${event.clientX - buttonAnchorDiv.offsetLeft - radius\r\n }px`;\r\n circle.style.top = `${event.clientY - buttonAnchorDiv.offsetTop - radius}px`;\r\n circle.classList.add(\"ripple\");\r\n\r\n circle.style.backgroundColor = hexColorToRGB(\r\n asureColor(colourNameToHex(color)),\r\n 0.4\r\n );\r\n\r\n const ripple = buttonAnchorDiv.getElementsByClassName(\"ripple\")[0];\r\n if (ripple) {\r\n ripple.remove();\r\n }\r\n buttonAnchorDiv.appendChild(circle);\r\n setTimeout(() => {\r\n buttonAnchorDiv.style.height = \"0%\";\r\n buttonAnchorDiv.style.width = \"0%\";\r\n }, 500);\r\n}\r\n","import { IconProps } from \"../IconProps/IconProps\";\r\n\r\nexport const parseSize = (sizeStr: IconProps[\"size\"]): number => {\r\n switch (sizeStr) {\r\n case \"micro\":\r\n return 8;\r\n case \"small\":\r\n return 15;\r\n case \"semi-medium\":\r\n return 18;\r\n case \"medium\":\r\n return 25;\r\n case \"large\":\r\n return 28;\r\n default:\r\n return 24;\r\n }\r\n}","import React,{ FC } from \"react\";\r\nimport { InfoProps } from \"./InfoProps\";\r\nimport { parseSize } from \"../utils/utils\";\r\n\r\nconst Info: FC<InfoProps> = (props: InfoProps) => {\r\n const { size, color, colorFill, onClick } = props;\r\n const finalSize = parseSize(size);\r\n return (\r\n <svg\r\n style={onClick ? { cursor: \"pointer\" } : {}}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n onClick={() => onClick?.()}\r\n >\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\r\n <path\r\n d=\"M12 4c-4.41 0-8 3.59-8 8s3.59 8 8 8 8-3.59 8-8-3.59-8-8-8zm1 13h-2v-6h2v6zm0-8h-2V7h2v2z\"\r\n fill={colorFill ? colorFill : \"none\"}\r\n opacity=\".7\"\r\n />\r\n <path d=\"M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\" />\r\n </svg>\r\n );\r\n};\r\nexport default Info;\r\n","import React, { FC } from \"react\";\r\nimport { CheckCircleProps } from \"./CheckCircleProps\";\r\nimport { parseSize } from \"../utils/utils\";\r\n\r\nconst CheckCircle: FC<CheckCircleProps> = (props: CheckCircleProps) => {\r\n const { size, color, colorFill, onClick, style, className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n\r\n return (\r\n <svg\r\n className={className || \"\"}\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n >\r\n <path d=\"M0 0h24v24H0z\" fill={colorFill ? colorFill : \"none\"} />\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\r\n </svg>\r\n );\r\n};\r\nexport default CheckCircle;\r\n","import React, { FC } from \"react\";\r\nimport { DoDisturbProps } from \"./DoDisturbProps\";\r\nimport { parseSize } from \"../utils/utils\";\r\n\r\nconst DoDisturb: FC<DoDisturbProps> = (props: DoDisturbProps) => {\r\n const {\r\n size,\r\n color,\r\n //colorFill,\r\n onClick,\r\n style,\r\n className,\r\n } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n\r\n return (\r\n <svg\r\n className={className || \"\"}\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n height={finalSize ? `${finalSize}px` : \"24px\"}\r\n viewBox=\"0 0 24 24\"\r\n width={finalSize ? `${finalSize}px` : \"24px\"}\r\n fill={color ? color : \"#000000\"}\r\n >\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\r\n <path\r\n d=\"M12 4c-4.41 0-8 3.59-8 8s3.59 8 8 8 8-3.59 8-8-3.59-8-8-8z\"\r\n opacity=\".4\"\r\n //fill={colorFill ? colorFill : \"none\"}\r\n />\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8 0-1.85.63-3.55 1.69-4.9L16.9 18.31C15.55 19.37 13.85 20 12 20zm6.31-3.1L7.1 5.69C8.45 4.63 10.15 4 12 4c4.42 0 8 3.58 8 8 0 1.85-.63 3.55-1.69 4.9z\" />\r\n </svg>\r\n );\r\n};\r\nexport default DoDisturb;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { CancelProps } from \"./CancelProps\";\r\n\r\nconst Cancel: FC<CancelProps> = (props: CancelProps) => {\r\n const { size, color, colorFill, onClick, style, className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n return (\r\n <svg\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={(e) => onClick?.(e)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n className={className || \"\"}\r\n >\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" opacity=\".87\" />\r\n <path\r\n d=\"M12 4c-4.41 0-8 3.59-8 8s3.59 8 8 8 8-3.59 8-8-3.59-8-8-8zm5 11.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\r\n fill={colorFill ? colorFill : \"none\"}\r\n opacity=\".5\"\r\n />\r\n <path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z\" />\r\n </svg>\r\n );\r\n};\r\nexport default Cancel;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { VisibilityProps } from \"./VisibilityProps\";\r\n\r\nconst Visibility: FC<VisibilityProps> = (props: VisibilityProps) => {\r\n const { size, color, colorFill, onClick, style, className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n\r\n return (\r\n <svg\r\n className={className || \"\"}\r\n style={onClick ? { cursor: \"pointer\", ...finalStyle } : finalStyle}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n onClick={(e) => onClick?.(e)}\r\n >\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\r\n <path\r\n d=\"M12 4c-4.41 0-8 3.59-8 8s3.59 8 8 8 8-3.59 8-8-3.59-8-8-8z\"\r\n opacity=\".9\"\r\n fill={colorFill ? colorFill : \"none\"}\r\n />\r\n <path d=\"M12 4C7 4 2.73 7.11 1 11.5 2.73 15.89 7 19 12 19s9.27-3.11 11-7.5C21.27 7.11 17 4 12 4zm0 12.5c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\r\n </svg>\r\n );\r\n};\r\nexport default Visibility;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { ViewListProps } from \"./ViewListProps\";\r\n\r\nconst ViewList: FC<ViewListProps> = (props: ViewListProps) => {\r\n const { size, color, colorFill, onClick, style, className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n return (\r\n <svg\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n enableBackground=\"new 0 0 24 24\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n className={className || \"\"}\r\n >\r\n <rect\r\n fill={colorFill || \"none\"}\r\n height={size || \"24\"}\r\n width={size || \"24\"}\r\n />\r\n <path d=\"M20,4H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V6C22,4.9,21.1,4,20,4z M8,18H4V6h4V18z M14,18h-4V6h4V18z M20,18h-4V6h4V18z\" />\r\n </svg>\r\n );\r\n};\r\nexport default ViewList;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { ViewGridProps } from \"./ViewGridProps\";\r\n\r\nconst ViewGrid: FC<ViewGridProps> = (props: ViewGridProps) => {\r\n const { size, color, \r\n //colorFill, \r\n onClick, style,className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n return (\r\n <svg\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n enableBackground=\"new 0 0 24 24\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n className={className || \"\"}\r\n >\r\n <g>\r\n <path d=\"M0,0h24v24H0V0z\" fill=\"none\" />\r\n </g>\r\n <g>\r\n <path d=\"M20,4H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V6C22,4.9,21.1,4,20,4z M8,11H4V6h4V11z M14,11h-4V6h4V11z M20,11h-4V6h4V11z M8,18H4v-5h4V18z M14,18h-4v-5h4V18z M20,18h-4v-5h4V18z\" />\r\n </g>\r\n </svg>\r\n );\r\n};\r\nexport default ViewGrid;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { UploadDoneProps } from \"./UploadDoneProps\";\r\n\r\nconst UploadDone: FC<UploadDoneProps> = (props: UploadDoneProps) => {\r\n const { size, color, colorFill, onClick, style, className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n return (\r\n <svg\r\n className={className || \"\"}\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n enableBackground=\"new 0 0 24 24\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n >\r\n <g>\r\n <rect\r\n fill={colorFill ? colorFill : \"none\"}\r\n height={finalSize}\r\n width={finalSize}\r\n />\r\n </g>\r\n <g>\r\n <g>\r\n <polygon points=\"20.13,5.41 18.72,4 9.53,13.19 5.28,8.95 3.87,10.36 9.53,16.02\" />\r\n <rect height=\"2\" width=\"14\" x=\"5\" y=\"18\" />\r\n </g>\r\n </g>\r\n </svg>\r\n );\r\n};\r\nexport default UploadDone;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { UploadErrorProps } from \"./UploadErrorProps\";\r\n\r\nconst UploadError: FC<UploadErrorProps> = (props: UploadErrorProps) => {\r\n const { size, color, colorFill, onClick, style, className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n return (\r\n <svg\r\n className={className || \"\"}\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n >\r\n <rect\r\n fill={colorFill ? colorFill : \"none\"}\r\n height={finalSize}\r\n width={finalSize}\r\n />\r\n <path d=\"M18,15.17V15h2v2.17L18,15.17z M15.41,12.59L17,11l-1.41-1.41L14,11.17L15.41,12.59z M13,10.17V4h-2v4.17L13,10.17z M21.19,21.19l-1.78-1.78L2.81,2.81L1.39,4.22l6.19,6.19L7,11l5,5l0.59-0.59L15.17,18H6v-3H4v3c0,1.1,0.9,2,2,2h11.17l2.61,2.61 L21.19,21.19z\" />\r\n </svg>\r\n );\r\n};\r\nexport default UploadError;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { CleanProps } from \"./CleanProps\";\r\n\r\nconst Clean: FC<CleanProps> = (props: CleanProps) => {\r\n const {\r\n size,\r\n color,\r\n //colorFill,\r\n onClick,\r\n style,\r\n className,\r\n } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n return (\r\n <svg\r\n className={className || \"\"}\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n enableBackground=\"new 0 0 24 24\"\r\n height={finalSize ? `${finalSize}px` : \"24px\"}\r\n viewBox=\"0 0 24 24\"\r\n width={finalSize ? `${finalSize}px` : \"24px\"}\r\n fill={color ? color : \"#000000\"}\r\n >\r\n <g>\r\n <rect\r\n fill=\"none\"\r\n height={finalSize || \"24\"}\r\n width={finalSize || \"24\"}\r\n />\r\n </g>\r\n <g>\r\n <g>\r\n <path d=\"M16,11h-1V3c0-1.1-0.9-2-2-2h-2C9.9,1,9,1.9,9,3v8H8c-2.76,0-5,2.24-5,5v7h18v-7C21,13.24,18.76,11,16,11z M11,3h2v8h-2V3 z M19,21h-2v-3c0-0.55-0.45-1-1-1s-1,0.45-1,1v3h-2v-3c0-0.55-0.45-1-1-1s-1,0.45-1,1v3H9v-3c0-0.55-0.45-1-1-1s-1,0.45-1,1v3H5 v-5c0-1.65,1.35-3,3-3h8c1.65,0,3,1.35,3,3V21z\" />\r\n </g>\r\n </g>\r\n </svg>\r\n );\r\n};\r\nexport default Clean;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { PlayIconProps } from \"./PlayIconProps\";\r\n\r\nconst PlayIcon: FC<PlayIconProps> = (props: PlayIconProps) => {\r\n const { size, color, colorFill, onClick, style, className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n return (\r\n <svg\r\n className={className || \"\"}\r\n style={onClick ? { cursor: \"pointer\", ...finalStyle } : finalStyle}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n onClick={(e) => onClick?.(e)}\r\n >\r\n <path\r\n d=\"M0 0h24v24H0V0z\"\r\n opacity=\".9\"\r\n fill={colorFill ? colorFill : \"none\"}\r\n />\r\n <path d=\"M8 5v14l11-7L8 5z\" />\r\n </svg>\r\n );\r\n};\r\nexport default PlayIcon;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { UploadingProcessProps } from \"./UploadingProcessProps\";\r\nimport \"./UploadingProcess.scss\";\r\nconst UploadingProcess: FC<UploadingProcessProps> = (\r\n props: UploadingProcessProps\r\n) => {\r\n const {\r\n size,\r\n color,\r\n //colorFill,\r\n onClick,\r\n style,\r\n className,\r\n spin,\r\n } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n let finalClassname = className || \"\";\r\n finalClassname += spin ? \"dui-rotate\" : \"\";\r\n return (\r\n <svg\r\n className={finalClassname}\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n height={finalSize ? `${finalSize}px` : \"24px\"}\r\n viewBox=\"0 0 24 24\"\r\n width={finalSize ? `${finalSize}px` : \"24px\"}\r\n fill={color ? color : \"#000000\"}\r\n >\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\r\n <path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\" />\r\n </svg>\r\n );\r\n};\r\nexport default UploadingProcess;\r\n","import React, { FC } from \"react\";\r\nimport { parseSize } from \"../utils/utils\";\r\nimport { UploadProps } from \"./UploadProps\";\r\n\r\nconst Upload: FC<UploadProps> = (props: UploadProps) => {\r\n const { size, color, colorFill, onClick, style, className } = props;\r\n const finalSize = parseSize(size);\r\n const finalStyle = style ? style : {};\r\n return (\r\n <svg\r\n style={onClick ? { ...{ cursor: \"pointer\", ...finalStyle } } : finalStyle}\r\n onClick={() => onClick?.()}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n enableBackground=\"new 0 0 24 24\"\r\n height={`${finalSize}px`}\r\n viewBox=\"0 0 24 24\"\r\n width={`${finalSize}px`}\r\n fill={color ? color : \"#000000\"}\r\n className={className || \"\"}\r\n >\r\n <g>\r\n <rect\r\n fill={colorFill || \"none\"}\r\n height={size || \"24\"}\r\n width={size || \"24\"}\r\n />\r\n </g>\r\n <g>\r\n <path d=\"M18,15v3H6v-3H4v3c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2v-3H18z M7,9l1.41,1.41L11,7.83V16h2V7.83l2.59,2.58L17,9l-5-5L7,9z\" />\r\n </g>\r\n </svg>\r\n );\r\n};\r\nexport default Upload;\r\n","import React, { FC, Fragment } from \"react\";\r\nimport { DropzoneLocalizerSelector } from \"../../../../localization\";\r\nimport {\r\n FunctionLabel,\r\n Localization,\r\n LocalLabels,\r\n} from \"../../../../localization/localization\";\r\nimport { FileItemContainerProps } from \"../../../file-item/components/FileItemContainer/FileItemContainerProps\";\r\nimport { fileSizeFormater } from \"../../../file-item/utils\";\r\nimport {\r\n Cancel,\r\n Clean,\r\n UploadingProcess,\r\n ViewGrid,\r\n ViewList,\r\n} from \"../../../icons\";\r\nimport Upload from \"../../../icons/Upload/Upload\";\r\nexport interface DropzoneHeaderProps {\r\n maxFileSize?: number;\r\n numberOfValidFiles?: number;\r\n maxFiles?: number;\r\n onReset?: Function;\r\n view: FileItemContainerProps[\"view\"];\r\n onChangeView?: Function;\r\n onUploadStart?: Function;\r\n urlPresent?: boolean;\r\n onClean?: Function;\r\n onUploadingStart?: boolean;\r\n /**\r\n * language to be used\r\n * for now\r\n * only English and Spanish is supported\r\n */\r\n localization?: Localization;\r\n hideViewIcon?: boolean;\r\n}\r\n\r\nconst DropzoneHeader: FC<DropzoneHeaderProps> = (\r\n props: DropzoneHeaderProps\r\n) => {\r\n const {\r\n maxFileSize,\r\n numberOfValidFiles,\r\n onReset,\r\n onClean,\r\n maxFiles,\r\n view,\r\n onChangeView,\r\n onUploadStart,\r\n onUploadingStart,\r\n urlPresent,\r\n localization,\r\n hideViewIcon,\r\n } = props;\r\n\r\n const DropzoneHeaderLocalizer: LocalLabels = DropzoneLocalizerSelector(\r\n localization\r\n ).header as LocalLabels;\r\n\r\n const handleClean = () => {\r\n onClean?.();\r\n };\r\n const handleStartUploading = () => {\r\n onUploadStart?.();\r\n };\r\n const makeHeader = (): React.ReactNode[] => {\r\n let result: React.ReactNode[] = [];\r\n if (onUploadStart && urlPresent && numberOfValidFiles) {\r\n if (onUploadingStart) {\r\n result.push(<UploadingProcess spin={true} color=\"#646c7f\" />);\r\n } else {\r\n result.push(\r\n <Fragment>\r\n <>\r\n {DropzoneHeaderLocalizer.uploadFilesMessage}\r\n {/* localization === \"ES-es\" ? `Subir archivos` : \"Upload files\" */}\r\n\r\n <Upload color=\"#646c7f\" onClick={handleStartUploading} />\r\n </>\r\n </Fragment>\r\n );\r\n }\r\n\r\n result.push(<Fragment>{\",\"}&nbsp;</Fragment>);\r\n }\r\n\r\n const maxFileSizeMessenger: FunctionLabel =\r\n DropzoneHeaderLocalizer.maxSizeMessage as FunctionLabel;\r\n if (maxFileSize) {\r\n result.push(\r\n maxFileSizeMessenger(fileSizeFormater(maxFileSize))\r\n\r\n /* localization === \"ES-es\"\r\n ? `Tam. máximo de archivo ${fileSizeFormater(maxFileSize)} | `\r\n : `Max File size: ${fileSizeFormater(maxFileSize)} | `, */\r\n );\r\n result.push(<Fragment>{\",\"}&nbsp;</Fragment>);\r\n }\r\n const validFileSizeMessenger: FunctionLabel =\r\n DropzoneHeaderLocalizer.validFilesMessage as FunctionLabel;\r\n\r\n if (maxFiles) {\r\n result.push(\r\n validFileSizeMessenger(numberOfValidFiles as number, maxFiles)\r\n /* localization === \"ES-es\"\r\n ? `Archivos ${numberOfValidFiles}/${maxFiles} | Válidos: ${numberOfValidFiles} | `\r\n : `Files ${numberOfValidFiles}/${maxFiles} | Valid: ${numberOfValidFiles} | `, */\r\n );\r\n result.push(<Fragment>{\",\"}&nbsp;</Fragment>);\r\n }\r\n //clean not valid files on click\r\n if (onClean) {\r\n result.push(\r\n <Clean color=\"#646c7f\" onClick={handleClean} size=\"semi-medium\" />\r\n );\r\n }\r\n\r\n if (onChangeView && !hideViewIcon) {\r\n result.push(\r\n <>\r\n {view !== \"grid\" ? (\r\n <ViewGrid\r\n onClick={() => {\r\n onChangeView?.(\"grid\");\r\n }}\r\n color=\"#646c7f\"\r\n />\r\n ) : (\r\n <ViewList\r\n onClick={() => {\r\n onChangeView?.(\"list\");\r\n }}\r\n color=\"#646c7f\"\r\n />\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n if (onReset) {\r\n result.push(\r\n <Cancel\r\n color=\"#646c7f\"\r\n //color=\"rgba(255,255,255,0.8)\"\r\n onClick={() => onReset?.()}\r\n colorFill=\"rgba(255,255,255,0.8)\"\r\n />\r\n );\r\n }\r\n return result;\r\n };\r\n return (\r\n <div\r\n className=\"dz-ui-header\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n >\r\n {makeHeader().map((HeaderItem, index) => (\r\n <span key={index} style={{ display: \"flex\" }}>\r\n {HeaderItem}\r\n </span>\r\n ))}\r\n </div>\r\n );\r\n};\r\nexport default DropzoneHeader;\r\n","import React, { FC } from \"react\";\r\nimport { DropzoneLocalizerSelector } from \"../../../../localization\";\r\nimport {\r\n FunctionLabel,\r\n LocalLabels,\r\n} from \"../../../../localization/localization\";\r\nimport { DropzoneFooterProps } from \"./DropzoneFooterProps\";\r\n\r\nconst DropzoneFooter: FC<DropzoneFooterProps> = (\r\n props: DropzoneFooterProps\r\n) => {\r\n const { accept, message, localization } = props;\r\n\r\n const DropzoneFooterLocalizer: LocalLabels = DropzoneLocalizerSelector(\r\n localization\r\n ).footer as LocalLabels;\r\n const accepCustomMessenger: FunctionLabel =\r\n DropzoneFooterLocalizer.acceptCustom as FunctionLabel;\r\n return (\r\n <div className=\"dz-ui-footer\" onClick={undefined}>\r\n <>\r\n {message\r\n ? message\r\n : !accept\r\n ? DropzoneFooterLocalizer.acceptAll\r\n : accepCustomMessenger(accept)}\r\n </>\r\n </div>\r\n );\r\n};\r\nexport default DropzoneFooter;\r\n","import \"./FileItemContainer.scss\";\r\n\r\nimport React, { FC } from \"react\";\r\nimport { FileItemContainerProps } from \"./FileItemContainerProps\";\r\n\r\nconst FileItemContainer: FC<FileItemContainerProps> = (\r\n props: FileItemContainerProps,\r\n) => {\r\n const { children, view, style, disableScroll } = props;\r\n const finalView = disableScroll ? \"no-scroll\" : view || \"list\";\r\n /* function handleClick<T extends HTMLDivElement>(\r\n e: React.MouseEvent<T, MouseEvent>\r\n ): void {\r\n e.preventDefault();\r\n } */\r\n return (\r\n <div\r\n className={`file-item-list-container file-item-list-${finalView}`}\r\n style={style}\r\n //onClick={handleClick}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\nexport default FileItemContainer;\r\n","import React, { FC } from \"react\";\r\nexport interface DropzoneLabelProps {\r\n children: React.ReactNode | string;\r\n}\r\n\r\nconst DropzoneLabel: FC<DropzoneLabelProps> = (props: DropzoneLabelProps) => {\r\n const { children } = props;\r\n return <div className=\"dz-ui-label\">{children}</div>;\r\n};\r\nexport default DropzoneLabel;\r\n","import axios, { AxiosResponse } from \"axios\";\r\nimport { DropzoneProps } from \"../Dropzone/DropzoneProps\";\r\nimport { FileValidated, UPLOADSTATUS } from \"./validation.utils\";\r\nexport const DEFAULT_CONFIG = {\r\n headers: {\r\n \"content-type\": \"multipart/form-data;\",\r\n },\r\n};\r\nexport const uploadPromiseAxios = async (\r\n file: FileValidated,\r\n url: string,\r\n method: DropzoneProps[\"method\"],\r\n config: any\r\n): Promise<UploadPromiseAxiosResponse> => {\r\n return new Promise(async (resolve, reject) => {\r\n\r\n try {\r\n const localMethod: DropzoneProps[\"method\"] = method || \"POST\";\r\n const fileToUpload: File = file.file;\r\n const formData: FormData = new FormData();\r\n formData.append(\"file\", fileToUpload);\r\n\r\n const configParams =\r\n config ? {\r\n ...config, ...DEFAULT_CONFIG,\r\n headers: {\r\n ...config?.headers,\r\n ...DEFAULT_CONFIG?.headers\r\n }\r\n } : DEFAULT_CONFIG;\r\n let response: AxiosResponse<any, any>;//= { data: {} };// await axios.post(url, formData, configParams);\r\n\r\n switch (localMethod) {\r\n case \"POST\": response = await axios.post(url, formData, configParams); break;\r\n case \"PATCH\": response = await axios.patch(url, formData, configParams); break;\r\n case \"PUT\": response = await axios.put(url, formData, configParams); break;\r\n default:\r\n response = await axios.post(url, formData, configParams);\r\n }\r\n\r\n if (!response || !response.data) {\r\n // there was a problem on uploading, normally a connexion problem\r\n resolve(\r\n {\r\n uploadedFile:\r\n {\r\n ...file, uploadMessage: \"Connection error\",\r\n uploadStatus: UPLOADSTATUS.error\r\n },\r\n serverResponse:\r\n {\r\n id: file.id,\r\n serverResponse: {}\r\n }\r\n }\r\n );\r\n }\r\n const responseDui: DropzoneUIResponse = response.data as DropzoneUIResponse;\r\n\r\n if (responseDui.status) {\r\n // status is true\r\n resolve(\r\n {\r\n uploadedFile:\r\n {\r\n ...file,\r\n uploadMessage: responseDui.message,\r\n uploadStatus: UPLOADSTATUS.success\r\n },\r\n serverResponse:\r\n {\r\n id: file.id,\r\n serverResponse: responseDui\r\n }\r\n }\r\n );\r\n } else {\r\n // status is false\r\n resolve(\r\n {\r\n uploadedFile:\r\n {\r\n ...file,\r\n uploadMessage: responseDui.message,\r\n uploadStatus: UPLOADSTATUS.error\r\n },\r\n serverResponse: {\r\n id: file.id,\r\n serverResponse: responseDui\r\n }\r\n }\r\n );\r\n }\r\n } catch (error) {\r\n // on error\r\n resolve(\r\n {\r\n uploadedFile:\r\n {\r\n ...file,\r\n uploadMessage: \"Unexpected error\",\r\n uploadStatus: UPLOADSTATUS.error\r\n },\r\n serverResponse: {\r\n id: file.id,\r\n serverResponse: {}\r\n }\r\n }\r\n );\r\n }\r\n });\r\n};\r\nexport interface UploadPromiseAxiosResponse {\r\n serverResponse: FileDuiResponse;\r\n uploadedFile: FileValidated;\r\n}\r\nexport interface FileDuiResponse {\r\n id: number | string | undefined;\r\n serverResponse: DropzoneUIResponse | {};\r\n}\r\nexport interface DropzoneUIResponse {\r\n status: boolean;\r\n message: string;\r\n payload: any;\r\n}\r\n\r\n/// queue\r\n/**\r\n * In construction\r\n */\r\n/* export const uploadMultipleConcurrent = async (files: FileValidated[], url: string, config: any | undefined): FileValidated[] => {\r\n\r\n if (files && files.length) {\r\n return;\r\n }\r\n\r\n }\r\n} */\r\n","import { mergeProps } from \"@unlimited-react-components/kernel\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport \"./Dropzone.scss\";\r\nimport useDropzoneStyles from \"../hooks/useDropzoneStyles\";\r\nimport {\r\n customValidateFile,\r\n FileValidated,\r\n FileValidator,\r\n UPLOADSTATUS,\r\n validateFile,\r\n} from \"../utils/validation.utils\";\r\nimport { DropzoneProps, DropzonePropsDefault } from \"./DropzoneProps\";\r\nimport {\r\n //createRipple,\r\n createRippleFromElement,\r\n} from \"../utils/dropzone-ui.utils\";\r\nimport DropzoneHeader from \"../DropzoneHeader/DropzoneHeader\";\r\nimport DropzoneFooter from \"../DropzoneFooter.tsx/DropzoneFooter\";\r\nimport { FileItemContainer } from \"../../../../components/file-item\";\r\nimport { FileItemContainerProps } from \"../../../file-item/components/FileItemContainer/FileItemContainerProps\";\r\nimport DropzoneLabel from \"../DropzoneLabel/DropzoneLabel\";\r\nimport {\r\n FileDuiResponse,\r\n uploadPromiseAxios,\r\n UploadPromiseAxiosResponse,\r\n} from \"../utils/dropzone-ui.upload.utils\";\r\nimport {\r\n DropzoneLocalizerSelector,\r\n ValidateErrorLocalizerSelector,\r\n} from \"../../../../localization\";\r\nimport {\r\n FunctionLabel,\r\n LocalLabels,\r\n} from \"../../../../localization/localization\";\r\n\r\nconst Dropzone: React.FC<DropzoneProps> = (props: DropzoneProps) => {\r\n const {\r\n onDrop,\r\n children,\r\n onReset,\r\n color,\r\n style,\r\n backgroundColor,\r\n onClick,\r\n validator,\r\n maxFileSize,\r\n maxFiles,\r\n accept,\r\n disableRipple,\r\n clickable,\r\n onChangeView,\r\n view,\r\n maxHeight,\r\n minHeight,\r\n onClean,\r\n uploadOnDrop,\r\n footer,\r\n header,\r\n method,\r\n url,\r\n config,\r\n value,\r\n onUploadStart,\r\n onUploadFinish,\r\n // onUploading,\r\n uploadingMessage,\r\n onChange,\r\n behaviour,\r\n label,\r\n fakeUploading,\r\n localization,\r\n disableScroll,\r\n } = mergeProps(props, DropzonePropsDefault);\r\n //ref for ripple\r\n const dz_ui_ripple_ref = useRef<HTMLDivElement>(null);\r\n //re-validation: for development purposes and for preventing clean fileList in web page code generator\r\n useEffect(() => {\r\n if (files.length > 0) {\r\n let fileList: FileList = files.map((x) => x.file) as unknown as FileList;\r\n const remainingValids: number =\r\n (maxFiles || Infinity) - numberOfValidFiles;\r\n const localValidator: FileValidator = {\r\n accept: accept,\r\n maxFileSize: maxFileSize,\r\n };\r\n const output: FileValidated[] = fileListvalidator(\r\n fileList,\r\n remainingValids,\r\n localValidator\r\n );\r\n onChange?.(output);\r\n }\r\n // eslint-disable-next-line\r\n }, [accept, maxFileSize, maxFiles]);\r\n //localizers\r\n const DropzoneLocalizer: LocalLabels =\r\n DropzoneLocalizerSelector(localization);\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n\r\n //ref to the hidden input tag\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n // whether is draggin or not\r\n const [isDragging, setIsDragging] = useState<boolean>(false);\r\n // list of files (local)\r\n const [files, setFiles] = useState<FileValidated[]>([]);\r\n const [localView, setLocalView] =\r\n useState<FileItemContainerProps[\"view\"]>(\"grid\");\r\n const [localMessage, setLocalMessage] = useState<string>(\"\");\r\n\r\n //ClassName for dynamic style\r\n const [onUploadingStart, setOnUploadingStart] = useState<boolean>(false);\r\n // const [queueFiles, setQueueFiles] = useState<FileValidated[]>([]);\r\n // const offset:number= header && footer? 50: (!header && footer?23:(header && !footer?22:0)) ;\r\n\r\n const classNameCreated: string = useDropzoneStyles(\r\n color,\r\n backgroundColor,\r\n disableScroll ? undefined : maxHeight,\r\n minHeight,\r\n header && footer ? 50 : !header && footer ? 23 : header && !footer ? 22 : 0\r\n );\r\n const finalClassName: string = `dropzone-ui${classNameCreated}${\r\n isDragging ? ` drag` : ``\r\n }${clickable ? ` clickable` : ``}`;\r\n\r\n //number of files\r\n const [numberOfValidFiles, setNumberOfValidFiles] = useState<number>(0);\r\n useEffect(() => {\r\n if (value) {\r\n setFiles(value);\r\n setNumberOfValidFiles(value.filter((x: FileValidated) => x.valid).length);\r\n }\r\n }, [value]);\r\n useEffect(() => {\r\n if (disableScroll) {\r\n setLocalView(\"grid\");\r\n } else if (view) {\r\n setLocalView(view);\r\n }\r\n }, [view, disableScroll]);\r\n useEffect(() => {\r\n if (uploadingMessage) {\r\n setLocalMessage(uploadingMessage);\r\n }\r\n }, [uploadingMessage]);\r\n\r\n const handleCleanFiles = () => {\r\n let filesCleaned: FileValidated[] = [];\r\n filesCleaned = files.filter((x: FileValidated) => x.valid);\r\n try {\r\n onClean?.(filesCleaned);\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"production\") {\r\n console.error(error);\r\n }\r\n }\r\n\r\n onChange?.(filesCleaned);\r\n };\r\n /**\r\n * Method for uploading Files\r\n * It will set valid or not valid in a radom way\r\n * @param files\r\n */\r\n const fakeUpload = (\r\n file: FileValidated\r\n ): Promise<UploadPromiseAxiosResponse> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber = Math.floor(Math.random() * 10);\r\n if (randomNumber % 2 === 0) {\r\n const status = true;\r\n const message = DropzoneLocalizer.fakeuploadsuccess as string;\r\n const payload = { url: \"\" };\r\n resolve({\r\n uploadedFile: {\r\n ...file,\r\n uploadStatus: UPLOADSTATUS.success,\r\n uploadMessage: message,\r\n },\r\n serverResponse: {\r\n id: file.id,\r\n serverResponse: { status, message, payload },\r\n },\r\n });\r\n } else {\r\n const status = false;\r\n const message = DropzoneLocalizer.fakeUploadError as string;\r\n const payload = {};\r\n resolve({\r\n uploadedFile: {\r\n ...file,\r\n uploadStatus: UPLOADSTATUS.error,\r\n uploadMessage: message,\r\n },\r\n serverResponse: {\r\n id: file.id,\r\n serverResponse: { status, message, payload },\r\n },\r\n });\r\n }\r\n }, 1500);\r\n });\r\n };\r\n\r\n /**\r\n * UPLOAD FILES LIKE A PRO\r\n */\r\n const uploadFiles = async (files: FileValidated[]) => {\r\n const totalNumber = files.length;\r\n const missingUpload = files.filter(\r\n (x) => x.valid && x.uploadStatus !== \"success\"\r\n ).length;\r\n let totalRejected: number = 0;\r\n let currentCountUpload: number = 0;\r\n const uploadingMessenger: FunctionLabel =\r\n DropzoneLocalizer.uploadingMessage as FunctionLabel;\r\n\r\n setOnUploadingStart(true);\r\n if (missingUpload > 0 && url) {\r\n setLocalMessage(\r\n uploadingMessenger(`${missingUpload}/${totalNumber}`)\r\n /* localization === \"ES-es\"\r\n ? `Subiendo ${missingUpload}/${totalNumber} archivos`\r\n : `uploading ${missingUpload}/${totalNumber} files`, */\r\n );\r\n\r\n let uploadStartFiles: FileValidated[] = files.map((f: FileValidated) => {\r\n if (f.uploadStatus !== UPLOADSTATUS.success && f.valid) {\r\n return { ...f, uploadStatus: UPLOADSTATUS.uploading };\r\n } else return f;\r\n });\r\n\r\n //make all uploading\r\n onChange?.(uploadStartFiles);\r\n ///////\r\n let updatedList: FileValidated[] = uploadStartFiles;\r\n let serverResponses: FileDuiResponse[] = [];\r\n onUploadStart?.(\r\n uploadStartFiles.filter(\r\n (f) => f.uploadStatus === UPLOADSTATUS.uploading\r\n )\r\n );\r\n for (let i = 0; i < uploadStartFiles.length; i++) {\r\n let currentFile: FileValidated = uploadStartFiles[i];\r\n if (currentFile.uploadStatus === UPLOADSTATUS.uploading) {\r\n setLocalMessage(\r\n uploadingMessenger(`${++currentCountUpload}/${missingUpload}`)\r\n );\r\n\r\n const { serverResponse, uploadedFile }: UploadPromiseAxiosResponse =\r\n fakeUploading\r\n ? await fakeUpload(currentFile)\r\n : await uploadPromiseAxios(currentFile, url, method, config);\r\n\r\n serverResponses.push(serverResponse);\r\n\r\n if (uploadedFile.uploadStatus === \"error\") {\r\n totalRejected++;\r\n }\r\n updatedList = updatedList.map((f) => {\r\n if (f.id === currentFile.id) {\r\n return uploadedFile;\r\n } else {\r\n return f;\r\n }\r\n });\r\n onChange?.(updatedList);\r\n }\r\n }\r\n\r\n // upload group finished :D\r\n onUploadFinish?.(serverResponses);\r\n const finishUploadMessenger: FunctionLabel =\r\n DropzoneLocalizer.uploadFinished as FunctionLabel;\r\n setLocalMessage(\r\n finishUploadMessenger(missingUpload - totalRejected, totalRejected)\r\n );\r\n setTimeout(() => {\r\n setOnUploadingStart(false);\r\n }, 2300);\r\n } else {\r\n setLocalMessage(\r\n DropzoneLocalizer.noFilesMessage as string\r\n /* localization === \"ES-es\"\r\n ? `No hay archivos válidos pendientes por subir`\r\n : `There is not any missing valid file for uploading`, */\r\n );\r\n setTimeout(() => {\r\n setOnUploadingStart(false);\r\n }, 2300);\r\n }\r\n };\r\n const handleFilesChange = (output: FileValidated[]) => {\r\n //console.log(\"handleFilesChange:\", output);\r\n //setNumberOfValidFiles(output.filter((x:FileValidated) => x.valid).length);\r\n onDrop?.(output);\r\n\r\n // onChange fix: when adding more files when max amount was reached\r\n // and behaviour is set to \"replace\", prevent replacing the current selection\r\n // with a list of non valid files\r\n\r\n onChange?.(behaviour === \"replace\" ? output : [...files, ...output]);\r\n\r\n setFiles(output);\r\n\r\n if (uploadOnDrop) {\r\n uploadFiles(behaviour === \"replace\" ? output : [...files, ...output]);\r\n //uploadFiles();\r\n }\r\n };\r\n /**\r\n *\r\n * @param evt\r\n */\r\n const kamui: React.DragEventHandler<HTMLDivElement> = async (\r\n evt: React.DragEvent<HTMLDivElement>\r\n ): Promise<void> => {\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n if (onUploadingStart) {\r\n setIsDragging(false);\r\n return;\r\n }\r\n let fileList: FileList = evt.dataTransfer.files;\r\n\r\n const remainingValids: number = (maxFiles || Infinity) - numberOfValidFiles;\r\n const localValidator: FileValidator = {\r\n accept: accept,\r\n maxFileSize: maxFileSize,\r\n };\r\n const output: FileValidated[] = fileListvalidator(\r\n fileList,\r\n behaviour === \"replace\" ? maxFiles || Infinity : remainingValids,\r\n localValidator\r\n );\r\n if (!disableRipple) {\r\n createRippleFromElement(dz_ui_ripple_ref.current, evt, color as string);\r\n // createRipple(evt, color as string);\r\n }\r\n setIsDragging(false);\r\n handleFilesChange(output);\r\n };\r\n\r\n const handleOnChangeInput: React.ChangeEventHandler<HTMLInputElement> = (\r\n evt: React.ChangeEvent<HTMLInputElement>\r\n ): void => {\r\n if (onUploadingStart) {\r\n return;\r\n }\r\n let fileList: FileList = evt.target.files as FileList;\r\n const remainingValids: number = (maxFiles || Infinity) - numberOfValidFiles;\r\n const localValidator: FileValidator = {\r\n accept: accept,\r\n maxFileSize: maxFileSize,\r\n };\r\n const output: FileValidated[] = fileListvalidator(\r\n fileList,\r\n behaviour === \"replace\" ? maxFiles || Infinity : remainingValids,\r\n localValidator\r\n );\r\n // Clean input element to trigger onChange event on input\r\n let element: HTMLInputElement | null = inputRef.current;\r\n if (element) {\r\n element.value = \"\";\r\n }\r\n handleFilesChange(output);\r\n };\r\n // validator\r\n\r\n //local function validator\r\n const fileListvalidator = (\r\n preValidatedFiles: FileList,\r\n remainingValids: number,\r\n localValidator: FileValidator\r\n ): FileValidated[] => {\r\n const output: FileValidated[] = [];\r\n let countdown: number = remainingValids;\r\n for (let i = 0, f: File; (f = preValidatedFiles[i]); i++) {\r\n let validatedFile: FileValidated = validator\r\n ? customValidateFile(f, validator)\r\n : validateFile(f, localValidator, ValidationErrorLocalizer);\r\n\r\n if (validatedFile.valid) {\r\n //not valid due to file count limit\r\n const valid = countdown > 0;\r\n validatedFile.valid = valid;\r\n //add error about amount\r\n if (!valid) {\r\n const MaxFileErrorMessenger: FunctionLabel =\r\n ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n validatedFile.errors = validatedFile.errors\r\n ? [\r\n ...validatedFile.errors,\r\n MaxFileErrorMessenger(maxFiles || Infinity),\r\n ]\r\n : [MaxFileErrorMessenger(maxFiles || Infinity)];\r\n }\r\n countdown--;\r\n }\r\n output.push(validatedFile);\r\n }\r\n return output;\r\n };\r\n const handleUploadStart = () => {\r\n if (numberOfValidFiles > 0) {\r\n //uploadFiles();\r\n uploadFiles(files);\r\n }\r\n };\r\n const handleDragEnter: React.DragEventHandler<HTMLDivElement> = (\r\n evt: React.DragEvent<HTMLDivElement>\r\n ): void => {\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n evt.dataTransfer.dropEffect = \"link\";\r\n setIsDragging(true);\r\n };\r\n const handleDragLeave: React.DragEventHandler<HTMLDivElement> = (\r\n evt: React.DragEvent<HTMLDivElement>\r\n ): void => {\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n evt.dataTransfer.dropEffect = \"link\";\r\n setIsDragging(false);\r\n };\r\n function handleClick<T extends HTMLDivElement>(\r\n e: React.MouseEvent<T, MouseEvent>\r\n ): void {\r\n let referenceInput = inputRef.current;\r\n referenceInput?.click();\r\n if (!disableRipple) {\r\n createRippleFromElement(dz_ui_ripple_ref.current, e, color as string);\r\n //createRipple(e, color as string);\r\n }\r\n onClick?.(e);\r\n }\r\n const handleReset = () => {\r\n onReset?.();\r\n setFiles([]);\r\n onChange?.([]);\r\n //onDrop?.([]);\r\n };\r\n const handleChangeView = (newView: \"grid\" | \"list\") => {\r\n setLocalView(newView);\r\n onChangeView?.(newView);\r\n };\r\n\r\n return (\r\n <div\r\n className={finalClassName}\r\n style={style}\r\n onDragOver={handleDragEnter}\r\n onClick={clickable ? handleClick : () => {}}\r\n // onDragLeave={handleDragLeave}\r\n >\r\n <div className=\"dropzone-ui-ripple\" ref={dz_ui_ripple_ref}></div>\r\n {header && (\r\n <DropzoneHeader\r\n maxFileSize={maxFileSize}\r\n numberOfValidFiles={files.filter((x) => x.valid).length}\r\n onReset={!onUploadingStart ? handleReset : undefined}\r\n maxFiles={maxFiles}\r\n //handleReset={handleReset}\r\n onUploadingStart={onUploadingStart}\r\n view={localView}\r\n hideViewIcon={view || disableScroll ? true : false}\r\n onChangeView={handleChangeView}\r\n onUploadStart={!uploadOnDrop ? handleUploadStart : undefined}\r\n onClean={onClean && !onUploadingStart ? handleCleanFiles : undefined}\r\n urlPresent={url !== undefined}\r\n localization={localization}\r\n />\r\n )}\r\n\r\n {children && value && files && files.length > 0 ? (\r\n <FileItemContainer\r\n view={localView}\r\n style={{\r\n minHeight: minHeight,\r\n maxHeight: disableScroll ? undefined : maxHeight,\r\n marginBottom: footer ? \"23px\" : undefined,\r\n marginTop: header ? \"22px\" : undefined,\r\n }}\r\n disableScroll={disableScroll}\r\n >\r\n {children}\r\n </FileItemContainer>\r\n ) : (\r\n <>\r\n {children ? (\r\n <>{children}</>\r\n ) : (\r\n <DropzoneLabel>\r\n {label || (DropzoneLocalizer.defaultLabel as string)}\r\n </DropzoneLabel>\r\n )}\r\n </>\r\n )}\r\n\r\n {footer && (\r\n <DropzoneFooter\r\n accept={accept}\r\n message={onUploadingStart ? localMessage : undefined}\r\n localization={localization}\r\n />\r\n )}\r\n <div\r\n onDragLeave={handleDragLeave}\r\n onDrop={kamui}\r\n className={`dropzone-ui-layer${isDragging ? ` drag` : ``}`}\r\n ></div>\r\n <input\r\n ref={inputRef}\r\n onChange={handleOnChangeInput}\r\n type=\"file\"\r\n accept={accept}\r\n style={{ display: \"none\" }}\r\n multiple={maxFiles ? maxFiles > 1 : true}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Dropzone;\r\n","import { UPLOADSTATUS } from \"../../../../components/dropzone/components/utils/validation.utils\";\r\nimport { Localization } from \"../../../../localization/localization\";\r\nimport { PaperProps } from \"../../../paper/components/PaperProps\";\r\n\r\n\r\nexport interface FileItemValidator {\r\n /**\r\n * The maximum file size allowed in bytes\r\n */\r\n maxFileSize?: number;\r\n /**\r\n * The list of allowed mime types according to MDN\r\n * input accept prop\r\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\r\n */\r\n types?: string[];\r\n /**\r\n * Wheher this file was picked exeeding the maximum\r\n * amount of files\r\n */\r\n exeedsAmount?: boolean;\r\n /**\r\n * Whether the total file size\r\n * have been already exeeded\r\n */\r\n exeedsTotalFileSize?: boolean;\r\n}\r\nexport interface FileItemProps extends PaperProps {\r\n /**\r\n * The actual file\r\n */\r\n file?: File;\r\n /**\r\n * A function of what to do when close button is pressed or clicked\r\n */\r\n onDelete?: (fileId: number | string | undefined) => void;\r\n /**\r\n * A function that return a file object when \"see\" button is pressed or clicked\r\n */\r\n onSee?: (imageUrl: string) => void;\r\n /**\r\n * A function that return a file object when \"play\" button is presssed or clicked\r\n */\r\n onWatch?: (videoUrl: File) => void;\r\n /**\r\n * Whether to see as grid or inline (horizontal list)\r\n */\r\n errors?: string[];\r\n /**\r\n * individual validator for each file\r\n */\r\n //validator?: FileItemValidator;\r\n /**\r\n * identifier for the file\r\n */\r\n id?: string | number;\r\n /**\r\n * if true, and if the file is an image,\r\n * makes visible the \"view\" button that will get the image url\r\n * Also, it will be visible only when file is valid\r\n */\r\n preview?: boolean;\r\n /**\r\n * whether to show a valid or rejected message (\"ok\", \"rejected\")\r\n * by def. valid is false (if not present, it's false too)\r\n * This value wil affect preview behaviour,\r\n * If not valid, the preview will not be shown, nor the view button\r\n */\r\n valid?: boolean;\r\n /**\r\n * This feature is hidden, it is not present on the documentation\r\n * because it's experimental. If you found this prop, you can test it \r\n * and comment us if any issue is found. Thanks in advance.\r\n * \r\n * Make file name, info layer, size and \"valid message\"\r\n * not visible\r\n */\r\n onlyImage?: boolean;\r\n /** \r\n * whether to show the info layer or not\r\n * also whether to make visible the info button or not ,\r\n * Only works when given a image file\r\n */\r\n info?: boolean;\r\n /**\r\n * A string representation or web url of the image\r\n * that will be set to the \"src\" prop of an <img/> tag\r\n * <img src={`${url}`} />\r\n */\r\n imageUrl?: string;\r\n /**\r\n * The message from server\r\n */\r\n uploadMessage?: string;\r\n /**\r\n * where to place the file name\r\n * [in construction]\r\n */\r\n //fileName?: \"bottom\" | \"inside\";\r\n /**\r\n * The current upload status of the file\r\n */\r\n uploadStatus?: undefined | UPLOADSTATUS;\r\n /**\r\n * If present, preview on full screen will\r\n * be presented in the real image resolution\r\n */\r\n hd?: boolean | undefined;\r\n /**\r\n * language to be used\r\n * for now\r\n * only English and Spanish is supported\r\n */\r\n localization?: Localization;\r\n /**\r\n * The elevation or shadow of container\r\n * range of shadows is from 0 to 4,\r\n * other number o values are considered as 0\r\n */\r\n elevation?: \"1\" | \"2\" | \"3\" | \"4\" | 1 | 2 | 3 | 4 | false;\r\n /**\r\n * Flag that determines whether actions are visible always, or only on hover event\r\n */\r\n alwaysActive?: boolean;\r\n /**\r\n * Where to display result of validation: on InfoLayer or in Tooltip when user hovers the FileItem\r\n */\r\n resultOnTooltip?: boolean;\r\n}\r\n/**\r\n * Base default props\r\n */\r\nexport const FileItemPropsDefault: FileItemProps = {\r\n onDelete: undefined,\r\n file: undefined,\r\n color: \"#071e25\",\r\n // validator: undefined,\r\n id: undefined,\r\n style: {},\r\n preview: false,\r\n valid: false,\r\n info: false,\r\n hd: undefined,\r\n localization: \"EN-en\",\r\n onlyImage: false,\r\n imageUrl: undefined,\r\n errors: undefined,\r\n elevation: false,\r\n alwaysActive: undefined,\r\n //fileName: \"bottom\"\r\n}\r\n","import { OverridableProps } from \"@unlimited-react-components/kernel\";\r\n\r\n\r\n\r\nexport interface PaperProps extends OverridableProps {\r\n /**\r\n * The elevation of the paper to produce a shadow\r\n */\r\n shadow?: \"1\" | \"2\" | \"3\" | \"4\" | 1 | 2 | 3 | 4 | false;\r\n /**\r\n * Functions to change properties in FileItem component\r\n */\r\n /**\r\n * What to do when mouse enters\r\n */\r\n onMouseEnter?: Function;\r\n /**\r\n * What to do when mouse leaves\r\n */\r\n onMouseLeave?: Function;\r\n /**\r\n * An specific componet as root node\r\n * by default div\r\n * To be extended in the future\r\n */\r\n component?: \"div\" | \"span\";\r\n}\r\nexport const PaperPropsDefault: PaperProps = {\r\n children: undefined,\r\n shadow: 2,\r\n className: \"\",\r\n style: {},\r\n onMouseEnter: undefined,\r\n onMouseLeave: undefined,\r\n component:\"div\",\r\n}","import React, { MouseEventHandler, FC } from \"react\";\r\nimport { PaperProps, PaperPropsDefault } from \"./PaperProps\";\r\nimport \"./Paper.scss\";\r\nimport { mergeProps } from \"@unlimited-react-components/kernel\";\r\n\r\nconst Paper: FC<PaperProps> = (props: PaperProps) => {\r\n const {\r\n children,\r\n shadow,\r\n style,\r\n className,\r\n onMouseEnter,\r\n onMouseLeave,\r\n component,\r\n } = mergeProps(props, PaperPropsDefault);\r\n /**\r\n * uses the shadow prop to create a classname\r\n *\r\n * @returns an appropiate paper classanme\r\n */\r\n const makeClassName = (): string => {\r\n let classNameFinal = \"\";\r\n if (!shadow) {\r\n classNameFinal = `paper-root shadow`;\r\n } else {\r\n classNameFinal = `paper-root shadow${shadow}`;\r\n }\r\n\r\n if (className) {\r\n classNameFinal += ` ${className}`;\r\n }\r\n return classNameFinal;\r\n };\r\n const handleMouseEnter: MouseEventHandler<HTMLDivElement> = (\r\n evt: React.MouseEvent<HTMLDivElement, MouseEvent>\r\n ) => {\r\n onMouseEnter?.();\r\n };\r\n const handleMouseLeave: MouseEventHandler<HTMLDivElement> = (\r\n evt: React.MouseEvent<HTMLDivElement, MouseEvent>\r\n ) => {\r\n onMouseLeave?.();\r\n };\r\n\r\n return React.createElement(\r\n component ? component : \"div\",\r\n {\r\n className: makeClassName(),\r\n style: style,\r\n onMouseEnter: handleMouseEnter,\r\n onMouseLeave: handleMouseLeave,\r\n },\r\n children\r\n );\r\n /*\r\n return (\r\n <>\r\n <div\r\n className={makeClassName()}\r\n style={style}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n {children}\r\n </div>\r\n </>\r\n );\r\n */\r\n};\r\n\r\nexport default Paper;\r\n","import { hexColorToRGB } from \"@unlimited-react-components/kernel\";\r\nimport React, { FC } from \"react\";\r\ninterface loaderProps{\r\n color?:string ;\r\n}\r\nconst Loader: FC<loaderProps> = (props: loaderProps) => {\r\n const {color=\"#8b6b10\"}=props;\r\n return (\r\n <svg\r\n width=\"80px\"\r\n height=\"60px\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 100 100\"\r\n preserveAspectRatio=\"xMidYMid\"\r\n className=\"lds-colorbar\"\r\n >\r\n <defs>\r\n <clipPath\r\n ng-attr-id=\"{{config.cpid}}\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"100\"\r\n height=\"100\"\r\n id=\"lds-colorbar-cpid-9d2a9cfa91489\"\r\n >\r\n <path d=\"M81.3,58.7H18.7c-4.8,0-8.7-3.9-8.7-8.7v0c0-4.8,3.9-8.7,8.7-8.7h62.7c4.8,0,8.7,3.9,8.7,8.7v0C90,54.8,86.1,58.7,81.3,58.7z\"></path>\r\n </clipPath>\r\n </defs>\r\n <path\r\n fill=\"none\"\r\n ng-attr-stroke=\"{{config.cf}}\"\r\n strokeWidth=\"2.7928\"\r\n d=\"M82,63H18c-7.2,0-13-5.8-13-13v0c0-7.2,5.8-13,13-13h64c7.2,0,13,5.8,13,13v0C95,57.2,89.2,63,82,63z\"\r\n stroke=\"#5d5d5d\"\r\n ></path>\r\n <g\r\n ng-attr-clip-path=\"url(#{{config.cpid}})\"\r\n clipPath=\"url(#lds-colorbar-cpid-9d2a9cfa91489)\"\r\n >\r\n <g transform=\"translate(10 0)\">\r\n <rect\r\n x=\"-100\"\r\n y=\"0\"\r\n width=\"25\"\r\n height=\"100\"\r\n ng-attr-fill=\"{{config.c1}}\"\r\n fill={color}\r\n ></rect>\r\n <rect\r\n x=\"-75\"\r\n y=\"0\"\r\n width=\"25\"\r\n height=\"100\"\r\n ng-attr-fill=\"{{config.c2}}\"\r\n fill={hexColorToRGB(color,0.5)}\r\n ></rect>\r\n <rect\r\n x=\"-50\"\r\n y=\"0\"\r\n width=\"25\"\r\n height=\"100\"\r\n ng-attr-fill=\"{{config.c3}}\"\r\n fill={color}\r\n ></rect>\r\n <rect\r\n x=\"-25\"\r\n y=\"0\"\r\n width=\"25\"\r\n height=\"100\"\r\n ng-attr-fill=\"{{config.c4}}\"\r\n fill={hexColorToRGB(color,0.5)}\r\n ></rect>\r\n <rect\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"25\"\r\n height=\"100\"\r\n ng-attr-fill=\"{{config.c1}}\"\r\n fill={color}\r\n ></rect>\r\n <rect\r\n x=\"25\"\r\n y=\"0\"\r\n width=\"25\"\r\n height=\"100\"\r\n ng-attr-fill=\"{{config.c2}}\"\r\n fill={hexColorToRGB(color,0.5)}\r\n ></rect>\r\n <rect\r\n x=\"50\"\r\n y=\"0\"\r\n width=\"25\"\r\n height=\"100\"\r\n ng-attr-fill=\"{{config.c3}}\"\r\n fill={color}\r\n ></rect>\r\n <rect\r\n x=\"75\"\r\n y=\"0\"\r\n width=\"25\"\r\n height=\"100\"\r\n ng-attr-fill=\"{{config.c4}}\"\r\n fill={hexColorToRGB(color,0.5)}\r\n ></rect>\r\n <animateTransform\r\n attributeName=\"transform\"\r\n type=\"translate\"\r\n calcMode=\"linear\"\r\n values=\"0;100\"\r\n keyTimes=\"0;1\"\r\n dur=\"1s\"\r\n begin=\"0s\"\r\n repeatCount=\"indefinite\"\r\n ></animateTransform>\r\n </g>\r\n </g>\r\n </svg>\r\n );\r\n};\r\nexport default Loader;\r\n","import React, { FC, Fragment } from \"react\";\r\nimport { FileItemLocalizerSelector } from \"../../../../localization\";\r\nimport { LocalLabels } from \"../../../../localization/localization\";\r\nimport Loader from \"../../../../utils/loader\";\r\nimport {\r\n CheckCircle,\r\n DoDisturb,\r\n UploadDone,\r\n UploadError,\r\n} from \"../../../icons\";\r\nimport { FileItemStatusProps } from \"./FileItemStatusProps\";\r\n\r\nconst FileItemStatus: FC<FileItemStatusProps> = (\r\n props: FileItemStatusProps,\r\n) => {\r\n const {\r\n valid,\r\n uploadStatus,\r\n //message,\r\n localization,\r\n } = props;\r\n const FileItemStatusLocalizer: LocalLabels = FileItemLocalizerSelector(\r\n localization,\r\n ).status as LocalLabels;\r\n return (\r\n <Fragment>\r\n {uploadStatus ? (\r\n uploadStatus === \"uploading\" ? (\r\n <div className=\"file-status-loading\">\r\n <Loader />\r\n <p>\r\n {FileItemStatusLocalizer.uploading as string}\r\n {/* localization === \"ES-es\" ? \"Subiendo\" : \"uploading\" */}\r\n </p>\r\n </div>\r\n ) : uploadStatus === \"success\" ? (\r\n <div className=\"file-status-ok upload\">\r\n <UploadDone\r\n color=\"#4caf50\"\r\n size=\"small\"\r\n //style={styles.icons}\r\n className=\"status-icon\"\r\n />\r\n {FileItemStatusLocalizer.success as string}\r\n {/* message || localization === \"ES-es\" ? \"éxito\" : \"success\" */}\r\n </div>\r\n ) : (\r\n <div className=\"file-status-error upload\">\r\n <UploadError\r\n color=\"#f44336\"\r\n size=\"semi-medium\"\r\n className=\"status-icon\"\r\n />\r\n {FileItemStatusLocalizer.error as string}\r\n </div>\r\n )\r\n ) : valid ? (\r\n <div className=\"file-status-ok\">\r\n <CheckCircle\r\n color=\"#4caf50\"\r\n size=\"small\"\r\n //style={styles.icons}\r\n className=\"status-icon\"\r\n />\r\n {FileItemStatusLocalizer.valid as string}\r\n {/* localization === \"ES-es\" ? \"válido\" : \"valid\" */}\r\n </div>\r\n ) : (\r\n <div className=\"file-status-error\">\r\n <DoDisturb\r\n color=\"#f44336\"\r\n size=\"small\"\r\n className=\"status-icon\"\r\n //style={styles.icons}\r\n />\r\n {FileItemStatusLocalizer.denied as string}\r\n {/* localization === \"ES-es\" ? \"No válido\" : \"Denied\" */}\r\n </div>\r\n )}\r\n </Fragment>\r\n );\r\n};\r\nexport default FileItemStatus;\r\n","import React, { FC } from \"react\";\r\nimport { FileItemLocalizerSelector } from \"../../../../localization\";\r\nimport {\r\n Localization,\r\n LocalLabels,\r\n} from \"../../../../localization/localization\";\r\nimport { Cancel } from \"../../../icons\";\r\n\r\nimport FileItemStatus from \"../FileItemStatus/FileItemStatus\";\r\n\r\nconst FileItemFullInfoLayer: FC<FileItemFullInfoLayerProps> = (\r\n props: FileItemFullInfoLayerProps,\r\n) => {\r\n const {\r\n showInfo,\r\n valid,\r\n onClose,\r\n fileName,\r\n fileSize,\r\n fileType,\r\n uploadStatus,\r\n uploadMessage,\r\n localization,\r\n errors,\r\n resultOnTooltip,\r\n } = props;\r\n const FileItemFullInfoLocalizer: LocalLabels = FileItemLocalizerSelector(\r\n localization as Localization,\r\n ).fullInfoLayer as LocalLabels;\r\n const handleCloseInfo = () => {\r\n onClose?.();\r\n };\r\n return (\r\n <div className={showInfo ? \"full-info\" : \"full-info hide\"}>\r\n <span\r\n style={{\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n }}\r\n >\r\n <Cancel\r\n style={{ margin: 0, right: 0, top: 0 }}\r\n color=\"rgba(255,255,255,0.8)\"\r\n onClick={handleCloseInfo}\r\n colorFill=\"black\"\r\n />\r\n {uploadStatus && uploadStatus !== \"uploading\" ? (\r\n <div className={\"file-status\"}>\r\n <FileItemStatus\r\n uploadStatus={uploadStatus}\r\n localization={localization as Localization}\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"file-status\">\r\n <FileItemStatus\r\n valid={valid}\r\n localization={localization as Localization}\r\n />\r\n </div>\r\n )}\r\n </span>\r\n \r\n {!resultOnTooltip && !uploadMessage && errors && errors.length > 0 && (\r\n <div className={`name error`}>\r\n {errors.map((error, index) => (\r\n <div key={index + 1}>{`- ${error}.\\n`}</div>\r\n ))}\r\n </div>\r\n )}\r\n {!resultOnTooltip && uploadMessage && (\r\n <div className={`name ${uploadStatus}`}>{uploadMessage}</div>\r\n )}\r\n <div className=\"name\">\r\n <span className=\"sub-label\">\r\n {FileItemFullInfoLocalizer.name as string}\r\n {/* localization === \"ES-es\" ? \"Nombre: \" : \"Name: \" */}\r\n </span>\r\n </div>\r\n <div className=\"name\">{fileName}</div>\r\n {/** FILE SIZE */}\r\n <div className=\"size\">\r\n <span className=\"sub-label\">\r\n {FileItemFullInfoLocalizer.size as string}\r\n </span>\r\n </div>\r\n <div className=\"name\">{fileSize}</div>\r\n {/** FILE TYPE */}\r\n <div className=\"mime\">\r\n <span className=\"sub-label\">\r\n {FileItemFullInfoLocalizer.type as string}\r\n </span>\r\n </div>\r\n <div className=\"mime\">{fileType}</div>\r\n </div>\r\n );\r\n};\r\nexport default FileItemFullInfoLayer;\r\n\r\nexport interface FileItemFullInfoLayerProps {\r\n showInfo: boolean;\r\n fileName: string;\r\n fileSize: string;\r\n fileType: string;\r\n valid: boolean;\r\n onClose: Function;\r\n uploadMessage?: string;\r\n uploadStatus?: undefined | \"uploading\" | \"success\" | \"error\";\r\n /**\r\n * language to be used\r\n * for now\r\n * only English and Spanish is supported\r\n */\r\n localization?: Localization;\r\n errors?: string[];\r\n /**\r\n * Whether to display result of validation on InfoLayer or in tooltip on Hover FileItem\r\n */\r\n resultOnTooltip?: boolean;\r\n}\r\n","import React, { FC, Fragment } from \"react\";\r\nexport interface FileItemImageProps {\r\n /**\r\n * The image source\r\n */\r\n imageSource: string | undefined;\r\n /**\r\n * the url file icon\r\n */\r\n url: string;\r\n /**\r\n * The name to be used as alt\r\n */\r\n fileName:string;\r\n}\r\n\r\nconst FileItemImage: FC<FileItemImageProps> = (props: FileItemImageProps) => {\r\n const { imageSource, url ,fileName} = props;\r\n return (\r\n <Fragment>\r\n {imageSource && (\r\n <div className=\"img-container blur\">\r\n <img src={imageSource} alt={`blur ${fileName}`} />\r\n </div>\r\n )}\r\n <div className=\"img-container\">\r\n <img src={imageSource || url} alt={`preview ${fileName}`} />\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\nexport default FileItemImage;\r\n","import React, { FC, Fragment, useEffect, useState } from \"react\";\r\n//import { FileItemProps } from \"../FileItem/FileItemProps\";\r\nimport FileItemStatus from \"../FileItemStatus/FileItemStatus\";\r\nimport { PlayIcon,Cancel, Visibility, Info } from \"../../../icons\";\r\nimport { Localization } from \"../../../../localization/localization\";\r\n//import {shrinkWord} from \"./../../utils\";\r\nexport interface FileItemMainLayerProps {\r\n showInfo: boolean;\r\n onOpenInfo: Function;\r\n onOpenImage: Function | undefined;\r\n onOpenVideo: Function | undefined;\r\n onDelete: Function | undefined;\r\n //fileNamePosition: FileItemProps[\"fileName\"];\r\n fileName: string;\r\n info: boolean;\r\n valid: boolean;\r\n isImage: boolean;\r\n isVideo: boolean;\r\n uploadStatus?: undefined | \"uploading\" | \"success\" | \"error\";\r\n sizeFormatted: string;\r\n /**\r\n * This feature is hidden, it is not present on documentation\r\n * because is experimental. If you found this prop, you can test it\r\n * and comment us if any issue is found. Thanks in advance.\r\n *\r\n * Make file name, info layer, size and \"valid message\"\r\n * not visible\r\n */\r\n onlyImage?: boolean;\r\n /**\r\n * language to be used\r\n * for now\r\n * only English and Spanish is supported\r\n */\r\n localization?: Localization;\r\n hovering?: boolean;\r\n}\r\n\r\nconst FileItemMainLayer: FC<FileItemMainLayerProps> = (\r\n props: FileItemMainLayerProps\r\n) => {\r\n const {\r\n showInfo,\r\n onDelete,\r\n info,\r\n valid,\r\n isImage,\r\n isVideo,\r\n onlyImage,\r\n onOpenInfo,\r\n onOpenImage,\r\n onOpenVideo,\r\n sizeFormatted,\r\n uploadStatus,\r\n localization,\r\n hovering,\r\n } = props;\r\n const handleDelete = () => {\r\n onDelete?.();\r\n };\r\n const handleOpenInfo = () => {\r\n onOpenInfo?.();\r\n };\r\n const handleOpenImage = () => {\r\n onOpenImage?.();\r\n };\r\n const handleOpenVideo =()=>{\r\n onOpenVideo?.();\r\n }\r\n const [uploadComplete, setUploadComplete] = useState<boolean>(false);\r\n useEffect(() => {\r\n if (uploadStatus === \"success\") {\r\n setTimeout(() => {\r\n setUploadComplete(true);\r\n }, 2000);\r\n }\r\n }, [uploadStatus]);\r\n return (\r\n <Fragment>\r\n {hovering ? (\r\n <div className=\"info-container\">\r\n <div\r\n className={\r\n uploadStatus === \"uploading\" || !onDelete\r\n ? \"status-close uploading\"\r\n : showInfo\r\n ? \"status-close hide\"\r\n : \"status-close\"\r\n }\r\n >\r\n <Cancel\r\n color=\"rgba(255,255,255,0.8)\"\r\n onClick={uploadStatus === \"uploading\" ? undefined : handleDelete}\r\n colorFill=\"black\"\r\n />\r\n </div>\r\n\r\n {uploadStatus && !showInfo && (\r\n <div\r\n className={uploadComplete ? \"file-status hide\" : \"file-status\"}\r\n >\r\n <FileItemStatus\r\n uploadStatus={uploadStatus}\r\n localization={localization as Localization}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className={\"file-item-footer\"}>\r\n {!onlyImage && uploadStatus && uploadComplete ? (\r\n <div className={showInfo ? \"file-status hide\" : \"file-status\"}>\r\n <div className=\"file-status-ok\">\r\n <FileItemStatus\r\n uploadStatus={uploadStatus}\r\n //message={localization===\"ES-es\"?\"subido\":\"uploaded\"}\r\n localization={localization as Localization}\r\n />\r\n </div>\r\n </div>\r\n ) : (\r\n <div className={showInfo ? \"file-status hide\" : \"file-status\"}>\r\n <FileItemStatus\r\n valid={valid}\r\n localization={localization as Localization}\r\n />\r\n </div>\r\n )}\r\n\r\n <div\r\n className={showInfo ? \"size-open-info hide\" : \"size-open-info\"}\r\n >\r\n {!onlyImage && (\r\n <div className={\"file-item-size\"}>{sizeFormatted}</div>\r\n )}\r\n\r\n {isImage && onOpenImage && valid && (\r\n <Visibility\r\n className=\"view-in-image-file-item\"\r\n color=\"rgba(255,255,255,0.9)\"\r\n onClick={handleOpenImage}\r\n size=\"small\"\r\n />\r\n )}\r\n {isVideo && onOpenVideo && valid && (\r\n <PlayIcon\r\n className=\"view-in-image-file-item\"\r\n color=\"rgba(255,255,255,0.9)\"\r\n onClick={handleOpenVideo}\r\n size=\"small\"\r\n />\r\n )}\r\n {!onlyImage && info && (\r\n <Info\r\n color=\"rgba(255,255,255,0.8)\"\r\n onClick={handleOpenInfo}\r\n colorFill=\"black\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n ) : (\r\n <Fragment>\r\n <div className=\"info-container\">\r\n <div\r\n className={\r\n uploadStatus === \"uploading\" || !onDelete\r\n ? \"status-close uploading\"\r\n : showInfo\r\n ? \"status-close hide\"\r\n : \"status-close\"\r\n }\r\n >\r\n {/* <Cancel\r\n color=\"rgba(255,255,255,0.8)\"\r\n onClick={uploadStatus === \"uploading\" ? undefined : handleDelete}\r\n colorFill=\"black\"\r\n /> */}\r\n </div>\r\n\r\n {uploadStatus && !showInfo && (\r\n <div\r\n className={uploadComplete ? \"file-status hide\" : \"file-status\"}\r\n >\r\n <FileItemStatus\r\n uploadStatus={uploadStatus}\r\n localization={localization as Localization}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className={\"file-item-footer\"}>\r\n {!onlyImage && uploadStatus && uploadComplete ? (\r\n <div className={showInfo ? \"file-status hide\" : \"file-status\"}>\r\n <div\r\n className=\"file-status-ok\"\r\n style={{ marginBottom: \"1px\" }}\r\n >\r\n <FileItemStatus\r\n uploadStatus={uploadStatus}\r\n //message={localization===\"ES-es\"?\"subido\":\"uploaded\"}\r\n localization={localization as Localization}\r\n />\r\n </div>\r\n </div>\r\n ) : (\r\n <div\r\n className={showInfo ? \"file-status hide\" : \"file-status\"}\r\n style={{ marginBottom: \"1px\" }}\r\n >\r\n <FileItemStatus\r\n valid={valid}\r\n localization={localization as Localization}\r\n />\r\n </div>\r\n )}\r\n\r\n <div\r\n className={showInfo ? \"size-open-info hide\" : \"size-open-info\"}\r\n ></div>\r\n </div>\r\n </div>\r\n </Fragment>\r\n )}\r\n </Fragment>\r\n );\r\n};\r\nexport default FileItemMainLayer;\r\n","import React, { FC, Fragment, useEffect, useState } from \"react\";\r\nimport { TooltipProps } from \"./TooltipProps\";\r\nimport \"./Tooltip.scss\";\r\nimport { UPLOADSTATUS } from \"../../../components/dropzone/components/utils/validation.utils\";\r\nconst Tooltip: FC<TooltipProps> = (props: TooltipProps) => {\r\n const {\r\n //message,\r\n //style,\r\n //children,\r\n //color,\r\n uploadStatus,\r\n valid,\r\n errors,\r\n //className,\r\n uploadMessage,\r\n open,\r\n } = props;\r\n const [statusClassName, setSatusClassName] = useState<string | undefined>(\r\n undefined,\r\n );\r\n const [message, setMessage] = useState<undefined | string>(undefined);\r\n const handleChangeStatus = (uploadStatus?: UPLOADSTATUS, valid?: boolean) => {\r\n if (valid) {\r\n //if file is valid, then it can be uploaded and can check\r\n // upload status\r\n //setSattusClassName(\"success\");\r\n if (!uploadStatus) {\r\n //when uploadStatus is undefined, File have not been uploaded yet\r\n //setSattusClassName(undefined);\r\n setMessage(undefined);\r\n } else {\r\n //otherwise is only needed to check error or success\r\n setMessage(uploadMessage);\r\n if (uploadStatus === \"success\") {\r\n setSatusClassName(\"success\");\r\n } else if (uploadStatus === \"error\") {\r\n setSatusClassName(\"not-valid-error\");\r\n } else {\r\n setSatusClassName(undefined);\r\n }\r\n }\r\n } else {\r\n // not valid has errors\r\n setSatusClassName(\"not-valid-error\");\r\n setMessage(\r\n errors\r\n ? errors.reduce((acum: string, curr: string) => {\r\n acum += `${curr}. `;\r\n return acum;\r\n }, \"\")\r\n : \"\",\r\n );\r\n }\r\n };\r\n useEffect(() => {\r\n handleChangeStatus(uploadStatus, valid);\r\n // eslint-disable-next-line\r\n }, [uploadStatus, valid]);\r\n return (\r\n <Fragment>\r\n {open && message && statusClassName && (\r\n <span className={`dropzone-ui-tooltiptext ${statusClassName}`}>\r\n {\r\n /* !valid\r\n ? errors?.map((error, index) => (\r\n <div key={index + 1}>{`- ${error}.\\n`}</div>\r\n ))\r\n : */ message\r\n }\r\n </span>\r\n )}\r\n </Fragment>\r\n );\r\n};\r\nexport default Tooltip;\r\n","import React, { FC, Fragment, useEffect, useState } from \"react\";\r\n\r\nimport { FileItemProps, FileItemPropsDefault } from \"./FileItemProps\";\r\nimport \"./FileItem.scss\";\r\nimport { Paper } from \"../../../paper\";\r\nimport { mergeProps } from \"@unlimited-react-components/kernel\";\r\nimport {\r\n fileSizeFormater,\r\n getURLFileIco,\r\n readImagePromise,\r\n resizeImage,\r\n shrinkWord,\r\n} from \"../../utils\";\r\n\r\nimport FileItemFullInfoLayer from \"../FileItemFullInfoLayer/FileItemFullInfoLayer\";\r\nimport FileItemImage from \"../FileItemImage/FileItemImage\";\r\nimport FileItemMainLayer from \"../FileItemMainLayer/FileItemMainLayer\";\r\nimport Tooltip from \"../../../tooltip/components/Tooltip\";\r\n\r\nconst FileItem: FC<FileItemProps> = (props: FileItemProps) => {\r\n const {\r\n file,\r\n onDelete,\r\n onSee,\r\n onWatch,\r\n style,\r\n preview,\r\n onlyImage,\r\n info,\r\n id,\r\n valid,\r\n uploadStatus,\r\n uploadMessage,\r\n hd,\r\n localization,\r\n errors,\r\n imageUrl,\r\n elevation,\r\n alwaysActive,\r\n resultOnTooltip,\r\n } = mergeProps(props, FileItemPropsDefault);\r\n //actionOnHover\r\n const [hovering, setHOvering] = useState<boolean>(false);\r\n const handleOnHoverEnter = () => {\r\n //if (!alwaysActive) {\r\n setHOvering(true);\r\n //}\r\n };\r\n const handleOnHoverLeave = () => {\r\n //if (!alwaysActive) {\r\n setHOvering(false);\r\n //}\r\n };\r\n /* useEffect(() => {\r\n setHOvering(alwaysActive || false);\r\n }, [alwaysActive]); */\r\n\r\n //size\r\n const sizeFormatted: string = file ? fileSizeFormater(file.size) : \"0 KB\";\r\n\r\n const [isImage, setIsImage] = useState<boolean>(false);\r\n const [isVideo, setIsVideo] = useState<boolean>(false);\r\n const [url, setUrl] = useState<string>(\"\");\r\n const [imageSource, setImageSource] = useState<string | undefined>(undefined);\r\n //alwaysActive\r\n const [showInfo, setShowInfo] = useState<boolean>(false);\r\n useEffect(() => {\r\n init(file, valid || false, preview || false, imageUrl);\r\n\r\n return () => {\r\n setImageSource(undefined);\r\n setIsImage(false);\r\n setIsVideo(false);\r\n };\r\n }, [file, valid, preview, imageUrl]);\r\n\r\n const init = async (\r\n file: File | undefined,\r\n valid: boolean,\r\n preview: boolean,\r\n imageUrl: string | undefined\r\n ) => {\r\n //////////////////////////////\r\n if (!file) return;\r\n const { url } = getURLFileIco(file as File);\r\n\r\n setUrl(url);\r\n\r\n if (imageUrl) {\r\n setIsImage(true);\r\n setImageSource(imageUrl);\r\n return;\r\n } else {\r\n const headerMime = file.type ? file.type.split(\"/\")[0] : \"octet\";\r\n const tailMime = file.type ? file.type.split(\"/\")[1] : \"octet\";\r\n setIsImage(headerMime === \"image\");\r\n setIsVideo(headerMime === \"video\" && [\"mp4\",\"ogg\",\"webm\"].includes(tailMime));\r\n if (preview && valid && headerMime === \"image\") {\r\n const response = await readImagePromise(file);\r\n if (response) {\r\n const cutt = await resizeImage(response);\r\n\r\n setImageSource(cutt as string);\r\n } else {\r\n setImageSource(undefined);\r\n }\r\n }\r\n }\r\n //////////////////////////////\r\n };\r\n\r\n const handleDelete = (): void => {\r\n if (onDelete) {\r\n onDelete(id);\r\n }\r\n };\r\n const handleOpenInfo = () => {\r\n setShowInfo(true);\r\n };\r\n const handleCloseInfo = () => {\r\n setShowInfo(true);\r\n\r\n setShowInfo(false);\r\n };\r\n const handleOpenVideo = async () => {\r\n if (file) {\r\n onWatch?.(file);\r\n }\r\n };\r\n const handleOpenImage = async () => {\r\n if (imageSource && file) {\r\n if (hd) {\r\n const response = await readImagePromise(file);\r\n onSee?.(response || \"\");\r\n } else {\r\n onSee?.(imageSource);\r\n }\r\n }\r\n };\r\n function handleClick<T extends HTMLDivElement>(\r\n e: React.MouseEvent<T, MouseEvent>\r\n ): void {\r\n //avoid children to trigger onClick ripple from parent\r\n e.stopPropagation();\r\n }\r\n if (file && typeof file.name == \"string\") {\r\n return (\r\n <div\r\n className={`dz-ui-file-item-container${\r\n resultOnTooltip ? \" dz-ui-tooltip\" : \"\"\r\n }`}\r\n onClick={handleClick}\r\n onMouseEnter={handleOnHoverEnter}\r\n onMouseLeave={handleOnHoverLeave}\r\n >\r\n <div className={`file-item-full-container-container`} style={style}>\r\n <Paper\r\n shadow={elevation}\r\n className={`file-item-icon-container ${showInfo ? \" hide\" : \"\"}`}\r\n >\r\n <FileItemImage\r\n imageSource={imageSource}\r\n url={url}\r\n fileName={file.name}\r\n />\r\n <FileItemMainLayer\r\n showInfo={showInfo}\r\n //fileNamePosition={fileName}\r\n fileName={file.name}\r\n onDelete={onDelete ? handleDelete : undefined}\r\n onOpenImage={onSee && preview ? handleOpenImage : undefined}\r\n onOpenVideo={onWatch && preview ? handleOpenVideo : undefined}\r\n isVideo={isVideo}\r\n onOpenInfo={handleOpenInfo}\r\n info={info || false}\r\n valid={valid || false}\r\n isImage={isImage}\r\n sizeFormatted={sizeFormatted}\r\n //fileNamePosition={undefined}\r\n uploadStatus={uploadStatus}\r\n localization={localization}\r\n onlyImage={onlyImage}\r\n hovering={alwaysActive || hovering}\r\n />\r\n <FileItemFullInfoLayer\r\n showInfo={showInfo}\r\n errors={errors}\r\n fileName={file.name}\r\n fileSize={fileSizeFormater(file.size)}\r\n fileType={file.type}\r\n valid={valid || false}\r\n onClose={handleCloseInfo}\r\n uploadStatus={uploadStatus}\r\n uploadMessage={uploadMessage}\r\n localization={localization}\r\n resultOnTooltip={resultOnTooltip}\r\n />\r\n </Paper>\r\n\r\n {!onlyImage && (\r\n <div className=\"file-item-name\">{shrinkWord(file.name)}</div>\r\n )}\r\n </div>\r\n {resultOnTooltip && (\r\n <Tooltip\r\n //open={resultOnTooltip && hovering}\r\n open={true}\r\n uploadStatus={uploadStatus}\r\n valid={valid}\r\n errors={errors}\r\n uploadMessage={uploadMessage}\r\n ></Tooltip>\r\n )}\r\n </div>\r\n );\r\n } else return <Fragment></Fragment>;\r\n};\r\nexport default FileItem;\r\n\r\n/**\r\n * {fileName === \"bottom\" && (\r\n <div className=\"file-item-name\">{shrinkWord(file.name)}</div>\r\n )}\r\n */\r\n","import { Cancel } from \"../icons\";\r\nimport \"./FullScreenPreview.scss\";\r\nimport React, { FC } from \"react\";\r\nimport { FullScreenPreviewProps } from \"./FullScreenPreviewProps\";\r\n\r\nconst FullScreenPreview: FC<FullScreenPreviewProps> = (\r\n props: FullScreenPreviewProps,\r\n) => {\r\n const { imgSource, openImage, onClose } = props;\r\n\r\n function handleClose<T extends HTMLDivElement>(\r\n e: React.MouseEvent<T, MouseEvent>,\r\n ): void {\r\n //avoid children to trigger onClick ripple from parent\r\n e.stopPropagation();\r\n onClose?.();\r\n }\r\n return (\r\n <div\r\n className={openImage ? \"image-container show\" : \"image-container\"}\r\n onClick={handleClose}\r\n >\r\n {imgSource && openImage && (\r\n <div className=\"img-rel-container\">\r\n <img\r\n width=\"100%\"\r\n height=\"100%\"\r\n src={imgSource}\r\n alt=\"full-screen-preview\"\r\n className={\"image-full-screen show-image\"}\r\n />\r\n <Cancel\r\n color=\"rgba(255,255,255,0.8)\"\r\n onClick={handleClose}\r\n colorFill=\"black\"\r\n className=\"button-full-screen\"\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default FullScreenPreview;\r\n","import React, { FC, Fragment } from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { useRef } from \"react\";\r\nimport { Cancel } from \"../icons\";\r\nimport { VideoPreviewProps } from \"./VideoPreviewProps\";\r\nimport \"./VideoPreview.scss\";\r\nconst VideoPreview: FC<VideoPreviewProps> = (props: VideoPreviewProps) => {\r\n const { videoSrc, openVideo, onClose, autoplay, controls, style } = props;\r\n const videoRef = useRef<HTMLVideoElement>(null);\r\n const [source, setSource] = useState<string | undefined>(undefined);\r\n\r\n useEffect(() => {\r\n //if not undefined\r\n if (!videoSrc) {\r\n return;\r\n }\r\n\r\n if (typeof videoSrc === \"string\") {\r\n //if a url string is given, assign it directly\r\n setSource(videoSrc);\r\n } else {\r\n //if a File object is given, check if is a supported format\r\n const headerMime = videoSrc.type ? videoSrc.type.split(\"/\")[0] : \"octet\";\r\n const tailMime = videoSrc.type ? videoSrc.type.split(\"/\")[1] : \"octet\";\r\n\r\n if (headerMime === \"video\" && [\"mp4\", \"ogg\", \"webm\"].includes(tailMime)) {\r\n //set the video source and create the uri string if is a supported video format\r\n const newVideoSrc = URL.createObjectURL(videoSrc);\r\n setSource(newVideoSrc);\r\n }\r\n }\r\n }, [videoSrc]);\r\n useEffect(() => {\r\n if (source && videoRef.current) {\r\n videoRef.current.load();\r\n }\r\n }, [source]);\r\n\r\n function handleClose<T extends HTMLDivElement>(\r\n e: React.MouseEvent<T, MouseEvent>,\r\n ): void {\r\n e.stopPropagation();\r\n onClose?.();\r\n }\r\n if (videoSrc) {\r\n return (\r\n <div\r\n className={openVideo ? \"video-container show\" : \"video-container\"}\r\n onClick={handleClose}\r\n >\r\n {\r\n //videoSrc &&\r\n openVideo && (\r\n <div\r\n className=\"vid-rel-container\"\r\n onClick={(evt) => {\r\n evt.preventDefault();\r\n }}\r\n >\r\n <video\r\n onClick={(evt) => {\r\n evt.preventDefault();\r\n }}\r\n //onLoadedMetadata={handleLoaded}\r\n id=\"dropzone-ui-video\"\r\n controls={controls}\r\n ref={videoRef}\r\n className={\"video-full-screen show-video\"}\r\n autoPlay={autoplay}\r\n src={source}\r\n width={\"100%\"}\r\n height={\"100%\"}\r\n style={style}\r\n >\r\n <source type=\"video/webm\" />\r\n <source type=\"video/ogg\" />\r\n <source type=\"video/mp4\" />\r\n </video>\r\n <Cancel\r\n color=\"rgba(255,255,255,0.8)\"\r\n onClick={handleClose}\r\n colorFill=\"black\"\r\n className=\"button-full-screen\"\r\n />\r\n </div>\r\n )\r\n }\r\n </div>\r\n );\r\n } else {\r\n return <Fragment></Fragment>;\r\n }\r\n};\r\nexport default VideoPreview;\r\n","function ___$insertStyle(css) {\n if (!css) {\n return;\n }\n\n if (typeof window === 'undefined') {\n return;\n }\n\n const style = document.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n return css;\n}\n\nimport React, { useState, useEffect, useRef } from 'react';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\n\n___$insertStyle(\"@import url(\\\"https://fonts.googleapis.com/css2?family=Roboto&display=swap\\\");\\n.material-button-root {\\n border: 0;\\n cursor: pointer;\\n display: inline-flex;\\n outline: 0;\\n position: relative;\\n align-items: center;\\n vertical-align: middle;\\n justify-content: center;\\n text-decoration: none;\\n text-transform: none;\\n}\\n\\n.material-button {\\n transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\\n overflow: hidden;\\n min-width: 64px;\\n box-sizing: border-box;\\n border-radius: 4px;\\n font-family: \\\"Roboto\\\", \\\"Helvetica\\\", \\\"Arial\\\", sans-serif;\\n font-size: 0.875rem;\\n font-weight: 500;\\n line-height: 1.75;\\n letter-spacing: 0.02857em;\\n}\\n\\n.material-button.uppercase {\\n text-transform: uppercase;\\n}\\n\\n.material-button.lowercase {\\n text-transform: lowercase;\\n}\\n\\n.material-button.capitalize {\\n text-transform: capitalize;\\n}\\n\\n.material-button.contained {\\n padding: 6px 16px;\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.material-button.outlined {\\n padding: 5px 15px;\\n}\\n\\n.material-button.text {\\n padding: 5px 15px;\\n}\\n\\n.material-button-root.contained:hover {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.material-button span.label {\\n width: 100%;\\n display: inherit;\\n align-items: inherit;\\n justify-content: inherit;\\n}\\n\\nspan.ripple {\\n position: absolute;\\n border-radius: 50%;\\n transform: scale(0);\\n animation: ripple 500ms linear;\\n background-color: rgba(255, 255, 255, 0.7);\\n}\\n\\n@keyframes ripple {\\n to {\\n transform: scale(4);\\n opacity: 0;\\n }\\n}\\n.material-button-root.disabled {\\n box-shadow: none;\\n cursor: default;\\n pointer-events: none;\\n background-color: rgba(0, 0, 0, 0.12);\\n color: rgba(0, 0, 0, 0.26);\\n padding: 6px 16px;\\n}\\n\\n@media screen and (max-width: 600px) {\\n .material-button {\\n min-width: 30px;\\n font-size: 0.78rem;\\n line-height: 1.5;\\n letter-spacing: 0.025em;\\n }\\n\\n .material-button.contained {\\n padding: 4px 13px;\\n }\\n\\n .material-button.outlined {\\n padding: 4px 12px;\\n }\\n}\");\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\n/**\r\n * hexArray & decArray\r\n *\r\n * arrays of numbers used to convert hexadecimal numbers into decimal and viceversa\r\n */\r\nvar hexArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];\r\nvar decArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];\r\n/**\r\n * Converts hex number in string representation to decimal number\r\n *\r\n *\r\n * @param letter the string hex number\r\n * @returns a decimal number\r\n */\r\nvar hexTodec = function (letter) {\r\n if (hexArray.includes(letter)) {\r\n return decArray[hexArray.indexOf(letter)];\r\n }\r\n else {\r\n return 0;\r\n }\r\n};\r\n/**\r\n * Validates wheteher the color is hexadecimal css color\r\n * Example: #FF56AC\r\n *\r\n *\r\n * @param colorInput the color inpt to test\r\n * @returns true if the inputColor is a hexadecimal css color\r\n */\r\nvar isHexColor = function (colorInput) {\r\n // if first element is no '#' return default background color\r\n if (colorInput.charAt(0) !== '#') {\r\n return false;\r\n }\r\n // if color lenght is not exactly 7 return default\r\n if (colorInput.length !== 7) {\r\n return false;\r\n }\r\n // if one of the letters is not included in hex array return default\r\n for (var i = 1; i < colorInput.length; i++) {\r\n if (!hexArray.includes(colorInput.charAt(i))) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n};\r\n/**\r\n * In order to managae rgba() we convert hex colors into rgba()\r\n * If the given color is already a rgb() color, it can add the percentage to convert it into rgba()\r\n *\r\n *\r\n * @param colorInput color in hex or in rgb\r\n * @param perc percentage for RGBA() color\r\n * @returns the rgba representation of a hex color\r\n */\r\nvar hexColorToRGB = function (colorInput, perc, defaultColor) {\r\n if (perc === void 0) { perc = 0; }\r\n var resultDefault = defaultColor ? defaultColor : \"rgba(255, 255, 255, 0.6)\";\r\n if (!colorInput) {\r\n return resultDefault;\r\n }\r\n //work only in uppercase\r\n var color = colorInput.toUpperCase();\r\n // is already a rgba color\r\n if (color.includes(\"RGBA\")) {\r\n return color;\r\n }\r\n //return rbg => rgba\r\n if (color.includes(\"RGB\")) {\r\n return color.replace('RGB', \"rgba\").replace(')', \", \" + perc + \")\");\r\n }\r\n // if is a hex color or named color\r\n if (!isHexColor(colourNameToHex(color))) {\r\n return resultDefault;\r\n }\r\n var resultOk = \"\";\r\n //let strVar: string = \"\";\r\n var component1 = 0;\r\n var component2 = 0;\r\n var component3 = 0;\r\n //If passed all validations, proceed to transform\r\n component1 = hexTodec(color.charAt(1)) * 16 + hexTodec(color.charAt(2));\r\n component2 = hexTodec(color.charAt(3)) * 16 + hexTodec(color.charAt(4));\r\n component3 = hexTodec(color.charAt(5)) * 16 + hexTodec(color.charAt(6));\r\n resultOk = \"rgba(\" + component1 + \", \" + component2 + \",\" + component3 + \" , \" + perc + \")\";\r\n return resultOk;\r\n};\r\n/**\r\n * Make the color into a darker color\r\n * @param colorInput\r\n * @returns the darked color in\r\n */\r\nvar darkerColor = function (colorInput, percentage) {\r\n if (percentage === void 0) { percentage = 25; }\r\n var darkedColor = \"\";\r\n var reduce = (100 - percentage) / 100;\r\n var component1 = 0;\r\n var component2 = 0;\r\n var component3 = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n component1 = hexTodec(colorInput.charAt(1)) * 16 + hexTodec(colorInput.charAt(2));\r\n component2 = hexTodec(colorInput.charAt(3)) * 16 + hexTodec(colorInput.charAt(4));\r\n component3 = hexTodec(colorInput.charAt(5)) * 16 + hexTodec(colorInput.charAt(6));\r\n darkedColor = \"rgb(\" + component1 * reduce + \", \" + component2 * reduce + \",\" + component3 * reduce + \")\";\r\n }\r\n else {\r\n if (colorInput.includes(\"rgba\")) {\r\n var slicer = colorInput.replace(\"rgba(\", \"\");\r\n var components = slicer.split(\",\");\r\n darkedColor = \"rgb(\" + parseInt(components[0], 10) * reduce + \", \" + parseInt(components[1], 10) * reduce + \",\" + parseInt(components[2], 10) * reduce + \")\";\r\n //return darkedColor;\r\n }\r\n else if (colorInput.includes(\"rgb\")) {\r\n var slicer = colorInput.replace(\"rgb(\", \"\");\r\n var components = slicer.split(\",\");\r\n darkedColor = \"rgb(\" + parseInt(components[0], 10) * reduce + \", \" + parseInt(components[1], 10) * reduce + \",\" + parseInt(components[2], 10) * reduce + \")\";\r\n // return darkedColor;\r\n }\r\n }\r\n return darkedColor;\r\n};\r\n/**\r\n * Merge props that com form user and those ones that are default\r\n * if incommingStyle is null this returns teh default value\r\n *\r\n * @param incommingProps prop that comes from props attributoo of a React Node\r\n * @param defaultProps default prop defined for that React Node\r\n * @returns merged props\r\n */\r\nfunction mergeProps(incommingProps, defaultProps) {\r\n if (!incommingProps) {\r\n return defaultProps;\r\n }\r\n else {\r\n return __assign(__assign({}, defaultProps), incommingProps);\r\n }\r\n}\r\n/**\r\n * Asure a base colour when not given or when given an incorrect color format\r\n * default color is this kind of grey #5d6475\r\n *\r\n * @param color param color given by user\r\n * @returns returns the same color\r\n */\r\nvar asureColor = function (color) {\r\n if (color !== undefined && color !== \"\") {\r\n return color;\r\n }\r\n else {\r\n return \"#5d6475\";\r\n }\r\n};\r\n/**\r\n * Converts a named color into hexadecimal color\r\n * from a list of well known namd colors if found.\r\n * When not given returns a \"\"\r\n * When not found in the list, returns the same value given\r\n * @param colour the named color\r\n * @returns The hex representation of the color or \"\" or the same color\r\n */\r\nfunction colourNameToHex(colour) {\r\n /**\r\n * When not given\r\n */\r\n if (!colour) {\r\n return \"\";\r\n }\r\n /**\r\n * when named color is found\r\n */\r\n if (namedColours2[colour.toLocaleLowerCase()] !== undefined) {\r\n return namedColours2[colour.toLocaleLowerCase()];\r\n }\r\n /**\r\n * When the named color was not found\r\n */\r\n return colour;\r\n}\r\n/**\r\n * The full list of named Colors provided by\r\n * https://htmlcolorcodes.com/es/nombres-de-los-colores/\r\n */\r\nvar namedColours2 = {\r\n //RED\r\n indianred: \"#CD5C5C\",\r\n lightcoral: \"#F08080\",\r\n salmon: \"#FA8072\",\r\n darksalmon: \"#E9967A\",\r\n lightsalmon: \"#FFA07A\",\r\n crimson: \"#DC143C\",\r\n red: \"#FF0000\",\r\n firebrick: \"#B22222\",\r\n darkred: \"#8B0000\",\r\n //PINK\r\n pink: \"#FFC0CB\",\r\n lightpink: \"#FFB6C1\",\r\n hotpink: \"#FF69B4\",\r\n deeppink: \"#FF1493\",\r\n mediumvioletred: \"#C71585\",\r\n palevioletred: \"#DB7093\",\r\n //ORANGE\r\n //\"lightsalmon: \"#FFA07A\",\r\n coral: \"#FF7F50\",\r\n tomato: \"#FF6347\",\r\n orangered: \"#FF4500\",\r\n darkorange: \"#FF8C00\",\r\n orange: \"#FFA500\",\r\n //YELLOW\r\n gold: \"#FFD700\",\r\n yellow: \"#FFFF00\",\r\n lightyellow: \"#FFFFE0\",\r\n lemonchiffon: \"#FFFACD\",\r\n lightgoldenrodyellow: \"#FAFAD2\",\r\n papayawhip: \"#FFEFD5\",\r\n moccasin: \"#FFE4B5\",\r\n peachpuff: \"#FFDAB9\",\r\n palegoldenrod: \"#EEE8AA\",\r\n khaki: \"#F0E68C\",\r\n darkkhaki: \"#BDB76B\",\r\n //PURPLE\r\n lavender: \"#E6E6FA\",\r\n thistle: \"#D8BFD8\",\r\n plum: \"#DDA0DD\",\r\n violet: \"#EE82EE\",\r\n orchid: \"#DA70D6\",\r\n fuchsia: \"#FF00FF\",\r\n magenta: \"#FF00FF\",\r\n mediumorchid: \"#BA55D3\",\r\n mediumpurple: \"#9370DB\",\r\n rebeccapurple: \"#663399\",\r\n blueviolet: \"#8A2BE2\",\r\n darkviolet: \"#9400D3\",\r\n darkorchid: \"#9932CC\",\r\n darkmagenta: \"#8B008B\",\r\n purple: \"#800080\",\r\n indigo: \"#4B0082\",\r\n slateblue: \"#6A5ACD\",\r\n darkslateblue: \"#483D8B\",\r\n mediumslateblue: \"#7B68EE\",\r\n //GREEN\r\n greenyellow: \"#ADFF2F\",\r\n chartreuse: \"#7FFF00\",\r\n lawngreen: \"#7CFC00\",\r\n lime: \"#00FF00\",\r\n limegreen: \"#32CD32\",\r\n palegreen: \"#98FB98\",\r\n lightgreen: \"#90EE90\",\r\n mediumspringgreen: \"#00FA9A\",\r\n springgreen: \"#00FF7F\",\r\n mediumseagreen: \"#3CB371\",\r\n seagreen: \"#2E8B57\",\r\n forestgreen: \"#228B22\",\r\n green: \"#008000\",\r\n darkgreen: \"#006400\",\r\n yellowgreen: \"#9ACD32\",\r\n olivedrab: \"#6B8E23\",\r\n olive: \"#808000\",\r\n darkolivegreen: \"#556B2F\",\r\n mediumaquamarine: \"#66CDAA\",\r\n darkseagreen: \"#8FBC8B\",\r\n lightseagreen: \"#20B2AA\",\r\n darkcyan: \"#008B8B\",\r\n teal: \"#008080\",\r\n //BLUE\r\n aqua: \"#00FFFF\",\r\n cyan: \"#00FFFF\",\r\n lightcyan: \"#E0FFFF\",\r\n paleturquoise: \"#AFEEEE\",\r\n aquamarine: \"#7FFFD4\",\r\n turquoise: \"#40E0D0\",\r\n mediumturquoise: \"#48D1CC\",\r\n darkturquoise: \"#00CED1\",\r\n cadetblue: \"#5F9EA0\",\r\n steelblue: \"#4682B4\",\r\n lightsteelblue: \"#B0C4DE\",\r\n powderblue: \"#B0E0E6\",\r\n lightblue: \"#ADD8E6\",\r\n skyblue: \"#87CEEB\",\r\n lightskyblue: \"#87CEFA\",\r\n deepskyblue: \"#00BFFF\",\r\n dodgerblue: \"#1E90FF\",\r\n cornflowerblue: \"#6495ED\",\r\n //\"mediumslateblue: \"#7B68EE\",\r\n royalblue: \"#4169E1\",\r\n blue: \"#0000FF\",\r\n mediumblue: \"#0000CD\",\r\n darkblue: \"#00008B\",\r\n navy: \"#000080\",\r\n midnightblue: \"#191970\",\r\n //BROWN\r\n cornsilk: \"#FFF8DC\",\r\n blanchedalmond: \"#FFEBCD\",\r\n bisque: \"#FFE4C4\",\r\n navajowhite: \"#FFDEAD\",\r\n wheat: \"#F5DEB3\",\r\n burlywood: \"#DEB887\",\r\n tan: \"#D2B48C\",\r\n rosybrown: \"#BC8F8F\",\r\n sandybrown: \"#F4A460\",\r\n goldenrod: \"#DAA520\",\r\n darkgoldenrod: \"#B8860B\",\r\n peru: \"#CD853F\",\r\n chocolate: \"#D2691E\",\r\n saddlebrown: \"#8B4513\",\r\n sienna: \"#A0522D\",\r\n brown: \"#A52A2A\",\r\n maroon: \"#800000\",\r\n //WHITE\r\n white: \"#FFFFFF\",\r\n snow: \"#FFFAFA\",\r\n honeydew: \"#F0FFF0\",\r\n mintcream: \"#F5FFFA\",\r\n azure: \"#F0FFFF\",\r\n aliceblue: \"#F0F8FF\",\r\n ghostwhite: \"#F8F8FF\",\r\n whitesmoke: \"#F5F5F5\",\r\n seashell: \"#FFF5EE\",\r\n beige: \"#F5F5DC\",\r\n oldlace: \"#FDF5E6\",\r\n floralwhite: \"#FFFAF0\",\r\n ivory: \"#FFFFF0\",\r\n antiquewhite: \"#FAEBD7\",\r\n linen: \"#FAF0E6\",\r\n lavenderblush: \"#FFF0F5\",\r\n mistyrose: \"#FFE4E1\",\r\n //GREY\r\n gainsboro: \"#DCDCDC\",\r\n lightgray: \"#D3D3D3\",\r\n silver: \"#C0C0C0\",\r\n darkgray: \"#A9A9A9\",\r\n gray: \"#808080\",\r\n dimgray: \"#696969\",\r\n lightslategray: \"#778899\",\r\n slategray: \"#708090\",\r\n darkslategray: \"#2F4F4F\",\r\n black: \"#000000\"\r\n};\n\n/**\r\n * In order to avoid overwriting the classnames\r\n * and to be able to have different styled buttons in the document\r\n * it is necesary to add a numeric identifier next to the className:\r\n * instead of: \".classname\"\r\n * we get : \".classname-3\", \".classname-4\", \".classname-5\" and so on\r\n * for this task a number is used as ID\r\n */\r\nvar MaterialButtonStylizer = /** @class */ (function () {\r\n function MaterialButtonStylizer() {\r\n }\r\n /**\r\n * Increases the count and retrieves the next number\r\n * @returns the next static number in styles\r\n */\r\n MaterialButtonStylizer.getNext = function () {\r\n MaterialButtonStylizer.nextButtonClassNameNumber++;\r\n return MaterialButtonStylizer.nextButtonClassNameNumber;\r\n };\r\n MaterialButtonStylizer.nextButtonClassNameNumber = 0;\r\n return MaterialButtonStylizer;\r\n}());\r\n/**\r\n * Calls the getNext() method of MaterialButtonStylizer class\r\n * @returns the next static number in styles\r\n */\r\nvar getNextClassName = function () {\r\n return MaterialButtonStylizer.getNext();\r\n};\r\n/**\r\n * Creates the ripple effect\r\n * @param event\r\n */\r\nfunction createRipple(event, variant, color) {\r\n var buttonAnchorDiv = event.currentTarget;\r\n var circle = document.createElement(\"span\");\r\n var diameter = Math.max(buttonAnchorDiv.clientWidth, buttonAnchorDiv.clientHeight);\r\n var radius = diameter / 2;\r\n circle.style.width = circle.style.height = diameter + \"px\";\r\n circle.style.left = event.clientX - buttonAnchorDiv.offsetLeft - radius + \"px\";\r\n circle.style.top = event.clientY - buttonAnchorDiv.offsetTop - radius + \"px\";\r\n circle.classList.add(\"ripple\");\r\n if (variant !== \"contained\") {\r\n circle.style.backgroundColor = hexColorToRGB(asureColor(colourNameToHex(color)), 0.4);\r\n }\r\n else {\r\n circle.style.backgroundColor = hexColorToRGB(\"#ffffff\", 0.4);\r\n }\r\n var ripple = buttonAnchorDiv.getElementsByClassName(\"ripple\")[0];\r\n if (ripple) {\r\n ripple.remove();\r\n }\r\n buttonAnchorDiv.appendChild(circle);\r\n}\r\nvar makeDynamicStyle = function (variant, disabled, color, textColor, nextClassName) {\r\n var styleSheet = {\r\n id: \"material-button-styles-\" + nextClassName,\r\n sheetRules: [{\r\n className: \"material-button.\" + variant + \"-\" + nextClassName,\r\n rules: {},\r\n },\r\n {\r\n className: \"material-button-root.\" + variant + \"-\" + nextClassName,\r\n rules: {},\r\n },],\r\n };\r\n var sheetRules = styleSheet.sheetRules;\r\n if (!disabled) {\r\n switch (variant) {\r\n case \"contained\":\r\n sheetRules[0].rules = {\r\n color: asureColor(colourNameToHex(textColor)),\r\n backgroundColor: asureColor(colourNameToHex(color)),\r\n };\r\n sheetRules[1].rules = {\r\n \":hover\": {\r\n backgroundColor: darkerColor(hexColorToRGB(asureColor(colourNameToHex(color)), 1)),\r\n },\r\n };\r\n break;\r\n case \"outlined\":\r\n sheetRules[0].rules = {\r\n border: \"1px solid \" + hexColorToRGB(asureColor(colourNameToHex(color)), 0.5),\r\n color: asureColor(colourNameToHex(color)),\r\n backgroundColor: \"transparent\",\r\n };\r\n sheetRules[1].rules = {\r\n \":hover\": {\r\n border: \"1px solid \" + hexColorToRGB(asureColor(colourNameToHex(color)), 1),\r\n backgroundColor: hexColorToRGB(asureColor(colourNameToHex(color)), 0.085),\r\n },\r\n };\r\n break;\r\n case \"text\":\r\n sheetRules[0].rules = {\r\n color: asureColor(colourNameToHex(color)),\r\n backgroundColor: \"transparent\",\r\n };\r\n sheetRules[1].rules = {\r\n \":hover\": {\r\n backgroundColor: hexColorToRGB(asureColor(colourNameToHex(color)), 0.085),\r\n },\r\n };\r\n break;\r\n }\r\n }\r\n styleSheet.sheetRules = sheetRules;\r\n return styleSheet;\r\n};\n\n//export type ThemeColor = \"primary\" | \"secondary\";\r\n/**\r\n * default props for material button\r\n */\r\nvar MaterialButtonDefaultProps = {\r\n children: undefined,\r\n style: {},\r\n onClick: function () { },\r\n variant: \"contained\",\r\n disabled: false,\r\n color: \"#071e25\",\r\n textColor: \"#FFFFFF\",\r\n text: \"uppercase\"\r\n};\n\nvar DynamiCSS;\r\n(function (DynamiCSS) {\r\n function insertStyleSheet(dynamicSheet) {\r\n var result_id = \"\";\r\n if (typeof window === \"undefined\") {\r\n return \"\";\r\n }\r\n if (!dynamicSheet) {\r\n return \"\";\r\n }\r\n //if already exists\r\n if (document.getElementById(dynamicSheet.id)) {\r\n return dynamicSheet.id;\r\n }\r\n result_id = dynamicSheet.id;\r\n var styleSheet = document.createElement(\"style\");\r\n styleSheet.id = result_id;\r\n styleSheet.setAttribute(\"type\", \"text/css\");\r\n var contetRaw = toRawStyleSheet(dynamicSheet.sheetRules || []) + dynamicSheet.raw || \"\";\r\n styleSheet.textContent = contetRaw;\r\n var appendResult = document.head.appendChild(styleSheet);\r\n if (!appendResult) {\r\n return \"\";\r\n }\r\n return result_id;\r\n }\r\n DynamiCSS.insertStyleSheet = insertStyleSheet;\r\n function editStyleSheet(id, sheetRules) {\r\n var result_id = \"\";\r\n if (typeof window === \"undefined\") {\r\n return \"\";\r\n }\r\n if (!id || !sheetRules) {\r\n return \"\";\r\n }\r\n //if dont exists yet\r\n var styleSheet = document.getElementById(id);\r\n if (!styleSheet) {\r\n return \"\";\r\n }\r\n /* result_id = id;\r\n //var styleSheet: HTMLStyleElement = document.createElement(\"style\");\r\n styleSheet.id = result_id;\r\n styleSheet.setAttribute(\"type\", \"text/css\"); */\r\n styleSheet.textContent = toRawStyleSheet(sheetRules);\r\n return result_id;\r\n }\r\n DynamiCSS.editStyleSheet = editStyleSheet;\r\n function removeStyleSheet(id) {\r\n var result_id = \"\";\r\n if (!id) {\r\n return \"\";\r\n }\r\n var htmlObject = document.getElementById(id);\r\n if (htmlObject) {\r\n document.head.removeChild(htmlObject);\r\n result_id = id;\r\n }\r\n return result_id;\r\n }\r\n DynamiCSS.removeStyleSheet = removeStyleSheet;\r\n function existStyleSheet(id) {\r\n if (!id) {\r\n return false;\r\n }\r\n var htmlObject = document.getElementById(id);\r\n if (htmlObject) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n DynamiCSS.existStyleSheet = existStyleSheet;\r\n function makeStyleSheet(styleSheet) {\r\n if (!styleSheet) {\r\n return null;\r\n }\r\n return styleSheet;\r\n }\r\n DynamiCSS.makeStyleSheet = makeStyleSheet;\r\n})(DynamiCSS || (DynamiCSS = {}));\r\n/**\r\n * Determines whether a character is upperCase or not\r\n * @param str a character\r\n * @returns true if str contains a string character\r\n */\r\nfunction isUpper(character) {\r\n if (!character)\r\n return false;\r\n return !/[a-z]/.test(character) && /[A-Z]/.test(character);\r\n}\r\n/**\r\n * Converts a rule with uppercase to a hyphen-lowercase version\r\n * @param rule the rule\r\n * @returns\r\n */\r\nfunction fromUpperCaseToHyphen(ruleLabel) {\r\n var result = \"\";\r\n var charUpper = ' ';\r\n var isupper = false;\r\n for (var i = 0; i < ruleLabel.length; i++) {\r\n var currentChar = ruleLabel[i];\r\n if (isUpper(currentChar)) {\r\n charUpper = currentChar;\r\n isupper = true;\r\n break;\r\n }\r\n }\r\n //add hyphen\r\n if (isupper) {\r\n var parts = ruleLabel.split(charUpper);\r\n result = parts[0] + \"-\" + charUpper.toLowerCase() + parts[1];\r\n }\r\n else {\r\n result = ruleLabel;\r\n }\r\n return result;\r\n}\r\n/**\r\n *\r\n * @param ruleLabel the rule\r\n * @returns true if the rule label corresponds to a pseudo class\r\n */\r\nfunction isPseudo(ruleLabel) {\r\n if (!ruleLabel)\r\n return false;\r\n return ruleLabel.includes(\":\");\r\n}\r\nfunction makeRawRuleLabel(className) {\r\n var result = \"\";\r\n var splitedClassName = className.trim().split(\" \");\r\n //is composed classname?\r\n if (splitedClassName.length > 1) {\r\n for (var i = 0; i < splitedClassName.length; i++) {\r\n result += \".\" + splitedClassName[i];\r\n }\r\n result += \"{\\n\";\r\n }\r\n else {\r\n result += \".\" + className + \"{\\n\";\r\n }\r\n return result;\r\n}\r\nfunction toRawStyleSheet(sheetRules) {\r\n if (!sheetRules) {\r\n return \"\";\r\n }\r\n var rawStyleSheet = \"\";\r\n var nestedPseudos = [];\r\n for (var j = 0; j < sheetRules.length; j++) {\r\n var currentRule = sheetRules[j];\r\n var currnetRawRule = \"\";\r\n // currnetRawRule += `.${currentRule.className}{\\n`;\r\n currnetRawRule += makeRawRuleLabel(currentRule.className);\r\n //list of labels for rules\r\n var ruleskeys = Object.keys(currentRule.rules);\r\n for (var i = 0; i < ruleskeys.length; i++) {\r\n var currentKey = ruleskeys[i];\r\n var styleLabel = fromUpperCaseToHyphen(currentKey);\r\n //if a pseudo class found, separate it\r\n if (isPseudo(styleLabel)) {\r\n var pseudoClassName = currentRule.className + styleLabel;\r\n nestedPseudos.push({ className: pseudoClassName, rules: currentRule.rules[styleLabel] });\r\n }\r\n else {\r\n var styleRule = currentRule.rules[currentKey];\r\n currnetRawRule += \"\\t\" + styleLabel + \" : \" + styleRule + \";\\n\";\r\n }\r\n }\r\n currnetRawRule += \"}\\n\";\r\n rawStyleSheet += currnetRawRule;\r\n }\r\n //nested pseudos\r\n for (var p = 0; p < nestedPseudos.length; p++) {\r\n var currnetRawRule = \"\";\r\n var currentRule = nestedPseudos[p];\r\n var ruleskeys = Object.keys(currentRule.rules);\r\n currnetRawRule += \".\" + currentRule.className + \"{\\n\";\r\n for (var i = 0; i < ruleskeys.length; i++) {\r\n var currentKey = ruleskeys[i];\r\n var styleLabel = fromUpperCaseToHyphen(currentKey);\r\n var styleRule = currentRule.rules[currentKey];\r\n currnetRawRule += \"\\t\" + styleLabel + \" : \" + styleRule + \";\\n\";\r\n }\r\n currnetRawRule += \"}\\n\";\r\n rawStyleSheet += currnetRawRule;\r\n }\r\n return rawStyleSheet;\r\n}\n\nvar MaterialButton = function (props) {\r\n var _a = mergeProps(props, MaterialButtonDefaultProps), children = _a.children, onClick = _a.onClick, disabled = _a.disabled, style = _a.style, href = _a.href, variant = _a.variant, color = _a.color, textColor = _a.textColor, className = _a.className, text = _a.text;\r\n //states\r\n var _b = useState(\"\"), idStyles = _b[0], setIdStyles = _b[1];\r\n var _c = useState(false), styleInjected = _c[0], setStyleInjected = _c[1];\r\n var _d = useState(0), nextClassName = _d[0], setNextClassName = _d[1];\r\n var _e = useState(\"\"), classNameCreated = _e[0], setClassNameCreated = _e[1];\r\n //effects\r\n useEffect(function () {\r\n return function () { return removeStyle(); };\r\n // eslint-disable-next-line\r\n }, [idStyles]);\r\n /**\r\n * Inserts the style for material button specific style\r\n * @param variant\r\n * @param disabled\r\n * @param color\r\n * @param textColor\r\n * @param text\r\n */\r\n var handleInserStyle = function (variant, disabled, color, textColor, text) { return __awaiter(void 0, void 0, void 0, function () {\r\n var class_name, styleSheet, idStyle, nextClassNameVar;\r\n return __generator(this, function (_a) {\r\n class_name = className || \"\";\r\n idStyle = \"\";\r\n if (nextClassName === 0 && !styleInjected) {\r\n //new\r\n nextClassNameVar = getNextClassName();\r\n styleSheet = makeDynamicStyle(variant, disabled, color, textColor, nextClassNameVar);\r\n setNextClassName(nextClassNameVar);\r\n idStyle = DynamiCSS.insertStyleSheet(styleSheet);\r\n makeClassName(variant, class_name, nextClassNameVar);\r\n setIdStyles(idStyle);\r\n if (idStyle !== \"\") {\r\n setStyleInjected(true);\r\n }\r\n }\r\n else {\r\n //already a stylesheet associated\r\n styleSheet = makeDynamicStyle(variant, disabled, color, textColor, nextClassName);\r\n DynamiCSS.editStyleSheet(idStyles, styleSheet.sheetRules || []);\r\n makeClassName(variant, class_name, nextClassName);\r\n }\r\n return [2 /*return*/];\r\n });\r\n }); };\r\n /**\r\n *\r\n * @param variant\r\n * @param class_name\r\n */\r\n var makeClassName = function (variant, class_name, nextClassNameVar) {\r\n var classname = \"material-button-root material-button \";\r\n if (!disabled) {\r\n classname += variant + \" \" + variant + \"-\" + nextClassNameVar;\r\n }\r\n else {\r\n classname += \"disabled\";\r\n }\r\n //classname to override styles in stylesheet\r\n if (class_name) {\r\n classname += \" \" + classname + \" \" + class_name;\r\n }\r\n //some text in className\r\n if (text) {\r\n classname += \" \" + text;\r\n }\r\n setClassNameCreated(classname);\r\n };\r\n var removeStyle = function () {\r\n if (styleInjected) {\r\n DynamiCSS.removeStyleSheet(idStyles);\r\n setStyleInjected(false);\r\n setIdStyles(\"\");\r\n }\r\n };\r\n useEffect(function () {\r\n handleInserStyle(variant, disabled, color, textColor);\r\n // eslint-disable-next-line\r\n }, [variant, disabled, color, textColor, text]);\r\n //references\r\n var btn_ref = useRef(null);\r\n var span_ref = useRef(null);\r\n /**\r\n *\r\n * @param e\r\n */\r\n function handleClick(e) {\r\n createRipple(e, variant, color);\r\n if (onClick)\r\n onClick(e);\r\n }\r\n return (React.createElement(React.Fragment, null, styleInjected &&\r\n React.createElement(href ? \"a\" : \"button\", {\r\n className: classNameCreated,\r\n \"data-testid\": href ? \"material-anchor\" : \"material-button\",\r\n onClick: handleClick,\r\n ref: btn_ref,\r\n href: href,\r\n style: style,\r\n children: href ? (React.createElement(\"span\", { ref: span_ref, className: \"label\" }, children)) : (React.createElement(\"span\", { className: \"label\" }, children)),\r\n disabled: disabled,\r\n })));\r\n};\n\nexport { MaterialButton, MaterialButtonDefaultProps };\n//# sourceMappingURL=index.es.js.map\n","import { MaterialButtonDefaultProps, MaterialButtonProps } from \"@unlimited-react-components/material-button\";\r\nimport { Localization } from \"../../localization/localization\";\r\nimport { CustomValidateFileResponse } from \"../dropzone/components/utils/validation.utils\";\r\n\r\nexport interface InputButtonProps extends MaterialButtonProps {\r\n /**\r\n * the id of the component\r\n */\r\n id?: string;\r\n /**\r\n * whether to accept multiple files or not\r\n */\r\n multiple?: boolean;\r\n /**\r\n * The list of mimetypes and extensions of files \r\n * to accept. This is a comma separated list of\r\n * mime types or file extensions. \r\n * Eg.: image/\\*,application/pdf,.psd\r\n */\r\n accept?: string;\r\n /**\r\n * If given, this label will be shwed inside the button\r\n */\r\n label?: string;\r\n /**\r\n * what to do after selecting the files. Returns the File[] to the parent component\r\n */\r\n onChange?: Function;\r\n /**\r\n * custom validator\r\n * must be a function that recieves as first parameter a File Object\r\n * and must return a boolean value\r\n */\r\n validator?: (f: File) => CustomValidateFileResponse;\r\n /**\r\n * Max number of files to be accepted.\r\n */\r\n //maxFiles?: number;\r\n /**\r\n * max file size allowed in bytes\r\n */\r\n maxFileSize?: number;\r\n /**\r\n * language to be used\r\n * for now\r\n * only English, French , Portuguese and Spanish are supported\r\n */\r\n localization?: Localization;\r\n}\r\n\r\n/**\r\n * The default props when not given\r\n */\r\nexport const InputButtonDefaultProps: InputButtonProps = {\r\n /**\r\n * default material button props\r\n */\r\n ...MaterialButtonDefaultProps,\r\n /**\r\n * default InputButton props\r\n */\r\n ...{\r\n multiple: false,\r\n accept: \"\",\r\n label: \"Browse ...\",\r\n onChange: () => { },\r\n //maxFiles: 7, \r\n localization: \"EN-en\"\r\n\r\n }\r\n}","import React, { Fragment, useRef } from \"react\";\r\nimport { MaterialButton } from \"@unlimited-react-components/material-button\";\r\nimport { mergeProps } from \"@unlimited-react-components/kernel\";\r\nimport { InputButtonDefaultProps, InputButtonProps } from \"./InputButtonProps\";\r\nimport {\r\n customValidateFile,\r\n FileValidated,\r\n FileValidator,\r\n validateFile,\r\n} from \"../dropzone/components/utils/validation.utils\";\r\nimport { LocalLabels } from \"../../localization/localization\";\r\nimport { ValidateErrorLocalizerSelector } from \"../../localization\";\r\n\r\nconst InputButton: React.FC<InputButtonProps> = (props: InputButtonProps) => {\r\n let {\r\n accept,\r\n color,\r\n disabled,\r\n id,\r\n label,\r\n maxFileSize,\r\n multiple,\r\n onChange,\r\n style,\r\n textColor,\r\n validator,\r\n variant,localization\r\n } = mergeProps(props, InputButtonDefaultProps);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const localValidator: FileValidator = {\r\n //It is assumed that input tag already validated accept property\r\n //accept: accept,\r\n maxFileSize: maxFileSize,\r\n };\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n const handleOnChange: React.ChangeEventHandler<HTMLInputElement> = (\r\n evt: React.ChangeEvent<HTMLInputElement>,\r\n ): void => {\r\n let files: FileList = evt.target.files as FileList;\r\n const output: FileValidated[] = [];\r\n\r\n if (files && files.length > 0) {\r\n for (let i = 0, f: File; (f = files[i]); i++) {\r\n let validatedFile: FileValidated = validator\r\n ? customValidateFile(f, validator)\r\n : validateFile(f, localValidator, ValidationErrorLocalizer);\r\n output.push(validatedFile);\r\n }\r\n }\r\n let element: HTMLInputElement | null = inputRef.current;\r\n if (element) {\r\n element.value = \"\";\r\n }\r\n onChange?.(output);\r\n };\r\n function clickInput(e: React.MouseEvent<MouseEvent>): void {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n let referenceInput = inputRef.current;\r\n if (referenceInput) {\r\n referenceInput.click();\r\n }\r\n }\r\n return (\r\n <Fragment>\r\n <MaterialButton\r\n style={style}\r\n color={color}\r\n variant={variant}\r\n //size={size}\r\n onClick={clickInput}\r\n disabled={disabled}\r\n textColor={textColor}\r\n >\r\n {label}\r\n </MaterialButton>\r\n <input\r\n id={id || \"\"}\r\n style={{ display: \"none\" }}\r\n ref={inputRef}\r\n onChange={handleOnChange}\r\n type=\"file\"\r\n multiple={multiple}\r\n accept={accept}\r\n />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default InputButton;\r\n"],"names":["SyntheticFile","name","size","type","file","File","Object","defineProperty","get","createFile","listFile","push","create_aac","create_abw","create_freearc","create_avi","create_azw","create_octet","create_bmp","create_bz","create_bz2","create_cda","create_csh","create_css","create_csv","create_doc","create_docx","create_eot","create_epub","create_gzip","create_gif","create_htm","create_html","create_ico","create_icalendar","create_jar","create_jpeg","create_jpg","create_js","create_json","create_jsonld","create_mid","create_midi","create_x_mid","create_x_midi","create_mjs","create_mp3","create_mp4","create_mpeg","create_mpkg","create_odp","create_ods","create_odt","create_oga","create_ogv","create_ogx","create_opus","create_otf","create_png","create_pdf","create_php","create_ppt","create_pptx","create_rar","create_rtf","create_sh","create_svg","create_swf","create_tar","create_tif","create_tiff","create_ts","create_ttf","create_text","create_typescript","create_vsd","create_wav","create_weba","create_webm","create_webp","create_woff","create_woff2","create_xhtml","create_xlsx","create_xls","create_xml","create_xml_txt","create_xul","create_zip","create_python","create_java","create_react","create_vue","createPDF","createWord","createListOfMultiTypeFile","createFileListMiscelanious","createSyntheticFile","fileSizeFormater","fileSize","toFixed","getExt","fileName","result","exec","html","octet","mimeUrlList","img","video","audio","aac","accdb","abw","arc","avi","azw","bmp","bz","bz2","cda","csh","css","csv","docx","drawio","eot","epub","gzip","gif","icalendar","jar","jpeg","javascript","json","jsonld","midi","mp3","mp4","mpeg","mpkg","mp2t","odp","ods","odt","oga","ogv","ogx","opus","otf","png","pdf","php","pptx","psd","rar","rtf","sass","sh","swf","tar","tiff","ttf","typescript","text","vsd","wav","weba","webm","webp","woff","wma","wmv","xhtml","xlsx","xml","xul","zip","sevenzip","python","java","react","vue","UPLOADSTATUS","readImagePromise","Promise","resolve","reject","reader_1","FileReader","onload","readAsDataURL","error","undefined","validateFile","validator","localErrors","idGenerated","FileIdGenerator","getNextId","errors","maxFileSize","accept","maxFileSizeErrorMessenger","maxSizeError","i","length","acceptItem","charAt","includes","headerMime","split","tailMime","headerMimeFile","tailMimeFile","validateAccept","map","trim","separateAccept","acceptError","id","valid","customValidateFile","_a","nextId","getRandomInt","min","max","Math","floor","random","makeSynthticFileValidate","uploadStatus","uploadMessage","ceil","newUpoadStatus","uploading","success","getRandomUploadStatus","customUploadMessage","randInt","listOfErrors","DropzoneItalian","defaultLabel","uploadingMessage","amountOfFiles","uploadFinished","uploaded","rejected","noFilesMessage","footer","acceptAll","acceptCustom","header","uploadFilesMessage","maxSizeMessage","validFilesMessage","numberOfValidFiles","maxFiles","fakeuploadsuccess","fakeUploadError","FileItemItalian","fullInfoLayer","status","denied","ValidateErrorItalian","maxSize","maxFileCount","DropzoneFrench","FileItemFrench","ValidateErrorFrench","DropzoneEnglish","FileItemEnglish","ValidateErrorEnglish","DropzoneSpanish","FileItemSpanish","ValidateErrorSpanish","DropzoneRussian","FileItemRussian","ValidateErrorRussian","DropzonePortuguese","FileItemPortuguese","ValidateErrorPortuguese","DropzoneSimplifiedChinese","FileItemSimplifiedChinese","ValidateErrorSimplifiedChinese","DropzoneTraditionalChinese","FileItemTraditionalChinese","ValidateErrorTraditionalChinese","FileItemLocalizer","FileItemLocalizerSelector","local","DropzoneLocalizer","DropzoneLocalizerSelector","ValidateErrorLocalizer","ValidateErrorLocalizerSelector","__assign","assign","t","s","n","arguments","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","fulfilled","value","step","next","e","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","__spreadArray","to","from","pack","ar","l","Array","slice","concat","hexArray","decArray","hexTodec","letter","indexOf","hexColorToRGB","colorInput","perc","defaultColor","resultDefault","color","toUpperCase","replace","isHexColor","colourNameToHex","mergeProps","incommingProps","defaultProps","asureColor","colour","namedColours2","toLocaleLowerCase","DynamiCSS","indianred","lightcoral","salmon","darksalmon","lightsalmon","crimson","red","firebrick","darkred","pink","lightpink","hotpink","deeppink","mediumvioletred","palevioletred","coral","tomato","orangered","darkorange","orange","gold","yellow","lightyellow","lemonchiffon","lightgoldenrodyellow","papayawhip","moccasin","peachpuff","palegoldenrod","khaki","darkkhaki","lavender","thistle","plum","violet","orchid","fuchsia","magenta","mediumorchid","mediumpurple","rebeccapurple","blueviolet","darkviolet","darkorchid","darkmagenta","purple","indigo","slateblue","darkslateblue","mediumslateblue","greenyellow","chartreuse","lawngreen","lime","limegreen","palegreen","lightgreen","mediumspringgreen","springgreen","mediumseagreen","seagreen","forestgreen","green","darkgreen","yellowgreen","olivedrab","olive","darkolivegreen","mediumaquamarine","darkseagreen","lightseagreen","darkcyan","teal","aqua","cyan","lightcyan","paleturquoise","aquamarine","turquoise","mediumturquoise","darkturquoise","cadetblue","steelblue","lightsteelblue","powderblue","lightblue","skyblue","lightskyblue","deepskyblue","dodgerblue","cornflowerblue","royalblue","blue","mediumblue","darkblue","navy","midnightblue","cornsilk","blanchedalmond","bisque","navajowhite","wheat","burlywood","tan","rosybrown","sandybrown","goldenrod","darkgoldenrod","peru","chocolate","saddlebrown","sienna","brown","maroon","white","snow","honeydew","mintcream","azure","aliceblue","ghostwhite","whitesmoke","seashell","beige","oldlace","floralwhite","ivory","antiquewhite","linen","lavenderblush","mistyrose","gainsboro","lightgray","silver","darkgray","gray","dimgray","lightslategray","slategray","darkslategray","black","fromUpperCaseToHyphen","ruleLabel","character","charUpper","isupper","currentChar","test","parts","toLowerCase","makeRawRuleLabel","className","splitedClassName","toRawStyleSheet","sheetRules","rawStyleSheet","nestedPseudos","j","currnetRawRule","currentRule","ruleskeys","keys","rules","styleLabel","currentKey","pseudoClassName","insertStyleSheet","dynamicSheet","result_id","window","document","getElementById","styleSheet","createElement","setAttribute","contetRaw","raw","textContent","head","appendChild","editStyleSheet","removeStyleSheet","htmlObject","removeChild","existStyleSheet","makeStyleSheet","DropzonePropsDefault","children","uploadOnDrop","style","disableRipple","clickable","view","maxHeight","minHeight","config","headers","onUploadFinish","onClean","behaviour","localization","disableScroll","createRippleFromElement","element","event","buttonAnchorDiv","height","width","circle","diameter","clientWidth","clientHeight","radius","left","clientX","offsetLeft","top","clientY","offsetTop","classList","add","backgroundColor","ripple","getElementsByClassName","remove","setTimeout","parseSize","sizeStr","Info","props","colorFill","onClick","finalSize","React","cursor","xmlns","viewBox","fill","d","opacity","CheckCircle","finalStyle","DoDisturb","Cancel","Visibility","ViewList","enableBackground","ViewGrid","UploadDone","points","x","UploadError","Clean","PlayIcon","UploadingProcess","spin","finalClassname","Upload","DropzoneHeader","onReset","onChangeView","onUploadStart","onUploadingStart","urlPresent","hideViewIcon","DropzoneHeaderLocalizer","handleClean","handleStartUploading","stopPropagation","Fragment","maxFileSizeMessenger","validFileSizeMessenger","makeHeader","HeaderItem","index","key","display","DropzoneFooter","message","DropzoneFooterLocalizer","accepCustomMessenger","FileItemContainer","finalView","DropzoneLabel","DEFAULT_CONFIG","uploadPromiseAxios","url","method","localMethod","fileToUpload","formData","FormData","append","configParams","response","axios","post","_b","patch","put","data","uploadedFile","serverResponse","responseDui","Dropzone","onDrop","onChange","fakeUploading","dz_ui_ripple_ref","useRef","useEffect","files","fileList","output","fileListvalidator","Infinity","ValidationErrorLocalizer","inputRef","useState","isDragging","setIsDragging","_c","setFiles","_d","localView","setLocalView","_e","localMessage","setLocalMessage","_f","setOnUploadingStart","classNameCreated","offset","idStyles","setIdStyles","styleInjected","setStyleInjected","setClassNameCreated","border","idStyle","handleInserStyle","useDropzoneStyles","finalClassName","_g","setNumberOfValidFiles","filter","uploadFiles","totalNumber","missingUpload","totalRejected","currentCountUpload","uploadingMessenger","uploadStartFiles","updatedList","serverResponses","currentFile","payload","uploadedFile_1","finishUploadMessenger","handleFilesChange","preValidatedFiles","remainingValids","localValidator","countdown","validatedFile","MaxFileErrorMessenger","onDragOver","evt","preventDefault","dataTransfer","dropEffect","referenceInput","current","click","ref","newView","filesCleaned","process","env","NODE_ENV","console","marginBottom","marginTop","onDragLeave","target","multiple","FileItemPropsDefault","onDelete","preview","info","hd","onlyImage","imageUrl","elevation","alwaysActive","PaperPropsDefault","shadow","onMouseEnter","onMouseLeave","component","Paper","classNameFinal","Loader","preserveAspectRatio","strokeWidth","stroke","clipPath","transform","attributeName","calcMode","values","keyTimes","dur","begin","repeatCount","FileItemStatus","FileItemStatusLocalizer","FileItemFullInfoLayer","showInfo","onClose","fileType","resultOnTooltip","FileItemFullInfoLocalizer","flexWrap","alignItems","justifyContent","margin","right","FileItemImage","imageSource","src","alt","FileItemMainLayer","isImage","isVideo","onOpenInfo","onOpenImage","onOpenVideo","sizeFormatted","hovering","uploadComplete","setUploadComplete","Tooltip","open","statusClassName","setSatusClassName","setMessage","reduce","acum","curr","handleChangeStatus","FileItem","onSee","onWatch","setHOvering","setIsImage","setIsVideo","setUrl","setImageSource","setShowInfo","init","mimeResume","mimeType","applicationSelector","audioSelector","videoSelector","textSelector","imageSelector","fontSelector","mimeSelector","extension","genericMime","extention","extensionSelector","getURLFileIco","base64Str","maxWidth","img_1","Image","canvas","MAX_WIDTH","MAX_HEIGHT","ctx","getContext","drawImage","toDataURL","cutt","word","newWord","shrinkWord","FullScreenPreview","imgSource","openImage","handleClose","VideoPreview","videoSrc","openVideo","autoplay","controls","videoRef","source","setSource","newVideoSrc","URL","createObjectURL","load","autoPlay","innerHTML","___$insertStyle","darkerColor","percentage","darkedColor","components","parseInt","MaterialButtonStylizer","getNext","nextButtonClassNameNumber","makeDynamicStyle","variant","disabled","textColor","nextClassName","MaterialButtonDefaultProps","MaterialButton","href","setNextClassName","removeStyle","class_name","nextClassNameVar","makeClassName","classname","btn_ref","span_ref","currentTarget","createRipple","InputButtonDefaultProps","InputButton"],"mappings":"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,EAAW,MAAMC,QAAQ,GAAK,MACjCD,EAAW,YACPA,EAAW,KAAQ,MAAMC,QAAQ,GAAK,MAC1CD,EAAW,eACNA,EAAW,KAAQ,KAAQ,MAAMC,QAAQ,GAAK,OAE7CD,EAAW,KAAQ,KAAQ,KAAQ,MAAMC,QAAQ,GAAK,MAbhE,WAuBFC,EAAS,SAACC,GACnB,IACMC,EADK,kBACOC,KAAKF,GACvB,OAAIC,EACOA,EAAO,GAEP,ICmCFE,EAAO,wGAiBPC,EAAQ,wGCiLfC,EAA4B,CAC9BC,IAAK,6EACLC,MAAO,6EACPC,MAAO,6EACPC,ID/Ne,wGCgOfC,MD9NiB,wGC+NjBC,IDhOe,wGCiOfC,ID5MmB,wGC6MnBC,IDhOe,wGCiOfC,IDhOe,wGCiOfV,MAAOA,EACPW,IDjOe,wGCkOfC,GDjOc,wGCkOdC,IDjOe,wGCkOfC,IDhOe,wGCiOfC,IDhOe,wGCiOfC,IDhOe,wGCiOfC,IDhOe,wGCiOfC,KD/NgB,wGCgOhBC,OD9NkB,wGC+NlBC,ID5Ne,wGC6NfC,KD3NgB,wGC4NhBC,KDzNgB,wGC0NhBC,ID3Ne,wGC4NfxB,KAAMA,EAENyB,UD3NqB,wGC4NrBC,IDxNe,wGCyNfC,KDvNgB,wGCwNhBC,WDzNsB,wGC0NtBC,KDvNgB,wGCwNhBC,ODvNkB,wGCwNlBC,KDvNgB,wGCyNhBC,IDvNe,wGCwNfC,IDvNe,wGCwNfC,KDvNgB,wGCwNhBC,KDvNgB,wGCwNhBC,KAAMnC,EACNoC,IDvNe,wGCwNfC,IDvNe,wGCwNfC,IDvNe,wGCwNfC,IDrNe,wGCsNfC,IDrNe,wGCsNfC,IDrNe,wGCsNfC,KDpNgB,wGCqNhBC,IDpNe,wGCqNfC,IDlNe,wGCmNfC,IDrNe,wGCsNfC,IDrNe,wGCsNfC,KDpNgB,wGCqNhBC,IDlNe,wGCmNfC,ID9Me,wGC+MfC,ID5Me,wGC6MfC,KD5MgB,wGC6MhBC,GD3Mc,wGC6MdC,ID3Me,wGC4MfC,IDrNe,wGCsNfC,KD3MgB,wGC4MhBC,ID3Me,wGC6MfC,WD5MsB,wGC6MtBC,KDhNgB,wGCiNhBC,ID5Me,wGC6MfC,ID3Me,wGC4MfC,KD1MgB,wGC2MhBC,KD5MgB,wGC6M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"}
\No newline at end of file